diff --git a/.gitignore b/.gitignore
index c0fc44dc4f334af3ea7f4d6f6b00327be4938fa0..01718a5d19c92f5cd4b1914dbf9f58c8c07da2c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,6 @@
-*/.ipynb_checkpoints/
+.DS_Store
+.ipynb_checkpoints
+notebooks/log
+notebooks/.metals
+notebooks/.vscode
+tmp
diff --git a/examples/.ipynb_checkpoints/elixir-checkpoint.ipynb b/examples/.ipynb_checkpoints/elixir-checkpoint.ipynb
deleted file mode 100644
index ad0f17edbb6dd5b52cd75e7cec398640c28bfdeb..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/elixir-checkpoint.ipynb
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "d72709d9-35e9-4f30-a4c0-89dfcddde943",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\"1.12.3\""
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "System.version()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "13f86384-f6d7-4a76-a82e-4bcea2de791d",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello world\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       ":ok"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "IO.puts \"Hello world\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5630d7d5-af05-44da-8e32-1acd076693eb",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "elixir (elixir)",
-   "language": "elixir",
-   "name": "elixir"
-  },
-  "language_info": {
-   "codemirror_mode": "ruby",
-   "file_extension": ".ex",
-   "name": "elixir",
-   "version": "1.12.3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/erlang-checkpoint.ipynb b/examples/.ipynb_checkpoints/erlang-checkpoint.ipynb
deleted file mode 100644
index e2713886de2687a0ce1033f50f952eb4742407c3..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/erlang-checkpoint.ipynb
+++ /dev/null
@@ -1,120 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "d7287256-1d5f-44da-9f68-b592fcb330a1",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\"24\"\n"
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "erlang:system_info(otp_release)."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "497b5c1e-f0e1-490f-96f2-9e53d00675fb",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\"12.3.2.13\"\n"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "erlang:system_info(version)."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "0aff1a74-ed6d-4d92-b4b2-3f97b14c40f3",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{module,sample}\n"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "-module(sample).\n",
-    " -export([hello_world/0]).\n",
-    " hello_world()->\n",
-    "   io:format(\"Hello World~n\")."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "id": "81b9b18e-bf02-4843-bce2-76a3ab6917a4",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "ok\n"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "sample:hello_world()."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3d73ab0d-3a5b-4f30-bcb3-852fb104c34f",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "erlang (erlang)",
-   "language": "erlang",
-   "name": "erlang"
-  },
-  "language_info": {
-   "file_extension": ".erl",
-   "name": "erlang",
-   "version": "24.3.4.13"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/golang-checkpoint.ipynb b/examples/.ipynb_checkpoints/golang-checkpoint.ipynb
deleted file mode 100644
index efe85731938bd33102459034c3b87b7c79d6c9d8..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/golang-checkpoint.ipynb
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "e741a74a-78c1-4a81-b28c-04bf94636885",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Go: go1.19.1 (linux_amd64)\n",
-      "User: root\n",
-      "Working dir: /jupyter/notebooks/jupyter-all/examples\n",
-      "NumCPU: 32\n"
-     ]
-    }
-   ],
-   "source": [
-    "import (\n",
-    "    \"fmt\"\n",
-    "    \"os\"\n",
-    "    \"os/user\"\n",
-    "    \"runtime\"\n",
-    ")\n",
-    "\n",
-    "{\n",
-    "    user, _ := user.Current()\n",
-    "    fmt.Printf(\"Go: %s (%s_%s)\\n\", runtime.Version(), runtime.GOOS, runtime.GOARCH)\n",
-    "    fmt.Printf(\"User: %s\\n\", user.Username)\n",
-    "    wd, _ := os.Getwd()\n",
-    "    fmt.Printf(\"Working dir: %s\\n\", wd)\n",
-    "    fmt.Printf(\"NumCPU: %d\\n\", runtime.NumCPU())\n",
-    "}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3c46691d-e553-4b61-b714-6eb4e7c6319c",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Go",
-   "language": "go",
-   "name": "gophernotes"
-  },
-  "language_info": {
-   "codemirror_mode": "",
-   "file_extension": ".go",
-   "mimetype": "",
-   "name": "go",
-   "nbconvert_exporter": "",
-   "pygments_lexer": "",
-   "version": "go1.19.1"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/haskell-checkpoint.ipynb b/examples/.ipynb_checkpoints/haskell-checkpoint.ipynb
deleted file mode 100644
index 90cc915a972a97c95d7629b3b46d98808e71203d..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/haskell-checkpoint.ipynb
+++ /dev/null
@@ -1,716 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "1bf0ed67-d8ce-4fe7-93d7-58a73a51c80d",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<style>/* Styles used for the Hoogle display in the pager */\n",
-       ".hoogle-doc {\n",
-       "display: block;\n",
-       "padding-bottom: 1.3em;\n",
-       "padding-left: 0.4em;\n",
-       "}\n",
-       ".hoogle-code {\n",
-       "display: block;\n",
-       "font-family: monospace;\n",
-       "white-space: pre;\n",
-       "}\n",
-       ".hoogle-text {\n",
-       "display: block;\n",
-       "}\n",
-       ".hoogle-name {\n",
-       "color: green;\n",
-       "font-weight: bold;\n",
-       "}\n",
-       ".hoogle-head {\n",
-       "font-weight: bold;\n",
-       "}\n",
-       ".hoogle-sub {\n",
-       "display: block;\n",
-       "margin-left: 0.4em;\n",
-       "}\n",
-       ".hoogle-package {\n",
-       "font-weight: bold;\n",
-       "font-style: italic;\n",
-       "}\n",
-       ".hoogle-module {\n",
-       "font-weight: bold;\n",
-       "}\n",
-       ".hoogle-class {\n",
-       "font-weight: bold;\n",
-       "}\n",
-       "\n",
-       ".get-type {\n",
-       "color: green;\n",
-       "font-weight: bold;\n",
-       "font-family: monospace;\n",
-       "display: block;\n",
-       "white-space: pre-wrap;\n",
-       "}\n",
-       ".show-type {\n",
-       "color: green;\n",
-       "font-weight: bold;\n",
-       "font-family: monospace;\n",
-       "margin-left: 1em;\n",
-       "}\n",
-       ".mono {\n",
-       "font-family: monospace;\n",
-       "display: block;\n",
-       "}\n",
-       ".err-msg {\n",
-       "color: red;\n",
-       "font-style: italic;\n",
-       "font-family: monospace;\n",
-       "white-space: pre;\n",
-       "display: block;\n",
-       "}\n",
-       "#unshowable {\n",
-       "color: red;\n",
-       "font-weight: bold;\n",
-       "}\n",
-       ".err-msg.in.collapse {\n",
-       "padding-top: 0.7em;\n",
-       "}\n",
-       "\n",
-       ".highlight-code {\n",
-       "white-space: pre;\n",
-       "font-family: monospace;\n",
-       "}\n",
-       "\n",
-       ".suggestion-warning { \n",
-       "font-weight: bold;\n",
-       "color: rgb(200, 130, 0);\n",
-       "}\n",
-       ".suggestion-error { \n",
-       "font-weight: bold;\n",
-       "color: red;\n",
-       "}\n",
-       ".suggestion-name {\n",
-       "font-weight: bold;\n",
-       "}\n",
-       "\n",
-       "</style><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Maybe l) -> (Maybe r) -> m -> m</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Maybe l -> (Maybe r) -> m -> m</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Maybe r) -> m -> m</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Maybe r -> m -> m</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Maybe l) -> (Maybe r) -> m -> m</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Maybe l -> (Maybe r) -> m -> m</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Maybe r) -> m -> m</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Maybe r -> m -> m</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Use Just</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">fromMaybe\n",
-       "  False\n",
-       "  ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Just True\n",
-       "  ==\n",
-       "    ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Use maybe</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">fromMaybe\n",
-       "  False\n",
-       "  ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">maybe\n",
-       "  False (isJust . HashMap.lookup l) (HashMap.lookup r (rightMap m))</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">isJust . HashMap.lookup l <$> (HashMap.lookup r (rightMap m))</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">(isJust . HashMap.lookup l) <$> HashMap.lookup r (rightMap m)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Right)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Right</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Right) <$> (HashMap.lookup l (leftMap m))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">(Right) <$> HashMap.lookup l (leftMap m)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Left)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">Left</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(Left) <$> (HashMap.lookup r (rightMap m))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">(Left) <$> HashMap.lookup r (rightMap m)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(HashMap.empty)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">HashMap.empty</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(HashMap.empty)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">HashMap.empty</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Eta reduce</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">adjustFunc r old\n",
-       "  = HashMap.update\n",
-       "      (\\ old -> if old <= 1 then Nothing else Just (old - 1)) r old</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">adjustFunc\n",
-       "  = HashMap.update\n",
-       "      (\\ old -> if old <= 1 then Nothing else Just (old - 1))</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(lm)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">lm</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(rm)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">rm</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(insertFunc)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">insertFunc</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(insertFunc)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">insertFunc</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Eta reduce</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">insertFunc new old = insertFuncArray (HashMap.toList new) old</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">insertFunc new = insertFuncArray (HashMap.toList new)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Avoid lambda</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">\\ n o -> n + o</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">(+)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">asListOuterLeft (HashMap.toList lm)\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ asListOrphanRight (HashMap.toList rm)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(asListOrphanRight ks)\n",
-       "  ++ if (m == HashMap.empty) then [(Nothing, Just r)] else []</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">asListOrphanRight ks\n",
-       "  ++ if (m == HashMap.empty) then [(Nothing, Just r)] else []</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Use list comprehension</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">if (m == HashMap.empty) then [(Nothing, Just r)] else []</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">([(Nothing, Just r) | m == HashMap.empty])</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">if (m == HashMap.empty) then [(Nothing, Just r)] else []</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">if m == HashMap.empty then [(Nothing, Just r)] else []</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">if (m == HashMap.empty) then\n",
-       "    [(Just l, Nothing)]\n",
-       "else\n",
-       "    assocLeft l (HashMap.toList m)</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">if m == HashMap.empty then\n",
-       "    [(Just l, Nothing)]\n",
-       "else\n",
-       "    assocLeft l (HashMap.toList m)</div></div><div class=\"suggestion-name\" style=\"clear:both;\">Redundant bracket</div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Found:</div><div class=\"highlight-code\" id=\"haskell\">(pairs l r c) ++ assocLeft l rs</div></div><div class=\"suggestion-row\" style=\"float: left;\"><div class=\"suggestion-warning\">Why Not:</div><div class=\"highlight-code\" id=\"haskell\">pairs l r c ++ assocLeft l rs</div></div>"
-      ],
-      "text/plain": [
-       "Line 33: Redundant bracket\n",
-       "Found:\n",
-       "(Maybe l) -> (Maybe r) -> m -> m\n",
-       "Why not:\n",
-       "Maybe l -> (Maybe r) -> m -> mLine 34: Redundant bracket\n",
-       "Found:\n",
-       "(Maybe r) -> m -> m\n",
-       "Why not:\n",
-       "Maybe r -> m -> mLine 39: Redundant bracket\n",
-       "Found:\n",
-       "(Maybe l) -> (Maybe r) -> m -> m\n",
-       "Why not:\n",
-       "Maybe l -> (Maybe r) -> m -> mLine 40: Redundant bracket\n",
-       "Found:\n",
-       "(Maybe r) -> m -> m\n",
-       "Why not:\n",
-       "Maybe r -> m -> mLine 52: Use Just\n",
-       "Found:\n",
-       "fromMaybe\n",
-       "  False\n",
-       "  ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))\n",
-       "Why not:\n",
-       "Just True\n",
-       "  ==\n",
-       "    ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))Line 52: Use maybe\n",
-       "Found:\n",
-       "fromMaybe\n",
-       "  False\n",
-       "  ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))\n",
-       "Why not:\n",
-       "maybe\n",
-       "  False (isJust . HashMap.lookup l) (HashMap.lookup r (rightMap m))Line 52: Redundant bracket\n",
-       "Found:\n",
-       "(isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m))\n",
-       "Why not:\n",
-       "isJust . HashMap.lookup l <$> (HashMap.lookup r (rightMap m))Line 52: Redundant bracket\n",
-       "Found:\n",
-       "(isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m))\n",
-       "Why not:\n",
-       "(isJust . HashMap.lookup l) <$> HashMap.lookup r (rightMap m)Line 57: Redundant bracket\n",
-       "Found:\n",
-       "(Right)\n",
-       "Why not:\n",
-       "RightLine 57: Redundant bracket\n",
-       "Found:\n",
-       "(Right) <$> (HashMap.lookup l (leftMap m))\n",
-       "Why not:\n",
-       "(Right) <$> HashMap.lookup l (leftMap m)Line 58: Redundant bracket\n",
-       "Found:\n",
-       "(Left)\n",
-       "Why not:\n",
-       "LeftLine 58: Redundant bracket\n",
-       "Found:\n",
-       "(Left) <$> (HashMap.lookup r (rightMap m))\n",
-       "Why not:\n",
-       "(Left) <$> HashMap.lookup r (rightMap m)Line 68: Redundant bracket\n",
-       "Found:\n",
-       "(HashMap.empty)\n",
-       "Why not:\n",
-       "HashMap.emptyLine 68: Redundant bracket\n",
-       "Found:\n",
-       "(HashMap.empty)\n",
-       "Why not:\n",
-       "HashMap.emptyLine 109: Eta reduce\n",
-       "Found:\n",
-       "adjustFunc r old\n",
-       "  = HashMap.update\n",
-       "      (\\ old -> if old <= 1 then Nothing else Just (old - 1)) r old\n",
-       "Why not:\n",
-       "adjustFunc\n",
-       "  = HashMap.update\n",
-       "      (\\ old -> if old <= 1 then Nothing else Just (old - 1))Line 112: Redundant bracket\n",
-       "Found:\n",
-       "(lm)\n",
-       "Why not:\n",
-       "lmLine 141: Redundant bracket\n",
-       "Found:\n",
-       "(rm)\n",
-       "Why not:\n",
-       "rmLine 169: Redundant bracket\n",
-       "Found:\n",
-       "(insertFunc)\n",
-       "Why not:\n",
-       "insertFuncLine 170: Redundant bracket\n",
-       "Found:\n",
-       "(insertFunc)\n",
-       "Why not:\n",
-       "insertFuncLine 173: Eta reduce\n",
-       "Found:\n",
-       "insertFunc new old = insertFuncArray (HashMap.toList new) old\n",
-       "Why not:\n",
-       "insertFunc new = insertFuncArray (HashMap.toList new)Line 175: Avoid lambda\n",
-       "Found:\n",
-       "\\ n o -> n + o\n",
-       "Why not:\n",
-       "(+)Line 199: Redundant bracket\n",
-       "Found:\n",
-       "(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))\n",
-       "Why not:\n",
-       "asListOuterLeft (HashMap.toList lm)\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))Line 199: Redundant bracket\n",
-       "Found:\n",
-       "(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ (asListOrphanRight (HashMap.toList rm))\n",
-       "Why not:\n",
-       "(asListOuterLeft (HashMap.toList lm))\n",
-       "  ++ asListOrphanRight (HashMap.toList rm)Line 207: Redundant bracket\n",
-       "Found:\n",
-       "(asListOrphanRight ks)\n",
-       "  ++ if (m == HashMap.empty) then [(Nothing, Just r)] else []\n",
-       "Why not:\n",
-       "asListOrphanRight ks\n",
-       "  ++ if (m == HashMap.empty) then [(Nothing, Just r)] else []Line 208: Use list comprehension\n",
-       "Found:\n",
-       "if (m == HashMap.empty) then [(Nothing, Just r)] else []\n",
-       "Why not:\n",
-       "([(Nothing, Just r) | m == HashMap.empty])Line 208: Redundant bracket\n",
-       "Found:\n",
-       "if (m == HashMap.empty) then [(Nothing, Just r)] else []\n",
-       "Why not:\n",
-       "if m == HashMap.empty then [(Nothing, Just r)] else []Line 227: Redundant bracket\n",
-       "Found:\n",
-       "if (m == HashMap.empty) then\n",
-       "    [(Just l, Nothing)]\n",
-       "else\n",
-       "    assocLeft l (HashMap.toList m)\n",
-       "Why not:\n",
-       "if m == HashMap.empty then\n",
-       "    [(Just l, Nothing)]\n",
-       "else\n",
-       "    assocLeft l (HashMap.toList m)Line 232: Redundant bracket\n",
-       "Found:\n",
-       "(pairs l r c) ++ assocLeft l rs\n",
-       "Why not:\n",
-       "pairs l r c ++ assocLeft l rs"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "{-# LANGUAGE MultiParamTypeClasses #-}\n",
-    "{-# LANGUAGE FunctionalDependencies #-}\n",
-    "{-# LANGUAGE FlexibleInstances #-}\n",
-    "{-# LANGUAGE TypeFamilies #-}\n",
-    "{-# LANGUAGE ScopedTypeVariables #-}\n",
-    "  \n",
-    "import Data.Maybe\n",
-    "import qualified Data.Hashable as Hashable\n",
-    "import qualified Data.HashMap.Lazy as HashMap\n",
-    "import qualified Data.HashSet as HashSet\n",
-    "import qualified GHC.Exts as Exts\n",
-    "\n",
-    "---------------------------------------------------------------\n",
-    "--                 Type definitions\n",
-    "---------------------------------------------------------------\n",
-    "\n",
-    "type Multiset k = HashMap.HashMap k Int\n",
-    "type Multimap k v = HashMap.HashMap k (Multiset v)\n",
-    "  \n",
-    "class ( Eq l,\n",
-    "        Hashable.Hashable l,\n",
-    "        Eq r,\n",
-    "        Hashable.Hashable r,\n",
-    "        Eq m,\n",
-    "        Hashable.Hashable m,\n",
-    "        Exts.IsList m\n",
-    "       ) => Multibimap m l r | m -> l, m -> r where\n",
-    "  leftMap :: m ->\n",
-    "             Multimap l r\n",
-    "  rightMap :: m ->\n",
-    "              Multimap r l\n",
-    "  \n",
-    "  insert :: (Maybe l) ->\n",
-    "            (Maybe r) ->\n",
-    "            m ->\n",
-    "            m\n",
-    "  insert Nothing Nothing m = m\n",
-    "  \n",
-    "  delete :: (Maybe l) ->\n",
-    "            (Maybe r) ->\n",
-    "            m ->\n",
-    "            m\n",
-    "  delete Nothing Nothing m = m\n",
-    "  \n",
-    "  contains :: Maybe l ->\n",
-    "              Maybe r ->\n",
-    "              m ->\n",
-    "              Bool\n",
-    "  contains Nothing Nothing m = False\n",
-    "  contains (Just l) Nothing m = isJust (HashMap.lookup l (leftMap m))\n",
-    "  contains Nothing (Just r) m = isJust (HashMap.lookup r (rightMap m))\n",
-    "  contains (Just l) (Just r) m = fromMaybe False ((isJust . HashMap.lookup l) <$> (HashMap.lookup r (rightMap m)))\n",
-    "      \n",
-    "  lookup :: Either l r ->\n",
-    "            m ->\n",
-    "            Maybe (Either (Multiset l) (Multiset r))\n",
-    "  lookup (Left l) m = (Right) <$> (HashMap.lookup l (leftMap m))\n",
-    "  lookup (Right r) m = (Left) <$> (HashMap.lookup r (rightMap m))\n",
-    "  \n",
-    "\n",
-    "-------------------------------------------------------------------\n",
-    "--                  Data Type Implementation                     --\n",
-    "--                       HashMultibimap                          --\n",
-    "-------------------------------------------------------------------\n",
-    "\n",
-    "data HashMultibimap l r = HashMultibimap (Multimap l r) (Multimap r l) deriving (Show, Read)\n",
-    "\n",
-    "empty = HashMultibimap (HashMap.empty) (HashMap.empty)\n",
-    "\n",
-    "\n",
-    "--                     Eq Instance\n",
-    "\n",
-    "instance ( Eq l,\n",
-    "           Eq r) => Eq (HashMultibimap l r) where\n",
-    "  (HashMultibimap la ra) == (HashMultibimap lb rb) = (la == lb) && (ra == rb)\n",
-    "  \n",
-    "\n",
-    "--                  Hashable Instance\n",
-    "\n",
-    "instance ( Hashable.Hashable l,\n",
-    "           Hashable.Hashable r) => Hashable.Hashable (HashMultibimap l r) where\n",
-    "  hashWithSalt salt (HashMultibimap lm _) = Hashable.hashWithSalt salt lm\n",
-    "  \n",
-    "\n",
-    "--                  IsList Instance\n",
-    "\n",
-    "instance ( Eq l,\n",
-    "           Hashable.Hashable l,\n",
-    "           Eq r,\n",
-    "           Hashable.Hashable r) => Exts.IsList (HashMultibimap l r) where\n",
-    "  type Item (HashMultibimap l r) = (Maybe l, Maybe r)\n",
-    "  fromList = fromList\n",
-    "  toList = toList\n",
-    "\n",
-    "\n",
-    "--                Multibimap Instance\n",
-    "\n",
-    "instance ( Eq l,\n",
-    "           Hashable.Hashable l,\n",
-    "           Eq r,\n",
-    "           Hashable.Hashable r\n",
-    "         ) => Multibimap (HashMultibimap l r) l r where\n",
-    "           \n",
-    "  leftMap (HashMultibimap lm _) = lm\n",
-    "  rightMap (HashMultibimap _ rm) = rm\n",
-    "  \n",
-    "  delete (Just l) (Just r) (HashMultibimap lm rm) = HashMultibimap (HashMap.adjust (adjustFunc r) l lm) (HashMap.adjust (adjustFunc l) r rm) where\n",
-    "    adjustFunc :: (Eq k, Hashable.Hashable k) => k -> Multiset k -> Multiset k\n",
-    "    adjustFunc r old = HashMap.update (\\old -> if old <= 1 then Nothing else Just (old-1)) r old\n",
-    "  \n",
-    "  delete Nothing (Just r) m@(HashMultibimap lm rm) = cleanFinal r (clean (keysToClean r (rightMap m)) r m) where\n",
-    "    cleanFinal r (HashMultibimap lm rm) = HashMultibimap (lm) (HashMap.delete r rm)\n",
-    "    \n",
-    "    clean :: [l] -> \n",
-    "             r -> \n",
-    "             HashMultibimap l r ->\n",
-    "             HashMultibimap l r  \n",
-    "    clean [] r m = m\n",
-    "    clean (l:ls) r m = clean ls r (HashMultibimap (HashMap.insert l (multisetCleaned l r m) (leftMap m)) (rightMap m))\n",
-    "    \n",
-    "    multisetCleaned :: ( Multibimap m l r ) => l ->\n",
-    "                                               r -> \n",
-    "                                               m-> \n",
-    "                                               Multiset r\n",
-    "    multisetCleaned l r m = HashMap.delete r (multisetToClean l (leftMap m))\n",
-    "    \n",
-    "    multisetToClean :: l ->\n",
-    "                       Multimap l r ->\n",
-    "                       Multiset r\n",
-    "    multisetToClean r m = fromMaybe HashMap.empty (HashMap.lookup r m)\n",
-    "    \n",
-    "    keysToClean :: r ->\n",
-    "                   Multimap r l ->\n",
-    "                   [l]\n",
-    "    keysToClean r m =  HashMap.keys (fromMaybe HashMap.empty (HashMap.lookup r m))\n",
-    "\n",
-    "\n",
-    "  \n",
-    "  delete (Just l) Nothing m = cleanFinal l (clean (keysToClean l (leftMap m)) l m) where\n",
-    "    \n",
-    "    cleanFinal l m@(HashMultibimap lm rm) = HashMultibimap (HashMap.delete l lm) (rm)\n",
-    "    \n",
-    "    clean :: [r] -> \n",
-    "             l -> \n",
-    "             HashMultibimap l r ->\n",
-    "             HashMultibimap l r  \n",
-    "    clean [] l m = m\n",
-    "    clean (r:rs) l m = clean rs l (HashMultibimap (leftMap m) (HashMap.insert r (multisetCleaned l r m) (rightMap m)))\n",
-    "    \n",
-    "    multisetCleaned :: ( Multibimap m l r) => l ->\n",
-    "                                              r -> \n",
-    "                                              m-> \n",
-    "                                              Multiset l\n",
-    "    multisetCleaned l r m = HashMap.delete l (multisetToClean r (rightMap m))\n",
-    "    \n",
-    "    multisetToClean :: r ->\n",
-    "                       Multimap r l ->\n",
-    "                       Multiset l\n",
-    "    multisetToClean r m = fromMaybe HashMap.empty (HashMap.lookup r m)\n",
-    "    \n",
-    "    keysToClean :: l ->\n",
-    "                   Multimap l r ->\n",
-    "                   [r]\n",
-    "    keysToClean l m =  HashMap.keys (fromMaybe HashMap.empty (HashMap.lookup l m))\n",
-    "    \n",
-    "  insert (Just l) Nothing m = HashMultibimap (HashMap.insertWith (\\new old -> old) l HashMap.empty (leftMap m)) (rightMap m)\n",
-    "  insert Nothing (Just r) m = HashMultibimap (leftMap m) (HashMap.insertWith (\\new old -> old) r HashMap.empty (rightMap m))\n",
-    "  insert (Just l) (Just r) m = HashMultibimap (insertLeft l r m) (insertRight l r m) where\n",
-    "    insertRight l r m = HashMap.insertWith (insertFunc) r (HashMap.fromList [(l,1)]) (rightMap m)\n",
-    "    insertLeft l r m = HashMap.insertWith (insertFunc) l (HashMap.fromList [(r,1)]) (leftMap m)\n",
-    "    \n",
-    "    insertFunc :: (Eq k, Hashable.Hashable k) => Multiset k -> Multiset k -> Multiset k\n",
-    "    insertFunc new old = insertFuncArray (HashMap.toList new) old\n",
-    "    insertFuncArray [] old = old\n",
-    "    insertFuncArray ((k, v):ns) old = insertFuncArray ns (HashMap.insertWith (\\n o -> n+o) k v old)\n",
-    "    \n",
-    "\n",
-    "---------------------------------------------------------------\n",
-    "--         Not exported from module\n",
-    "---------------------------------------------------------------\n",
-    "\n",
-    "\n",
-    "--             List Conversion\n",
-    "\n",
-    "fromList :: ( Eq l,\n",
-    "              Hashable.Hashable l,\n",
-    "              Eq r,\n",
-    "              Hashable.Hashable r) => [(Maybe l, Maybe r)] ->\n",
-    "                                      HashMultibimap l r\n",
-    "fromList [] = empty\n",
-    "fromList ((ml, mr):ps) = insert ml mr (fromList ps)\n",
-    "\n",
-    "\n",
-    "toList :: ( Eq l,\n",
-    "            Hashable.Hashable l,\n",
-    "            Eq r,\n",
-    "            Hashable.Hashable r) =>  HashMultibimap l r ->\n",
-    "                                     [(Maybe l, Maybe r)]\n",
-    "toList (HashMultibimap lm rm) = (asListOuterLeft (HashMap.toList lm)) ++ (asListOrphanRight (HashMap.toList rm)) where\n",
-    "  \n",
-    "  asListOrphanRight :: ( Eq l,\n",
-    "                         Hashable.Hashable l,\n",
-    "                         Eq r,\n",
-    "                         Hashable.Hashable r) => [(r, Multiset l)] ->\n",
-    "                                                 [(Maybe l, Maybe r)]\n",
-    "  asListOrphanRight [] = []\n",
-    "  asListOrphanRight ((r, m):ks) = (asListOrphanRight ks) ++\n",
-    "                                  if (m == HashMap.empty)\n",
-    "                                    then [(Nothing, Just r)]\n",
-    "                                    else []\n",
-    "  \n",
-    "  asListOuterLeft :: ( Eq l,\n",
-    "                       Hashable.Hashable l,\n",
-    "                       Eq r,\n",
-    "                       Hashable.Hashable r) => [(l, Multiset r)] ->\n",
-    "                                               [(Maybe l, Maybe r)]\n",
-    "                                               \n",
-    "  asListOuterLeft [] = []\n",
-    "  asListOuterLeft ((l, m):ks) = assocsLeft (Just l, m) ++ asListOuterLeft ks\n",
-    "  \n",
-    "  assocsLeft :: ( Eq l,\n",
-    "                  Hashable.Hashable l,\n",
-    "                  Eq r,\n",
-    "                  Hashable.Hashable r) => (Maybe l, Multiset r) ->\n",
-    "                                          [(Maybe l, Maybe r)]\n",
-    "                                         \n",
-    "  assocsLeft (Just l, m) = if (m == HashMap.empty)\n",
-    "                             then [(Just l, Nothing)] \n",
-    "                             else assocLeft l (HashMap.toList m)\n",
-    "  \n",
-    "  assocLeft l [] = []\n",
-    "  assocLeft l ((r, c):rs) = (pairs l r c) ++ assocLeft l rs\n",
-    "  \n",
-    "  pairs l r 0 = []\n",
-    "  pairs l r c = (Just l, Just r) : pairs l r (c - 1)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "b2b27113-285a-4de6-bb4a-1f988ec1e62b",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"b\",1),(\"a\",2),(\"c\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"c\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Left (fromList [(5,2)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Left (fromList [(5,1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Left (fromList [(5,1),(6,1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "a = insert (Just 6) (Just \"c\") $\n",
-    "    insert (Just 5) (Just \"c\") $\n",
-    "    insert (Just 5) (Just \"b\") $\n",
-    "    insert (Just 5) (Just \"a\") $\n",
-    "    insert (Just 5) (Just \"a\") empty\n",
-    "\n",
-    "lookup (Left 5) a\n",
-    "lookup (Left 6) a\n",
-    "lookup (Right \"a\") a\n",
-    "lookup (Right \"b\") a\n",
-    "lookup (Right \"c\") a\n",
-    "\n",
-    "contains (Just 5) (Just \"c\") a"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "0d7a5935-ae5f-433b-bdf0-b15b6329992a",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Nothing"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"c\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "b = delete (Just 5) Nothing a\n",
-    "\n",
-    "lookup (Left 5) b\n",
-    "lookup (Left 6) b"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a98b3909-50a3-4583-8c15-59aaf42b4d1b",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Nothing"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"g\",1),(\"c\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"g\",1),(\"c\",2)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "c = insert (Just 7) (Just \"c\") $\n",
-    "    insert (Just 7) (Just \"g\") $\n",
-    "    insert (Just 6) (Just \"g\") $\n",
-    "    insert (Just 7) (Just \"c\") $\n",
-    "    insert (Just 6) (Just \"c\") empty\n",
-    "    \n",
-    "lookup (Left 5) c\n",
-    "lookup (Left 6) c\n",
-    "lookup (Left 7) c"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "bef39b82-e800-4390-95ed-226f32c7ca0d",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"g\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "Just (Right (fromList [(\"g\",1)]))"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "d = delete Nothing (Just \"c\") c\n",
-    "\n",
-    "lookup (Left 6) d\n",
-    "lookup (Left 7) d"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5b14c1db-9871-4aea-a8e5-cc5f4b0dd36a",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Haskell",
-   "language": "haskell",
-   "name": "haskell"
-  },
-  "language_info": {
-   "codemirror_mode": "ihaskell",
-   "file_extension": ".hs",
-   "mimetype": "text/x-haskell",
-   "name": "haskell",
-   "pygments_lexer": "Haskell",
-   "version": "9.4.7"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/java-checkpoint.ipynb b/examples/.ipynb_checkpoints/java-checkpoint.ipynb
deleted file mode 100644
index ebc9b27bc856abdad3c3544fe14b3ad9d935a334..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/java-checkpoint.ipynb
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "6589c476-138e-4b3f-a61a-4d0221d8a1dc",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "18\n"
-     ]
-    }
-   ],
-   "source": [
-    "System.out.println(System.getProperty(\"java.specification.version\"));"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "eda3f551-25c6-448a-841a-e68e3d29bc0f",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "18.0.2.1+1-1\n"
-     ]
-    }
-   ],
-   "source": [
-    "System.out.println(System.getProperty(\"java.vm.version\"));"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "135963f8-95fb-47a0-96ad-53aac82c3083",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "18\n"
-     ]
-    }
-   ],
-   "source": [
-    "System.out.println(System.getProperty(\"java.specification.version\"));"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "id": "735e8e3a-2e71-481d-850c-240f761db7ff",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    }
-   ],
-   "source": [
-    "System.out.println(\"Hello World\");"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9ed37751-f475-4528-84e3-b606fc998470",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Java18",
-   "language": "java",
-   "name": "java"
-  },
-  "language_info": {
-   "file_extension": ".java",
-   "mimetype": "text/x-java",
-   "name": "java",
-   "version": "11"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/javascript-checkpoint.ipynb b/examples/.ipynb_checkpoints/javascript-checkpoint.ipynb
deleted file mode 100644
index 33448fe929ade1795e4274ca50c690274e41e0ab..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/javascript-checkpoint.ipynb
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "6c11432c-7416-4822-9088-095c4060a13f",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "{\n",
-      "  node: \u001b[32m'18.10.0'\u001b[39m,\n",
-      "  v8: \u001b[32m'10.2.154.15-node.12'\u001b[39m,\n",
-      "  uv: \u001b[32m'1.43.0'\u001b[39m,\n",
-      "  zlib: \u001b[32m'1.2.11'\u001b[39m,\n",
-      "  brotli: \u001b[32m'1.0.9'\u001b[39m,\n",
-      "  ares: \u001b[32m'1.18.1'\u001b[39m,\n",
-      "  modules: \u001b[32m'108'\u001b[39m,\n",
-      "  nghttp2: \u001b[32m'1.47.0'\u001b[39m,\n",
-      "  napi: \u001b[32m'8'\u001b[39m,\n",
-      "  llhttp: \u001b[32m'6.0.10'\u001b[39m,\n",
-      "  openssl: \u001b[32m'3.0.5+quic'\u001b[39m,\n",
-      "  cldr: \u001b[32m'41.0'\u001b[39m,\n",
-      "  icu: \u001b[32m'71.1'\u001b[39m,\n",
-      "  tz: \u001b[32m'2022b'\u001b[39m,\n",
-      "  unicode: \u001b[32m'14.0'\u001b[39m,\n",
-      "  ngtcp2: \u001b[32m'0.8.1'\u001b[39m,\n",
-      "  nghttp3: \u001b[32m'0.7.0'\u001b[39m\n",
-      "}\n"
-     ]
-    }
-   ],
-   "source": [
-    "process.versions"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "786c65f3-dcd4-480f-9d8d-6a40c367977c",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    }
-   ],
-   "source": [
-    "console.log('Hello World')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b0f9c570-7512-499d-8109-eb866551bd10",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "JavaScript",
-   "language": "javascript",
-   "name": "jslab"
-  },
-  "language_info": {
-   "file_extension": ".js",
-   "mimetype": "text/javascript",
-   "name": "javascript",
-   "version": ""
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/julia-checkpoint.ipynb b/examples/.ipynb_checkpoints/julia-checkpoint.ipynb
deleted file mode 100644
index 689c74da5a16f9bca4e6c5ce18ada6cd8cdadf25..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/julia-checkpoint.ipynb
+++ /dev/null
@@ -1,1301 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "8a3d7288-e530-4d4e-a691-0085337097e8",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "1.8.2\n"
-     ]
-    }
-   ],
-   "source": [
-    "println(VERSION)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "f4e3bd37-1a53-4017-bfda-7e078dc69bc1",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    }
-   ],
-   "source": [
-    "println(\"Hello World\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "54de6663-2d76-4e49-b048-7fa6398419ba",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "application/vnd.webio.node+json": {
-       "children": [],
-       "instanceArgs": {
-        "namespace": "html",
-        "tag": "div"
-       },
-       "nodeType": "DOM",
-       "props": {},
-       "type": "node"
-      },
-      "text/html": [
-       "<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">\n",
-       "<p>The WebIO Jupyter extension was not detected. See the\n",
-       "<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/providers/ijulia/\" target=\"_blank\">\n",
-       "    WebIO Jupyter integration documentation\n",
-       "</a>\n",
-       "for more information.\n",
-       "</div>\n"
-      ],
-      "text/plain": [
-       "WebIO._IJuliaInit()"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.plotly.v1+json": {
-       "config": {
-        "displayModeBar": null,
-        "displaylogo": null,
-        "doubleClickDelay": null,
-        "editable": false,
-        "linkText": null,
-        "locale": null,
-        "modeBarButtons": null,
-        "modeBarButtonsToAdd": null,
-        "modeBarButtonsToRemove": null,
-        "plotlyServerURL": null,
-        "responsive": true,
-        "scrollZoom": true,
-        "showEditInChartStudio": null,
-        "showLink": false,
-        "staticPlot": false,
-        "toImageButtonOptions": null
-       },
-       "data": [
-        {
-         "fields": {
-          "name": "first",
-          "type": "bar",
-          "x": [
-           "a",
-           "b"
-          ],
-          "y": [
-           1,
-           2
-          ]
-         }
-        },
-        {
-         "fields": {
-          "name": "second",
-          "type": "bar",
-          "x": [
-           "a",
-           "b"
-          ],
-          "y": [
-           2,
-           1
-          ]
-         }
-        },
-        {
-         "fields": {
-          "name": "third",
-          "type": "bar",
-          "x": [
-           "a",
-           "b"
-          ],
-          "y": [
-           1,
-           2
-          ]
-         }
-        },
-        {
-         "fields": {
-          "name": "fourth",
-          "type": "bar",
-          "x": [
-           "a",
-           "b"
-          ],
-          "y": [
-           2,
-           1
-          ]
-         }
-        }
-       ],
-       "divid": {
-        "value": 2.806921808831827e+38
-       },
-       "frames": [],
-       "layout": {
-        "fields": {
-         "margin": {
-          "b": 50,
-          "l": 50,
-          "r": 50,
-          "t": 60
-         },
-         "template": {
-          "data": {
-           "bar": [
-            {
-             "fields": {
-              "error_x": {
-               "color": "#2a3f5f"
-              },
-              "error_y": {
-               "color": "#2a3f5f"
-              },
-              "marker": {
-               "line": {
-                "color": "#E5ECF6",
-                "width": 0.5
-               }
-              },
-              "type": "bar"
-             }
-            }
-           ],
-           "barpolar": [
-            {
-             "fields": {
-              "marker": {
-               "line": {
-                "color": "#E5ECF6",
-                "width": 0.5
-               }
-              },
-              "type": "barpolar"
-             }
-            }
-           ],
-           "carpet": [
-            {
-             "fields": {
-              "aaxis": {
-               "endlinecolor": "#2a3f5f",
-               "gridcolor": "white",
-               "linecolor": "white",
-               "minorgridcolor": "white",
-               "startlinecolor": "#2a3f5f"
-              },
-              "baxis": {
-               "endlinecolor": "#2a3f5f",
-               "gridcolor": "white",
-               "linecolor": "white",
-               "minorgridcolor": "white",
-               "startlinecolor": "#2a3f5f"
-              },
-              "type": "carpet"
-             }
-            }
-           ],
-           "choropleth": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "type": "choropleth"
-             }
-            }
-           ],
-           "contour": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "contour"
-             }
-            }
-           ],
-           "contourcarpet": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "type": "contourcarpet"
-             }
-            }
-           ],
-           "heatmap": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "heatmap"
-             }
-            }
-           ],
-           "heatmapgl": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "heatmapgl"
-             }
-            }
-           ],
-           "histogram": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "histogram"
-             }
-            }
-           ],
-           "histogram2d": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "histogram2d"
-             }
-            }
-           ],
-           "histogram2dcontour": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "histogram2dcontour"
-             }
-            }
-           ],
-           "mesh3d": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "type": "mesh3d"
-             }
-            }
-           ],
-           "parcoords": [
-            {
-             "fields": {
-              "line": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "parcoords"
-             }
-            }
-           ],
-           "pie": [
-            {
-             "fields": {
-              "automargin": true,
-              "type": "pie"
-             }
-            }
-           ],
-           "scatter": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scatter"
-             }
-            }
-           ],
-           "scatter3d": [
-            {
-             "fields": {
-              "line": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scatter3d"
-             }
-            }
-           ],
-           "scattercarpet": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scattercarpet"
-             }
-            }
-           ],
-           "scattergeo": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scattergeo"
-             }
-            }
-           ],
-           "scattergl": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scattergl"
-             }
-            }
-           ],
-           "scattermapbox": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scattermapbox"
-             }
-            }
-           ],
-           "scatterpolar": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scatterpolar"
-             }
-            }
-           ],
-           "scatterpolargl": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scatterpolargl"
-             }
-            }
-           ],
-           "scatterternary": [
-            {
-             "fields": {
-              "marker": {
-               "colorbar": {
-                "outlinewidth": 0,
-                "ticks": ""
-               }
-              },
-              "type": "scatterternary"
-             }
-            }
-           ],
-           "surface": [
-            {
-             "fields": {
-              "colorbar": {
-               "outlinewidth": 0,
-               "ticks": ""
-              },
-              "colorscale": [
-               [
-                0,
-                "#0d0887"
-               ],
-               [
-                0.1111111111111111,
-                "#46039f"
-               ],
-               [
-                0.2222222222222222,
-                "#7201a8"
-               ],
-               [
-                0.3333333333333333,
-                "#9c179e"
-               ],
-               [
-                0.4444444444444444,
-                "#bd3786"
-               ],
-               [
-                0.5555555555555556,
-                "#d8576b"
-               ],
-               [
-                0.6666666666666666,
-                "#ed7953"
-               ],
-               [
-                0.7777777777777778,
-                "#fb9f3a"
-               ],
-               [
-                0.8888888888888888,
-                "#fdca26"
-               ],
-               [
-                1,
-                "#f0f921"
-               ]
-              ],
-              "type": "surface"
-             }
-            }
-           ],
-           "table": [
-            {
-             "fields": {
-              "cells": {
-               "fill": {
-                "color": "#EBF0F8"
-               },
-               "line": {
-                "color": "white"
-               }
-              },
-              "header": {
-               "fill": {
-                "color": "#C8D4E3"
-               },
-               "line": {
-                "color": "white"
-               }
-              },
-              "type": "table"
-             }
-            }
-           ]
-          },
-          "layout": {
-           "fields": {
-            "annotationdefaults": {
-             "arrowcolor": "#2a3f5f",
-             "arrowhead": 0,
-             "arrowwidth": 1
-            },
-            "autotypenumbers": "strict",
-            "coloraxis": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "colorscale": {
-             "diverging": [
-              [
-               0,
-               "#8e0152"
-              ],
-              [
-               0.1,
-               "#c51b7d"
-              ],
-              [
-               0.2,
-               "#de77ae"
-              ],
-              [
-               0.3,
-               "#f1b6da"
-              ],
-              [
-               0.4,
-               "#fde0ef"
-              ],
-              [
-               0.5,
-               "#f7f7f7"
-              ],
-              [
-               0.6,
-               "#e6f5d0"
-              ],
-              [
-               0.7,
-               "#b8e186"
-              ],
-              [
-               0.8,
-               "#7fbc41"
-              ],
-              [
-               0.9,
-               "#4d9221"
-              ],
-              [
-               1,
-               "#276419"
-              ]
-             ],
-             "sequential": [
-              [
-               0,
-               "#0d0887"
-              ],
-              [
-               0.1111111111111111,
-               "#46039f"
-              ],
-              [
-               0.2222222222222222,
-               "#7201a8"
-              ],
-              [
-               0.3333333333333333,
-               "#9c179e"
-              ],
-              [
-               0.4444444444444444,
-               "#bd3786"
-              ],
-              [
-               0.5555555555555556,
-               "#d8576b"
-              ],
-              [
-               0.6666666666666666,
-               "#ed7953"
-              ],
-              [
-               0.7777777777777778,
-               "#fb9f3a"
-              ],
-              [
-               0.8888888888888888,
-               "#fdca26"
-              ],
-              [
-               1,
-               "#f0f921"
-              ]
-             ],
-             "sequentialminus": [
-              [
-               0,
-               "#0d0887"
-              ],
-              [
-               0.1111111111111111,
-               "#46039f"
-              ],
-              [
-               0.2222222222222222,
-               "#7201a8"
-              ],
-              [
-               0.3333333333333333,
-               "#9c179e"
-              ],
-              [
-               0.4444444444444444,
-               "#bd3786"
-              ],
-              [
-               0.5555555555555556,
-               "#d8576b"
-              ],
-              [
-               0.6666666666666666,
-               "#ed7953"
-              ],
-              [
-               0.7777777777777778,
-               "#fb9f3a"
-              ],
-              [
-               0.8888888888888888,
-               "#fdca26"
-              ],
-              [
-               1,
-               "#f0f921"
-              ]
-             ]
-            },
-            "colorway": [
-             "#636efa",
-             "#EF553B",
-             "#00cc96",
-             "#ab63fa",
-             "#FFA15A",
-             "#19d3f3",
-             "#FF6692",
-             "#B6E880",
-             "#FF97FF",
-             "#FECB52"
-            ],
-            "font": {
-             "color": "#2a3f5f"
-            },
-            "geo": {
-             "bgcolor": "white",
-             "lakecolor": "white",
-             "landcolor": "#E5ECF6",
-             "showlakes": true,
-             "showland": true,
-             "subunitcolor": "white"
-            },
-            "hoverlabel": {
-             "align": "left"
-            },
-            "hovermode": "closest",
-            "mapbox": {
-             "style": "light"
-            },
-            "paper_bgcolor": "white",
-            "plot_bgcolor": "#E5ECF6",
-            "polar": {
-             "angularaxis": {
-              "gridcolor": "white",
-              "linecolor": "white",
-              "ticks": ""
-             },
-             "bgcolor": "#E5ECF6",
-             "radialaxis": {
-              "gridcolor": "white",
-              "linecolor": "white",
-              "ticks": ""
-             }
-            },
-            "scene": {
-             "xaxis": {
-              "backgroundcolor": "#E5ECF6",
-              "gridcolor": "white",
-              "gridwidth": 2,
-              "linecolor": "white",
-              "showbackground": true,
-              "ticks": "",
-              "zerolinecolor": "white"
-             },
-             "yaxis": {
-              "backgroundcolor": "#E5ECF6",
-              "gridcolor": "white",
-              "gridwidth": 2,
-              "linecolor": "white",
-              "showbackground": true,
-              "ticks": "",
-              "zerolinecolor": "white"
-             },
-             "zaxis": {
-              "backgroundcolor": "#E5ECF6",
-              "gridcolor": "white",
-              "gridwidth": 2,
-              "linecolor": "white",
-              "showbackground": true,
-              "ticks": "",
-              "zerolinecolor": "white"
-             }
-            },
-            "shapedefaults": {
-             "line": {
-              "color": "#2a3f5f"
-             }
-            },
-            "ternary": {
-             "aaxis": {
-              "gridcolor": "white",
-              "linecolor": "white",
-              "ticks": ""
-             },
-             "baxis": {
-              "gridcolor": "white",
-              "linecolor": "white",
-              "ticks": ""
-             },
-             "bgcolor": "#E5ECF6",
-             "caxis": {
-              "gridcolor": "white",
-              "linecolor": "white",
-              "ticks": ""
-             }
-            },
-            "title": {
-             "x": 0.05
-            },
-            "xaxis": {
-             "automargin": true,
-             "gridcolor": "white",
-             "linecolor": "white",
-             "ticks": "",
-             "title": {
-              "standoff": 15
-             },
-             "zerolinecolor": "white",
-             "zerolinewidth": 2
-            },
-            "yaxis": {
-             "automargin": true,
-             "gridcolor": "white",
-             "linecolor": "white",
-             "ticks": "",
-             "title": {
-              "standoff": 15
-             },
-             "zerolinecolor": "white",
-             "zerolinewidth": 2
-            }
-           }
-          }
-         }
-        },
-        "height": 360,
-        "subplots": {
-         "_heights": [
-          1
-         ],
-         "_widths": [
-          1
-         ],
-         "cols": 1,
-         "column_titles": null,
-         "column_widths": null,
-         "grid_ref": [
-          [
-           [
-            {
-             "layout_keys": [
-              "xaxis",
-              "yaxis"
-             ],
-             "subplot_kind": "xy",
-             "trace_kwargs": {
-              "fields": {
-               "xaxis": "x",
-               "yaxis": "y"
-              }
-             }
-            }
-           ]
-          ]
-         ],
-         "has_secondary_y": false,
-         "horizontal_spacing": 0.2,
-         "insets": null,
-         "max_width": 1,
-         "row_heights": null,
-         "row_titles": null,
-         "rows": 1,
-         "shared_xaxes": false,
-         "shared_yaxes": false,
-         "specs": [
-          [
-           {
-            "b": 0,
-            "colspan": 1,
-            "kind": "xy",
-            "l": 0,
-            "r": 0,
-            "rowspan": 1,
-            "secondary_y": false,
-            "t": 0
-           }
-          ]
-         ],
-         "start_cell": "top-left",
-         "subplot_titles": null,
-         "vertical_spacing": 0.3,
-         "x_title": null,
-         "y_title": null
-        }
-       }
-      },
-      "text/html": [
-       "<div\n",
-       "    class=\"webio-mountpoint\"\n",
-       "    data-webio-mountpoint=\"1379485161570187944\"\n",
-       ">\n",
-       "    <script>\n",
-       "    (function(){\n",
-       "    // Some integrations (namely, IJulia/Jupyter) use an alternate render pathway than\n",
-       "    // just putting the html on the page. If WebIO isn't defined, then it's pretty likely\n",
-       "    // that we're in one of those situations and the integration just isn't installed\n",
-       "    // correctly.\n",
-       "    if (typeof window.WebIO === \"undefined\") {\n",
-       "        document\n",
-       "            .querySelector('[data-webio-mountpoint=\"1379485161570187944\"]')\n",
-       "            .innerHTML = (\n",
-       "                '<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">' +\n",
-       "                '<p><strong>WebIO not detected.</strong></p>' +\n",
-       "                '<p>Please read ' +\n",
-       "                '<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">the troubleshooting guide</a> ' +\n",
-       "                'for more information on how to resolve this issue.</p>' +\n",
-       "                '<p><a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/</a></p>' +\n",
-       "                '</div>'\n",
-       "            );\n",
-       "        return;\n",
-       "    }\n",
-       "    WebIO.mount(\n",
-       "        document.querySelector('[data-webio-mountpoint=\"1379485161570187944\"]'),\n",
-       "        {\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"Plotly\",\"type\":\"js\",\"url\":\"\\/assetserver\\/8d35c4870680326a2cceb1d91a3d1ad98e91c98e-plotly.min.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/bc4c41ca467ee65ad32fa9d752926a631dd74e8b-plotly_webio.bundle.js\"}],\"type\":\"async_block\"},\"id\":\"2440772074841443762\",\"handlers\":{\"_toImage\":[\"(function (options){return this.Plotly.toImage(this.plotElem,options).then((function (data){return WebIO.setval({\\\"name\\\":\\\"image\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"15078904415046774210\\\",\\\"type\\\":\\\"observable\\\"},data)}))})\"],\"__get_gd_contents\":[\"(function (prop){prop==\\\"data\\\" ? (WebIO.setval({\\\"name\\\":\\\"__gd_contents\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"168349645986387645\\\",\\\"type\\\":\\\"observable\\\"},this.plotElem.data)) : undefined; return prop==\\\"layout\\\" ? (WebIO.setval({\\\"name\\\":\\\"__gd_contents\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"168349645986387645\\\",\\\"type\\\":\\\"observable\\\"},this.plotElem.layout)) : undefined})\"],\"_downloadImage\":[\"(function (options){return this.Plotly.downloadImage(this.plotElem,options)})\"],\"_commands\":[\"(function (args){var fn=args.shift(); var elem=this.plotElem; var Plotly=this.Plotly; args.unshift(elem); return Plotly[fn].apply(this,args)})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = ((function (Plotly,PlotlyWebIO){PlotlyWebIO.init(WebIO); var gd=this.dom.querySelector(\\\"#plot-d32b58fe-6644-4d06-b267-c0e6f306b1b6\\\"); this.plotElem=gd; this.Plotly=Plotly; (window.Blink!==undefined) ? (gd.style.width=\\\"100%\\\", gd.style.height=\\\"100vh\\\", gd.style.marginLeft=\\\"0%\\\", gd.style.marginTop=\\\"0vh\\\") : undefined; window.onresize=(function (){return Plotly.Plots.resize(gd)}); Plotly.newPlot(gd,[{\\\"y\\\":[1,2],\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"first\\\",\\\"x\\\":[\\\"a\\\",\\\"b\\\"]},{\\\"y\\\":[2,1],\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"second\\\",\\\"x\\\":[\\\"a\\\",\\\"b\\\"]},{\\\"y\\\":[1,2],\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"third\\\",\\\"x\\\":[\\\"a\\\",\\\"b\\\"]},{\\\"y\\\":[2,1],\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"fourth\\\",\\\"x\\\":[\\\"a\\\",\\\"b\\\"]}],{\\\"template\\\":{\\\"layout\\\":{\\\"coloraxis\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}},\\\"xaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"zerolinewidth\\\":2,\\\"title\\\":{\\\"standoff\\\":15},\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"linecolor\\\":\\\"white\\\"},\\\"hovermode\\\":\\\"closest\\\",\\\"paper_bgcolor\\\":\\\"white\\\",\\\"geo\\\":{\\\"showlakes\\\":true,\\\"showland\\\":true,\\\"landcolor\\\":\\\"#E5ECF6\\\",\\\"bgcolor\\\":\\\"white\\\",\\\"subunitcolor\\\":\\\"white\\\",\\\"lakecolor\\\":\\\"white\\\"},\\\"colorscale\\\":{\\\"sequential\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]],\\\"diverging\\\":[[0,\\\"#8e0152\\\"],[0.1,\\\"#c51b7d\\\"],[0.2,\\\"#de77ae\\\"],[0.3,\\\"#f1b6da\\\"],[0.4,\\\"#fde0ef\\\"],[0.5,\\\"#f7f7f7\\\"],[0.6,\\\"#e6f5d0\\\"],[0.7,\\\"#b8e186\\\"],[0.8,\\\"#7fbc41\\\"],[0.9,\\\"#4d9221\\\"],[1,\\\"#276419\\\"]],\\\"sequentialminus\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]},\\\"yaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"zerolinewidth\\\":2,\\\"title\\\":{\\\"standoff\\\":15},\\\"ticks\\\":\\\"\\\",\\\"zerolinecolor\\\":\\\"white\\\",\\\"automargin\\\":true,\\\"linecolor\\\":\\\"white\\\"},\\\"shapedefaults\\\":{\\\"line\\\":{\\\"color\\\":\\\"#2a3f5f\\\"}},\\\"hoverlabel\\\":{\\\"align\\\":\\\"left\\\"},\\\"mapbox\\\":{\\\"style\\\":\\\"light\\\"},\\\"polar\\\":{\\\"angularaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"radialaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"linecolor\\\":\\\"white\\\"}},\\\"autotypenumbers\\\":\\\"strict\\\",\\\"font\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"ternary\\\":{\\\"baxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"bgcolor\\\":\\\"#E5ECF6\\\",\\\"caxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"aaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"ticks\\\":\\\"\\\",\\\"linecolor\\\":\\\"white\\\"}},\\\"annotationdefaults\\\":{\\\"arrowhead\\\":0,\\\"arrowwidth\\\":1,\\\"arrowcolor\\\":\\\"#2a3f5f\\\"},\\\"plot_bgcolor\\\":\\\"#E5ECF6\\\",\\\"title\\\":{\\\"x\\\":0.05},\\\"scene\\\":{\\\"xaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"gridwidth\\\":2,\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"ticks\\\":\\\"\\\",\\\"showbackground\\\":true,\\\"zerolinecolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"zaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"gridwidth\\\":2,\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"ticks\\\":\\\"\\\",\\\"showbackground\\\":true,\\\"zerolinecolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"yaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"gridwidth\\\":2,\\\"backgroundcolor\\\":\\\"#E5ECF6\\\",\\\"ticks\\\":\\\"\\\",\\\"showbackground\\\":true,\\\"zerolinecolor\\\":\\\"white\\\",\\\"linecolor\\\":\\\"white\\\"}},\\\"colorway\\\":[\\\"#636efa\\\",\\\"#EF553B\\\",\\\"#00cc96\\\",\\\"#ab63fa\\\",\\\"#FFA15A\\\",\\\"#19d3f3\\\",\\\"#FF6692\\\",\\\"#B6E880\\\",\\\"#FF97FF\\\",\\\"#FECB52\\\"]},\\\"data\\\":{\\\"barpolar\\\":[{\\\"type\\\":\\\"barpolar\\\",\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5}}}],\\\"carpet\\\":[{\\\"aaxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\",\\\"linecolor\\\":\\\"white\\\"},\\\"type\\\":\\\"carpet\\\",\\\"baxis\\\":{\\\"gridcolor\\\":\\\"white\\\",\\\"endlinecolor\\\":\\\"#2a3f5f\\\",\\\"minorgridcolor\\\":\\\"white\\\",\\\"startlinecolor\\\":\\\"#2a3f5f\\\",\\\"linecolor\\\":\\\"white\\\"}}],\\\"scatterpolar\\\":[{\\\"type\\\":\\\"scatterpolar\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"parcoords\\\":[{\\\"line\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}},\\\"type\\\":\\\"parcoords\\\"}],\\\"scatter\\\":[{\\\"type\\\":\\\"scatter\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"histogram2dcontour\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"histogram2dcontour\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"contour\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"contour\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"scattercarpet\\\":[{\\\"type\\\":\\\"scattercarpet\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"mesh3d\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"mesh3d\\\"}],\\\"surface\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"surface\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"scattermapbox\\\":[{\\\"type\\\":\\\"scattermapbox\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"scattergeo\\\":[{\\\"type\\\":\\\"scattergeo\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"histogram\\\":[{\\\"type\\\":\\\"histogram\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"pie\\\":[{\\\"type\\\":\\\"pie\\\",\\\"automargin\\\":true}],\\\"choropleth\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"choropleth\\\"}],\\\"heatmapgl\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"heatmapgl\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"bar\\\":[{\\\"type\\\":\\\"bar\\\",\\\"error_y\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"error_x\\\":{\\\"color\\\":\\\"#2a3f5f\\\"},\\\"marker\\\":{\\\"line\\\":{\\\"color\\\":\\\"#E5ECF6\\\",\\\"width\\\":0.5}}}],\\\"heatmap\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"heatmap\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"contourcarpet\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"contourcarpet\\\"}],\\\"table\\\":[{\\\"type\\\":\\\"table\\\",\\\"header\\\":{\\\"line\\\":{\\\"color\\\":\\\"white\\\"},\\\"fill\\\":{\\\"color\\\":\\\"#C8D4E3\\\"}},\\\"cells\\\":{\\\"line\\\":{\\\"color\\\":\\\"white\\\"},\\\"fill\\\":{\\\"color\\\":\\\"#EBF0F8\\\"}}}],\\\"scatter3d\\\":[{\\\"line\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}},\\\"type\\\":\\\"scatter3d\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"scattergl\\\":[{\\\"type\\\":\\\"scattergl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"histogram2d\\\":[{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0},\\\"type\\\":\\\"histogram2d\\\",\\\"colorscale\\\":[[0.0,\\\"#0d0887\\\"],[0.1111111111111111,\\\"#46039f\\\"],[0.2222222222222222,\\\"#7201a8\\\"],[0.3333333333333333,\\\"#9c179e\\\"],[0.4444444444444444,\\\"#bd3786\\\"],[0.5555555555555556,\\\"#d8576b\\\"],[0.6666666666666666,\\\"#ed7953\\\"],[0.7777777777777778,\\\"#fb9f3a\\\"],[0.8888888888888888,\\\"#fdca26\\\"],[1.0,\\\"#f0f921\\\"]]}],\\\"scatterternary\\\":[{\\\"type\\\":\\\"scatterternary\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}],\\\"scatterpolargl\\\":[{\\\"type\\\":\\\"scatterpolargl\\\",\\\"marker\\\":{\\\"colorbar\\\":{\\\"ticks\\\":\\\"\\\",\\\"outlinewidth\\\":0}}}]}},\\\"margin\\\":{\\\"l\\\":50,\\\"b\\\":50,\\\"r\\\":50,\\\"t\\\":60}},{\\\"showLink\\\":false,\\\"editable\\\":false,\\\"responsive\\\":true,\\\"staticPlot\\\":false,\\\"scrollZoom\\\":true}); gd.on(\\\"plotly_hover\\\",(function (data){var filtered_data=WebIO.PlotlyCommands.filterEventData(gd,data,\\\"hover\\\"); return !(filtered_data.isnil) ? (WebIO.setval({\\\"name\\\":\\\"hover\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"3303400060264852312\\\",\\\"type\\\":\\\"observable\\\"},filtered_data.out)) : undefined})); gd.on(\\\"plotly_unhover\\\",(function (){return WebIO.setval({\\\"name\\\":\\\"hover\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"3303400060264852312\\\",\\\"type\\\":\\\"observable\\\"},{})})); gd.on(\\\"plotly_selected\\\",(function (data){var filtered_data=WebIO.PlotlyCommands.filterEventData(gd,data,\\\"selected\\\"); return !(filtered_data.isnil) ? (WebIO.setval({\\\"name\\\":\\\"selected\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"14918447904979580197\\\",\\\"type\\\":\\\"observable\\\"},filtered_data.out)) : undefined})); gd.on(\\\"plotly_deselect\\\",(function (){return WebIO.setval({\\\"name\\\":\\\"selected\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"14918447904979580197\\\",\\\"type\\\":\\\"observable\\\"},{})})); gd.on(\\\"plotly_relayout\\\",(function (data){var filtered_data=WebIO.PlotlyCommands.filterEventData(gd,data,\\\"relayout\\\"); return !(filtered_data.isnil) ? (WebIO.setval({\\\"name\\\":\\\"relayout\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"10314539859727998059\\\",\\\"type\\\":\\\"observable\\\"},filtered_data.out)) : undefined})); return gd.on(\\\"plotly_click\\\",(function (data){var filtered_data=WebIO.PlotlyCommands.filterEventData(gd,data,\\\"click\\\"); return !(filtered_data.isnil) ? (WebIO.setval({\\\"name\\\":\\\"click\\\",\\\"scope\\\":\\\"2440772074841443762\\\",\\\"id\\\":\\\"11155373025065972193\\\",\\\"type\\\":\\\"observable\\\"},filtered_data.out)) : undefined}))}));\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"Plotly\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/8d35c4870680326a2cceb1d91a3d1ad98e91c98e-plotly.min.js\\\"},{\\\"name\\\":null,\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bc4c41ca467ee65ad32fa9d752926a631dd74e8b-plotly_webio.bundle.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"_toImage\":{\"sync\":false,\"id\":\"5525298802287099172\",\"value\":{}},\"hover\":{\"sync\":false,\"id\":\"3303400060264852312\",\"value\":{}},\"selected\":{\"sync\":false,\"id\":\"14918447904979580197\",\"value\":{}},\"__gd_contents\":{\"sync\":false,\"id\":\"168349645986387645\",\"value\":{}},\"click\":{\"sync\":false,\"id\":\"11155373025065972193\",\"value\":{}},\"image\":{\"sync\":true,\"id\":\"15078904415046774210\",\"value\":\"\"},\"__get_gd_contents\":{\"sync\":false,\"id\":\"11764940875923547207\",\"value\":\"\"},\"_downloadImage\":{\"sync\":false,\"id\":\"10378008202102349909\",\"value\":{}},\"relayout\":{\"sync\":false,\"id\":\"10314539859727998059\",\"value\":{}},\"_commands\":{\"sync\":false,\"id\":\"3035911595026884853\",\"value\":[]}}},\"children\":[{\"props\":{\"id\":\"plot-d32b58fe-6644-4d06-b267-c0e6f306b1b6\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[]}]},\n",
-       "        window,\n",
-       "    );\n",
-       "    })()\n",
-       "    </script>\n",
-       "</div>\n"
-      ],
-      "text/plain": [
-       "data: [\n",
-       "  \"bar with fields name, type, x, and y\",\n",
-       "  \"bar with fields name, type, x, and y\",\n",
-       "  \"bar with fields name, type, x, and y\",\n",
-       "  \"bar with fields name, type, x, and y\"\n",
-       "]\n",
-       "\n",
-       "layout: \"layout with fields margin and template\"\n",
-       "\n"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "using PlotlyJS\n",
-    "trace1 = bar(name=\"first\", x=[\"a\", \"b\"], y=[1,2])\n",
-    "trace2 = bar(name=\"second\", x=[\"a\", \"b\"], y=[2,1])\n",
-    "trace3 = bar(name=\"third\", x=[\"a\", \"b\"], y=[1,2])\n",
-    "trace4 = bar(name=\"fourth\", x=[\"a\", \"b\"], y=[2,1])\n",
-    "\n",
-    "plot([trace1, trace2, trace3, trace4])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "id": "8728f2a7-b722-41ad-8e76-a848f7185c33",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/svg+xml": [
-       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
-       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
-       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
-       "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"\n",
-       "     width=\"180mm\" height=\"25mm\"\n",
-       "     viewBox=\"0 0 100 1\" preserveAspectRatio=\"none\"\n",
-       "     shape-rendering=\"crispEdges\" stroke=\"none\">\n",
-       "<rect width=\"1\" height=\".96\" x=\"0\" y=\"0\" fill=\"#4A0952\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"1\" y=\"0\" fill=\"#601369\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"2\" y=\"0\" fill=\"#731E7E\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"3\" y=\"0\" fill=\"#85298F\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"4\" y=\"0\" fill=\"#94349F\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"5\" y=\"0\" fill=\"#A23EAC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"6\" y=\"0\" fill=\"#AE48B7\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"7\" y=\"0\" fill=\"#B952C0\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"8\" y=\"0\" fill=\"#C25CC8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"9\" y=\"0\" fill=\"#CA65CE\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"10\" y=\"0\" fill=\"#D06ED3\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"11\" y=\"0\" fill=\"#D677D8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"12\" y=\"0\" fill=\"#DC7EDC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"13\" y=\"0\" fill=\"#E086DF\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"14\" y=\"0\" fill=\"#E48DE1\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"15\" y=\"0\" fill=\"#E793E4\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"16\" y=\"0\" fill=\"#EA99E6\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"17\" y=\"0\" fill=\"#ED9FE8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"18\" y=\"0\" fill=\"#EFA4E9\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"19\" y=\"0\" fill=\"#F2A9EB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"20\" y=\"0\" fill=\"#F3ADEC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"21\" y=\"0\" fill=\"#F5B2ED\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"22\" y=\"0\" fill=\"#F6B6EE\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"23\" y=\"0\" fill=\"#F8B9EF\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"24\" y=\"0\" fill=\"#F9BDF0\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"25\" y=\"0\" fill=\"#FAC0F1\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"26\" y=\"0\" fill=\"#FAC3F2\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"27\" y=\"0\" fill=\"#FBC6F2\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"28\" y=\"0\" fill=\"#FCC9F3\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"29\" y=\"0\" fill=\"#FCCBF4\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"30\" y=\"0\" fill=\"#FDCEF4\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"31\" y=\"0\" fill=\"#FDD0F5\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"32\" y=\"0\" fill=\"#FED2F5\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"33\" y=\"0\" fill=\"#FED4F6\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"34\" y=\"0\" fill=\"#FED6F6\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"35\" y=\"0\" fill=\"#FFD8F7\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"36\" y=\"0\" fill=\"#FFDAF7\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"37\" y=\"0\" fill=\"#FFDCF7\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"38\" y=\"0\" fill=\"#FFDDF8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"39\" y=\"0\" fill=\"#FFDEF8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"40\" y=\"0\" fill=\"#FFE0F8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"41\" y=\"0\" fill=\"#FFE1F8\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"42\" y=\"0\" fill=\"#FFE2F9\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"43\" y=\"0\" fill=\"#FFE4F9\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"44\" y=\"0\" fill=\"#FFE5F9\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"45\" y=\"0\" fill=\"#FFE6F9\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"46\" y=\"0\" fill=\"#FFE7FA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"47\" y=\"0\" fill=\"#FFE8FA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"48\" y=\"0\" fill=\"#FFE9FA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"49\" y=\"0\" fill=\"#FFE9FA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"50\" y=\"0\" fill=\"#FFEAFA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"51\" y=\"0\" fill=\"#FFEBFA\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"52\" y=\"0\" fill=\"#FFECFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"53\" y=\"0\" fill=\"#FFECFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"54\" y=\"0\" fill=\"#FFEDFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"55\" y=\"0\" fill=\"#FFEEFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"56\" y=\"0\" fill=\"#FFEEFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"57\" y=\"0\" fill=\"#FFEFFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"58\" y=\"0\" fill=\"#FFEFFB\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"59\" y=\"0\" fill=\"#FFF0FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"60\" y=\"0\" fill=\"#FFF0FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"61\" y=\"0\" fill=\"#FFF1FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"62\" y=\"0\" fill=\"#FFF1FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"63\" y=\"0\" fill=\"#FFF2FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"64\" y=\"0\" fill=\"#FFF2FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"65\" y=\"0\" fill=\"#FFF2FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"66\" y=\"0\" fill=\"#FFF3FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"67\" y=\"0\" fill=\"#FFF3FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"68\" y=\"0\" fill=\"#FFF3FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"69\" y=\"0\" fill=\"#FFF4FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"70\" y=\"0\" fill=\"#FFF4FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"71\" y=\"0\" fill=\"#FFF4FC\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"72\" y=\"0\" fill=\"#FFF5FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"73\" y=\"0\" fill=\"#FFF5FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"74\" y=\"0\" fill=\"#FFF5FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"75\" y=\"0\" fill=\"#FFF5FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"76\" y=\"0\" fill=\"#FFF5FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"77\" y=\"0\" fill=\"#FFF6FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"78\" y=\"0\" fill=\"#FFF6FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"79\" y=\"0\" fill=\"#FFF6FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"80\" y=\"0\" fill=\"#FFF6FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"81\" y=\"0\" fill=\"#FFF6FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"82\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"83\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"84\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"85\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"86\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"87\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"88\" y=\"0\" fill=\"#FFF7FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"89\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"90\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"91\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"92\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"93\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"94\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"95\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"96\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"97\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"98\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "<rect width=\"1\" height=\".96\" x=\"99\" y=\"0\" fill=\"#FFF8FD\" />\n",
-       "</svg>"
-      ],
-      "text/plain": [
-       "ColorScheme{Vector{RGB{Float64}}, String, String}(RGB{Float64}[RGB{Float64}(0.2914382319339584,0.03402717443064348,0.32311553463299547), RGB{Float64}(0.3759944884870766,0.07520266294746367,0.41281801433753273), RGB{Float64}(0.4523758063973981,0.11759634651107972,0.49218335728960766), RGB{Float64}(0.5208120417054076,0.16012979724702678,0.5615666564408449), RGB{Float64}(0.5817349635639338,0.20223621440044054,0.6216129760504435), RGB{Float64}(0.6356417573018186,0.24355985242345451,0.6730740777433435), RGB{Float64}(0.6830303240836113,0.28388932561869296,0.7167158342182118), RGB{Float64}(0.724367741761409,0.32311213359902,0.7532707863053658), RGB{Float64}(0.7600909264519287,0.3611657391363909,0.7834368255058094), RGB{Float64}(0.7908866823876691,0.3977218846068681,0.8082528513683139)  …  RGB{Float64}(1.0,0.9711935581900785,0.9930269590583073), RGB{Float64}(1.0,0.9716142444999428,0.9931189253540144), RGB{Float64}(1.0,0.9720154741729489,0.9932066701060075), RGB{Float64}(1.0,0.972398161574698,0.9932903890124342), RGB{Float64}(1.0,0.9727631768174442,0.993370268519212), RGB{Float64}(1.0,0.9731113480142114,0.9934464862747402), RGB{Float64}(1.0,0.9734434634084456,0.9935192115605748), RGB{Float64}(1.0,0.9737602733868823,0.9935886056994919), RGB{Float64}(1.0,0.9740624923827531,0.9936548224423113), RGB{Float64}(1.0,0.9743508006759821,0.9937180083346749)], \"\", \"\")"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "using Colors, ColorSchemes\n",
-    "cs1 = ColorScheme(reverse(Colors.sequential_palette(300, 100, logscale=true)))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "527aa2cb-275b-4422-9e96-45a999a701b3",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Julia 1.8.2",
-   "language": "julia",
-   "name": "julia-1.8"
-  },
-  "language_info": {
-   "file_extension": ".jl",
-   "mimetype": "application/julia",
-   "name": "julia",
-   "version": "1.8.2"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/kotlin-checkpoint.ipynb b/examples/.ipynb_checkpoints/kotlin-checkpoint.ipynb
deleted file mode 100644
index 175aab021c79e6f8c295fa646a11285b9c4ee6d3..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/kotlin-checkpoint.ipynb
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "ceb24ce1-e1b3-40bc-98bc-029588a91e31",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "1.8.20"
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "KotlinVersion.CURRENT"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "af86bbb7-61ae-430e-96c0-1c12b35e86ec",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello, World!\n"
-     ]
-    }
-   ],
-   "source": [
-    "fun helloWorld() {\n",
-    "    println(\"Hello, World!\")\n",
-    "}\n",
-    "helloWorld()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3c1c4e38-c8c0-481e-a450-c3e03b10e7a2",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Kotlin",
-   "language": "kotlin",
-   "name": "kotlin"
-  },
-  "language_info": {
-   "codemirror_mode": "text/x-kotlin",
-   "file_extension": ".kt",
-   "mimetype": "text/x-kotlin",
-   "name": "kotlin",
-   "nbconvert_exporter": "",
-   "pygments_lexer": "kotlin",
-   "version": "1.8.20"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/python-checkpoint.ipynb b/examples/.ipynb_checkpoints/python-checkpoint.ipynb
deleted file mode 100644
index 5383626c34176eab595245eeccb7c55ec517f8bd..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/python-checkpoint.ipynb
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "1348edb9-39bf-4c1d-947f-830e906465ec",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "sys.version_info(major=3, minor=10, micro=6, releaselevel='final', serial=0)"
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import sys\n",
-    "sys.version_info"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "0ae08ce0-f66e-48fc-b60d-ff87ca7b12b3",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "('3', '10', '6')"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import platform\n",
-    "platform.python_version_tuple()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "feafe043-0934-4345-8cfb-a2ffa0e3dbe0",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    }
-   ],
-   "source": [
-    "print('Hello World')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b029c092-2a5c-4695-9a49-7b3c985e0a7f",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "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.10.6"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/python-dash-checkpoint.ipynb b/examples/.ipynb_checkpoints/python-dash-checkpoint.ipynb
deleted file mode 100644
index b6c23ca6ba21fa24972d1b29e846164c3c23c1d7..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/python-dash-checkpoint.ipynb
+++ /dev/null
@@ -1,10415 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "4ca2e964-1955-4b0f-bc79-b03f0d4870a9",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "        <script type=\"text/javascript\">\n",
-       "        window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
-       "        if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
-       "        if (typeof require !== 'undefined') {\n",
-       "        require.undef(\"plotly\");\n",
-       "        define('plotly', function(require, exports, module) {\n",
-       "            /**\n",
-       "* plotly.js v2.27.0\n",
-       "* Copyright 2012-2023, Plotly, Inc.\n",
-       "* All rights reserved.\n",
-       "* Licensed under the MIT license\n",
-       "*/\n",
-       "/*! For license information please see plotly.min.js.LICENSE.txt */\n",
-       "!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Plotly=e():t.Plotly=e()}(self,(function(){return function(){var t={98847:function(t,e,r){\"use strict\";var n=r(71828),i={\"X,X div\":'direction:ltr;font-family:\"Open Sans\",verdana,arial,sans-serif;margin:0;padding:0;',\"X input,X button\":'font-family:\"Open Sans\",verdana,arial,sans-serif;',\"X input:focus,X button:focus\":\"outline:none;\",\"X a\":\"text-decoration:none;\",\"X a:hover\":\"text-decoration:none;\",\"X .crisp\":\"shape-rendering:crispEdges;\",\"X .user-select-none\":\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\"X svg\":\"overflow:hidden;\",\"X svg a\":\"fill:#447adb;\",\"X svg a:hover\":\"fill:#3c6dc5;\",\"X .main-svg\":\"position:absolute;top:0;left:0;pointer-events:none;\",\"X .main-svg .draglayer\":\"pointer-events:all;\",\"X .cursor-default\":\"cursor:default;\",\"X .cursor-pointer\":\"cursor:pointer;\",\"X .cursor-crosshair\":\"cursor:crosshair;\",\"X .cursor-move\":\"cursor:move;\",\"X .cursor-col-resize\":\"cursor:col-resize;\",\"X .cursor-row-resize\":\"cursor:row-resize;\",\"X .cursor-ns-resize\":\"cursor:ns-resize;\",\"X .cursor-ew-resize\":\"cursor:ew-resize;\",\"X .cursor-sw-resize\":\"cursor:sw-resize;\",\"X .cursor-s-resize\":\"cursor:s-resize;\",\"X .cursor-se-resize\":\"cursor:se-resize;\",\"X .cursor-w-resize\":\"cursor:w-resize;\",\"X .cursor-e-resize\":\"cursor:e-resize;\",\"X .cursor-nw-resize\":\"cursor:nw-resize;\",\"X .cursor-n-resize\":\"cursor:n-resize;\",\"X .cursor-ne-resize\":\"cursor:ne-resize;\",\"X .cursor-grab\":\"cursor:-webkit-grab;cursor:grab;\",\"X .modebar\":\"position:absolute;top:2px;right:2px;\",\"X .ease-bg\":\"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\",\"X .modebar--hover>:not(.watermark)\":\"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\",\"X:hover .modebar--hover .modebar-group\":\"opacity:1;\",\"X .modebar-group\":\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\"X .modebar-btn\":\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\",\"X .modebar-btn svg\":\"position:relative;top:2px;\",\"X .modebar.vertical\":\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\"X .modebar.vertical svg\":\"top:-1px;\",\"X .modebar.vertical .modebar-group\":\"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\"X .modebar.vertical .modebar-group .modebar-btn\":\"display:block;text-align:center;\",\"X [data-title]:before,X [data-title]:after\":\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\"X [data-title]:hover:before,X [data-title]:hover:after\":\"display:block;opacity:1;\",\"X [data-title]:before\":'content:\"\";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',\"X [data-title]:after\":\"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\"X .vertical [data-title]:before,X .vertical [data-title]:after\":\"top:0%;right:200%;\",\"X .vertical [data-title]:before\":\"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",Y:'font-family:\"Open Sans\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',\"Y p\":\"margin:0;\",\"Y .notifier-note\":\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\"Y .notifier-close\":\"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\"Y .notifier-close:hover\":\"color:#444;text-decoration:none;cursor:pointer;\"};for(var a in i){var o=a.replace(/^,/,\" ,\").replace(/X/g,\".js-plotly-plot .plotly\").replace(/Y/g,\".plotly-notifier\");n.addStyleRule(o,i[a])}},98222:function(t,e,r){\"use strict\";t.exports=r(82887)},27206:function(t,e,r){\"use strict\";t.exports=r(60822)},59893:function(t,e,r){\"use strict\";t.exports=r(23381)},5224:function(t,e,r){\"use strict\";t.exports=r(83832)},59509:function(t,e,r){\"use strict\";t.exports=r(72201)},75557:function(t,e,r){\"use strict\";t.exports=r(91815)},40338:function(t,e,r){\"use strict\";t.exports=r(21462)},35080:function(t,e,r){\"use strict\";t.exports=r(51319)},61396:function(t,e,r){\"use strict\";t.exports=r(57516)},40549:function(t,e,r){\"use strict\";t.exports=r(98128)},49866:function(t,e,r){\"use strict\";t.exports=r(99442)},36089:function(t,e,r){\"use strict\";t.exports=r(93740)},19548:function(t,e,r){\"use strict\";t.exports=r(8729)},35831:function(t,e,r){\"use strict\";t.exports=r(93814)},61039:function(t,e,r){\"use strict\";t.exports=r(14382)},97040:function(t,e,r){\"use strict\";t.exports=r(51759)},77986:function(t,e,r){\"use strict\";t.exports=r(10421)},24296:function(t,e,r){\"use strict\";t.exports=r(43102)},58872:function(t,e,r){\"use strict\";t.exports=r(92165)},29626:function(t,e,r){\"use strict\";t.exports=r(3325)},65591:function(t,e,r){\"use strict\";t.exports=r(36071)},69738:function(t,e,r){\"use strict\";t.exports=r(43905)},92650:function(t,e,r){\"use strict\";t.exports=r(35902)},35630:function(t,e,r){\"use strict\";t.exports=r(69816)},73434:function(t,e,r){\"use strict\";t.exports=r(94507)},27909:function(t,e,r){\"use strict\";var n=r(19548);n.register([r(27206),r(5224),r(58872),r(65591),r(69738),r(92650),r(49866),r(25743),r(6197),r(97040),r(85461),r(73434),r(54201),r(81299),r(47645),r(35630),r(77986),r(83043),r(93005),r(96881),r(4534),r(50581),r(40549),r(77900),r(47582),r(35080),r(21641),r(17280),r(5861),r(29626),r(10021),r(65317),r(96268),r(61396),r(35831),r(16122),r(46163),r(40344),r(40338),r(48131),r(36089),r(55334),r(75557),r(19440),r(99488),r(59893),r(97393),r(98222),r(61039),r(24296),r(66398),r(59509)]),t.exports=n},46163:function(t,e,r){\"use strict\";t.exports=r(15154)},96881:function(t,e,r){\"use strict\";t.exports=r(64943)},50581:function(t,e,r){\"use strict\";t.exports=r(21164)},55334:function(t,e,r){\"use strict\";t.exports=r(54186)},65317:function(t,e,r){\"use strict\";t.exports=r(94873)},10021:function(t,e,r){\"use strict\";t.exports=r(67618)},54201:function(t,e,r){\"use strict\";t.exports=r(58810)},5861:function(t,e,r){\"use strict\";t.exports=r(20593)},16122:function(t,e,r){\"use strict\";t.exports=r(29396)},83043:function(t,e,r){\"use strict\";t.exports=r(13551)},48131:function(t,e,r){\"use strict\";t.exports=r(46858)},47582:function(t,e,r){\"use strict\";t.exports=r(17988)},21641:function(t,e,r){\"use strict\";t.exports=r(68868)},96268:function(t,e,r){\"use strict\";t.exports=r(20467)},19440:function(t,e,r){\"use strict\";t.exports=r(91271)},99488:function(t,e,r){\"use strict\";t.exports=r(21461)},97393:function(t,e,r){\"use strict\";t.exports=r(85956)},25743:function(t,e,r){\"use strict\";t.exports=r(52979)},66398:function(t,e,r){\"use strict\";t.exports=r(32275)},17280:function(t,e,r){\"use strict\";t.exports=r(6419)},77900:function(t,e,r){\"use strict\";t.exports=r(61510)},81299:function(t,e,r){\"use strict\";t.exports=r(87619)},93005:function(t,e,r){\"use strict\";t.exports=r(93601)},40344:function(t,e,r){\"use strict\";t.exports=r(96595)},47645:function(t,e,r){\"use strict\";t.exports=r(70954)},6197:function(t,e,r){\"use strict\";t.exports=r(47462)},4534:function(t,e,r){\"use strict\";t.exports=r(17659)},85461:function(t,e,r){\"use strict\";t.exports=r(19990)},82884:function(t){\"use strict\";t.exports=[{path:\"\",backoff:0},{path:\"M-2.4,-3V3L0.6,0Z\",backoff:.6},{path:\"M-3.7,-2.5V2.5L1.3,0Z\",backoff:1.3},{path:\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\",backoff:1.55},{path:\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\",backoff:1.6},{path:\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\",backoff:2},{path:\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\",backoff:0,noRotate:!0},{path:\"M2,2V-2H-2V2Z\",backoff:0,noRotate:!0}]},50215:function(t,e,r){\"use strict\";var n=r(82884),i=r(41940),a=r(85555),o=r(44467).templatedArray;r(24695),t.exports=o(\"annotation\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},text:{valType:\"string\",editType:\"calc+arraydraw\"},textangle:{valType:\"angle\",dflt:0,editType:\"calc+arraydraw\"},font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),width:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},height:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"center\",editType:\"arraydraw\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"arraydraw\"},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},borderpad:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},arrowcolor:{valType:\"color\",editType:\"arraydraw\"},arrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},startarrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},arrowside:{valType:\"flaglist\",flags:[\"end\",\"start\"],extras:[\"none\"],dflt:\"end\",editType:\"arraydraw\"},arrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},startarrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},arrowwidth:{valType:\"number\",min:.1,editType:\"calc+arraydraw\"},standoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},startstandoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},ax:{valType:\"any\",editType:\"calc+arraydraw\"},ay:{valType:\"any\",editType:\"calc+arraydraw\"},axref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.x.toString()],editType:\"calc\"},ayref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.y.toString()],editType:\"calc\"},xref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.x.toString()],editType:\"calc\"},x:{valType:\"any\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},xshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.y.toString()],editType:\"calc\"},y:{valType:\"any\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},clicktoshow:{valType:\"enumerated\",values:[!1,\"onoff\",\"onout\"],dflt:!1,editType:\"arraydraw\"},xclick:{valType:\"any\",editType:\"arraydraw\"},yclick:{valType:\"any\",editType:\"arraydraw\"},hovertext:{valType:\"string\",editType:\"arraydraw\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",editType:\"arraydraw\"},font:i({editType:\"arraydraw\"}),editType:\"arraydraw\"},captureevents:{valType:\"boolean\",editType:\"arraydraw\"},editType:\"calc\",_deprecated:{ref:{valType:\"string\",editType:\"calc\"}}})},3749:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(92605).draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach((function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref),a=i.getRefType(e.xref),o=i.getRefType(e.yref);e._extremes={},\"range\"===a&&s(e,r),\"range\"===o&&s(e,n)}))}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t[\"a\"+a],l=t[a+\"ref\"],u=t[\"a\"+a+\"ref\"],c=t[\"_\"+a+\"padplus\"],f=t[\"_\"+a+\"padminus\"],h={x:1,y:-1}[a]*t[a+\"shift\"],p=3*t.arrowsize*t.arrowwidth||0,d=p+h,v=p-h,g=3*t.startarrowsize*t.arrowwidth||0,y=g+h,m=g-h;if(u===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:v}),b=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(c,y),ppadminus:Math.max(f,m)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else y=s?y+s:y,m=s?m-s:m,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(c,d,y),ppadminus:Math.max(f,v,m)});t._extremes[n]=r}t.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},44317:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(44467).arrayEditor;function o(t,e){var r,n,i,a,o,l,u,c=t._fullLayout.annotations,f=[],h=[],p=[],d=(e||[]).length;for(r=0;r<c.length;r++)if(a=(i=c[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,u=o.yaxis,l._id===i.xref&&u._id===i.yref&&l.d2r(o.x)===s(i._xclick,l)&&u.d2r(o.y)===s(i._yclick,u)){(i.visible?\"onout\"===a?h:p:f).push(r);break}n===d&&i.visible&&\"onout\"===a&&h.push(r)}return{on:f,off:h,explicitOff:p}}function s(t,e){return\"log\"===e.type?e.l2r(t):e.d2r(t)}t.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),u=l.on,c=l.off.concat(l.explicitOff),f={},h=t._fullLayout.annotations;if(u.length||c.length){for(r=0;r<u.length;r++)(s=a(t.layout,\"annotations\",h[u[r]])).modifyItem(\"visible\",!0),n.extendFlat(f,s.getUpdateObj());for(r=0;r<c.length;r++)(s=a(t.layout,\"annotations\",h[c[r]])).modifyItem(\"visible\",!1),n.extendFlat(f,s.getUpdateObj());return i.call(\"update\",t,{},f)}}}},25625:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901);t.exports=function(t,e,r,a){a(\"opacity\");var o=a(\"bgcolor\"),s=a(\"bordercolor\"),l=i.opacity(s);a(\"borderpad\");var u=a(\"borderwidth\"),c=a(\"showarrow\");if(a(\"text\",c?\" \":r._dfltTitle.annotation),a(\"textangle\"),n.coerceFont(a,\"font\",r.font),a(\"width\"),a(\"align\"),a(\"height\")&&a(\"valign\"),c){var f,h,p=a(\"arrowside\");-1!==p.indexOf(\"end\")&&(f=a(\"arrowhead\"),h=a(\"arrowsize\")),-1!==p.indexOf(\"start\")&&(a(\"startarrowhead\",f),a(\"startarrowsize\",h)),a(\"arrowcolor\",l?e.bordercolor:i.defaultLine),a(\"arrowwidth\",2*(l&&u||1)),a(\"standoff\"),a(\"startstandoff\")}var d=a(\"hovertext\"),v=r.hoverlabel||{};if(d){var g=a(\"hoverlabel.bgcolor\",v.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),y=a(\"hoverlabel.bordercolor\",v.bordercolor||i.contrast(g));n.coerceFont(a,\"hoverlabel.font\",{family:v.font.family,size:v.font.size,color:v.font.color||y})}a(\"captureevents\",!!d)}},94128:function(t,e,r){\"use strict\";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o=\"log\"===r&&\"linear\"===e.type,s=\"linear\"===r&&\"log\"===e.type;if(o||s)for(var l,u,c=t._fullLayout.annotations,f=e._id.charAt(0),h=0;h<c.length;h++)l=c[h],u=\"annotations[\"+h+\"].\",l[f+\"ref\"]===e._id&&p(f),l[\"a\"+f+\"ref\"]===e._id&&p(\"a\"+f);function p(t){var r=l[t],s=null;s=o?i(r,e.range):Math.pow(10,r),n(s)||(s=null),a(u+t,s)}}},84046:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(50215);function l(t,e,r){function a(r,i){return n.coerce(t,e,s,r,i)}var l=a(\"visible\"),u=a(\"clicktoshow\");if(l||u){o(t,e,r,a);for(var c=e.showarrow,f=[\"x\",\"y\"],h=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var v=f[d],g=i.coerceRef(t,e,p,v,\"\",\"paper\");if(\"paper\"!==g&&i.getFromId(p,g)._annIndices.push(e._index),i.coercePosition(e,p,a,g,v,.5),c){var y=\"a\"+v,m=i.coerceRef(t,e,p,y,\"pixel\",[\"pixel\",\"paper\"]);\"pixel\"!==m&&m!==g&&(m=e[y]=\"pixel\");var x=\"pixel\"===m?h[d]:.4;i.coercePosition(e,p,a,m,y,x)}a(v+\"anchor\"),a(v+\"shift\")}if(n.noneOrAll(t,e,[\"x\",\"y\"]),c&&n.noneOrAll(t,e,[\"ax\",\"ay\"]),u){var b=a(\"xclick\"),_=a(\"yclick\");e._xclick=void 0===b?e.x:i.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:i.cleanPosition(_,p,e.yref)}}}t.exports=function(t,e){a(t,e,{name:\"annotations\",handleItemDefaults:l})}},92605:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(89298),u=r(7901),c=r(91424),f=r(30211),h=r(63893),p=r(6964),d=r(28569),v=r(44467).arrayEditor,g=r(13011);function y(t,e){var r=t._fullLayout.annotations[e]||{},n=l.getFromId(t,r.xref),i=l.getFromId(t,r.yref);n&&n.setScale(),i&&i.setScale(),x(t,r,e,!1,n,i)}function m(t,e,r,n,i){var a=i[r],o=i[r+\"ref\"],s=-1!==r.indexOf(\"y\"),u=\"domain\"===l.getRefType(o),c=s?n.h:n.w;return t?u?a+(s?-e:e)/t._length:t.p2r(t.r2p(a)+e):a+(s?-e:e)/c}function x(t,e,r,a,y,x){var b,_,w=t._fullLayout,T=t._fullLayout._size,k=t._context.edits;a?(b=\"annotation-\"+a,_=a+\".annotations\"):(b=\"annotation\",_=\"annotations\");var A=v(t.layout,_,e),M=A.modifyBase,S=A.modifyItem,E=A.getUpdateObj;w._infolayer.selectAll(\".\"+b+'[data-index=\"'+r+'\"]').remove();var L=\"clip\"+w._uid+\"_ann\"+r;if(e._input&&!1!==e.visible){var C={x:{},y:{}},P=+e.textangle||0,O=w._infolayer.append(\"g\").classed(b,!0).attr(\"data-index\",String(r)).style(\"opacity\",e.opacity),I=O.append(\"g\").classed(\"annotation-text-g\",!0),D=k[e.showarrow?\"annotationTail\":\"annotationPosition\"],z=e.captureevents||k.annotationText||D,R=I.append(\"g\").style(\"pointer-events\",z?\"all\":null).call(p,\"pointer\").on(\"click\",(function(){t._dragging=!1,t.emit(\"plotly_clickannotation\",Z(n.event))}));e.hovertext&&R.on(\"mouseover\",(function(){var r=e.hoverlabel,n=r.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();f.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:t})})).on(\"mouseout\",(function(){f.loneUnhover(w._hoverlayer.node())}));var F=e.borderwidth,B=e.borderpad,N=F+B,j=R.append(\"rect\").attr(\"class\",\"bg\").style(\"stroke-width\",F+\"px\").call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor),U=e.width||e.height,V=w._topclips.selectAll(\"#\"+L).data(U?[0]:[]);V.enter().append(\"clipPath\").classed(\"annclip\",!0).attr(\"id\",L).append(\"rect\"),V.exit().remove();var H=e.font,q=w._meta?o.templateString(e.text,w._meta):e.text,G=R.append(\"text\").classed(\"annotation-text\",!0).text(q);k.annotationText?G.call(h.makeEditable,{delegate:R,gd:t}).call(Y).on(\"edit\",(function(r){e.text=r,this.call(Y),S(\"text\",r),y&&y.autorange&&M(y._name+\".autorange\",!0),x&&x.autorange&&M(x._name+\".autorange\",!0),i.call(\"_guiRelayout\",t,E())})):G.call(Y)}else n.selectAll(\"#\"+L).remove();function Z(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return a&&(n.subplotId=a),n}function Y(r){return r.call(c.font,H).attr({\"text-anchor\":{left:\"start\",right:\"end\"}[e.align]||\"middle\"}),h.convertToTspans(r,t,W),r}function W(){var r=G.selectAll(\"a\");1===r.size()&&r.text()===G.text()&&R.insert(\"a\",\":first-child\").attr({\"xlink:xlink:href\":r.attr(\"xlink:href\"),\"xlink:xlink:show\":r.attr(\"xlink:show\")}).style({cursor:\"pointer\"}).node().appendChild(j.node());var n=R.select(\".annotation-text-math-group\"),f=!n.empty(),v=c.bBox((f?n:G).node()),b=v.width,_=v.height,A=e.width||b,z=e.height||_,B=Math.round(A+2*N),H=Math.round(z+2*N);function q(t,e){return\"auto\"===e&&(e=t<1/3?\"left\":t>2/3?\"right\":\"center\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var Y=!1,W=[\"x\",\"y\"],X=0;X<W.length;X++){var J,K,$,Q,tt,et=W[X],rt=e[et+\"ref\"]||et,nt=e[\"a\"+et+\"ref\"],it={x:y,y:x}[et],at=(P+(\"x\"===et?0:-90))*Math.PI/180,ot=B*Math.cos(at),st=H*Math.sin(at),lt=Math.abs(ot)+Math.abs(st),ut=e[et+\"anchor\"],ct=e[et+\"shift\"]*(\"x\"===et?1:-1),ft=C[et],ht=l.getRefType(rt);if(it&&\"domain\"!==ht){var pt=it.r2fraction(e[et]);(pt<0||pt>1)&&(nt===rt?((pt=it.r2fraction(e[\"a\"+et]))<0||pt>1)&&(Y=!0):Y=!0),J=it._offset+it.r2p(e[et]),Q=.5}else{var dt=\"domain\"===ht;\"x\"===et?($=e[et],J=dt?it._offset+it._length*$:J=T.l+T.w*$):($=1-e[et],J=dt?it._offset+it._length*$:J=T.t+T.h*$),Q=e.showarrow?.5:$}if(e.showarrow){ft.head=J;var vt=e[\"a\"+et];if(tt=ot*q(.5,e.xanchor)-st*q(.5,e.yanchor),nt===rt){var gt=l.getRefType(nt);\"domain\"===gt?(\"y\"===et&&(vt=1-vt),ft.tail=it._offset+it._length*vt):\"paper\"===gt?\"y\"===et?(vt=1-vt,ft.tail=T.t+T.h*vt):ft.tail=T.l+T.w*vt:ft.tail=it._offset+it.r2p(vt),K=tt}else ft.tail=J+vt,K=tt+vt;ft.text=ft.tail+tt;var yt=w[\"x\"===et?\"width\":\"height\"];if(\"paper\"===rt&&(ft.head=o.constrain(ft.head,1,yt-1)),\"pixel\"===nt){var mt=-Math.max(ft.tail-3,ft.text),xt=Math.min(ft.tail+3,ft.text)-yt;mt>0?(ft.tail+=mt,ft.text+=mt):xt>0&&(ft.tail-=xt,ft.text-=xt)}ft.tail+=ct,ft.head+=ct}else K=tt=lt*q(Q,ut),ft.text=J+tt;ft.text+=ct,tt+=ct,K+=ct,e[\"_\"+et+\"padplus\"]=lt/2+K,e[\"_\"+et+\"padminus\"]=lt/2-K,e[\"_\"+et+\"size\"]=lt,e[\"_\"+et+\"shift\"]=tt}if(Y)R.remove();else{var bt=0,_t=0;if(\"left\"!==e.align&&(bt=(A-b)*(\"center\"===e.align?.5:1)),\"top\"!==e.valign&&(_t=(z-_)*(\"middle\"===e.valign?.5:1)),f)n.select(\"svg\").attr({x:N+bt-1,y:N+_t}).call(c.setClipUrl,U?L:null,t);else{var wt=N+_t-v.top,Tt=N+bt-v.left;G.call(h.positionText,Tt,wt).call(c.setClipUrl,U?L:null,t)}V.select(\"rect\").call(c.setRect,N,N,A,z),j.call(c.setRect,F/2,F/2,B-F,H-F),R.call(c.setTranslate,Math.round(C.x.text-B/2),Math.round(C.y.text-H/2)),I.attr({transform:\"rotate(\"+P+\",\"+C.x.text+\",\"+C.y.text+\")\"});var kt,At=function(r,n){O.selectAll(\".annotation-arrow-g\").remove();var l=C.x.head,f=C.y.head,h=C.x.tail+r,p=C.y.tail+n,v=C.x.text+r,b=C.y.text+n,_=o.rotationXYMatrix(P,v,b),w=o.apply2DTransform(_),A=o.apply2DTransform2(_),L=+j.attr(\"width\"),D=+j.attr(\"height\"),z=v-.5*L,F=z+L,B=b-.5*D,N=B+D,U=[[z,B,z,N],[z,N,F,N],[F,N,F,B],[F,B,z,B]].map(A);if(!U.reduce((function(t,e){return t^!!o.segmentsIntersect(l,f,l+1e6,f+1e6,e[0],e[1],e[2],e[3])}),!1)){U.forEach((function(t){var e=o.segmentsIntersect(h,p,l,f,t[0],t[1],t[2],t[3]);e&&(h=e.x,p=e.y)}));var V=e.arrowwidth,H=e.arrowcolor,q=e.arrowside,G=O.append(\"g\").style({opacity:u.opacity(H)}).classed(\"annotation-arrow-g\",!0),Z=G.append(\"path\").attr(\"d\",\"M\"+h+\",\"+p+\"L\"+l+\",\"+f).style(\"stroke-width\",V+\"px\").call(u.stroke,u.rgb(H));if(g(Z,q,e),k.annotationPosition&&Z.node().parentNode&&!a){var Y=l,W=f;if(e.standoff){var X=Math.sqrt(Math.pow(l-h,2)+Math.pow(f-p,2));Y+=e.standoff*(h-l)/X,W+=e.standoff*(p-f)/X}var J,K,$=G.append(\"path\").classed(\"annotation-arrow\",!0).classed(\"anndrag\",!0).classed(\"cursor-move\",!0).attr({d:\"M3,3H-3V-3H3ZM0,0L\"+(h-Y)+\",\"+(p-W),transform:s(Y,W)}).style(\"stroke-width\",V+6+\"px\").call(u.stroke,\"rgba(0,0,0,0)\").call(u.fill,\"rgba(0,0,0,0)\");d.init({element:$.node(),gd:t,prepFn:function(){var t=c.getTranslate(R);J=t.x,K=t.y,y&&y.autorange&&M(y._name+\".autorange\",!0),x&&x.autorange&&M(x._name+\".autorange\",!0)},moveFn:function(t,r){var n=w(J,K),i=n[0]+t,a=n[1]+r;R.call(c.setTranslate,i,a),S(\"x\",m(y,t,\"x\",T,e)),S(\"y\",m(x,r,\"y\",T,e)),e.axref===e.xref&&S(\"ax\",m(y,t,\"ax\",T,e)),e.ayref===e.yref&&S(\"ay\",m(x,r,\"ay\",T,e)),G.attr(\"transform\",s(t,r)),I.attr({transform:\"rotate(\"+P+\",\"+i+\",\"+a+\")\"})},doneFn:function(){i.call(\"_guiRelayout\",t,E());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}};e.showarrow&&At(0,0),D&&d.init({element:R.node(),gd:t,prepFn:function(){kt=I.attr(\"transform\")},moveFn:function(t,r){var n=\"pointer\";if(e.showarrow)e.axref===e.xref?S(\"ax\",m(y,t,\"ax\",T,e)):S(\"ax\",e.ax+t),e.ayref===e.yref?S(\"ay\",m(x,r,\"ay\",T.w,e)):S(\"ay\",e.ay+r),At(t,r);else{if(a)return;var i,o;if(y)i=m(y,t,\"x\",T,e);else{var l=e._xsize/T.w,u=e.x+(e._xshift-e.xshift)/T.w-l/2;i=d.align(u+t/T.w,l,0,1,e.xanchor)}if(x)o=m(x,r,\"y\",T,e);else{var c=e._ysize/T.h,f=e.y-(e._yshift+e.yshift)/T.h-c/2;o=d.align(f-r/T.h,c,0,1,e.yanchor)}S(\"x\",i),S(\"y\",o),y&&x||(n=d.getCursor(y?.5:i,x?.5:o,e.xanchor,e.yanchor))}I.attr({transform:s(t,r)+kt}),p(R,n)},clickFn:function(r,n){e.captureevents&&t.emit(\"plotly_clickannotation\",Z(n))},doneFn:function(){p(R),i.call(\"_guiRelayout\",t,E());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}}t.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(\".annotation\").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&y(t,r);return a.previousPromises(t)},drawOne:y,drawRaw:x}},13011:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(82884),o=r(71828),s=o.strScale,l=o.strRotate,u=o.strTranslate;t.exports=function(t,e,r){var o,c,f,h,p=t.node(),d=a[r.arrowhead||0],v=a[r.startarrowhead||0],g=(r.arrowwidth||1)*(r.arrowsize||1),y=(r.arrowwidth||1)*(r.startarrowsize||1),m=e.indexOf(\"start\")>=0,x=e.indexOf(\"end\")>=0,b=d.backoff*g+r.standoff,_=v.backoff*y+r.startstandoff;if(\"line\"===p.nodeName){o={x:+t.attr(\"x1\"),y:+t.attr(\"y1\")},c={x:+t.attr(\"x2\"),y:+t.attr(\"y2\")};var w=o.x-c.x,T=o.y-c.y;if(h=(f=Math.atan2(T,w))+Math.PI,b&&_&&b+_>Math.sqrt(w*w+T*T))return void D();if(b){if(b*b>w*w+T*T)return void D();var k=b*Math.cos(f),A=b*Math.sin(f);c.x+=k,c.y+=A,t.attr({x2:c.x,y2:c.y})}if(_){if(_*_>w*w+T*T)return void D();var M=_*Math.cos(f),S=_*Math.sin(f);o.x-=M,o.y-=S,t.attr({x1:o.x,y1:o.y})}}else if(\"path\"===p.nodeName){var E=p.getTotalLength(),L=\"\";if(E<b+_)return void D();var C=p.getPointAtLength(0),P=p.getPointAtLength(.1);f=Math.atan2(C.y-P.y,C.x-P.x),o=p.getPointAtLength(Math.min(_,E)),L=\"0px,\"+_+\"px,\";var O=p.getPointAtLength(E),I=p.getPointAtLength(E-.1);h=Math.atan2(O.y-I.y,O.x-I.x),c=p.getPointAtLength(Math.max(0,E-b)),L+=E-(L?_+b:b)+\"px,\"+E+\"px\",t.style(\"stroke-dasharray\",L)}function D(){t.style(\"stroke-dasharray\",\"0px,100px\")}function z(e,a,o,c){e.path&&(e.noRotate&&(o=0),n.select(p.parentNode).append(\"path\").attr({class:t.attr(\"class\"),d:e.path,transform:u(a.x,a.y)+l(180*o/Math.PI)+s(c)}).style({fill:i.rgb(r.arrowcolor),\"stroke-width\":0}))}m&&z(v,o,f,y),x&&z(d,c,h,g)}},32745:function(t,e,r){\"use strict\";var n=r(92605),i=r(44317);t.exports={moduleType:\"component\",name:\"annotations\",layoutAttributes:r(50215),supplyLayoutDefaults:r(84046),includeBasePlot:r(76325)(\"annotations\"),calcAutorange:r(3749),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:r(94128)}},26997:function(t,e,r){\"use strict\";var n=r(50215),i=r(30962).overrideAll,a=r(44467).templatedArray;t.exports=i(a(\"annotation\",{visible:n.visible,x:{valType:\"any\"},y:{valType:\"any\"},z:{valType:\"any\"},ax:{valType:\"number\"},ay:{valType:\"number\"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),\"calc\",\"from-root\")},5485:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298);function a(t,e){var r=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:\"linear\",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+r.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-r.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}t.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)a(e[r],t);t.fullLayout._infolayer.selectAll(\".annotation-\"+t.id).remove()}},20226:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(85501),o=r(25625),s=r(26997);function l(t,e,r,a){function l(r,i){return n.coerce(t,e,s,r,i)}function u(t){var n=t+\"axis\",a={_fullLayout:{}};return a._fullLayout[n]=r[n],i.coercePosition(e,a,l,t,t,.5)}l(\"visible\")&&(o(t,e,a.fullLayout,l),u(\"x\"),u(\"y\"),u(\"z\"),n.noneOrAll(t,e,[\"x\",\"y\",\"z\"]),e.xref=\"x\",e.yref=\"y\",e.zref=\"z\",l(\"xanchor\"),l(\"yanchor\"),l(\"xshift\"),l(\"yshift\"),e.showarrow&&(e.axref=\"pixel\",e.ayref=\"pixel\",l(\"ax\",-10),l(\"ay\",-30),n.noneOrAll(t,e,[\"ax\",\"ay\"])))}t.exports=function(t,e,r){a(t,e,{name:\"annotations\",handleItemDefaults:l,fullLayout:r.fullLayout})}},82188:function(t,e,r){\"use strict\";var n=r(92605).drawRaw,i=r(63538),a=[\"x\",\"y\",\"z\"];t.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],u=!1,c=0;c<3;c++){var f=a[c],h=l[f],p=e[f+\"axis\"].r2fraction(h);if(p<0||p>1){u=!0;break}}u?t.fullLayout._infolayer.select(\".annotation-\"+t.id+'[data-index=\"'+s+'\"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},2468:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828);t.exports={moduleType:\"component\",name:\"annotations3d\",schema:{subplots:{scene:{annotations:r(26997)}}},layoutAttributes:r(26997),handleDefaults:r(20226),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(r)for(var a=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];a.test(l)&&(t[l].annotations||[]).length&&(i.pushUnique(e._basePlotModules,r),i.pushUnique(e._subplots.gl3d,l))}},convert:r(5485),draw:r(82188)}},7561:function(t,e,r){\"use strict\";t.exports=r(63489),r(94338),r(3961),r(38751),r(86825),r(37715),r(99384),r(43805),r(88874),r(83290),r(29108),r(55422),r(94320),r(31320),r(51367),r(21457)},72201:function(t,e,r){\"use strict\";var n=r(7561),i=r(71828),a=r(50606),o=a.EPOCHJD,s=a.ONEDAY,l={valType:\"enumerated\",values:i.sortObjectKeys(n.calendars),editType:\"calc\",dflt:\"gregorian\"},u=function(t,e,r,n){var a={};return a[r]=l,i.coerce(t,e,a,r,n)},c=\"##\",f={d:{0:\"dd\",\"-\":\"d\"},e:{0:\"d\",\"-\":\"d\"},a:{0:\"D\",\"-\":\"D\"},A:{0:\"DD\",\"-\":\"DD\"},j:{0:\"oo\",\"-\":\"o\"},W:{0:\"ww\",\"-\":\"w\"},m:{0:\"mm\",\"-\":\"m\"},b:{0:\"M\",\"-\":\"M\"},B:{0:\"MM\",\"-\":\"MM\"},y:{0:\"yy\",\"-\":\"yy\"},Y:{0:\"yyyy\",\"-\":\"yyyy\"},U:c,w:c,c:{0:\"D M d %X yyyy\",\"-\":\"D M d %X yyyy\"},x:{0:\"mm/dd/yyyy\",\"-\":\"mm/dd/yyyy\"}},h={};function p(t){var e=h[t];return e||(h[t]=n.instance(t))}function d(t){return i.extendFlat({},l,{description:t})}function v(t){return\"Sets the calendar system to use with `\"+t+\"` date data.\"}var g={xcalendar:d(v(\"x\"))},y=i.extendFlat({},g,{ycalendar:d(v(\"y\"))}),m=i.extendFlat({},y,{zcalendar:d(v(\"z\"))}),x=d([\"Sets the calendar system to use for `range` and `tick0`\",\"if this is a date axis. This does not set the calendar for\",\"interpreting data on this axis, that's specified in the trace\",\"or via the global `layout.calendar`\"].join(\" \"));t.exports={moduleType:\"component\",name:\"calendars\",schema:{traces:{scatter:y,bar:y,box:y,heatmap:y,contour:y,histogram:y,histogram2d:y,histogram2dcontour:y,scatter3d:m,surface:m,mesh3d:m,scattergl:y,ohlc:g,candlestick:g},layout:{calendar:d([\"Sets the default calendar system to use for interpreting and\",\"displaying dates throughout the plot.\"].join(\" \"))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d([\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\",\"Sets the calendar system to use for `value`, if it is a date.\"].join(\" \")),targetcalendar:d([\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\",\"Sets the calendar system to use for `target`, if it is an\",\"array of dates. If `target` is a string (eg *x*) we use the\",\"corresponding trace attribute (eg `xcalendar`) if it exists,\",\"even if `targetcalendar` is provided.\"].join(\" \"))}}},layoutAttributes:l,handleDefaults:u,handleTraceDefaults:function(t,e,r,n){for(var i=0;i<r.length;i++)u(t,e,r[i]+\"calendar\",n.calendar)},CANONICAL_SUNDAY:{chinese:\"2000-01-02\",coptic:\"2000-01-03\",discworld:\"2000-01-03\",ethiopian:\"2000-01-05\",hebrew:\"5000-01-01\",islamic:\"1000-01-02\",julian:\"2000-01-03\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-05\",nepali:\"2000-01-05\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-04\",thai:\"2000-01-04\",ummalqura:\"1400-01-06\"},CANONICAL_TICK:{chinese:\"2000-01-01\",coptic:\"2000-01-01\",discworld:\"2000-01-01\",ethiopian:\"2000-01-01\",hebrew:\"5000-01-01\",islamic:\"1000-01-01\",julian:\"2000-01-01\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-01\",nepali:\"2000-01-01\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-01\",thai:\"2000-01-01\",ummalqura:\"1400-01-01\"},DFLTRANGE:{chinese:[\"2000-01-01\",\"2001-01-01\"],coptic:[\"1700-01-01\",\"1701-01-01\"],discworld:[\"1800-01-01\",\"1801-01-01\"],ethiopian:[\"2000-01-01\",\"2001-01-01\"],hebrew:[\"5700-01-01\",\"5701-01-01\"],islamic:[\"1400-01-01\",\"1401-01-01\"],julian:[\"2000-01-01\",\"2001-01-01\"],mayan:[\"5200-01-01\",\"5201-01-01\"],nanakshahi:[\"0500-01-01\",\"0501-01-01\"],nepali:[\"2000-01-01\",\"2001-01-01\"],persian:[\"1400-01-01\",\"1401-01-01\"],jalali:[\"1400-01-01\",\"1401-01-01\"],taiwan:[\"0100-01-01\",\"0101-01-01\"],thai:[\"2500-01-01\",\"2501-01-01\"],ummalqura:[\"1400-01-01\",\"1401-01-01\"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,i,a,l,u,h=Math.floor((e+.05)/s)+o,d=p(r).fromJD(h),v=0;-1!==(v=t.indexOf(\"%\",v));)\"0\"===(n=t.charAt(v+1))||\"-\"===n||\"_\"===n?(a=3,i=t.charAt(v+2),\"_\"===n&&(n=\"-\")):(i=n,n=\"0\",a=2),(l=f[i])?(u=l===c?c:d.formatDate(l[n]),t=t.substr(0,v)+u+t.substr(v+a),v+=u.length):v+=a;return t}}},22399:function(t,e){\"use strict\";e.defaults=[\"#1f77b4\",\"#ff7f0e\",\"#2ca02c\",\"#d62728\",\"#9467bd\",\"#8c564b\",\"#e377c2\",\"#7f7f7f\",\"#bcbd22\",\"#17becf\"],e.defaultLine=\"#444\",e.lightLine=\"#eee\",e.background=\"#fff\",e.borderLine=\"#BEC8D9\",e.lightFraction=1e3/11},7901:function(t,e,r){\"use strict\";var n=r(84267),i=r(92770),a=r(73627).isTypedArray,o=t.exports={},s=r(22399);o.defaults=s.defaults;var l=o.defaultLine=s.defaultLine;o.lightLine=s.lightLine;var u=o.background=s.background;function c(t){if(i(t)||\"string\"!=typeof t)return t;var e=t.trim();if(\"rgb\"!==e.substr(0,3))return t;var r=e.match(/^rgba?\\s*\\(([^()]*)\\)$/);if(!r)return t;var n=r[1].trim().split(/\\s*[\\s,]\\s*/),a=\"a\"===e.charAt(3)&&4===n.length;if(!a&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+\", \"+Math.round(255*n[1])+\", \"+Math.round(255*n[2]);return a?\"rgba(\"+s+\", \"+n[3]+\")\":\"rgb(\"+s+\")\"}o.tinyRGB=function(t){var e=t.toRgb();return\"rgb(\"+Math.round(e.r)+\", \"+Math.round(e.g)+\", \"+Math.round(e.b)+\")\"},o.rgb=function(t){return o.tinyRGB(n(t))},o.opacity=function(t){return t?n(t).getAlpha():0},o.addOpacity=function(t,e){var r=n(t).toRgb();return\"rgba(\"+Math.round(r.r)+\", \"+Math.round(r.g)+\", \"+Math.round(r.b)+\", \"+e+\")\"},o.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||u).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},o.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(o.combine(t,u))),(i.isDark()?e?i.lighten(e):u:r?i.darken(r):l).toString()},o.stroke=function(t,e){var r=n(e);t.style({stroke:o.tinyRGB(r),\"stroke-opacity\":r.getAlpha()})},o.fill=function(t,e){var r=n(e);t.style({fill:o.tinyRGB(r),\"fill-opacity\":r.getAlpha()})},o.clean=function(t){if(t&&\"object\"==typeof t){var e,r,n,i,s=Object.keys(t);for(e=0;e<s.length;e++)if(i=t[n=s[e]],\"color\"===n.substr(n.length-5))if(Array.isArray(i))for(r=0;r<i.length;r++)i[r]=c(i[r]);else t[n]=c(i);else if(\"colorscale\"===n.substr(n.length-10)&&Array.isArray(i))for(r=0;r<i.length;r++)Array.isArray(i[r])&&(i[r][1]=c(i[r][1]));else if(Array.isArray(i)){var l=i[0];if(!Array.isArray(l)&&l&&\"object\"==typeof l)for(r=0;r<i.length;r++)o.clean(i[r])}else i&&\"object\"==typeof i&&!a(i)&&o.clean(i)}}},63583:function(t,e,r){\"use strict\";var n=r(13838),i=r(41940),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({orientation:{valType:\"enumerated\",values:[\"h\",\"v\"],dflt:\"v\"},thicknessmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\"},thickness:{valType:\"number\",min:0,dflt:30},lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\"},xref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"]},xpad:{valType:\"number\",min:0,dflt:10},y:{valType:\"number\"},yref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"]},ypad:{valType:\"number\",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:\"number\",min:0,dflt:0},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},tickmode:n.minor.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:\"\"}),ticklabeloverflow:a({},n.ticklabeloverflow,{}),ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\"},ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,ticklabelstep:n.ticklabelstep,showticklabels:n.showticklabels,labelalias:n.labelalias,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,minexponent:n.minexponent,showexponent:n.showexponent,title:{text:{valType:\"string\"},font:i({}),side:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"]}},_deprecated:{title:{valType:\"string\"},titlefont:i({}),titleside:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"],dflt:\"top\"}}},\"colorbars\",\"from-root\")},30939:function(t){\"use strict\";t.exports={cn:{colorbar:\"colorbar\",cbbg:\"cbbg\",cbfill:\"cbfill\",cbfills:\"cbfills\",cbline:\"cbline\",cblines:\"cblines\",cbaxis:\"cbaxis\",cbtitleunshift:\"cbtitleunshift\",cbtitle:\"cbtitle\",cboutline:\"cboutline\",crisp:\"crisp\",jsPlaceholder:\"js-placeholder\"}}},62499:function(t,e,r){\"use strict\";var n=r(71828),i=r(44467),a=r(26218),o=r(38701),s=r(96115),l=r(89426),u=r(63583);t.exports=function(t,e,r){var c=i.newContainer(e,\"colorbar\"),f=t.colorbar||{};function h(t,e){return n.coerce(f,c,u,t,e)}var p=r.margin||{t:0,b:0,l:0,r:0},d=r.width-p.l-p.r,v=r.height-p.t-p.b,g=\"v\"===h(\"orientation\"),y=h(\"thicknessmode\");h(\"thickness\",\"fraction\"===y?30/(g?d:v):30);var m=h(\"lenmode\");h(\"len\",\"fraction\"===m?1:g?v:d);var x,b,_,w=\"paper\"===h(\"yref\"),T=\"paper\"===h(\"xref\"),k=\"left\";g?(_=\"middle\",k=T?\"left\":\"right\",x=T?1.02:1,b=.5):(_=w?\"bottom\":\"top\",k=\"center\",x=.5,b=w?1.02:1),n.coerce(f,c,{x:{valType:\"number\",min:T?-2:0,max:T?3:1,dflt:x}},\"x\"),n.coerce(f,c,{y:{valType:\"number\",min:w?-2:0,max:w?3:1,dflt:b}},\"y\"),h(\"xanchor\",k),h(\"xpad\"),h(\"yanchor\",_),h(\"ypad\"),n.noneOrAll(f,c,[\"x\",\"y\"]),h(\"outlinecolor\"),h(\"outlinewidth\"),h(\"bordercolor\"),h(\"borderwidth\"),h(\"bgcolor\");var A=n.coerce(f,c,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:g?[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]:[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]}},\"ticklabelposition\");h(\"ticklabeloverflow\",-1!==A.indexOf(\"inside\")?\"hide past domain\":\"hide past div\"),a(f,c,h,\"linear\");var M=r.font,S={outerTicks:!1,font:M};-1!==A.indexOf(\"inside\")&&(S.bgColor=\"black\"),l(f,c,h,\"linear\",S),s(f,c,h,\"linear\",S),o(f,c,h,\"linear\",S),h(\"title.text\",r._dfltTitle.colorbar);var E=c.showticklabels?c.tickfont:M,L=n.extendFlat({},E,{color:M.color,size:n.bigFont(E.size)});n.coerceFont(h,\"title.font\",L),h(\"title.side\",g?\"top\":\"right\")}},98981:function(t,e,r){\"use strict\";var n=r(39898),i=r(84267),a=r(74875),o=r(73972),s=r(89298),l=r(28569),u=r(71828),c=u.strTranslate,f=r(1426).extendFlat,h=r(6964),p=r(91424),d=r(7901),v=r(92998),g=r(63893),y=r(52075).flipScale,m=r(71453),x=r(52830),b=r(13838),_=r(18783),w=_.LINE_SPACING,T=_.FROM_TL,k=_.FROM_BR,A=r(30939).cn;t.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll(\"g.\"+A.colorbar).data(function(t){var e,r,n,i,a=t._fullLayout,o=t.calcdata,s=[];function l(t){return f(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function u(){\"function\"==typeof i.calc?i.calc(t,n,e):(e._fillgradient=r.reversescale?y(r.colorscale):r.colorscale,e._zrange=[r[i.min],r[i.max]])}for(var c=0;c<o.length;c++){var h=o[c];if((n=h[0].trace)._module){var p=n._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),v=d?p:[p],g=0;g<v.length;g++){var m=(i=v[g]).container;(r=m?n[m]:n)&&r.showscale&&((e=l(r.colorbar))._id=\"cb\"+n.uid+(d&&m?\"-\"+m:\"\"),e._traceIndex=n.index,e._propPrefix=(m?m+\".\":\"\")+\"colorbar.\",e._meta=n._meta,u(),s.push(e))}}}for(var x in a._colorAxes)if((r=a[x]).showscale){var b=a._colorAxes[x];(e=l(r.colorbar))._id=\"cb\"+x,e._propPrefix=x+\".colorbar.\",e._meta=a._meta,i={min:\"cmin\",max:\"cmax\"},\"heatmap\"!==b[0]&&(n=b[1],i.calc=n._module.colorbar.calc),u(),s.push(e)}return s}(t),(function(t){return t._id}));e.enter().append(\"g\").attr(\"class\",(function(t){return t._id})).classed(A.colorbar,!0),e.each((function(e){var r=n.select(this);u.ensureSingle(r,\"rect\",A.cbbg),u.ensureSingle(r,\"g\",A.cbfills),u.ensureSingle(r,\"g\",A.cblines),u.ensureSingle(r,\"g\",A.cbaxis,(function(t){t.classed(A.crisp,!0)})),u.ensureSingle(r,\"g\",A.cbtitleunshift,(function(t){t.append(\"g\").classed(A.cbtitle,!0)})),u.ensureSingle(r,\"rect\",A.cboutline);var y=function(t,e,r){var o=\"v\"===e.orientation,l=e.len,h=e.lenmode,y=e.thickness,_=e.thicknessmode,M=e.outlinewidth,S=e.borderwidth,E=e.bgcolor,L=e.xanchor,C=e.yanchor,P=e.xpad,O=e.ypad,I=e.x,D=o?e.y:1-e.y,z=\"paper\"===e.yref,R=\"paper\"===e.xref,F=r._fullLayout,B=F._size,N=e._fillcolor,j=e._line,U=e.title,V=U.side,H=e._zrange||n.extent((\"function\"==typeof N?N:j.color).domain()),q=\"function\"==typeof j.color?j.color:function(){return j.color},G=\"function\"==typeof N?N:function(){return N},Z=e._levels,Y=function(t,e,r){var n,i,a=e._levels,o=[],s=[],l=a.end+a.size/100,u=a.size,c=1.001*r[0]-.001*r[1],f=1.001*r[1]-.001*r[0];for(i=0;i<1e5&&(n=a.start+i*u,!(u>0?n>=l:n<=l));i++)n>c&&n<f&&o.push(n);if(e._fillgradient)s=[0];else if(\"function\"==typeof e._fillcolor){var h=e._filllevels;if(h)for(l=h.end+h.size/100,u=h.size,i=0;i<1e5&&(n=h.start+i*u,!(u>0?n>=l:n<=l));i++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map((function(t){return t-a.size/2}))).push(s[s.length-1]+a.size)}else e._fillcolor&&\"string\"==typeof e._fillcolor&&(s=[0]);return a.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,H),W=Y.fill,X=Y.line,J=Math.round(y*(\"fraction\"===_?o?B.w:B.h:1)),K=J/(o?B.w:B.h),$=Math.round(l*(\"fraction\"===h?o?B.h:B.w:1)),Q=$/(o?B.h:B.w),tt=R?B.w:r._fullLayout.width,et=z?B.h:r._fullLayout.height,rt=Math.round(o?I*tt+P:D*et+O),nt={center:.5,right:1}[L]||0,it={top:1,middle:.5}[C]||0,at=o?I-nt*K:D-it*K,ot=o?D-it*Q:I-nt*Q,st=Math.round(o?et*(1-ot):tt*ot);e._lenFrac=Q,e._thickFrac=K,e._uFrac=at,e._vFrac=ot;var lt=e._axis=function(t,e,r){var n=t._fullLayout,i=\"v\"===e.orientation,a={type:\"linear\",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,labelalias:e.labelalias,ticklabelposition:e.ticklabelposition,ticklabeloverflow:e.ticklabeloverflow,ticklabelstep:e.ticklabelstep,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,minexponent:e.minexponent,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:\"free\",side:i?\"right\":\"bottom\",position:1},o=i?\"y\":\"x\",s={type:\"linear\",_id:o+e._id},l={letter:o,font:n.font,noHover:!0,noTickson:!0,noTicklabelmode:!0,noInsideRange:!0,calendar:n.calendar};function c(t,e){return u.coerce(a,s,b,t,e)}return m(a,s,c,l,n),x(a,s,c,l),s}(r,e,H);lt.position=K+(o?I+P/B.w:D+O/B.h);var ut=-1!==[\"top\",\"bottom\"].indexOf(V);if(o&&ut&&(lt.title.side=V,lt.titlex=I+P/B.w,lt.titley=ot+(\"top\"===U.side?Q-O/B.h:O/B.h)),o||ut||(lt.title.side=V,lt.titley=D+O/B.h,lt.titlex=ot+P/B.w),j.color&&\"auto\"===e.tickmode){lt.tickmode=\"linear\",lt.tick0=Z.start;var ct=Z.size,ft=u.constrain($/50,4,15)+1,ht=(H[1]-H[0])/((e.nticks||ft)*ct);if(ht>1){var pt=Math.pow(10,Math.floor(Math.log(ht)/Math.LN10));ct*=pt*u.roundUp(ht/pt,[2,5,10]),(Math.abs(Z.start)/Z.size+1e-6)%1<2e-6&&(lt.tick0=0)}lt.dtick=ct}lt.domain=o?[ot+O/B.h,ot+Q-O/B.h]:[ot+P/B.w,ot+Q-P/B.w],lt.setScale(),t.attr(\"transform\",c(Math.round(B.l),Math.round(B.t)));var dt,vt=t.select(\".\"+A.cbtitleunshift).attr(\"transform\",c(-Math.round(B.l),-Math.round(B.t))),gt=lt.ticklabelposition,yt=lt.title.font.size,mt=t.select(\".\"+A.cbaxis),xt=0,bt=0;function _t(n,i){var a={propContainer:lt,propName:e._propPrefix+\"title\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:F._dfltTitle.colorbar,containerGroup:t.select(\".\"+A.cbtitle)},o=\"h\"===n.charAt(0)?n.substr(1):\"h\"+n;t.selectAll(\".\"+o+\",.\"+o+\"-math-group\").remove(),v.draw(r,n,f(a,i||{}))}return u.syncOrAsync([a.previousPromises,function(){var t,e;(o&&ut||!o&&!ut)&&(\"top\"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot-Q)+3+.75*yt),\"bottom\"===V&&(t=P+B.l+tt*I,e=O+B.t+et*(1-ot)-3-.25*yt),\"right\"===V&&(e=O+B.t+et*D+3+.75*yt,t=P+B.l+tt*ot),_t(lt._id+\"title\",{attributes:{x:t,y:e,\"text-anchor\":o?\"start\":\"middle\"}}))},function(){if(!o&&!ut||o&&ut){var a,l=t.select(\".\"+A.cbtitle),f=l.select(\"text\"),h=[-M/2,M/2],d=l.select(\".h\"+lt._id+\"title-math-group\").node(),v=15.6;if(f.node()&&(v=parseInt(f.node().style.fontSize,10)*w),d?(a=p.bBox(d),bt=a.width,(xt=a.height)>v&&(h[1]-=(xt-v)/2)):f.node()&&!f.classed(A.jsPlaceholder)&&(a=p.bBox(f.node()),bt=a.width,xt=a.height),o){if(xt){if(xt+=5,\"top\"===V)lt.domain[1]-=xt/B.h,h[1]*=-1;else{lt.domain[0]+=xt/B.h;var y=g.lineCount(f);h[1]+=(1-y)*v}l.attr(\"transform\",c(h[0],h[1])),lt.setScale()}}else bt&&(\"right\"===V&&(lt.domain[0]+=(bt+yt/2)/B.w),l.attr(\"transform\",c(h[0],h[1])),lt.setScale())}t.selectAll(\".\"+A.cbfills+\",.\"+A.cblines).attr(\"transform\",o?c(0,Math.round(B.h*(1-lt.domain[1]))):c(Math.round(B.w*lt.domain[0]),0)),mt.attr(\"transform\",o?c(0,Math.round(-B.t)):c(Math.round(-B.l),0));var m=t.select(\".\"+A.cbfills).selectAll(\"rect.\"+A.cbfill).attr(\"style\",\"\").data(W);m.enter().append(\"rect\").classed(A.cbfill,!0).attr(\"style\",\"\"),m.exit().remove();var x=H.map(lt.c2p).map(Math.round).sort((function(t,e){return t-e}));m.each((function(t,a){var s=[0===a?H[0]:(W[a]+W[a-1])/2,a===W.length-1?H[1]:(W[a]+W[a+1])/2].map(lt.c2p).map(Math.round);o&&(s[1]=u.constrain(s[1]+(s[1]>s[0])?1:-1,x[0],x[1]));var l=n.select(this).attr(o?\"x\":\"y\",rt).attr(o?\"y\":\"x\",n.min(s)).attr(o?\"width\":\"height\",Math.max(J,2)).attr(o?\"height\":\"width\",Math.max(n.max(s)-n.min(s),2));if(e._fillgradient)p.gradient(l,r,e._id,o?\"vertical\":\"horizontalreversed\",e._fillgradient,\"fill\");else{var c=G(t).replace(\"e-\",\"\");l.attr(\"fill\",i(c).toHexString())}}));var b=t.select(\".\"+A.cblines).selectAll(\"path.\"+A.cbline).data(j.color&&j.width?X:[]);b.enter().append(\"path\").classed(A.cbline,!0),b.exit().remove(),b.each((function(t){var e=rt,r=Math.round(lt.c2p(t))+j.width/2%1;n.select(this).attr(\"d\",\"M\"+(o?e+\",\"+r:r+\",\"+e)+(o?\"h\":\"v\")+J).call(p.lineGroupStyle,j.width,q(t),j.dash)})),mt.selectAll(\"g.\"+lt._id+\"tick,path\").remove();var _=rt+J+(M||0)/2-(\"outside\"===e.ticks?1:0),T=s.calcTicks(lt),k=s.getTickSigns(lt)[2];return s.drawTicks(r,lt,{vals:\"inside\"===lt.ticks?s.clipEnds(lt,T):T,layer:mt,path:s.makeTickPath(lt,_,k),transFn:s.makeTransTickFn(lt)}),s.drawLabels(r,lt,{vals:T,layer:mt,transFn:s.makeTransTickLabelFn(lt),labelFns:s.makeLabelFns(lt,_)})},function(){if(o&&!ut||!o&&ut){var t,i,a=lt.position||0,s=lt._offset+lt._length/2;if(\"right\"===V)i=s,t=B.l+tt*a+10+yt*(lt.showticklabels?1:.5);else if(t=s,\"bottom\"===V&&(i=B.t+et*a+10+(-1===gt.indexOf(\"inside\")?lt.tickfont.size:0)+(\"intside\"!==lt.ticks&&e.ticklen||0)),\"top\"===V){var l=U.text.split(\"<br>\").length;i=B.t+et*a+10-J-w*yt*l}_t((o?\"h\":\"v\")+lt._id+\"title\",{avoid:{selection:n.select(r).selectAll(\"g.\"+lt._id+\"tick\"),side:V,offsetTop:o?0:B.t,offsetLeft:o?B.l:0,maxShift:o?F.width:F.height},attributes:{x:t,y:i,\"text-anchor\":\"middle\"},transform:{rotate:o?-90:0,offset:0}})}},a.previousPromises,function(){var n,s=J+M/2;-1===gt.indexOf(\"inside\")&&(n=p.bBox(mt.node()),s+=o?n.width:n.height),dt=vt.select(\"text\");var u=0,f=o&&\"top\"===V,v=!o&&\"right\"===V,g=0;if(dt.node()&&!dt.classed(A.jsPlaceholder)){var m,x=vt.select(\".h\"+lt._id+\"title-math-group\").node();x&&(o&&ut||!o&&!ut)?(u=(n=p.bBox(x)).width,m=n.height):(u=(n=p.bBox(vt.node())).right-B.l-(o?rt:st),m=n.bottom-B.t-(o?st:rt),o||\"top\"!==V||(s+=n.height,g=n.height)),v&&(dt.attr(\"transform\",c(u/2+yt/2,0)),u*=2),s=Math.max(s,o?u:m)}var b=2*(o?P:O)+s+S+M/2,w=0;!o&&U.text&&\"bottom\"===C&&D<=0&&(b+=w=b/2,g+=w),F._hColorbarMoveTitle=w,F._hColorbarMoveCBTitle=g;var N=S+M,j=(o?rt:st)-N/2-(o?P:0),H=(o?st:rt)-(o?$:O+g-w);t.select(\".\"+A.cbbg).attr(\"x\",j).attr(\"y\",H).attr(o?\"width\":\"height\",Math.max(b-w,2)).attr(o?\"height\":\"width\",Math.max($+N,2)).call(d.fill,E).call(d.stroke,e.bordercolor).style(\"stroke-width\",S);var q=v?Math.max(u-10,0):0;t.selectAll(\".\"+A.cboutline).attr(\"x\",(o?rt:st+P)+q).attr(\"y\",(o?st+O-$:rt)+(f?xt:0)).attr(o?\"width\":\"height\",Math.max(J,2)).attr(o?\"height\":\"width\",Math.max($-(o?2*O+xt:2*P+q),2)).call(d.stroke,e.outlinecolor).style({fill:\"none\",\"stroke-width\":M});var G=o?nt*b:0,Z=o?0:(1-it)*b-g;if(G=R?B.l-G:-G,Z=z?B.t-Z:-Z,t.attr(\"transform\",c(G,Z)),!o&&(S||i(E).getAlpha()&&!i.equals(F.paper_bgcolor,E))){var Y=mt.selectAll(\"text\"),W=Y[0].length,X=t.select(\".\"+A.cbbg).node(),K=p.bBox(X),Q=p.getTranslate(t);Y.each((function(t,e){var r=W-1;if(0===e||e===r){var n,i=p.bBox(this),a=p.getTranslate(this);if(e===r){var o=i.right+a.x;(n=K.right+Q.x+st-S-2+I-o)>0&&(n=0)}else if(0===e){var s=i.left+a.x;(n=K.left+Q.x+st+S+2-s)<0&&(n=0)}n&&(W<3?this.setAttribute(\"transform\",\"translate(\"+n+\",0) \"+this.getAttribute(\"transform\")):this.setAttribute(\"visibility\",\"hidden\"))}}))}var tt={},et=T[L],at=k[L],ot=T[C],ct=k[C],ft=b-J;o?(\"pixels\"===h?(tt.y=D,tt.t=$*ot,tt.b=$*ct):(tt.t=tt.b=0,tt.yt=D+l*ot,tt.yb=D-l*ct),\"pixels\"===_?(tt.x=I,tt.l=b*et,tt.r=b*at):(tt.l=ft*et,tt.r=ft*at,tt.xl=I-y*et,tt.xr=I+y*at)):(\"pixels\"===h?(tt.x=I,tt.l=$*et,tt.r=$*at):(tt.l=tt.r=0,tt.xl=I+l*et,tt.xr=I-l*at),\"pixels\"===_?(tt.y=1-D,tt.t=b*ot,tt.b=b*ct):(tt.t=ft*ot,tt.b=ft*ct,tt.yt=D-y*ot,tt.yb=D+y*ct));var ht=e.y<.5?\"b\":\"t\",pt=e.x<.5?\"l\":\"r\";r._fullLayout._reservedMargin[e._id]={};var bt={r:F.width-j-G,l:j+tt.r,b:F.height-H-Z,t:H+tt.b};R&&z?a.autoMargin(r,e._id,tt):R?r._fullLayout._reservedMargin[e._id][ht]=bt[ht]:z||o?r._fullLayout._reservedMargin[e._id][pt]=bt[pt]:r._fullLayout._reservedMargin[e._id][ht]=bt[ht]}],r)}(r,e,t);y&&y.then&&(t._promises||[]).push(y),t._context.edits.colorbarPosition&&function(t,e,r){var n,i,a,s=\"v\"===e.orientation,u=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr(\"transform\"),h(t)},moveFn:function(r,o){t.attr(\"transform\",n+c(r,o)),i=l.align((s?e._uFrac:e._vFrac)+r/u.w,s?e._thickFrac:e._lenFrac,0,1,e.xanchor),a=l.align((s?e._vFrac:1-e._uFrac)-o/u.h,s?e._lenFrac:e._thickFrac,0,1,e.yanchor);var f=l.getCursor(i,a,e.xanchor,e.yanchor);h(t,f)},doneFn:function(){if(h(t),void 0!==i&&void 0!==a){var n={};n[e._propPrefix+\"x\"]=i,n[e._propPrefix+\"y\"]=a,void 0!==e._traceIndex?o.call(\"_guiRestyle\",r,n,e._traceIndex):o.call(\"_guiRelayout\",r,n)}}})}(r,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},76228:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t){return n.isPlainObject(t.colorbar)}},12311:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"colorbar\",attributes:r(63583),supplyDefaults:r(62499),draw:r(98981).draw,hasColorbar:r(76228)}},50693:function(t,e,r){\"use strict\";var n=r(63583),i=r(30587).counter,a=r(78607),o=r(63282).scales;function s(t){return\"`\"+t+\"`\"}a(o),t.exports=function(t,e){t=t||\"\";var r,a=(e=e||{}).cLetter||\"c\",l=(\"onlyIfNumerical\"in e?e.onlyIfNumerical:Boolean(t),\"noScale\"in e?e.noScale:\"marker.line\"===t),u=\"showScaleDflt\"in e?e.showScaleDflt:\"z\"===a,c=\"string\"==typeof e.colorscaleDflt?o[e.colorscaleDflt]:null,f=e.editTypeOverride||\"\",h=t?t+\".\":\"\";\"colorAttr\"in e?(r=e.colorAttr,e.colorAttr):s(h+(r={z:\"z\",c:\"color\"}[a]));var p=a+\"auto\",d=a+\"min\",v=a+\"max\",g=a+\"mid\",y=(s(h+p),s(h+d),s(h+v),{});y[d]=y[v]=void 0;var m={};m[p]=!1;var x={};return\"color\"===r&&(x.color={valType:\"color\",arrayOk:!0,editType:f||\"style\"},e.anim&&(x.color.anim=!0)),x[p]={valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:y},x[d]={valType:\"number\",dflt:null,editType:f||\"plot\",impliedEdits:m},x[v]={valType:\"number\",dflt:null,editType:f||\"plot\",impliedEdits:m},x[g]={valType:\"number\",dflt:null,editType:\"calc\",impliedEdits:y},x.colorscale={valType:\"colorscale\",editType:\"calc\",dflt:c,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:\"boolean\",dflt:!1!==e.autoColorDflt,editType:\"calc\",impliedEdits:{colorscale:void 0}},x.reversescale={valType:\"boolean\",dflt:!1,editType:\"plot\"},l||(x.showscale={valType:\"boolean\",dflt:u,editType:\"calc\"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:\"subplotid\",regex:i(\"coloraxis\"),dflt:null,editType:\"calc\"}),x}},78803:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(52075).extractOpts;t.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,u=r.containerStr,c=u?i.nestedProperty(e,u).get():e,f=a(c),h=!1!==f.auto,p=f.min,d=f.max,v=f.mid,g=function(){return i.aggNums(Math.min,null,l)},y=function(){return i.aggNums(Math.max,null,l)};void 0===p?p=g():h&&(p=c._colorAx&&n(p)?Math.min(p,g()):g()),void 0===d?d=y():h&&(d=c._colorAx&&n(d)?Math.max(d,y()):y()),h&&void 0!==v&&(d-v>v-p?p=v-(d-v):d-v<v-p&&(d=v+(v-p))),p===d&&(p-=.5,d+=.5),f._sync(\"min\",p),f._sync(\"max\",d),f.autocolorscale&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,f._sync(\"colorscale\",o))}},33046:function(t,e,r){\"use strict\";var n=r(71828),i=r(52075).hasColorscale,a=r(52075).extractOpts;t.exports=function(t,e){function r(t,e){var r=t[\"_\"+e];void 0!==r&&(t[e]=r)}function o(t,i){var o=i.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&r(o,i.min),(l||void 0===s.max)&&r(o,i.max),s.autocolorscale&&r(o,\"colorscale\")}}for(var s=0;s<t.length;s++){var l=t[s],u=l._module.colorbar;if(u)if(Array.isArray(u))for(var c=0;c<u.length;c++)o(l,u[c]);else o(l,u);i(l,\"marker.line\")&&o(l,{container:\"marker.line\",min:\"cmin\",max:\"cmax\"})}for(var f in e._colorAxes)o(e[f],{min:\"cmin\",max:\"cmax\"})}},1586:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(76228),o=r(62499),s=r(63282).isValid,l=r(73972).traceIs;function u(t,e){var r=e.slice(0,e.length-1);return e?i.nestedProperty(t,r).get()||{}:t}t.exports=function t(e,r,c,f,h){var p=h.prefix,d=h.cLetter,v=\"_module\"in r,g=u(e,p),y=u(r,p),m=u(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,c,f,h)};if(v){var b=c._colorAxes||{},_=f(p+\"coloraxis\");if(_){var w=l(r,\"contour\")&&i.nestedProperty(r,\"contours.coloring\").get()||\"heatmap\",T=b[_];return void(T?(T[2].push(x),T[0]!==w&&(T[0]=!1,i.warn([\"Ignoring coloraxis:\",_,\"setting\",\"as it is linked to incompatible colorscales.\"].join(\" \")))):b[_]=[w,r,[x]])}}var k=g[d+\"min\"],A=g[d+\"max\"],M=n(k)&&n(A)&&k<A;f(p+d+\"auto\",!M)?f(p+d+\"mid\"):(f(p+d+\"min\"),f(p+d+\"max\"));var S,E,L=g.colorscale,C=m.colorscale;void 0!==L&&(S=!s(L)),void 0!==C&&(S=!s(C)),f(p+\"autocolorscale\",S),f(p+\"colorscale\"),f(p+\"reversescale\"),\"marker.line.\"!==p&&(p&&v&&(E=a(g)),f(p+\"showscale\",E)&&(p&&m&&(y._template=m),o(g,y,c)))}},52075:function(t,e,r){\"use strict\";var n=r(39898),i=r(84267),a=r(92770),o=r(71828),s=r(7901),l=r(63282).isValid,u=[\"showscale\",\"autocolorscale\",\"colorscale\",\"reversescale\",\"colorbar\"],c=[\"min\",\"max\",\"mid\",\"auto\"];function f(t){var e,r,n,i=t._colorAx,a=i||t,o={};for(r=0;r<u.length;r++)o[n=u[r]]=a[n];if(i)for(e=\"c\",r=0;r<c.length;r++)o[n=c[r]]=a[\"c\"+n];else{var s;for(r=0;r<c.length;r++)((s=\"c\"+(n=c[r]))in a||(s=\"z\"+n)in a)&&(o[n]=a[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==c.indexOf(t)?e+t:t;a[n]=a[\"_\"+n]=r},o}function h(t){for(var e=f(t),r=e.min,n=e.max,i=e.reversescale?p(e.colorscale):e.colorscale,a=i.length,o=new Array(a),s=new Array(a),l=0;l<a;l++){var u=i[l];o[l]=r+u[0]*(n-r),s[l]=u[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,i=0;n>=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,u=new Array(l),c=0;c<l;c++){var f=i(o[c]).toRgb();u[c]=[f.r,f.g,f.b,f.a]}var h,p=n.scale.linear().domain(r).range(u).clamp(!0),d=e.noNumericCheck,g=e.returnArray;return(h=d&&g?p:d?function(t){return v(p(t))}:g?function(t){return a(t)?p(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?v(p(t)):i(t).isValid()?t:s.defaultLine}).domain=p.domain,h.range=function(){return o},h}function v(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}t.exports={hasColorscale:function(t,e,r){var n=e?o.nestedProperty(t,e).get()||{}:t,i=n[r||\"color\"],s=!1;if(o.isArrayOrTypedArray(i))for(var u=0;u<i.length;u++)if(a(i[u])){s=!0;break}return o.isPlainObject(n)&&(s||!0===n.showscale||a(n.cmin)&&a(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:f,extractScale:h,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(h(t),e)}}},21081:function(t,e,r){\"use strict\";var n=r(63282),i=r(52075);t.exports={moduleType:\"component\",name:\"colorscale\",attributes:r(50693),layoutAttributes:r(72673),supplyLayoutDefaults:r(30959),handleDefaults:r(1586),crossTraceDefaults:r(33046),calc:r(78803),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},72673:function(t,e,r){\"use strict\";var n=r(1426).extendFlat,i=r(50693),a=r(63282).scales;t.exports={editType:\"calc\",colorscale:{editType:\"calc\",sequential:{valType:\"colorscale\",dflt:a.Reds,editType:\"calc\"},sequentialminus:{valType:\"colorscale\",dflt:a.Blues,editType:\"calc\"},diverging:{valType:\"colorscale\",dflt:a.RdBu,editType:\"calc\"}},coloraxis:n({_isSubplotObj:!0,editType:\"calc\"},i(\"\",{colorAttr:\"corresponding trace color array(s)\",noColorAxis:!0,showScaleDflt:!0}))}},30959:function(t,e,r){\"use strict\";var n=r(71828),i=r(44467),a=r(72673),o=r(1586);t.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r(\"colorscale.sequential\"),r(\"colorscale.sequentialminus\"),r(\"colorscale.diverging\");var s,l,u=e._colorAxes;function c(t,e){return n.coerce(s,l,a.coloraxis,t,e)}for(var f in u){var h=u[f];if(h[0])s=t[f]||{},(l=i.newContainer(e,f,\"coloraxis\"))._name=f,o(s,l,e,c,{prefix:\"\",cLetter:\"c\"});else{for(var p=0;p<h[2].length;p++)h[2][p]();delete e._colorAxes[f]}}}},63282:function(t,e,r){\"use strict\";var n=r(84267),i={Greys:[[0,\"rgb(0,0,0)\"],[1,\"rgb(255,255,255)\"]],YlGnBu:[[0,\"rgb(8,29,88)\"],[.125,\"rgb(37,52,148)\"],[.25,\"rgb(34,94,168)\"],[.375,\"rgb(29,145,192)\"],[.5,\"rgb(65,182,196)\"],[.625,\"rgb(127,205,187)\"],[.75,\"rgb(199,233,180)\"],[.875,\"rgb(237,248,217)\"],[1,\"rgb(255,255,217)\"]],Greens:[[0,\"rgb(0,68,27)\"],[.125,\"rgb(0,109,44)\"],[.25,\"rgb(35,139,69)\"],[.375,\"rgb(65,171,93)\"],[.5,\"rgb(116,196,118)\"],[.625,\"rgb(161,217,155)\"],[.75,\"rgb(199,233,192)\"],[.875,\"rgb(229,245,224)\"],[1,\"rgb(247,252,245)\"]],YlOrRd:[[0,\"rgb(128,0,38)\"],[.125,\"rgb(189,0,38)\"],[.25,\"rgb(227,26,28)\"],[.375,\"rgb(252,78,42)\"],[.5,\"rgb(253,141,60)\"],[.625,\"rgb(254,178,76)\"],[.75,\"rgb(254,217,118)\"],[.875,\"rgb(255,237,160)\"],[1,\"rgb(255,255,204)\"]],Bluered:[[0,\"rgb(0,0,255)\"],[1,\"rgb(255,0,0)\"]],RdBu:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(106,137,247)\"],[.5,\"rgb(190,190,190)\"],[.6,\"rgb(220,170,132)\"],[.7,\"rgb(230,145,90)\"],[1,\"rgb(178,10,28)\"]],Reds:[[0,\"rgb(220,220,220)\"],[.2,\"rgb(245,195,157)\"],[.4,\"rgb(245,160,105)\"],[1,\"rgb(178,10,28)\"]],Blues:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(40,60,190)\"],[.5,\"rgb(70,100,245)\"],[.6,\"rgb(90,120,245)\"],[.7,\"rgb(106,137,247)\"],[1,\"rgb(220,220,220)\"]],Picnic:[[0,\"rgb(0,0,255)\"],[.1,\"rgb(51,153,255)\"],[.2,\"rgb(102,204,255)\"],[.3,\"rgb(153,204,255)\"],[.4,\"rgb(204,204,255)\"],[.5,\"rgb(255,255,255)\"],[.6,\"rgb(255,204,255)\"],[.7,\"rgb(255,153,255)\"],[.8,\"rgb(255,102,204)\"],[.9,\"rgb(255,102,102)\"],[1,\"rgb(255,0,0)\"]],Rainbow:[[0,\"rgb(150,0,90)\"],[.125,\"rgb(0,0,200)\"],[.25,\"rgb(0,25,255)\"],[.375,\"rgb(0,152,255)\"],[.5,\"rgb(44,255,150)\"],[.625,\"rgb(151,255,0)\"],[.75,\"rgb(255,234,0)\"],[.875,\"rgb(255,111,0)\"],[1,\"rgb(255,0,0)\"]],Portland:[[0,\"rgb(12,51,131)\"],[.25,\"rgb(10,136,186)\"],[.5,\"rgb(242,211,56)\"],[.75,\"rgb(242,143,56)\"],[1,\"rgb(217,30,30)\"]],Jet:[[0,\"rgb(0,0,131)\"],[.125,\"rgb(0,60,170)\"],[.375,\"rgb(5,255,255)\"],[.625,\"rgb(255,255,0)\"],[.875,\"rgb(250,0,0)\"],[1,\"rgb(128,0,0)\"]],Hot:[[0,\"rgb(0,0,0)\"],[.3,\"rgb(230,0,0)\"],[.6,\"rgb(255,210,0)\"],[1,\"rgb(255,255,255)\"]],Blackbody:[[0,\"rgb(0,0,0)\"],[.2,\"rgb(230,0,0)\"],[.4,\"rgb(230,210,0)\"],[.7,\"rgb(255,255,255)\"],[1,\"rgb(160,200,255)\"]],Earth:[[0,\"rgb(0,0,130)\"],[.1,\"rgb(0,180,180)\"],[.2,\"rgb(40,210,40)\"],[.4,\"rgb(230,230,50)\"],[.6,\"rgb(120,70,20)\"],[1,\"rgb(255,255,255)\"]],Electric:[[0,\"rgb(0,0,0)\"],[.15,\"rgb(30,0,100)\"],[.4,\"rgb(120,0,100)\"],[.6,\"rgb(160,90,0)\"],[.8,\"rgb(230,200,0)\"],[1,\"rgb(255,250,220)\"]],Viridis:[[0,\"#440154\"],[.06274509803921569,\"#48186a\"],[.12549019607843137,\"#472d7b\"],[.18823529411764706,\"#424086\"],[.25098039215686274,\"#3b528b\"],[.3137254901960784,\"#33638d\"],[.3764705882352941,\"#2c728e\"],[.4392156862745098,\"#26828e\"],[.5019607843137255,\"#21918c\"],[.5647058823529412,\"#1fa088\"],[.6274509803921569,\"#28ae80\"],[.6901960784313725,\"#3fbc73\"],[.7529411764705882,\"#5ec962\"],[.8156862745098039,\"#84d44b\"],[.8784313725490196,\"#addc30\"],[.9411764705882353,\"#d8e219\"],[1,\"#fde725\"]],Cividis:[[0,\"rgb(0,32,76)\"],[.058824,\"rgb(0,42,102)\"],[.117647,\"rgb(0,52,110)\"],[.176471,\"rgb(39,63,108)\"],[.235294,\"rgb(60,74,107)\"],[.294118,\"rgb(76,85,107)\"],[.352941,\"rgb(91,95,109)\"],[.411765,\"rgb(104,106,112)\"],[.470588,\"rgb(117,117,117)\"],[.529412,\"rgb(131,129,120)\"],[.588235,\"rgb(146,140,120)\"],[.647059,\"rgb(161,152,118)\"],[.705882,\"rgb(176,165,114)\"],[.764706,\"rgb(192,177,109)\"],[.823529,\"rgb(209,191,102)\"],[.882353,\"rgb(225,204,92)\"],[.941176,\"rgb(243,219,79)\"],[1,\"rgb(255,233,69)\"]]},a=i.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var i=t[r];if(2!==i.length||+i[0]<e||!n(i[1]).isValid())return!1;e=+i[0]}return!0}t.exports={scales:i,defaultScale:a,get:function(t,e){if(e||(e=a),!t)return e;function r(){try{t=i[t]||JSON.parse(t)}catch(r){t=e}}return\"string\"==typeof t&&(r(),\"string\"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==i[t]||o(t)}}},92807:function(t){\"use strict\";t.exports=function(t,e,r,n,i){var a=(t-r)/(n-r),o=a+e/(n-r),s=(a+o)/2;return\"left\"===i||\"bottom\"===i?a:\"center\"===i||\"middle\"===i?s:\"right\"===i||\"top\"===i?o:a<2/3-s?a:o>4/3-s?o:s}},70461:function(t,e,r){\"use strict\";var n=r(71828),i=[[\"sw-resize\",\"s-resize\",\"se-resize\"],[\"w-resize\",\"move\",\"e-resize\"],[\"nw-resize\",\"n-resize\",\"ne-resize\"]];t.exports=function(t,e,r,a){return t=\"left\"===r?0:\"center\"===r?1:\"right\"===r?2:n.constrain(Math.floor(3*t),0,2),e=\"bottom\"===a?0:\"middle\"===a?1:\"top\"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},64505:function(t,e){\"use strict\";e.selectMode=function(t){return\"lasso\"===t||\"select\"===t},e.drawMode=function(t){return\"drawclosedpath\"===t||\"drawopenpath\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},e.openMode=function(t){return\"drawline\"===t||\"drawopenpath\"===t},e.rectMode=function(t){return\"select\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},e.freeMode=function(t){return\"lasso\"===t||\"drawclosedpath\"===t||\"drawopenpath\"===t},e.selectingOrDrawing=function(t){return e.freeMode(t)||e.rectMode(t)}},28569:function(t,e,r){\"use strict\";var n=r(48956),i=r(57035),a=r(38520),o=r(71828).removeElement,s=r(85555),l=t.exports={};l.align=r(92807),l.getCursor=r(70461);var u=r(26041);function c(){var t=document.createElement(\"div\");t.className=\"dragcover\";var e=t.style;return e.position=\"fixed\",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background=\"none\",document.body.appendChild(t),t}function f(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=u.wrapped,l.unhoverRaw=u.raw,l.init=function(t){var e,r,n,u,h,p,d,v,g=t.gd,y=1,m=g._context.doubleClickDelay,x=t.element;g._mouseDownTime||(g._mouseDownTime=0),x.style.pointerEvents=\"all\",x.onmousedown=_,a?(x._ontouchstart&&x.removeEventListener(\"touchstart\",x._ontouchstart),x._ontouchstart=_,x.addEventListener(\"touchstart\",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(a){g._dragged=!1,g._dragging=!0;var o=f(a);e=o[0],r=o[1],d=a.target,p=a,v=2===a.buttons||a.ctrlKey,void 0===a.clientX&&void 0===a.clientY&&(a.clientX=e,a.clientY=r),(n=(new Date).getTime())-g._mouseDownTime<m?y+=1:(y=1,g._mouseDownTime=n),t.prepFn&&t.prepFn(a,e,r),i&&!v?(h=c()).style.cursor=window.getComputedStyle(x).cursor:i||(h=document,u=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener(\"mouseup\",T),document.addEventListener(\"touchend\",T),!1!==t.dragmode&&(a.preventDefault(),document.addEventListener(\"mousemove\",w),document.addEventListener(\"touchmove\",w,{passive:!1}))}function w(n){n.preventDefault();var i=f(n),a=t.minDrag||s.MINDRAG,o=b(i[0]-e,i[1]-r,a),u=o[0],c=o[1];(u||c)&&(g._dragged=!0,l.unhover(g,n)),g._dragged&&t.moveFn&&!v&&(g._dragdata={element:x,dx:u,dy:c},t.moveFn(u,c))}function T(e){if(delete g._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener(\"mousemove\",w),document.removeEventListener(\"touchmove\",w)),document.removeEventListener(\"mouseup\",T),document.removeEventListener(\"touchend\",T),i?o(h):u&&(h.documentElement.style.cursor=u,u=null),g._dragging){if(g._dragging=!1,(new Date).getTime()-g._mouseDownTime>m&&(y=Math.max(y-1,1)),g._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(y,p),!v){var r;try{r=new MouseEvent(\"click\",e)}catch(t){var n=f(e);(r=document.createEvent(\"MouseEvents\")).initMouseEvent(\"click\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}g._dragging=!1,g._dragged=!1}else g._dragged=!1}},l.coverSlip=c},26041:function(t,e,r){\"use strict\";var n=r(11086),i=r(79990),a=r(24401).getGraphDiv,o=r(26675),s=t.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!t._dragged&&!1===n.triggerHandler(t,\"plotly_beforehover\",e)||(r._hoverlayer.selectAll(\"g\").remove(),r._hoverlayer.selectAll(\"line\").remove(),r._hoverlayer.selectAll(\"circle\").remove(),t._hoverdata=void 0,e.target&&i&&t.emit(\"plotly_unhover\",{event:e,points:i}))}},79952:function(t,e){\"use strict\";e.P={valType:\"string\",values:[\"solid\",\"dot\",\"dash\",\"longdash\",\"dashdot\",\"longdashdot\"],dflt:\"solid\",editType:\"style\"},e.u={shape:{valType:\"enumerated\",values:[\"\",\"/\",\"\\\\\",\"x\",\"-\",\"|\",\"+\",\".\"],dflt:\"\",arrayOk:!0,editType:\"style\"},fillmode:{valType:\"enumerated\",values:[\"replace\",\"overlay\"],dflt:\"replace\",editType:\"style\"},bgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgopacity:{valType:\"number\",editType:\"style\",min:0,max:1},size:{valType:\"number\",min:0,dflt:8,arrayOk:!0,editType:\"style\"},solidity:{valType:\"number\",min:0,max:1,dflt:.3,arrayOk:!0,editType:\"style\"},editType:\"style\"}},91424:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(92770),s=r(84267),l=r(73972),u=r(7901),c=r(21081),f=i.strTranslate,h=r(63893),p=r(77922),d=r(18783).LINE_SPACING,v=r(37822).DESELECTDIM,g=r(34098),y=r(39984),m=r(23469).appendArrayPointValue,x=t.exports={};function b(t,e,r){var n=e.fillpattern,i=n&&x.getPatternAttr(n.shape,0,\"\");if(i){var a=x.getPatternAttr(n.bgcolor,0,null),o=x.getPatternAttr(n.fgcolor,0,null),s=n.fgopacity,l=x.getPatternAttr(n.size,0,8),c=x.getPatternAttr(n.solidity,0,.3),f=e.uid;x.pattern(t,\"point\",r,f,i,l,c,void 0,n.fillmode,a,o,s)}else e.fillcolor&&t.call(u.fill,e.fillcolor)}x.font=function(t,e,r,n){i.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style(\"font-family\",e),r+1&&t.style(\"font-size\",r+\"px\"),n&&t.call(u.fill,n)},x.setPosition=function(t,e,r){t.attr(\"x\",e).attr(\"y\",r)},x.setSize=function(t,e,r){t.attr(\"width\",e).attr(\"height\",r)},x.setRect=function(t,e,r,n,i){t.call(x.setPosition,e,r).call(x.setSize,n,i)},x.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),a=n.c2p(t.y);return!!(o(i)&&o(a)&&e.node())&&(\"text\"===e.node().nodeName?e.attr(\"x\",i).attr(\"y\",a):e.attr(\"transform\",f(i,a)),!0)},x.translatePoints=function(t,e,r){t.each((function(t){var i=n.select(this);x.translatePoint(t,i,e,r)}))},x.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr(\"display\",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:\"none\")},x.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each((function(e){var a=e[0].trace,o=a.xcalendar,s=a.ycalendar,u=l.traceIs(a,\"bar-like\")?\".bartext\":\".point,.textpoint\";t.selectAll(u).each((function(t){x.hideOutsideRangePoint(t,n.select(this),r,i,o,s)}))}))}},x.crispRound=function(t,e,r){return e&&o(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},x.singleLineStyle=function(t,e,r,n,i){e.style(\"fill\",\"none\");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,s=i||a.dash||\"\";u.stroke(e,n||a.color),x.dashLine(e,s,o)},x.lineGroupStyle=function(t,e,r,i){t.style(\"fill\",\"none\").each((function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,s=i||a.dash||\"\";n.select(this).call(u.stroke,r||a.color).call(x.dashLine,s,o)}))},x.dashLine=function(t,e,r){r=+r||0,e=x.dashStyle(e,r),t.style({\"stroke-dasharray\":e,\"stroke-width\":r+\"px\"})},x.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return\"solid\"===t?t=\"\":\"dot\"===t?t=r+\"px,\"+r+\"px\":\"dash\"===t?t=3*r+\"px,\"+3*r+\"px\":\"longdash\"===t?t=5*r+\"px,\"+5*r+\"px\":\"dashdot\"===t?t=3*r+\"px,\"+r+\"px,\"+r+\"px,\"+r+\"px\":\"longdashdot\"===t&&(t=5*r+\"px,\"+2*r+\"px,\"+r+\"px,\"+2*r+\"px\"),t},x.singleFillStyle=function(t,e){var r=n.select(t.node());b(t,((r.data()[0]||[])[0]||{}).trace||{},e)},x.fillGroupStyle=function(t,e){t.style(\"stroke-width\",0).each((function(t){var r=n.select(this);t[0].trace&&b(r,t[0].trace,e)}))};var _=r(90998);x.symbolNames=[],x.symbolFuncs=[],x.symbolBackOffs=[],x.symbolNeedLines={},x.symbolNoDot={},x.symbolNoFill={},x.symbolList=[],Object.keys(_).forEach((function(t){var e=_[t],r=e.n;x.symbolList.push(r,String(r),t,r+100,String(r+100),t+\"-open\"),x.symbolNames[r]=t,x.symbolFuncs[r]=e.f,x.symbolBackOffs[r]=e.backoff||0,e.needLine&&(x.symbolNeedLines[r]=!0),e.noDot?x.symbolNoDot[r]=!0:x.symbolList.push(r+200,String(r+200),t+\"-dot\",r+300,String(r+300),t+\"-open-dot\"),e.noFill&&(x.symbolNoFill[r]=!0)}));var w=x.symbolNames.length;function T(t,e,r,n){var i=t%100;return x.symbolFuncs[i](e,r,n)+(t>=200?\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\":\"\")}x.symbolNumber=function(t){if(o(t))t=+t;else if(\"string\"==typeof t){var e=0;t.indexOf(\"-open\")>0&&(e=100,t=t.replace(\"-open\",\"\")),t.indexOf(\"-dot\")>0&&(e+=200,t=t.replace(\"-dot\",\"\")),(t=x.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=w||t>=400?0:Math.floor(Math.max(t,0))};var k={x1:1,x2:0,y1:0,y2:0},A={x1:0,x2:0,y1:1,y2:0},M=a(\"~f\"),S={radial:{node:\"radialGradient\"},radialreversed:{node:\"radialGradient\",reversed:!0},horizontal:{node:\"linearGradient\",attrs:k},horizontalreversed:{node:\"linearGradient\",attrs:k,reversed:!0},vertical:{node:\"linearGradient\",attrs:A},verticalreversed:{node:\"linearGradient\",attrs:A,reversed:!0}};x.gradient=function(t,e,r,a,o,l){for(var c=o.length,f=S[a],h=new Array(c),p=0;p<c;p++)f.reversed?h[c-1-p]=[M(100*(1-o[p][0])),o[p][1]]:h[p]=[M(100*o[p][0]),o[p][1]];var d=e._fullLayout,v=\"g\"+d._uid+\"-\"+r,g=d._defs.select(\".gradients\").selectAll(\"#\"+v).data([a+h.join(\";\")],i.identity);g.exit().remove(),g.enter().append(f.node).each((function(){var t=n.select(this);f.attrs&&t.attr(f.attrs),t.attr(\"id\",v);var e=t.selectAll(\"stop\").data(h);e.exit().remove(),e.enter().append(\"stop\"),e.each((function(t){var e=s(t[1]);n.select(this).attr({offset:t[0]+\"%\",\"stop-color\":u.tinyRGB(e),\"stop-opacity\":e.getAlpha()})}))})),t.style(l,V(v,e)).style(l+\"-opacity\",null),t.classed(\"gradient_filled\",!0)},x.pattern=function(t,e,r,a,o,l,c,f,h,p,d,v){var g=\"legend\"===e;f&&(\"overlay\"===h?(p=f,d=u.contrast(p)):(p=void 0,d=f));var y,m,x,b,_,w,T,k,A,M=r._fullLayout,S=\"p\"+M._uid+\"-\"+a,E={},L=s(d),C=u.tinyRGB(L),P=v*L.getAlpha();switch(o){case\"/\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w=\"path\",E={d:x=\"M-\"+y/4+\",\"+m/4+\"l\"+y/2+\",-\"+m/2+\"M0,\"+m+\"L\"+y+\",0M\"+y/4*3+\",\"+m/4*5+\"l\"+y/2+\",-\"+m/2,opacity:P,stroke:C,\"stroke-width\":(b=c*l)+\"px\"};break;case\"\\\\\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),w=\"path\",E={d:x=\"M\"+y/4*3+\",-\"+m/4+\"l\"+y/2+\",\"+m/2+\"M0,0L\"+y+\",\"+m+\"M-\"+y/4+\",\"+m/4*3+\"l\"+y/2+\",\"+m/2,opacity:P,stroke:C,\"stroke-width\":(b=c*l)+\"px\"};break;case\"x\":y=l*Math.sqrt(2),m=l*Math.sqrt(2),x=\"M-\"+y/4+\",\"+m/4+\"l\"+y/2+\",-\"+m/2+\"M0,\"+m+\"L\"+y+\",0M\"+y/4*3+\",\"+m/4*5+\"l\"+y/2+\",-\"+m/2+\"M\"+y/4*3+\",-\"+m/4+\"l\"+y/2+\",\"+m/2+\"M0,0L\"+y+\",\"+m+\"M-\"+y/4+\",\"+m/4*3+\"l\"+y/2+\",\"+m/2,b=l-l*Math.sqrt(1-c),w=\"path\",E={d:x,opacity:P,stroke:C,\"stroke-width\":b+\"px\"};break;case\"|\":w=\"path\",w=\"path\",E={d:x=\"M\"+(y=l)/2+\",0L\"+y/2+\",\"+(m=l),opacity:P,stroke:C,\"stroke-width\":(b=c*l)+\"px\"};break;case\"-\":w=\"path\",w=\"path\",E={d:x=\"M0,\"+(m=l)/2+\"L\"+(y=l)+\",\"+m/2,opacity:P,stroke:C,\"stroke-width\":(b=c*l)+\"px\"};break;case\"+\":w=\"path\",x=\"M\"+(y=l)/2+\",0L\"+y/2+\",\"+(m=l)+\"M0,\"+m/2+\"L\"+y+\",\"+m/2,b=l-l*Math.sqrt(1-c),w=\"path\",E={d:x,opacity:P,stroke:C,\"stroke-width\":b+\"px\"};break;case\".\":y=l,m=l,c<Math.PI/4?_=Math.sqrt(c*l*l/Math.PI):(T=c,k=Math.PI/4,1,_=(A=l/2)+(l/Math.sqrt(2)-A)*(T-k)/(1-k)),w=\"circle\",E={cx:y/2,cy:m/2,r:_,opacity:P,fill:C}}var O=[o||\"noSh\",p||\"noBg\",d||\"noFg\",l,c].join(\";\"),I=M._defs.select(\".patterns\").selectAll(\"#\"+S).data([O],i.identity);I.exit().remove(),I.enter().append(\"pattern\").each((function(){var t=n.select(this);if(t.attr({id:S,width:y+\"px\",height:m+\"px\",patternUnits:\"userSpaceOnUse\",patternTransform:g?\"scale(0.8)\":\"\"}),p){var e=s(p),r=u.tinyRGB(e),i=e.getAlpha(),a=t.selectAll(\"rect\").data([0]);a.exit().remove(),a.enter().append(\"rect\").attr({width:y+\"px\",height:m+\"px\",fill:r,\"fill-opacity\":i})}var o=t.selectAll(w).data([0]);o.exit().remove(),o.enter().append(w).attr(E)})),t.style(\"fill\",V(S,r)).style(\"fill-opacity\",null),t.classed(\"pattern_filled\",!0)},x.initGradients=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,\"g\",\"gradients\").selectAll(\"linearGradient,radialGradient\").remove(),n.select(t).selectAll(\".gradient_filled\").classed(\"gradient_filled\",!1)},x.initPatterns=function(t){var e=t._fullLayout;i.ensureSingle(e._defs,\"g\",\"patterns\").selectAll(\"pattern\").remove(),n.select(t).selectAll(\".pattern_filled\").classed(\"pattern_filled\",!1)},x.getPatternAttr=function(t,e,r){return t&&i.isArrayOrTypedArray(t)?e<t.length?t[e]:r:t},x.pointStyle=function(t,e,r,i){if(t.size()){var a=x.makePointStyleFns(e);t.each((function(t){x.singlePointStyle(t,n.select(this),e,a,r,i)}))}},x.singlePointStyle=function(t,e,r,n,a,o){var s=r.marker,l=s.line;if(o&&o.i>=0&&void 0===t.i&&(t.i=o.i),e.style(\"opacity\",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?s.opacity:t.mo),n.ms2mrc){var c;c=\"various\"===t.ms||\"various\"===s.size?3:n.ms2mrc(t.ms),t.mrc=c,n.selectedSizeFn&&(c=t.mrc=n.selectedSizeFn(t));var f=x.symbolNumber(t.mx||s.symbol)||0;t.om=f%200>=100;var h=rt(t,r),p=G(t,r);e.attr(\"d\",T(f,c,h,p))}var d,v,g,y=!1;if(t.so)g=l.outlierwidth,v=l.outliercolor,d=s.outliercolor;else{var m=(l||{}).width;g=(t.mlw+1||m+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,v=\"mlc\"in t?t.mlcc=n.lineScale(t.mlc):i.isArrayOrTypedArray(l.color)?u.defaultLine:l.color,i.isArrayOrTypedArray(s.color)&&(d=u.defaultLine,y=!0),d=\"mc\"in t?t.mcc=n.markerScale(t.mc):s.color||s.colors||\"rgba(0,0,0,0)\",n.selectedColorFn&&(d=n.selectedColorFn(t))}if(t.om)e.call(u.stroke,d).style({\"stroke-width\":(g||1)+\"px\",fill:\"none\"});else{e.style(\"stroke-width\",(t.isBlank?0:g)+\"px\");var b=s.gradient,_=t.mgt;_?y=!0:_=b&&b.type,i.isArrayOrTypedArray(_)&&(_=_[0],S[_]||(_=0));var w=s.pattern,k=w&&x.getPatternAttr(w.shape,t.i,\"\");if(_&&\"none\"!==_){var A=t.mgc;A?y=!0:A=b.color;var M=r.uid;y&&(M+=\"-\"+t.i),x.gradient(e,a,M,_,[[0,A],[1,d]],\"fill\")}else if(k){var E=!1,L=w.fgcolor;!L&&o&&o.color&&(L=o.color,E=!0);var C=x.getPatternAttr(L,t.i,o&&o.color||null),P=x.getPatternAttr(w.bgcolor,t.i,null),O=w.fgopacity,I=x.getPatternAttr(w.size,t.i,8),D=x.getPatternAttr(w.solidity,t.i,.3);E=E||t.mcc||i.isArrayOrTypedArray(w.shape)||i.isArrayOrTypedArray(w.bgcolor)||i.isArrayOrTypedArray(w.fgcolor)||i.isArrayOrTypedArray(w.size)||i.isArrayOrTypedArray(w.solidity);var z=r.uid;E&&(z+=\"-\"+t.i),x.pattern(e,\"point\",a,z,k,I,D,t.mcc,w.fillmode,P,C,O)}else i.isArrayOrTypedArray(d)?u.fill(e,d[t.i]):u.fill(e,d);g&&u.stroke(e,v)}},x.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=x.tryColorscale(r,\"\"),e.lineScale=x.tryColorscale(r,\"line\"),l.traceIs(t,\"symbols\")&&(e.ms2mrc=g.isBubble(t)?y(t):function(){return(r.size||6)/2}),t.selectedpoints&&i.extendFlat(e,x.makeSelectedPointStyleFns(t)),e},x.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},o=r.marker||{},s=n.marker||{},u=a.opacity,c=o.opacity,f=s.opacity,h=void 0!==c,p=void 0!==f;(i.isArrayOrTypedArray(u)||h||p)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?h?c:e:p?f:v*e});var d=a.color,g=o.color,y=s.color;(g||y)&&(e.selectedColorFn=function(t){var e=t.mcc||d;return t.selected?g||e:y||e});var m=a.size,x=o.size,b=s.size,_=void 0!==x,w=void 0!==b;return l.traceIs(t,\"symbols\")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||m/2;return t.selected?_?x/2:e:w?b/2:e}),e},x.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},s=i.color,l=a.color,c=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||s;return t.selected?l||e:c||(l?e:u.addOpacity(e,v))},e},x.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push((function(t,e){t.style(\"opacity\",r.selectedOpacityFn(e))})),r.selectedColorFn&&a.push((function(t,e){u.fill(t,r.selectedColorFn(e))})),r.selectedSizeFn&&a.push((function(t,n){var a=n.mx||i.symbol||0,o=r.selectedSizeFn(n);t.attr(\"d\",T(x.symbolNumber(a),o,rt(n,e),G(n,e))),n.mrc2=o})),a.length&&t.each((function(t){for(var e=n.select(this),r=0;r<a.length;r++)a[r](e,t)}))}},x.tryColorscale=function(t,e){var r=e?i.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&i.isArrayOrTypedArray(n))return c.makeColorScaleFuncFromTrace(r)}return i.identity};var E,L,C={start:1,end:-1,middle:0,bottom:1,top:-1};function P(t,e,r,i,a){var o=n.select(t.node().parentNode),s=-1!==e.indexOf(\"top\")?\"top\":-1!==e.indexOf(\"bottom\")?\"bottom\":\"middle\",l=-1!==e.indexOf(\"left\")?\"end\":-1!==e.indexOf(\"right\")?\"start\":\"middle\",u=i?i/.8+1:0,c=(h.lineCount(t)-1)*d+1,p=C[l]*u,v=.75*r+C[s]*u+(C[s]-1)*c*r/2;t.attr(\"text-anchor\",l),a||o.attr(\"transform\",f(p,v))}function O(t,e){var r=t.ts||e.textfont.size;return o(r)&&r>0?r:0}function I(t,e,r){return r&&(t=N(t)),e?z(t[1]):D(t[0])}function D(t){var e=n.round(t,2);return E=e,e}function z(t){var e=n.round(t,2);return L=e,e}function R(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=3*u*(l+u),p=3*l*(l+u);return[[D(e[0]+(h&&c/h)),z(e[1]+(h&&f/h))],[D(e[0]-(p&&c/p)),z(e[1]-(p&&f/p))]]}x.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var o=x.makeSelectedTextStyleFns(e);a=o.selectedTextColorFn}var s=e.texttemplate,l=r._fullLayout;t.each((function(t){var o=n.select(this),u=s?i.extractOption(t,e,\"txt\",\"texttemplate\"):i.extractOption(t,e,\"tx\",\"text\");if(u||0===u){if(s){var c=e._module.formatLabels,f=c?c(t,e,l):{},p={};m(p,e,t.i);var d=e._meta||{};u=i.texttemplateString(u,f,l._d3locale,p,t,d)}var v=t.tp||e.textposition,g=O(t,e),y=a?a(t):t.tc||e.textfont.color;o.call(x.font,t.tf||e.textfont.family,g,y).text(u).call(h.convertToTspans,r).call(P,v,g,t.mrc)}else o.remove()}))}},x.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedTextStyleFns(e);t.each((function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,s=O(t,e);u.fill(i,a);var c=l.traceIs(e,\"bar-like\");P(i,o,s,t.mrc2||t.mrc,c)}))}},x.smoothopen=function(t,e){if(t.length<3)return\"M\"+t.join(\"L\");var r,n=\"M\"+t[0],i=[];for(r=1;r<t.length-1;r++)i.push(R(t[r-1],t[r],t[r+1],e));for(n+=\"Q\"+i[0][0]+\" \"+t[1],r=2;r<t.length-1;r++)n+=\"C\"+i[r-2][1]+\" \"+i[r-1][0]+\" \"+t[r];return n+\"Q\"+i[t.length-3][1]+\" \"+t[t.length-1]},x.smoothclosed=function(t,e){if(t.length<3)return\"M\"+t.join(\"L\")+\"Z\";var r,n=\"M\"+t[0],i=t.length-1,a=[R(t[i],t[0],t[1],e)];for(r=1;r<i;r++)a.push(R(t[r-1],t[r],t[r+1],e));for(a.push(R(t[i-1],t[i],t[0],e)),r=1;r<=i;r++)n+=\"C\"+a[r-1][1]+\" \"+a[r][0]+\" \"+t[r];return n+\"C\"+a[i][1]+\" \"+a[0][0]+\" \"+t[0]+\"Z\"};var F={hv:function(t,e,r){return\"H\"+D(e[0])+\"V\"+I(e,1,r)},vh:function(t,e,r){return\"V\"+z(e[1])+\"H\"+I(e,0,r)},hvh:function(t,e,r){return\"H\"+D((t[0]+e[0])/2)+\"V\"+z(e[1])+\"H\"+I(e,0,r)},vhv:function(t,e,r){return\"V\"+z((t[1]+e[1])/2)+\"H\"+D(e[0])+\"V\"+I(e,1,r)}},B=function(t,e,r){return\"L\"+I(e,0,r)+\",\"+I(e,1,r)};function N(t,e){var r=t.backoff,n=t.trace,a=t.d,o=t.i;if(r&&n&&n.marker&&n.marker.angle%360==0&&n.line&&\"spline\"!==n.line.shape){var s=i.isArrayOrTypedArray(r),l=t,u=e?e[0]:E||0,c=e?e[1]:L||0,f=l[0],h=l[1],p=f-u,d=h-c,v=Math.atan2(d,p),g=s?r[o]:r;if(\"auto\"===g){var y=l.i;\"scatter\"===n.type&&y--;var m=l.marker,b=m.symbol;i.isArrayOrTypedArray(b)&&(b=b[y]);var _=m.size;i.isArrayOrTypedArray(_)&&(_=_[y]),g=m?x.symbolBackOffs[x.symbolNumber(b)]*_:0,g+=x.getMarkerStandoff(a[y],n)||0}var w=f-g*Math.cos(v),T=h-g*Math.sin(v);(w<=f&&w>=u||w>=f&&w<=u)&&(T<=h&&T>=c||T>=h&&T<=c)&&(t=[w,T])}return t}x.steps=function(t){var e=F[t]||B;return function(t){for(var r=\"M\"+D(t[0][0])+\",\"+z(t[0][1]),n=t.length,i=1;i<n;i++)r+=e(t[i-1],t[i],i===n-1);return r}},x.applyBackoff=N,x.makeTester=function(){var t=i.ensureSingleById(n.select(\"body\"),\"svg\",\"js-plotly-tester\",(function(t){t.attr(p.svgAttrs).style({position:\"absolute\",left:\"-10000px\",top:\"-10000px\",width:\"9000px\",height:\"9000px\",\"z-index\":\"1\"})})),e=i.ensureSingle(t,\"path\",\"js-reference-point\",(function(t){t.attr(\"d\",\"M0,0H1V1H0Z\").style({\"stroke-width\":0,fill:\"black\"})}));x.tester=t,x.testref=e},x.savedBBoxes={};var j=0;function U(t){var e=t.getAttribute(\"data-unformatted\");if(null!==e)return e+t.getAttribute(\"data-math\")+t.getAttribute(\"text-anchor\")+t.getAttribute(\"style\")}function V(t,e){if(!t)return null;var r=e._context,n=r._exportedPlot?\"\":r._baseUrl||\"\";return n?\"url('\"+n+\"#\"+t+\"')\":\"url(#\"+t+\")\"}x.bBox=function(t,e,r){var a,o,s;if(r||(r=U(t)),r){if(a=x.savedBBoxes[r])return i.extendFlat({},a)}else if(1===t.childNodes.length){var l=t.childNodes[0];if(r=U(l)){var u=+l.getAttribute(\"x\")||0,c=+l.getAttribute(\"y\")||0,f=l.getAttribute(\"transform\");if(!f){var p=x.bBox(l,!1,r);return u&&(p.left+=u,p.right+=u),c&&(p.top+=c,p.bottom+=c),p}if(r+=\"~\"+u+\"~\"+c+\"~\"+f,a=x.savedBBoxes[r])return i.extendFlat({},a)}}e?o=t:(s=x.tester.node(),o=t.cloneNode(!0),s.appendChild(o)),n.select(o).attr(\"transform\",null).call(h.positionText,0,0);var d=o.getBoundingClientRect(),v=x.testref.node().getBoundingClientRect();e||s.removeChild(o);var g={height:d.height,width:d.width,left:d.left-v.left,top:d.top-v.top,right:d.right-v.left,bottom:d.bottom-v.top};return j>=1e4&&(x.savedBBoxes={},j=0),r&&(x.savedBBoxes[r]=g),j++,i.extendFlat({},g)},x.setClipUrl=function(t,e,r){t.attr(\"clip-path\",V(e,r))},x.getTranslate=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||0,y:+e[1]||0}},x.setTranslate=function(t,e,r){var n=t.attr?\"attr\":\"getAttribute\",i=t.attr?\"attr\":\"setAttribute\",a=t[n](\"transform\")||\"\";return e=e||0,r=r||0,a=a.replace(/(\\btranslate\\(.*?\\);?)/,\"\").trim(),a=(a+=f(e,r)).trim(),t[i](\"transform\",a),a},x.getScale=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||1,y:+e[1]||1}},x.setScale=function(t,e,r){var n=t.attr?\"attr\":\"getAttribute\",i=t.attr?\"attr\":\"setAttribute\",a=t[n](\"transform\")||\"\";return e=e||1,r=r||1,a=a.replace(/(\\bscale\\(.*?\\);?)/,\"\").trim(),a=(a+=\"scale(\"+e+\",\"+r+\")\").trim(),t[i](\"transform\",a),a};var H=/\\s*sc.*/;x.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?\"\":\"scale(\"+e+\",\"+r+\")\";t.each((function(){var t=(this.getAttribute(\"transform\")||\"\").replace(H,\"\");t=(t+=n).trim(),this.setAttribute(\"transform\",t)}))}};var q=/translate\\([^)]*\\)\\s*$/;function G(t,e){var r;return t&&(r=t.mf),void 0===r&&(r=e.marker&&e.marker.standoff||0),e._geo||e._xA?r:-r}x.setTextPointsScale=function(t,e,r){t&&t.each((function(){var t,i=n.select(this),a=i.select(\"text\");if(a.node()){var o=parseFloat(a.attr(\"x\")||0),s=parseFloat(a.attr(\"y\")||0),l=(i.attr(\"transform\")||\"\").match(q);t=1===e&&1===r?[]:[f(o,s),\"scale(\"+e+\",\"+r+\")\",f(-o,-s)],l&&t.push(l),i.attr(\"transform\",t.join(\"\"))}}))},x.getMarkerStandoff=G;var Z,Y,W,X,J,K,$=Math.atan2,Q=Math.cos,tt=Math.sin;function et(t,e){var r=e[0],n=e[1];return[r*Q(t)-n*tt(t),r*tt(t)+n*Q(t)]}function rt(t,e){var r,n,i=t.ma;void 0===i&&(i=e.marker.angle||0);var a=e.marker.angleref;if(\"previous\"===a||\"north\"===a){if(e._geo){var s=e._geo.project(t.lonlat);r=s[0],n=s[1]}else{var l=e._xA,u=e._yA;if(!l||!u)return 90;r=l.c2p(t.x),n=u.c2p(t.y)}if(e._geo){var c,f=t.lonlat[0],h=t.lonlat[1],p=e._geo.project([f,h+1e-5]),d=e._geo.project([f+1e-5,h]),v=$(d[1]-n,d[0]-r),g=$(p[1]-n,p[0]-r);if(\"north\"===a)c=i/180*Math.PI;else if(\"previous\"===a){var y=f/180*Math.PI,m=h/180*Math.PI,x=Z/180*Math.PI,b=Y/180*Math.PI,_=x-y,w=Q(b)*tt(_),T=tt(b)*Q(m)-Q(b)*tt(m)*Q(_);c=-$(w,T)-Math.PI,Z=f,Y=h}var k=et(v,[Q(c),0]),A=et(g,[tt(c),0]);i=$(k[1]+A[1],k[0]+A[0])/Math.PI*180,\"previous\"!==a||K===e.uid&&t.i===J+1||(i=null)}if(\"previous\"===a&&!e._geo)if(K===e.uid&&t.i===J+1&&o(r)&&o(n)){var M=r-W,S=n-X,E=e.line&&e.line.shape||\"\",L=E.slice(E.length-1);\"h\"===L&&(S=0),\"v\"===L&&(M=0),i+=$(S,M)/Math.PI*180+90}else i=null}return W=r,X=n,J=t.i,K=e.uid,i}x.getMarkerAngle=rt},90998:function(t,e,r){\"use strict\";var n,i,a,o,s=r(95616),l=r(39898).round,u=\"M0,0Z\",c=Math.sqrt(2),f=Math.sqrt(3),h=Math.PI,p=Math.cos,d=Math.sin;function v(t){return null===t}function g(t,e,r){if(!(t&&t%360!=0||e))return r;if(a===t&&o===e&&n===r)return i;function l(t,r){var n=p(t),i=d(t),a=r[0],o=r[1]+(e||0);return[a*n-o*i,a*i+o*n]}a=t,o=e,n=r;for(var u=t/180*h,c=0,f=0,v=s(r),g=\"\",y=0;y<v.length;y++){var m=v[y],x=m[0],b=c,_=f;if(\"M\"===x||\"L\"===x)c=+m[1],f=+m[2];else if(\"m\"===x||\"l\"===x)c+=+m[1],f+=+m[2];else if(\"H\"===x)c=+m[1];else if(\"h\"===x)c+=+m[1];else if(\"V\"===x)f=+m[1];else if(\"v\"===x)f+=+m[1];else if(\"A\"===x){c=+m[1],f=+m[2];var w=l(u,[+m[6],+m[7]]);m[6]=w[0],m[7]=w[1],m[3]=+m[3]+t}\"H\"!==x&&\"V\"!==x||(x=\"L\"),\"h\"!==x&&\"v\"!==x||(x=\"l\"),\"m\"!==x&&\"l\"!==x||(c-=b,f-=_);var T=l(u,[c,f]);\"H\"!==x&&\"V\"!==x||(x=\"L\"),\"M\"!==x&&\"L\"!==x&&\"m\"!==x&&\"l\"!==x||(m[1]=T[0],m[2]=T[1]),m[0]=x,g+=m[0]+m.slice(1).join(\",\")}return i=g,g}t.exports={circle:{n:0,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=\"M\"+n+\",0A\"+n+\",\"+n+\" 0 1,1 0,-\"+n+\"A\"+n+\",\"+n+\" 0 0,1 \"+n+\",0Z\";return r?g(e,r,i):i}},square:{n:1,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"H-\"+n+\"V-\"+n+\"H\"+n+\"Z\")}},diamond:{n:2,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,\"M\"+n+\",0L0,\"+n+\"L-\"+n+\",0L0,-\"+n+\"Z\")}},cross:{n:3,f:function(t,e,r){if(v(e))return u;var n=l(.4*t,2),i=l(1.2*t,2);return g(e,r,\"M\"+i+\",\"+n+\"H\"+n+\"V\"+i+\"H-\"+n+\"V\"+n+\"H-\"+i+\"V-\"+n+\"H-\"+n+\"V-\"+i+\"H\"+n+\"V-\"+n+\"H\"+i+\"Z\")}},x:{n:4,f:function(t,e,r){if(v(e))return u;var n=l(.8*t/c,2),i=\"l\"+n+\",\"+n,a=\"l\"+n+\",-\"+n,o=\"l-\"+n+\",-\"+n,s=\"l-\"+n+\",\"+n;return g(e,r,\"M0,\"+n+i+a+o+a+o+s+o+s+i+s+i+\"Z\")}},\"triangle-up\":{n:5,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\"M-\"+n+\",\"+l(t/2,2)+\"H\"+n+\"L0,-\"+l(t,2)+\"Z\")}},\"triangle-down\":{n:6,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\"M-\"+n+\",-\"+l(t/2,2)+\"H\"+n+\"L0,\"+l(t,2)+\"Z\")}},\"triangle-left\":{n:7,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\"M\"+l(t/2,2)+\",-\"+n+\"V\"+n+\"L-\"+l(t,2)+\",0Z\")}},\"triangle-right\":{n:8,f:function(t,e,r){if(v(e))return u;var n=l(2*t/f,2);return g(e,r,\"M-\"+l(t/2,2)+\",-\"+n+\"V\"+n+\"L\"+l(t,2)+\",0Z\")}},\"triangle-ne\":{n:9,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\"M-\"+i+\",-\"+n+\"H\"+n+\"V\"+i+\"Z\")}},\"triangle-se\":{n:10,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\"M\"+n+\",-\"+i+\"V\"+n+\"H-\"+i+\"Z\")}},\"triangle-sw\":{n:11,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\"M\"+i+\",\"+n+\"H-\"+n+\"V-\"+i+\"Z\")}},\"triangle-nw\":{n:12,f:function(t,e,r){if(v(e))return u;var n=l(.6*t,2),i=l(1.2*t,2);return g(e,r,\"M-\"+n+\",\"+i+\"V-\"+n+\"H\"+i+\"Z\")}},pentagon:{n:13,f:function(t,e,r){if(v(e))return u;var n=l(.951*t,2),i=l(.588*t,2),a=l(-t,2),o=l(-.309*t,2);return g(e,r,\"M\"+n+\",\"+o+\"L\"+i+\",\"+l(.809*t,2)+\"H-\"+i+\"L-\"+n+\",\"+o+\"L0,\"+a+\"Z\")}},hexagon:{n:14,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,\"M\"+a+\",-\"+i+\"V\"+i+\"L0,\"+n+\"L-\"+a+\",\"+i+\"V-\"+i+\"L0,-\"+n+\"Z\")}},hexagon2:{n:15,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/2,2),a=l(t*f/2,2);return g(e,r,\"M-\"+i+\",\"+a+\"H\"+i+\"L\"+n+\",0L\"+i+\",-\"+a+\"H-\"+i+\"L-\"+n+\",0Z\")}},octagon:{n:16,f:function(t,e,r){if(v(e))return u;var n=l(.924*t,2),i=l(.383*t,2);return g(e,r,\"M-\"+i+\",-\"+n+\"H\"+i+\"L\"+n+\",-\"+i+\"V\"+i+\"L\"+i+\",\"+n+\"H-\"+i+\"L-\"+n+\",\"+i+\"V-\"+i+\"Z\")}},star:{n:17,f:function(t,e,r){if(v(e))return u;var n=1.4*t,i=l(.225*n,2),a=l(.951*n,2),o=l(.363*n,2),s=l(.588*n,2),c=l(-n,2),f=l(-.309*n,2),h=l(.118*n,2),p=l(.809*n,2);return g(e,r,\"M\"+i+\",\"+f+\"H\"+a+\"L\"+o+\",\"+h+\"L\"+s+\",\"+p+\"L0,\"+l(.382*n,2)+\"L-\"+s+\",\"+p+\"L-\"+o+\",\"+h+\"L-\"+a+\",\"+f+\"H-\"+i+\"L0,\"+c+\"Z\")}},hexagram:{n:18,f:function(t,e,r){if(v(e))return u;var n=l(.66*t,2),i=l(.38*t,2),a=l(.76*t,2);return g(e,r,\"M-\"+a+\",0l-\"+i+\",-\"+n+\"h\"+a+\"l\"+i+\",-\"+n+\"l\"+i+\",\"+n+\"h\"+a+\"l-\"+i+\",\"+n+\"l\"+i+\",\"+n+\"h-\"+a+\"l-\"+i+\",\"+n+\"l-\"+i+\",-\"+n+\"h-\"+a+\"Z\")}},\"star-triangle-up\":{n:19,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s=\"A \"+o+\",\"+o+\" 0 0 1 \";return g(e,r,\"M-\"+n+\",\"+i+s+n+\",\"+i+s+\"0,-\"+a+s+\"-\"+n+\",\"+i+\"Z\")}},\"star-triangle-down\":{n:20,f:function(t,e,r){if(v(e))return u;var n=l(t*f*.8,2),i=l(.8*t,2),a=l(1.6*t,2),o=l(4*t,2),s=\"A \"+o+\",\"+o+\" 0 0 1 \";return g(e,r,\"M\"+n+\",-\"+i+s+\"-\"+n+\",-\"+i+s+\"0,\"+a+s+n+\",-\"+i+\"Z\")}},\"star-square\":{n:21,f:function(t,e,r){if(v(e))return u;var n=l(1.1*t,2),i=l(2*t,2),a=\"A \"+i+\",\"+i+\" 0 0 1 \";return g(e,r,\"M-\"+n+\",-\"+n+a+\"-\"+n+\",\"+n+a+n+\",\"+n+a+n+\",-\"+n+a+\"-\"+n+\",-\"+n+\"Z\")}},\"star-diamond\":{n:22,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(1.9*t,2),a=\"A \"+i+\",\"+i+\" 0 0 1 \";return g(e,r,\"M-\"+n+\",0\"+a+\"0,\"+n+a+n+\",0\"+a+\"0,-\"+n+a+\"-\"+n+\",0Z\")}},\"diamond-tall\":{n:23,f:function(t,e,r){if(v(e))return u;var n=l(.7*t,2),i=l(1.4*t,2);return g(e,r,\"M0,\"+i+\"L\"+n+\",0L0,-\"+i+\"L-\"+n+\",0Z\")}},\"diamond-wide\":{n:24,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2),i=l(.7*t,2);return g(e,r,\"M0,\"+i+\"L\"+n+\",0L0,-\"+i+\"L-\"+n+\",0Z\")}},hourglass:{n:25,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"H-\"+n+\"L\"+n+\",-\"+n+\"H-\"+n+\"Z\")},noDot:!0},bowtie:{n:26,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"V-\"+n+\"L-\"+n+\",\"+n+\"V-\"+n+\"Z\")},noDot:!0},\"circle-cross\":{n:27,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M0,\"+n+\"V-\"+n+\"M\"+n+\",0H-\"+n+\"M\"+n+\",0A\"+n+\",\"+n+\" 0 1,1 0,-\"+n+\"A\"+n+\",\"+n+\" 0 0,1 \"+n+\",0Z\")},needLine:!0,noDot:!0},\"circle-x\":{n:28,f:function(t,e,r){if(v(e))return u;var n=l(t,2),i=l(t/c,2);return g(e,r,\"M\"+i+\",\"+i+\"L-\"+i+\",-\"+i+\"M\"+i+\",-\"+i+\"L-\"+i+\",\"+i+\"M\"+n+\",0A\"+n+\",\"+n+\" 0 1,1 0,-\"+n+\"A\"+n+\",\"+n+\" 0 0,1 \"+n+\",0Z\")},needLine:!0,noDot:!0},\"square-cross\":{n:29,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M0,\"+n+\"V-\"+n+\"M\"+n+\",0H-\"+n+\"M\"+n+\",\"+n+\"H-\"+n+\"V-\"+n+\"H\"+n+\"Z\")},needLine:!0,noDot:!0},\"square-x\":{n:30,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n+\"M\"+n+\",\"+n+\"H-\"+n+\"V-\"+n+\"H\"+n+\"Z\")},needLine:!0,noDot:!0},\"diamond-cross\":{n:31,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2);return g(e,r,\"M\"+n+\",0L0,\"+n+\"L-\"+n+\",0L0,-\"+n+\"ZM0,-\"+n+\"V\"+n+\"M-\"+n+\",0H\"+n)},needLine:!0,noDot:!0},\"diamond-x\":{n:32,f:function(t,e,r){if(v(e))return u;var n=l(1.3*t,2),i=l(.65*t,2);return g(e,r,\"M\"+n+\",0L0,\"+n+\"L-\"+n+\",0L0,-\"+n+\"ZM-\"+i+\",-\"+i+\"L\"+i+\",\"+i+\"M-\"+i+\",\"+i+\"L\"+i+\",-\"+i)},needLine:!0,noDot:!0},\"cross-thin\":{n:33,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\"M0,\"+n+\"V-\"+n+\"M\"+n+\",0H-\"+n)},needLine:!0,noDot:!0,noFill:!0},\"x-thin\":{n:34,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(.85*t,2);return g(e,r,\"M0,\"+n+\"V-\"+n+\"M\"+n+\",0H-\"+n+\"M\"+i+\",\"+i+\"L-\"+i+\",-\"+i+\"M\"+i+\",-\"+i+\"L-\"+i+\",\"+i)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t,e,r){if(v(e))return u;var n=l(t/2,2),i=l(t,2);return g(e,r,\"M\"+n+\",\"+i+\"V-\"+i+\"M\"+(n-i)+\",-\"+i+\"V\"+i+\"M\"+i+\",\"+n+\"H-\"+i+\"M-\"+i+\",\"+(n-i)+\"H\"+i)},needLine:!0,noFill:!0},\"y-up\":{n:37,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\"M-\"+n+\",\"+a+\"L0,0M\"+n+\",\"+a+\"L0,0M0,-\"+i+\"L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-down\":{n:38,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\"M-\"+n+\",-\"+a+\"L0,0M\"+n+\",-\"+a+\"L0,0M0,\"+i+\"L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-left\":{n:39,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\"M\"+a+\",\"+n+\"L0,0M\"+a+\",-\"+n+\"L0,0M-\"+i+\",0L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-right\":{n:40,f:function(t,e,r){if(v(e))return u;var n=l(1.2*t,2),i=l(1.6*t,2),a=l(.8*t,2);return g(e,r,\"M-\"+a+\",\"+n+\"L0,0M-\"+a+\",-\"+n+\"L0,0M\"+i+\",0L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"line-ew\":{n:41,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\"M\"+n+\",0H-\"+n)},needLine:!0,noDot:!0,noFill:!0},\"line-ns\":{n:42,f:function(t,e,r){if(v(e))return u;var n=l(1.4*t,2);return g(e,r,\"M0,\"+n+\"V-\"+n)},needLine:!0,noDot:!0,noFill:!0},\"line-ne\":{n:43,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n)},needLine:!0,noDot:!0,noFill:!0},\"line-nw\":{n:44,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n)},needLine:!0,noDot:!0,noFill:!0},\"arrow-up\":{n:45,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M0,0L-\"+n+\",\"+l(2*t,2)+\"H\"+n+\"Z\")},backoff:1,noDot:!0},\"arrow-down\":{n:46,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M0,0L-\"+n+\",-\"+l(2*t,2)+\"H\"+n+\"Z\")},noDot:!0},\"arrow-left\":{n:47,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\"M0,0L\"+n+\",-\"+i+\"V\"+i+\"Z\")},noDot:!0},\"arrow-right\":{n:48,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\"M0,0L-\"+n+\",-\"+i+\"V\"+i+\"Z\")},noDot:!0},\"arrow-bar-up\":{n:49,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M-\"+n+\",0H\"+n+\"M0,0L-\"+n+\",\"+l(2*t,2)+\"H\"+n+\"Z\")},backoff:1,needLine:!0,noDot:!0},\"arrow-bar-down\":{n:50,f:function(t,e,r){if(v(e))return u;var n=l(t,2);return g(e,r,\"M-\"+n+\",0H\"+n+\"M0,0L-\"+n+\",-\"+l(2*t,2)+\"H\"+n+\"Z\")},needLine:!0,noDot:!0},\"arrow-bar-left\":{n:51,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\"M0,-\"+i+\"V\"+i+\"M0,0L\"+n+\",-\"+i+\"V\"+i+\"Z\")},needLine:!0,noDot:!0},\"arrow-bar-right\":{n:52,f:function(t,e,r){if(v(e))return u;var n=l(2*t,2),i=l(t,2);return g(e,r,\"M0,-\"+i+\"V\"+i+\"M0,0L-\"+n+\",-\"+i+\"V\"+i+\"Z\")},needLine:!0,noDot:!0},arrow:{n:53,f:function(t,e,r){if(v(e))return u;var n=h/2.5,i=2*t*p(n),a=2*t*d(n);return g(e,r,\"M0,0L\"+-i+\",\"+a+\"L\"+i+\",\"+a+\"Z\")},backoff:.9,noDot:!0},\"arrow-wide\":{n:54,f:function(t,e,r){if(v(e))return u;var n=h/4,i=2*t*p(n),a=2*t*d(n);return g(e,r,\"M0,0L\"+-i+\",\"+a+\"A \"+2*t+\",\"+2*t+\" 0 0 1 \"+i+\",\"+a+\"Z\")},backoff:.4,noDot:!0}}},25673:function(t){\"use strict\";t.exports={visible:{valType:\"boolean\",editType:\"calc\"},type:{valType:\"enumerated\",values:[\"percent\",\"constant\",\"sqrt\",\"data\"],editType:\"calc\"},symmetric:{valType:\"boolean\",editType:\"calc\"},array:{valType:\"data_array\",editType:\"calc\"},arrayminus:{valType:\"data_array\",editType:\"calc\"},value:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},valueminus:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},traceref:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},tracerefminus:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},copy_ystyle:{valType:\"boolean\",editType:\"plot\"},copy_zstyle:{valType:\"boolean\",editType:\"style\"},color:{valType:\"color\",editType:\"style\"},thickness:{valType:\"number\",min:0,dflt:2,editType:\"style\"},width:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\",_deprecated:{opacity:{valType:\"number\",editType:\"style\"}}}},84532:function(t,e,r){\"use strict\";var n=r(92770),i=r(73972),a=r(89298),o=r(71828),s=r(45827);function l(t,e,r,i){var l=e[\"error_\"+i]||{},u=[];if(l.visible&&-1!==[\"linear\",\"log\"].indexOf(r.type)){for(var c=s(l),f=0;f<t.length;f++){var h=t[f],p=h.i;if(void 0===p)p=f;else if(null===p)continue;var d=h[i];if(n(r.c2l(d))){var v=c(d,p);if(n(v[0])&&n(v[1])){var g=h[i+\"s\"]=d-v[0],y=h[i+\"h\"]=d+v[1];u.push(g,y)}}}var m=r._id,x=e._extremes[m],b=a.findExtremes(r,u,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}t.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&i.traceIs(o,\"errorBarsOK\")){var s=a.getFromId(t,o.xaxis),u=a.getFromId(t,o.yaxis);l(n,o,s,\"x\"),l(n,o,u,\"y\")}}}},45827:function(t){\"use strict\";function e(t,e){return\"percent\"===t?function(t){return Math.abs(t*e/100)}:\"constant\"===t?function(){return Math.abs(e)}:\"sqrt\"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}t.exports=function(t){var r=t.type,n=t.symmetric;if(\"data\"===r){var i=t.array||[];if(n)return function(t,e){var r=+i[e];return[r,r]};var a=t.arrayminus||[];return function(t,e){var r=+i[e],n=+a[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=e(r,t.value),s=e(r,t.valueminus);return n||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},97587:function(t,e,r){\"use strict\";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(25673);t.exports=function(t,e,r,l){var u=\"error_\"+l.axis,c=o.newContainer(e,u),f=t[u]||{};function h(t,e){return a.coerce(f,c,s,t,e)}if(!1!==h(\"visible\",void 0!==f.array||void 0!==f.value||\"sqrt\"===f.type)){var p=h(\"type\",\"array\"in f?\"data\":\"percent\"),d=!0;\"sqrt\"!==p&&(d=h(\"symmetric\",!((\"data\"===p?\"arrayminus\":\"valueminus\")in f))),\"data\"===p?(h(\"array\"),h(\"traceref\"),d||(h(\"arrayminus\"),h(\"tracerefminus\"))):\"percent\"!==p&&\"constant\"!==p||(h(\"value\"),d||h(\"valueminus\"));var v=\"copy_\"+l.inherit+\"style\";l.inherit&&(e[\"error_\"+l.inherit]||{}).visible&&h(v,!(f.color||n(f.thickness)||n(f.width))),l.inherit&&c[v]||(h(\"color\",r),h(\"thickness\"),h(\"width\",i.traceIs(e,\"gl3d\")?0:4))}}},37369:function(t,e,r){\"use strict\";var n=r(71828),i=r(30962).overrideAll,a=r(25673),o={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a),error_z:n.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,t.exports={moduleType:\"component\",name:\"errorbars\",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,\"calc\",\"nested\"),scattergl:i(o,\"calc\",\"nested\")}},supplyDefaults:r(97587),calc:r(84532),makeComputeError:r(45827),plot:r(19398),style:r(62662),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys)),(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},19398:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(91424),o=r(34098);t.exports=function(t,e,r,s){var l=r.xaxis,u=r.yaxis,c=s&&s.duration>0,f=t._context.staticPlot;e.each((function(e){var h,p=e[0].trace,d=p.error_x||{},v=p.error_y||{};p.ids&&(h=function(t){return t.id});var g=o.hasMarkers(p)&&p.marker.maxdisplayed>0;v.visible||d.visible||(e=[]);var y=n.select(this).selectAll(\"g.errorbar\").data(e,h);if(y.exit().remove(),e.length){d.visible||y.selectAll(\"path.xerror\").remove(),v.visible||y.selectAll(\"path.yerror\").remove(),y.style(\"opacity\",1);var m=y.enter().append(\"g\").classed(\"errorbar\",!0);c&&m.style(\"opacity\",0).transition().duration(s.duration).style(\"opacity\",1),a.setClipUrl(y,r.layerClipId,t),y.each((function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};return void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0))),void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0))),n}(t,l,u);if(!g||t.vis){var a,o=e.select(\"path.yerror\");if(v.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var h=v.width;a=\"M\"+(r.x-h)+\",\"+r.yh+\"h\"+2*h+\"m-\"+h+\",0V\"+r.ys,r.noYS||(a+=\"m-\"+h+\",0h\"+2*h),o.size()?c&&(o=o.transition().duration(s.duration).ease(s.easing)):o=e.append(\"path\").style(\"vector-effect\",f?\"none\":\"non-scaling-stroke\").classed(\"yerror\",!0),o.attr(\"d\",a)}else o.remove();var p=e.select(\"path.xerror\");if(d.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var y=(d.copy_ystyle?v:d).width;a=\"M\"+r.xh+\",\"+(r.y-y)+\"v\"+2*y+\"m0,-\"+y+\"H\"+r.xs,r.noXS||(a+=\"m0,-\"+y+\"v\"+2*y),p.size()?c&&(p=p.transition().duration(s.duration).ease(s.easing)):p=e.append(\"path\").style(\"vector-effect\",f?\"none\":\"non-scaling-stroke\").classed(\"xerror\",!0),p.attr(\"d\",a)}else p.remove()}}))}}))}},62662:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901);t.exports=function(t){t.each((function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll(\"path.yerror\").style(\"stroke-width\",r.thickness+\"px\").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll(\"path.xerror\").style(\"stroke-width\",a.thickness+\"px\").call(i.stroke,a.color)}))}},77914:function(t,e,r){\"use strict\";var n=r(41940),i=r(528).hoverlabel,a=r(1426).extendFlat;t.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:\"none\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\"none\"}}},30732:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972);function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}t.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],u=l[0].trace;if(!i.traceIs(u,\"pie-like\")){var c=i.traceIs(u,\"2dMap\")?a:n.fillArray;c(u.hoverinfo,l,\"hi\",o(u)),u.hovertemplate&&c(u.hovertemplate,l,\"ht\"),u.hoverlabel&&(c(u.hoverlabel.bgcolor,l,\"hbg\"),c(u.hoverlabel.bordercolor,l,\"hbc\"),c(u.hoverlabel.font.size,l,\"hts\"),c(u.hoverlabel.font.color,l,\"htc\"),c(u.hoverlabel.font.family,l,\"htf\"),c(u.hoverlabel.namelength,l,\"hnl\"),c(u.hoverlabel.align,l,\"hta\"))}}}},75914:function(t,e,r){\"use strict\";var n=r(73972),i=r(88335).hover;t.exports=function(t,e,r){var a=n.getComponentMethod(\"annotations\",\"onClick\")(t,t._hoverdata);function o(){t.emit(\"plotly_click\",{points:t._hoverdata,event:e})}void 0!==r&&i(t,e,r,!0),t._hoverdata&&e&&e.target&&(a&&a.then?a.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},26675:function(t){\"use strict\";t.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\"Arial, sans-serif\",HOVERMINTIME:50,HOVERID:\"-hover\"}},54268:function(t,e,r){\"use strict\";var n=r(71828),i=r(77914),a=r(38048);t.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),a(t,e,(function(r,a){return n.coerce(t,e,i,r,a)}),s)}},23469:function(t,e,r){\"use strict\";var n=r(71828);e.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},e.isTraceInSubplots=function(t,r){if(\"splom\"===t.type){for(var n=t.xaxes||[],i=t.yaxes||[],a=0;a<n.length;a++)for(var o=0;o<i.length;o++)if(-1!==r.indexOf(n[a]+i[o]))return!0;return!1}return-1!==r.indexOf(e.getSubplot(t))},e.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},e.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},e.getDistanceFunction=function(t,r,n,i){return\"closest\"===t?i||e.quadrature(r,n):\"x\"===t.charAt(0)?r:n},e.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var i=e(t[n]);i<=r.distance&&(r.index=n,r.distance=i)}return r},e.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},e.quadrature=function(t,e){return function(r){var n=t(r),i=e(r);return Math.sqrt(n*n+i*i)}},e.makeEventData=function(t,r,n){var i=\"index\"in t?t.index:t.pointNumber,a={data:r._input,fullData:r,curveNumber:r.index,pointNumber:i};if(r._indexToPoints){var o=r._indexToPoints[i];1===o.length?a.pointIndex=o[0]:a.pointIndices=o}else a.pointIndex=i;return r._module.eventData?a=r._module.eventData(a,t,r,n,i):(\"xVal\"in t?a.x=t.xVal:\"x\"in t&&(a.x=t.x),\"yVal\"in t?a.y=t.yVal:\"y\"in t&&(a.y=t.y),t.xa&&(a.xaxis=t.xa),t.ya&&(a.yaxis=t.ya),void 0!==t.zLabelVal&&(a.z=t.zLabelVal)),e.appendArrayPointValue(a,r,i),a},e.appendArrayPointValue=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){var c=o(n.nestedProperty(e,l).get(),r);void 0!==c&&(t[u]=c)}}},e.appendArrayMultiPointValues=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],u=a(l);if(void 0===t[u]){for(var c=n.nestedProperty(e,l).get(),f=new Array(r.length),h=0;h<r.length;h++)f[h]=o(c,r[h]);t[u]=f}}};var i={ids:\"id\",locations:\"location\",labels:\"label\",values:\"value\",\"marker.colors\":\"color\",parents:\"parent\"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={\"x unified\":!0,\"y unified\":!0};e.isUnifiedHover=function(t){return\"string\"==typeof t&&!!l[t]},e.isXYhover=function(t){return\"string\"==typeof t&&!!s[t]}},88335:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(84267),o=r(71828),s=o.strTranslate,l=o.strRotate,u=r(11086),c=r(63893),f=r(39918),h=r(91424),p=r(7901),d=r(28569),v=r(89298),g=r(73972),y=r(23469),m=r(26675),x=r(99017),b=r(43969),_=m.YANGLE,w=Math.PI*_/180,T=1/Math.sin(w),k=Math.cos(w),A=Math.sin(w),M=m.HOVERARROWSIZE,S=m.HOVERTEXTPAD,E={box:!0,ohlc:!0,violin:!0,candlestick:!0},L={scatter:!0,scattergl:!0,splom:!0};function C(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa?t.xa._id:\"\",t.ya?t.ya._id:\"\"].join(\",\")}e.hover=function(t,e,r,a){t=o.getGraphDiv(t);var s=e.target;o.throttle(t._fullLayout._uid+m.HOVERID,m.HOVERMINTIME,(function(){!function(t,e,r,a,s){r||(r=\"xy\");var l=Array.isArray(r)?r:[r],c=t._fullLayout,h=c._plots||[],v=h[r],m=c._has(\"cartesian\");if(v){var x=v.overlays.map((function(t){return t.id}));l=l.concat(x)}for(var b=l.length,_=new Array(b),w=new Array(b),k=!1,A=0;A<b;A++){var S=l[A];if(h[S])k=!0,_[A]=h[S].xaxis,w[A]=h[S].yaxis;else{if(!c[S]||!c[S]._subplot)return void o.warn(\"Unrecognized subplot: \"+S);var P=c[S]._subplot;_[A]=P.xaxis,w[A]=P.yaxis}}var I=e.hovermode||c.hovermode;if(I&&!k&&(I=\"closest\"),-1===[\"x\",\"y\",\"closest\",\"x unified\",\"y unified\"].indexOf(I)||!t.calcdata||t.querySelector(\".zoombox\")||t._dragging)return d.unhoverRaw(t,e);var N=c.hoverdistance;-1===N&&(N=1/0);var H=c.spikedistance;-1===H&&(H=1/0);var q,G,Z,Y,W,X,J,K,$,Q,tt,et,rt,nt=[],it=[],at={hLinePoint:null,vLinePoint:null},ot=!1;if(Array.isArray(e))for(I=\"array\",Z=0;Z<e.length;Z++)(W=t.calcdata[e[Z].curveNumber||0])&&(X=W[0].trace,\"skip\"!==W[0].trace.hoverinfo&&(it.push(W),\"h\"===X.orientation&&(ot=!0)));else{for(Y=0;Y<t.calcdata.length;Y++)W=t.calcdata[Y],\"skip\"!==(X=W[0].trace).hoverinfo&&y.isTraceInSubplots(X,l)&&(it.push(W),\"h\"===X.orientation&&(ot=!0));var st,lt;if(s){if(!1===u.triggerHandler(t,\"plotly_beforehover\",e))return;var ut=s.getBoundingClientRect();st=e.clientX-ut.left,lt=e.clientY-ut.top,c._calcInverseTransform(t);var ct=o.apply3DTransform(c._invTransform)(st,lt);if(st=ct[0],lt=ct[1],st<0||st>_[0]._length||lt<0||lt>w[0]._length)return d.unhoverRaw(t,e)}else st=\"xpx\"in e?e.xpx:_[0]._length/2,lt=\"ypx\"in e?e.ypx:w[0]._length/2;if(e.pointerX=st+_[0]._offset,e.pointerY=lt+w[0]._offset,q=\"xval\"in e?y.flat(l,e.xval):y.p2c(_,st),G=\"yval\"in e?y.flat(l,e.yval):y.p2c(w,lt),!i(q[0])||!i(G[0]))return o.warn(\"Fx.hover failed\",e,t),d.unhoverRaw(t,e)}var ft=1/0;function ht(t,r){for(Y=0;Y<it.length;Y++)if((W=it[Y])&&W[0]&&W[0].trace&&!0===(X=W[0].trace).visible&&0!==X._length&&-1===[\"carpet\",\"contourcarpet\"].indexOf(X._module.name)){if(\"splom\"===X.type?J=l[K=0]:(J=y.getSubplot(X),K=l.indexOf(J)),$=I,y.isUnifiedHover($)&&($=$.charAt(0)),et={cd:W,trace:X,xa:_[K],ya:w[K],maxHoverDistance:N,maxSpikeDistance:H,index:!1,distance:Math.min(ft,N),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:p.defaultLine,name:X.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},c[J]&&(et.subplot=c[J]._subplot),c._splomScenes&&c._splomScenes[X.uid]&&(et.scene=c._splomScenes[X.uid]),rt=nt.length,\"array\"===$){var n=e[Y];\"pointNumber\"in n?(et.index=n.pointNumber,$=\"closest\"):($=\"\",\"xval\"in n&&(Q=n.xval,$=\"x\"),\"yval\"in n&&(tt=n.yval,$=$?\"closest\":\"y\"))}else void 0!==t&&void 0!==r?(Q=t,tt=r):(Q=q[K],tt=G[K]);if(0!==N)if(X._module&&X._module.hoverPoints){var a=X._module.hoverPoints(et,Q,tt,$,{finiteRange:!0,hoverLayer:c._hoverlayer});if(a)for(var s,u=0;u<a.length;u++)s=a[u],i(s.x0)&&i(s.y0)&&nt.push(R(s,I))}else o.log(\"Unrecognized trace type in hover:\",X);if(\"closest\"===I&&nt.length>rt&&(nt.splice(0,rt),ft=nt[0].distance),m&&0!==H&&0===nt.length){et.distance=H,et.index=!1;var f=X._module.hoverPoints(et,Q,tt,\"closest\",{hoverLayer:c._hoverlayer});if(f&&(f=f.filter((function(t){return t.spikeDistance<=H}))),f&&f.length){var h,d=f.filter((function(t){return t.xa.showspikes&&\"hovered data\"!==t.xa.spikesnap}));if(d.length){var v=d[0];i(v.x0)&&i(v.y0)&&(h=dt(v),(!at.vLinePoint||at.vLinePoint.spikeDistance>h.spikeDistance)&&(at.vLinePoint=h))}var g=f.filter((function(t){return t.ya.showspikes&&\"hovered data\"!==t.ya.spikesnap}));if(g.length){var x=g[0];i(x.x0)&&i(x.y0)&&(h=dt(x),(!at.hLinePoint||at.hLinePoint.spikeDistance>h.spikeDistance)&&(at.hLinePoint=h))}}}}}function pt(t,e,r){for(var n,i=null,a=1/0,o=0;o<t.length;o++)n=t[o].spikeDistance,r&&0===o&&(n=-1/0),n<=a&&n<=e&&(i=t[o],a=n);return i}function dt(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}ht();var vt={fullLayout:c,container:c._hoverlayer,event:e},gt=t._spikepoints,yt={vLinePoint:at.vLinePoint,hLinePoint:at.hLinePoint};t._spikepoints=yt;var mt=function(){nt.sort((function(t,e){return t.distance-e.distance})),nt=function(t,e){for(var r=e.charAt(0),n=[],i=[],a=[],o=0;o<t.length;o++){var s=t[o];g.traceIs(s.trace,\"bar-like\")||g.traceIs(s.trace,\"box-violin\")?a.push(s):s.trace[r+\"period\"]?i.push(s):n.push(s)}return n.concat(i).concat(a)}(nt,I)};mt();var xt=I.charAt(0),bt=(\"x\"===xt||\"y\"===xt)&&nt[0]&&L[nt[0].trace.type];if(m&&0!==H&&0!==nt.length){var _t=pt(nt.filter((function(t){return t.ya.showspikes})),H,bt);at.hLinePoint=dt(_t);var wt=pt(nt.filter((function(t){return t.xa.showspikes})),H,bt);at.vLinePoint=dt(wt)}if(0===nt.length){var Tt=d.unhoverRaw(t,e);return!m||null===at.hLinePoint&&null===at.vLinePoint||B(gt)&&F(t,at,vt),Tt}if(m&&B(gt)&&F(t,at,vt),y.isXYhover($)&&0!==nt[0].length&&\"splom\"!==nt[0].trace.type){var kt=nt[0],At=(nt=E[kt.trace.type]?nt.filter((function(t){return t.trace.index===kt.trace.index})):[kt]).length;ht(j(\"x\",kt,c),j(\"y\",kt,c));var Mt,St=[],Et={},Lt=0,Ct=function(t){var e=E[t.trace.type]?C(t):t.trace.index;if(Et[e]){var r=Et[e]-1,n=St[r];r>0&&Math.abs(t.distance)<Math.abs(n.distance)&&(St[r]=t)}else Lt++,Et[e]=Lt,St.push(t)};for(Mt=0;Mt<At;Mt++)Ct(nt[Mt]);for(Mt=nt.length-1;Mt>At-1;Mt--)Ct(nt[Mt]);nt=St,mt()}var Pt=t._hoverdata,Ot=[],It=U(t),Dt=V(t);for(Z=0;Z<nt.length;Z++){var zt=nt[Z],Rt=y.makeEventData(zt,zt.trace,zt.cd);if(!1!==zt.hovertemplate){var Ft=!1;zt.cd[zt.index]&&zt.cd[zt.index].ht&&(Ft=zt.cd[zt.index].ht),zt.hovertemplate=Ft||zt.trace.hovertemplate||!1}if(zt.xa&&zt.ya){var Bt=zt.x0+zt.xa._offset,Nt=zt.x1+zt.xa._offset,jt=zt.y0+zt.ya._offset,Ut=zt.y1+zt.ya._offset,Vt=Math.min(Bt,Nt),Ht=Math.max(Bt,Nt),qt=Math.min(jt,Ut),Gt=Math.max(jt,Ut);Rt.bbox={x0:Vt+Dt,x1:Ht+Dt,y0:qt+It,y1:Gt+It}}zt.eventData=[Rt],Ot.push(Rt)}t._hoverdata=Ot;var Zt=\"y\"===I&&(it.length>1||nt.length>1)||\"closest\"===I&&ot&&nt.length>1,Yt=p.combine(c.plot_bgcolor||p.background,c.paper_bgcolor),Wt=O(nt,{gd:t,hovermode:I,rotateLabels:Zt,bgColor:Yt,container:c._hoverlayer,outerContainer:c._paper.node(),commonLabelOpts:c.hoverlabel,hoverdistance:c.hoverdistance}),Xt=Wt.hoverLabels;if(y.isUnifiedHover(I)||(function(t,e,r,n){var i,a,o,s,l,u,c,f=e?\"xa\":\"ya\",h=e?\"ya\":\"xa\",p=0,d=1,v=t.size(),g=new Array(v),y=0,m=n.minX,x=n.maxX,b=n.minY,_=n.maxY,w=function(t){return t*r._invScaleX},k=function(t){return t*r._invScaleY};function A(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,o=r.pos+r.dp+r.size-e.pmax,a>.01){for(l=t.length-1;l>=0;l--)t[l].dp+=a;i=!1}if(!(o<.01)){if(a<-.01){for(l=t.length-1;l>=0;l--)t[l].dp-=o;i=!1}if(i){var n=0;for(s=0;s<t.length;s++)(u=t[s]).pos+u.dp+u.size>e.pmax&&n++;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos>e.pmax-1&&(u.del=!0,n--);for(s=0;s<t.length&&!(n<=0);s++)if((u=t[s]).pos<e.pmin+1)for(u.del=!0,n--,o=2*u.size,l=t.length-1;l>=0;l--)t[l].dp-=o;for(s=t.length-1;s>=0&&!(n<=0);s--)(u=t[s]).pos+u.dp+u.size>e.pmax&&(u.del=!0,n--)}}}for(t.each((function(t){var n=t[f],i=t[h],a=\"x\"===n._id.charAt(0),o=n.range;0===y&&o&&o[0]>o[1]!==a&&(d=-1);var s=0,l=a?r.width:r.height;if(\"x\"===r.hovermode||\"y\"===r.hovermode){var u,c,p=D(t,e),v=t.anchor,A=\"end\"===v?-1:1;if(\"middle\"===v)c=(u=t.crossPos+(a?k(p.y-t.by/2):w(t.bx/2+t.tx2width/2)))+(a?k(t.by):w(t.bx));else if(a)c=(u=t.crossPos+k(M+p.y)-k(t.by/2-M))+k(t.by);else{var S=w(A*M+p.x),E=S+w(A*t.bx);u=t.crossPos+Math.min(S,E),c=t.crossPos+Math.max(S,E)}a?void 0!==b&&void 0!==_&&Math.min(c,_)-Math.max(u,b)>1&&(\"left\"===i.side?(s=i._mainLinePosition,l=r.width):l=i._mainLinePosition):void 0!==m&&void 0!==x&&Math.min(c,x)-Math.max(u,m)>1&&(\"top\"===i.side?(s=i._mainLinePosition,l=r.height):l=i._mainLinePosition)}g[y++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?T:1)/2,pmin:s,pmax:l}]})),g.sort((function(t,e){return t[0].posref-e[0].posref||d*(e[0].traceIndex-t[0].traceIndex)}));!i&&p<=v;){for(p++,i=!0,s=0;s<g.length-1;){var S=g[s],E=g[s+1],L=S[S.length-1],C=E[0];if((a=L.pos+L.dp+L.size-C.pos-C.dp+C.size)>.01&&L.pmin===C.pmin&&L.pmax===C.pmax){for(l=E.length-1;l>=0;l--)E[l].dp+=a;for(S.push.apply(S,E),g.splice(s+1,1),c=0,l=S.length-1;l>=0;l--)c+=S[l].dp;for(o=c/S.length,l=S.length-1;l>=0;l--)S[l].dp-=o;i=!1}else s++}g.forEach(A)}for(s=g.length-1;s>=0;s--){var P=g[s];for(l=P.length-1;l>=0;l--){var O=P[l],I=O.datum;I.offset=O.dp,I.del=O.del}}}(Xt,Zt,c,Wt.commonLabelBoundingBox),z(Xt,Zt,c._invScaleX,c._invScaleY)),s&&s.tagName){var Jt=g.getComponentMethod(\"annotations\",\"hasClickToShow\")(t,Ot);f(n.select(s),Jt?\"pointer\":\"\")}s&&!a&&function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,Pt)&&(Pt&&t.emit(\"plotly_unhover\",{event:e,points:Pt}),t.emit(\"plotly_hover\",{event:e,points:t._hoverdata,xaxes:_,yaxes:w,xvals:q,yvals:G}))}(t,e,r,a,s)}))},e.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var i=e.gd,a=U(i),o=V(i),s=O(t.map((function(t){var r=t._x0||t.x0||t.x||0,n=t._x1||t.x1||t.x||0,s=t._y0||t.y0||t.y||0,l=t._y1||t.y1||t.y||0,u=t.eventData;if(u){var c=Math.min(r,n),f=Math.max(r,n),h=Math.min(s,l),d=Math.max(s,l),v=t.trace;if(g.traceIs(v,\"gl3d\")){var y=i._fullLayout[v.scene]._scene.container,m=y.offsetLeft,x=y.offsetTop;c+=m,f+=m,h+=x,d+=x}u.bbox={x0:c+o,x1:f+o,y0:h+a,y1:d+a},e.inOut_bbox&&e.inOut_bbox.push(u.bbox)}else u=!1;return{color:t.color||p.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\"\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,hovertemplateLabels:t.hovertemplateLabels||!1,eventData:u}})),{gd:i,hovermode:\"closest\",rotateLabels:!1,bgColor:e.bgColor||p.background,container:n.select(e.container),outerContainer:e.outerContainer||e.container}).hoverLabels,l=0,u=0;return s.sort((function(t,e){return t.y0-e.y0})).each((function(t,r){var n=t.y0-t.by/2;t.offset=n-5<l?l-n+5:0,l=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)})).each((function(t){t.offset-=u})),z(s,!1,i._fullLayout._invScaleX,i._fullLayout._invScaleY),r?s:s.node()};var P=/<extra>([\\s\\S]*)<\\/extra>/;function O(t,e){var r=e.gd,i=r._fullLayout,a=e.hovermode,u=e.rotateLabels,f=e.bgColor,d=e.container,v=e.outerContainer,w=e.commonLabelOpts||{};if(0===t.length)return[[]];var T=e.fontFamily||m.HOVERFONT,k=e.fontSize||m.HOVERFONTSIZE,A=t[0],E=A.xa,L=A.ya,P=a.charAt(0),O=P+\"Label\",D=A[O];if(void 0===D&&\"multicategory\"===E.type)for(var z=0;z<t.length&&void 0===(D=t[z][O]);z++);var R=H(r,v),F=R.top,B=R.width,N=R.height,j=void 0!==D&&A.distance<=e.hoverdistance&&(\"x\"===a||\"y\"===a);if(j){var U,V,q=!0;for(U=0;U<t.length;U++)if(q&&void 0===t[U].zLabel&&(q=!1),V=t[U].hoverinfo||t[U].trace.hoverinfo){var G=Array.isArray(V)?V:V.split(\"+\");if(-1===G.indexOf(\"all\")&&-1===G.indexOf(a)){j=!1;break}}q&&(j=!1)}var Z=d.selectAll(\"g.axistext\").data(j?[0]:[]);Z.enter().append(\"g\").classed(\"axistext\",!0),Z.exit().remove();var Y={minX:0,maxX:0,minY:0,maxY:0};if(Z.each((function(){var t=n.select(this),e=o.ensureSingle(t,\"path\",\"\",(function(t){t.style({\"stroke-width\":\"1px\"})})),l=o.ensureSingle(t,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),u=w.bgcolor||p.defaultLine,f=w.bordercolor||p.contrast(u),d=p.contrast(u),v={family:w.font.family||T,size:w.font.size||k,color:w.font.color||d};e.style({fill:u,stroke:f}),l.text(D).call(h.font,v).call(c.positionText,0,0).call(c.convertToTspans,r),t.attr(\"transform\",\"\");var g,y,m=H(r,l.node());if(\"x\"===a){var x=\"top\"===E.side?\"-\":\"\";l.attr(\"text-anchor\",\"middle\").call(c.positionText,0,\"top\"===E.side?F-m.bottom-M-S:F-m.top+M+S),g=E._offset+(A.x0+A.x1)/2,y=L._offset+(\"top\"===E.side?0:L._length);var b=m.width/2+S;g<b?(g=b,e.attr(\"d\",\"M-\"+(b-M)+\",0L-\"+(b-2*M)+\",\"+x+M+\"H\"+b+\"v\"+x+(2*S+m.height)+\"H-\"+b+\"V\"+x+M+\"Z\")):g>i.width-b?(g=i.width-b,e.attr(\"d\",\"M\"+(b-M)+\",0L\"+b+\",\"+x+M+\"v\"+x+(2*S+m.height)+\"H-\"+b+\"V\"+x+M+\"H\"+(b-2*M)+\"Z\")):e.attr(\"d\",\"M0,0L\"+M+\",\"+x+M+\"H\"+b+\"v\"+x+(2*S+m.height)+\"H-\"+b+\"V\"+x+M+\"H-\"+M+\"Z\"),Y.minX=g-b,Y.maxX=g+b,\"top\"===E.side?(Y.minY=y-(2*S+m.height),Y.maxY=y-S):(Y.minY=y+S,Y.maxY=y+(2*S+m.height))}else{var _,C,P;\"right\"===L.side?(_=\"start\",C=1,P=\"\",g=E._offset+E._length):(_=\"end\",C=-1,P=\"-\",g=E._offset),y=L._offset+(A.y0+A.y1)/2,l.attr(\"text-anchor\",_),e.attr(\"d\",\"M0,0L\"+P+M+\",\"+M+\"V\"+(S+m.height/2)+\"h\"+P+(2*S+m.width)+\"V-\"+(S+m.height/2)+\"H\"+P+M+\"V-\"+M+\"Z\"),Y.minY=y-(S+m.height/2),Y.maxY=y+(S+m.height/2),\"right\"===L.side?(Y.minX=g+M,Y.maxX=g+M+(2*S+m.width)):(Y.minX=g-M-(2*S+m.width),Y.maxX=g-M);var O,I=m.height/2,z=F-m.top-I,R=\"clip\"+i._uid+\"commonlabel\"+L._id;if(g<m.width+2*S+M){O=\"M-\"+(M+S)+\"-\"+I+\"h-\"+(m.width-S)+\"V\"+I+\"h\"+(m.width-S)+\"Z\";var B=m.width-g+S;c.positionText(l,B,z),\"end\"===_&&l.selectAll(\"tspan\").each((function(){var t=n.select(this),e=h.tester.append(\"text\").text(t.text()).call(h.font,v),i=H(r,e.node());Math.round(i.width)<Math.round(m.width)&&t.attr(\"x\",B-i.width),e.remove()}))}else c.positionText(l,C*(S+M),z),O=null;var N=i._topclips.selectAll(\"#\"+R).data(O?[0]:[]);N.enter().append(\"clipPath\").attr(\"id\",R).append(\"path\"),N.exit().remove(),N.select(\"path\").attr(\"d\",O),h.setClipUrl(l,O?R:null,r)}t.attr(\"transform\",s(g,y))})),y.isUnifiedHover(a)){d.selectAll(\"g.hovertext\").remove();var W=t.filter((function(t){return\"none\"!==t.hoverinfo}));if(0===W.length)return[];var X=i.hoverlabel,J=X.font,K={showlegend:!0,legend:{title:{text:D,font:J},font:J,bgcolor:X.bgcolor,bordercolor:X.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:i.legend?i.legend.traceorder:void 0,orientation:\"v\"}},$={font:J};x(K,$,r._fullData);var Q=$.legend;Q.entries=[];for(var tt=0;tt<W.length;tt++){var et=W[tt];if(\"none\"!==et.hoverinfo){var rt=I(et,!0,a,i,D),nt=rt[0],it=rt[1];et.name=it,et.text=\"\"!==it?it+\" : \"+nt:nt;var at=et.cd[et.index];at&&(at.mc&&(et.mc=at.mc),at.mcc&&(et.mc=at.mcc),at.mlc&&(et.mlc=at.mlc),at.mlcc&&(et.mlc=at.mlcc),at.mlw&&(et.mlw=at.mlw),at.mrc&&(et.mrc=at.mrc),at.dir&&(et.dir=at.dir)),et._distinct=!0,Q.entries.push([et])}}Q.entries.sort((function(t,e){return t[0].trace.index-e[0].trace.index})),Q.layer=d,Q._inHover=!0,Q._groupTitleFont=X.grouptitlefont,b(r,Q);var ot,st,lt,ut,ct=d.select(\"g.legend\"),ft=H(r,ct.node()),ht=ft.width+2*S,pt=ft.height+2*S,dt=W[0],vt=(dt.x0+dt.x1)/2,gt=(dt.y0+dt.y1)/2,yt=!(g.traceIs(dt.trace,\"bar-like\")||g.traceIs(dt.trace,\"box-violin\"));\"y\"===P?yt?(st=gt-S,ot=gt+S):(st=Math.min.apply(null,W.map((function(t){return Math.min(t.y0,t.y1)}))),ot=Math.max.apply(null,W.map((function(t){return Math.max(t.y0,t.y1)})))):st=ot=o.mean(W.map((function(t){return(t.y0+t.y1)/2})))-pt/2,\"x\"===P?yt?(lt=vt+S,ut=vt-S):(lt=Math.max.apply(null,W.map((function(t){return Math.max(t.x0,t.x1)}))),ut=Math.min.apply(null,W.map((function(t){return Math.min(t.x0,t.x1)})))):lt=ut=o.mean(W.map((function(t){return(t.x0+t.x1)/2})))-ht/2;var mt,xt,bt=E._offset,_t=L._offset;return ut+=bt-ht,st+=_t-pt,mt=(lt+=bt)+ht<B&&lt>=0?lt:ut+ht<B&&ut>=0?ut:bt+ht<B?bt:lt-vt<vt-ut+ht?B-ht:0,mt+=S,xt=(ot+=_t)+pt<N&&ot>=0?ot:st+pt<N&&st>=0?st:_t+pt<N?_t:ot-gt<gt-st+pt?N-pt:0,xt+=S,ct.attr(\"transform\",s(mt-1,xt-1)),ct}var wt=d.selectAll(\"g.hovertext\").data(t,(function(t){return C(t)}));return wt.enter().append(\"g\").classed(\"hovertext\",!0).each((function(){var t=n.select(this);t.append(\"rect\").call(p.fill,p.addOpacity(f,.8)),t.append(\"text\").classed(\"name\",!0),t.append(\"path\").style(\"stroke-width\",\"1px\"),t.append(\"text\").classed(\"nums\",!0).call(h.font,T,k)})),wt.exit().remove(),wt.each((function(t){var e=n.select(this).attr(\"transform\",\"\"),o=t.color;Array.isArray(o)&&(o=o[t.eventData[0].pointNumber]);var d=t.bgcolor||o,v=p.combine(p.opacity(d)?d:p.defaultLine,f),g=p.combine(p.opacity(o)?o:p.defaultLine,f),y=t.borderColor||p.contrast(v),m=I(t,j,a,i,D,e),x=m[0],b=m[1],w=e.select(\"text.nums\").call(h.font,t.fontFamily||T,t.fontSize||k,t.fontColor||y).text(x).attr(\"data-notex\",1).call(c.positionText,0,0).call(c.convertToTspans,r),A=e.select(\"text.name\"),E=0,L=0;if(b&&b!==x){A.call(h.font,t.fontFamily||T,t.fontSize||k,g).text(b).attr(\"data-notex\",1).call(c.positionText,0,0).call(c.convertToTspans,r);var C=H(r,A.node());E=C.width+2*S,L=C.height+2*S}else A.remove(),e.select(\"rect\").remove();e.select(\"path\").style({fill:v,stroke:y});var P=t.xa._offset+(t.x0+t.x1)/2,O=t.ya._offset+(t.y0+t.y1)/2,z=Math.abs(t.x1-t.x0),R=Math.abs(t.y1-t.y0),U=H(r,w.node()),V=U.width/i._invScaleX,q=U.height/i._invScaleY;t.ty0=(F-U.top)/i._invScaleY,t.bx=V+2*S,t.by=Math.max(q+2*S,L),t.anchor=\"start\",t.txwidth=V,t.tx2width=E,t.offset=0;var G,Z,Y=(V+M+S+E)*i._invScaleX;if(u)t.pos=P,G=O+R/2+Y<=N,Z=O-R/2-Y>=0,\"top\"!==t.idealAlign&&G||!Z?G?(O+=R/2,t.anchor=\"start\"):t.anchor=\"middle\":(O-=R/2,t.anchor=\"end\"),t.crossPos=O;else{if(t.pos=O,G=P+z/2+Y<=B,Z=P-z/2-Y>=0,\"left\"!==t.idealAlign&&G||!Z)if(G)P+=z/2,t.anchor=\"start\";else{t.anchor=\"middle\";var W=Y/2,X=P+W-B,J=P-W;X>0&&(P-=X),J<0&&(P+=-J)}else P-=z/2,t.anchor=\"end\";t.crossPos=P}w.attr(\"text-anchor\",t.anchor),E&&A.attr(\"text-anchor\",t.anchor),e.attr(\"transform\",s(P,O)+(u?l(_):\"\"))})),{hoverLabels:wt,commonLabelBoundingBox:Y}}function I(t,e,r,n,i,a){var s=\"\",l=\"\";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=N(t.name,t.nameLength));var u=r.charAt(0),c=\"x\"===u?\"y\":\"x\";void 0!==t.zLabel?(void 0!==t.xLabel&&(l+=\"x: \"+t.xLabel+\"<br>\"),void 0!==t.yLabel&&(l+=\"y: \"+t.yLabel+\"<br>\"),\"choropleth\"!==t.trace.type&&\"choroplethmapbox\"!==t.trace.type&&(l+=(l?\"z: \":\"\")+t.zLabel)):e&&t[u+\"Label\"]===i?l=t[c+\"Label\"]||\"\":void 0===t.xLabel?void 0!==t.yLabel&&\"scattercarpet\"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:\"(\"+t.xLabel+\", \"+t.yLabel+\")\",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?\"<br>\":\"\")+t.text),void 0!==t.extraText&&(l+=(l?\"<br>\":\"\")+t.extraText),a&&\"\"===l&&!t.hovertemplate&&(\"\"===s&&a.remove(),l=s);var f=t.hovertemplate||!1;if(f){var h=t.hovertemplateLabels||t;t[u+\"Label\"]!==i&&(h[u+\"other\"]=h[u+\"Val\"],h[u+\"otherLabel\"]=h[u+\"Label\"]),l=(l=o.hovertemplateString(f,h,n._d3locale,t.eventData[0]||{},t.trace._meta)).replace(P,(function(e,r){return s=N(r,t.nameLength),\"\"}))}return[l,s]}function D(t,e){var r=0,n=t.offset;return e&&(n*=-A,r=t.offset*k),{x:r,y:n}}function z(t,e,r,i){var a=function(t){return t*r},o=function(t){return t*i};t.each((function(t){var r=n.select(this);if(t.del)return r.remove();var i,s,l,u,f=r.select(\"text.nums\"),p=t.anchor,d=\"end\"===p?-1:1,v=(u=(l=(s={start:1,end:-1,middle:0}[(i=t).anchor])*(M+S))+s*(i.txwidth+S),\"middle\"===i.anchor&&(l-=i.tx2width/2,u+=i.txwidth/2+S),{alignShift:s,textShiftX:l,text2ShiftX:u}),g=D(t,e),y=g.x,m=g.y,x=\"middle\"===p;r.select(\"path\").attr(\"d\",x?\"M-\"+a(t.bx/2+t.tx2width/2)+\",\"+o(m-t.by/2)+\"h\"+a(t.bx)+\"v\"+o(t.by)+\"h-\"+a(t.bx)+\"Z\":\"M0,0L\"+a(d*M+y)+\",\"+o(M+m)+\"v\"+o(t.by/2-M)+\"h\"+a(d*t.bx)+\"v-\"+o(t.by)+\"H\"+a(d*M+y)+\"V\"+o(m-M)+\"Z\");var b=y+v.textShiftX,_=m+t.ty0-t.by/2+S,w=t.textAlign||\"auto\";\"auto\"!==w&&(\"left\"===w&&\"start\"!==p?(f.attr(\"text-anchor\",\"start\"),b=x?-t.bx/2-t.tx2width/2+S:-t.bx-S):\"right\"===w&&\"end\"!==p&&(f.attr(\"text-anchor\",\"end\"),b=x?t.bx/2-t.tx2width/2-S:t.bx+S)),f.call(c.positionText,a(b),o(_)),t.tx2width&&(r.select(\"text.name\").call(c.positionText,a(v.text2ShiftX+v.alignShift*S+y),o(m+t.ty0-t.by/2+S)),r.select(\"rect\").call(h.setRect,a(v.text2ShiftX+(v.alignShift-1)*t.tx2width/2+y),o(m-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function R(t,e){var r=t.index,n=t.trace||{},a=t.cd[0],s=t.cd[r]||{};function l(t){return t||i(t)&&0===t}var u=Array.isArray(r)?function(t,e){var i=o.castOption(a,r,t);return l(i)?i:o.extractOption({},n,\"\",e)}:function(t,e){return o.extractOption(s,n,t,e)};function c(e,r,n){var i=u(r,n);l(i)&&(t[e]=i)}if(c(\"hoverinfo\",\"hi\",\"hoverinfo\"),c(\"bgcolor\",\"hbg\",\"hoverlabel.bgcolor\"),c(\"borderColor\",\"hbc\",\"hoverlabel.bordercolor\"),c(\"fontFamily\",\"htf\",\"hoverlabel.font.family\"),c(\"fontSize\",\"hts\",\"hoverlabel.font.size\"),c(\"fontColor\",\"htc\",\"hoverlabel.font.color\"),c(\"nameLength\",\"hnl\",\"hoverlabel.namelength\"),c(\"textAlign\",\"hta\",\"hoverlabel.align\"),t.posref=\"y\"===e||\"closest\"===e&&\"h\"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel=\"xLabel\"in t?t.xLabel:v.hoverLabelText(t.xa,t.xLabelVal,n.xhoverformat),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel=\"yLabel\"in t?t.yLabel:v.hoverLabelText(t.ya,t.yLabelVal,n.yhoverformat),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||\"log\"===t.xa.type&&t.xerr<=0)){var f=v.tickText(t.xa,t.xa.c2l(t.xerr),\"hover\").text;void 0!==t.xerrneg?t.xLabel+=\" +\"+f+\" / -\"+v.tickText(t.xa,t.xa.c2l(t.xerrneg),\"hover\").text:t.xLabel+=\" ± \"+f,\"x\"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||\"log\"===t.ya.type&&t.yerr<=0)){var h=v.tickText(t.ya,t.ya.c2l(t.yerr),\"hover\").text;void 0!==t.yerrneg?t.yLabel+=\" +\"+h+\" / -\"+v.tickText(t.ya,t.ya.c2l(t.yerrneg),\"hover\").text:t.yLabel+=\" ± \"+h,\"y\"===e&&(t.distance+=1)}var p=t.hoverinfo||t.trace.hoverinfo;return p&&\"all\"!==p&&(-1===(p=Array.isArray(p)?p:p.split(\"+\")).indexOf(\"x\")&&(t.xLabel=void 0),-1===p.indexOf(\"y\")&&(t.yLabel=void 0),-1===p.indexOf(\"z\")&&(t.zLabel=void 0),-1===p.indexOf(\"text\")&&(t.text=void 0),-1===p.indexOf(\"name\")&&(t.name=void 0)),t}function F(t,e,r){var n,i,o=r.container,s=r.fullLayout,l=s._size,u=r.event,c=!!e.hLinePoint,f=!!e.vLinePoint;if(o.selectAll(\".spikeline\").remove(),f||c){var d=p.combine(s.plot_bgcolor,s.paper_bgcolor);if(c){var g,y,m=e.hLinePoint;n=m&&m.xa,\"cursor\"===(i=m&&m.ya).spikesnap?(g=u.pointerX,y=u.pointerY):(g=n._offset+m.x,y=i._offset+m.y);var x,b,_=a.readability(m.color,d)<1.5?p.contrast(d):m.color,w=i.spikemode,T=i.spikethickness,k=i.spikecolor||_,A=v.getPxPosition(t,i);if(-1!==w.indexOf(\"toaxis\")||-1!==w.indexOf(\"across\")){if(-1!==w.indexOf(\"toaxis\")&&(x=A,b=g),-1!==w.indexOf(\"across\")){var M=i._counterDomainMin,S=i._counterDomainMax;\"free\"===i.anchor&&(M=Math.min(M,i.position),S=Math.max(S,i.position)),x=l.l+M*l.w,b=l.l+S*l.w}o.insert(\"line\",\":first-child\").attr({x1:x,x2:b,y1:y,y2:y,\"stroke-width\":T,stroke:k,\"stroke-dasharray\":h.dashStyle(i.spikedash,T)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:x,x2:b,y1:y,y2:y,\"stroke-width\":T+2,stroke:d}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==w.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:A+(\"right\"!==i.side?T:-T),cy:y,r:T,fill:k}).classed(\"spikeline\",!0)}if(f){var E,L,C=e.vLinePoint;n=C&&C.xa,i=C&&C.ya,\"cursor\"===n.spikesnap?(E=u.pointerX,L=u.pointerY):(E=n._offset+C.x,L=i._offset+C.y);var P,O,I=a.readability(C.color,d)<1.5?p.contrast(d):C.color,D=n.spikemode,z=n.spikethickness,R=n.spikecolor||I,F=v.getPxPosition(t,n);if(-1!==D.indexOf(\"toaxis\")||-1!==D.indexOf(\"across\")){if(-1!==D.indexOf(\"toaxis\")&&(P=F,O=L),-1!==D.indexOf(\"across\")){var B=n._counterDomainMin,N=n._counterDomainMax;\"free\"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),P=l.t+(1-N)*l.h,O=l.t+(1-B)*l.h}o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:P,y2:O,\"stroke-width\":z,stroke:R,\"stroke-dasharray\":h.dashStyle(n.spikedash,z)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:P,y2:O,\"stroke-width\":z+2,stroke:d}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==D.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:E,cy:F-(\"top\"!==n.side?z:-z),r:z,fill:R}).classed(\"spikeline\",!0)}}}function B(t,e){return!e||e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint}function N(t,e){return c.plainText(t||\"\",{len:e,allowedTags:[\"br\",\"sub\",\"sup\",\"b\",\"i\",\"em\"]})}function j(t,e,r){var n=e[t+\"a\"],i=e[t+\"Val\"],a=e.cd[0];if(\"category\"===n.type||\"multicategory\"===n.type)i=n._categoriesMap[i];else if(\"date\"===n.type){var o=e.trace[t+\"periodalignment\"];if(o){var s=e.cd[e.index],l=s[t+\"Start\"];void 0===l&&(l=s[t]);var u=s[t+\"End\"];void 0===u&&(u=s[t]);var c=u-l;\"end\"===o?i+=c:\"middle\"===o&&(i+=c/2)}i=n.d2c(i)}return a&&a.t&&a.t.posLetter===n._id&&(\"group\"!==r.boxmode&&\"group\"!==r.violinmode||(i+=a.t.dPos)),i}function U(t){return t.offsetTop+t.clientTop}function V(t){return t.offsetLeft+t.clientLeft}function H(t,e){var r=t._fullLayout,n=e.getBoundingClientRect(),i=n.left,a=n.top,s=i+n.width,l=a+n.height,u=o.apply3DTransform(r._invTransform)(i,a),c=o.apply3DTransform(r._invTransform)(s,l),f=u[0],h=u[1],p=c[0],d=c[1];return{x:f,y:h,width:p-f,height:d-h,top:Math.min(h,d),left:Math.min(f,p),right:Math.max(f,p),bottom:Math.max(h,d)}}},38048:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover;t.exports=function(t,e,r,o){o=o||{};var s=e.legend;function l(t){o.font[t]||(o.font[t]=s?e.legend.font[t]:e.font[t])}e&&a(e.hovermode)&&(o.font||(o.font={}),l(\"size\"),l(\"family\"),l(\"color\"),s?(o.bgcolor||(o.bgcolor=i.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r(\"hoverlabel.bgcolor\",o.bgcolor),r(\"hoverlabel.bordercolor\",o.bordercolor),r(\"hoverlabel.namelength\",o.namelength),n.coerceFont(r,\"hoverlabel.font\",o.font),r(\"hoverlabel.align\",o.align)}},98212:function(t,e,r){\"use strict\";var n=r(71828),i=r(528);t.exports=function(t,e){function r(r,a){return void 0!==e[r]?e[r]:n.coerce(t,e,i,r,a)}return r(\"clickmode\"),r(\"hovermode\")}},30211:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(28569),o=r(23469),s=r(528),l=r(88335);t.exports={moduleType:\"component\",name:\"fx\",constants:r(26675),schema:{layout:s},attributes:r(77914),layoutAttributes:s,supplyLayoutGlobalDefaults:r(22774),supplyDefaults:r(54268),supplyLayoutDefaults:r(34938),calc:r(30732),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,\"hoverlabel.\"+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,\"hoverinfo\",(function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:n.select(t);e.selectAll(\"g.hovertext\").remove(),e.selectAll(\".spikeline\").remove()},click:r(75914)}},528:function(t,e,r){\"use strict\";var n=r(26675),i=r(41940),a=i({editType:\"none\"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,t.exports={clickmode:{valType:\"flaglist\",flags:[\"event\",\"select\"],dflt:\"event\",editType:\"plot\",extras:[\"none\"]},dragmode:{valType:\"enumerated\",values:[\"zoom\",\"pan\",\"select\",\"lasso\",\"drawclosedpath\",\"drawopenpath\",\"drawline\",\"drawrect\",\"drawcircle\",\"orbit\",\"turntable\",!1],dflt:\"zoom\",editType:\"modebar\"},hovermode:{valType:\"enumerated\",values:[\"x\",\"y\",\"closest\",!1,\"x unified\",\"y unified\"],dflt:\"closest\",editType:\"modebar\"},hoverdistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},spikedistance:{valType:\"integer\",min:-1,dflt:-1,editType:\"none\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"none\"},bordercolor:{valType:\"color\",editType:\"none\"},font:a,grouptitlefont:i({editType:\"none\"}),align:{valType:\"enumerated\",values:[\"left\",\"right\",\"auto\"],dflt:\"auto\",editType:\"none\"},namelength:{valType:\"integer\",min:-1,dflt:15,editType:\"none\"},editType:\"none\"},selectdirection:{valType:\"enumerated\",values:[\"h\",\"v\",\"d\",\"any\"],dflt:\"any\",editType:\"none\"}}},34938:function(t,e,r){\"use strict\";var n=r(71828),i=r(528),a=r(98212),o=r(38048);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}a(t,e)&&(r(\"hoverdistance\"),r(\"spikedistance\")),\"select\"===r(\"dragmode\")&&r(\"selectdirection\");var s=e._has(\"mapbox\"),l=e._has(\"geo\"),u=e._basePlotModules.length;\"zoom\"===e.dragmode&&((s||l)&&1===u||s&&l&&2===u)&&(e.dragmode=\"pan\"),o(t,e,r),n.coerceFont(r,\"hoverlabel.grouptitlefont\",e.hoverlabel.font)}},22774:function(t,e,r){\"use strict\";var n=r(71828),i=r(38048),a=r(528);t.exports=function(t,e){i(t,e,(function(r,i){return n.coerce(t,e,a,r,i)}))}},83312:function(t,e,r){\"use strict\";var n=r(71828),i=r(30587).counter,a=r(27670).Y,o=r(85555).idRegex,s=r(44467),l={rows:{valType:\"integer\",min:1,editType:\"plot\"},roworder:{valType:\"enumerated\",values:[\"top to bottom\",\"bottom to top\"],dflt:\"top to bottom\",editType:\"plot\"},columns:{valType:\"integer\",min:1,editType:\"plot\"},subplots:{valType:\"info_array\",freeLength:!0,dimensions:2,items:{valType:\"enumerated\",values:[i(\"xy\").toString(),\"\"],editType:\"plot\"},editType:\"plot\"},xaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.x.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},yaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.y.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},pattern:{valType:\"enumerated\",values:[\"independent\",\"coupled\"],dflt:\"coupled\",editType:\"plot\"},xgap:{valType:\"number\",min:0,max:1,editType:\"plot\"},ygap:{valType:\"number\",min:0,max:1,editType:\"plot\"},domain:a({name:\"grid\",editType:\"plot\",noGridCell:!0},{}),xside:{valType:\"enumerated\",values:[\"bottom\",\"bottom plot\",\"top plot\",\"top\"],dflt:\"bottom plot\",editType:\"plot\"},yside:{valType:\"enumerated\",values:[\"left\",\"left plot\",\"right plot\",\"right\"],dflt:\"left plot\",editType:\"plot\"},editType:\"plot\"};function u(t,e,r){var n=e[r+\"axes\"],i=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function c(t,e,r,n,i,a){var o=e(t+\"gap\",r),s=e(\"domain.\"+t);e(t+\"side\",n);for(var l=new Array(i),u=s[0],c=(s[1]-u)/(i-o),f=c*(1-o),h=0;h<i;h++){var p=u+c*h;l[a?i-1-h:h]=[p,p+f]}return l}function f(t,e,r,n,i){var a,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=\"\"}if(Array.isArray(t))for(a=0;a<r;a++)s(a,t[a]);else for(s(0,i),a=1;a<r;a++)s(a,i+(a+1));return o}t.exports={moduleType:\"component\",name:\"grid\",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},i=u(e,r,\"x\"),a=u(e,r,\"y\");if(t.grid||i||a){var o,f,h=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(i),d=Array.isArray(a),v=p&&i!==r.xaxes&&d&&a!==r.yaxes;h?(o=r.subplots.length,f=r.subplots[0].length):(d&&(o=a.length),p&&(f=i.length));var g=s.newContainer(e,\"grid\"),y=k(\"rows\",o),m=k(\"columns\",f);if(y*m>1){h||p||d||\"independent\"===k(\"pattern\")&&(h=!0),g._hasSubplotGrid=h;var x,b,_=\"top to bottom\"===k(\"roworder\"),w=h?.2:.1,T=h?.3:.1;v&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),g._domains={x:c(\"x\",k,w,x,m),y:c(\"y\",k,T,b,y,_)}}else delete e.grid}function k(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,c,h=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,v=r.rows,g=r.columns,y=\"independent\"===r.pattern,m=r._axisMap={};if(d){var x=h.subplots||[];l=r.subplots=new Array(v);var b=1;for(n=0;n<v;n++){var _=l[n]=new Array(g),w=x[n]||[];for(i=0;i<g;i++)if(y?(s=1===b?\"xy\":\"x\"+b+\"y\"+b,b++):s=w[i],_[i]=\"\",-1!==p.cartesian.indexOf(s)){if(c=s.indexOf(\"y\"),a=s.slice(0,c),o=s.slice(c),void 0!==m[a]&&m[a]!==i||void 0!==m[o]&&m[o]!==n)continue;_[i]=s,m[a]=i,m[o]=n}}}else{var T=u(e,h,\"x\"),k=u(e,h,\"y\");r.xaxes=f(T,p.xaxis,g,m,\"x\"),r.yaxes=f(k,p.yaxis,v,m,\"y\")}var A=r._anchors={},M=\"top to bottom\"===r.roworder;for(var S in m){var E,L,C,P=S.charAt(0),O=r[P+\"side\"];if(O.length<8)A[S]=\"free\";else if(\"x\"===P){if(\"t\"===O.charAt(0)===M?(E=0,L=1,C=v):(E=v-1,L=-1,C=-1),d){var I=m[S];for(n=E;n!==C;n+=L)if((s=l[n][I])&&(c=s.indexOf(\"y\"),s.slice(0,c)===S)){A[S]=s.slice(c);break}}else for(n=E;n!==C;n+=L)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){A[S]=o;break}}else if(\"l\"===O.charAt(0)?(E=0,L=1,C=g):(E=g-1,L=-1,C=-1),d){var D=m[S];for(n=E;n!==C;n+=L)if((s=l[D][n])&&(c=s.indexOf(\"y\"),s.slice(c)===S)){A[S]=s.slice(0,c);break}}else for(n=E;n!==C;n+=L)if(a=r.xaxes[n],-1!==p.cartesian.indexOf(a+S)){A[S]=a;break}}}}}},69819:function(t,e,r){\"use strict\";var n=r(85555),i=r(44467).templatedArray;r(24695),t.exports=i(\"image\",{visible:{valType:\"boolean\",dflt:!0,editType:\"arraydraw\"},source:{valType:\"string\",editType:\"arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},sizex:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizey:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizing:{valType:\"enumerated\",values:[\"fill\",\"contain\",\"stretch\"],dflt:\"contain\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},x:{valType:\"any\",dflt:0,editType:\"arraydraw\"},y:{valType:\"any\",dflt:0,editType:\"arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"top\",editType:\"arraydraw\"},xref:{valType:\"enumerated\",values:[\"paper\",n.idRegex.x.toString()],dflt:\"paper\",editType:\"arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",n.idRegex.y.toString()],dflt:\"paper\",editType:\"arraydraw\"},editType:\"arraydraw\"})},75378:function(t,e,r){\"use strict\";var n=r(92770),i=r(58163);t.exports=function(t,e,r,a){e=e||{};var o=\"log\"===r&&\"linear\"===e.type,s=\"linear\"===r&&\"log\"===e.type;if(o||s)for(var l,u,c=t._fullLayout.images,f=e._id.charAt(0),h=0;h<c.length;h++)if(u=\"images[\"+h+\"].\",(l=c[h])[f+\"ref\"]===e._id){var p=l[f],d=l[\"size\"+f],v=null,g=null;if(o){v=i(p,e.range);var y=d/Math.pow(10,v)/2;g=2*Math.log(y+Math.sqrt(1+y*y))/Math.LN10}else g=(v=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(v)?n(g)||(g=null):(v=null,g=null),a(u+f,v),a(u+\"size\"+f,g)}}},81603:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(85501),o=r(69819);function s(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var s=a(\"source\");if(!a(\"visible\",!!s))return e;a(\"layer\"),a(\"xanchor\"),a(\"yanchor\"),a(\"sizex\"),a(\"sizey\"),a(\"sizing\"),a(\"opacity\");for(var l={_fullLayout:r},u=[\"x\",\"y\"],c=0;c<2;c++){var f=u[c],h=i.coerceRef(t,e,l,f,\"paper\",void 0);\"paper\"!==h&&i.getFromId(l,h)._imgIndices.push(e._index),i.coercePosition(e,l,a,h,f,0)}return e}t.exports=function(t,e){a(t,e,{name:\"images\",handleItemDefaults:s})}},80750:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(89298),o=r(41675),s=r(77922);t.exports=function(t){var e,r,l=t._fullLayout,u=[],c={},f=[];for(r=0;r<l.images.length;r++){var h=l.images[r];if(h.visible)if(\"below\"===h.layer&&\"paper\"!==h.xref&&\"paper\"!==h.yref){e=o.ref2id(h.xref)+o.ref2id(h.yref);var p=l._plots[e];if(!p){f.push(h);continue}p.mainplot&&(e=p.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else\"above\"===h.layer?u.push(h):f.push(h)}var d={left:{sizing:\"xMin\",offset:0},center:{sizing:\"xMid\",offset:-.5},right:{sizing:\"xMax\",offset:-1}},v={top:{sizing:\"YMin\",offset:0},middle:{sizing:\"YMid\",offset:-.5},bottom:{sizing:\"YMax\",offset:-1}};function g(e){var r=n.select(this);if(this._imgSrc!==e.source)if(r.attr(\"xmlns\",s.svg),e.source&&\"data:\"===e.source.slice(0,5))r.attr(\"xlink:href\",e.source),this._imgSrc=e.source;else{var i=new Promise(function(t){var n=new Image;function i(){r.remove(),t()}this.img=n,n.setAttribute(\"crossOrigin\",\"anonymous\"),n.onerror=i,n.onload=function(){var e=document.createElement(\"canvas\");e.width=this.width,e.height=this.height,e.getContext(\"2d\",{willReadFrequently:!0}).drawImage(this,0,0);var n=e.toDataURL(\"image/png\");r.attr(\"xlink:href\",n),t()},r.on(\"error\",i),n.src=e.source,this._imgSrc=e.source}.bind(this));t._promises.push(i)}}function y(e){var r,o,s=n.select(this),u=a.getFromId(t,e.xref),c=a.getFromId(t,e.yref),f=\"domain\"===a.getRefType(e.xref),h=\"domain\"===a.getRefType(e.yref),p=l._size;r=void 0!==u?\"string\"==typeof e.xref&&f?u._length*e.sizex:Math.abs(u.l2p(e.sizex)-u.l2p(0)):e.sizex*p.w,o=void 0!==c?\"string\"==typeof e.yref&&h?c._length*e.sizey:Math.abs(c.l2p(e.sizey)-c.l2p(0)):e.sizey*p.h;var g,y,m=r*d[e.xanchor].offset,x=o*v[e.yanchor].offset,b=d[e.xanchor].sizing+v[e.yanchor].sizing;switch(g=void 0!==u?\"string\"==typeof e.xref&&f?u._length*e.x+u._offset:u.r2p(e.x)+u._offset:e.x*p.w+p.l,g+=m,y=void 0!==c?\"string\"==typeof e.yref&&h?c._length*(1-e.y)+c._offset:c.r2p(e.y)+c._offset:p.h-e.y*p.h+p.t,y+=x,e.sizing){case\"fill\":b+=\" slice\";break;case\"stretch\":b=\"none\"}s.attr({x:g,y:y,width:r,height:o,preserveAspectRatio:b,opacity:e.opacity});var _=(u&&\"domain\"!==a.getRefType(e.xref)?u._id:\"\")+(c&&\"domain\"!==a.getRefType(e.yref)?c._id:\"\");i.setClipUrl(s,_?\"clip\"+l._uid+_:null,t)}var m=l._imageLowerLayer.selectAll(\"image\").data(f),x=l._imageUpperLayer.selectAll(\"image\").data(u);m.enter().append(\"image\"),x.enter().append(\"image\"),m.exit().remove(),x.exit().remove(),m.each((function(t){g.bind(this)(t),y.bind(this)(t)})),x.each((function(t){g.bind(this)(t),y.bind(this)(t)}));var b=Object.keys(l._plots);for(r=0;r<b.length;r++){e=b[r];var _=l._plots[e];if(_.imagelayer){var w=_.imagelayer.selectAll(\"image\").data(c[e]||[]);w.enter().append(\"image\"),w.exit().remove(),w.each((function(t){g.bind(this)(t),y.bind(this)(t)}))}}}},68804:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"images\",layoutAttributes:r(69819),supplyLayoutDefaults:r(81603),includeBasePlot:r(76325)(\"images\"),draw:r(80750),convertCoords:r(75378)}},33030:function(t,e,r){\"use strict\";var n=r(41940),i=r(22399);t.exports={_isSubplotObj:!0,visible:{valType:\"boolean\",dflt:!0,editType:\"legend\"},bgcolor:{valType:\"color\",editType:\"legend\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"legend\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"legend\"},font:n({editType:\"legend\"}),grouptitlefont:n({editType:\"legend\"}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"v\",editType:\"legend\"},traceorder:{valType:\"flaglist\",flags:[\"reversed\",\"grouped\"],extras:[\"normal\"],editType:\"legend\"},tracegroupgap:{valType:\"number\",min:0,dflt:10,editType:\"legend\"},entrywidth:{valType:\"number\",min:0,editType:\"legend\"},entrywidthmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\",editType:\"legend\"},itemsizing:{valType:\"enumerated\",values:[\"trace\",\"constant\"],dflt:\"trace\",editType:\"legend\"},itemwidth:{valType:\"number\",min:30,dflt:30,editType:\"legend\"},itemclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggle\",editType:\"legend\"},itemdoubleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggleothers\",editType:\"legend\"},groupclick:{valType:\"enumerated\",values:[\"toggleitem\",\"togglegroup\"],dflt:\"togglegroup\",editType:\"legend\"},x:{valType:\"number\",editType:\"legend\"},xref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"legend\"},y:{valType:\"number\",editType:\"legend\"},yref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"legend\"},uirevision:{valType:\"any\",editType:\"none\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"legend\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"legend\"},font:n({editType:\"legend\"}),side:{valType:\"enumerated\",values:[\"top\",\"left\",\"top left\",\"top center\",\"top right\"],editType:\"legend\"},editType:\"legend\"},editType:\"legend\"}},14928:function(t){\"use strict\";t.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\"#808BA4\",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}},99017:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(44467),o=r(9012),s=r(33030),l=r(10820),u=r(10130);function c(t,e,r,c){var f=e[t]||{},h=a.newContainer(r,t);function p(t,e){return i.coerce(f,h,s,t,e)}var d=i.coerceFont(p,\"font\",r.font);if(p(\"bgcolor\",r.paper_bgcolor),p(\"bordercolor\"),p(\"visible\")){for(var v,g=function(t,e){var r=v._input,n=v;return i.coerce(r,n,o,t,e)},y=r.font||{},m=i.coerceFont(p,\"grouptitlefont\",i.extendFlat({},y,{size:Math.round(1.1*y.size)})),x=0,b=!1,_=\"normal\",w=(r.shapes||[]).filter((function(t){return t.showlegend})),T=c.concat(w).filter((function(e){return t===(e.legend||\"legend\")})),k=0;k<T.length;k++)if((v=T[k]).visible){var A=v._isShape;(v.showlegend||v._dfltShowLegend&&!(v._module&&v._module.attributes&&v._module.attributes.showlegend&&!1===v._module.attributes.showlegend.dflt))&&(x++,v.showlegend&&(b=!0,(!A&&n.traceIs(v,\"pie-like\")||!0===v._input.showlegend)&&x++),i.coerceFont(g,\"legendgrouptitle.font\",m)),(!A&&n.traceIs(v,\"bar\")&&\"stack\"===r.barmode||-1!==[\"tonextx\",\"tonexty\"].indexOf(v.fill))&&(_=u.isGrouped({traceorder:_})?\"grouped+reversed\":\"reversed\"),void 0!==v.legendgroup&&\"\"!==v.legendgroup&&(_=u.isReversed({traceorder:_})?\"reversed+grouped\":\"grouped\")}var M=i.coerce(e,r,l,\"showlegend\",b&&x>(\"legend\"===t?1:0));if(!1===M&&(r[t]=void 0),(!1!==M||f.uirevision)&&(p(\"uirevision\",r.uirevision),!1!==M)){p(\"borderwidth\");var S,E,L,C=\"h\"===p(\"orientation\"),P=\"paper\"===p(\"yref\"),O=\"paper\"===p(\"xref\"),I=\"left\";if(C?(S=0,n.getComponentMethod(\"rangeslider\",\"isVisible\")(e.xaxis)?P?(E=1.1,L=\"bottom\"):(E=1,L=\"top\"):P?(E=-.1,L=\"top\"):(E=0,L=\"bottom\")):(E=1,L=\"auto\",O?S=1.02:(S=1,I=\"right\")),i.coerce(f,h,{x:{valType:\"number\",editType:\"legend\",min:O?-2:0,max:O?3:1,dflt:S}},\"x\"),i.coerce(f,h,{y:{valType:\"number\",editType:\"legend\",min:P?-2:0,max:P?3:1,dflt:E}},\"y\"),p(\"traceorder\",_),u.isGrouped(r[t])&&p(\"tracegroupgap\"),p(\"entrywidth\"),p(\"entrywidthmode\"),p(\"itemsizing\"),p(\"itemwidth\"),p(\"itemclick\"),p(\"itemdoubleclick\"),p(\"groupclick\"),p(\"xanchor\",I),p(\"yanchor\",L),p(\"valign\"),i.noneOrAll(f,h,[\"x\",\"y\"]),p(\"title.text\")){p(\"title.side\",C?\"left\":\"top\");var D=i.extendFlat({},d,{size:i.bigFont(d.size)});i.coerceFont(p,\"title.font\",D)}}}}t.exports=function(t,e,r){var n,a=r.slice(),o=e.shapes;if(o)for(n=0;n<o.length;n++){var s=o[n];if(s.showlegend){var l={_input:s._input,visible:s.visible,showlegend:s.showlegend,legend:s.legend};a.push(l)}}var u=[\"legend\"];for(n=0;n<a.length;n++)i.pushUnique(u,a[n].legend);for(e._legends=[],n=0;n<u.length;n++){var f=u[n];c(f,t,e,a),e[f]&&e[f].visible&&(e[f]._id=f),e._legends.push(f)}}},43969:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(74875),o=r(73972),s=r(11086),l=r(28569),u=r(91424),c=r(7901),f=r(63893),h=r(85167),p=r(14928),d=r(18783),v=d.LINE_SPACING,g=d.FROM_TL,y=d.FROM_BR,m=r(82424),x=r(53630),b=r(10130),_=1,w=/^legend[0-9]*$/;function T(t,e){var r,s,h=e||{},d=t._fullLayout,w=O(h),T=h._inHover;if(T?(s=h.layer,r=\"hover\"):(s=d._infolayer,r=w),s){var S;if(r+=d._uid,t._legendMouseDownTime||(t._legendMouseDownTime=0),T){if(!h.entries)return;S=m(h.entries,h)}else{for(var I=(t.calcdata||[]).slice(),D=d.shapes,z=0;z<D.length;z++){var R=D[z];if(R.showlegend){var F={_isShape:!0,_fullInput:R,index:R._index,name:R.name||R.label.text||\"shape \"+R._index,legend:R.legend,legendgroup:R.legendgroup,legendgrouptitle:R.legendgrouptitle,legendrank:R.legendrank,legendwidth:R.legendwidth,showlegend:R.showlegend,visible:R.visible,opacity:R.opacity,mode:\"line\"===R.type?\"lines\":\"markers\",line:R.line,marker:{line:R.line,color:R.fillcolor,size:12,symbol:\"rect\"===R.type?\"square\":\"circle\"===R.type?\"circle\":\"hexagon2\"}};I.push([{trace:F}])}}S=d.showlegend&&m(I,h,d._legends.length>1)}var B=d.hiddenlabels||[];if(!(T||d.showlegend&&S.length))return s.selectAll(\".\"+w).remove(),d._topdefs.select(\"#\"+r).remove(),a.autoMargin(t,w);var N=i.ensureSingle(s,\"g\",w,(function(t){T||t.attr(\"pointer-events\",\"all\")})),j=i.ensureSingleById(d._topdefs,\"clipPath\",r,(function(t){t.append(\"rect\")})),U=i.ensureSingle(N,\"rect\",\"bg\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));U.call(c.stroke,h.bordercolor).call(c.fill,h.bgcolor).style(\"stroke-width\",h.borderwidth+\"px\");var V,H=i.ensureSingle(N,\"g\",\"scrollbox\"),q=h.title;h._titleWidth=0,h._titleHeight=0,q.text?((V=i.ensureSingle(H,\"text\",w+\"titletext\")).attr(\"text-anchor\",\"start\").call(u.font,q.font).text(q.text),L(V,H,t,h,_)):H.selectAll(\".\"+w+\"titletext\").remove();var G=i.ensureSingle(N,\"rect\",\"scrollbar\",(function(t){t.attr(p.scrollBarEnterAttrs).call(c.fill,p.scrollBarColor)})),Z=H.selectAll(\"g.groups\").data(S);Z.enter().append(\"g\").attr(\"class\",\"groups\"),Z.exit().remove();var Y=Z.selectAll(\"g.traces\").data(i.identity);Y.enter().append(\"g\").attr(\"class\",\"traces\"),Y.exit().remove(),Y.style(\"opacity\",(function(t){var e=t[0].trace;return o.traceIs(e,\"pie-like\")?-1!==B.indexOf(t[0].label)?.5:1:\"legendonly\"===e.visible?.5:1})).each((function(){n.select(this).call(M,t,h)})).call(x,t,h).each((function(){T||n.select(this).call(E,t,w)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,r,i){var a=t._fullLayout,o=O(i);i||(i=a[o]);var s=a._size,l=b.isVertical(i),c=b.isGrouped(i),f=\"fraction\"===i.entrywidthmode,h=i.borderwidth,d=2*h,v=p.itemGap,g=i.itemwidth+2*v,y=2*(h+v),m=P(i),x=i.y<0||0===i.y&&\"top\"===m,_=i.y>1||1===i.y&&\"bottom\"===m,w=i.tracegroupgap,T={};i._maxHeight=Math.max(x||_?a.height/2:s.h,30);var A=0;i._width=0,i._height=0;var M=function(t){var e=0,r=0,n=t.title.side;return n&&(-1!==n.indexOf(\"left\")&&(e=t._titleWidth),-1!==n.indexOf(\"top\")&&(r=t._titleHeight)),[e,r]}(i);if(l)r.each((function(t){var e=t[0].height;u.setTranslate(this,h+M[0],h+M[1]+i._height+e/2+v),i._height+=e,i._width=Math.max(i._width,t[0].width)})),A=g+i._width,i._width+=v+g+d,i._height+=y,c&&(e.each((function(t,e){u.setTranslate(this,0,e*i.tracegroupgap)})),i._height+=(i._lgroupsLength-1)*i.tracegroupgap);else{var S=C(i),E=i.x<0||0===i.x&&\"right\"===S,L=i.x>1||1===i.x&&\"left\"===S,I=_||x,D=a.width/2;i._maxWidth=Math.max(E?I&&\"left\"===S?s.l+s.w:D:L?I&&\"right\"===S?s.r+s.w:D:s.w,2*g);var z=0,R=0;r.each((function(t){var e=k(t,i,g);z=Math.max(z,e),R+=e})),A=null;var F=0;if(c){var B=0,N=0,j=0;e.each((function(){var t=0,e=0;n.select(this).selectAll(\"g.traces\").each((function(r){var n=k(r,i,g),a=r[0].height;u.setTranslate(this,M[0],M[1]+h+v+a/2+e),e+=a,t=Math.max(t,n),T[r[0].trace.legendgroup]=t}));var r=t+v;N>0&&r+h+N>i._maxWidth?(F=Math.max(F,N),N=0,j+=B+w,B=e):B=Math.max(B,e),u.setTranslate(this,N,j),N+=r})),i._width=Math.max(F,N)+h,i._height=j+B+y}else{var U=r.size(),V=R+d+(U-1)*v<i._maxWidth,H=0,q=0,G=0,Z=0;r.each((function(t){var e=t[0].height,r=k(t,i,g),n=V?r:z;f||(n+=v),n+h+q-v>=i._maxWidth&&(F=Math.max(F,Z),q=0,G+=H,i._height+=H,H=0),u.setTranslate(this,M[0]+h+q,M[1]+h+G+e/2+v),Z=q+r+v,q+=n,H=Math.max(H,e)})),V?(i._width=q+d,i._height=H+y):(i._width=Math.max(F,Z)+d,i._height+=H+y)}}i._width=Math.ceil(Math.max(i._width+M[0],i._titleWidth+2*(h+p.titlePad))),i._height=Math.ceil(Math.max(i._height+M[1],i._titleHeight+2*(h+p.itemGap))),i._effHeight=Math.min(i._height,i._maxHeight);var Y=t._context.edits,W=Y.legendText||Y.legendPosition;r.each((function(t){var e=n.select(this).select(\".\"+o+\"toggle\"),r=t[0].height,a=t[0].trace.legendgroup,s=k(t,i,g);c&&\"\"!==a&&(s=T[a]);var h=W?g:A||s;l||f||(h+=v/2),u.setRect(e,0,-r/2,h,r)}))}(t,Z,Y,h)},function(){var e,c,m,x,b=d._size,_=h.borderwidth,k=\"paper\"===h.xref,M=\"paper\"===h.yref;if(q.text&&function(t,e,r){if(\"top center\"===e.title.side||\"top right\"===e.title.side){var n=e.title.font.size*v,i=0,a=t.node(),o=u.bBox(a).width;\"top center\"===e.title.side?i=.5*(e._width-2*r-2*p.titlePad-o):\"top right\"===e.title.side&&(i=e._width-2*r-2*p.titlePad-o),f.positionText(t,r+p.titlePad+i,r+n)}}(V,h,_),!T){var S,E;S=k?b.l+b.w*h.x-g[C(h)]*h._width:d.width*h.x-g[C(h)]*h._width,E=M?b.t+b.h*(1-h.y)-g[P(h)]*h._effHeight:d.height*(1-h.y)-g[P(h)]*h._effHeight;var L=function(t,e,r,n){var i=t._fullLayout,o=i[e],s=C(o),l=P(o),u=\"paper\"===o.xref,c=\"paper\"===o.yref;t._fullLayout._reservedMargin[e]={};var f=o.y<.5?\"b\":\"t\",h=o.x<.5?\"l\":\"r\",p={r:i.width-r,l:r+o._width,b:i.height-n,t:n+o._effHeight};if(u&&c)return a.autoMargin(t,e,{x:o.x,y:o.y,l:o._width*g[s],r:o._width*y[s],b:o._effHeight*y[l],t:o._effHeight*g[l]});u?t._fullLayout._reservedMargin[e][f]=p[f]:c||\"v\"===o.orientation?t._fullLayout._reservedMargin[e][h]=p[h]:t._fullLayout._reservedMargin[e][f]=p[f]}(t,w,S,E);if(L)return;if(d.margin.autoexpand){var O=S,I=E;S=k?i.constrain(S,0,d.width-h._width):O,E=M?i.constrain(E,0,d.height-h._effHeight):I,S!==O&&i.log(\"Constrain \"+w+\".x to make legend fit inside graph\"),E!==I&&i.log(\"Constrain \"+w+\".y to make legend fit inside graph\")}u.setTranslate(N,S,E)}if(G.on(\".drag\",null),N.on(\"wheel\",null),T||h._height<=h._maxHeight||t._context.staticPlot){var D=h._effHeight;T&&(D=h._height),U.attr({width:h._width-_,height:D-_,x:_/2,y:_/2}),u.setTranslate(H,0,0),j.select(\"rect\").attr({width:h._width-2*_,height:D-2*_,x:_,y:_}),u.setClipUrl(H,r,t),u.setRect(G,0,0,0,0),delete h._scrollY}else{var z,R,F,B=Math.max(p.scrollBarMinHeight,h._effHeight*h._effHeight/h._height),Z=h._effHeight-B-2*p.scrollBarMargin,Y=h._height-h._effHeight,W=Z/Y,X=Math.min(h._scrollY||0,Y);U.attr({width:h._width-2*_+p.scrollBarWidth+p.scrollBarMargin,height:h._effHeight-_,x:_/2,y:_/2}),j.select(\"rect\").attr({width:h._width-2*_+p.scrollBarWidth+p.scrollBarMargin,height:h._effHeight-2*_,x:_,y:_+X}),u.setClipUrl(H,r,t),$(X,B,W),N.on(\"wheel\",(function(){$(X=i.constrain(h._scrollY+n.event.deltaY/Z*Y,0,Y),B,W),0!==X&&X!==Y&&n.event.preventDefault()}));var J=n.behavior.drag().on(\"dragstart\",(function(){var t=n.event.sourceEvent;z=\"touchstart\"===t.type?t.changedTouches[0].clientY:t.clientY,F=X})).on(\"drag\",(function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(R=\"touchmove\"===t.type?t.changedTouches[0].clientY:t.clientY,X=function(t,e,r){var n=(r-e)/W+t;return i.constrain(n,0,Y)}(F,z,R),$(X,B,W))}));G.call(J);var K=n.behavior.drag().on(\"dragstart\",(function(){var t=n.event.sourceEvent;\"touchstart\"===t.type&&(z=t.changedTouches[0].clientY,F=X)})).on(\"drag\",(function(){var t=n.event.sourceEvent;\"touchmove\"===t.type&&(R=t.changedTouches[0].clientY,X=function(t,e,r){var n=(e-r)/W+t;return i.constrain(n,0,Y)}(F,z,R),$(X,B,W))}));H.call(K)}function $(e,r,n){h._scrollY=t._fullLayout[w]._scrollY=e,u.setTranslate(H,0,-e),u.setRect(G,h._width,p.scrollBarMargin+e*n,p.scrollBarWidth,r),j.select(\"rect\").attr(\"y\",_+e)}t._context.edits.legendPosition&&(N.classed(\"cursor-move\",!0),l.init({element:N.node(),gd:t,prepFn:function(){var t=u.getTranslate(N);m=t.x,x=t.y},moveFn:function(t,r){var n=m+t,i=x+r;u.setTranslate(N,n,i),e=l.align(n,h._width,b.l,b.l+b.w,h.xanchor),c=l.align(i+h._height,-h._height,b.t+b.h,b.t,h.yanchor)},doneFn:function(){if(void 0!==e&&void 0!==c){var r={};r[w+\".x\"]=e,r[w+\".y\"]=c,o.call(\"_guiRelayout\",t,r)}},clickFn:function(e,r){var n=s.selectAll(\"g.traces\").filter((function(){var t=this.getBoundingClientRect();return r.clientX>=t.left&&r.clientX<=t.right&&r.clientY>=t.top&&r.clientY<=t.bottom}));n.size()>0&&A(t,N,n,e,r)}}))}],t)}}function k(t,e,r){var n=t[0],i=n.width,a=e.entrywidthmode,o=n.trace.legendwidth||e.entrywidth;return\"fraction\"===a?e._maxWidth*o:r+(o||i)}function A(t,e,r,n,i){var a=r.data()[0][0].trace,l={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};a._group&&(l.group=a._group),o.traceIs(a,\"pie-like\")&&(l.label=r.datum()[0].label);var u=s.triggerHandler(t,\"plotly_legendclick\",l);if(1===n){if(!1===u)return;e._clickTimeout=setTimeout((function(){t._fullLayout&&h(r,t,n)}),t._context.doubleClickDelay)}else 2===n&&(e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,\"plotly_legenddoubleclick\",l)&&!1!==u&&h(r,t,n))}function M(t,e,r){var n,a,s=O(r),l=t.data()[0][0],c=l.trace,h=o.traceIs(c,\"pie-like\"),d=!r._inHover&&e._context.edits.legendText&&!h,v=r._maxNameLength;l.groupTitle?(n=l.groupTitle.text,a=l.groupTitle.font):(a=r.font,r.entries?n=l.text:(n=h?l.label:c.name,c._meta&&(n=i.templateString(n,c._meta))));var g=i.ensureSingle(t,\"text\",s+\"text\");g.attr(\"text-anchor\",\"start\").call(u.font,a).text(d?S(n,v):n);var y=r.itemwidth+2*p.itemGap;f.positionText(g,y,0),d?g.call(f.makeEditable,{gd:e,text:n}).call(L,t,e,r).on(\"edit\",(function(n){this.text(S(n,v)).call(L,t,e,r);var a=l.trace._fullInput||{},s={};if(o.hasTransform(a,\"groupby\")){var u=o.getTransformIndices(a,\"groupby\"),f=u[u.length-1],h=i.keyedContainer(a,\"transforms[\"+f+\"].styles\",\"target\",\"value.name\");h.set(l.trace._group,n),s=h.constructUpdate()}else s.name=n;return a._isShape?o.call(\"_guiRelayout\",e,\"shapes[\"+c.index+\"].name\",s.name):o.call(\"_guiRestyle\",e,s,c.index)})):L(g,t,e,r)}function S(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||\"\").length;n>0;n--)t+=\" \";return t}function E(t,e,r){var a,o=e._context.doubleClickDelay,s=1,l=i.ensureSingle(t,\"rect\",r+\"toggle\",(function(t){e._context.staticPlot||t.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),t.call(c.fill,\"rgba(0,0,0,0)\")}));e._context.staticPlot||(l.on(\"mousedown\",(function(){(a=(new Date).getTime())-e._legendMouseDownTime<o?s+=1:(s=1,e._legendMouseDownTime=a)})),l.on(\"mouseup\",(function(){if(!e._dragged&&!e._editing){var i=e._fullLayout[r];(new Date).getTime()-e._legendMouseDownTime>o&&(s=Math.max(s-1,1)),A(e,i,t,s,n.event)}})))}function L(t,e,r,n,i){n._inHover&&t.attr(\"data-notex\",!0),f.convertToTspans(t,r,(function(){!function(t,e,r,n){var i=t.data()[0][0];if(r._inHover||!i||i.trace.showlegend){var a=t.select(\"g[class*=math-group]\"),o=a.node(),s=O(r);r||(r=e._fullLayout[s]);var l,c,h=r.borderwidth,d=(n===_?r.title.font:i.groupTitle?i.groupTitle.font:r.font).size*v;if(o){var g=u.bBox(o);l=g.height,c=g.width,n===_?u.setTranslate(a,h,h+.75*l):u.setTranslate(a,0,.25*l)}else{var y=\".\"+s+(n===_?\"title\":\"\")+\"text\",m=t.select(y),x=f.lineCount(m),b=m.node();if(l=d*x,c=b?u.bBox(b).width:0,n===_)\"left\"===r.title.side&&(c+=2*p.itemGap),f.positionText(m,h+p.titlePad,h+d);else{var w=2*p.itemGap+r.itemwidth;i.groupTitle&&(w=p.itemGap,c-=r.itemwidth),f.positionText(m,w,-d*((x-1)/2-.3))}}n===_?(r._titleWidth=c,r._titleHeight=l):(i.lineHeight=d,i.height=Math.max(l,16)+3,i.width=c)}else t.remove()}(e,r,n,i)}))}function C(t){return i.isRightAnchor(t)?\"right\":i.isCenterAnchor(t)?\"center\":\"left\"}function P(t){return i.isBottomAnchor(t)?\"bottom\":i.isMiddleAnchor(t)?\"middle\":\"top\"}function O(t){return t._id||\"legend\"}t.exports=function(t,e){if(e)T(t,e);else{var r=t._fullLayout,i=r._legends;r._infolayer.selectAll('[class^=\"legend\"]').each((function(){var t=n.select(this),e=t.attr(\"class\").split(\" \")[0];e.match(w)&&-1===i.indexOf(e)&&t.remove()}));for(var a=0;a<i.length;a++){var o=i[a];T(t,t._fullLayout[o])}}}},82424:function(t,e,r){\"use strict\";var n=r(73972),i=r(10130);t.exports=function(t,e,r){var a,o,s=e._inHover,l=i.isGrouped(e),u=i.isReversed(e),c={},f=[],h=!1,p={},d=0,v=0;function g(t,n,a){if(!1!==e.visible&&(!r||t===e._id))if(\"\"!==n&&i.isGrouped(e))-1===f.indexOf(n)?(f.push(n),h=!0,c[n]=[a]):c[n].push(a);else{var o=\"~~i\"+d;f.push(o),c[o]=[a],d++}}for(a=0;a<t.length;a++){var y=t[a],m=y[0],x=m.trace,b=x.legend,_=x.legendgroup;if(s||x.visible&&x.showlegend)if(n.traceIs(x,\"pie-like\"))for(p[_]||(p[_]={}),o=0;o<y.length;o++){var w=y[o].label;p[_][w]||(g(b,_,{label:w,color:y[o].color,i:y[o].i,trace:x,pts:y[o].pts}),p[_][w]=!0,v=Math.max(v,(w||\"\").length))}else g(b,_,m),v=Math.max(v,(x.name||\"\").length)}if(!f.length)return[];var T=!h||!l,k=[];for(a=0;a<f.length;a++){var A=c[f[a]];T?k.push(A[0]):k.push(A)}for(T&&(k=[k]),a=0;a<k.length;a++){var M=1/0;for(o=0;o<k[a].length;o++){var S=k[a][o].trace.legendrank;M>S&&(M=S)}k[a][0]._groupMinRank=M,k[a][0]._preGroupSort=a}var E=function(t,e){return t.trace.legendrank-e.trace.legendrank||t._preSort-e._preSort};for(k.forEach((function(t,e){t[0]._preGroupSort=e})),k.sort((function(t,e){return t[0]._groupMinRank-e[0]._groupMinRank||t[0]._preGroupSort-e[0]._preGroupSort})),a=0;a<k.length;a++){k[a].forEach((function(t,e){t._preSort=e})),k[a].sort(E);var L=k[a][0].trace,C=null;for(o=0;o<k[a].length;o++){var P=k[a][o].trace.legendgrouptitle;if(P&&P.text){C=P,s&&(P.font=e._groupTitleFont);break}}if(u&&k[a].reverse(),C){var O=!1;for(o=0;o<k[a].length;o++)if(n.traceIs(k[a][o].trace,\"pie-like\")){O=!0;break}k[a].unshift({i:-1,groupTitle:C,noClick:O,trace:{showlegend:L.showlegend,legendgroup:L.legendgroup,visible:\"toggleitem\"===e.groupclick||L.visible}})}for(o=0;o<k[a].length;o++)k[a][o]=[k[a][o]]}return e._lgroupsLength=k.length,e._maxNameLength=v,k}},85167:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=i.pushUnique,o=!0;t.exports=function(t,e,r){var s=e._fullLayout;if(!e._dragged&&!e._editing){var l,u=s.legend.itemclick,c=s.legend.itemdoubleclick,f=s.legend.groupclick;if(1===r&&\"toggle\"===u&&\"toggleothers\"===c&&o&&e.data&&e._context.showTips?(i.notifier(i._(e,\"Double-click on legend to isolate one trace\"),\"long\"),o=!1):o=!1,1===r?l=u:2===r&&(l=c),l){var h=\"togglegroup\"===f,p=s.hiddenlabels?s.hiddenlabels.slice():[],d=t.data()[0][0];if(!d.groupTitle||!d.noClick){var v=e._fullData,g=(s.shapes||[]).filter((function(t){return t.showlegend})),y=v.concat(g),m=d.trace;m._isShape&&(m=m._fullInput);var x,b,_,w,T,k=m.legendgroup,A={},M=[],S=[],E=[],L=(s.shapes||[]).map((function(t){return t._input})),C=!1,P=m.legend,O=m._fullInput;if(O&&O._isShape||!n.traceIs(m,\"pie-like\")){var I,D=k&&k.length,z=[];if(D)for(x=0;x<y.length;x++)(I=y[x]).visible&&I.legendgroup===k&&z.push(x);if(\"toggle\"===l){var R;switch(m.visible){case!0:R=\"legendonly\";break;case!1:R=!1;break;case\"legendonly\":R=!0}if(D)if(h)for(x=0;x<y.length;x++){var F=y[x];!1!==F.visible&&F.legendgroup===k&&tt(F,R)}else tt(m,R);else tt(m,R)}else if(\"toggleothers\"===l){var B,N,j,U,V=!0;for(x=0;x<y.length;x++)if(B=(U=y[x])===m,N=!0!==U.showlegend,!(B||N||D&&U.legendgroup===k||U.legend!==P||!0!==U.visible||n.traceIs(U,\"notLegendIsolatable\"))){V=!1;break}for(x=0;x<y.length;x++)if(!1!==(U=y[x]).visible&&U.legend===P&&!n.traceIs(U,\"notLegendIsolatable\"))switch(m.visible){case\"legendonly\":tt(U,!0);break;case!0:j=!!V||\"legendonly\",B=U===m,N=!0!==U.showlegend&&!U.legendgroup,tt(U,!!(B||D&&U.legendgroup===k||N)||j)}}for(x=0;x<S.length;x++)if(_=S[x]){var H=_.constructUpdate(),q=Object.keys(H);for(b=0;b<q.length;b++)w=q[b],(A[w]=A[w]||[])[E[x]]=H[w]}for(T=Object.keys(A),x=0;x<T.length;x++)for(w=T[x],b=0;b<M.length;b++)A[w].hasOwnProperty(b)||(A[w][b]=void 0);C?n.call(\"_guiUpdate\",e,A,{shapes:L},M):n.call(\"_guiRestyle\",e,A,M)}else{var G=d.label,Z=p.indexOf(G);if(\"toggle\"===l)-1===Z?p.push(G):p.splice(Z,1);else if(\"toggleothers\"===l){var Y=-1!==Z,W=[];for(x=0;x<e.calcdata.length;x++){var X=e.calcdata[x];for(b=0;b<X.length;b++){var J=X[b].label;P===X[0].trace.legend&&G!==J&&(-1===p.indexOf(J)&&(Y=!0),a(p,J),W.push(J))}}if(!Y)for(var K=0;K<W.length;K++){var $=p.indexOf(W[K]);-1!==$&&p.splice($,1)}}n.call(\"_guiRelayout\",e,\"hiddenlabels\",p)}}}}function Q(t,e){var r=M.indexOf(t),n=A.visible;return n||(n=A.visible=[]),-1===M.indexOf(t)&&(M.push(t),r=M.length-1),n[r]=e,r}function tt(t,e){if(!d.groupTitle||h){var r,a=t._fullInput||t,o=a._isShape,s=a.index;if(void 0===s&&(s=a._index),n.hasTransform(a,\"groupby\")){var l=S[s];if(!l){var u=n.getTransformIndices(a,\"groupby\"),c=u[u.length-1];l=i.keyedContainer(a,\"transforms[\"+c+\"].styles\",\"target\",\"value.visible\"),S[s]=l}var f=l.get(t._group);void 0===f&&(f=!0),!1!==f&&l.set(t._group,e),E[s]=Q(s,!1!==a.visible)}else{var p=!1!==a.visible&&e;o?(r=p,L[s].visible=r,C=!0):Q(s,p)}}}}},10130:function(t,e){\"use strict\";e.isGrouped=function(t){return-1!==(t.traceorder||\"\").indexOf(\"grouped\")},e.isVertical=function(t){return\"h\"!==t.orientation},e.isReversed=function(t){return-1!==(t.traceorder||\"\").indexOf(\"reversed\")}},2199:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"legend\",layoutAttributes:r(33030),supplyLayoutDefaults:r(99017),draw:r(43969),style:r(53630)}},53630:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(71828),o=a.strTranslate,s=r(91424),l=r(7901),u=r(52075).extractOpts,c=r(34098),f=r(63463),h=r(53581).castOption,p=r(14928);function d(t,e){return(e?\"radial\":\"horizontal\")+(t?\"\":\"reversed\")}function v(t){var e=t[0].trace,r=e.contours,n=c.hasLines(e),i=c.hasMarkers(e),a=e.visible&&e.fill&&\"none\"!==e.fill,o=!1,s=!1;if(r){var l=r.coloring;\"lines\"===l?o=!0:n=\"none\"===l||\"heatmap\"===l||r.showlines,\"constraint\"===r.type?a=\"=\"!==r._operation:\"fill\"!==l&&\"heatmap\"!==l||(s=!0)}return{showMarker:i,showLine:n,showFill:a,showGradientLine:o,showGradientFill:s,anyLine:n||o,anyFill:a||s}}function g(t,e,r){return t&&a.isArrayOrTypedArray(t)?e:t>r?r:t}t.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var m=\"constant\"===r.itemsizing,x=r.itemwidth,b=(x+2*p.itemGap)/2,_=o(b,0),w=function(t,e,r,n){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return m?n:Math.min(i,r)};function T(t,a,o){var c=t[0].trace,f=c.marker||{},h=f.line||{},p=o?c.visible&&c.type===o:i.traceIs(c,\"bar\"),d=n.select(a).select(\"g.legendpoints\").selectAll(\"path.legend\"+o).data(p?[t]:[]);d.enter().append(\"path\").classed(\"legend\"+o,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),d.exit().remove(),d.each((function(t){var i=n.select(this),a=t[0],o=w(a.mlw,f.line,5,2);i.style(\"stroke-width\",o+\"px\");var p=a.mcc;if(!r._inHover&&\"mc\"in a){var d=u(f),v=d.mid;void 0===v&&(v=(d.max+d.min)/2),p=s.tryColorscale(f,\"\")(v)}var y=p||a.mc||f.color,m=f.pattern,x=m&&s.getPatternAttr(m.shape,0,\"\");if(x){var b=s.getPatternAttr(m.bgcolor,0,null),_=s.getPatternAttr(m.fgcolor,0,null),T=m.fgopacity,k=g(m.size,8,10),A=g(m.solidity,.5,1),M=\"legend-\"+c.uid;i.call(s.pattern,\"legend\",e,M,x,k,A,p,m.fillmode,b,_,T)}else i.call(l.fill,y);o&&l.stroke(i,a.mlc||h.color)}))}function k(t,r,o){var s=t[0],l=s.trace,u=o?l.visible&&l.type===o:i.traceIs(l,o),c=n.select(r).select(\"g.legendpoints\").selectAll(\"path.legend\"+o).data(u?[t]:[]);if(c.enter().append(\"path\").classed(\"legend\"+o,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),c.exit().remove(),c.size()){var p=l.marker||{},d=w(h(p.line.width,s.pts),p.line,5,2),v=\"pieLike\",g=a.minExtend(l,{marker:{line:{width:d}}},v),y=a.minExtend(s,{trace:g},v);f(c,y,g,e)}}t.each((function(t){var e=n.select(this),i=a.ensureSingle(e,\"g\",\"layers\");i.style(\"opacity\",t[0].trace.opacity);var s=r.valign,l=t[0].lineHeight,u=t[0].height;if(\"middle\"!==s&&l&&u){var c={top:1,bottom:-1}[s]*(.5*(l-u+3));i.attr(\"transform\",o(0,c))}else i.attr(\"transform\",null);i.selectAll(\"g.legendfill\").data([t]).enter().append(\"g\").classed(\"legendfill\",!0),i.selectAll(\"g.legendlines\").data([t]).enter().append(\"g\").classed(\"legendlines\",!0);var f=i.selectAll(\"g.legendsymbols\").data([t]);f.enter().append(\"g\").classed(\"legendsymbols\",!0),f.selectAll(\"g.legendpoints\").data([t]).enter().append(\"g\").classed(\"legendpoints\",!0)})).each((function(t){var r,i=t[0].trace,o=[];if(i.visible)switch(i.type){case\"histogram2d\":case\"heatmap\":o=[[\"M-15,-2V4H15V-2Z\"]],r=!0;break;case\"choropleth\":case\"choroplethmapbox\":o=[[\"M-6,-6V6H6V-6Z\"]],r=!0;break;case\"densitymapbox\":o=[[\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\"]],r=\"radial\";break;case\"cone\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\"]],r=!1;break;case\"streamtube\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\"]],r=!1;break;case\"surface\":o=[[\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\"],[\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\"]],r=!0;break;case\"mesh3d\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r=!1;break;case\"volume\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r=!0;break;case\"isosurface\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\"]],r=!1}var c=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legend3dandfriends\").data(o);c.enter().append(\"path\").classed(\"legend3dandfriends\",!0).attr(\"transform\",_).style(\"stroke-miterlimit\",1),c.exit().remove(),c.each((function(t,o){var c,f=n.select(this),h=u(i),p=h.colorscale,v=h.reversescale;if(p){if(!r){var g=p.length;c=0===o?p[v?g-1:0][1]:1===o?p[v?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var y=i.vertexcolor||i.facecolor||i.color;c=a.isArrayOrTypedArray(y)?y[o]||y[0]:y}f.attr(\"d\",t[0]),c?f.call(l.fill,c):f.call((function(t){if(t.size()){var n=\"legendfill-\"+i.uid;s.gradient(t,e,n,d(v,\"radial\"===r),p,\"fill\")}}))}))})).each((function(t){var e=t[0].trace,r=\"waterfall\"===e.type;if(t[0]._distinct&&r){var i=t[0].trace[t[0].dir].marker;return t[0].mc=i.color,t[0].mlw=i.line.width,t[0].mlc=i.line.color,T(t,this,\"waterfall\")}var a=[];e.visible&&r&&(a=t[0].hasTotals?[[\"increasing\",\"M-6,-6V6H0Z\"],[\"totals\",\"M6,6H0L-6,-6H-0Z\"],[\"decreasing\",\"M6,6V-6H0Z\"]]:[[\"increasing\",\"M-6,-6V6H6Z\"],[\"decreasing\",\"M6,6V-6H-6Z\"]]);var o=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendwaterfall\").data(a);o.enter().append(\"path\").classed(\"legendwaterfall\",!0).attr(\"transform\",_).style(\"stroke-miterlimit\",1),o.exit().remove(),o.each((function(t){var r=n.select(this),i=e[t[0]].marker,a=w(void 0,i.line,5,2);r.attr(\"d\",t[1]).style(\"stroke-width\",a+\"px\").call(l.fill,i.color),a&&r.call(l.stroke,i.line.color)}))})).each((function(t){T(t,this,\"funnel\")})).each((function(t){T(t,this)})).each((function(t){var r=t[0].trace,o=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendbox\").data(r.visible&&i.traceIs(r,\"box-violin\")?[t]:[]);o.enter().append(\"path\").classed(\"legendbox\",!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),o.exit().remove(),o.each((function(){var t=n.select(this);if(\"all\"!==r.boxpoints&&\"all\"!==r.points||0!==l.opacity(r.fillcolor)||0!==l.opacity((r.line||{}).color)){var i=w(void 0,r.line,5,2);t.style(\"stroke-width\",i+\"px\").call(l.fill,r.fillcolor),i&&l.stroke(t,r.line.color)}else{var u=a.minExtend(r,{marker:{size:m?12:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\"diameter\"}});o.call(s.pointStyle,u,e)}}))})).each((function(t){k(t,this,\"funnelarea\")})).each((function(t){k(t,this,\"pie\")})).each((function(t){var r,i,o=v(t),l=o.showFill,f=o.showLine,h=o.showGradientLine,p=o.showGradientFill,g=o.anyFill,y=o.anyLine,m=t[0],b=m.trace,_=u(b),T=_.colorscale,k=_.reversescale,A=c.hasMarkers(b)||!g?\"M5,0\":y?\"M5,-2\":\"M5,-3\",M=n.select(this),S=M.select(\".legendfill\").selectAll(\"path\").data(l||p?[t]:[]);if(S.enter().append(\"path\").classed(\"js-fill\",!0),S.exit().remove(),S.attr(\"d\",A+\"h\"+x+\"v6h-\"+x+\"z\").call((function(t){if(t.size())if(l)s.fillGroupStyle(t,e);else{var r=\"legendfill-\"+b.uid;s.gradient(t,e,r,d(k),T,\"fill\")}})),f||h){var E=w(void 0,b.line,10,5);i=a.minExtend(b,{line:{width:E}}),r=[a.minExtend(m,{trace:i})]}var L=M.select(\".legendlines\").selectAll(\"path\").data(f||h?[r]:[]);L.enter().append(\"path\").classed(\"js-line\",!0),L.exit().remove(),L.attr(\"d\",A+(h?\"l\"+x+\",0.0001\":\"h\"+x)).call(f?s.lineGroupStyle:function(t){if(t.size()){var r=\"legendline-\"+b.uid;s.lineGroupStyle(t),s.gradient(t,e,r,d(k),T,\"stroke\")}})})).each((function(t){var r,i,o=v(t),l=o.anyFill,u=o.anyLine,f=o.showLine,h=o.showMarker,p=t[0],d=p.trace,g=!h&&!u&&!l&&c.hasText(d);function y(t,e,r,n){var i=a.nestedProperty(d,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(m&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function x(t){return p._distinct&&p.index&&t[p.index]?t[p.index]:t[0]}if(h||g||f){var b={},w={};if(h){b.mc=y(\"marker.color\",x),b.mx=y(\"marker.symbol\",x),b.mo=y(\"marker.opacity\",a.mean,[.2,1]),b.mlc=y(\"marker.line.color\",x),b.mlw=y(\"marker.line.width\",a.mean,[0,5],2),w.marker={sizeref:1,sizemin:1,sizemode:\"diameter\"};var T=y(\"marker.size\",a.mean,[2,16],12);b.ms=T,w.marker.size=T}f&&(w.line={width:y(\"line.width\",x,[0,10],5)}),g&&(b.tx=\"Aa\",b.tp=y(\"textposition\",x),b.ts=10,b.tc=y(\"textfont.color\",x),b.tf=y(\"textfont.family\",x)),r=[a.minExtend(p,b)],(i=a.minExtend(d,w)).selectedpoints=null,i.texttemplate=null}var k=n.select(this).select(\"g.legendpoints\"),A=k.selectAll(\"path.scatterpts\").data(h?r:[]);A.enter().insert(\"path\",\":first-child\").classed(\"scatterpts\",!0).attr(\"transform\",_),A.exit().remove(),A.call(s.pointStyle,i,e),h&&(r[0].mrc=3);var M=k.selectAll(\"g.pointtext\").data(g?r:[]);M.enter().append(\"g\").classed(\"pointtext\",!0).append(\"text\").attr(\"transform\",_),M.exit().remove(),M.selectAll(\"text\").call(s.textPointStyle,i,e)})).each((function(t){var e=t[0].trace,r=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendcandle\").data(e.visible&&\"candlestick\"===e.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendcandle\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H-8M-8,6V-6H8Z\":\"M15,0H8M8,-6V6H-8Z\"})).attr(\"transform\",_).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\"increasing\":\"decreasing\"],o=w(void 0,a.line,5,2);i.style(\"stroke-width\",o+\"px\").call(l.fill,a.fillcolor),o&&l.stroke(i,a.line.color)}))})).each((function(t){var e=t[0].trace,r=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendohlc\").data(e.visible&&\"ohlc\"===e.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendohlc\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H0M-8,-6V0\":\"M15,0H0M8,6V0\"})).attr(\"transform\",_).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\"increasing\":\"decreasing\"],o=w(void 0,a.line,5,2);i.style(\"fill\",\"none\").call(s.dashLine,a.line.dash,o),o&&l.stroke(i,a.line.color)}))}))}},42068:function(t,e,r){\"use strict\";r(93348),t.exports={editType:\"modebar\",orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"modebar\"},bgcolor:{valType:\"color\",editType:\"modebar\"},color:{valType:\"color\",editType:\"modebar\"},activecolor:{valType:\"color\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},add:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"},remove:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"}}},26023:function(t,e,r){\"use strict\";var n=r(73972),i=r(74875),a=r(41675),o=r(24255),s=r(34031).eraseActiveShape,l=r(71828),u=l._,c=t.exports={};function f(t,e){var r,i,o=e.currentTarget,s=o.getAttribute(\"data-attr\"),l=o.getAttribute(\"data-val\")||!0,u=t._fullLayout,c={},f=a.list(t,null,!0),h=u._cartesianSpikesEnabled;if(\"zoom\"===s){var p,d=\"in\"===l?.5:2,v=(1+d)/2,g=(1-d)/2;for(i=0;i<f.length;i++)if(!(r=f[i]).fixedrange)if(p=r._name,\"auto\"===l)c[p+\".autorange\"]=!0;else if(\"reset\"===l)void 0===r._rangeInitial0&&void 0===r._rangeInitial1?c[p+\".autorange\"]=!0:void 0===r._rangeInitial0?(c[p+\".autorange\"]=r._autorangeInitial,c[p+\".range\"]=[null,r._rangeInitial1]):void 0===r._rangeInitial1?(c[p+\".range\"]=[r._rangeInitial0,null],c[p+\".autorange\"]=r._autorangeInitial):c[p+\".range\"]=[r._rangeInitial0,r._rangeInitial1],void 0!==r._showSpikeInitial&&(c[p+\".showspikes\"]=r._showSpikeInitial,\"on\"!==h||r._showSpikeInitial||(h=\"off\"));else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],m=[v*y[0]+g*y[1],v*y[1]+g*y[0]];c[p+\".range[0]\"]=r.l2r(m[0]),c[p+\".range[1]\"]=r.l2r(m[1])}}else\"hovermode\"!==s||\"x\"!==l&&\"y\"!==l||(l=u._isHoriz?\"y\":\"x\",o.setAttribute(\"data-val\",l)),c[s]=l;u._cartesianSpikesEnabled=h,n.call(\"_guiRelayout\",t,c)}function h(t,e){for(var r=e.currentTarget,i=r.getAttribute(\"data-attr\"),a=r.getAttribute(\"data-val\")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=i.split(\".\"),u=0;u<o.length;u++)s[o[u]+\".\"+l[1]]=a;var c=\"pan\"===a?a:\"zoom\";s.dragmode=c,n.call(\"_guiRelayout\",t,s)}function p(t,e){for(var r=e.currentTarget.getAttribute(\"data-attr\"),i=\"resetLastSave\"===r,a=\"resetDefault\"===r,o=t._fullLayout,s=o._subplots.gl3d||[],l={},u=0;u<s.length;u++){var c,f=s[u],h=f+\".camera\",p=f+\".aspectratio\",d=f+\".aspectmode\",v=o[f]._scene;i?(l[h+\".up\"]=v.viewInitial.up,l[h+\".eye\"]=v.viewInitial.eye,l[h+\".center\"]=v.viewInitial.center,c=!0):a&&(l[h+\".up\"]=null,l[h+\".eye\"]=null,l[h+\".center\"]=null,c=!0),c&&(l[p+\".x\"]=v.viewInitial.aspectratio.x,l[p+\".y\"]=v.viewInitial.aspectratio.y,l[p+\".z\"]=v.viewInitial.aspectratio.z,l[d]=v.viewInitial.aspectmode)}n.call(\"_guiRelayout\",t,l)}function d(t,e){var r=e.currentTarget,n=r._previousVal,i=t._fullLayout,a=i._subplots.gl3d||[],o=[\"xaxis\",\"yaxis\",\"zaxis\"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var u=0;u<a.length;u++){var c=a[u],f=i[c],h=c+\".hovermode\";s[h]=f.hovermode,l[h]=!1;for(var p=0;p<3;p++){var d=o[p],v=c+\".\"+d+\".showspikes\";l[v]=!1,s[v]=f[d].showspikes}}r._previousVal=s}return l}function v(t,e){for(var r=e.currentTarget,i=r.getAttribute(\"data-attr\"),a=r.getAttribute(\"data-val\")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var u=s[l],c=o[u];if(\"zoom\"===i){var f=c.projection.scale,h=\"in\"===a?2*f:.5*f;n.call(\"_guiRelayout\",t,u+\".projection.scale\",h)}}\"reset\"===i&&x(t,\"geo\")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has(\"cartesian\")?e._isHoriz?\"y\":\"x\":\"closest\")}function y(t){var e=g(t);n.call(\"_guiRelayout\",t,\"hovermode\",e)}function m(t,e){for(var r=e.currentTarget.getAttribute(\"data-val\"),i=t._fullLayout,a=i._subplots.mapbox||[],o={},s=0;s<a.length;s++){var l=a[s],u=i[l].zoom,c=\"in\"===r?1.05*u:u/1.05;o[l+\".zoom\"]=c}n.call(\"_guiRelayout\",t,o)}function x(t,e){for(var r=t._fullLayout,i=r._subplots[e]||[],a={},o=0;o<i.length;o++)for(var s=i[o],l=r[s]._subplot.viewInitial,u=Object.keys(l),c=0;c<u.length;c++){var f=u[c];a[s+\".\"+f]=l[f]}n.call(\"_guiRelayout\",t,a)}c.toImage={name:\"toImage\",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||\"png\";return u(t,\"png\"===e?\"Download plot as a png\":\"Download plot\")},icon:o.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||\"png\"};l.notifier(u(t,\"Taking snapshot - this may take a few seconds\"),\"long\"),\"svg\"!==r.format&&l.isIE()&&(l.notifier(u(t,\"IE only supports svg.  Changing format to svg.\"),\"long\"),r.format=\"svg\"),[\"filename\",\"width\",\"height\",\"scale\"].forEach((function(t){t in e&&(r[t]=e[t])})),n.call(\"downloadImage\",t,r).then((function(e){l.notifier(u(t,\"Snapshot succeeded\")+\" - \"+e,\"long\")})).catch((function(){l.notifier(u(t,\"Sorry, there was a problem downloading your snapshot!\"),\"long\")}))}},c.sendDataToCloud={name:\"sendDataToCloud\",title:function(t){return u(t,\"Edit in Chart Studio\")},icon:o.disk,click:function(t){i.sendDataToCloud(t)}},c.editInChartStudio={name:\"editInChartStudio\",title:function(t){return u(t,\"Edit in Chart Studio\")},icon:o.pencil,click:function(t){i.sendDataToCloud(t)}},c.zoom2d={name:\"zoom2d\",_cat:\"zoom\",title:function(t){return u(t,\"Zoom\")},attr:\"dragmode\",val:\"zoom\",icon:o.zoombox,click:f},c.pan2d={name:\"pan2d\",_cat:\"pan\",title:function(t){return u(t,\"Pan\")},attr:\"dragmode\",val:\"pan\",icon:o.pan,click:f},c.select2d={name:\"select2d\",_cat:\"select\",title:function(t){return u(t,\"Box Select\")},attr:\"dragmode\",val:\"select\",icon:o.selectbox,click:f},c.lasso2d={name:\"lasso2d\",_cat:\"lasso\",title:function(t){return u(t,\"Lasso Select\")},attr:\"dragmode\",val:\"lasso\",icon:o.lasso,click:f},c.drawclosedpath={name:\"drawclosedpath\",title:function(t){return u(t,\"Draw closed freeform\")},attr:\"dragmode\",val:\"drawclosedpath\",icon:o.drawclosedpath,click:f},c.drawopenpath={name:\"drawopenpath\",title:function(t){return u(t,\"Draw open freeform\")},attr:\"dragmode\",val:\"drawopenpath\",icon:o.drawopenpath,click:f},c.drawline={name:\"drawline\",title:function(t){return u(t,\"Draw line\")},attr:\"dragmode\",val:\"drawline\",icon:o.drawline,click:f},c.drawrect={name:\"drawrect\",title:function(t){return u(t,\"Draw rectangle\")},attr:\"dragmode\",val:\"drawrect\",icon:o.drawrect,click:f},c.drawcircle={name:\"drawcircle\",title:function(t){return u(t,\"Draw circle\")},attr:\"dragmode\",val:\"drawcircle\",icon:o.drawcircle,click:f},c.eraseshape={name:\"eraseshape\",title:function(t){return u(t,\"Erase active shape\")},icon:o.eraseshape,click:s},c.zoomIn2d={name:\"zoomIn2d\",_cat:\"zoomin\",title:function(t){return u(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:f},c.zoomOut2d={name:\"zoomOut2d\",_cat:\"zoomout\",title:function(t){return u(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:f},c.autoScale2d={name:\"autoScale2d\",_cat:\"autoscale\",title:function(t){return u(t,\"Autoscale\")},attr:\"zoom\",val:\"auto\",icon:o.autoscale,click:f},c.resetScale2d={name:\"resetScale2d\",_cat:\"resetscale\",title:function(t){return u(t,\"Reset axes\")},attr:\"zoom\",val:\"reset\",icon:o.home,click:f},c.hoverClosestCartesian={name:\"hoverClosestCartesian\",_cat:\"hoverclosest\",title:function(t){return u(t,\"Show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:f},c.hoverCompareCartesian={name:\"hoverCompareCartesian\",_cat:\"hoverCompare\",title:function(t){return u(t,\"Compare data on hover\")},attr:\"hovermode\",val:function(t){return t._fullLayout._isHoriz?\"y\":\"x\"},icon:o.tooltip_compare,gravity:\"ne\",click:f},c.zoom3d={name:\"zoom3d\",_cat:\"zoom\",title:function(t){return u(t,\"Zoom\")},attr:\"scene.dragmode\",val:\"zoom\",icon:o.zoombox,click:h},c.pan3d={name:\"pan3d\",_cat:\"pan\",title:function(t){return u(t,\"Pan\")},attr:\"scene.dragmode\",val:\"pan\",icon:o.pan,click:h},c.orbitRotation={name:\"orbitRotation\",title:function(t){return u(t,\"Orbital rotation\")},attr:\"scene.dragmode\",val:\"orbit\",icon:o[\"3d_rotate\"],click:h},c.tableRotation={name:\"tableRotation\",title:function(t){return u(t,\"Turntable rotation\")},attr:\"scene.dragmode\",val:\"turntable\",icon:o[\"z-axis\"],click:h},c.resetCameraDefault3d={name:\"resetCameraDefault3d\",_cat:\"resetCameraDefault\",title:function(t){return u(t,\"Reset camera to default\")},attr:\"resetDefault\",icon:o.home,click:p},c.resetCameraLastSave3d={name:\"resetCameraLastSave3d\",_cat:\"resetCameraLastSave\",title:function(t){return u(t,\"Reset camera to last save\")},attr:\"resetLastSave\",icon:o.movie,click:p},c.hoverClosest3d={name:\"hoverClosest3d\",_cat:\"hoverclosest\",title:function(t){return u(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var r=d(t,e);n.call(\"_guiRelayout\",t,r)}},c.zoomInGeo={name:\"zoomInGeo\",_cat:\"zoomin\",title:function(t){return u(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:v},c.zoomOutGeo={name:\"zoomOutGeo\",_cat:\"zoomout\",title:function(t){return u(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:v},c.resetGeo={name:\"resetGeo\",_cat:\"reset\",title:function(t){return u(t,\"Reset\")},attr:\"reset\",val:null,icon:o.autoscale,click:v},c.hoverClosestGeo={name:\"hoverClosestGeo\",_cat:\"hoverclosest\",title:function(t){return u(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:y},c.hoverClosestGl2d={name:\"hoverClosestGl2d\",_cat:\"hoverclosest\",title:function(t){return u(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:y},c.hoverClosestPie={name:\"hoverClosestPie\",_cat:\"hoverclosest\",title:function(t){return u(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:y},c.resetViewSankey={name:\"resetSankeyGroup\",title:function(t){return u(t,\"Reset view\")},icon:o.home,click:function(t){for(var e={\"node.groups\":[],\"node.x\":[],\"node.y\":[]},r=0;r<t._fullData.length;r++){var i=t._fullData[r]._viewInitial;e[\"node.groups\"].push(i.node.groups.slice()),e[\"node.x\"].push(i.node.x.slice()),e[\"node.y\"].push(i.node.y.slice())}n.call(\"restyle\",t,e)}},c.toggleHover={name:\"toggleHover\",title:function(t){return u(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var r=d(t,e);r.hovermode=g(t),n.call(\"_guiRelayout\",t,r)}},c.resetViews={name:\"resetViews\",title:function(t){return u(t,\"Reset views\")},icon:o.home,click:function(t,e){var r=e.currentTarget;r.setAttribute(\"data-attr\",\"zoom\"),r.setAttribute(\"data-val\",\"reset\"),f(t,e),r.setAttribute(\"data-attr\",\"resetLastSave\"),p(t,e),x(t,\"geo\"),x(t,\"mapbox\")}},c.toggleSpikelines={name:\"toggleSpikelines\",title:function(t){return u(t,\"Toggle Spike Lines\")},icon:o.spikeline,attr:\"_cartesianSpikesEnabled\",val:\"on\",click:function(t){var e=t._fullLayout,r=e._cartesianSpikesEnabled;e._cartesianSpikesEnabled=\"on\"===r?\"off\":\"on\",n.call(\"_guiRelayout\",t,function(t){for(var e=\"on\"===t._fullLayout._cartesianSpikesEnabled,r=a.list(t,null,!0),n={},i=0;i<r.length;i++){var o=r[i];n[o._name+\".showspikes\"]=!!e||o._showSpikeInitial}return n}(t))}},c.resetViewMapbox={name:\"resetViewMapbox\",_cat:\"resetView\",title:function(t){return u(t,\"Reset view\")},attr:\"reset\",icon:o.home,click:function(t){x(t,\"mapbox\")}},c.zoomInMapbox={name:\"zoomInMapbox\",_cat:\"zoomin\",title:function(t){return u(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:m},c.zoomOutMapbox={name:\"zoomOutMapbox\",_cat:\"zoomout\",title:function(t){return u(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:m}},93348:function(t,e,r){\"use strict\";var n=r(26023),i=Object.keys(n),a=[\"drawline\",\"drawopenpath\",\"drawclosedpath\",\"drawcircle\",\"drawrect\",\"eraseshape\"],o=[\"v1hovermode\",\"hoverclosest\",\"hovercompare\",\"togglehover\",\"togglespikelines\"].concat(a),s=[];i.forEach((function(t){!function(t){if(-1===o.indexOf(t._cat||t.name)){var e=t.name,r=(t._cat||t.name).toLowerCase();-1===s.indexOf(e)&&s.push(e),-1===s.indexOf(r)&&s.push(r)}}(n[t])})),s.sort(),t.exports={DRAW_MODES:a,backButtons:o,foreButtons:s}},35750:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(44467),o=r(42068);t.exports=function(t,e){var r=t.modebar||{},s=a.newContainer(e,\"modebar\");function l(t,e){return n.coerce(r,s,o,t,e)}l(\"orientation\"),l(\"bgcolor\",i.addOpacity(e.paper_bgcolor,.5));var u=i.contrast(i.rgb(e.modebar.bgcolor));l(\"color\",i.addOpacity(u,.3)),l(\"activecolor\",i.addOpacity(u,.7)),l(\"uirevision\",e.uirevision),l(\"add\"),l(\"remove\")}},64168:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"modebar\",layoutAttributes:r(42068),supplyLayoutDefaults:r(35750),manage:r(14192)}},14192:function(t,e,r){\"use strict\";var n=r(41675),i=r(34098),a=r(73972),o=r(23469).isUnifiedHover,s=r(37676),l=r(26023),u=r(93348).DRAW_MODES,c=r(71828).extendDeep;t.exports=function(t){var e=t._fullLayout,r=t._context,f=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error([\"*modeBarButtonsToRemove* configuration options\",\"must be an array.\"].join(\" \"));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error([\"*modeBarButtonsToAdd* configuration options\",\"must be an array.\"].join(\" \"));var h,p=r.modeBarButtons;h=Array.isArray(p)&&p.length?function(t){for(var e=c([],t),r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var a=n[i];if(\"string\"==typeof a){if(void 0===l[a])throw new Error([\"*modeBarButtons* configuration options\",\"invalid button name\"].join(\" \"));e[r][i]=l[a]}}return e}(p):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,s=t._context;function c(t,e){if(\"string\"==typeof e){if(e.toLowerCase()===t.toLowerCase())return!0}else{var r=e.name,n=e._cat||e.name;if(r===t||n===t.toLowerCase())return!0}return!1}var f=e.modebar.add;\"string\"==typeof f&&(f=[f]);var h=e.modebar.remove;\"string\"==typeof h&&(h=[h]);var p=s.modeBarButtonsToAdd.concat(f.filter((function(t){for(var e=0;e<s.modeBarButtonsToRemove.length;e++)if(c(t,s.modeBarButtonsToRemove[e]))return!1;return!0}))),d=s.modeBarButtonsToRemove.concat(h.filter((function(t){for(var e=0;e<s.modeBarButtonsToAdd.length;e++)if(c(t,s.modeBarButtonsToAdd[e]))return!1;return!0}))),v=e._has(\"cartesian\"),g=e._has(\"gl3d\"),y=e._has(\"geo\"),m=e._has(\"pie\"),x=e._has(\"funnelarea\"),b=e._has(\"gl2d\"),_=e._has(\"ternary\"),w=e._has(\"mapbox\"),T=e._has(\"polar\"),k=e._has(\"smith\"),A=e._has(\"sankey\"),M=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),S=o(e.hovermode),E=[];function L(t){if(t.length){for(var e=[],r=0;r<t.length;r++){for(var n=t[r],i=l[n],a=i.name.toLowerCase(),o=(i._cat||i.name).toLowerCase(),s=!1,u=0;u<d.length;u++){var c=d[u].toLowerCase();if(c===a||c===o){s=!0;break}}s||e.push(l[n])}E.push(e)}}var C=[\"toImage\"];s.showEditInChartStudio?C.push(\"editInChartStudio\"):s.showSendToCloud&&C.push(\"sendDataToCloud\"),L(C);var P=[],O=[],I=[],D=[];(v||b||m||x||_)+y+g+w+T+k>1?(O=[\"toggleHover\"],I=[\"resetViews\"]):y?(P=[\"zoomInGeo\",\"zoomOutGeo\"],O=[\"hoverClosestGeo\"],I=[\"resetGeo\"]):g?(O=[\"hoverClosest3d\"],I=[\"resetCameraDefault3d\",\"resetCameraLastSave3d\"]):w?(P=[\"zoomInMapbox\",\"zoomOutMapbox\"],O=[\"toggleHover\"],I=[\"resetViewMapbox\"]):b?O=[\"hoverClosestGl2d\"]:m?O=[\"hoverClosestPie\"]:A?(O=[\"hoverClosestCartesian\",\"hoverCompareCartesian\"],I=[\"resetViewSankey\"]):O=[\"toggleHover\"],v&&(O=[\"toggleSpikelines\",\"hoverClosestCartesian\",\"hoverCompareCartesian\"]),(function(t){for(var e=0;e<t.length;e++)if(!a.traceIs(t[e],\"noHover\"))return!1;return!0}(r)||S)&&(O=[]),!v&&!b||M||(P=[\"zoomIn2d\",\"zoomOut2d\",\"autoScale2d\"],\"resetViews\"!==I[0]&&(I=[\"resetScale2d\"])),g?D=[\"zoom3d\",\"pan3d\",\"orbitRotation\",\"tableRotation\"]:(v||b)&&!M||_?D=[\"zoom2d\",\"pan2d\"]:w||y?D=[\"pan2d\"]:T&&(D=[\"zoom2d\"]),function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(a.traceIs(n,\"scatter-like\")?(i.hasMarkers(n)||i.hasText(n))&&(e=!0):a.traceIs(n,\"box-violin\")&&\"all\"!==n.boxpoints&&\"all\"!==n.points||(e=!0))}return e}(r)&&D.push(\"select2d\",\"lasso2d\");var z=[],R=function(t){-1===z.indexOf(t)&&-1!==O.indexOf(t)&&z.push(t)};if(Array.isArray(p)){for(var F=[],B=0;B<p.length;B++){var N=p[B];\"string\"==typeof N?(N=N.toLowerCase(),-1!==u.indexOf(N)?(e._has(\"mapbox\")||e._has(\"cartesian\"))&&D.push(N):\"togglespikelines\"===N?R(\"toggleSpikelines\"):\"togglehover\"===N?R(\"toggleHover\"):\"hovercompare\"===N?R(\"hoverCompareCartesian\"):\"hoverclosest\"===N?(R(\"hoverClosestCartesian\"),R(\"hoverClosestGeo\"),R(\"hoverClosest3d\"),R(\"hoverClosestGl2d\"),R(\"hoverClosestPie\")):\"v1hovermode\"===N&&(R(\"toggleHover\"),R(\"hoverClosestCartesian\"),R(\"hoverCompareCartesian\"),R(\"hoverClosestGeo\"),R(\"hoverClosest3d\"),R(\"hoverClosestGl2d\"),R(\"hoverClosestPie\"))):F.push(N)}p=F}return L(D),L(P.concat(I)),L(z),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(E,p)}(t),f?f.update(t,h):e._modeBar=s(t,h)}else f&&(f.destroy(),delete e._modeBar)}},37676:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(71828),o=r(24255),s=r(11506).version,l=new DOMParser;function u(t){this.container=t.container,this.element=document.createElement(\"div\"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=u.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,i=\"modebar-\"+n._uid;this.element.setAttribute(\"id\",i),this._uid=i,this.element.className=\"modebar\",\"hover\"===r.displayModeBar&&(this.element.className+=\" modebar--hover ease-bg\"),\"v\"===n.modebar.orientation&&(this.element.className+=\" vertical\",e=e.reverse());var o=n.modebar,s=\"hover\"===r.displayModeBar?\".js-plotly-plot .plotly:hover \":\"\";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+\"#\"+i+\" .modebar-group\",\"background-color: \"+o.bgcolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn .icon path\",\"fill: \"+o.color),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn:hover .icon path\",\"fill: \"+o.activecolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn.active .icon path\",\"fill: \"+o.activecolor);var l=!this.hasButtons(e),u=this.hasLogo!==r.displaylogo,c=this.locale!==r.locale;if(this.locale=r.locale,(l||u||c)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var f=this.getLogo();r.watermark&&(f.className=f.className+\" watermark\"),\"v\"===n.modebar.orientation?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach((function(t){var r=e.createGroup();t.forEach((function(t){var n=t.name;if(!n)throw new Error(\"must provide button 'name' in button config\");if(-1!==e.buttonsNames.indexOf(n))throw new Error(\"button name '\"+n+\"' is taken\");e.buttonsNames.push(n);var i=e.createButton(t);e.buttonElements.push(i),r.appendChild(i)})),e.element.appendChild(r)}))},c.createGroup=function(){var t=document.createElement(\"div\");return t.className=\"modebar-group\",t},c.createButton=function(t){var e=this,r=document.createElement(\"a\");r.setAttribute(\"rel\",\"tooltip\"),r.className=\"modebar-btn\";var i=t.title;void 0===i?i=t.name:\"function\"==typeof i&&(i=i(this.graphInfo)),(i||0===i)&&r.setAttribute(\"data-title\",i),void 0!==t.attr&&r.setAttribute(\"data-attr\",t.attr);var a=t.val;if(void 0!==a&&(\"function\"==typeof a&&(a=a(this.graphInfo)),r.setAttribute(\"data-val\",a)),\"function\"!=typeof t.click)throw new Error(\"must provide button 'click' function in button config\");r.addEventListener(\"click\",(function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)})),r.setAttribute(\"data-toggle\",t.toggle||!1),t.toggle&&n.select(r).classed(\"active\",!0);var s=t.icon;return\"function\"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute(\"data-gravity\",t.gravity||\"n\"),r},c.createIcon=function(t){var e,r=i(t.height)?Number(t.height):t.ascent-t.descent,n=\"http://www.w3.org/2000/svg\";if(t.path){(e=document.createElementNS(n,\"svg\")).setAttribute(\"viewBox\",[0,0,t.width,r].join(\" \")),e.setAttribute(\"class\",\"icon\");var a=document.createElementNS(n,\"path\");a.setAttribute(\"d\",t.path),t.transform?a.setAttribute(\"transform\",t.transform):void 0!==t.ascent&&a.setAttribute(\"transform\",\"matrix(1 0 0 -1 0 \"+t.ascent+\")\"),e.appendChild(a)}return t.svg&&(e=l.parseFromString(t.svg,\"application/xml\").childNodes[0]),e.setAttribute(\"height\",\"1em\"),e.setAttribute(\"width\",\"1em\"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute(\"data-attr\"):null;this.buttonElements.forEach((function(t){var i=t.getAttribute(\"data-val\")||!0,o=t.getAttribute(\"data-attr\"),s=\"true\"===t.getAttribute(\"data-toggle\"),l=n.select(t);if(s)o===r&&l.classed(\"active\",!l.classed(\"active\"));else{var u=null===o?o:a.nestedProperty(e,o).get();l.classed(\"active\",u===i)}}))},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement(\"a\");return e.href=\"https://plotly.com/\",e.target=\"_blank\",e.setAttribute(\"data-title\",a._(this.graphInfo,\"Produced with Plotly.js\")+\" (v\"+s+\")\"),e.className=\"modebar-btn plotlyjsicon modebar-btn--logo\",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){a.removeElement(this.container.querySelector(\".modebar\")),a.deleteRelatedStyleRule(this._uid)},t.exports=function(t,e){var r=t._fullLayout,i=new u({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(i.element).append(\"span\").classed(\"badge-private float--left\",!0).text(\"PRIVATE\"),i}},37113:function(t,e,r){\"use strict\";var n=r(41940),i=r(22399),a=(0,r(44467).templatedArray)(\"button\",{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},step:{valType:\"enumerated\",values:[\"month\",\"year\",\"day\",\"hour\",\"minute\",\"second\",\"all\"],dflt:\"month\",editType:\"plot\"},stepmode:{valType:\"enumerated\",values:[\"backward\",\"todate\"],dflt:\"backward\",editType:\"plot\"},count:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},label:{valType:\"string\",editType:\"plot\"},editType:\"plot\"});t.exports={visible:{valType:\"boolean\",editType:\"plot\"},buttons:a,x:{valType:\"number\",min:-2,max:3,editType:\"plot\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"plot\"},y:{valType:\"number\",min:-2,max:3,editType:\"plot\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"bottom\",editType:\"plot\"},font:n({editType:\"plot\"}),bgcolor:{valType:\"color\",dflt:i.lightLine,editType:\"plot\"},activecolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"}},89573:function(t){\"use strict\";t.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},28674:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(44467),o=r(85501),s=r(37113),l=r(89573);function u(t,e,r,i){var a=i.calendar;function o(r,i){return n.coerce(t,e,s.buttons,r,i)}if(o(\"visible\")){var l=o(\"step\");\"all\"!==l&&(!a||\"gregorian\"===a||\"month\"!==l&&\"year\"!==l?o(\"stepmode\"):e.stepmode=\"backward\",o(\"count\")),o(\"label\")}}t.exports=function(t,e,r,c,f){var h=t.rangeselector||{},p=a.newContainer(e,\"rangeselector\");function d(t,e){return n.coerce(h,p,s,t,e)}if(d(\"visible\",o(h,p,{name:\"buttons\",handleItemDefaults:u,calendar:f}).length>0)){var v=function(t,e,r){for(var n=r.filter((function(r){return e[r].anchor===t._id})),i=0,a=0;a<n.length;a++){var o=e[n[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,r,c);d(\"x\",v[0]),d(\"y\",v[1]),n.noneOrAll(t,e,[\"x\",\"y\"]),d(\"xanchor\"),d(\"yanchor\"),n.coerceFont(d,\"font\",r.font);var g=d(\"bgcolor\");d(\"activecolor\",i.contrast(g,l.lightAmount,l.darkAmount)),d(\"bordercolor\"),d(\"borderwidth\")}}},21598:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(74875),o=r(7901),s=r(91424),l=r(71828),u=l.strTranslate,c=r(63893),f=r(41675),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR,g=r(89573),y=r(70565);function m(t){return t._id}function x(t,e,r){var n=l.ensureSingle(t,\"rect\",\"selector-rect\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,r,n){var i,a;l.ensureSingle(t,\"text\",\"selector-text\",(function(t){t.attr(\"text-anchor\",\"middle\")})).call(s.font,e.font).text((i=r,a=n._fullLayout._meta,i.label?a?l.templateString(i.label,a):i.label:\"all\"===i.step?\"all\":i.count+i.step.charAt(0))).call((function(t){c.convertToTspans(t,n)}))}t.exports=function(t){var e=t._fullLayout._infolayer.selectAll(\".rangeselector\").data(function(t){for(var e=f.list(t,\"x\",!0),r=[],n=0;n<e.length;n++){var i=e[n];i.rangeselector&&i.rangeselector.visible&&r.push(i)}return r}(t),m);e.enter().append(\"g\").classed(\"rangeselector\",!0),e.exit().remove(),e.style({cursor:\"pointer\",\"pointer-events\":\"all\"}),e.each((function(e){var r=n.select(this),o=e,f=o.rangeselector,h=r.selectAll(\"g.button\").data(l.filterVisible(f.buttons));h.enter().append(\"g\").classed(\"button\",!0),h.exit().remove(),h.each((function(e){var r=n.select(this),a=y(o,e);e._isActive=function(t,e,r){if(\"all\"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,a),r.call(x,f,e),r.call(b,f,e,t),r.on(\"click\",(function(){t._dragged||i.call(\"_guiRelayout\",t,a)})),r.on(\"mouseover\",(function(){e._isHovered=!0,r.call(x,f,e)})),r.on(\"mouseout\",(function(){e._isHovered=!1,r.call(x,f,e)}))})),function(t,e,r,i,o){var f=0,h=0,y=r.borderwidth;e.each((function(){var t=n.select(this).select(\".selector-text\"),e=r.font.size*p,i=Math.max(e*c.lineCount(t),16)+3;h=Math.max(h,i)})),e.each((function(){var t=n.select(this),e=t.select(\".selector-rect\"),i=t.select(\".selector-text\"),a=i.node()&&s.bBox(i.node()).width,o=r.font.size*p,l=c.lineCount(i),d=Math.max(a+10,g.minButtonWidth);t.attr(\"transform\",u(y+f,y)),e.attr({x:0,y:0,width:d,height:h}),c.positionText(i,d/2,h/2-(l-1)*o/2+3),f+=d+5}));var m=t._fullLayout._size,x=m.l+m.w*r.x,b=m.t+m.h*(1-r.y),_=\"left\";l.isRightAnchor(r)&&(x-=f,_=\"right\"),l.isCenterAnchor(r)&&(x-=f/2,_=\"center\");var w=\"top\";l.isBottomAnchor(r)&&(b-=h,w=\"bottom\"),l.isMiddleAnchor(r)&&(b-=h/2,w=\"middle\"),f=Math.ceil(f),h=Math.ceil(h),x=Math.round(x),b=Math.round(b),a.autoMargin(t,i+\"-range-selector\",{x:r.x,y:r.y,l:f*d[_],r:f*v[_],b:h*v[w],t:h*d[w]}),o.attr(\"transform\",u(x,b))}(t,h,f,o._name,r)}))}},70565:function(t,e,r){\"use strict\";var n=r(81041),i=r(71828).titleCase;t.exports=function(t,e){var r=t._name,a={};if(\"all\"===e.step)a[r+\".autorange\"]=!0;else{var o=function(t,e){var r,a=t.range,o=new Date(t.r2l(a[1])),s=e.step,l=n[\"utc\"+i(s)],u=e.count;switch(e.stepmode){case\"backward\":r=t.l2r(+l.offset(o,-u));break;case\"todate\":var c=l.offset(o,-u);r=t.l2r(+l.ceil(c))}return[r,a[1]]}(t,e);a[r+\".range[0]\"]=o[0],a[r+\".range[1]\"]=o[1]}return a}},97218:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"rangeselector\",schema:{subplots:{xaxis:{rangeselector:r(37113)}}},layoutAttributes:r(37113),handleDefaults:r(28674),draw:r(21598)}},75148:function(t,e,r){\"use strict\";var n=r(22399);t.exports={bgcolor:{valType:\"color\",dflt:n.background,editType:\"plot\"},bordercolor:{valType:\"color\",dflt:n.defaultLine,editType:\"plot\"},borderwidth:{valType:\"integer\",dflt:0,min:0,editType:\"plot\"},autorange:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}}],editType:\"calc\",impliedEdits:{autorange:!1}},thickness:{valType:\"number\",dflt:.15,min:0,max:1,editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"}},88443:function(t,e,r){\"use strict\";var n=r(41675).list,i=r(71739).getAutoRange,a=r(73251);t.exports=function(t){for(var e=n(t,\"x\",!0),r=0;r<e.length;r++){var o=e[r],s=o[a.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=i(t,o))}}},73251:function(t){\"use strict\";t.exports={name:\"rangeslider\",containerClassName:\"rangeslider-container\",bgClassName:\"rangeslider-bg\",rangePlotClassName:\"rangeslider-rangeplot\",maskMinClassName:\"rangeslider-mask-min\",maskMaxClassName:\"rangeslider-mask-max\",slideBoxClassName:\"rangeslider-slidebox\",grabberMinClassName:\"rangeslider-grabber-min\",grabAreaMinClassName:\"rangeslider-grabarea-min\",handleMinClassName:\"rangeslider-handle-min\",grabberMaxClassName:\"rangeslider-grabber-max\",grabAreaMaxClassName:\"rangeslider-grabarea-max\",handleMaxClassName:\"rangeslider-handle-max\",maskMinOppAxisClassName:\"rangeslider-mask-min-opp-axis\",maskMaxOppAxisClassName:\"rangeslider-mask-max-opp-axis\",maskColor:\"rgba(0,0,0,0.4)\",maskOppAxisColor:\"rgba(0,0,0,0.2)\",slideBoxFill:\"transparent\",slideBoxCursor:\"ew-resize\",grabAreaFill:\"transparent\",grabAreaCursor:\"col-resize\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},26377:function(t,e,r){\"use strict\";var n=r(71828),i=r(44467),a=r(41675),o=r(75148),s=r(47850);t.exports=function(t,e,r){var l=t[r],u=e[r];if(l.rangeslider||e._requestRangeslider[u._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var c,f,h=l.rangeslider,p=i.newContainer(u,\"rangeslider\");if(_(\"visible\")){_(\"bgcolor\",e.plot_bgcolor),_(\"bordercolor\"),_(\"borderwidth\"),_(\"thickness\"),_(\"autorange\",!u.isValidRange(h.range)),_(\"range\");var d=e._subplots;if(d)for(var v=d.cartesian.filter((function(t){return t.substr(0,t.indexOf(\"y\"))===a.name2id(r)})).map((function(t){return t.substr(t.indexOf(\"y\"),t.length)})),g=n.simpleMap(v,a.id2name),y=0;y<g.length;y++){var m=g[y];c=h[m]||{},f=i.newContainer(p,m,\"yaxis\");var x,b=e[m];c.range&&b.isValidRange(c.range)&&(x=\"fixed\"),\"match\"!==w(\"rangemode\",x)&&w(\"range\",b.range.slice())}p._input=h}}function _(t,e){return n.coerce(h,p,o,t,e)}function w(t,e){return n.coerce(c,f,s,t,e)}}},72413:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=o.strTranslate,l=r(91424),u=r(7901),c=r(92998),f=r(93612),h=r(41675),p=r(28569),d=r(6964),v=r(73251);function g(t,e,r,n){var i=o.ensureSingle(t,\"rect\",v.bgClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})),a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,c=-n._offsetShift,f=l.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:s(c,c),\"stroke-width\":f}).call(u.stroke,n.bordercolor).call(u.fill,n.bgcolor)}function y(t,e,r,n){var i=e._fullLayout;o.ensureSingleById(i._topdefs,\"clipPath\",n._clipId,(function(t){t.append(\"rect\").attr({x:0,y:0})})).select(\"rect\").attr({width:n._width,height:n._height})}function m(t,e,r,i){var s,u=e.calcdata,c=t.selectAll(\"g.\"+v.rangePlotClassName).data(r._subplotsWith,o.identity);c.enter().append(\"g\").attr(\"class\",(function(t){return v.rangePlotClassName+\" \"+t})).call(l.setClipUrl,i._clipId,e),c.order(),c.exit().remove(),c.each((function(t,o){var l=n.select(this),c=0===o,p=h.getFromId(e,t,\"y\"),d=p._name,v=i[d],g={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(g.layout.xaxis.rangebreaks=r.rangebreaks),g.layout[d]={type:p.type,domain:[0,1],range:\"match\"!==v.rangemode?v.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(g.layout[d].rangebreaks=p.rangebreaks),a.supplyDefaults(g);var y=g._fullLayout.xaxis,m=g._fullLayout[d];y.clearCalc(),y.setScale(),m.clearCalc(),m.setScale();var x={id:t,plotgroup:l,xaxis:y,yaxis:m,isRangePlot:!0};c?s=x:(x.mainplot=\"xy\",x.mainplotinfo=s),f.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a.xaxis+a.yaxis===e&&r.push(i)}return r}(u,t))}))}function x(t,e,r,n,i){o.ensureSingle(t,\"rect\",v.maskMinClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",n._height).call(u.fill,v.maskColor),o.ensureSingle(t,\"rect\",v.maskMaxClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",n._height).call(u.fill,v.maskColor),\"match\"!==i.rangemode&&(o.ensureSingle(t,\"rect\",v.maskMinOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",n._width).call(u.fill,v.maskOppAxisColor),o.ensureSingle(t,\"rect\",v.maskMaxOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",n._width).style(\"border-top\",v.maskOppBorder).call(u.fill,v.maskOppAxisColor))}function b(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,\"rect\",v.slideBoxClassName,(function(t){t.attr({y:0,cursor:v.slideBoxCursor,\"shape-rendering\":\"crispEdges\"})})).attr({height:n._height,fill:v.slideBoxFill})}function _(t,e,r,n){var i=o.ensureSingle(t,\"g\",v.grabberMinClassName),a=o.ensureSingle(t,\"g\",v.grabberMaxClassName),s={x:0,width:v.handleWidth,rx:v.handleRadius,fill:u.background,stroke:u.defaultLine,\"stroke-width\":v.handleStrokeWidth,\"shape-rendering\":\"crispEdges\"},l={y:Math.round(n._height/4),height:Math.round(n._height/2)};o.ensureSingle(i,\"rect\",v.handleMinClassName,(function(t){t.attr(s)})).attr(l),o.ensureSingle(a,\"rect\",v.handleMaxClassName,(function(t){t.attr(s)})).attr(l);var c={width:v.grabAreaWidth,x:0,y:0,fill:v.grabAreaFill,cursor:e._context.staticPlot?void 0:v.grabAreaCursor};o.ensureSingle(i,\"rect\",v.grabAreaMinClassName,(function(t){t.attr(c)})).attr(\"height\",n._height),o.ensureSingle(a,\"rect\",v.grabAreaMaxClassName,(function(t){t.attr(c)})).attr(\"height\",n._height)}t.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,a=0;a<r.length;a++){var l=r[a][v.name];l._clipId=l._id+\"-\"+e._uid}var u=e._infolayer.selectAll(\"g.\"+v.containerClassName).data(r,(function(t){return t._name}));u.exit().each((function(t){var r=t[v.name];e._topdefs.select(\"#\"+r._clipId).remove()})).remove(),0!==r.length&&(u.enter().append(\"g\").classed(v.containerClassName,!0).attr(\"pointer-events\",\"all\"),u.each((function(r){var a=n.select(this),l=r[v.name],u=e[h.id2name(r.anchor)],f=l[h.id2name(r.anchor)];if(l.range){var w,T=o.simpleMap(l.range,r.r2l),k=o.simpleMap(r.range,r.r2l);w=k[0]<k[1]?[Math.min(T[0],k[0]),Math.max(T[1],k[1])]:[Math.max(T[0],k[0]),Math.min(T[1],k[1])],l.range=l._input.range=o.simpleMap(w,r.l2r)}r.cleanRange(\"rangeslider.range\");var A=e._size,M=r.domain;l._width=A.w*(M[1]-M[0]);var S=Math.round(A.l+A.w*M[0]),E=Math.round(A.t+A.h*(1-r._counterDomainMin)+(\"bottom\"===r.side?r._depth:0)+l._offsetShift+v.extraPad);a.attr(\"transform\",s(S,E)),l._rl=o.simpleMap(l.range,r.r2l);var L=l._rl[0],C=l._rl[1],P=C-L;if(l.p2d=function(t){return t/l._width*P+L},l.d2p=function(t){return(t-L)/P*l._width},r.rangebreaks){var O=r.locateBreaks(L,C);if(O.length){var I,D,z=0;for(I=0;I<O.length;I++)z+=(D=O[I]).max-D.min;var R=l._width/(C-L-z),F=[-R*L];for(I=0;I<O.length;I++)D=O[I],F.push(F[F.length-1]-R*(D.max-D.min));for(l.d2p=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.max)e=F[r+1];else if(t<n.min)break}return e+R*t},I=0;I<O.length;I++)(D=O[I]).pmin=l.d2p(D.min),D.pmax=l.d2p(D.max);l.p2d=function(t){for(var e=F[0],r=0;r<O.length;r++){var n=O[r];if(t>=n.pmax)e=F[r+1];else if(t<n.pmin)break}return(t-e)/R}}}if(\"match\"!==f.rangemode){var B=u.r2l(f.range[0]),N=u.r2l(f.range[1])-B;l.d2pOppAxis=function(t){return(t-B)/N*l._height}}a.call(g,t,r,l).call(y,t,r,l).call(m,t,r,l).call(x,t,r,l,f).call(b,t,r,l).call(_,t,r,l),function(t,e,r,a){if(!e._context.staticPlot){var s=t.select(\"rect.\"+v.slideBoxClassName).node(),l=t.select(\"rect.\"+v.grabAreaMinClassName).node(),u=t.select(\"rect.\"+v.grabAreaMaxClassName).node();t.on(\"mousedown\",c),t.on(\"touchstart\",c)}function c(){var c=n.event,f=c.target,h=c.clientX||c.touches[0].clientX,v=h-t.node().getBoundingClientRect().left,g=a.d2p(r._rl[0]),y=a.d2p(r._rl[1]),m=p.coverSlip();function x(t){var c,p,x,b=+(t.clientX||t.touches[0].clientX)-h;switch(f){case s:if(x=\"ew-resize\",g+b>r._length||y+b<0)return;c=g+b,p=y+b;break;case l:if(x=\"col-resize\",g+b>r._length)return;c=g+b,p=y;break;case u:if(x=\"col-resize\",y+b<0)return;c=g,p=y+b;break;default:x=\"ew-resize\",c=v,p=v+b}if(p<c){var _=p;p=c,c=_}a._pixelMin=c,a._pixelMax=p,d(n.select(m),x),function(t,e,r,n){function a(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=a(n.p2d(n._pixelMin)),l=a(n.p2d(n._pixelMax));window.requestAnimationFrame((function(){i.call(\"_guiRelayout\",e,r._name+\".range\",[s,l])}))}(0,e,r,a)}function b(){m.removeEventListener(\"mousemove\",x),m.removeEventListener(\"mouseup\",b),this.removeEventListener(\"touchmove\",x),this.removeEventListener(\"touchend\",b),o.removeElement(m)}this.addEventListener(\"touchmove\",x),this.addEventListener(\"touchend\",b),m.addEventListener(\"mousemove\",x),m.addEventListener(\"mouseup\",b)}}(a,t,r,l),function(t,e,r,n,i,a){var l=v.handleWidth/2;function u(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function f(t){return o.constrain(t,-l,n._width+l)}var h=u(n.d2p(r._rl[0])),p=u(n.d2p(r._rl[1]));if(t.select(\"rect.\"+v.slideBoxClassName).attr(\"x\",h).attr(\"width\",p-h),t.select(\"rect.\"+v.maskMinClassName).attr(\"width\",h),t.select(\"rect.\"+v.maskMaxClassName).attr(\"x\",p).attr(\"width\",n._width-p),\"match\"!==a.rangemode){var d=n._height-c(n.d2pOppAxis(i._rl[1])),g=n._height-c(n.d2pOppAxis(i._rl[0]));t.select(\"rect.\"+v.maskMinOppAxisClassName).attr(\"x\",h).attr(\"height\",d).attr(\"width\",p-h),t.select(\"rect.\"+v.maskMaxOppAxisClassName).attr(\"x\",h).attr(\"y\",g).attr(\"height\",n._height-g).attr(\"width\",p-h),t.select(\"rect.\"+v.slideBoxClassName).attr(\"y\",d).attr(\"height\",g-d)}var y=.5,m=Math.round(f(h-l))-y,x=Math.round(f(p-l))+y;t.select(\"g.\"+v.grabberMinClassName).attr(\"transform\",s(m,y)),t.select(\"g.\"+v.grabberMaxClassName).attr(\"transform\",s(x,y))}(a,0,r,l,u,f),\"bottom\"===r.side&&c.draw(t,r._id+\"title\",{propContainer:r,propName:r._name+\".title\",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:E+l._height+l._offsetShift+10+1.5*r.title.font.size,\"text-anchor\":\"middle\"}})})))}},549:function(t,e,r){\"use strict\";var n=r(41675),i=r(63893),a=r(73251),o=r(18783).LINE_SPACING,s=a.name;function l(t){var e=t&&t[s];return e&&e.visible}e.isVisible=l,e.makeData=function(t){var e=n.list({_fullLayout:t},\"x\",!0),r=t.margin,i=[];if(!t._has(\"gl2d\"))for(var a=0;a<e.length;a++){var o=e[a];if(l(o)){i.push(o);var u=o[s];u._id=s+o._id,u._height=(t.height-r.b-r.t)*u.thickness,u._offsetShift=Math.floor(u.borderwidth/2)}}t._rangeSliderData=i},e.autoMarginOpts=function(t,e){var r=t._fullLayout,n=e[s],l=e._id.charAt(0),u=0,c=0;return\"bottom\"===e.side&&(u=e._depth,e.title.text!==r._dfltTitle[l]&&(c=1.5*e.title.font.size+10+n._offsetShift,c+=(e.title.text.match(i.BR_TAG_ALL)||[]).length*e.title.font.size*o)),{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+u+Math.max(r.margin.b,c),pad:a.extraPad+2*n._offsetShift}}},13137:function(t,e,r){\"use strict\";var n=r(71828),i=r(75148),a=r(47850),o=r(549);t.exports={moduleType:\"component\",name:\"rangeslider\",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},i,{yaxis:a})}}},layoutAttributes:r(75148),handleDefaults:r(26377),calcAutorange:r(88443),draw:r(72413),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},47850:function(t){\"use strict\";t.exports={_isSubplotObj:!0,rangemode:{valType:\"enumerated\",values:[\"auto\",\"fixed\",\"match\"],dflt:\"match\",editType:\"calc\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},editType:\"calc\"}},8389:function(t,e,r){\"use strict\";var n=r(50215),i=r(82196).line,a=r(79952).P,o=r(1426).extendFlat,s=r(30962).overrideAll,l=r(44467).templatedArray;r(24695),t.exports=s(l(\"selection\",{type:{valType:\"enumerated\",values:[\"rect\",\"path\"]},xref:o({},n.xref,{}),yref:o({},n.yref,{}),x0:{valType:\"any\"},x1:{valType:\"any\"},y0:{valType:\"any\"},y1:{valType:\"any\"},path:{valType:\"string\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:.7,editType:\"arraydraw\"},line:{color:i.color,width:o({},i.width,{min:1,dflt:1}),dash:o({},a,{dflt:\"dot\"})}}),\"arraydraw\",\"from-root\")},34122:function(t){\"use strict\";t.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:\"-select\"}},59402:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(85501),o=r(8389),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var l=a(\"path\"),u=\"path\"!==a(\"type\",l?\"path\":\"rect\");u&&delete e.path,a(\"opacity\"),a(\"line.color\"),a(\"line.width\"),a(\"line.dash\");for(var c=[\"x\",\"y\"],f=0;f<2;f++){var h,p,d,v=c[f],g={_fullLayout:r},y=i.coerceRef(t,e,g,v);if((h=i.getFromId(g,y))._selectionIndices.push(e._index),d=s.rangeToShapePosition(h),p=s.shapePositionToRange(h),u){var m=v+\"0\",x=v+\"1\",b=t[m],_=t[x];t[m]=p(t[m],!0),t[x]=p(t[x],!0),i.coercePosition(e,g,a,y,m),i.coercePosition(e,g,a,y,x);var w=e[m],T=e[x];void 0!==w&&void 0!==T&&(e[m]=d(w),e[x]=d(T),t[m]=b,t[x]=_)}}u&&n.noneOrAll(t,e,[\"x0\",\"x1\",\"y0\",\"y1\"])}t.exports=function(t,e){a(t,e,{name:\"selections\",handleItemDefaults:l});for(var r=e.selections,n=0;n<r.length;n++){var i=r[n];i&&void 0===i.path&&(void 0!==i.x0&&void 0!==i.x1&&void 0!==i.y0&&void 0!==i.y1||(e.selections[n]=null))}}},32485:function(t,e,r){\"use strict\";var n=r(60165).readPaths,i=r(42359),a=r(51873).clearOutlineControllers,o=r(7901),s=r(91424),l=r(44467).arrayEditor,u=r(30477),c=u.getPathString;function f(t){var e=t._fullLayout;for(var r in a(t),e._selectionLayer.selectAll(\"path\").remove(),e._plots){var n=e._plots[r].selectionLayer;n&&n.selectAll(\"path\").remove()}for(var i=0;i<e.selections.length;i++)p(t,i)}function h(t){return t._context.editSelection}function p(t,e){t._fullLayout._paperdiv.selectAll('.selectionlayer [data-index=\"'+e+'\"]').remove();var r=u.makeSelectionsOptionsAndPlotinfo(t,e),a=r.options,p=r.plotinfo;a._input&&function(r){var u=c(t,a),g={\"data-index\":e,\"fill-rule\":\"evenodd\",d:u},y=a.opacity,m=\"rgba(0,0,0,0)\",x=a.line.color||o.contrast(t._fullLayout.plot_bgcolor),b=a.line.width,_=a.line.dash;b||(b=5,_=\"solid\");var w=h(t)&&t._fullLayout._activeSelectionIndex===e;w&&(m=t._fullLayout.activeselection.fillcolor,y=t._fullLayout.activeselection.opacity);for(var T=[],k=1;k>=0;k--){var A=r.append(\"path\").attr(g).style(\"opacity\",k?.1:y).call(o.stroke,x).call(o.fill,m).call(s.dashLine,k?\"solid\":_,k?4+b:b);if(d(A,t,a),w){var M=l(t.layout,\"selections\",a);A.style({cursor:\"move\"});var S={element:A.node(),plotinfo:p,gd:t,editHelpers:M,isActiveSelection:!0},E=n(u,t);i(E,A,S)}else A.style(\"pointer-events\",k?\"all\":\"none\");T[k]=A}var L=T[0];T[1].node().addEventListener(\"click\",(function(){return function(t,e){if(h(t)){var r=+e.node().getAttribute(\"data-index\");if(r>=0){if(r===t._fullLayout._activeSelectionIndex)return void v(t);t._fullLayout._activeSelectionIndex=r,t._fullLayout._deactivateSelection=v,f(t)}}}(t,L)}))}(t._fullLayout._selectionLayer)}function d(t,e,r){var n=r.xref+r.yref;s.setClipUrl(t,\"clip\"+e._fullLayout._uid+n,e)}function v(t){h(t)&&t._fullLayout._activeSelectionIndex>=0&&(a(t),delete t._fullLayout._activeSelectionIndex,f(t))}t.exports={draw:f,drawOne:p,activateLastSelection:function(t){if(h(t)){var e=t._fullLayout.selections.length-1;t._fullLayout._activeSelectionIndex=e,t._fullLayout._deactivateSelection=v,f(t)}}}},53777:function(t,e,r){\"use strict\";var n=r(79952).P,i=r(1426).extendFlat;t.exports={newselection:{mode:{valType:\"enumerated\",values:[\"immediate\",\"gradual\"],dflt:\"immediate\",editType:\"none\"},line:{color:{valType:\"color\",editType:\"none\"},width:{valType:\"number\",min:1,dflt:1,editType:\"none\"},dash:i({},n,{dflt:\"dot\",editType:\"none\"}),editType:\"none\"},editType:\"none\"},activeselection:{fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"none\"},editType:\"none\"}}},90849:function(t){\"use strict\";t.exports=function(t,e,r){r(\"newselection.mode\"),r(\"newselection.line.width\")&&(r(\"newselection.line.color\"),r(\"newselection.line.dash\")),r(\"activeselection.fillcolor\"),r(\"activeselection.opacity\")}},35855:function(t,e,r){\"use strict\";var n=r(64505).selectMode,i=r(51873).clearOutline,a=r(60165),o=a.readPaths,s=a.writePaths,l=a.fixDatesForPaths;t.exports=function(t,e){if(t.length){var r=t[0][0];if(r){var a=r.getAttribute(\"d\"),u=e.gd,c=u._fullLayout.newselection,f=e.plotinfo,h=f.xaxis,p=f.yaxis,d=e.isActiveSelection,v=e.dragmode,g=(u.layout||{}).selections||[];if(!n(v)&&void 0!==d){var y=u._fullLayout._activeSelectionIndex;if(y<g.length)switch(u._fullLayout.selections[y].type){case\"rect\":v=\"select\";break;case\"path\":v=\"lasso\"}}var m,x=o(a,u,f,d),b={xref:h._id,yref:p._id,opacity:c.opacity,line:{color:c.line.color,width:c.line.width,dash:c.line.dash}};1===x.length&&(m=x[0]),m&&5===m.length&&\"select\"===v?(b.type=\"rect\",b.x0=m[0][1],b.y0=m[0][2],b.x1=m[2][1],b.y1=m[2][2]):(b.type=\"path\",h&&p&&l(x,h,p),b.path=s(x),m=null),i(u);for(var _=e.editHelpers,w=(_||{}).modifyItem,T=[],k=0;k<g.length;k++){var A=u._fullLayout.selections[k];if(A){if(T[k]=A._input,void 0!==d&&k===u._fullLayout._activeSelectionIndex){var M=b;switch(A.type){case\"rect\":w(\"x0\",M.x0),w(\"x1\",M.x1),w(\"y0\",M.y0),w(\"y1\",M.y1);break;case\"path\":w(\"path\",M.path)}}}else T[k]=A}return void 0===d?(T.push(b),T):_?_.getUpdateObj():{}}}}},75549:function(t,e,r){\"use strict\";var n=r(71828).strTranslate;function i(t,e){switch(t.type){case\"log\":return t.p2d(e);case\"date\":return t.p2r(e,0,t.calendar);default:return t.p2r(e)}}t.exports={p2r:i,r2p:function(t,e){switch(t.type){case\"log\":return t.d2p(e);case\"date\":return t.r2p(e,0,t.calendar);default:return t.r2p(e)}},axValue:function(t){var e=\"y\"===t._id.charAt(0)?1:0;return function(r){return i(t,r[e])}},getTransform:function(t){return n(t.xaxis._offset,t.yaxis._offset)}}},47322:function(t,e,r){\"use strict\";var n=r(32485),i=r(3937);t.exports={moduleType:\"component\",name:\"selections\",layoutAttributes:r(8389),supplyLayoutDefaults:r(59402),supplyDrawNewSelectionDefaults:r(90849),includeBasePlot:r(76325)(\"selections\"),draw:n.draw,drawOne:n.drawOne,reselect:i.reselect,prepSelect:i.prepSelect,clearOutline:i.clearOutline,clearSelectionsCache:i.clearSelectionsCache,selectOnClick:i.selectOnClick}},3937:function(t,e,r){\"use strict\";var n=r(52142),i=r(38258),a=r(73972),o=r(91424).dashStyle,s=r(7901),l=r(30211),u=r(23469).makeEventData,c=r(64505),f=c.freeMode,h=c.rectMode,p=c.drawMode,d=c.openMode,v=c.selectMode,g=r(30477),y=r(21459),m=r(42359),x=r(51873).clearOutline,b=r(60165),_=b.handleEllipse,w=b.readPaths,T=r(90551).newShapes,k=r(35855),A=r(32485).activateLastSelection,M=r(71828),S=M.sorterAsc,E=r(61082),L=r(79990),C=r(41675).getFromId,P=r(33306),O=r(61549).redrawReglTraces,I=r(34122),D=I.MINSELECT,z=E.filter,R=E.tester,F=r(75549),B=F.p2r,N=F.axValue,j=F.getTransform;function U(t){return void 0!==t.subplot}function V(t,e,r,n,i,a,o){var s,l,u,c,f,h,p,v,g,y=e._hoverdata,x=e._fullLayout.clickmode.indexOf(\"event\")>-1,b=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(y)){Z(t,e,a);var _=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],i.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===i.hoverOnBox)break;void 0!==i.pointNumber?a=i.pointNumber:void 0!==i.binNumber&&(a=i.binNumber,o=i.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:r}}(y,s=X(e,r,n,i));if(_.pointNumbers.length>0?function(t,e){var r,n,i,a=[];for(i=0;i<t.length;i++)(r=t[i]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i<e.pointNumbers.length;i++)if(n.selectedpoints.indexOf(e.pointNumbers[i])<0)return!1;return!0}return!1}(s,_):function(t){var e,r,n=0;for(r=0;r<t.length;r++)if((e=t[r].cd[0].trace).selectedpoints){if(e.selectedpoints.length>1)return!1;if((n+=e.selectedpoints.length)>1)return!1}return 1===n}(s)&&(h=K(_))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);$(e,s),Y(a),x&&ht(e)}else{for(p=t.shiftKey&&(void 0!==h?h:K(_)),u=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:!!r}}(_.pointNumber,_.searchInfo,p),c=G(a.selectionDefs.concat([u])),g=0;g<s.length;g++)if(f=tt(s[g]._module.selectPoints(s[g],c),s[g]),b.length)for(var w=0;w<f.length;w++)b.push(f[w]);else b=f;if($(e,s,v={points:b}),u&&a&&a.selectionDefs.push(u),o){var T=a.mergedPolygons,k=d(a.dragmode);m(et(T,k),o,a)}x&&ft(e,v)}}}function H(t){return\"pointNumber\"in t&&\"searchInfo\"in t}function q(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,i){var a=t.searchInfo.cd[0].trace._expandedIndex;return i.cd[0].trace._expandedIndex===a&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:!!t.subtract}}function G(t){if(t.length){for(var e=[],r=H(t[0])?0:t[0][0][0],n=r,i=H(t[0])?0:t[0][0][1],a=i,o=0;o<t.length;o++)if(H(t[o]))e.push(q(t[o]));else{var s=R(t[o]);s.subtract=!!t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),i=Math.min(i,s.ymin),a=Math.max(a,s.ymax)}return{xmin:r,xmax:n,ymin:i,ymax:a,pts:[],contains:function(t,r,n,i){for(var a=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,i)&&(a=!e[o].subtract);return a},isRect:!1,degenerate:!1}}}function Z(t,e,r){var n=e._fullLayout,i=r.plotinfo,a=r.dragmode,o=n._lastSelectedSubplot&&n._lastSelectedSubplot===i.id,s=(t.shiftKey||t.altKey)&&!(p(a)&&d(a));o&&s&&i.selection&&i.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=i.selection.selectionDefs,r.mergedPolygons=i.selection.mergedPolygons):s&&i.selection||Y(r),o||(x(e),n._lastSelectedSubplot=i.id)}function Y(t,e){var r=t.dragmode,n=t.plotinfo,i=t.gd;(function(t){return t._fullLayout._activeShapeIndex>=0})(i)&&i._fullLayout._deactivateShape(i),function(t){return t._fullLayout._activeSelectionIndex>=0}(i)&&i._fullLayout._deactivateSelection(i);var o=i._fullLayout._zoomlayer,s=p(r),l=v(r);if(s||l){var u,c,f=o.selectAll(\".select-outline-\"+n.id);f&&i._fullLayout._outlining&&(s&&(u=T(f,t)),u&&a.call(\"_guiRelayout\",i,{shapes:u}),l&&!U(t)&&(c=k(f,t)),c&&(i._fullLayout._noEmitSelectedAtStart=!0,a.call(\"_guiRelayout\",i,{selections:c}).then((function(){e&&A(i)}))),i._fullLayout._outlining=!1)}n.selection={},n.selection.selectionDefs=t.selectionDefs=[],n.selection.mergedPolygons=t.mergedPolygons=[]}function W(t){return t._id}function X(t,e,r,n){if(!t.calcdata)return[];var i,a,o,s=[],l=e.map(W),u=r.map(W);for(o=0;o<t.calcdata.length;o++)if(!0===(a=(i=t.calcdata[o])[0].trace).visible&&a._module&&a._module.selectPoints)if(!U({subplot:n})||a.subplot!==n&&a.geo!==n)if(\"splom\"===a.type){if(a._xaxes[l[0]]&&a._yaxes[u[0]]){var c=J(a._module,i,e[0],r[0]);c.scene=t._fullLayout._splomScenes[a.uid],s.push(c)}}else if(\"sankey\"===a.type){var f=J(a._module,i,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(a.xaxis))continue;if(-1===u.indexOf(a.yaxis))continue;s.push(J(a._module,i,C(t,a.xaxis),C(t,a.yaxis)))}else s.push(J(a._module,i,e[0],r[0]));return s}function J(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}function K(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,i=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function $(t,e,r){var n,i;for(n=0;n<e.length;n++){var o=e[n].cd[0].trace._fullInput,s=t._fullLayout._tracePreGUI[o.uid]||{};void 0===s.selectedpoints&&(s.selectedpoints=o._input.selectedpoints||null)}if(r){var l=r.points||[];for(n=0;n<e.length;n++)(i=e[n].cd[0].trace)._input.selectedpoints=i._fullInput.selectedpoints=[],i._fullInput!==i&&(i.selectedpoints=[]);for(var u=0;u<l.length;u++){var c=l[u],f=c.data,h=c.fullData,p=c.pointIndex,d=c.pointIndices;d?([].push.apply(f.selectedpoints,d),i._fullInput!==i&&[].push.apply(h.selectedpoints,d)):(f.selectedpoints.push(p),i._fullInput!==i&&h.selectedpoints.push(p))}}else for(n=0;n<e.length;n++)delete(i=e[n].cd[0].trace).selectedpoints,delete i._input.selectedpoints,i._fullInput!==i&&delete i._fullInput.selectedpoints;!function(t,e){for(var r=!1,n=0;n<e.length;n++){var i=e[n],o=i.cd;a.traceIs(o[0].trace,\"regl\")&&(r=!0);var s=i._module,l=s.styleOnSelect||s.style;l&&(l(t,o,o[0].node3),o[0].nodeRangePlot3&&l(t,o,o[0].nodeRangePlot3))}r&&(P(t),O(t))}(t,e)}function Q(t,e,r){for(var i=(r?n.difference:n.union)({regions:t},{regions:[e]}).regions.reverse(),a=0;a<i.length;a++){var o=i[a];o.subtract=st(o,i.slice(0,a))}return i}function tt(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,i=0;i<t.length;i++)t[i]=u(t[i],n,r);return t}function et(t,e){for(var r=[],n=0;n<t.length;n++){r[n]=[];for(var i=0;i<t[n].length;i++){r[n][i]=[],r[n][i][0]=i?\"L\":\"M\";for(var a=0;a<t[n][i].length;a++)r[n][i].push(t[n][i][a])}e||r[n].push([\"Z\",r[n][0][1],r[n][0][2]])}return r}function rt(t,e){for(var r,n,i=[],a=[],o=0;o<e.length;o++){var s=e[o];n=s._module.selectPoints(s,t),a.push(n),r=tt(n,s),i=i.concat(r)}return i}function nt(t,e,r,n,i){var a,o,s,l=!!n;i&&(a=i.plotinfo,o=i.xaxes[0]._id,s=i.yaxes[0]._id);var u=[],c=[],f=ot(t),h=t._fullLayout;if(a){var d=h._zoomlayer,g=h.dragmode,y=p(g),m=v(g);if(y||m){var x=C(t,o,\"x\"),b=C(t,s,\"y\");if(x&&b){var _=d.selectAll(\".select-outline-\"+a.id);if(_&&t._fullLayout._outlining&&_.length){for(var T=_[0][0].getAttribute(\"d\"),k=w(T,t,a),A=[],M=0;M<k.length;M++){for(var S=k[M],E=[],L=0;L<S.length;L++)E.push([lt(x,S[L][1]),lt(b,S[L][2])]);E.xref=o,E.yref=s,E.subtract=st(E,A),A.push(E)}f=f.concat(A)}}}}var P=o&&s?[o+s]:h._subplots.cartesian;!function(t){var e=t.calcdata;if(e)for(var r=0;r<e.length;r++){var n=e[r][0].trace,i=t._fullLayout._splomScenes;if(i){var a=i[n.uid];a&&(a.selectBatch=[])}}}(t);for(var O={},I=0;I<P.length;I++){var D=P[I],z=D.indexOf(\"y\"),R=D.slice(0,z),F=D.slice(z),B=o&&s?r:void 0;if(B=at(f,R,F,B)){var N=n;if(!l){var j=C(t,R,\"x\"),U=C(t,F,\"y\");N=X(t,[j],[U],D);for(var V=0;V<N.length;V++){var H=N[V],q=H.cd[0],G=q.trace;if(\"scattergl\"===H._module.name&&!q.t.xpx){var Z=G.x,Y=G.y,W=G._length;q.t.xpx=[],q.t.ypx=[];for(var J=0;J<W;J++)q.t.xpx[J]=j.c2p(Z[J]),q.t.ypx[J]=U.c2p(Y[J])}\"splom\"===H._module.name&&(O[G.uid]||(O[G.uid]=!0))}}var K=rt(B,N);u=u.concat(K),c=c.concat(N)}}var Q={points:u};$(t,c,Q);var tt=h.clickmode.indexOf(\"event\")>-1&&e;if(!a&&e){var et=ot(t,!0);if(et.length){var nt=et[0].xref,pt=et[0].yref;if(nt&&pt){var dt=ut(et);ct([C(t,nt,\"x\"),C(t,pt,\"y\")])(Q,dt)}}t._fullLayout._noEmitSelectedAtStart?t._fullLayout._noEmitSelectedAtStart=!1:tt&&ft(t,Q),h._reselect=!1}if(!a&&h._deselect){var vt=h._deselect;(function(t,e,r){for(var n=0;n<r.length;n++){var i=r[n];if(i.xaxis&&i.xaxis._id===t&&i.yaxis&&i.yaxis._id===e)return!0}return!1})(o=vt.xref,s=vt.yref,c)||it(t,o,s,n),tt&&(Q.points.length?ft(t,Q):ht(t)),h._deselect=!1}return{eventData:Q,selectionTesters:r}}function it(t,e,r,n){n=X(t,[C(t,e,\"x\")],[C(t,r,\"y\")],e+r);for(var i=0;i<n.length;i++){var a=n[i];a._module.selectPoints(a,!1)}$(t,n)}function at(t,e,r,n){for(var i,a=0;a<t.length;a++){var o=t[a];e===o.xref&&r===o.yref&&(i?n=G(i=Q(i,o,!!o.subtract)):(i=[o],n=R(o)))}return n}function ot(t,e){for(var r=[],n=t._fullLayout,i=n.selections,a=i.length,o=0;o<a;o++)if(!e||o===n._activeSelectionIndex){var s=i[o];if(s){var l,u,c,f,h,p=s.xref,d=s.yref,v=C(t,p,\"x\"),m=C(t,d,\"y\");if(\"rect\"===s.type){h=[];var x=lt(v,s.x0),b=lt(v,s.x1),_=lt(m,s.y0),w=lt(m,s.y1);h=[[x,_],[x,w],[b,w],[b,_]],l=Math.min(x,b),u=Math.max(x,b),c=Math.min(_,w),f=Math.max(_,w),h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=!1,h.isRect=!0,r.push(h)}else if(\"path\"===s.type)for(var T=s.path.split(\"Z\"),k=[],A=0;A<T.length;A++){var M=T[A];if(M){M+=\"Z\";var S=g.extractPathCoords(M,y.paramIsX,\"raw\"),E=g.extractPathCoords(M,y.paramIsY,\"raw\");l=1/0,u=-1/0,c=1/0,f=-1/0,h=[];for(var L=0;L<S.length;L++){var P=lt(v,S[L]),O=lt(m,E[L]);h.push([P,O]),l=Math.min(P,l),u=Math.max(P,u),c=Math.min(O,c),f=Math.max(O,f)}h.xmin=l,h.xmax=u,h.ymin=c,h.ymax=f,h.xref=p,h.yref=d,h.subtract=st(h,k),k.push(h),r.push(h)}}}}return r}function st(t,e){for(var r=!1,n=0;n<e.length;n++)for(var a=e[n],o=0;o<t.length;o++)if(i(t[o],a)){r=!r;break}return r}function lt(t,e){return\"date\"===t.type&&(e=e.replace(\"_\",\" \")),\"log\"===t.type?t.c2p(e):t.r2p(e,null,t.calendar)}function ut(t){for(var e=t.length,r=[],n=0;n<e;n++){var i=t[n];r=(r=r.concat(i)).concat([i[0]])}return(a=r).isRect=5===a.length&&a[0][0]===a[4][0]&&a[0][1]===a[4][1]&&a[0][0]===a[1][0]&&a[2][0]===a[3][0]&&a[0][1]===a[3][1]&&a[1][1]===a[2][1]||a[0][1]===a[1][1]&&a[2][1]===a[3][1]&&a[0][0]===a[3][0]&&a[1][0]===a[2][0],a.isRect&&(a.xmin=Math.min(a[0][0],a[2][0]),a.xmax=Math.max(a[0][0],a[2][0]),a.ymin=Math.min(a[0][1],a[2][1]),a.ymax=Math.max(a[0][1],a[2][1])),a;var a}function ct(t){return function(e,r){for(var n,i,a=0;a<t.length;a++){var o=t[a],s=o._id,l=s.charAt(0);if(r.isRect){n||(n={});var u=r[l+\"min\"],c=r[l+\"max\"];void 0!==u&&void 0!==c&&(n[s]=[B(o,u),B(o,c)].sort(S))}else i||(i={}),i[s]=r.map(N(o))}n&&(e.range=n),i&&(e.lassoPoints=i)}}function ft(t,e){e&&(e.selections=(t.layout||{}).selections||[]),t.emit(\"plotly_selected\",e)}function ht(t){t.emit(\"plotly_deselect\",null)}t.exports={reselect:nt,prepSelect:function(t,e,r,n,i){var u=!U(n),c=f(i),g=h(i),y=d(i),x=p(i),b=v(i),w=\"drawcircle\"===i,T=\"drawline\"===i||w,k=n.gd,A=k._fullLayout,S=b&&\"immediate\"===A.newselection.mode&&u,E=A._zoomlayer,C=n.element.getBoundingClientRect(),P=n.plotinfo,O=j(P),F=e-C.left,B=r-C.top;A._calcInverseTransform(k);var N=M.apply3DTransform(A._invTransform)(F,B);F=N[0],B=N[1];var H,q,W,J,K,tt,at,ot=A._invScaleX,st=A._invScaleY,lt=F,pt=B,dt=\"M\"+F+\",\"+B,vt=n.xaxes[0],gt=n.yaxes[0],yt=vt._length,mt=gt._length,xt=t.altKey&&!(p(i)&&y);Z(t,k,n),c&&(H=z([[F,B]],I.BENDPX));var bt=E.selectAll(\"path.select-outline-\"+P.id).data([1]),_t=x?A.newshape:A.newselection;x&&(n.hasText=_t.label.text||_t.label.texttemplate);var wt=x&&!y?_t.fillcolor:\"rgba(0,0,0,0)\",Tt=_t.line.color||(u?s.contrast(k._fullLayout.plot_bgcolor):\"#7f7f7f\");bt.enter().append(\"path\").attr(\"class\",\"select-outline select-outline-\"+P.id).style({opacity:x?_t.opacity/2:1,\"stroke-dasharray\":o(_t.line.dash,_t.line.width),\"stroke-width\":_t.line.width+\"px\",\"shape-rendering\":\"crispEdges\"}).call(s.stroke,Tt).call(s.fill,wt).attr(\"fill-rule\",\"evenodd\").classed(\"cursor-move\",!!x).attr(\"transform\",O).attr(\"d\",dt+\"Z\");var kt=E.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:s.background,stroke:s.defaultLine,\"stroke-width\":1}).attr(\"transform\",O).attr(\"d\",\"M0,0Z\");if(x&&n.hasText){var At=E.select(\".label-temp\");At.empty()&&(At=E.append(\"g\").classed(\"label-temp\",!0).classed(\"select-outline\",!0).style({opacity:.8}))}var Mt=A._uid+I.SELECTID,St=[],Et=X(k,n.xaxes,n.yaxes,n.subplot);S&&!t.shiftKey&&(n._clearSubplotSelections=function(){if(u){var t=vt._id,e=gt._id;it(k,t,e,Et);for(var r=(k.layout||{}).selections||[],n=[],i=!1,o=0;o<r.length;o++){var s=A.selections[o];s.xref!==t||s.yref!==e?n.push(r[o]):i=!0}i&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call(\"_guiRelayout\",k,{selections:n}))}});var Lt=function(t){return t.plotinfo.fillRangeItems||ct(t.xaxes.concat(t.yaxes))}(n);n.moveFn=function(t,e){n._clearSubplotSelections&&(n._clearSubplotSelections(),n._clearSubplotSelections=void 0),lt=Math.max(0,Math.min(yt,ot*t+F)),pt=Math.max(0,Math.min(mt,st*e+B));var r=Math.abs(lt-F),i=Math.abs(pt-B);if(g){var a,o,s;if(b){var l=A.selectdirection;switch(a=\"any\"===l?i<Math.min(.6*r,D)?\"h\":r<Math.min(.6*i,D)?\"v\":\"d\":l){case\"h\":o=w?mt/2:0,s=mt;break;case\"v\":o=w?yt/2:0,s=yt}}if(x)switch(A.newshape.drawdirection){case\"vertical\":a=\"h\",o=w?mt/2:0,s=mt;break;case\"horizontal\":a=\"v\",o=w?yt/2:0,s=yt;break;case\"ortho\":r<i?(a=\"h\",o=B,s=pt):(a=\"v\",o=F,s=lt);break;default:a=\"d\"}\"h\"===a?((J=T?_(w,[lt,o],[lt,s]):[[F,o],[F,s],[lt,s],[lt,o]]).xmin=T?lt:Math.min(F,lt),J.xmax=T?lt:Math.max(F,lt),J.ymin=Math.min(o,s),J.ymax=Math.max(o,s),kt.attr(\"d\",\"M\"+J.xmin+\",\"+(B-D)+\"h-4v\"+2*D+\"h4ZM\"+(J.xmax-1)+\",\"+(B-D)+\"h4v\"+2*D+\"h-4Z\")):\"v\"===a?((J=T?_(w,[o,pt],[s,pt]):[[o,B],[o,pt],[s,pt],[s,B]]).xmin=Math.min(o,s),J.xmax=Math.max(o,s),J.ymin=T?pt:Math.min(B,pt),J.ymax=T?pt:Math.max(B,pt),kt.attr(\"d\",\"M\"+(F-D)+\",\"+J.ymin+\"v-4h\"+2*D+\"v4ZM\"+(F-D)+\",\"+(J.ymax-1)+\"v4h\"+2*D+\"v-4Z\")):\"d\"===a&&((J=T?_(w,[F,B],[lt,pt]):[[F,B],[F,pt],[lt,pt],[lt,B]]).xmin=Math.min(F,lt),J.xmax=Math.max(F,lt),J.ymin=Math.min(B,pt),J.ymax=Math.max(B,pt),kt.attr(\"d\",\"M0,0Z\"))}else c&&(H.addPt([lt,pt]),J=H.filtered);if(n.selectionDefs&&n.selectionDefs.length?(W=Q(n.mergedPolygons,J,xt),J.subtract=xt,q=G(n.selectionDefs.concat([J]))):(W=[J],q=R(J)),m(et(W,y),bt,n),b){var u,f=nt(k,!1),h=f.eventData?f.eventData.points.slice():[];f=nt(k,!1,q,Et,n),q=f.selectionTesters,at=f.eventData,u=H?H.filtered:ut(W),L.throttle(Mt,I.SELECTDELAY,(function(){for(var t=(St=rt(q,Et)).slice(),e=0;e<h.length;e++){for(var r=h[e],n=!1,i=0;i<t.length;i++)if(t[i].curveNumber===r.curveNumber&&t[i].pointNumber===r.pointNumber){n=!0;break}n||t.push(r)}t.length&&(at||(at={}),at.points=t),Lt(at,u),function(t,e){t.emit(\"plotly_selecting\",e)}(k,at)}))}},n.clickFn=function(t,e){if(kt.remove(),k._fullLayout._activeShapeIndex>=0)k._fullLayout._deactivateShape(k);else if(!x){var r=A.clickmode;L.done(Mt).then((function(){if(L.clear(Mt),2===t){for(bt.remove(),K=0;K<Et.length;K++)(tt=Et[K])._module.selectPoints(tt,!1);if($(k,Et),Y(n),ht(k),Et.length){var i=Et[0].xaxis,o=Et[0].yaxis;if(i&&o){for(var s=[],u=k._fullLayout.selections,c=0;c<u.length;c++){var f=u[c];f&&(f.xref===i._id&&f.yref===o._id||s.push(f))}s.length<u.length&&(k._fullLayout._noEmitSelectedAtStart=!0,a.call(\"_guiRelayout\",k,{selections:s}))}}}else r.indexOf(\"select\")>-1&&V(e,k,n.xaxes,n.yaxes,n.subplot,n,bt),\"event\"===r&&ft(k,void 0);l.click(k,e,P.id)})).catch(M.error)}},n.doneFn=function(){kt.remove(),L.done(Mt).then((function(){L.clear(Mt),!S&&J&&n.selectionDefs&&(J.subtract=xt,n.selectionDefs.push(J),n.mergedPolygons.length=0,[].push.apply(n.mergedPolygons,W)),(S||x)&&Y(n,S),n.doneFnCompleted&&n.doneFnCompleted(St),b&&ft(k,at)})).catch(M.error)}},clearOutline:x,clearSelectionsCache:Y,selectOnClick:V}},89827:function(t,e,r){\"use strict\";var n=r(50215),i=r(41940),a=r(82196).line,o=r(79952).P,s=r(1426).extendFlat,l=r(44467).templatedArray,u=(r(24695),r(9012)),c=r(5386).R,f=r(37281);t.exports=l(\"shape\",{visible:s({},u.visible,{editType:\"calc+arraydraw\"}),showlegend:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},legend:s({},u.legend,{editType:\"calc+arraydraw\"}),legendgroup:s({},u.legendgroup,{editType:\"calc+arraydraw\"}),legendgrouptitle:{text:s({},u.legendgrouptitle.text,{editType:\"calc+arraydraw\"}),font:i({editType:\"calc+arraydraw\"}),editType:\"calc+arraydraw\"},legendrank:s({},u.legendrank,{editType:\"calc+arraydraw\"}),legendwidth:s({},u.legendwidth,{editType:\"calc+arraydraw\"}),type:{valType:\"enumerated\",values:[\"circle\",\"rect\",\"path\",\"line\"],editType:\"calc+arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},xref:s({},n.xref,{}),xsizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},xanchor:{valType:\"any\",editType:\"calc+arraydraw\"},x0:{valType:\"any\",editType:\"calc+arraydraw\"},x1:{valType:\"any\",editType:\"calc+arraydraw\"},yref:s({},n.yref,{}),ysizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},yanchor:{valType:\"any\",editType:\"calc+arraydraw\"},y0:{valType:\"any\",editType:\"calc+arraydraw\"},y1:{valType:\"any\",editType:\"calc+arraydraw\"},path:{valType:\"string\",editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},line:{color:s({},a.color,{editType:\"arraydraw\"}),width:s({},a.width,{editType:\"calc+arraydraw\"}),dash:s({},o,{editType:\"arraydraw\"}),editType:\"calc+arraydraw\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"arraydraw\"},editable:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},label:{text:{valType:\"string\",dflt:\"\",editType:\"arraydraw\"},texttemplate:c({},{keys:Object.keys(f)}),font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\",\"start\",\"middle\",\"end\"],editType:\"arraydraw\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],editType:\"calc+arraydraw\"},padding:{valType:\"number\",dflt:3,min:0,editType:\"arraydraw\"},editType:\"arraydraw\"},editType:\"arraydraw\"})},5627:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(21459),o=r(30477);function s(t){return u(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return u(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function u(t,e,r,i,s,l){var u=t/2,c=l;if(\"pixel\"===e){var f=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],h=n.aggNums(Math.max,null,f),p=n.aggNums(Math.min,null,f),d=p<0?Math.abs(p)+u:u,v=h>0?h+u:u;return{ppad:u,ppadplus:c?d:v,ppadminus:c?v:d}}return{ppad:u}}function c(t,e,r,n,i){var s=\"category\"===t.type||\"multicategory\"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,u,c,f,h=1/0,p=-1/0,d=n.match(a.segmentRE);for(\"date\"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(u=i[d[l].charAt(0)].drawn)&&(!(c=d[l].substr(1).match(a.paramRE))||c.length<u||((f=s(c[u]))<h&&(h=f),f>p&&(p=f)));return p>=h?[h,p]:void 0}}t.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var u,f,h=r[o];h._extremes={};var p=i.getRefType(h.xref),d=i.getRefType(h.yref);if(\"paper\"!==h.xref&&\"domain\"!==p){var v=\"pixel\"===h.xsizemode?h.xanchor:h.x0,g=\"pixel\"===h.xsizemode?h.xanchor:h.x1;(f=c(u=i.getFromId(t,h.xref),v,g,h.path,a.paramIsX))&&(h._extremes[u._id]=i.findExtremes(u,f,s(h)))}if(\"paper\"!==h.yref&&\"domain\"!==d){var y=\"pixel\"===h.ysizemode?h.yanchor:h.y0,m=\"pixel\"===h.ysizemode?h.yanchor:h.y1;(f=c(u=i.getFromId(t,h.yref),y,m,h.path,a.paramIsY))&&(h._extremes[u._id]=i.findExtremes(u,f,l(h)))}}}},21459:function(t){\"use strict\";t.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},84726:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(85501),o=r(89827),s=r(30477);function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}if(e._isShape=!0,a(\"visible\")){a(\"showlegend\")&&(a(\"legend\"),a(\"legendwidth\"),a(\"legendgroup\"),a(\"legendgrouptitle.text\"),n.coerceFont(a,\"legendgrouptitle.font\"),a(\"legendrank\"));var l=a(\"path\"),u=a(\"type\",l?\"path\":\"rect\"),c=\"path\"!==u;c&&delete e.path,a(\"editable\"),a(\"layer\"),a(\"opacity\"),a(\"fillcolor\"),a(\"fillrule\"),a(\"line.width\")&&(a(\"line.color\"),a(\"line.dash\"));for(var f=a(\"xsizemode\"),h=a(\"ysizemode\"),p=[\"x\",\"y\"],d=0;d<2;d++){var v,g,y,m=p[d],x=m+\"anchor\",b=\"x\"===m?f:h,_={_fullLayout:r},w=i.coerceRef(t,e,_,m,void 0,\"paper\");if(\"range\"===i.getRefType(w)?((v=i.getFromId(_,w))._shapeIndices.push(e._index),y=s.rangeToShapePosition(v),g=s.shapePositionToRange(v)):g=y=n.identity,c){var T=m+\"0\",k=m+\"1\",A=t[T],M=t[k];t[T]=g(t[T],!0),t[k]=g(t[k],!0),\"pixel\"===b?(a(T,0),a(k,10)):(i.coercePosition(e,_,a,w,T,.25),i.coercePosition(e,_,a,w,k,.75)),e[T]=y(e[T]),e[k]=y(e[k]),t[T]=A,t[k]=M}if(\"pixel\"===b){var S=t[x];t[x]=g(t[x],!0),i.coercePosition(e,_,a,w,x,.25),e[x]=y(e[x]),t[x]=S}}c&&n.noneOrAll(t,e,[\"x0\",\"x1\",\"y0\",\"y1\"]);var E,L,C=\"line\"===u;if(c&&(E=a(\"label.texttemplate\")),E||(L=a(\"label.text\")),L||E){a(\"label.textangle\");var P=a(\"label.textposition\",C?\"middle\":\"middle center\");a(\"label.xanchor\"),a(\"label.yanchor\",function(t,e){return t?\"bottom\":-1!==e.indexOf(\"top\")?\"top\":-1!==e.indexOf(\"bottom\")?\"bottom\":\"middle\"}(C,P)),a(\"label.padding\"),n.coerceFont(a,\"label.font\",r.font)}}}t.exports=function(t,e){a(t,e,{name:\"shapes\",handleItemDefaults:l})}},48100:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(63893),o=r(91424),s=r(60165).readPaths,l=r(30477),u=l.getPathString,c=r(37281),f=r(18783).FROM_TL;t.exports=function(t,e,r,h){if(h.selectAll(\".shape-label\").remove(),r.label.text||r.label.texttemplate){var p;if(r.label.texttemplate){var d={};if(\"path\"!==r.type){var v=i.getFromId(t,r.xref),g=i.getFromId(t,r.yref);for(var y in c){var m=c[y](r,v,g);void 0!==m&&(d[y]=m)}}p=n.texttemplateStringForShapes(r.label.texttemplate,{},t._fullLayout._d3locale,d)}else p=r.label.text;var x,b,_,w,T={\"data-index\":e},k=r.label.font,A=h.append(\"g\").attr(T).classed(\"shape-label\",!0).append(\"text\").attr({\"data-notex\":1}).classed(\"shape-label-text\",!0).text(p);if(r.path){var M=u(t,r),S=s(M,t);x=1/0,_=1/0,b=-1/0,w=-1/0;for(var E=0;E<S.length;E++)for(var L=0;L<S[E].length;L++)for(var C=S[E][L],P=1;P<C.length;P+=2){var O=C[P],I=C[P+1];x=Math.min(x,O),b=Math.max(b,O),_=Math.min(_,I),w=Math.max(w,I)}}else{var D=i.getFromId(t,r.xref),z=i.getRefType(r.xref),R=i.getFromId(t,r.yref),F=i.getRefType(r.yref),B=l.getDataToPixel(t,D,!1,z),N=l.getDataToPixel(t,R,!0,F);x=B(r.x0),b=B(r.x1),_=N(r.y0),w=N(r.y1)}var j=r.label.textangle;\"auto\"===j&&(j=\"line\"===r.type?function(t,e,r,n){var i,a;return a=Math.abs(r-t),i=r>=t?e-n:n-e,-180/Math.PI*Math.atan2(i,a)}(x,_,b,w):0),A.call((function(e){return e.call(o.font,k).attr({}),a.convertToTspans(e,t),e}));var U=function(t,e,r,n,i,a,o){var s,l,u,c,h=i.label.textposition,p=i.label.textangle,d=i.label.padding,v=i.type,g=Math.PI/180*a,y=Math.sin(g),m=Math.cos(g),x=i.label.xanchor,b=i.label.yanchor;if(\"line\"===v){\"start\"===h?(s=t,l=e):\"end\"===h?(s=r,l=n):(s=(t+r)/2,l=(e+n)/2),\"auto\"===x&&(x=\"start\"===h?\"auto\"===p?r>t?\"left\":r<t?\"right\":\"center\":r>t?\"right\":r<t?\"left\":\"center\":\"end\"===h?\"auto\"===p?r>t?\"right\":r<t?\"left\":\"center\":r>t?\"left\":r<t?\"right\":\"center\":\"center\");var _={bottom:-1,middle:0,top:1};if(\"auto\"===p){var w=_[b];u=-d*y*w,c=d*m*w}else u=d*{left:1,center:0,right:-1}[x],c=d*_[b];s+=u,l+=c}else u=d+3,-1!==h.indexOf(\"right\")?(s=Math.max(t,r)-u,\"auto\"===x&&(x=\"right\")):-1!==h.indexOf(\"left\")?(s=Math.min(t,r)+u,\"auto\"===x&&(x=\"left\")):(s=(t+r)/2,\"auto\"===x&&(x=\"center\")),l=-1!==h.indexOf(\"top\")?Math.min(e,n):-1!==h.indexOf(\"bottom\")?Math.max(e,n):(e+n)/2,c=d,\"bottom\"===b?l-=c:\"top\"===b&&(l+=c);var T=f[b],k=i.label.font.size,A=o.height;return{textx:s+(A*T-k)*y,texty:l+-(A*T-k)*m,xanchor:x}}(x,_,b,w,r,j,o.bBox(A.node())),V=U.textx,H=U.texty,q=U.xanchor;A.attr({\"text-anchor\":{left:\"start\",center:\"middle\",right:\"end\"}[q],y:H,x:V,transform:\"rotate(\"+j+\",\"+V+\",\"+H+\")\"}).call(a.positionText,V,H)}}},42359:function(t,e,r){\"use strict\";var n=r(71828).strTranslate,i=r(28569),a=r(64505),o=a.drawMode,s=a.selectMode,l=r(73972),u=r(7901),c=r(89995),f=c.i000,h=c.i090,p=c.i180,d=c.i270,v=r(51873).clearOutlineControllers,g=r(60165),y=g.pointsOnRectangle,m=g.pointsOnEllipse,x=g.writePaths,b=r(90551).newShapes,_=r(90551).createShapeObj,w=r(35855),T=r(48100);function k(t,e){var r,n,i,a=t[e][1],o=t[e][2],s=t.length;return n=t[r=(e+1)%s][1],i=t[r][2],n===a&&i===o&&(n=t[r=(e+2)%s][1],i=t[r][2]),[r,n,i]}t.exports=function t(e,r,a,c){c||(c=0);var g=a.gd;function A(){t(e,r,a,c++),(m(e[0])||a.hasText)&&M({redrawing:!0})}function M(t){var e={};void 0!==a.isActiveShape&&(a.isActiveShape=!1,e=b(r,a)),void 0!==a.isActiveSelection&&(a.isActiveSelection=!1,e=w(r,a),g._fullLayout._reselect=!0),Object.keys(e).length&&l.call((t||{}).redrawing?\"relayout\":\"_guiRelayout\",g,e)}var S,E,L,C,P,O=g._fullLayout._zoomlayer,I=a.dragmode,D=o(I),z=s(I);if((D||z)&&(g._fullLayout._outlining=!0),v(g),r.attr(\"d\",x(e)),c||!a.isActiveShape&&!a.isActiveSelection||(P=function(t,e){for(var r=0;r<e.length;r++){var n=e[r];t[r]=[];for(var i=0;i<n.length;i++){t[r][i]=[];for(var a=0;a<n[i].length;a++)t[r][i][a]=n[i][a]}}return t}([],e),function(t){S=[];for(var r=0;r<e.length;r++){var o=e[r],s=y(o),l=!s&&m(o);S[r]=[];for(var c=o.length,v=0;v<c;v++)if(\"Z\"!==o[v][0]&&(!l||v===f||v===h||v===p||v===d)){var x,b=s&&a.isActiveSelection;b&&(x=k(o,v));var _=o[v][1],w=o[v][2],T=t.append(b?\"rect\":\"circle\").attr(\"data-i\",r).attr(\"data-j\",v).style({fill:u.background,stroke:u.defaultLine,\"stroke-width\":1,\"shape-rendering\":\"crispEdges\"});if(b){var A=x[1]-_,M=x[2]-w,E=M?5:Math.max(Math.min(25,Math.abs(A)-5),5),L=A?5:Math.max(Math.min(25,Math.abs(M)-5),5);T.classed(M?\"cursor-ew-resize\":\"cursor-ns-resize\",!0).attr(\"width\",E).attr(\"height\",L).attr(\"x\",_-E/2).attr(\"y\",w-L/2).attr(\"transform\",n(A/2,M/2))}else T.classed(\"cursor-grab\",!0).attr(\"r\",5).attr(\"cx\",_).attr(\"cy\",w);S[r][v]={element:T.node(),gd:g,prepFn:B,doneFn:j,clickFn:U},i.init(S[r][v])}}}(O.append(\"g\").attr(\"class\",\"outline-controllers\")),function(){if(E=[],e.length){E[0]={element:r[0][0],gd:g,prepFn:H,doneFn:q,clickFn:G},i.init(E[0])}}()),D&&a.hasText){var R=O.select(\".label-temp\"),F=_(r,a,a.dragmode);T(g,\"label-temp\",F,R)}function B(t){L=+t.srcElement.getAttribute(\"data-i\"),C=+t.srcElement.getAttribute(\"data-j\"),S[L][C].moveFn=N}function N(t,r){if(e.length){var n=P[L][C][1],i=P[L][C][2],o=e[L],s=o.length;if(y(o)){var l=t,u=r;a.isActiveSelection&&(k(o,C)[1]===o[C][1]?u=0:l=0);for(var c=0;c<s;c++)if(c!==C){var f=o[c];f[1]===o[C][1]&&(f[1]=n+l),f[2]===o[C][2]&&(f[2]=i+u)}if(o[C][1]=n+l,o[C][2]=i+u,!y(o))for(var h=0;h<s;h++)for(var p=0;p<o[h].length;p++)o[h][p]=P[L][h][p]}else o[C][1]=n+t,o[C][2]=i+r;A()}}function j(){M()}function U(t,r){if(2===t){L=+r.srcElement.getAttribute(\"data-i\"),C=+r.srcElement.getAttribute(\"data-j\");var n=e[L];y(n)||m(n)||function(){if(e.length&&e[L]&&e[L].length){for(var t=[],r=0;r<e[L].length;r++)r!==C&&t.push(e[L][r]);t.length>1&&(2!==t.length||\"Z\"!==t[1][0])&&(0===C&&(t[0][0]=\"M\"),e[L]=t,A(),M())}}()}}function V(t,r){!function(t,r){if(e.length)for(var n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)for(var a=0;a+2<e[n][i].length;a+=2)e[n][i][a+1]=P[n][i][a+1]+t,e[n][i][a+2]=P[n][i][a+2]+r}(t,r),A()}function H(t){(L=+t.srcElement.getAttribute(\"data-i\"))||(L=0),E[L].moveFn=V}function q(){M()}function G(t){2===t&&function(t){if(s(t._fullLayout.dragmode)){v(t);var e=t._fullLayout._activeSelectionIndex,r=(t.layout||{}).selections||[];if(e<r.length){for(var n=[],i=0;i<r.length;i++)i!==e&&n.push(r[i]);delete t._fullLayout._activeSelectionIndex;var a=t._fullLayout.selections[e];t._fullLayout._deselect={xref:a.xref,yref:a.yref},l.call(\"_guiRelayout\",t,{selections:n})}}}(g)}}},34031:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(71828),o=r(89298),s=r(60165).readPaths,l=r(42359),u=r(48100),c=r(51873).clearOutlineControllers,f=r(7901),h=r(91424),p=r(44467).arrayEditor,d=r(28569),v=r(6964),g=r(21459),y=r(30477),m=y.getPathString;function x(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll(\"path\").remove(),e._shapeLowerLayer.selectAll(\"path\").remove(),e._shapeUpperLayer.selectAll(\"text\").remove(),e._shapeLowerLayer.selectAll(\"text\").remove(),e._plots){var n=e._plots[r].shapelayer;n&&(n.selectAll(\"path\").remove(),n.selectAll(\"text\").remove())}for(var i=0;i<e.shapes.length;i++)!0===e.shapes[i].visible&&w(t,i)}function b(t){return!!t._fullLayout._outlining}function _(t){return!t._context.edits.shapePosition}function w(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index=\"'+e+'\"]').remove();var r=y.makeShapesOptionsAndPlotinfo(t,e),c=r.options,w=r.plotinfo;function M(r){var M=m(t,c),S={\"data-index\":e,\"fill-rule\":c.fillrule,d:M},E=c.opacity,L=c.fillcolor,C=c.line.width?c.line.color:\"rgba(0,0,0,0)\",P=c.line.width,O=c.line.dash;P||!0!==c.editable||(P=5,O=\"solid\");var I=\"Z\"!==M[M.length-1],D=_(t)&&c.editable&&t._fullLayout._activeShapeIndex===e;D&&(L=I?\"rgba(0,0,0,0)\":t._fullLayout.activeshape.fillcolor,E=t._fullLayout.activeshape.opacity);var z,R=r.append(\"g\").classed(\"shape-group\",!0).attr({\"data-index\":e}),F=R.append(\"path\").attr(S).style(\"opacity\",E).call(f.stroke,C).call(f.fill,L).call(h.dashLine,O,P);if(T(R,t,c),u(t,e,c,R),(D||t._context.edits.shapePosition)&&(z=p(t.layout,\"shapes\",c)),D){F.style({cursor:\"move\"});var B={element:F.node(),plotinfo:w,gd:t,editHelpers:z,hasText:c.label.text||c.label.texttemplate,isActiveShape:!0},N=s(M,t);l(N,F,B)}else t._context.edits.shapePosition?function(t,e,r,s,l,c){var f,p,x,_,w,A,M,S,E,L,C,P,O,I,D,z,R=10,F=10,B=\"pixel\"===r.xsizemode,N=\"pixel\"===r.ysizemode,j=\"line\"===r.type,U=\"path\"===r.type,V=c.modifyItem,H=n.select(e.node().parentNode),q=o.getFromId(t,r.xref),G=o.getRefType(r.xref),Z=o.getFromId(t,r.yref),Y=o.getRefType(r.yref),W=y.getDataToPixel(t,q,!1,G),X=y.getDataToPixel(t,Z,!0,Y),J=y.getPixelToData(t,q,!1,G),K=y.getPixelToData(t,Z,!0,Y),$=j?function(){var t=10,n=Math.max(r.line.width,t),i=l.append(\"g\").attr(\"data-index\",s).attr(\"drag-helper\",!0);i.append(\"path\").attr(\"d\",e.attr(\"d\")).style({cursor:\"move\",\"stroke-width\":n,\"stroke-opacity\":\"0\"});var a={\"fill-opacity\":\"0\"},o=Math.max(n/2,t);return i.append(\"circle\").attr({\"data-line-point\":\"start-point\",cx:B?W(r.xanchor)+r.x0:W(r.x0),cy:N?X(r.yanchor)-r.y0:X(r.y0),r:o}).style(a).classed(\"cursor-grab\",!0),i.append(\"circle\").attr({\"data-line-point\":\"end-point\",cx:B?W(r.xanchor)+r.x1:W(r.x1),cy:N?X(r.yanchor)-r.y1:X(r.y1),r:o}).style(a).classed(\"cursor-grab\",!0),i}():e,Q={element:$.node(),gd:t,prepFn:function(n){b(t)||(B&&(w=W(r.xanchor)),N&&(A=X(r.yanchor)),\"path\"===r.type?D=r.path:(f=B?r.x0:W(r.x0),p=N?r.y0:X(r.y0),x=B?r.x1:W(r.x1),_=N?r.y1:X(r.y1)),f<x?(E=f,O=\"x0\",L=x,I=\"x1\"):(E=x,O=\"x1\",L=f,I=\"x0\"),!N&&p<_||N&&p>_?(M=p,C=\"y0\",S=_,P=\"y1\"):(M=_,C=\"y1\",S=p,P=\"y0\"),tt(n),nt(l,r),function(t,e,r){var n=e.xref,i=e.yref,a=o.getFromId(r,n),s=o.getFromId(r,i),l=\"\";\"paper\"===n||a.autorange||(l+=n),\"paper\"===i||s.autorange||(l+=i),h.setClipUrl(t,l?\"clip\"+r._fullLayout._uid+l:null,r)}(e,r,t),Q.moveFn=\"move\"===z?et:rt,Q.altKey=n.altKey)},doneFn:function(){b(t)||(v(e),it(l),T(e,t,r),i.call(\"_guiRelayout\",t,c.getUpdateObj()))},clickFn:function(){b(t)||it(l)}};function tt(r){if(b(t))z=null;else if(j)z=\"path\"===r.target.tagName?\"move\":\"start-point\"===r.target.attributes[\"data-line-point\"].value?\"resize-over-start-point\":\"resize-over-end-point\";else{var n=Q.element.getBoundingClientRect(),i=n.right-n.left,a=n.bottom-n.top,o=r.clientX-n.left,s=r.clientY-n.top,l=!U&&i>R&&a>F&&!r.shiftKey?d.getCursor(o/i,1-s/a):\"move\";v(e,l),z=l.split(\"-\")[0]}}function et(n,i){if(\"path\"===r.type){var a=function(t){return t},o=a,c=a;B?V(\"xanchor\",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&\"date\"===q.type&&(o=y.encodeDate(o))),N?V(\"yanchor\",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&\"date\"===Z.type&&(c=y.encodeDate(c))),V(\"path\",r.path=k(D,o,c))}else B?V(\"xanchor\",r.xanchor=J(w+n)):(V(\"x0\",r.x0=J(f+n)),V(\"x1\",r.x1=J(x+n))),N?V(\"yanchor\",r.yanchor=K(A+i)):(V(\"y0\",r.y0=K(p+i)),V(\"y1\",r.y1=K(_+i)));e.attr(\"d\",m(t,r)),nt(l,r),u(t,s,r,H)}function rt(n,i){if(U){var a=function(t){return t},o=a,c=a;B?V(\"xanchor\",r.xanchor=J(w+n)):(o=function(t){return J(W(t)+n)},q&&\"date\"===q.type&&(o=y.encodeDate(o))),N?V(\"yanchor\",r.yanchor=K(A+i)):(c=function(t){return K(X(t)+i)},Z&&\"date\"===Z.type&&(c=y.encodeDate(c))),V(\"path\",r.path=k(D,o,c))}else if(j){if(\"resize-over-start-point\"===z){var h=f+n,d=N?p-i:p+i;V(\"x0\",r.x0=B?h:J(h)),V(\"y0\",r.y0=N?d:K(d))}else if(\"resize-over-end-point\"===z){var v=x+n,g=N?_-i:_+i;V(\"x1\",r.x1=B?v:J(v)),V(\"y1\",r.y1=N?g:K(g))}}else{var b=function(t){return-1!==z.indexOf(t)},T=b(\"n\"),G=b(\"s\"),Y=b(\"w\"),$=b(\"e\"),Q=T?M+i:M,tt=G?S+i:S,et=Y?E+n:E,rt=$?L+n:L;N&&(T&&(Q=M-i),G&&(tt=S-i)),(!N&&tt-Q>F||N&&Q-tt>F)&&(V(C,r[C]=N?Q:K(Q)),V(P,r[P]=N?tt:K(tt))),rt-et>R&&(V(O,r[O]=B?et:J(et)),V(I,r[I]=B?rt:J(rt)))}e.attr(\"d\",m(t,r)),nt(l,r),u(t,s,r,H)}function nt(t,e){(B||N)&&function(){var r=\"path\"!==e.type,n=t.selectAll(\".visual-cue\").data([0]);n.enter().append(\"path\").attr({fill:\"#fff\",\"fill-rule\":\"evenodd\",stroke:\"#000\",\"stroke-width\":1}).classed(\"visual-cue\",!0);var i=W(B?e.xanchor:a.midRange(r?[e.x0,e.x1]:y.extractPathCoords(e.path,g.paramIsX))),o=X(N?e.yanchor:a.midRange(r?[e.y0,e.y1]:y.extractPathCoords(e.path,g.paramIsY)));if(i=y.roundPositionForSharpStrokeRendering(i,1),o=y.roundPositionForSharpStrokeRendering(o,1),B&&N){var s=\"M\"+(i-1-1)+\",\"+(o-1-1)+\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\";n.attr(\"d\",s)}else if(B){var l=\"M\"+(i-1-1)+\",\"+(o-9-1)+\"v18 h2 v-18 Z\";n.attr(\"d\",l)}else{var u=\"M\"+(i-9-1)+\",\"+(o-1-1)+\"h18 v2 h-18 Z\";n.attr(\"d\",u)}}()}function it(t){t.selectAll(\".visual-cue\").remove()}d.init(Q),$.node().onmousemove=tt}(t,F,c,e,r,z):!0===c.editable&&F.style(\"pointer-events\",I||f.opacity(L)*E<=.5?\"stroke\":\"all\");F.node().addEventListener(\"click\",(function(){return function(t,e){if(_(t)){var r=+e.node().getAttribute(\"data-index\");if(r>=0){if(r===t._fullLayout._activeShapeIndex)return void A(t);t._fullLayout._activeShapeIndex=r,t._fullLayout._deactivateShape=A,x(t)}}}(t,F)}))}c._input&&!0===c.visible&&(\"below\"!==c.layer?M(t._fullLayout._shapeUpperLayer):\"paper\"===c.xref||\"paper\"===c.yref?M(t._fullLayout._shapeLowerLayer):w._hadPlotinfo?M((w.mainplotinfo||w).shapelayer):M(t._fullLayout._shapeLowerLayer))}function T(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,\"\").replace(/[xyz][1-9]* *domain/g,\"\");h.setClipUrl(t,n?\"clip\"+e._fullLayout._uid+n:null,e)}function k(t,e,r){return t.replace(g.segmentRE,(function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i];return i+t.substr(1).replace(g.paramRE,(function(t){return n>=s||(a[n]?t=e(t):o[n]&&(t=r(t)),n++),t}))}))}function A(t){_(t)&&t._fullLayout._activeShapeIndex>=0&&(c(t),delete t._fullLayout._activeShapeIndex,x(t))}t.exports={draw:x,drawOne:w,eraseActiveShape:function(t){if(_(t)){c(t);var e=t._fullLayout._activeShapeIndex,r=(t.layout||{}).shapes||[];if(e<r.length){for(var n=[],a=0;a<r.length;a++)a!==e&&n.push(r[a]);return delete t._fullLayout._activeShapeIndex,i.call(\"_guiRelayout\",t,{shapes:n})}}},drawLabel:u}},29241:function(t,e,r){\"use strict\";var n=r(30962).overrideAll,i=r(9012),a=r(41940),o=r(79952).P,s=r(1426).extendFlat,l=r(5386).R,u=r(37281);t.exports=n({newshape:{visible:s({},i.visible,{}),showlegend:{valType:\"boolean\",dflt:!1},legend:s({},i.legend,{}),legendgroup:s({},i.legendgroup,{}),legendgrouptitle:{text:s({},i.legendgrouptitle.text,{}),font:a({})},legendrank:s({},i.legendrank,{}),legendwidth:s({},i.legendwidth,{}),line:{color:{valType:\"color\"},width:{valType:\"number\",min:0,dflt:4},dash:s({},o,{dflt:\"solid\"})},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\"},opacity:{valType:\"number\",min:0,max:1,dflt:1},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\"},drawdirection:{valType:\"enumerated\",values:[\"ortho\",\"horizontal\",\"vertical\",\"diagonal\"],dflt:\"diagonal\"},name:s({},i.name,{}),label:{text:{valType:\"string\",dflt:\"\"},texttemplate:l({newshape:!0},{keys:Object.keys(u)}),font:a({}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\",\"start\",\"middle\",\"end\"]},textangle:{valType:\"angle\",dflt:\"auto\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"]},padding:{valType:\"number\",dflt:3,min:0}}},activeshape:{fillcolor:{valType:\"color\",dflt:\"rgb(255,0,255)\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5}}},\"none\",\"from-root\")},89995:function(t){\"use strict\";t.exports={CIRCLE_SIDES:32,i000:0,i090:8,i180:16,i270:24,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}},45547:function(t,e,r){\"use strict\";var n=r(7901),i=r(71828);t.exports=function(t,e,r){if(r(\"newshape.visible\"),r(\"newshape.name\"),r(\"newshape.showlegend\"),r(\"newshape.legend\"),r(\"newshape.legendwidth\"),r(\"newshape.legendgroup\"),r(\"newshape.legendgrouptitle.text\"),i.coerceFont(r,\"newshape.legendgrouptitle.font\"),r(\"newshape.legendrank\"),r(\"newshape.drawdirection\"),r(\"newshape.layer\"),r(\"newshape.fillcolor\"),r(\"newshape.fillrule\"),r(\"newshape.opacity\"),r(\"newshape.line.width\")){var a=(t||{}).plot_bgcolor||\"#FFF\";r(\"newshape.line.color\",n.contrast(a)),r(\"newshape.line.dash\")}var o=\"drawline\"===t.dragmode,s=r(\"newshape.label.text\"),l=r(\"newshape.label.texttemplate\");if(s||l){r(\"newshape.label.textangle\");var u=r(\"newshape.label.textposition\",o?\"middle\":\"middle center\");r(\"newshape.label.xanchor\"),r(\"newshape.label.yanchor\",function(t,e){return t?\"bottom\":-1!==e.indexOf(\"top\")?\"top\":-1!==e.indexOf(\"bottom\")?\"bottom\":\"middle\"}(o,u)),r(\"newshape.label.padding\"),i.coerceFont(r,\"newshape.label.font\",e.font)}r(\"activeshape.fillcolor\"),r(\"activeshape.opacity\")}},60165:function(t,e,r){\"use strict\";var n=r(95616),i=r(89995),a=i.CIRCLE_SIDES,o=i.SQRT2,s=r(75549),l=s.p2r,u=s.r2p,c=[0,3,4,5,6,1,2],f=[0,3,4,1,2];function h(t,e){return Math.abs(t-e)<=1e-6}function p(t,e){var r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(r*r+n*n)}e.writePaths=function(t){var e=t.length;if(!e)return\"M0,0Z\";for(var r=\"\",n=0;n<e;n++)for(var i=t[n].length,a=0;a<i;a++){var o=t[n][a][0];if(\"Z\"===o)r+=\"Z\";else for(var s=t[n][a].length,l=0;l<s;l++){var u=l;\"Q\"===o||\"S\"===o?u=f[l]:\"C\"===o&&(u=c[l]),r+=t[n][a][u],l>0&&l<s-1&&(r+=\",\")}}return r},e.readPaths=function(t,e,r,i){var o,s,c,f=n(t),h=[],p=-1,d=0,v=0,g=function(){s=d,c=v};g();for(var y=0;y<f.length;y++){var m,x,b,_,w=[],T=f[y][0],k=T;switch(T){case\"M\":h[++p]=[],d=+f[y][1],v=+f[y][2],w.push([k,d,v]),g();break;case\"Q\":case\"S\":m=+f[y][1],b=+f[y][2],d=+f[y][3],v=+f[y][4],w.push([k,d,v,m,b]);break;case\"C\":m=+f[y][1],b=+f[y][2],x=+f[y][3],_=+f[y][4],d=+f[y][5],v=+f[y][6],w.push([k,d,v,m,b,x,_]);break;case\"T\":case\"L\":d=+f[y][1],v=+f[y][2],w.push([k,d,v]);break;case\"H\":k=\"L\",d=+f[y][1],w.push([k,d,v]);break;case\"V\":k=\"L\",v=+f[y][1],w.push([k,d,v]);break;case\"A\":k=\"L\";var A=+f[y][1],M=+f[y][2];+f[y][4]||(A=-A,M=-M);var S=d-A,E=v;for(o=1;o<=a/2;o++){var L=2*Math.PI*o/a;w.push([k,S+A*Math.cos(L),E+M*Math.sin(L)])}break;case\"Z\":d===s&&v===c||(d=s,v=c,w.push([k,d,v]))}for(var C=(r||{}).domain,P=e._fullLayout._size,O=r&&\"pixel\"===r.xsizemode,I=r&&\"pixel\"===r.ysizemode,D=!1===i,z=0;z<w.length;z++){for(o=0;o+2<7;o+=2){var R=w[z][o+1],F=w[z][o+2];void 0!==R&&void 0!==F&&(d=R,v=F,r&&(r.xaxis&&r.xaxis.p2r?(D&&(R-=r.xaxis._offset),R=O?u(r.xaxis,r.xanchor)+R:l(r.xaxis,R)):(D&&(R-=P.l),C?R=C.x[0]+R/P.w:R/=P.w),r.yaxis&&r.yaxis.p2r?(D&&(F-=r.yaxis._offset),F=I?u(r.yaxis,r.yanchor)-F:l(r.yaxis,F)):(D&&(F-=P.t),F=C?C.y[1]-F/P.h:1-F/P.h)),w[z][o+1]=R,w[z][o+2]=F)}h[p].push(w[z].slice())}}return h},e.pointsOnRectangle=function(t){if(5!==t.length)return!1;for(var e=1;e<3;e++){if(!h(t[0][e]-t[1][e],t[3][e]-t[2][e]))return!1;if(!h(t[0][e]-t[3][e],t[1][e]-t[2][e]))return!1}return!(!h(t[0][1],t[1][1])&&!h(t[0][1],t[3][1])||!(p(t[0],t[1])*p(t[0],t[3])))},e.pointsOnEllipse=function(t){var e=t.length;if(e!==a+1)return!1;e=a;for(var r=0;r<e;r++){var n=(2*e-r)%e,i=(e/2+n)%e,o=(e/2+r)%e;if(!h(p(t[r],t[o]),p(t[n],t[i])))return!1}return!0},e.handleEllipse=function(t,r,n){if(!t)return[r,n];var i=e.ellipseOver({x0:r[0],y0:r[1],x1:n[0],y1:n[1]}),s=(i.x1+i.x0)/2,l=(i.y1+i.y0)/2,u=(i.x1-i.x0)/2,c=(i.y1-i.y0)/2;u||(u=c/=o),c||(c=u/=o);for(var f=[],h=0;h<a;h++){var p=2*h*Math.PI/a;f.push([s+u*Math.cos(p),l+c*Math.sin(p)])}return f},e.ellipseOver=function(t){var e=t.x0,r=t.y0,n=t.x1,i=t.y1,a=n-e,s=i-r,l=((e-=a)+n)/2,u=((r-=s)+i)/2;return{x0:l-(a*=o),y0:u-(s*=o),x1:l+a,y1:u+s}},e.fixDatesForPaths=function(t,e,r){var n=\"date\"===e.type,i=\"date\"===r.type;if(!n&&!i)return t;for(var a=0;a<t.length;a++)for(var o=0;o<t[a].length;o++)for(var s=0;s+2<t[a][o].length;s+=2)n&&(t[a][o][s+1]=t[a][o][s+1].replace(\" \",\"_\")),i&&(t[a][o][s+2]=t[a][o][s+2].replace(\" \",\"_\"));return t}},90551:function(t,e,r){\"use strict\";var n=r(64505),i=n.drawMode,a=n.openMode,o=r(89995),s=o.i000,l=o.i090,u=o.i180,c=o.i270,f=o.cos45,h=o.sin45,p=r(75549),d=p.p2r,v=p.r2p,g=r(51873).clearOutline,y=r(60165),m=y.readPaths,x=y.writePaths,b=y.ellipseOver,_=y.fixDatesForPaths;function w(t,e,r){var n,i=t[0][0],o=e.gd,p=i.getAttribute(\"d\"),g=o._fullLayout.newshape,y=e.plotinfo,w=e.isActiveShape,T=y.xaxis,k=y.yaxis,A=!!y.domain||!y.xaxis,M=!!y.domain||!y.yaxis,S=a(r),E=m(p,o,y,w),L={editable:!0,visible:g.visible,name:g.name,showlegend:g.showlegend,legend:g.legend,legendwidth:g.legendwidth,legendgroup:g.legendgroup,legendgrouptitle:{text:g.legendgrouptitle.text,font:g.legendgrouptitle.font},legendrank:g.legendrank,label:g.label,xref:A?\"paper\":T._id,yref:M?\"paper\":k._id,layer:g.layer,opacity:g.opacity,line:{color:g.line.color,width:g.line.width,dash:g.line.dash}};if(S||(L.fillcolor=g.fillcolor,L.fillrule=g.fillrule),1===E.length&&(n=E[0]),n&&5===n.length&&\"drawrect\"===r)L.type=\"rect\",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[2][1],L.y1=n[2][2];else if(n&&\"drawline\"===r)L.type=\"line\",L.x0=n[0][1],L.y0=n[0][2],L.x1=n[1][1],L.y1=n[1][2];else if(n&&\"drawcircle\"===r){L.type=\"circle\";var C=n[s][1],P=n[l][1],O=n[u][1],I=n[c][1],D=n[s][2],z=n[l][2],R=n[u][2],F=n[c][2],B=y.xaxis&&(\"date\"===y.xaxis.type||\"log\"===y.xaxis.type),N=y.yaxis&&(\"date\"===y.yaxis.type||\"log\"===y.yaxis.type);B&&(C=v(y.xaxis,C),P=v(y.xaxis,P),O=v(y.xaxis,O),I=v(y.xaxis,I)),N&&(D=v(y.yaxis,D),z=v(y.yaxis,z),R=v(y.yaxis,R),F=v(y.yaxis,F));var j=(P+I)/2,U=(D+R)/2,V=b({x0:j,y0:U,x1:j+(I-P+O-C)/2*f,y1:U+(F-z+R-D)/2*h});B&&(V.x0=d(y.xaxis,V.x0),V.x1=d(y.xaxis,V.x1)),N&&(V.y0=d(y.yaxis,V.y0),V.y1=d(y.yaxis,V.y1)),L.x0=V.x0,L.y0=V.y0,L.x1=V.x1,L.y1=V.y1}else L.type=\"path\",T&&k&&_(E,T,k),L.path=x(E),n=null;return L}t.exports={newShapes:function(t,e){if(t.length&&t[0][0]){var r=e.gd,n=e.isActiveShape,a=e.dragmode,o=(r.layout||{}).shapes||[];if(!i(a)&&void 0!==n){var s=r._fullLayout._activeShapeIndex;if(s<o.length)switch(r._fullLayout.shapes[s].type){case\"rect\":a=\"drawrect\";break;case\"circle\":a=\"drawcircle\";break;case\"line\":a=\"drawline\";break;case\"path\":var l=o[s].path||\"\";a=\"Z\"===l[l.length-1]?\"drawclosedpath\":\"drawopenpath\"}}var u=w(t,e,a);g(r);for(var c=e.editHelpers,f=(c||{}).modifyItem,h=[],p=0;p<o.length;p++){var d=r._fullLayout.shapes[p];if(h[p]=d._input,void 0!==n&&p===r._fullLayout._activeShapeIndex){var v=u;switch(d.type){case\"line\":case\"rect\":case\"circle\":f(\"x0\",v.x0),f(\"x1\",v.x1),f(\"y0\",v.y0),f(\"y1\",v.y1);break;case\"path\":f(\"path\",v.path)}}}return void 0===n?(h.push(u),h):c?c.getUpdateObj():{}}},createShapeObj:w}},51873:function(t){\"use strict\";t.exports={clearOutlineControllers:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\".outline-controllers\").remove()},clearOutline:function(t){var e=t._fullLayout._zoomlayer;e&&e.selectAll(\".select-outline\").remove(),t._fullLayout._outlining=!1}}},30477:function(t,e,r){\"use strict\";var n=r(21459),i=r(71828),a=r(89298);e.rangeToShapePosition=function(t){return\"log\"===t.type?t.r2d:function(t){return t}},e.shapePositionToRange=function(t){return\"log\"===t.type?t.d2r:function(t){return t}},e.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace(\"_\",\" \")),t(e)}},e.encodeDate=function(t){return function(e){return t(e).replace(\" \",\"_\")}},e.extractPathCoords=function(t,e,r){var a=[];return t.match(n.segmentRE).forEach((function(t){var o=e[t.charAt(0)].drawn;if(void 0!==o){var s=t.substr(1).match(n.paramRE);if(s&&!(s.length<o)){var l=s[o],u=r?l:i.cleanNumber(l);a.push(u)}}})),a},e.getDataToPixel=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if(\"domain\"===i)a=function(t){return r._length*(n?1-t:t)+r._offset};else{var s=e.shapePositionToRange(r);a=function(t){return r._offset+r.r2p(s(t,!0))},\"date\"===r.type&&(a=e.decodeDate(a))}else a=n?function(t){return o.t+o.h*(1-t)}:function(t){return o.l+o.w*t};return a},e.getPixelToData=function(t,r,n,i){var a,o=t._fullLayout._size;if(r)if(\"domain\"===i)a=function(t){var e=(t-r._offset)/r._length;return n?1-e:e};else{var s=e.rangeToShapePosition(r);a=function(t){return s(r.p2r(t-r._offset))}}else a=n?function(t){return 1-(t-o.t)/o.h}:function(t){return(t-o.l)/o.w};return a},e.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n},e.makeShapesOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.shapes[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&\"paper\"!==r.xref&&(n.xaxis=t._fullLayout[r.xref+\"axis\"]),r.yref&&\"paper\"!==r.yref&&(n.yaxis=t._fullLayout[r.yref+\"axis\"])),n.xsizemode=r.xsizemode,n.ysizemode=r.ysizemode,n.xanchor=r.xanchor,n.yanchor=r.yanchor,{options:r,plotinfo:n}},e.makeSelectionsOptionsAndPlotinfo=function(t,e){var r=t._fullLayout.selections[e]||{},n=t._fullLayout._plots[r.xref+r.yref];return n?n._hadPlotinfo=!0:(n={},r.xref&&(n.xaxis=t._fullLayout[r.xref+\"axis\"]),r.yref&&(n.yaxis=t._fullLayout[r.yref+\"axis\"])),{options:r,plotinfo:n}},e.getPathString=function(t,r){var o,s,l,u,c,f,h,p,d=r.type,v=a.getRefType(r.xref),g=a.getRefType(r.yref),y=a.getFromId(t,r.xref),m=a.getFromId(t,r.yref),x=t._fullLayout._size;if(y?\"domain\"===v?s=function(t){return y._offset+y._length*t}:(o=e.shapePositionToRange(y),s=function(t){return y._offset+y.r2p(o(t,!0))}):s=function(t){return x.l+x.w*t},m?\"domain\"===g?u=function(t){return m._offset+m._length*(1-t)}:(l=e.shapePositionToRange(m),u=function(t){return m._offset+m.r2p(l(t,!0))}):u=function(t){return x.t+x.h*(1-t)},\"path\"===d)return y&&\"date\"===y.type&&(s=e.decodeDate(s)),m&&\"date\"===m.type&&(u=e.decodeDate(u)),function(t,e,r){var a=t.path,o=t.xsizemode,s=t.ysizemode,l=t.xanchor,u=t.yanchor;return a.replace(n.segmentRE,(function(t){var a=0,c=t.charAt(0),f=n.paramIsX[c],h=n.paramIsY[c],p=n.numParams[c],d=t.substr(1).replace(n.paramRE,(function(t){return f[a]?t=\"pixel\"===o?e(l)+Number(t):e(t):h[a]&&(t=\"pixel\"===s?r(u)-Number(t):r(t)),++a>p&&(t=\"X\"),t}));return a>p&&(d=d.replace(/[\\s,]*X.*/,\"\"),i.log(\"Ignoring extra params in segment \"+t)),c+d}))}(r,s,u);if(\"pixel\"===r.xsizemode){var b=s(r.xanchor);c=b+r.x0,f=b+r.x1}else c=s(r.x0),f=s(r.x1);if(\"pixel\"===r.ysizemode){var _=u(r.yanchor);h=_-r.y0,p=_-r.y1}else h=u(r.y0),p=u(r.y1);if(\"line\"===d)return\"M\"+c+\",\"+h+\"L\"+f+\",\"+p;if(\"rect\"===d)return\"M\"+c+\",\"+h+\"H\"+f+\"V\"+p+\"H\"+c+\"Z\";var w=(c+f)/2,T=(h+p)/2,k=Math.abs(w-c),A=Math.abs(T-h),M=\"A\"+k+\",\"+A,S=w+k+\",\"+T;return\"M\"+S+M+\" 0 1,1 \"+w+\",\"+(T-A)+M+\" 0 0,1 \"+S+\"Z\"}},89853:function(t,e,r){\"use strict\";var n=r(34031);t.exports={moduleType:\"component\",name:\"shapes\",layoutAttributes:r(89827),supplyLayoutDefaults:r(84726),supplyDrawNewShapeDefaults:r(45547),includeBasePlot:r(76325)(\"shapes\"),calcAutorange:r(5627),draw:n.draw,drawOne:n.drawOne}},37281:function(t){\"use strict\";function e(t,e){return e?e.d2l(t):t}function r(t,e){return e?e.l2d(t):t}function n(t,r){return e(t.x1,r)-e(t.x0,r)}function i(t,r,n){return e(t.y1,n)-e(t.y0,n)}t.exports={x0:function(t){return t.x0},x1:function(t){return t.x1},y0:function(t){return t.y0},y1:function(t){return t.y1},slope:function(t,e,r){return\"line\"!==t.type?void 0:i(t,0,r)/n(t,e)},dx:n,dy:i,width:function(t,e){return Math.abs(n(t,e))},height:function(t,e,r){return Math.abs(i(t,0,r))},length:function(t,e,r){return\"line\"!==t.type?void 0:Math.sqrt(Math.pow(n(t,e),2)+Math.pow(i(t,0,r),2))},xcenter:function(t,n){return r((e(t.x1,n)+e(t.x0,n))/2,n)},ycenter:function(t,n,i){return r((e(t.y1,i)+e(t.y0,i))/2,i)}}},75067:function(t,e,r){\"use strict\";var n=r(41940),i=r(35025),a=r(1426).extendDeepAll,o=r(30962).overrideAll,s=r(85594),l=r(44467).templatedArray,u=r(98292),c=l(\"step\",{visible:{valType:\"boolean\",dflt:!0},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\"},value:{valType:\"string\"},execute:{valType:\"boolean\",dflt:!0}});t.exports=o(l(\"slider\",{visible:{valType:\"boolean\",dflt:!0},active:{valType:\"number\",min:0,dflt:0},steps:c,lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",min:-2,max:3,dflt:0},pad:a(i({editType:\"arraydraw\"}),{},{t:{dflt:20}}),xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\"},y:{valType:\"number\",min:-2,max:3,dflt:0},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},transition:{duration:{valType:\"number\",min:0,dflt:150},easing:{valType:\"enumerated\",values:s.transition.easing.values,dflt:\"cubic-in-out\"}},currentvalue:{visible:{valType:\"boolean\",dflt:!0},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},offset:{valType:\"number\",dflt:10},prefix:{valType:\"string\"},suffix:{valType:\"string\"},font:n({})},font:n({}),activebgcolor:{valType:\"color\",dflt:u.gripBgActiveColor},bgcolor:{valType:\"color\",dflt:u.railBgColor},bordercolor:{valType:\"color\",dflt:u.railBorderColor},borderwidth:{valType:\"number\",min:0,dflt:u.railBorderWidth},ticklen:{valType:\"number\",min:0,dflt:u.tickLength},tickcolor:{valType:\"color\",dflt:u.tickColor},tickwidth:{valType:\"number\",min:0,dflt:1},minorticklen:{valType:\"number\",min:0,dflt:u.minorTickLength}}),\"arraydraw\",\"from-root\")},98292:function(t){\"use strict\";t.exports={name:\"sliders\",containerClassName:\"slider-container\",groupClassName:\"slider-group\",inputAreaClass:\"slider-input-area\",railRectClass:\"slider-rail-rect\",railTouchRectClass:\"slider-rail-touch-rect\",gripRectClass:\"slider-grip-rect\",tickRectClass:\"slider-tick-rect\",inputProxyClass:\"slider-input-proxy\",labelsClass:\"slider-labels\",labelGroupClass:\"slider-label-group\",labelClass:\"slider-label\",currentValueClass:\"slider-current-value\",railHeight:5,menuIndexAttrName:\"slider-active-index\",autoMarginIdRoot:\"slider-\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\"#bec8d9\",railBgColor:\"#f8fafc\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\"#bec8d9\",gripBgColor:\"#f6f8fa\",gripBgActiveColor:\"#dbdde0\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\"#333\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\"#333\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},12343:function(t,e,r){\"use strict\";var n=r(71828),i=r(85501),a=r(75067),o=r(98292).name,s=a.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=i(t,e,{name:\"steps\",handleItemDefaults:u}),l=0,c=0;c<s.length;c++)s[c].visible&&l++;if(l<2?e.visible=!1:o(\"visible\")){e._stepCount=l;var f=e._visibleSteps=n.filterVisible(s);(s[o(\"active\")]||{}).visible||(e.active=f[0]._index),o(\"x\"),o(\"y\"),n.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"len\"),o(\"lenmode\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),n.coerceFont(o,\"font\",r.font),o(\"currentvalue.visible\")&&(o(\"currentvalue.xanchor\"),o(\"currentvalue.prefix\"),o(\"currentvalue.suffix\"),o(\"currentvalue.offset\"),n.coerceFont(o,\"currentvalue.font\",e.font)),o(\"transition.duration\"),o(\"transition.easing\"),o(\"bgcolor\"),o(\"activebgcolor\"),o(\"bordercolor\"),o(\"borderwidth\"),o(\"ticklen\"),o(\"tickwidth\"),o(\"tickcolor\"),o(\"minorticklen\")}}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}if(\"skip\"===t.method||Array.isArray(t.args)?r(\"visible\"):e.visible=!1){r(\"method\"),r(\"args\");var i=r(\"label\",\"step-\"+e._index);r(\"value\",i),r(\"execute\")}}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},44504:function(t,e,r){\"use strict\";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=s.strTranslate,u=r(63893),c=r(44467).arrayEditor,f=r(98292),h=r(18783),p=h.LINE_SPACING,d=h.FROM_TL,v=h.FROM_BR;function g(t){return f.autoMarginIdRoot+t._index}function y(t){return t._index}function m(t,e){var r=o.tester.selectAll(\"g.\"+f.labelGroupClass).data(e._visibleSteps);r.enter().append(\"g\").classed(f.labelGroupClass,!0);var a=0,l=0;r.each((function(t){var r=_(n.select(this),{step:t},e).node();if(r){var i=o.bBox(r);l=Math.max(l,i.height),a=Math.max(a,i.width)}})),r.remove();var c=e._dims={};c.inputAreaWidth=Math.max(f.railWidth,f.gripHeight);var h=t._fullLayout._size;c.lx=h.l+h.w*e.x,c.ly=h.t+h.h*(1-e.y),\"fraction\"===e.lenmode?c.outerLength=Math.round(h.w*e.len):c.outerLength=e.len,c.inputAreaStart=0,c.inputAreaLength=Math.round(c.outerLength-e.pad.l-e.pad.r);var p=(c.inputAreaLength-2*f.stepInset)/(e._stepCount-1),y=a+f.labelPadding;if(c.labelStride=Math.max(1,Math.ceil(y/p)),c.labelHeight=l,c.currentValueMaxWidth=0,c.currentValueHeight=0,c.currentValueTotalHeight=0,c.currentValueMaxLines=1,e.currentvalue.visible){var m=o.tester.append(\"g\");r.each((function(t){var r=x(m,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},i=u.lineCount(r);c.currentValueMaxWidth=Math.max(c.currentValueMaxWidth,Math.ceil(n.width)),c.currentValueHeight=Math.max(c.currentValueHeight,Math.ceil(n.height)),c.currentValueMaxLines=Math.max(c.currentValueMaxLines,i)})),c.currentValueTotalHeight=c.currentValueHeight+e.currentvalue.offset,m.remove()}c.height=c.currentValueTotalHeight+f.tickOffset+e.ticklen+f.labelOffset+c.labelHeight+e.pad.t+e.pad.b;var b=\"left\";s.isRightAnchor(e)&&(c.lx-=c.outerLength,b=\"right\"),s.isCenterAnchor(e)&&(c.lx-=c.outerLength/2,b=\"center\");var w=\"top\";s.isBottomAnchor(e)&&(c.ly-=c.height,w=\"bottom\"),s.isMiddleAnchor(e)&&(c.ly-=c.height/2,w=\"middle\"),c.outerLength=Math.ceil(c.outerLength),c.height=Math.ceil(c.height),c.lx=Math.round(c.lx),c.ly=Math.round(c.ly);var T={y:e.y,b:c.height*v[w],t:c.height*d[w]};\"fraction\"===e.lenmode?(T.l=0,T.xl=e.x-e.len*d[b],T.r=0,T.xr=e.x+e.len*v[b]):(T.x=e.x,T.l=c.outerLength*d[b],T.r=c.outerLength*v[b]),i.autoMargin(t,g(e),T)}function x(t,e,r){if(e.currentvalue.visible){var n,i,a=e._dims;switch(e.currentvalue.xanchor){case\"right\":n=a.inputAreaLength-f.currentValueInset-a.currentValueMaxWidth,i=\"left\";break;case\"center\":n=.5*a.inputAreaLength,i=\"middle\";break;default:n=f.currentValueInset,i=\"left\"}var l=s.ensureSingle(t,\"text\",f.labelClass,(function(t){t.attr({\"text-anchor\":i,\"data-notex\":1})})),c=e.currentvalue.prefix?e.currentvalue.prefix:\"\";if(\"string\"==typeof r)c+=r;else{var h=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(h=s.templateString(h,d)),c+=h}e.currentvalue.suffix&&(c+=e.currentvalue.suffix),l.call(o.font,e.currentvalue.font).text(c).call(u.convertToTspans,e._gd);var v=u.lineCount(l),g=(a.currentValueMaxLines+1-v)*e.currentvalue.font.size*p;return u.positionText(l,n,g),l}}function b(t,e,r){s.ensureSingle(t,\"rect\",f.gripRectClass,(function(n){n.call(A,e,t,r).style(\"pointer-events\",\"all\")})).attr({width:f.gripWidth,height:f.gripHeight,rx:f.gripRadius,ry:f.gripRadius}).call(a.stroke,r.bordercolor).call(a.fill,r.bgcolor).style(\"stroke-width\",r.borderwidth+\"px\")}function _(t,e,r){var n=s.ensureSingle(t,\"text\",f.labelClass,(function(t){t.attr({\"text-anchor\":\"middle\",\"data-notex\":1})})),i=e.step.label,a=r._gd._fullLayout._meta;return a&&(i=s.templateString(i,a)),n.call(o.font,r.font).text(i).call(u.convertToTspans,r._gd),n}function w(t,e){var r=s.ensureSingle(t,\"g\",f.labelsClass),i=e._dims,a=r.selectAll(\"g.\"+f.labelGroupClass).data(i.labelSteps);a.enter().append(\"g\").classed(f.labelGroupClass,!0),a.exit().remove(),a.each((function(t){var r=n.select(this);r.call(_,t,e),o.setTranslate(r,E(e,t.fraction),f.tickOffset+e.ticklen+e.font.size*p+f.labelOffset+i.currentValueTotalHeight)}))}function T(t,e,r,n,i){var a=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[a]._index;o!==r.active&&k(t,e,r,o,!0,i)}function k(t,e,r,n,a,o){var s=r.active;r.active=n,c(t.layout,f.name,r).applyUpdate(\"active\",n);var l=r.steps[r.active];e.call(S,r,o),e.call(x,r),t.emit(\"plotly_sliderchange\",{slider:r,step:r.steps[r.active],interaction:a,previousActive:s}),l&&l.method&&a&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=a,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:a,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame((function(){var r=e._nextMethod.step;r.method&&(r.execute&&i.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)}))))}function A(t,e,r){if(!e._context.staticPlot){var i=r.node(),o=n.select(e);t.on(\"mousedown\",l),t.on(\"touchstart\",l)}function s(){return r.data()[0]}function l(){var t=s();e.emit(\"plotly_sliderstart\",{slider:t});var l=r.select(\".\"+f.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(a.fill,t.activebgcolor);var u=L(t,n.mouse(i)[0]);function c(){var t=s(),a=L(t,n.mouse(i)[0]);T(e,r,t,a,!1)}function h(){var t=s();t._dragging=!1,l.call(a.fill,t.bgcolor),o.on(\"mouseup\",null),o.on(\"mousemove\",null),o.on(\"touchend\",null),o.on(\"touchmove\",null),e.emit(\"plotly_sliderend\",{slider:t,step:t.steps[t.active]})}T(e,r,t,u,!0),t._dragging=!0,o.on(\"mousemove\",c),o.on(\"touchmove\",c),o.on(\"mouseup\",h),o.on(\"touchend\",h)}}function M(t,e){var r=t.selectAll(\"rect.\"+f.tickRectClass).data(e._visibleSteps),i=e._dims;r.enter().append(\"rect\").classed(f.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+\"px\",\"shape-rendering\":\"crispEdges\"}),r.each((function(t,r){var s=r%i.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,E(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?f.tickOffset:f.minorTickOffset)+i.currentValueTotalHeight)}))}function S(t,e,r){for(var n=t.select(\"rect.\"+f.gripRectClass),i=0,a=0;a<e._stepCount;a++)if(e._visibleSteps[a]._index===e.active){i=a;break}var o=E(e,i/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\"transform\",l(o-.5*f.gripWidth,e._dims.currentValueTotalHeight))}}function E(t,e){var r=t._dims;return r.inputAreaStart+f.stepInset+(r.inputAreaLength-2*f.stepInset)*Math.min(1,Math.max(0,e))}function L(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-f.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*f.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n=r._dims,i=s.ensureSingle(t,\"rect\",f.railTouchRectClass,(function(n){n.call(A,e,t,r).style(\"pointer-events\",\"all\")}));i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,f.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr(\"opacity\",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function P(t,e){var r=e._dims,n=r.inputAreaLength-2*f.railInset,i=s.ensureSingle(t,\"rect\",f.railRectClass);i.attr({width:n,height:f.railWidth,rx:f.railRadius,ry:f.railRadius,\"shape-rendering\":\"crispEdges\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\"),o.setTranslate(i,f.railInset,.5*(r.inputAreaWidth-f.railWidth)+r.currentValueTotalHeight)}t.exports=function(t){var e=t._context.staticPlot,r=t._fullLayout,a=function(t,e){for(var r=t[f.name],n=[],i=0;i<r.length;i++){var a=r[i];a.visible&&(a._gd=e,n.push(a))}return n}(r,t),s=r._infolayer.selectAll(\"g.\"+f.containerClassName).data(a.length>0?[0]:[]);function l(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(s.enter().append(\"g\").classed(f.containerClassName,!0).style(\"cursor\",e?null:\"ew-resize\"),s.exit().each((function(){n.select(this).selectAll(\"g.\"+f.groupClassName).each(l)})).remove(),0!==a.length){var u=s.selectAll(\"g.\"+f.groupClassName).data(a,y);u.enter().append(\"g\").classed(f.groupClassName,!0),u.exit().each(l).remove();for(var c=0;c<a.length;c++){var h=a[c];m(t,h)}u.each((function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),i.manageCommandObserver(t,e,e._visibleSteps,(function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))})),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index),e.call(x,r).call(P,r).call(w,r).call(M,r).call(C,t,r).call(b,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(S,r,!1),e.call(x,r)}(t,n.select(this),e)}))}}},23243:function(t,e,r){\"use strict\";var n=r(98292);t.exports={moduleType:\"component\",name:n.name,layoutAttributes:r(75067),supplyLayoutDefaults:r(12343),draw:r(44504)}},92998:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(91424),c=r(7901),f=r(63893),h=r(37822),p=r(18783).OPPOSITE_SIDE,d=/ [XY][0-9]* /;t.exports={draw:function(t,e,r){var v,g=r.propContainer,y=r.propName,m=r.placeholder,x=r.traceIndex,b=r.avoid||{},_=r.attributes,w=r.transform,T=r.containerGroup,k=t._fullLayout,A=1,M=!1,S=g.title,E=(S&&S.text?S.text:\"\").trim(),L=S&&S.font?S.font:{},C=L.family,P=L.size,O=L.color;\"title.text\"===y?v=\"titleText\":-1!==y.indexOf(\"axis\")?v=\"axisTitleText\":y.indexOf(!0)&&(v=\"colorbarTitleText\");var I=t._context.edits[v];\"\"===E?A=0:E.replace(d,\" % \")===m.replace(d,\" % \")&&(A=.2,M=!0,I||(E=\"\")),r._meta?E=s.templateString(E,r._meta):k._meta&&(E=s.templateString(E,k._meta));var D,z=E||I;T||(T=s.ensureSingle(k._infolayer,\"g\",\"g-\"+e),D=k._hColorbarMoveTitle);var R=T.selectAll(\"text\").data(z?[0]:[]);if(R.enter().append(\"text\"),R.text(E).attr(\"class\",e),R.exit().remove(),!z)return T;function F(t){s.syncOrAsync([B,N],t)}function B(e){var r;return!w&&D&&(w={}),w?(r=\"\",w.rotate&&(r+=\"rotate(\"+[w.rotate,_.x,_.y]+\")\"),(w.offset||D)&&(r+=l(0,(w.offset||0)-(D||0)))):r=null,e.attr(\"transform\",r),e.style({\"font-family\":C,\"font-size\":n.round(P,2)+\"px\",fill:c.rgb(O),opacity:A*c.opacity(O),\"font-weight\":a.fontWeight}).attr(_).call(f.convertToTspans,t),a.previousPromises(t)}function N(e){var r=n.select(e.node().parentNode);if(b&&b.selection&&b.side&&E){r.attr(\"transform\",null);var a=p[b.side],o=\"left\"===b.side||\"top\"===b.side?-1:1,c=i(b.pad)?b.pad:2,f=u.bBox(r.node()),h={t:0,b:0,l:0,r:0},d=t._fullLayout._reservedMargin;for(var v in d)for(var y in d[v]){var m=d[v][y];h[y]=Math.max(h[y],m)}var x={left:h.l,top:h.t,right:k.width-h.r,bottom:k.height-h.b},_=b.maxShift||o*(x[b.side]-f[b.side]),w=0;if(_<0)w=_;else{var T=b.offsetLeft||0,A=b.offsetTop||0;f.left-=T,f.right-=T,f.top-=A,f.bottom-=A,b.selection.each((function(){var t=u.bBox(this);s.bBoxIntersect(f,t,c)&&(w=Math.max(w,o*(t[b.side]-f[a])+c))})),w=Math.min(_,w),g._titleScoot=Math.abs(w)}if(w>0||_<0){var M={left:[-w,0],right:[w,0],top:[0,-w],bottom:[0,w]}[b.side];r.attr(\"transform\",l(M[0],M[1]))}}}return R.call(F),I&&(E?R.on(\".opacity\",null):(A=0,M=!0,R.text(m).on(\"mouseover.opacity\",(function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style(\"opacity\",1)})).on(\"mouseout.opacity\",(function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style(\"opacity\",0)}))),R.call(f.makeEditable,{gd:t}).on(\"edit\",(function(e){void 0!==x?o.call(\"_guiRestyle\",t,y,e,x):o.call(\"_guiRelayout\",t,y,e)})).on(\"cancel\",(function(){this.text(this.attr(\"data-unformatted\")).call(F)})).on(\"input\",(function(t){this.text(t||\" \").call(f.positionText,_.x,_.y)}))),R.classed(\"js-placeholder\",M),T}}},7163:function(t,e,r){\"use strict\";var n=r(41940),i=r(22399),a=r(1426).extendFlat,o=r(30962).overrideAll,s=r(35025),l=r(44467).templatedArray,u=l(\"button\",{visible:{valType:\"boolean\"},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},args2:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\",dflt:\"\"},execute:{valType:\"boolean\",dflt:!0}});t.exports=o(l(\"updatemenu\",{_arrayAttrRegexps:[/^updatemenus\\[(0|[1-9][0-9]+)\\]\\.buttons/],visible:{valType:\"boolean\"},type:{valType:\"enumerated\",values:[\"dropdown\",\"buttons\"],dflt:\"dropdown\"},direction:{valType:\"enumerated\",values:[\"left\",\"right\",\"up\",\"down\"],dflt:\"down\"},active:{valType:\"integer\",min:-1,dflt:0},showactive:{valType:\"boolean\",dflt:!0},buttons:u,x:{valType:\"number\",min:-2,max:3,dflt:-.05},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"right\"},y:{valType:\"number\",min:-2,max:3,dflt:1},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},pad:a(s({editType:\"arraydraw\"}),{}),font:n({}),bgcolor:{valType:\"color\"},bordercolor:{valType:\"color\",dflt:i.borderLine},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"arraydraw\"}}),\"arraydraw\",\"from-root\")},75909:function(t){\"use strict\";t.exports={name:\"updatemenus\",containerClassName:\"updatemenu-container\",headerGroupClassName:\"updatemenu-header-group\",headerClassName:\"updatemenu-header\",headerArrowClassName:\"updatemenu-header-arrow\",dropdownButtonGroupClassName:\"updatemenu-dropdown-button-group\",dropdownButtonClassName:\"updatemenu-dropdown-button\",buttonClassName:\"updatemenu-button\",itemRectClassName:\"updatemenu-item-rect\",itemTextClassName:\"updatemenu-item-text\",menuIndexAttrName:\"updatemenu-active-index\",autoMarginIdRoot:\"updatemenu-\",blankHeaderOpts:{label:\"  \"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\"#F4FAFF\",hoverColor:\"#F4FAFF\",arrowSymbol:{left:\"◄\",right:\"►\",up:\"▲\",down:\"▼\"}}},64897:function(t,e,r){\"use strict\";var n=r(71828),i=r(85501),a=r(7163),o=r(75909).name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o(\"visible\",i(t,e,{name:\"buttons\",handleItemDefaults:u}).length>0)&&(o(\"active\"),o(\"direction\"),o(\"type\"),o(\"showactive\"),o(\"x\"),o(\"y\"),n.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),n.coerceFont(o,\"font\",r.font),o(\"bgcolor\",r.paper_bgcolor),o(\"bordercolor\"),o(\"borderwidth\"))}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r(\"visible\",\"skip\"===t.method||Array.isArray(t.args))&&(r(\"method\"),r(\"args\"),r(\"args2\"),r(\"label\"),r(\"execute\"))}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},13689:function(t,e,r){\"use strict\";var n=r(39898),i=r(74875),a=r(7901),o=r(91424),s=r(71828),l=r(63893),u=r(44467).arrayEditor,c=r(18783).LINE_SPACING,f=r(75909),h=r(25849);function p(t){return t._index}function d(t,e){return+t.attr(f.menuIndexAttrName)===e._index}function v(t,e,r,n,i,a,o,s){e.active=o,u(t.layout,f.name,e).applyUpdate(\"active\",o),\"buttons\"===e.type?y(t,n,null,null,e):\"dropdown\"===e.type&&(i.attr(f.menuIndexAttrName,\"-1\"),g(t,n,i,a,e),s||y(t,n,i,a,e))}function g(t,e,r,n,i){var a=s.ensureSingle(e,\"g\",f.headerClassName,(function(t){t.style(\"pointer-events\",\"all\")})),l=i._dims,u=i.active,c=i.buttons[u]||f.blankHeaderOpts,h={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(m,i,c,t).call(M,i,h,p),s.ensureSingle(e,\"text\",f.headerArrowClassName,(function(t){t.attr(\"text-anchor\",\"end\").call(o.font,i.font).text(f.arrowSymbol[i.direction])})).attr({x:l.headerWidth-f.arrowOffsetX+i.pad.l,y:l.headerHeight/2+f.textOffsetY+i.pad.t}),a.on(\"click\",(function(){r.call(S,String(d(r,i)?-1:i._index)),y(t,e,r,n,i)})),a.on(\"mouseover\",(function(){a.call(w)})),a.on(\"mouseout\",(function(){a.call(T,i)})),o.setTranslate(e,l.lx,l.ly)}function y(t,e,r,a,o){r||(r=e).attr(\"pointer-events\",\"all\");var l=function(t){return-1==+t.attr(f.menuIndexAttrName)}(r)&&\"buttons\"!==o.type?[]:o.buttons,u=\"dropdown\"===o.type?f.dropdownButtonClassName:f.buttonClassName,c=r.selectAll(\"g.\"+u).data(s.filterVisible(l)),h=c.enter().append(\"g\").classed(u,!0),p=c.exit();\"dropdown\"===o.type?(h.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),p.transition().attr(\"opacity\",\"0\").remove()):p.remove();var d=0,g=0,y=o._dims,x=-1!==[\"up\",\"down\"].indexOf(o.direction);\"dropdown\"===o.type&&(x?g=y.headerHeight+f.gapButtonHeader:d=y.headerWidth+f.gapButtonHeader),\"dropdown\"===o.type&&\"up\"===o.direction&&(g=-f.gapButtonHeader+f.gapButton-y.openHeight),\"dropdown\"===o.type&&\"left\"===o.direction&&(d=-f.gapButtonHeader+f.gapButton-y.openWidth);var b={x:y.lx+d+o.pad.l,y:y.ly+g+o.pad.t,yPad:f.gapButton,xPad:f.gapButton,index:0},k={l:b.x+o.borderwidth,t:b.y+o.borderwidth};c.each((function(s,l){var u=n.select(this);u.call(m,o,s,t).call(M,o,b),u.on(\"click\",(function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(v(t,o,0,e,r,a,-1),i.executeAPICommand(t,s.method,s.args2)):(v(t,o,0,e,r,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit(\"plotly_buttonclicked\",{menu:o,button:s,active:o.active}))})),u.on(\"mouseover\",(function(){u.call(w)})),u.on(\"mouseout\",(function(){u.call(T,o),c.call(_,o)}))})),c.call(_,o),x?(k.w=Math.max(y.openWidth,y.headerWidth),k.h=b.y-k.t):(k.w=b.x-k.l,k.h=Math.max(y.openHeight,y.headerHeight)),k.direction=o.direction,a&&(c.size()?function(t,e,r,n,i,a){var o,s,l,u=i.direction,c=\"up\"===u||\"down\"===u,h=i._dims,p=i.active;if(c)for(s=0,l=0;l<p;l++)s+=h.heights[l]+f.gapButton;else for(o=0,l=0;l<p;l++)o+=h.widths[l]+f.gapButton;n.enable(a,o,s),n.hbar&&n.hbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),n.vbar&&n.vbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\")}(0,0,0,a,o,k):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){e=!1,r||t.disable()})),r&&t.vbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){r=!1,e||t.disable()}))}(a))}function m(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,\"rect\",f.itemRectClassName,(function(t){t.attr({rx:f.rx,ry:f.ry,\"shape-rendering\":\"crispEdges\"})})).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,r,n){var i=s.ensureSingle(t,\"text\",f.itemTextClassName,(function(t){t.attr({\"text-anchor\":\"start\",\"data-notex\":1})})),a=r.label,u=n._fullLayout._meta;u&&(a=s.templateString(a,u)),i.call(o.font,e.font).text(a).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each((function(t,i){var o=n.select(this);i===r&&e.showactive&&o.select(\"rect.\"+f.itemRectClassName).call(a.fill,f.activeColor)}))}function w(t){t.select(\"rect.\"+f.itemRectClassName).call(a.fill,f.hoverColor)}function T(t,e){t.select(\"rect.\"+f.itemRectClassName).call(a.fill,e.bgcolor)}function k(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=o.tester.selectAll(\"g.\"+f.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append(\"g\").classed(f.dropdownButtonClassName,!0);var u=-1!==[\"up\",\"down\"].indexOf(e.direction);a.each((function(i,a){var s=n.select(this);s.call(m,e,i,t);var h=s.select(\".\"+f.itemTextClassName),p=h.node()&&o.bBox(h.node()).width,d=Math.max(p+f.textPadX,f.minWidth),v=e.font.size*c,g=l.lineCount(h),y=Math.max(v*g,f.minHeight)+f.textOffsetY;y=Math.ceil(y),d=Math.ceil(d),r.widths[a]=d,r.heights[a]=y,r.height1=Math.max(r.height1,y),r.width1=Math.max(r.width1,d),u?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=y+f.gapButton,r.openHeight+=y+f.gapButton):(r.totalWidth+=d+f.gapButton,r.openWidth+=d+f.gapButton,r.totalHeight=Math.max(r.totalHeight,y),r.openHeight=r.totalHeight)})),u?r.totalHeight-=f.gapButton:r.totalWidth-=f.gapButton,r.headerWidth=r.width1+f.arrowPadX,r.headerHeight=r.height1,\"dropdown\"===e.type&&(u?(r.width1+=f.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=f.arrowPadX),a.remove();var h=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var v=\"left\";s.isRightAnchor(e)&&(r.lx-=h,v=\"right\"),s.isCenterAnchor(e)&&(r.lx-=h/2,v=\"center\");var g=\"top\";s.isBottomAnchor(e)&&(r.ly-=p,g=\"bottom\"),s.isMiddleAnchor(e)&&(r.ly-=p/2,g=\"middle\"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),i.autoMargin(t,A(e),{x:e.x,y:e.y,l:h*({right:1,center:.5}[v]||0),r:h*({left:1,center:.5}[v]||0),b:p*({top:1,middle:.5}[g]||0),t:p*({bottom:1,middle:.5}[g]||0)})}function A(t){return f.autoMarginIdRoot+t._index}function M(t,e,r,n){n=n||{};var i=t.select(\".\"+f.itemRectClassName),a=t.select(\".\"+f.itemTextClassName),s=e.borderwidth,u=r.index,h=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==[\"up\",\"down\"].indexOf(e.direction),d=n.height||(p?h.heights[u]:h.height1);i.attr({x:0,y:0,width:n.width||(p?h.width1:h.widths[u]),height:d});var v=e.font.size*c,g=(l.lineCount(a)-1)*v/2;l.positionText(a,f.textOffsetX,d/2-g+f.textOffsetY),p?r.y+=h.heights[u]+r.yPad:r.x+=h.widths[u]+r.xPad,r.index++}function S(t,e){t.attr(f.menuIndexAttrName,e||\"-1\").selectAll(\"g.\"+f.dropdownButtonClassName).remove()}t.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[f.name]);function a(e){i.autoMargin(t,A(e))}var o=e._menulayer.selectAll(\"g.\"+f.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append(\"g\").classed(f.containerClassName,!0).style(\"cursor\",\"pointer\"),o.exit().each((function(){n.select(this).selectAll(\"g.\"+f.headerGroupClassName).each(a)})).remove(),0!==r.length){var l=o.selectAll(\"g.\"+f.headerGroupClassName).data(r,p);l.enter().append(\"g\").classed(f.headerGroupClassName,!0);for(var u=s.ensureSingle(o,\"g\",f.dropdownButtonGroupClassName,(function(t){t.style(\"pointer-events\",\"all\")})),c=0;c<r.length;c++){var m=r[c];k(t,m)}var x=\"updatemenus\"+e._uid,b=new h(t,u,x);l.enter().size()&&(u.node().parentNode.appendChild(u.node()),u.call(S)),l.exit().each((function(t){u.call(S),a(t)})).remove(),l.each((function(e){var r=n.select(this),a=\"dropdown\"===e.type?u:null;i.manageCommandObserver(t,e,e.buttons,(function(n){v(t,e,e.buttons[n.index],r,a,b,n.index,!0)})),\"dropdown\"===e.type?(g(t,r,u,b,e),d(u,e)&&y(t,r,u,b,e)):y(t,r,null,null,e)}))}}},20763:function(t,e,r){\"use strict\";var n=r(75909);t.exports={moduleType:\"component\",name:n.name,layoutAttributes:r(7163),supplyLayoutDefaults:r(64897),draw:r(13689)}},25849:function(t,e,r){\"use strict\";t.exports=s;var n=r(39898),i=r(7901),a=r(91424),o=r(71828);function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll(\"rect.scrollbox-bg\").data([0]),this.bg.exit().on(\".drag\",null).on(\"wheel\",null).remove(),this.bg.enter().append(\"rect\").classed(\"scrollbox-bg\",!0).style(\"pointer-events\",\"all\").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor=\"#808BA4\",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,u=o.height;this.position=t;var c,f,h,p,d=this.position.l,v=this.position.w,g=this.position.t,y=this.position.h,m=this.position.direction,x=\"down\"===m,b=\"left\"===m,_=\"up\"===m,w=v,T=y;x||b||\"right\"===m||_||(this.position.direction=\"down\",x=!0),x||_?(f=(c=d)+w,x?(h=g,T=(p=Math.min(h+T,u))-h):T=(p=g+T)-(h=Math.max(p-T,0))):(p=(h=g)+T,b?w=(f=d+w)-(c=Math.max(f-w,0)):(c=d,w=(f=Math.min(c+w,l))-c)),this._box={l:c,t:h,w:w,h:T};var k=v>w,A=s.barLength+2*s.barPad,M=s.barWidth+2*s.barPad,S=d,E=g+y;E+M>u&&(E=u-M);var L=this.container.selectAll(\"rect.scrollbar-horizontal\").data(k?[0]:[]);L.exit().on(\".drag\",null).remove(),L.enter().append(\"rect\").classed(\"scrollbar-horizontal\",!0).call(i.fill,s.barColor),k?(this.hbar=L.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:A,height:M}),this._hbarXMin=S+A/2,this._hbarTranslateMax=w-A):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C=y>T,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,I=d+v,D=g;I+P>l&&(I=l-P);var z=this.container.selectAll(\"rect.scrollbar-vertical\").data(C?[0]:[]);z.exit().on(\".drag\",null).remove(),z.enter().append(\"rect\").classed(\"scrollbar-vertical\",!0).call(i.fill,s.barColor),C?(this.vbar=z.attr({rx:s.barRadius,ry:s.barRadius,x:I,y:D,width:P,height:O}),this._vbarYMin=D+O/2,this._vbarTranslateMax=T-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=c-.5,B=C?f+P+.5:f+.5,N=h-.5,j=k?p+M+.5:p+.5,U=o._topdefs.selectAll(\"#\"+R).data(k||C?[0]:[]);if(U.exit().remove(),U.enter().append(\"clipPath\").attr(\"id\",R).append(\"rect\"),k||C?(this._clipRect=U.select(\"rect\").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:g,width:v,height:y})):(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),k||C){var V=n.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault()})).on(\"drag\",this._onBoxDrag.bind(this));this.container.on(\"wheel\",null).on(\"wheel\",this._onBoxWheel.bind(this)).on(\".drag\",null).call(V);var H=n.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()})).on(\"drag\",this._onBarDrag.bind(this));k&&this.hbar.on(\".drag\",null).call(H),C&&this.vbar.on(\".drag\",null).call(H)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\".drag\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\".drag\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},18783:function(t){\"use strict\";t.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\"right\",right:\"left\",top:\"bottom\",bottom:\"top\"}}},24695:function(t){\"use strict\";t.exports={axisRefDescription:function(t,e,r){return[\"If set to a\",t,\"axis id (e.g. *\"+t+\"* or\",\"*\"+t+\"2*), the `\"+t+\"` position refers to a\",t,\"coordinate. If set to *paper*, the `\"+t+\"`\",\"position refers to the distance from the\",e,\"of the plotting\",\"area in normalized coordinates where *0* (*1*) corresponds to the\",e,\"(\"+r+\"). If set to a\",t,\"axis ID followed by\",\"*domain* (separated by a space), the position behaves like for\",\"*paper*, but refers to the distance in fractions of the domain\",\"length from the\",e,\"of the domain of that axis: e.g.,\",\"*\"+t+\"2 domain* refers to the domain of the second\",t,\" axis and a\",t,\"position of 0.5 refers to the\",\"point between the\",e,\"and the\",r,\"of the domain of the\",\"second\",t,\"axis.\"].join(\" \")}}},22372:function(t){\"use strict\";t.exports={INCREASING:{COLOR:\"#3D9970\",SYMBOL:\"▲\"},DECREASING:{COLOR:\"#FF4136\",SYMBOL:\"▼\"}}},31562:function(t){\"use strict\";t.exports={FORMAT_LINK:\"https://github.com/d3/d3-format/tree/v1.4.5#d3-format\",DATE_FORMAT_LINK:\"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format\"}},74808:function(t){\"use strict\";t.exports={COMPARISON_OPS:[\"=\",\"!=\",\"<\",\">=\",\">\",\"<=\"],COMPARISON_OPS2:[\"=\",\"<\",\">=\",\">\",\"<=\"],INTERVAL_OPS:[\"[]\",\"()\",\"[)\",\"(]\",\"][\",\")(\",\"](\",\")[\"],SET_OPS:[\"{}\",\"}{\"],CONSTRAINT_REDUCTION:{\"=\":\"=\",\"<\":\"<\",\"<=\":\"<\",\">\":\">\",\">=\":\">\",\"[]\":\"[]\",\"()\":\"[]\",\"[)\":\"[]\",\"(]\":\"[]\",\"][\":\"][\",\")(\":\"][\",\"](\":\"][\",\")[\":\"][\"}}},29659:function(t){\"use strict\";t.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},87381:function(t){\"use strict\";t.exports={circle:\"●\",\"circle-open\":\"○\",square:\"■\",\"square-open\":\"□\",diamond:\"◆\",\"diamond-open\":\"◇\",cross:\"+\",x:\"❌\"}},37822:function(t){\"use strict\";t.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},50606:function(t){\"use strict\";t.exports={BADNUM:void 0,FP_SAFE:1e-4*Number.MAX_VALUE,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:\"−\"}},32396:function(t,e){\"use strict\";e.CSS_DECLARATIONS=[[\"image-rendering\",\"optimizeSpeed\"],[\"image-rendering\",\"-moz-crisp-edges\"],[\"image-rendering\",\"-o-crisp-edges\"],[\"image-rendering\",\"-webkit-optimize-contrast\"],[\"image-rendering\",\"optimize-contrast\"],[\"image-rendering\",\"crisp-edges\"],[\"image-rendering\",\"pixelated\"]],e.STYLE=e.CSS_DECLARATIONS.map((function(t){return t.join(\": \")+\"; \"})).join(\"\")},77922:function(t,e){\"use strict\";e.xmlns=\"http://www.w3.org/2000/xmlns/\",e.svg=\"http://www.w3.org/2000/svg\",e.xlink=\"http://www.w3.org/1999/xlink\",e.svgAttrs={xmlns:e.svg,\"xmlns:xlink\":e.xlink}},8729:function(t,e,r){\"use strict\";e.version=r(11506).version,r(7417),r(98847);for(var n=r(73972),i=e.register=n.register,a=r(10641),o=Object.keys(a),s=0;s<o.length;s++){var l=o[s];\"_\"!==l.charAt(0)&&(e[l]=a[l]),i({moduleType:\"apiMethod\",name:l,fn:a[l]})}i(r(67368)),i([r(32745),r(2468),r(47322),r(89853),r(68804),r(20763),r(23243),r(13137),r(97218),r(83312),r(37369),r(21081),r(12311),r(2199),r(30211),r(64168)]),i([r(92177),r(37815)]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(i(window.PlotlyLocales),delete window.PlotlyLocales),e.Icons=r(24255);var u=r(30211),c=r(74875);e.Plots={resize:c.resize,graphJson:c.graphJson,sendDataToCloud:c.sendDataToCloud},e.Fx={hover:u.hover,unhover:u.unhover,loneHover:u.loneHover,loneUnhover:u.loneUnhover},e.Snapshot=r(44511),e.PlotSchema=r(86281)},24255:function(t){\"use strict\";t.exports={undo:{width:857.1,height:1e3,path:\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\",transform:\"matrix(1 0 0 -1 0 850)\"},home:{width:928.6,height:1e3,path:\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"camera-retro\":{width:1e3,height:1e3,path:\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoombox:{width:1e3,height:1e3,path:\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\",transform:\"matrix(1 0 0 -1 0 850)\"},pan:{width:1e3,height:1e3,path:\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_plus:{width:875,height:1e3,path:\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_minus:{width:875,height:1e3,path:\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},autoscale:{width:1e3,height:1e3,path:\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_basic:{width:1500,height:1e3,path:\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_compare:{width:1125,height:1e3,path:\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\",transform:\"matrix(1 0 0 -1 0 850)\"},plotlylogo:{width:1542,height:1e3,path:\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"z-axis\":{width:1e3,height:1e3,path:\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"3d_rotate\":{width:1e3,height:1e3,path:\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\",transform:\"matrix(1 0 0 -1 0 850)\"},camera:{width:1e3,height:1e3,path:\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\",transform:\"matrix(1 0 0 -1 0 850)\"},movie:{width:1e3,height:1e3,path:\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\",transform:\"matrix(1 0 0 -1 0 850)\"},question:{width:857.1,height:1e3,path:\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\",transform:\"matrix(1 0 0 -1 0 850)\"},disk:{width:857.1,height:1e3,path:\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawopenpath:{width:70,height:70,path:\"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawclosedpath:{width:90,height:90,path:\"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z\",transform:\"matrix(1 0 0 1 -5 -5)\"},lasso:{width:1031,height:1e3,path:\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\",transform:\"matrix(1 0 0 -1 0 850)\"},selectbox:{width:1e3,height:1e3,path:\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawline:{width:70,height:70,path:\"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawrect:{width:80,height:80,path:\"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},drawcircle:{width:80,height:80,path:\"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},eraseshape:{width:80,height:80,path:\"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},spikeline:{width:1e3,height:1e3,path:\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\",transform:\"matrix(1.5 0 0 -1.5 0 850)\"},pencil:{width:1792,height:1792,path:\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\",transform:\"matrix(1 0 0 1 0 1)\"},newplotlylogo:{name:\"newplotlylogo\",svg:[\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>\",\"<defs>\",\" <style>\",\"  .cls-0{fill:#000;}\",\"  .cls-1{fill:#FFF;}\",\"  .cls-2{fill:#F26;}\",\"  .cls-3{fill:#D69;}\",\"  .cls-4{fill:#BAC;}\",\"  .cls-5{fill:#9EF;}\",\" </style>\",\"</defs>\",\" <title>plotly-logomark</title>\",\" <g id='symbol'>\",\"  <rect class='cls-0' x='0' y='0' width='132' height='132' rx='18' ry='18'/>\",\"  <circle class='cls-5' cx='102' cy='30' r='6'/>\",\"  <circle class='cls-4' cx='78' cy='30' r='6'/>\",\"  <circle class='cls-4' cx='78' cy='54' r='6'/>\",\"  <circle class='cls-3' cx='54' cy='30' r='6'/>\",\"  <circle class='cls-2' cx='30' cy='30' r='6'/>\",\"  <circle class='cls-2' cx='30' cy='54' r='6'/>\",\"  <path class='cls-1' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>\",\"  <path class='cls-1' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>\",\"  <path class='cls-1' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>\",\"  <path class='cls-1' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>\",\" </g>\",\"</svg>\"].join(\"\")}}},99863:function(t,e){\"use strict\";e.isLeftAnchor=function(t){return\"left\"===t.xanchor||\"auto\"===t.xanchor&&t.x<=1/3},e.isCenterAnchor=function(t){return\"center\"===t.xanchor||\"auto\"===t.xanchor&&t.x>1/3&&t.x<2/3},e.isRightAnchor=function(t){return\"right\"===t.xanchor||\"auto\"===t.xanchor&&t.x>=2/3},e.isTopAnchor=function(t){return\"top\"===t.yanchor||\"auto\"===t.yanchor&&t.y>=2/3},e.isMiddleAnchor=function(t){return\"middle\"===t.yanchor||\"auto\"===t.yanchor&&t.y>1/3&&t.y<2/3},e.isBottomAnchor=function(t){return\"bottom\"===t.yanchor||\"auto\"===t.yanchor&&t.y<=1/3}},26348:function(t,e,r){\"use strict\";var n=r(64872),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function u(t,e){return a(e-t,s)}function c(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=i(r,s))>(n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function f(t,e,r,n,i,a,u){i=i||0,a=a||0;var c,f,h,p,d,v=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}v?(c=0,f=o,h=s):r<n?(c=r,h=n):(c=n,h=r),t<e?(p=t,d=e):(p=e,d=t);var y,m=Math.abs(h-c)<=o?0:1;function x(t,e,r){return\"A\"+[t,t]+\" \"+[0,m,r]+\" \"+g(t,e)}return v?y=null===p?\"M\"+g(d,c)+x(d,f,0)+x(d,h,0)+\"Z\":\"M\"+g(p,c)+x(p,f,0)+x(p,h,0)+\"ZM\"+g(d,c)+x(d,f,1)+x(d,h,1)+\"Z\":null===p?(y=\"M\"+g(d,c)+x(d,h,0),u&&(y+=\"L0,0Z\")):y=\"M\"+g(p,c)+\"L\"+g(d,c)+x(d,h,0)+\"L\"+g(p,h)+x(p,c,1)+\"Z\",y}t.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:u,angleDist:function(t,e){return Math.abs(u(t,e))},isFullCircle:l,isAngleInsideSector:c,isPtInsideSector:function(t,e,r,n){return!!c(e,n)&&(r[0]<r[1]?(i=r[0],a=r[1]):(i=r[1],a=r[0]),t>=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},73627:function(t,e){\"use strict\";var r=Array.isArray,n=ArrayBuffer,i=DataView;function a(t){return n.isView(t)&&!(t instanceof i)}function o(t){return r(t)||a(t)}function s(t,e,r){if(o(t)){if(o(t[0])){for(var n=r,i=0;i<t.length;i++)n=e(n,t[i].length);return n}return t.length}return 0}e.isTypedArray=a,e.isArrayOrTypedArray=o,e.isArray1D=function(t){return!o(t[0])},e.ensureArray=function(t,e){return r(t)||(t=[]),t.length=e,t},e.concat=function(){var t,e,n,i,a,o,s,l,u=[],c=!0,f=0;for(n=0;n<arguments.length;n++)(o=(i=arguments[n]).length)&&(e?u.push(i):(e=i,a=o),r(i)?t=!1:(c=!1,f?t!==i.constructor&&(t=!1):t=i.constructor),f+=o);if(!f)return[];if(!u.length)return e;if(c)return e.concat.apply(e,u);if(t){for((s=new t(f)).set(e),n=0;n<u.length;n++)i=u[n],s.set(i,a),a+=i.length;return s}for(s=new Array(f),l=0;l<e.length;l++)s[l]=e[l];for(n=0;n<u.length;n++){for(i=u[n],l=0;l<i.length;l++)s[a+l]=i[l];a+=l}return s},e.maxRowLength=function(t){return s(t,Math.max,0)},e.minRowLength=function(t){return s(t,Math.min,1/0)}},95218:function(t,e,r){\"use strict\";var n=r(92770),i=r(50606).BADNUM,a=/^['\"%,$#\\s']+|[, ]|['\"%,$#\\s']+$/g;t.exports=function(t){return\"string\"==typeof t&&(t=t.replace(a,\"\")),n(t)?Number(t):i}},33306:function(t){\"use strict\";t.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each((function(t){t.regl&&t.regl.clear({color:!0,depth:!0})}))}},86367:function(t){\"use strict\";t.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener(\"resize\",t._responsiveChartHandler),delete t._responsiveChartHandler)}},96554:function(t,e,r){\"use strict\";var n=r(92770),i=r(84267),a=r(9012),o=r(63282),s=r(7901),l=r(37822).DESELECTDIM,u=r(65487),c=r(30587).counter,f=r(64872).modHalf,h=r(73627).isArrayOrTypedArray;function p(t,r){var n=e.valObjectMeta[r.valType];if(r.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,r);var i={},a=i,o={set:function(t){a=t}};return n.coerceFunction(t,o,i,r),a!==i}e.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var i=String(r[n]);if(\"/\"===i.charAt(0)&&\"/\"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if(\"string\"!=typeof t){var i=\"number\"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){\"auto\"===t?e.set(\"auto\"):n(t)?e.set(f(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||c(r);\"string\"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||\"string\"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(-1===(n.extras||[]).indexOf(t))if(\"string\"==typeof t){for(var i=t.split(\"+\"),a=0;a<i.length;){var o=i[a];-1===n.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}i.length?e.set(i.join(\"+\")):e.set(r)}else e.set(r);else e.set(t)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,r,n,i){function a(t,r,n){var i,a={set:function(t){i=t}};return void 0===n&&(n=r.dflt),e.valObjectMeta[r.valType].coerceFunction(t,a,n,r),i}var o=2===i.dimensions||\"1-2\"===i.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,u,c,f,h,p=i.items,d=[],v=Array.isArray(p),g=v&&o&&Array.isArray(p[0]),y=o&&v&&!g,m=v&&!y?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<m;s++)for(d[s]=[],u=Array.isArray(t[s])?t[s]:[],f=y?p.length:v?p[s].length:u.length,l=0;l<f;l++)c=y?p[l]:v?p[s][l]:p,void 0!==(h=a(u[l],c,(n[s]||[])[l]))&&(d[s][l]=h);else for(s=0;s<m;s++)void 0!==(h=a(t[s],v?p[s]:p,n[s]))&&(d[s]=h);r.set(d)}else r.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),i=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var a=0;a<t.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength&&t[a].length!==r[a].length)return!1;for(var o=0;o<t[a].length;o++)if(!p(t[a][o],n?r[a][o]:r))return!1}else if(!p(t[a],n?r[a]:r))return!1;return!0}}},e.coerce=function(t,r,n,i,a){var o=u(n,i).get(),s=u(t,i),l=u(r,i),c=s.get(),f=r._template;if(void 0===c&&f&&(c=u(f,i).get(),f=0),void 0===a&&(a=o.dflt),o.arrayOk&&h(c))return l.set(c),c;var d=e.valObjectMeta[o.valType].coerceFunction;d(c,l,a,o);var v=l.get();return f&&v===a&&!p(c,o)&&(d(c=u(f,i).get(),l,a,o),v=l.get()),v},e.coerce2=function(t,r,n,i,a){var o=u(t,i),s=e.coerce(t,r,n,i,a);return null!=o.get()&&s},e.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+\".family\",r.family),n.size=t(e+\".size\",r.size),n.color=t(e+\".color\",r.color),n},e.coercePattern=function(t,e,r,n){if(t(e+\".shape\")){t(e+\".solidity\"),t(e+\".size\");var i=\"overlay\"===t(e+\".fillmode\");if(!n){var a=t(e+\".bgcolor\",i?r:void 0);t(e+\".fgcolor\",i?s.contrast(a):r)}t(e+\".fgopacity\",i?.5:1)}},e.coerceHoverinfo=function(t,r,n){var i,o=r._module.attributes,s=o.hoverinfo?o:a,l=s.hoverinfo;if(1===n._dataLength){var u=\"all\"===l.dflt?l.flags.slice():l.dflt.split(\"+\");u.splice(u.indexOf(\"name\"),1),i=u.join(\"+\")}return e.coerce(t,r,s,\"hoverinfo\",i)},e.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,i=t.marker.opacity;void 0!==i&&(h(i)||t.selected||t.unselected||(r=i,n=l*i),e(\"selected.marker.opacity\",r),e(\"unselected.marker.opacity\",n))}},e.validate=p},41631:function(t,e,r){\"use strict\";var n,i,a=r(84096).i$,o=r(92770),s=r(47769),l=r(64872).mod,u=r(50606),c=u.BADNUM,f=u.ONEDAY,h=u.ONEHOUR,p=u.ONEMIN,d=u.ONESEC,v=u.EPOCHJD,g=r(73972),y=r(84096).g0,m=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\d)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,x=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\di?)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&g.componentsRegistry.calendars&&\"string\"==typeof t&&\"gregorian\"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}e.dateTick0=function(t,r){var n=function(t,e){return _(t)?e?g.getComponentMethod(\"calendars\",\"CANONICAL_SUNDAY\")[t]:g.getComponentMethod(\"calendars\",\"CANONICAL_TICK\")[t]:e?\"2000-01-02\":\"2000-01-01\"}(t,!!r);if(r<2)return n;var i=e.dateTime2ms(n,t);return i+=f*(r-1),e.ms2DateTime(i,0,t)},e.dfltRange=function(t){return _(t)?g.getComponentMethod(\"calendars\",\"DFLTRANGE\")[t]:[\"2000-01-01\",\"2001-01-01\"]},e.isJSDate=function(t){return\"object\"==typeof t&&null!==t&&\"function\"==typeof t.getTime},e.dateTime2ms=function(t,r){if(e.isJSDate(t)){var a=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;a=a-s/2+l(o-a+s/2,s)}return(t=Number(t)-a)>=n&&t<=i?t:c}if(\"string\"!=typeof t&&\"number\"!=typeof t)return c;t=String(t);var u=_(r),y=t.charAt(0);!u||\"G\"!==y&&\"g\"!==y||(t=t.substr(1),r=\"\");var w=u&&\"chinese\"===r.substr(0,7),T=t.match(w?x:m);if(!T)return c;var k=T[1],A=T[3]||\"1\",M=Number(T[5]||1),S=Number(T[7]||0),E=Number(T[9]||0),L=Number(T[11]||0);if(u){if(2===k.length)return c;var C;k=Number(k);try{var P=g.getComponentMethod(\"calendars\",\"getCal\")(r);if(w){var O=\"i\"===A.charAt(A.length-1);A=parseInt(A,10),C=P.newDate(k,P.toMonthIndex(k,A,O),M)}else C=P.newDate(k,Number(A),M)}catch(t){return c}return C?(C.toJD()-v)*f+S*h+E*p+L*d:c}k=2===k.length?(Number(k)+2e3-b)%100+b:Number(k),A-=1;var I=new Date(Date.UTC(2e3,A,M,S,E));return I.setUTCFullYear(k),I.getUTCMonth()!==A||I.getUTCDate()!==M?c:I.getTime()+L*d},n=e.MIN_MS=e.dateTime2ms(\"-9999\"),i=e.MAX_MS=e.dateTime2ms(\"9999-12-31 23:59:59.9999\"),e.isDateTime=function(t,r){return e.dateTime2ms(t,r)!==c};var T=90*f,k=3*h,A=5*p;function M(t,e,r,n,i){if((e||r||n||i)&&(t+=\" \"+w(e,2)+\":\"+w(r,2),(n||i)&&(t+=\":\"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+=\".\"+w(i,a)}return t}e.ms2DateTime=function(t,e,r){if(\"number\"!=typeof t||!(t>=n&&t<=i))return c;e||(e=0);var a,o,s,u,m,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/f)+v,E=Math.floor(l(t,f));try{a=g.getComponentMethod(\"calendars\",\"getCal\")(r).fromJD(S).formatDate(\"yyyy-mm-dd\")}catch(t){a=y(\"G%Y-%m-%d\")(new Date(w))}if(\"-\"===a.charAt(0))for(;a.length<11;)a=\"-0\"+a.substr(1);else for(;a.length<10;)a=\"0\"+a;o=e<T?Math.floor(E/h):0,s=e<T?Math.floor(E%h/p):0,u=e<k?Math.floor(E%p/d):0,m=e<A?E%d*10+b:0}else x=new Date(w),a=y(\"%Y-%m-%d\")(x),o=e<T?x.getUTCHours():0,s=e<T?x.getUTCMinutes():0,u=e<k?x.getUTCSeconds():0,m=e<A?10*x.getUTCMilliseconds()+b:0;return M(a,o,s,u,m)},e.ms2DateTimeLocal=function(t){if(!(t>=n+f&&t<=i-f))return c;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return M(a(\"%Y-%m-%d\")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},e.cleanDate=function(t,r,n){if(t===c)return r;if(e.isJSDate(t)||\"number\"==typeof t&&isFinite(t)){if(_(n))return s.error(\"JS Dates and milliseconds are incompatible with world calendars\",t),r;if(!(t=e.ms2DateTimeLocal(+t))&&void 0!==r)return r}else if(!e.isDateTime(t,n))return s.error(\"unrecognized date\",t),r;return t};var S=/%\\d?f/g,E=/%h/g,L={1:\"1\",2:\"1\",3:\"2\",4:\"2\"};function C(t,e,r,n){t=t.replace(S,(function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,\"\")||\"0\"}));var i=new Date(Math.floor(e+.05));if(t=t.replace(E,(function(){return L[r(\"%q\")(i)]})),_(n))try{t=g.getComponentMethod(\"calendars\",\"worldCalFmt\")(t,e,n)}catch(t){return\"Invalid\"}return r(t)(i)}var P=[59,59.9,59.99,59.999,59.9999];e.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if(\"y\"===r)e=a.year;else if(\"m\"===r)e=a.month;else{if(\"d\"!==r)return function(t,e){var r=l(t+.05,f),n=w(Math.floor(r/h),2)+\":\"+w(l(Math.floor(r/p),60),2);if(\"M\"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),P[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,\"\").replace(/[\\.]$/,\"\")),n+=\":\"+i}return n}(t,r)+\"\\n\"+C(a.dayMonthYear,t,n,i);e=a.dayMonth+\"\\n\"+a.year}return C(e,t,n,i)};var O=3*f;e.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,f);if(t=Math.round(t-n),r)try{var i=Math.round(t/f)+v,a=g.getComponentMethod(\"calendars\",\"getCal\")(r),o=a.fromJD(i);return e%12?a.add(o,e,\"m\"):a.add(o,e/12,\"y\"),(o.toJD()-v)*f+n}catch(e){s.error(\"invalid ms \"+t+\" in calendar \"+r)}var u=new Date(t+O);return u.setUTCMonth(u.getUTCMonth()+e)+n-O},e.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,u=_(e)&&g.getComponentMethod(\"calendars\",\"getCal\")(e),c=0;c<t.length;c++)if(n=t[c],o(n)){if(!(n%f))if(u)try{1===(r=u.fromJD(n/f+v)).day()?1===r.month()?i++:a++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?i++:a++:s++}else l++;s+=a+=i;var h=t.length-l;return{exactYears:i/h,exactMonths:a/h,exactDays:s/h}}},24401:function(t,e,r){\"use strict\";var n=r(39898),i=r(47769),a=r(35657),o=r(79576);function s(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function l(t,e,r){var n=\"plotly.js-style-\"+t,a=document.getElementById(n);a||((a=document.createElement(\"style\")).setAttribute(\"id\",n),a.appendChild(document.createTextNode(\"\")),document.head.appendChild(a));var o=a.sheet;o.insertRule?o.insertRule(e+\"{\"+r+\"}\",0):o.addRule?o.addRule(e,r,0):i.warn(\"addStyleRule failed\")}function u(t){var e=window.getComputedStyle(t,null),r=e.getPropertyValue(\"-webkit-transform\")||e.getPropertyValue(\"-moz-transform\")||e.getPropertyValue(\"-ms-transform\")||e.getPropertyValue(\"-o-transform\")||e.getPropertyValue(\"transform\");return\"none\"===r?null:r.replace(\"matrix\",\"\").replace(\"3d\",\"\").slice(1,-1).split(\",\").map((function(t){return+t}))}function c(t){for(var e=[];f(t);)e.push(t),t=t.parentNode;return e}function f(t){return t&&(t instanceof Element||t instanceof HTMLElement)}t.exports={getGraphDiv:function(t){var e;if(\"string\"==typeof t){if(null===(e=document.getElementById(t)))throw new Error(\"No DOM element with id '\"+t+\"' exists on the page.\");return e}if(null==t)throw new Error(\"DOM element provided is null or undefined\");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed(\"js-plotly-plot\")},removeElement:s,addStyleRule:function(t,e){l(\"global\",t,e)},addRelatedStyleRule:l,deleteRelatedStyleRule:function(t){var e=\"plotly.js-style-\"+t,r=document.getElementById(e);r&&s(r)},getFullTransformMatrix:function(t){var e=c(t),r=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.forEach((function(t){var e=u(t);if(e){var n=a.convertCssMatrix(e);r=o.multiply(r,r,n)}})),r},getElementTransformMatrix:u,getElementAndAncestors:c,equalDomRects:function(t,e){return t&&e&&t.top===e.top&&t.left===e.left&&t.right===e.right&&t.bottom===e.bottom}}},11086:function(t,e,r){\"use strict\";var n=r(15398).EventEmitter,i={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,i){\"undefined\"!=typeof jQuery&&jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;\"undefined\"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var a=t._ev;if(!a)return n;var o,s=a._events[e];if(!s)return n;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(a,[r]))):t.apply(a,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return i=l(s[o]),void 0!==n?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};t.exports=i},1426:function(t,e,r){\"use strict\";var n=r(41965),i=Array.isArray;function a(t,e,r,o){var s,l,u,c,f,h,p,d=t[0],v=t.length;if(2===v&&i(d)&&i(t[1])&&0===d.length){if(p=function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&\"object\"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],d),p)return d;d.splice(0,d.length)}for(var g=1;g<v;g++)for(l in s=t[g])u=d[l],c=s[l],o&&i(c)?d[l]=c:e&&c&&(n(c)||(f=i(c)))?(f?(f=!1,h=u&&i(u)?u:[]):h=u&&n(u)?u:{},d[l]=a([h,c],e,r,o)):(void 0!==c||r)&&(d[l]=c);return d}e.extendFlat=function(){return a(arguments,!1,!1,!1)},e.extendDeep=function(){return a(arguments,!0,!1,!1)},e.extendDeepAll=function(){return a(arguments,!0,!0,!1)},e.extendDeepNoArrays=function(){return a(arguments,!0,!1,!0)}},75744:function(t){\"use strict\";t.exports=function(t){for(var e={},r=[],n=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,r[n++]=a)}return r}},76756:function(t){\"use strict\";function e(t){return!0===t.visible}function r(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}t.exports=function(t){for(var n,i=(n=t,Array.isArray(n)&&Array.isArray(n[0])&&n[0][0]&&n[0][0].trace?r:e),a=[],o=0;o<t.length;o++){var s=t[o];i(s)&&a.push(s)}return a}},41327:function(t,e,r){\"use strict\";var n=r(39898),i=r(24138),a=r(30774),o=r(29261),s=r(85268),l=r(23389),u=r(47769),c=r(41965),f=r(65487),h=r(61082),p=Object.keys(i),d={\"ISO-3\":l,\"USA-states\":l,\"country names\":function(t){for(var e=0;e<p.length;e++){var r=p[e];if(new RegExp(i[r]).test(t.trim().toLowerCase()))return r}return u.log(\"Unrecognized country name: \"+t+\".\"),!1}};function v(t){var e=t.geojson,r=window.PlotlyGeoAssets||{},n=\"string\"==typeof e?r[e]:e;return c(n)?n:(u.error(\"Oops ... something went wrong when fetching \"+e),!1)}t.exports={locationToFeature:function(t,e,r){if(!e||\"string\"!=typeof e)return!1;var n,i,a,o=d[t](e);if(o){if(\"USA-states\"===t)for(n=[],a=0;a<r.length;a++)(i=r[a]).properties&&i.properties.gu&&\"USA\"===i.properties.gu&&n.push(i);else n=r;for(a=0;a<n.length;a++)if((i=n[a]).id===o)return i;u.log([\"Location with id\",o,\"does not have a matching topojson feature at this resolution.\"].join(\" \"))}return!1},feature2polygons:function(t){var e,r,n,i,a=t.geometry,o=a.coordinates,s=t.id,l=[];function u(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e=\"RUS\"===s||\"FJI\"===s?function(t){var e;if(null===u(t))e=t;else for(e=new Array(t.length),i=0;i<t.length;i++)e[i]=[t[i][0]<0?t[i][0]+360:t[i][0],t[i][1]];l.push(h.tester(e))}:\"ATA\"===s?function(t){var e=u(t);if(null===e)return l.push(h.tester(t));var r=new Array(t.length+1),n=0;for(i=0;i<t.length;i++)i>e?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var a=h.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(h.tester(t))},a.type){case\"MultiPolygon\":for(r=0;r<o.length;r++)for(n=0;n<o[r].length;n++)e(o[r][n]);break;case\"Polygon\":for(r=0;r<o.length;r++)e(o[r])}return l},getTraceGeojson:v,extractTraceFeature:function(t){var e=t[0].trace,r=v(e);if(!r)return!1;var n,i={},s=[];for(n=0;n<e._length;n++){var l=t[n];(l.loc||0===l.loc)&&(i[l.loc]=l)}function c(t){var r=f(t,e.featureidkey||\"id\").get(),n=i[r];if(n){var l=t.geometry;if(\"Polygon\"===l.type||\"MultiPolygon\"===l.type){var c={type:\"Feature\",id:r,geometry:l,properties:{}};c.properties.ct=function(t){var e,r=t.geometry;if(\"MultiPolygon\"===r.type)for(var n=r.coordinates,i=0,s=0;s<n.length;s++){var l={type:\"Polygon\",coordinates:n[s]},u=a.default(l);u>i&&(i=u,e=l)}else e=r;return o.default(e).geometry.coordinates}(c),n.fIn=t,n.fOut=c,s.push(c)}else u.log([\"Location\",n.loc,\"does not have a valid GeoJSON geometry.\",\"Traces with locationmode *geojson-id* only support\",\"*Polygon* and *MultiPolygon* geometries.\"].join(\" \"))}delete i[r]}switch(r.type){case\"FeatureCollection\":var h=r.features;for(n=0;n<h.length;n++)c(h[n]);break;case\"Feature\":c(r);break;default:return u.warn([\"Invalid GeoJSON type\",(r.type||\"none\")+\".\",\"Traces with locationmode *geojson-id* only support\",\"*FeatureCollection* and *Feature* types.\"].join(\" \")),!1}for(var p in i)u.log([\"Location *\"+p+\"*\",\"does not have a matching feature with id-key\",\"*\"+e.featureidkey+\"*.\"].join(\" \"));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},r=[];function i(t){return new Promise((function(r,i){n.json(t,(function(n,a){if(n){delete e[t];var o=404===n.status?'GeoJSON at URL \"'+t+'\" does not exist.':\"Unexpected error while fetching from \"+t;return i(new Error(o))}return e[t]=a,r(a)}))}))}function a(t){return new Promise((function(r,n){var i=0,a=setInterval((function(){return e[t]&&\"pending\"!==e[t]?(clearInterval(a),r(e[t])):i>100?(clearInterval(a),n(\"Unexpected error while fetching from \"+t)):void i++}),50)}))}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;\"string\"==typeof s&&(e[s]?\"pending\"===e[s]&&r.push(a(s)):(e[s]=\"pending\",r.push(i(s))))}return r},computeBbox:function(t){return s.default(t)}}},18214:function(t,e,r){\"use strict\";var n=r(50606).BADNUM;e.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],i=[],a=0;a<t.length;a++){var o=t[a].lonlat;o[0]!==n?i.push(o):!e&&i.length>0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},e.makeLine=function(t){return 1===t.length?{type:\"LineString\",coordinates:t[0]}:{type:\"MultiLineString\",coordinates:t}},e.makePolygon=function(t){if(1===t.length)return{type:\"Polygon\",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:\"MultiPolygon\",coordinates:e}},e.makeBlank=function(){return{type:\"Point\",coordinates:[]}}},87642:function(t,e,r){\"use strict\";var n,i,a,o=r(64872).mod;function s(t,e,r,n,i,a,o,s){var l=r-t,u=i-t,c=o-i,f=n-e,h=a-e,p=s-a,d=l*p-c*f;if(0===d)return null;var v=(u*p-c*h)/d,g=(u*f-l*h)/d;return g<0||g>1||v<0||v>1?null:{x:t+l*v,y:e+f*v}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}e.segmentsIntersect=s,e.segmentDistance=function(t,e,r,n,i,a,o,u){if(s(t,e,r,n,i,a,o,u))return 0;var c=r-t,f=n-e,h=o-i,p=u-a,d=c*c+f*f,v=h*h+p*p,g=Math.min(l(c,f,d,i-t,a-e),l(c,f,d,o-t,u-e),l(h,p,v,t-i,e-a),l(h,p,v,r-i,n-a));return Math.sqrt(g)},e.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),u=t.getPointAtLength(o(r+s/2,e)),c=Math.atan((u.y-l.y)/(u.x-l.x)),f=t.getPointAtLength(o(r,e)),h={x:(4*f.x+l.x+u.x)/6,y:(4*f.y+l.y+u.y)/6,theta:c};return n[r]=h,h},e.clearLocationCache=function(){i=null},e.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,u=0,c=t.getTotalLength(),f=c;function h(e){var r=t.getPointAtLength(e);0===e?n=r:e===c&&(i=r);var u=r.x<a?a-r.x:r.x>o?r.x-o:0,f=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(u*u+f*f)}for(var p=h(u);p;){if((u+=p+r)>f)return;p=h(u)}for(p=h(f);p;){if(u>(f-=p+r))return;p=h(f)}return{min:u,max:f,len:f-u,total:c,isClosed:0===u&&f===c&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},e.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,u=n.iterationLimit||30,c=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,f=0,h=0,p=s;f<u;){if(i=(h+p)/2,o=(a=t.getPointAtLength(i))[r]-e,Math.abs(o)<l)return a;c*o>0?p=i:h=i,f++}return a}},81697:function(t,e,r){\"use strict\";var n=r(92770),i=r(84267),a=r(25075),o=r(21081),s=r(22399).defaultLine,l=r(73627).isArrayOrTypedArray,u=a(s);function c(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return u;var e=a(t);return e.length?e:u}function h(t){return n(t)?t:1}t.exports={formatColor:function(t,e,r){var n,i,s,p,d,v=t.color,g=l(v),y=l(e),m=o.extractOpts(t),x=[];if(n=void 0!==m.colorscale?o.makeColorScaleFuncFromTrace(t):f,i=g?function(t,e){return void 0===t[e]?u:a(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?1:h(t[e])}:h,g||y)for(var b=0;b<r;b++)p=i(v,b),d=s(e,b),x[b]=c(p,d);else x=c(a(v),e);return x},parseColorScale:function(t){var e=o.extractOpts(t),r=e.colorscale;return e.reversescale&&(r=o.flipScale(e.colorscale)),r.map((function(t){var e=t[0],r=i(t[1]).toRgb();return{index:e,rgb:[r.r,r.g,r.b,r.a]}}))}}},28984:function(t,e,r){\"use strict\";var n=r(23389);function i(t){return[t]}t.exports={keyFun:function(t){return t.key},repeat:i,descend:n,wrap:i,unwrap:function(t){return t[0]}}},23389:function(t){\"use strict\";t.exports=function(t){return t}},39240:function(t){\"use strict\";t.exports=function(t,e){if(!e)return t;var r=1/Math.abs(e),n=r>1?(r*t+r*e)/r:t+e,i=String(n).length;if(i>16){var a=String(e).length;if(i>=String(t).length+a){var o=parseFloat(n).toPrecision(12);-1===o.indexOf(\"e+\")&&(n=+o)}}return n}},71828:function(t,e,r){\"use strict\";var n=r(39898),i=r(84096).g0,a=r(60721).WU,o=r(92770),s=r(50606),l=s.FP_SAFE,u=-l,c=s.BADNUM,f=t.exports={};f.adjustFormat=function(t){return!t||/^\\d[.]\\df/.test(t)||/[.]\\d%/.test(t)?t:\"0.f\"===t?\"~f\":/^\\d%/.test(t)?\"~%\":/^\\ds/.test(t)?\"~s\":!/^[~,.0$]/.test(t)&&/[&fps]/.test(t)?\"~\"+t:t};var h={};f.warnBadFormat=function(t){var e=String(t);h[e]||(h[e]=1,f.warn('encountered bad format: \"'+e+'\"'))},f.noFormat=function(t){return String(t)},f.numberFormat=function(t){var e;try{e=a(f.adjustFormat(t))}catch(e){return f.warnBadFormat(t),f.noFormat}return e},f.nestedProperty=r(65487),f.keyedContainer=r(66636),f.relativeAttr=r(6962),f.isPlainObject=r(41965),f.toLogRange=r(58163),f.relinkPrivateKeys=r(51332);var p=r(73627);f.isTypedArray=p.isTypedArray,f.isArrayOrTypedArray=p.isArrayOrTypedArray,f.isArray1D=p.isArray1D,f.ensureArray=p.ensureArray,f.concat=p.concat,f.maxRowLength=p.maxRowLength,f.minRowLength=p.minRowLength;var d=r(64872);f.mod=d.mod,f.modHalf=d.modHalf;var v=r(96554);f.valObjectMeta=v.valObjectMeta,f.coerce=v.coerce,f.coerce2=v.coerce2,f.coerceFont=v.coerceFont,f.coercePattern=v.coercePattern,f.coerceHoverinfo=v.coerceHoverinfo,f.coerceSelectionMarkerOpacity=v.coerceSelectionMarkerOpacity,f.validate=v.validate;var g=r(41631);f.dateTime2ms=g.dateTime2ms,f.isDateTime=g.isDateTime,f.ms2DateTime=g.ms2DateTime,f.ms2DateTimeLocal=g.ms2DateTimeLocal,f.cleanDate=g.cleanDate,f.isJSDate=g.isJSDate,f.formatDate=g.formatDate,f.incrementMonth=g.incrementMonth,f.dateTick0=g.dateTick0,f.dfltRange=g.dfltRange,f.findExactDates=g.findExactDates,f.MIN_MS=g.MIN_MS,f.MAX_MS=g.MAX_MS;var y=r(65888);f.findBin=y.findBin,f.sorterAsc=y.sorterAsc,f.sorterDes=y.sorterDes,f.distinctVals=y.distinctVals,f.roundUp=y.roundUp,f.sort=y.sort,f.findIndexOfMin=y.findIndexOfMin,f.sortObjectKeys=r(78607);var m=r(80038);f.aggNums=m.aggNums,f.len=m.len,f.mean=m.mean,f.median=m.median,f.midRange=m.midRange,f.variance=m.variance,f.stdev=m.stdev,f.interp=m.interp;var x=r(35657);f.init2dArray=x.init2dArray,f.transposeRagged=x.transposeRagged,f.dot=x.dot,f.translationMatrix=x.translationMatrix,f.rotationMatrix=x.rotationMatrix,f.rotationXYMatrix=x.rotationXYMatrix,f.apply3DTransform=x.apply3DTransform,f.apply2DTransform=x.apply2DTransform,f.apply2DTransform2=x.apply2DTransform2,f.convertCssMatrix=x.convertCssMatrix,f.inverseTransformMatrix=x.inverseTransformMatrix;var b=r(26348);f.deg2rad=b.deg2rad,f.rad2deg=b.rad2deg,f.angleDelta=b.angleDelta,f.angleDist=b.angleDist,f.isFullCircle=b.isFullCircle,f.isAngleInsideSector=b.isAngleInsideSector,f.isPtInsideSector=b.isPtInsideSector,f.pathArc=b.pathArc,f.pathSector=b.pathSector,f.pathAnnulus=b.pathAnnulus;var _=r(99863);f.isLeftAnchor=_.isLeftAnchor,f.isCenterAnchor=_.isCenterAnchor,f.isRightAnchor=_.isRightAnchor,f.isTopAnchor=_.isTopAnchor,f.isMiddleAnchor=_.isMiddleAnchor,f.isBottomAnchor=_.isBottomAnchor;var w=r(87642);f.segmentsIntersect=w.segmentsIntersect,f.segmentDistance=w.segmentDistance,f.getTextLocation=w.getTextLocation,f.clearLocationCache=w.clearLocationCache,f.getVisibleSegment=w.getVisibleSegment,f.findPointOnPath=w.findPointOnPath;var T=r(1426);f.extendFlat=T.extendFlat,f.extendDeep=T.extendDeep,f.extendDeepAll=T.extendDeepAll,f.extendDeepNoArrays=T.extendDeepNoArrays;var k=r(47769);f.log=k.log,f.warn=k.warn,f.error=k.error;var A=r(30587);f.counterRegex=A.counter;var M=r(79990);f.throttle=M.throttle,f.throttleDone=M.done,f.clearThrottle=M.clear;var S=r(24401);function E(t){var e={};for(var r in t)for(var n=t[r],i=0;i<n.length;i++)e[n[i]]=+r;return e}f.getGraphDiv=S.getGraphDiv,f.isPlotDiv=S.isPlotDiv,f.removeElement=S.removeElement,f.addStyleRule=S.addStyleRule,f.addRelatedStyleRule=S.addRelatedStyleRule,f.deleteRelatedStyleRule=S.deleteRelatedStyleRule,f.getFullTransformMatrix=S.getFullTransformMatrix,f.getElementTransformMatrix=S.getElementTransformMatrix,f.getElementAndAncestors=S.getElementAndAncestors,f.equalDomRects=S.equalDomRects,f.clearResponsive=r(86367),f.preserveDrawingBuffer=r(45142),f.makeTraceGroups=r(77310),f._=r(15867),f.notifier=r(75046),f.filterUnique=r(75744),f.filterVisible=r(76756),f.pushUnique=r(75138),f.increment=r(39240),f.cleanNumber=r(95218),f.ensureNumber=function(t){return o(t)?(t=Number(t))>l||t<u?c:t:c},f.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&o(t)&&t>=0&&t%1==0},f.noop=r(64213),f.identity=r(23389),f.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},f.swapAttrs=function(t,e,r,n){r||(r=\"x\"),n||(n=\"y\");for(var i=0;i<e.length;i++){var a=e[i],o=f.nestedProperty(t,a.replace(\"?\",r)),s=f.nestedProperty(t,a.replace(\"?\",n)),l=o.get();o.set(s.get()),s.set(l)}},f.raiseToTop=function(t){t.parentNode.appendChild(t)},f.cancelTransition=function(t){return t.transition().duration(0)},f.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},f.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},f.simpleMap=function(t,e,r,n,i){for(var a=t.length,o=new Array(a),s=0;s<a;s++)o[s]=e(t[s],r,n,i);return o},f.randstr=function t(e,r,n,i){if(n||(n=16),void 0===r&&(r=24),r<=0)return\"0\";var a,o,s=Math.log(Math.pow(2,r))/Math.log(n),l=\"\";for(a=2;s===1/0;a*=2)s=Math.log(Math.pow(2,r/a))/Math.log(n)*a;var u=s-Math.floor(s);for(a=0;a<Math.floor(s);a++)l=Math.floor(Math.random()*n).toString(n)+l;u&&(o=Math.pow(n,u),l=Math.floor(Math.random()*o).toString(n)+l);var c=parseInt(l,n);return e&&e[l]||c!==1/0&&c>=Math.pow(2,r)?i>10?(f.warn(\"randstr failed uniqueness\"),l):t(e,r,n,(i||0)+1):l},f.OptionControl=function(t,e){t||(t={}),e||(e=\"opt\");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r[\"_\"+e]=t,r},f.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r<l;r++)u[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(a=0,n=0;n<l;n++)(i=r+n+1-e)<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},f.syncOrAsync=function(t,e,r){var n;function i(){return f.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i);return r&&r(e)},f.stripTrailingSlash=function(t){return\"/\"===t.substr(-1)?t.substr(0,t.length-1):t},f.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?i=!0:a=!1;if(i&&!a)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},f.mergeArray=function(t,e,r,n){var i=\"function\"==typeof n;if(f.isArrayOrTypedArray(t))for(var a=Math.min(t.length,e.length),o=0;o<a;o++){var s=t[o];e[o][r]=i?n(s):s}},f.mergeArrayCastPositive=function(t,e,r){return f.mergeArray(t,e,r,(function(t){var e=+t;return isFinite(e)&&e>0?e:0}))},f.fillArray=function(t,e,r,n){if(n=n||f.identity,f.isArrayOrTypedArray(t))for(var i=0;i<e.length;i++)e[i][r]=n(t[i])},f.castOption=function(t,e,r,n){n=n||f.identity;var i=f.nestedProperty(t,r).get();return f.isArrayOrTypedArray(i)?Array.isArray(e)&&f.isArrayOrTypedArray(i[e[0]])?n(i[e[0]][e[1]]):n(i[e]):i},f.extractOption=function(t,e,r,n){if(r in t)return t[r];var i=f.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},f.tagSelected=function(t,e,r){var n,i,a=e.selectedpoints,o=e._indexToPoints;o&&(n=E(o));for(var s=0;s<a.length;s++){var l=a[s];if(f.isIndex(l)||f.isArrayOrTypedArray(l)&&f.isIndex(l[0])&&f.isIndex(l[1])){var u=n?n[l]:l,c=r?r[u]:u;void 0!==(i=c)&&i<t.length&&(t[c].selected=1)}}},f.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=E(r),i=[],a=0;a<e.length;a++){var o=e[a];if(f.isIndex(o)){var s=n[o];f.isIndex(s)&&i.push(s)}}return i}return e},f.getTargetArray=function(t,e){var r=e.target;if(\"string\"==typeof r&&r){var n=f.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},f.minExtend=function t(e,r,n){var i={};\"object\"!=typeof r&&(r={});var a,o,s,l=\"pieLike\"===n?-1:3,u=Object.keys(e);for(a=0;a<u.length;a++)s=e[o=u[a]],\"_\"!==o.charAt(0)&&\"function\"!=typeof s&&(\"module\"===o?i[o]=s:Array.isArray(s)?i[o]=\"colorscale\"===o||-1===l?s.slice():s.slice(0,l):f.isTypedArray(s)?i[o]=-1===l?s.subarray():s.subarray(0,l):i[o]=s&&\"object\"==typeof s?t(e[o],r[o],n):s);for(u=Object.keys(r),a=0;a<u.length;a++)\"object\"==typeof(s=r[o=u[a]])&&o in i&&\"object\"==typeof i[o]||(i[o]=s);return i},f.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},f.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},f.isIE=function(){return void 0!==window.navigator.msSaveBlob};var L=/Version\\/[\\d\\.]+.*Safari/;f.isSafari=function(){return L.test(window.navigator.userAgent)};var C=/iPad|iPhone|iPod/;f.isIOS=function(){return C.test(window.navigator.userAgent)};var P=/Firefox\\/(\\d+)\\.\\d+/;f.getFirefoxVersion=function(){var t=P.exec(window.navigator.userAgent);if(t&&2===t.length){var e=parseInt(t[1]);if(!isNaN(e))return e}return null},f.isD3Selection=function(t){return t instanceof n.selection},f.ensureSingle=function(t,e,r,n){var i=t.select(e+(r?\".\"+r:\"\"));if(i.size())return i;var a=t.append(e);return r&&a.classed(r,!0),n&&a.call(n),a},f.ensureSingleById=function(t,e,r,n){var i=t.select(e+\"#\"+r);if(i.size())return i;var a=t.append(e).attr(\"id\",r);return n&&a.call(n),a},f.objectFromPath=function(t,e){for(var r,n=t.split(\".\"),i=r={},a=0;a<n.length;a++){var o=n[a],s=null,l=n[a].match(/(.*)\\[([0-9]+)\\]/);l?(o=l[1],s=l[2],r=r[o]=[],a===n.length-1?r[s]=e:r[s]={},r=r[s]):(a===n.length-1?r[o]=e:r[o]={},r=r[o])}return i};var O=/^([^\\[\\.]+)\\.(.+)?/,I=/^([^\\.]+)\\[([0-9]+)\\](\\.)?(.+)?/;function D(t){return\"__\"===t.slice(0,2)}f.expandObjectPaths=function(t){var e,r,n,i,a,o,s;if(\"object\"==typeof t&&!Array.isArray(t))for(r in t)if(t.hasOwnProperty(r))if(e=r.match(O)){if(i=t[r],D(n=e[1]))continue;delete t[r],t[n]=f.extendDeepNoArrays(t[n]||{},f.objectFromPath(r,f.expandObjectPaths(i))[n])}else if(e=r.match(I)){if(i=t[r],D(n=e[1]))continue;if(a=parseInt(e[2]),delete t[r],t[n]=t[n]||[],\".\"===e[3])s=e[4],o=t[n][a]=t[n][a]||{},f.extendDeepNoArrays(o,f.objectFromPath(s,f.expandObjectPaths(i)));else{if(D(n))continue;t[n][a]=f.expandObjectPaths(i)}}else{if(D(r))continue;t[r]=f.expandObjectPaths(t[r])}return t},f.numSeparate=function(t,e,r){if(r||(r=!1),\"string\"!=typeof e||0===e.length)throw new Error(\"Separator string required for formatting!\");\"number\"==typeof t&&(t=String(t));var n=/(\\d+)(\\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split(\".\"),s=o[0],l=o.length>1?i+o[1]:\"\";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,\"$1\"+a+\"$2\");return s+l},f.TEMPLATE_STRING_REGEX=/%{([^\\s%{}:]*)([:|\\|][^}]*)?}/g;var z=/^\\w*$/;f.templateString=function(t,e){var r={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,n){var i;return z.test(n)?i=e[n]:(r[n]=r[n]||f.nestedProperty(e,n).get,i=r[n]()),f.isValidTextValue(i)?i:\"\"}))};var R={max:10,count:0,name:\"hovertemplate\"};f.hovertemplateString=function(){return U.apply(R,arguments)};var F={max:10,count:0,name:\"texttemplate\"};f.texttemplateString=function(){return U.apply(F,arguments)};var B=/^(\\S+)([\\*\\/])(-?\\d+(\\.\\d+)?)$/,N={max:10,count:0,name:\"texttemplate\",parseMultDiv:!0};f.texttemplateStringForShapes=function(){return U.apply(N,arguments)};var j=/^[:|\\|]/;function U(t,e,r){var n=this,a=arguments;e||(e={});var o={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,s,l){var u=\"_xother\"===s||\"_yother\"===s,c=\"_xother_\"===s||\"_yother_\"===s,h=\"xother_\"===s||\"yother_\"===s,p=\"xother\"===s||\"yother\"===s||u||h||c,d=s;(u||c)&&(d=d.substring(1)),(h||c)&&(d=d.substring(0,d.length-1));var v,g,y,m=null,x=null;if(n.parseMultDiv){var b=function(t){var e=t.match(B);return e?{key:e[1],op:e[2],number:Number(e[3])}:{key:t,op:null,number:null}}(d);d=b.key,m=b.op,x=b.number}if(p){if(void 0===(v=e[d]))return\"\"}else for(y=3;y<a.length;y++)if(g=a[y]){if(g.hasOwnProperty(d)){v=g[d];break}if(z.test(d)||(v=f.nestedProperty(g,d).get(),(v=o[d]||f.nestedProperty(g,d).get())&&(o[d]=v)),void 0!==v)break}if(void 0!==v&&(\"*\"===m&&(v*=x),\"/\"===m&&(v/=x)),void 0===v&&n)return n.count<n.max&&(f.warn(\"Variable '\"+d+\"' in \"+n.name+\" could not be found!\"),v=t),n.count===n.max&&f.warn(\"Too many \"+n.name+\" warnings - additional warnings will be suppressed\"),n.count++,t;if(l){var _;if(\":\"===l[0]&&(v=(_=r?r.numberFormat:f.numberFormat)(l.replace(j,\"\"))(v)),\"|\"===l[0]){_=r?r.timeFormat:i;var w=f.dateTime2ms(v);v=f.formatDate(w,l.replace(j,\"\"),!1,_)}}else{var T=d+\"Label\";e.hasOwnProperty(T)&&(v=e[T])}return p&&(v=\"(\"+v+\")\",(u||c)&&(v=\" \"+v),(h||c)&&(v+=\" \")),v}))}f.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,i=0,a=0;a<r;a++){var o=t.charCodeAt(a)||0,s=e.charCodeAt(a)||0,l=o>=48&&o<=57,u=s>=48&&s<=57;if(l&&(n=10*n+o-48),u&&(i=10*i+s-48),!l||!u){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var V=2e9;f.seedPseudoRandom=function(){V=2e9},f.pseudoRandom=function(){var t=V;return V=(69069*V+1)%4294967296,Math.abs(V-t)<429496729?f.pseudoRandom():V/4294967296},f.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=f.extractOption(t,e,\"htx\",\"hovertext\");if(f.isValidTextValue(i))return n(i);var a=f.extractOption(t,e,\"tx\",\"text\");return f.isValidTextValue(a)?n(a):void 0},f.isValidTextValue=function(t){return t||0===t},f.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+\"%\",n=0;n<e;n++)-1!==r.indexOf(\".\")&&(r=(r=r.replace(\"0%\",\"%\")).replace(\".%\",\"%\"));return r},f.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||\"none\"===e},f.strTranslate=function(t,e){return t||e?\"translate(\"+t+\",\"+e+\")\":\"\"},f.strRotate=function(t){return t?\"rotate(\"+t+\")\":\"\"},f.strScale=function(t){return 1!==t?\"scale(\"+t+\")\":\"\"},f.getTextTransform=function(t){var e=t.noCenter,r=t.textX,n=t.textY,i=t.targetX,a=t.targetY,o=t.anchorX||0,s=t.anchorY||0,l=t.rotate,u=t.scale;return u?u>1&&(u=1):u=0,f.strTranslate(i-u*(r+o),a-u*(n+s))+f.strScale(u)+(l?\"rotate(\"+l+(e?\"\":\" \"+r+\" \"+n)+\")\":\"\")},f.setTransormAndDisplay=function(t,e){t.attr(\"transform\",f.getTextTransform(e)),t.style(\"display\",e.scale?null:\"none\")},f.ensureUniformFontSize=function(t,e){var r=f.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r},f.join2=function(t,e,r){var n=t.length;return n>1?t.slice(0,-1).join(e)+r+t[n-1]:t.join(e)},f.bigFont=function(t){return Math.round(1.2*t)};var H=f.getFirefoxVersion(),q=null!==H&&H<86;f.getPositionFromD3Event=function(){return q?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},41965:function(t){\"use strict\";t.exports=function(t){return window&&window.process&&window.process.versions?\"[object Object]\"===Object.prototype.toString.call(t):\"[object Object]\"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t).hasOwnProperty(\"hasOwnProperty\")}},66636:function(t,e,r){\"use strict\";var n=r(65487),i=/^\\w*$/;t.exports=function(t,e,r,a){var o,s,l;r=r||\"name\",a=a||\"value\";var u={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||\"\";var c={};if(s)for(o=0;o<s.length;o++)c[s[o][r]]=o;var f=i.test(a),h={set:function(t,e){var i=null===e?4:0;if(!s){if(!l||4===i)return;s=[],l.set(s)}var o=c[t];if(void 0===o){if(4===i)return;i|=3,o=s.length,c[t]=o}else e!==(f?s[o][a]:n(s[o],a).get())&&(i|=2);var p=s[o]=s[o]||{};return p[r]=t,f?p[a]=e:n(p,a).set(e),null!==e&&(i&=-5),u[o]=u[o]|i,h},get:function(t){if(s){var e=c[t];return void 0===e?void 0:f?s[e][a]:n(s[e],a).get()}},rename:function(t,e){var n=c[t];return void 0===n||(u[n]=1|u[n],c[e]=n,delete c[t],s[n][r]=e),h},remove:function(t){var e=c[t];if(void 0===e)return h;var i=s[e];if(Object.keys(i).length>2)return u[e]=2|u[e],h.set(t,null);if(f){for(o=e;o<s.length;o++)u[o]=3|u[o];for(o=e;o<s.length;o++)c[s[o][r]]--;s.splice(e,1),delete c[t]}else n(i,a).set(null),u[e]=6|u[e];return h},constructUpdate:function(){for(var t,i,o={},l=Object.keys(u),c=0;c<l.length;c++)i=l[c],t=e+\"[\"+i+\"]\",s[i]?(1&u[i]&&(o[t+\".\"+r]=s[i][r]),2&u[i]&&(o[t+\".\"+a]=f?4&u[i]?null:s[i][a]:4&u[i]?null:n(s[i],a).get())):o[t]=null;return o}};return h}},15867:function(t,e,r){\"use strict\";var n=r(73972);t.exports=function(t,e){for(var r=t._context.locale,i=0;i<2;i++){for(var a=t._context.locales,o=0;o<2;o++){var s=(a[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}a=n.localeRegistry}var u=r.split(\"-\")[0];if(u===r)break;r=u}return e}},47769:function(t,e,r){\"use strict\";var n=r(72075).dfltConfig,i=r(75046),a=t.exports={};a.log=function(){var t;if(n.logging>1){var e=[\"LOG:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>1){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\"<br>\"),\"long\")}},a.warn=function(){var t;if(n.logging>0){var e=[\"WARN:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\"<br>\"),\"stick\")}},a.error=function(){var t;if(n.logging>0){var e=[\"ERROR:\"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);console.error.apply(console,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);i(r.join(\"<br>\"),\"stick\")}}},77310:function(t,e,r){\"use strict\";var n=r(39898);t.exports=function(t,e,r){var i=t.selectAll(\"g.\"+r.replace(/\\s/g,\".\")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append(\"g\").attr(\"class\",r),i.order();var a=t.classed(\"rangeplot\")?\"nodeRangePlot3\":\"node3\";return i.each((function(t){t[0][a]=n.select(this)})),i}},35657:function(t,e,r){\"use strict\";var n=r(79576);e.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},e.transposeRagged=function(t){var e,r,n=0,i=t.length;for(e=0;e<i;e++)n=Math.max(n,t[e].length);var a=new Array(n);for(e=0;e<n;e++)for(a[e]=new Array(i),r=0;r<i;r++)a[e][r]=t[r][e];return a},e.dot=function(t,r){if(!t.length||!r.length||t.length!==r.length)return null;var n,i,a=t.length;if(t[0].length)for(n=new Array(a),i=0;i<a;i++)n[i]=e.dot(t[i],r);else if(r[0].length){var o=e.transposeRagged(r);for(n=new Array(o.length),i=0;i<o.length;i++)n[i]=e.dot(t,o[i])}else for(n=0,i=0;i<a;i++)n+=t[i]*r[i];return n},e.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},e.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},e.rotationXYMatrix=function(t,r,n){return e.dot(e.dot(e.translationMatrix(r,n),e.rotationMatrix(t)),e.translationMatrix(-r,-n))},e.apply3DTransform=function(t){return function(){var r=arguments,n=1===arguments.length?r[0]:[r[0],r[1],r[2]||0];return e.dot(t,[n[0],n[1],n[2],1]).slice(0,3)}},e.apply2DTransform=function(t){return function(){var r=arguments;3===r.length&&(r=r[0]);var n=1===arguments.length?r[0]:[r[0],r[1]];return e.dot(t,[n[0],n[1],1]).slice(0,2)}},e.apply2DTransform2=function(t){var r=e.apply2DTransform(t);return function(t){return r(t.slice(0,2)).concat(r(t.slice(2,4)))}},e.convertCssMatrix=function(t){if(t){var e=t.length;if(16===e)return t;if(6===e)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},e.inverseTransformMatrix=function(t){var e=[];return n.invert(e,t),[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}},64872:function(t){\"use strict\";t.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},65487:function(t,e,r){\"use strict\";var n=r(92770),i=r(73627).isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,u=t;for(s=0;s<e.length-1;s++){if(-1===(r=e[s])){for(n=!0,o=[],l=0;l<u.length;l++)o[l]=a(u[l],e.slice(s+1))(),o[l]!==o[0]&&(n=!1);return n?o[0]:o}if(\"number\"==typeof r&&!i(u))return;if(\"object\"!=typeof(u=u[r])||null===u)return}if(\"object\"==typeof u&&null!==u&&null!==(o=u[e[s]]))return o}}t.exports=function(t,e){if(n(e))e=String(e);else if(\"string\"!=typeof e||\"[-1]\"===e.substr(e.length-4))throw\"bad property string\";var r,i,o,s,u=e.split(\".\");for(s=0;s<u.length;s++)if(\"__\"===String(u[s]).slice(0,2))throw\"bad property string\";for(s=0;s<u.length;){if(r=String(u[s]).match(/^([^\\[\\]]*)((\\[\\-?[0-9]*\\])+)$/)){if(r[1])u[s]=r[1];else{if(0!==s)throw\"bad property string\";u.splice(0,1)}for(i=r[2].substr(1,r[2].length-2).split(\"][\"),o=0;o<i.length;o++)s++,u.splice(s,0,Number(i[o]))}s++}return\"object\"!=typeof t?function(t,e,r){return{set:function(){throw\"bad container\"},get:function(){},astr:e,parts:r,obj:t}}(t,e,u):{set:l(t,u,e),get:a(t,u),astr:e,parts:u,obj:t}};var o=/(^|\\.)args\\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,r){return function(n){var a,o,l=t,h=\"\",p=[[t,h]],d=s(n,r);for(o=0;o<e.length-1;o++){if(\"number\"==typeof(a=e[o])&&!i(l))throw\"array index but container is not an array\";if(-1===a){if(d=!c(l,e.slice(o+1),n,r))break;return}if(!f(l,a,e[o+1],d))break;if(\"object\"!=typeof(l=l[a])||null===l)throw\"container is not an object\";h=u(h,a),p.push([l,h])}if(d){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=n}}function u(t,e){var r=e;return n(e)?r=\"[\"+e+\"]\":t&&(r=\".\"+e),t+r}function c(t,e,r,n){var a,o=i(r),u=!0,c=r,h=n.replace(\"-1\",0),p=!o&&s(r,h),d=e[0];for(a=0;a<t.length;a++)h=n.replace(\"-1\",a),o&&(p=s(c=r[a%r.length],h)),p&&(u=!1),f(t,a,d,p)&&l(t[a],e,n.replace(\"-1\",a))(c);return u}function f(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]=\"number\"==typeof r?[]:{}}return!0}},64213:function(t){\"use strict\";t.exports=function(){}},75046:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=[];t.exports=function(t,e){if(-1===a.indexOf(t)){a.push(t);var r=1e3;i(e)?r=e:\"long\"===e&&(r=3e3);var o=n.select(\"body\").selectAll(\".plotly-notifier\").data([0]);o.enter().append(\"div\").classed(\"plotly-notifier\",!0),o.selectAll(\".notifier-note\").data(a).enter().append(\"div\").classed(\"notifier-note\",!0).style(\"opacity\",0).each((function(t){var i=n.select(this);i.append(\"button\").classed(\"notifier-close\",!0).html(\"&times;\").on(\"click\",(function(){i.transition().call(s)}));for(var a=i.append(\"p\"),o=t.split(/<br\\s*\\/?>/g),l=0;l<o.length;l++)l&&a.append(\"br\"),a.append(\"span\").text(o[l]);\"stick\"===e?i.transition().duration(350).style(\"opacity\",1):i.transition().duration(700).style(\"opacity\",1).transition().delay(r).call(s)}))}function s(t){t.duration(700).style(\"opacity\",0).each(\"end\",(function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),n.select(this).remove()}))}}},39918:function(t,e,r){\"use strict\";var n=r(6964),i=\"data-savedcursor\";t.exports=function(t,e){var r=t.attr(i);if(e){if(!r){for(var a=(t.attr(\"class\")||\"\").split(\" \"),o=0;o<a.length;o++){var s=a[o];0===s.indexOf(\"cursor-\")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,\"!!\")}n(t,e)}else r&&(t.attr(i,null),\"!!\"===r?n(t):n(t,r))}},61082:function(t,e,r){\"use strict\";var n=r(35657).dot,i=r(50606).BADNUM,a=t.exports={};a.tester=function(t){var e,r=t.slice(),n=r[0][0],a=n,o=r[0][1],s=o;for(r[r.length-1][0]===r[0][0]&&r[r.length-1][1]===r[0][1]||r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),a=Math.max(a,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,u=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(u=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(u=!0,l=function(t){return t[1]===r[0][1]}));var c=!0,f=r[0];for(e=1;e<r.length;e++)if(f[0]!==r[e][0]||f[1]!==r[e][1]){c=!1;break}return{xmin:n,xmax:a,ymin:o,ymax:s,pts:r,contains:u?function(t,e){var r=t[0],u=t[1];return!(r===i||r<n||r>a||u===i||u<o||u>s||e&&l(t))}:function(t,e){var l=t[0],u=t[1];if(l===i||l<n||l>a||u===i||u<o||u>s)return!1;var c,f,h,p,d,v=r.length,g=r[0][0],y=r[0][1],m=0;for(c=1;c<v;c++)if(f=g,h=y,g=r[c][0],y=r[c][1],!(l<(p=Math.min(f,g))||l>Math.max(f,g)||u>Math.max(h,y)))if(u<Math.min(h,y))l!==p&&m++;else{if(u===(d=g===f?u:h+(l-f)*(y-h)/(g-f)))return 1!==c||!e;u<=d&&l!==p&&m++}return m%2==1},isRect:u,degenerate:c}},a.isSegmentBent=function(t,e,r,i){var a,o,s,l=t[e],u=[t[r][0]-l[0],t[r][1]-l[1]],c=n(u,u),f=Math.sqrt(c),h=[-u[1]/f,u[0]/f];for(a=e+1;a<r;a++)if(o=[t[a][0]-l[0],t[a][1]-l[1]],(s=n(o,u))<0||s>c||Math.abs(n(o,h))>i)return!0;return!1},a.filter=function(t,e){var r=[t[0]],n=0,i=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(i+1);for(var u=l+1;u<t.length;u++)(u===t.length-1||a.isSegmentBent(t,l,u+1,e))&&(r.push(t[u]),r.length<s-2&&(n=u,i=r.length-1),l=u)}return t.length>1&&o(t.pop()),{addPt:o,raw:t,filtered:r}}},79749:function(t,e,r){\"use strict\";var n=r(58617),i=r(98580);t.exports=function(t,e,a){var o=t._fullLayout,s=!0;return o._glcanvas.each((function(n){if(n.regl)n.regl.preloadCachedCode(a);else if(!n.pick||o._has(\"parcoords\")){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.g.devicePixelRatio,extensions:e||[],cachedCode:a||{}})}catch(t){s=!1}n.regl||(s=!1),s&&this.addEventListener(\"webglcontextlost\",(function(e){t&&t.emit&&t.emit(\"plotly_webglcontextlost\",{event:e,layer:n.key})}),!1)}})),s||n({container:o._glcontainer.node()}),s}},45142:function(t,e,r){\"use strict\";var n=r(92770),i=r(35791);t.exports=function(t){var e;if(\"string\"!=typeof(e=t&&t.hasOwnProperty(\"userAgent\")?t.userAgent:function(){var t;return\"undefined\"!=typeof navigator&&(t=navigator.userAgent),t&&t.headers&&\"string\"==typeof t.headers[\"user-agent\"]&&(t=t.headers[\"user-agent\"]),t}()))return!0;var r=i({ua:{headers:{\"user-agent\":e}},tablet:!0,featureDetect:!1});if(!r)for(var a=e.split(\" \"),o=1;o<a.length;o++)if(-1!==a[o].indexOf(\"Safari\"))for(var s=o-1;s>-1;s--){var l=a[s];if(\"Version/\"===l.substr(0,8)){var u=l.substr(8).split(\".\")[0];if(n(u)&&(u=+u),u>=13)return!0}}return r}},75138:function(t){\"use strict\";t.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},10847:function(t,e,r){\"use strict\";var n=r(71828),i=r(72075).dfltConfig,a={add:function(t,e,r,n,a){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(a)),t.undoQueue.queue.length>i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)a.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)a.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},plotDo:function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,i=[],a=0;a<e.length;a++)r=e[a],i[a]=r===t?r:\"object\"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return i}(t,r),e.apply(null,r)}};t.exports=a},30587:function(t,e){\"use strict\";e.counter=function(t,e,r,n){var i=(e||\"\")+(r?\"\":\"$\"),a=!1===n?\"\":\"^\";return\"xy\"===t?new RegExp(a+\"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?\"+i):new RegExp(a+t+\"([2-9]|[1-9][0-9]+)?\"+i)}},6962:function(t){\"use strict\";var e=/^(.*)(\\.[^\\.\\[\\]]+|\\[\\d\\])$/,r=/^[^\\.\\[\\]]+$/;t.exports=function(t,n){for(;n;){var i=t.match(e);if(i)t=i[1];else{if(!t.match(r))throw new Error(\"bad relativeAttr call:\"+[t,n]);t=\"\"}if(\"^\"!==n.charAt(0))break;n=n.slice(1)}return t&&\"[\"!==n.charAt(0)?t+\".\"+n:t+n}},51332:function(t,e,r){\"use strict\";var n=r(73627).isArrayOrTypedArray,i=r(41965);t.exports=function t(e,r){for(var a in r){var o=r[a],s=e[a];if(s!==o)if(\"_\"===a.charAt(0)||\"function\"==typeof o){if(a in e)continue;e[a]=o}else if(n(o)&&n(s)&&i(o[0])){if(\"customdata\"===a||\"ids\"===a)continue;for(var l=Math.min(o.length,s.length),u=0;u<l;u++)s[u]!==o[u]&&i(o[u])&&i(s[u])&&t(s[u],o[u])}else i(o)&&i(s)&&(t(s,o),Object.keys(s).length||delete e[a])}}},65888:function(t,e,r){\"use strict\";var n=r(92770),i=r(47769),a=r(23389),o=r(50606).BADNUM,s=1e-9;function l(t,e){return t<e}function u(t,e){return t<=e}function c(t,e){return t>e}function f(t,e){return t>=e}e.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-s)-1:Math.floor((t-e.start)/e.size+s);var a,o,h=0,p=e.length,d=0,v=p>1?(e[p-1]-e[0])/(p-1):1;for(o=v>=0?r?l:u:r?f:c,t+=v*s*(r?-1:1)*(v>=0?1:-1);h<p&&d++<100;)o(e[a=Math.floor((h+p)/2)],t)?h=a+1:p=a;return d>90&&i.log(\"Long binary search...\"),h-1},e.sorterAsc=function(t,e){return t-e},e.sorterDes=function(t,e){return e-t},e.distinctVals=function(t){var r,n=t.slice();for(n.sort(e.sorterAsc),r=n.length-1;r>-1&&n[r]===o;r--);for(var i,a=n[r]-n[0]||1,s=a/(r||1)/1e4,l=[],u=0;u<=r;u++){var c=n[u],f=c-i;void 0===i?(l.push(c),i=c):f>s&&(a=Math.min(a,f),l.push(c),i=c)}return{vals:l,minDiff:a}},e.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i<a&&o++<100;)e[n=u((i+a)/2)]<=t?i=n+s:a=n-l;return e[i]},e.sort=function(t,e){for(var r=0,n=0,i=1;i<t.length;i++){var a=e(t[i],t[i-1]);if(a<0?r=1:a>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},e.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;i<t.length;i++){var o=e(t[i]);o<n&&(n=o,r=i)}return r}},6964:function(t){\"use strict\";t.exports=function(t,e){(t.attr(\"class\")||\"\").split(\" \").forEach((function(e){0===e.indexOf(\"cursor-\")&&t.classed(e,!1)})),e&&t.classed(\"cursor-\"+e,!0)}},58617:function(t,e,r){\"use strict\";var n=r(7901),i=function(){};t.exports=function(t){for(var e in t)\"function\"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement(\"div\");r.className=\"no-webgl\",r.style.cursor=\"pointer\",r.style.fontSize=\"24px\",r.style.color=n.defaults[0],r.style.position=\"absolute\",r.style.left=r.style.top=\"0px\",r.style.width=r.style.height=\"100%\",r.style[\"background-color\"]=n.lightLine,r.style[\"z-index\"]=30;var a=document.createElement(\"p\");return a.textContent=\"WebGL is not supported by your browser - visit https://get.webgl.org for more info\",a.style.position=\"relative\",a.style.top=\"50%\",a.style.left=\"50%\",a.style.height=\"30%\",a.style.width=\"50%\",a.style.margin=\"-15% 0 0 -25%\",r.appendChild(a),t.container.appendChild(r),t.container.style.background=\"#FFFFFF\",t.container.onclick=function(){window.open(\"https://get.webgl.org\")},!1}},78607:function(t){\"use strict\";t.exports=function(t){return Object.keys(t).sort()}},80038:function(t,e,r){\"use strict\";var n=r(92770),i=r(73627).isArrayOrTypedArray;e.aggNums=function(t,r,a,o){var s,l;if((!o||o>a.length)&&(o=a.length),n(r)||(r=!1),i(a[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=e.aggNums(t,r,a[s]);a=l}for(s=0;s<o;s++)n(r)?n(a[s])&&(r=t(+r,+a[s])):r=a[s];return r},e.len=function(t){return e.aggNums((function(t){return t+1}),0,t)},e.mean=function(t,r){return r||(r=e.len(t)),e.aggNums((function(t,e){return t+e}),0,t)/r},e.midRange=function(t){if(void 0!==t&&0!==t.length)return(e.aggNums(Math.max,null,t)+e.aggNums(Math.min,null,t))/2},e.variance=function(t,r,i){return r||(r=e.len(t)),n(i)||(i=e.mean(t,r)),e.aggNums((function(t,e){return t+Math.pow(e-i,2)}),0,t)/r},e.stdev=function(t,r,n){return Math.sqrt(e.variance(t,r,n))},e.median=function(t){var r=t.slice().sort();return e.interp(r,.5)},e.interp=function(t,e){if(!n(e))throw\"n should be a finite number\";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},78614:function(t,e,r){\"use strict\";var n=r(25075);t.exports=function(t){return t?n(t):[0,0,0,1]}},3883:function(t,e,r){\"use strict\";var n=r(32396),i=r(91424),a=r(71828),o=null;t.exports=function(){if(null!==o)return o;o=!1;var t=a.isIE()||a.isSafari()||a.isIOS();if(window.navigator.userAgent&&!t){var e=Array.from(n.CSS_DECLARATIONS).reverse(),r=window.CSS&&window.CSS.supports||window.supportsCSS;if(\"function\"==typeof r)o=e.some((function(t){return r.apply(null,t)}));else{var s=i.tester.append(\"image\").attr(\"style\",n.STYLE),l=window.getComputedStyle(s.node()).imageRendering;o=e.some((function(t){var e=t[1];return l===e||l===e.toLowerCase()})),s.remove()}}return o}},63893:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(18783).LINE_SPACING,l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;e.convertToTspans=function(t,r,g){var S=t.text(),E=!t.attr(\"data-notex\")&&r&&r._context.typesetMath&&\"undefined\"!=typeof MathJax&&S.match(l),P=n.select(t.node().parentNode);if(!P.empty()){var O=t.attr(\"class\")?t.attr(\"class\").split(\" \")[0]:\"text\";return O+=\"-math\",P.selectAll(\"svg.\"+O).remove(),P.selectAll(\"g.\"+O+\"-group\").remove(),t.style(\"display\",null).attr({\"data-unformatted\":S,\"data-math\":\"N\"}),E?(r&&r._promises||[]).push(new Promise((function(e){t.style(\"display\",\"none\");var r=parseInt(t.node().style.fontSize,10),o={fontSize:r};!function(t,e,r){var a,o,s,l,h=parseInt((MathJax.version||\"\").split(\".\")[0]);if(2===h||3===h){var p=function(){var r=\"math-output-\"+i.randstr({},64),a=(l=n.select(\"body\").append(\"div\").attr({id:r}).style({visibility:\"hidden\",position:\"absolute\",\"font-size\":e.fontSize+\"px\"}).text(t.replace(u,\"\\\\lt \").replace(c,\"\\\\gt \"))).node();return 2===h?MathJax.Hub.Typeset(a):MathJax.typeset([a])},d=function(){var e=l.select(2===h?\".MathJax_SVG\":\".MathJax\"),a=!e.empty()&&l.select(\"svg\").node();if(a){var o,s=a.getBoundingClientRect();o=2===h?n.select(\"body\").select(\"#MathJax_SVG_glyphs\"):e.select(\"defs\"),r(e,o,s)}else i.log(\"There was an error in the tex syntax.\",t),r();l.remove()};2===h?MathJax.Hub.Queue((function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:\"none\",tex2jax:{inlineMath:f},displayAlign:\"left\"})}),(function(){if(\"SVG\"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer(\"SVG\")}),p,d,(function(){if(\"SVG\"!==a)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})):3===h&&(o=i.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=f,\"svg\"!==(a=MathJax.config.startup.output)&&(MathJax.config.startup.output=\"svg\"),MathJax.startup.defaultReady(),MathJax.startup.promise.then((function(){p(),d(),\"svg\"!==a&&(MathJax.config.startup.output=a),MathJax.config=o})))}else i.warn(\"No MathJax version:\",MathJax.version)}(E[2],o,(function(n,i,o){P.selectAll(\"svg.\"+O).remove(),P.selectAll(\"g.\"+O+\"-group\").remove();var s=n&&n.select(\"svg\");if(!s||!s.node())return I(),void e();var l=P.append(\"g\").classed(O+\"-group\",!0).attr({\"pointer-events\":\"none\",\"data-unformatted\":S,\"data-math\":\"Y\"});l.node().appendChild(s.node()),i&&i.node()&&s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild);var u=o.width,c=o.height;s.attr({class:O,height:c,preserveAspectRatio:\"xMinYMin meet\"}).style({overflow:\"visible\",\"pointer-events\":\"none\"});var f=t.node().style.fill||\"black\",h=s.select(\"g\");h.attr({fill:f,stroke:f});var p=h.node().getBoundingClientRect(),d=p.width,v=p.height;(d>u||v>c)&&(s.style(\"overflow\",\"hidden\"),d=(p=s.node().getBoundingClientRect()).width,v=p.height);var y=+t.attr(\"x\"),m=+t.attr(\"y\"),x=-(r||t.node().getBoundingClientRect().height)/4;if(\"y\"===O[0])l.attr({transform:\"rotate(\"+[-90,y,m]+\")\"+a(-d/2,x-v/2)});else if(\"l\"===O[0])m=x-v/2;else if(\"a\"===O[0]&&0!==O.indexOf(\"atitle\"))y=0,m=x;else{var b=t.attr(\"text-anchor\");y-=d*(\"middle\"===b?.5:\"end\"===b?1:0),m=m+x-v/2}s.attr({x:y,y:m}),g&&g.call(t,l),e(l)}))}))):I(),t}function I(){P.empty()||(O=t.attr(\"class\")+\"-math\",P.select(\"svg.\"+O).remove()),t.text(\"\").style(\"white-space\",\"pre\");var r=function(t,e){e=e.replace(y,\" \");var r,a=!1,l=[],u=-1;function c(){u++;var e=document.createElementNS(o.svg,\"tspan\");n.select(e).attr({class:\"line\",dy:u*s+\"em\"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var a=1;a<i.length;a++)f(i[a])}function f(t){var e,i=t.type,a={};if(\"a\"===i){e=\"a\";var s=t.target,u=t.href,c=t.popup;u&&(a={\"xlink:xlink:show\":\"_blank\"===s||\"_\"!==s.charAt(0)?\"new\":\"replace\",target:s,\"xlink:xlink:href\":u},c&&(a.onclick='window.open(this.href.baseVal,this.target.baseVal,\"'+c+'\");return false;'))}else e=\"tspan\";t.style&&(a.style=t.style);var f=document.createElementNS(o.svg,e);if(\"sup\"===i||\"sub\"===i){g(r,v),r.appendChild(f);var h=document.createElementNS(o.svg,\"tspan\");g(h,v),n.select(h).attr(\"dy\",d[i]),a.dy=p[i],r.appendChild(f),r.appendChild(h)}else r.appendChild(f);n.select(f).attr(a),r=t.node=f,l.push(t)}function g(t,e){t.appendChild(document.createTextNode(e))}function S(t){if(1!==l.length){var n=l.pop();t!==n.type&&i.log(\"Start tag <\"+n.type+\"> doesnt match end tag <\"+t+\">. Pretending it did match.\",e),r=l[l.length-1].node}else i.log(\"Ignoring unexpected end tag </\"+t+\">.\",e)}b.test(e)?c():(r=t,l=[{node:t}]);for(var E=e.split(m),P=0;P<E.length;P++){var O=E[P],I=O.match(x),D=I&&I[2].toLowerCase(),z=h[D];if(\"br\"===D)c();else if(void 0===z)g(r,L(O));else if(I[1])S(D);else{var R=I[4],F={type:D},B=A(R,_);if(B?(B=B.replace(M,\"$1 fill:\"),z&&(B+=\";\"+z)):z&&(B=z),B&&(F.style=B),\"a\"===D){a=!0;var N=A(R,w);if(N){var j=C(N);j&&(F.href=j,F.target=A(R,T)||\"_blank\",F.popup=A(R,k))}}f(F)}}return a}(t.node(),S);r&&t.style(\"pointer-events\",\"all\"),e.positionText(t),g&&g.call(t)}};var u=/(<|&lt;|&#60;)/g,c=/(>|&gt;|&#62;)/g,f=[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]],h={sup:\"font-size:70%\",sub:\"font-size:70%\",b:\"font-weight:bold\",i:\"font-style:italic\",a:\"cursor:pointer\",span:\"\",em:\"font-style:italic;font-weight:bold\"},p={sub:\"0.3em\",sup:\"-0.6em\"},d={sub:\"-0.21em\",sup:\"0.42em\"},v=\"​\",g=[\"http:\",\"https:\",\"mailto:\",\"\",void 0,\":\"],y=e.NEWLINES=/(\\r\\n?|\\n)/g,m=/(<[^<>]*>)/,x=/<(\\/?)([^ >]*)(\\s+(.*))?>/i,b=/<br(\\s+.*)?>/i;e.BR_TAG_ALL=/<br(\\s+.*)?>/gi;var _=/(^|[\\s\"'])style\\s*=\\s*(\"([^\"]*);?\"|'([^']*);?')/i,w=/(^|[\\s\"'])href\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/i,T=/(^|[\\s\"'])target\\s*=\\s*(\"([^\"\\s]*)\"|'([^'\\s]*)')/i,k=/(^|[\\s\"'])popup\\s*=\\s*(\"([\\w=,]*)\"|'([\\w=,]*)')/i;function A(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&L(n)}var M=/(^|;)\\s*color:/;e.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:[\"br\"],i=t.split(m),a=[],o=\"\",s=0,l=0;l<i.length;l++){var u=i[l],c=u.match(x),f=c&&c[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(a.push(u),o=f);else{var h=u.length;if(s+h<r)a.push(u),s+=h;else if(s<r){var p=r-s;o&&(\"br\"!==o||p<=3||h<=3)&&a.pop(),r>3?a.push(u.substr(0,p-3)+\"...\"):a.push(u.substr(0,p));break}o=\"\"}}return a.join(\"\")};var S={mu:\"μ\",amp:\"&\",lt:\"<\",gt:\">\",nbsp:\" \",times:\"×\",plusmn:\"±\",deg:\"°\"},E=/&(#\\d+|#x[\\da-fA-F]+|[a-z]+);/g;function L(t){return t.replace(E,(function(t,e){return(\"#\"===e.charAt(0)?function(t){if(!(t>1114111)){var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}}(\"x\"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):S[e])||t}))}function C(t){var e=encodeURI(decodeURI(t)),r=document.createElement(\"a\"),n=document.createElement(\"a\");r.href=t,n.href=e;var i=r.protocol,a=n.protocol;return-1!==g.indexOf(i)&&-1!==g.indexOf(a)?e:\"\"}function P(t,e,r){var n,a,o,s=r.horizontalAlign,l=r.verticalAlign||\"top\",u=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a=\"bottom\"===l?function(){return u.bottom-n.height}:\"middle\"===l?function(){return u.top+(u.height-n.height)/2}:function(){return u.top},o=\"right\"===s?function(){return u.right-n.width}:\"center\"===s?function(){return u.left+(u.width-n.width)/2}:function(){return u.left},function(){n=this.node().getBoundingClientRect();var t=o()-c.left,e=a()-c.top,s=r.gd||{};if(r.gd){s._fullLayout._calcInverseTransform(s);var l=i.apply3DTransform(s._fullLayout._invTransform)(t,e);t=l[0],e=l[1]}return this.style({top:e+\"px\",left:t+\"px\",\"z-index\":1e3}),this}}e.convertEntities=L,e.sanitizeHTML=function(t){t=t.replace(y,\" \");for(var e=document.createElement(\"p\"),r=e,i=[],a=t.split(m),o=0;o<a.length;o++){var s=a[o],l=s.match(x),u=l&&l[2].toLowerCase();if(u in h)if(l[1])i.length&&(r=i.pop());else{var c=l[4],f=A(c,_),p=f?{style:f}:{};if(\"a\"===u){var d=A(c,w);if(d){var v=C(d);if(v){p.href=v;var g=A(c,T);g&&(p.target=g)}}}var b=document.createElement(u);r.appendChild(b),n.select(b).attr(p),r=b,i.push(b)}else r.appendChild(document.createTextNode(L(s)))}return e.innerHTML},e.lineCount=function(t){return t.selectAll(\"tspan.line\").size()||1},e.positionText=function(t,e,r){return t.each((function(){var t=n.select(this);function i(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var a=i(\"x\",e),o=i(\"y\",r);\"text\"===this.nodeName&&t.selectAll(\"tspan.line\").attr({x:a,y:o})}))};var O=\"1px \";e.makeTextShadow=function(t){return O+O+O+t+\", -\"+O+\"-\"+O+O+t+\", \"+O+\"-\"+O+O+t+\", -\"+O+O+O+t},e.makeEditable=function(t,e){var r=e.gd,i=e.delegate,a=n.dispatch(\"edit\",\"input\",\"cancel\"),o=i||t;if(t.style({\"pointer-events\":i?\"none\":\"all\"}),1!==t.size())throw new Error(\"boo\");function s(){var i,s,u,c,f;i=n.select(r).select(\".svg-container\"),s=i.append(\"div\"),u=t.node().style,c=parseFloat(u.fontSize||12),void 0===(f=e.text)&&(f=t.attr(\"data-unformatted\")),s.classed(\"plugin-editable editable\",!0).style({position:\"absolute\",\"font-family\":u.fontFamily||\"Arial\",\"font-size\":c,color:e.fill||u.fill||\"black\",opacity:1,\"background-color\":e.background||\"transparent\",outline:\"#ffffff33 1px solid\",margin:[-c/8+1,0,0,-1].join(\"px \")+\"px\",padding:\"0\",\"box-sizing\":\"border-box\"}).attr({contenteditable:!0}).text(f).call(P(t,i,e)).on(\"blur\",(function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=n.select(this).attr(\"class\");(e=i?\".\"+i.split(\" \")[0]+\"-math-group\":\"[class*=-math-group]\")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on(\"mouseup\",null),a.edit.call(t,o)})).on(\"focus\",(function(){var t=this;r._editing=!0,n.select(document).on(\"mouseup\",(function(){if(n.event.target===t)return!1;document.activeElement===s.node()&&s.node().blur()}))})).on(\"keyup\",(function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on(\"blur\",(function(){return!1})).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(P(t,i,e)))})).on(\"keydown\",(function(){13===n.event.which&&this.blur()})).call(l),t.style({opacity:0});var h,p=o.attr(\"class\");(h=p?\".\"+p.split(\" \")[0]+\"-math-group\":\"[class*=-math-group]\")&&n.select(t.node().parentNode).select(h).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on(\"click\",s),n.rebind(t,a,\"on\")}},79990:function(t,e){\"use strict\";var r={};function n(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}e.throttle=function(t,e,i){var a=r[t],o=Date.now();if(!a){for(var s in r)r[s].ts<o-6e4&&delete r[s];a=r[t]={ts:0,timer:null}}function l(){i(),a.ts=Date.now(),a.onDone&&(a.onDone(),a.onDone=null)}n(a),o>a.ts+e?l():a.timer=setTimeout((function(){l(),a.timer=null}),e)},e.done=function(t){var e=r[t];return e&&e.timer?new Promise((function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}})):Promise.resolve()},e.clear=function(t){if(t)n(r[t]),delete r[t];else for(var i in r)e.clear(i)}},58163:function(t,e,r){\"use strict\";var n=r(92770);t.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},90973:function(t,e,r){\"use strict\";var n=t.exports={},i=r(78776).locationmodeToLayer,a=r(96892).zL;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,\"-\"),\"_\",t.resolution.toString(),\"m\"].join(\"\")},n.getTopojsonPath=function(t,e){return t+e+\".json\"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},37815:function(t){\"use strict\";t.exports={moduleType:\"locale\",name:\"en-US\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colorscale title\"},format:{date:\"%m/%d/%Y\"}}},92177:function(t){\"use strict\";t.exports={moduleType:\"locale\",name:\"en\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colourscale title\"},format:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],periods:[\"AM\",\"PM\"],dateTime:\"%a %b %e %X %Y\",date:\"%d/%m/%Y\",time:\"%H:%M:%S\",decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],year:\"%Y\",month:\"%b %Y\",dayMonth:\"%b %-d\",dayMonthYear:\"%b %-d, %Y\"}}},14458:function(t,e,r){\"use strict\";var n=r(73972);t.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split(\"[\")[0],s=0;s<a.length;s++)if((r=t.match(a[s]))&&0===r.index){e=r[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\\[(0|[1-9][0-9]*)\\](\\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||\"\"}:{array:e,index:\"\",property:\"\"}}},30962:function(t,e,r){\"use strict\";var n=r(1426).extendFlat,i=r(41965),a={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"clearAxisTypes\",\"plot\",\"style\",\"markerSize\",\"colorbars\"]},o={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"plot\",\"legend\",\"ticks\",\"axrange\",\"layoutstyle\",\"modebar\",\"camera\",\"arraydraw\",\"colorbars\"]},s=a.flags.slice().concat([\"fullReplot\"]),l=o.flags.slice().concat(\"layoutReplot\");function u(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function c(t,e,r){var a=n({},t);for(var o in a){var s=a[o];i(s)&&(a[o]=f(s,e,0,o))}return\"from-root\"===r&&(a.editType=e),a}function f(t,e,r,i){if(t.valType){var a=n({},t);if(a.editType=e,Array.isArray(t.items)){a.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)a.items[o]=f(t.items[o],e)}return a}return c(t,e,\"_\"===i.charAt(0)?\"nested\":\"from-root\")}t.exports={traces:a,layout:o,traceFlags:function(){return u(s)},layoutFlags:function(){return u(l)},update:function(t,e){var r=e.editType;if(r&&\"none\"!==r)for(var n=r.split(\"+\"),i=0;i<n.length;i++)t[n[i]]=!0},overrideAll:c}},58377:function(t,e,r){\"use strict\";var n=r(92770),i=r(27812),a=r(73972),o=r(71828),s=r(74875),l=r(41675),u=r(7901),c=l.cleanId,f=l.getFromTrace,h=a.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&\"paper\"!==r&&(t[e]=c(r,n,!0))}function d(t){function e(e,r){var n=t[e],i=t.title&&t.title[r];n&&!i&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&(\"string\"!=typeof t.title&&\"number\"!=typeof t.title||(t.title={text:t.title}),e(\"titlefont\",\"font\"),e(\"titleposition\",\"position\"),e(\"titleside\",\"side\"),e(\"titleoffset\",\"offset\"))}function v(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,(\"string\"==typeof e||\"number\"==typeof e)&&String(e)}function g(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a=Math.min(t.length,e.length);for(i=0;i<a&&t.charAt(i)===e.charAt(i);i++);return t.substr(0,i).trim()}function y(t){var e=\"middle\",r=\"center\";return\"string\"==typeof t&&(-1!==t.indexOf(\"top\")?e=\"top\":-1!==t.indexOf(\"bottom\")&&(e=\"bottom\"),-1!==t.indexOf(\"left\")?r=\"left\":-1!==t.indexOf(\"right\")&&(r=\"right\")),e+\" \"+r}function m(t,e){return e in t&&\"object\"==typeof t[e]&&0===Object.keys(t[e]).length}e.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log(\"Clearing previous rejected promises from queue.\"),t._promises=[]},e.cleanLayout=function(t){var r,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,f=(s.subplotsRegistry.ternary||{}).attrRegex,h=(s.subplotsRegistry.gl3d||{}).attrRegex,v=Object.keys(t);for(r=0;r<v.length;r++){var g=v[r];if(a&&a.test(g)){var y=t[g];y.anchor&&\"free\"!==y.anchor&&(y.anchor=c(y.anchor)),y.overlaying&&(y.overlaying=c(y.overlaying)),y.type||(y.isdate?y.type=\"date\":y.islog?y.type=\"log\":!1===y.isdate&&!1===y.islog&&(y.type=\"linear\")),\"withzero\"!==y.autorange&&\"tozero\"!==y.autorange||(y.autorange=!0,y.rangemode=\"tozero\"),y.insiderange&&delete y.range,delete y.islog,delete y.isdate,delete y.categories,m(y,\"domain\")&&delete y.domain,void 0!==y.autotick&&(void 0===y.tickmode&&(y.tickmode=y.autotick?\"auto\":\"linear\"),delete y.autotick),d(y)}else if(l&&l.test(g))d(t[g].radialaxis);else if(f&&f.test(g)){var x=t[g];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(h&&h.test(g)){var b=t[g],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],T=_[1],k=_[2],A=i([],w),M=[];for(n=0;n<3;++n)M[n]=T[n]+k*A[2+4*n];b.camera={eye:{x:M[0],y:M[1],z:M[2]},center:{x:T[0],y:T[1],z:T[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(r=0;r<S;r++){var E=t.annotations[r];o.isPlainObject(E)&&(E.ref&&(\"paper\"===E.ref?(E.xref=\"paper\",E.yref=\"paper\"):\"data\"===E.ref&&(E.xref=\"x\",E.yref=\"y\"),delete E.ref),p(E,\"xref\"),p(E,\"yref\"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(r=0;r<L;r++){var C=t.shapes[r];o.isPlainObject(C)&&(p(C,\"xref\"),p(C,\"yref\"))}var P=Array.isArray(t.images)?t.images.length:0;for(r=0;r<P;r++){var O=t.images[r];o.isPlainObject(O)&&(p(O,\"xref\"),p(O,\"yref\"))}var I=t.legend;return I&&(I.x>3?(I.x=1.02,I.xanchor=\"left\"):I.x<-2&&(I.x=-.02,I.xanchor=\"right\"),I.y>3?(I.y=1.02,I.yanchor=\"bottom\"):I.y<-2&&(I.y=-.02,I.yanchor=\"top\")),d(t),\"rotate\"===t.dragmode&&(t.dragmode=\"orbit\"),u.clean(t),t.template&&t.template.layout&&e.cleanLayout(t.template.layout),t},e.cleanData=function(t){for(var r=0;r<t.length;r++){var n,i=t[r];if(\"histogramy\"===i.type&&\"xbins\"in i&&!(\"ybins\"in i)&&(i.ybins=i.xbins,delete i.xbins),i.error_y&&\"opacity\"in i.error_y){var l=u.defaults,f=i.error_y.color||(h(i,\"bar\")?u.defaultLine:l[r%l.length]);i.error_y.color=u.addOpacity(u.rgb(f),u.opacity(f)*i.error_y.opacity),delete i.error_y.opacity}if(\"bardir\"in i&&(\"h\"!==i.bardir||!h(i,\"bar\")&&\"histogram\"!==i.type.substr(0,9)||(i.orientation=\"h\",e.swapXYData(i)),delete i.bardir),\"histogramy\"===i.type&&e.swapXYData(i),\"histogramx\"!==i.type&&\"histogramy\"!==i.type||(i.type=\"histogram\"),\"scl\"in i&&!(\"colorscale\"in i)&&(i.colorscale=i.scl,delete i.scl),\"reversescl\"in i&&!(\"reversescale\"in i)&&(i.reversescale=i.reversescl,delete i.reversescl),i.xaxis&&(i.xaxis=c(i.xaxis,\"x\")),i.yaxis&&(i.yaxis=c(i.yaxis,\"y\")),h(i,\"gl3d\")&&i.scene&&(i.scene=s.subplotsRegistry.gl3d.cleanId(i.scene)),!h(i,\"pie-like\")&&!h(i,\"bar-like\"))if(Array.isArray(i.textposition))for(n=0;n<i.textposition.length;n++)i.textposition[n]=y(i.textposition[n]);else i.textposition&&(i.textposition=y(i.textposition));var p=a.getModule(i);if(p&&p.colorbar){var x=p.colorbar.container,b=x?i[x]:i;b&&b.colorscale&&(\"YIGnBu\"===b.colorscale&&(b.colorscale=\"YlGnBu\"),\"YIOrRd\"===b.colorscale&&(b.colorscale=\"YlOrRd\"))}if(\"surface\"===i.type&&o.isPlainObject(i.contours)){var _=[\"x\",\"y\",\"z\"];for(n=0;n<_.length;n++){var w=i.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if(\"candlestick\"===i.type||\"ohlc\"===i.type){var T=!1!==(i.increasing||{}).showlegend,k=!1!==(i.decreasing||{}).showlegend,A=v(i.increasing),M=v(i.decreasing);if(!1!==A&&!1!==M){var S=g(A,M,T,k);S&&(i.name=S)}else!A&&!M||i.name||(i.name=A||M)}if(Array.isArray(i.transforms)){var E=i.transforms;for(n=0;n<E.length;n++){var L=E[n];if(o.isPlainObject(L))switch(L.type){case\"filter\":L.filtersrc&&(L.target=L.filtersrc,delete L.filtersrc),L.calendar&&(L.valuecalendar||(L.valuecalendar=L.calendar),delete L.calendar);break;case\"groupby\":if(L.styles=L.styles||L.style,L.styles&&!Array.isArray(L.styles)){var C=L.styles,P=Object.keys(C);L.styles=[];for(var O=0;O<P.length;O++)L.styles.push({target:P[O],value:C[P[O]]})}}}}m(i,\"line\")&&delete i.line,\"marker\"in i&&(m(i.marker,\"line\")&&delete i.marker.line,m(i,\"marker\")&&delete i.marker),u.clean(i),i.autobinx&&(delete i.autobinx,delete i.xbins),i.autobiny&&(delete i.autobiny,delete i.ybins),d(i),i.colorbar&&d(i.colorbar),i.marker&&i.marker.colorbar&&d(i.marker.colorbar),i.line&&i.line.colorbar&&d(i.line.colorbar),i.aaxis&&d(i.aaxis),i.baxis&&d(i.baxis)}},e.swapXYData=function(t){var e;if(o.swapAttrs(t,[\"?\",\"?0\",\"d?\",\"?bins\",\"nbins?\",\"autobin?\",\"?src\",\"error_?\"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n=\"copy_ystyle\"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,[\"error_?.copy_ystyle\"]),n&&o.swapAttrs(t,[\"error_?.color\",\"error_?.thickness\",\"error_?.width\"])}if(\"string\"==typeof t.hoverinfo){var i=t.hoverinfo.split(\"+\");for(e=0;e<i.length;e++)\"x\"===i[e]?i[e]=\"y\":\"y\"===i[e]&&(i[e]=\"x\");t.hoverinfo=i.join(\"+\")}},e.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map((function(t,e){return e}));if(Array.isArray(e)){for(var r=[],i=0;i<e.length;i++)o.isIndex(e[i],t.data.length)?r.push(e[i]):o.warn(\"trace index (\",e[i],\") is not a number or is out of bounds\");return r}return e},e.manageArrayContainers=function(t,e,r){var i=t.obj,a=t.parts,s=a.length,l=a[s-1],u=n(l);if(u&&null===e){var c=a.slice(0,s-1).join(\".\");o.nestedProperty(i,c).get().splice(l,1)}else u&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\\.[^\\[\\]\\.]+|\\[[^\\[\\]\\.]+\\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}e.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=[\"x\",\"y\",\"z\"];e.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var i=t._fullData[n],a=0;a<3;a++){var s=f(t,i,_[a]);if(s&&\"log\"!==s.type){var l=s._name,u=s._id.substr(1);if(\"scene\"===u.substr(0,5)){if(void 0!==r[u])continue;l=u+\".\"+l}var c=l+\".type\";void 0===r[l]&&void 0===r[c]&&o.nestedProperty(t.layout,c).set(null)}}}},10641:function(t,e,r){\"use strict\";var n=r(72391);e._doPlot=n._doPlot,e.newPlot=n.newPlot,e.restyle=n.restyle,e.relayout=n.relayout,e.redraw=n.redraw,e.update=n.update,e._guiRestyle=n._guiRestyle,e._guiRelayout=n._guiRelayout,e._guiUpdate=n._guiUpdate,e._storeDirectGUIEdit=n._storeDirectGUIEdit,e.react=n.react,e.extendTraces=n.extendTraces,e.prependTraces=n.prependTraces,e.addTraces=n.addTraces,e.deleteTraces=n.deleteTraces,e.moveTraces=n.moveTraces,e.purge=n.purge,e.addFrames=n.addFrames,e.deleteFrames=n.deleteFrames,e.animate=n.animate,e.setPlotConfig=n.setPlotConfig;var i=r(24401).getGraphDiv,a=r(34031).eraseActiveShape;e.deleteActiveShape=function(t){return a(i(t))},e.toImage=r(403),e.validate=r(84936),e.downloadImage=r(7239);var o=r(96318);e.makeTemplate=o.makeTemplate,e.validateTemplate=o.validateTemplate},6611:function(t,e,r){\"use strict\";var n=r(41965),i=r(64213),a=r(47769),o=r(65888).sorterAsc,s=r(73972);e.containerArrayMatch=r(14458);var l=e.isAddVal=function(t){return\"add\"===t||n(t)},u=e.isRemoveVal=function(t){return null===t||\"remove\"===t};e.applyContainerArrayChanges=function(t,e,r,n,c){var f=e.astr,h=s.getComponentMethod(f,\"supplyLayoutDefaults\"),p=s.getComponentMethod(f,\"draw\"),d=s.getComponentMethod(f,\"drawOne\"),v=n.replot||n.recalc||h===i||p===i,g=t.layout,y=t._fullLayout;if(r[\"\"]){Object.keys(r).length>1&&a.warn(\"Full array edits are incompatible with other edits\",f);var m=r[\"\"][\"\"];if(u(m))e.set(null);else{if(!Array.isArray(m))return a.warn(\"Unrecognized full array edit value\",f,m),!0;e.set(m)}return!v&&(h(g,y),p(t),!0)}var x,b,_,w,T,k,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=c(y,f).get(),P=[],O=-1,I=L.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],T=Object.keys(w),k=w[\"\"],A=l(k),_<0||_>L.length-(A?0:1))a.warn(\"index out of range\",f,_);else if(void 0!==k)T.length>1&&a.warn(\"Insertion & removal are incompatible with edits to the same index.\",f,_),u(k)?P.push(_):A?(\"add\"===k&&(k={}),L.splice(_,0,k),C&&C.splice(_,0,{})):a.warn(\"Unrecognized full object edit value\",f,_,k),-1===O&&(O=_);else for(b=0;b<T.length;b++)M=f+\"[\"+_+\"].\",c(L[_],T[b],M).set(w[T[b]]);for(x=P.length-1;x>=0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),v)return!1;if(h(g,y),d!==i){var D;if(-1===O)D=S;else{for(I=Math.max(L.length,I),D=[],x=0;x<S.length&&!((_=S[x])>=O);x++)D.push(_);for(x=O;x<I;x++)D.push(x)}for(x=0;x<D.length;x++)d(t,D[x])}else p(t);return!0}},72391:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(57035),o=r(71828),s=o.nestedProperty,l=r(11086),u=r(10847),c=r(73972),f=r(86281),h=r(74875),p=r(89298),d=r(23608),v=r(13838),g=r(91424),y=r(7901),m=r(4305).initInteractions,x=r(77922),b=r(47322).clearOutline,_=r(72075).dfltConfig,w=r(6611),T=r(58377),k=r(61549),A=r(30962),M=r(85555).AX_NAME_PATTERN,S=0;function E(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit(\"plotly_afterplot\")}function L(t,e){try{t._fullLayout._paper.style(\"background\",e)}catch(t){o.error(t)}}function C(t,e){L(t,y.combine(e,\"white\"))}function P(t,e){if(!t._context){t._context=o.extendDeep({},_);var r=n.select(\"base\");t._context._baseUrl=r.size()&&r.attr(\"href\")?window.location.href.split(\"#\")[0]:\"\"}var i,s,l,u=t._context;if(e){for(s=Object.keys(e),i=0;i<s.length;i++)\"editable\"!==(l=s[i])&&\"edits\"!==l&&l in u&&(\"setBackground\"===l&&\"opaque\"===e[l]?u[l]=C:u[l]=e[l]);e.plot3dPixelRatio&&!u.plotGlPixelRatio&&(u.plotGlPixelRatio=u.plot3dPixelRatio);var c=e.editable;if(void 0!==c)for(u.editable=c,s=Object.keys(u.edits),i=0;i<s.length;i++)u.edits[s[i]]=c;if(e.edits)for(s=Object.keys(e.edits),i=0;i<s.length;i++)(l=s[i])in u.edits&&(u.edits[l]=e.edits[l]);u._exportedPlot=e._exportedPlot}u.staticPlot&&(u.editable=!1,u.edits={},u.autosizable=!1,u.scrollZoom=!1,u.doubleClick=!1,u.showTips=!1,u.showLink=!1,u.displayModeBar=!1),\"hover\"!==u.displayModeBar||a||(u.displayModeBar=!0),\"transparent\"!==u.setBackground&&\"function\"==typeof u.setBackground||(u.setBackground=L),u._hasZeroHeight=u._hasZeroHeight||0===t.clientHeight,u._hasZeroWidth=u._hasZeroWidth||0===t.clientWidth;var f=u.scrollZoom,h=u._scrollZoom={};if(!0===f)h.cartesian=1,h.gl3d=1,h.geo=1,h.mapbox=1;else if(\"string\"==typeof f){var p=f.split(\"+\");for(i=0;i<p.length;i++)h[p[i]]=1}else!1!==f&&(h.gl3d=1,h.geo=1,h.mapbox=1)}function O(t,e){var r,n,i=e+1,a=[];for(r=0;r<t.length;r++)(n=t[r])<0?a.push(i+n):a.push(n);return a}function I(t,e,r){var n,i;for(n=0;n<e.length;n++){if((i=e[n])!==parseInt(i,10))throw new Error(\"all values in \"+r+\" must be integers\");if(i>=t.data.length||i<-t.data.length)throw new Error(r+\" must be valid indices for gd.data.\");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error(\"each index in \"+r+\" must be unique.\")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0===e)throw new Error(\"currentIndices is a required argument.\");if(Array.isArray(e)||(e=[e]),I(t,e,\"currentIndices\"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&I(t,r,\"newIndices\"),void 0!==r&&e.length!==r.length)throw new Error(\"current and new indices must be of equal length.\")}function z(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array\");if(!o.isPlainObject(e))throw new Error(\"update must be a key:value object\");if(void 0===r)throw new Error(\"indices must be an integer or array of integers\");for(var a in I(t,r,\"indices\"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error(\"attribute \"+a+\" must be an array of length equal to indices array length\");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error(\"when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object\")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,u,c,f,h=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=O(r,t.data.length-1),e)for(var v=0;v<r.length;v++){if(a=t.data[r[v]],l=(u=s(a,d)).get(),c=e[d][v],!o.isArrayOrTypedArray(c))throw new Error(\"attribute: \"+d+\" index: \"+v+\" must be an array\");if(!o.isArrayOrTypedArray(l))throw new Error(\"cannot extend missing or non-array attribute: \"+d);if(l.constructor!==c.constructor)throw new Error(\"cannot extend array with an array of a different type: \"+d);f=h?n[d][v]:n,i(f)||(f=-1),p.push({prop:u,target:l,insert:c,maxp:Math.floor(f)})}return p}(t,e,r,n),u={},c={},f=0;f<l.length;f++){var h=l[f].prop,p=l[f].maxp,d=a(l[f].target,l[f].insert,p);h.set(d[0]),Array.isArray(u[h.astr])||(u[h.astr]=[]),u[h.astr].push(d[1]),Array.isArray(c[h.astr])||(c[h.astr]=[]),c[h.astr].push(l[f].target.length)}return{update:u,maxPoints:c}}function R(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function F(t,r,n,i){t=o.getGraphDiv(t),T.clearPromiseQueue(t);var a={};if(\"string\"==typeof r)a[r]=n;else{if(!o.isPlainObject(r))return o.warn(\"Restyle fail.\",r,n,i),Promise.reject();a=o.extendFlat({},r),void 0===i&&(i=n)}Object.keys(a).length&&(t.changed=!0);var s=T.coerceTraceIndices(t,i),l=U(t,a,s),c=l.flags;c.calc&&(t.calcdata=void 0),c.clearAxisTypes&&T.clearAxisTypes(t,s,{});var f=[];c.fullReplot?f.push(e._doPlot):(f.push(h.previousPromises),h.supplyDefaults(t),c.markerSize&&(h.doCalcdata(t),G(f)),c.style&&f.push(k.doTraceStyle),c.colorbars&&f.push(k.doColorBars),f.push(E)),f.push(h.rehover,h.redrag,h.reselect),u.add(t,F,[t,l.undoit,l.traces],F,[t,l.redoit,l.traces]);var p=o.syncOrAsync(f,t);return p&&p.then||(p=Promise.resolve()),p.then((function(){return t.emit(\"plotly_restyle\",l.eventData),t}))}function B(t){return void 0===t?null:t}function N(t,e){return e?function(e,r,n){var i=s(e,r),a=i.set;return i.set=function(e){j((n||\"\")+r,i.get(),e,t),a(e)},i}:s}function j(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var i=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],s=Math.max(i.length,a.length),l=0;l<s;l++)j(t+\"[\"+l+\"]\",i[l],a[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var u=o.isPlainObject(e)?e:{},c=o.isPlainObject(r)?r:{},f=o.extendFlat({},u,c);for(var h in f)j(t+\".\"+h,u[h],c[h],n)}else void 0===n[t]&&(n[t]=B(e))}function U(t,e,r){var n,i=t._fullLayout,a=t._fullData,l=t.data,u=i._guiEditing,d=N(i._preGUI,u),v=o.extendDeepAll({},e);V(e);var g,y=A.traceFlags(),m={},x={};function b(){return r.map((function(){}))}function _(t){var e=p.id2name(t);-1===g.indexOf(e)&&g.push(e)}function w(t){return\"LAYOUT\"+t+\".autorange\"}function k(t){return\"LAYOUT\"+t+\".range\"}function M(t){for(var e=t;e<a.length;e++)if(a[e]._input===l[t])return a[e]}function S(n,a,o){if(Array.isArray(n))n.forEach((function(t){S(t,a,o)}));else if(!(n in e)&&!T.hasParent(e,n)){var s;if(\"LAYOUT\"===n.substr(0,6))s=d(t.layout,n.replace(\"LAYOUT\",\"\"));else{var c=r[o];s=N(i._tracePreGUI[M(c)._fullInput.uid],u)(l[c],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=B(s.get())),void 0!==a&&s.set(a)}}function E(t){return function(e){return a[e][t]}}function L(t){return function(e,n){return!1===e?a[r[n]][t]:null}}for(var C in e){if(T.hasParent(e,C))throw new Error(\"cannot set \"+C+\" and a parent attribute simultaneously\");var P,O,I,D,z,R,F=e[C];if(\"autobinx\"!==C&&\"autobiny\"!==C||(C=C.charAt(C.length-1)+\"bins\",F=Array.isArray(F)?F.map(L(C)):!1===F?r.map(E(C)):null),m[C]=F,\"LAYOUT\"!==C.substr(0,6)){for(x[C]=b(),n=0;n<r.length;n++)if(P=l[r[n]],O=M(r[n]),D=(I=N(i._tracePreGUI[O._fullInput.uid],u)(P,C)).get(),void 0!==(z=Array.isArray(F)?F[n%F.length]:F)){var j=I.parts[I.parts.length-1],U=C.substr(0,C.length-j.length-1),H=U?U+\".\":\"\",q=U?s(O,U).get():O;if((R=f.getTraceValObject(O,I.parts))&&R.impliedEdits&&null!==z)for(var G in R.impliedEdits)S(o.relativeAttr(C,G),R.impliedEdits[G],n);else if(\"thicknessmode\"!==j&&\"lenmode\"!==j||D===z||\"fraction\"!==z&&\"pixels\"!==z||!q){if(\"type\"===C&&(\"pie\"===z!=(\"pie\"===D)||\"funnelarea\"===z!=(\"funnelarea\"===D))){var Z=\"x\",Y=\"y\";\"bar\"!==z&&\"bar\"!==D||\"h\"!==P.orientation||(Z=\"y\",Y=\"x\"),o.swapAttrs(P,[\"?\",\"?src\"],\"labels\",Z),o.swapAttrs(P,[\"d?\",\"?0\"],\"label\",Z),o.swapAttrs(P,[\"?\",\"?src\"],\"values\",Y),\"pie\"===D||\"funnelarea\"===D?(s(P,\"marker.color\").set(s(P,\"marker.colors\").get()),i._pielayer.selectAll(\"g.trace\").remove()):c.traceIs(P,\"cartesian\")&&s(P,\"marker.colors\").set(s(P,\"marker.color\").get())}}else{var W=i._size,X=q.orient,J=\"top\"===X||\"bottom\"===X;if(\"thicknessmode\"===j){var K=J?W.h:W.w;S(H+\"thickness\",q.thickness*(\"fraction\"===z?1/K:K),n)}else{var $=J?W.w:W.h;S(H+\"len\",q.len*(\"fraction\"===z?1/$:$),n)}}if(x[C][n]=B(D),-1!==[\"swapxy\",\"swapxyaxes\",\"orientation\",\"orientationaxes\"].indexOf(C)){if(\"orientation\"===C){I.set(z);var Q=P.x&&!P.y?\"h\":\"v\";if((I.get()||Q)===O.orientation)continue}else\"orientationaxes\"===C&&(P.orientation={v:\"h\",h:\"v\"}[O.orientation]);T.swapXYData(P),y.calc=y.clearAxisTypes=!0}else-1!==h.dataArrayContainers.indexOf(I.parts[0])?(T.manageArrayContainers(I,z,x),y.calc=!0):(R?R.arrayOk&&!c.traceIs(O,\"regl\")&&(o.isArrayOrTypedArray(z)||o.isArrayOrTypedArray(D))?y.calc=!0:A.update(y,R):y.calc=!0,I.set(z))}if(-1!==[\"swapxyaxes\",\"orientationaxes\"].indexOf(C)&&p.swap(t,r),\"orientationaxes\"===C){var tt=s(t.layout,\"hovermode\"),et=tt.get();\"x\"===et?tt.set(\"y\"):\"y\"===et?tt.set(\"x\"):\"x unified\"===et?tt.set(\"y unified\"):\"y unified\"===et&&tt.set(\"x unified\")}if(-1!==[\"orientation\",\"type\"].indexOf(C)){for(g=[],n=0;n<r.length;n++){var rt=l[r[n]];c.traceIs(rt,\"cartesian\")&&(_(rt.xaxis||\"x\"),_(rt.yaxis||\"y\"))}S(g.map(w),!0,0),S(g.map(k),[0,1],0)}}else I=d(t.layout,C.replace(\"LAYOUT\",\"\")),x[C]=[B(I.get())],I.set(Array.isArray(F)?F[0]:F),y.calc=!0}return(y.calc||y.plot)&&(y.fullReplot=!0),{flags:y,undoit:x,redoit:m,traces:r,eventData:o.extendDeepNoArrays([],[v,r])}}function V(t){var e,r,n,i=o.counterRegex(\"axis\",\".title\",!1,!1),a=/colorbar\\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],\"title\"!==r&&!i.test(r)&&!a.test(r)||\"string\"!=typeof n&&\"number\"!=typeof n?r.indexOf(\"titlefont\")>-1&&-1===r.indexOf(\"grouptitlefont\")?l(r,r.replace(\"titlefont\",\"title.font\")):r.indexOf(\"titleposition\")>-1?l(r,r.replace(\"titleposition\",\"title.position\")):r.indexOf(\"titleside\")>-1?l(r,r.replace(\"titleside\",\"title.side\")):r.indexOf(\"titleoffset\")>-1&&l(r,r.replace(\"titleoffset\",\"title.offset\")):l(r,r.replace(\"title\",\"title.text\"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){t=o.getGraphDiv(t),T.clearPromiseQueue(t);var n={};if(\"string\"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn(\"Relayout fail.\",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=X(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[h.previousPromises];a.layoutReplot?s.push(k.layoutReplot):Object.keys(n).length&&(q(t,a,i)||h.supplyDefaults(t),a.legend&&s.push(k.doLegend),a.layoutstyle&&s.push(k.layoutStyles),a.axrange&&G(s,i.rangesAltered),a.ticks&&s.push(k.doTicksRelayout),a.modebar&&s.push(k.doModeBar),a.camera&&s.push(k.doCamera),a.colorbars&&s.push(k.doColorBars),s.push(E)),s.push(h.rehover,h.redrag,h.reselect),u.add(t,H,[t,i.undoit],H,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then((function(){return t.emit(\"plotly_relayout\",i.eventData),t}))}function q(t,e,r){var n,i,a=t._fullLayout;if(!e.axrange)return!1;for(var s in e)if(\"axrange\"!==s&&e[s])return!1;var l=function(t,e){return o.coerce(n,i,v,t,e)},u={};for(var c in r.rangesAltered){var f=p.id2name(c);if(n=t.layout[f],i=a[f],d(n,i,l,u),i._matchGroup)for(var h in i._matchGroup)if(h!==c){var g=a[p.id2name(h)];g.autorange=i.autorange,g.range=i.range.slice(),g._input.range=i.range.slice()}}return!0}function G(t,e){var r=e?function(t){var r=[];for(var n in e){var i=p.getFromId(t,n);if(r.push(n),-1!==(i.ticklabelposition||\"\").indexOf(\"inside\")&&i._anchorAxis&&r.push(i._anchorAxis._id),i._matchGroup)for(var a in i._matchGroup)e[a]||r.push(a)}return p.draw(t,r,{skipTitle:!0})}:function(t){return p.draw(t,\"redraw\")};t.push(b,k.doAutoRangeAndConstraints,r,k.drawData,k.finalDraw)}var Z=/^[xyz]axis[0-9]*\\.range(\\[[0|1]\\])?$/,Y=/^[xyz]axis[0-9]*\\.autorange$/,W=/^[xyz]axis[0-9]*\\.domain(\\[[0|1]\\])?$/;function X(t,e){var r,n,i,a=t.layout,l=t._fullLayout,u=l._guiEditing,h=N(l._preGUI,u),d=Object.keys(e),v=p.list(t),g=o.extendDeepAll({},e),y={};for(V(e),d=Object.keys(e),n=0;n<d.length;n++)if(0===d[n].indexOf(\"allaxes\")){for(i=0;i<v.length;i++){var m=v[i]._id.substr(1),x=-1!==m.indexOf(\"scene\")?m+\".\":\"\",b=d[n].replace(\"allaxes\",x+v[i]._name);e[b]||(e[b]=e[d[n]])}delete e[d[n]]}var _=A.layoutFlags(),k={},S={};function E(t,r){if(Array.isArray(t))t.forEach((function(t){E(t,r)}));else if(!(t in e)&&!T.hasParent(e,t)){var n=h(a,t);t in S||(S[t]=B(n.get())),void 0!==r&&n.set(r)}}var L,C={};function P(t){var e=p.name2id(t.split(\".\")[0]);return C[e]=1,e}for(var O in e){if(T.hasParent(e,O))throw new Error(\"cannot set \"+O+\" and a parent attribute simultaneously\");for(var I=h(a,O),D=e[O],z=I.parts.length-1;z>0&&\"string\"!=typeof I.parts[z];)z--;var R=I.parts[z],F=I.parts[z-1]+\".\"+R,j=I.parts.slice(0,z).join(\".\"),U=s(t.layout,j).get(),H=s(l,j).get(),q=I.get();if(void 0!==D){k[O]=D,S[O]=\"reverse\"===R?D:B(q);var G=f.getLayoutValObject(l,I.parts);if(G&&G.impliedEdits&&null!==D)for(var X in G.impliedEdits)E(o.relativeAttr(O,X),G.impliedEdits[X]);if(-1!==[\"width\",\"height\"].indexOf(O))if(D){E(\"autosize\",null);var K=\"height\"===O?\"width\":\"height\";E(K,l[K])}else l[O]=t._initialAutoSize[O];else if(\"autosize\"===O)E(\"width\",D?null:l.width),E(\"height\",D?null:l.height);else if(F.match(Z))P(F),s(l,j+\"._inputRange\").set(null);else if(F.match(Y)){P(F),s(l,j+\"._inputRange\").set(null);var $=s(l,j).get();$._inputDomain&&($._input.domain=$._inputDomain.slice())}else F.match(W)&&s(l,j+\"._inputDomain\").set(null);if(\"type\"===R){L=U;var Q=\"linear\"===H.type&&\"log\"===D,tt=\"log\"===H.type&&\"linear\"===D;if(Q||tt){if(L&&L.range)if(H.autorange)Q&&(L.range=L.range[1]>L.range[0]?[1,2]:[2,1]);else{var et=L.range[0],rt=L.range[1];Q?(et<=0&&rt<=0&&E(j+\".autorange\",!0),et<=0?et=rt/1e6:rt<=0&&(rt=et/1e6),E(j+\".range[0]\",Math.log(et)/Math.LN10),E(j+\".range[1]\",Math.log(rt)/Math.LN10)):(E(j+\".range[0]\",Math.pow(10,et)),E(j+\".range[1]\",Math.pow(10,rt)))}else E(j+\".autorange\",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[I.parts[0]]&&\"radialaxis\"===I.parts[1]&&delete l[I.parts[0]]._subplot.viewInitial[\"radialaxis.range\"],c.getComponentMethod(\"annotations\",\"convertCoords\")(t,H,D,E),c.getComponentMethod(\"images\",\"convertCoords\")(t,H,D,E)}else E(j+\".autorange\",!0),E(j+\".range\",null);s(l,j+\"._inputRange\").set(null)}else if(R.match(M)){var nt=s(l,O).get(),it=(D||{}).type;it&&\"-\"!==it||(it=\"linear\"),c.getComponentMethod(\"annotations\",\"convertCoords\")(t,nt,it,E),c.getComponentMethod(\"images\",\"convertCoords\")(t,nt,it,E)}var at=w.containerArrayMatch(O);if(at){r=at.array,n=at.index;var ot=at.property,st=G||{editType:\"calc\"};\"\"!==n&&\"\"===ot&&(w.isAddVal(D)?S[O]=null:w.isRemoveVal(D)?S[O]=(s(a,r).get()||[])[n]:o.warn(\"unrecognized full object value\",e)),A.update(_,st),y[r]||(y[r]={});var lt=y[r][n];lt||(lt=y[r][n]={}),lt[ot]=D,delete e[O]}else\"reverse\"===R?(U.range?U.range.reverse():(E(j+\".autorange\",!0),U.range=[1,0]),H.autorange?_.calc=!0:_.plot=!0):(\"dragmode\"===O&&(!1===D&&!1!==q||!1!==D&&!1===q)||l._has(\"scatter-like\")&&l._has(\"regl\")&&\"dragmode\"===O&&(\"lasso\"===D||\"select\"===D)&&\"lasso\"!==q&&\"select\"!==q||l._has(\"gl2d\")?_.plot=!0:G?A.update(_,G):_.calc=!0,I.set(D))}}for(r in y)w.applyContainerArrayChanges(t,h(a,r),y[r],_,h)||(_.plot=!0);for(var ut in C){var ct=(L=p.getFromId(t,ut))&&L._constraintGroup;if(ct)for(var ft in _.calc=!0,ct)C[ft]||(p.getFromId(t,ft)._constraintShrinkable=!0)}(J(t)||e.height||e.width)&&(_.plot=!0);var ht=l.shapes;for(n=0;n<ht.length;n++)if(ht[n].showlegend){_.calc=!0;break}return(_.plot||_.calc)&&(_.layoutReplot=!0),{flags:_,rangesAltered:C,undoit:S,redoit:k,eventData:g}}function J(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&h.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function K(t,r,n,i){t=o.getGraphDiv(t),T.clearPromiseQueue(t),o.isPlainObject(r)||(r={}),o.isPlainObject(n)||(n={}),Object.keys(r).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var a=T.coerceTraceIndices(t,i),s=U(t,o.extendFlat({},r),a),l=s.flags,c=X(t,o.extendFlat({},n)),f=c.flags;(l.calc||f.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&T.clearAxisTypes(t,a,n);var p=[];f.layoutReplot?p.push(k.layoutReplot):l.fullReplot?p.push(e._doPlot):(p.push(h.previousPromises),q(t,f,c)||h.supplyDefaults(t),l.style&&p.push(k.doTraceStyle),(l.colorbars||f.colorbars)&&p.push(k.doColorBars),f.legend&&p.push(k.doLegend),f.layoutstyle&&p.push(k.layoutStyles),f.axrange&&G(p,c.rangesAltered),f.ticks&&p.push(k.doTicksRelayout),f.modebar&&p.push(k.doModeBar),f.camera&&p.push(k.doCamera),p.push(E)),p.push(h.rehover,h.redrag,h.reselect),u.add(t,K,[t,s.undoit,c.undoit,s.traces],K,[t,s.redoit,c.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then((function(){return t.emit(\"plotly_update\",{data:s.eventData,layout:c.eventData}),t}))}function $(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var Q=[{pattern:/^hiddenlabels/,attr:\"legend.uirevision\"},{pattern:/^((x|y)axis\\d*)\\.((auto)?range|title\\.text)/},{pattern:/axis\\d*\\.showspikes$/,attr:\"modebar.uirevision\"},{pattern:/(hover|drag)mode$/,attr:\"modebar.uirevision\"},{pattern:/^(scene\\d*)\\.camera/},{pattern:/^(geo\\d*)\\.(projection|center|fitbounds)/},{pattern:/^(ternary\\d*\\.[abc]axis)\\.(min|title\\.text)$/},{pattern:/^(polar\\d*\\.radialaxis)\\.((auto)?range|angle|title\\.text)/},{pattern:/^(polar\\d*\\.angularaxis)\\.rotation/},{pattern:/^(mapbox\\d*)\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\.(x|y)$/,attr:\"editrevision\"},{pattern:/^(shapes|annotations)/,attr:\"editrevision\"},{pattern:/^title\\.text$/,attr:\"editrevision\"}],tt=[{pattern:/^selectedpoints$/,attr:\"selectionrevision\"},{pattern:/(^|value\\.)visible$/,attr:\"legend.uirevision\"},{pattern:/^dimensions\\[\\d+\\]\\.constraintrange/},{pattern:/^node\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\\.)name$/},{pattern:/colorbar\\.title\\.text$/},{pattern:/colorbar\\.(x|y)$/,attr:\"editrevision\"}];function et(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=t.match(n.pattern);if(i){var a=i[1]||\"\";return{head:a,tail:t.substr(a.length+1),attr:n.attr}}}}function rt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(\".\");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(\".\")+\".uirevision\").get()))return r;return e.uirevision}function nt(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function it(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function at(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function ot(t,e,r,n){var i,a,l,u=n.getValObject,c=n.flags,f=n.immutable,h=n.inArray,p=n.arrayIndex;function d(){var t=i.editType;h&&-1!==t.indexOf(\"arraydraw\")?o.pushUnique(c.arrays[h],p):(A.update(c,i),\"none\"!==t&&c.nChanges++,n.transition&&i.anim&&c.nChangesAnim++,(Z.test(l)||Y.test(l))&&(c.rangesAltered[r[0]]=1),W.test(l)&&s(e,\"_inputDomain\").set(null),\"datarevision\"===a&&(c.newDataRevision=1))}function v(t){return\"data_array\"===t.valType||t.arrayOk}for(a in t){if(c.calc&&!n.transition)return;var g=t[a],y=e[a],m=r.concat(a);if(l=m.join(\".\"),\"_\"!==a.charAt(0)&&\"function\"!=typeof g&&g!==y){if((\"tick0\"===a||\"dtick\"===a)&&\"geo\"!==r[0]){var x=e.tickmode;if(\"auto\"===x||\"array\"===x||!x)continue}if((\"range\"!==a||!e.autorange)&&(\"zmin\"!==a&&\"zmax\"!==a||\"contourcarpet\"!==e.type)&&(i=u(m))&&(!i._compareAsJSON||JSON.stringify(g)!==JSON.stringify(y))){var b,_=i.valType,w=v(i),T=Array.isArray(g),k=Array.isArray(y);if(T&&k){var M=\"_input_\"+a,S=t[M],E=e[M];if(Array.isArray(S)&&S===E)continue}if(void 0===y)w&&T?c.calc=!0:d();else if(i._isLinkedToArray){var L=[],C=!1;h||(c.arrays[a]=L);var P=Math.min(g.length,y.length),O=Math.max(g.length,y.length);if(P!==O){if(\"arraydraw\"!==i.editType){d();continue}C=!0}for(b=0;b<P;b++)ot(g[b],y[b],m.concat(b),o.extendFlat({inArray:a,arrayIndex:b},n));if(C)for(b=P;b<O;b++)L.push(b)}else!_&&o.isPlainObject(g)?ot(g,y,m,n):w?T&&k?(f&&(c.calc=!0),(f||n.newDataRevision)&&d()):T!==k?c.calc=!0:d():T&&k&&g.length===y.length&&String(g)===String(y)||d()}}}for(a in e)if(!(a in t)&&\"_\"!==a.charAt(0)&&\"function\"!=typeof e[a]){if(v(i=u(r.concat(a)))&&Array.isArray(e[a]))return void(c.calc=!0);d()}}function st(t,e){var r;for(r in t)if(\"_\"!==r.charAt(0)){var n=t[r],i=e[r];if(n!==i)if(o.isPlainObject(n)&&o.isPlainObject(i)){if(st(n,i))return!0}else{if(!Array.isArray(n)||!Array.isArray(i))return!0;if(n.length!==i.length)return!0;for(var a=0;a<n.length;a++)if(n[a]!==i[a]){if(!o.isPlainObject(n[a])||!o.isPlainObject(i[a]))return!0;if(st(n[a],i[a]))return!0}}}}function lt(t){var e=t._fullLayout,r=t.getBoundingClientRect();if(!o.equalDomRects(r,e._lastBBox)){var n=e._invTransform=o.inverseTransformMatrix(o.getFullTransformMatrix(t));e._invScaleX=Math.sqrt(n[0][0]*n[0][0]+n[0][1]*n[0][1]+n[0][2]*n[0][2]),e._invScaleY=Math.sqrt(n[1][0]*n[1][0]+n[1][1]*n[1][1]+n[1][2]*n[1][2]),e._lastBBox=r}}e.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/\");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var i=(r=h.supplyAnimationDefaults(r)).transition,a=r.frame;function s(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function u(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise((function(a,c){function f(){t.emit(\"plotly_animating\"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&function(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,T.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete&&e.onComplete()})),t.emit(\"plotly_animatingframe\",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit(\"plotly_animated\"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}()};e()}var p,d,v=0;function g(t){return Array.isArray(i)?v>=i.length?t.transitionOpts=i[v]:t.transitionOpts=i[0]:t.transitionOpts=i,v++,t}var y=[],m=null==e,x=Array.isArray(e);if(m||x||!o.isPlainObject(e)){if(m||-1!==[\"string\",\"number\"].indexOf(typeof e))for(p=0;p<n._frames.length;p++)(d=n._frames[p])&&(m||String(d.group)===String(e))&&y.push({type:\"byname\",name:String(d.name),data:g({name:d.name})});else if(x)for(p=0;p<e.length;p++){var b=e[p];-1!==[\"number\",\"string\"].indexOf(typeof b)?(b=String(b),y.push({type:\"byname\",name:b,data:g({name:b})})):o.isPlainObject(b)&&y.push({type:\"object\",data:g(o.extendFlat({},b))})}}else y.push({type:\"object\",data:g(o.extendFlat({},e))});for(p=0;p<y.length;p++)if(\"byname\"===(d=y[p]).type&&!n._frameHash[d.data.name])return o.warn('animate failure: frame not found: \"'+d.data.name+'\"'),void c();-1!==[\"next\",\"immediate\"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit(\"plotly_animationinterrupted\",[])}}(),\"reverse\"===r.direction&&y.reverse();var _=t._fullLayout._currentFrame;if(_&&r.fromcurrent){var w=-1;for(p=0;p<y.length;p++)if(\"byname\"===(d=y[p]).type&&d.name===_){w=p;break}if(w>0&&w<y.length-1){var k=[];for(p=0;p<y.length;p++)d=y[p],(\"byname\"!==y[p].type||p>w)&&k.push(d);y=k}}y.length>0?function(e){if(0!==e.length){for(var i=0;i<e.length;i++){var o;o=\"byname\"===e[i].type?h.computeFrame(t,e[i].name):e[i].data;var p=l(i),d=s(i);d.duration=Math.min(d.duration,p.duration);var v={frame:o,name:e[i].name,frameOpts:p,transitionOpts:d};i===e.length-1&&(v.onComplete=u(a,2),v.onInterrupt=c),n._frameQueue.push(v)}\"immediate\"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||f()}}(y):(t.emit(\"plotly_animated\"),a())}))},e.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/\");var n,i,a,s,l=t._transitionData._frames,c=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error(\"addFrames failure: frameList must be an Array of frame definitions\"+e);var f=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var v=e[n].name,g=(c[v]||d[v]||{}).name,y=e[n].name,m=c[g]||d[g];g&&y&&\"number\"==typeof y&&m&&S<5&&(S++,o.warn('addFrames: overwriting frame \"'+(c[g]||d[g]).name+'\" with a frame whose name of type \"number\" also equates to \"'+g+'\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===S&&o.warn(\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\")),d[v]={name:v},p.push({frame:h.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:f+n})}p.sort((function(t,e){return t.index>e.index?-1:t.index<e.index?1:0}));var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if(\"number\"==typeof(i=p[n].frame).name&&o.warn(\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\"),!i.name)for(;c[i.name=\"frame \"+t._transitionData._counter++];);if(c[i.name]){for(a=0;a<l.length&&(l[a]||{}).name!==i.name;a++);x.push({type:\"replace\",index:a,value:i}),b.unshift({type:\"replace\",index:a,value:l[a]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:\"insert\",index:s,value:i}),b.unshift({type:\"delete\",index:s}),_++}var w=h.modifyFrames,T=h.modifyFrames,k=[t,b],A=[t,x];return u&&u.add(t,w,k,T,A),h.modifyFrames(t,x)},e.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);var r,n,i=t._transitionData._frames,a=[],s=[];if(!e)for(e=[],r=0;r<i.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],a.push({type:\"delete\",index:n}),s.unshift({type:\"insert\",index:n,value:i[n]});var l=h.modifyFrames,c=h.modifyFrames,f=[t,s],p=[t,a];return u&&u.add(t,l,f,c,p),h.modifyFrames(t,a)},e.addTraces=function t(r,n,i){r=o.getGraphDiv(r);var a,s,l=[],c=e.deleteTraces,f=t,h=[r,l],p=[r,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0===e)throw new Error(\"traces must be defined.\");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if(\"object\"!=typeof(i=e[n])||Array.isArray(i)||null===i)throw new Error(\"all values in traces array must be non-array objects\");if(void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&r.length!==e.length)throw new Error(\"if indices is specified, traces.length must equal indices.length\")}(r,n,i),Array.isArray(n)||(n=[n]),n=n.map((function(t){return o.extendFlat({},t)})),T.cleanData(n),a=0;a<n.length;a++)r.data.push(n[a]);for(a=0;a<n.length;a++)l.push(-n.length+a);if(void 0===i)return s=e.redraw(r),u.add(r,c,h,f,p),s;Array.isArray(i)||(i=[i]);try{D(r,l,i)}catch(t){throw r.data.splice(r.data.length-n.length,n.length),t}return u.startSequence(r),u.add(r,c,h,f,p),s=e.moveTraces(r,l,i),u.stopSequence(r),s},e.deleteTraces=function t(r,n){r=o.getGraphDiv(r);var i,a,s=[],l=e.addTraces,c=t,f=[r,s,n],h=[r,n];if(void 0===n)throw new Error(\"indices must be an integer or array of integers.\");for(Array.isArray(n)||(n=[n]),I(r,n,\"indices\"),(n=O(n,r.data.length-1)).sort(o.sorterDes),i=0;i<n.length;i+=1)a=r.data.splice(n[i],1)[0],s.push(a);var p=e.redraw(r);return u.add(r,l,f,c,h),p},e.extendTraces=function t(r,n,i,a){var s=z(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<0){var a=new t.constructor(0),s=R(t,e);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var u=r-e.length,c=t.length-u;n.set(t.subarray(c)),n.set(e,u),i.set(t.subarray(0,c))}else n=t.concat(e),i=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.prependTraces,c,t,arguments),l},e.moveTraces=function t(r,n,i){var a,s=[],l=[],c=t,f=t,h=[r=o.getGraphDiv(r),i,n],p=[r,n,i];if(D(r,n,i),n=Array.isArray(n)?n:[n],void 0===i)for(i=[],a=0;a<n.length;a++)i.push(-n.length+a);for(i=Array.isArray(i)?i:[i],n=O(n,r.data.length-1),i=O(i,r.data.length-1),a=0;a<r.data.length;a++)-1===n.indexOf(a)&&s.push(r.data[a]);for(a=0;a<n.length;a++)l.push({newIndex:i[a],trace:r.data[n[a]]});for(l.sort((function(t,e){return t.newIndex-e.newIndex})),a=0;a<l.length;a+=1)s.splice(l[a].newIndex,0,l[a].trace);r.data=s;var d=e.redraw(r);return u.add(r,c,h,f,p),d},e.prependTraces=function t(r,n,i,a){var s=z(r=o.getGraphDiv(r),n,i,a,(function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<=0){var a=new t.constructor(0),s=R(e,t);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var u=r-e.length;n.set(e),n.set(t.subarray(0,u),e.length),i.set(t.subarray(u))}else n=e.concat(t),i=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,i]})),l=e.redraw(r),c=[r,s.update,i,s.maxPoints];return u.add(r,e.extendTraces,c,t,arguments),l},e.newPlot=function(t,r,n,i){return t=o.getGraphDiv(t),h.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),h.purge(t),e._doPlot(t,r,n,i)},e._doPlot=function(t,r,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(r)){var u=r;r=u.data,i=u.layout,a=u.config,s=u.frames}if(!1===l.triggerHandler(t,\"plotly_beforeplot\",[r,i,a]))return Promise.reject();r||i||o.isPlotDiv(t)||o.warn(\"Calling _doPlot as if redrawing but this container doesn't yet have a plot.\",t),P(t,a),i||(i={}),n.select(t).classed(\"js-plotly-plot\",!0),g.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var f=0===(t.data||[]).length&&Array.isArray(r);Array.isArray(r)&&(T.cleanData(r),f?t.data=r:t.data.push.apply(t.data,r),t.empty=!1),t.layout&&!f||(t.layout=T.cleanLayout(i)),h.supplyDefaults(t);var d=t._fullLayout,v=d._has(\"cartesian\");d._replotting=!0,(f||d._shouldCreateBgLayer)&&(function(t){var e=n.select(t),r=t._fullLayout;if(r._calcInverseTransform=lt,r._calcInverseTransform(t),r._container=e.selectAll(\".plot-container\").data([0]),r._container.enter().insert(\"div\",\":first-child\").classed(\"plot-container\",!0).classed(\"plotly\",!0),r._paperdiv=r._container.selectAll(\".svg-container\").data([0]),r._paperdiv.enter().append(\"div\").classed(\"user-select-none\",!0).classed(\"svg-container\",!0).style(\"position\",\"relative\"),r._glcontainer=r._paperdiv.selectAll(\".gl-container\").data([{}]),r._glcontainer.enter().append(\"div\").classed(\"gl-container\",!0),r._paperdiv.selectAll(\".main-svg\").remove(),r._paperdiv.select(\".modebar-container\").remove(),r._paper=r._paperdiv.insert(\"svg\",\":first-child\").classed(\"main-svg\",!0),r._toppaper=r._paperdiv.append(\"svg\").classed(\"main-svg\",!0),r._modebardiv=r._paperdiv.append(\"div\"),delete r._modeBar,r._hoverpaper=r._paperdiv.append(\"svg\").classed(\"main-svg\",!0),!r._uid){var i={};n.selectAll(\"defs\").each((function(){this.id&&(i[this.id.split(\"-\")[1]]=1)})),r._uid=o.randstr(i)}r._paperdiv.selectAll(\".main-svg\").attr(x.svgAttrs),r._defs=r._paper.append(\"defs\").attr(\"id\",\"defs-\"+r._uid),r._clips=r._defs.append(\"g\").classed(\"clips\",!0),r._topdefs=r._toppaper.append(\"defs\").attr(\"id\",\"topdefs-\"+r._uid),r._topclips=r._topdefs.append(\"g\").classed(\"clips\",!0),r._bgLayer=r._paper.append(\"g\").classed(\"bglayer\",!0),r._draggers=r._paper.append(\"g\").classed(\"draglayer\",!0);var a=r._paper.append(\"g\").classed(\"layer-below\",!0);r._imageLowerLayer=a.append(\"g\").classed(\"imagelayer\",!0),r._shapeLowerLayer=a.append(\"g\").classed(\"shapelayer\",!0),r._cartesianlayer=r._paper.append(\"g\").classed(\"cartesianlayer\",!0),r._polarlayer=r._paper.append(\"g\").classed(\"polarlayer\",!0),r._smithlayer=r._paper.append(\"g\").classed(\"smithlayer\",!0),r._ternarylayer=r._paper.append(\"g\").classed(\"ternarylayer\",!0),r._geolayer=r._paper.append(\"g\").classed(\"geolayer\",!0),r._funnelarealayer=r._paper.append(\"g\").classed(\"funnelarealayer\",!0),r._pielayer=r._paper.append(\"g\").classed(\"pielayer\",!0),r._iciclelayer=r._paper.append(\"g\").classed(\"iciclelayer\",!0),r._treemaplayer=r._paper.append(\"g\").classed(\"treemaplayer\",!0),r._sunburstlayer=r._paper.append(\"g\").classed(\"sunburstlayer\",!0),r._indicatorlayer=r._toppaper.append(\"g\").classed(\"indicatorlayer\",!0),r._glimages=r._paper.append(\"g\").classed(\"glimages\",!0);var s=r._toppaper.append(\"g\").classed(\"layer-above\",!0);r._imageUpperLayer=s.append(\"g\").classed(\"imagelayer\",!0),r._shapeUpperLayer=s.append(\"g\").classed(\"shapelayer\",!0),r._selectionLayer=r._toppaper.append(\"g\").classed(\"selectionlayer\",!0),r._infolayer=r._toppaper.append(\"g\").classed(\"infolayer\",!0),r._menulayer=r._toppaper.append(\"g\").classed(\"menulayer\",!0),r._zoomlayer=r._toppaper.append(\"g\").classed(\"zoomlayer\",!0),r._hoverlayer=r._hoverpaper.append(\"g\").classed(\"hoverlayer\",!0),r._modebardiv.classed(\"modebar-container\",!0).style(\"position\",\"absolute\").style(\"top\",\"0px\").style(\"right\",\"0px\"),t.emit(\"plotly_framework\")}(t),d._shouldCreateBgLayer&&delete d._shouldCreateBgLayer),g.initGradients(t),g.initPatterns(t),f&&p.saveShowSpikeInitial(t);var y=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;y&&h.doCalcdata(t);for(var b=0;b<t.calcdata.length;b++)t.calcdata[b][0].trace=t._fullData[b];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||h.resize(t)},window.addEventListener(\"resize\",t._responsiveChartHandler)):o.clearResponsive(t);var _=o.extendFlat({},d._size),w=0;function A(){if(h.clearAutoMarginIds(t),k.drawMarginPushers(t),p.allowAutoMargin(t),t._fullLayout.title.text&&t._fullLayout.title.automargin&&h.allowAutoMargin(t,\"title.automargin\"),d._has(\"pie\"))for(var e=t._fullData,r=0;r<e.length;r++){var n=e[r];\"pie\"===n.type&&n.automargin&&h.allowAutoMargin(t,\"pie.\"+n.uid+\".automargin\")}return h.doAutoMargin(t),h.previousPromises(t)}function M(){t._transitioning||(k.doAutoRangeAndConstraints(t),f&&p.saveRangeInitial(t),c.getComponentMethod(\"rangeslider\",\"calcAutorange\")(t))}var S=[h.previousPromises,function(){if(s)return e.addFrames(t,s)},function e(){for(var r=d._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);!d._glcanvas&&d._has(\"gl\")&&(d._glcanvas=d._glcontainer.selectAll(\".gl-canvas\").data([{key:\"contextLayer\",context:!0,pick:!1},{key:\"focusLayer\",context:!1,pick:!1},{key:\"pickLayer\",context:!1,pick:!0}],(function(t){return t.key})),d._glcanvas.enter().append(\"canvas\").attr(\"class\",(function(t){return\"gl-canvas gl-canvas-\"+t.key.replace(\"Layer\",\"\")})).style({position:\"absolute\",top:0,left:0,overflow:\"visible\",\"pointer-events\":\"none\"}));var i=t._context.plotGlPixelRatio;if(d._glcanvas){d._glcanvas.attr(\"width\",d.width*i).attr(\"height\",d.height*i).style(\"width\",d.width+\"px\").style(\"height\",d.height+\"px\");var a=d._glcanvas.data()[0].regl;if(a&&(Math.floor(d.width*i)!==a._gl.drawingBufferWidth||Math.floor(d.height*i)!==a._gl.drawingBufferHeight)){var s=\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\";if(!w)return o.log(s+\" Clearing graph and plotting again.\"),h.cleanPlot([],{},t._fullData,d),h.supplyDefaults(t),d=t._fullLayout,h.doCalcdata(t),w++,e();o.error(s)}}return\"h\"===d.modebar.orientation?d._modebardiv.style(\"height\",null).style(\"width\",\"100%\"):d._modebardiv.style(\"width\",null).style(\"height\",d.height+\"px\"),h.previousPromises(t)},A,function(){if(h.didMarginChange(_,d._size))return o.syncOrAsync([A,k.layoutStyles],t)}];v&&S.push((function(){if(y)return o.syncOrAsync([c.getComponentMethod(\"shapes\",\"calcAutorange\"),c.getComponentMethod(\"annotations\",\"calcAutorange\"),M],t);M()})),S.push(k.layoutStyles),v&&S.push((function(){return p.draw(t,f?\"\":\"redraw\")}),(function(t){var e=t._fullLayout._insideTickLabelsUpdaterange;if(e)return t._fullLayout._insideTickLabelsUpdaterange=void 0,H(t,e).then((function(){p.saveRangeInitial(t,!0)}))})),S.push(k.drawData,k.finalDraw,m,h.addLinks,h.rehover,h.redrag,h.reselect,h.doAutoMargin,h.previousPromises);var L=o.syncOrAsync(S,t);return L&&L.then||(L=Promise.resolve()),L.then((function(){return E(t),t}))},e.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return h.cleanPlot([],{},r,e),h.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},e.react=function(t,r,n,i){var a,l;t=o.getGraphDiv(t),T.clearPromiseQueue(t);var u=t._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&u&&p){if(o.isPlainObject(r)){var d=r;r=d.data,n=d.layout,i=d.config,a=d.frames}var v=!1;if(i){var g=o.extendDeep({},t._context);t._context=void 0,P(t,i),v=st(g,t._context)}t.data=r||[],T.cleanData(t.data),t.layout=n||{},T.cleanLayout(t.layout),function(t,e,r,n){var i,a,l,u,c,f,h,p,d,v,g=n._preGUI,y=[],m={},x={};for(i in g){if(c=et(i,Q)){if(d=c.head,v=c.tail,a=c.attr||d+\".uirevision\",(u=(l=s(n,a).get())&&rt(a,e))&&u===l){if(null===(f=g[i])&&(f=void 0),at(p=(h=s(e,i)).get(),f)){void 0===p&&\"autorange\"===v&&y.push(d),h.set(B(s(n,i).get()));continue}if(\"autorange\"===v||\"range[\"===v.substr(0,6)){var b=g[d+\".range[0]\"],_=g[d+\".range[1]\"],w=g[d+\".autorange\"];if(w||null===w&&null===b&&null===_){if(!(d in m)){var T=s(e,d).get();m[d]=T&&(T.autorange||!1!==T.autorange&&(!T.range||2!==T.range.length))}if(m[d]){h.set(B(s(n,i).get()));continue}}}}}else o.warn(\"unrecognized GUI edit: \"+i);delete g[i],c&&\"range[\"===c.tail.substr(0,6)&&(x[c.head]=1)}for(var k=0;k<y.length;k++){var A=y[k];if(x[A]){var M=s(e,A).get();M&&delete M.autorange}}var S=n._tracePreGUI;for(var E in S){var L,C=S[E],P=null;for(i in C){if(!P){var O=nt(E,r);if(O<0){delete S[E];break}var I=it(E,t,(L=r[O]._fullInput).index);if(I<0){delete S[E];break}P=t[I]}if(c=et(i,tt)){if(c.attr?u=(l=s(n,c.attr).get())&&rt(c.attr,e):(l=L.uirevision,void 0===(u=P.uirevision)&&(u=e.uirevision)),u&&u===l&&(null===(f=C[i])&&(f=void 0),at(p=(h=s(P,i)).get(),f))){h.set(B(s(L,i).get()));continue}}else o.warn(\"unrecognized GUI edit: \"+i+\" in trace uid \"+E);delete C[i]}}}(t.data,t.layout,u,p),h.supplyDefaults(t,{skipUpdateCalc:!0});var y=t._fullData,m=t._fullLayout,x=void 0===m.datarevision,b=m.transition,_=function(t,e,r,n,i){var a=A.layoutFlags();return a.arrays={},a.rangesAltered={},a.nChanges=0,a.nChangesAnim=0,ot(e,r,[],{getValObject:function(t){return f.getLayoutValObject(r,t)},flags:a,immutable:n,transition:i,gd:t}),(a.plot||a.calc)&&(a.layoutReplot=!0),i&&a.nChanges&&a.nChangesAnim&&(a.anim=a.nChanges===a.nChangesAnim?\"all\":\"some\"),a}(t,p,m,x,b),w=_.newDataRevision,M=function(t,e,r,n,i,a){var o=e.length===r.length;if(!i&&!o)return{fullReplot:!0,calc:!0};var s,l,u=A.traceFlags();u.arrays={},u.nChanges=0,u.nChangesAnim=0;var c={getValObject:function(t){var e=f.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:u,immutable:n,transition:i,newDataRevision:a,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,h.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,ot(e[s]._fullInput,l,[],c)}return(u.calc||u.plot)&&(u.fullReplot=!0),i&&u.nChanges&&u.nChangesAnim&&(u.anim=u.nChanges===u.nChangesAnim&&o?\"all\":\"some\"),u}(t,u,y,x,b,w);if(J(t)&&(_.layoutReplot=!0),M.calc||_.calc){t.calcdata=void 0;for(var S=Object.getOwnPropertyNames(m),L=0;L<S.length;L++){var C=S[L],O=C.substring(0,5);if(\"xaxis\"===O||\"yaxis\"===O){var I=m[C]._emptyCategories;I&&I()}}}else h.supplyDefaultsUpdateCalc(t.calcdata,y);var D=[];if(a&&(t._transitionData={},h.createTransitionData(t),D.push((function(){return e.addFrames(t,a)}))),m.transition&&!v&&(M.anim||_.anim))_.ticks&&D.push(k.doTicksRelayout),h.doCalcdata(t),k.doAutoRangeAndConstraints(t),D.push((function(){return h.transitionFromReact(t,M,_,p)}));else if(M.fullReplot||_.layoutReplot||v)t._fullLayout._skipDefaults=!0,D.push(e._doPlot);else{for(var z in _.arrays){var R=_.arrays[z];if(R.length){var F=c.getComponentMethod(z,\"drawOne\");if(F!==o.noop)for(var N=0;N<R.length;N++)F(t,R[N]);else{var j=c.getComponentMethod(z,\"draw\");if(j===o.noop)throw new Error(\"cannot draw components: \"+z);j(t)}}}D.push(h.previousPromises),M.style&&D.push(k.doTraceStyle),(M.colorbars||_.colorbars)&&D.push(k.doColorBars),_.legend&&D.push(k.doLegend),_.layoutstyle&&D.push(k.layoutStyles),_.axrange&&G(D),_.ticks&&D.push(k.doTicksRelayout),_.modebar&&D.push(k.doModeBar),_.camera&&D.push(k.doCamera),D.push(E)}D.push(h.rehover,h.redrag,h.reselect),(l=o.syncOrAsync(D,t))&&l.then||(l=Promise.resolve(t))}else l=e.newPlot(t,r,n,i);return l.then((function(){return t.emit(\"plotly_react\",{data:r,layout:n}),t}))},e.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);return T.cleanData(t.data),T.cleanLayout(t.layout),t.calcdata=void 0,e._doPlot(t).then((function(){return t.emit(\"plotly_redraw\"),t}))},e.relayout=H,e.restyle=F,e.setPlotConfig=function(t){return o.extendFlat(_,t)},e.update=K,e._guiRelayout=$(H),e._guiRestyle=$(F),e._guiUpdate=$(K),e._storeDirectGUIEdit=function(t,e,r){for(var n in r)j(n,s(t,n).get(),r[n],e)}},72075:function(t){\"use strict\";var e={staticPlot:{valType:\"boolean\",dflt:!1},typesetMath:{valType:\"boolean\",dflt:!0},plotlyServerURL:{valType:\"string\",dflt:\"\"},editable:{valType:\"boolean\",dflt:!1},edits:{annotationPosition:{valType:\"boolean\",dflt:!1},annotationTail:{valType:\"boolean\",dflt:!1},annotationText:{valType:\"boolean\",dflt:!1},axisTitleText:{valType:\"boolean\",dflt:!1},colorbarPosition:{valType:\"boolean\",dflt:!1},colorbarTitleText:{valType:\"boolean\",dflt:!1},legendPosition:{valType:\"boolean\",dflt:!1},legendText:{valType:\"boolean\",dflt:!1},shapePosition:{valType:\"boolean\",dflt:!1},titleText:{valType:\"boolean\",dflt:!1}},editSelection:{valType:\"boolean\",dflt:!0},autosizable:{valType:\"boolean\",dflt:!1},responsive:{valType:\"boolean\",dflt:!1},fillFrame:{valType:\"boolean\",dflt:!1},frameMargins:{valType:\"number\",dflt:0,min:0,max:.5},scrollZoom:{valType:\"flaglist\",flags:[\"cartesian\",\"gl3d\",\"geo\",\"mapbox\"],extras:[!0,!1],dflt:\"gl3d+geo+mapbox\"},doubleClick:{valType:\"enumerated\",values:[!1,\"reset\",\"autosize\",\"reset+autosize\"],dflt:\"reset+autosize\"},doubleClickDelay:{valType:\"number\",dflt:300,min:0},showAxisDragHandles:{valType:\"boolean\",dflt:!0},showAxisRangeEntryBoxes:{valType:\"boolean\",dflt:!0},showTips:{valType:\"boolean\",dflt:!0},showLink:{valType:\"boolean\",dflt:!1},linkText:{valType:\"string\",dflt:\"Edit chart\",noBlank:!0},sendData:{valType:\"boolean\",dflt:!0},showSources:{valType:\"any\",dflt:!1},displayModeBar:{valType:\"enumerated\",values:[\"hover\",!0,!1],dflt:\"hover\"},showSendToCloud:{valType:\"boolean\",dflt:!1},showEditInChartStudio:{valType:\"boolean\",dflt:!1},modeBarButtonsToRemove:{valType:\"any\",dflt:[]},modeBarButtonsToAdd:{valType:\"any\",dflt:[]},modeBarButtons:{valType:\"any\",dflt:!1},toImageButtonOptions:{valType:\"any\",dflt:{}},displaylogo:{valType:\"boolean\",dflt:!0},watermark:{valType:\"boolean\",dflt:!1},plotGlPixelRatio:{valType:\"number\",dflt:2,min:1,max:4},setBackground:{valType:\"any\",dflt:\"transparent\"},topojsonURL:{valType:\"string\",noBlank:!0,dflt:\"https://cdn.plot.ly/\"},mapboxAccessToken:{valType:\"string\",dflt:null},logging:{valType:\"integer\",min:0,max:2,dflt:1},notifyOnLogging:{valType:\"integer\",min:0,max:2,dflt:0},queueLength:{valType:\"integer\",min:0,dflt:0},globalTransforms:{valType:\"any\",dflt:[]},locale:{valType:\"string\",dflt:\"en-US\"},locales:{valType:\"any\",dflt:{}}},r={};!function t(e,r){for(var n in e){var i=e[n];i.valType?r[n]=i.dflt:(r[n]||(r[n]={}),t(i,r[n]))}}(e,r),t.exports={configAttributes:e,dfltConfig:r}},86281:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(9012),o=r(10820),s=r(31391),l=r(85594),u=r(72075).configAttributes,c=r(30962),f=i.extendDeepAll,h=i.isPlainObject,p=i.isArrayOrTypedArray,d=i.nestedProperty,v=i.valObjectMeta,g=\"_isSubplotObj\",y=\"_isLinkedToArray\",m=\"_deprecated\",x=[g,y,\"_arrayAttrRegexps\",m];function b(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(_(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!h(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!_(e[++r]))return!1}else if(\"info_array\"===t.valType){var i=e[++r];if(!_(i))return!1;var a=t.items;if(Array.isArray(a)){if(i>=a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!_(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function _(t){return t===Math.round(t)&&t>=0}function w(){var t,e,r={};for(t in f(r,o),n.subplotsRegistry)if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i<e.attr.length;i++)k(r,e,e.attr[i]);else k(r,e,\"subplot\"===e.attr?e.name:e.attr);for(t in n.componentsRegistry){var a=(e=n.componentsRegistry[t]).schema;if(a&&(a.subplots||a.layout)){var s=a.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l];delete r.xaxis.shift,delete r.xaxis.autoshift}else\"colorscale\"===e.name?f(r,e.layoutAttributes):e.layoutAttributes&&A(r,e.layoutAttributes,e.name)}return{layoutAttributes:T(r)}}function T(t){return function(t){e.crawl(t,(function(t,r,n){e.isValObject(t)?!0!==t.arrayOk&&\"data_array\"!==t.valType||(n[r+\"src\"]={valType:\"string\",editType:\"none\"}):h(t)&&(t.role=\"object\")}))}(t),function(t){e.crawl(t,(function(t,e,r){if(t){var n=t[y];n&&(delete t[y],r[e]={items:{}},r[e].items[n]=t,r[e].role=\"object\")}}))}(t),function(t){!function t(e){for(var r in e)if(h(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function k(t,e,r){var n=d(t,r),i=f({},e.layoutAttributes);i[g]=!0,n.set(i)}function A(t,e,r){var n=d(t,r);n.set(f(n.get()||{},e))}e.IS_SUBPLOT_OBJ=g,e.IS_LINKED_TO_ARRAY=y,e.DEPRECATED=m,e.UNDERSCORE_ATTRS=x,e.get=function(){var t={};n.allTypes.forEach((function(r){t[r]=function(t){var r,i;i=(r=n.modules[t]._module).basePlotModule;var o={type:null},s=f({},a),l=f({},r.attributes);e.crawl(l,(function(t,e,r,n,i){d(s,i).set(void 0),void 0===t&&d(l,i).set(void 0)})),f(o,s),n.traceIs(t,\"noOpacity\")&&delete o.opacity,n.traceIs(t,\"showLegend\")||(delete o.showlegend,delete o.legendgroup),n.traceIs(t,\"noHover\")&&(delete o.hoverinfo,delete o.hoverlabel),r.selectPoints||delete o.selectedpoints,f(o,l),i.attributes&&f(o,i.attributes),o.type=t;var u={meta:r.meta||{},categories:r.categories||{},animatable:Boolean(r.animatable),type:t,attributes:T(o)};if(r.layoutAttributes){var c={};f(c,r.layoutAttributes),u.layoutAttributes=T(c)}return r.animatable||e.crawl(u,(function(t){e.isValObject(t)&&\"anim\"in t&&delete t.anim})),u}(r)}));var r,i={};return Object.keys(n.transformsRegistry).forEach((function(t){i[t]=function(t){var e=n.transformsRegistry[t],r=f({},e.attributes);return Object.keys(n.componentsRegistry).forEach((function(e){var i=n.componentsRegistry[e];i.schema&&i.schema.transforms&&i.schema.transforms[t]&&Object.keys(i.schema.transforms[t]).forEach((function(e){A(r,i.schema.transforms[t][e],e)}))})),{attributes:T(r)}}(t)})),{defs:{valObjects:v,metaKeys:x.concat([\"description\",\"role\",\"editType\",\"impliedEdits\"]),editType:{traces:c.traces,layout:c.layout},impliedEdits:{}},traces:t,layout:w(),transforms:i,frames:(r={frames:f({},s)},T(r),r.frames),animation:T(l),config:T(u)}},e.crawl=function(t,r,n,i){var a=n||0;i=i||\"\",Object.keys(t).forEach((function(n){var o=t[n];if(-1===x.indexOf(n)){var s=(i?i+\".\":\"\")+n;r(o,n,t,a,s),e.isValObject(o)||h(o)&&\"impliedEdits\"!==n&&e.crawl(o,r,a+1,s)}}))},e.isValObject=function(t){return t&&void 0!==t.valType},e.findArrayAttributes=function(t){var r,n,i=[],o=[],s=[];function l(t,e,n,i){o=o.slice(0,i).concat([e]),s=s.slice(0,i).concat([t&&t._isLinkedToArray]),t&&(\"data_array\"===t.valType||!0===t.arrayOk)&&(\"colorbar\"!==o[i-1]||\"ticktext\"!==e&&\"tickvals\"!==e)&&u(r,0,\"\")}function u(t,e,r){var a=t[o[e]],l=r+o[e];if(e===o.length-1)p(a)&&i.push(n+l);else if(s[e]){if(Array.isArray(a))for(var c=0;c<a.length;c++)h(a[c])&&u(a[c],e+1,l+\"[\"+c+\"].\")}else h(a)&&u(a,e+1,l+\".\")}r=t,n=\"\",e.crawl(a,l),t._module&&t._module.attributes&&e.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var f=0;f<c.length;f++){var d=c[f],v=d._module;v&&(n=\"transforms[\"+f+\"].\",r=d,e.crawl(v.attributes,l))}return i},e.getTraceValObject=function(t,e){var r,i,o=e[0],s=1;if(\"transforms\"===o){if(1===e.length)return a.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var u=e[1];if(!_(u)||u>=l.length)return!1;i=(r=(n.transformsRegistry[l[u].type]||{}).attributes)&&r[e[2]],s=3}else{var c=t._module;if(c||(c=(n.modules[t.type||a.type.dflt]||{})._module),!c)return!1;if(!(i=(r=c.attributes)&&r[o])){var f=c.basePlotModule;f&&f.attributes&&(i=f.attributes[o])}i||(i=a[o])}return b(i,e,s)},e.getLayoutValObject=function(t,e){var r=function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var u;for(r=0;r<l.length;r++){if((a=l[r]).attrRegex&&a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!u&&a.layoutAttributes&&(u=a.layoutAttributes)}var c=a.baseLayoutAttrOverrides;if(c&&e in c)return c[e]}if(u)return u}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(i in n.componentsRegistry){if(\"colorscale\"===(a=n.componentsRegistry[i]).name&&0===e.indexOf(\"coloraxis\"))return a.layoutAttributes[e];if(!a.schema&&e===a.name)return a.layoutAttributes}return e in o&&o[e]}(t,e[0]);return b(r,e,1)}},44467:function(t,e,r){\"use strict\";var n=r(71828),i=r(9012),a=\"templateitemname\",o={name:{valType:\"string\",editType:\"none\"}};function s(t){return t&&\"string\"==typeof t}function l(t){var e=t.length-1;return\"s\"!==t.charAt(e)&&n.warn(\"bad argument to arrayDefaultKey: \"+t),t.substr(0,t.length-1)+\"defaults\"}o[a]={valType:\"string\",editType:\"calc\"},e.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[a]=o[a],e},e.traceTemplater=function(t){var e,r,a={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(a[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},i,\"type\"),_template:null};if(e in a){r=t[e];var l=a[e]%r.length;a[e]++,s._template=r[l]}return s}}},e.newContainer=function(t,e,r){var i=t._template,a=i&&(i[e]||r&&i[r]);return n.isPlainObject(a)||(a=null),t[e]={_template:a}},e.arrayTemplater=function(t,e,r){var n=t._template,i=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var u={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[a]=t[a];if(!s(n))return e._template=i,e;for(var l=0;l<o.length;l++){var c=o[l];if(c.name===n)return u[n]=1,e._template=c,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!u[n]){var i={_template:r,name:n,_input:{_templateitemname:n}};i[a]=r[a],t.push(i),u[n]=1}}return t}}},e.arrayDefaultKey=l,e.arrayEditor=function(t,e,r){var i=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=i&&(r._input||{})._templateitemname;s&&(o=i);var l,u=e+\"[\"+o+\"]\";function c(){l={},s&&(l[u]={},l[u][a]=s)}function f(t,e){s?n.nestedProperty(l[u],t).set(e):l[u+\".\"+t]=e}function h(){var t=l;return c(),t}return c(),{modifyBase:function(t,e){l[t]=e},modifyItem:f,getUpdateObj:h,applyUpdate:function(e,r){e&&f(e,r);var i=h();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},61549:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=r(63893),l=r(33306),u=r(7901),c=r(91424),f=r(92998),h=r(64168),p=r(89298),d=r(18783),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x=\"start\";function b(t,e,r){for(var n=0;n<r.length;n++){var i=r[n][0],a=r[n][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&a[0]<e[1]&&a[1]>e[0])return!0}return!1}function _(t){var r,i,s,l,f,v,g=t._fullLayout,y=g._size,m=y.p,x=p.list(t,\"\",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?\"100%\":g.width+\"px\",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?\"100%\":g.height+\"px\"}).selectAll(\".main-svg\").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),e.drawMainTitle(t),h.manage(t),!g._has(\"cartesian\"))return a.previousPromises(t);function _(t,e,r){var n=t._lw/2;return\"x\"===t._id.charAt(0)?e?\"top\"===r?e._offset-m-n:e._offset+e._length+m+n:y.t+y.h*(1-(t.position||0))+n%1:e?\"right\"===r?e._offset+e._length+m+n:e._offset-m-n:y.l+y.w*(t.position||0)+n%1}for(r=0;r<x.length;r++){var T=(l=x[r])._anchorAxis;l._linepositions={},l._lw=c.crispRound(t,l.linewidth,1),l._mainLinePosition=_(l,T,l.side),l._mainMirrorPosition=l.mirror&&T?_(l,T,d.OPPOSITE_SIDE[l.side]):null}var A=[],M=[],S=[],E=1===u.opacity(g.paper_bgcolor)&&1===u.opacity(g.plot_bgcolor)&&g.paper_bgcolor===g.plot_bgcolor;for(i in g._plots)if((s=g._plots[i]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var L=s.xaxis.domain,C=s.yaxis.domain,P=s.plotgroup;if(b(L,C,S)){var O=P.node(),I=s.bg=o.ensureSingle(P,\"rect\",\"bg\");O.insertBefore(I.node(),O.childNodes[0]),M.push(i)}else P.select(\"rect.bg\").remove(),S.push([L,C]),E||(A.push(i),M.push(i))}var D,z,R,F,B,N,j,U,V,H,q,G,Z,Y=g._bgLayer.selectAll(\".bg\").data(A);for(Y.enter().append(\"rect\").classed(\"bg\",!0),Y.exit().remove(),Y.each((function(t){g._plots[t].bg=n.select(this)})),r=0;r<M.length;r++)s=g._plots[M[r]],f=s.xaxis,v=s.yaxis,s.bg&&void 0!==f._offset&&void 0!==v._offset&&s.bg.call(c.setRect,f._offset-m,v._offset-m,f._length+2*m,v._length+2*m).call(u.fill,g.plot_bgcolor).style(\"stroke-width\",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var W,X,J=s.clipId=\"clip\"+g._uid+i+\"plot\",K=o.ensureSingleById(g._clips,\"clipPath\",J,(function(t){t.classed(\"plotclip\",!0).append(\"rect\")}));s.clipRect=K.select(\"rect\").attr({width:f._length,height:v._length}),c.setTranslate(s.plot,f._offset,v._offset),s._hasClipOnAxisFalse?(W=null,X=J):(W=J,X=null),c.setClipUrl(s.plot,W,t),s.layerClipId=X}function $(t){return\"M\"+D+\",\"+t+\"H\"+z}function Q(t){return\"M\"+f._offset+\",\"+t+\"h\"+f._length}function tt(t){return\"M\"+t+\",\"+U+\"V\"+j}function et(t){return void 0!==v._shift&&(t+=v._shift),\"M\"+t+\",\"+v._offset+\"v\"+v._length}function rt(t,e,r){if(!t.showline||i!==t._mainSubplot)return\"\";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(i in g._plots){s=g._plots[i],f=s.xaxis,v=s.yaxis;var nt=\"M0,0\";w(f,i)&&(B=k(f,\"left\",v,x),D=f._offset-(B?m+B:0),N=k(f,\"right\",v,x),z=f._offset+f._length+(N?m+N:0),R=_(f,v,\"bottom\"),F=_(f,v,\"top\"),!(Z=!f._anchorAxis||i!==f._mainSubplot)||\"allticks\"!==f.mirror&&\"all\"!==f.mirror||(f._linepositions[i]=[R,F]),nt=rt(f,$,Q),Z&&f.showline&&(\"all\"===f.mirror||\"allticks\"===f.mirror)&&(nt+=$(R)+$(F)),s.xlines.style(\"stroke-width\",f._lw+\"px\").call(u.stroke,f.showline?f.linecolor:\"rgba(0,0,0,0)\")),s.xlines.attr(\"d\",nt);var it=\"M0,0\";w(v,i)&&(q=k(v,\"bottom\",f,x),j=v._offset+v._length+(q?m:0),G=k(v,\"top\",f,x),U=v._offset-(G?m:0),V=_(v,f,\"left\"),H=_(v,f,\"right\"),!(Z=!v._anchorAxis||i!==v._mainSubplot)||\"allticks\"!==v.mirror&&\"all\"!==v.mirror||(v._linepositions[i]=[V,H]),it=rt(v,tt,et),Z&&v.showline&&(\"all\"===v.mirror||\"allticks\"===v.mirror)&&(it+=tt(V)+tt(H)),s.ylines.style(\"stroke-width\",v._lw+\"px\").call(u.stroke,v.showline?v.linecolor:\"rgba(0,0,0,0)\")),s.ylines.attr(\"d\",it)}return p.makeClipPaths(t),a.previousPromises(t)}function w(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||\"all\"===t.mirror||\"allticks\"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if(\"all\"===r.mirror||\"allticks\"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var i=d.FROM_BL[e];return r.side===e?n.domain[i]===t.domain[i]:r.mirror&&n.domain[1-i]===t.domain[1-i]}function k(t,e,r,n){if(T(t,e,r))return r._lw;for(var i=0;i<n.length;i++){var a=n[i];if(a._mainAxis===r._mainAxis&&T(t,e,a))return a._lw}return 0}e.layoutStyles=function(t){return o.syncOrAsync([a.doAutoMargin,_],t)},e.drawMainTitle=function(t){var e,r=t._fullLayout.title,i=t._fullLayout,l=function(t){var e=t.title,r=\"middle\";return o.isRightAnchor(e)?r=\"end\":o.isLeftAnchor(e)&&(r=x),r}(i),u=function(t){var e=t.title,r=\"0em\";return o.isTopAnchor(e)?r=d.CAP_SHIFT+\"em\":o.isMiddleAnchor(e)&&(r=d.MID_SHIFT+\"em\"),r}(i),h=function(t,e){var r=t.title,n=t._size,i=0;return\"0em\"!==e&&e?e===d.CAP_SHIFT+\"em\"&&(i=r.pad.t):i=-r.pad.b,\"auto\"===r.y?n.t/2:\"paper\"===r.yref?n.t+n.h-n.h*r.y+i:t.height-t.height*r.y+i}(i,u),p=function(t,e){var r=t.title,n=t._size,i=0;return e===x?i=r.pad.l:\"end\"===e&&(i=-r.pad.r),\"paper\"===r.xref?n.l+n.w*r.x+i:t.width*r.x+i}(i,l);if(f.draw(t,\"gtitle\",{propContainer:i,propName:\"title.text\",placeholder:i._dfltTitle.plot,attributes:{x:p,y:h,\"text-anchor\":l,dy:u}}),r.text&&r.automargin){var v=n.selectAll(\".gtitle\"),g=c.bBox(v.node()).height,y=function(t,e,r){var n=e.y,i=e.yanchor,a=n>.5?\"t\":\"b\",o=t._fullLayout.margin[a],s=0;return\"paper\"===e.yref?s=r+e.pad.t+e.pad.b:\"container\"===e.yref&&(s=function(t,e,r,n,i){var a=0;return\"middle\"===r&&(a+=i/2),\"t\"===t?(\"top\"===r&&(a+=i),a+=n-e*n):(\"bottom\"===r&&(a+=i),a+=e*n),a}(a,n,i,t._fullLayout.height,r)+e.pad.t+e.pad.b),s>o?s:0}(t,r,g);y>0&&(function(t,e,r,n){var i=\"title.automargin\",s=t._fullLayout.title,l=s.y>.5?\"t\":\"b\",u={x:s.x,y:s.y,t:0,b:0},c={};\"paper\"===s.yref&&function(t,e,r,n,i){var a=\"paper\"===e.yref?t._fullLayout._size.h:t._fullLayout.height,s=o.isTopAnchor(e)?n:n-i,l=\"b\"===r?a-s:s;return!(o.isTopAnchor(e)&&\"t\"===r||o.isBottomAnchor(e)&&\"b\"===r)&&l<i}(t,s,l,e,n)?u[l]=r:\"container\"===s.yref&&(c[l]=r,t._fullLayout._reservedMargin[i]=c),a.allowAutoMargin(t,i),a.autoMargin(t,i,u)}(t,h,y,g),v.attr({x:p,y:h,\"text-anchor\":l,dy:(e=r.yanchor,\"top\"===e?d.CAP_SHIFT+.3+\"em\":\"bottom\"===e?\"-0.3em\":d.MID_SHIFT+\"em\")}).call(s.positionText,p,h))}},e.doTraceStyle=function(t){var r,n=t.calcdata,o=[];for(r=0;r<n.length;r++){var s=n[r],u=s[0]||{},c=u.trace||{},f=c._module||{},h=f.arraysToCalcdata;h&&h(s,c);var p=f.editStyle;p&&o.push({fn:p,cd0:u})}if(o.length){for(r=0;r<o.length;r++){var d=o[r];d.fn(t,d.cd0)}l(t),e.redrawReglTraces(t)}return a.style(t),i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},e.doColorBars=function(t){return i.getComponentMethod(\"colorbar\",\"draw\")(t),a.previousPromises(t)},e.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,i.call(\"_doPlot\",t,\"\",e)},e.doLegend=function(t){return i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},e.doTicksRelayout=function(t){return p.draw(t,\"redraw\"),t._fullLayout._hasOnlyLargeSploms&&(i.subplotsRegistry.splom.updateGrid(t),l(t),e.redrawReglTraces(t)),e.drawMainTitle(t),a.previousPromises(t)},e.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return a.previousPromises(t)},e.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var i=e[r[n]];i._scene.setViewport(i)}},e.drawData=function(t){var r=t._fullLayout;l(t);for(var n=r._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return e.redrawReglTraces(t),a.style(t),i.getComponentMethod(\"selections\",\"draw\")(t),i.getComponentMethod(\"shapes\",\"draw\")(t),i.getComponentMethod(\"annotations\",\"draw\")(t),i.getComponentMethod(\"images\",\"draw\")(t),r._replotting=!1,a.previousPromises(t)},e.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has(\"regl\")){var r,n,i=t._fullData,a=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<i.length;r++){var l=i[r];!0===l.visible&&0!==l._length&&(\"splom\"===l.type?e._splomScenes[l.uid].draw():\"scattergl\"===l.type?o.pushUnique(a,l.xaxis+l.yaxis):\"scatterpolargl\"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<a.length;r++)(n=e._plots[a[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},e.doAutoRangeAndConstraints=function(t){for(var e,r=p.list(t,\"\",!0),n={},i=0;i<r.length;i++)if(!n[(e=r[i])._id]){n[e._id]=1,y(t,e),m(t,e);var a=e._matchGroup;if(a)for(var o in a){var s=p.getFromId(t,o);m(t,s,e.range),n[o]=1}}g(t)},e.finalDraw=function(t){i.getComponentMethod(\"rangeslider\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t)},e.drawMarginPushers=function(t){i.getComponentMethod(\"legend\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t),i.getComponentMethod(\"sliders\",\"draw\")(t),i.getComponentMethod(\"updatemenus\",\"draw\")(t),i.getComponentMethod(\"colorbar\",\"draw\")(t)}},96318:function(t,e,r){\"use strict\";var n=r(71828),i=n.isPlainObject,a=r(86281),o=r(74875),s=r(9012),l=r(44467),u=r(72075).dfltConfig;function c(t,e){t=n.extendDeep({},t);var r,a,o=Object.keys(t).sort();function s(e,r,n){if(i(r)&&i(e))c(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(a=0;a<r.length;a++){var s=r[a],u=o.newItem(s)._template;u&&c(u,s)}var f=o.defaultItems();for(a=0;a<f.length;a++)r.push(f[a]._template);for(a=0;a<r.length;a++)delete r[a].templateitemname}}for(r=0;r<o.length;r++){var u=o[r],h=t[u];if(u in e?s(h,e[u],u):e[u]=h,f(u)===u)for(var p in e){var d=f(p);p===d||d!==u||p in t||s(h,e[p],u)}}}function f(t){return t.replace(/[0-9]+$/,\"\")}function h(t,e,r,a,o){var s=o&&r(o);for(var u in t){var c=t[u],p=v(t,u,a),d=v(t,u,o),g=r(d);if(!g){var y=f(u);y!==u&&(g=r(d=v(t,y,o)))}if(!(s&&s===g||!g||g._noTemplating||\"data_array\"===g.valType||g.arrayOk&&Array.isArray(c)))if(!g.valType&&i(c))h(c,e,r,p,d);else if(g._isLinkedToArray&&Array.isArray(c))for(var m=!1,x=0,b={},_=0;_<c.length;_++){var w=c[_];if(i(w)){var T=w.name;if(T)b[T]||(h(w,e,r,v(c,x,p),v(c,x,d)),x++,b[T]=1);else if(!m){var k=v(t,l.arrayDefaultKey(u),a),A=v(c,x,p);h(w,e,r,A,v(c,x,d));var M=n.nestedProperty(e,A);n.nestedProperty(e,k).set(M.get()),M.set(null),m=!0}}}else n.nestedProperty(e,p).set(c)}}function p(t,e){return a.getLayoutValObject(t,n.nestedProperty({},e).parts)}function d(t,e){return a.getTraceValObject(t,n.nestedProperty({},e).parts)}function v(t,e,r){return r?Array.isArray(t)?r+\"[\"+e+\"]\":r+\".\"+e:e}function g(t){for(var e=0;e<t.length;e++)if(i(t[e]))return!0}function y(t){var e;switch(t.code){case\"data\":e=\"The template has no key data.\";break;case\"layout\":e=\"The template has no key layout.\";break;case\"missing\":e=t.path?\"There are no templates for item \"+t.path+\" with name \"+t.templateitemname:\"There are no templates for trace \"+t.index+\", of type \"+t.traceType+\".\";break;case\"unused\":e=t.path?\"The template item at \"+t.path+\" was not used in constructing the plot.\":t.dataCount?\"Some of the templates of type \"+t.traceType+\" were not used. The template has \"+t.templateCount+\" traces, the data only has \"+t.dataCount+\" of this type.\":\"The template has \"+t.templateCount+\" traces of type \"+t.traceType+\" but there are none in the data.\";break;case\"reused\":e=\"Some of the templates of type \"+t.traceType+\" were used more than once. The template has \"+t.templateCount+\" traces, the data has \"+t.dataCount+\" of this type.\"}return t.msg=e,t}e.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:u},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var a={data:{},layout:{}};e.forEach((function(t){var e={};h(t,e,d.bind(null,t));var r=n.coerce(t,{},s,\"type\"),i=a.data[r];i||(i=a.data[r]=[]),i.push(e)})),h(r,a.layout,p.bind(null,r)),delete a.layout.template;var l=r.template;if(i(l)){var f,v,g,y,m,x,b=l.layout;i(b)&&c(b,a.layout);var _=l.data;if(i(_)){for(v in a.data)if(g=_[v],Array.isArray(g)){for(x=(m=a.data[v]).length,y=g.length,f=0;f<x;f++)c(g[f%y],m[f]);for(f=x;f<y;f++)m.push(n.extendDeep({},g[f]))}for(v in _)v in a.data||(a.data[v]=n.extendDeep([],_[v]))}}return a},e.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:u,data:t.data,layout:t.layout}),a=r.layout||{};i(e)||(e=a.template||{});var s=e.layout,l=e.data,c=[];r.layout=a,r.layout.template=e,o.supplyDefaults(r);var h=r._fullLayout,p=r._fullData,d={};if(i(s)?(function t(e,r){for(var n in e)if(\"_\"!==n.charAt(0)&&i(e[n])){var a,o=f(n),s=[];for(a=0;a<r.length;a++)s.push(v(e,n,r[a])),o!==n&&s.push(v(e,o,r[a]));for(a=0;a<s.length;a++)d[s[a]]=1;t(e[n],s)}}(h,[\"layout\"]),function t(e,r){for(var n in e)if(-1===n.indexOf(\"defaults\")&&i(e[n])){var a=v(e,n,r);d[a]?t(e[n],a):c.push({code:\"unused\",path:a})}}(s,\"layout\")):c.push({code:\"layout\"}),i(l)){for(var m,x={},b=0;b<p.length;b++){var _=p[b];x[m=_.type]=(x[m]||0)+1,_._fullInput._template||c.push({code:\"missing\",index:_._fullInput.index,traceType:m})}for(m in l){var w=l[m].length,T=x[m]||0;w>T?c.push({code:\"unused\",traceType:m,templateCount:w,dataCount:T}):T>w&&c.push({code:\"reused\",traceType:m,templateCount:w,dataCount:T})}}else c.push({code:\"data\"});if(function t(e,r){for(var n in e)if(\"_\"!==n.charAt(0)){var a=e[n],o=v(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&c.push({code:\"missing\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:p,layout:h},\"\"),c.length)return c.map(y)}},403:function(t,e,r){\"use strict\";var n=r(92770),i=r(72391),a=r(74875),o=r(71828),s=r(25095),l=r(5900),u=r(70942),c=r(11506).version,f={format:{valType:\"enumerated\",values:[\"png\",\"jpeg\",\"webp\",\"svg\",\"full-json\"],dflt:\"png\"},width:{valType:\"number\",min:1},height:{valType:\"number\",min:1},scale:{valType:\"number\",min:0,dflt:1},setBackground:{valType:\"any\",dflt:!1},imageDataOnly:{valType:\"boolean\",dflt:!1}};t.exports=function(t,e){var r,h,p,d;function v(t){return!(t in e)||o.validate(e[t],f[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],h=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),h=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!v(\"width\")&&null!==e.width||!v(\"height\")&&null!==e.height)throw new Error(\"Height and width should be pixel values.\");if(!v(\"format\"))throw new Error(\"Export format is not \"+o.join2(f.format.values,\", \",\" or \")+\".\");var g={};function y(t,r){return o.coerce(e,g,f,t,r)}var m=y(\"format\"),x=y(\"width\"),b=y(\"height\"),_=y(\"scale\"),w=y(\"setBackground\"),T=y(\"imageDataOnly\"),k=document.createElement(\"div\");k.style.position=\"absolute\",k.style.left=\"-5000px\",document.body.appendChild(k);var A=o.extendFlat({},h);x?A.width=x:null===e.width&&n(d.width)&&(A.width=d.width),b?A.height=b:null===e.height&&n(d.height)&&(A.height=d.height);var M=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(k);function E(){return new Promise((function(t){setTimeout(t,s.getDelay(k._fullLayout))}))}function L(){return new Promise((function(t,e){var r=l(k,m,_),n=k._fullLayout.width,f=k._fullLayout.height;function h(){i.purge(k),document.body.removeChild(k)}if(\"full-json\"===m){var p=a.graphJson(k,!1,\"keepdata\",\"object\",!0,!0);return p.version=c,p=JSON.stringify(p),h(),t(T?p:s.encodeJSON(p))}if(h(),\"svg\"===m)return t(T?r:s.encodeSVG(r));var d=document.createElement(\"canvas\");d.id=o.randstr(),u({format:m,width:n,height:f,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.newPlot(k,r,A,M).then(S).then(E).then(L).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,\"\"):t}(e))})).catch((function(t){e(t)}))}))}},84936:function(t,e,r){\"use strict\";var n=r(71828),i=r(74875),a=r(86281),o=r(72075).dfltConfig,s=n.isPlainObject,l=Array.isArray,u=n.isArrayOrTypedArray;function c(t,e,r,i,a,o){o=o||[];for(var f=Object.keys(t),h=0;h<f.length;h++){var g=f[h];if(\"transforms\"!==g){var y=o.slice();y.push(g);var m=t[g],x=e[g],b=v(r,g),_=(b||{}).valType,w=\"info_array\"===_,T=\"colorscale\"===_,k=(b||{}).items;if(d(r,g))if(s(m)&&s(x)&&\"any\"!==_)c(m,x,b,i,a,y);else if(w&&l(m)){m.length>x.length&&i.push(p(\"unused\",a,y.concat(x.length)));var A,M,S,E,L,C=x.length,P=Array.isArray(k);if(P&&(C=Math.min(C,k.length)),2===b.dimensions)for(M=0;M<C;M++)if(l(m[M])){m[M].length>x[M].length&&i.push(p(\"unused\",a,y.concat(M,x[M].length)));var O=x[M].length;for(A=0;A<(P?Math.min(O,k[M].length):O);A++)S=P?k[M][A]:k,E=m[M][A],L=x[M][A],n.validate(E,S)?L!==E&&L!==+E&&i.push(p(\"dynamic\",a,y.concat(M,A),E,L)):i.push(p(\"value\",a,y.concat(M,A),E))}else i.push(p(\"array\",a,y.concat(M),m[M]));else for(M=0;M<C;M++)S=P?k[M]:k,E=m[M],L=x[M],n.validate(E,S)?L!==E&&L!==+E&&i.push(p(\"dynamic\",a,y.concat(M),E,L)):i.push(p(\"value\",a,y.concat(M),E))}else if(b.items&&!w&&l(m)){var I,D,z=k[Object.keys(k)[0]],R=[];for(I=0;I<x.length;I++){var F=x[I]._index||I;if((D=y.slice()).push(F),s(m[F])&&s(x[I])){R.push(F);var B=m[F],N=x[I];s(B)&&!1!==B.visible&&!1===N.visible?i.push(p(\"invisible\",a,D)):c(B,N,z,i,a,D)}}for(I=0;I<m.length;I++)(D=y.slice()).push(I),s(m[I])?-1===R.indexOf(I)&&i.push(p(\"unused\",a,D)):i.push(p(\"object\",a,D,m[I]))}else!s(m)&&s(x)?i.push(p(\"object\",a,y,m)):u(m)||!u(x)||w||T?g in e?n.validate(m,b)?\"enumerated\"===b.valType&&(b.coerceNumber&&m!==+x||m!==x)&&i.push(p(\"dynamic\",a,y,m,x)):i.push(p(\"value\",a,y,m)):i.push(p(\"unused\",a,y,m)):i.push(p(\"array\",a,y,m));else i.push(p(\"schema\",a,y))}}return i}t.exports=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={});var r,u,f=a.get(),h=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],h.push(p(\"array\",\"data\"))),s(e)?(d.layout=n.extendDeep({},e),u=e):(d.layout={},u={},arguments.length>1&&h.push(p(\"object\",\"layout\"))),i.supplyDefaults(d);for(var v=d._fullData,g=r.length,y=0;y<g;y++){var m=r[y],x=[\"data\",y];if(s(m)){var b=v[y],_=b.type,w=f.traces[_].attributes;w.type={valType:\"enumerated\",values:[_]},!1===b.visible&&!1!==m.visible&&h.push(p(\"invisible\",x)),c(m,b,w,h,x);var T=m.transforms,k=b.transforms;if(T){l(T)||h.push(p(\"array\",x,[\"transforms\"])),x.push(\"transforms\");for(var A=0;A<T.length;A++){var M=[\"transforms\",A],S=T[A].type;if(s(T[A])){var E=f.transforms[S]?f.transforms[S].attributes:{};E.type={valType:\"enumerated\",values:Object.keys(f.transforms)},c(T[A],k[A],E,h,x,M)}else h.push(p(\"object\",x,M))}}}else h.push(p(\"object\",x))}var L=d._fullLayout,C=function(t,e){for(var r=t.layout.layoutAttributes,i=0;i<e.length;i++){var a=e[i],o=t.traces[a.type],s=o.layoutAttributes;s&&(a.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(f,v);return c(u,L,C,h,\"layout\"),0===h.length?void 0:h};var f={object:function(t,e){return(\"layout\"===t&&\"\"===e?\"The layout argument\":\"data\"===t[0]&&\"\"===e?\"Trace \"+t[1]+\" in the data argument\":h(t)+\"key \"+e)+\" must be linked to an object container\"},array:function(t,e){return(\"data\"===t?\"The data argument\":h(t)+\"key \"+e)+\" must be linked to an array container\"},schema:function(t,e){return h(t)+\"key \"+e+\" is not part of the schema\"},unused:function(t,e,r){var n=s(r)?\"container\":\"key\";return h(t)+n+\" \"+e+\" did not get coerced\"},dynamic:function(t,e,r,n){return[h(t)+\"key\",e,\"(set to '\"+r+\"')\",\"got reset to\",\"'\"+n+\"'\",\"during defaults.\"].join(\" \")},invisible:function(t,e){return(e?h(t)+\"item \"+e:\"Trace \"+t[1])+\" got defaulted to be not visible\"},value:function(t,e,r){return[h(t)+\"key \"+e,\"is set to an invalid value (\"+r+\")\"].join(\" \")}};function h(t){return l(t)?\"In data trace \"+t[1]+\", \":\"In \"+t+\", \"}function p(t,e,r,i,a){var o,s;r=r||\"\",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var u=function(t){if(!l(t))return String(t);for(var e=\"\",r=0;r<t.length;r++){var n=t[r];\"number\"==typeof n?e=e.substr(0,e.length-1)+\"[\"+n+\"]\":e+=n,r<t.length-1&&(e+=\".\")}return e}(r),c=f[t](e,u,i,a);return n.log(c),{code:t,container:o,trace:s,path:r,astr:u,msg:c}}function d(t,e){var r=y(e),n=r.keyMinusId,i=r.id;return!!(n in t&&t[n]._isSubplotObj&&i)||e in t}function v(t,e){return e in t?t[e]:t[y(e).keyMinusId]}var g=n.counterRegex(\"([a-z]+)\");function y(t){var e=t.match(g);return{keyMinusId:e&&e[1],id:e&&e[2]}}},85594:function(t){\"use strict\";t.exports={mode:{valType:\"enumerated\",dflt:\"afterall\",values:[\"immediate\",\"next\",\"afterall\"]},direction:{valType:\"enumerated\",values:[\"forward\",\"reverse\"],dflt:\"forward\"},fromcurrent:{valType:\"boolean\",dflt:!1},frame:{duration:{valType:\"number\",min:0,dflt:500},redraw:{valType:\"boolean\",dflt:!0}},transition:{duration:{valType:\"number\",min:0,dflt:500,editType:\"none\"},easing:{valType:\"enumerated\",dflt:\"cubic-in-out\",values:[\"linear\",\"quad\",\"cubic\",\"sin\",\"exp\",\"circle\",\"elastic\",\"back\",\"bounce\",\"linear-in\",\"quad-in\",\"cubic-in\",\"sin-in\",\"exp-in\",\"circle-in\",\"elastic-in\",\"back-in\",\"bounce-in\",\"linear-out\",\"quad-out\",\"cubic-out\",\"sin-out\",\"exp-out\",\"circle-out\",\"elastic-out\",\"back-out\",\"bounce-out\",\"linear-in-out\",\"quad-in-out\",\"cubic-in-out\",\"sin-in-out\",\"exp-in-out\",\"circle-in-out\",\"elastic-in-out\",\"back-in-out\",\"bounce-in-out\"],editType:\"none\"},ordering:{valType:\"enumerated\",values:[\"layout first\",\"traces first\"],dflt:\"layout first\",editType:\"none\"}}}},85501:function(t,e,r){\"use strict\";var n=r(71828),i=r(44467);t.exports=function(t,e,r){var a,o,s=r.name,l=r.inclusionAttr||\"visible\",u=e[s],c=n.isArrayOrTypedArray(t[s])?t[s]:[],f=e[s]=[],h=i.arrayTemplater(e,s,l);for(a=0;a<c.length;a++){var p=c[a];n.isPlainObject(p)?o=h.newItem(p):(o=h.newItem({}))[l]=!1,o._index=a,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),f.push(o)}var d=h.defaultItems();for(a=0;a<d.length;a++)(o=d[a])._index=f.length,r.handleItemDefaults({},o,e,r,{}),f.push(o);if(n.isArrayOrTypedArray(u)){var v=Math.min(u.length,f.length);for(a=0;a<v;a++)n.relinkPrivateKeys(f[a],u[a])}return f}},9012:function(t,e,r){\"use strict\";var n=r(41940),i=r(77914);t.exports={type:{valType:\"enumerated\",values:[],dflt:\"scatter\",editType:\"calc+clearAxisTypes\",_noTemplating:!0},visible:{valType:\"enumerated\",values:[!0,!1,\"legendonly\"],dflt:!0,editType:\"calc\"},showlegend:{valType:\"boolean\",dflt:!0,editType:\"style\"},legend:{valType:\"subplotid\",dflt:\"legend\",editType:\"style\"},legendgroup:{valType:\"string\",dflt:\"\",editType:\"style\"},legendgrouptitle:{text:{valType:\"string\",dflt:\"\",editType:\"style\"},font:n({editType:\"style\"}),editType:\"style\"},legendrank:{valType:\"number\",dflt:1e3,editType:\"style\"},legendwidth:{valType:\"number\",min:0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"style\"},name:{valType:\"string\",editType:\"style\"},uid:{valType:\"string\",editType:\"plot\",anim:!0},ids:{valType:\"data_array\",editType:\"calc\",anim:!0},customdata:{valType:\"data_array\",editType:\"calc\"},meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},selectedpoints:{valType:\"any\",editType:\"calc\"},hoverinfo:{valType:\"flaglist\",flags:[\"x\",\"y\",\"z\",\"text\",\"name\"],extras:[\"all\",\"none\",\"skip\"],arrayOk:!0,dflt:\"all\",editType:\"none\"},hoverlabel:i.hoverlabel,stream:{token:{valType:\"string\",noBlank:!0,strict:!0,editType:\"calc\"},maxpoints:{valType:\"number\",min:0,max:1e4,dflt:500,editType:\"calc\"},editType:\"calc\"},transforms:{_isLinkedToArray:\"transform\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"}}},42973:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=i.dateTime2ms,o=i.incrementMonth,s=r(50606).ONEAVGMONTH;t.exports=function(t,e,r,i){if(\"date\"!==e.type)return{vals:i};var l=t[r+\"periodalignment\"];if(!l)return{vals:i};var u,c=t[r+\"period\"];if(n(c)){if((c=+c)<=0)return{vals:i}}else if(\"string\"==typeof c&&\"M\"===c.charAt(0)){var f=+c.substring(1);if(!(f>0&&Math.round(f)===f))return{vals:i};u=f}for(var h=e.calendar,p=\"start\"===l,d=\"end\"===l,v=t[r+\"period0\"],g=a(v,h)||0,y=[],m=[],x=[],b=i.length,_=0;_<b;_++){var w,T,k,A=i[_];if(u){for(w=Math.round((A-g)/(u*s)),k=o(g,u*w,h);k>A;)k=o(k,-u,h);for(;k<=A;)k=o(k,u,h);T=o(k,-u,h)}else{for(k=g+(w=Math.round((A-g)/c))*c;k>A;)k-=c;for(;k<=A;)k+=c;T=k-c}y[_]=p?T:d?k:(T+k)/2,m[_]=T,x[_]=k}return{vals:y,starts:m,ends:x}}},89502:function(t){\"use strict\";t.exports={xaxis:{valType:\"subplotid\",dflt:\"x\",editType:\"calc+clearAxisTypes\"},yaxis:{valType:\"subplotid\",dflt:\"y\",editType:\"calc+clearAxisTypes\"}}},71739:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(71828),o=r(50606).FP_SAFE,s=r(73972),l=r(91424),u=r(41675),c=u.getFromId,f=u.isLinked;function h(t,e){var r,n,i=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),u=g(t,e),c=u.min,f=u.max;if(0===c.length||0===f.length)return a.simpleMap(e.range,e.r2l);var h=c[0].val,v=f[0].val;for(r=1;r<c.length&&h===v;r++)h=Math.min(h,c[r].val);for(r=1;r<f.length&&h===v;r++)v=Math.max(v,f[r].val);var y=e.autorange,m=\"reversed\"===y||\"min reversed\"===y||\"max reversed\"===y;if(!m&&e.range){var x=a.simpleMap(e.range,e.r2l);m=x[1]<x[0]}\"reversed\"===e.autorange&&(e.autorange=!0);var b,_,w,T,A,M,S=e.rangemode,E=\"tozero\"===S,L=\"nonnegative\"===S,C=e._length,P=C/10,O=0;for(r=0;r<c.length;r++)for(b=c[r],n=0;n<f.length;n++)(M=(_=f[n]).val-b.val-p(e,b.val,_.val))>0&&((A=C-s(b)-l(_))>P?M/A>O&&(w=b,T=_,O=M/A):M/C>O&&(w={val:b.val,nopad:1},T={val:_.val,nopad:1},O=M/C));if(h===v){var I=h-1,D=h+1;if(E)if(0===h)i=[0,1];else{var z=(h>0?f:c).reduce((function(t,e){return Math.max(t,l(e))}),0),R=h/(1-Math.min(.5,z/C));i=h>0?[0,R]:[R,0]}else i=L?[Math.max(0,I),Math.max(1,D)]:[I,D]}else E?(w.val>=0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:0,nopad:1})):L&&(w.val-O*s(w)<0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:1,nopad:1})),O=(T.val-w.val-p(e,b.val,_.val))/(C-s(w)-l(T)),i=[w.val-O*s(w),T.val+O*l(T)];return i=k(i,e),e.limitRange&&e.limitRange(),m&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function p(t,e,r){var n=0;if(t.rangebreaks)for(var i=t.locateBreaks(e,r),a=0;a<i.length;a++){var o=i[a];n+=o.max-o.min}return n}function d(t,e,r){var i=.05*e._length,o=e._anchorAxis||{};if(-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")||-1!==(o.ticklabelposition||\"\").indexOf(\"inside\")){var s=e.isReversed();if(!s){var u=a.simpleMap(e.range,e.r2l);s=u[1]<u[0]}s&&(r=!r)}var c=0;return f(t,e._id)||(c=function(t,e,r){var i=0,o=\"x\"===e._id.charAt(0);for(var s in t._plots){var u=t._plots[s];if(e._id===u.xaxis._id||e._id===u.yaxis._id){var c=(o?u.yaxis:u.xaxis)||{};if(-1!==(c.ticklabelposition||\"\").indexOf(\"inside\")&&(!r&&(\"left\"===c.side||\"bottom\"===c.side)||r&&(\"top\"===c.side||\"right\"===c.side))){if(c._vals){var f=a.deg2rad(c._tickAngles[c._id+\"tick\"]||0),h=Math.abs(Math.cos(f)),p=Math.abs(Math.sin(f));if(!c._vals[0].bb){var d=c._id+\"tick\";c._selections[d].each((function(t){var e=n.select(this);e.select(\".text-math-group\").empty()&&(t.bb=l.bBox(e.node()))}))}for(var g=0;g<c._vals.length;g++){var y=c._vals[g].bb;if(y){var m=2*v+y.width,x=2*v+y.height;i=Math.max(i,o?Math.max(m*h,x*p):Math.max(x*h,m*p))}}}\"inside\"===c.ticks&&\"inside\"===c.ticklabelposition&&(i+=c.ticklen||0)}}}return i}(t,e,r)),i=Math.max(c,i),\"domain\"===e.constrain&&e._inputDomain&&(i*=(e._inputDomain[1]-e._inputDomain[0])/(e.domain[1]-e.domain[0])),function(t){return t.nopad?0:t.pad+(t.extrapad?i:c)}}t.exports={applyAutorangeOptions:k,getAutoRange:h,makePadFn:d,doAutoRange:function(t,e,r){if(e.setScale(),e.autorange){e.range=r?r.slice():h(t,e),e._r=e.range.slice(),e._rl=a.simpleMap(e._r,e.r2l);var n=e._input,i={};i[e._attr+\".range\"]=e.range,i[e._attr+\".autorange\"]=e.autorange,s.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,i),n.range=e.range.slice(),n.autorange=e.autorange}var o=e._anchorAxis;if(o&&o.rangeslider){var l=o.rangeslider[e._name];l&&\"auto\"===l.rangemode&&(l.range=h(t,e)),o._input.rangeslider[e._name]=a.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={}),t._m||t.setScale();var n,a,s,l,u,c,f,h,p,d=[],v=[],g=e.length,x=r.padded||!1,_=r.tozero&&(\"linear\"===t.type||\"-\"===t.type),w=\"log\"===t.type,T=!1,k=r.vpadLinearized||!1;function A(t){if(Array.isArray(t))return T=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var M=A((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),S=A((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=A(r.vpadplus||r.vpad),L=A(r.vpadminus||r.vpad);if(!T){if(h=1/0,p=-1/0,w)for(n=0;n<g;n++)(a=e[n])<h&&a>0&&(h=a),a>p&&a<o&&(p=a);else for(n=0;n<g;n++)(a=e[n])<h&&a>-o&&(h=a),a>p&&a<o&&(p=a);e=[h,p],g=2}var C={tozero:_,extrapad:x};function P(r){s=e[r],i(s)&&(c=M(r),f=S(r),k?(l=t.c2l(s)-L(r),u=t.c2l(s)+E(r)):(h=s-L(r),p=s+E(r),w&&h<p/10&&(h=p/10),l=t.c2l(h),u=t.c2l(p)),_&&(l=Math.min(0,l),u=Math.max(0,u)),b(l)&&y(d,l,f,C),b(u)&&m(v,u,c,C))}var O=Math.min(6,g);for(n=0;n<O;n++)P(n);for(n=g-1;n>=O;n--)P(n);return{min:d,max:v,opts:r}},concatExtremes:g};var v=3;function g(t,e,r){var n,i,a,o=e._id,s=t._fullData,l=t._fullLayout,u=[],f=[];function h(t,e){for(n=0;n<e.length;n++){var r=t[e[n]],s=(r._extremes||{})[o];if(!0===r.visible&&s){for(i=0;i<s.min.length;i++)a=s.min[i],y(u,a.val,a.pad,{extrapad:a.extrapad});for(i=0;i<s.max.length;i++)a=s.max[i],m(f,a.val,a.pad,{extrapad:a.extrapad})}}}if(h(s,e._traceIndices),h(l.annotations||[],e._annIndices||[]),h(l.shapes||[],e._shapeIndices||[]),e._matchGroup&&!r)for(var p in e._matchGroup)if(p!==e._id){var d=c(t,p),v=g(t,d,!0),x=e._length/d._length;for(i=0;i<v.min.length;i++)a=v.min[i],y(u,a.val,a.pad*x,{extrapad:a.extrapad});for(i=0;i<v.max.length;i++)a=v.max[i],m(f,a.val,a.pad*x,{extrapad:a.extrapad})}return{min:u,max:f}}function y(t,e,r,n){x(t,e,r,n,_)}function m(t,e,r,n){x(t,e,r,n,w)}function x(t,e,r,n,i){for(var a=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var u=t[l];if(i(u.val,e)&&u.pad>=r&&(u.extrapad||!o)){s=!1;break}i(e,u.val)&&u.pad<=r&&(o||!u.extrapad)&&(t.splice(l,1),l--)}if(s){var c=a&&0===e;t.push({val:e,pad:c?0:r,extrapad:!c&&o})}}function b(t){return i(t)&&Math.abs(t)<o}function _(t,e){return t<=e}function w(t,e){return t>=e}function T(t,e,r){return void 0===e||void 0===r||(e=t.d2l(e))<t.d2l(r)}function k(t,e){if(!e||!e.autorangeoptions)return t;var r=t[0],n=t[1],i=e.autorangeoptions.include;if(void 0!==i){var o=e.d2l(r),s=e.d2l(n);a.isArrayOrTypedArray(i)||(i=[i]);for(var l=0;l<i.length;l++){var u=e.d2l(i[l]);o>=u&&(o=u,r=u),s<=u&&(s=u,n=u)}}return r=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.minallowed&&T(e,r.minallowed,r.maxallowed)?r.minallowed:r&&void 0!==r.clipmin&&T(e,r.clipmin,r.clipmax)?Math.max(t,e.d2l(r.clipmin)):t}(r,e),n=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.maxallowed&&T(e,r.minallowed,r.maxallowed)?r.maxallowed:r&&void 0!==r.clipmax&&T(e,r.clipmin,r.clipmax)?Math.min(t,e.d2l(r.clipmax)):t}(n,e),[r,n]}},23074:function(t){\"use strict\";t.exports=function(t,e,r){var n,i;if(r){var a=\"reversed\"===e||\"min reversed\"===e||\"max reversed\"===e;n=r[a?1:0],i=r[a?0:1]}var o=t(\"autorangeoptions.minallowed\",null===i?n:void 0),s=t(\"autorangeoptions.maxallowed\",null===n?i:void 0);void 0===o&&t(\"autorangeoptions.clipmin\"),void 0===s&&t(\"autorangeoptions.clipmax\"),t(\"autorangeoptions.include\")}},89298:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(63893),c=r(92998),f=r(7901),h=r(91424),p=r(13838),d=r(66287),v=r(50606),g=v.ONEMAXYEAR,y=v.ONEAVGYEAR,m=v.ONEMINYEAR,x=v.ONEMAXQUARTER,b=v.ONEAVGQUARTER,_=v.ONEMINQUARTER,w=v.ONEMAXMONTH,T=v.ONEAVGMONTH,k=v.ONEMINMONTH,A=v.ONEWEEK,M=v.ONEDAY,S=M/2,E=v.ONEHOUR,L=v.ONEMIN,C=v.ONESEC,P=v.MINUS_SIGN,O=v.BADNUM,I={K:\"zeroline\"},D={K:\"gridline\",L:\"path\"},z={K:\"minor-gridline\",L:\"path\"},R={K:\"tick\",L:\"path\"},F={K:\"tick\",L:\"text\"},B={width:[\"x\",\"r\",\"l\",\"xl\",\"xr\"],height:[\"y\",\"t\",\"b\",\"yt\",\"yb\"],right:[\"r\",\"xr\"],left:[\"l\",\"xl\"],top:[\"t\",\"yt\"],bottom:[\"b\",\"yb\"]},N=r(18783),j=N.MID_SHIFT,U=N.CAP_SHIFT,V=N.LINE_SPACING,H=N.OPPOSITE_SIDE,q=t.exports={};q.setConvert=r(21994);var G=r(4322),Z=r(41675),Y=Z.idSort,W=Z.isLinked;q.id2name=Z.id2name,q.name2id=Z.name2id,q.cleanId=Z.cleanId,q.list=Z.list,q.listIds=Z.listIds,q.getFromId=Z.getFromId,q.getFromTrace=Z.getFromTrace;var X=r(71739);q.getAutoRange=X.getAutoRange,q.findExtremes=X.findExtremes;var J=1e-4;function K(t){var e=(t[1]-t[0])*J;return[t[0]-e,t[1]+e]}q.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+\"axis\"],u=n+\"ref\",c={};return i||(i=l[0]||(\"string\"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+\" domain\"}))),c[u]={valType:\"enumerated\",values:l.concat(a?\"string\"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,c,u)},q.getRefType=function(t){return void 0===t?t:\"paper\"===t?\"paper\":\"pixel\"===t?\"pixel\":/( domain)$/.test(t)?\"domain\":\"range\"},q.coercePosition=function(t,e,r,n,i,a){var o,l;if(\"range\"!==q.getRefType(n))o=s.ensureNumber,l=r(i,a);else{var u=q.getFromId(e,n);l=r(i,a=u.fraction2r(a)),o=u.cleanPos}t[i]=o(l)},q.cleanPosition=function(t,e,r){return(\"paper\"===r||\"pixel\"===r?s.ensureNumber:q.getFromId(e,r).cleanPos)(t)},q.redrawComponents=function(t,e){e=e||q.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),u={},c=0;c<e.length;c++)for(var f=r[q.id2name(e[c])][a],h=0;h<f.length;h++){var p=f[h];if(!u[p]&&(l(t,p),u[p]=1,s))return}}n(\"annotations\",\"drawOne\",\"_annIndices\"),n(\"shapes\",\"drawOne\",\"_shapeIndices\"),n(\"images\",\"draw\",\"_imgIndices\",!0),n(\"selections\",\"drawOne\",\"_selectionIndices\")};var $=q.getDataConversions=function(t,e,r,n){var i,a=\"x\"===r||\"y\"===r||\"z\"===r?r:n;if(Array.isArray(a)){if(i={type:G(n,void 0,{autotypenumbers:t._fullLayout.autotypenumbers}),_categories:[]},q.setConvert(i),\"category\"===i.type)for(var o=0;o<n.length;o++)i.d2c(n[o])}else i=q.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:\"ids\"===a?{d2c:tt,c2d:tt}:{d2c:Q,c2d:Q}};function Q(t){return+t}function tt(t){return String(t)}function et(t,e){return Math.abs((t/e+.5)%1-.5)<.001}function rt(t,e){return Math.abs(t/e-1)<.001}function nt(t){return+t.substring(1)}function it(t,e){return t.rangebreaks&&(e=e.filter((function(e){return t.maskBreaks(e.x)!==O}))),e}function at(t){var e=t._mainAxis,r=[];if(e._vals)for(var n=0;n<e._vals.length;n++)if(!e._vals[n].noTick){var i=e.l2p(e._vals[n].x),a=t.p2l(i),o=q.tickText(t,a);e._vals[n].minor&&(o.minor=!0,o.text=\"\"),r.push(o)}return it(t,r)}function ot(t){var e=K(s.simpleMap(t.range,t.r2l)),r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]),i=\"category\"===t.type?t.d2l_noadd:t.d2l;\"log\"===t.type&&\"L\"!==String(t.dtick).charAt(0)&&(t.dtick=\"L\"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var a=[],o=0;o<=1;o++)if(!o||t.minor){var l=o?t.minor.tickvals:t.tickvals,u=o?[]:t.ticktext;if(l){Array.isArray(u)||(u=[]);for(var c=0;c<l.length;c++){var f=i(l[c]);if(f>r&&f<n){var h=void 0===u[c]?q.tickText(t,f):gt(t,f,String(u[c]));o&&(h.minor=!0,h.text=\"\"),a.push(h)}}}}return it(t,a)}q.getDataToCoordFunc=function(t,e,r,n){return $(t,e,r,n).d2c},q.counterLetter=function(t){var e=t.charAt(0);return\"x\"===e?\"y\":\"y\"===e?\"x\":void 0},q.minDtick=function(t,e,r,n){-1===[\"log\",\"category\",\"multicategory\"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},q.saveRangeInitial=function(t,e){for(var r=q.list(t,\"\",!0),n=!1,i=0;i<r.length;i++){var a=r[i],o=void 0===a._rangeInitial0&&void 0===a._rangeInitial1,s=o||a.range[0]!==a._rangeInitial0||a.range[1]!==a._rangeInitial1,l=a.autorange;(o&&!0!==l||e&&s)&&(a._rangeInitial0=\"min\"===l||\"max reversed\"===l?void 0:a.range[0],a._rangeInitial1=\"max\"===l||\"min reversed\"===l?void 0:a.range[1],a._autorangeInitial=l,n=!0)}return n},q.saveShowSpikeInitial=function(t,e){for(var r=q.list(t,\"\",!0),n=!1,i=\"on\",a=0;a<r.length;a++){var o=r[a],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),\"on\"!==i||o.showspikes||(i=\"off\")}return t._fullLayout._cartesianSpikesEnabled=i,n},q.autoBin=function(t,e,r,n,a,o){var l,u=s.aggNums(Math.min,null,t),c=s.aggNums(Math.max,null,t);if(\"category\"===e.type||\"multicategory\"===e.type)return{start:u-.5,end:c+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:c-u};if(a||(a=e.calendar),l=\"log\"===e.type?{type:\"linear\",range:[u,c]}:{type:e.type,range:s.simpleMap([u,c],e.c2r,0,a),calendar:a},q.setConvert(l),o=o&&d.dtick(o,l.type))l.dtick=o,l.tick0=d.tick0(void 0,l.type,a);else{var f;if(r)f=(c-u)/r;else{var h=s.distinctVals(t),p=Math.pow(10,Math.floor(Math.log(h.minDiff)/Math.LN10)),v=p*s.roundUp(h.minDiff/p,[.9,1.9,4.9,9.9],!0);f=Math.max(v,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),i(f)||(f=1)}q.autoTicks(l,f)}var g,y=l.dtick,m=q.tickIncrement(q.tickFirst(l),y,\"reverse\",a);if(\"number\"==typeof y)m=function(t,e,r,n,a){var o=0,s=0,l=0,u=0;function c(e){return(1+100*(e-t)/r.dtick)%100<2}for(var f=0;f<e.length;f++)e[f]%1==0?l++:i(e[f])||u++,c(e[f])&&o++,c(e[f]+r.dtick/2)&&s++;var h=e.length-u;if(l===h&&\"date\"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*h&&(o>.3*h||c(n)||c(a))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(m,t,l,u,c),g=m+(1+Math.floor((c-m)/y))*y;else for(\"M\"===l.dtick.charAt(0)&&(m=function(t,e,r,n,i){var a=s.findExactDates(e,i);if(a.exactDays>.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=q.tickIncrement(t,\"M6\",\"reverse\")+1.5*M:a.exactMonths>.8?t=q.tickIncrement(t,\"M1\",\"reverse\")+15.5*M:t-=S;var l=q.tickIncrement(t,r);if(l<=n)return l}return t}(m,t,y,u,a)),g=m;g<=c;)g=q.tickIncrement(g,y,!1,a);return{start:e.c2r(m,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:c-u}},q.prepMinorTicks=function(t,e,r){if(!e.minor.dtick){delete t.dtick;var n,a=e.dtick&&i(e._tmin);if(a){var o=q.tickIncrement(e._tmin,e.dtick,!0);n=[e._tmin,.99*o+.01*e._tmin]}else{var l=s.simpleMap(e.range,e.r2l);n=[l[0],.8*l[0]+.2*l[1]]}if(t.range=s.simpleMap(n,e.l2r),t._isMinor=!0,q.prepTicks(t,r),a){var u=i(e.dtick),c=i(t.dtick),f=u?e.dtick:+e.dtick.substring(1),h=c?t.dtick:+t.dtick.substring(1);u&&c?et(f,h)?f===2*A&&h===2*M&&(t.dtick=A):f===2*A&&h===3*M?t.dtick=A:f!==A||(e._input.minor||{}).nticks?rt(f/h,2.5)?t.dtick=f/2:t.dtick=f:t.dtick=M:\"M\"===String(e.dtick).charAt(0)?c?t.dtick=\"M1\":et(f,h)?f>=12&&2===h&&(t.dtick=\"M3\"):t.dtick=e.dtick:\"L\"===String(t.dtick).charAt(0)?\"L\"===String(e.dtick).charAt(0)?et(f,h)||(t.dtick=rt(f/h,2.5)?e.dtick/2:e.dtick):t.dtick=\"D1\":\"D2\"===t.dtick&&+e.dtick>1&&(t.dtick=1)}t.range=e.range}void 0===e.minor._tick0Init&&(t.tick0=e.tick0)},q.prepTicks=function(t,e){var r=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if(\"auto\"===t.tickmode||!t.dtick){var n,a=t.nticks;a||(\"category\"===t.type||\"multicategory\"===t.type?(n=t.tickfont?s.bigFont(t.tickfont.size||12):15,a=t._length/n):(n=\"y\"===t._id.charAt(0)?40:80,a=s.constrain(t._length/n,4,9)+1),\"radialaxis\"===t._name&&(a*=2)),t.minor&&\"array\"!==t.minor.tickmode||\"array\"===t.tickmode&&(a*=100),t._roughDTick=Math.abs(r[1]-r[0])/a,q.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}\"period\"===t.ticklabelmode&&function(t){var e;function r(){return!(i(t.dtick)||\"M\"!==t.dtick.charAt(0))}var n=r(),a=q.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=E,o&&!n&&t.dtick<E&&(t.dtick=E)):/%p/.test(a)?(e=S,o&&!n&&t.dtick<S&&(t.dtick=S)):/%[Aadejuwx]/.test(a)?(e=M,o&&!n&&t.dtick<M&&(t.dtick=M)):/%[UVW]/.test(a)?(e=A,o&&!n&&t.dtick<A&&(t.dtick=A)):/%[Bbm]/.test(a)?(e=T,o&&(n?nt(t.dtick)<1:t.dtick<k)&&(t.dtick=\"M1\")):/%[q]/.test(a)?(e=b,o&&(n?nt(t.dtick)<3:t.dtick<_)&&(t.dtick=\"M3\")):/%[Yy]/.test(a)&&(e=y,o&&(n?nt(t.dtick)<12:t.dtick<m)&&(t.dtick=\"M12\")))}(n=r())&&t.tick0===t._dowTick0&&(t.tick0=t._rawTick0),t._definedDelta=e}(t),t.tick0||(t.tick0=\"date\"===t.type?\"2000-01-01\":0),\"date\"===t.type&&t.dtick<.1&&(t.dtick=.1),vt(t)},q.calcTicks=function(t,e){for(var r,n,a=t.type,o=t.calendar,l=t.ticklabelstep,u=\"period\"===t.ticklabelmode,c=s.simpleMap(t.range,t.r2l,void 0,void 0,e),f=c[1]<c[0],h=Math.min(c[0],c[1]),p=Math.max(c[0],c[1]),d=Math.max(1e3,t._length||0),v=[],L=[],C=[],P=[],I=t.minor&&(t.minor.ticks||t.minor.showgrid),D=1;D>=(I?0:1);D--){var z=!D;D?(t._dtickInit=t.dtick,t._tick0Init=t.tick0):(t.minor._dtickInit=t.minor.dtick,t.minor._tick0Init=t.minor.tick0);var R=D?t:s.extendFlat({},t,t.minor);if(z?q.prepMinorTicks(R,t,e):q.prepTicks(R,e),\"array\"!==R.tickmode)if(\"sync\"!==R.tickmode){var F=K(c),B=F[0],N=F[1],j=i(R.dtick),U=\"log\"===a&&!(j||\"L\"===R.dtick.charAt(0)),V=q.tickFirst(R,e);if(D){if(t._tmin=V,V<B!==f)break;\"category\"!==a&&\"multicategory\"!==a||(N=f?Math.max(-.5,N):Math.min(t._categories.length-.5,N))}var H,G,Z=null,Y=V;D&&(j?G=t.dtick:\"date\"===a?\"string\"==typeof t.dtick&&\"M\"===t.dtick.charAt(0)&&(G=T*t.dtick.substring(1)):G=t._roughDTick,H=Math.round((t.r2l(Y)-t.r2l(t.tick0))/G)-1);var W=R.dtick;for(R.rangebreaks&&R._tick0Init!==R.tick0&&(Y=zt(Y,t),f||(Y=q.tickIncrement(Y,W,!f,o))),D&&u&&(Y=q.tickIncrement(Y,W,!f,o),H--);f?Y>=N:Y<=N;Y=q.tickIncrement(Y,W,f,o)){if(D&&H++,R.rangebreaks&&!f){if(Y<B)continue;if(R.maskBreaks(Y)===O&&zt(Y,R)>=p)break}if(C.length>d||Y===Z)break;Z=Y;var X={value:Y};D?(U&&Y!==(0|Y)&&(X.simpleLabel=!0),l>1&&H%l&&(X.skipLabel=!0),C.push(X)):(X.minor=!0,P.push(X))}}else C=[],v=at(t);else D?(C=[],v=ot(t)):(P=[],L=ot(t))}if(I&&!(\"inside\"===t.minor.ticks&&\"outside\"===t.ticks||\"outside\"===t.minor.ticks&&\"inside\"===t.ticks)){for(var J=C.map((function(t){return t.value})),$=[],Q=0;Q<P.length;Q++){var tt=P[Q],et=tt.value;if(-1===J.indexOf(et)){for(var rt=!1,nt=0;!rt&&nt<C.length;nt++)1e7+C[nt].value===1e7+et&&(rt=!0);rt||$.push(tt)}}P=$}if(u&&function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n].value,a=n,o=n+1;n<t.length-1?(a=n,o=n+1):n>0?(a=n-1,o=n):(a=n,o=n);var s,l=t[a].value,u=t[o].value,c=Math.abs(u-l),f=r||c,h=0;f>=m?h=c>=m&&c<=g?c:y:r===b&&f>=_?h=c>=_&&c<=x?c:b:f>=k?h=c>=k&&c<=w?c:T:r===A&&f>=A?h=A:f>=M?h=M:r===S&&f>=S?h=S:r===E&&f>=E&&(h=E),h>=c&&(h=c,s=!0);var p=i+h;if(e.rangebreaks&&h>0){for(var d=0,v=0;v<84;v++){var L=(v+.5)/84;e.maskBreaks(i*(1-L)+L*p)!==O&&d++}(h*=d/84)||(t[n].drop=!0),s&&c>A&&(h=c)}(h>0||0===n)&&(t[n].periodX=i+h/2)}}(C,t,t._definedDelta),t.rangebreaks){var it=\"y\"===t._id.charAt(0),st=1;\"auto\"===t.tickmode&&(st=t.tickfont?t.tickfont.size:12);var lt=NaN;for(r=C.length-1;r>-1;r--)if(C[r].drop)C.splice(r,1);else{C[r].value=zt(C[r].value,t);var ut=t.c2p(C[r].value);(it?lt>ut-st:lt<ut+st)?C.splice(f?r+1:r,1):lt=ut}}Dt(t)&&360===Math.abs(c[1]-c[0])&&C.pop(),t._tmax=(C[C.length-1]||{}).value,t._prevDateHead=\"\",t._inCalcTicks=!0;var ct,ft,ht=function(e){e.text=\"\",t._prevDateHead=n};for(C=C.concat(P),r=0;r<C.length;r++){var pt=C[r].minor,dt=C[r].value;pt?L.push({x:dt,minor:!0}):(n=t._prevDateHead,ct=q.tickText(t,dt,!1,C[r].simpleLabel),void 0!==(ft=C[r].periodX)&&(ct.periodX=ft,(ft>p||ft<h)&&(ft>p&&(ct.periodX=p),ft<h&&(ct.periodX=h),ht(ct))),C[r].skipLabel&&ht(ct),v.push(ct))}return v=v.concat(L),t._inCalcTicks=!1,u&&v.length&&(v[0].noTick=!0),v};var st=[2,5,10],lt=[1,2,3,6,12],ut=[1,2,5,10,15,30],ct=[1,2,3,7,14],ft=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],ht=[-.301,0,.301,.699,1],pt=[15,30,45,90,180];function dt(t,e,r){return e*s.roundUp(t/e,r)}function vt(t){var e=t.dtick;if(t._tickexponent=0,i(e)||\"string\"==typeof e||(e=1),\"category\"!==t.type&&\"multicategory\"!==t.type||(t._tickround=null),\"date\"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,\"\"),a=n.length;if(\"M\"===String(e).charAt(0))a>10||\"01-01\"!==n.substr(5)?t._tickround=\"d\":t._tickround=+e.substr(1)%12==0?\"y\":\"m\";else if(e>=M&&a<=10||e>=15*M)t._tickround=\"d\";else if(e>=L&&a<=16||e>=E)t._tickround=\"M\";else if(e>=C&&a<=19||e>=L)t._tickround=\"S\";else{var o=t.l2r(r+e).replace(/^-/,\"\").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||\"L\"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),u=Math.floor(Math.log(l)/Math.LN10+.01),c=void 0===t.minexponent?3:t.minexponent;Math.abs(u)>c&&(mt(t.exponentformat)&&!xt(u)?t._tickexponent=3*Math.round((u-1)/3):t._tickexponent=u)}else t._tickround=null}function gt(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||\"\",fontSize:n.size,font:n.family,fontColor:n.color}}q.autoTicks=function(t,e,r){var n;function a(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if(\"date\"===t.type){t.tick0=s.dateTick0(t.calendar,0);var o=2*e;if(o>y)e/=y,n=a(10),t.dtick=\"M\"+12*dt(e,n,st);else if(o>T)e/=T,t.dtick=\"M\"+dt(e,1,lt);else if(o>M){if(t.dtick=dt(e,M,t._hasDayOfWeekBreaks?[1,2,7,14]:ct),!r){var l=q.getTickFormat(t),u=\"period\"===t.ticklabelmode;u&&(t._rawTick0=t.tick0),/%[uVW]/.test(l)?t.tick0=s.dateTick0(t.calendar,2):t.tick0=s.dateTick0(t.calendar,1),u&&(t._dowTick0=t.tick0)}}else o>E?t.dtick=dt(e,E,lt):o>L?t.dtick=dt(e,L,ut):o>C?t.dtick=dt(e,C,ut):(n=a(10),t.dtick=dt(e,n,st))}else if(\"log\"===t.type){t.tick0=0;var c=s.simpleMap(t.range,t.r2l);if(t._isMinor&&(e*=1.5),e>.7)t.dtick=Math.ceil(e);else if(Math.abs(c[1]-c[0])<1){var f=1.5*Math.abs((c[1]-c[0])/e);e=Math.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/f,n=a(10),t.dtick=\"L\"+dt(e,n,st)}else t.dtick=e>.3?\"D2\":\"D1\"}else\"category\"===t.type||\"multicategory\"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):Dt(t)?(t.tick0=0,n=1,t.dtick=dt(e,n,pt)):(t.tick0=0,n=a(10),t.dtick=dt(e,n,st));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&\"string\"!=typeof t.dtick){var h=t.dtick;throw t.dtick=1,\"ax.dtick error: \"+String(h)}},q.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return s.increment(t,o*e);var l=e.charAt(0),u=o*Number(e.substr(1));if(\"M\"===l)return s.incrementMonth(t,u,a);if(\"L\"===l)return Math.log(Math.pow(10,t)+u)/Math.LN10;if(\"D\"===l){var c=\"D2\"===e?ht:ft,f=t+.01*o,h=s.roundUp(s.mod(f,1),c,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw\"unrecognized dtick \"+String(e)},q.tickFirst=function(t,e){var r=t.r2l||Number,a=s.simpleMap(t.range,r,void 0,void 0,e),o=a[1]<a[0],l=o?Math.floor:Math.ceil,u=K(a)[0],c=t.dtick,f=r(t.tick0);if(i(c)){var h=l((u-f)/c)*c+f;return\"category\"!==t.type&&\"multicategory\"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var p=c.charAt(0),d=Number(c.substr(1));if(\"M\"===p){for(var v,g,y,m=0,x=f;m<10;){if(((v=q.tickIncrement(x,c,o,t.calendar))-u)*(x-u)<=0)return o?Math.min(x,v):Math.max(x,v);g=(u-(x+v)/2)/(v-x),y=p+(Math.abs(Math.round(g))||1)*d,x=q.tickIncrement(x,y,g<0?!o:o,t.calendar),m++}return s.error(\"tickFirst did not converge\",t),x}if(\"L\"===p)return Math.log(l((Math.pow(10,u)-f)/d)*d+f)/Math.LN10;if(\"D\"===p){var b=\"D2\"===c?ht:ft,_=s.roundUp(s.mod(u,1),b,o);return Math.floor(u)+Math.log(n.round(Math.pow(10,_),1))/Math.LN10}throw\"unrecognized dtick \"+String(c)},q.tickText=function(t,e,r,n){var a,o=gt(t,e),l=\"array\"===t.tickmode,u=r||l,c=t.type,f=\"category\"===c?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var h=s.simpleMap(t.range,t.r2l),p=(Math.abs(h[1]-h[0])-(t._lBreaks||0))/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-f(t.tickvals[a]))<p);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}function d(n){if(void 0===n)return!0;if(r)return\"none\"===n;var i={first:t._tmin,last:t._tmax}[n];return\"all\"!==n&&e!==i}var v=r?\"never\":\"none\"!==t.exponentformat&&d(t.showexponent)?\"hide\":\"\";if(\"date\"===c?function(t,e,r,n){var a=t._tickround,o=r&&t.hoverformat||q.getTickFormat(t);(n=!o&&n)&&(a=i(a)?4:{y:\"m\",m:\"d\",d:\"M\",M:\"S\",S:4}[a]);var l,u=s.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),c=u.indexOf(\"\\n\");if(-1!==c&&(l=u.substr(c+1),u=u.substr(0,c)),n&&(void 0===l||\"00:00:00\"!==u&&\"00:00\"!==u?8===u.length&&(u=u.replace(/:00$/,\"\")):(u=l,l=\"\")),l)if(r)\"d\"===a?u+=\", \"+l:u=l+(u?\", \"+u:\"\");else if(t._inCalcTicks&&t._prevDateHead===l){var f=Rt(t),h=t._trueSide||t.side;(!f&&\"top\"===h||f&&\"bottom\"===h)&&(u+=\"<br> \")}else t._prevDateHead=l,u+=\"<br>\"+l;e.text=u}(t,o,r,u):\"log\"===c?function(t,e,r,n,a){var o=t.dtick,l=e.x,u=t.tickformat,c=\"string\"==typeof o&&o.charAt(0);if(\"never\"===a&&(a=\"\"),n&&\"L\"!==c&&(o=\"L3\",c=\"L\"),u||\"L\"===c)e.text=bt(Math.pow(10,l),t,a,n);else if(i(o)||\"D\"===c&&s.mod(l+.01,1)<.1){var f=Math.round(l),h=Math.abs(f),p=t.exponentformat;\"power\"===p||mt(p)&&xt(f)?(e.text=0===f?1:1===f?\"10\":\"10<sup>\"+(f>1?\"\":P)+h+\"</sup>\",e.fontSize*=1.25):(\"e\"===p||\"E\"===p)&&h>2?e.text=\"1\"+p+(f>0?\"+\":P)+h:(e.text=bt(Math.pow(10,l),t,\"\",\"fakehover\"),\"D1\"===o&&\"y\"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if(\"D\"!==c)throw\"unrecognized dtick \"+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if(\"D1\"===t.dtick){var d=String(e.text).charAt(0);\"0\"!==d&&\"1\"!==d||(\"y\"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,u,v):\"category\"===c?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=\"\"),e.text=String(r)}(t,o):\"multicategory\"===c?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?\"\":String(i[1]),o=void 0===i[0]?\"\":String(i[0]);r?e.text=o+\" - \"+a:(e.text=a,e.text2=o)}(t,o,r):Dt(t)?function(t,e,r,n,i){if(\"radians\"!==t.thetaunit||r)e.text=bt(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text=\"0\";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){for(var r=1;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=bt(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text=\"π\":e.text=o[0]+\"π\":e.text=[\"<sup>\",o[0],\"</sup>\",\"⁄\",\"<sub>\",o[1],\"</sub>\",\"π\"].join(\"\"),l&&(e.text=P+e.text)}}}}(t,o,r,u,v):function(t,e,r,n,i){\"never\"===i?i=\"\":\"all\"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i=\"hide\"),e.text=bt(e.x,t,i,n)}(t,o,0,u,v),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),t.labelalias&&t.labelalias.hasOwnProperty(o.text)){var g=t.labelalias[o.text];\"string\"==typeof g&&(o.text=g)}if(\"boundaries\"===t.tickson||t.showdividers){var y=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[y(o.x-.5),y(o.x+t.dtick-.5)]}return o},q.hoverLabelText=function(t,e,r){r&&(t=s.extendFlat({},t,{hoverformat:r}));var n=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:void 0;if(void 0!==i&&i!==n)return q.hoverLabelText(t,n,r)+\" - \"+q.hoverLabelText(t,i,r);var a=\"log\"===t.type&&n<=0,o=q.tickText(t,t.c2l(a?-n:n),\"hover\").text;return a?0===n?\"0\":P+o:o};var yt=[\"f\",\"p\",\"n\",\"μ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\"];function mt(t){return\"SI\"===t||\"B\"===t}function xt(t){return t>14||t<-15}function bt(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||\"B\",u=e._tickexponent,c=q.getTickFormat(e),f=e.separatethousands;if(n){var h={exponentformat:l,minexponent:e.minexponent,dtick:\"none\"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:\"none\"===e.showexponent?e.range.map(e.r2d):[0,t||1]};vt(h),o=(Number(h._tickround)||0)+4,u=h._tickexponent,e.hoverformat&&(c=e.hoverformat)}if(c)return e._numFormat(c)(t).replace(/-/g,P);var p,d=Math.pow(10,-o)/2;if(\"none\"===l&&(u=0),(t=Math.abs(t))<d)t=\"0\",a=!1;else{if(t+=d,u&&(t*=Math.pow(10,-u),o+=u),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var v=o;v<0;v++)t+=\"0\"}else{var g=(t=String(t)).indexOf(\".\")+1;g&&(t=t.substr(0,g+o).replace(/\\.?0+$/,\"\"))}t=s.numSeparate(t,e._separators,f)}return u&&\"hide\"!==l&&(mt(l)&&xt(u)&&(l=\"power\"),p=u<0?P+-u:\"power\"!==l?\"+\"+u:String(u),\"e\"===l||\"E\"===l?t+=l+p:\"power\"===l?t+=\"×10<sup>\"+p+\"</sup>\":\"B\"===l&&9===u?t+=\"B\":mt(l)&&(t+=yt[u/3+5])),a?P+t:t}function _t(t,e){if(t){var r=Object.keys(B).reduce((function(t,r){return-1!==e.indexOf(r)&&B[r].forEach((function(e){t[e]=1})),t}),{});Object.keys(t).forEach((function(e){r[e]||(1===e.length?t[e]=0:delete t[e])}))}}function wt(t,e){for(var r=[],n={},i=0;i<e.length;i++){var a=e[i];n[a.text2]?n[a.text2].push(a.x):n[a.text2]=[a.x]}for(var o in n)r.push(gt(t,s.interp(n[o],.5),o));return r}function Tt(t){return void 0!==t.periodX?t.periodX:t.x}function kt(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join(\"_\")}function At(t){var e=t.title.font.size,r=(t.title.text.match(u.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty(\"standoff\")?r?e*(U+r*V):e*U:r?e*(r+1)*V:e}function Mt(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function St(t){var e=n.select(t),r=e.select(\".text-math-group\");return r.empty()?e.select(\"text\"):r}function Et(t){return t._id+\".automargin\"}function Lt(t){return Et(t)+\".mirror\"}function Ct(t){return t._id+\".rangeslider\"}function Pt(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function Ot(t,e,r){var n,i,a=[],o=[],l=t.layout;for(n=0;n<e.length;n++)a.push(q.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(q.getFromId(t,r[n]));var u=Object.keys(p),c=[\"anchor\",\"domain\",\"overlaying\",\"position\",\"side\",\"tickangle\",\"editType\"],f=[\"linear\",\"log\"];for(n=0;n<u.length;n++){var h=u[n],d=a[0][h],v=o[0][h],g=!0,y=!1,m=!1;if(\"_\"!==h.charAt(0)&&\"function\"!=typeof d&&-1===c.indexOf(h)){for(i=1;i<a.length&&g;i++){var x=a[i][h];\"type\"===h&&-1!==f.indexOf(d)&&-1!==f.indexOf(x)&&d!==x?y=!0:x!==d&&(g=!1)}for(i=1;i<o.length&&g;i++){var b=o[i][h];\"type\"===h&&-1!==f.indexOf(v)&&-1!==f.indexOf(b)&&v!==b?m=!0:o[i][h]!==v&&(g=!1)}g&&(y&&(l[a[0]._name].type=\"linear\"),m&&(l[o[0]._name].type=\"linear\"),It(l,h,a,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],[\"?\"])}}function It(t,e,r,n,i){var a,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),u=o(t[n[0]._name],e).get();for(\"title\"===e&&(l&&l.text===i.x&&(l.text=i.y),u&&u.text===i.y&&(u.text=i.x)),a=0;a<r.length;a++)o(t,r[a]._name+\".\"+e).set(u);for(a=0;a<n.length;a++)o(t,n[a]._name+\".\"+e).set(l)}function Dt(t){return\"angularaxis\"===t._id}function zt(t,e){for(var r=e._rangebreaks.length,n=0;n<r;n++){var i=e._rangebreaks[n];if(t>=i.min&&t<i.max)return i.max}return t}function Rt(t){return-1!==(t.ticklabelposition||\"\").indexOf(\"inside\")}function Ft(t,e){Rt(t._anchorAxis||{})&&t._hideCounterAxisInsideTickLabels&&t._hideCounterAxisInsideTickLabels(e)}function Bt(t,e,r,n){var i,a=\"free\"===t.anchor||void 0!==t.overlaying&&!1!==t.overlaying?t.overlaying:t._id;i=n?\"right\"===t.side?e:-e:e,a in r||(r[a]={}),t.side in r[a]||(r[a][t.side]=0),r[a][t.side]+=i}q.getTickFormat=function(t){var e,r,n,i,a,o,s,l;function u(t){return\"string\"!=typeof t?t:Number(t.replace(\"M\",\"\"))*T}function c(t,e){var r=[\"L\",\"D\"];if(typeof t==typeof e){if(\"number\"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),i=r.indexOf(e.charAt(0));return n===i?Number(t.replace(/(L|D)/g,\"\"))-Number(e.replace(/(L|D)/g,\"\")):n-i}return\"number\"==typeof t?1:-1}function f(t,e){var r=null===e[0],n=null===e[1],i=c(t,e[0])>=0,a=c(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case\"date\":case\"linear\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(i=t.dtick,a=n.dtickrange,o=void 0,s=void 0,l=void 0,o=u||function(t){return t},s=a[0],l=a[1],(!s&&\"number\"!=typeof s||o(s)<=o(i))&&(!l&&\"number\"!=typeof l||o(l)>=o(i)))){r=n;break}break;case\"log\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&f(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},q.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),i=e?q.findSubplotsWithAxis(n,e):n;return i.sort((function(t,e){var r=t.substr(1).split(\"y\"),n=e.substr(1).split(\"y\");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]})),i},q.findSubplotsWithAxis=function(t,e){for(var r=new RegExp(\"x\"===e._id.charAt(0)?\"^\"+e._id+\"y\":e._id+\"$\"),n=[],i=0;i<t.length;i++){var a=t[i];r.test(a)&&n.push(a)}return n},q.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,i,a={_offset:0,_length:e.width,_id:\"\"},o={_offset:0,_length:e.height,_id:\"\"},s=q.list(t,\"x\",!0),l=q.list(t,\"y\",!0),u=[];for(r=0;r<s.length;r++)for(u.push({x:s[r],y:o}),i=0;i<l.length;i++)0===r&&u.push({x:a,y:l[i]}),u.push({x:s[r],y:l[i]});var c=e._clips.selectAll(\".axesclip\").data(u,(function(t){return t.x._id+t.y._id}));c.enter().append(\"clipPath\").classed(\"axesclip\",!0).attr(\"id\",(function(t){return\"clip\"+e._uid+t.x._id+t.y._id})).append(\"rect\"),c.exit().remove(),c.each((function(t){n.select(this).select(\"rect\").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})}))}},q.draw=function(t,e,r){var n=t._fullLayout;\"redraw\"===e&&n._paper.selectAll(\"g.subplot\").each((function(t){var e=t[0],r=n._plots[e];if(r){var i=r.xaxis,a=r.yaxis;r.xaxislayer.selectAll(\".\"+i._id+\"tick\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"tick\").remove(),r.xaxislayer.selectAll(\".\"+i._id+\"tick2\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"tick2\").remove(),r.xaxislayer.selectAll(\".\"+i._id+\"divider\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"divider\").remove(),r.minorGridlayer&&r.minorGridlayer.selectAll(\"path\").remove(),r.gridlayer&&r.gridlayer.selectAll(\"path\").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll(\"path\").remove(),n._infolayer.select(\".g-\"+i._id+\"title\").remove(),n._infolayer.select(\".g-\"+a._id+\"title\").remove()}}));var i=e&&\"redraw\"!==e?e:q.listIds(t),a=q.list(t).filter((function(t){return t.autoshift})).map((function(t){return t.overlaying}));i.map((function(e){var r=q.getFromId(t,e);if(\"sync\"===r.tickmode&&r.overlaying){var n=i.findIndex((function(t){return t===r.overlaying}));n>=0&&i.unshift(i.splice(n,1).shift())}}));var o={false:{left:0,right:0}};return s.syncOrAsync(i.map((function(e){return function(){if(e){var n=q.getFromId(t,e);r||(r={}),r.axShifts=o,r.overlayingShiftedAx=a;var i=q.drawOne(t,n,r);return n._shiftPusher&&Bt(n,n._fullDepth||0,o,!0),n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}})))},q.drawOne=function(t,e,r){var n,i,l,u=(r=r||{}).axShifts||{},p=r.overlayingShiftedAx||[];e.setScale();var d=t._fullLayout,v=e._id,g=v.charAt(0),y=q.counterLetter(v),m=d._plots[e._mainSubplot];if(m){if(e._shiftPusher=e.autoshift||-1!==p.indexOf(e._id)||-1!==p.indexOf(e.overlaying),e._shiftPusher&\"free\"===e.anchor){var x=e.linewidth/2||0;\"inside\"===e.ticks&&(x+=e.ticklen),Bt(e,x,u,!0),Bt(e,e.shift||0,u,!1)}!0===r.skipTitle&&void 0!==e._shift||(e._shift=function(t,e){return t.autoshift?e[t.overlaying][t.side]:t.shift||0}(e,u));var b=m[g+\"axislayer\"],_=e._mainLinePosition,w=_+=e._shift,T=e._mainMirrorPosition,k=e._vals=q.calcTicks(e),A=[e.mirror,w,T].join(\"_\");for(n=0;n<k.length;n++)k[n].axInfo=A;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var M={};if(e.visible){var S,E,L=q.makeTransTickFn(e),C=q.makeTransTickLabelFn(e),P=\"inside\"===e.ticks,O=\"outside\"===e.ticks;if(\"boundaries\"===e.tickson){var I=function(t,e){var r,n=[],i=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)i(e[r],0);i(e[r-1],1)}return n}(0,k);E=q.clipEnds(e,I),S=P?E:I}else E=q.clipEnds(e,k),S=P&&\"period\"!==e.ticklabelmode?E:k;var D,z=e._gridVals=E,R=function(t,e){var r,n,i=[],a=e.length&&e[e.length-1].x<e[0].x,o=function(t,e){var r=t.xbnd[e];null!==r&&i.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var l=e[r];l.text2!==n&&o(l,a?1:0),n=l.text2}o(e[r-1],a?0:1)}return i}(e,k);if(!d._hasOnlyLargeSploms){var F=e._subplotsWith,B={};for(n=0;n<F.length;n++){i=F[n];var N=(l=d._plots[i])[y+\"axis\"],j=N._mainAxis._id;if(!B[j]){B[j]=1;var U=\"x\"===g?\"M0,\"+N._offset+\"v\"+N._length:\"M\"+N._offset+\",0h\"+N._length;q.drawGrid(t,e,{vals:z,counterAxis:N,layer:l.gridlayer.select(\".\"+v),minorLayer:l.minorGridlayer.select(\".\"+v),path:U,transFn:L}),q.drawZeroLine(t,e,{counterAxis:N,layer:l.zerolinelayer,path:U,transFn:L})}}}var G=q.getTickSigns(e),Z=q.getTickSigns(e,\"minor\");if(e.ticks||e.minor&&e.minor.ticks){var Y,W,X,J,K=q.makeTickPath(e,w,G[2]),$=q.makeTickPath(e,w,Z[2],{minor:!0});if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(Y=q.makeTickPath(e,T,G[3]),W=q.makeTickPath(e,T,Z[3],{minor:!0}),X=K+Y,J=$+W):(Y=\"\",W=\"\",X=K,J=$),e.showdividers&&O&&\"boundaries\"===e.tickson){var Q={};for(n=0;n<R.length;n++)Q[R[n].x]=1;D=function(t){return Q[t.x]?Y:X}}else D=function(t){return t.minor?J:X}}if(q.drawTicks(t,e,{vals:S,layer:b,path:D,transFn:L}),\"allticks\"===e.mirror){var tt=Object.keys(e._linepositions||{});for(n=0;n<tt.length;n++){i=tt[n],l=d._plots[i];var et=e._linepositions[i]||[],rt=et[0],nt=et[1],it=et[2],at=q.makeTickPath(e,rt,it?G[0]:Z[0],{minor:it})+q.makeTickPath(e,nt,it?G[1]:Z[1],{minor:it});q.drawTicks(t,e,{vals:S,layer:l[g+\"axislayer\"],path:at,transFn:L})}}var ot=[];if(ot.push((function(){return q.drawLabels(t,e,{vals:k,layer:b,plotinfo:l,transFn:C,labelFns:q.makeLabelFns(e,w)})})),\"multicategory\"===e.type){var st={x:2,y:10}[g];ot.push((function(){var r={x:\"height\",y:\"width\"}[g],n=ut()[r]+st+(e._tickAngles[v+\"tick\"]?e.tickfont.size*V:0);return q.drawLabels(t,e,{vals:wt(e,k),layer:b,cls:v+\"tick2\",repositionOnUpdate:!0,secondary:!0,transFn:L,labelFns:q.makeLabelFns(e,w+n*G[4])})})),ot.push((function(){return e._depth=G[4]*(ut(\"tick2\")[e.side]-w),function(t,e,r){var n=e._id+\"divider\",i=r.vals,a=r.layer.selectAll(\"path.\"+n).data(i,kt);a.exit().remove(),a.enter().insert(\"path\",\":first-child\").classed(n,1).classed(\"crisp\",1).call(f.stroke,e.dividercolor).style(\"stroke-width\",h.crispRound(t,e.dividerwidth,1)+\"px\"),a.attr(\"transform\",r.transFn).attr(\"d\",r.path)}(t,e,{vals:R,layer:b,path:q.makeTickPath(e,w,G[4],{len:e._depth}),transFn:L})}))}else e.title.hasOwnProperty(\"standoff\")&&ot.push((function(){e._depth=G[4]*(ut()[e.side]-w)}));var lt=o.getComponentMethod(\"rangeslider\",\"isVisible\")(e);return r.skipTitle||lt&&\"bottom\"===e.side||ot.push((function(){return function(t,e){var r,n=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty(\"standoff\"))r=e._depth+e.title.standoff+At(e);else{var s=Rt(e);if(\"multicategory\"===e.type)r=e._depth;else{var l=1.5*o;s&&(l=.5*o,\"outside\"===e.ticks&&(l+=e.ticklen)),r=10+l+(e.linewidth?e.linewidth-1:0)}s||(r+=\"x\"===a?\"top\"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):\"right\"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0))}var u,f,p,d,v=q.getPxPosition(t,e);if(\"x\"===a?(f=e._offset+e._length/2,p=\"top\"===e.side?v-r:v+r):(p=e._offset+e._length/2,f=\"right\"===e.side?v+r:v-r,u={rotate:\"-90\",offset:0}),\"multicategory\"!==e.type){var g=e._selections[e._id+\"tick\"];if(d={selection:g,side:e.side},g&&g.node()&&g.node().parentNode){var y=h.getTranslate(g.node().parentNode);d.offsetLeft=y.x,d.offsetTop=y.y}e.title.hasOwnProperty(\"standoff\")&&(d.pad=0)}return e._titleStandoff=r,c.draw(t,i+\"title\",{propContainer:e,propName:e._name+\".title.text\",placeholder:n._dfltTitle[a],avoid:d,transform:u,attributes:{x:f,y:p,\"text-anchor\":\"middle\"}})}(t,e)})),ot.push((function(){var r,n,i,s,l=e.side.charAt(0),u=H[e.side].charAt(0),c=q.getPxPosition(t,e),f=O?e.ticklen:0;(e.automargin||lt||e._shiftPusher)&&(\"multicategory\"===e.type?r=ut(\"tick2\"):(r=ut(),\"x\"===g&&\"b\"===l&&(e._depth=Math.max(r.width>0?r.bottom-c:0,f))));var h=0,p=0;if(e._shiftPusher&&(h=Math.max(f,r.height>0?\"l\"===l?c-r.left:r.right-c:0),e.title.text!==d._dfltTitle[g]&&(p=(e._titleStandoff||0)+(e._titleScoot||0),\"l\"===l&&(p+=At(e))),e._fullDepth=Math.max(h,p)),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var v=[0,1],m=\"number\"==typeof e._shift?e._shift:0;if(\"x\"===g){if(\"b\"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?c-r.top:0,f),v.reverse()),r.width>0){var x=r.right-(e._offset+e._length);x>0&&(n.xr=1,n.r=x);var b=e._offset-r.left;b>0&&(n.xl=0,n.l=b)}}else if(\"l\"===l?(e._depth=Math.max(r.height>0?c-r.left:0,f),n[l]=e._depth-m):(e._depth=Math.max(r.height>0?r.right-c:0,f),n[l]=e._depth+m,v.reverse()),r.height>0){var _=r.bottom-(e._offset+e._length);_>0&&(n.yb=0,n.b=_);var w=e._offset-r.top;w>0&&(n.yt=1,n.t=w)}n[y]=\"free\"===e.anchor?e.position:e._anchorAxis.domain[v[0]],e.title.text!==d._dfltTitle[g]&&(n[l]+=At(e)+(e.title.standoff||0)),e.mirror&&\"free\"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[u]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[u]+=f),!0===e.mirror||\"ticks\"===e.mirror?i[y]=e._anchorAxis.domain[v[1]]:\"all\"!==e.mirror&&\"allticks\"!==e.mirror||(i[y]=[e._counterDomainMin,e._counterDomainMax][v[1]]))}lt&&(s=o.getComponentMethod(\"rangeslider\",\"autoMarginOpts\")(t,e)),\"string\"==typeof e.automargin&&(_t(n,e.automargin),_t(i,e.automargin)),a.autoMargin(t,Et(e),n),a.autoMargin(t,Lt(e),i),a.autoMargin(t,Ct(e),s)})),s.syncOrAsync(ot)}}function ut(t){var r=v+(t||\"tick\");return M[r]||(M[r]=function(t,e){var r,n,i,a;return t._selections[e].size()?(r=1/0,n=-1/0,i=1/0,a=-1/0,t._selections[e].each((function(){var t=St(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),i=Math.min(i,e.left),a=Math.max(a,e.right)}))):(r=0,n=0,i=0,a=0),{top:r,bottom:n,left:i,right:a,height:n-r,width:a-i}}(e,r)),M[r]}},q.getTickSigns=function(t,e){var r=t._id.charAt(0),n={x:\"top\",y:\"right\"}[r],i=t.side===n?1:-1,a=[-1,1,i,-i];return\"inside\"!==(e?(t.minor||{}).ticks:t.ticks)==(\"x\"===r)&&(a=a.map((function(t){return-t}))),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},q.makeTransTickFn=function(t){return\"x\"===t._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},q.makeTransTickLabelFn=function(t){var e=function(t){var e=t.ticklabelposition||\"\",r=function(t){return-1!==e.indexOf(t)},n=r(\"top\"),i=r(\"left\"),a=r(\"right\"),o=r(\"bottom\"),s=r(\"inside\"),l=o||i||n||a;if(!l&&!s)return[0,0];var u=t.side,c=l?(t.tickwidth||0)/2:0,f=3,h=t.tickfont?t.tickfont.size:12;return(o||n)&&(c+=h*U,f+=(t.linewidth||0)/2),(i||a)&&(c+=(t.linewidth||0)/2,f+=3),s&&\"top\"===u&&(f-=h*(1-U)),(i||n)&&(c=-c),\"bottom\"!==u&&\"right\"!==u||(f=-f),[l?c:0,s?f:0]}(t),r=e[0],n=e[1];return\"x\"===t._id.charAt(0)?function(e){return l(r+t._offset+t.l2p(Tt(e)),n)}:function(e){return l(n,r+t._offset+t.l2p(Tt(e)))}},q.makeTickPath=function(t,e,r,n){n||(n={});var i=n.minor;if(i&&!t.minor)return\"\";var a=void 0!==n.len?n.len:i?t.minor.ticklen:t.ticklen,o=t._id.charAt(0),s=(t.linewidth||1)/2;return\"x\"===o?\"M0,\"+(e+s*r)+\"v\"+a*r:\"M\"+(e+s*r)+\",0h\"+a*r},q.makeLabelFns=function(t,e,r){var n=t.ticklabelposition||\"\",a=function(t){return-1!==n.indexOf(t)},o=a(\"top\"),l=a(\"left\"),u=a(\"right\"),c=a(\"bottom\")||l||o||u,f=a(\"inside\"),h=\"inside\"===n&&\"inside\"===t.ticks||!f&&\"outside\"===t.ticks&&\"boundaries\"!==t.tickson,p=0,d=0,v=h?t.ticklen:0;if(f?v*=-1:c&&(v=0),h&&(p+=v,r)){var g=s.deg2rad(r);p=v*Math.cos(g)+1,d=v*Math.sin(g)}t.showticklabels&&(h||t.showline)&&(p+=.2*t.tickfont.size);var y,m,x,b,_,w={labelStandoff:p+=(t.linewidth||1)/2*(f?-1:1),labelShift:d},T=0,k=t.side,A=t._id.charAt(0),M=t.tickangle;if(\"x\"===A)b=(_=!f&&\"bottom\"===k||f&&\"top\"===k)?1:-1,f&&(b*=-1),y=d*b,m=e+p*b,x=_?1:-.2,90===Math.abs(M)&&(f?x+=j:x=-90===M&&\"bottom\"===k?U:90===M&&\"top\"===k?j:.5,T=j/2*(M/90)),w.xFn=function(t){return t.dx+y+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*x},w.anchorFn=function(t,e){if(c){if(l)return\"end\";if(u)return\"start\"}return i(e)&&0!==e&&180!==e?e*b<0!==f?\"end\":\"start\":\"middle\"},w.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:\"top\"===t.side!==f?-n:0};else if(\"y\"===A){if(b=(_=!f&&\"left\"===k||f&&\"right\"===k)?1:-1,f&&(b*=-1),y=p,m=d*b,x=0,f||90!==Math.abs(M)||(x=-90===M&&\"left\"===k||90===M&&\"right\"===k?U:.5),f){var S=i(M)?+M:0;if(0!==S){var E=s.deg2rad(S);T=Math.abs(Math.sin(E))*U*b,x=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*x)*b+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*j},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?\"middle\":_?\"end\":\"start\"},w.heightFn=function(e,r,n){return\"right\"===t.side&&(r*=-1),r<-30?-n:r<30?-.5*n:0}}return w},q.drawTicks=function(t,e,r){r=r||{};var i=e._id+\"tick\",a=[].concat(e.minor&&e.minor.ticks?r.vals.filter((function(t){return t.minor&&!t.noTick})):[]).concat(e.ticks?r.vals.filter((function(t){return!t.minor&&!t.noTick})):[]),o=r.layer.selectAll(\"path.\"+i).data(a,kt);o.exit().remove(),o.enter().append(\"path\").classed(i,1).classed(\"ticks\",1).classed(\"crisp\",!1!==r.crisp).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.tickcolor:e.tickcolor)})).style(\"stroke-width\",(function(r){return h.crispRound(t,r.minor?e.minor.tickwidth:e.tickwidth,1)+\"px\"})).attr(\"d\",r.path).style(\"display\",null),Ft(e,[R]),o.attr(\"transform\",r.transFn)},q.drawGrid=function(t,e,r){if(r=r||{},\"sync\"!==e.tickmode){var i=e._id+\"grid\",a=e.minor&&e.minor.showgrid,o=a?r.vals.filter((function(t){return t.minor})):[],s=e.showgrid?r.vals.filter((function(t){return!t.minor})):[],l=r.counterAxis;if(l&&q.shouldShowZeroLine(t,e,l))for(var u=\"array\"===e.tickmode,c=0;c<s.length;c++){var p=s[c].x;if(u?!p:Math.abs(p)<e.dtick/100){if(s=s.slice(0,c).concat(s.slice(c+1)),!u)break;c--}}e._gw=h.crispRound(t,e.gridwidth,1);for(var d=a?h.crispRound(t,e.minor.gridwidth,1):0,v=r.layer,g=r.minorLayer,y=1;y>=0;y--){var m=y?v:g;if(m){var x=m.selectAll(\"path.\"+i).data(y?s:o,kt);x.exit().remove(),x.enter().append(\"path\").classed(i,1).classed(\"crisp\",!1!==r.crisp),x.attr(\"transform\",r.transFn).attr(\"d\",r.path).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.gridcolor:e.gridcolor||\"#ddd\")})).style(\"stroke-dasharray\",(function(t){return h.dashStyle(t.minor?e.minor.griddash:e.griddash,t.minor?e.minor.gridwidth:e.gridwidth)})).style(\"stroke-width\",(function(t){return(t.minor?d:e._gw)+\"px\"})).style(\"display\",null),\"function\"==typeof r.path&&x.attr(\"d\",r.path)}}Ft(e,[D,z])}},q.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+\"zl\",i=q.shouldShowZeroLine(t,e,r.counterAxis),a=r.layer.selectAll(\"path.\"+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append(\"path\").classed(n,1).classed(\"zl\",1).classed(\"crisp\",!1!==r.crisp).each((function(){r.layer.selectAll(\"path\").sort((function(t,e){return Y(t.id,e.id)}))})),a.attr(\"transform\",r.transFn).attr(\"d\",r.path).call(f.stroke,e.zerolinecolor||f.defaultLine).style(\"stroke-width\",h.crispRound(t,e.zerolinewidth,e._gw||1)+\"px\").style(\"display\",null),Ft(e,[I])},q.drawLabels=function(t,e,r){r=r||{};var a=t._fullLayout,o=e._id,c=o.charAt(0),f=r.cls||o+\"tick\",p=r.vals.filter((function(t){return t.text})),d=r.labelFns,v=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[f],y=r.layer.selectAll(\"g.\"+f).data(e.showticklabels?p:[],kt),m=[];function x(t,a){t.each((function(t){var o=n.select(this),s=o.select(\".text-math-group\"),c=d.anchorFn(t,a),f=r.transFn.call(o.node(),t)+(i(a)&&0!=+a?\" rotate(\"+a+\",\"+d.xFn(t)+\",\"+(d.yFn(t)-t.fontSize/2)+\")\":\"\"),p=u.lineCount(o),v=V*t.fontSize,g=d.heightFn(t,i(a)?+a:0,(p-1)*v);if(g&&(f+=l(0,g)),s.empty()){var y=o.select(\"text\");y.attr({transform:f,\"text-anchor\":c}),y.style(\"opacity\",1),e._adjustTickLabelsOverflow&&e._adjustTickLabelsOverflow()}else{var m=h.bBox(s.node()).width*{end:-.5,start:.5}[c];s.attr(\"transform\",f+l(m,0))}}))}y.enter().append(\"g\").classed(f,1).append(\"text\").attr(\"text-anchor\",\"middle\").each((function(e){var r=n.select(this),i=t._promises.length;r.call(u.positionText,d.xFn(e),d.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(u.convertToTspans,t),t._promises[i]?m.push(t._promises.pop().then((function(){x(r,v)}))):x(r,v)})),Ft(e,[F]),y.exit().remove(),r.repositionOnUpdate&&y.each((function(t){n.select(this).select(\"text\").call(u.positionText,d.xFn(t),d.yFn(t))})),e._adjustTickLabelsOverflow=function(){var r=e.ticklabeloverflow;if(r&&\"allow\"!==r){var i=-1!==r.indexOf(\"hide\"),o=\"x\"===e._id.charAt(0),l=0,u=o?t._fullLayout.width:t._fullLayout.height;if(-1!==r.indexOf(\"domain\")){var c=s.simpleMap(e.range,e.r2l);l=e.l2p(c[0])+e._offset,u=e.l2p(c[1])+e._offset}var f=Math.min(l,u),p=Math.max(l,u),d=e.side,v=1/0,g=-1/0;for(var m in y.each((function(t){var r=n.select(this);if(r.select(\".text-math-group\").empty()){var a=h.bBox(r.node()),s=0;o?(a.right>p||a.left<f)&&(s=1):(a.bottom>p||a.top+(e.tickangle?0:t.fontSize/4)<f)&&(s=1);var l=r.select(\"text\");s?i&&l.style(\"opacity\",0):(l.style(\"opacity\",1),v=\"bottom\"===d||\"right\"===d?Math.min(v,o?a.top:a.left):-1/0,g=\"top\"===d||\"left\"===d?Math.max(g,o?a.bottom:a.right):1/0)}})),a._plots){var x=a._plots[m];if(e._id===x.xaxis._id||e._id===x.yaxis._id){var b=o?x.yaxis:x.xaxis;b&&(b[\"_visibleLabelMin_\"+e._id]=v,b[\"_visibleLabelMax_\"+e._id]=g)}}}},e._hideCounterAxisInsideTickLabels=function(t){var r=\"x\"===e._id.charAt(0),i=[];for(var o in a._plots){var s=a._plots[o];e._id!==s.xaxis._id&&e._id!==s.yaxis._id||i.push(r?s.yaxis:s.xaxis)}i.forEach((function(r,i){r&&Rt(r)&&(t||[I,z,D,R,F]).forEach((function(t){var o=\"tick\"===t.K&&\"text\"===t.L&&\"period\"===e.ticklabelmode,s=a._plots[e._mainSubplot];(t.K===I.K?s.zerolinelayer.selectAll(\".\"+e._id+\"zl\"):t.K===z.K?s.minorGridlayer.selectAll(\".\"+e._id):t.K===D.K?s.gridlayer.selectAll(\".\"+e._id):s[e._id.charAt(0)+\"axislayer\"]).each((function(){var a=n.select(this);t.L&&(a=a.selectAll(t.L)),a.each((function(a){var s=e.l2p(o?Tt(a):a.x)+e._offset,l=n.select(this);s<e[\"_visibleLabelMax_\"+r._id]&&s>e[\"_visibleLabelMin_\"+r._id]?l.style(\"display\",\"none\"):\"tick\"!==t.K||i||l.style(\"display\",null)}))}))}))}))},x(y,g+1?g:v);var b=null;e._selections&&(e._selections[f]=y);var _=[function(){return m.length&&Promise.all(m)}];e.automargin&&a._redrawFromAutoMarginCount&&90===g?(b=90,_.push((function(){x(y,g)}))):_.push((function(){if(x(y,v),p.length&&\"x\"===c&&!i(v)&&(\"log\"!==e.type||\"D\"!==String(e.dtick).charAt(0))){b=0;var t,n=0,a=[];if(y.each((function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),i=St(this),o=h.bBox(i.node());a.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})})),\"boundaries\"!==e.tickson&&!e.showdividers||r.secondary){var o=p.length,l=Math.abs((p[o-1].x-p[0].x)*e._m)/(o-1),u=e.ticklabelposition||\"\",f=function(t){return-1!==u.indexOf(t)},d=f(\"top\"),g=f(\"left\"),m=f(\"right\"),_=f(\"bottom\")||g||d||m?(e.tickwidth||0)+6:0,w=l<2.5*n||\"multicategory\"===e.type||\"realaxis\"===e._name;for(t=0;t<a.length-1;t++)if(s.bBoxIntersect(a[t],a[t+1],_)){b=w?90:30;break}}else{var T=2;for(e.ticks&&(T+=e.tickwidth/2),t=0;t<a.length;t++){var k=p[t].xbnd,A=a[t];if(null!==k[0]&&A.left-e.l2p(k[0])<T||null!==k[1]&&e.l2p(k[1])-A.right<T){b=90;break}}}b&&x(y,b)}})),e._tickAngles&&_.push((function(){e._tickAngles[f]=null===b?i(v)?v:0:b}));var w=function(){var t=0,r=0;return y.each((function(n,i){var a,o=St(this);o.select(\".text-math-group\").empty()&&(e._vals[i]&&(a=e._vals[i].bb||h.bBox(o.node()),e._vals[i].bb=a),t=Math.max(t,a.width),r=Math.max(r,a.height))})),{labelsMaxW:t,labelsMaxH:r}},T=e._anchorAxis;if(T&&(T.autorange||T.insiderange)&&Rt(e)&&!W(a,e._id)&&(a._insideTickLabelsUpdaterange||(a._insideTickLabelsUpdaterange={}),T.autorange&&(a._insideTickLabelsUpdaterange[T._name+\".autorange\"]=T.autorange,_.push(w)),T.insiderange)){var k=w(),A=\"y\"===e._id.charAt(0)?k.labelsMaxW:k.labelsMaxH;A+=6,\"inside\"===e.ticklabelposition&&(A+=e.ticklen||0);var M=\"right\"===e.side||\"top\"===e.side?1:-1,S=1===M?1:0,E=1===M?0:1,L=[];L[E]=T.range[E];var C=T.d2p(T.range[S]),P=T.d2p(T.range[E]),O=Math.abs(P-C);O-A>0?A*=1+A/(O-=A):A=0,\"y\"!==e._id.charAt(0)&&(A=-A),L[S]=T.p2d(T.d2p(T.range[S])+M*A),\"min\"===T.autorange||\"max reversed\"===T.autorange?(L[0]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0):\"max\"!==T.autorange&&\"min reversed\"!==T.autorange||(L[1]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[T._name+\".range\"]=L}var B=s.syncOrAsync(_);return B&&B.then&&t._promises.push(B),B},q.getPxPosition=function(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return\"free\"!==e.anchor?r=e._anchorAxis:\"x\"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:\"y\"===i&&(r={_offset:n.l+(e.position||0)*n.w+e._shift,_length:0}),\"top\"===a||\"left\"===a?r._offset:\"bottom\"===a||\"right\"===a?r._offset+r._length:void 0},q.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&(\"linear\"===e.type||\"-\"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===O)&&(Mt(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=q.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==(\"x\"===o)?0:e._length),u=a._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return p(r);for(var c=q.list(t,s),f=0;f<c.length;f++){var h=c[f];if(h._mainAxis===i&&p(h))return!0}}function p(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return\"number\"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var i=t._linepositions||{};for(var a in i)if(n(i[a][0])||n(i[a][1]))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,i=e._id.charAt(0),a=0;a<r.length;a++){var s=r[a];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,\"bar-like\")&&s.orientation==={x:\"h\",y:\"v\"}[i])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===i)return!0}}return!1}(t,e))},q.clipEnds=function(t,e){return e.filter((function(e){return Mt(t,e.x)}))},q.allowAutoMargin=function(t){for(var e=q.list(t,\"\",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&(a.allowAutoMargin(t,Et(n)),n.mirror&&a.allowAutoMargin(t,Lt(n))),o.getComponentMethod(\"rangeslider\",\"isVisible\")(n)&&a.allowAutoMargin(t,Ct(n))}},q.swap=function(t,e){for(var r=function(t,e){var r,n,i=[];for(r=0;r<e.length;r++){var a=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<i.length;n++)-1===i[n].x.indexOf(o)&&-1===i[n].y.indexOf(s)||a.push(n);if(a.length){var l,u=i[a[0]];if(a.length>1)for(n=1;n<a.length;n++)l=i[a[n]],Pt(u.x,l.x),Pt(u.y,l.y);Pt(u.x,[o]),Pt(u.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),n=0;n<r.length;n++)Ot(t,r[n].x,r[n].y)}},4322:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=i.isArrayOrTypedArray,s=i.isDateTime,l=i.cleanNumber,u=Math.round;function c(t,e){return e?n(t):\"number\"==typeof t}function f(t){return Math.max(1,(t-1)/1e3)}t.exports=function(t,e,r){var i=t,h=r.noMultiCategory;if(o(i)&&!i.length)return\"-\";if(!h&&function(t){return o(t[0])&&o(t[1])}(i))return\"multicategory\";if(h&&Array.isArray(i[0])){for(var p=[],d=0;d<i.length;d++)if(o(i[d]))for(var v=0;v<i[d].length;v++)p.push(i[d][v]);i=p}if(function(t,e){for(var r=t.length,i=f(r),a=0,o=0,l={},c=0;c<r;c+=i){var h=t[u(c)],p=String(h);l[p]||(l[p]=1,s(h,e)&&a++,n(h)&&o++)}return a>2*o}(i,e))return\"date\";var g=\"strict\"!==r.autotypenumbers;return function(t,e){for(var r=t.length,n=f(r),i=0,o=0,s={},c=0;c<r;c+=n){var h=t[u(c)],p=String(h);if(!s[p]){s[p]=1;var d=typeof h;\"boolean\"===d?o++:(e?l(h)!==a:\"number\"===d)?i++:\"string\"===d&&o++}}return o>2*i}(i,g)?\"category\":function(t,e){for(var r=t.length,n=0;n<r;n++)if(c(t[n],e))return!0;return!1}(i,g)?\"linear\":\"-\"}},71453:function(t,e,r){\"use strict\";var n=r(92770),i=r(73972),a=r(71828),o=r(44467),s=r(85501),l=r(13838),u=r(26218),c=r(38701),f=r(96115),h=r(89426),p=r(15258),d=r(92128),v=r(23608),g=r(21994),y=r(85555).WEEKDAY_PATTERN,m=r(85555).HOUR_PATTERN;function x(t,e,r){function i(r,n){return a.coerce(t,e,l.rangebreaks,r,n)}if(i(\"enabled\")){var o=i(\"bounds\");if(o&&o.length>=2){var s,u,c=\"\";if(2===o.length)for(s=0;s<2;s++)if(u=_(o[s])){c=y;break}var f=i(\"pattern\",c);if(f===y)for(s=0;s<2;s++)(u=_(o[s]))&&(e.bounds[s]=o[s]=u-1);if(f)for(s=0;s<2;s++)switch(u=o[s],f){case y:if(!n(u))return void(e.enabled=!1);if((u=+u)!==Math.floor(u)||u<0||u>=7)return void(e.enabled=!1);e.bounds[s]=o[s]=u;break;case m:if(!n(u))return void(e.enabled=!1);if((u=+u)<0||u>24)return void(e.enabled=!1);e.bounds[s]=o[s]=u}if(!1===r.autorange){var h=r.range;if(h[0]<h[1]){if(o[0]<h[0]&&o[1]>h[1])return void(e.enabled=!1)}else if(o[0]>h[0]&&o[1]<h[1])return void(e.enabled=!1)}}else{var p=i(\"values\");if(!p||!p.length)return void(e.enabled=!1);i(\"dvalue\")}}}t.exports=function(t,e,r,n,m){var b,_=n.letter,w=n.font||{},T=n.splomStash||{},k=r(\"visible\",!n.visibleDflt),A=e._template||{},M=e.type||A.type||\"-\";\"date\"===M&&(i.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",n.calendar),n.noTicklabelmode||(b=r(\"ticklabelmode\")));var S=\"\";n.noTicklabelposition&&\"multicategory\"!==M||(S=a.coerce(t,e,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:\"period\"===b?[\"outside\",\"inside\"]:\"x\"===_?[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]}},\"ticklabelposition\")),n.noTicklabeloverflow||r(\"ticklabeloverflow\",-1!==S.indexOf(\"inside\")?\"hide past domain\":\"category\"===M||\"multicategory\"===M?\"allow\":\"hide past div\"),g(e,m),v(t,e,r,n),p(t,e,r,n),\"category\"===M||n.noHover||r(\"hoverformat\");var E=r(\"color\"),L=E!==l.color.dflt?E:w.color,C=T.label||m._dfltTitle[_];if(h(t,e,r,M,n),!k)return e;r(\"title.text\",C),a.coerceFont(r,\"title.font\",{family:w.family,size:a.bigFont(w.size),color:L}),u(t,e,r,M);var P=n.hasMinor;if(P&&(o.newContainer(e,\"minor\"),u(t,e,r,M,{isMinor:!0})),f(t,e,r,M,n),c(t,e,r,n),P){var O=n.isMinor;n.isMinor=!0,c(t,e,r,n),n.isMinor=O}d(t,e,r,{dfltColor:E,bgColor:n.bgColor,showGrid:n.showGrid,hasMinor:P,attributes:l}),!P||e.minor.ticks||e.minor.showgrid||delete e.minor,(e.showline||e.ticks)&&r(\"mirror\");var I,D=\"multicategory\"===M;if(n.noTickson||\"category\"!==M&&!D||!e.ticks&&!e.showgrid||(D&&(I=\"boundaries\"),\"boundaries\"===r(\"tickson\",I)&&delete e.ticklabelposition),D&&r(\"showdividers\")&&(r(\"dividercolor\"),r(\"dividerwidth\")),\"date\"===M)if(s(t,e,{name:\"rangebreaks\",inclusionAttr:\"enabled\",handleItemDefaults:x}),e.rangebreaks.length){for(var z=0;z<e.rangebreaks.length;z++)if(e.rangebreaks[z].pattern===y){e._hasDayOfWeekBreaks=!0;break}if(g(e,m),m._has(\"scattergl\")||m._has(\"splom\"))for(var R=0;R<n.data.length;R++){var F=n.data[R];\"scattergl\"!==F.type&&\"splom\"!==F.type||(F.visible=!1,a.warn(F.type+\" traces do not work on axes with rangebreaks. Setting trace \"+F.index+\" to `visible: false`.\"))}}else delete e.rangebreaks;return e};var b={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function _(t){if(\"string\"==typeof t)return b[t.substr(0,3).toLowerCase()]}},12663:function(t,e,r){\"use strict\";var n=r(31562),i=n.FORMAT_LINK,a=n.DATE_FORMAT_LINK;function o(t,e){return[\"Sets the \"+t+\" formatting rule\"+(e?\"for `\"+e+\"` \":\"\"),\"using d3 formatting mini-languages\",\"which are very similar to those in Python. For numbers, see: \"+i+\".\"].join(\" \")}function s(t,e){return o(t,e)+[\" And for dates see: \"+a+\".\",\"We add two items to d3's date formatter:\",\"*%h* for half of the year as a decimal number as well as\",\"*%{n}f* for fractional seconds\",\"with n digits. For example, *2016-10-13 09:15:23.456* with tickformat\",\"*%H~%M~%S.%2f* would display *09~15~23.46*\"].join(\" \")}t.exports={axisHoverFormat:function(t,e){return{valType:\"string\",dflt:\"\",editType:\"none\",description:(e?o:s)(\"hover text\",t)+[\"By default the values are formatted using \"+(e?\"generic number format\":\"`\"+t+\"axis.hoverformat`\")+\".\"].join(\" \")}},descriptionOnlyNumbers:o,descriptionWithDates:s}},41675:function(t,e,r){\"use strict\";var n=r(73972),i=r(85555);function a(t,e){if(e&&e.length)for(var r=0;r<e.length;r++)if(e[r][t])return!0;return!1}e.id2name=function(t){if(\"string\"==typeof t&&t.match(i.AX_ID_PATTERN)){var e=t.split(\" \")[0].substr(1);return\"1\"===e&&(e=\"\"),t.charAt(0)+\"axis\"+e}},e.name2id=function(t){if(t.match(i.AX_NAME_PATTERN)){var e=t.substr(5);return\"1\"===e&&(e=\"\"),t.charAt(0)+e}},e.cleanId=function(t,e,r){var n=/( domain)$/.test(t);if(\"string\"==typeof t&&t.match(i.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)&&(!n||r)){var a=t.split(\" \")[0].substr(1).replace(/^0+/,\"\");return\"1\"===a&&(a=\"\"),t.charAt(0)+a+(n&&r?\" domain\":\"\")}},e.list=function(t,r,n){var i=t._fullLayout;if(!i)return[];var a,o=e.listIds(t,r),s=new Array(o.length);for(a=0;a<o.length;a++){var l=o[a];s[a]=i[l.charAt(0)+\"axis\"+l.substr(1)]}if(!n){var u=i._subplots.gl3d||[];for(a=0;a<u.length;a++){var c=i[u[a]];r?s.push(c[r+\"axis\"]):s.push(c.xaxis,c.yaxis,c.zaxis)}}return s},e.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+\"axis\"]:n.xaxis.concat(n.yaxis)},e.getFromId=function(t,r,n){var i=t._fullLayout;return r=void 0===r||\"string\"!=typeof r?r:r.replace(\" domain\",\"\"),\"x\"===n?r=r.replace(/y[0-9]*/,\"\"):\"y\"===n&&(r=r.replace(/x[0-9]*/,\"\")),i[e.id2name(r)]},e.getFromTrace=function(t,r,i){var a=t._fullLayout,o=null;if(n.traceIs(r,\"gl3d\")){var s=r.scene;\"scene\"===s.substr(0,5)&&(o=a[s][i+\"axis\"])}else o=e.getFromId(t,r[i+\"axis\"]||i);return o},e.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},e.ref2id=function(t){return!!/^[xyz]/.test(t)&&t.split(\" \")[0]},e.isLinked=function(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},15258:function(t){\"use strict\";t.exports=function(t,e,r,n){if(\"category\"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i=\"array\");var s,l=r(\"categoryorder\",i);\"array\"===l&&(s=r(\"categoryarray\")),o||\"array\"!==l||(l=e.categoryorder=\"trace\"),\"trace\"===l?e._initialCategories=[]:\"array\"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[a+\"axis\"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][a];for(i=0;i<l.length;i++){var u=l[i];null!=u&&(o[u]=1)}}return Object.keys(o)}(e,n).sort(),\"category ascending\"===l?e._initialCategories=s:\"category descending\"===l&&(e._initialCategories=s.reverse()))}}},66287:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(50606),o=a.ONEDAY,s=a.ONEWEEK;e.dtick=function(t,e){var r=\"log\"===e,i=\"date\"===e,a=\"category\"===e,s=i?o:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:a?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if(\"string\"!=typeof t||!i&&!r)return s;var l=t.charAt(0),u=t.substr(1);return(u=n(u)?Number(u):0)<=0||!(i&&\"M\"===l&&u===Math.round(u)||r&&\"L\"===l||r&&\"D\"===l&&(1===u||2===u))?s:t},e.tick0=function(t,e,r,a){return\"date\"===e?i.cleanDate(t,i.dateTick0(r,a%s==0?1:0)):\"D1\"!==a&&\"D2\"!==a?n(t)?Number(t):0:void 0}},85555:function(t,e,r){\"use strict\";var n=r(30587).counter;t.exports={idRegex:{x:n(\"x\",\"( domain)?\"),y:n(\"y\",\"( domain)?\")},attrRegex:n(\"[xy]axis\"),xAxisMatch:n(\"xaxis\"),yAxisMatch:n(\"yaxis\"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:\"hour\",WEEKDAY_PATTERN:\"day of week\",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\"imagelayer\",\"heatmaplayer\",\"contourcarpetlayer\",\"contourlayer\",\"funnellayer\",\"waterfalllayer\",\"barlayer\",\"carpetlayer\",\"violinlayer\",\"boxlayer\",\"ohlclayer\",\"scattercarpetlayer\",\"scatterlayer\"],clipOnAxisFalseQuery:[\".scatterlayer\",\".barlayer\",\".funnellayer\",\".waterfalllayer\"],layerValue2layerClass:{\"above traces\":\"above\",\"below traces\":\"below\"}}},99082:function(t,e,r){\"use strict\";var n=r(71828),i=r(71739),a=r(41675).id2name,o=r(13838),s=r(42449),l=r(21994),u=r(50606).ALMOST_EQUAL,c=r(18783).FROM_BL;function f(t,e,r){var i=r.axIds,s=r.layoutOut,l=r.hasImage,u=s._axisConstraintGroups,c=s._axisMatchGroups,f=e._id,v=f.charAt(0),g=((s._splomAxes||{})[v]||{})[f]||{},y=e._id,m=\"x\"===y.charAt(0);function x(r,i){return n.coerce(t,e,o,r,i)}e._matchGroup=null,e._constraintGroup=null,x(\"constrain\",l?\"domain\":\"range\"),n.coerce(t,e,{constraintoward:{valType:\"enumerated\",values:m?[\"left\",\"center\",\"right\"]:[\"bottom\",\"middle\",\"top\"],dflt:m?\"center\":\"middle\"}},\"constraintoward\");var b,_,w=e.type,T=[];for(b=0;b<i.length;b++)(_=i[b])!==y&&s[a(_)].type===w&&T.push(_);var k=p(u,y);if(k){var A=[];for(b=0;b<T.length;b++)k[_=T[b]]||A.push(_);T=A}var M,S,E=T.length;E&&(t.matches||g.matches)&&(M=n.coerce(t,e,{matches:{valType:\"enumerated\",values:T,dflt:-1!==T.indexOf(g.matches)?g.matches:void 0}},\"matches\"));var L=l&&!m?e.anchor:void 0;if(E&&!M&&(t.scaleanchor||L)&&(S=n.coerce(t,e,{scaleanchor:{valType:\"enumerated\",values:T.concat([!1])}},\"scaleanchor\",L)),M){e._matchGroup=d(c,y,M,1);var C=s[a(M)],P=h(s,e)/h(s,C);m!==(\"x\"===M.charAt(0))&&(P=(m?\"x\":\"y\")+P),d(u,y,M,P)}else t.matches&&-1!==i.indexOf(t.matches)&&n.warn(\"ignored \"+e._name+'.matches: \"'+t.matches+'\" to avoid an infinite loop');if(S){var O=x(\"scaleratio\");O||(O=e.scaleratio=1),d(u,y,S,O)}else t.scaleanchor&&-1!==i.indexOf(t.scaleanchor)&&n.warn(\"ignored \"+e._name+'.scaleanchor: \"'+t.scaleanchor+'\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function h(t,e){var r=e.domain;return r||(r=t[a(e.overlaying)].domain),r[1]-r[0]}function p(t,e){for(var r=0;r<t.length;r++)if(t[r][e])return t[r];return null}function d(t,e,r,n){var i,a,o,s,l,u=p(t,e);null===u?((u={})[e]=1,l=t.length,t.push(u)):l=t.indexOf(u);var c=Object.keys(u);for(i=0;i<t.length;i++)if(o=t[i],i!==l&&o[r]){var f=o[r];for(a=0;a<c.length;a++)o[s=c[a]]=v(f,v(n,u[s]));return void t.splice(l,1)}if(1!==n)for(a=0;a<c.length;a++){var h=c[a];u[h]=v(n,u[h])}u[r]=1}function v(t,e){var r,n,i=\"\",a=\"\";\"string\"==typeof t&&(r=(i=t.match(/^[xy]*/)[0]).length,t=+t.substr(r)),\"string\"==typeof e&&(n=(a=e.match(/^[xy]*/)[0]).length,e=+e.substr(n));var o=t*e;return r||n?r&&n&&i.charAt(0)!==a.charAt(0)?r===n?o:(r>n?i.substr(n):a.substr(r))+o:i+a+t*e:o}function g(t,e){for(var r=e._size,n=r.h/r.w,i={},a=Object.keys(t),o=0;o<a.length;o++){var s=a[o],l=t[s];if(\"string\"==typeof l){var u=l.match(/^[xy]*/)[0],c=u.length;l=+l.substr(c);for(var f=\"y\"===u.charAt(0)?n:1/n,h=0;h<c;h++)l*=f}i[s]=l}return i}function y(t,e){var r=t._inputDomain,n=c[t.constraintoward],i=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[i+(r[0]-i)/e,i+(r[1]-i)/e],t.setScale()}e.handleDefaults=function(t,e,r){var i,o,s,u,c,h,p,d,v=r.axIds,g=r.axHasImage,y=e._axisConstraintGroups=[],m=e._axisMatchGroups=[];for(i=0;i<v.length;i++)f(c=t[u=a(v[i])],h=e[u],{axIds:v,layoutOut:e,hasImage:g[u]});function x(t,r){for(i=0;i<t.length;i++)for(s in o=t[i])e[a(s)][r]=o}for(x(m,\"_matchGroup\"),i=0;i<y.length;i++)for(s in o=y[i])if((h=e[a(s)]).fixedrange){for(var b in o){var _=a(b);!1===(t[_]||{}).fixedrange&&n.warn(\"fixedrange was specified as false for axis \"+_+\" but was overridden because another axis in its constraint group has fixedrange true\"),e[_].fixedrange=!0}break}for(i=0;i<y.length;){for(s in o=y[i]){(h=e[a(s)])._matchGroup&&Object.keys(h._matchGroup).length===Object.keys(o).length&&(y.splice(i,1),i--);break}i++}x(y,\"_constraintGroup\");var w=[\"constrain\",\"range\",\"autorange\",\"rangemode\",\"rangebreaks\",\"categoryorder\",\"categoryarray\"],T=!1,k=!1;function A(){d=h[p],\"rangebreaks\"===p&&(k=h._hasDayOfWeekBreaks)}for(i=0;i<m.length;i++){o=m[i];for(var M=0;M<w.length;M++){var S;for(s in p=w[M],d=null,o)if(c=t[u=a(s)],h=e[u],p in h){if(!h.matches&&(S=h,p in c)){A();break}null===d&&p in c&&A()}if(\"range\"===p&&d&&c.range&&2===c.range.length&&null!==c.range[0]&&null!==c.range[1]&&(T=!0),\"autorange\"===p&&null===d&&T&&(d=!1),null===d&&p in S&&(d=S[p]),null!==d)for(s in o)(h=e[a(s)])[p]=\"range\"===p?d.slice():d,\"rangebreaks\"===p&&(h._hasDayOfWeekBreaks=k,l(h,e))}}},e.enforce=function(t){var e,r,n,o,l,c,f,h,p=t._fullLayout,d=p._axisConstraintGroups||[];for(e=0;e<d.length;e++){n=g(d[e],p);var v=Object.keys(n),m=1/0,x=0,b=1/0,_={},w={},T=!1;for(r=0;r<v.length;r++)w[o=v[r]]=l=p[a(o)],l._inputDomain?l.domain=l._inputDomain.slice():l._inputDomain=l.domain.slice(),l._inputRange||(l._inputRange=l.range.slice()),l.setScale(),_[o]=c=Math.abs(l._m)/n[o],m=Math.min(m,c),\"domain\"!==l.constrain&&l._constraintShrinkable||(b=Math.min(b,c)),delete l._constraintShrinkable,x=Math.max(x,c),\"domain\"===l.constrain&&(T=!0);if(!(m>u*x)||T)for(r=0;r<v.length;r++)if(c=_[o=v[r]],f=(l=w[o]).constrain,c!==b||\"domain\"===f)if(h=c/b,\"range\"===f)s(l,h);else{var k=l._inputDomain,A=(l.domain[1]-l.domain[0])/(k[1]-k[0]),M=(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((h/=A)*M<1){l.domain=l._input.domain=k.slice(),s(l,h);continue}if(M<1&&(l.range=l._input.range=l._inputRange.slice(),h*=M),l.autorange){var S=l.r2l(l.range[0]),E=l.r2l(l.range[1]),L=(S+E)/2,C=L,P=L,O=Math.abs(E-L),I=L-O*h*1.0001,D=L+O*h*1.0001,z=i.makePadFn(p,l,0),R=i.makePadFn(p,l,1);y(l,h);var F,B,N=Math.abs(l._m),j=i.concatExtremes(t,l),U=j.min,V=j.max;for(B=0;B<U.length;B++)(F=U[B].val-z(U[B])/N)>I&&F<C&&(C=F);for(B=0;B<V.length;B++)(F=V[B].val+R(V[B])/N)<D&&F>P&&(P=F);h/=(P-C)/(2*O),C=l.l2r(C),P=l.l2r(P),l.range=l._input.range=S<E?[C,P]:[P,C]}y(l,h)}}},e.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++)if(r[n][e])return\"g\"+n;return e},e.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][n]){r=!0;break}r&&\"domain\"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},29323:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(84267),s=r(38520),l=r(73972),u=i.strTranslate,c=r(63893),f=r(7901),h=r(91424),p=r(30211),d=r(89298),v=r(6964),g=r(28569),y=r(64505),m=y.selectingOrDrawing,x=y.freeMode,b=r(18783).FROM_TL,_=r(33306),w=r(61549).redrawReglTraces,T=r(74875),k=r(41675).getFromId,A=r(47322).prepSelect,M=r(47322).clearOutline,S=r(47322).selectOnClick,E=r(42449),L=r(85555),C=L.MINDRAG,P=L.MINZOOM,O=!0;function I(t,e,r,n){var a=i.ensureSingle(t.draglayer,e,r,(function(e){e.classed(\"drag\",!0).style({fill:\"transparent\",\"stroke-width\":0}).attr(\"data-subplot\",t.id)}));return a.call(v,n),a.node()}function D(t,e,r,i,a,o,s){var l=I(t,\"rect\",e,r);return n.select(l).call(h.setRect,i,a,o,s),l}function z(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return\"\"}function R(t,e,r,n,i){for(var a=0;a<t.length;a++){var o=t[a];if(!o.fixedrange)if(o.rangebreaks){var s=\"y\"===o._id.charAt(0),l=s?1-e:e,u=s?1-r:r;n[o._name+\".range[0]\"]=o.l2r(o.p2l(l*o._length)),n[o._name+\".range[1]\"]=o.l2r(o.p2l(u*o._length))}else{var c=o._rl[0],f=o._rl[1]-c;n[o._name+\".range[0]\"]=o.l2r(c+f*e),n[o._name+\".range[1]\"]=o.l2r(c+f*r)}}if(i&&i.length){var h=(e+(1-r))/2;R(i,h,1-h,n,[])}}function F(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(!n.fixedrange){if(n.rangebreaks){var i=n._length,a=(n.p2l(0+e)-n.p2l(0)+(n.p2l(i+e)-n.p2l(i)))/2;n.range=[n.l2r(n._rl[0]-a),n.l2r(n._rl[1]-a)]}else n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)];n.limitRange&&n.limitRange()}}}function B(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function N(t,e,r,n,i){return t.append(\"path\").attr(\"class\",\"zoombox\").style({fill:e>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"transform\",u(r,n)).attr(\"d\",i+\"Z\")}function j(t,e,r){return t.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:f.background,stroke:f.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"transform\",u(e,r)).attr(\"d\",\"M0,0Z\")}function U(t,e,r,n,i,a){t.attr(\"d\",n+\"M\"+r.l+\",\"+r.t+\"v\"+r.h+\"h\"+r.w+\"v-\"+r.h+\"h-\"+r.w+\"Z\"),V(t,e,i,a)}function V(t,e,r,n){r||(t.transition().style(\"fill\",n>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),e.transition().style(\"opacity\",1).duration(200))}function H(t){n.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}function q(t){O&&t.data&&t._context.showTips&&(i.notifier(i._(t,\"Double-click to zoom back out\"),\"long\"),O=!1)}function G(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,P)/2);return\"M\"+(t.l-3.5)+\",\"+(t.t-.5+e)+\"h3v\"+-e+\"h\"+e+\"v-3h-\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.t-.5+e)+\"h-3v\"+-e+\"h\"+-e+\"v-3h\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.b+.5-e)+\"h-3v\"+e+\"h\"+-e+\"v3h\"+(e+3)+\"ZM\"+(t.l-3.5)+\",\"+(t.b+.5-e)+\"h3v\"+e+\"h\"+e+\"v3h-\"+(e+3)+\"Z\"}function Z(t,e,r,n,a){for(var o,s,l,u,c=!1,f={},h={},p=(a||{}).xaHash,d=(a||{}).yaHash,v=0;v<e.length;v++){var g=e[v];for(o in r)if(g[o]){for(l in g)a&&(p[l]||d[l])||(\"x\"===l.charAt(0)?r:n)[l]||(f[l]=o);for(s in n)a&&(p[s]||d[s])||!g[s]||(c=!0)}for(s in n)if(g[s])for(u in g)a&&(p[u]||d[u])||(\"x\"===u.charAt(0)?r:n)[u]||(h[u]=s)}c&&(i.extendFlat(f,h),h={});var y={},m=[];for(l in f){var x=k(t,l);m.push(x),y[x._id]=x}var b={},_=[];for(u in h){var w=k(t,u);_.push(w),b[w._id]=w}return{xaHash:y,yaHash:b,xaxes:m,yaxes:_,xLinks:f,yLinks:h,isSubplotConstrained:c}}function Y(t,e){if(s){var r=void 0!==t.onwheel?\"wheel\":\"mousewheel\";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel?t.onmousewheel=e:t.isAddedWheelEvent||(t.isAddedWheelEvent=!0,t.addEventListener(\"wheel\",e,{passive:!1}))}function W(t){var e=[];for(var r in t)e.push(t[r]);return e}t.exports={makeDragBox:function(t,e,r,s,u,f,v,y){var O,I,V,X,J,K,$,Q,tt,et,rt,nt,it,at,ot,st,lt,ut,ct,ft,ht,pt,dt,vt=t._fullLayout._zoomlayer,gt=v+y===\"nsew\",yt=1===(v+y).length;function mt(){if(O=e.xaxis,I=e.yaxis,tt=O._length,et=I._length,$=O._offset,Q=I._offset,(V={})[O._id]=O,(X={})[I._id]=I,v&&y)for(var r=e.overlays,n=0;n<r.length;n++){var i=r[n].xaxis;V[i._id]=i;var a=r[n].yaxis;X[a._id]=a}J=W(V),K=W(X),it=z(J,y),at=z(K,v),ot=!at&&!it,nt=Z(t,t._fullLayout._axisMatchGroups,V,X);var o=(rt=Z(t,t._fullLayout._axisConstraintGroups,V,X,nt)).isSubplotConstrained||nt.isSubplotConstrained;st=y||o,lt=v||o;var s=t._fullLayout;ut=s._has(\"scattergl\"),ct=s._has(\"splom\"),ft=s._has(\"svg\")}r+=e.yaxis._shift,mt();var xt=function(t,e,r){return t?\"nsew\"===t?r?\"\":\"pan\"===e?\"move\":\"crosshair\":t.toLowerCase()+\"-resize\":\"pointer\"}(at+it,t._fullLayout.dragmode,gt),bt=D(e,v+y+\"drag\",xt,r,s,u,f);if(ot&&!gt)return bt.onmousedown=null,bt.style.pointerEvents=\"none\",bt;var _t,wt,Tt,kt,At,Mt,St,Et,Lt,Ct,Pt={element:bt,gd:t,plotinfo:e};function Ot(){Pt.plotinfo.selection=!1,M(t)}function It(t,r){var i=Pt.gd;if(i._fullLayout._activeShapeIndex>=0)i._fullLayout._deactivateShape(i);else{var o=i._fullLayout.clickmode;if(H(i),2!==t||yt||qt(),gt)o.indexOf(\"select\")>-1&&S(r,i,J,K,e.id,Pt),o.indexOf(\"event\")>-1&&p.click(i,r,e.id);else if(1===t&&yt){var s=v?I:O,u=\"s\"===v||\"w\"===y?0:1,f=s._name+\".range[\"+u+\"]\",h=function(t,e){var r,n=t.range[e],i=Math.abs(n-t.range[1-e]);return\"date\"===t.type?n:\"log\"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,a(\".\"+r+\"g\")(Math.pow(10,n))):(r=Math.floor(Math.log(Math.abs(n))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,a(\".\"+String(r)+\"g\")(n))}(s,u),d=\"left\",g=\"middle\";if(s.fixedrange)return;v?(g=\"n\"===v?\"top\":\"bottom\",\"right\"===s.side&&(d=\"right\")):\"e\"===y&&(d=\"right\"),i._context.showAxisRangeEntryBoxes&&n.select(bt).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:\"#444\",horizontalAlign:d,verticalAlign:g}).on(\"edit\",(function(t){var e=s.d2r(t);void 0!==e&&l.call(\"_guiRelayout\",i,f,e)}))}}}function Dt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(tt,pt*e+_t)),i=Math.max(0,Math.min(et,dt*r+wt)),a=Math.abs(n-_t),o=Math.abs(i-wt);function s(){St=\"\",Tt.r=Tt.l,Tt.t=Tt.b,Lt.attr(\"d\",\"M0,0Z\")}if(Tt.l=Math.min(_t,n),Tt.r=Math.max(_t,n),Tt.t=Math.min(wt,i),Tt.b=Math.max(wt,i),rt.isSubplotConstrained)a>P||o>P?(St=\"xy\",a/tt>o/et?(o=a*et/tt,wt>i?Tt.t=wt-o:Tt.b=wt+o):(a=o*tt/et,_t>n?Tt.l=_t-a:Tt.r=_t+a),Lt.attr(\"d\",G(Tt))):s();else if(nt.isSubplotConstrained)if(a>P||o>P){St=\"xy\";var l=Math.min(Tt.l/tt,(et-Tt.b)/et),u=Math.max(Tt.r/tt,(et-Tt.t)/et);Tt.l=l*tt,Tt.r=u*tt,Tt.b=(1-l)*et,Tt.t=(1-u)*et,Lt.attr(\"d\",G(Tt))}else s();else!at||o<Math.min(Math.max(.6*a,C),P)?a<C||!it?s():(Tt.t=0,Tt.b=et,St=\"x\",Lt.attr(\"d\",function(t,e){return\"M\"+(t.l-.5)+\",\"+(e-P-.5)+\"h-3v\"+(2*P+1)+\"h3ZM\"+(t.r+.5)+\",\"+(e-P-.5)+\"h3v\"+(2*P+1)+\"h-3Z\"}(Tt,wt))):!it||a<Math.min(.6*o,P)?(Tt.l=0,Tt.r=tt,St=\"y\",Lt.attr(\"d\",function(t,e){return\"M\"+(e-P-.5)+\",\"+(t.t-.5)+\"v-3h\"+(2*P+1)+\"v3ZM\"+(e-P-.5)+\",\"+(t.b+.5)+\"v3h\"+(2*P+1)+\"v-3Z\"}(Tt,_t))):(St=\"xy\",Lt.attr(\"d\",G(Tt)));Tt.w=Tt.r-Tt.l,Tt.h=Tt.b-Tt.t,St&&(Ct=!0),t._dragged=Ct,U(Et,Lt,Tt,At,Mt,kt),zt(),t.emit(\"plotly_relayouting\",ht),Mt=!0}function zt(){ht={},\"xy\"!==St&&\"x\"!==St||(R(J,Tt.l/tt,Tt.r/tt,ht,rt.xaxes),Vt(\"x\",ht)),\"xy\"!==St&&\"y\"!==St||(R(K,(et-Tt.b)/et,(et-Tt.t)/et,ht,rt.yaxes),Vt(\"y\",ht))}function Rt(){zt(),H(t),Gt(),q(t)}Pt.prepFn=function(e,r,n){var a=Pt.dragmode,s=t._fullLayout.dragmode;s!==a&&(Pt.dragmode=s),mt(),pt=t._fullLayout._invScaleX,dt=t._fullLayout._invScaleY,ot||(gt?e.shiftKey?\"pan\"===s?s=\"zoom\":m(s)||(s=\"pan\"):e.ctrlKey&&(s=\"pan\"):s=\"pan\"),x(s)?Pt.minDrag=1:Pt.minDrag=void 0,m(s)?(Pt.xaxes=J,Pt.yaxes=K,A(e,r,n,Pt,s)):(Pt.clickFn=It,m(a)&&Ot(),ot||(\"zoom\"===s?(Pt.moveFn=Dt,Pt.doneFn=Rt,Pt.minDrag=1,function(e,r,n){var a=bt.getBoundingClientRect();_t=r-a.left,wt=n-a.top,t._fullLayout._calcInverseTransform(t);var s=i.apply3DTransform(t._fullLayout._invTransform)(_t,wt);_t=s[0],wt=s[1],Tt={l:_t,r:_t,w:0,t:wt,b:wt,h:0},kt=t._hmpixcount?t._hmlumcount/t._hmpixcount:o(t._fullLayout.plot_bgcolor).getLuminance(),Mt=!1,St=\"xy\",Ct=!1,Et=N(vt,kt,$,Q,At=\"M0,0H\"+tt+\"V\"+et+\"H0V0\"),Lt=j(vt,$,Q)}(0,r,n)):\"pan\"===s&&(Pt.moveFn=Ut,Pt.doneFn=Gt))),t._fullLayout._redrag=function(){var e=t._dragdata;if(e&&e.element===bt){var r=t._fullLayout.dragmode;m(r)||(mt(),Zt([0,0,tt,et]),Pt.moveFn(e.dx,e.dy))}}},g.init(Pt);var Ft=[0,0,tt,et],Bt=null,Nt=L.REDRAWDELAY,jt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ut(e,r){if(e*=pt,r*=dt,!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,\"ew\"===it||\"ns\"===at){var n=it?-e:0,i=at?-r:0;if(nt.isSubplotConstrained){if(it&&at){var a=(e/tt-r/et)/2;n=-(e=a*tt),i=-(r=-a*et)}at?n=-i*tt/et:i=-n*et/tt}return it&&(F(J,e),Vt(\"x\")),at&&(F(K,r),Vt(\"y\")),Zt([n,i,tt,et]),Ht(),void t.emit(\"plotly_relayouting\",ht)}var o,s,l=\"w\"===it==(\"n\"===at)?1:-1;if(it&&at&&(rt.isSubplotConstrained||nt.isSubplotConstrained)){var u=(e/tt+l*r/et)/2;e=u*tt,r=l*u*et}if(\"w\"===it?e=p(J,0,e):\"e\"===it?e=p(J,1,-e):it||(e=0),\"n\"===at?r=p(K,1,r):\"s\"===at?r=p(K,0,-r):at||(r=0),o=\"w\"===it?e:0,s=\"n\"===at?r:0,rt.isSubplotConstrained&&!nt.isSubplotConstrained||nt.isSubplotConstrained&&it&&at&&l>0){var c;if(nt.isSubplotConstrained||!it&&1===at.length){for(c=0;c<J.length;c++)J[c].range=J[c]._r.slice(),E(J[c],1-r/et);o=(e=r*tt/et)/2}if(nt.isSubplotConstrained||!at&&1===it.length){for(c=0;c<K.length;c++)K[c].range=K[c]._r.slice(),E(K[c],1-e/tt);s=(r=e*et/tt)/2}}nt.isSubplotConstrained&&at||Vt(\"x\"),nt.isSubplotConstrained&&it||Vt(\"y\");var f=tt-e,h=et-r;!nt.isSubplotConstrained||it&&at||(it?(s=o?0:e*et/tt,h=f*et/tt):(o=s?0:r*tt/et,f=h*tt/et)),Zt([o,s,f,h]),Ht(),t.emit(\"plotly_relayouting\",ht)}function p(t,e,r){for(var n,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/B(r/s._length);var l=s.l2r(i);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}}function Vt(t,e){for(var r=nt.isSubplotConstrained?{x:K,y:J}[t]:nt[t+\"axes\"],n=nt.isSubplotConstrained?{x:J,y:K}[t]:[],i=0;i<r.length;i++){var a=r[i],o=a._id,s=nt.xLinks[o]||nt.yLinks[o],l=n[0]||V[s]||X[s];l&&(e?(e[a._name+\".range[0]\"]=e[l._name+\".range[0]\"],e[a._name+\".range[1]\"]=e[l._name+\".range[1]\"]):a.range=l.range.slice())}}function Ht(){var r,n=[];function i(t){for(r=0;r<t.length;r++)t[r].fixedrange||n.push(t[r]._id)}function a(t,e){for(r=0;r<t.length;r++){var i=t[r],a=i[e];i.fixedrange||\"sync\"!==a.tickmode||n.push(a._id)}}for(st&&(i(J),i(rt.xaxes),i(nt.xaxes),a(e.overlays,\"xaxis\")),lt&&(i(K),i(rt.yaxes),i(nt.yaxes),a(e.overlays,\"yaxis\")),ht={},r=0;r<n.length;r++){var o=n[r],s=k(t,o);d.drawOne(t,s,{skipTitle:!0}),ht[s._name+\".range[0]\"]=s.range[0],ht[s._name+\".range[1]\"]=s.range[1]}d.redrawComponents(t,n)}function qt(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];it&&(r=r.concat(J)),at&&(r=r.concat(K)),nt.xaxes&&(r=r.concat(nt.xaxes)),nt.yaxes&&(r=r.concat(nt.yaxes));var n,i,a={};if(\"reset+autosize\"===e)for(e=\"autosize\",i=0;i<r.length;i++){var o=(n=r[i])._rangeInitial0,s=n._rangeInitial1,u=void 0!==o||void 0!==s;if(u&&(void 0!==o&&o!==n.range[0]||void 0!==s&&s!==n.range[1])||!u&&!0!==n.autorange){e=\"reset\";break}}if(\"autosize\"===e)for(i=0;i<r.length;i++)(n=r[i]).fixedrange||(a[n._name+\".autorange\"]=!0);else if(\"reset\"===e)for((it||rt.isSubplotConstrained)&&(r=r.concat(rt.xaxes)),at&&!rt.isSubplotConstrained&&(r=r.concat(rt.yaxes)),rt.isSubplotConstrained&&(it?at||(r=r.concat(K)):r=r.concat(J)),i=0;i<r.length;i++)if(!(n=r[i]).fixedrange){var c=n._name,f=n._autorangeInitial;void 0===n._rangeInitial0&&void 0===n._rangeInitial1?a[c+\".autorange\"]=!0:void 0===n._rangeInitial0?(a[c+\".autorange\"]=f,a[c+\".range\"]=[null,n._rangeInitial1]):void 0===n._rangeInitial1?(a[c+\".range\"]=[n._rangeInitial0,null],a[c+\".autorange\"]=f):a[c+\".range\"]=[n._rangeInitial0,n._rangeInitial1]}t.emit(\"plotly_doubleclick\",null),l.call(\"_guiRelayout\",t,a)}}function Gt(){Zt([0,0,tt,et]),i.syncOrAsync([T.previousPromises,function(){t._fullLayout._replotting=!1,l.call(\"_guiRelayout\",t,ht)}],t)}function Zt(e){var r,n,a,o,s=t._fullLayout,u=s._plots,c=s._subplots.cartesian;if(ct&&l.subplotsRegistry.splom.drag(t),ut)for(r=0;r<c.length;r++)if(a=(n=u[c[r]]).xaxis,o=n.yaxis,n._scene){var f=i.simpleMap(a.range,a.r2l),p=i.simpleMap(o.range,o.r2l);a.limitRange&&a.limitRange(),o.limitRange&&o.limitRange(),f=a.range,p=o.range,n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((ct||ut)&&(_(t),w(t)),ft){var d=e[2]/O._length,g=e[3]/I._length;for(r=0;r<c.length;r++){a=(n=u[c[r]]).xaxis,o=n.yaxis;var m,x,b,T,k=(st||nt.isSubplotConstrained)&&!a.fixedrange&&V[a._id],A=(lt||nt.isSubplotConstrained)&&!o.fixedrange&&X[o._id];if(k?(m=d,b=y||nt.isSubplotConstrained?e[0]:Xt(a,m)):nt.xaHash[a._id]?(m=d,b=e[0]*a._length/O._length):nt.yaHash[a._id]?(m=g,b=\"ns\"===at?-e[1]*a._length/I._length:Xt(a,m,{n:\"top\",s:\"bottom\"}[at])):b=Wt(a,m=Yt(a,d,g)),m>1&&(void 0!==a.maxallowed&&st===(a.range[0]<a.range[1]?\"e\":\"w\")||void 0!==a.minallowed&&st===(a.range[0]<a.range[1]?\"w\":\"e\"))&&(m=1,b=0),A?(x=g,T=v||nt.isSubplotConstrained?e[1]:Xt(o,x)):nt.yaHash[o._id]?(x=g,T=e[1]*o._length/I._length):nt.xaHash[o._id]?(x=d,T=\"ew\"===it?-e[0]*o._length/O._length:Xt(o,x,{e:\"right\",w:\"left\"}[it])):T=Wt(o,x=Yt(o,d,g)),x>1&&(void 0!==o.maxallowed&&lt===(o.range[0]<o.range[1]?\"n\":\"s\")||void 0!==o.minallowed&&lt===(o.range[0]<o.range[1]?\"s\":\"n\"))&&(x=1,T=0),m||x){m||(m=1),x||(x=1);var M=a._offset-b/m,S=o._offset-T/x;n.clipRect.call(h.setTranslate,b,T).call(h.setScale,m,x),n.plot.call(h.setTranslate,M,S).call(h.setScale,1/m,1/x),m===n.xScaleFactor&&x===n.yScaleFactor||(h.setPointGroupScale(n.zoomScalePts,m,x),h.setTextPointsScale(n.zoomScaleTxt,m,x)),h.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=m,n.yScaleFactor=x}}}}function Yt(t,e,r){return t.fixedrange?0:st&&rt.xaHash[t._id]?e:lt&&(rt.isSubplotConstrained?rt.xaHash:rt.yaHash)[t._id]?r:0}function Wt(t,e){return e?(t.range=t._r.slice(),E(t,e),Xt(t,e)):0}function Xt(t,e,r){return t._length*(1-e)*b[r||t.constraintoward||\"middle\"]}return v.length*y.length!=1&&Y(bt,(function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Ot(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();mt(),clearTimeout(Bt);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,a=Math.exp(-Math.min(Math.max(r,-20),20)/200),o=jt.draglayer.select(\".nsewdrag\").node().getBoundingClientRect(),s=(e.clientX-o.left)/o.width,l=(o.bottom-e.clientY)/o.height;if(st){for(y||(s=.5),n=0;n<J.length;n++)u(J[n],s,a);Vt(\"x\"),Ft[2]*=a,Ft[0]+=Ft[2]*s*(1/a-1)}if(lt){for(v||(l=.5),n=0;n<K.length;n++)u(K[n],l,a);Vt(\"y\"),Ft[3]*=a,Ft[1]+=Ft[3]*(1-l)*(1/a-1)}Zt(Ft),Ht(),t.emit(\"plotly_relayouting\",ht),Bt=setTimeout((function(){t._fullLayout&&(Ft=[0,0,tt,et],Gt())}),Nt),e.preventDefault()}else i.log(\"Did not find wheel motion attributes: \",e)}function u(t,e,r){if(!t.fixedrange){var n=i.simpleMap(t.range,t.r2l),a=n[0]+(n[1]-n[0])*e;t.range=n.map((function(e){return t.l2r(a+(e-a)*r)}))}}})),bt},makeDragger:I,makeRectDragger:D,makeZoombox:N,makeCorners:j,updateZoombox:U,xyCorners:G,transitionZoombox:V,removeZoombox:H,showDoubleClickNotifier:q,attachWheelEventHandler:Y}},4305:function(t,e,r){\"use strict\";var n=r(39898),i=r(30211),a=r(28569),o=r(6964),s=r(29323).makeDragBox,l=r(85555).DRAGGERSIZE;e.initInteractions=function(t){var r=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(\".drag\").remove();else if(r._has(\"cartesian\")||r._has(\"splom\")){Object.keys(r._plots||{}).sort((function(t,e){if((r._plots[t].mainplot&&!0)===(r._plots[e].mainplot&&!0)){var n=t.split(\"y\"),i=e.split(\"y\");return n[0]===i[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return r._plots[t].mainplot?1:-1})).forEach((function(e){var n=r._plots[e],o=n.xaxis,u=n.yaxis;if(!n.mainplot){var c=s(t,n,o._offset,u._offset,o._length,u._length,\"ns\",\"ew\");c.onmousemove=function(r){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===e&&t._fullLayout._plots[e]&&i.hover(t,r,e)},i.hover(t,r,e),t._fullLayout._lasthover=c,t._fullLayout._hoversubplot=e},c.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,u._offset-l,l,l,\"n\",\"w\"),s(t,n,o._offset+o._length,u._offset-l,l,l,\"n\",\"e\"),s(t,n,o._offset-l,u._offset+u._length,l,l,\"s\",\"w\"),s(t,n,o._offset+o._length,u._offset+u._length,l,l,\"s\",\"e\"))}if(t._context.showAxisDragHandles){if(e===o._mainSubplot){var f=o._mainLinePosition;\"top\"===o.side&&(f-=l),s(t,n,o._offset+.1*o._length,f,.8*o._length,l,\"\",\"ew\"),s(t,n,o._offset,f,.1*o._length,l,\"\",\"w\"),s(t,n,o._offset+.9*o._length,f,.1*o._length,l,\"\",\"e\")}if(e===u._mainSubplot){var h=u._mainLinePosition;\"right\"!==u.side&&(h-=l),s(t,n,h,u._offset+.1*u._length,l,.8*u._length,\"ns\",\"\"),s(t,n,h,u._offset+.9*u._length,l,.1*u._length,\"s\",\"\"),s(t,n,h,u._offset,l,.1*u._length,\"n\",\"\")}}}));var o=r._hoverlayer.node();o.onmousemove=function(e){e.target=t._fullLayout._lasthover,i.hover(t,e,r._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,i.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},e.updateFx(t)}},e.updateFx=function(t){var e=t._fullLayout,r=\"pan\"===e.dragmode?\"move\":\"crosshair\";o(e._draggers,r)}},76325:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(41675);t.exports=function(t){return function(e,r){var o=e[t];if(Array.isArray(o))for(var s=n.subplotsRegistry.cartesian,l=s.idRegex,u=r._subplots,c=u.xaxis,f=u.yaxis,h=u.cartesian,p=r._has(\"cartesian\")||r._has(\"gl2d\"),d=0;d<o.length;d++){var v=o[d];if(i.isPlainObject(v)){var g=a.cleanId(v.xref,\"x\",!1),y=a.cleanId(v.yref,\"y\",!1),m=l.x.test(g),x=l.y.test(y);if(m||x){p||i.pushUnique(r._basePlotModules,s);var b=!1;m&&-1===c.indexOf(g)&&(c.push(g),b=!0),x&&-1===f.indexOf(y)&&(f.push(y),b=!0),b&&m&&x&&h.push(g+y)}}}}}},93612:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(71828),o=r(74875),s=r(91424),l=r(27659).a0,u=r(41675),c=r(85555),f=r(77922),h=a.ensureSingle;function p(t,e,r){return a.ensureSingle(t,e,r,(function(t){t.datum(r)}))}function d(t,e,r,a,o){for(var u,f,h,p=c.traceLayerClasses,d=t._fullLayout,v=d._modules,g=[],y=[],m=0;m<v.length;m++){var x=(u=v[m]).name,b=i.modules[x].categories;if(b.svg){var _=u.layerName||x+\"layer\",w=u.plot;h=(f=l(r,w))[0],r=f[1],h.length&&g.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:h}),b.zoomScale&&y.push(\".\"+_)}}g.sort((function(t,e){return t.i-e.i}));var T=e.plot.selectAll(\"g.mlayer\").data(g,(function(t){return t.className}));if(T.enter().append(\"g\").attr(\"class\",(function(t){return t.className})).classed(\"mlayer\",!0).classed(\"rangeplot\",e.isRangePlot),T.exit().remove(),T.order(),T.each((function(r){var i=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,i,a,o),-1===c.clipOnAxisFalseQuery.indexOf(\".\"+l)&&s.setClipUrl(i,e.layerClipId,t)})),d._has(\"scattergl\")&&(u=i.getModule(\"scattergl\"),h=l(r,u)[0],u.plot(t,e,h)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(c.clipOnAxisFalseQuery.join(\",\")).selectAll(\".trace\")),y.length)){var k=e.plot.selectAll(y.join(\",\")).selectAll(\".trace\");e.zoomScalePts=k.selectAll(\"path.point\"),e.zoomScaleTxt=k.selectAll(\".textpoint\")}}function v(t,e){var r=e.plotgroup,n=e.id,i=c.layerValue2layerClass[e.xaxis.layer],a=c.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,f=n+\"-x\",d=n+\"-y\";e.minorGridlayer=s.minorGridlayer,e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,h(s.overlinesBelow,\"path\",f),h(s.overlinesBelow,\"path\",d),h(s.overaxesBelow,\"g\",f),h(s.overaxesBelow,\"g\",d),e.plot=h(s.overplot,\"g\",n),h(s.overlinesAbove,\"path\",f),h(s.overlinesAbove,\"path\",d),h(s.overaxesAbove,\"g\",f),h(s.overaxesAbove,\"g\",d),e.xlines=l.select(\".overlines-\"+i).select(\".\"+f),e.ylines=l.select(\".overlines-\"+a).select(\".\"+d),e.xaxislayer=l.select(\".overaxes-\"+i).select(\".\"+f),e.yaxislayer=l.select(\".overaxes-\"+a).select(\".\"+d)}else if(o)e.xlines=h(r,\"path\",\"xlines-above\"),e.ylines=h(r,\"path\",\"ylines-above\"),e.xaxislayer=h(r,\"g\",\"xaxislayer-above\"),e.yaxislayer=h(r,\"g\",\"yaxislayer-above\");else{var v=h(r,\"g\",\"layer-subplot\");e.shapelayer=h(v,\"g\",\"shapelayer\"),e.imagelayer=h(v,\"g\",\"imagelayer\"),e.minorGridlayer=h(r,\"g\",\"minor-gridlayer\"),e.gridlayer=h(r,\"g\",\"gridlayer\"),e.zerolinelayer=h(r,\"g\",\"zerolinelayer\"),h(r,\"path\",\"xlines-below\"),h(r,\"path\",\"ylines-below\"),e.overlinesBelow=h(r,\"g\",\"overlines-below\"),h(r,\"g\",\"xaxislayer-below\"),h(r,\"g\",\"yaxislayer-below\"),e.overaxesBelow=h(r,\"g\",\"overaxes-below\"),e.plot=h(r,\"g\",\"plot\"),e.overplot=h(r,\"g\",\"overplot\"),e.xlines=h(r,\"path\",\"xlines-above\"),e.ylines=h(r,\"path\",\"ylines-above\"),e.overlinesAbove=h(r,\"g\",\"overlines-above\"),h(r,\"g\",\"xaxislayer-above\"),h(r,\"g\",\"yaxislayer-above\"),e.overaxesAbove=h(r,\"g\",\"overaxes-above\"),e.xlines=r.select(\".xlines-\"+i),e.ylines=r.select(\".ylines-\"+a),e.xaxislayer=r.select(\".xaxislayer-\"+i),e.yaxislayer=r.select(\".yaxislayer-\"+a)}o||(p(e.minorGridlayer,\"g\",e.xaxis._id),p(e.minorGridlayer,\"g\",e.yaxis._id),e.minorGridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(u.idSort),p(e.gridlayer,\"g\",e.xaxis._id),p(e.gridlayer,\"g\",e.yaxis._id),e.gridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(u.idSort)),e.xlines.style(\"fill\",\"none\").classed(\"crisp\",!0),e.ylines.style(\"fill\",\"none\").classed(\"crisp\",!0)}function g(t,e){if(t){var r={};for(var i in t.each((function(t){var i=t[0];n.select(this).remove(),y(i,e),r[i]=!0})),e._plots)for(var a=e._plots[i].overlays||[],o=0;o<a.length;o++){var s=a[o];r[s.id]&&s.plot.selectAll(\".trace\").remove()}}}function y(t,e){e._draggers.selectAll(\"g.\"+t).remove(),e._defs.select(\"#clip\"+e._uid+t+\"plot\").remove()}e.name=\"cartesian\",e.attr=[\"xaxis\",\"yaxis\"],e.idRoot=[\"x\",\"y\"],e.idRegex=c.idRegex,e.attrRegex=c.attrRegex,e.attributes=r(89502),e.layoutAttributes=r(13838),e.supplyLayoutDefaults=r(86763),e.transitionAxes=r(66847),e.finalizeSubplots=function(t,e){var r,n,i,o=e._subplots,s=o.xaxis,l=o.yaxis,f=o.cartesian,h=f.concat(o.gl2d||[]),p={},d={};for(r=0;r<h.length;r++){var v=h[r].split(\"y\");p[v[0]]=1,d[\"y\"+v[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(i=(t[u.id2name(n)]||{}).anchor,c.idRegex.y.test(i)||(i=\"y\"),f.push(n+i),h.push(n+i),d[i]||(d[i]=1,a.pushUnique(l,i)));for(r=0;r<l.length;r++)d[i=l[r]]||(n=(t[u.id2name(i)]||{}).anchor,c.idRegex.x.test(n)||(n=\"x\"),f.push(n+i),h.push(n+i),p[n]||(p[n]=1,a.pushUnique(s,n)));if(!h.length){for(var g in n=\"\",i=\"\",t)c.attrRegex.test(g)&&(\"x\"===g.charAt(0)?(!n||+g.substr(5)<+n.substr(5))&&(n=g):(!i||+g.substr(5)<+i.substr(5))&&(i=g));n=n?u.name2id(n):\"x\",i=i?u.name2id(i):\"y\",s.push(n),l.push(i),f.push(n+i)}},e.plot=function(t,e,r,n){var i,a=t._fullLayout,o=a._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],i=0;i<s.length;i++)e.push(i);for(i=0;i<o.length;i++){for(var l,u=o[i],c=a._plots[u],f=[],h=0;h<s.length;h++){var p=s[h],v=p[0].trace;v.xaxis+v.yaxis===u&&((-1!==e.indexOf(v.index)||v.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===u&&-1!==[\"tonextx\",\"tonexty\",\"tonext\"].indexOf(v.fill)&&-1===f.indexOf(l)&&f.push(l),f.push(p)),l=p)}d(t,c,f,r,n)}},e.clean=function(t,e,r,n){var i,a,o,s=n._plots||{},l=e._plots||{},c=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(i=s[o]).plotgroup&&i.plotgroup.remove();var f=n._has&&n._has(\"gl\"),h=e._has&&e._has(\"gl\");if(f&&!h)for(o in s)(i=s[o])._scene&&i._scene.destroy();if(c.xaxis&&c.yaxis){var p=u.listIds({_fullLayout:n});for(a=0;a<p.length;a++){var d=p[a];e[u.id2name(d)]||n._infolayer.selectAll(\".g-\"+d+\"title\").remove()}}var v=n._has&&n._has(\"cartesian\"),m=e._has&&e._has(\"cartesian\");if(v&&!m)g(n._cartesianlayer.selectAll(\".subplot\"),n),n._defs.selectAll(\".axesclip\").remove(),delete n._axisConstraintGroups,delete n._axisMatchGroups;else if(c.cartesian)for(a=0;a<c.cartesian.length;a++){var x=c.cartesian[a];if(!l[x]){var b=\".\"+x+\",.\"+x+\"-x,.\"+x+\"-y\";n._cartesianlayer.selectAll(b).remove(),y(x,n)}}},e.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,i,a,o,s=t._fullLayout,l=s._subplots.cartesian,u=l.length,c=[],f=[];for(e=0;e<u;e++){n=l[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var h=a._mainAxis,p=o._mainAxis,d=h._id+p._id,v=s._plots[d];i.overlays=[],d!==n&&v?(i.mainplot=d,i.mainplotinfo=v,f.push(n)):(i.mainplot=void 0,i.mainplotinfo=void 0,c.push(n))}for(e=0;e<f.length;e++)n=f[e],(i=s._plots[n]).mainplotinfo.overlays.push(i);var g=c.concat(f),y=new Array(u);for(e=0;e<u;e++){n=g[e],a=(i=s._plots[n]).xaxis,o=i.yaxis;var m=[n,a.layer,o.layer,a.overlaying||\"\",o.overlaying||\"\"];for(r=0;r<i.overlays.length;r++)m.push(i.overlays[r].id);y[e]=m}return y}(t),i=e._cartesianlayer.selectAll(\".subplot\").data(r,String);i.enter().append(\"g\").attr(\"class\",(function(t){return\"subplot \"+t[0]})),i.order(),i.exit().call(g,e),i.each((function(r){var i=r[0],a=e._plots[i];a.plotgroup=n.select(this),v(t,a),a.draglayer=h(e._draggers,\"g\",i)}))},e.rangePlot=function(t,e,r){v(t,e),d(t,e,r),o.style(t)},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\".svg-container\");r.filter((function(t,e){return e===r.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t=this,r=t.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:f.svg,\"xlink:href\":r,preserveAspectRatio:\"none\",x:0,y:0,width:t.style.width,height:t.style.height})}))},e.updateFx=r(4305).updateFx},13838:function(t,e,r){\"use strict\";var n=r(41940),i=r(22399),a=r(79952).P,o=r(1426).extendFlat,s=r(44467).templatedArray,l=r(12663).descriptionWithDates,u=r(50606).ONEDAY,c=r(85555),f=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN,p={valType:\"enumerated\",values:[\"auto\",\"linear\",\"array\"],editType:\"ticks\",impliedEdits:{tick0:void 0,dtick:void 0}},d=o({},p,{values:p.values.slice().concat([\"sync\"])});function v(t){return{valType:\"integer\",min:0,dflt:t?5:0,editType:\"ticks\"}}var g={valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},y={valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},m={valType:\"data_array\",editType:\"ticks\"},x={valType:\"enumerated\",values:[\"outside\",\"inside\",\"\"],editType:\"ticks\"};function b(t){var e={valType:\"number\",min:0,editType:\"ticks\"};return t||(e.dflt=5),e}function _(t){var e={valType:\"number\",min:0,editType:\"ticks\"};return t||(e.dflt=1),e}var w={valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},T={valType:\"color\",dflt:i.lightLine,editType:\"ticks\"};function k(t){var e={valType:\"number\",min:0,editType:\"ticks\"};return t||(e.dflt=1),e}var A=o({},a,{editType:\"ticks\"}),M={valType:\"boolean\",editType:\"ticks\"};t.exports={visible:{valType:\"boolean\",editType:\"plot\"},color:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},title:{text:{valType:\"string\",editType:\"ticks\"},font:n({editType:\"ticks\"}),standoff:{valType:\"number\",min:0,editType:\"ticks\"},editType:\"ticks\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"log\",\"date\",\"category\",\"multicategory\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\",\"min reversed\",\"max reversed\",\"min\",\"max\"],dflt:!0,editType:\"axrange\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},autorangeoptions:{minallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},maxallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},clipmin:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},clipmax:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},include:{valType:\"any\",arrayOk:!0,editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},editType:\"plot\"},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0},{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0}],editType:\"axrange\",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},maxallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},insiderange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},scaleanchor:{valType:\"enumerated\",values:[c.idRegex.x.toString(),c.idRegex.y.toString(),!1],editType:\"plot\"},scaleratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},constrain:{valType:\"enumerated\",values:[\"range\",\"domain\"],editType:\"plot\"},constraintoward:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\",\"top\",\"middle\",\"bottom\"],editType:\"plot\"},matches:{valType:\"enumerated\",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"calc\"},rangebreaks:s(\"rangebreak\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},bounds:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},pattern:{valType:\"enumerated\",values:[h,f,\"\"],editType:\"calc\"},values:{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"any\",editType:\"calc\"}},dvalue:{valType:\"number\",editType:\"calc\",min:0,dflt:u},editType:\"calc\"}),tickmode:d,nticks:v(),tick0:g,dtick:y,ticklabelstep:{valType:\"integer\",min:1,dflt:1,editType:\"ticks\"},tickvals:m,ticktext:{valType:\"data_array\",editType:\"ticks\"},ticks:x,tickson:{valType:\"enumerated\",values:[\"labels\",\"boundaries\"],dflt:\"labels\",editType:\"ticks\"},ticklabelmode:{valType:\"enumerated\",values:[\"instant\",\"period\"],dflt:\"instant\",editType:\"ticks\"},ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\",editType:\"calc\"},ticklabeloverflow:{valType:\"enumerated\",values:[\"allow\",\"hide past div\",\"hide past domain\"],editType:\"calc\"},mirror:{valType:\"enumerated\",values:[!0,\"ticks\",!1,\"all\",\"allticks\"],dflt:!1,editType:\"ticks+layoutstyle\"},ticklen:b(),tickwidth:_(),tickcolor:w,showticklabels:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},labelalias:{valType:\"any\",dflt:!1,editType:\"ticks\"},automargin:{valType:\"flaglist\",flags:[\"height\",\"width\",\"left\",\"right\",\"top\",\"bottom\"],extras:[!0,!1],dflt:!1,editType:\"ticks\"},showspikes:{valType:\"boolean\",dflt:!1,editType:\"modebar\"},spikecolor:{valType:\"color\",dflt:null,editType:\"none\"},spikethickness:{valType:\"number\",dflt:3,editType:\"none\"},spikedash:o({},a,{dflt:\"dash\",editType:\"none\"}),spikemode:{valType:\"flaglist\",flags:[\"toaxis\",\"across\",\"marker\"],dflt:\"toaxis\",editType:\"none\"},spikesnap:{valType:\"enumerated\",values:[\"data\",\"cursor\",\"hovered data\"],dflt:\"hovered data\",editType:\"none\"},tickfont:n({editType:\"ticks\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"ticks\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"ticks\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"ticks\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"ticks\",description:l(\"tick label\")},tickformatstops:s(\"tickformatstop\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dtickrange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"ticks\"},{valType:\"any\",editType:\"ticks\"}],editType:\"ticks\"},value:{valType:\"string\",dflt:\"\",editType:\"ticks\"},editType:\"ticks\"}),hoverformat:{valType:\"string\",dflt:\"\",editType:\"none\",description:l(\"hover text\")},showline:{valType:\"boolean\",dflt:!1,editType:\"ticks+layoutstyle\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"layoutstyle\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks+layoutstyle\"},showgrid:M,gridcolor:T,gridwidth:k(),griddash:A,zeroline:{valType:\"boolean\",editType:\"ticks\"},zerolinecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},zerolinewidth:{valType:\"number\",dflt:1,editType:\"ticks\"},showdividers:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dividercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},dividerwidth:{valType:\"number\",dflt:1,editType:\"ticks\"},anchor:{valType:\"enumerated\",values:[\"free\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],editType:\"plot\"},overlaying:{valType:\"enumerated\",values:[\"free\",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:\"plot\"},minor:{tickmode:p,nticks:v(\"minor\"),tick0:g,dtick:y,tickvals:m,ticks:x,ticklen:b(\"minor\"),tickwidth:_(\"minor\"),tickcolor:w,gridcolor:T,gridwidth:k(\"minor\"),griddash:A,showgrid:M,editType:\"ticks\"},layer:{valType:\"enumerated\",values:[\"above traces\",\"below traces\"],dflt:\"above traces\",editType:\"plot\"},domain:{valType:\"info_array\",items:[{valType:\"number\",min:0,max:1,editType:\"plot\"},{valType:\"number\",min:0,max:1,editType:\"plot\"}],dflt:[0,1],editType:\"plot\"},position:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},autoshift:{valType:\"boolean\",dflt:!1,editType:\"plot\"},shift:{valType:\"number\",editType:\"plot\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\",\"total ascending\",\"total descending\",\"min ascending\",\"min descending\",\"max ascending\",\"max descending\",\"sum ascending\",\"sum descending\",\"mean ascending\",\"mean descending\",\"median ascending\",\"median descending\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{autotick:{valType:\"boolean\",editType:\"ticks\"},title:{valType:\"string\",editType:\"ticks\"},titlefont:n({editType:\"ticks\"})}}},86763:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(23469).isUnifiedHover,o=r(98212),s=r(44467),l=r(10820),u=r(13838),c=r(951),f=r(71453),h=r(99082),p=r(52830),d=r(41675),v=d.id2name,g=d.name2id,y=r(85555).AX_ID_PATTERN,m=r(73972),x=m.traceIs,b=m.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}t.exports=function(t,e,r){var m,w,T=e.autotypenumbers,k={},A={},M={},S={},E={},L={},C={},P={},O={},I={};for(m=0;m<r.length;m++){var D=r[m];if(x(D,\"cartesian\")||x(D,\"gl2d\")){var z,R;if(D.xaxis)z=v(D.xaxis),_(k,z,D);else if(D.xaxes)for(w=0;w<D.xaxes.length;w++)_(k,v(D.xaxes[w]),D);if(D.yaxis)R=v(D.yaxis),_(k,R,D);else if(D.yaxes)for(w=0;w<D.yaxes.length;w++)_(k,v(D.yaxes[w]),D);\"funnel\"===D.type?\"h\"===D.orientation?(z&&(A[z]=!0),R&&(C[R]=!0)):R&&(M[R]=!0):\"image\"===D.type?(R&&(P[R]=!0),z&&(P[z]=!0)):(R&&(E[R]=!0,L[R]=!0),x(D,\"carpet\")&&(\"carpet\"!==D.type||D._cheater)||z&&(S[z]=!0)),\"carpet\"===D.type&&D._cheater&&z&&(A[z]=!0),x(D,\"2dMap\")&&(O[z]=!0,O[R]=!0),x(D,\"oriented\")&&(I[\"h\"===D.orientation?R:z]=!0)}}var F=e._subplots,B=F.xaxis,N=F.yaxis,j=n.simpleMap(B,v),U=n.simpleMap(N,v),V=j.concat(U),H=i.background;B.length&&N.length&&(H=n.coerce(t,e,l,\"plot_bgcolor\"));var q,G,Z,Y,W,X=i.combine(H,e.paper_bgcolor);function J(){var t=k[q]||[];W._traceIndices=t.map((function(t){return t._expandedIndex})),W._annIndices=[],W._shapeIndices=[],W._selectionIndices=[],W._imgIndices=[],W._subplotsWith=[],W._counterAxes=[],W._name=W._attr=q,W._id=G}function K(t,e){return n.coerce(Y,W,u,t,e)}function $(t,e){return n.coerce2(Y,W,u,t,e)}function Q(t){return\"x\"===t?N:B}function tt(e,r){for(var n=\"x\"===e?j:U,i=[],a=0;a<n.length;a++){var o=n[a];o===r||(t[o]||{}).overlaying||i.push(g(o))}return i}var et={x:Q(\"x\"),y:Q(\"y\")},rt=et.x.concat(et.y),nt={},it=[];function at(){var t=Y.matches;y.test(t)&&-1===rt.indexOf(t)&&(nt[t]=Y.type,it=Object.keys(nt))}var ot=o(t,e),st=a(ot);for(m=0;m<V.length;m++){q=V[m],G=g(q),Z=q.charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+\"axis\"),J();var lt=\"x\"===Z&&!S[q]&&A[q]||\"y\"===Z&&!E[q]&&M[q],ut=\"y\"===Z&&(!L[q]&&C[q]||P[q]),ct={hasMinor:!0,letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:k[q]||[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:lt,reverseDflt:ut,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K(\"uirevision\",e.uirevision),c(Y,W,K,ct),f(Y,W,K,ct,e);var ft=st&&Z===ot.charAt(0),ht=$(\"spikecolor\",st?W.color:void 0),pt=$(\"spikethickness\",st?1.5:void 0),dt=$(\"spikedash\",st?\"dot\":void 0),vt=$(\"spikemode\",st?\"across\":void 0),gt=$(\"spikesnap\");K(\"showspikes\",!!(ft||ht||pt||dt||vt||gt))||(delete W.spikecolor,delete W.spikethickness,delete W.spikedash,delete W.spikemode,delete W.spikesnap);var yt=v(Y.overlaying),mt=[0,1];if(void 0!==e[yt]){var xt=v(e[yt].anchor);void 0!==e[xt]&&(mt=e[xt].domain)}p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid,overlayingDomain:mt}),K(\"title.standoff\"),at(),W._input=Y}for(m=0;m<it.length;){G=it[m++],Z=(q=v(G)).charAt(0),n.isPlainObject(t[q])||(t[q]={}),Y=t[q],W=s.newContainer(e,q,Z+\"axis\"),J();var bt={letter:Z,font:e.font,outerTicks:O[q],showGrid:!I[q],data:[],bgColor:X,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Z]||{})[G]};K(\"uirevision\",e.uirevision),W.type=nt[G]||\"linear\",f(Y,W,K,bt,e),p(Y,W,K,{letter:Z,counterAxes:et[Z],overlayableAxes:tt(Z,q),grid:e.grid}),K(\"fixedrange\"),at(),W._input=Y}var _t=b(\"rangeslider\",\"handleDefaults\"),wt=b(\"rangeselector\",\"handleDefaults\");for(m=0;m<j.length;m++)q=j[m],Y=t[q],W=e[q],_t(t,e,q),\"date\"===W.type&&wt(Y,W,e,U,W.calendar),K(\"fixedrange\");for(m=0;m<U.length;m++){q=U[m],Y=t[q],W=e[q];var Tt=e[v(W.anchor)];K(\"fixedrange\",b(\"rangeslider\",\"isVisible\")(Tt))}h.handleDefaults(t,e,{axIds:rt.concat(it).sort(d.idSort),axHasImage:P})}},92128:function(t,e,r){\"use strict\";var n=r(84267).mix,i=r(22399),a=r(71828);t.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return a.coerce2(t,e,o.attributes,r,n)}var u=l(\"linecolor\",s),c=l(\"linewidth\");r(\"showline\",o.showLine||!!u||!!c)||(delete e.linecolor,delete e.linewidth);var f=l(\"gridcolor\",n(s,o.bgColor,o.blend||i.lightFraction).toRgbString()),h=l(\"gridwidth\"),p=l(\"griddash\");if(r(\"showgrid\",o.showGrid||!!f||!!h||!!p)||(delete e.gridcolor,delete e.gridwidth,delete e.griddash),o.hasMinor){var d=l(\"minor.gridcolor\",n(e.gridcolor,o.bgColor,67).toRgbString()),v=l(\"minor.gridwidth\",e.gridwidth||1),g=l(\"minor.griddash\",e.griddash||\"solid\");r(\"minor.showgrid\",!!d||!!v||!!g)||(delete e.minor.gridcolor,delete e.minor.gridwidth,delete e.minor.griddash)}if(!o.noZeroLine){var y=l(\"zerolinecolor\",s),m=l(\"zerolinewidth\");r(\"zeroline\",o.showGrid||!!y||!!m)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},52830:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828);t.exports=function(t,e,r,a){var o,s,l,u,c,f,h=a.counterAxes||[],p=a.overlayableAxes||[],d=a.letter,v=a.grid,g=a.overlayingDomain;v&&(s=v._domains[d][v._axisMap[e._id]],o=v._anchors[e._id],s&&(l=v[d+\"side\"].split(\" \")[0],u=v.domain[d][\"right\"===l||\"top\"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?\"free\":h[0]||\"free\"),l=l||(\"x\"===d?\"bottom\":\"left\"),u=u||0,c=0,f=!1;var y=i.coerce(t,e,{anchor:{valType:\"enumerated\",values:[\"free\"].concat(h),dflt:o}},\"anchor\"),m=i.coerce(t,e,{side:{valType:\"enumerated\",values:\"x\"===d?[\"bottom\",\"top\"]:[\"left\",\"right\"],dflt:l}},\"side\");\"free\"===y&&(\"y\"===d&&(r(\"autoshift\")&&(u=\"left\"===m?g[0]:g[1],f=!e.automargin||e.automargin,c=\"left\"===m?-3:3),r(\"shift\",c)),r(\"position\",u)),r(\"automargin\",f);var x=!1;if(p.length&&(x=i.coerce(t,e,{overlaying:{valType:\"enumerated\",values:[!1].concat(p),dflt:!1}},\"overlaying\")),!x){var b=r(\"domain\",s);b[0]>b[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s),\"sync\"===e.tickmode&&(e.tickmode=\"auto\")}return r(\"layer\"),e}},89426:function(t,e,r){\"use strict\";var n=r(59652);t.exports=function(t,e,r,i,a){a||(a={});var o=a.tickSuffixDflt,s=n(t);r(\"tickprefix\")&&r(\"showtickprefix\",s),r(\"ticksuffix\",o)&&r(\"showticksuffix\",s)}},23608:function(t,e,r){\"use strict\";var n=r(23074);t.exports=function(t,e,r,i){var a=e._template||{},o=e.type||a.type||\"-\";r(\"minallowed\"),r(\"maxallowed\");var s,l=r(\"range\");l||i.noInsiderange||\"log\"===o||(!(s=r(\"insiderange\"))||null!==s[0]&&null!==s[1]||(e.insiderange=!1,s=void 0),s&&(l=r(\"range\",s)));var u,c=e.getAutorangeDflt(l,i),f=r(\"autorange\",c);!l||(null!==l[0]||null!==l[1])&&(null!==l[0]&&null!==l[1]||\"reversed\"!==f&&!0!==f)&&(null===l[0]||\"min\"!==f&&\"max reversed\"!==f)&&(null===l[1]||\"max\"!==f&&\"min reversed\"!==f)||(l=void 0,delete e.range,e.autorange=!0,u=!0),u||(f=r(\"autorange\",c=e.getAutorangeDflt(l,i))),f&&(n(r,f,l),\"linear\"!==o&&\"-\"!==o||r(\"rangemode\")),e.cleanRange()}},42449:function(t,e,r){\"use strict\";var n=r(18783).FROM_BL;t.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||\"center\"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},21994:function(t,e,r){\"use strict\";var n=r(39898),i=r(84096).g0,a=r(71828),o=a.numberFormat,s=r(92770),l=a.cleanNumber,u=a.ms2DateTime,c=a.dateTime2ms,f=a.ensureNumber,h=a.isArrayOrTypedArray,p=r(50606),d=p.FP_SAFE,v=p.BADNUM,g=p.LOG_CLIP,y=p.ONEWEEK,m=p.ONEDAY,x=p.ONEHOUR,b=p.ONEMIN,_=p.ONESEC,w=r(41675),T=r(85555),k=T.HOUR_PATTERN,A=T.WEEKDAY_PATTERN;function M(t){return Math.pow(10,t)}function S(t){return null!=t}t.exports=function(t,e){e=e||{};var r=t._id||\"x\",p=r.charAt(0);function E(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*g*Math.abs(n-i))}return v}function L(e,r,n,i){if((i||{}).msUTC&&s(e))return+e;var o=c(e,n||t.calendar);if(o===v){if(!s(e))return v;e=+e;var l=Math.floor(10*a.mod(e+.05,1)),u=Math.round(e-l/10);o=c(new Date(u))+l/10}return o}function C(e,r,n){return u(e,r,n||t.calendar)}function P(e){return t._categories[Math.round(e)]}function O(e){if(S(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(\"number\"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return v}function I(e){if(t._categoriesMap)return t._categoriesMap[e]}function D(t){var e=I(t);return void 0!==e?e:s(t)?+t:void 0}function z(t){return s(t)?+t:I(t)}function R(t,e,r){return n.round(r+e*t,2)}function F(t,e,r){return(t-r)/e}var B=function(e){return s(e)?R(e,t._m,t._b):v},N=function(e){return F(e,t._m,t._b)};if(t.rangebreaks){var j=\"y\"===p;B=function(e){if(!s(e))return v;var r=t._rangebreaks.length;if(!r)return R(e,t._m,t._b);var n=j;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,a=i*e,o=0,l=0;l<r;l++){var u=i*t._rangebreaks[l].min,c=i*t._rangebreaks[l].max;if(a<u)break;if(!(a>c)){o=a<(u+c)/2?l:l+1;break}o=l+1}var f=t._B[o]||0;return isFinite(f)?R(e,t._m2,f):0},N=function(e){var r=t._rangebreaks.length;if(!r)return F(e,t._m,t._b);for(var n=0,i=0;i<r&&!(e<t._rangebreaks[i].pmin);i++)e>t._rangebreaks[i].pmax&&(n=i+1);return F(e,t._m2,t._B[n])}}t.c2l=\"log\"===t.type?E:f,t.l2c=\"log\"===t.type?M:f,t.l2p=B,t.p2l=N,t.c2p=\"log\"===t.type?function(t,e){return B(E(t,e))}:B,t.p2c=\"log\"===t.type?function(t){return M(N(t))}:N,-1!==[\"linear\",\"-\"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=l,t.c2d=t.c2r=t.l2d=t.l2r=f,t.d2p=t.r2p=function(e){return t.l2p(l(e))},t.p2d=t.p2r=N,t.cleanPos=f):\"log\"===t.type?(t.d2r=t.d2l=function(t,e){return E(l(t),e)},t.r2d=t.r2c=function(t){return M(l(t))},t.d2c=t.r2l=l,t.c2d=t.l2r=f,t.c2r=E,t.l2d=M,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return M(N(t))},t.r2p=function(e){return t.l2p(l(e))},t.p2r=N,t.cleanPos=f):\"date\"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=L,t.c2d=t.c2r=t.l2d=t.l2r=C,t.d2p=t.r2p=function(e,r,n){return t.l2p(L(e,0,n))},t.p2d=t.p2r=function(t,e,r){return C(N(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,v,t.calendar)}):\"category\"===t.type?(t.d2c=t.d2l=O,t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=z(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=f,t.r2l=z,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return\"string\"==typeof t&&\"\"!==t?t:f(t)}):\"multicategory\"===t.type&&(t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=D(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=I,t.l2r=t.c2r=f,t.r2l=D,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return Array.isArray(t)||\"string\"==typeof t&&\"\"!==t?t:f(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var u in l)if(u!==r){var c=e[w.id2name(u)];s=s.concat(c._traceIndices)}var f=[[0,{}],[0,{}]],d=[];for(i=0;i<s.length;i++){var v=n[s[i]];if(p in v){var g=v[p],y=v._length||a.minRowLength(g);if(h(g[0])&&h(g[1]))for(o=0;o<y;o++){var m=g[0][o],x=g[1][o];S(m)&&S(x)&&(d.push([m,x]),m in f[0][1]||(f[0][1][m]=f[0][0]++),x in f[1][1]||(f[1][1][x]=f[1][0]++))}}}for(d.sort((function(t,e){var r=f[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var i=f[1][1];return i[t[1]]-i[e[1]]})),i=0;i<d.length;i++)O(d[i])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.limitRange=function(e){var r=t.minallowed,n=t.maxallowed;if(void 0!==r||void 0!==n){e||(e=\"range\");var i=a.nestedProperty(t,e).get(),o=a.simpleMap(i,t.r2l),s=o[1]<o[0];s&&o.reverse();var l=a.simpleMap([r,n],t.r2l);void 0!==r&&o[0]<l[0]&&(i[s?1:0]=r),void 0!==n&&o[1]>l[1]&&(i[s?0:1]=n)}},t.cleanRange=function(e,r){t._cleanRange(e,r),t.limitRange(e)},t._cleanRange=function(e,r){r||(r={}),e||(e=\"range\");var n,i,o=a.nestedProperty(t,e).get();if(i=(i=\"date\"===t.type?a.dfltRange(t.calendar):\"y\"===p?T.DFLTRANGEY:\"realaxis\"===t._name?[0,1]:r.dfltRange||T.DFLTRANGEX).slice(),\"tozero\"!==t.rangemode&&\"nonnegative\"!==t.rangemode||(i[0]=0),o&&2===o.length){var l=null===o[0],u=null===o[1];for(\"date\"!==t.type||t.autorange||(o[0]=a.cleanDate(o[0],v,t.calendar),o[1]=a.cleanDate(o[1],v,t.calendar)),n=0;n<2;n++)if(\"date\"===t.type){if(!a.isDateTime(o[n],t.calendar)){t[e]=i;break}if(t.r2l(o[0])===t.r2l(o[1])){var c=a.constrain(t.r2l(o[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);o[0]=t.l2r(c-1e3),o[1]=t.l2r(c+1e3);break}}else{if(!s(o[n])){if(l||u||!s(o[1-n])){t[e]=i;break}o[n]=o[1-n]*(n?10:.1)}if(o[n]<-d?o[n]=-d:o[n]>d&&(o[n]=d),o[0]===o[1]){var f=Math.max(1,Math.abs(1e-6*o[0]));o[0]-=f,o[1]+=f}}}else a.nestedProperty(t,e).set(i)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=w.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?\"_r\":\"range\",o=t.calendar;t.cleanRange(a);var s,l,u=t.r2l(t[a][0],o),c=t.r2l(t[a][1],o),f=\"y\"===p;if(f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(u,c),Math.max(u,c)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var h=f;u>c&&(h=!h),h&&t._rangebreaks.reverse();var d=h?-1:1;for(t._m2=d*t._length/(Math.abs(c-u)-t._lBreaks),t._B.push(-t._m2*(f?c:u)),s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=B(l.min),l.pmax=B(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error(\"Something went wrong with axis scaling\")},t.maskBreaks=function(e){var r,n,i,o,s,u=t.rangebreaks||[];u._cachedPatterns||(u._cachedPatterns=u.map((function(e){return e.enabled&&e.bounds?a.simpleMap(e.bounds,e.pattern?l:t.d2c):null}))),u._cachedValues||(u._cachedValues=u.map((function(e){return e.enabled&&e.values?a.simpleMap(e.values,t.d2c).sort(a.sorterAsc):null})));for(var c=0;c<u.length;c++){var f=u[c];if(f.enabled)if(f.bounds){var h=f.pattern;switch(n=(r=u._cachedPatterns[c])[0],i=r[1],h){case A:o=(s=new Date(e)).getUTCDay(),n>i&&(i+=7,o<n&&(o+=7));break;case k:o=(s=new Date(e)).getUTCHours()+(s.getUTCMinutes()/60+s.getUTCSeconds()/3600+s.getUTCMilliseconds()/36e5),n>i&&(i+=24,o<n&&(o+=24));break;case\"\":o=e}if(o>=n&&o<i)return v}else for(var p=u._cachedValues[c],d=0;d<p.length;d++)if(i=(n=p[d])+f.dvalue,e>=n&&e<i)return v}return e},t.locateBreaks=function(e,r){var n,i,o,s,u=[];if(!t.rangebreaks)return u;var c=t.rangebreaks.slice().sort((function(t,e){return t.pattern===A&&e.pattern===k?-1:e.pattern===A&&t.pattern===k?1:0})),f=function(t,n){if((t=a.constrain(t,e,r))!==(n=a.constrain(n,e,r))){for(var i=!0,o=0;o<u.length;o++){var s=u[o];t<s.max&&n>=s.min&&(t<s.min&&(s.min=t),n>s.max&&(s.max=n),i=!1)}i&&u.push({min:t,max:n})}};for(n=0;n<c.length;n++){var h=c[n];if(h.enabled)if(h.bounds){var p=e,d=r;h.pattern&&(p=Math.floor(p)),o=(i=a.simpleMap(h.bounds,h.pattern?l:t.r2l))[0],s=i[1];var v,g,w=new Date(p);switch(h.pattern){case A:g=y,v=(s-o+(s<o?7:0))*m,p+=o*m-(w.getUTCDay()*m+w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;case k:g=m,v=(s-o+(s<o?24:0))*x,p+=o*x-(w.getUTCHours()*x+w.getUTCMinutes()*b+w.getUTCSeconds()*_+w.getUTCMilliseconds());break;default:p=Math.min(i[0],i[1]),v=g=(d=Math.max(i[0],i[1]))-p}for(var T=p;T<d;T+=g)f(T,T+v)}else for(var M=a.simpleMap(h.values,t.d2c),S=0;S<M.length;S++)f(o=M[S],s=o+h.dvalue)}return u.sort((function(t,e){return t.min-e.min})),u},t.makeCalcdata=function(e,r,n){var i,o,s,l,u=t.type,c=\"date\"===u&&e[r+\"calendar\"];if(r in e){if(i=e[r],l=e._length||a.minRowLength(i),a.isTypedArray(i)&&(\"linear\"===u||\"log\"===u)){if(l===i.length)return i;if(i.subarray)return i.subarray(0,l)}if(\"multicategory\"===u)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var i=(t[0]||[])[n],a=(t[1]||[])[n];r[n]=I([i,a])}return r}(i,l);for(o=new Array(l),s=0;s<l;s++)o[s]=t.d2c(i[s],0,c,n)}else{var f=r+\"0\"in e?t.d2c(e[r+\"0\"],0,c):0,h=e[\"d\"+r]?Number(e[\"d\"+r]):1;for(i=e[{x:\"y\",y:\"x\"}[r]],l=e._length||i.length,o=new Array(l),s=0;s<l;s++)o[s]=f+s*h}if(t.rangebreaks)for(s=0;s<l;s++)o[s]=t.maskBreaks(o[s]);return o},t.isValidRange=function(e,r){return Array.isArray(e)&&2===e.length&&(r&&null===e[0]||s(t.r2l(e[0])))&&(r&&null===e[1]||s(t.r2l(e[1])))},t.getAutorangeDflt=function(e,r){var n=!t.isValidRange(e,\"nullOk\");return n&&r&&r.reverseDflt?n=\"reversed\":e&&(null===e[0]&&null===e[1]?n=!0:null===e[0]&&null!==e[1]?n=\"min\":null!==e[0]&&null===e[1]&&(n=\"max\")),n},t.isReversed=function(){var e=t.autorange;return\"reversed\"===e||\"min reversed\"===e||\"max reversed\"===e},t.isPtWithinRange=function(e,r){var n=t.c2l(e[p],null,r),i=t.r2l(t.range[0]),a=t.r2l(t.range[1]);return i<a?i<=n&&n<=a:a<=n&&n<=i},t._emptyCategories=function(){t._categories=[],t._categoriesMap={}},t.clearCalc=function(){var r=t._matchGroup;if(r){var n=null,i=null;for(var a in r){var o=e[w.id2name(a)];if(o._categories){n=o._categories,i=o._categoriesMap;break}}n&&i?(t._categories=n,t._categoriesMap=i):t._emptyCategories()}else t._emptyCategories();if(t._initialCategories)for(var s=0;s<t._initialCategories.length;s++)O(t._initialCategories[s])},t.sortByInitialCategories=function(){var n=[];if(t._emptyCategories(),t._initialCategories)for(var i=0;i<t._initialCategories.length;i++)O(t._initialCategories[i]);n=n.concat(t._traceIndices);var a=t._matchGroup;for(var o in a)if(r!==o){var s=e[w.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var U=e._d3locale;\"date\"===t.type&&(t._dateFormat=U?U.timeFormat:i,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=U?U.numberFormat:o,delete t._minDtick,delete t._forceTick0}},59652:function(t){\"use strict\";t.exports=function(t){var e=[\"showexponent\",\"showtickprefix\",\"showticksuffix\"].filter((function(e){return void 0!==t[e]}));if(e.every((function(r){return t[r]===t[e[0]]}))||1===e.length)return t[e[0]]}},96115:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901).contrast,a=r(13838),o=r(59652),s=r(85501);function l(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r(\"enabled\")&&(r(\"dtickrange\"),r(\"value\"))}t.exports=function(t,e,r,u,c){c||(c={});var f=r(\"labelalias\");n.isPlainObject(f)||delete e.labelalias;var h=o(t);if(r(\"showticklabels\")){var p=c.font||{},d=e.color,v=-1!==(e.ticklabelposition||\"\").indexOf(\"inside\")?i(c.bgColor):d&&d!==a.color.dflt?d:p.color;if(n.coerceFont(r,\"tickfont\",{family:p.family,size:p.size,color:v}),c.noTicklabelstep||\"multicategory\"===u||\"log\"===u||r(\"ticklabelstep\"),c.noAng||r(\"tickangle\"),\"category\"!==u){var g=r(\"tickformat\");s(t,e,{name:\"tickformatstops\",inclusionAttr:\"enabled\",handleItemDefaults:l}),e.tickformatstops.length||delete e.tickformatstops,c.noExp||g||\"date\"===u||(r(\"showexponent\",h),r(\"exponentformat\"),r(\"minexponent\"),r(\"separatethousands\"))}}}},38701:function(t,e,r){\"use strict\";var n=r(71828),i=r(13838);t.exports=function(t,e,r,a){var o=a.isMinor,s=o?t.minor||{}:t,l=o?e.minor:e,u=o?i.minor:i,c=o?\"minor.\":\"\",f=n.coerce2(s,l,u,\"ticklen\",o?.6*(e.ticklen||5):void 0),h=n.coerce2(s,l,u,\"tickwidth\",o?e.tickwidth||1:void 0),p=n.coerce2(s,l,u,\"tickcolor\",(o?e.tickcolor:void 0)||l.color);r(c+\"ticks\",!o&&a.outerTicks||f||h||p?\"outside\":\"\")||(delete l.ticklen,delete l.tickwidth,delete l.tickcolor)}},26218:function(t,e,r){\"use strict\";var n=r(66287),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o){o||(o={});var s=o.isMinor,l=s?t.minor||{}:t,u=s?e.minor:e,c=s?\"minor.\":\"\";function f(t){var e=l[t];return void 0!==e?e:(u._template||{})[t]}var h=f(\"tick0\"),p=f(\"dtick\"),d=f(\"tickvals\"),v=r(c+\"tickmode\",i(d)?\"array\":p?\"linear\":\"auto\");if(\"auto\"===v||\"sync\"===v)r(c+\"nticks\");else if(\"linear\"===v){var g=u.dtick=n.dtick(p,a);u.tick0=n.tick0(h,a,e.calendar,g)}else\"multicategory\"!==a&&(void 0===r(c+\"tickvals\")?u.tickmode=\"auto\":s||r(\"ticktext\"))}},66847:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(71828),o=r(91424),s=r(89298);t.exports=function(t,e,r,l){var u=t._fullLayout;if(0!==e.length){var c,f,h,p;l&&(c=l());var d=n.ease(r.easing);return t._transitionData._interruptCallbacks.push((function(){return window.cancelAnimationFrame(p),p=null,function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr0&&(r[o._name+\".range\"]=a.xr0.slice()),a.yr0&&(r[s._name+\".range\"]=a.yr0.slice())}return i.call(\"relayout\",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}()})),f=Date.now(),p=window.requestAnimationFrame((function n(){h=Date.now();for(var a=Math.min(1,(h-f)/r.duration),o=d(a),s=0;s<e.length;s++)g(e[s],o);h-f>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var a=e[n],o=a.plotinfo.xaxis,s=a.plotinfo.yaxis;a.xr1&&(r[o._name+\".range\"]=a.xr1.slice()),a.yr1&&(r[s._name+\".range\"]=a.yr1.slice())}c&&c(),i.call(\"relayout\",t,r).then((function(){for(var t=0;t<e.length;t++)v(e[t].plotinfo)}))}(),p=window.cancelAnimationFrame(n)):p=window.requestAnimationFrame(n)})),Promise.resolve()}function v(t){var e=t.xaxis,r=t.yaxis;u._defs.select(\"#\"+t.clipId+\"> rect\").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(\".scatterlayer .trace\");n.selectAll(\".point\").call(o.setPointGroupScale,1,1),n.selectAll(\".textpoint\").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function g(e,r){var n=e.plotinfo,i=n.xaxis,l=n.yaxis,u=i._length,c=l._length,f=!!e.xr1,h=!!e.yr1,p=[];if(f){var d=a.simpleMap(e.xr0,i.r2l),v=a.simpleMap(e.xr1,i.r2l),g=d[1]-d[0],y=v[1]-v[0];p[0]=(d[0]*(1-r)+r*v[0]-d[0])/(d[1]-d[0])*u,p[2]=u*(1-r+r*y/g),i.range[0]=i.l2r(d[0]*(1-r)+r*v[0]),i.range[1]=i.l2r(d[1]*(1-r)+r*v[1])}else p[0]=0,p[2]=u;if(h){var m=a.simpleMap(e.yr0,l.r2l),x=a.simpleMap(e.yr1,l.r2l),b=m[1]-m[0],_=x[1]-x[0];p[1]=(m[1]*(1-r)+r*x[1]-m[1])/(m[0]-m[1])*c,p[3]=c*(1-r+r*_/b),l.range[0]=i.l2r(m[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(m[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=c;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=f?u/p[2]:1,T=h?c/p[3]:1,k=f?p[0]:0,A=h?p[1]:0,M=f?p[0]/p[2]*u:0,S=h?p[1]/p[3]*c:0,E=i._offset-M,L=l._offset-S;n.clipRect.call(o.setTranslate,k,A).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},951:function(t,e,r){\"use strict\";var n=r(73972).traceIs,i=r(4322);function a(t){return{v:\"x\",h:\"y\"}[t.orientation||\"v\"]}function o(t,e){var r=a(t),i=n(t,\"box-violin\"),o=n(t._fullInput||{},\"candlestick\");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+\"0\"]}t.exports=function(t,e,r,s){r(\"autotypenumbers\",s.autotypenumbersDflt),\"-\"===r(\"type\",(s.splomStash||{}).type)&&(function(t,e){if(\"-\"===t.type){var r,s=t._id,l=s.charAt(0);-1!==s.indexOf(\"scene\")&&(s=l);var u=function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n];if(\"splom\"===i.type&&i._length>0&&(i[\"_\"+r+\"axes\"]||{})[e])return i;if((i[r+\"axis\"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+\"0\"])return i}}}(e,s,l);if(u)if(\"histogram\"!==u.type||l!=={v:\"y\",h:\"x\"}[u.orientation||\"v\"]){var c=l+\"calendar\",f=u[c],h={noMultiCategory:!n(u,\"cartesian\")||n(u,\"noMultiCategory\")};if(\"box\"===u.type&&u._hasPreCompStats&&l==={h:\"x\",v:\"y\"}[u.orientation||\"v\"]&&(h.noMultiCategory=!0),h.autotypenumbers=t.autotypenumbers,o(u,l)){var p=a(u),d=[];for(r=0;r<e.length;r++){var v=e[r];n(v,\"box-violin\")&&(v[l+\"axis\"]||l)===s&&(void 0!==v[p]?d.push(v[p][0]):void 0!==v.name?d.push(v.name):d.push(\"text\"),v[c]!==f&&(f=void 0))}t.type=i(d,f,h)}else if(\"splom\"===u.type){var g=u.dimensions[u._axesDim[s]];g.visible&&(t.type=i(g.values,f,h))}else t.type=i(u[l]||[u[l+\"0\"]],f,h)}else t.type=\"linear\"}}(e,s.data),\"-\"===e.type?e.type=\"linear\":t.type=e.type)}},31137:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828);function a(t,e,r){var n,a,o,s=!1;if(\"data\"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if(\"layout\"!==e.type)return!1;n=t._fullLayout}return a=i.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==a&&(s=!0),o[e.prop]=a,{changed:s,value:a}}function o(t,e){var r=[],n=e[0],a={};if(\"string\"==typeof n)a[n]=e[1];else{if(!i.isPlainObject(n))return r;a=n}return l(a,(function(t,e,n){r.push({type:\"layout\",prop:t,value:n})}),\"\",0),r}function s(t,e){var r,n,a,o,s=[];if(n=e[0],a=e[1],r=e[2],o={},\"string\"==typeof n)o[n]=a;else{if(!i.isPlainObject(n))return s;o=n,void 0===r&&(r=a)}return void 0===r&&(r=null),l(o,(function(e,n,i){var a,o;if(Array.isArray(i)){o=i.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),a=[];for(var u=0;u<l;u++)a[u]=r?r[u]:u}else o=i,a=r?r.slice():null;if(null===a)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var c=o;o=[];for(var f=0;f<a.length;f++)o[f]=c}o.length=Math.min(a.length,o.length)}s.push({type:\"data\",prop:e,traces:a,value:o})}),\"\",0),s}function l(t,e,r,n){Object.keys(t).forEach((function(a){var o=t[a];if(\"_\"!==a[0]){var s=r+(n>0?\".\":\"\")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}}))}e.manageCommandObserver=function(t,r,n,o){var s={},l=!0;r&&r._commandObserver&&(s=r._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var u=e.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(r&&r._commandObserver){if(u)return s;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,s}if(u){a(t,u,s.cache),s.check=function(){if(l){var e=a(t,u,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:u.type,prop:u.prop,traces:u.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var c=[\"plotly_relayout\",\"plotly_redraw\",\"plotly_restyle\",\"plotly_update\",\"plotly_animatingframe\",\"plotly_afterplot\"],f=0;f<c.length;f++)t._internalOn(c[f],s.check);s.remove=function(){for(var e=0;e<c.length;e++)t._removeInternalListener(c[e],s.check)}}else i.log(\"Unable to automatically bind plot updates to API command\"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},r&&(r._commandObserver=s),s},e.hasSimpleAPICommandBindings=function(t,r,n){var i,a,o=r.length;for(i=0;i<o;i++){var s,l=r[i],u=l.method,c=l.args;if(Array.isArray(c)||(c=[]),!u)return!1;var f=e.computeAPICommandBindings(t,u,c);if(1!==f.length)return!1;if(a){if((s=f[0]).type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var h=0;h<a.traces.length;h++)if(a.traces[h]!==s.traces[h])return!1}else if(s.prop!==a.prop)return!1}else a=f[0],Array.isArray(a.traces)&&a.traces.sort();var p=(s=f[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=i)}return a},e.executeAPICommand=function(t,e,r){if(\"skip\"===e)return Promise.resolve();var a=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return a.apply(null,o).catch((function(t){return i.warn(\"API call to Plotly.\"+e+\" rejected.\",t),Promise.reject(t)}))},e.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case\"restyle\":n=s(t,r);break;case\"relayout\":n=o(0,r);break;case\"update\":n=s(t,[r[0],r[2]]).concat(o(0,[r[1]]));break;case\"animate\":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==[\"string\",\"number\"].indexOf(typeof e[0][0])?[{type:\"layout\",prop:\"_currentFrame\",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},27670:function(t,e,r){\"use strict\";var n=r(1426).extendFlat;e.Y=function(t,e){e=e||{};var r={valType:\"info_array\",editType:(t=t||{}).editType,items:[{valType:\"number\",min:0,max:1,editType:t.editType},{valType:\"number\",min:0,max:1,editType:t.editType}],dflt:[0,1]},i=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(i.row={valType:\"integer\",min:0,dflt:0,editType:t.editType},i.column={valType:\"integer\",min:0,dflt:0,editType:t.editType}),i},e.c=function(t,e,r,n){var i=n&&n.x||[0,1],a=n&&n.y||[0,1],o=e.grid;if(o){var s=r(\"domain.column\");void 0!==s&&(s<o.columns?i=o._domains.x[s]:delete t.domain.column);var l=r(\"domain.row\");void 0!==l&&(l<o.rows?a=o._domains.y[l]:delete t.domain.row)}var u=r(\"domain.x\",i),c=r(\"domain.y\",a);u[0]<u[1]||(t.domain.x=i.slice()),c[0]<c[1]||(t.domain.y=a.slice())}},41940:function(t){\"use strict\";t.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:\"string\",noBlank:!0,strict:!0,editType:e},size:{valType:\"number\",min:1,editType:e},color:{valType:\"color\",editType:r},editType:e};return t.autoSize&&(n.size.dflt=\"auto\"),t.autoColor&&(n.color.dflt=\"auto\"),t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},31391:function(t){\"use strict\";t.exports={_isLinkedToArray:\"frames_entry\",group:{valType:\"string\"},name:{valType:\"string\"},traces:{valType:\"any\"},baseframe:{valType:\"string\"},data:{valType:\"any\"},layout:{valType:\"any\"}}},78776:function(t,e){\"use strict\";e.projNames={airy:\"airy\",aitoff:\"aitoff\",\"albers usa\":\"albersUsa\",albers:\"albers\",august:\"august\",\"azimuthal equal area\":\"azimuthalEqualArea\",\"azimuthal equidistant\":\"azimuthalEquidistant\",baker:\"baker\",bertin1953:\"bertin1953\",boggs:\"boggs\",bonne:\"bonne\",bottomley:\"bottomley\",bromley:\"bromley\",collignon:\"collignon\",\"conic conformal\":\"conicConformal\",\"conic equal area\":\"conicEqualArea\",\"conic equidistant\":\"conicEquidistant\",craig:\"craig\",craster:\"craster\",\"cylindrical equal area\":\"cylindricalEqualArea\",\"cylindrical stereographic\":\"cylindricalStereographic\",eckert1:\"eckert1\",eckert2:\"eckert2\",eckert3:\"eckert3\",eckert4:\"eckert4\",eckert5:\"eckert5\",eckert6:\"eckert6\",eisenlohr:\"eisenlohr\",\"equal earth\":\"equalEarth\",equirectangular:\"equirectangular\",fahey:\"fahey\",\"foucaut sinusoidal\":\"foucautSinusoidal\",foucaut:\"foucaut\",ginzburg4:\"ginzburg4\",ginzburg5:\"ginzburg5\",ginzburg6:\"ginzburg6\",ginzburg8:\"ginzburg8\",ginzburg9:\"ginzburg9\",gnomonic:\"gnomonic\",\"gringorten quincuncial\":\"gringortenQuincuncial\",gringorten:\"gringorten\",guyou:\"guyou\",hammer:\"hammer\",hill:\"hill\",homolosine:\"homolosine\",hufnagel:\"hufnagel\",hyperelliptical:\"hyperelliptical\",kavrayskiy7:\"kavrayskiy7\",lagrange:\"lagrange\",larrivee:\"larrivee\",laskowski:\"laskowski\",loximuthal:\"loximuthal\",mercator:\"mercator\",miller:\"miller\",mollweide:\"mollweide\",\"mt flat polar parabolic\":\"mtFlatPolarParabolic\",\"mt flat polar quartic\":\"mtFlatPolarQuartic\",\"mt flat polar sinusoidal\":\"mtFlatPolarSinusoidal\",\"natural earth\":\"naturalEarth\",\"natural earth1\":\"naturalEarth1\",\"natural earth2\":\"naturalEarth2\",\"nell hammer\":\"nellHammer\",nicolosi:\"nicolosi\",orthographic:\"orthographic\",patterson:\"patterson\",\"peirce quincuncial\":\"peirceQuincuncial\",polyconic:\"polyconic\",\"rectangular polyconic\":\"rectangularPolyconic\",robinson:\"robinson\",satellite:\"satellite\",\"sinu mollweide\":\"sinuMollweide\",sinusoidal:\"sinusoidal\",stereographic:\"stereographic\",times:\"times\",\"transverse mercator\":\"transverseMercator\",\"van der grinten\":\"vanDerGrinten\",\"van der grinten2\":\"vanDerGrinten2\",\"van der grinten3\":\"vanDerGrinten3\",\"van der grinten4\":\"vanDerGrinten4\",wagner4:\"wagner4\",wagner6:\"wagner6\",wiechel:\"wiechel\",\"winkel tripel\":\"winkel3\",winkel3:\"winkel3\"},e.axesNames=[\"lonaxis\",\"lataxis\"],e.lonaxisSpan={orthographic:180,\"azimuthal equal area\":360,\"azimuthal equidistant\":360,\"conic conformal\":180,gnomonic:160,stereographic:180,\"transverse mercator\":180,\"*\":360},e.lataxisSpan={\"conic conformal\":150,stereographic:179.5,\"*\":180},e.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:\"equirectangular\",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:\"albers usa\"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:\"conic conformal\",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:\"mercator\",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:\"mercator\",projRotate:[0,0,0]},\"north america\":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:\"conic conformal\",projRotate:[-100,0,0],projParallels:[29.5,45.5]},\"south america\":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:\"mercator\",projRotate:[0,0,0]}},e.clipPad=.001,e.precision=.1,e.landColor=\"#F0DC82\",e.waterColor=\"#3399FF\",e.locationmodeToLayer={\"ISO-3\":\"countries\",\"USA-states\":\"subunits\",\"country names\":\"countries\"},e.sphereSVG={type:\"Sphere\"},e.fillLayers={ocean:1,land:1,lakes:1},e.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},e.layers=[\"bg\",\"ocean\",\"land\",\"lakes\",\"subunits\",\"countries\",\"coastlines\",\"rivers\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"frontplot\"],e.layersForChoropleth=[\"bg\",\"ocean\",\"land\",\"subunits\",\"countries\",\"coastlines\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"rivers\",\"lakes\",\"frontplot\"],e.layerNameToAdjective={ocean:\"ocean\",land:\"land\",lakes:\"lake\",subunits:\"subunit\",countries:\"country\",coastlines:\"coastline\",rivers:\"river\",frame:\"frame\"}},69082:function(t,e,r){\"use strict\";var n=r(39898),i=r(27362),a=i.geoPath,o=i.geoDistance,s=r(65704),l=r(73972),u=r(71828),c=u.strTranslate,f=r(7901),h=r(91424),p=r(30211),d=r(74875),v=r(89298),g=r(71739).getAutoRange,y=r(28569),m=r(47322).prepSelect,x=r(47322).clearOutline,b=r(47322).selectOnClick,_=r(74455),w=r(78776),T=r(41327),k=r(90973),A=r(96892).zL;function M(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}var S=M.prototype;function E(t,e){var r=w.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:\"Polygon\",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}t.exports=function(t){return new M(t)},S.plot=function(t,e,r,n){var i=this;if(n)return i.update(t,e,!0);i._geoCalcData=t,i._fullLayout=e;var a=e[this.id],o=[],s=!1;for(var l in w.layerNameToAdjective)if(\"frame\"!==l&&a[\"show\"+l]){s=!0;break}for(var u=!1,c=0;c<t.length;c++){var f=t[0][0].trace;f._geo=i,f.locationmode&&(s=!0);var h=f.marker;if(h){var p=h.angle,d=h.angleref;(p||\"north\"===d||\"previous\"===d)&&(u=!0)}}if(this._hasMarkerAngles=u,s){var v=k.getTopojsonName(a);null!==i.topojson&&v===i.topojsonName||(i.topojsonName=v,void 0===PlotlyGeoAssets.topojson[i.topojsonName]&&o.push(i.fetchTopojson()))}o=o.concat(T.fetchTraceGeoData(t)),r.push(new Promise((function(r,n){Promise.all(o).then((function(){i.topojson=PlotlyGeoAssets.topojson[i.topojsonName],i.update(t,e),r()})).catch(n)})))},S.fetchTopojson=function(){var t=this,e=k.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise((function(r,i){n.json(e,(function(n,a){if(n)return 404===n.status?i(new Error([\"plotly.js could not find topojson file at\",e+\".\",\"Make sure the *topojsonURL* plot config option\",\"is set properly.\"].join(\" \"))):i(new Error([\"unexpected error while fetching topojson file at\",e].join(\" \")));PlotlyGeoAssets.topojson[t.topojsonName]=a,r()}))}))},S.update=function(t,e,r){var n=e[this.id];this.hasChoropleth=!1;for(var i=0;i<t.length;i++){var a=t[i],o=a[0].trace;\"choropleth\"===o.type&&(this.hasChoropleth=!0),!0===o.visible&&o._length>0&&o._module.calcGeoJSON(a,e)}if(!r){if(this.updateProjection(t,e))return;this.viewInitial&&this.scope===n.scope||this.saveViewInitial(n)}this.scope=n.scope,this.updateBaseLayers(e,n),this.updateDims(e,n),this.updateFx(e,n),d.generalUpdatePerTraceModule(this.graphDiv,this,t,n);var s=this.layers.frontplot.select(\".scatterlayer\");this.dataPoints.point=s.selectAll(\".point\"),this.dataPoints.text=s.selectAll(\"text\"),this.dataPaths.line=s.selectAll(\".js-line\");var l=this.layers.backplot.select(\".choroplethlayer\");this.dataPaths.choropleth=l.selectAll(\"path\"),this._render()},S.updateProjection=function(t,e){var r=this.graphDiv,n=e[this.id],l=e._size,c=n.domain,f=n.projection,h=n.lonaxis,p=n.lataxis,d=h._ax,v=p._ax,y=this.projection=function(t){var e=t.projection,r=e.type,n=w.projNames[r];n=\"geo\"+u.titleCase(n);for(var l=(i[n]||s[n])(),c=t._isSatellite?180*Math.acos(1/e.distance)/Math.PI:t._isClipped?w.lonaxisSpan[r]/2:null,f=[\"center\",\"rotate\",\"parallels\",\"clipExtent\"],h=function(t){return t?l:[]},p=0;p<f.length;p++){var d=f[p];\"function\"!=typeof l[d]&&(l[d]=h)}return l.isLonLatOverEdges=function(t){if(null===l(t))return!0;if(c){var e=l.rotate();return o(t,[-e[0],-e[1]])>c*Math.PI/180}return!1},l.getPath=function(){return a().projection(l)},l.getBounds=function(t){return l.getPath().bounds(t)},l.precision(w.precision),t._isSatellite&&l.tilt(e.tilt).distance(e.distance),c&&l.clipAngle(c-w.clipPad),l}(n),m=[[l.l+l.w*c.x[0],l.t+l.h*(1-c.y[1])],[l.l+l.w*c.x[1],l.t+l.h*(1-c.y[0])]],x=n.center||{},b=f.rotation||{},_=h.range||[],T=p.range||[];if(n.fitbounds){d._length=m[1][0]-m[0][0],v._length=m[1][1]-m[0][1],d.range=g(r,d),v.range=g(r,v);var k=(d.range[0]+d.range[1])/2,A=(v.range[0]+v.range[1])/2;if(n._isScoped)x={lon:k,lat:A};else if(n._isClipped){x={lon:k,lat:A},b={lon:k,lat:A,roll:b.roll};var M=f.type,S=w.lonaxisSpan[M]/2||180,L=w.lataxisSpan[M]/2||90;_=[k-S,k+S],T=[A-L,A+L]}else x={lon:k,lat:A},b={lon:k,lat:b.lat,roll:b.roll}}y.center([x.lon-b.lon,x.lat-b.lat]).rotate([-b.lon,-b.lat,b.roll]).parallels(f.parallels);var C=E(_,T);y.fitExtent(m,C);var P=this.bounds=y.getBounds(C),O=this.fitScale=y.scale(),I=y.translate();if(n.fitbounds){var D=y.getBounds(E(d.range,v.range)),z=Math.min((P[1][0]-P[0][0])/(D[1][0]-D[0][0]),(P[1][1]-P[0][1])/(D[1][1]-D[0][1]));isFinite(z)?y.scale(z*O):u.warn(\"Something went wrong during\"+this.id+\"fitbounds computations.\")}else y.scale(f.scale*O);var R=this.midPt=[(P[0][0]+P[1][0])/2,(P[0][1]+P[1][1])/2];if(y.translate([I[0]+(R[0]-I[0]),I[1]+(R[1]-I[1])]).clipExtent(P),n._isAlbersUsa){var F=y([x.lon,x.lat]),B=y.translate();y.translate([B[0]-(F[0]-B[0]),B[1]-(F[1]-B[1])])}},S.updateBaseLayers=function(t,e){var r=this,i=r.topojson,a=r.layers,o=r.basePaths;function s(t){return\"lonaxis\"===t||\"lataxis\"===t}function l(t){return Boolean(w.lineLayers[t])}function u(t){return Boolean(w.fillLayers[t])}var c=(this.hasChoropleth?w.layersForChoropleth:w.layers).filter((function(t){return l(t)||u(t)?e[\"show\"+t]:!s(t)||e[t].showgrid})),p=r.framework.selectAll(\".layer\").data(c,String);p.exit().each((function(t){delete a[t],delete o[t],n.select(this).remove()})),p.enter().append(\"g\").attr(\"class\",(function(t){return\"layer \"+t})).each((function(t){var e=a[t]=n.select(this);\"bg\"===t?r.bgRect=e.append(\"rect\").style(\"pointer-events\",\"all\"):s(t)?o[t]=e.append(\"path\").style(\"fill\",\"none\"):\"backplot\"===t?e.append(\"g\").classed(\"choroplethlayer\",!0):\"frontplot\"===t?e.append(\"g\").classed(\"scatterlayer\",!0):l(t)?o[t]=e.append(\"path\").style(\"fill\",\"none\").style(\"stroke-miterlimit\",2):u(t)&&(o[t]=e.append(\"path\").style(\"stroke\",\"none\"))})),p.order(),p.each((function(r){var n=o[r],a=w.layerNameToAdjective[r];\"frame\"===r?n.datum(w.sphereSVG):l(r)||u(r)?n.datum(A(i,i.objects[r])):s(r)&&n.datum(function(t,e,r){var n,i,a,o=e[t],s=w.scopeDefaults[e.scope];\"lonaxis\"===t?(n=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):\"lataxis\"===t&&(n=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:\"linear\",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};v.setConvert(l,r);var u=v.calcTicks(l);e.isScoped||\"lonaxis\"!==t||u.pop();for(var c=u.length,f=new Array(c),h=0;h<c;h++)for(var p=u[h].x,d=f[h]=[],g=i[0];g<i[1]+2.5;g+=2.5)d.push(a(p,g));return{type:\"MultiLineString\",coordinates:f}}(r,e,t)).call(f.stroke,e[r].gridcolor).call(h.dashLine,e[r].griddash,e[r].gridwidth),l(r)?n.call(f.stroke,e[a+\"color\"]).call(h.dashLine,\"\",e[a+\"width\"]):u(r)&&n.call(f.fill,e[a+\"color\"])}))},S.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,i=r[0][0]-n,a=r[0][1]-n,o=r[1][0]-i+n,s=r[1][1]-a+n;h.setRect(this.clipRect,i,a,o,s),this.bgRect.call(h.setRect,i,a,o,s).call(f.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=o,this.yaxis._offset=a,this.yaxis._length=s},S.updateFx=function(t,e){var r=this,i=r.graphDiv,a=r.bgRect,o=t.dragmode,s=t.clickmode;if(!r.isStatic){var c={element:r.bgRect.node(),gd:i,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:function(t,e){e.isRect?(t.range={})[r.id]=[f([e.xmin,e.ymin]),f([e.xmax,e.ymax])]:(t.lassoPoints={})[r.id]=e.map(f)}},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(t){2===t&&x(i)}};\"pan\"===o?(a.node().onmousedown=null,a.call(_(r,e)),a.on(\"dblclick.zoom\",(function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+\".\"+n]=t[n];l.call(\"_guiRelayout\",i,e),i.emit(\"plotly_doubleclick\",null)})),i._context._scrollZoom.geo||a.on(\"wheel.zoom\",null)):\"select\"!==o&&\"lasso\"!==o||(a.on(\".zoom\",null),c.prepFn=function(t,e,r){m(t,e,r,c,o)},y.init(c)),a.on(\"mousemove\",(function(){var t=r.projection.invert(u.getPositionFromD3Event());if(!t)return y.unhover(i,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},p.hover(i,n.event,r.id)})),a.on(\"mouseout\",(function(){i._dragging||y.unhover(i,n.event)})),a.on(\"click\",(function(){\"select\"!==o&&\"lasso\"!==o&&(s.indexOf(\"select\")>-1&&b(n.event,i,[r.xaxis],[r.yaxis],r.id,c),s.indexOf(\"event\")>-1&&p.click(i,n.event))}))}function f(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},S.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i=\"clip\"+r._uid+t.id;t.clipDef=r._clips.append(\"clipPath\").attr(\"id\",i),t.clipRect=t.clipDef.append(\"rect\"),t.framework=n.select(t.container).append(\"g\").attr(\"class\",\"geo \"+t.id).call(h.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:\"x\",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:\"y\",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},v.setConvert(t.mockAxis,r)},S.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,i=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,\"projection.scale\":n.scale},e=t._isScoped?{\"center.lon\":r.lon,\"center.lat\":r.lat}:t._isClipped?{\"projection.rotation.lon\":i.lon,\"projection.rotation.lat\":i.lat}:{\"center.lon\":r.lon,\"center.lat\":r.lat,\"projection.rotation.lon\":i.lon},u.extendFlat(this.viewInitial,e)},S.render=function(t){this._hasMarkerAngles&&t?this.plot(this._geoCalcData,this._fullLayout,[],!0):this._render()},S._render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?c(r[0],r[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?\"none\":null}for(t in this.basePaths)this.basePaths[t].attr(\"d\",r);for(t in this.dataPaths)this.dataPaths[t].attr(\"d\",(function(t){return r(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr(\"display\",i).attr(\"transform\",n)}},44622:function(t,e,r){\"use strict\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(69082),o=\"geo\",s=i(o),l={};l[o]={valType:\"subplotid\",dflt:o,editType:\"calc\"},t.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:r(77519),supplyLayoutDefaults:r(82161),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s<i.length;s++){var l=i[s],u=n(r,o,l),c=e[l]._subplot;c||(c=a({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=c),c.plot(u,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var i=e[r[n]];i._subplot.updateFx(e,i)}},clean:function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},77519:function(t,e,r){\"use strict\";var n=r(22399),i=r(27670).Y,a=r(79952).P,o=r(78776),s=r(30962).overrideAll,l=r(78607),u={range:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},showgrid:{valType:\"boolean\",dflt:!1},tick0:{valType:\"number\",dflt:0},dtick:{valType:\"number\"},gridcolor:{valType:\"color\",dflt:n.lightLine},gridwidth:{valType:\"number\",min:0,dflt:1},griddash:a};(t.exports=s({domain:i({name:\"geo\"},{}),fitbounds:{valType:\"enumerated\",values:[!1,\"locations\",\"geojson\"],dflt:!1,editType:\"plot\"},resolution:{valType:\"enumerated\",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:\"enumerated\",values:l(o.scopeDefaults),dflt:\"world\"},projection:{type:{valType:\"enumerated\",values:l(o.projNames)},rotation:{lon:{valType:\"number\"},lat:{valType:\"number\"},roll:{valType:\"number\"}},tilt:{valType:\"number\",dflt:0},distance:{valType:\"number\",min:1.001,dflt:2},parallels:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},scale:{valType:\"number\",min:0,dflt:1}},center:{lon:{valType:\"number\"},lat:{valType:\"number\"}},visible:{valType:\"boolean\",dflt:!0},showcoastlines:{valType:\"boolean\"},coastlinecolor:{valType:\"color\",dflt:n.defaultLine},coastlinewidth:{valType:\"number\",min:0,dflt:1},showland:{valType:\"boolean\",dflt:!1},landcolor:{valType:\"color\",dflt:o.landColor},showocean:{valType:\"boolean\",dflt:!1},oceancolor:{valType:\"color\",dflt:o.waterColor},showlakes:{valType:\"boolean\",dflt:!1},lakecolor:{valType:\"color\",dflt:o.waterColor},showrivers:{valType:\"boolean\",dflt:!1},rivercolor:{valType:\"color\",dflt:o.waterColor},riverwidth:{valType:\"number\",min:0,dflt:1},showcountries:{valType:\"boolean\"},countrycolor:{valType:\"color\",dflt:n.defaultLine},countrywidth:{valType:\"number\",min:0,dflt:1},showsubunits:{valType:\"boolean\"},subunitcolor:{valType:\"color\",dflt:n.defaultLine},subunitwidth:{valType:\"number\",min:0,dflt:1},showframe:{valType:\"boolean\"},framecolor:{valType:\"color\",dflt:n.defaultLine},framewidth:{valType:\"number\",min:0,dflt:1},bgcolor:{valType:\"color\",dflt:n.background},lonaxis:u,lataxis:u},\"plot\",\"from-root\")).uirevision={valType:\"any\",editType:\"none\"}},82161:function(t,e,r){\"use strict\";var n=r(71828),i=r(49119),a=r(27659).NG,o=r(78776),s=r(77519),l=o.axesNames;function u(t,e,r,i){var s=a(i.fullData,\"geo\",i.id).map((function(t){return t._expandedIndex})),u=r(\"resolution\"),c=r(\"scope\"),f=o.scopeDefaults[c],h=r(\"projection.type\",f.projType),p=e._isAlbersUsa=\"albers usa\"===h;p&&(c=e.scope=\"usa\");var d=e._isScoped=\"world\"!==c,v=e._isSatellite=\"satellite\"===h,g=e._isConic=-1!==h.indexOf(\"conic\")||\"albers\"===h,y=e._isClipped=!!o.lonaxisSpan[h];if(!1===t.visible){var m=n.extendDeep({},e._template);m.showcoastlines=!1,m.showcountries=!1,m.showframe=!1,m.showlakes=!1,m.showland=!1,m.showocean=!1,m.showrivers=!1,m.showsubunits=!1,m.lonaxis&&(m.lonaxis.showgrid=!1),m.lataxis&&(m.lataxis.showgrid=!1),e._template=m}for(var x=r(\"visible\"),b=0;b<l.length;b++){var _,w=l[b],T=[30,10][b];if(d)_=f[w+\"Range\"];else{var k=o[w+\"Span\"],A=(k[h]||k[\"*\"])/2,M=r(\"projection.rotation.\"+w.substr(0,3),f.projRotate[b]);_=[M-A,M+A]}var S=r(w+\".range\",_);r(w+\".tick0\"),r(w+\".dtick\",T),r(w+\".showgrid\",!!x&&void 0)&&(r(w+\".gridcolor\"),r(w+\".gridwidth\"),r(w+\".griddash\")),e[w]._ax={type:\"linear\",_id:w.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:S.slice(),_m:1,_input:{}}}var E=e.lonaxis.range,L=e.lataxis.range,C=E[0],P=E[1];C>0&&P<0&&(P+=360);var O,I,D,z=(C+P)/2;if(!p){var R=d?f.projRotate:[z,0,0];O=r(\"projection.rotation.lon\",R[0]),r(\"projection.rotation.lat\",R[1]),r(\"projection.rotation.roll\",R[2]),r(\"showcoastlines\",!d&&x)&&(r(\"coastlinecolor\"),r(\"coastlinewidth\")),r(\"showocean\",!!x&&void 0)&&r(\"oceancolor\")}p?(I=-96.6,D=38.7):(I=d?z:O,D=(L[0]+L[1])/2),r(\"center.lon\",I),r(\"center.lat\",D),v&&(r(\"projection.tilt\"),r(\"projection.distance\")),g&&r(\"projection.parallels\",f.projParallels||[0,60]),r(\"projection.scale\"),r(\"showland\",!!x&&void 0)&&r(\"landcolor\"),r(\"showlakes\",!!x&&void 0)&&r(\"lakecolor\"),r(\"showrivers\",!!x&&void 0)&&(r(\"rivercolor\"),r(\"riverwidth\")),r(\"showcountries\",d&&\"usa\"!==c&&x)&&(r(\"countrycolor\"),r(\"countrywidth\")),(\"usa\"===c||\"north america\"===c&&50===u)&&(r(\"showsubunits\",x),r(\"subunitcolor\"),r(\"subunitwidth\")),d||r(\"showframe\",x)&&(r(\"framecolor\"),r(\"framewidth\")),r(\"bgcolor\"),r(\"fitbounds\")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):y?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}t.exports=function(t,e,r){i(t,e,r,{type:\"geo\",attributes:s,handleDefaults:u,fullData:r,partition:\"y\"})}},74455:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(73972),o=Math.PI/180,s=180/Math.PI,l={cursor:\"pointer\"},u={cursor:\"auto\"};function c(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],u=o._fullLayout,c=u[n],f={},h={};function p(t,e){f[n+\".\"+t]=i.nestedProperty(l,t).get(),a.call(\"_storeDirectGUIEdit\",s,u._preGUI,f);var r=i.nestedProperty(c,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),h[n+\".\"+t]=e)}r(p),p(\"projection.scale\",e.scale()/t.fitScale),p(\"fitbounds\",!1),o.emit(\"plotly_relayout\",h)}function h(t,e){var r=c(0,e);function i(r){var n=e.invert(t.midPt);r(\"center.lon\",n[0]),r(\"center.lat\",n[1])}return r.on(\"zoomstart\",(function(){n.select(this).style(l)})).on(\"zoom\",(function(){e.scale(n.event.scale).translate(n.event.translate),t.render(!0);var r=e.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":r[0],\"geo.center.lat\":r[1]})})).on(\"zoomend\",(function(){n.select(this).style(u),f(t,e,i)})),r}function p(t,e){var r,i,a,o,s,h,p,d,v,g=c(0,e);function y(t){return e.invert(t)}function m(r){var n=e.rotate(),i=e.invert(t.midPt);r(\"projection.rotation.lon\",-n[0]),r(\"center.lon\",i[0]),r(\"center.lat\",i[1])}return g.on(\"zoomstart\",(function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)})).on(\"zoom\",(function(){if(h=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>2||Math.abs(n[1]-t[1])>2}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(h)&&(d=y(h),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=h),v=!0,t.render(!0);var l=e.rotate(),u=e.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":u[0],\"geo.center.lat\":u[1],\"geo.projection.rotation.lon\":-l[0]})})).on(\"zoomend\",(function(){n.select(this).style(u),v&&f(t,e,m)})),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=c(0,e),h=function(t){for(var e=0,r=arguments.length,i=[];++e<r;)i.push(arguments[e]);var a=n.dispatch.apply(null,i);return a.of=function(e,r){return function(i){var o;try{o=i.sourceEvent=n.event,i.target=t,n.event=i,a[i.type].apply(e,r)}finally{n.event=o}}},a}(a,\"zoomstart\",\"zoom\",\"zoomend\"),p=0,d=a.on;function y(t){var r=e.rotate();t(\"projection.rotation.lon\",-r[0]),t(\"projection.rotation.lat\",-r[1])}return a.on(\"zoomstart\",(function(){n.select(this).style(l);var t,u,c,f,y,b,_,w,T,k,A,M=n.mouse(this),S=e.rotate(),E=S,L=e.translate(),C=(u=.5*(t=S)[0]*o,c=.5*t[1]*o,f=.5*t[2]*o,y=Math.sin(u),b=Math.cos(u),_=Math.sin(c),w=Math.cos(c),T=Math.sin(f),[b*w*(k=Math.cos(f))+y*_*T,y*w*k-b*_*T,b*_*k+y*w*T,b*w*T-y*_*k]);r=v(e,M),d.call(a,\"zoom\",(function(){var t,a,o,l,u,c,f,p,d,y,b=n.mouse(this);if(e.scale(i.k=n.event.scale),r){if(v(e,b)){e.rotate(S).translate(L);var _=v(e,b),w=function(t,e){if(t&&e){var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),i=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),a=Math.sin(i)/n;return n&&[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}}(r,_),T=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((o=(t=C)[0],l=t[1],u=t[2],c=t[3],[o*(f=(a=w)[0])-l*(p=a[1])-u*(d=a[2])-c*(y=a[3]),o*p+l*f+u*y-c*d,o*d-l*y+u*f+c*p,o*y+l*d-u*p+c*f])),k=i.r=function(t,e,r){var n=m(e,2,t[0]);n=m(n,1,t[1]),n=m(n,0,t[2]-r[2]);var i,a,o=e[0],l=e[1],u=e[2],c=n[0],f=n[1],h=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(f)>d?(a=(f>0?90:-90)-p,i=0):(a=Math.asin(f/d)*s-p,i=Math.sqrt(d*d-f*f));var v=180-a-2*p,y=(Math.atan2(h,c)-Math.atan2(u,i))*s,x=(Math.atan2(h,c)-Math.atan2(u,-i))*s;return g(r[0],r[1],a,y)<=g(r[0],r[1],v,x)?[a,y,r[2]]:[v,x,r[2]]}(T,r,E);isFinite(k[0])&&isFinite(k[1])&&isFinite(k[2])||(k=E),e.rotate(k),E=k}}else r=v(e,M=b);h.of(this,arguments)({type:\"zoom\"})})),A=h.of(this,arguments),p++||A({type:\"zoomstart\"})})).on(\"zoomend\",(function(){var r;n.select(this).style(u),d.call(a,\"zoom\",null),r=h.of(this,arguments),--p||r({type:\"zoomend\"}),f(t,e,y)})).on(\"zoom.redraw\",(function(){t.render(!0);var r=e.rotate();t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.projection.rotation.lon\":-r[0],\"geo.projection.rotation.lat\":-r[1]})})),n.rebind(a,h,\"on\")}function v(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t,e,r,n){var i=y(r-t),a=y(n-e);return Math.sqrt(i*i+a*a)}function y(t){return(t%360+540)%360-180}function m(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),u=Math.sin(n);return i[a]=t[a]*l-t[s]*u,i[s]=t[s]*l+t[a]*u,i}function x(t,e){for(var r=0,n=0,i=t.length;n<i;++n)r+=t[n]*e[n];return r}t.exports=function(t,e){var r=t.projection;return(e._isScoped?h:e._isClipped?d:p)(t,r)}},27659:function(t,e,r){\"use strict\";var n=r(73972),i=r(85555).SUBPLOT_PATTERN;e.AU=function(t,e,r){var i=n.subplotsRegistry[e];if(!i)return[];for(var a=i.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[a]===r&&o.push(l)}return o},e.a0=function(t,e){var r,i=[],a=[];if(!(r=\"string\"==typeof e?n.getModule(e).plot:\"function\"==typeof e?e:e.plot))return[i,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module&&l._module.plot===r?i.push(s):a.push(s))}return[i,a]},e.NG=function(t,e,r){if(!n.subplotsRegistry[e])return[];var a,o,s,l=n.subplotsRegistry[e].attr,u=[];if(\"gl2d\"===e){var c=r.match(i);o=\"x\"+c[1],s=\"y\"+c[2]}for(var f=0;f<t.length;f++)a=t[f],\"gl2d\"===e&&n.traceIs(a,\"gl2d\")?a[l[0]]===o&&a[l[1]]===s&&u.push(a):a[l]===r&&u.push(a);return u}},75071:function(t,e,r){\"use strict\";var n=r(16825),i=r(1195),a=r(48956),o=r(85555),s=r(38520);function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}t.exports=function(t){var e=t.mouseContainer,r=t.glplot,u=new l(e,r);function c(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function f(e,n,i){var a,s,l=t.calcDataBox(),f=r.viewBox,h=u.lastPos[0],p=u.lastPos[1],d=o.MINDRAG*r.pixelRatio,v=o.MINZOOM*r.pixelRatio;function g(e,r,n){var i=Math.min(r,n),a=Math.max(r,n);i!==a?(l[e]=i,l[e+2]=a,u.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,i*=r.pixelRatio,i=f[3]-f[1]-i,t.fullLayout.dragmode){case\"zoom\":if(e){var y=n/(f[2]-f[0])*(l[2]-l[0])+l[0],m=i/(f[3]-f[1])*(l[3]-l[1])+l[1];u.boxInited||(u.boxStart[0]=y,u.boxStart[1]=m,u.dragStart[0]=n,u.dragStart[1]=i),u.boxEnd[0]=y,u.boxEnd[1]=m,u.boxInited=!0,u.boxEnabled||u.boxStart[0]===u.boxEnd[0]&&u.boxStart[1]===u.boxEnd[1]||(u.boxEnabled=!0);var x=Math.abs(u.dragStart[0]-n)<v,b=Math.abs(u.dragStart[1]-i)<v;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][r]){if(-1!==e[i][n])return!0;break}return!1}()||x&&b)x&&(u.boxEnd[0]=u.boxStart[0]),b&&(u.boxEnd[1]=u.boxStart[1]);else{a=u.boxEnd[0]-u.boxStart[0],s=u.boxEnd[1]-u.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*_)>Math.abs(s)?(u.boxEnd[1]=u.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),u.boxEnd[1]<l[1]?(u.boxEnd[1]=l[1],u.boxEnd[0]=u.boxStart[0]+(l[1]-u.boxStart[1])/Math.abs(_)):u.boxEnd[1]>l[3]&&(u.boxEnd[1]=l[3],u.boxEnd[0]=u.boxStart[0]+(l[3]-u.boxStart[1])/Math.abs(_))):(u.boxEnd[0]=u.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),u.boxEnd[0]<l[0]?(u.boxEnd[0]=l[0],u.boxEnd[1]=u.boxStart[1]+(l[0]-u.boxStart[0])*Math.abs(_)):u.boxEnd[0]>l[2]&&(u.boxEnd[0]=l[2],u.boxEnd[1]=u.boxStart[1]+(l[2]-u.boxStart[0])*Math.abs(_)))}}else u.boxEnabled?(a=u.boxStart[0]!==u.boxEnd[0],s=u.boxStart[1]!==u.boxEnd[1],a||s?(a&&(g(0,u.boxStart[0],u.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,u.boxStart[1],u.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),u.boxEnabled=!1,u.boxInited=!1):u.boxInited&&(u.boxInited=!1);break;case\"pan\":u.boxEnabled=!1,u.boxInited=!1,e?(u.panning||(u.dragStart[0]=n,u.dragStart[1]=i),Math.abs(u.dragStart[0]-n)<d&&(n=u.dragStart[0]),Math.abs(u.dragStart[1]-i)<d&&(i=u.dragStart[1]),a=(h-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-i)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=a,l[2]+=a,l[1]+=s,l[3]+=s,t.setRanges(l),u.panning=!0,u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations()):u.panning&&(u.panning=!1,t.relayoutCallback())}u.lastPos[0]=n,u.lastPos[1]=i}return u.mouseListener=n(e,f),e.addEventListener(\"touchstart\",(function(t){var r=a(t.changedTouches[0],e);f(0,r[0],r[1]),f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\"touchmove\",(function(t){t.preventDefault();var r=a(t.changedTouches[0],e);f(1,r[0],r[1]),t.preventDefault()}),!!s&&{passive:!1}),e.addEventListener(\"touchend\",(function(t){f(0,u.lastPos[0],u.lastPos[1]),t.preventDefault()}),!!s&&{passive:!1}),u.wheelListener=i(e,(function(e,n){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=r.viewBox,o=u.lastPos[0],s=u.lastPos[1],l=Math.exp(5*n/(a[3]-a[1])),f=o/(a[2]-a[0])*(i[2]-i[0])+i[0],h=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-f)*l+f,i[2]=(i[2]-f)*l+f,i[1]=(i[1]-h)*l+h,i[3]=(i[3]-h)*l+h,t.setRanges(i),u.lastInputTime=Date.now(),c(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),!0),u}},82961:function(t,e,r){\"use strict\";var n=r(89298),i=r(78614);function a(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=[\"x\",\"y\"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=[\"sans-serif\",\"sans-serif\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title=\"\",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont=\"sans-serif\",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=a.prototype,s=[\"xaxis\",\"yaxis\"];o.merge=function(t){var e,r,n,a,o,l,u,c,f,h,p;for(this.titleEnable=!1,this.backgroundColor=i(t.plot_bgcolor),h=0;h<2;++h){var d=(e=s[h]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?\"\":r.title.text,p=0;p<=2;p+=2)this.labelEnable[h+p]=!1,this.labels[h+p]=n,this.labelColor[h+p]=i(r.title.font.color),this.labelFont[h+p]=r.title.font.family,this.labelSize[h+p]=r.title.font.size,this.labelPad[h+p]=this.getLabelPad(e,r),this.tickEnable[h+p]=!1,this.tickColor[h+p]=i((r.tickfont||{}).color),this.tickAngle[h+p]=\"auto\"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[h+p]=this.getTickPad(r),this.tickMarkLength[h+p]=0,this.tickMarkWidth[h+p]=r.tickwidth||0,this.tickMarkColor[h+p]=i(r.tickcolor),this.borderLineEnable[h+p]=!1,this.borderLineColor[h+p]=i(r.linecolor),this.borderLineWidth[h+p]=r.linewidth||0;u=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!u,l=this.hasAxisInAltrPos(e,r)&&!u,a=r.mirror||!1,c=u?-1!==String(a).indexOf(\"all\"):!!a,f=u?\"allticks\"===a:-1!==String(a).indexOf(\"ticks\"),o?this.labelEnable[h]=!0:l&&(this.labelEnable[h+2]=!0),o?this.tickEnable[h]=r.showticklabels:l&&(this.tickEnable[h+2]=r.showticklabels),(o||c)&&(this.borderLineEnable[h]=r.showline),(l||c)&&(this.borderLineEnable[h+2]=r.showline),(o||f)&&(this.tickMarkLength[h]=this.getTickMarkLength(r)),(l||f)&&(this.tickMarkLength[h+2]=this.getTickMarkLength(r)),this.gridLineEnable[h]=r.showgrid,this.gridLineColor[h]=i(r.gridcolor),this.gridLineWidth[h]=r.gridwidth,this.zeroLineEnable[h]=r.zeroline,this.zeroLineColor[h]=i(r.zerolinecolor),this.zeroLineWidth[h]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return\"xaxis\"===t?\"bottom\"===r:\"yaxis\"===t?\"left\"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return\"xaxis\"===t?\"top\"===r:\"yaxis\"===t?\"right\"===r:void 0},o.getLabelPad=function(t,e){var r=1.5,n=e.title.font.size,i=e.showticklabels;return\"xaxis\"===t?\"top\"===e.side?n*(r+(i?1:0))-10:n*(r+(i?.5:0))-10:\"yaxis\"===t?\"right\"===e.side?10+n*(r+(i?1:.5)):10+n*(r+(i?.5:0)):void 0},o.getTickPad=function(t){return\"outside\"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return\"inside\"===t.ticks?-e:e},t.exports=function(t){return new a(t)}},4796:function(t,e,r){\"use strict\";var n=r(30962).overrideAll,i=r(92918),a=r(10820),o=r(77922),s=r(85555),l=r(93612),u=r(528),c=r(27659).NG;e.name=\"gl2d\",e.attr=[\"xaxis\",\"yaxis\"],e.idRoot=[\"x\",\"y\"],e.idRegex=s.idRegex,e.attrRegex=s.attrRegex,e.attributes=r(89502),e.supplyLayoutDefaults=function(t,e,r){e._has(\"cartesian\")||l.supplyLayoutDefaults(t,e,r)},e.layoutAttrOverrides=n(l.layoutAttributes,\"plot\",\"from-root\"),e.baseLayoutAttrOverrides=n({plot_bgcolor:a.plot_bgcolor,hoverlabel:u.hoverlabel},\"plot\",\"nested\"),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,a=0;a<n.length;a++){var o=n[a],s=e._plots[o],l=c(r,\"gl2d\",o),u=s._scene2d;void 0===u&&(u=new i({id:o,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=u),u.plot(l,t.calcdata,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots.gl2d||[],a=0;a<i.length;a++){var o=i[a],s=n._plots[o];s._scene2d&&0===c(t,\"gl2d\",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},e.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var i=e._plots[r[n]]._scene2d,a=i.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":a,x:0,y:0,width:\"100%\",height:\"100%\",preserveAspectRatio:\"none\"}),i.destroy()}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++)e._plots[r[n]]._scene2d.updateFx(e.dragmode)}},92918:function(t,e,r){\"use strict\";var n,i,a=r(73972),o=r(89298),s=r(30211),l=r(9330).gl_plot2d,u=r(9330).gl_spikes2d,c=r(9330).gl_select_box,f=r(40372),h=r(82961),p=r(75071),d=r(58617),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x=r(64505),b=x.drawMode,_=x.selectMode,w=[\"xaxis\",\"yaxis\"],T=r(85555).SUBPLOT_PATTERN;function k(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=h(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=u(this.glplot),this.selectBox=c(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}t.exports=k;var A=k.prototype;A.makeFramework=function(){if(this.staticPlot){if(!(i||(n=document.createElement(\"canvas\"),i=f({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"Error creating static canvas/context for image server\");this.canvas=n,this.gl=i}else{var t=this.container.querySelector(\".gl-canvas-focus\"),e=f({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width=\"100%\",r.style.height=\"100%\",r.style.position=\"absolute\",r.style.top=\"0px\",r.style.left=\"0px\",r.style[\"pointer-events\"]=\"none\",this.updateSize(r);var a=this.svgContainer=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");a.style.position=\"absolute\",a.style.top=a.style.left=\"0px\",a.style.width=a.style.height=\"100%\",a.style[\"z-index\"]=20,a.style[\"pointer-events\"]=\"none\";var o=this.mouseContainer=document.createElement(\"div\");o.style.position=\"absolute\",o.style[\"pointer-events\"]=\"auto\",this.pickCanvas=this.container.querySelector(\".gl-canvas-pick\");var s=this.container;s.appendChild(a),s.appendChild(o);var l=this;o.addEventListener(\"mouseout\",(function(){l.isMouseOver=!1,l.unhover()})),o.addEventListener(\"mouseover\",(function(){l.isMouseOver=!0}))},A.toImage=function(t){t||(t=\"png\"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var u=0;u<4;++u){var c=a[4*(r*o+l)+u];a[4*(r*o+l)+u]=a[4*(r*s+l)+u],a[4*(r*s+l)+u]=c}var f=document.createElement(\"canvas\");f.width=r,f.height=i;var h,p=f.getContext(\"2d\",{willReadFrequently:!0}),d=p.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case\"jpeg\":h=f.toDataURL(\"image/jpeg\");break;case\"webp\":h=f.toDataURL(\"image/webp\");break;default:h=f.toDataURL(\"image/png\")}return this.staticPlot&&this.container.removeChild(n),h},A.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,i=r.height,a=0|Math.ceil(e*n),o=0|Math.ceil(e*i);return t.width===a&&t.height===o||(t.width=a,t.height=o),t},A.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+\"\";return t},A.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(T),r=\"xaxis\"+e[1],n=\"yaxis\"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},A.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,i={},o=i[e._name+\".range\"]=e.range.slice(),s=i[r._name+\".range\"]=r.range.slice();i[e._name+\".autorange\"]=e.autorange,i[r._name+\".autorange\"]=r.autorange,a.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,i);var l=n[e._name];l.range=o,l.autorange=e.autorange;var u=n[r._name];u.range=s,u.autorange=r.autorange,i.lastInputTime=this.camera.lastInputTime,t.emit(\"plotly_relayout\",i)},A.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],i=e[r];if(n.length!==i.length)return!0;for(var a=0;a<n.length;++a)if(n[a].x!==i[a].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},A.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&a.getComponentMethod(\"annotations\",\"drawOne\")(t,r)}},A.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map((function(e){t[e].dispose(),delete t[e]})),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener(\"wheel\",this.camera.wheelListener),this.camera=null}},A.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var i=r.width,a=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:r._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis,_size:r._size}};y(s,this.xaxis),y(s,this.yaxis);var l,u,c=r._size,f=this.xaxis.domain,h=this.yaxis.domain;for(o.viewBox=[c.l+f[0]*c.w,c.b+h[0]*c.h,i-c.r-(1-f[1])*c.w,a-c.t-(1-h[1])*c.h],this.mouseContainer.style.width=c.w*(f[1]-f[0])+\"px\",this.mouseContainer.style.height=c.h*(h[1]-h[0])+\"px\",this.mouseContainer.height=c.h*(h[1]-h[0]),this.mouseContainer.style.left=c.l+f[0]*c.w+\"px\",this.mouseContainer.style.top=c.t+(1-h[1])*c.h+\"px\",u=0;u<2;++u)(l=this[w[u]])._length=o.viewBox[u+2]-o.viewBox[u],m(this.graphDiv,l),l.setScale();g(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},A.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,i=t.r2l,a=e.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},A.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,i=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[i(t[1]),i(t[3])]},A.updateTraces=function(t,e){var r,n,i,a=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<a.length;r++){var o=a[r],s=this.traces[o];for(n=0;n<t.length;n++)if((i=t[n]).uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){i=t[r];var l=e[r],u=this.traces[i.uid];u?u.update(i,l):(u=i._module.plot(this,i,l),this.traces[i.uid]=u)}this.glplot.objects.sort((function(t,e){return t._trace.index-e._trace.index}))},A.updateFx=function(t){_(t)||b(t)?(this.pickCanvas.style[\"pointer-events\"]=\"none\",this.mouseContainer.style[\"pointer-events\"]=\"none\"):(this.pickCanvas.style[\"pointer-events\"]=\"auto\",this.mouseContainer.style[\"pointer-events\"]=\"auto\"),this.mouseContainer.style.cursor=\"pan\"===t?\"move\":\"zoom\"===t?\"crosshair\":null},A.emitPointAction=function(t,e){for(var r,n=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===n&&(r=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},A.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,i=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var a,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&\"zoom\"===i.dragmode){this.selectBox.enabled=!0;for(var u=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],c=0;c<2;c++)e.boxStart[c]===e.boxEnd[c]&&(u[c]=t.dataBox[c],u[c+2]=t.dataBox[c+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var f=i._size,h=this.xaxis.domain,p=this.yaxis.domain,d=(a=t.pick(o/t.pixelRatio+f.l+h[0]*f.w,l/t.pixelRatio-(f.t+(1-p[1])*f.h)))&&a.object._trace.handlePick(a);if(d&&n&&this.emitPointAction(d,\"plotly_click\"),a&&\"skip\"!==a.object._trace.hoverinfo&&i.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var v=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),v.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,\"plotly_hover\");var g=this.fullData[v.trace.index]||{},y=v.pointIndex,m=s.castHoverinfo(g,i,y);if(m&&\"all\"!==m){var x=m.split(\"+\");-1===x.indexOf(\"x\")&&(v.traceCoord[0]=void 0),-1===x.indexOf(\"y\")&&(v.traceCoord[1]=void 0),-1===x.indexOf(\"z\")&&(v.traceCoord[2]=void 0),-1===x.indexOf(\"text\")&&(v.textLabel=void 0),-1===x.indexOf(\"name\")&&(v.name=void 0)}s.loneHover({x:v.screenCoord[0],y:v.screenCoord[1],xLabel:this.hoverFormatter(\"xaxis\",v.traceCoord[0]),yLabel:this.hoverFormatter(\"yaxis\",v.traceCoord[1]),zLabel:v.traceCoord[2],text:v.textLabel,name:v.name,color:s.castHoverOption(g,y,\"bgcolor\")||v.color,borderColor:s.castHoverOption(g,y,\"bordercolor\"),fontFamily:s.castHoverOption(g,y,\"font.family\"),fontSize:s.castHoverOption(g,y,\"font.size\"),fontColor:s.castHoverOption(g,y,\"font.color\"),nameLength:s.castHoverOption(g,y,\"namelength\"),textAlign:s.castHoverOption(g,y,\"align\")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},A.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit(\"plotly_unhover\"),s.loneUnhover(this.svgContainer))},A.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),\"hover\").text}}},58547:function(t,e,r){\"use strict\";var n=r(30962).overrideAll,i=r(528),a=r(33539),o=r(27659).NG,s=r(71828),l=r(77922),u=\"gl3d\",c=\"scene\";e.name=u,e.attr=c,e.idRoot=c,e.idRegex=e.attrRegex=s.counterRegex(\"scene\"),e.attributes=r(59084),e.layoutAttributes=r(65500),e.baseLayoutAttrOverrides=n({hoverlabel:i.hoverlabel},\"plot\",\"nested\"),e.supplyLayoutDefaults=r(24682),e.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots[u],i=0;i<n.length;i++){var s=n[i],l=o(r,u,s),c=e[s],f=c.camera,h=c._scene;h||(h=new a({id:s,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:f},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:f.up.x,y:f.up.y,z:f.up.z},eye:{x:f.eye.x,y:f.eye.y,z:f.eye.z},center:{x:f.center.x,y:f.center.y,z:f.center.z}}),h.plot(l,e,t.layout)}},e.clean=function(t,e,r,n){for(var i=n._subplots[u]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(\".annotation-\"+o).remove())}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=e._size,i=0;i<r.length;i++){var a=e[r[i]],o=a.domain,s=a._scene,c=s.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:\"none\"}),s.destroy()}},e.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return\"1\"===e&&(e=\"\"),c+e}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[u],n=0;n<r.length;n++)e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}},59084:function(t){\"use strict\";t.exports={scene:{valType:\"subplotid\",dflt:\"scene\",editType:\"calc+clearAxisTypes\"}}},77894:function(t,e,r){\"use strict\";var n=r(7901),i=r(13838),a=r(1426).extendFlat,o=r(30962).overrideAll;t.exports=o({visible:i.visible,showspikes:{valType:\"boolean\",dflt:!0},spikesides:{valType:\"boolean\",dflt:!0},spikethickness:{valType:\"number\",min:0,dflt:2},spikecolor:{valType:\"color\",dflt:n.defaultLine},showbackground:{valType:\"boolean\",dflt:!1},backgroundcolor:{valType:\"color\",dflt:\"rgba(204, 204, 204, 0.5)\"},showaxeslabels:{valType:\"boolean\",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:\"plot\"},rangemode:i.rangemode,minallowed:i.minallowed,maxallowed:i.maxallowed,range:a({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],anim:!1}),tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:\"rgb(204, 204, 204)\"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},\"plot\",\"from-root\")},3277:function(t,e,r){\"use strict\";var n=r(84267).mix,i=r(71828),a=r(44467),o=r(77894),s=r(951),l=r(71453),u=[\"xaxis\",\"yaxis\",\"zaxis\"];t.exports=function(t,e,r){var c,f;function h(t,e){return i.coerce(c,f,o,t,e)}for(var p=0;p<u.length;p++){var d=u[p];c=t[d]||{},(f=a.newContainer(e,d))._id=d[0]+r.scene,f._name=d,s(c,f,h,r),l(c,f,h,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelstep:!0,noTicklabelposition:!0,noTicklabeloverflow:!0,noInsiderange:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),h(\"gridcolor\",n(f.color,r.bgColor,72.72727272727273).toRgbString()),h(\"title.text\",d[0]),f.setScale=i.noop,h(\"showspikes\")&&(h(\"spikesides\"),h(\"spikethickness\"),h(\"spikecolor\",f.color)),h(\"showaxeslabels\"),h(\"showbackground\")&&h(\"backgroundcolor\")}}},30422:function(t,e,r){\"use strict\";var n=r(78614),i=r(71828),a=[\"xaxis\",\"yaxis\",\"zaxis\"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=[\"x\",\"y\",\"z\"],this.labelEnable=[!0,!0,!0],this.labelFont=[\"Open Sans\",\"Open Sans\",\"Open Sans\"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=this,o=0;o<3;++o){var s=e[a[o]];s.visible?(r.labels[o]=t._meta?i.templateString(s.title.text,t._meta):s.title.text,\"font\"in s.title&&(s.title.font.color&&(r.labelColor[o]=n(s.title.font.color)),s.title.font.family&&(r.labelFont[o]=s.title.font.family),s.title.font.size&&(r.labelSize[o]=s.title.font.size)),\"showline\"in s&&(r.lineEnable[o]=s.showline),\"linecolor\"in s&&(r.lineColor[o]=n(s.linecolor)),\"linewidth\"in s&&(r.lineWidth[o]=s.linewidth),\"showgrid\"in s&&(r.gridEnable[o]=s.showgrid),\"gridcolor\"in s&&(r.gridColor[o]=n(s.gridcolor)),\"gridwidth\"in s&&(r.gridWidth[o]=s.gridwidth),\"log\"===s.type?r.zeroEnable[o]=!1:\"zeroline\"in s&&(r.zeroEnable[o]=s.zeroline),\"zerolinecolor\"in s&&(r.zeroLineColor[o]=n(s.zerolinecolor)),\"zerolinewidth\"in s&&(r.zeroLineWidth[o]=s.zerolinewidth),\"ticks\"in s&&s.ticks?r.lineTickEnable[o]=!0:r.lineTickEnable[o]=!1,\"ticklen\"in s&&(r.lineTickLength[o]=r._defaultLineTickLength[o]=s.ticklen),\"tickcolor\"in s&&(r.lineTickColor[o]=n(s.tickcolor)),\"tickwidth\"in s&&(r.lineTickWidth[o]=s.tickwidth),\"tickangle\"in s&&(r.tickAngle[o]=\"auto\"===s.tickangle?-3600:Math.PI*-s.tickangle/180),\"showticklabels\"in s&&(r.tickEnable[o]=s.showticklabels),\"tickfont\"in s&&(s.tickfont.color&&(r.tickColor[o]=n(s.tickfont.color)),s.tickfont.family&&(r.tickFont[o]=s.tickfont.family),s.tickfont.size&&(r.tickSize[o]=s.tickfont.size)),\"mirror\"in s?-1!==[\"ticks\",\"all\",\"allticks\"].indexOf(s.mirror)?(r.lineTickMirror[o]=!0,r.lineMirror[o]=!0):!0===s.mirror?(r.lineTickMirror[o]=!1,r.lineMirror[o]=!0):(r.lineTickMirror[o]=!1,r.lineMirror[o]=!1):r.lineMirror[o]=!1,\"showbackground\"in s&&!1!==s.showbackground?(r.backgroundEnable[o]=!0,r.backgroundColor[o]=n(s.backgroundcolor)):r.backgroundEnable[o]=!1):(r.tickEnable[o]=!1,r.labelEnable[o]=!1,r.lineEnable[o]=!1,r.lineTickEnable[o]=!1,r.gridEnable[o]=!1,r.zeroEnable[o]=!1,r.backgroundEnable[o]=!1)}},t.exports=function(t,e){var r=new o;return r.merge(t,e),r}},24682:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(73972),o=r(49119),s=r(3277),l=r(65500),u=r(27659).NG,c=\"gl3d\";function f(t,e,r,n){for(var o=r(\"bgcolor\"),l=i.combine(o,n.paper_bgcolor),f=[\"up\",\"center\",\"eye\"],h=0;h<f.length;h++)r(\"camera.\"+f[h]+\".x\"),r(\"camera.\"+f[h]+\".y\"),r(\"camera.\"+f[h]+\".z\");r(\"camera.projection.type\");var p=!!r(\"aspectratio.x\")&&!!r(\"aspectratio.y\")&&!!r(\"aspectratio.z\"),d=r(\"aspectmode\",p?\"manual\":\"auto\");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},\"manual\"===d&&(e.aspectmode=\"auto\"),t.aspectmode=e.aspectmode);var v=u(n.fullData,c,n.id);s(t,e,{font:n.font,scene:n.id,data:v,bgColor:l,calendar:n.calendar,autotypenumbersDflt:n.autotypenumbersDflt,fullLayout:n.fullLayout}),a.getComponentMethod(\"annotations3d\",\"handleDefaults\")(t,e,n);var g=n.getDfltFromLayout(\"dragmode\");if(!1!==g&&!g)if(g=\"orbit\",t.camera&&t.camera.up){var y=t.camera.up.x,m=t.camera.up.y,x=t.camera.up.z;0!==x&&(y&&m&&x?x/Math.sqrt(y*y+m*m+x*x)>.999&&(g=\"turntable\"):g=\"turntable\")}else g=\"turntable\";r(\"dragmode\",g),r(\"hovermode\",n.getDfltFromLayout(\"hovermode\"))}t.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:c,attributes:l,handleDefaults:f,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},65500:function(t,e,r){\"use strict\";var n=r(77894),i=r(27670).Y,a=r(1426).extendFlat,o=r(71828).counterRegex;function s(t,e,r){return{x:{valType:\"number\",dflt:t,editType:\"camera\"},y:{valType:\"number\",dflt:e,editType:\"camera\"},z:{valType:\"number\",dflt:r,editType:\"camera\"},editType:\"camera\"}}t.exports={_arrayAttrRegexps:[o(\"scene\",\".annotations\",!0)],bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"plot\"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:\"enumerated\",values:[\"perspective\",\"orthographic\"],dflt:\"perspective\",editType:\"calc\"},editType:\"calc\"},editType:\"camera\"},domain:i({name:\"scene\",editType:\"plot\"}),aspectmode:{valType:\"enumerated\",values:[\"auto\",\"cube\",\"data\",\"manual\"],dflt:\"auto\",editType:\"plot\",impliedEdits:{\"aspectratio.x\":void 0,\"aspectratio.y\":void 0,\"aspectratio.z\":void 0}},aspectratio:{x:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},y:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},z:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},editType:\"plot\",impliedEdits:{aspectmode:\"manual\"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:\"enumerated\",values:[\"orbit\",\"turntable\",\"zoom\",\"pan\",!1],editType:\"plot\"},hovermode:{valType:\"enumerated\",values:[\"closest\",!1],dflt:\"closest\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"plot\",_deprecated:{cameraposition:{valType:\"info_array\",editType:\"camera\"}}}},13133:function(t,e,r){\"use strict\";var n=r(78614),i=[\"xaxis\",\"yaxis\",\"zaxis\"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},t.exports=function(t){var e=new a;return e.merge(t),e}},96085:function(t,e,r){\"use strict\";t.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],u=0;u<3;++u){var c=s[a[u]];if(c._length=(r[u].hi-r[u].lo)*r[u].pixelsPerDataUnit/t.dataScale[u],Math.abs(c._length)===1/0||isNaN(c._length))l[u]=[];else{c._input_range=c.range.slice(),c.range[0]=r[u].lo/t.dataScale[u],c.range[1]=r[u].hi/t.dataScale[u],c._m=1/(t.dataScale[u]*r[u].pixelsPerDataUnit),c.range[0]===c.range[1]&&(c.range[0]-=1,c.range[1]+=1);var f=c.tickmode;if(\"auto\"===c.tickmode){c.tickmode=\"linear\";var h=c.nticks||i.constrain(c._length/40,4,9);n.autoTicks(c,Math.abs(c.range[1]-c.range[0])/h)}for(var p=n.calcTicks(c,{msUTC:!0}),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[u],\"date\"===c.type&&(p[d].text=p[d].text.replace(/\\<br\\>/g,\" \"));l[u]=p,c.tickmode=f}}for(e.ticks=l,u=0;u<3;++u)for(o[u]=.5*(t.glplot.bounds[0][u]+t.glplot.bounds[1][u]),d=0;d<2;++d)e.bounds[d][u]=t.glplot.bounds[d][u];t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a<n.length;++a)i[a]=n[a].x;e[r]=i}return e}(l)};var n=r(89298),i=r(71828),a=[\"xaxis\",\"yaxis\",\"zaxis\"],o=[0,0,0]},63538:function(t){\"use strict\";function e(t,e){var r,n,i=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)i[n]+=t[4*r+n]*e[r];return i}t.exports=function(t,r){return e(t.projection,e(t.view,e(t.model,[r[0],r[1],r[2],1])))}},33539:function(t,e,r){\"use strict\";var n,i,a=r(9330).gl_plot3d,o=a.createCamera,s=a.createScene,l=r(40372),u=r(38520),c=r(73972),f=r(71828),h=f.preserveDrawingBuffer(),p=r(89298),d=r(30211),v=r(78614),g=r(58617),y=r(63538),m=r(30422),x=r(13133),b=r(96085),_=r(71739).applyAutorangeOptions,w=!1;function T(t,e){var r=document.createElement(\"div\"),n=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");i.style.position=\"absolute\",i.style.top=i.style.left=\"0px\",i.style.width=i.style.height=\"100%\",i.style[\"z-index\"]=20,i.style[\"pointer-events\"]=\"none\",r.appendChild(i),this.svgContainer=i,r.id=t.id,r.style.position=\"absolute\",r.style.top=r.style.left=\"0px\",r.style.width=r.style.height=\"100%\",n.appendChild(r),this.fullLayout=e,this.id=t.id||\"scene\",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=m(e,e[this.id]),this.spikeOptions=x(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=c.getComponentMethod(\"annotations3d\",\"convert\"),this.drawAnnotations=c.getComponentMethod(\"annotations3d\",\"draw\"),this.initializeGLPlot()}var k=T.prototype;k.prepareOptions=function(){var t=this,e={canvas:t.canvas,gl:t.gl,glOptions:{preserveDrawingBuffer:h,premultipliedAlpha:!0,antialias:!0},container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:t.camera,pixelRatio:t.pixelRatio};if(t.staticMode){if(!(i||(n=document.createElement(\"canvas\"),i=l({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"error creating static canvas/context for image server\");e.gl=i,e.canvas=n}return e};var A=!0;k.tryCreatePlot=function(){var t=this,e=t.prepareOptions(),r=!0;try{t.glplot=s(e)}catch(n){if(t.staticMode||!A||h)r=!1;else{f.warn([\"webgl setup failed possibly due to\",\"false preserveDrawingBuffer config.\",\"The mobile/tablet device may not be detected by is-mobile module.\",\"Enabling preserveDrawingBuffer in second attempt to create webgl scene...\"].join(\" \"));try{h=e.glOptions.preserveDrawingBuffer=!0,t.glplot=s(e)}catch(t){h=e.glOptions.preserveDrawingBuffer=!1,r=!1}}}return A=!1,r},k.initializeGLCamera=function(){var t=this,e=t.fullSceneLayout.camera,r=\"orthographic\"===e.projection.type;t.camera=o(t.container,{center:[e.center.x,e.center.y,e.center.z],eye:[e.eye.x,e.eye.y,e.eye.z],up:[e.up.x,e.up.y,e.up.z],_ortho:r,zoomMin:.01,zoomMax:100,mode:\"orbit\"})},k.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,r=e.layout,n=function(){var e={};return t.isCameraChanged(r)&&(e[t.id+\".camera\"]=t.getCamera()),t.isAspectChanged(r)&&(e[t.id+\".aspectratio\"]=t.glplot.getAspectratio(),\"manual\"!==r[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=r[t.id].aspectmode=e[t.id+\".aspectmode\"]=\"manual\")),e},i=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=n();t.saveLayout(r),t.graphDiv.emit(\"plotly_relayout\",e)}};return t.glplot.canvas&&(t.glplot.canvas.addEventListener(\"mouseup\",(function(){i(t)})),t.glplot.canvas.addEventListener(\"touchstart\",(function(){w=!0})),t.glplot.canvas.addEventListener(\"wheel\",(function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n=r.deltaX>r.deltaY?1.1:1/1.1,a=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*a.x,y:n*a.y,z:n*a.z})}i(t)}}),!!u&&{passive:!1}),t.glplot.canvas.addEventListener(\"mousemove\",(function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit(\"plotly_relayouting\",e)}})),t.staticMode||t.glplot.canvas.addEventListener(\"webglcontextlost\",(function(r){e&&e.emit&&e.emit(\"plotly_webglcontextlost\",{event:r,layer:t.id})}),!1)),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},k.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,i=e.container.getBoundingClientRect();r._fullLayout._calcInverseTransform(r);var a=r._fullLayout._invScaleX,o=r._fullLayout._invScaleY,s=i.width*a,l=i.height*o;n.setAttributeNS(null,\"viewBox\",\"0 0 \"+s+\" \"+l),n.setAttributeNS(null,\"width\",s),n.setAttributeNS(null,\"height\",l),b(e),e.glplot.axes.update(e.axesOptions);for(var u=Object.keys(e.traces),c=null,h=e.glplot.selection,v=0;v<u.length;++v)\"skip\"!==(t=e.traces[u[v]]).data.hoverinfo&&t.handlePick(h)&&(c=t),t.setContourLevels&&t.setContourLevels();function g(t,r,n){var i=e.fullSceneLayout[t+\"axis\"];return\"log\"!==i.type&&(r=i.d2l(r)),p.hoverLabelText(i,r,n)}if(null!==c){var m=y(e.glplot.cameraParams,h.dataCoordinate);t=c.data;var x,_=r._fullData[t.index],T=h.index,k={xLabel:g(\"x\",h.traceCoordinate[0],t.xhoverformat),yLabel:g(\"y\",h.traceCoordinate[1],t.yhoverformat),zLabel:g(\"z\",h.traceCoordinate[2],t.zhoverformat)},A=d.castHoverinfo(_,e.fullLayout,T),M=(A||\"\").split(\"+\"),S=A&&\"all\"===A;_.hovertemplate||S||(-1===M.indexOf(\"x\")&&(k.xLabel=void 0),-1===M.indexOf(\"y\")&&(k.yLabel=void 0),-1===M.indexOf(\"z\")&&(k.zLabel=void 0),-1===M.indexOf(\"text\")&&(h.textLabel=void 0),-1===M.indexOf(\"name\")&&(c.name=void 0));var E=[];\"cone\"===t.type||\"streamtube\"===t.type?(k.uLabel=g(\"x\",h.traceCoordinate[3],t.uhoverformat),(S||-1!==M.indexOf(\"u\"))&&E.push(\"u: \"+k.uLabel),k.vLabel=g(\"y\",h.traceCoordinate[4],t.vhoverformat),(S||-1!==M.indexOf(\"v\"))&&E.push(\"v: \"+k.vLabel),k.wLabel=g(\"z\",h.traceCoordinate[5],t.whoverformat),(S||-1!==M.indexOf(\"w\"))&&E.push(\"w: \"+k.wLabel),k.normLabel=h.traceCoordinate[6].toPrecision(3),(S||-1!==M.indexOf(\"norm\"))&&E.push(\"norm: \"+k.normLabel),\"streamtube\"===t.type&&(k.divergenceLabel=h.traceCoordinate[7].toPrecision(3),(S||-1!==M.indexOf(\"divergence\"))&&E.push(\"divergence: \"+k.divergenceLabel)),h.textLabel&&E.push(h.textLabel),x=E.join(\"<br>\")):\"isosurface\"===t.type||\"volume\"===t.type?(k.valueLabel=p.hoverLabelText(e._mockAxis,e._mockAxis.d2l(h.traceCoordinate[3]),t.valuehoverformat),E.push(\"value: \"+k.valueLabel),h.textLabel&&E.push(h.textLabel),x=E.join(\"<br>\")):x=h.textLabel;var L={x:h.traceCoordinate[0],y:h.traceCoordinate[1],z:h.traceCoordinate[2],data:_._input,fullData:_,curveNumber:_.index,pointNumber:T};d.appendArrayPointValue(L,_,T),t._module.eventData&&(L=_._module.eventData(L,h,_,{},T));var C={points:[L]};if(e.fullSceneLayout.hovermode){var P=[];d.loneHover({trace:_,x:(.5+.5*m[0]/m[3])*s,y:(.5-.5*m[1]/m[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:x,name:c.name,color:d.castHoverOption(_,T,\"bgcolor\")||c.color,borderColor:d.castHoverOption(_,T,\"bordercolor\"),fontFamily:d.castHoverOption(_,T,\"font.family\"),fontSize:d.castHoverOption(_,T,\"font.size\"),fontColor:d.castHoverOption(_,T,\"font.color\"),nameLength:d.castHoverOption(_,T,\"namelength\"),textAlign:d.castHoverOption(_,T,\"align\"),hovertemplate:f.castOption(_,T,\"hovertemplate\"),hovertemplateLabels:f.extendFlat({},L,k),eventData:[L]},{container:n,gd:r,inOut_bbox:P}),L.bbox=P[0]}h.distance<5&&(h.buttons||w)?r.emit(\"plotly_click\",C):r.emit(\"plotly_hover\",C),this.oldEventData=C}else d.loneUnhover(n),this.oldEventData&&r.emit(\"plotly_unhover\",this.oldEventData),this.oldEventData=void 0;e.drawAnnotations(e)},k.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):f.error(\"Catastrophic and unrecoverable WebGL error. Context lost.\")};requestAnimationFrame(e)};var M=[\"xaxis\",\"yaxis\",\"zaxis\"];function S(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=M[i],o=a.charAt(0),s=n[a],l=e[o],u=e[o+\"calendar\"],c=e[\"_\"+o+\"length\"];if(f.isArrayOrTypedArray(l))for(var h,p=0;p<(c||l.length);p++)if(f.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)h=s.d2l(l[p][d],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else h=s.d2l(l[p],0,u),!isNaN(h)&&isFinite(h)&&(r[0][i]=Math.min(r[0][i],h),r[1][i]=Math.max(r[1][i],h));else r[0][i]=Math.min(r[0][i],0),r[1][i]=Math.max(r[1][i],c-1)}}k.plot=function(t,e,r){var n=this;if(n.plotArgs=[t,e,r],!n.glplot.contextLost){var i,a,o,s,l,u,c=e[n.id],f=r[n.id];n.fullLayout=e,n.fullSceneLayout=c,n.axesOptions.merge(e,c),n.spikeOptions.merge(c),n.setViewport(c),n.updateFx(c.dragmode,c.hovermode),n.camera.enableWheel=n.graphDiv._context._scrollZoom.gl3d,n.glplot.setClearColor(v(c.bgcolor)),n.setConvert(l),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&S(this,i,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],i=0;i<3;i++)for(var a=M[i],o=a.charAt(0),s=r[a],l=0;l<n.length;l++){var u=n[l];if(u.visible){var c=s.r2l(u[o]);!isNaN(c)&&isFinite(c)&&(e[0][i]=Math.min(e[0][i],c),e[1][i]=Math.max(e[1][i],c))}}}(this,h);var p=[1,1,1];for(s=0;s<3;++s)h[1][s]===h[0][s]?p[s]=1:p[s]=1/(h[1][s]-h[0][s]);for(n.dataScale=p,n.convertAnnotations(this),o=0;o<t.length;++o)!0===(i=t[o]).visible&&0!==i._length&&((a=n.traces[i.uid])?a.data.type===i.type?a.update(i):(a.dispose(),a=i._module.plot(this,i),n.traces[i.uid]=a):(a=i._module.plot(this,i),n.traces[i.uid]=a),a.name=i.name);var d=Object.keys(n.traces);t:for(o=0;o<d.length;++o){for(s=0;s<t.length;++s)if(t[s].uid===d[o]&&!0===t[s].visible&&0!==t[s]._length)continue t;(a=n.traces[d[o]]).dispose(),delete n.traces[d[o]]}n.glplot.objects.sort((function(t,e){return t._trace.data.index-e._trace.data.index}));var g,y=[[0,0,0],[0,0,0]],m=[],x={};for(o=0;o<3;++o){var b;if((u=(l=c[M[o]]).type)in x?(x[u].acc*=p[o],x[u].count+=1):x[u]={acc:p[o],count:1},l.autorange){y[0][o]=1/0,y[1][o]=-1/0;var w=n.glplot.objects,T=n.fullSceneLayout.annotations||[],k=l._name.charAt(0);for(s=0;s<w.length;s++){var A=w[s],E=A.bounds,L=A._trace.data._pad||0;\"ErrorBars\"===A.constructor.name&&l._lowerLogErrorBound?y[0][o]=Math.min(y[0][o],l._lowerLogErrorBound):y[0][o]=Math.min(y[0][o],E[0][o]/p[o]-L),y[1][o]=Math.max(y[1][o],E[1][o]/p[o]+L)}for(s=0;s<T.length;s++){var C=T[s];if(C.visible){var P=l.r2l(C[k]);y[0][o]=Math.min(y[0][o],P),y[1][o]=Math.max(y[1][o],P)}}if(\"rangemode\"in l&&\"tozero\"===l.rangemode&&(y[0][o]=Math.min(y[0][o],0),y[1][o]=Math.max(y[1][o],0)),y[0][o]>y[1][o])y[0][o]=-1,y[1][o]=1;else{var O=y[1][o]-y[0][o];y[0][o]-=O/32,y[1][o]+=O/32}if(b=[y[0][o],y[1][o]],b=_(b,l),y[0][o]=b[0],y[1][o]=b[1],l.isReversed()){var I=y[0][o];y[0][o]=y[1][o],y[1][o]=I}}else b=l.range,y[0][o]=l.r2l(b[0]),y[1][o]=l.r2l(b[1]);y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),m[o]=y[1][o]-y[0][o],l.range=[y[0][o],y[1][o]],l.limitRange(),n.glplot.setBounds(o,{min:l.range[0]*p[o],max:l.range[1]*p[o]})}var D=c.aspectmode;if(\"cube\"===D)g=[1,1,1];else if(\"manual\"===D){var z=c.aspectratio;g=[z.x,z.y,z.z]}else{if(\"auto\"!==D&&\"data\"!==D)throw new Error(\"scene.js aspectRatio was not one of the enumerated types\");var R=[1,1,1];for(o=0;o<3;++o){var F=x[u=(l=c[M[o]]).type];R[o]=Math.pow(F.acc,1/F.count)/p[o]}g=\"data\"===D||Math.max.apply(null,R)/Math.min.apply(null,R)<=4?R:[1,1,1]}c.aspectratio.x=f.aspectratio.x=g[0],c.aspectratio.y=f.aspectratio.y=g[1],c.aspectratio.z=f.aspectratio.z=g[2],n.glplot.setAspectratio(c.aspectratio),n.viewInitial.aspectratio||(n.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),n.viewInitial.aspectmode||(n.viewInitial.aspectmode=c.aspectmode);var B=c.domain||null,N=e._size||null;if(B&&N){var j=n.container.style;j.position=\"absolute\",j.left=N.l+B.x[0]*N.w+\"px\",j.top=N.t+(1-B.y[1])*N.h+\"px\",j.width=N.w*(B.x[1]-B.x[0])+\"px\",j.height=N.h*(B.y[1]-B.y[0])+\"px\"}n.glplot.redraw()}},k.destroy=function(){var t=this;t.glplot&&(t.camera.mouseListener.enabled=!1,t.container.removeEventListener(\"wheel\",t.camera.wheelListener),t.camera=null,t.glplot.dispose(),t.container.parentNode.removeChild(t.container),t.glplot=null)},k.getCamera=function(){var t,e=this;return e.camera.view.recalcMatrix(e.camera.view.lastT()),{up:{x:(t=e.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?\"orthographic\":\"perspective\"}}},k.setViewport=function(t){var e,r=this,n=t.camera;r.camera.lookAt.apply(this,[[(e=n).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),r.glplot.setAspectratio(t.aspectratio),\"orthographic\"===n.projection.type!==r.camera._ortho&&(r.glplot.redraw(),r.glplot.clearRGBA(),r.glplot.dispose(),r.initializeGLPlot())},k.isCameraChanged=function(t){var e=this.getCamera(),r=f.nestedProperty(t,this.id+\".camera\").get();function n(t,e,r,n){var i=[\"up\",\"center\",\"eye\"],a=[\"x\",\"y\",\"z\"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}var i=!1;if(void 0===r)i=!0;else{for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!n(e,r,a,o)){i=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(i=!0)}return i},k.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=f.nestedProperty(t,this.id+\".aspectratio\").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},k.saveLayout=function(t){var e,r,n,i,a,o,s=this,l=s.fullLayout,u=s.isCameraChanged(t),h=s.isAspectChanged(t),p=u||h;if(p){var d={};u&&(e=s.getCamera(),n=(r=f.nestedProperty(t,s.id+\".camera\")).get(),d[s.id+\".camera\"]=n),h&&(i=s.glplot.getAspectratio(),o=(a=f.nestedProperty(t,s.id+\".aspectratio\")).get(),d[s.id+\".aspectratio\"]=o),c.call(\"_storeDirectGUIEdit\",t,l._preGUI,d),u&&(r.set(e),f.nestedProperty(l,s.id+\".camera\").set(e)),h&&(a.set(i),f.nestedProperty(l,s.id+\".aspectratio\").set(i),s.glplot.redraw())}return p},k.updateFx=function(t,e){var r=this,n=r.camera;if(n)if(\"orbit\"===t)n.mode=\"orbit\",n.keyBindingMode=\"rotate\";else if(\"turntable\"===t){n.up=[0,0,1],n.mode=\"turntable\",n.keyBindingMode=\"rotate\";var i=r.graphDiv,a=i._fullLayout,o=r.fullSceneLayout.camera,s=o.up.x,l=o.up.y,u=o.up.z;if(u/Math.sqrt(s*s+l*l+u*u)<.999){var h=r.id+\".camera.up\",p={x:0,y:0,z:1},d={};d[h]=p;var v=i.layout;c.call(\"_storeDirectGUIEdit\",v,a._preGUI,d),o.up=p,f.nestedProperty(v,h).set(p)}}else n.keyBindingMode=t;r.fullSceneLayout.hovermode=e},k.toImage=function(t){var e=this;t||(t=\"png\"),e.staticMode&&e.container.appendChild(n),e.glplot.redraw();var r=e.glplot.gl,i=r.drawingBufferWidth,a=r.drawingBufferHeight;r.bindFramebuffer(r.FRAMEBUFFER,null);var o=new Uint8Array(i*a*4);r.readPixels(0,0,i,a,r.RGBA,r.UNSIGNED_BYTE,o),function(t,e,r){for(var n=0,i=r-1;n<i;++n,--i)for(var a=0;a<e;++a)for(var o=0;o<4;++o){var s=4*(e*n+a)+o,l=4*(e*i+a)+o,u=t[s];t[s]=t[l],t[l]=u}}(o,i,a),function(t,e,r){for(var n=0;n<r;++n)for(var i=0;i<e;++i){var a=4*(e*n+i),o=t[a+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[a+l]=Math.min(s*t[a+l],255)}}(o,i,a);var s=document.createElement(\"canvas\");s.width=i,s.height=a;var l,u=s.getContext(\"2d\",{willReadFrequently:!0}),c=u.createImageData(i,a);switch(c.data.set(o),u.putImageData(c,0,0),t){case\"jpeg\":l=s.toDataURL(\"image/jpeg\");break;case\"webp\":l=s.toDataURL(\"image/webp\");break;default:l=s.toDataURL(\"image/png\")}return e.staticMode&&e.container.removeChild(n),l},k.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[M[t]];p.setConvert(e,this.fullLayout),e.setScale=f.noop}},k.make4thDimension=function(){var t=this,e=t.graphDiv._fullLayout;t._mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},p.setConvert(t._mockAxis,e)},t.exports=T},90060:function(t){\"use strict\";t.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;a<n;a++)i[a]=[t[a],e[a],r[a]];return i}},10820:function(t,e,r){\"use strict\";var n=r(41940),i=r(85594),a=r(22399),o=r(29241),s=r(53777),l=r(35025),u=r(1426).extendFlat,c=n({editType:\"calc\"});c.family.dflt='\"Open Sans\", verdana, arial, sans-serif',c.size.dflt=12,c.color.dflt=a.defaultLine,t.exports={font:c,title:{text:{valType:\"string\",editType:\"layoutstyle\"},font:n({editType:\"layoutstyle\"}),xref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},x:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"layoutstyle\"},y:{valType:\"number\",min:0,max:1,dflt:\"auto\",editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"left\",\"center\",\"right\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"layoutstyle\"},pad:u(l({editType:\"layoutstyle\"}),{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},editType:\"layoutstyle\"},uniformtext:{mode:{valType:\"enumerated\",values:[!1,\"hide\",\"show\"],dflt:!1,editType:\"plot\"},minsize:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"},autosize:{valType:\"boolean\",dflt:!1,editType:\"none\"},width:{valType:\"number\",min:10,dflt:700,editType:\"plot\"},height:{valType:\"number\",min:10,dflt:450,editType:\"plot\"},minreducedwidth:{valType:\"number\",min:2,dflt:64,editType:\"plot\"},minreducedheight:{valType:\"number\",min:2,dflt:64,editType:\"plot\"},margin:{l:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},r:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},t:{valType:\"number\",min:0,dflt:100,editType:\"plot\"},b:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},autoexpand:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},computed:{valType:\"any\",editType:\"none\"},paper_bgcolor:{valType:\"color\",dflt:a.background,editType:\"plot\"},plot_bgcolor:{valType:\"color\",dflt:a.background,editType:\"layoutstyle\"},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},separators:{valType:\"string\",editType:\"plot\"},hidesources:{valType:\"boolean\",dflt:!1,editType:\"plot\"},showlegend:{valType:\"boolean\",editType:\"legend\"},colorway:{valType:\"colorlist\",dflt:a.defaults,editType:\"calc\"},datarevision:{valType:\"any\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editrevision:{valType:\"any\",editType:\"none\"},selectionrevision:{valType:\"any\",editType:\"none\"},template:{valType:\"any\",editType:\"calc\"},newshape:o.newshape,activeshape:o.activeshape,newselection:s.newselection,activeselection:s.activeselection,meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},transition:u({},i.transition,{editType:\"none\"}),_deprecated:{title:{valType:\"string\",editType:\"layoutstyle\"},titlefont:n({editType:\"layoutstyle\"})}}},77734:function(t,e,r){\"use strict\";var n=r(78607),i=\"1.10.1\",a='© <a target=\"_blank\" href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',o=['© <a target=\"_blank\" href=\"https://carto.com/\">Carto</a>',a].join(\" \"),s=['Map tiles by <a target=\"_blank\" href=\"https://stamen.com\">Stamen Design</a>','under <a target=\"_blank\" href=\"https://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a>',\"|\",'Data by <a target=\"_blank\" href=\"https://openstreetmap.org\">OpenStreetMap</a> contributors','under <a target=\"_blank\" href=\"https://www.openstreetmap.org/copyright\">ODbL</a>'].join(\" \"),l={\"open-street-map\":{id:\"osm\",version:8,sources:{\"plotly-osm-tiles\":{type:\"raster\",attribution:a,tiles:[\"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\",\"https://b.tile.openstreetmap.org/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-osm-tiles\",type:\"raster\",source:\"plotly-osm-tiles\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"white-bg\":{id:\"white-bg\",version:8,sources:{},layers:[{id:\"white-bg\",type:\"background\",paint:{\"background-color\":\"#FFFFFF\"},minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"carto-positron\":{id:\"carto-positron\",version:8,sources:{\"plotly-carto-positron\":{type:\"raster\",attribution:o,tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-positron\",type:\"raster\",source:\"plotly-carto-positron\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"carto-darkmatter\":{id:\"carto-darkmatter\",version:8,sources:{\"plotly-carto-darkmatter\":{type:\"raster\",attribution:o,tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-darkmatter\",type:\"raster\",source:\"plotly-carto-darkmatter\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"stamen-terrain\":{id:\"stamen-terrain\",version:8,sources:{\"plotly-stamen-terrain\":{type:\"raster\",attribution:s,tiles:[\"https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-terrain\",type:\"raster\",source:\"plotly-stamen-terrain\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"stamen-toner\":{id:\"stamen-toner\",version:8,sources:{\"plotly-stamen-toner\":{type:\"raster\",attribution:s,tiles:[\"https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-toner\",type:\"raster\",source:\"plotly-stamen-toner\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"},\"stamen-watercolor\":{id:\"stamen-watercolor\",version:8,sources:{\"plotly-stamen-watercolor\":{type:\"raster\",attribution:['Map tiles by <a target=\"_blank\" href=\"https://stamen.com\">Stamen Design</a>','under <a target=\"_blank\" href=\"https://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a>',\"|\",'Data by <a target=\"_blank\" href=\"https://openstreetmap.org\">OpenStreetMap</a> contributors','under <a target=\"_blank\" href=\"https://creativecommons.org/licenses/by-sa/3.0\">CC BY SA</a>'].join(\" \"),tiles:[\"https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-watercolor\",type:\"raster\",source:\"plotly-stamen-watercolor\",minzoom:0,maxzoom:22}],glyphs:\"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\"}},u=n(l);t.exports={requiredVersion:i,styleUrlPrefix:\"mapbox://styles/mapbox/\",styleUrlSuffix:\"v9\",styleValuesMapbox:[\"basic\",\"streets\",\"outdoors\",\"light\",\"dark\",\"satellite\",\"satellite-streets\"],styleValueDflt:\"basic\",stylesNonMapbox:l,styleValuesNonMapbox:u,traceLayerPrefix:\"plotly-trace-layer-\",layoutLayerPrefix:\"plotly-layout-layer-\",wrongVersionErrorMsg:[\"Your custom plotly.js bundle is not using the correct mapbox-gl version\",\"Please install mapbox-gl@\"+i+\".\"].join(\"\\n\"),noAccessTokenErrorMsg:[\"Missing Mapbox access token.\",\"Mapbox trace type require a Mapbox access token to be registered.\",\"For example:\",\"  Plotly.newPlot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });\",\"More info here: https://www.mapbox.com/help/define-access-token/\"].join(\"\\n\"),missingStyleErrorMsg:[\"No valid mapbox style found, please set `mapbox.style` to one of:\",u.join(\", \"),\"or register a Mapbox access token to use a Mapbox-served style.\"].join(\"\\n\"),multipleTokensErrorMsg:[\"Set multiple mapbox access token across different mapbox subplot,\",\"using first token found as mapbox-gl does not allow multipleaccess tokens on the same page.\"].join(\"\\n\"),mapOnErrorMsg:\"Mapbox error.\",mapboxLogo:{path0:\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\",path1:\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\",path2:\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\",polygon:\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34\"},styleRules:{map:\"overflow:hidden;position:relative;\",\"missing-css\":\"display:none;\",canary:\"background-color:salmon;\",\"ctrl-bottom-left\":\"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;\",\"ctrl-bottom-right\":\"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;\",ctrl:\"clear: both; pointer-events: auto; transform: translate(0, 0);\",\"ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner\":\"display: none;\",\"ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner\":\"display: block; margin-top:2px\",\"ctrl-attrib.mapboxgl-compact:hover\":\"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;\",\"ctrl-attrib.mapboxgl-compact::after\":'content: \"\"; cursor: pointer; position: absolute; background-image: url(\\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"%3E %3Cpath fill=\"%23333333\" fill-rule=\"evenodd\" d=\"M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0\"/%3E %3C/svg%3E\\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',\"ctrl-attrib.mapboxgl-compact\":\"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;\",\"ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; right: 0\",\"ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; left: 0\",\"ctrl-bottom-left .mapboxgl-ctrl\":\"margin: 0 0 10px 10px; float: left;\",\"ctrl-bottom-right .mapboxgl-ctrl\":\"margin: 0 10px 10px 0; float: right;\",\"ctrl-attrib\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a:hover\":\"color: inherit; text-decoration: underline;\",\"ctrl-attrib .mapbox-improve-map\":\"font-weight: bold; margin-left: 2px;\",\"attrib-empty\":\"display: none;\",\"ctrl-logo\":'display:block; width: 21px; height: 21px; background-image: url(\\'data:image/svg+xml;charset=utf-8,%3C?xml version=\"1.0\" encoding=\"utf-8\"?%3E %3Csvg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 21 21\" style=\"enable-background:new 0 0 21 21;\" xml:space=\"preserve\"%3E%3Cg transform=\"translate(0,0.01)\"%3E%3Cpath d=\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\" style=\"opacity:0.9;fill:%23ffffff;enable-background:new\" class=\"st0\"/%3E%3Cpath d=\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\" style=\"opacity:0.35;enable-background:new\" class=\"st1\"/%3E%3Cpath d=\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\" style=\"opacity:0.35;enable-background:new\" class=\"st1\"/%3E%3Cpolygon points=\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 \" style=\"opacity:0.9;fill:%23ffffff;enable-background:new\" class=\"st0\"/%3E%3C/g%3E%3C/svg%3E\\')'}}},13056:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){var r=t.split(\" \"),i=r[0],a=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,u=[\"\",\"\"],c=[0,0];switch(i){case\"top\":u[0]=\"top\",c[1]=-l;break;case\"bottom\":u[0]=\"bottom\",c[1]=l}switch(a){case\"left\":u[1]=\"right\",c[0]=-s;break;case\"right\":u[1]=\"left\",c[0]=s}return{anchor:u[0]&&u[1]?u.join(\"-\"):u[0]?u[0]:u[1]?u[1]:\"center\",offset:c}}},50101:function(t,e,r){\"use strict\";var n=r(44517),i=r(71828),a=i.strTranslate,o=i.strScale,s=r(27659).AU,l=r(77922),u=r(39898),c=r(91424),f=r(63893),h=r(10481),p=\"mapbox\",d=e.constants=r(77734);function v(t){return\"string\"==typeof t&&(-1!==d.styleValuesMapbox.indexOf(t)||0===t.indexOf(\"mapbox://\"))}e.name=p,e.attr=\"subplot\",e.idRoot=p,e.idRegex=e.attrRegex=i.counterRegex(p),e.attributes={subplot:{valType:\"subplotid\",dflt:\"mapbox\",editType:\"calc\"}},e.layoutAttributes=r(23585),e.supplyLayoutDefaults=r(77882),e.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=e._subplots[p];if(n.version!==d.requiredVersion)throw new Error(d.wrongVersionErrorMsg);var o=function(t,e){var r=t._fullLayout;if(\"\"===t._context.mapboxAccessToken)return\"\";for(var n=[],a=[],o=!1,s=!1,l=0;l<e.length;l++){var u=r[e[l]],c=u.accesstoken;v(u.style)&&(c?i.pushUnique(n,c):(v(u._input.style)&&(i.error(\"Uses Mapbox map style, but did not set an access token.\"),o=!0),s=!0)),c&&i.pushUnique(a,c)}if(s){var f=o?d.noAccessTokenErrorMsg:d.missingStyleErrorMsg;throw i.error(f),new Error(f)}return n.length?(n.length>1&&i.warn(d.multipleTokensErrorMsg),n[0]):(a.length&&i.log([\"Listed mapbox access token(s)\",a.join(\",\"),\"but did not use a Mapbox map style, ignoring token(s).\"].join(\" \")),\"\")}(t,a);n.accessToken=o;for(var l=0;l<a.length;l++){var u=a[l],c=s(r,p,u),f=e[u],g=f._subplot;g||(g=new h(t,u),e[u]._subplot=g),g.viewInitial||(g.viewInitial={center:i.extendFlat({},f.center),zoom:f.zoom,bearing:f.bearing,pitch:f.pitch}),g.plot(c,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[p]||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},e.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=e._size,i=0;i<r.length;i++){var s=e[r[i]],h=s.domain,v=s._subplot.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":v,x:n.l+n.w*h.x[0],y:n.t+n.h*(1-h.y[1]),width:n.w*(h.x[1]-h.x[0]),height:n.h*(h.y[1]-h.y[0]),preserveAspectRatio:\"none\"});var g=u.select(s._subplot.div);if(null!==g.select(\".mapboxgl-ctrl-logo\").node().offsetParent){var y=e._glimages.append(\"g\");y.attr(\"transform\",a(n.l+n.w*h.x[0]+10,n.t+n.h*(1-h.y[0])-31)),y.append(\"path\").attr(\"d\",d.mapboxLogo.path0).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"}),y.append(\"path\").attr(\"d\",d.mapboxLogo.path1).style(\"opacity\",.35).style(\"enable-background\",\"new\"),y.append(\"path\").attr(\"d\",d.mapboxLogo.path2).style(\"opacity\",.35).style(\"enable-background\",\"new\"),y.append(\"polygon\").attr(\"points\",d.mapboxLogo.polygon).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"})}var m=g.select(\".mapboxgl-ctrl-attrib\").text().replace(\"Improve this map\",\"\"),x=e._glimages.append(\"g\"),b=x.append(\"text\");b.text(m).classed(\"static-attribution\",!0).attr({\"font-size\":12,\"font-family\":\"Arial\",color:\"rgba(0, 0, 0, 0.75)\",\"text-anchor\":\"end\",\"data-unformatted\":m});var _=c.bBox(b.node()),w=n.w*(h.x[1]-h.x[0]);if(_.width>w/2){var T=m.split(\"|\").join(\"<br>\");b.text(T).attr(\"data-unformatted\",T).call(f.convertToTspans,t),_=c.bBox(b.node())}b.attr(\"transform\",a(-3,8-_.height)),x.insert(\"rect\",\".static-attribution\").attr({x:-_.width-6,y:-_.height-3,width:_.width+6,height:_.height+3,fill:\"rgba(255, 255, 255, 0.75)\"});var k=1;_.width+6>w&&(k=w/(_.width+6));var A=[n.l+n.w*h.x[1],n.t+n.h*(1-h.y[0])];x.attr(\"transform\",a(A[0],A[1])+o(k))}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=0;n<r.length;n++)e[r[n]]._subplot.updateFx(e)}},67911:function(t,e,r){\"use strict\";var n=r(71828),i=r(63893).sanitizeHTML,a=r(13056),o=r(77734);function s(t,e){this.subplot=t,this.uid=t.uid+\"-\"+e,this.index=e,this.idSource=\"source-\"+this.uid,this.idLayer=o.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var l=s.prototype;function u(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var r=0;r<e.length;r++)if(\"string\"!=typeof e[r]||0===e[r].length)return!1;return!0}return n.isPlainObject(e)||\"string\"==typeof e&&e.length>0}function c(t){var e={},r={};switch(t.type){case\"circle\":n.extendFlat(r,{\"circle-radius\":t.circle.radius,\"circle-color\":t.color,\"circle-opacity\":t.opacity});break;case\"line\":n.extendFlat(r,{\"line-width\":t.line.width,\"line-color\":t.color,\"line-opacity\":t.opacity,\"line-dasharray\":t.line.dash});break;case\"fill\":n.extendFlat(r,{\"fill-color\":t.color,\"fill-outline-color\":t.fill.outlinecolor,\"fill-opacity\":t.opacity});break;case\"symbol\":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{\"icon-image\":i.icon+\"-15\",\"icon-size\":i.iconsize/10,\"text-field\":i.text,\"text-size\":i.textfont.size,\"text-anchor\":o.anchor,\"text-offset\":o.offset,\"symbol-placement\":i.placement}),n.extendFlat(r,{\"icon-color\":t.color,\"text-color\":i.textfont.color,\"text-opacity\":t.opacity});break;case\"raster\":n.extendFlat(r,{\"raster-fade-duration\":0,\"raster-opacity\":t.opacity})}return{layout:e,paint:r}}l.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=u(t)},l.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&\"image\"===this.sourceType&&\"image\"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},l.needsNewSource=function(t){return this.sourceType!==t.sourcetype||JSON.stringify(this.source)!==JSON.stringify(t.source)||this.layerType!==t.type},l.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup[\"layout-\"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup[\"layout-\"+this.index]},l.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e=this.findFollowingMapboxLayerId(this.lookupBelow());null!==e&&this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,u(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};return\"geojson\"===r?e=\"data\":\"vector\"===r?e=\"string\"==typeof n?\"url\":\"tiles\":\"raster\"===r?(e=\"tiles\",a.tileSize=256):\"image\"===r&&(e=\"url\",a.coordinates=t.coordinates),a[e]=n,t.sourceattribution&&(a.attribution=i(t.sourceattribution)),a}(t);e.addSource(this.idSource,r)}},l.findFollowingMapboxLayerId=function(t){if(\"traces\"===t)for(var e=this.subplot.getMapLayers(),r=0;r<e.length;r++){var n=e[r].id;if(\"string\"==typeof n&&0===n.indexOf(o.traceLayerPrefix)){t=n;break}}return t},l.updateLayer=function(t){var e=this.subplot,r=c(t),n=this.lookupBelow(),i=this.findFollowingMapboxLayerId(n);this.removeLayer(),u(t)&&e.addLayer({id:this.idLayer,source:this.idSource,\"source-layer\":t.sourcelayer||\"\",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:r.layout,paint:r.paint},i),this.layerType=t.type,this.below=n},l.updateStyle=function(t){if(u(t)){var e=c(t);this.subplot.setOptions(this.idLayer,\"setLayoutProperty\",e.layout),this.subplot.setOptions(this.idLayer,\"setPaintProperty\",e.paint)}},l.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},l.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},t.exports=function(t,e,r){var n=new s(t,e);return n.update(r),n}},23585:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901).defaultLine,a=r(27670).Y,o=r(41940),s=r(82196).textposition,l=r(30962).overrideAll,u=r(44467).templatedArray,c=r(77734),f=o({});f.family.dflt=\"Open Sans Regular, Arial Unicode MS Regular\",(t.exports=l({_arrayAttrRegexps:[n.counterRegex(\"mapbox\",\".layers\",!0)],domain:a({name:\"mapbox\"}),accesstoken:{valType:\"string\",noBlank:!0,strict:!0},style:{valType:\"any\",values:c.styleValuesMapbox.concat(c.styleValuesNonMapbox),dflt:c.styleValueDflt},center:{lon:{valType:\"number\",dflt:0},lat:{valType:\"number\",dflt:0}},zoom:{valType:\"number\",dflt:1},bearing:{valType:\"number\",dflt:0},pitch:{valType:\"number\",dflt:0},bounds:{west:{valType:\"number\"},east:{valType:\"number\"},south:{valType:\"number\"},north:{valType:\"number\"}},layers:u(\"layer\",{visible:{valType:\"boolean\",dflt:!0},sourcetype:{valType:\"enumerated\",values:[\"geojson\",\"vector\",\"raster\",\"image\"],dflt:\"geojson\"},source:{valType:\"any\"},sourcelayer:{valType:\"string\",dflt:\"\"},sourceattribution:{valType:\"string\"},type:{valType:\"enumerated\",values:[\"circle\",\"line\",\"fill\",\"symbol\",\"raster\"],dflt:\"circle\"},coordinates:{valType:\"any\"},below:{valType:\"string\"},color:{valType:\"color\",dflt:i},opacity:{valType:\"number\",min:0,max:1,dflt:1},minzoom:{valType:\"number\",min:0,max:24,dflt:0},maxzoom:{valType:\"number\",min:0,max:24,dflt:24},circle:{radius:{valType:\"number\",dflt:15}},line:{width:{valType:\"number\",dflt:2},dash:{valType:\"data_array\"}},fill:{outlinecolor:{valType:\"color\",dflt:i}},symbol:{icon:{valType:\"string\",dflt:\"marker\"},iconsize:{valType:\"number\",dflt:10},text:{valType:\"string\",dflt:\"\"},placement:{valType:\"enumerated\",values:[\"point\",\"line\",\"line-center\"],dflt:\"point\"},textfont:f,textposition:n.extendFlat({},s,{arrayOk:!1})}})},\"plot\",\"from-root\")).uirevision={valType:\"any\",editType:\"none\"}},77882:function(t,e,r){\"use strict\";var n=r(71828),i=r(49119),a=r(85501),o=r(23585);function s(t,e,r,n){r(\"accesstoken\",n.accessToken),r(\"style\"),r(\"center.lon\"),r(\"center.lat\"),r(\"zoom\"),r(\"bearing\"),r(\"pitch\");var i=r(\"bounds.west\"),o=r(\"bounds.east\"),s=r(\"bounds.south\"),u=r(\"bounds.north\");void 0!==i&&void 0!==o&&void 0!==s&&void 0!==u||delete e.bounds,a(t,e,{name:\"layers\",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r(\"visible\")){var i,a=r(\"sourcetype\"),s=\"raster\"===a||\"image\"===a;r(\"source\"),r(\"sourceattribution\"),\"vector\"===a&&r(\"sourcelayer\"),\"image\"===a&&r(\"coordinates\"),s&&(i=\"raster\");var l=r(\"type\",i);s&&\"raster\"!==l&&(l=e.type=\"raster\",n.log(\"Source types *raster* and *image* must drawn *raster* layer type.\")),r(\"below\"),r(\"color\"),r(\"opacity\"),r(\"minzoom\"),r(\"maxzoom\"),\"circle\"===l&&r(\"circle.radius\"),\"line\"===l&&(r(\"line.width\"),r(\"line.dash\")),\"fill\"===l&&r(\"fill.outlinecolor\"),\"symbol\"===l&&(r(\"symbol.icon\"),r(\"symbol.iconsize\"),r(\"symbol.text\"),n.coerceFont(r,\"symbol.textfont\"),r(\"symbol.textposition\"),r(\"symbol.placement\"))}}t.exports=function(t,e,r){i(t,e,r,{type:\"mapbox\",attributes:o,handleDefaults:s,partition:\"y\",accessToken:e._mapboxAccessToken})}},10481:function(t,e,r){\"use strict\";var n=r(44517),i=r(71828),a=r(41327),o=r(73972),s=r(89298),l=r(28569),u=r(30211),c=r(64505),f=c.drawMode,h=c.selectMode,p=r(47322).prepSelect,d=r(47322).clearOutline,v=r(47322).clearSelectionsCache,g=r(47322).selectOnClick,y=r(77734),m=r(67911);function x(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+\"-\"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var b=x.prototype;b.plot=function(t,e,r){var n,i=this,a=e[i.id];i.map&&a.accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash={},i.layerList=[]),n=i.map?new Promise((function(r,n){i.updateMap(t,e,r,n)})):new Promise((function(r,n){i.createMap(t,e,r,n)})),r.push(n)},b.createMap=function(t,e,r,i){var o=this,s=e[o.id],l=o.styleObj=w(s.style);o.accessToken=s.accesstoken;var u=s.bounds,c=u?[[u.west,u.south],[u.east,u.north]]:null,f=o.map=new n.Map({container:o.div,style:l.style,center:k(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,maxBounds:c,interactive:!o.isStatic,preserveDrawingBuffer:o.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));f._canvas.style.left=\"0px\",f._canvas.style.top=\"0px\",o.rejectOnError(i),o.isStatic||o.initFx(t,e);var h=[];h.push(new Promise((function(t){f.once(\"load\",t)}))),h=h.concat(a.fetchTraceGeoData(t)),Promise.all(h).then((function(){o.fillBelowLookup(t,e),o.updateData(t),o.updateLayout(e),o.resolveOnRender(r)})).catch(i)},b.updateMap=function(t,e,r,n){var i=this,o=i.map,s=e[this.id];i.rejectOnError(n);var l=[],u=w(s.style);JSON.stringify(i.styleObj)!==JSON.stringify(u)&&(i.styleObj=u,o.setStyle(u.style),i.traceHash={},l.push(new Promise((function(t){o.once(\"styledata\",t)})))),l=l.concat(a.fetchTraceGeoData(t)),Promise.all(l).then((function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)})).catch(n)},b.fillBelowLookup=function(t,e){var r,n,i=e[this.id].layers,a=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;\"string\"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),\"\"===n&&(o=!0),a[\"trace-\"+s.uid]=n||\"\"}for(r=0;r<i.length;r++){var u=i[r];n=\"string\"==typeof u.below?u.below:o?\"traces\":\"\",a[\"layout-\"+r]=n}var c,f,h={};for(c in a)h[n=a[c]]?h[n].push(c):h[n]=[c];for(n in h){var p=h[n];if(p.length>1)for(r=0;r<p.length;r++)0===(c=p[r]).indexOf(\"trace-\")?(f=c.split(\"trace-\")[1],this.traceHash[f]&&(this.traceHash[f].below=null)):0===c.indexOf(\"layout-\")&&(f=c.split(\"layout-\")[1],this.layerList[f]&&(this.layerList[f].below=null))}};var _={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function w(t){var e={};return i.isPlainObject(t)?(e.id=t.id,e.style=t):\"string\"==typeof t?(e.id=t,-1!==y.styleValuesMapbox.indexOf(t)?e.style=T(t):y.stylesNonMapbox[t]?e.style=y.stylesNonMapbox[t]:e.style=t):(e.id=y.styleValueDflt,e.style=T(y.styleValueDflt)),e.transition={duration:0,delay:0},e}function T(t){return y.styleUrlPrefix+t+\"-\"+y.styleUrlSuffix}function k(t){return[t.lon,t.lat]}b.updateData=function(t){var e,r,n,i,a=this.traceHash,o=t.slice().sort((function(t,e){return _[t[0].trace.type]-_[e[0].trace.type]}));for(n=0;n<o.length;n++){var s=o[n],l=!1;(e=a[(r=s[0].trace).uid])&&(e.type===r.type?(e.update(s),l=!0):e.dispose()),!l&&r._module&&(a[r.uid]=r._module.plot(this,s))}var u=Object.keys(a);t:for(n=0;n<u.length;n++){var c=u[n];for(i=0;i<t.length;i++)if(c===(r=t[i][0].trace).uid)continue t;(e=a[c]).dispose(),delete a[c]}},b.updateLayout=function(t){var e=this.map,r=t[this.id];this.dragging||this.wheeling||(e.setCenter(k(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},b.resolveOnRender=function(t){var e=this.map;e.on(\"render\",(function r(){e.loaded()&&(e.off(\"render\",r),setTimeout(t,10))}))},b.rejectOnError=function(t){var e=this.map;function r(){t(new Error(y.mapOnErrorMsg))}e.once(\"error\",r),e.once(\"style.error\",r),e.once(\"source.error\",r),e.once(\"tile.error\",r),e.once(\"layer.error\",r)},b.createFramework=function(t){var e=this,r=e.div=document.createElement(\"div\");r.id=e.uid,r.style.position=\"absolute\",e.container.appendChild(r),e.xaxis={_id:\"x\",c2p:function(t){return e.project(t).x}},e.yaxis={_id:\"y\",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},s.setConvert(e.mockAxis,t)},b.initFx=function(t,e){var r=this,n=r.gd,i=r.map;function a(){u.loneUnhover(e._hoverlayer)}function s(){var t=r.getView();n.emit(\"plotly_relayouting\",r.getViewEditsWithDerived(t))}i.on(\"moveend\",(function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||r.wheeling){var i=e[r.id];o.call(\"_storeDirectGUIEdit\",n.layout,e._preGUI,r.getViewEdits(i));var a=r.getView();i._input.center=i.center=a.center,i._input.zoom=i.zoom=a.zoom,i._input.bearing=i.bearing=a.bearing,i._input.pitch=i.pitch=a.pitch,n.emit(\"plotly_relayout\",r.getViewEditsWithDerived(a))}t.originalEvent&&\"mouseup\"===t.originalEvent.type?r.dragging=!1:r.wheeling&&(r.wheeling=!1),e._rehover&&e._rehover()}})),i.on(\"wheel\",(function(){r.wheeling=!0})),i.on(\"mousemove\",(function(t){var e=r.div.getBoundingClientRect(),a=[t.originalEvent.offsetX,t.originalEvent.offsetY];t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return i.unproject(a).lng},r.yaxis.p2c=function(){return i.unproject(a).lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&n._fullLayout[r.id]&&u.hover(n,t,r.id)},u.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id})),i.on(\"dragstart\",(function(){r.dragging=!0,a()})),i.on(\"zoomstart\",a),i.on(\"mouseout\",(function(){n._fullLayout._hoversubplot=null})),i.on(\"drag\",s),i.on(\"zoom\",s),i.on(\"dblclick\",(function(){var t=n._fullLayout[r.id];o.call(\"_storeDirectGUIEdit\",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(k(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit(\"plotly_doubleclick\",null),n.emit(\"plotly_relayout\",r.getViewEditsWithDerived(a))})),r.clearOutline=function(){v(r.dragOptions),d(r.dragOptions.gd)},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf(\"select\")>-1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\"event\")>-1&&u.click(n,e.originalEvent)}}},b.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a=function(t,r){r.isRect?(t.range={})[e.id]=[u([r.xmin,r.ymin]),u([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(u)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{dragmode:t.dragmode,element:e.div,gd:n,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off(\"click\",e.onClickInPanHandler),h(o)||f(o)?(r.dragPan.disable(),r.on(\"zoomstart\",e.clearOutline),e.dragOptions.prepFn=function(t,r,n){p(t,r,n,e.dragOptions,o)},l.init(e.dragOptions)):(r.dragPan.enable(),r.off(\"zoomstart\",e.clearOutline),e.div.onmousedown=null,e.div.ontouchstart=null,e.div.removeEventListener(\"touchstart\",e.div._ontouchstart),e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on(\"click\",e.onClickInPanHandler))}function u(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},b.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+\"px\",n.height=r.h*(e.y[1]-e.y[0])+\"px\",n.left=r.l+e.x[0]*r.w+\"px\",n.top=r.t+(1-e.y[1])*r.h+\"px\",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},b.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(m(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},b.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},b.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},b.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},b.getMapLayers=function(){return this.map.getStyle().layers},b.addLayer=function(t,e){var r=this.map;if(\"string\"==typeof e){if(\"\"===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),a=0;a<n.length;a++)if(e===n[a].id)return void r.addLayer(t,e);i.warn([\"Trying to add layer with *below* value\",e,\"referencing a layer that does not exist\",\"or that does not yet exist.\"].join(\" \"))}r.addLayer(t)},b.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},b.getView=function(){var t=this.map,e=t.getCenter(),r={lon:e.lng,lat:e.lat},n=t.getCanvas(),i=parseInt(n.style.width),a=parseInt(n.style.height);return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([i,0]).toArray(),t.unproject([i,a]).toArray(),t.unproject([0,a]).toArray()]}}},b.getViewEdits=function(t){for(var e=this.id,r=[\"center\",\"zoom\",\"bearing\",\"pitch\"],n={},i=0;i<r.length;i++){var a=r[i];n[e+\".\"+a]=t[a]}return n},b.getViewEditsWithDerived=function(t){var e=this.id,r=this.getViewEdits(t);return r[e+\"._derived\"]=t._derived,r},t.exports=x},35025:function(t){\"use strict\";t.exports=function(t){var e=t.editType;return{t:{valType:\"number\",dflt:0,editType:e},r:{valType:\"number\",dflt:0,editType:e},b:{valType:\"number\",dflt:0,editType:e},l:{valType:\"number\",dflt:0,editType:e},editType:e}}},74875:function(t,e,r){\"use strict\";var n=r(39898),i=r(84096).Dq,a=r(60721).FF,o=r(92770),s=r(73972),l=r(86281),u=r(44467),c=r(71828),f=r(7901),h=r(50606).BADNUM,p=r(41675),d=r(51873).clearOutline,v=r(21479),g=r(85594),y=r(31391),m=r(27659).a0,x=c.relinkPrivateKeys,b=c._,_=t.exports={};c.extendFlat(_,s),_.attributes=r(9012),_.attributes.type.values=_.allTypes,_.fontAttrs=r(41940),_.layoutAttributes=r(10820),_.fontWeight=\"normal\";var w=_.transformsRegistry,T=r(31137);_.executeAPICommand=T.executeAPICommand,_.computeAPICommandBindings=T.computeAPICommandBindings,_.manageCommandObserver=T.manageCommandObserver,_.hasSimpleAPICommandBindings=T.hasSimpleAPICommandBindings,_.redrawText=function(t){return t=c.getGraphDiv(t),new Promise((function(e){setTimeout((function(){t._fullLayout&&(s.getComponentMethod(\"annotations\",\"draw\")(t),s.getComponentMethod(\"legend\",\"draw\")(t),s.getComponentMethod(\"colorbar\",\"draw\")(t),e(_.previousPromises(t)))}),300)}))},_.resize=function(t){var e;t=c.getGraphDiv(t);var r=new Promise((function(r,n){t&&!c.isHidden(t)||n(new Error(\"Resize must be passed a displayed plot div element.\")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=r,t._redrawTimer=setTimeout((function(){if(!t.layout||t.layout.width&&t.layout.height||c.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,s.call(\"relayout\",t,{autosize:!0}).then((function(){t.changed=e,t._resolveResize===r&&(delete t._resolveResize,r(t))}))}}),100)}));return e&&e(r),r},_.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then((function(){t._promises=[]}))},_.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=c.ensureSingle(e._paper,\"text\",\"js-plot-link-container\",(function(t){t.style({\"font-family\":'\"Open Sans\", Arial, sans-serif',\"font-size\":\"12px\",fill:f.defaultLine,\"pointer-events\":\"all\"}).each((function(){var t=n.select(this);t.append(\"tspan\").classed(\"js-link-to-tool\",!0),t.append(\"tspan\").classed(\"js-link-spacer\",!0),t.append(\"tspan\").classed(\"js-sourcelinks\",!0)}))})),i=r.node(),a={y:e._paper.attr(\"height\")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a[\"text-anchor\"]=\"start\",a.x=5):(a[\"text-anchor\"]=\"end\",a.x=e._paper.attr(\"width\")-7),r.attr(a);var o=r.select(\".js-link-to-tool\"),s=r.select(\".js-link-spacer\"),l=r.select(\".js-sourcelinks\");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text(\"\");var r=e.append(\"a\").attr({\"xlink:xlink:href\":\"#\",class:\"link--impt link--embedview\",\"font-weight\":\"bold\"}).text(t._context.linkText+\" \"+String.fromCharCode(187));if(t._context.sendData)r.on(\"click\",(function(){_.sendDataToCloud(t)}));else{var n=window.location.pathname.split(\"/\"),i=window.location.search;r.attr({\"xlink:xlink:show\":\"new\",\"xlink:xlink:href\":\"/\"+n[2].split(\".\")[0]+\"/\"+n[1]+i})}}(t,o),s.text(o.text()&&l.text()?\" - \":\"\")}},_.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit(\"plotly_beforeexport\");var r=n.select(t).append(\"div\").attr(\"id\",\"hiddenform\").style(\"display\",\"none\"),i=r.append(\"form\").attr({action:e+\"/external\",method:\"post\",target:\"_blank\"});return i.append(\"input\").attr({type:\"text\",name:\"data\"}).node().value=_.graphJson(t,!1,\"keepdata\"),i.node().submit(),r.remove(),t.emit(\"plotly_afterexport\"),!1}};var k=[\"days\",\"shortDays\",\"months\",\"shortMonths\",\"periods\",\"dateTime\",\"date\",\"time\",\"decimal\",\"thousands\",\"grouping\",\"currency\"],A=[\"year\",\"month\",\"dayMonth\",\"dayMonthYear\"];function M(t,e){var r=t._context.locale;r||(r=\"en-US\");var n=!1,i={};function a(t){for(var r=!0,a=0;a<e.length;a++){var o=e[a];i[o]||(t[o]?i[o]=t[o]:r=!1)}r&&(n=!0)}for(var o=0;o<2;o++){for(var l=t._context.locales,u=0;u<2;u++){var c=(l[r]||{}).format;if(c&&(a(c),n))break;l=s.localeRegistry}var f=r.split(\"-\")[0];if(n||f===r)break;r=f}return n||a(s.localeRegistry.en.format),i}function S(t,e){var r={_fullLayout:e},n=\"x\"===t._id.charAt(0),i=t._mainAxis._anchorAxis,a=\"\",o=\"\",s=\"\";if(i&&(s=i._mainAxis._id,a=n?t._id+s:s+t._id),!a||!e._plots[a]){a=\"\";for(var l=t._counterAxes,u=0;u<l.length;u++){var c=l[u],f=n?t._id+c:c+t._id;o||(o=f);var h=p.getFromId(r,c);if(s&&h.overlaying===s){a=f;break}}}return a||o}function E(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],i=n._module||w[n.type];if(i&&i.makesData)return!0}return!1}function L(t,e,r,n){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=w[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function C(t){return\"string\"==typeof t&&\"px\"===t.substr(t.length-2)&&parseFloat(t)}function P(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={}),t._reservedMargin||(t._reservedMargin={})}_.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,n=t._fullLayout||{};if(n._skipDefaults)delete n._skipDefaults;else{var o,l=t._fullLayout={},u=t.layout||{},f=t._fullData||[],h=t._fullData=[],p=t.data||[],v=t.calcdata||[],g=t._context||{};t._transitionData||_.createTransitionData(t),l._dfltTitle={plot:b(t,\"Click to enter Plot title\"),x:b(t,\"Click to enter X axis title\"),y:b(t,\"Click to enter Y axis title\"),colorbar:b(t,\"Click to enter Colorscale title\"),annotation:b(t,\"new text\")},l._traceWord=b(t,\"trace\");var y=M(t,k);if(l._mapboxAccessToken=g.mapboxAccessToken,n._initialAutoSizeIsDone){var m=n.width,w=n.height;_.supplyLayoutGlobalDefaults(u,l,y),u.width||(l.width=m),u.height||(l.height=w),_.sanitizeMargins(l)}else{_.supplyLayoutGlobalDefaults(u,l,y);var T=!u.width||!u.height,S=l.autosize,E=g.autosizable;T&&(S||E)?_.plotAutoSize(t,u,l):T&&_.sanitizeMargins(l),!S&&T&&(u.width=l.width,u.height=l.height)}l._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),{numberFormat:function(e){try{e=a(t).format(c.adjustFormat(e))}catch(t){return c.warnBadFormat(e),c.noFormat}return e},timeFormat:i(t).utcFormat}}(y,l.separators),l._extraFormat=M(t,A),l._initialAutoSizeIsDone=!0,l._dataLength=p.length,l._modules=[],l._visibleModules=[],l._basePlotModules=[];var L=l._subplots=function(){var t,e,r=s.collectableSubplotTypes,n={};if(!r){r=[];var i=s.subplotsRegistry;for(var a in i){var o=i[a].attr;if(o&&(r.push(a),Array.isArray(o)))for(e=0;e<o.length;e++)c.pushUnique(r,o[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),C=l._splomAxes={x:{},y:{}},O=l._splomSubplots={};l._splomGridDflt={},l._scatterStackOpts={},l._firstScatter={},l._alignmentOpts={},l._colorAxes={},l._requestRangeslider={},l._traceUids=function(t,e){var r,n,i=e.length,a=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&a.push(o),n=o}var s=a.length,l=new Array(i),u={};function f(t,e){l[e]=t,u[t]=1}function h(t,e){if(t&&\"string\"==typeof t&&!u[t])return f(t,e),!0}for(r=0;r<i;r++){var p=e[r].uid;\"number\"==typeof p&&(p=String(p)),h(p,r)||r<s&&h(a[r].uid,r)||f(c.randstr(u),r)}return l}(f,p),l._globalTransforms=(t._context||{}).globalTransforms,_.supplyDataDefaults(p,h,u,l);var I=Object.keys(C.x),D=Object.keys(C.y);if(I.length>1&&D.length>1){for(s.getComponentMethod(\"grid\",\"sizeDefaults\")(u,l),o=0;o<I.length;o++)c.pushUnique(L.xaxis,I[o]);for(o=0;o<D.length;o++)c.pushUnique(L.yaxis,D[o]);for(var z in O)c.pushUnique(L.cartesian,z)}if(l._has=_._hasPlotType.bind(l),f.length===h.length)for(o=0;o<h.length;o++)x(h[o],f[o]);_.supplyLayoutModuleDefaults(u,l,h,t._transitionData);var R=l._visibleModules,F=[];for(o=0;o<R.length;o++){var B=R[o].crossTraceDefaults;B&&c.pushUnique(F,B)}for(o=0;o<F.length;o++)F[o](h,l);l._hasOnlyLargeSploms=1===l._basePlotModules.length&&\"splom\"===l._basePlotModules[0].name&&I.length>15&&D.length>15&&0===l.shapes.length&&0===l.images.length,_.linkSubplots(h,l,f,n),_.cleanPlot(h,l,f,n);var N=!(!n._has||!n._has(\"gl2d\")),j=!(!l._has||!l._has(\"gl2d\")),U=!(!n._has||!n._has(\"cartesian\"))||N,V=!(!l._has||!l._has(\"cartesian\"))||j;U&&!V?n._bgLayer.remove():V&&!U&&(l._shouldCreateBgLayer=!0),n._zoomlayer&&!t._dragging&&d({_fullLayout:n}),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i<t.length;i++){var a=t[i];a.meta?n[a.index]=a._meta={meta:a.meta}:e.meta&&(a._meta={meta:e.meta}),e.meta&&(a._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,l),x(l,n),s.getComponentMethod(\"colorscale\",\"crossTraceDefaults\")(h,l),l._preGUI||(l._preGUI={}),l._tracePreGUI||(l._tracePreGUI={});var H,q=l._tracePreGUI,G={};for(H in q)G[H]=\"old\";for(o=0;o<h.length;o++)G[H=h[o]._fullInput.uid]||(q[H]={}),G[H]=\"new\";for(H in G)\"old\"===G[H]&&delete q[H];P(l),s.getComponentMethod(\"rangeslider\",\"makeData\")(l),r||v.length!==h.length||_.supplyDefaultsUpdateCalc(v,h)}},_.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=(t[r]||[])[0];if(i&&i.trace){var a=i.trace;if(a._hasCalcTransform){var o,s,l,u=a._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],l=c.nestedProperty(a,s).get().slice(),c.nestedProperty(n,s).set(l)}i.trace=n}}},_.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},_._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var i=n[e].name;if(i===t)return!0;var a=s.modules[i];if(a&&a.categories[t])return!0}return!1},_.cleanPlot=function(t,e,r,n){var i,a,o=n._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has(\"gl\"),u=e._has&&e._has(\"gl\");l&&!u&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(\".gl-canvas\").remove(),n._glcontainer.selectAll(\".no-webgl\").remove(),n._glcanvas=null);var c=!!n._infolayer;t:for(i=0;i<r.length;i++){var f=r[i].uid;for(a=0;a<t.length;a++)if(f===t[a].uid)continue t;c&&n._infolayer.select(\".cb\"+f).remove()}},_.linkSubplots=function(t,e,r,n){var i,a,o=n._plots||{},l=e._plots={},u=e._subplots,f={_fullData:t,_fullLayout:e},h=u.cartesian.concat(u.gl2d||[]);for(i=0;i<h.length;i++){var d,v=h[i],g=o[v],y=p.getFromId(f,v,\"x\"),m=p.getFromId(f,v,\"y\");for(g?d=l[v]=g:(d=l[v]={}).id=v,y._counterAxes.push(m._id),m._counterAxes.push(y._id),y._subplotsWith.push(v),m._subplotsWith.push(v),d.xaxis=y,d.yaxis=m,d._hasClipOnAxisFalse=!1,a=0;a<t.length;a++){var x=t[a];if(x.xaxis===d.xaxis._id&&x.yaxis===d.yaxis._id&&!1===x.cliponaxis){d._hasClipOnAxisFalse=!0;break}}}var b,_=p.list(f,null,!0);for(i=0;i<_.length;i++){var w=null;(b=_[i]).overlaying&&(w=p.getFromId(f,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis=\"free\"===b.anchor?null:p.getFromId(f,b.anchor)}for(i=0;i<_.length;i++)if((b=_[i])._counterAxes.sort(p.idSort),b._subplotsWith.sort(c.subplotSort),b._mainSubplot=S(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf(\"across\")||b.automargin&&b.mirror&&\"free\"!==b.anchor||s.getComponentMethod(\"rangeslider\",\"isVisible\")(b))){var T=1,k=0;for(a=0;a<b._counterAxes.length;a++){var A=p.getFromId(f,b._counterAxes[a]);T=Math.min(T,A.domain[0]),k=Math.max(k,A.domain[1])}T<k&&(b._counterDomainMin=T,b._counterDomainMax=k)}},_.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],l.crawl(t._module.attributes,(function(t,n,i,a){r[a]=n,r.length=a+1,\"color\"===t.valType&&void 0===t.dflt&&e.push(r.join(\".\"))}))),n=0;n<e.length;n++)c.nestedProperty(t,\"_input.\"+e[n]).get()||c.nestedProperty(t,e[n]).set(null)},_.supplyDataDefaults=function(t,e,r,n){var i,a,o,l=n._modules,f=n._visibleModules,h=n._basePlotModules,p=0,d=0;function v(t){e.push(t);var r=t._module;r&&(c.pushUnique(l,r),!0===t.visible&&c.pushUnique(f,r),c.pushUnique(h,t._module.basePlotModule),p++,!1!==t._input.visible&&d++)}n._transformModules=[];var g={},y=[],m=(r.template||{}).data||{},b=u.traceTemplater(m);for(i=0;i<t.length;i++){if(o=t[i],(a=b.newTrace(o)).uid=n._traceUids[i],_.supplyTraceDefaults(o,a,d,n,i),a.index=i,a._input=o,a._expandedIndex=p,a.transforms&&a.transforms.length)for(var w=!1!==o.visible&&!1===a.visible,T=L(a,e,r,n),k=0;k<T.length;k++){var A=T[k],M={_template:a._template,type:a.type,uid:a.uid+k};w&&!1===A.visible&&delete A.visible,_.supplyTraceDefaults(A,M,p,n,i),x(M,A),M.index=i,M._input=o,M._fullInput=a,M._expandedIndex=p,M._expandedInput=A,v(M)}else a._fullInput=a,a._expandedInput=a,v(a);s.traceIs(a,\"carpetAxis\")&&(g[a.carpet]=a),s.traceIs(a,\"carpetDependent\")&&y.push(i)}for(i=0;i<y.length;i++)if((a=e[y[i]]).visible){var S=g[a.carpet];a._carpet=S,S&&S.visible?(a.xaxis=S.xaxis,a.yaxis=S.yaxis):a.visible=!1}},_.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return c.coerce(t||{},r,g,e,n)}if(n(\"mode\"),n(\"direction\"),n(\"fromcurrent\"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=_.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=_.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=_.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=_.supplyAnimationTransitionDefaults(t.transition||{});return r},_.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.frame,r,n)}return r(\"duration\"),r(\"redraw\"),e},_.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return c.coerce(t||{},e,g.transition,r,n)}return r(\"duration\"),r(\"easing\"),e},_.supplyFrameDefaults=function(t){var e={};function r(r,n){return c.coerce(t,e,y,r,n)}return r(\"group\"),r(\"name\"),r(\"traces\"),r(\"baseframe\"),r(\"data\"),r(\"layout\"),e},_.supplyTraceDefaults=function(t,e,r,n,i){var a,o=n.colorway||f.defaults,l=o[r%o.length];function u(r,n){return c.coerce(t,e,_.attributes,r,n)}var h=u(\"visible\");u(\"type\"),u(\"name\",n._traceWord+\" \"+i),u(\"uirevision\",n.uirevision);var p=_.getModule(e);if(e._module=p,p){var d=p.basePlotModule,v=d.attr,g=d.attributes;if(v&&g){var y=n._subplots,m=\"\";if(h||\"gl2d\"!==d.name){if(Array.isArray(v))for(a=0;a<v.length;a++){var x=v[a],b=c.coerce(t,e,g,x);y[x]&&c.pushUnique(y[x],b),m+=b}else m=c.coerce(t,e,g,v);y[d.name]&&c.pushUnique(y[d.name],m)}}}return h&&(u(\"customdata\"),u(\"ids\"),u(\"meta\"),s.traceIs(e,\"showLegend\")?(c.coerce(t,e,p.attributes.showlegend?p.attributes:_.attributes,\"showlegend\"),u(\"legend\"),u(\"legendwidth\"),u(\"legendgroup\"),u(\"legendgrouptitle.text\"),u(\"legendrank\"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,l,n),s.traceIs(e,\"noOpacity\")||u(\"opacity\"),s.traceIs(e,\"notLegendIsolatable\")&&(e.visible=!!e.visible),s.traceIs(e,\"noHover\")||(e.hovertemplate||c.coerceHoverinfo(t,e,n),\"parcats\"!==e.type&&s.getComponentMethod(\"fx\",\"supplyDefaults\")(t,e,l,n)),p&&p.selectPoints&&u(\"selectedpoints\"),_.supplyTransformDefaults(t,e,n)),e},_.hasMakesDataTransform=E,_.supplyTransformDefaults=function(t,e,r){if(e._length||E(t)){var n=r._globalTransforms||[],i=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var a=t.transforms||[],o=n.concat(a),s=e.transforms=[],l=0;l<o.length;l++){var u,f=o[l],h=f.type,p=w[h],d=!(f._module&&f._module===p),v=p&&\"function\"==typeof p.transform;p||c.warn(\"Unrecognized transform type \"+h+\".\"),p&&p.supplyDefaults&&(d||v)?((u=p.supplyDefaults(f,e,r,t)).type=h,u._module=p,c.pushUnique(i,p)):u=c.extendFlat({},f),s.push(u)}}},_.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return c.coerce(t,e,_.layoutAttributes,r,n)}var i=t.template;c.isPlainObject(i)&&(e.template=i,e._template=i.layout,e._dataTemplate=i.data),n(\"autotypenumbers\");var a=c.coerceFont(n,\"font\"),o=a.size;c.coerceFont(n,\"title.font\",c.extendFlat({},a,{size:Math.round(1.4*o)})),n(\"title.text\",e._dfltTitle.plot),n(\"title.xref\");var l=n(\"title.yref\");n(\"title.pad.t\"),n(\"title.pad.r\"),n(\"title.pad.b\"),n(\"title.pad.l\");var u=n(\"title.automargin\");n(\"title.x\"),n(\"title.xanchor\"),n(\"title.y\"),n(\"title.yanchor\"),u&&(\"paper\"===l&&(0!==e.title.y&&(e.title.y=1),\"auto\"===e.title.yanchor&&(e.title.yanchor=0===e.title.y?\"top\":\"bottom\")),\"container\"===l&&(\"auto\"===e.title.y&&(e.title.y=1),\"auto\"===e.title.yanchor&&(e.title.yanchor=e.title.y<.5?\"bottom\":\"top\"))),n(\"uniformtext.mode\")&&n(\"uniformtext.minsize\"),n(\"autosize\",!(t.width&&t.height)),n(\"width\"),n(\"height\"),n(\"minreducedwidth\"),n(\"minreducedheight\"),n(\"margin.l\"),n(\"margin.r\"),n(\"margin.t\"),n(\"margin.b\"),n(\"margin.pad\"),n(\"margin.autoexpand\"),t.width&&t.height&&_.sanitizeMargins(e),s.getComponentMethod(\"grid\",\"sizeDefaults\")(t,e),n(\"paper_bgcolor\"),n(\"separators\",r.decimal+r.thousands),n(\"hidesources\"),n(\"colorway\"),n(\"datarevision\");var f=n(\"uirevision\");n(\"editrevision\",f),n(\"selectionrevision\",f),s.getComponentMethod(\"modebar\",\"supplyLayoutDefaults\")(t,e),s.getComponentMethod(\"shapes\",\"supplyDrawNewShapeDefaults\")(t,e,n),s.getComponentMethod(\"selections\",\"supplyDrawNewSelectionDefaults\")(t,e,n),n(\"meta\"),c.isPlainObject(t.transition)&&(n(\"transition.duration\"),n(\"transition.easing\"),n(\"transition.ordering\")),s.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\"),s.getComponentMethod(\"fx\",\"supplyLayoutGlobalDefaults\")(t,e,n),c.coerce(t,e,v,\"scattermode\")},_.plotAutoSize=function(t,e,r){var n,i,a=t._context||{},s=a.frameMargins,l=c.isPlotDiv(t);if(l&&t.emit(\"plotly_autosize\"),a.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow=\"hidden\";else{var u=l?window.getComputedStyle(t):{};if(n=C(u.width)||C(u.maxWidth)||r.width,i=C(u.height)||C(u.maxHeight)||r.height,o(s)&&s>0){var f=1-2*s;n=Math.round(f*n),i=Math.round(f*i)}}var h=_.layoutAttributes.width.min,p=_.layoutAttributes.height.min;n<h&&(n=h),i<p&&(i=p);var d=!e.width&&Math.abs(r.width-n)>1,v=!e.height&&Math.abs(r.height-i)>1;(v||d)&&(d&&(r.width=n),v&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),_.sanitizeMargins(r)},_.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a,o,l=s.componentsRegistry,u=e._basePlotModules,f=s.subplotsRegistry.cartesian;for(i in l)(o=l[i]).includeBasePlot&&o.includeBasePlot(t,e);for(var h in u.length||u.push(f),e._has(\"cartesian\")&&(s.getComponentMethod(\"grid\",\"contentDefaults\")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(c.subplotSort);for(a=0;a<u.length;a++)(o=u[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var p=e._modules;for(a=0;a<p.length;a++)(o=p[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(a=0;a<d.length;a++)(o=d[a]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r,n);for(i in l)(o=l[i]).supplyLayoutDefaults&&o.supplyLayoutDefaults(t,e,r)},_.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(\".gl-canvas\").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),c.clearThrottle(),c.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},_.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var i=r[e];i.style&&c.pushUnique(n,i.style)}for(e=0;e<n.length;e++)n[e](t)},_.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,i=t.margin,a=r-(i.l+i.r),o=n-(i.t+i.b);a<0&&(e=(r-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),o<0&&(e=(n-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},_.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},_.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},_.autoMargin=function(t,e,r){var n=t._fullLayout,i=n.width,a=n.height,o=n.margin,s=n.minreducedwidth,l=n.minreducedheight,u=c.constrain(i-o.l-o.r,2,s),f=c.constrain(a-o.t-o.b,2,l),h=Math.max(0,i-u),p=Math.max(0,a-f),d=n._pushmargin,v=n._pushmarginIds;if(!1!==o.autoexpand){if(r){var g=r.pad;if(void 0===g&&(g=Math.min(12,o.l,o.r,o.t,o.b)),h){var y=(r.l+r.r)/h;y>1&&(r.l/=y,r.r/=y)}if(p){var m=(r.t+r.b)/p;m>1&&(r.t/=m,r.b/=m)}var x=void 0!==r.xl?r.xl:r.x,b=void 0!==r.xr?r.xr:r.x,w=void 0!==r.yt?r.yt:r.y,T=void 0!==r.yb?r.yb:r.y;d[e]={l:{val:x,size:r.l+g},r:{val:b,size:r.r+g},b:{val:T,size:r.b+g},t:{val:w,size:r.t+g}},v[e]=1}else delete d[e],delete v[e];if(!n._replotting)return _.doAutoMargin(t)}},_.doAutoMargin=function(t){var e=t._fullLayout,r=e.width,n=e.height;e._size||(e._size={}),P(e);var i=e._size,a=e.margin,l={t:0,b:0,l:0,r:0},u=c.extendFlat({},i),f=a.l,h=a.r,d=a.t,v=a.b,g=e._pushmargin,y=e._pushmarginIds,m=e.minreducedwidth,x=e.minreducedheight;if(!1!==a.autoexpand){for(var b in g)y[b]||delete g[b];var w=t._fullLayout._reservedMargin;for(var T in w)for(var k in w[T]){var A=w[T][k];l[k]=Math.max(l[k],A)}for(var M in g.base={l:{val:0,size:f},r:{val:1,size:h},t:{val:1,size:d},b:{val:0,size:v}},l){var S=0;for(var E in g)\"base\"!==E&&o(g[E][M].size)&&(S=g[E][M].size>S?g[E][M].size:S);var L=Math.max(0,a[M]-S);l[M]=Math.max(0,l[M]-L)}for(var C in g){var O=g[C].l||{},I=g[C].b||{},D=O.val,z=O.size,R=I.val,F=I.size,B=r-l.r-l.l,N=n-l.t-l.b;for(var j in g){if(o(z)&&g[j].r){var U=g[j].r.val,V=g[j].r.size;if(U>D){var H=(z*U+(V-B)*D)/(U-D),q=(V*(1-D)+(z-B)*(1-U))/(U-D);H+q>f+h&&(f=H,h=q)}}if(o(F)&&g[j].t){var G=g[j].t.val,Z=g[j].t.size;if(G>R){var Y=(F*G+(Z-N)*R)/(G-R),W=(Z*(1-R)+(F-N)*(1-G))/(G-R);Y+W>v+d&&(v=Y,d=W)}}}}}var X=c.constrain(r-a.l-a.r,2,m),J=c.constrain(n-a.t-a.b,2,x),K=Math.max(0,r-X),$=Math.max(0,n-J);if(K){var Q=(f+h)/K;Q>1&&(f/=Q,h/=Q)}if($){var tt=(v+d)/$;tt>1&&(v/=tt,d/=tt)}if(i.l=Math.round(f)+l.l,i.r=Math.round(h)+l.r,i.t=Math.round(d)+l.t,i.b=Math.round(v)+l.b,i.p=Math.round(a.pad),i.w=Math.round(r)-i.l-i.r,i.h=Math.round(n)-i.t-i.b,!e._replotting&&(_.didMarginChange(u,i)||function(t){if(\"_redrawFromAutoMarginCount\"in t._fullLayout)return!1;var e=p.list(t,\"\",!0);for(var r in e)if(e[r].autoshift||e[r].shift)return!0;return!1}(t))){\"_redrawFromAutoMarginCount\"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var et=3*(1+Object.keys(y).length);if(e._redrawFromAutoMarginCount<et)return s.call(\"_doPlot\",t);e._size=u,c.warn(\"Too many auto-margin redraws.\")}!function(t){var e=p.list(t,\"\",!0);[\"_adjustTickLabelsOverflow\",\"_hideCounterAxisInsideTickLabels\"].forEach((function(t){for(var r=0;r<e.length;r++){var n=e[r][t];n&&n()}}))}(t)};var O=[\"l\",\"r\",\"t\",\"b\",\"p\",\"w\",\"h\"];function I(t,e,r){var n=!1,i=[_.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,_.rehover,_.reselect,function(){return t.emit(\"plotly_transitioning\",[]),new Promise((function(i){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){n=!0})),r.redraw&&t._transitionData._interruptCallbacks.push((function(){return s.call(\"redraw\",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit(\"plotly_transitioninterrupted\",[])}));var a=0,o=0;function l(){return a++,function(){var e;o++,n||o!==a||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(r.redraw)return s.call(\"redraw\",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit(\"plotly_transitioned\",[])})).then(e)))}}r.runFn(l),setTimeout(l())}))}],a=c.syncOrAsync(i,t);return a&&a.then||(a=Promise.resolve()),a.then((function(){return t}))}_.didMarginChange=function(t,e){for(var r=0;r<O.length;r++){var n=O[r],i=t[n],a=e[n];if(!o(i)||Math.abs(a-i)>1)return!0}return!1},_.graphJson=function(t,e,r,n,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&_.supplyDefaults(t);var o=i?t._fullData:t.data,s=i?t._fullLayout:t.layout,l=(t._transitionData||{})._frames;function u(t,e){if(\"function\"==typeof t)return e?\"_function_\":null;if(c.isPlainObject(t)){var n,i={};return Object.keys(t).sort().forEach((function(a){if(-1===[\"_\",\"[\"].indexOf(a.charAt(0)))if(\"function\"!=typeof t[a]){if(\"keepdata\"===r){if(\"src\"===a.substr(a.length-3))return}else if(\"keepstream\"===r){if(\"string\"==typeof(n=t[a+\"src\"])&&n.indexOf(\":\")>0&&!c.isPlainObject(t.stream))return}else if(\"keepall\"!==r&&\"string\"==typeof(n=t[a+\"src\"])&&n.indexOf(\":\")>0)return;i[a]=u(t[a],e)}else e&&(i[a]=\"_function\")})),i}return Array.isArray(t)?t.map((function(t){return u(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var f={data:(o||[]).map((function(t){var r=u(t);return e&&delete r.fit,r}))};if(!e&&(f.layout=u(s),i)){var h=s._size;f.layout.computed={margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return l&&(f.frames=u(l)),a&&(f.config=u(t._context,!0)),\"object\"===n?f:JSON.stringify(f)},_.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case\"replace\":i=n.value;var s=(a[n.index]||{}).name,l=i.name;a[n.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case\"insert\":o[(i=n.value).name]=i,a.splice(n.index,0,i);break;case\"delete\":delete o[(i=a[n.index]).name],a.splice(n.index,1)}return Promise.resolve()},_.computeFrame=function(t,e){var r,n,i,a,o=t._transitionData._frameHash;if(!e)throw new Error(\"computeFrame must be given a string frame name\");var s=o[e.toString()];if(!s)return!1;for(var l=[s],u=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===u.indexOf(s.name);)l.push(s),u.push(s.name);for(var c={};s=l.pop();)if(s.layout&&(c.layout=_.extendLayout(c.layout,s.layout)),s.data){if(c.data||(c.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(c.traces||(c.traces=[]),r=0;r<s.data.length;r++)null!=(i=n[r])&&(-1===(a=c.traces.indexOf(i))&&(a=c.data.length,c.traces[a]=i),c.data[a]=_.extendTrace(c.data[a],s.data[r]))}return c},_.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var i=r[n];i&&i.name&&(e[i.name]=i)}},_.extendObjectWithContainers=function(t,e,r){var n,i,a,o,s,l,u,f=c.extendDeepNoArrays({},e||{}),h=c.expandObjectPaths(f),p={};if(r&&r.length)for(a=0;a<r.length;a++)void 0===(i=(n=c.nestedProperty(h,r[a])).get())?c.nestedProperty(p,r[a]).set(null):(n.set(null),c.nestedProperty(p,r[a]).set(i));if(t=c.extendDeepNoArrays(t||{},h),r&&r.length)for(a=0;a<r.length;a++)if(l=c.nestedProperty(p,r[a]).get()){for(u=(s=c.nestedProperty(t,r[a])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<l.length;o++){var d=l[o];u[o]=null===d?null:_.extendObjectWithContainers(u[o],d)}s.set(u)}return t},_.dataArrayContainers=[\"transforms\",\"dimensions\"],_.layoutArrayContainers=s.layoutArrayContainers,_.extendTrace=function(t,e){return _.extendObjectWithContainers(t,e,_.dataArrayContainers)},_.extendLayout=function(t,e){return _.extendObjectWithContainers(t,e,_.layoutArrayContainers)},_.transition=function(t,e,r,n,i,a){var o={redraw:i.redraw},s={},l=[];return o.prepareFn=function(){for(var i=Array.isArray(e)?e.length:0,a=n.slice(0,i),o=0;o<a.length;o++){var u=a[o],f=t._fullData[u]._module;if(f){if(f.animatable){var h=f.basePlotModule.name;s[h]||(s[h]=[]),s[h].push(u)}t.data[a[o]]=_.extendTrace(t.data[a[o]],e[o])}}var p=c.expandObjectPaths(c.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var v in p)d.test(v)&&delete p[v].range;_.extendLayout(t.layout,p),delete t.calcdata,_.supplyDefaults(t),_.doCalcdata(t);var g=c.expandObjectPaths(r);if(g){var y=t._fullLayout._plots;for(var m in y){var x=y[m],b=x.xaxis,w=x.yaxis,T=b.range.slice(),k=w.range.slice(),A=null,M=null,S=null,E=null;Array.isArray(g[b._name+\".range\"])?A=g[b._name+\".range\"].slice():Array.isArray((g[b._name]||{}).range)&&(A=g[b._name].range.slice()),Array.isArray(g[w._name+\".range\"])?M=g[w._name+\".range\"].slice():Array.isArray((g[w._name]||{}).range)&&(M=g[w._name].range.slice()),T&&A&&(b.r2l(T[0])!==b.r2l(A[0])||b.r2l(T[1])!==b.r2l(A[1]))&&(S={xr0:T,xr1:A}),k&&M&&(w.r2l(k[0])!==w.r2l(M[0])||w.r2l(k[1])!==w.r2l(M[1]))&&(E={yr0:k,yr1:M}),(S||E)&&l.push(c.extendFlat({plotinfo:x},S,E))}}return Promise.resolve()},o.runFn=function(e){var n,i,o=t._fullLayout._basePlotModules,u=l.length;if(r)for(i=0;i<o.length;i++)o[i].transitionAxes&&o[i].transitionAxes(t,l,a,e);for(var f in u?((n=c.extendFlat({},a)).duration=0,delete s.cartesian):n=a,s){var h=s[f];t._fullData[h[0]]._module.basePlotModule.plot(t,h,n,e)}},I(t,a,o)},_.transitionFromReact=function(t,e,r,n){var i=t._fullLayout,a=i.transition,o={},s=[];return o.prepareFn=function(){var t=i._plots;for(var a in o.redraw=!1,\"some\"===e.anim&&(o.redraw=!0),\"some\"===r.anim&&(o.redraw=!0),t){var l=t[a],u=l.xaxis,f=l.yaxis,h=n[u._name].range.slice(),p=n[f._name].range.slice(),d=u.range.slice(),v=f.range.slice();u.setScale(),f.setScale();var g=null,y=null;u.r2l(h[0])===u.r2l(d[0])&&u.r2l(h[1])===u.r2l(d[1])||(g={xr0:h,xr1:d}),f.r2l(p[0])===f.r2l(v[0])&&f.r2l(p[1])===f.r2l(v[1])||(y={yr0:p,yr1:v}),(g||y)&&s.push(c.extendFlat({plotinfo:l},g,y))}return Promise.resolve()},o.runFn=function(r){for(var n,i,o,l=t._fullData,u=t._fullLayout._basePlotModules,f=[],h=0;h<l.length;h++)f.push(h);function p(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){if(t._fullLayout)for(var e=0;e<u.length;e++)u[e].plot(t,o,i,r)}s.length&&e.anim?\"traces first\"===a.ordering?(n=c.extendFlat({},a,{duration:0}),o=f,i=a,setTimeout(p,a.duration),d()):(n=a,o=null,i=c.extendFlat({},a,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n=a,p()):e.anim&&(o=f,i=a,d())},I(t,a,o)},_.doCalcdata=function(t,e){var r,n,i,a,o=p.list(t),u=t._fullData,f=t._fullLayout,d=new Array(u.length),v=(t.calcdata||[]).slice();for(t.calcdata=d,f._numBoxes=0,f._numViolins=0,f._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,f._piecolormap={},f._sunburstcolormap={},f._treemapcolormap={},f._iciclecolormap={},f._funnelareacolormap={},i=0;i<u.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(d[i]=v[i]);for(i=0;i<u.length;i++)(r=u[i])._arrayAttrs=l.findArrayAttributes(r),r._extremes={};var g=f._subplots.polar||[];for(i=0;i<g.length;i++)o.push(f[g[i]].radialaxis,f[g[i]].angularaxis);for(var y in f._colorAxes){var m=f[y];!1!==m.cauto&&(delete m.cmin,delete m.cmax)}var x=!1;function b(e){if(r=u[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var i=n.calc(t,r);i[0]&&i[0].t&&i[0].t._scene&&delete i[0].t._scene.dirty}for(a=0;a<r.transforms.length;a++){var o=r.transforms[a];(n=w[o.type])&&n.calcTransform&&(r._hasCalcTransform=!0,x=!0,n.calcTransform(t,r,o))}}}function _(e,i){if(r=u[e],!!(n=r._module).isContainer===i){var o=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var s=r.transforms||[];for(a=s.length-1;a>=0;a--)if(s[a].enabled){r._indexToPoints=s[a]._indexToPoints;break}n&&n.calc&&(o=n.calc(t,r))}Array.isArray(o)&&o[0]||(o=[{x:h,y:h}]),o[0].t||(o[0].t={}),o[0].trace=r,d[e]=o}}for(z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)b(i);for(x&&z(o,u,f),i=0;i<u.length;i++)_(i,!0);for(i=0;i<u.length;i++)_(i,!1);R(t);var T=function(t,e){var r,n,i,a,o,l=[];function u(t,r,n){var i=r._id.charAt(0);if(\"histogram2dcontour\"===t){var a=r._counterAxes[0],o=p.getFromId(e,a),s=\"x\"===i||\"x\"===a&&\"category\"===o.type,l=\"y\"===i||\"y\"===a&&\"category\"===o.type;return function(t,e){return 0===t||0===e||s&&t===n[e].length-1||l&&e===n.length-1?-1:(\"y\"===i?e:t)-1}}return function(t,e){return\"y\"===i?e:t}}var f={min:function(t){return c.aggNums(Math.min,null,t)},max:function(t){return c.aggNums(Math.max,null,t)},sum:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},total:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},mean:function(t){return c.mean(t)},median:function(t){return c.median(t)}};function h(t,e){return t[1]-e[1]}function d(t,e){return e[1]-t[1]}for(r=0;r<t.length;r++){var v=t[r];if(\"category\"===v.type){var g=v.categoryorder.match(D);if(g){var y=g[1],m=g[2],x=v._id.charAt(0),b=\"x\"===x,_=[];for(n=0;n<v._categories.length;n++)_.push([v._categories[n],[]]);for(n=0;n<v._traceIndices.length;n++){var w=v._traceIndices[n],T=e._fullData[w];if(!0===T.visible){var k=T.type;s.traceIs(T,\"histogram\")&&(delete T._xautoBinFinished,delete T._yautoBinFinished);var A=\"splom\"===k,M=\"scattergl\"===k,S=e.calcdata[w];for(i=0;i<S.length;i++){var E,L,C=S[i];if(A){var P=T._axesDim[v._id];if(!b){var O=T._diag[P][0];O&&(v=e._fullLayout[p.id2name(O)])}var I=C.trace.dimensions[P].values;for(a=0;a<I.length;a++)for(E=v._categoriesMap[I[a]],o=0;o<C.trace.dimensions.length;o++)if(o!==P){var z=C.trace.dimensions[o];_[E][1].push(z.values[a])}}else if(M){for(a=0;a<C.t.x.length;a++)b?(E=C.t.x[a],L=C.t.y[a]):(E=C.t.y[a],L=C.t.x[a]),_[E][1].push(L);C.t&&C.t._scene&&delete C.t._scene.dirty}else if(C.hasOwnProperty(\"z\")){L=C.z;var R=u(T.type,v,L);for(a=0;a<L.length;a++)for(o=0;o<L[a].length;o++)(E=R(o,a))+1&&_[E][1].push(L[a][o])}else for(void 0===(E=C.p)&&(E=C[x]),void 0===(L=C.s)&&(L=C.v),void 0===L&&(L=b?C.y:C.x),Array.isArray(L)||(L=void 0===L?[]:[L]),a=0;a<L.length;a++)_[E][1].push(L[a])}}}v._categoriesValue=_;var F=[];for(n=0;n<_.length;n++)F.push([_[n][0],f[y](_[n][1])]);F.sort(\"descending\"===m?d:h),v._categoriesAggregatedValue=F,v._initialCategories=F.map((function(t){return t[0]})),l=l.concat(v.sortByInitialCategories())}}}return l}(o,t);if(T.length){for(f._numBoxes=0,f._numViolins=0,i=0;i<T.length;i++)_(T[i],!0);for(i=0;i<T.length;i++)_(T[i],!1);R(t)}s.getComponentMethod(\"fx\",\"calc\")(t),s.getComponentMethod(\"errorbars\",\"calc\")(t)};var D=/(total|sum|min|max|mean|median) (ascending|descending)/;function z(t,e,r){var n={};function i(t){t.clearCalc(),\"multicategory\"===t.type&&t.setupMultiCategory(e),n[t._id]=1}c.simpleMap(t,i);for(var a=r._axisMatchGroups||[],o=0;o<a.length;o++)for(var s in a[o])n[s]||i(r[p.id2name(s)])}function R(t){var e,r,n,i=t._fullLayout,a=i._visibleModules,o={};for(r=0;r<a.length;r++){var s=a[r],l=s.crossTraceCalc;if(l){var u=s.basePlotModule.name;o[u]?c.pushUnique(o[u],l):o[u]=[l]}}for(n in o){var f=o[n],h=i._subplots[n];if(Array.isArray(h))for(e=0;e<h.length;e++){var p=h[e],d=\"cartesian\"===n?i._plots[p]:i[p];for(r=0;r<f.length;r++)f[r](t,d,p)}else for(r=0;r<f.length;r++)f[r](t)}}_.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},_.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},_.reselect=function(t){var e=t._fullLayout,r=(t.layout||{}).selections,n=e._previousSelections;e._previousSelections=r;var i=e._reselect||JSON.stringify(r)!==JSON.stringify(n);s.getComponentMethod(\"selections\",\"reselect\")(t,i)},_.generalUpdatePerTraceModule=function(t,e,r,n){var i,a=e.traceHash,o={};for(i=0;i<r.length;i++){var s=r[i],l=s[0].trace;l.visible&&(o[l.type]=o[l.type]||[],o[l.type].push(s))}for(var u in a)if(!o[u]){var f=a[u][0];f[0].trace.visible=!1,o[u]=[f]}for(var h in o){var p=o[h];p[0][0].trace._module.plot(t,e,c.filterVisible(p),n)}e.traceHash=o},_.plotBasePlot=function(t,e,r,n,i){var a=s.getModule(t),o=m(e.calcdata,a)[0];a.plot(e,o,n,i)},_.cleanBasePlot=function(t,e,r,n,i){var a=i._has&&i._has(t),o=r._has&&r._has(t);a&&!o&&i[\"_\"+t+\"layer\"].selectAll(\"g.trace\").remove()}},9813:function(t){\"use strict\";t.exports={attr:\"subplot\",name:\"polar\",axisNames:[\"angularaxis\",\"radialaxis\"],axisName2dataArray:{angularaxis:\"theta\",radialaxis:\"r\"},layerNames:[\"draglayer\",\"plotbg\",\"backplot\",\"angular-grid\",\"radial-grid\",\"frontplot\",\"angular-line\",\"radial-line\",\"angular-axis\",\"radial-axis\"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},10869:function(t,e,r){\"use strict\";var n=r(71828),i=r(61082).tester,a=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function u(t,e,r,n){var i,a,o=n[0],s=n[1],l=f(Math.sin(e)-Math.sin(t)),u=f(Math.cos(e)-Math.cos(t)),c=Math.tan(r),h=f(1/c),p=l/u,d=s-p*o;return h?l&&u?a=c*(i=d/(c-p)):u?(i=s*h,a=s):(i=o,a=o*c):l&&u?(i=0,a=d):u?(i=0,a=s):i=a=NaN,[i,a]}function c(t,e,r,i){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,i=new Array(n+1);for(r=0;r<n;r++){var a=e[r];i[r]=[t*Math.cos(a),t*Math.sin(a)]}return i[r]=i[0].slice(),i}(t,i):function(t,e,r,i){var s,c,f=i.length,h=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return u(t,e,r,p(t))}function v(t){return n.mod(t,f)}function g(t){return o(t,[e,r])}var y=a(i,(function(t){return g(t)?l(t,e):1/0})),m=d(i[y],i[v(y-1)],e);for(h.push(m),s=y,c=0;c<f;s++,c++){var x=i[v(s)];if(!g(x))break;h.push(p(x))}var b=a(i,(function(t){return g(t)?l(t,r):1/0})),_=d(i[b],i[v(b+1)],r);return h.push(_),h.push([0,0]),h.push(h[0].slice()),h}(t,e,r,i)}function f(t){return Math.abs(t)>1e-10?t:0}function h(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a<n;a++){var o=t[a];i[a]=[e+o[0],r-o[1]]}return i}t.exports={isPtInsidePolygon:function(t,e,r,n,a){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var u=i(c(s,n[0],n[1],a)),f=i(c(l,n[0],n[1],a)),h=[t*Math.cos(e),t*Math.sin(e)];return f.contains(h)&&!u.contains(h)},findPolygonOffset:function(t,e,r,n){for(var i=1/0,a=1/0,o=c(t,e,r,n),s=0;s<o.length;s++){var l=o[s];i=Math.min(i,l[0]),a=Math.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var r=a(e,(function(e){var r=s(e,t);return r>0?r:1/0})),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:u,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),u=(-o+l)/(2*a),c=(-o-l)/(2*a);return[[u,e*u+i+n],[c,e*c+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return\"M\"+h(c(t,e,r,n),i,a).join(\"L\")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var u=h(c(s,r,n,i),a,o);return\"M\"+h(c(l,r,n,i),a,o).reverse().join(\"L\")+\"M\"+u.join(\"L\")}}},23580:function(t,e,r){\"use strict\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(9813),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:\"subplotid\",dflt:l,editType:\"calc\"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(73812),supplyLayoutDefaults:r(68993),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=n._has&&n._has(\"gl\"),o=e._has&&e._has(\"gl\"),s=a&&!o,u=0;u<i.length;u++){var c=i[u],f=n[c]._subplot;if(!e[c]&&f)for(var h in f.framework.remove(),f.layers[\"radial-axis-title\"].remove(),f.clipPaths)f.clipPaths[h].remove();s&&f._scene&&(f._scene.destroy(),f._scene=null)}},toSVG:r(93612).toSVG}},73812:function(t,e,r){\"use strict\";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},\"plot\",\"from-root\"),u=s({tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,ticklabelstep:i.ticklabelstep,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},\"plot\",\"from-root\"),c={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:\"plot\"},autorange:o({},i.autorange,{editType:\"plot\"}),rangemode:{valType:\"enumerated\",values:[\"tozero\",\"nonnegative\",\"normal\"],dflt:\"tozero\",editType:\"calc\"},minallowed:o({},i.minallowed,{editType:\"plot\"}),maxallowed:o({},i.maxallowed,{editType:\"plot\"}),range:o({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],editType:\"plot\"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:\"angle\",editType:\"plot\"},side:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"clockwise\",editType:\"plot\"},title:{text:o({},i.title.text,{editType:\"plot\",dflt:\"\"}),font:o({},i.title.font,{editType:\"plot\"}),editType:\"plot\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};o(c,l,u);var f={visible:o({},i.visible,{dflt:!0}),type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"category\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\"],dflt:\"degrees\",editType:\"calc\"},period:{valType:\"number\",editType:\"calc\",min:0},direction:{valType:\"enumerated\",values:[\"counterclockwise\",\"clockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"angle\",editType:\"calc\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"};o(f,l,u),t.exports={domain:a({name:\"polar\",editType:\"plot\"}),sector:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],dflt:[0,360],editType:\"plot\"},hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},bgcolor:{valType:\"color\",editType:\"plot\",dflt:n.background},radialaxis:c,angularaxis:f,gridshape:{valType:\"enumerated\",values:[\"circular\",\"linear\"],dflt:\"circular\",editType:\"plot\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"}},68993:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(44467),o=r(49119),s=r(27659).NG,l=r(26218),u=r(38701),c=r(96115),f=r(89426),h=r(15258),p=r(92128),d=r(23074),v=r(4322),g=r(73812),y=r(12101),m=r(9813),x=m.axisNames;function b(t,e,r,o){var v=r(\"bgcolor\");o.bgColor=i.combine(v,o.paper_bgcolor);var b=r(\"sector\");r(\"hole\");var w,T=s(o.fullData,m.name,o.id),k=o.layoutOut;function A(t,e){return r(w+\".\"+t,e)}for(var M=0;M<x.length;M++){w=x[M],n.isPlainObject(t[w])||(t[w]={});var S=t[w],E=a.newContainer(e,w);E._id=E._name=w,E._attr=o.id+\".\"+w,E._traceIndices=T.map((function(t){return t._expandedIndex}));var L=m.axisName2dataArray[w],C=_(S,E,A,T,L,o);h(S,E,A,{axData:T,dataAttr:L});var P=A(\"visible\");switch(y(E,e,k),A(\"uirevision\",e.uirevision),E._m=1,w){case\"radialaxis\":A(\"minallowed\"),A(\"maxallowed\");var O,I=A(\"range\"),D=E.getAutorangeDflt(I),z=A(\"autorange\",D);!I||(null!==I[0]||null!==I[1])&&(null!==I[0]&&null!==I[1]||\"reversed\"!==z&&!0!==z)&&(null===I[0]||\"min\"!==z&&\"max reversed\"!==z)&&(null===I[1]||\"max\"!==z&&\"min reversed\"!==z)||(I=void 0,delete E.range,E.autorange=!0,O=!0),O||(z=A(\"autorange\",D=E.getAutorangeDflt(I))),S.autorange=z,z&&(d(A,z,I),\"linear\"!==C&&\"-\"!==C||A(\"rangemode\"),E.isReversed()&&(E._m=-1)),E.cleanRange(\"range\",{dfltRange:[0,1]});break;case\"angularaxis\":if(\"date\"===C){n.log(\"Polar plots do not support date angular axes yet.\");for(var R=0;R<T.length;R++)T[R].visible=!1;C=S.type=E.type=\"linear\"}A(\"linear\"===C?\"thetaunit\":\"period\");var F=A(\"direction\");A(\"rotation\",{counterclockwise:0,clockwise:90}[F])}if(f(S,E,A,E.type,{tickSuffixDflt:\"degrees\"===E.thetaunit?\"°\":void 0}),P){var B,N,j,U,V=o.font||{};N=(B=A(\"color\"))===S.color?B:V.color,j=V.size,U=V.family,l(S,E,A,E.type),c(S,E,A,E.type,{font:{color:N,size:j,family:U}}),u(S,E,A,{outerTicks:!0}),p(S,E,A,{dfltColor:B,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:g[w]}),A(\"layer\"),\"radialaxis\"===w&&(A(\"side\"),A(\"angle\",b[0]),A(\"title.text\"),n.coerceFont(A,\"title.font\",{color:N,size:n.bigFont(j),family:U}))}\"category\"!==C&&A(\"hoverformat\"),E._input=S}\"category\"===e.angularaxis.type&&r(\"gridshape\")}function _(t,e,r,n,i,a){var o=r(\"autotypenumbers\",a.autotypenumbersDflt);if(\"-\"===r(\"type\")){for(var s,l=0;l<n.length;l++)if(n[l].visible){s=n[l];break}s&&s[i]&&(e.type=v(s[i],\"gregorian\",{noMultiCategory:!0,autotypenumbers:o})),\"-\"===e.type?e.type=\"linear\":t.type=e.type}return e.type}t.exports=function(t,e,r){o(t,e,r,{type:m.name,attributes:g,handleDefaults:b,font:e.font,autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},77997:function(t,e,r){\"use strict\";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strRotate,l=o.strTranslate,u=r(7901),c=r(91424),f=r(74875),h=r(89298),p=r(21994),d=r(12101),v=r(71739).doAutoRange,g=r(29323),y=r(28569),m=r(30211),x=r(92998),b=r(47322).prepSelect,_=r(47322).selectOnClick,w=r(47322).clearOutline,T=r(6964),k=r(33306),A=r(61549).redrawReglTraces,M=r(18783).MID_SHIFT,S=r(9813),E=r(10869),L=r(23893),C=L.smith,P=L.reactanceArc,O=L.resistanceArc,I=L.smithTransform,D=o._,z=o.mod,R=o.deg2rad,F=o.rad2deg;function B(t,e,r){this.isSmith=r||!1,this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var n=t._fullLayout,i=\"clip\"+n._uid+e;this.clipIds.forTraces=i+\"-for-traces\",this.clipPaths.forTraces=n._clips.append(\"clipPath\").attr(\"id\",this.clipIds.forTraces),this.clipPaths.forTraces.append(\"path\"),this.framework=n[\"_\"+(r?\"smith\":\"polar\")+\"layer\"].append(\"g\").attr(\"class\",e),this.getHole=function(t){return this.isSmith?0:t.hole},this.getSector=function(t){return this.isSmith?[0,360]:t.sector},this.getRadial=function(t){return this.isSmith?t.realaxis:t.radialaxis},this.getAngular=function(t){return this.isSmith?t.imaginaryaxis:t.angularaxis},r||(this.radialTickLayout=null,this.angularTickLayout=null)}var N=B.prototype;function j(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return\"side\"in t&&(e+=t.side),e}function U(t,e){return e[o.findIndexOfMin(e,(function(e){return o.angleDist(t,e)}))]}function V(t,e,r){return e?(t.attr(\"display\",null),t.attr(r)):t&&t.attr(\"display\",\"none\"),t}t.exports=function(t,e,r){return new B(t,e,r)},N.plot=function(t,e){for(var r=this,n=e[r.id],i=!1,a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){i=!0;break}r._hasClipOnAxisFalse=i,r.updateLayers(e,n),r.updateLayout(e,n),f.generalUpdatePerTraceModule(r.gd,r,t,n),r.updateFx(e,n),r.isSmith&&(delete n.realaxis.range,delete n.imaginaryaxis.range)},N.updateLayers=function(t,e){var r=this,i=r.isSmith,a=r.layers,o=r.getRadial(e),s=r.getAngular(e),l=S.layerNames,u=l.indexOf(\"frontplot\"),c=l.slice(0,u),f=\"below traces\"===s.layer,h=\"below traces\"===o.layer;f&&c.push(\"angular-line\"),h&&c.push(\"radial-line\"),f&&c.push(\"angular-axis\"),h&&c.push(\"radial-axis\"),c.push(\"frontplot\"),f||c.push(\"angular-line\"),h||c.push(\"radial-line\"),f||c.push(\"angular-axis\"),h||c.push(\"radial-axis\");var p=(i?\"smith\":\"polar\")+\"sublayer\",d=r.framework.selectAll(\".\"+p).data(c,String);d.enter().append(\"g\").attr(\"class\",(function(t){return p+\" \"+t})).each((function(t){var e=a[t]=n.select(this);switch(t){case\"frontplot\":i||e.append(\"g\").classed(\"barlayer\",!0),e.append(\"g\").classed(\"scatterlayer\",!0);break;case\"backplot\":e.append(\"g\").classed(\"maplayer\",!0);break;case\"plotbg\":a.bg=e.append(\"path\");break;case\"radial-grid\":case\"angular-grid\":e.style(\"fill\",\"none\");break;case\"radial-line\":e.append(\"line\").style(\"fill\",\"none\");break;case\"angular-line\":e.append(\"path\").style(\"fill\",\"none\")}})),d.order()},N.updateLayout=function(t,e){var r=this,n=r.layers,i=t._size,a=r.getRadial(e),o=r.getAngular(e),s=e.domain.x,f=e.domain.y;r.xOffset=i.l+i.w*s[0],r.yOffset=i.t+i.h*(1-f[1]);var h=r.xLength=i.w*(s[1]-s[0]),p=r.yLength=i.h*(f[1]-f[0]),d=r.getSector(e);r.sectorInRad=d.map(R);var v,g,y,m,x,b=r.sectorBBox=function(t){var e,r=t[0],n=t[1]-r,i=z(r,360),a=i+n,o=Math.cos(R(i)),s=Math.sin(R(i)),l=Math.cos(R(a)),u=Math.sin(R(a));return e=i<=90&&a>=90||i>90&&a>=450?1:s<=0&&u<=0?0:Math.max(s,u),[i<=180&&a>=180||i>180&&a>=540?-1:o>=0&&l>=0?0:Math.min(o,l),i<=270&&a>=270||i>270&&a>=630?-1:s>=0&&u>=0?0:Math.min(s,u),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(d),_=b[2]-b[0],w=b[3]-b[1],T=p/h,k=Math.abs(w/_);T>k?(v=h,x=(p-(g=h*k))/i.h/2,y=[s[0],s[1]],m=[f[0]+x,f[1]-x]):(g=p,x=(h-(v=p/k))/i.w/2,y=[s[0]+x,s[1]-x],m=[f[0],f[1]]),r.xLength2=v,r.yLength2=g,r.xDomain2=y,r.yDomain2=m;var A,M=r.xOffset2=i.l+i.w*y[0],S=r.yOffset2=i.t+i.h*(1-m[1]),E=r.radius=v/_,L=r.innerRadius=r.getHole(e)*E,C=r.cx=M-E*b[0],P=r.cy=S+E*b[3],O=r.cxx=C-M,I=r.cyy=P-S,D=a.side;\"counterclockwise\"===D?(A=D,D=\"top\"):\"clockwise\"===D&&(A=D,D=\"bottom\"),r.radialAxis=r.mockAxis(t,e,a,{_id:\"x\",side:D,_trueSide:A,domain:[L/i.w,E/i.w]}),r.angularAxis=r.mockAxis(t,e,o,{side:\"right\",domain:[0,Math.PI],autorange:!1}),r.doAutoRange(t,e),r.updateAngularAxis(t,e),r.updateRadialAxis(t,e),r.updateRadialAxisTitle(t,e),r.xaxis=r.mockCartesianAxis(t,e,{_id:\"x\",domain:y}),r.yaxis=r.mockCartesianAxis(t,e,{_id:\"y\",domain:m});var F=r.pathSubplot();r.clipPaths.forTraces.select(\"path\").attr(\"d\",F).attr(\"transform\",l(O,I)),n.frontplot.attr(\"transform\",l(M,S)).call(c.setClipUrl,r._hasClipOnAxisFalse?null:r.clipIds.forTraces,r.gd),n.bg.attr(\"d\",F).attr(\"transform\",l(C,P)).call(u.fill,e.bgcolor)},N.mockAxis=function(t,e,r,n){var i=o.extendFlat({},r,n);return d(i,e,t),i},N.mockCartesianAxis=function(t,e,r){var n=this,i=n.isSmith,a=r._id,s=o.extendFlat({type:\"linear\"},r);p(s,t);var l={x:[0,2],y:[1,3]};return s.setRange=function(){var t=n.sectorBBox,r=l[a],i=n.radialAxis._rl,o=(i[1]-i[0])/(1-n.getHole(e));s.range=[t[r[0]]*o,t[r[1]]*o]},s.isPtWithinRange=\"x\"!==a||i?function(){return!0}:function(t){return n.isPtInside(t)},s.setRange(),s.setScale(),s},N.doAutoRange=function(t,e){var r=this,n=r.gd,i=r.radialAxis,a=r.getRadial(e);v(n,i);var o=i.range;a.range=o.slice(),a._input.range=o.slice(),i._rl=[i.r2l(o[0],null,\"gregorian\"),i.r2l(o[1],null,\"gregorian\")]},N.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getRadial(e),v=z(r.getSector(e)[0],360),g=r.radialAxis,y=c<a,m=r.isSmith;m||(r.fillViewInitialKey(\"radialaxis.angle\",d.angle),r.fillViewInitialKey(\"radialaxis.range\",g.range.slice()),g.setGeometry()),\"auto\"===g.tickangle&&v>90&&v<=270&&(g.tickangle=180);var x=m?function(t){var e=I(r,C([t.x,0]));return l(e[0]-f,e[1]-p)}:function(t){return l(g.l2p(t.x)+c,0)},b=m?function(t){return O(r,t.x,-1/0,1/0)}:function(t){return r.pathArc(g.r2p(t.x)+c)},_=j(d);if(r.radialTickLayout!==_&&(i[\"radial-axis\"].selectAll(\".xtick\").remove(),r.radialTickLayout=_),y){g.setScale();var w=0,T=m?(g.tickvals||[]).filter((function(t){return t>=0})).map((function(t){return h.tickText(g,t,!0,!1)})):h.calcTicks(g),k=m?T:h.clipEnds(g,T),A=h.getTickSigns(g)[2];m&&((\"top\"===g.ticks&&\"bottom\"===g.side||\"bottom\"===g.ticks&&\"top\"===g.side)&&(A=-A),\"top\"===g.ticks&&\"top\"===g.side&&(w=-g.ticklen),\"bottom\"===g.ticks&&\"bottom\"===g.side&&(w=g.ticklen)),h.drawTicks(n,g,{vals:T,layer:i[\"radial-axis\"],path:h.makeTickPath(g,0,A),transFn:x,crisp:!1}),h.drawGrid(n,g,{vals:k,layer:i[\"radial-grid\"],path:b,transFn:o.noop,crisp:!1}),h.drawLabels(n,g,{vals:T,layer:i[\"radial-axis\"],transFn:x,labelFns:h.makeLabelFns(g,w)})}var M=r.radialAxisAngle=r.vangles?F(U(R(d.angle),r.vangles)):d.angle,S=l(f,p),E=S+s(-M);V(i[\"radial-axis\"],y&&(d.showticklabels||d.ticks),{transform:E}),V(i[\"radial-grid\"],y&&d.showgrid,{transform:m?\"\":S}),V(i[\"radial-line\"].select(\"line\"),y&&d.showline,{x1:m?-a:c,y1:0,x2:a,y2:0,transform:E}).attr(\"stroke-width\",d.linewidth).call(u.stroke,d.linecolor)},N.updateRadialAxisTitle=function(t,e,r){if(!this.isSmith){var n=this,i=n.gd,a=n.radius,o=n.cx,s=n.cy,l=n.getRadial(e),u=n.id+\"title\",f=0;if(l.title){var h=c.bBox(n.layers[\"radial-axis\"].node()).height,p=l.title.font.size,d=l.side;f=\"top\"===d?p:\"counterclockwise\"===d?-(h+.4*p):h+.8*p}var v=void 0!==r?r:n.radialAxisAngle,g=R(v),y=Math.cos(g),m=Math.sin(g),b=o+a/2*y+f*m,_=s-a/2*m+f*y;n.layers[\"radial-axis-title\"]=x.draw(i,u,{propContainer:l,propName:n.id+\".radialaxis.title\",placeholder:D(i,\"Click to enter radial axis title\"),attributes:{x:b,y:_,\"text-anchor\":\"middle\"},transform:{rotate:-v}})}},N.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getAngular(e),v=r.angularAxis,g=r.isSmith;g||(r.fillViewInitialKey(\"angularaxis.rotation\",d.rotation),v.setGeometry(),v.setScale());var y=g?function(t){var e=I(r,C([0,t.x]));return Math.atan2(e[0]-f,e[1]-p)-Math.PI/2}:function(t){return v.t2g(t.x)};\"linear\"===v.type&&\"radians\"===v.thetaunit&&(v.tick0=F(v.tick0),v.dtick=F(v.dtick));var m=function(t){return l(f+a*Math.cos(t),p-a*Math.sin(t))},x=g?function(t){var e=I(r,C([0,t.x]));return l(e[0],e[1])}:function(t){return m(y(t))},b=g?function(t){var e=I(r,C([0,t.x])),n=Math.atan2(e[0]-f,e[1]-p)-Math.PI/2;return l(e[0],e[1])+s(-F(n))}:function(t){var e=y(t);return m(e)+s(-F(e))},_=g?function(t){return P(r,t.x,0,1/0)}:function(t){var e=y(t),r=Math.cos(e),n=Math.sin(e);return\"M\"+[f+c*r,p-c*n]+\"L\"+[f+a*r,p-a*n]},w=h.makeLabelFns(v,0).labelStandoff,T={xFn:function(t){var e=y(t);return Math.cos(e)*w},yFn:function(t){var e=y(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(w+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*M)},anchorFn:function(t){var e=y(t),r=Math.cos(e);return Math.abs(r)<.1?\"middle\":r>0?\"start\":\"end\"},heightFn:function(t,e,r){var n=y(t);return-.5*(1+Math.sin(n))*r}},k=j(d);r.angularTickLayout!==k&&(i[\"angular-axis\"].selectAll(\".\"+v._id+\"tick\").remove(),r.angularTickLayout=k);var A,S=g?[1/0].concat(v.tickvals||[]).map((function(t){return h.tickText(v,t,!0,!1)})):h.calcTicks(v);if(g&&(S[0].text=\"∞\",S[0].fontSize*=1.75),\"linear\"===e.gridshape?(A=S.map(y),o.angleDelta(A[0],A[1])<0&&(A=A.slice().reverse())):A=null,r.vangles=A,\"category\"===v.type&&(S=S.filter((function(t){return o.isAngleInsideSector(y(t),r.sectorInRad)}))),v.visible){var E=\"inside\"===v.ticks?-1:1,L=(v.linewidth||1)/2;h.drawTicks(n,v,{vals:S,layer:i[\"angular-axis\"],path:\"M\"+E*L+\",0h\"+E*v.ticklen,transFn:b,crisp:!1}),h.drawGrid(n,v,{vals:S,layer:i[\"angular-grid\"],path:_,transFn:o.noop,crisp:!1}),h.drawLabels(n,v,{vals:S,layer:i[\"angular-axis\"],repositionOnUpdate:!0,transFn:x,labelFns:T})}V(i[\"angular-line\"].select(\"path\"),d.showline,{d:r.pathSubplot(),transform:l(f,p)}).attr(\"stroke-width\",d.linewidth).call(u.stroke,d.linecolor)},N.updateFx=function(t,e){this.gd._context.staticPlot||(!this.isSmith&&(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1)),this.updateHoverAndMainDrag(t))},N.updateHoverAndMainDrag=function(t){var e,r,s=this,u=s.isSmith,c=s.gd,f=s.layers,h=t._zoomlayer,p=S.MINZOOM,d=S.OFFEDGE,v=s.radius,x=s.innerRadius,T=s.cx,k=s.cy,A=s.cxx,M=s.cyy,L=s.sectorInRad,C=s.vangles,P=s.radialAxis,O=E.clampTiny,I=E.findXYatLength,D=E.findEnclosingVertexAngles,z=S.cornerHalfWidth,R=S.cornerLen/2,F=g.makeDragger(f,\"path\",\"maindrag\",!1===t.dragmode?\"none\":\"crosshair\");n.select(F).attr(\"d\",s.pathSubplot()).attr(\"transform\",l(T,k)),F.onmousemove=function(t){m.hover(c,t,s.id),c._fullLayout._lasthover=F,c._fullLayout._hoversubplot=s.id},F.onmouseout=function(t){c._dragging||y.unhover(c,t)};var B,N,j,U,V,H,q,G,Z,Y={element:F,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function W(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return W(t-A,e-M)}function J(t,e){return Math.atan2(M-e,t-A)}function K(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function $(t,e){if(0===t)return s.pathSector(2*z);var r=R/t,n=e-r,i=e+r,a=Math.max(0,Math.min(t,v)),o=a-z,l=a+z;return\"M\"+K(o,n)+\"A\"+[o,o]+\" 0,0,0 \"+K(o,i)+\"L\"+K(l,i)+\"A\"+[l,l]+\" 0,0,1 \"+K(l,n)+\"Z\"}function Q(t,e,r){if(0===t)return s.pathSector(2*z);var n,i,a=K(t,e),o=K(t,r),l=O((a[0]+o[0])/2),u=O((a[1]+o[1])/2);if(l&&u){var c=u/l,f=-1/c,h=I(z,c,l,u);n=I(R,f,h[0][0],h[0][1]),i=I(R,f,h[1][0],h[1][1])}else{var p,d;u?(p=R,d=z):(p=z,d=R),n=[[l-p,u-d],[l+p,u-d]],i=[[l-p,u+d],[l+p,u+d]]}return\"M\"+n.join(\"L\")+\"L\"+i.reverse().join(\"L\")+\"Z\"}function tt(t,e){return e=Math.max(Math.min(e,v),x),t<d?t=0:v-t<d?t=v:e<d?e=0:v-e<d&&(e=v),Math.abs(e-t)>p?(t<e?(j=t,U=e):(j=e,U=t),!0):(j=null,U=null,!1)}function et(t,e){t=t||V,e=e||\"M0,0Z\",G.attr(\"d\",t),Z.attr(\"d\",e),g.transitionZoombox(G,Z,H,q),H=!0;var r={};ot(r),c.emit(\"plotly_relayouting\",r)}function rt(t,n){var i,a,o=B+(t*=e),l=N+(n*=r),u=X(B,N),c=Math.min(X(o,l),v),f=J(B,N);tt(u,c)&&(i=V+s.pathSector(U),j&&(i+=s.pathSector(j)),a=$(j,f)+$(U,f)),et(i,a)}function nt(t,e,r,n){var i=E.findIntersectionXY(r,n,r,[t-A,M-e]);return W(i[0],i[1])}function it(t,e){var r,n,i=B+t,a=N+e,o=J(B,N),l=J(i,a),u=D(o,C),c=D(l,C);tt(nt(B,N,u[0],u[1]),Math.min(nt(i,a,c[0],c[1]),v))&&(r=V+s.pathSector(U),j&&(r+=s.pathSector(j)),n=[Q(j,u[0],u[1]),Q(U,u[0],u[1])].join(\" \")),et(r,n)}function at(){if(g.removeZoombox(c),null!==j&&null!==U){var t={};ot(t),g.showDoubleClickNotifier(c),a.call(\"_guiRelayout\",c,t)}}function ot(t){var e=P._rl,r=(e[1]-e[0])/(1-x/v)/v,n=[e[0]+(j-x)*r,e[0]+(U-x)*r];t[s.id+\".radialaxis.range\"]=n}function st(t,e){var r=c._fullLayout.clickmode;if(g.removeZoombox(c),2===t){var n={};for(var i in s.viewInitial)n[s.id+\".\"+i]=s.viewInitial[i];c.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",c,n)}r.indexOf(\"select\")>-1&&1===t&&_(e,c,[s.xaxis],[s.yaxis],s.id,Y),r.indexOf(\"event\")>-1&&m.click(c,e,s.id)}Y.prepFn=function(t,n,a){var l=c._fullLayout.dragmode,f=F.getBoundingClientRect();c._fullLayout._calcInverseTransform(c);var p=c._fullLayout._invTransform;e=c._fullLayout._invScaleX,r=c._fullLayout._invScaleY;var d=o.apply3DTransform(p)(n-f.left,a-f.top);if(B=d[0],N=d[1],C){var y=E.findPolygonOffset(v,L[0],L[1],C);B+=A+y[0],N+=M+y[1]}switch(l){case\"zoom\":Y.clickFn=st,u||(Y.moveFn=C?it:rt,Y.doneFn=at,function(){j=null,U=null,V=s.pathSubplot(),H=!1;var t=c._fullLayout[s.id];q=i(t.bgcolor).getLuminance(),(G=g.makeZoombox(h,q,T,k,V)).attr(\"fill-rule\",\"evenodd\"),Z=g.makeCorners(h,T,k),w(c)}());break;case\"select\":case\"lasso\":b(t,n,a,Y,l)}},y.init(Y)},N.updateRadialDrag=function(t,e,r){var i=this,u=i.gd,c=i.layers,f=i.radius,h=i.innerRadius,p=i.cx,d=i.cy,v=i.radialAxis,m=S.radialDragBoxSize,x=m/2;if(v.visible){var b,_,T,M=R(i.radialAxisAngle),E=v._rl,L=E[0],C=E[1],P=E[r],O=.75*(E[1]-E[0])/(1-i.getHole(e))/f;r?(b=p+(f+x)*Math.cos(M),_=d-(f+x)*Math.sin(M),T=\"radialdrag\"):(b=p+(h-x)*Math.cos(M),_=d-(h-x)*Math.sin(M),T=\"radialdrag-inner\");var I,D,z,B=g.makeRectDragger(c,T,\"crosshair\",-x,-x,m,m),N={element:B,gd:u};!1===t.dragmode&&(N.dragmode=!1),V(n.select(B),v.visible&&h<f,{transform:l(b,_)}),N.prepFn=function(){I=null,D=null,z=null,N.moveFn=j,N.doneFn=H,w(u)},N.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<S.MINDRAG&&(t=0,e=0),[t,e]},y.init(N)}function j(t,e){if(I)I(t,e);else{var n=[t,-e],a=[Math.cos(M),Math.sin(M)],s=Math.abs(o.dot(n,a)/Math.sqrt(o.dot(n,n)));isNaN(s)||(I=s<.5?q:G)}var l={};!function(t){null!==D?t[i.id+\".radialaxis.angle\"]=D:null!==z&&(t[i.id+\".radialaxis.range[\"+r+\"]\"]=z)}(l),u.emit(\"plotly_relayouting\",l)}function H(){null!==D?a.call(\"_guiRelayout\",u,i.id+\".radialaxis.angle\",D):null!==z&&a.call(\"_guiRelayout\",u,i.id+\".radialaxis.range[\"+r+\"]\",z)}function q(t,e){if(0!==r){var n=b+t,a=_+e;D=Math.atan2(d-a,n-p),i.vangles&&(D=U(D,i.vangles)),D=F(D);var o=l(p,d)+s(-D);c[\"radial-axis\"].attr(\"transform\",o),c[\"radial-line\"].select(\"line\").attr(\"transform\",o);var u=i.gd._fullLayout,f=u[i.id];i.updateRadialAxisTitle(u,f,D)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(M),Math.sin(M)]);if(z=P-O*n,O>0==(r?z>L:z<C)){var s=u._fullLayout,l=s[i.id];v.range[r]=z,v._rl[r]=z,i.updateRadialAxis(s,l),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var c=!1;for(var f in i.traceHash){var h=i.traceHash[f],p=o.filterVisible(h);h[0][0].trace._module.plot(u,i,p,l),a.traceIs(f,\"gl\")&&p.length&&(c=!0)}c&&(k(u),A(u))}else z=null}},N.updateAngularDrag=function(t){var e=this,r=e.gd,i=e.layers,u=e.radius,f=e.angularAxis,h=e.cx,p=e.cy,d=e.cxx,v=e.cyy,m=S.angularDragBoxSize,x=g.makeDragger(i,\"path\",\"angulardrag\",!1===t.dragmode?\"none\":\"move\"),b={element:x,gd:r};function _(t,e){return Math.atan2(v+m-e,t-d-m)}!1===t.dragmode?b.dragmode=!1:n.select(x).attr(\"d\",e.pathAnnulus(u,u+m)).attr(\"transform\",l(h,p)).call(T,\"move\");var M,E,L,C,P,O,I=i.frontplot.select(\".scatterlayer\").selectAll(\".trace\"),D=I.selectAll(\".point\"),z=I.selectAll(\".textpoint\");function R(u,g){var y=e.gd._fullLayout,m=y[e.id],x=_(M+u*t._invScaleX,E+g*t._invScaleY),b=F(x-O);if(C=L+b,i.frontplot.attr(\"transform\",l(e.xOffset2,e.yOffset2)+s([-b,d,v])),e.vangles){P=e.radialAxisAngle+b;var w=l(h,p)+s(-b),T=l(h,p)+s(-P);i.bg.attr(\"transform\",w),i[\"radial-grid\"].attr(\"transform\",w),i[\"radial-axis\"].attr(\"transform\",T),i[\"radial-line\"].select(\"line\").attr(\"transform\",T),e.updateRadialAxisTitle(y,m,P)}else e.clipPaths.forTraces.select(\"path\").attr(\"transform\",l(d,v)+s(b));D.each((function(){var t=n.select(this),e=c.getTranslate(t);t.attr(\"transform\",l(e.x,e.y)+s([b]))})),z.each((function(){var t=n.select(this),e=t.select(\"text\"),r=c.getTranslate(t);t.attr(\"transform\",s([b,e.attr(\"x\"),e.attr(\"y\")])+l(r.x,r.y))})),f.rotation=o.modHalf(C,360),e.updateAngularAxis(y,m),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&I.call(c.hideOutsideRangePoints,e);var S=!1;for(var R in e.traceHash)if(a.traceIs(R,\"gl\")){var N=e.traceHash[R],j=o.filterVisible(N);N[0][0].trace._module.plot(r,e,j,m),j.length&&(S=!0)}S&&(k(r),A(r));var U={};B(U),r.emit(\"plotly_relayouting\",U)}function B(t){t[e.id+\".angularaxis.rotation\"]=C,e.vangles&&(t[e.id+\".radialaxis.angle\"]=P)}function N(){z.select(\"text\").attr(\"transform\",null);var t={};B(t),a.call(\"_guiRelayout\",r,t)}b.prepFn=function(n,i,a){var s=t[e.id];L=s.angularaxis.rotation;var l=x.getBoundingClientRect();M=i-l.left,E=a-l.top,r._fullLayout._calcInverseTransform(r);var u=o.apply3DTransform(t._invTransform)(M,E);M=u[0],E=u[1],O=_(M,E),b.moveFn=R,b.doneFn=N,w(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(b.prepFn=o.noop,T(n.select(x),null)),y.init(b)},N.isPtInside=function(t){if(this.isSmith)return!0;var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),i=this.radialAxis,a=i.c2l(t.r),s=i._rl;return(r?E.isPtInsidePolygon:o.isPtInsideSector)(a,n,s,e,r)},N.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathArc)(t,e[0],e[1],r)},N.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?E.pathPolygon:o.pathSector)(t,e[0],e[1],r)},N.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?E.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},N.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},N.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},12101:function(t,e,r){\"use strict\";var n=r(71828),i=r(21994),a=n.deg2rad,o=n.rad2deg;t.exports=function(t,e,r){switch(i(t,r),t._id){case\"x\":case\"radialaxis\":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],i=r.innerRadius,a=(r.radius-i)/(n-e),o=i/a,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case\"angularaxis\":!function(t,e){var r=t.type;if(\"linear\"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return\"degrees\"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return\"degrees\"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,u=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&\"linear\"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o<l;o++)a[o]=u(s[o])}else{var c=i+\"0\",f=\"d\"+i,h=c in e?u(e[c]):0,p=e[f]?u(e[f]):(t.period||2*Math.PI)/l;for(a=new Array(l),o=0;o<l;o++)a[o]=h+o*p}return a},t.setGeometry=function(){var i,s,l,u,c=e.sector,f=c.map(a),h={clockwise:-1,counterclockwise:1}[t.direction],p=a(t.rotation),d=function(t){return h*t+p},v=function(t){return(t-p)/h};switch(r){case\"linear\":s=i=n.identity,u=a,l=o,t.range=n.isFullCircle(f)?[c[0],c[0]+360]:f.map(v).map(o);break;case\"category\":var g=t._categories.length,y=t.period?Math.max(t.period,g):g;0===y&&(y=1),s=u=function(t){return 2*t*Math.PI/y},i=l=function(t){return t*y/Math.PI/2},t.range=[0,y]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return i(v(t))},t.t2g=function(t){return d(u(t))},t.g2t=function(t){return l(v(t))}}}(t,e)}}},39779:function(t){\"use strict\";t.exports={attr:\"subplot\",name:\"smith\",axisNames:[\"realaxis\",\"imaginaryaxis\"],axisName2dataArray:{imaginaryaxis:\"imag\",realaxis:\"real\"}}},23893:function(t){\"use strict\";function e(t){return t<0?-1:t>0?1:0}function r(t){var e=t[0],r=t[1];if(!isFinite(e)||!isFinite(r))return[1,0];var n=(e+1)*(e+1)+r*r;return[(e*e+r*r-1)/n,2*r/n]}function n(t,e){var r=e[0],n=e[1];return[r*t.radius+t.cx,-n*t.radius+t.cy]}function i(t,e){return e*t.radius}t.exports={smith:r,reactanceArc:function(t,e,a,o){var s=n(t,r([a,e])),l=s[0],u=s[1],c=n(t,r([o,e])),f=c[0],h=c[1];if(0===e)return[\"M\"+l+\",\"+u,\"L\"+f+\",\"+h].join(\" \");var p=i(t,1/Math.abs(e));return[\"M\"+l+\",\"+u,\"A\"+p+\",\"+p+\" 0 0,\"+(e<0?1:0)+\" \"+f+\",\"+h].join(\" \")},resistanceArc:function(t,a,o,s){var l=i(t,1/(a+1)),u=n(t,r([a,o])),c=u[0],f=u[1],h=n(t,r([a,s])),p=h[0],d=h[1];if(e(o)!==e(s)){var v=n(t,r([a,0]));return[\"M\"+c+\",\"+f,\"A\"+l+\",\"+l+\" 0 0,\"+(0<o?0:1)+\" \"+v[0]+\",\"+v[1],\"A\"+l+\",\"+l+\" 0 0,\"+(s<0?0:1)+p+\",\"+d].join(\" \")}return[\"M\"+c+\",\"+f,\"A\"+l+\",\"+l+\" 0 0,\"+(s<o?0:1)+\" \"+p+\",\"+d].join(\" \")},smithTransform:n}},7504:function(t,e,r){\"use strict\";var n=r(27659).AU,i=r(71828).counterRegex,a=r(77997),o=r(39779),s=o.attr,l=o.name,u=i(l),c={};c[s]={valType:\"subplotid\",dflt:l,editType:\"calc\"},t.exports={attr:s,name:l,idRoot:l,idRegex:u,attrRegex:u,attributes:c,layoutAttributes:r(33419),supplyLayoutDefaults:r(9558),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],u=n(r,l,s),c=e[s]._subplot;c||(c=a(t,s,!0),e[s]._subplot=c),c.plot(u,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=0;a<i.length;a++){var o=i[a],s=n[o]._subplot;if(!e[o]&&s)for(var u in s.framework.remove(),s.clipPaths)s.clipPaths[u].remove()}},toSVG:r(93612).toSVG}},33419:function(t,e,r){\"use strict\";var n=r(22399),i=r(13838),a=r(27670).Y,o=r(71828).extendFlat,s=r(30962).overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},\"plot\",\"from-root\"),u=s({ticklen:i.ticklen,tickwidth:o({},i.tickwidth,{dflt:2}),tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,tickfont:i.tickfont,tickformat:i.tickformat,hoverformat:i.hoverformat,layer:i.layer},\"plot\",\"from-root\"),c=o({visible:o({},i.visible,{dflt:!0}),tickvals:{dflt:[.2,.5,1,2,5],valType:\"data_array\",editType:\"plot\"},tickangle:o({},i.tickangle,{dflt:90}),ticks:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"\"],editType:\"ticks\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},editType:\"calc\"},l,u),f=o({visible:o({},i.visible,{dflt:!0}),tickvals:{valType:\"data_array\",editType:\"plot\"},ticks:i.ticks,editType:\"calc\"},l,u);t.exports={domain:a({name:\"smith\",editType:\"plot\"}),bgcolor:{valType:\"color\",editType:\"plot\",dflt:n.background},realaxis:c,imaginaryaxis:f,editType:\"calc\"}},9558:function(t,e,r){\"use strict\";var n,i,a,o=r(71828),s=r(7901),l=r(44467),u=r(49119),c=r(27659).NG,f=r(89426),h=r(96115),p=r(92128),d=r(21994),v=r(33419),g=r(39779),y=g.axisNames,m=(n=function(t){return t.slice().reverse().map((function(t){return-t})).concat([0]).concat(t)},i=String,a={},function(t){var e=i?i(t):t;if(e in a)return a[e];var r=n(t);return a[e]=r,r});function x(t,e,r,n){var i=r(\"bgcolor\");n.bgColor=s.combine(i,n.paper_bgcolor);var a,u=c(n.fullData,g.name,n.id),x=n.layoutOut;function b(t,e){return r(a+\".\"+t,e)}for(var _=0;_<y.length;_++){a=y[_],o.isPlainObject(t[a])||(t[a]={});var w=t[a],T=l.newContainer(e,a);T._id=T._name=a,T._attr=n.id+\".\"+a,T._traceIndices=u.map((function(t){return t._expandedIndex}));var k=b(\"visible\");if(T.type=\"linear\",d(T,x),f(w,T,b,T.type),k){var A,M,S,E,L=\"realaxis\"===a;L&&b(\"side\"),L?b(\"tickvals\"):b(\"tickvals\",m(e.realaxis.tickvals||v.realaxis.tickvals.dflt));var C=n.font||{};k&&(M=(A=b(\"color\"))===w.color?A:C.color,S=C.size,E=C.family),h(w,T,b,T.type,{noTicklabelstep:!0,noAng:!L,noExp:!0,font:{color:M,size:S,family:E}}),o.coerce2(t,e,v,a+\".ticklen\"),o.coerce2(t,e,v,a+\".tickwidth\"),o.coerce2(t,e,v,a+\".tickcolor\",e.color),b(\"ticks\")||(delete e[a].ticklen,delete e[a].tickwidth,delete e[a].tickcolor),p(w,T,b,{dfltColor:A,bgColor:n.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:v[a]}),b(\"layer\")}b(\"hoverformat\"),delete T.type,T._input=w}}t.exports=function(t,e,r){u(t,e,r,{noUirevision:!0,type:g.name,attributes:v,handleDefaults:x,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},49119:function(t,e,r){\"use strict\";var n=r(71828),i=r(44467),a=r(27670).c;t.exports=function(t,e,r,o){var s,l,u=o.type,c=o.attributes,f=o.handleDefaults,h=o.partition||\"x\",p=e._subplots[u],d=p.length,v=d&&p[0].replace(/\\d+$/,\"\");function g(t,e){return n.coerce(s,l,c,t,e)}for(var y=0;y<d;y++){var m=p[y];s=t[m]?t[m]:t[m]={},l=i.newContainer(e,m,v),o.noUirevision||g(\"uirevision\",e.uirevision);var x={};x[h]=[y/d,(y+1)/d],a(l,e,g,x),o.id=m,f(s,l,g,o)}}},5386:function(t,e,r){\"use strict\";var n=r(31562);function i(t){var e=t.description?\" \"+t.description:\"\",r=t.keys||[];if(r.length>0){for(var n=[],i=0;i<r.length;i++)n[i]=\"`\"+r[i]+\"`\";e+=\"Finally, the template string has access to \",e=1===r.length?e+\"variable \"+n[0]:e+\"variables \"+n.slice(0,-1).join(\", \")+\" and \"+n.slice(-1)+\".\"}return e}n.FORMAT_LINK,n.DATE_FORMAT_LINK,e.fF=function(t,e){t=t||{},i(e=e||{});var r={valType:\"string\",dflt:\"\",editType:t.editType||\"none\"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.si=function(t,e){t=t||{},i(e=e||{});var r={valType:\"string\",dflt:\"\",editType:t.editType||\"calc\"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},e.R=function(t,e){return e=e||{},(t=t||{}).newshape,i(e),{valType:\"string\",dflt:\"\",editType:t.editType||\"arraydraw\"}}},61639:function(t,e,r){\"use strict\";var n=r(64380),i=r(27659).AU,a=r(71828).counterRegex,o=\"ternary\";e.name=o;var s=e.attr=\"subplot\";e.idRoot=o,e.idRegex=e.attrRegex=a(o),(e.attributes={})[s]={valType:\"subplotid\",dflt:\"ternary\",editType:\"calc\"},e.layoutAttributes=r(81367),e.supplyLayoutDefaults=r(25369),e.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[o],s=0;s<a.length;s++){var l=a[s],u=i(r,o,l),c=e[l]._subplot;c||(c=new n({id:l,graphDiv:t,container:e._ternarylayer.node()},e),e[l]._subplot=c),c.plot(u,e,t._promises)}},e.clean=function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.plotContainer.remove(),l.clipDef.remove(),l.clipDefRelative.remove(),l.layers[\"a-title\"].remove(),l.layers[\"b-title\"].remove(),l.layers[\"c-title\"].remove())}}},81367:function(t,e,r){\"use strict\";var n=r(22399),i=r(27670).Y,a=r(13838),o=r(30962).overrideAll,s=r(1426).extendFlat,l={title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.minor.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,ticklabelstep:a.ticklabelstep,showticklabels:a.showticklabels,labelalias:a.labelalias,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,griddash:a.griddash,layer:a.layer,min:{valType:\"number\",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},u=t.exports=o({domain:i({name:\"ternary\"}),bgcolor:{valType:\"color\",dflt:n.background},sum:{valType:\"number\",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},\"plot\",\"from-root\");u.uirevision={valType:\"any\",editType:\"none\"},u.aaxis.uirevision=u.baxis.uirevision=u.caxis.uirevision={valType:\"any\",editType:\"none\"}},25369:function(t,e,r){\"use strict\";var n=r(7901),i=r(44467),a=r(71828),o=r(49119),s=r(96115),l=r(89426),u=r(38701),c=r(26218),f=r(92128),h=r(81367),p=[\"aaxis\",\"baxis\",\"caxis\"];function d(t,e,r,a){var o,s,l,u=r(\"bgcolor\"),c=r(\"sum\");a.bgColor=n.combine(u,a.paper_bgcolor);for(var f=0;f<p.length;f++)s=t[o=p[f]]||{},(l=i.newContainer(e,o))._name=o,v(s,l,a,e);var h=e.aaxis,d=e.baxis,g=e.caxis;h.min+d.min+g.min>=c&&(h.min=0,d.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function v(t,e,r,n){var i=h[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o(\"uirevision\",n.uirevision),e.type=\"linear\";var p=o(\"color\"),d=p!==i.color.dflt?p:r.font.color,v=e._name.charAt(0).toUpperCase(),g=\"Component \"+v,y=o(\"title.text\",g);e._hovertitle=y===g?y:v,a.coerceFont(o,\"title.font\",{family:r.font.family,size:a.bigFont(r.font.size),color:d}),o(\"min\"),c(t,e,o,\"linear\"),l(t,e,o,\"linear\"),s(t,e,o,\"linear\"),u(t,e,o,{outerTicks:!0}),o(\"showticklabels\")&&(a.coerceFont(o,\"tickfont\",{family:r.font.family,size:r.font.size,color:d}),o(\"tickangle\"),o(\"tickformat\")),f(t,e,o,{dfltColor:p,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o(\"hoverformat\"),o(\"layer\")}t.exports=function(t,e,r){o(t,e,r,{type:\"ternary\",attributes:h,handleDefaults:d,font:e.font,paper_bgcolor:e.paper_bgcolor})}},64380:function(t,e,r){\"use strict\";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strTranslate,l=o._,u=r(7901),c=r(91424),f=r(21994),h=r(1426).extendFlat,p=r(74875),d=r(89298),v=r(28569),g=r(30211),y=r(64505),m=y.freeMode,x=y.rectMode,b=r(92998),_=r(47322).prepSelect,w=r(47322).selectOnClick,T=r(47322).clearOutline,k=r(47322).clearSelectionsCache,A=r(85555);function M(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}t.exports=M;var S=M.prototype;S.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},S.plot=function(t,e){var r=this,n=e[r.id],i=e._size;r._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++)if(!1===t[a][0].trace.cliponaxis){r._hasClipOnAxisFalse=!0;break}r.updateLayers(n),r.adjustLayout(n,i),p.generalUpdatePerTraceModule(r.graphDiv,r,t,n),r.layers.plotbg.select(\"path\").call(u.fill,n.bgcolor)},S.makeFramework=function(t){var e=this,r=e.graphDiv,n=t[e.id],i=e.clipId=\"clip\"+e.layoutId+e.id,a=e.clipIdRelative=\"clip-relative\"+e.layoutId+e.id;e.clipDef=o.ensureSingleById(t._clips,\"clipPath\",i,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),e.clipDefRelative=o.ensureSingleById(t._clips,\"clipPath\",a,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),e.plotContainer=o.ensureSingle(e.container,\"g\",e.id),e.updateLayers(n),c.setClipUrl(e.layers.backplot,i,r),c.setClipUrl(e.layers.grids,i,r)},S.updateLayers=function(t){var e=this.layers,r=[\"draglayer\",\"plotbg\",\"backplot\",\"grids\"];\"below traces\"===t.aaxis.layer&&r.push(\"aaxis\",\"aline\"),\"below traces\"===t.baxis.layer&&r.push(\"baxis\",\"bline\"),\"below traces\"===t.caxis.layer&&r.push(\"caxis\",\"cline\"),r.push(\"frontplot\"),\"above traces\"===t.aaxis.layer&&r.push(\"aaxis\",\"aline\"),\"above traces\"===t.baxis.layer&&r.push(\"baxis\",\"bline\"),\"above traces\"===t.caxis.layer&&r.push(\"caxis\",\"cline\");var i=this.plotContainer.selectAll(\"g.toplevel\").data(r,String),a=[\"agrid\",\"bgrid\",\"cgrid\"];i.enter().append(\"g\").attr(\"class\",(function(t){return\"toplevel \"+t})).each((function(t){var r=n.select(this);e[t]=r,\"frontplot\"===t?r.append(\"g\").classed(\"scatterlayer\",!0):\"backplot\"===t?r.append(\"g\").classed(\"maplayer\",!0):\"plotbg\"===t?r.append(\"path\").attr(\"d\",\"M0,0Z\"):\"aline\"===t||\"bline\"===t||\"cline\"===t?r.append(\"path\"):\"grids\"===t&&a.forEach((function(t){e[t]=r.append(\"g\").classed(\"grid \"+t,!0)}))})),i.order()};var E=Math.sqrt(4/3);S.adjustLayout=function(t,e){var r,n,i,a,o,l,p=this,d=t.domain,v=(d.x[0]+d.x[1])/2,g=(d.y[0]+d.y[1])/2,y=d.x[1]-d.x[0],m=d.y[1]-d.y[0],x=y*e.w,b=m*e.h,_=t.sum,w=t.aaxis.min,T=t.baxis.min,k=t.caxis.min;x>E*b?i=(a=b)*E:a=(i=x)/E,o=y*i/x,l=m*a/b,r=e.l+e.w*v-i/2,n=e.t+e.h*(1-g)-a/2,p.x0=r,p.y0=n,p.w=i,p.h=a,p.sum=_,p.xaxis={type:\"linear\",range:[w+2*k-_,_-w-2*T],domain:[v-o/2,v+o/2],_id:\"x\"},f(p.xaxis,p.graphDiv._fullLayout),p.xaxis.setScale(),p.xaxis.isPtWithinRange=function(t){return t.a>=p.aaxis.range[0]&&t.a<=p.aaxis.range[1]&&t.b>=p.baxis.range[1]&&t.b<=p.baxis.range[0]&&t.c>=p.caxis.range[1]&&t.c<=p.caxis.range[0]},p.yaxis={type:\"linear\",range:[w,_-T-k],domain:[g-l/2,g+l/2],_id:\"y\"},f(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange=function(){return!0};var A=p.yaxis.domain[0],M=p.aaxis=h({},t.aaxis,{range:[w,_-T-k],side:\"left\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});f(M,p.graphDiv._fullLayout),M.setScale();var S=p.baxis=h({},t.baxis,{range:[_-w-k,T],side:\"bottom\",domain:p.xaxis.domain,anchor:\"free\",position:0,_id:\"x\",_length:i});f(S,p.graphDiv._fullLayout),S.setScale();var L=p.caxis=h({},t.caxis,{range:[_-w-T,k],side:\"right\",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});f(L,p.graphDiv._fullLayout),L.setScale();var C=\"M\"+r+\",\"+(n+a)+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDef.select(\"path\").attr(\"d\",C),p.layers.plotbg.select(\"path\").attr(\"d\",C);var P=\"M0,\"+a+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDefRelative.select(\"path\").attr(\"d\",P);var O=s(r,n);p.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",O),p.clipDefRelative.select(\"path\").attr(\"transform\",null);var I=s(r-S._offset,n+a);p.layers.baxis.attr(\"transform\",I),p.layers.bgrid.attr(\"transform\",I);var D=s(r+i/2,n)+\"rotate(30)\"+s(0,-M._offset);p.layers.aaxis.attr(\"transform\",D),p.layers.agrid.attr(\"transform\",D);var z=s(r+i/2,n)+\"rotate(-30)\"+s(0,-L._offset);p.layers.caxis.attr(\"transform\",z),p.layers.cgrid.attr(\"transform\",z),p.drawAxes(!0),p.layers.aline.select(\"path\").attr(\"d\",M.showline?\"M\"+r+\",\"+(n+a)+\"l\"+i/2+\",-\"+a:\"M0,0\").call(u.stroke,M.linecolor||\"#000\").style(\"stroke-width\",(M.linewidth||0)+\"px\"),p.layers.bline.select(\"path\").attr(\"d\",S.showline?\"M\"+r+\",\"+(n+a)+\"h\"+i:\"M0,0\").call(u.stroke,S.linecolor||\"#000\").style(\"stroke-width\",(S.linewidth||0)+\"px\"),p.layers.cline.select(\"path\").attr(\"d\",L.showline?\"M\"+(r+i/2)+\",\"+n+\"l\"+i/2+\",\"+a:\"M0,0\").call(u.stroke,L.linecolor||\"#000\").style(\"stroke-width\",(L.linewidth||0)+\"px\"),p.graphDiv._context.staticPlot||p.initInteractions(),c.setClipUrl(p.layers.frontplot,p._hasClipOnAxisFalse?null:p.clipId,p.graphDiv)},S.drawAxes=function(t){var e=this,r=e.graphDiv,n=e.id.substr(7)+\"title\",i=e.layers,a=e.aaxis,o=e.baxis,s=e.caxis;if(e.drawAx(a),e.drawAx(o),e.drawAx(s),t){var u=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+(\"outside\"===s.ticks?.87*s.ticklen:0)),c=(o.showticklabels?o.tickfont.size:0)+(\"outside\"===o.ticks?o.ticklen:0)+3;i[\"a-title\"]=b.draw(r,\"a\"+n,{propContainer:a,propName:e.id+\".aaxis.title\",placeholder:l(r,\"Click to enter Component A title\"),attributes:{x:e.x0+e.w/2,y:e.y0-a.title.font.size/3-u,\"text-anchor\":\"middle\"}}),i[\"b-title\"]=b.draw(r,\"b\"+n,{propContainer:o,propName:e.id+\".baxis.title\",placeholder:l(r,\"Click to enter Component B title\"),attributes:{x:e.x0-c,y:e.y0+e.h+.83*o.title.font.size+c,\"text-anchor\":\"middle\"}}),i[\"c-title\"]=b.draw(r,\"c\"+n,{propContainer:s,propName:e.id+\".caxis.title\",placeholder:l(r,\"Click to enter Component C title\"),attributes:{x:e.x0+e.w+c,y:e.y0+e.h+.83*s.title.font.size+c,\"text-anchor\":\"middle\"}})}},S.drawAx=function(t){var e,r=this,n=r.graphDiv,i=t._name,a=i.charAt(0),s=t._id,l=r.layers[i],u=a+\"tickLayout\",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);r[u]!==c&&(l.selectAll(\".\"+s+\"tick\").remove(),r[u]=c),t.setScale();var f=d.calcTicks(t),h=d.clipEnds(t,f),p=d.makeTransTickFn(t),v=d.getTickSigns(t)[2],g=o.deg2rad(30),y=v*(t.linewidth||1)/2,m=v*t.ticklen,x=r.w,b=r.h,_=\"b\"===a?\"M0,\"+y+\"l\"+Math.sin(g)*m+\",\"+Math.cos(g)*m:\"M\"+y+\",0l\"+Math.cos(g)*m+\",\"+-Math.sin(g)*m,w={a:\"M0,0l\"+b+\",-\"+x/2,b:\"M0,0l-\"+x/2+\",-\"+b,c:\"M0,0l-\"+b+\",\"+x/2}[a];d.drawTicks(n,t,{vals:\"inside\"===t.ticks?h:f,layer:l,path:_,transFn:p,crisp:!1}),d.drawGrid(n,t,{vals:h,layer:r.layers[a+\"grid\"],path:w,transFn:p,crisp:!1}),d.drawLabels(n,t,{vals:f,layer:l,transFn:p,labelFns:d.makeLabelFns(t,0,30)})};var L=A.MINZOOM/2+.87,C=\"m-0.87,.5h\"+L+\"v3h-\"+(L+5.2)+\"l\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l2.6,1.5l-\"+L/2+\",\"+.87*L+\"Z\",P=\"m0.87,.5h-\"+L+\"v3h\"+(L+5.2)+\"l-\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l-2.6,1.5l\"+L/2+\",\"+.87*L+\"Z\",O=\"m0,1l\"+L/2+\",\"+.87*L+\"l2.6,-1.5l-\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l-\"+(L/2+2.6)+\",\"+(.87*L+4.5)+\"l2.6,1.5l\"+L/2+\",-\"+.87*L+\"Z\",I=!0;function D(t){n.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}S.clearOutline=function(){k(this.dragOptions),T(this.dragOptions.gd)},S.initInteractions=function(){var t,e,r,n,f,h,p,d,y,b,T,k,M=this,S=M.layers.plotbg.select(\"path\").node(),L=M.graphDiv,z=L._fullLayout._zoomlayer;function R(t){var e={};return e[M.id+\".aaxis.min\"]=t.a,e[M.id+\".baxis.min\"]=t.b,e[M.id+\".caxis.min\"]=t.c,e}function F(t,e){var r=L._fullLayout.clickmode;D(L),2===t&&(L.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",L,R({a:0,b:0,c:0}))),r.indexOf(\"select\")>-1&&1===t&&w(e,L,[M.xaxis],[M.yaxis],M.id,M.dragOptions),r.indexOf(\"event\")>-1&&g.click(L,e,M.id)}function B(t,e){return 1-e/M.h}function N(t,e){return 1-(t+(M.h-e)/Math.sqrt(3))/M.w}function j(t,e){return(t-(M.h-e)/Math.sqrt(3))/M.w}function U(i,a){var o=r+i*t,s=n+a*e,l=Math.max(0,Math.min(1,B(0,n),B(0,s))),u=Math.max(0,Math.min(1,N(r,n),N(o,s))),c=Math.max(0,Math.min(1,j(r,n),j(o,s))),v=(l/2+c)*M.w,g=(1-l/2-u)*M.w,m=(v+g)/2,x=g-v,_=(1-l)*M.h,w=_-x/E;x<A.MINZOOM?(p=f,T.attr(\"d\",y),k.attr(\"d\",\"M0,0Z\")):(p={a:f.a+l*h,b:f.b+u*h,c:f.c+c*h},T.attr(\"d\",y+\"M\"+v+\",\"+_+\"H\"+g+\"L\"+m+\",\"+w+\"L\"+v+\",\"+_+\"Z\"),k.attr(\"d\",\"M\"+r+\",\"+n+\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM\"+v+\",\"+_+C+\"M\"+g+\",\"+_+P+\"M\"+m+\",\"+w+O)),b||(T.transition().style(\"fill\",d>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),k.transition().style(\"opacity\",1).duration(200),b=!0),L.emit(\"plotly_relayouting\",R(p))}function V(){D(L),p!==f&&(a.call(\"_guiRelayout\",L,R(p)),I&&L.data&&L._context.showTips&&(o.notifier(l(L,\"Double-click to zoom back out\"),\"long\"),I=!1))}function H(t,e){var r=t/M.xaxis._m,n=e/M.yaxis._m,i=[(p={a:f.a-n,b:f.b+(r+n)/2,c:f.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a=i.indexOf(p.a),l=i.indexOf(p.b),u=i.indexOf(p.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),p={a:i[a],b:i[l],c:i[u]},e=(f.a-p.a)*M.yaxis._m,t=(f.c-p.c-f.b+p.b)*M.xaxis._m);var h=s(M.x0+t,M.y0+e);M.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",h);var d=s(-t,-e);M.clipDefRelative.select(\"path\").attr(\"transform\",d),M.aaxis.range=[p.a,M.sum-p.b-p.c],M.baxis.range=[M.sum-p.a-p.c,p.b],M.caxis.range=[M.sum-p.a-p.b,p.c],M.drawAxes(!1),M._hasClipOnAxisFalse&&M.plotContainer.select(\".scatterlayer\").selectAll(\".trace\").call(c.hideOutsideRangePoints,M),L.emit(\"plotly_relayouting\",R(p))}function q(){a.call(\"_guiRelayout\",L,R(p))}this.dragOptions={element:S,gd:L,plotinfo:{id:M.id,domain:L._fullLayout[M.id].domain,xaxis:M.xaxis,yaxis:M.yaxis},subplot:M.id,prepFn:function(a,l,c){M.dragOptions.xaxes=[M.xaxis],M.dragOptions.yaxes=[M.yaxis],t=L._fullLayout._invScaleX,e=L._fullLayout._invScaleY;var v=M.dragOptions.dragmode=L._fullLayout.dragmode;m(v)?M.dragOptions.minDrag=1:M.dragOptions.minDrag=void 0,\"zoom\"===v?(M.dragOptions.moveFn=U,M.dragOptions.clickFn=F,M.dragOptions.doneFn=V,function(t,e,a){var l=S.getBoundingClientRect();r=e-l.left,n=a-l.top,L._fullLayout._calcInverseTransform(L);var c=L._fullLayout._invTransform,v=o.apply3DTransform(c)(r,n);r=v[0],n=v[1],f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,h=M.aaxis.range[1]-f.a,d=i(M.graphDiv._fullLayout[M.id].bgcolor).getLuminance(),y=\"M0,\"+M.h+\"L\"+M.w/2+\", 0L\"+M.w+\",\"+M.h+\"Z\",b=!1,T=z.append(\"path\").attr(\"class\",\"zoombox\").attr(\"transform\",s(M.x0,M.y0)).style({fill:d>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"d\",y),k=z.append(\"path\").attr(\"class\",\"zoombox-corners\").attr(\"transform\",s(M.x0,M.y0)).style({fill:u.background,stroke:u.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"d\",\"M0,0Z\"),M.clearOutline(L)}(0,l,c)):\"pan\"===v?(M.dragOptions.moveFn=H,M.dragOptions.clickFn=F,M.dragOptions.doneFn=q,f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,M.clearOutline(L)):(x(v)||m(v))&&_(a,l,c,M.dragOptions,v)}},S.onmousemove=function(t){g.hover(L,t,M.id),L._fullLayout._lasthover=S,L._fullLayout._hoversubplot=M.id},S.onmouseout=function(t){L._dragging||v.unhover(L,t)},v.init(this.dragOptions)}},73972:function(t,e,r){\"use strict\";var n=r(47769),i=r(64213),a=r(75138),o=r(41965),s=r(24401).addStyleRule,l=r(1426),u=r(9012),c=r(10820),f=l.extendFlat,h=l.extendDeepAll;function p(t){var r=t.name,i=t.categories,a=t.meta;if(e.modules[r])n.log(\"Type \"+r+\" already registered\");else{e.subplotsRegistry[t.basePlotModule.name]||function(t){var r=t.name;if(e.subplotsRegistry[r])n.log(\"Plot type \"+r+\" already registered.\");else for(var i in y(t),e.subplotsRegistry[r]=t,e.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l<i.length;l++)o[i[l]]=!0,e.allCategories[i[l]]=!0;for(var u in e.modules[r]={_module:t,categories:o},a&&Object.keys(a).length&&(e.modules[r].meta=a),e.allTypes.push(r),e.componentsRegistry)m(u,r);t.layoutAttributes&&f(e.traceLayoutAttributes,t.layoutAttributes);var c=t.basePlotModule,h=c.name;if(\"mapbox\"===h){var p=c.constants.styleRules;for(var d in p)s(\".js-plotly-plot .plotly .mapboxgl-\"+d,p[d])}\"geo\"!==h&&\"mapbox\"!==h||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if(\"string\"!=typeof t.name)throw new Error(\"Component module *name* must be a string.\");var r=t.name;for(var n in e.componentsRegistry[r]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&a(e.layoutArrayContainers,r),y(t)),e.modules)m(r,n);for(var i in e.subplotsRegistry)b(r,i);for(var o in e.transformsRegistry)x(r,o);t.schema&&t.schema.layout&&h(c,t.schema.layout)}function v(t){if(\"string\"!=typeof t.name)throw new Error(\"Transform module *name* must be a string.\");var r=\"Transform module \"+t.name,i=\"function\"==typeof t.transform,a=\"function\"==typeof t.calcTransform;if(!i&&!a)throw new Error(r+\" is missing a *transform* or *calcTransform* method.\");for(var s in i&&a&&n.log([r+\" has both a *transform* and *calcTransform* methods.\",\"Please note that all *transform* methods are executed\",\"before all *calcTransform* methods.\"].join(\" \")),o(t.attributes)||n.log(r+\" registered without an *attributes* object.\"),\"function\"!=typeof t.supplyDefaults&&n.log(r+\" registered without a *supplyDefaults* method.\"),e.transformsRegistry[t.name]=t,e.componentsRegistry)x(s,t.name)}function g(t){var r=t.name,n=r.split(\"-\")[0],i=t.dictionary,a=t.format,o=i&&Object.keys(i).length,s=a&&Object.keys(a).length,l=e.localeRegistry,u=l[r];if(u||(l[r]=u={}),n!==r){var c=l[n];c||(l[n]=c={}),o&&c.dictionary===u.dictionary&&(c.dictionary=i),s&&c.format===u.format&&(c.format=a)}o&&(u.dictionary=i),s&&(u.format=a)}function y(t){if(t.layoutAttributes){var r=t.layoutAttributes._arrayAttrRegexps;if(r)for(var n=0;n<r.length;n++)a(e.layoutArrayRegexes,r[n])}}function m(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.traces){var i=n.traces[r];i&&h(e.modules[r]._module.attributes,i)}}function x(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.transforms){var i=n.transforms[r];i&&h(e.transformsRegistry[r].attributes,i)}}function b(t,r){var n=e.componentsRegistry[t].schema;if(n&&n.subplots){var i=e.subplotsRegistry[r],a=i.layoutAttributes,o=\"subplot\"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];a&&s&&h(a,s)}}function _(t){return\"object\"==typeof t&&(t=t.type),t}e.modules={},e.allCategories={},e.allTypes=[],e.subplotsRegistry={},e.transformsRegistry={},e.componentsRegistry={},e.layoutArrayContainers=[],e.layoutArrayRegexes=[],e.traceLayoutAttributes={},e.localeRegistry={},e.apiMethodRegistry={},e.collectableSubplotTypes=null,e.register=function(t){if(e.collectableSubplotTypes=null,!t)throw new Error(\"No argument passed to Plotly.register.\");t&&!Array.isArray(t)&&(t=[t]);for(var r=0;r<t.length;r++){var n=t[r];if(!n)throw new Error(\"Invalid module was attempted to be registered!\");switch(n.moduleType){case\"trace\":p(n);break;case\"transform\":v(n);break;case\"component\":d(n);break;case\"locale\":g(n);break;case\"apiMethod\":var i=n.name;e.apiMethodRegistry[i]=n.fn;break;default:throw new Error(\"Invalid module was attempted to be registered!\")}}},e.getModule=function(t){var r=e.modules[_(t)];return!!r&&r._module},e.traceIs=function(t,r){if(\"various\"===(t=_(t)))return!1;var i=e.modules[t];return i||(t&&n.log(\"Unrecognized trace type \"+t+\".\"),i=e.modules[u.type.dflt]),!!i.categories[r]},e.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],i=0;i<n.length;i++)n[i].type===e&&r.push(i);return r},e.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},e.getComponentMethod=function(t,r){var n=e.componentsRegistry[t];return n&&n[r]||i},e.call=function(){var t=arguments[0],r=[].slice.call(arguments,1);return e.apiMethodRegistry[t].apply(null,r)}},61914:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=i.extendFlat,o=i.extendDeep;function s(t){var e;switch(t){case\"themes__thumb\":e={autosize:!0,width:150,height:150,title:{text:\"\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\"thumbnail\":e={title:{text:\"\"},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:\"\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}t.exports=function(t,e){var r,i,l=t.data,u=t.layout,c=o([],l),f=o({},u,s(e.tileClass)),h=t._context||{};if(e.width&&(f.width=e.width),e.height&&(f.height=e.height),\"thumbnail\"===e.tileClass||\"themes__thumb\"===e.tileClass){f.annotations=[];var p=Object.keys(f);for(r=0;r<p.length;r++)i=p[r],[\"xaxis\",\"yaxis\",\"zaxis\"].indexOf(i.slice(0,5))>-1&&(f[p[r]].title={text:\"\"});for(r=0;r<c.length;r++){var d=c[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,\"pie-like\")&&(d.textposition=\"none\")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)f.annotations.push(e.annotations[r]);var v=Object.keys(f).filter((function(t){return t.match(/^scene\\d*$/)}));if(v.length){var g={};for(\"thumbnail\"===e.tileClass&&(g={title:{text:\"\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<v.length;r++){var y=f[v[r]];y.xaxis||(y.xaxis={}),y.yaxis||(y.yaxis={}),y.zaxis||(y.zaxis={}),a(y.xaxis,g),a(y.yaxis,g),a(y.zaxis,g),y._scene=null}}var m=document.createElement(\"div\");e.tileClass&&(m.className=e.tileClass);var x={gd:m,td:m,layout:f,data:c,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:h.mapboxAccessToken}};return\"transparent\"!==e.setBackground&&(x.config.setBackground=e.setBackground||\"opaque\"),x.gd.defaultLayout=s(e.tileClass),x}},7239:function(t,e,r){\"use strict\";var n=r(71828),i=r(403),a=r(22435),o=r(25095);t.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||\"png\",e.width=e.width||null,e.height=e.height||null,e.imageDataOnly=!0,new Promise((function(s,l){r&&r._snapshotInProgress&&l(new Error(\"Snapshotting already in progress.\")),n.isIE()&&\"svg\"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var u=i(t,e),c=e.filename||t.fn||\"newplot\";c+=\".\"+e.format.replace(\"-\",\".\"),u.then((function(t){return r&&(r._snapshotInProgress=!1),a(t,c,e.format)})).then((function(t){s(t)})).catch((function(t){r&&(r._snapshotInProgress=!1),l(t)}))}))}},22435:function(t,e,r){\"use strict\";var n=r(71828),i=r(25095);t.exports=function(t,e,r){var a=document.createElement(\"a\"),o=\"download\"in a;return new Promise((function(s,l){var u,c;if(n.isIE())return u=i.createBlob(t,\"svg\"),window.navigator.msSaveBlob(u,e),u=null,s(e);if(o)return u=i.createBlob(t,r),c=i.createObjectURL(u),a.href=c,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(c),u=null,s(e);if(n.isSafari()){var f=\"svg\"===r?\",\":\";base64,\";return i.octetStream(f+encodeURIComponent(t)),s(e)}l(new Error(\"download error\"))}))}},25095:function(t,e,r){\"use strict\";var n=r(73972);e.getDelay=function(t){return t._has&&(t._has(\"gl3d\")||t._has(\"gl2d\")||t._has(\"mapbox\"))?500:0},e.getRedrawFunc=function(t){return function(){n.getComponentMethod(\"colorbar\",\"draw\")(t)}},e.encodeSVG=function(t){return\"data:image/svg+xml,\"+encodeURIComponent(t)},e.encodeJSON=function(t){return\"data:application/json,\"+encodeURIComponent(t)};var i=window.URL||window.webkitURL;e.createObjectURL=function(t){return i.createObjectURL(t)},e.revokeObjectURL=function(t){return i.revokeObjectURL(t)},e.createBlob=function(t,e){if(\"svg\"===e)return new window.Blob([t],{type:\"image/svg+xml;charset=utf-8\"});if(\"full-json\"===e)return new window.Blob([t],{type:\"application/json;charset=utf-8\"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),i=0;i<e;i++)n[i]=t.charCodeAt(i);return r}(window.atob(t));return new window.Blob([r],{type:\"image/\"+e})},e.octetStream=function(t){document.location.href=\"data:application/octet-stream\"+t},e.IMAGE_URL_PREFIX=/^data:image\\/\\w+;base64,/,e.MSG_IE_BAD_FORMAT=\"Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.\"},44511:function(t,e,r){\"use strict\";var n=r(25095),i={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:r(61914),toSVG:r(5900),svgToImg:r(70942),toImage:r(56395),downloadImage:r(7239)};t.exports=i},70942:function(t,e,r){\"use strict\";var n=r(71828),i=r(15398).EventEmitter,a=r(25095);t.exports=function(t){var e=t.emitter||new i,r=new Promise((function(i,o){var s=window.Image,l=t.svg,u=t.format||\"png\";if(n.isIE()&&\"svg\"!==u){var c=new Error(a.MSG_IE_BAD_FORMAT);return o(c),t.promise?r:e.emit(\"error\",c)}var f,h,p=t.canvas,d=t.scale||1,v=t.width||300,g=t.height||150,y=d*v,m=d*g,x=p.getContext(\"2d\",{willReadFrequently:!0}),b=new s;\"svg\"===u||n.isSafari()?h=a.encodeSVG(l):(f=a.createBlob(l,\"svg\"),h=a.createObjectURL(f)),p.width=y,p.height=m,b.onload=function(){var r;switch(f=null,a.revokeObjectURL(h),\"svg\"!==u&&x.drawImage(b,0,0,y,m),u){case\"jpeg\":r=p.toDataURL(\"image/jpeg\");break;case\"png\":r=p.toDataURL(\"image/png\");break;case\"webp\":r=p.toDataURL(\"image/webp\");break;case\"svg\":r=h;break;default:var n=\"Image format is not jpeg, png, svg or webp.\";if(o(new Error(n)),!t.promise)return e.emit(\"error\",n)}i(r),t.promise||e.emit(\"success\",r)},b.onerror=function(r){if(f=null,a.revokeObjectURL(h),o(r),!t.promise)return e.emit(\"error\",r)},b.src=h}));return t.promise?r:e}},56395:function(t,e,r){\"use strict\";var n=r(15398).EventEmitter,i=r(73972),a=r(71828),o=r(25095),s=r(61914),l=r(5900),u=r(70942);t.exports=function(t,e){var r=new n,c=s(t,{format:\"png\"}),f=c.gd;f.style.position=\"absolute\",f.style.left=\"-5000px\",document.body.appendChild(f);var h=o.getRedrawFunc(f);return i.call(\"_doPlot\",f,c.data,c.layout,c.config).then(h).then((function(){var t=o.getDelay(f._fullLayout);setTimeout((function(){var t=l(f),n=document.createElement(\"canvas\");n.id=a.randstr(),(r=u({format:e.format,width:f._fullLayout.width,height:f._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){f&&document.body.removeChild(f)}}),t)})).catch((function(t){r.emit(\"error\",t)})),r}},5900:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(7901),s=r(77922),l=/\"/g,u=\"TOBESTRIPPED\",c=new RegExp('(\"'+u+\")|(\"+u+'\")',\"g\");t.exports=function(t,e,r){var f,h=t._fullLayout,p=h._paper,d=h._toppaper,v=h.width,g=h.height;p.insert(\"rect\",\":first-child\").call(a.setRect,0,0,v,g).call(o.fill,h.paper_bgcolor);var y=h._basePlotModules||[];for(f=0;f<y.length;f++){var m=y[f];m.toSVG&&m.toSVG(t)}if(d){var x=d.node().childNodes,b=Array.prototype.slice.call(x);for(f=0;f<b.length;f++){var _=b[f];_.childNodes.length&&p.node().appendChild(_)}}h._draggers&&h._draggers.remove(),p.node().style.background=\"\",p.selectAll(\"text\").attr({\"data-unformatted\":null,\"data-math\":null}).each((function(){var t=n.select(this);if(\"hidden\"!==this.style.visibility&&\"none\"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('\"')&&t.style(\"font-family\",e.replace(l,u))}else t.remove()})),p.selectAll(\".gradient_filled,.pattern_filled\").each((function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf(\"url(\")&&t.style(\"fill\",e.replace(l,u));var r=this.style.stroke;r&&-1!==r.indexOf(\"url(\")&&t.style(\"stroke\",r.replace(l,u))})),\"pdf\"!==e&&\"eps\"!==e||p.selectAll(\"#MathJax_SVG_glyphs path\").attr(\"stroke-width\",0),p.node().setAttributeNS(s.xmlns,\"xmlns\",s.svg),p.node().setAttributeNS(s.xmlns,\"xmlns:xlink\",s.xlink),\"svg\"===e&&r&&(p.attr(\"width\",r*v),p.attr(\"height\",r*g),p.attr(\"viewBox\",\"0 0 \"+v+\" \"+g));var w=(new window.XMLSerializer).serializeToString(p.node());return w=(w=(w=function(t){var e=n.select(\"body\").append(\"div\").style({display:\"none\"}).html(\"\"),r=t.replace(/(&[^;]*;)/gi,(function(t){return\"&lt;\"===t?\"&#60;\":\"&rt;\"===t?\"&#62;\":-1!==t.indexOf(\"<\")||-1!==t.indexOf(\">\")?\"\":e.html(t).text()}));return e.remove(),r}(w)).replace(/&(?!\\w+;|\\#[0-9]+;| \\#x[0-9A-F]+;)/g,\"&amp;\")).replace(c,\"'\"),i.isIE()&&(w=(w=(w=w.replace(/\"/gi,\"'\")).replace(/(\\('#)([^']*)('\\))/gi,'(\"#$2\")')).replace(/(\\\\')/gi,'\"')),w}},75341:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.hovertext,t,\"htx\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\"mo\",!0),n.mergeArray(i.color,t,\"mc\");var a=i.line;a&&(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},1486:function(t,e,r){\"use strict\";var n=r(82196),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(41940),u=r(97313),c=r(79952).u,f=r(1426).extendFlat,h=l({editType:\"calc\",arrayOk:!0,colorEditType:\"style\"}),p=f({},n.marker.line.width,{dflt:0}),d=f({width:p,editType:\"calc\"},s(\"marker.line\")),v=f({line:d,editType:\"calc\"},s(\"marker\"),{opacity:{valType:\"number\",arrayOk:!0,dflt:1,min:0,max:1,editType:\"style\"},pattern:c});t.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),text:n.text,texttemplate:o({editType:\"plot\"},{keys:u.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:u.eventDataKeys}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"calc\"},insidetextanchor:{valType:\"enumerated\",values:[\"end\",\"middle\",\"start\"],dflt:\"end\",editType:\"plot\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"plot\"},textfont:f({},h,{}),insidetextfont:f({},h,{}),outsidetextfont:f({},h,{}),constraintext:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"both\",\"none\"],dflt:\"both\",editType:\"calc\"},cliponaxis:f({},n.cliponaxis,{}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},base:{valType:\"any\",dflt:null,arrayOk:!0,editType:\"calc\"},offset:{valType:\"number\",dflt:null,arrayOk:!0,editType:\"calc\"},width:{valType:\"number\",dflt:null,min:0,arrayOk:!0,editType:\"calc\"},marker:v,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:\"style\"},textfont:n.selected.textfont,editType:\"style\"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:\"style\"},textfont:n.unselected.textfont,editType:\"style\"},_deprecated:{bardir:{valType:\"enumerated\",editType:\"calc\",values:[\"v\",\"h\"]}}}},92290:function(t,e,r){\"use strict\";var n=r(89298),i=r(42973),a=r(52075).hasColorscale,o=r(78803),s=r(75341),l=r(66279);t.exports=function(t,e){var r,u,c,f,h,p,d=n.getFromId(t,e.xaxis||\"x\"),v=n.getFromId(t,e.yaxis||\"y\"),g={msUTC:!(!e.base&&0!==e.base)};\"h\"===e.orientation?(r=d.makeCalcdata(e,\"x\",g),c=v.makeCalcdata(e,\"y\"),f=i(e,v,\"y\",c),h=!!e.yperiodalignment,p=\"y\"):(r=v.makeCalcdata(e,\"y\",g),c=d.makeCalcdata(e,\"x\"),f=i(e,d,\"x\",c),h=!!e.xperiodalignment,p=\"x\"),u=f.vals;for(var y=Math.min(u.length,r.length),m=new Array(y),x=0;x<y;x++)m[x]={p:u[x],s:r[x]},h&&(m[x].orig_p=c[x],m[x][p+\"End\"]=f.ends[x],m[x][p+\"Start\"]=f.starts[x]),e.ids&&(m[x].id=String(e.ids[x]));return a(e,\"marker\")&&o(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),a(e,\"marker.line\")&&o(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),s(m,e),l(m,e),m}},97313:function(t){\"use strict\";t.exports={TEXTPAD:3,eventDataKeys:[\"value\",\"label\"]}},11661:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(73972),s=r(89298),l=r(99082).getAxisGroup,u=r(61546);function c(t,e,r,o,c){if(o.length){var b,_,w,T;switch(function(t,e){var r,a;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,u=\"funnel\"===l.type?l._base:l.base,c=\"h\"===l.orientation?l.xcalendar:l.ycalendar,f=\"category\"===t.type||\"multicategory\"===t.type?function(){return null}:t.d2c;if(i(u)){for(a=0;a<Math.min(u.length,s.length);a++)o=f(u[a],0,c),n(o)?(s[a].b=+o,s[a].hasB=1):s[a].b=0;for(;a<s.length;a++)s[a].b=0}else{o=f(u,0,c);var h=n(o);for(o=h?o:0,a=0;a<s.length;a++)s[a].b=o,h&&(s[a].hasB=1)}}}(r,o),c.mode){case\"overlay\":f(e,r,o,c);break;case\"group\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.offset?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,r,n){for(var i=t._fullLayout,a=r.positions,o=r.distinctPositions,s=r.minDiff,u=r.traces,c=u.length,f=a.length!==o.length,h=s*(1-n.gap),g=l(i,e._id)+u[0][0].trace.orientation,y=i._alignmentOpts[g]||{},m=0;m<c;m++){var x,b,_=u[m],w=_[0].trace,T=y[w.alignmentgroup]||{},k=Object.keys(T.offsetGroups||{}).length,A=(x=k?h/k:f?h/c:h)*(1-(n.groupgap||0));b=k?((2*w._offsetIndex+1-k)*x-A)/2:f?((2*m+1-c)*x-A)/2:-A/2;var M=_[0].t;M.barwidth=A,M.poffset=b,M.bargroupwidth=h,M.bardelta=s}r.binWidth=u[0][0].t.barwidth/100,p(r),d(e,r),v(e,r,f)})(t,e,o,i),function(t,e){for(var r=t.traces,n=0;n<r.length;n++){var i=r[n];if(void 0===i[0].trace.base)for(var o=new u([i],{posAxis:e,sepNegVal:!0,overlapNoMerge:!0}),s=0;s<i.length;s++){var l=i[s];if(l.p!==a){var c=o.put(l.p,l.b+l.s);c&&(l.b=c)}}}}(o,e),i.norm?(y(o),m(r,o,i)):g(r,o)}(t,e,r,_,c),b.length&&f(e,r,b,c);break;case\"stack\":case\"relative\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(T=o[w])[0].trace.base?_.push(T):b.push(T);_.length&&function(t,e,r,n,i){var o=new u(n,{posAxis:e,sepNegVal:\"relative\"===i.mode,overlapNoMerge:!(i.norm||\"stack\"===i.mode||\"relative\"===i.mode)});h(e,o,i),function(t,e,r){var n,i,o,l,u,c,f=x(t),h=e.traces;for(l=0;l<h.length;l++)if(\"funnel\"===(i=(n=h[l])[0].trace).type)for(u=0;u<n.length;u++)(c=n[u]).s!==a&&e.put(c.p,-.5*c.s);for(l=0;l<h.length;l++){o=\"funnel\"===(i=(n=h[l])[0].trace).type;var p=[];for(u=0;u<n.length;u++)if((c=n[u]).s!==a){var d;d=o?c.s:c.s+c.b;var v=e.put(c.p,d),g=v+d;c.b=v,c[f]=g,r.norm||(p.push(g),c.hasB&&p.push(v))}r.norm||(i._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,i);for(var l=0;l<n.length;l++)for(var c=n[l],f=0;f<c.length;f++){var p=c[f];p.s!==a&&p.b+p.s===o.get(p.p,p.s)&&(p._outmost=!0)}i.norm&&m(r,o,i)}(0,e,r,_,c),b.length&&f(e,r,b,c)}!function(t,e){var r,i,a,o=x(e),s={},l=1/0,u=-1/0;for(r=0;r<t.length;r++)for(a=t[r],i=0;i<a.length;i++){var c=a[i].p;n(c)&&(l=Math.min(l,c),u=Math.max(u,c))}var f=1e4/(u-l),h=s.round=function(t){return String(Math.round(f*(t-l)))};for(r=0;r<t.length;r++){(a=t[r])[0].t.extents=s;var p=a[0].t.poffset,d=Array.isArray(p);for(i=0;i<a.length;i++){var v=a[i],g=v[o]-v.w/2;if(n(g)){var y=v[o]+v.w/2,m=h(v.p);s[m]?s[m]=[Math.min(g,s[m][0]),Math.max(y,s[m][1])]:s[m]=[g,y]}v.p0=v.p+(d?p[i]:p),v.p1=v.p0+v.w,v.s0=v.b,v.s1=v.s0+v.s}}}(o,e)}}function f(t,e,r,n){for(var i=0;i<r.length;i++){var a=r[i],o=new u([a],{posAxis:t,sepNegVal:!1,overlapNoMerge:!n.norm});h(t,o,n),n.norm?(y(o),m(e,o,n)):g(e,o)}}function h(t,e,r){for(var n=e.minDiff,i=e.traces,a=n*(1-r.gap),o=a*(1-(r.groupgap||0)),s=-o/2,l=0;l<i.length;l++){var u=i[l][0].t;u.barwidth=o,u.poffset=s,u.bargroupwidth=a,u.bardelta=n}e.binWidth=i[0][0].t.barwidth/100,p(e),d(t,e),v(t,e)}function p(t){var e,r,a=t.traces;for(e=0;e<a.length;e++){var o,s=a[e],l=s[0],u=l.trace,c=l.t,f=u._offset||u.offset,h=c.poffset;if(i(f)){for(o=Array.prototype.slice.call(f,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=h);for(r=o.length;r<s.length;r++)o.push(h);c.poffset=o}else void 0!==f&&(c.poffset=f);var p=u._width||u.width,d=c.barwidth;if(i(p)){var v=Array.prototype.slice.call(p,0,s.length);for(r=0;r<v.length;r++)n(v[r])||(v[r]=d);for(r=v.length;r<s.length;r++)v.push(d);if(c.barwidth=v,void 0===f){for(o=[],r=0;r<s.length;r++)o.push(h+(d-v[r])/2);c.poffset=o}}else void 0!==p&&(c.barwidth=p,void 0===f&&(c.poffset=h+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++)for(var a=r[i],o=a[0].t,s=o.poffset,l=Array.isArray(s),u=o.barwidth,c=Array.isArray(u),f=0;f<a.length;f++){var h=a[f],p=h.w=c?u[f]:u;void 0===h.p&&(h.p=h[n],h[\"orig_\"+n]=h[n]);var d=(l?s[f]:s)+p/2;h[n]=h.p+d}}function v(t,e,r){var n=e.traces,i=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var a=0;a<n.length;a++){var o,l,u,c,f=n[a],h=f[0],p=h.trace,d=[];for(c=0;c<f.length;c++)l=(o=f[c]).p-i,u=o.p+i,d.push(l,u);if(p.width||p.offset){var v=h.t,g=v.poffset,y=v.barwidth,m=Array.isArray(g),x=Array.isArray(y);for(c=0;c<f.length;c++){o=f[c];var b=m?g[c]:g,_=x?y[c]:y;u=(l=o.p+b)+_,d.push(l,u)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function g(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++){for(var a=r[i],o=a[0].trace,l=\"scatter\"===o.type,u=\"v\"===o.orientation,c=[],f=!1,h=0;h<a.length;h++){var p=a[h],d=l?0:p.b,v=l?u?p.y:p.x:d+p.s;p[n]=v,c.push(v),p.hasB&&c.push(d),p.hasB&&p.b||(f=!0)}o._extremes[t._id]=s.findExtremes(t,c,{tozero:f,padded:!0})}}function y(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var o=n[i];o.s!==a&&t.put(o.p,o.b+o.s)}}function m(t,e,r){var i=e.traces,o=x(t),l=\"fraction\"===r.norm?1:100,u=l/1e9,c=t.l2c(t.c2l(0)),f=\"stack\"===r.mode?l:c;function h(e){return n(t.c2l(e))&&(e<c-u||e>f+u||!n(c))}for(var p=0;p<i.length;p++){for(var d=i[p],v=d[0].trace,g=[],y=!1,m=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==a){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var T=_.b,k=T+_.s;_[o]=k,g.push(k),m=m||h(k),_.hasB&&(g.push(T),m=m||h(T)),_.hasB&&_.b||(y=!0)}}v._extremes[t._id]=s.findExtremes(t,g,{tozero:y,padded:m})}}function x(t){return t._id.charAt(0)}t.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,i=t._fullLayout,a=t._fullData,s=t.calcdata,l=[],u=[],f=0;f<a.length;f++){var h=a[f];if(!0===h.visible&&o.traceIs(h,\"bar\")&&h.xaxis===r._id&&h.yaxis===n._id&&(\"h\"===h.orientation?l.push(s[f]):u.push(s[f]),h._computePh))for(var p=t.calcdata[f],d=0;d<p.length;d++)\"function\"==typeof p[d].ph0&&(p[d].ph0=p[d].ph0()),\"function\"==typeof p[d].ph1&&(p[d].ph1=p[d].ph1())}var v={xCat:\"category\"===r.type||\"multicategory\"===r.type,yCat:\"category\"===n.type||\"multicategory\"===n.type,mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};c(t,r,n,u,v),c(t,n,r,l,v)},setGroupPositions:c}},90769:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(73972),o=r(67513),s=r(73927),l=r(98340),u=r(26125),c=r(1486),f=n.coerceFont;function h(t,e,r,i,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),u=!(!1===o.moduleHasConstrain),c=!(!1===o.moduleHasCliponaxis),h=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,v=Array.isArray(a)||\"auto\"===a,g=v||\"inside\"===a,y=v||\"outside\"===a;if(g||y){var m=f(i,\"textfont\",r.font),x=n.extendFlat({},m),b=!(t.textfont&&t.textfont.color);if(b&&delete x.color,f(i,\"insidetextfont\",x),d){var _=n.extendFlat({},m);b&&delete _.color,f(i,\"pathbar.textfont\",_)}y&&f(i,\"outsidetextfont\",m),s&&i(\"selected.textfont.color\"),l&&i(\"unselected.textfont.color\"),u&&i(\"constraintext\"),c&&i(\"cliponaxis\"),h&&i(\"textangle\"),i(\"texttemplate\")}g&&p&&i(\"insidetextanchor\")}t.exports={supplyDefaults:function(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}if(o(t,e,u,f)){s(t,e,u,f),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"orientation\",e.x&&!e.y?\"h\":\"v\"),f(\"base\"),f(\"offset\"),f(\"width\"),f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\");var p=f(\"textposition\");h(t,0,u,f,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),l(t,e,f,r,u);var d=(e.marker.line||{}).color,v=a.getComponentMethod(\"errorbars\",\"supplyDefaults\");v(t,e,d||i.defaultLine,{axis:\"y\"}),v(t,e,d||i.defaultLine,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,c,t)}if(\"group\"===e.barmode)for(var o=0;o<t.length;o++)\"bar\"===(i=t[o]).type&&(r=i._input,u(r,i,e,a))},handleText:h}},58065:function(t){\"use strict\";t.exports=function(t,e,r){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),\"h\"===r.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},69383:function(t,e,r){\"use strict\";var n=r(92770),i=r(84267),a=r(71828).isArrayOrTypedArray;e.coerceString=function(t,e,r){if(\"string\"==typeof e){if(e||!t.noBlank)return e}else if((\"number\"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},e.coerceNumber=function(t,e,r){if(n(e)){e=+e;var i=t.min,a=t.max;if(!(void 0!==i&&e<i||void 0!==a&&e>a))return e}return void 0!==r?r:t.dflt},e.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},e.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},e.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},e.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},95423:function(t,e,r){\"use strict\";var n=r(30211),i=r(73972),a=r(7901),o=r(71828).fillText,s=r(69383).getLineWidth,l=r(89298).hoverLabelText,u=r(50606).BADNUM;function c(t,e,r,i,a){var s,c,f,h,p,d,v,g=t.cd,y=g[0].trace,m=g[0].t,x=\"closest\"===i,b=\"waterfall\"===y.type,_=t.maxHoverDistance,w=t.maxSpikeDistance;\"h\"===y.orientation?(s=r,c=e,f=\"y\",h=\"x\",p=D,d=O):(s=e,c=r,f=\"x\",h=\"y\",d=D,p=O);var T=y[f+\"period\"],k=x||T;function A(t){return S(t,-1)}function M(t){return S(t,1)}function S(t,e){var r=t.w;return t[f]+e*r/2}function E(t){return t[f+\"End\"]-t[f+\"Start\"]}var L=x?A:T?function(t){return t.p-E(t)/2}:function(t){return Math.min(A(t),t.p-m.bardelta/2)},C=x?M:T?function(t){return t.p+E(t)/2}:function(t){return Math.max(M(t),t.p+m.bardelta/2)};function P(t,e,r){return a.finiteRange&&(r=0),n.inbox(t-s,e-s,r+Math.min(1,Math.abs(e-t)/v)-1)}function O(t){return P(L(t),C(t),_)}function I(t){var e=t[h];if(b){var r=Math.abs(t.rawS)||0;c>0?e+=r:c<0&&(e-=r)}return e}function D(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,_+(i-e)/(i-r)-1)}var z=t[f+\"a\"],R=t[h+\"a\"];v=Math.abs(z.r2c(z.range[1])-z.r2c(z.range[0]));var F=n.getDistanceFunction(i,p,d,(function(t){return(p(t)+d(t))/2}));if(n.getClosest(g,F,t),!1!==t.index&&g[t.index].p!==u){k||(L=function(t){return Math.min(A(t),t.p-m.bargroupwidth/2)},C=function(t){return Math.max(M(t),t.p+m.bargroupwidth/2)});var B=g[t.index],N=y.base?B.b+B.s:B.s;t[h+\"0\"]=t[h+\"1\"]=R.c2p(B[h],!0),t[h+\"LabelVal\"]=N;var j=m.extents[m.extents.round(B.p)];t[f+\"0\"]=z.c2p(x?L(B):j[0],!0),t[f+\"1\"]=z.c2p(x?C(B):j[1],!0);var U=void 0!==B.orig_p;return t[f+\"LabelVal\"]=U?B.orig_p:B.p,t.labelLabel=l(z,t[f+\"LabelVal\"],y[f+\"hoverformat\"]),t.valueLabel=l(R,t[h+\"LabelVal\"],y[h+\"hoverformat\"]),t.baseLabel=l(R,B.b,y[h+\"hoverformat\"]),t.spikeDistance=(function(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(B)+function(t){return P(A(t),M(t),w)}(B))/2,t[f+\"Spike\"]=z.c2p(B.p,!0),o(B,y,t),t.hovertemplate=y.hovertemplate,t}}function f(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(r)?r:a.opacity(n)&&i?n:void 0}t.exports={hoverPoints:function(t,e,r,n,a){var o=c(t,e,r,n,a);if(o){var s=o.cd,l=s[0].trace,u=s[o.index];return o.color=f(l,u),i.getComponentMethod(\"errorbars\",\"hoverInfo\")(u,l,o),[o]}},hoverOnBars:c,getTraceColor:f}},60822:function(t,e,r){\"use strict\";t.exports={attributes:r(1486),layoutAttributes:r(43641),supplyDefaults:r(90769).supplyDefaults,crossTraceDefaults:r(90769).crossTraceDefaults,supplyLayoutDefaults:r(13957),calc:r(92290),crossTraceCalc:r(11661).crossTraceCalc,colorbar:r(4898),arraysToCalcdata:r(75341),plot:r(17295).plot,style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(95423).hoverPoints,eventData:r(58065),selectPoints:r(81974),moduleType:\"trace\",name:\"bar\",basePlotModule:r(93612),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"oriented\",\"errorBarsOK\",\"showLegend\",\"zoomScale\"],animatable:!0,meta:{}}},43641:function(t){\"use strict\";t.exports={barmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\",\"relative\"],dflt:\"group\",editType:\"calc\"},barnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},bargap:{valType:\"number\",min:0,max:1,editType:\"calc\"},bargroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},13957:function(t,e,r){\"use strict\";var n=r(73972),i=r(89298),a=r(71828),o=r(43641);t.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,u=!1,c=!1,f={},h=s(\"barmode\"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,\"bar\")&&d.visible){if(l=!0,\"group\"===h){var v=d.xaxis+d.yaxis;f[v]&&(c=!0),f[v]=!0}d.visible&&\"histogram\"===d.type&&\"category\"!==i.getFromId({_fullLayout:e},d[\"v\"===d.orientation?\"xaxis\":\"yaxis\"]).type&&(u=!0)}}l?(\"overlay\"!==h&&s(\"barnorm\"),s(\"bargap\",u&&!c?0:.2),s(\"bargroupgap\")):delete e.barmode}},17295:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(71828),o=r(63893),s=r(7901),l=r(91424),u=r(73972),c=r(89298).tickText,f=r(72597),h=f.recordMinTextSize,p=f.clearMinTextSize,d=r(16688),v=r(69383),g=r(97313),y=r(1486),m=y.text,x=y.textposition,b=r(23469).appendArrayPointValue,_=g.TEXTPAD;function w(t){return t.id}function T(t){if(t.ids)return w}function k(t,e){return t<e?1:-1}function A(t,e,r,n){var i;return!e.uniformtext.mode&&M(r)?(n&&(i=n()),t.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){i&&i()})).each(\"interrupt\",(function(){i&&i()}))):t}function M(t){return t&&t.duration>0}function S(t){return\"auto\"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),i=Math.abs(Math.cos(r));return{x:t.width*i+t.height*n,y:t.width*n+t.height*i}}function L(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,u=a.anchor||\"end\",c=\"end\"===u,f=\"start\"===u,h=((a.leftToRight||0)+1)/2,p=1-h,d=i.width,v=i.height,g=Math.abs(e-t),y=Math.abs(n-r),m=g>2*_&&y>2*_?_:0;g-=2*m,y-=2*m;var x=S(l);\"auto\"!==l||d<=g&&v<=y||!(d>g||v>y)||(d>y||v>g)&&d<v==g<y||(x+=90);var b=E(i,x),w=1;s&&(w=Math.min(1,g/b.x,y/b.y));var T=i.left*p+i.right*h,A=(i.top+i.bottom)/2,M=(t+_)*p+(e-_)*h,L=(r+n)/2,C=0,P=0;if(f||c){var O=(o?b.x:b.y)/2,I=o?k(t,e):k(r,n);o?f?(M=t+I*m,C=-I*O):(M=e-I*m,C=I*O):f?(L=r+I*m,P=-I*O):(L=n-I*m,P=I*O)}return{textX:T,textY:A,targetX:M,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}t.exports={plot:function(t,e,r,f,g,y){var w=e.xaxis,C=e.yaxis,P=t._fullLayout,O=t._context.staticPlot;g||(g={mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p(\"bar\",P));var I=a.makeTraceGroups(f,r,\"trace bars\").each((function(r){var u=n.select(this),f=r[0].trace,p=\"waterfall\"===f.type,I=\"funnel\"===f.type,D=\"bar\"===f.type||I,z=0;p&&f.connector.visible&&\"between\"===f.connector.mode&&(z=f.connector.line.width/2);var R=\"h\"===f.orientation,F=M(g),B=a.ensureSingle(u,\"g\",\"points\"),N=T(f),j=B.selectAll(\"g.point\").data(a.identity,N);j.enter().append(\"g\").classed(\"point\",!0),j.exit().remove(),j.each((function(u,p){var T,M,I=n.select(this),B=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),n?[i,a]:[a,i]}(u,w,C,R),N=B[0][0],j=B[0][1],U=B[1][0],V=B[1][1],H=0==(R?j-N:V-U);if(H&&D&&v.getLineWidth(f,u)&&(H=!1),H||(H=!(i(N)&&i(j)&&i(U)&&i(V))),u.isBlank=H,H&&(R?j=N:V=U),z&&!H&&(R?(N-=k(N,j)*z,j+=k(N,j)*z):(U-=k(U,V)*z,V+=k(U,V)*z)),\"waterfall\"===f.type){if(!H){var q=f[u.dir].marker;T=q.line.width,M=q.color}}else T=v.getLineWidth(f,u),M=u.mc||f.marker.color;function G(t){var e=n.round(T/2%1,2);return 0===g.gap&&0===g.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var Z=s.opacity(M)<1||T>.01?G:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?G(t):t>e?Math.ceil(t):Math.floor(t)};N=Z(N,j,R),j=Z(j,N,R),U=Z(U,V,!R),V=Z(V,U,!R)}var Y=A(a.ensureSingle(I,\"path\"),P,g,y);if(Y.style(\"vector-effect\",O?\"none\":\"non-scaling-stroke\").attr(\"d\",isNaN((j-N)*(V-U))||H&&t._context.staticPlot?\"M0,0Z\":\"M\"+N+\",\"+U+\"V\"+V+\"H\"+j+\"V\"+U+\"Z\").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&F){var W=l.makePointStyleFns(f);l.singlePointStyle(u,Y,f,W,t)}!function(t,e,r,n,i,s,u,f,p,g,y){var w,T=e.xaxis,M=e.yaxis,C=t._fullLayout;function P(e,r,n){return a.ensureSingle(e,\"text\").text(r).attr({class:\"bartext bartext-\"+w,\"text-anchor\":\"middle\",\"data-notex\":1}).call(l.font,n).call(o.convertToTspans,t)}var O=n[0].trace,I=\"h\"===O.orientation,D=function(t,e,r,n,i){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,i){var o=e[0].trace,s=a.castOption(o,r,\"texttemplate\");if(!s)return\"\";var l,u,f,h,p=\"histogram\"===o.type,d=\"waterfall\"===o.type,v=\"funnel\"===o.type,g=\"h\"===o.orientation;function y(t){return c(h,h.c2l(t),!0).text}g?(l=\"y\",u=i,f=\"x\",h=n):(l=\"x\",u=n,f=\"y\",h=i);var m,x=e[r],_={};_.label=x.p,_.labelLabel=_[l+\"Label\"]=(m=x.p,c(u,u.c2l(m),!0).text);var w=a.castOption(o,x.i,\"text\");(0===w||w)&&(_.text=w),_.value=x.s,_.valueLabel=_[f+\"Label\"]=y(x.s);var T={};b(T,o,x.i),(p||void 0===T.x)&&(T.x=g?_.value:_.label),(p||void 0===T.y)&&(T.y=g?_.label:_.value),(p||void 0===T.xLabel)&&(T.xLabel=g?_.valueLabel:_.labelLabel),(p||void 0===T.yLabel)&&(T.yLabel=g?_.labelLabel:_.valueLabel),d&&(_.delta=+x.rawS||x.s,_.deltaLabel=y(_.delta),_.final=x.v,_.finalLabel=y(_.final),_.initial=_.final-_.delta,_.initialLabel=y(_.initial)),v&&(_.value=x.s,_.valueLabel=y(_.value),_.percentInitial=x.begR,_.percentInitialLabel=a.formatPercent(x.begR),_.percentPrevious=x.difR,_.percentPreviousLabel=a.formatPercent(x.difR),_.percentTotal=x.sumR,_.percenTotalLabel=a.formatPercent(x.sumR));var k=a.castOption(o,x.i,\"customdata\");return k&&(_.customdata=k),a.texttemplateString(s,_,t._d3locale,T,_,o._meta||{})}(t,e,r,n,i):s.textinfo?function(t,e,r,n){var i=t[0].trace,o=\"h\"===i.orientation,s=\"waterfall\"===i.type,l=\"funnel\"===i.type;function u(t){return c(o?r:n,+t,!0).text}var f,h,p=i.textinfo,d=t[e],v=p.split(\"+\"),g=[],y=function(t){return-1!==v.indexOf(t)};if(y(\"label\")&&g.push((h=t[e].p,c(o?n:r,h,!0).text)),y(\"text\")&&(0===(f=a.castOption(i,d.i,\"text\"))||f)&&g.push(f),s){var m=+d.rawS||d.s,x=d.v,b=x-m;y(\"initial\")&&g.push(u(b)),y(\"delta\")&&g.push(u(m)),y(\"final\")&&g.push(u(x))}if(l){y(\"value\")&&g.push(u(d.s));var _=0;y(\"percent initial\")&&_++,y(\"percent previous\")&&_++,y(\"percent total\")&&_++;var w=_>1;y(\"percent initial\")&&(f=a.formatPercent(d.begR),w&&(f+=\" of initial\"),g.push(f)),y(\"percent previous\")&&(f=a.formatPercent(d.difR),w&&(f+=\" of previous\"),g.push(f)),y(\"percent total\")&&(f=a.formatPercent(d.sumR),w&&(f+=\" of total\"),g.push(f))}return g.join(\"<br>\")}(e,r,n,i):v.getValue(s.text,r),v.coerceString(m,o)}(C,n,i,T,M);w=function(t,e){var r=v.getValue(t.textposition,e);return v.coerceEnumerated(x,r)}(O,i);var z=\"stack\"===g.mode||\"relative\"===g.mode,R=n[i],F=!z||R._outmost;if(D&&\"none\"!==w&&(!R.isBlank&&s!==u&&f!==p||\"auto\"!==w&&\"inside\"!==w)){var B=C.font,N=d.getBarColor(n[i],O),j=d.getInsideTextFont(O,i,B,N),U=d.getOutsideTextFont(O,i,B),V=r.datum();I?\"log\"===T.type&&V.s0<=0&&(s=T.range[0]<T.range[1]?0:T._length):\"log\"===M.type&&V.s0<=0&&(f=M.range[0]<M.range[1]?M._length:0);var H,q,G,Z,Y,W=Math.abs(u-s)-2*_,X=Math.abs(p-f)-2*_;if(\"outside\"===w&&(F||R.hasB||(w=\"inside\")),\"auto\"===w&&(F?(w=\"inside\",H=P(r,D,Y=a.ensureUniformFontSize(t,j)),G=(q=l.bBox(H.node())).width,Z=q.height,G>0&&Z>0&&(G<=W&&Z<=X||G<=X&&Z<=W||(I?W>=G*(X/Z):X>=Z*(W/G)))?w=\"inside\":(w=\"outside\",H.remove(),H=null)):w=\"inside\"),!H){var J=(H=P(r,D,Y=a.ensureUniformFontSize(t,\"outside\"===w?U:j))).attr(\"transform\");if(H.attr(\"transform\",\"\"),G=(q=l.bBox(H.node())).width,Z=q.height,H.attr(\"transform\",J),G<=0||Z<=0)return void H.remove()}var K,$=O.textangle;K=\"outside\"===w?function(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,u=a.angle||0,c=i.width,f=i.height,h=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:h>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/f):Math.min(1,h/c));var v=S(u),g=E(i,v),y=(s?g.x:g.y)/2,m=(i.left+i.right)/2,x=(i.top+i.bottom)/2,b=(t+e)/2,w=(r+n)/2,T=0,A=0,M=s?k(e,t):k(r,n);return s?(b=e-M*o,T=M*y):(w=n+M*o,A=-M*y),{textX:m,textY:x,targetX:b,targetY:w,anchorX:T,anchorY:A,scale:d,rotate:v}}(s,u,f,p,q,{isHorizontal:I,constrained:\"both\"===O.constraintext||\"outside\"===O.constraintext,angle:$}):L(s,u,f,p,q,{isHorizontal:I,constrained:\"both\"===O.constraintext||\"inside\"===O.constraintext,angle:$,anchor:O.insidetextanchor}),K.fontSize=Y.size,h(\"histogram\"===O.type?\"bar\":O.type,K,C),R.transform=K;var Q=A(H,C,g,y);a.setTransormAndDisplay(Q,K)}else r.select(\"text\").remove()}(t,e,I,r,p,N,j,U,V,g,y),e.layerClipId&&l.hideOutsideRangePoint(u,I.select(\"text\"),w,C,f.xcalendar,f.ycalendar)}));var U=!1===f.cliponaxis;l.setClipUrl(u,U?null:e.layerClipId,t)}));u.getComponentMethod(\"errorbars\",\"plot\")(t,I,e,g)},toMoveInsideBar:L}},81974:function(t){\"use strict\";function e(t,e,r,n,i){var a=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}t.exports=function(t,r){var n,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l=\"funnel\"===s.type,u=\"h\"===s.orientation,c=[];if(!1===r)for(n=0;n<i.length;n++)i[n].selected=0;else for(n=0;n<i.length;n++){var f=i[n],h=\"ct\"in f?f.ct:e(f,a,o,u,l);r.contains(h,!1,n,t)?(c.push({pointNumber:n,x:a.c2d(f.x),y:o.c2d(f.y)}),f.selected=1):f.selected=0}return c}},61546:function(t,e,r){\"use strict\";t.exports=i;var n=r(71828).distinctVals;function i(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,i=e.posAxis._id.charAt(0),a=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var u=s[l],c=u.p;void 0===c&&(c=u[i]),void 0!==c&&a.push(c)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=a;var f=n(a);this.distinctPositions=f.vals,1===f.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(f.minDiff,r);var h=(e.posAxis||{}).type;\"category\"!==h&&\"multicategory\"!==h||(this.minDiff=1),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},i.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},i.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?\"v\":\"^\")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},16688:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(91424),o=r(71828),s=r(73972),l=r(72597).resizeText,u=r(1486),c=u.textfont,f=u.insidetextfont,h=u.outsidetextfont,p=r(69383);function d(t,e,r){a.pointStyle(t.selectAll(\"path\"),e,r),v(t,e,r)}function v(t,e,r){t.selectAll(\"text\").each((function(t){var i=n.select(this),s=o.ensureUniformFontSize(r,g(i,t,e,r));a.font(i,s)}))}function g(t,e,r,n){var i=n._fullLayout.font,a=r.textfont;if(t.classed(\"bartext-inside\")){var o=_(e,r);a=m(r,e.i,i,o)}else t.classed(\"bartext-outside\")&&(a=x(r,e.i,i));return a}function y(t,e,r){return b(c,t.textfont,e,r)}function m(t,e,r,n){var a=y(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(a={color:i.contrast(n),family:a.family,size:a.size}),b(f,t.insidetextfont,e,a)}function x(t,e,r){var n=y(t,e,r);return b(h,t.outsidetextfont,e,n)}function b(t,e,r,n){e=e||{};var i=p.getValue(e.family,r),a=p.getValue(e.size,r),o=p.getValue(e.color,r);return{family:p.coerceString(t.family,i,n.family),size:p.coerceNumber(t.size,a,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return\"waterfall\"===e.type?e[t.dir].marker.color:t.mcc||t.mc||e.marker.color}t.exports={style:function(t){var e=n.select(t).selectAll(\"g.barlayer\").selectAll(\"g.trace\");l(t,e,\"bar\");var r=e.size(),i=t._fullLayout;e.style(\"opacity\",(function(t){return t[0].trace.opacity})).each((function(t){(\"stack\"===i.barmode&&r>1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr(\"shape-rendering\",\"crispEdges\")})),e.selectAll(\"g.points\").each((function(e){d(n.select(this),e[0].trace,t)})),s.getComponentMethod(\"errorbars\",\"style\")(e)},styleTextPoints:v,styleOnSelect:function(t,e,r){var i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll(\"path\"),e),function(t,e,r){t.each((function(t){var i,s=n.select(this);if(t.selected){i=o.ensureUniformFontSize(r,g(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll(\"text\"),e,r)}(r,i,t):(d(r,i,t),s.getComponentMethod(\"errorbars\",\"style\")(r))},getInsideTextFont:m,getOutsideTextFont:x,getBarColor:_,resizeText:l}},98340:function(t,e,r){\"use strict\";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(71828).coercePattern;t.exports=function(t,e,r,s,l){var u=r(\"marker.color\",s),c=i(t,\"marker\");c&&a(t,e,l,r,{prefix:\"marker.\",cLetter:\"c\"}),r(\"marker.line.color\",n.defaultLine),i(t,\"marker.line\")&&a(t,e,l,r,{prefix:\"marker.line.\",cLetter:\"c\"}),r(\"marker.line.width\"),r(\"marker.opacity\"),o(r,\"marker.pattern\",u,c),r(\"selected.marker.color\"),r(\"unselected.marker.color\")}},72597:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828);function a(t){return\"_\"+t+\"Text_minsize\"}t.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=a(t),i=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<i,r[n]=r[n]||1/0,e.hide||(r[n]=Math.min(r[n],Math.max(o,i)))}},clearMinTextSize:function(t,e){e[a(t)]=void 0},resizeText:function(t,e,r){var a=t._fullLayout,o=a[\"_\"+r+\"Text_minsize\"];if(o){var s,l=\"hide\"===a.uniformtext.mode;switch(r){case\"funnelarea\":case\"pie\":case\"sunburst\":s=\"g.slice\";break;case\"treemap\":case\"icicle\":s=\"g.slice, g.pathbar\";break;default:s=\"g.points > g.point\"}e.selectAll(s).each((function(t){var e=t.transform;if(e){e.scale=l&&e.hide?0:o/e.fontSize;var r=n.select(this).select(\"text\");i.setTransormAndDisplay(r,e)}}))}}}},55023:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(1426).extendFlat,a=r(81245),o=r(1486);t.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},74692:function(t,e,r){\"use strict\";var n=r(52075).hasColorscale,i=r(78803),a=r(75341),o=r(11661).setGroupPositions,s=r(66279),l=r(73972).traceIs,u=r(71828).extendFlat;t.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,u=r[o].angularaxis,c=l.makeCalcdata(e,\"r\"),f=u.makeCalcdata(e,\"theta\"),h=e._length,p=new Array(h),d=c,v=f,g=0;g<h;g++)p[g]={p:v[g],s:d[g]};function y(t){var r=e[t];void 0!==r&&(e[\"_\"+t]=Array.isArray(r)?u.makeCalcdata(e,t):u.d2c(r,e.thetaunit))}return\"linear\"===u.type&&(y(\"width\"),y(\"offset\")),n(e,\"marker\")&&i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),n(e,\"marker.line\")&&i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),a(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,i=[],a=0;a<n.length;a++){var s=n[a],c=s[0].trace;!0===c.visible&&l(c,\"bar\")&&c.subplot===r&&i.push(s)}var f=u({},e.radialaxis,{_id:\"x\"}),h=e.angularaxis;o(t,h,f,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},6135:function(t,e,r){\"use strict\";var n=r(71828),i=r(22184).handleRThetaDefaults,a=r(98340),o=r(55023);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,s,l)?(l(\"thetaunit\"),l(\"base\"),l(\"offset\"),l(\"width\"),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),a(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},27379:function(t,e,r){\"use strict\";var n=r(30211),i=r(71828),a=r(95423).getTraceColor,o=i.fillText,s=r(59150).makeHoverPointText,l=r(10869).isPtInsidePolygon;t.exports=function(t,e,r){var u=t.cd,c=u[0].trace,f=t.subplot,h=f.radialAxis,p=f.angularAxis,d=f.vangles,v=d?l:i.isPtInsideSector,g=t.maxHoverDistance,y=p._period||2*Math.PI,m=Math.abs(h.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);if(h.range[0]>h.range[1]&&(x+=Math.PI),n.getClosest(u,(function(t){return v(m,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/y)-1+(t.rp1-m)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var b=u[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,c,t),s(_,c,f,t),t.hovertemplate=c.hovertemplate,t.color=a(c,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign=\"left\"),[t]}}},23381:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"barpolar\",basePlotModule:r(23580),categories:[\"polar\",\"bar\",\"showLegend\"],attributes:r(55023),layoutAttributes:r(40151),supplyDefaults:r(6135),supplyLayoutDefaults:r(19860),calc:r(74692).calc,crossTraceCalc:r(74692).crossTraceCalc,plot:r(60173),colorbar:r(4898),formatLabels:r(98608),style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(27379),selectPoints:r(81974),meta:{}}},40151:function(t){\"use strict\";t.exports={barmode:{valType:\"enumerated\",values:[\"stack\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},bargap:{valType:\"number\",dflt:.1,min:0,max:1,editType:\"calc\"}}},19860:function(t,e,r){\"use strict\";var n=r(71828),i=r(40151);t.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l<r.length;l++){var u=r[l];\"barpolar\"===u.type&&!0===u.visible&&(o[a=u.subplot]||(s(\"barmode\"),s(\"bargap\"),o[a]=1))}}},60173:function(t,e,r){\"use strict\";var n=r(39898),i=r(92770),a=r(71828),o=r(91424),s=r(10869);t.exports=function(t,e,r){var l=t._context.staticPlot,u=e.xaxis,c=e.yaxis,f=e.radialAxis,h=e.angularAxis,p=function(t){var e=t.cxx,r=t.cyy;return t.vangles?function(n,i,o,l){var u,c;a.angleDelta(o,l)>0?(u=o,c=l):(u=l,c=o);var f=[s.findEnclosingVertexAngles(u,t.vangles)[0],(u+c)/2,s.findEnclosingVertexAngles(c,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,u,c,f,e,r)}:function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),d=e.layers.frontplot.select(\"g.barlayer\");a.makeTraceGroups(d,r,\"trace bars\").each((function(){var r=n.select(this),s=a.ensureSingle(r,\"g\",\"points\").selectAll(\"g.point\").data(a.identity);s.enter().append(\"g\").style(\"vector-effect\",l?\"none\":\"non-scaling-stroke\").style(\"stroke-miterlimit\",2).classed(\"point\",!0),s.exit().remove(),s.each((function(t){var e,r=n.select(this),o=t.rp0=f.c2p(t.s0),s=t.rp1=f.c2p(t.s1),l=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(l)&&i(d)&&o!==s&&l!==d){var v=f.c2g(t.s1),g=(l+d)/2;t.ct=[u.c2p(v*Math.cos(g)),c.c2p(v*Math.sin(g))],e=p(o,s,l,d)}else e=\"M0,0Z\";a.ensureSingle(r,\"path\").attr(\"d\",e)})),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},53522:function(t,e,r){\"use strict\";var n=r(82196),i=r(1486),a=r(22399),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(1426).extendFlat,u=n.marker,c=u.line;t.exports={y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",editType:\"calc\"},dy:{valType:\"number\",editType:\"calc\"},xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),name:{valType:\"string\",editType:\"calc+clearAxisTypes\"},q1:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},median:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},q3:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},lowerfence:{valType:\"data_array\",editType:\"calc\"},upperfence:{valType:\"data_array\",editType:\"calc\"},notched:{valType:\"boolean\",editType:\"calc\"},notchwidth:{valType:\"number\",min:0,max:.5,dflt:.25,editType:\"calc\"},notchspan:{valType:\"data_array\",editType:\"calc\"},boxpoints:{valType:\"enumerated\",values:[\"all\",\"outliers\",\"suspectedoutliers\",!1],editType:\"calc\"},jitter:{valType:\"number\",min:0,max:1,editType:\"calc\"},pointpos:{valType:\"number\",min:-2,max:2,editType:\"calc\"},sdmultiple:{valType:\"number\",min:0,editType:\"calc\",dflt:1},sizemode:{valType:\"enumerated\",values:[\"quartiles\",\"sd\"],editType:\"calc\",dflt:\"quartiles\"},boxmean:{valType:\"enumerated\",values:[!0,\"sd\",!1],editType:\"calc\"},mean:{valType:\"data_array\",editType:\"calc\"},sd:{valType:\"data_array\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},quartilemethod:{valType:\"enumerated\",values:[\"linear\",\"exclusive\",\"inclusive\"],dflt:\"linear\",editType:\"calc\"},width:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},marker:{outliercolor:{valType:\"color\",dflt:\"rgba(0, 0, 0, 0)\",editType:\"style\"},symbol:l({},u.symbol,{arrayOk:!1,editType:\"plot\"}),opacity:l({},u.opacity,{arrayOk:!1,dflt:1,editType:\"style\"}),angle:l({},u.angle,{arrayOk:!1,editType:\"calc\"}),size:l({},u.size,{arrayOk:!1,editType:\"calc\"}),color:l({},u.color,{arrayOk:!1,editType:\"style\"}),line:{color:l({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:\"style\"}),width:l({},c.width,{arrayOk:!1,dflt:0,editType:\"style\"}),outliercolor:{valType:\"color\",editType:\"style\"},outlierwidth:{valType:\"number\",min:0,dflt:1,editType:\"style\"},editType:\"style\"},editType:\"plot\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:n.fillcolor,whiskerwidth:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"calc\"},showwhiskers:{valType:\"boolean\",editType:\"calc\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:\"style\"},unselected:{marker:n.unselected.marker,editType:\"style\"},text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),hovertemplate:s({}),hoveron:{valType:\"flaglist\",flags:[\"boxes\",\"points\"],dflt:\"boxes+points\",editType:\"style\"}}},48518:function(t,e,r){\"use strict\";var n=r(92770),i=r(89298),a=r(42973),o=r(71828),s=r(50606).BADNUM,l=o._;t.exports=function(t,e){var r,u,m,x,b,_,w,T=t._fullLayout,k=i.getFromId(t,e.xaxis||\"x\"),A=i.getFromId(t,e.yaxis||\"y\"),M=[],S=\"violin\"===e.type?\"_numViolins\":\"_numBoxes\";\"h\"===e.orientation?(m=k,x=\"x\",b=A,_=\"y\",w=!!e.yperiodalignment):(m=A,x=\"y\",b=k,_=\"x\",w=!!e.xperiodalignment);var E,L,C,P,O,I,D=function(t,e,r,i){var s,l=e+\"0\"in t;if(e in t||l&&\"d\"+e in t){var u=r.makeCalcdata(t,e);return[a(t,r,e,u).vals,u]}s=l?t[e+\"0\"]:\"name\"in t&&(\"category\"===r.type||n(t.name)&&-1!==[\"linear\",\"log\"].indexOf(r.type)||o.isDateTime(t.name)&&\"date\"===r.type)?t.name:i;for(var c=\"multicategory\"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+\"calendar\"]),f=t._length,h=new Array(f),p=0;p<f;p++)h[p]=c;return[h]}(e,_,b,T[S]),z=D[0],R=D[1],F=o.distinctVals(z,b),B=F.vals,N=F.minDiff/2,j=\"all\"===(e.boxpoints||e.points)?o.identity:function(t){return t.v<E.lf||t.v>E.uf};if(e._hasPreCompStats){var U=e[x],V=function(t){return m.d2c((e[t]||[])[r])},H=1/0,q=-1/0;for(r=0;r<e._length;r++){var G=z[r];if(n(G)){if((E={}).pos=E[_]=G,w&&R&&(E.orig_p=R[r]),E.q1=V(\"q1\"),E.med=V(\"median\"),E.q3=V(\"q3\"),L=[],U&&o.isArrayOrTypedArray(U[r]))for(u=0;u<U[r].length;u++)(I=m.d2c(U[r][u]))!==s&&(c(O={v:I,i:[r,u]},e,[r,u]),L.push(O));if(E.pts=L.sort(f),P=(C=E[x]=L.map(h)).length,E.med!==s&&E.q1!==s&&E.q3!==s&&E.med>=E.q1&&E.q3>=E.med){var Z=V(\"lowerfence\");E.lf=Z!==s&&Z<=E.q1?Z:p(E,C,P);var Y=V(\"upperfence\");E.uf=Y!==s&&Y>=E.q3?Y:d(E,C,P);var W=V(\"mean\");E.mean=W!==s?W:P?o.mean(C,P):(E.q1+E.q3)/2;var X=V(\"sd\");E.sd=W!==s&&X>=0?X:P?o.stdev(C,P,E.mean):E.q3-E.q1,E.lo=v(E),E.uo=g(E);var J=V(\"notchspan\");J=J!==s&&J>0?J:y(E,P),E.ln=E.med-J,E.un=E.med+J;var K=E.lf,$=E.uf;e.boxpoints&&C.length&&(K=Math.min(K,C[0]),$=Math.max($,C[P-1])),e.notched&&(K=Math.min(K,E.ln),$=Math.max($,E.un)),E.min=K,E.max=$}else{var Q;o.warn([\"Invalid input - make sure that q1 <= median <= q3\",\"q1 = \"+E.q1,\"median = \"+E.med,\"q3 = \"+E.q3].join(\"\\n\")),Q=E.med!==s?E.med:E.q1!==s?E.q3!==s?(E.q1+E.q3)/2:E.q1:E.q3!==s?E.q3:0,E.med=Q,E.q1=E.q3=Q,E.lf=E.uf=Q,E.mean=E.sd=Q,E.ln=E.un=Q,E.min=E.max=Q}H=Math.min(H,E.min),q=Math.max(q,E.max),E.pts2=L.filter(j),M.push(E)}}e._extremes[m._id]=i.findExtremes(m,[H,q],{padded:!0})}else{var tt=m.makeCalcdata(e,x),et=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i<r;i++)n[i]=t[i]-e;return n[r]=t[r-1]+e,n}(B,N),rt=B.length,nt=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(rt);for(r=0;r<e._length;r++)if(I=tt[r],n(I)){var it=o.findBin(z[r],et);it>=0&&it<rt&&(c(O={v:I,i:r},e,r),nt[it].push(O))}var at=1/0,ot=-1/0,st=e.quartilemethod,lt=\"exclusive\"===st,ut=\"inclusive\"===st;for(r=0;r<rt;r++)if(nt[r].length>0){var ct,ft;(E={}).pos=E[_]=B[r],L=E.pts=nt[r].sort(f),P=(C=E[x]=L.map(h)).length,E.min=C[0],E.max=C[P-1],E.mean=o.mean(C,P),E.sd=o.stdev(C,P,E.mean)*e.sdmultiple,E.med=o.interp(C,.5),P%2&&(lt||ut)?(lt?(ct=C.slice(0,P/2),ft=C.slice(P/2+1)):ut&&(ct=C.slice(0,P/2+1),ft=C.slice(P/2)),E.q1=o.interp(ct,.5),E.q3=o.interp(ft,.5)):(E.q1=o.interp(C,.25),E.q3=o.interp(C,.75)),E.lf=p(E,C,P),E.uf=d(E,C,P),E.lo=v(E),E.uo=g(E);var ht=y(E,P);E.ln=E.med-ht,E.un=E.med+ht,at=Math.min(at,E.ln),ot=Math.max(ot,E.un),E.pts2=L.filter(j),M.push(E)}e._extremes[m._id]=i.findExtremes(m,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],i={},a=0;a<n.length;a++)i[n[a].i]=a;o.tagSelected(n,e,i)}}(M,e),M.length>0?(M[0].t={num:T[S],dPos:N,posLetter:_,valLetter:x,labels:{med:l(t,\"median:\"),min:l(t,\"min:\"),q1:l(t,\"q1:\"),q3:l(t,\"q3:\"),max:l(t,\"max:\"),mean:\"sd\"===e.boxmean||\"sd\"===e.sizemode?l(t,\"mean ± σ:\").replace(\"σ\",1===e.sdmultiple?\"σ\":e.sdmultiple+\"σ\"):l(t,\"mean:\"),lf:l(t,\"lower fence:\"),uf:l(t,\"upper fence:\")}},T[S]++,M):[{t:{empty:!0}}]};var u={text:\"tx\",hovertext:\"htx\"};function c(t,e,r){for(var n in u)o.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?o.isArrayOrTypedArray(e[n][r[0]])&&(t[u[n]]=e[n][r[0]][r[1]]):t[u[n]]=e[n][r])}function f(t,e){return t.v-e.v}function h(t){return t.v}function p(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function d(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function v(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function y(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},37188:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828),a=r(99082).getAxisGroup,o=[\"v\",\"h\"];function s(t,e,r,o){var s,l,u,c=e.calcdata,f=e._fullLayout,h=o._id,p=h.charAt(0),d=[],v=0;for(s=0;s<r.length;s++)for(u=c[r[s]],l=0;l<u.length;l++)d.push(o.c2l(u[l].pos,!0)),v+=(u[l].pts2||[]).length;if(d.length){var g=i.distinctVals(d);\"category\"!==o.type&&\"multicategory\"!==o.type||(g.minDiff=1);var y=g.minDiff/2;n.minDtick(o,g.minDiff,g.vals[0],!0);var m=f[\"violin\"===t?\"_numViolins\":\"_numBoxes\"],x=\"group\"===f[t+\"mode\"]&&m>1,b=1-f[t+\"gap\"],_=1-f[t+\"groupgap\"];for(s=0;s<r.length;s++){var w,T,k,A,M,S,E=(u=c[r[s]])[0].trace,L=u[0].t,C=E.width,P=E.side;if(C)w=T=A=C/2,k=0;else if(w=y,x){var O=a(f,o._id)+E.orientation,I=(f._alignmentOpts[O]||{})[E.alignmentgroup]||{},D=Object.keys(I.offsetGroups||{}).length,z=D||m;T=w*b*_/z,k=2*w*(((D?E._offsetIndex:L.num)+.5)/z-.5)*b,A=w*b/z}else T=w*b*_,k=0,A=w;L.dPos=w,L.bPos=k,L.bdPos=T,L.wHover=A;var R,F,B,N,j,U,V=k+T,H=Boolean(C);if(\"positive\"===P?(M=w*(C?1:.5),R=V,S=R=k):\"negative\"===P?(M=R=k,S=w*(C?1:.5),F=V):(M=S=w,R=F=V),(E.boxpoints||E.points)&&v>0){var q=E.pointpos,G=E.jitter,Z=E.marker.size/2,Y=0;q+G>=0&&((Y=V*(q+G))>M?(H=!0,j=Z,B=Y):Y>R&&(j=Z,B=M)),Y<=M&&(B=M);var W=0;q-G<=0&&((W=-V*(q-G))>S?(H=!0,U=Z,N=W):W>F&&(U=Z,N=S)),W<=S&&(N=S)}else B=M,N=S;var X=new Array(u.length);for(l=0;l<u.length;l++)X[l]=u[l].pos;E._extremes[h]=n.findExtremes(o,X,{padded:H,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:U,y:j}[p],ppadplus:{x:j,y:U}[p]})}}}t.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,i=e.yaxis,a=0;a<o.length;a++){for(var l=o[a],u=\"h\"===l?i:n,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||\"box\"!==d.type&&\"candlestick\"!==d.type||p.empty||(d.orientation||\"v\")!==l||d.xaxis!==n._id||d.yaxis!==i._id||c.push(f)}s(\"box\",t,c,u)}},setPositionOffset:s}},36411:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(7901),o=r(73927),s=r(26125),l=r(4322),u=r(53522);function c(t,e,r,a){function o(t){var e=0;return t&&t.length&&(e+=1,n.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function s(e){return n.validate(t[e],u[e])}var c,f=r(\"y\"),h=r(\"x\");if(\"box\"===e.type){var p=r(\"q1\"),d=r(\"median\"),v=r(\"q3\");e._hasPreCompStats=p&&p.length&&d&&d.length&&v&&v.length,c=Math.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(v))}var g,y,m=o(f),x=o(h),b=m&&n.minRowLength(f),_=x&&n.minRowLength(h),w=a.calendar,T={autotypenumbers:a.autotypenumbers};if(e._hasPreCompStats)switch(String(x)+String(m)){case\"00\":var k=s(\"x0\")||s(\"dx\");g=!s(\"y0\")&&!s(\"dy\")||k?\"v\":\"h\",y=c;break;case\"10\":g=\"v\",y=Math.min(c,_);break;case\"20\":g=\"h\",y=Math.min(c,h.length);break;case\"01\":g=\"h\",y=Math.min(c,b);break;case\"02\":g=\"v\",y=Math.min(c,f.length);break;case\"12\":g=\"v\",y=Math.min(c,_,f.length);break;case\"21\":g=\"h\",y=Math.min(c,h.length,b);break;case\"11\":y=0;break;case\"22\":var A,M=!1;for(A=0;A<h.length;A++)if(\"category\"===l(h[A],w,T)){M=!0;break}if(M)g=\"v\",y=Math.min(c,_,f.length);else{for(A=0;A<f.length;A++)if(\"category\"===l(f[A],w,T)){M=!0;break}M?(g=\"h\",y=Math.min(c,h.length,b)):(g=\"v\",y=Math.min(c,_,f.length))}}else m>0?(g=\"v\",y=x>0?Math.min(_,b):Math.min(b)):x>0?(g=\"h\",y=Math.min(_)):y=0;if(y){e._length=y;var S=r(\"orientation\",g);e._hasPreCompStats?\"v\"===S&&0===x?(r(\"x0\",0),r(\"dx\",1)):\"h\"===S&&0===m&&(r(\"y0\",0),r(\"dy\",1)):\"v\"===S&&0===x?r(\"x0\"):\"h\"===S&&0===m&&r(\"y0\"),i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a)}else e.visible=!1}function f(t,e,r,i){var a=i.prefix,o=n.coerce2(t,e,u,\"marker.outliercolor\"),s=r(\"marker.line.outliercolor\"),l=\"outliers\";e._hasPreCompStats?l=\"all\":(o||s)&&(l=\"suspectedoutliers\");var c=r(a+\"points\",l);c?(r(\"jitter\",\"all\"===c?.3:0),r(\"pointpos\",\"all\"===c?-1.5:0),r(\"marker.symbol\"),r(\"marker.opacity\"),r(\"marker.size\"),r(\"marker.angle\"),r(\"marker.color\",e.line.color),r(\"marker.line.color\"),r(\"marker.line.width\"),\"suspectedoutliers\"===c&&(r(\"marker.line.outliercolor\",e.marker.color),r(\"marker.line.outlierwidth\")),r(\"selected.marker.color\"),r(\"unselected.marker.color\"),r(\"selected.marker.size\"),r(\"unselected.marker.size\"),r(\"text\"),r(\"hovertext\")):delete e.marker;var f=r(\"hoveron\");\"all\"!==f&&-1===f.indexOf(\"points\")||r(\"hovertemplate\"),n.coerceSelectionMarkerOpacity(e,r)}t.exports={supplyDefaults:function(t,e,r,i){function s(r,i){return n.coerce(t,e,u,r,i)}if(c(t,e,s,i),!1!==e.visible){o(t,e,i,s),s(\"xhoverformat\"),s(\"yhoverformat\");var l=e._hasPreCompStats;l&&(s(\"lowerfence\"),s(\"upperfence\")),s(\"line.color\",(t.marker||{}).color||r),s(\"line.width\"),s(\"fillcolor\",a.addOpacity(e.line.color,.5));var h=!1;if(l){var p=s(\"mean\"),d=s(\"sd\");p&&p.length&&(h=!0,d&&d.length&&(h=\"sd\"))}s(\"whiskerwidth\");var v,g=s(\"sizemode\");\"quartiles\"===g&&(v=s(\"boxmean\",h)),s(\"showwhiskers\",\"quartiles\"===g),\"sd\"!==g&&\"sd\"!==v||s(\"sdmultiple\"),s(\"width\"),s(\"quartilemethod\");var y=!1;if(l){var m=s(\"notchspan\");m&&m.length&&(y=!0)}else n.validate(t.notchwidth,u.notchwidth)&&(y=!0);s(\"notched\",y)&&s(\"notchwidth\"),f(t,e,s,{prefix:\"box\"})}},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,u,t)}for(var o=0;o<t.length;o++){var l=(i=t[o]).type;\"box\"!==l&&\"violin\"!==l||(r=i._input,\"group\"===e[l+\"mode\"]&&s(r,i,e,a))}},handleSampleDefaults:c,handlePointsDefaults:f}},74907:function(t){\"use strict\";t.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),\"xVal\"in e&&(t.x=e.xVal),\"yVal\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},41868:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=i.fillText;function l(t,e,r,s){var l,u,c,f,h,p,d,v,g,y,m,x,b,_,w=t.cd,T=t.xa,k=t.ya,A=w[0].trace,M=w[0].t,S=\"violin\"===A.type,E=M.bdPos,L=M.wHover,C=function(t){return c.c2l(t.pos)+M.bPos-c.c2l(p)};S&&\"both\"!==A.side?(\"positive\"===A.side&&(g=function(t){var e=C(t);return a.inbox(e,e+L,y)},x=E,b=0),\"negative\"===A.side&&(g=function(t){var e=C(t);return a.inbox(e-L,e,y)},x=0,b=E)):(g=function(t){var e=C(t);return a.inbox(e-L,e+L,y)},x=b=E),_=S?function(t){return a.inbox(t.span[0]-h,t.span[1]-h,y)}:function(t){return a.inbox(t.min-h,t.max-h,y)},\"h\"===A.orientation?(h=e,p=r,d=_,v=g,l=\"y\",c=k,u=\"x\",f=T):(h=r,p=e,d=g,v=_,l=\"x\",c=T,u=\"y\",f=k);var P=Math.min(1,E/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function O(t){return(d(t)+v(t))/2}y=t.maxHoverDistance-P,m=t.maxSpikeDistance-P;var I=a.getDistanceFunction(s,d,v,O);if(a.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],z=A.line.color,R=(A.marker||{}).color;o.opacity(z)&&A.line.width?t.color=z:o.opacity(R)&&A.boxpoints?t.color=R:t.color=A.fillcolor,t[l+\"0\"]=c.c2p(D.pos+M.bPos-b,!0),t[l+\"1\"]=c.c2p(D.pos+M.bPos+x,!0),t[l+\"LabelVal\"]=void 0!==D.orig_p?D.orig_p:D.pos;var F=l+\"Spike\";t.spikeDistance=O(D)*m/y,t[F]=c.c2p(D.pos,!0);var B=A.boxmean||\"sd\"===A.sizemode||(A.meanline||{}).visible,N=A.boxpoints||A.points,j=N&&B?[\"max\",\"uf\",\"q3\",\"med\",\"mean\",\"q1\",\"lf\",\"min\"]:N&&!B?[\"max\",\"uf\",\"q3\",\"med\",\"q1\",\"lf\",\"min\"]:!N&&B?[\"max\",\"q3\",\"med\",\"mean\",\"q1\",\"min\"]:[\"max\",\"q3\",\"med\",\"q1\",\"min\"],U=f.range[1]<f.range[0];A.orientation===(U?\"v\":\"h\")&&j.reverse();for(var V=t.spikeDistance,H=t[F],q=[],G=0;G<j.length;G++){var Z=j[G];if(Z in D){var Y=D[Z],W=f.c2p(Y,!0),X=i.extendFlat({},t);X.attr=Z,X[u+\"0\"]=X[u+\"1\"]=W,X[u+\"LabelVal\"]=Y,X[u+\"Label\"]=(M.labels?M.labels[Z]+\" \":\"\")+n.hoverLabelText(f,Y,A[u+\"hoverformat\"]),X.hoverOnBox=!0,\"mean\"!==Z||!(\"sd\"in D)||\"sd\"!==A.boxmean&&\"sd\"!==A.sizemode||(X[u+\"err\"]=D.sd),X.hovertemplate=!1,q.push(X)}}t.name=\"\",t.spikeDistance=void 0,t[F]=void 0;for(var J=0;J<q.length;J++)\"med\"!==q[J].attr?(q[J].name=\"\",q[J].spikeDistance=void 0,q[J][F]=void 0):(q[J].spikeDistance=V,q[J][F]=H);return q}function u(t,e,r){for(var n,o,l,u=t.cd,c=t.xa,f=t.ya,h=u[0].trace,p=c.c2p(e),d=f.c2p(r),v=a.quadrature((function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(c.c2p(t.x)-p)-e,1-3/e)}),(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(f.c2p(t.y)-d)-e,1-3/e)})),g=!1,y=0;y<u.length;y++){o=u[y];for(var m=0;m<(o.pts||[]).length;m++){var x=v(l=o.pts[m]);x<=t.distance&&(t.distance=x,g=[y,m])}}if(!g)return!1;l=(o=u[g[0]]).pts[g[1]];var b=c.c2p(l.x,!0),_=f.c2p(l.y,!0),w=l.mrc||1;n=i.extendFlat({},t,{index:l.i,color:(h.marker||{}).color,name:h.name,x0:b-w,x1:b+w,y0:_-w,y1:_+w,spikeDistance:t.distance,hovertemplate:h.hovertemplate});var T,k=o.orig_p,A=void 0!==k?k:o.pos;return\"h\"===h.orientation?(T=f,n.xLabelVal=l.x,n.yLabelVal=A):(T=c,n.xLabelVal=A,n.yLabelVal=l.y),n[T._id.charAt(0)+\"Spike\"]=T.c2p(o.pos,!0),s(l,h,n),n}t.exports={hoverPoints:function(t,e,r,n){var i,a=t.cd[0].trace.hoveron,o=[];return-1!==a.indexOf(\"boxes\")&&(o=o.concat(l(t,e,r,n))),-1!==a.indexOf(\"points\")&&(i=u(t,e,r)),\"closest\"===n?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:u}},83832:function(t,e,r){\"use strict\";t.exports={attributes:r(53522),layoutAttributes:r(40094),supplyDefaults:r(36411).supplyDefaults,crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(4199).supplyLayoutDefaults,calc:r(48518),crossTraceCalc:r(37188).crossTraceCalc,plot:r(86047).plot,style:r(58063).style,styleOnSelect:r(58063).styleOnSelect,hoverPoints:r(41868).hoverPoints,eventData:r(74907),selectPoints:r(24626),moduleType:\"trace\",name:\"box\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"boxLayout\",\"zoomScale\"],meta:{}}},40094:function(t){\"use strict\";t.exports={boxmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},boxgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"},boxgroupgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"}}},4199:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(40094);function o(t,e,r,i,a){for(var o=a+\"Layout\",s=!1,l=0;l<r.length;l++){var u=r[l];if(n.traceIs(u,o)){s=!0;break}}s&&(i(a+\"mode\"),i(a+\"gap\"),i(a+\"groupgap\"))}t.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,(function(r,n){return i.coerce(t,e,a,r,n)}),\"box\")},_supply:o}},86047:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424);function o(t,e,r,a,o){var s,l,u=\"h\"===r.orientation,c=e.val,f=e.pos,h=!!f.rangebreaks,p=a.bPos,d=a.wdPos||0,v=a.bPosPxOffset||0,g=r.whiskerwidth||0,y=!1!==r.showwhiskers,m=r.notched||!1,x=m?1-2*r.notchwidth:1;Array.isArray(a.bdPos)?(s=a.bdPos[0],l=a.bdPos[1]):(s=a.bdPos,l=a.bdPos);var b=t.selectAll(\"path.box\").data(\"violin\"!==r.type||r.box.visible?i.identity:[]);b.enter().append(\"path\").style(\"vector-effect\",o?\"none\":\"non-scaling-stroke\").attr(\"class\",\"box\"),b.exit().remove(),b.each((function(t){if(t.empty)return n.select(this).attr(\"d\",\"M0,0Z\");var e=f.c2l(t.pos+p,!0),a=f.l2p(e-s)+v,o=f.l2p(e+l)+v,b=h?(a+o)/2:f.l2p(e)+v,_=r.whiskerwidth,w=h?a*_+(1-_)*b:f.l2p(e-d)+v,T=h?o*_+(1-_)*b:f.l2p(e+d)+v,k=f.l2p(e-s*x)+v,A=f.l2p(e+l*x)+v,M=\"sd\"===r.sizemode,S=c.c2p(M?t.mean-t.sd:t.q1,!0),E=M?c.c2p(t.mean+t.sd,!0):c.c2p(t.q3,!0),L=i.constrain(M?c.c2p(t.mean,!0):c.c2p(t.med,!0),Math.min(S,E)+1,Math.max(S,E)-1),C=void 0===t.lf||!1===r.boxpoints||M,P=c.c2p(C?t.min:t.lf,!0),O=c.c2p(C?t.max:t.uf,!0),I=c.c2p(t.ln,!0),D=c.c2p(t.un,!0);u?n.select(this).attr(\"d\",\"M\"+L+\",\"+k+\"V\"+A+\"M\"+S+\",\"+a+\"V\"+o+(m?\"H\"+I+\"L\"+L+\",\"+A+\"L\"+D+\",\"+o:\"\")+\"H\"+E+\"V\"+a+(m?\"H\"+D+\"L\"+L+\",\"+k+\"L\"+I+\",\"+a:\"\")+\"Z\"+(y?\"M\"+S+\",\"+b+\"H\"+P+\"M\"+E+\",\"+b+\"H\"+O+(0===g?\"\":\"M\"+P+\",\"+w+\"V\"+T+\"M\"+O+\",\"+w+\"V\"+T):\"\")):n.select(this).attr(\"d\",\"M\"+k+\",\"+L+\"H\"+A+\"M\"+a+\",\"+S+\"H\"+o+(m?\"V\"+I+\"L\"+A+\",\"+L+\"L\"+o+\",\"+D:\"\")+\"V\"+E+\"H\"+a+(m?\"V\"+D+\"L\"+k+\",\"+L+\"L\"+a+\",\"+I:\"\")+\"Z\"+(y?\"M\"+b+\",\"+S+\"V\"+P+\"M\"+b+\",\"+E+\"V\"+O+(0===g?\"\":\"M\"+w+\",\"+P+\"H\"+T+\"M\"+w+\",\"+O+\"H\"+T):\"\"))}))}function s(t,e,r,n){var o=e.x,s=e.y,l=n.bdPos,u=n.bPos,c=r.boxpoints||r.points;i.seedPseudoRandom();var f=t.selectAll(\"g.points\").data(c?function(t){return t.forEach((function(t){t.t=n,t.trace=r})),t}:[]);f.enter().append(\"g\").attr(\"class\",\"points\"),f.exit().remove();var h=f.selectAll(\"path\").data((function(t){var e,n,a=t.pts2,o=Math.max((t.max-t.min)/10,t.q3-t.q1),s=1e-9*o,f=.01*o,h=[],p=0;if(r.jitter){if(0===o)for(p=1,h=new Array(a.length),e=0;e<a.length;e++)h[e]=1;else for(e=0;e<a.length;e++){var d=Math.max(0,e-5),v=a[d].v,g=Math.min(a.length-1,e+5),y=a[g].v;\"all\"!==c&&(a[e].v<t.lf?y=Math.min(y,t.lf):v=Math.max(v,t.uf));var m=Math.sqrt(f*(g-d)/(y-v+s))||0;m=i.constrain(Math.abs(m),0,1),h.push(m),p=Math.max(m,p)}n=2*r.jitter/(p||1)}for(e=0;e<a.length;e++){var x=a[e],b=x.v,_=r.jitter?n*h[e]*(i.pseudoRandom()-.5):0,w=t.pos+u+l*(r.pointpos+_);\"h\"===r.orientation?(x.y=w,x.x=b):(x.x=w,x.y=b),\"suspectedoutliers\"===c&&b<t.uo&&b>t.lo&&(x.so=!0)}return a}));h.enter().append(\"path\").classed(\"point\",!0),h.exit().remove(),h.call(a.translatePoints,o,s)}function l(t,e,r,a){var o,s,l=e.val,u=e.pos,c=!!u.rangebreaks,f=a.bPos,h=a.bPosPxOffset||0,p=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var d=t.selectAll(\"path.mean\").data(\"box\"===r.type&&r.boxmean||\"violin\"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);d.enter().append(\"path\").attr(\"class\",\"mean\").style({fill:\"none\",\"vector-effect\":\"non-scaling-stroke\"}),d.exit().remove(),d.each((function(t){var e=u.c2l(t.pos+f,!0),i=u.l2p(e-o)+h,a=u.l2p(e+s)+h,d=c?(i+a)/2:u.l2p(e)+h,v=l.c2p(t.mean,!0),g=l.c2p(t.mean-t.sd,!0),y=l.c2p(t.mean+t.sd,!0);\"h\"===r.orientation?n.select(this).attr(\"d\",\"M\"+v+\",\"+i+\"V\"+a+(\"sd\"===p?\"m0,0L\"+g+\",\"+d+\"L\"+v+\",\"+i+\"L\"+y+\",\"+d+\"Z\":\"\")):n.select(this).attr(\"d\",\"M\"+i+\",\"+v+\"H\"+a+(\"sd\"===p?\"m0,0L\"+d+\",\"+g+\"L\"+i+\",\"+v+\"L\"+d+\",\"+y+\"Z\":\"\"))}))}t.exports={plot:function(t,e,r,a){var u=t._context.staticPlot,c=e.xaxis,f=e.yaxis;i.makeTraceGroups(a,r,\"trace boxes\").each((function(t){var e,r,i=n.select(this),a=t[0],h=a.t,p=a.trace;h.wdPos=h.bdPos*p.whiskerwidth,!0!==p.visible||h.empty?i.remove():(\"h\"===p.orientation?(e=f,r=c):(e=c,r=f),o(i,{pos:e,val:r},p,h,u),s(i,{x:c,y:f},p,h),l(i,{pos:e,val:r},p,h))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},24626:function(t){\"use strict\";t.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++)i[r].pts[n].selected=0;else for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++){var l=i[r].pts[n],u=a.c2p(l.x),c=o.c2p(l.y);e.contains([u,c],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},58063:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(91424);t.exports={style:function(t,e,r){var o=r||n.select(t).selectAll(\"g.trace.boxes\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style(\"stroke-width\",e+\"px\").call(i.stroke,r).call(i.fill,n)}var u=r.selectAll(\"path.box\");if(\"candlestick\"===o.type)u.each((function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style(\"opacity\",o.selectedpoints&&!t.selected?.3:1)}}));else{l(u,s,o.line.color,o.fillcolor),r.selectAll(\"path.mean\").style({\"stroke-width\":s,\"stroke-dasharray\":2*s+\"px,\"+s+\"px\"}).call(i.stroke,o.line.color);var c=r.selectAll(\"path.point\");a.pointStyle(c,o,t)}}))},styleOnSelect:function(t,e,r){var n=e[0].trace,i=r.selectAll(\"path.point\");n.selectedpoints?a.selectedPointStyle(i,n):a.pointStyle(i,n,t)}}},75343:function(t,e,r){\"use strict\";var n=r(71828).extendFlat,i=r(12663).axisHoverFormat,a=r(2522),o=r(53522);function s(t){return{line:{color:n({},o.line.color,{dflt:t}),width:o.line.width,editType:\"style\"},fillcolor:o.fillcolor,editType:\"style\"}}t.exports={xperiod:a.xperiod,xperiod0:a.xperiod0,xperiodalignment:a.xperiodalignment,xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},o.line.width,{}),editType:\"style\"},increasing:s(a.increasing.line.color.dflt),decreasing:s(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},o.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},41197:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(42973),o=r(3485).calcCommon;function s(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}t.exports=function(t,e){var r=t._fullLayout,l=i.getFromId(t,e.xaxis),u=i.getFromId(t,e.yaxis),c=l.makeCalcdata(e,\"x\"),f=a(e,l,\"x\",c).vals,h=o(t,e,c,f,u,s);return h.length?(n.extendFlat(h[0].t,{num:r._numBoxes,dPos:n.distinctVals(f).minDiff/2,posLetter:\"x\",valLetter:\"y\"}),r._numBoxes++,h):[{t:{empty:!0}}]}},1026:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(14555),o=r(73927),s=r(75343);function l(t,e,r,n){var a=r(n+\".line.color\");r(n+\".line.width\",e.line.width),r(n+\".fillcolor\",i.addOpacity(a,.5))}t.exports=function(t,e,r,i){function u(r,i){return n.coerce(t,e,s,r,i)}a(t,e,u,i)?(o(t,e,i,u,{x:!0}),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"line.width\"),l(0,e,u,\"increasing\"),l(0,e,u,\"decreasing\"),u(\"text\"),u(\"hovertext\"),u(\"whiskerwidth\"),i._requestRangeslider[e.xaxis]=!0):e.visible=!1}},91815:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"candlestick\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"showLegend\",\"candlestick\",\"boxLayout\"],meta:{},attributes:r(75343),layoutAttributes:r(40094),supplyLayoutDefaults:r(4199).supplyLayoutDefaults,crossTraceCalc:r(37188).crossTraceCalc,supplyDefaults:r(1026),calc:r(41197),plot:r(86047).plot,layerName:\"boxlayer\",style:r(58063).style,hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},13145:function(t,e,r){\"use strict\";var n=r(11500),i=r(44467);t.exports=function(t,e,r,a,o){a(\"a\")||(a(\"da\"),a(\"a0\")),a(\"b\")||(a(\"db\"),a(\"b0\")),function(t,e,r,a){[\"aaxis\",\"baxis\"].forEach((function(o){var s=o.charAt(0),l=t[o]||{},u=i.newContainer(e,o),c={noTicklabelstep:!0,tickfont:\"x\",id:s+\"axis\",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:r.paper_bgcolor,autotypenumbersDflt:r.autotypenumbers,fullLayout:r};n(l,u,c),u._categories=u._categories||[],t[o]||\"-\"===l.type||(t[o]={type:l.type})}))}(t,e,r,o)}},402:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray;function i(t,e){if(!n(t)||e>=10)return null;for(var r=1/0,a=-1/0,o=t.length,s=0;s<o;s++){var l=t[s];if(n(l)){var u=i(l,e+1);u&&(r=Math.min(u[0],r),a=Math.max(u[1],a))}else r=Math.min(l,r),a=Math.max(l,a)}return[r,a]}t.exports=function(t){return i(t,0)}},99798:function(t,e,r){\"use strict\";var n=r(41940),i=r(1928),a=r(22399),o=n({editType:\"calc\"});o.family.dflt='\"Open Sans\", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,t.exports={carpet:{valType:\"string\",editType:\"calc\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},a:{valType:\"data_array\",editType:\"calc\"},a0:{valType:\"number\",dflt:0,editType:\"calc\"},da:{valType:\"number\",dflt:1,editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},b0:{valType:\"number\",dflt:0,editType:\"calc\"},db:{valType:\"number\",dflt:1,editType:\"calc\"},cheaterslope:{valType:\"number\",dflt:1,editType:\"calc\"},aaxis:i,baxis:i,font:o,color:{valType:\"color\",dflt:a.defaultLine,editType:\"plot\"},transforms:void 0}},4536:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v,g,y,m=n(r)?\"a\":\"b\",x=(\"a\"===m?t.aaxis:t.baxis).smoothing,b=\"a\"===m?t.a2i:t.b2j,_=\"a\"===m?r:i,w=\"a\"===m?i:r,T=\"a\"===m?e.a.length:e.b.length,k=\"a\"===m?e.b.length:e.a.length,A=Math.floor(\"a\"===m?t.b2j(w):t.a2i(w)),M=\"a\"===m?function(e){return t.evalxy([],e,A)}:function(e){return t.evalxy([],A,e)};x&&(s=Math.max(0,Math.min(k-2,A)),l=A-s,o=\"a\"===m?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),L=S<E?1:-1,C=1e-8*(E-S),P=L>0?Math.floor:Math.ceil,O=L>0?Math.ceil:Math.floor,I=L>0?Math.min:Math.max,D=L>0?Math.max:Math.min,z=P(S+C),R=O(E-C),F=[[f=M(S)]];for(a=z;a*L<R*L;a+=L)u=[],v=D(S,a),y=(g=I(E,a+L))-v,c=Math.max(0,Math.min(T-2,Math.floor(.5*(v+g)))),h=M(g),x&&(p=o(c,v-c),d=o(c,g-c),u.push([f[0]+p[0]/3*y,f[1]+p[1]/3*y]),u.push([h[0]-d[0]/3*y,h[1]-d[1]/3*y])),u.push(h),F.push(u),f=h;return F}},1928:function(t,e,r){\"use strict\";var n=r(41940),i=r(22399),a=r(13838),o=r(12663).descriptionWithDates,s=r(30962).overrideAll,l=r(79952).P,u=r(1426).extendFlat;t.exports={color:{valType:\"color\",editType:\"calc\"},smoothing:{valType:\"number\",dflt:1,min:0,max:1.3,editType:\"calc\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"calc\"},font:n({editType:\"calc\"}),offset:{valType:\"number\",dflt:10,editType:\"calc\"},editType:\"calc\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"date\",\"category\"],dflt:\"-\",editType:\"calc\"},autotypenumbers:a.autotypenumbers,autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],dflt:!0,editType:\"calc\"},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"calc\"},range:{valType:\"info_array\",editType:\"calc\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}]},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cheatertype:{valType:\"enumerated\",values:[\"index\",\"value\"],dflt:\"value\",editType:\"calc\"},tickmode:{valType:\"enumerated\",values:[\"linear\",\"array\"],dflt:\"array\",editType:\"calc\"},nticks:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},tickvals:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},showticklabels:{valType:\"enumerated\",values:[\"start\",\"end\",\"both\",\"none\"],dflt:\"start\",editType:\"calc\"},labelalias:u({},a.labelalias,{editType:\"calc\"}),tickfont:n({editType:\"calc\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"calc\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"calc\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"calc\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"calc\",description:o(\"tick label\")},tickformatstops:s(a.tickformatstops,\"calc\",\"from-root\"),categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},labelpadding:{valType:\"integer\",dflt:10,editType:\"calc\"},labelprefix:{valType:\"string\",editType:\"calc\"},labelsuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showline:{valType:\"boolean\",dflt:!1,editType:\"calc\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"calc\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},gridcolor:{valType:\"color\",editType:\"calc\"},gridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},griddash:u({},l,{editType:\"calc\"}),showgrid:{valType:\"boolean\",dflt:!0,editType:\"calc\"},minorgridcount:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},minorgridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},minorgriddash:u({},l,{editType:\"calc\"}),minorgridcolor:{valType:\"color\",dflt:i.lightLine,editType:\"calc\"},startline:{valType:\"boolean\",editType:\"calc\"},startlinecolor:{valType:\"color\",editType:\"calc\"},startlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endline:{valType:\"boolean\",editType:\"calc\"},endlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endlinecolor:{valType:\"color\",editType:\"calc\"},tick0:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},dtick:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},arraytick0:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},arraydtick:{valType:\"integer\",min:1,dflt:1,editType:\"calc\"},_deprecated:{title:{valType:\"string\",editType:\"calc\"},titlefont:n({editType:\"calc\"}),titleoffset:{valType:\"number\",dflt:10,editType:\"calc\"}},editType:\"calc\"}},11500:function(t,e,r){\"use strict\";var n=r(99798),i=r(7901).addOpacity,a=r(73972),o=r(71828),s=r(26218),l=r(96115),u=r(89426),c=r(15258),f=r(21994),h=r(4322);t.exports=function(t,e,r){var p=r.letter,d=r.font||{},v=n[p+\"axis\"];function g(r,n){return o.coerce(t,e,v,r,n)}function y(r,n){return o.coerce2(t,e,v,r,n)}r.name&&(e._name=r.name,e._id=r.name),g(\"autotypenumbers\",r.autotypenumbersDflt);var m=g(\"type\");\"-\"===m&&(r.data&&function(t,e){if(\"-\"===t.type){var r=t._id.charAt(0),n=t[r+\"calendar\"];t.type=h(e,n,{autotypenumbers:t.autotypenumbers})}}(e,r.data),\"-\"===e.type?e.type=\"linear\":m=t.type=e.type),g(\"smoothing\"),g(\"cheatertype\"),g(\"showticklabels\"),g(\"labelprefix\",p+\" = \"),g(\"labelsuffix\"),g(\"showtickprefix\"),g(\"showticksuffix\"),g(\"separatethousands\"),g(\"tickformat\"),g(\"exponentformat\"),g(\"minexponent\"),g(\"showexponent\"),g(\"categoryorder\"),g(\"tickmode\"),g(\"tickvals\"),g(\"ticktext\"),g(\"tick0\"),g(\"dtick\"),\"array\"===e.tickmode&&(g(\"arraytick0\"),g(\"arraydtick\")),g(\"labelpadding\"),e._hovertitle=p,\"date\"===m&&a.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",r.calendar),f(e,r.fullLayout),e.c2p=o.identity;var x=g(\"color\",r.dfltColor),b=x===t.color?x:d.color;g(\"title.text\")&&(o.coerceFont(g,\"title.font\",{family:d.family,size:o.bigFont(d.size),color:b}),g(\"title.offset\")),g(\"tickangle\"),g(\"autorange\",!e.isValidRange(t.range))&&g(\"rangemode\"),g(\"range\"),e.cleanRange(),g(\"fixedrange\"),s(t,e,g,m),u(t,e,g,m,r),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:p});var _=y(\"gridcolor\",i(x,.3)),w=y(\"gridwidth\"),T=y(\"griddash\"),k=g(\"showgrid\");k||(delete e.gridcolor,delete e.gridwidth,delete e.griddash);var A=y(\"startlinecolor\",x),M=y(\"startlinewidth\",w);g(\"startline\",e.showgrid||!!A||!!M)||(delete e.startlinecolor,delete e.startlinewidth);var S=y(\"endlinecolor\",x),E=y(\"endlinewidth\",w);return g(\"endline\",e.showgrid||!!S||!!E)||(delete e.endlinecolor,delete e.endlinewidth),k?(g(\"minorgridcount\"),g(\"minorgridwidth\",w),g(\"minorgriddash\",T),g(\"minorgridcolor\",i(_,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgriddash,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridwidth,delete e.griddash),\"none\"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.minexponent,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g(\"tickmode\"),e}},25281:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828).isArray1D,a=r(53824),o=r(402),s=r(20347),l=r(83311),u=r(44807),c=r(4742),f=r(72505),h=r(68296),p=r(11435);t.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),v=e.aaxis,g=e.baxis,y=e.x,m=e.y,x=[];y&&i(y)&&x.push(\"x\"),m&&i(m)&&x.push(\"y\"),x.length&&h(e,v,g,\"a\",\"b\",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;y=e._x||e.x,m=e._y||e.y;var w={};if(e._cheater){var T=\"index\"===v.cheatertype?b.length:b,k=\"index\"===g.cheatertype?_.length:_;y=a(T,k,e.cheaterslope)}e._x=y=c(y),e._y=m=c(m),f(y,b,_),f(m,b,_),p(e),e.setScale();var A=o(y),M=o(m),S=.5*(A[1]-A[0]),E=.5*(A[1]+A[0]),L=.5*(M[1]-M[0]),C=.5*(M[1]+M[0]),P=1.3;return A=[E-S*P,E+S*P],M=[C-L*P,C+L*P],e._extremes[r._id]=n.findExtremes(r,A,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,M,{padded:!0}),s(e,\"a\",\"b\"),s(e,\"b\",\"a\"),l(e,v),l(e,g),w.clipsegments=u(e._xctrl,e._yctrl,v,g),w.x=y,w.y=m,w.a=b,w.b=_,[w]}},44807:function(t){\"use strict\";t.exports=function(t,e,r,n){var i,a,o,s=[],l=!!r.smoothing,u=!!n.smoothing,c=t[0].length-1,f=t.length-1;for(i=0,a=[],o=[];i<=c;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=f;i++)a[i]=t[i][c],o[i]=e[i][c];for(s.push({x:a,y:o,bicubic:u}),i=c,a=[],o=[];i>=0;i--)a[c-i]=t[f][i],o[c-i]=e[f][i];for(s.push({x:a,y:o,bicubic:l}),i=f,a=[],o=[];i>=0;i--)a[f-i]=t[i][0],o[f-i]=e[i][0];return s.push({x:a,y:o,bicubic:u}),s}},20347:function(t,e,r){\"use strict\";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e,r){var a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=t[\"_\"+e],b=t[e+\"axis\"],_=b._gridlines=[],w=b._minorgridlines=[],T=b._boundarylines=[],k=t[\"_\"+r],A=t[r+\"axis\"];\"array\"===b.tickmode&&(b.tickvals=x.slice());var M=t._xctrl,S=t._yctrl,E=M[0].length,L=M.length,C=t._a.length,P=t._b.length;n.prepTicks(b),\"array\"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function I(n){var i,a,o,s,l,u,c,f,p,d,v,g,y=[],m=[],x={};if(\"b\"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,a))),s=a-o,x.length=P,x.crossLength=C,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i<C;i++)u=Math.min(C-2,i),c=i-u,f=t.evalxy([],i,a),A.smoothing&&i>0&&(p=t.dxydi([],i-1,o,0,s),y.push(l[0]+p[0]/3),m.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),y.push(f[0]-d[0]/3),m.push(f[1]-d[1]/3)),y.push(f[0]),m.push(f[1]),l=f;else for(i=t.a2i(n),u=Math.floor(Math.max(0,Math.min(C-2,i))),c=i-u,x.length=C,x.crossLength=P,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],u,e,c,r)},a=0;a<P;a++)o=Math.min(P-2,a),s=a-o,f=t.evalxy([],i,a),A.smoothing&&a>0&&(v=t.dxydj([],u,a-1,c,0),y.push(l[0]+v[0]/3),m.push(l[1]+v[1]/3),g=t.dxydj([],u,a-1,c,1),y.push(f[0]-g[0]/3),m.push(f[1]-g[1]/3)),y.push(f[0]),m.push(f[1]),l=f;return x.axisLetter=e,x.axis=b,x.crossAxis=A,x.value=n,x.constvar=r,x.index=h,x.x=y,x.y=m,x.smoothing=A.smoothing,x}function D(n){var i,a,o,s,l,u=[],c=[],f={};if(f.length=x.length,f.crossLength=k.length,\"b\"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),f.xy=function(e){return t.evalxy([],e,n)},f.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;i<E;i++)u[i]=M[n*O][i],c[i]=S[n*O][i];else for(a=Math.max(0,Math.min(C-2,n)),s=Math.min(1,Math.max(0,n-a)),f.xy=function(e){return t.evalxy([],n,e)},f.dxy=function(e,r){return t.dxydj([],a,e,s,r)},i=0;i<L;i++)u[i]=M[i][n*O],c[i]=S[i][n*O];return f.axisLetter=e,f.axis=b,f.crossAxis=A,f.value=x[n],f.constvar=r,f.index=n,f.x=u,f.y=c,f.smoothing=A.smoothing,f}if(\"array\"===b.tickmode){for(l=5e-15,c=(u=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort((function(t,e){return t-e})))[0]-1,f=u[1]+1,h=c;h<f;h++)(o=b.arraytick0+b.arraydtick*h)<0||o>x.length-1||_.push(i(D(o),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c;h<f;h++)if(s=b.arraytick0+b.arraydtick*h,v=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||v<0||v>x.length-1))for(g=x[s],y=x[v],a=0;a<b.minorgridcount;a++)(m=v-s)<=0||(d=g+(y-g)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/m))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(D(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(D(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,c=(u=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort((function(t,e){return t-e})))[0],f=u[1],h=c;h<=f;h++)p=b.tick0+b.dtick*h,_.push(i(I(p),{color:b.gridcolor,width:b.gridwidth,dash:b.griddash}));for(h=c-1;h<f+1;h++)for(p=b.tick0+b.dtick*h,a=0;a<b.minorgridcount;a++)(d=p+b.dtick*(a+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(i(I(d),{color:b.minorgridcolor,width:b.minorgridwidth,dash:b.minorgriddash}));b.startline&&T.push(i(I(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&T.push(i(I(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},83311:function(t,e,r){\"use strict\";var n=r(89298),i=r(1426).extendFlat;t.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==[\"start\",\"both\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a)),-1!==[\"end\",\"both\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a))}},42048:function(t){\"use strict\";t.exports=function(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,f=(u*u*a-l*l*s)*n,h=u*(l+u)*3,p=l*(l+u)*3;return[[e[0]+(h&&c/h),e[1]+(h&&f/h)],[e[0]-(p&&c/p),e[1]-(p&&f/p)]]}},53824:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i,a,o,s,l,u,c=[],f=n(t)?t.length:t,h=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(f-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(h-1));var v=1/0,g=-1/0;for(a=0;a<h;a++)for(c[a]=[],l=d?(d[a]-d[0])*s:a/(h-1),i=0;i<f;i++)u=(p?(p[i]-p[0])*o:i/(f-1))-l*r,v=Math.min(u,v),g=Math.max(u,g),c[a][i]=u;var y=1/(g-v),m=-v*y;for(a=0;a<h;a++)for(i=0;i<f;i++)c[a][i]=y*c[a][i]+m;return c}},45664:function(t,e,r){\"use strict\";var n=r(42048),i=r(71828).ensureArray;function a(t,e,r){var n=-.5*r[0]+1.5*e[0],i=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}t.exports=function(t,e,r,o,s,l){var u,c,f,h,p,d,v,g,y,m,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=i(t,w),e=i(e,w),f=0;f<w;f++)t[f]=i(t[f],_),e[f]=i(e[f],_);for(c=0,h=0;c<b;c++,h+=l?3:1)for(p=t[h],d=e[h],v=r[c],g=o[c],u=0,f=0;u<x;u++,f+=s?3:1)p[f]=v[u],d[f]=g[u];if(s)for(c=0,h=0;c<b;c++,h+=l?3:1){for(u=1,f=3;u<x-1;u++,f+=3)y=n([r[c][u-1],o[c][u-1]],[r[c][u],o[c][u]],[r[c][u+1],o[c][u+1]],s),t[h][f-1]=y[0][0],e[h][f-1]=y[0][1],t[h][f+1]=y[1][0],e[h][f+1]=y[1][1];m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=m[0],e[h][1]=m[1],m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=m[0],e[h][_-2]=m[1]}if(l)for(f=0;f<_;f++){for(h=3;h<w-3;h+=3)y=n([t[h-3][f],e[h-3][f]],[t[h][f],e[h][f]],[t[h+3][f],e[h+3][f]],l),t[h-1][f]=y[0][0],e[h-1][f]=y[0][1],t[h+1][f]=y[1][0],e[h+1][f]=y[1][1];m=a([t[0][f],e[0][f]],[t[2][f],e[2][f]],[t[3][f],e[3][f]]),t[1][f]=m[0],e[1][f]=m[1],m=a([t[w-1][f],e[w-1][f]],[t[w-3][f],e[w-3][f]],[t[w-4][f],e[w-4][f]]),t[w-2][f]=m[0],e[w-2][f]=m[1]}if(s&&l)for(h=1;h<w;h+=(h+1)%3==0?2:1){for(f=3;f<_-3;f+=3)y=n([t[h][f-3],e[h][f-3]],[t[h][f],e[h][f]],[t[h][f+3],e[h][f+3]],s),t[h][f-1]=.5*(t[h][f-1]+y[0][0]),e[h][f-1]=.5*(e[h][f-1]+y[0][1]),t[h][f+1]=.5*(t[h][f+1]+y[1][0]),e[h][f+1]=.5*(e[h][f+1]+y[1][1]);m=a([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]=.5*(t[h][1]+m[0]),e[h][1]=.5*(e[h][1]+m[1]),m=a([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]=.5*(t[h][_-2]+m[0]),e[h][_-2]=.5*(e[h][_-2]+m[1])}return[t,e]}},35509:function(t){\"use strict\";t.exports={RELATIVE_CULL_TOLERANCE:1e-6}},54495:function(t){\"use strict\";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=1-i,d=p*p,v=p*i*2,g=-3*d,y=3*(d-v),m=3*(v-h),x=3*h,b=a*a,_=b*a,w=1-a,T=w*w,k=T*w;for(f=0;f<t.length;f++)o=g*(c=t[f])[n][r]+y*c[n][r+1]+m*c[n][r+2]+x*c[n][r+3],s=g*c[n+1][r]+y*c[n+1][r+1]+m*c[n+1][r+2]+x*c[n+1][r+3],l=g*c[n+2][r]+y*c[n+2][r+1]+m*c[n+2][r+2]+x*c[n+2][r+3],u=g*c[n+3][r]+y*c[n+3][r+1]+m*c[n+3][r+2]+x*c[n+3][r+3],e[f]=k*o+3*(T*a*s+w*b*l)+_*u;return e}:e?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),r*=3;var c=i*i,f=1-i,h=f*f,p=f*i*2,d=-3*h,v=3*(h-p),g=3*(p-c),y=3*c,m=1-a;for(l=0;l<t.length;l++)o=d*(u=t[l])[n][r]+v*u[n][r+1]+g*u[n][r+2]+y*u[n][r+3],s=d*u[n+1][r]+v*u[n+1][r+1]+g*u[n+1][r+2]+y*u[n+1][r+3],e[l]=m*o+a*s;return e}:r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),n*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n][r+1]-f[n][r],s=f[n+1][r+1]-f[n+1][r],l=f[n+2][r+1]-f[n+2][r],u=f[n+3][r+1]-f[n+3][r],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-a;for(l=0;l<t.length;l++)o=(u=t[l])[n][r+1]-u[n][r],s=u[n+1][r+1]-u[n+1][r],e[l]=c*o+a*s;return e}}},73057:function(t){\"use strict\";t.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3,n*=3;var h=i*i,p=h*i,d=1-i,v=d*d,g=v*d,y=a*a,m=1-a,x=m*m,b=m*a*2,_=-3*x,w=3*(x-b),T=3*(b-y),k=3*y;for(f=0;f<t.length;f++)o=_*(c=t[f])[n][r]+w*c[n+1][r]+T*c[n+2][r]+k*c[n+3][r],s=_*c[n][r+1]+w*c[n+1][r+1]+T*c[n+2][r+1]+k*c[n+3][r+1],l=_*c[n][r+2]+w*c[n+1][r+2]+T*c[n+2][r+2]+k*c[n+3][r+2],u=_*c[n][r+3]+w*c[n+1][r+3]+T*c[n+2][r+3]+k*c[n+3][r+3],e[f]=g*o+3*(v*i*s+d*h*l)+p*u;return e}:e?function(e,r,n,i,a){var o,s,l,u,c,f;e||(e=[]),r*=3;var h=a*a,p=h*a,d=1-a,v=d*d,g=v*d;for(c=0;c<t.length;c++)o=(f=t[c])[n+1][r]-f[n][r],s=f[n+1][r+1]-f[n][r+1],l=f[n+1][r+2]-f[n][r+2],u=f[n+1][r+3]-f[n][r+3],e[c]=g*o+3*(v*a*s+d*h*l)+p*u;return e}:r?function(e,r,n,i,a){var o,s,l,u;e||(e=[]),n*=3;var c=1-i,f=a*a,h=1-a,p=h*h,d=h*a*2,v=-3*p,g=3*(p-d),y=3*(d-f),m=3*f;for(l=0;l<t.length;l++)o=v*(u=t[l])[n][r]+g*u[n+1][r]+y*u[n+2][r]+m*u[n+3][r],s=v*u[n][r+1]+g*u[n+1][r+1]+y*u[n+2][r+1]+m*u[n+3][r+1],e[l]=c*o+i*s;return e}:function(e,r,n,i,a){var o,s,l,u;e||(e=[]);var c=1-i;for(l=0;l<t.length;l++)o=(u=t[l])[n+1][r]-u[n][r],s=u[n+1][r+1]-u[n][r+1],e[l]=c*o+i*s;return e}}},20349:function(t){\"use strict\";t.exports=function(t,e,r,n,i){var a=e-2,o=r-2;return n&&i?function(e,r,n){var i,s,l,u,c,f;e||(e=[]);var h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3,p*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=v*v,w=_*v,T=1-v,k=T*T,A=k*T;for(f=0;f<t.length;f++)i=b*(c=t[f])[p][h]+3*(x*d*c[p][h+1]+m*g*c[p][h+2])+y*c[p][h+3],s=b*c[p+1][h]+3*(x*d*c[p+1][h+1]+m*g*c[p+1][h+2])+y*c[p+1][h+3],l=b*c[p+2][h]+3*(x*d*c[p+2][h+1]+m*g*c[p+2][h+2])+y*c[p+2][h+3],u=b*c[p+3][h]+3*(x*d*c[p+3][h+1]+m*g*c[p+3][h+2])+y*c[p+3][h+3],e[f]=A*i+3*(k*v*s+T*_*l)+w*u;return e}:n?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));h*=3;var g=d*d,y=g*d,m=1-d,x=m*m,b=x*m,_=1-v;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+v*f[p+1][h],s=_*f[p][h+1]+v*f[p+1][h+1],l=_*f[p][h+2]+v*f[p+1][h+1],u=_*f[p][h+3]+v*f[p+1][h+1],e[c]=b*i+3*(x*d*s+m*g*l)+y*u;return e}:i?function(e,r,n){e||(e=[]);var i,s,l,u,c,f,h=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-h)),v=Math.max(0,Math.min(1,n-p));p*=3;var g=v*v,y=g*v,m=1-v,x=m*m,b=x*m,_=1-d;for(c=0;c<t.length;c++)i=_*(f=t[c])[p][h]+d*f[p][h+1],s=_*f[p+1][h]+d*f[p+1][h+1],l=_*f[p+2][h]+d*f[p+2][h+1],u=_*f[p+3][h]+d*f[p+3][h+1],e[c]=b*i+3*(x*v*s+m*g*l)+y*u;return e}:function(e,r,n){e||(e=[]);var i,s,l,u,c=Math.max(0,Math.min(Math.floor(r),a)),f=Math.max(0,Math.min(Math.floor(n),o)),h=Math.max(0,Math.min(1,r-c)),p=Math.max(0,Math.min(1,n-f)),d=1-p,v=1-h;for(l=0;l<t.length;l++)i=v*(u=t[l])[f][c]+h*u[f][c+1],s=v*u[f+1][c]+h*u[f+1][c+1],e[l]=d*i+p*s;return e}}},92087:function(t,e,r){\"use strict\";var n=r(71828),i=r(19237),a=r(13145),o=r(99798),s=r(22399);t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}e._clipPathId=\"clip\"+e.uid+\"carpet\";var c=u(\"color\",s.defaultLine);n.coerceFont(u,\"font\"),u(\"carpet\"),a(t,e,l,u,c),e.a&&e.b?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),i(t,e,u)||(e.visible=!1),e._cheater&&u(\"cheaterslope\")):e.visible=!1}},21462:function(t,e,r){\"use strict\";t.exports={attributes:r(99798),supplyDefaults:r(92087),plot:r(89740),calc:r(25281),animatable:!0,isContainer:!0,moduleType:\"trace\",name:\"carpet\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"carpet\",\"carpetAxis\",\"notLegendIsolatable\",\"noMultiCategory\",\"noHover\",\"noSortingByValue\"],meta:{}}},22882:function(t){\"use strict\";t.exports=function(t,e){for(var r,n=t._fullData.length,i=0;i<n;i++){var a=t._fullData[i];if(a.index!==e.index&&\"carpet\"===a.type&&(r||(r=a),a.carpet===e.carpet))return a}return r}},67961:function(t){\"use strict\";t.exports=function(t,e,r){if(0===t.length)return\"\";var n,i=[],a=r?3:1;for(n=0;n<t.length;n+=a)i.push(t[n]+\",\"+e[n]),r&&n<t.length-a&&(i.push(\"C\"),i.push([t[n+1]+\",\"+e[n+1],t[n+2]+\",\"+e[n+2]+\" \"].join(\" \")));return i.join(r?\"\":\"L\")}},27669:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r){var i;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],i=0;i<e.length;i++)t[i]=r(e[i]);return t}},11651:function(t){\"use strict\";t.exports=function(t,e,r,n,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(r),l=1,u=1;if(a){var c=Math.sqrt(i[0]*i[0]+i[1]*i[1]),f=Math.sqrt(a[0]*a[0]+a[1]*a[1]),h=(i[0]*a[0]+i[1]*a[1])/c/f;u=Math.max(0,h)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:u}}},89740:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(27669),o=r(67961),s=r(11651),l=r(63893),u=r(71828),c=u.strRotate,f=u.strTranslate,h=r(18783);function p(t,e,r,s,l,u,c){var f=\"const-\"+l+\"-lines\",h=r.selectAll(\".\"+f).data(u);h.enter().append(\"path\").classed(f,!0).style(\"vector-effect\",c?\"none\":\"non-scaling-stroke\"),h.each((function(r){var s=r,l=s.x,u=s.y,c=a([],l,t.c2p),f=a([],u,e.c2p),h=\"M\"+o(c,f,s.smoothing);n.select(this).attr(\"d\",h).style(\"stroke-width\",s.width).style(\"stroke\",s.color).style(\"stroke-dasharray\",i.dashStyle(s.dash,s.width)).style(\"fill\",\"none\")})),h.exit().remove()}function d(t,e,r,a,o,u,h,p){var d=u.selectAll(\"text.\"+p).data(h);d.enter().append(\"text\").classed(p,!0);var v=0,g={};return d.each((function(o,u){var h;if(\"auto\"===o.axis.tickangle)h=s(a,e,r,o.xy,o.dxy);else{var p=(o.axis.tickangle+180)*Math.PI/180;h=s(a,e,r,o.xy,[Math.cos(p),Math.sin(p)])}u||(g={angle:h.angle,flip:h.flip});var d=(o.endAnchor?-1:1)*h.flip,y=n.select(this).attr({\"text-anchor\":d>0?\"start\":\"end\",\"data-notex\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),m=i.bBox(this);y.attr(\"transform\",f(h.p[0],h.p[1])+c(h.angle)+f(o.axis.labelpadding*d,.3*m.height)),v=Math.max(v,m.width+o.axis.labelpadding)})),d.exit().remove(),g.maxExtent=v,g}t.exports=function(t,e,r,i){var l=t._context.staticPlot,c=e.xaxis,f=e.yaxis,h=t._fullLayout._clips;u.makeTraceGroups(i,r,\"trace\").each((function(e){var r=n.select(this),i=e[0],v=i.trace,g=v.aaxis,m=v.baxis,x=u.ensureSingle(r,\"g\",\"minorlayer\"),b=u.ensureSingle(r,\"g\",\"majorlayer\"),_=u.ensureSingle(r,\"g\",\"boundarylayer\"),w=u.ensureSingle(r,\"g\",\"labellayer\");r.style(\"opacity\",v.opacity),p(c,f,b,0,\"a\",g._gridlines,!0),p(c,f,b,0,\"b\",m._gridlines,!0),p(c,f,x,0,\"a\",g._minorgridlines,!0),p(c,f,x,0,\"b\",m._minorgridlines,!0),p(c,f,_,0,\"a-boundary\",g._boundarylines,l),p(c,f,_,0,\"b-boundary\",m._boundarylines,l);var T=d(t,c,f,v,0,w,g._labels,\"a-label\"),k=d(t,c,f,v,0,w,m._labels,\"b-label\");!function(t,e,r,n,i,a,o,l){var c,f,h,p,d=u.aggNums(Math.min,null,r.a),v=u.aggNums(Math.max,null,r.a),g=u.aggNums(Math.min,null,r.b),m=u.aggNums(Math.max,null,r.b);c=.5*(d+v),f=g,h=r.ab2xy(c,f,!0),p=r.dxyda_rough(c,f),void 0===o.angle&&u.extendFlat(o,s(r,i,a,h,r.dxydb_rough(c,f))),y(t,e,r,0,h,p,r.aaxis,i,a,o,\"a-title\"),c=d,f=.5*(g+m),h=r.ab2xy(c,f,!0),p=r.dxydb_rough(c,f),void 0===l.angle&&u.extendFlat(l,s(r,i,a,h,r.dxyda_rough(c,f))),y(t,e,r,0,h,p,r.baxis,i,a,l,\"b-title\")}(t,w,v,0,c,f,T,k),function(t,e,r,n,i){var s,l,c,f,h=r.select(\"#\"+t._clipPathId);h.size()||(h=r.append(\"clipPath\").classed(\"carpetclip\",!0));var p=u.ensureSingle(h,\"path\",\"carpetboundary\"),d=e.clipsegments,v=[];for(f=0;f<d.length;f++)s=d[f],l=a([],s.x,n.c2p),c=a([],s.y,i.c2p),v.push(o(l,c,s.bicubic));var g=\"M\"+v.join(\"L\")+\"Z\";h.attr(\"id\",t._clipPathId),p.attr(\"d\",g)}(v,i,h,c,f)}))};var v=h.LINE_SPACING,g=(1-h.MID_SHIFT)/v+1;function y(t,e,r,a,o,u,h,p,d,y,m){var x=[];h.title.text&&x.push(h.title.text);var b=e.selectAll(\"text.\"+m).data(x),_=y.maxExtent;b.enter().append(\"text\").classed(m,!0),b.each((function(){var e=s(r,p,d,o,u);-1===[\"start\",\"both\"].indexOf(h.showticklabels)&&(_=0);var a=h.title.font.size;_+=a+h.title.offset;var m=(y.angle+(y.flip<0?180:0)-e.angle+450)%360,x=m>90&&m<270,b=n.select(this);b.text(h.title.text).call(l.convertToTspans,t),x&&(_=(-l.lineCount(b)+g)*v*a-_),b.attr(\"transform\",f(e.p[0],e.p[1])+c(e.angle)+f(0,_)).attr(\"text-anchor\",\"middle\").call(i.font,h.title.font)})),b.exit().remove()}},11435:function(t,e,r){\"use strict\";var n=r(35509),i=r(65888).findBin,a=r(45664),o=r(20349),s=r(54495),l=r(73057);t.exports=function(t){var e=t._a,r=t._b,u=e.length,c=r.length,f=t.aaxis,h=t.baxis,p=e[0],d=e[u-1],v=r[0],g=r[c-1],y=e[e.length-1]-e[0],m=r[r.length-1]-r[0],x=y*n.RELATIVE_CULL_TOLERANCE,b=m*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,v-=b,g+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>v&&e<g},t.isOccluded=function(t,e){return t<p||t>d||e<v||e>g},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,f.smoothing,h.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],u,c,f.smoothing,h.smoothing),t.dxydi=s([t._xctrl,t._yctrl],f.smoothing,h.smoothing),t.dxydj=l([t._xctrl,t._yctrl],f.smoothing,h.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),u-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),u-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),u-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(u-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),c-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(c-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(n<e[0]||n>e[u-1]|i<r[0]||i>r[c-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var f,h,p,d,v=0,g=0,y=[];n<e[0]?(f=0,h=0,v=(n-e[0])/(e[1]-e[0])):n>e[u-1]?(f=u-2,h=1,v=(n-e[u-1])/(e[u-1]-e[u-2])):h=o-(f=Math.max(0,Math.min(u-2,Math.floor(o)))),i<r[0]?(p=0,d=0,g=(i-r[0])/(r[1]-r[0])):i>r[c-1]?(p=c-2,d=1,g=(i-r[c-1])/(r[c-1]-r[c-2])):d=s-(p=Math.max(0,Math.min(c-2,Math.floor(s)))),v&&(t.dxydi(y,f,p,h,d),l[0]+=y[0]*v,l[1]+=y[1]*v),g&&(t.dxydj(y,f,p,h,d),l[0]+=y[0]*g,l[1]+=y[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=m*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},72505:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e,r){var i,a,o,s=[],l=[],u=t[0].length,c=t.length;function f(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e<u-1&&void 0!==(n=t[r][e+1])&&(a++,i+=n),r>0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r<c-1&&void 0!==(n=t[r+1][e])&&(a++,i+=n),i/Math.max(1,a)}var h,p,d,v,g,y,m,x,b,_,w,T=0;for(i=0;i<u;i++)for(a=0;a<c;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=f(i,a)),T=Math.max(T,Math.abs(t[a][i]));if(!s.length)return t;var k=0,A=0,M=s.length;do{for(k=0,o=0;o<M;o++){i=s[o],a=l[o];var S,E,L,C,P,O,I=0,D=0;0===i?(L=e[P=Math.min(u-1,2)],C=e[1],S=t[a][P],D+=(E=t[a][1])+(E-S)*(e[0]-C)/(C-L),I++):i===u-1&&(L=e[P=Math.max(0,u-3)],C=e[u-2],S=t[a][P],D+=(E=t[a][u-2])+(E-S)*(e[u-1]-C)/(C-L),I++),(0===i||i===u-1)&&a>0&&a<c-1&&(h=r[a+1]-r[a],D+=((p=r[a]-r[a-1])*t[a+1][i]+h*t[a-1][i])/(p+h),I++),0===a?(L=r[O=Math.min(c-1,2)],C=r[1],S=t[O][i],D+=(E=t[1][i])+(E-S)*(r[0]-C)/(C-L),I++):a===c-1&&(L=r[O=Math.max(0,c-3)],C=r[c-2],S=t[O][i],D+=(E=t[c-2][i])+(E-S)*(r[c-1]-C)/(C-L),I++),(0===a||a===c-1)&&i>0&&i<u-1&&(h=e[i+1]-e[i],D+=((p=e[i]-e[i-1])*t[a][i+1]+h*t[a][i-1])/(p+h),I++),I?D/=I:(d=e[i+1]-e[i],v=e[i]-e[i-1],x=(g=r[a+1]-r[a])*(y=r[a]-r[a-1])*(g+y),D=((m=d*v*(d+v))*(y*t[a+1][i]+g*t[a-1][i])+x*(v*t[a][i+1]+d*t[a][i-1]))/(x*(v+d)+m*(y+g))),k+=(_=(b=D-t[a][i])/T)*_,w=I?0:.85,t[a][i]+=b*(1+w)}k=Math.sqrt(k)}while(A++<100&&k>1e-5);return n.log(\"Smoother converged to\",k,\"after\",A,\"iterations\"),t}},19237:function(t,e,r){\"use strict\";var n=r(71828).isArray1D;t.exports=function(t,e,r){var i=r(\"x\"),a=i&&i.length,o=r(\"y\"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},69568:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(19316),a=r(50693),o=r(9012),s=r(22399).defaultLine,l=r(1426).extendFlat,u=i.marker.line;t.exports=l({locations:{valType:\"data_array\",editType:\"calc\"},locationmode:i.locationmode,z:{valType:\"data_array\",editType:\"calc\"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},u.color,{dflt:s}),width:l({},u.width,{dflt:1}),editType:\"calc\"},opacity:{valType:\"number\",arrayOk:!0,min:0,max:1,dflt:1,editType:\"style\"},editType:\"calc\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\"plot\"},editType:\"plot\"},hoverinfo:l({},o.hoverinfo,{editType:\"calc\",flags:[\"location\",\"z\",\"text\",\"name\"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},38675:function(t,e,r){\"use strict\";var n=r(92770),i=r(50606).BADNUM,a=r(78803),o=r(75225),s=r(66279);function l(t){return t&&\"string\"==typeof t}t.exports=function(t,e){var r,u=e._length,c=new Array(u);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var f=0;f<u;f++){var h=c[f]={},p=e.locations[f],d=e.z[f];r(p)&&n(d)?(h.loc=p,h.z=d):(h.loc=null,h.z=i),h.index=f}return o(c,e),a(t,e,{vals:e.z,containerStr:\"\",cLetter:\"z\"}),s(c,e),c}},61869:function(t,e,r){\"use strict\";var n=r(71828),i=r(1586),a=r(69568);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\"locations\"),u=s(\"z\");if(l&&l.length&&n.isArrayOrTypedArray(u)&&u.length){e._length=Math.min(l.length,u.length);var c,f=s(\"geojson\");(\"string\"==typeof f&&\"\"!==f||n.isPlainObject(f))&&(c=\"geojson-id\"),\"geojson-id\"===s(\"locationmode\",c)&&s(\"featureidkey\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")&&s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},92069:function(t){\"use strict\";t.exports=function(t,e,r,n,i){t.location=e.location,t.z=e.z;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t.ct=a.ct,t}},42300:function(t,e,r){\"use strict\";var n=r(89298),i=r(69568),a=r(71828).fillText;t.exports=function(t,e,r){var o,s,l,u,c=t.cd,f=c[0].trace,h=t.subplot,p=[e,r],d=[e+360,r];for(s=0;s<c.length;s++)if(u=!1,(o=c[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains(p)&&(u=!u),o._polygons[l].contains(d)&&(u=!u);if(u)break}if(u&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(h.mockAxis,h.mockAxis.c2l(o.z),\"hover\").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(!e.hovertemplate){var n=r.hi||e.hoverinfo,o=String(r.loc),s=\"all\"===n?i.hoverinfo.flags:n.split(\"+\"),l=-1!==s.indexOf(\"name\"),u=-1!==s.indexOf(\"location\"),c=-1!==s.indexOf(\"z\"),f=-1!==s.indexOf(\"text\"),h=[];!l&&u?t.nameOverride=o:(l&&(t.nameOverride=e.name),u&&h.push(o)),c&&h.push(t.zLabel),f&&a(r,e,h),t.extraText=h.join(\"<br>\")}}(t,f,o),[t]}},51319:function(t,e,r){\"use strict\";t.exports={attributes:r(69568),supplyDefaults:r(61869),colorbar:r(61243),calc:r(38675),calcGeoJSON:r(99841).calcGeoJSON,plot:r(99841).plot,style:r(99636).style,styleOnSelect:r(99636).styleOnSelect,hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),moduleType:\"trace\",name:\"choropleth\",basePlotModule:r(44622),categories:[\"geo\",\"noOpacity\",\"showLegend\"],meta:{}}},99841:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(41327),o=r(90973).getTopojsonFeatures,s=r(71739).findExtremes,l=r(99636).style;t.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],i=n._subplot,l=r.locationmode,u=r._length,c=\"geojson-id\"===l?a.extractTraceFeature(t):o(r,i.topojson),f=[],h=[],p=0;p<u;p++){var d=t[p],v=\"geojson-id\"===l?d.fOut:a.locationToFeature(l,d.loc,c);if(v){d.geojson=v,d.ct=v.properties.ct,d._polygons=a.feature2polygons(v);var g=a.computeBbox(v);f.push(g[0],g[2]),h.push(g[1],g[3])}else d.geojson=null}if(\"geojson\"===n.fitbounds&&\"geojson-id\"===l){var y=a.computeBbox(a.getTraceGeojson(r));f=[y[0],y[2]],h=[y[1],y[3]]}var m={padded:!0};r._extremes.lon=s(n.lonaxis._ax,f,m),r._extremes.lat=s(n.lataxis._ax,h,m)},plot:function(t,e,r){var a=e.layers.backplot.select(\".choroplethlayer\");i.makeTraceGroups(a,r,\"trace choropleth\").each((function(e){var r=n.select(this).selectAll(\"path.choroplethlocation\").data(i.identity);r.enter().append(\"path\").classed(\"choroplethlocation\",!0),r.exit().remove(),l(t,e)}))}}},81253:function(t){\"use strict\";t.exports=function(t,e){var r,n,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(i=(n=s[r]).ct)&&(a=l.c2p(i),o=u.c2p(i),e.contains([a,o],null,r,t)?(c.push({pointNumber:r,lon:i[0],lat:i[1]}),n.selected=1):n.selected=0);return c}},99636:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(91424),o=r(21081);function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(\".choroplethlocation\"),l=r.marker||{},u=l.line||{},c=o.makeColorScaleFuncFromTrace(r);s.each((function(t){n.select(this).attr(\"fill\",c(t.z)).call(i.stroke,t.mlc||u.color).call(a.dashLine,\"\",t.mlw||u.width||0).style(\"opacity\",l.opacity)})),a.selectedPointStyle(s,r)}t.exports={style:function(t,e){e&&s(0,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?a.selectedPointStyle(r.selectAll(\".choroplethlocation\"),n):s(0,e)}}},64496:function(t,e,r){\"use strict\";var n=r(69568),i=r(50693),a=r(5386).fF,o=r(9012),s=r(1426).extendFlat;t.exports=s({locations:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:s({},n.featureidkey,{}),below:{valType:\"string\",editType:\"plot\"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:\"plot\"}),width:s({},n.marker.line.width,{editType:\"plot\"}),editType:\"calc\"},opacity:s({},n.marker.opacity,{editType:\"plot\"}),editType:\"calc\"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:[\"properties\"]}),showlegend:s({},o.showlegend,{dflt:!1})},i(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},82004:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(21081),o=r(91424),s=r(18214).makeBlank,l=r(41327);function u(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var a=o.makeSelectedPointStyleFns(r),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=a.selectedOpacityFn(l))}e={type:\"identity\",property:\"mo2\"}}else e=i.isArrayOrTypedArray(r.marker.opacity)?{type:\"identity\",property:\"mo\"}:r.marker.opacity;return i.extendFlat(n.fill.paint,{\"fill-opacity\":e}),i.extendFlat(n.line.paint,{\"line-opacity\":e}),n}t.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,o={layout:{visibility:\"none\"},paint:{}},c={layout:{visibility:\"none\"},paint:{}},f=e._opts={fill:o,line:c,geojson:s()};if(!r)return f;var h=l.extractTraceFeature(t);if(!h)return f;var p,d,v,g=a.makeColorScaleFuncFromTrace(e),y=e.marker,m=y.line||{};i.isArrayOrTypedArray(y.opacity)&&(p=function(t){var e=t.mo;return n(e)?+i.constrain(e,0,1):0}),i.isArrayOrTypedArray(m.color)&&(d=function(t){return t.mlc}),i.isArrayOrTypedArray(m.width)&&(v=function(t){return t.mlw});for(var x=0;x<t.length;x++){var b=t[x],_=b.fOut;if(_){var w=_.properties;w.fc=g(b.z),p&&(w.mo=p(b)),d&&(w.mlc=d(b)),v&&(w.mlw=v(b)),b.ct=w.ct,b._polygons=l.feature2polygons(_)}}var T=p?{type:\"identity\",property:\"mo\"}:y.opacity;return i.extendFlat(o.paint,{\"fill-color\":{type:\"identity\",property:\"fc\"},\"fill-opacity\":T}),i.extendFlat(c.paint,{\"line-color\":d?{type:\"identity\",property:\"mlc\"}:m.color,\"line-width\":v?{type:\"identity\",property:\"mlw\"}:m.width,\"line-opacity\":T}),o.layout.visibility=\"visible\",c.layout.visibility=\"visible\",f.geojson={type:\"FeatureCollection\",features:h},u(t),f},convertOnSelect:u}},22654:function(t,e,r){\"use strict\";var n=r(71828),i=r(1586),a=r(64496);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\"locations\"),u=s(\"z\"),c=s(\"geojson\");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(u)&&u.length&&(\"string\"==typeof c&&\"\"!==c||n.isPlainObject(c))?(s(\"featureidkey\"),e._length=Math.min(l.length,u.length),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")&&s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},57516:function(t,e,r){\"use strict\";t.exports={attributes:r(64496),supplyDefaults:r(22654),colorbar:r(61243),calc:r(38675),plot:r(7852),hoverPoints:r(42300),eventData:r(92069),selectPoints:r(81253),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var i=r[n].id;if(\"string\"==typeof i&&0===i.indexOf(\"water\"))for(var a=n+1;a<r.length;a++)if(\"string\"==typeof(i=r[a].id)&&-1===i.indexOf(\"plotly-\"))return i}},moduleType:\"trace\",name:\"choroplethmapbox\",basePlotModule:r(50101),categories:[\"mapbox\",\"gl\",\"noOpacity\",\"showLegend\"],meta:{hr_name:\"choropleth_mapbox\"}}},7852:function(t,e,r){\"use strict\";var n=r(82004).convert,i=r(82004).convertOnSelect,a=r(77734).traceLayerPrefix;function o(t,e){this.type=\"choroplethmapbox\",this.subplot=t,this.uid=e,this.sourceId=\"source-\"+e,this.layerList=[[\"fill\",a+e+\"-fill\"],[\"line\",a+e+\"-line\"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t)),t[0].trace._glTrace=this},s.updateOnSelect=function(t){this._update(i(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var i=0;i<r.length;i++){var a=r[i],o=a[0],s=a[1],l=t[o];e.setOptions(s,\"setLayoutProperty\",l.layout),\"visible\"===l.layout.visibility&&e.setOptions(s,\"setPaintProperty\",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(a,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},12674:function(t,e,r){\"use strict\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"scaled\",\"absolute\"],editType:\"calc\",dflt:\"scaled\"},sizeref:{valType:\"number\",editType:\"calc\",min:0},anchor:{valType:\"enumerated\",editType:\"calc\",values:[\"tip\",\"tail\",\"cm\",\"center\"],dflt:\"cm\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:a({editType:\"calc\"},{keys:[\"norm\"]}),uhoverformat:i(\"u\",1),vhoverformat:i(\"v\",1),whoverformat:i(\"w\",1),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"})),[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),u.transforms=void 0,t.exports=u},31371:function(t,e,r){\"use strict\";var n=r(78803);t.exports=function(t,e){for(var r=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s=-1/0,l=1/0,u=0;u<o;u++){var c=r[u],f=i[u],h=a[u],p=Math.sqrt(c*c+f*f+h*h);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:\"\",cLetter:\"c\"})}},5453:function(t,e,r){\"use strict\";var n=r(9330).gl_cone3d,i=r(9330).gl_cone3d.createConeMesh,a=r(71828).simpleMap,o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060);function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],i=this.data.z[e],a=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,i,a,o,s,Math.sqrt(a*a+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var f={xaxis:0,yaxis:1,zaxis:2},h={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,u={};function c(t,e){var n=r[e],o=i[f[e]];return a(t,(function(t){return n.d2l(t)*o}))}u.vectors=l(c(e.u,\"xaxis\"),c(e.v,\"yaxis\"),c(e.w,\"zaxis\"),e._len),u.positions=l(c(e.x,\"xaxis\"),c(e.y,\"yaxis\"),c(e.z,\"zaxis\"),e._len);var d=s(e);u.colormap=o(e),u.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],u.coneOffset=h[e.anchor],\"scaled\"===e.sizemode?u.coneSize=e.sizeref||.5:u.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var v=n(u),g=e.lightposition;return v.lightPosition=[g.x,g.y,g.z],v.ambient=e.lighting.ambient,v.diffuse=e.lighting.diffuse,v.specular=e.lighting.specular,v.roughness=e.lighting.roughness,v.fresnel=e.lighting.fresnel,v.opacity=e.opacity,e._pad=p[e.anchor]*v.vectorScale*v.coneScale*e._normMax,v}c.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new u(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},91750:function(t,e,r){\"use strict\";var n=r(71828),i=r(1586),a=r(12674);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\"u\"),u=s(\"v\"),c=s(\"w\"),f=s(\"x\"),h=s(\"y\"),p=s(\"z\");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s(\"sizeref\"),s(\"sizemode\"),s(\"anchor\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"uhoverformat\"),s(\"vhoverformat\"),s(\"whoverformat\"),s(\"xhoverformat\"),s(\"yhoverformat\"),s(\"zhoverformat\"),e._length=null):e.visible=!1}},98128:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"cone\",basePlotModule:r(58547),categories:[\"gl3d\",\"showLegend\"],attributes:r(12674),supplyDefaults:r(91750),colorbar:{min:\"cmin\",max:\"cmax\"},calc:r(31371),plot:r(5453),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},70600:function(t,e,r){\"use strict\";var n=r(21606),i=r(82196),a=r(12663),o=a.axisHoverFormat,s=a.descriptionOnlyNumbers,l=r(50693),u=r(79952).P,c=r(41940),f=r(1426).extendFlat,h=r(74808),p=h.COMPARISON_OPS2,d=h.INTERVAL_OPS,v=i.line;t.exports=f({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:n.hovertemplate,texttemplate:f({},n.texttemplate,{}),textfont:f({},n.textfont,{}),hoverongaps:n.hoverongaps,connectgaps:f({},n.connectgaps,{}),fillcolor:{valType:\"color\",editType:\"calc\"},autocontour:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"contours.start\":void 0,\"contours.end\":void 0,\"contours.size\":void 0}},ncontours:{valType:\"integer\",dflt:15,min:1,editType:\"calc\"},contours:{type:{valType:\"enumerated\",values:[\"levels\",\"constraint\"],dflt:\"levels\",editType:\"calc\"},start:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},end:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},coloring:{valType:\"enumerated\",values:[\"fill\",\"heatmap\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:{valType:\"boolean\",dflt:!0,editType:\"plot\"},showlabels:{valType:\"boolean\",dflt:!1,editType:\"plot\"},labelfont:c({editType:\"plot\",colorEditType:\"style\"}),labelformat:{valType:\"string\",dflt:\"\",editType:\"plot\",description:s(\"contour label\")},operation:{valType:\"enumerated\",values:[].concat(p).concat(d),dflt:\"=\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:f({},v.color,{editType:\"style+colorbars\"}),width:{valType:\"number\",min:0,editType:\"style+colorbars\"},dash:u,smoothing:f({},v.smoothing,{}),editType:\"plot\"}},l(\"\",{cLetter:\"z\",autoColorDflt:!1,editTypeOverride:\"calc\"}))},27529:function(t,e,r){\"use strict\";var n=r(21081),i=r(90757),a=r(18670),o=r(53572);t.exports=function(t,e){var r=i(t,e),s=r[0].z;a(e,s);var l,u=e.contours,c=n.extractOpts(e);if(\"heatmap\"===u.coloring&&c.auto&&!1===e.autocontour){var f=u.start,h=o(u),p=u.size||1,d=Math.floor((h-f)/p)+1;isFinite(p)||(p=1,d=1);var v=f-p/2;l=[v,v+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:\"z\"}),r}},20083:function(t){\"use strict\";t.exports=function(t,e){var r,n=t[0],i=n.z;switch(e.type){case\"levels\":var a=Math.min(i[0][0],i[0][1]);for(r=0;r<t.length;r++){var o=t[r];o.prefixBoundary=!o.edgepaths.length&&(a>o.level||o.starts.length&&a===o.level)}break;case\"constraint\":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,u=-1/0,c=1/0;for(r=0;r<l;r++)c=Math.min(c,i[r][0]),c=Math.min(c,i[r][s-1]),u=Math.max(u,i[r][0]),u=Math.max(u,i[r][s-1]);for(r=1;r<s-1;r++)c=Math.min(c,i[0][r]),c=Math.min(c,i[l-1][r]),u=Math.max(u,i[0][r]),u=Math.max(u,i[l-1][r]);var f,h,p=e.value;switch(e._operation){case\">\":p>u&&(n.prefixBoundary=!0);break;case\"<\":(p<c||n.starts.length&&p===c)&&(n.prefixBoundary=!0);break;case\"[]\":f=Math.min(p[0],p[1]),((h=Math.max(p[0],p[1]))<c||f>u||n.starts.length&&h===c)&&(n.prefixBoundary=!0);break;case\"][\":f=Math.min(p[0],p[1]),h=Math.max(p[0],p[1]),f<c&&h>u&&(n.prefixBoundary=!0)}}}},90654:function(t,e,r){\"use strict\";var n=r(21081),i=r(86068),a=r(53572);t.exports={min:\"zmin\",max:\"zmax\",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,u=o.coloring,c=i(e,{isColorbar:!0});if(\"heatmap\"===u){var f=n.extractOpts(e);r._fillgradient=f.reversescale?n.flipScale(f.colorscale):f.colorscale,r._zrange=[f.min,f.max]}else\"fill\"===u&&(r._fillcolor=c);r._line={color:\"lines\"===u?c:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:a(o),size:l}}}},36914:function(t){\"use strict\";t.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},83179:function(t,e,r){\"use strict\";var n=r(92770),i=r(14523),a=r(7901),o=a.addOpacity,s=a.opacity,l=r(74808),u=l.CONSTRAINT_REDUCTION,c=l.COMPARISON_OPS2;t.exports=function(t,e,r,a,l,f){var h,p,d,v=e.contours,g=r(\"contours.operation\");v._operation=u[g],function(t,e){var r;-1===c.indexOf(e.operation)?(t(\"contours.value\",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t(\"contours.value\",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,v),\"=\"===g?h=v.showlines=!0:(h=r(\"contours.showlines\"),d=r(\"fillcolor\",o((t.line||{}).color||l,.5))),h&&(p=r(\"line.color\",d&&s(d)?o(e.fillcolor,1):l),r(\"line.width\",2),r(\"line.dash\")),r(\"line.smoothing\"),i(r,a,p,f)}},64237:function(t,e,r){\"use strict\";var n=r(74808),i=r(92770);function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}t.exports={\"[]\":o(\"[]\"),\"][\":o(\"][\"),\">\":s(\">\"),\"<\":s(\"<\"),\"=\":s(\"=\")}},67217:function(t){\"use strict\";t.exports=function(t,e,r,n){var i=n(\"contours.start\"),a=n(\"contours.end\"),o=!1===i||!1===a,s=r(\"contours.size\");!(o?e.autocontour=!0:r(\"autocontour\",!1))&&s||r(\"ncontours\")}},84857:function(t,e,r){\"use strict\";var n=r(71828);function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}t.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case\"=\":case\"<\":return t;case\">\":for(1!==t.length&&n.warn(\"Contour data invalid for the specified inequality operation.\"),a=t[0],r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);return t;case\"][\":var u=s;s=l,l=u;case\"[]\":for(2!==t.length&&n.warn(\"Contour data invalid for the specified inequality range operation.\"),a=i(t[0]),o=i(t[1]),r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(r=0;r<a.starts.length;r++)a.starts[r]=s(a.starts[r]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));for(;o.starts.length;)a.starts.push(l(o.starts.shift()));return[a]}}},13031:function(t,e,r){\"use strict\";var n=r(71828),i=r(67684),a=r(73927),o=r(83179),s=r(67217),l=r(8724),u=r(58623),c=r(70600);t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,c,r,i)}if(i(t,e,h,f)){a(t,e,f,h),h(\"xhoverformat\"),h(\"yhoverformat\"),h(\"text\"),h(\"hovertext\"),h(\"hoverongaps\"),h(\"hovertemplate\");var p=\"constraint\"===h(\"contours.type\");h(\"connectgaps\",n.isArray1D(e.z)),p?o(t,e,h,f,r):(s(t,e,h,(function(r){return n.coerce2(t,e,c,r)})),l(t,e,h,f)),e.contours&&\"heatmap\"===e.contours.coloring&&u(h,f)}else e.visible=!1}},87558:function(t,e,r){\"use strict\";var n=r(71828),i=r(64237),a=r(53572);t.exports=function(t,e,r){for(var o=\"constraint\"===t.type?i[t._operation](t.value):t,s=o.size,l=[],u=a(o),c=r.trace._carpetTrace,f=c?{xaxis:c.aaxis,yaxis:c.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},h=o.start;h<u;h+=s)if(l.push(n.extendFlat({level:h,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},f)),l.length>1e3){n.warn(\"Too many contours, clipping at 1000\",t);break}return l}},53572:function(t){\"use strict\";t.exports=function(t){return t.end+t.size/1e6}},81696:function(t,e,r){\"use strict\";var n=r(71828),i=r(36914);function a(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var u,c=e.join(\",\"),f=t.crossings[c],h=function(t,e,r){var n=0,a=0;return t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1,[n,a]}(f,r,e),p=[s(t,e,[-h[0],-h[1]])],d=t.z.length,v=t.z[0].length,g=e.slice(),y=h.slice();for(u=0;u<1e4;u++){if(f>20?(f=i.CHOOSESADDLE[f][(h[0]||h[1])<0?0:1],t.crossings[c]=i.SADDLEREMAINDER[f]):delete t.crossings[c],!(h=i.NEWDELTA[f])){n.log(\"Found bad marching index:\",f,e,t.level);break}p.push(s(t,e,h)),e[0]+=h[0],e[1]+=h[1],c=e.join(\",\"),a(p[p.length-1],p[p.length-2],o,l)&&p.pop();var m=h[0]&&(e[0]<0||e[0]>v-2)||h[1]&&(e[1]<0||e[1]>d-2);if(e[0]===g[0]&&e[1]===g[1]&&h[0]===y[0]&&h[1]===y[1]||r&&m)break;f=t.crossings[c]}1e4===u&&n.log(\"Infinite loop in contour?\");var x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D=a(p[0],p[p.length-1],o,l),z=0,R=.2*t.smoothing,F=[],B=0;for(u=1;u<p.length;u++)C=p[u],P=p[u-1],void 0,void 0,O=C[2]-P[2],I=C[3]-P[3],z+=A=Math.sqrt(O*O+I*I),F.push(A);var N=z/F.length*R;function j(t){return p[t%p.length]}for(u=p.length-2;u>=B;u--)if((x=F[u])<N){for(_=0,b=u-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(D&&u===p.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];T=u-b+_+1,k=Math.floor((u+b+_+2)/2),w=D||u!==p.length-2?D||-1!==b?T%2?j(k):[(j(k)[0]+j(k+1)[0])/2,(j(k)[1]+j(k+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,u-b+1,w),u=b+1,_&&(B=_),D&&(u===p.length-2?p[_]=p[p.length-1]:0===u&&(p[p.length-1]=p[0]))}for(p.splice(0,B),u=0;u<p.length;u++)p[u].length=2;if(!(p.length<2))if(D)p.pop(),t.paths.push(p);else{r||n.log(\"Unclosed interior contour?\",t.level,g.join(\",\"),p.join(\"L\"));var U=!1;for(M=0;M<t.edgepaths.length;M++)if(E=t.edgepaths[M],!U&&a(E[0],p[p.length-1],o,l)){p.pop(),U=!0;var V=!1;for(S=0;S<t.edgepaths.length;S++)if(a((L=t.edgepaths[S])[L.length-1],p[0],o,l)){V=!0,p.shift(),t.edgepaths.splice(M,1),S===M?t.paths.push(p.concat(L)):(S>M&&S--,t.edgepaths[S]=L.concat(p,E));break}V||(t.edgepaths[M]=p.concat(E))}for(M=0;M<t.edgepaths.length&&!U;M++)a((E=t.edgepaths[M])[E.length-1],p[0],o,l)&&(p.shift(),t.edgepaths[M]=E.concat(p),U=!0);U||t.edgepaths.push(p)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),i=e[1]+Math.max(r[1],0),a=t.z[i][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-a)/(t.z[i][n+1]-a),u=(1!==l?(1-l)*o.c2l(t.x[n]):0)+(0!==l?l*o.c2l(t.x[n+1]):0);return[o.c2p(o.l2c(u),!0),s.c2p(t.y[i],!0),n+l,i]}var c=(t.level-a)/(t.z[i+1][n]-a),f=(1!==c?(1-c)*s.c2l(t.y[i]):0)+(0!==c?c*s.c2l(t.y[i+1]):0);return[o.c2p(t.x[n],!0),s.c2p(s.l2c(f),!0),n,i+c]}t.exports=function(t,e,r){var i,a,s,l;for(e=e||.01,r=r||.01,a=0;a<t.length;a++){for(s=t[a],l=0;l<s.starts.length;l++)o(s,s.starts[l],\"edge\",e,r);for(i=0;Object.keys(s.crossings).length&&i<1e4;)i++,o(s,Object.keys(s.crossings)[0].split(\",\").map(Number),void 0,e,r);1e4===i&&n.log(\"Infinite loop in contour?\")}}},52421:function(t,e,r){\"use strict\";var n=r(7901),i=r(46248);t.exports=function(t,e,r,a,o){o||(o={}),o.isContour=!0;var s=i(t,e,r,a,o);return s&&s.forEach((function(t){var e=t.trace;\"constraint\"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))})),s}},99442:function(t,e,r){\"use strict\";t.exports={attributes:r(70600),supplyDefaults:r(13031),calc:r(27529),plot:r(29854).plot,style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:\"trace\",name:\"contour\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"showLegend\"],meta:{}}},14523:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e,r,i){if(i||(i={}),t(\"contours.showlabels\")){var a=e.font;n.coerceFont(t,\"contours.labelfont\",{family:a.family,size:a.size,color:r}),t(\"contours.labelformat\")}!1!==i.hasHover&&t(\"zhoverformat\")}},86068:function(t,e,r){\"use strict\";var n=r(39898),i=r(21081),a=r(53572);t.exports=function(t){var e=t.contours,r=e.start,o=a(e),s=e.size||1,l=Math.floor((o-r)/s)+1,u=\"lines\"===e.coloring?0:1,c=i.extractOpts(t);isFinite(s)||(s=1,l=1);var f,h,p=c.reversescale?i.flipScale(c.colorscale):c.colorscale,d=p.length,v=new Array(d),g=new Array(d),y=c.min,m=c.max;if(\"heatmap\"===e.coloring){for(h=0;h<d;h++)f=p[h],v[h]=f[0]*(m-y)+y,g[h]=f[1];var x=n.extent([y,m,e.start,e.start+s*(l-1)]),b=x[y<m?0:1],_=x[y<m?1:0];b!==y&&(v.splice(0,0,b),g.splice(0,0,g[0])),_!==m&&(v.push(_),g.push(g[g.length-1]))}else{var w=t._input&&\"number\"==typeof t._input.zmin&&\"number\"==typeof t._input.zmax;for(w&&(r<=y||o>=m)&&(r<=y&&(r=y),o>=m&&(o=m),l=Math.floor((o-r)/s)+1,u=0),h=0;h<d;h++)f=p[h],v[h]=(f[0]*(l+u-1)-u/2)*s+r,g[h]=f[1];(w||t.autocontour)&&(v[0]>y&&(v.unshift(y),g.unshift(g[0])),v[v.length-1]<m&&(v.push(m),g.push(g[g.length-1])))}return i.makeColorScaleFunc({domain:v,range:g},{noNumericCheck:!0})}},87678:function(t,e,r){\"use strict\";var n=r(36914);function i(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}t.exports=function(t){var e,r,a,o,s,l,u,c,f,h=t[0].z,p=h.length,d=h[0].length,v=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(a=o.slice(),0===e&&(a=a.concat(n.LEFTSTART)),e===d-2&&(a=a.concat(n.RIGHTSTART)),s=e+\",\"+r,l=[[h[r][e],h[r][e+1]],[h[r+1][e],h[r+1][e+1]]],f=0;f<t.length;f++)(u=i((c=t[f]).level,l))&&(c.crossings[s]=u,-1!==a.indexOf(u)&&(c.starts.push([e,r]),v&&-1!==a.indexOf(u,a.indexOf(u)+1)&&c.starts.push([e,r])))}},29854:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(21081),s=r(63893),l=r(89298),u=r(21994),c=r(50347),f=r(87678),h=r(81696),p=r(87558),d=r(84857),v=r(20083),g=r(36914),y=g.LABELOPTIMIZER;function m(t,e){var r,n,o,s,l,u,c,f=\"\",h=0,p=t.edgepaths.map((function(t,e){return e})),d=!0;function v(t){return Math.abs(t[1]-e[2][1])<.01}function g(t){return Math.abs(t[0]-e[0][0])<.01}function y(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(u=a.smoothopen(t.edgepaths[h],t.smoothing),f+=d?u:u.replace(/^M/,\"L\"),p.splice(p.indexOf(h),1),r=t.edgepaths[h][t.edgepaths[h].length-1],s=-1,o=0;o<4;o++){if(!r){i.log(\"Missing end?\",h,t);break}for(c=r,Math.abs(c[1]-e[0][1])<.01&&!y(r)?n=e[1]:g(r)?n=e[0]:v(r)?n=e[3]:y(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var m=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-m[0])<.01&&(m[1]-r[1])*(n[1]-m[1])>=0&&(n=m,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-m[1])<.01&&(m[0]-r[0])*(n[0]-m[0])>=0&&(n=m,s=l):i.log(\"endpt to newendpt is not vert. or horz.\",r,n,m)}if(r=n,s>=0)break;f+=\"L\"+n}if(s===t.edgepaths.length){i.log(\"unclosed perimeter path\");break}h=s,(d=-1===p.indexOf(h))&&(h=p[0],f+=\"Z\")}for(h=0;h<t.paths.length;h++)f+=a.smoothclosed(t.paths[h],t.smoothing);return f}function x(t,e,r,n){var a=e.width/2,o=e.height/2,s=t.x,l=t.y,u=t.theta,c=Math.cos(u)*a,f=Math.sin(u)*a,h=(s>n.center?n.right-s:s-n.left)/(c+Math.abs(Math.sin(u)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(f)+Math.cos(u)*o);if(h<1||p<1)return 1/0;var d=y.EDGECOST*(1/(h-1)+1/(p-1));d+=y.ANGLECOST*u*u;for(var v=s-c,g=l-f,m=s+c,x=l+f,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,T=Math.sin(_.theta)*_.width/2,k=2*i.segmentDistance(v,g,m,x,_.x-w,_.y-T,_.x+w,_.y+T)/(e.height+_.height),A=_.level===e.level,M=A?y.SAMELEVELDISTANCE:1;if(k<=M)return 1/0;d+=y.NEIGHBORCOST*(A?y.SAMELEVELFACTOR:1)/(k-M)}return d}function b(t){var e,r,n=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<n.length;e++)i[(r=n[e])[0]][r[1]]=0;return t.zmask=i,i}e.plot=function(t,r,o,s){var l=r.xaxis,u=r.yaxis;i.makeTraceGroups(s,o,\"contour\").each((function(o){var s=n.select(this),y=o[0],x=y.trace,_=y.x,w=y.y,T=x.contours,k=p(T,r,y),A=i.ensureSingle(s,\"g\",\"heatmapcoloring\"),M=[];\"heatmap\"===T.coloring&&(M=[o]),c(t,r,M,A),f(k),h(k);var S=l.c2p(_[0],!0),E=l.c2p(_[_.length-1],!0),L=u.c2p(w[0],!0),C=u.c2p(w[w.length-1],!0),P=[[S,C],[E,C],[E,L],[S,L]],O=k;\"constraint\"===T.type&&(O=d(k,T._operation)),function(t,e,r){var n=i.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"===r.coloring?[0]:[]);n.enter().append(\"path\"),n.exit().remove(),n.attr(\"d\",\"M\"+e.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}(s,P,T),function(t,e,r,a){var o=\"fill\"===a.coloring||\"constraint\"===a.type&&\"=\"!==a._operation,s=\"M\"+r.join(\"L\")+\"Z\";o&&v(e,a);var l=i.ensureSingle(t,\"g\",\"contourfill\").selectAll(\"path\").data(o?e:[]);l.enter().append(\"path\"),l.exit().remove(),l.each((function(t){var e=(t.prefixBoundary?s:\"\")+m(t,r);e?n.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):n.select(this).remove()}))}(s,O,P,T),function(t,r,o,s,l){var u=o._context.staticPlot,c=i.ensureSingle(t,\"g\",\"contourlines\"),f=!1!==l.showlines,h=l.showlabels,p=f&&h,d=e.createLines(c,f||h,r,u),v=e.createLineClip(c,p,o,s.trace.uid),y=t.selectAll(\"g.contourlabels\").data(h?[0]:[]);if(y.exit().remove(),y.enter().append(\"g\").classed(\"contourlabels\",!0),h){var m=[],x=[];i.clearLocationCache();var b=e.labelFormatter(o,s),_=a.tester.append(\"text\").attr(\"data-notex\",1).call(a.font,l.labelfont),w=r[0].xaxis,T=r[0].yaxis,k=w._length,A=T._length,M=w.range,S=T.range,E=i.aggNums(Math.min,null,s.x),L=i.aggNums(Math.max,null,s.x),C=i.aggNums(Math.min,null,s.y),P=i.aggNums(Math.max,null,s.y),O=Math.max(w.c2p(E,!0),0),I=Math.min(w.c2p(L,!0),k),D=Math.max(T.c2p(P,!0),0),z=Math.min(T.c2p(C,!0),A),R={};M[0]<M[1]?(R.left=O,R.right=I):(R.left=I,R.right=O),S[0]<S[1]?(R.top=D,R.bottom=z):(R.top=z,R.bottom=D),R.middle=(R.top+R.bottom)/2,R.center=(R.left+R.right)/2,m.push([[R.left,R.top],[R.right,R.top],[R.right,R.bottom],[R.left,R.bottom]]);var F=Math.sqrt(k*k+A*A),B=g.LABELDISTANCE*F/Math.max(1,r.length/g.LABELINCREASE);d.each((function(t){var r=e.calcTextOpts(t.level,b,_,o);n.select(this).selectAll(\"path\").each((function(){var t=i.getVisibleSegment(this,R,r.height/2);if(t&&!(t.len<(r.width+r.height)*g.LABELMIN))for(var n=Math.min(Math.ceil(t.len/B),g.LABELMAX),a=0;a<n;a++){var o=e.findBestTextLocation(this,t,r,x,R);if(!o)break;e.addLabelData(o,r,x,m)}}))})),_.remove(),e.drawLabels(y,x,o,v,p?m:null)}h&&!f&&d.remove()}(s,k,t,y,T),function(t,e,r,n,o){var s=n.trace,l=r._fullLayout._clips,u=\"clip\"+s.uid,c=l.selectAll(\"#\"+u).data(s.connectgaps?[]:[0]);if(c.enter().append(\"clipPath\").classed(\"contourclip\",!0).attr(\"id\",u),c.exit().remove(),!1===s.connectgaps){var p={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};f([p]),h([p]),v([p],{type:\"levels\"}),i.ensureSingle(c,\"path\",\"\").attr(\"d\",(p.prefixBoundary?\"M\"+o.join(\"L\")+\"Z\":\"\")+m(p,o))}else u=null;a.setClipUrl(t,u,r)}(s,r,t,y,P)}))},e.createLines=function(t,e,r,n){var i=r[0].smoothing,o=t.selectAll(\"g.contourlevel\").data(e?r:[]);if(o.exit().remove(),o.enter().append(\"g\").classed(\"contourlevel\",!0),e){var s=o.selectAll(\"path.openline\").data((function(t){return t.pedgepaths||t.edgepaths}));s.exit().remove(),s.enter().append(\"path\").classed(\"openline\",!0),s.attr(\"d\",(function(t){return a.smoothopen(t,i)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",n?\"none\":\"non-scaling-stroke\");var l=o.selectAll(\"path.closedline\").data((function(t){return t.ppaths||t.paths}));l.exit().remove(),l.enter().append(\"path\").classed(\"closedline\",!0),l.attr(\"d\",(function(t){return a.smoothclosed(t,i)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",n?\"none\":\"non-scaling-stroke\")}return o},e.createLineClip=function(t,e,r,n){var i=e?\"clipline\"+n:null,o=r._fullLayout._clips.selectAll(\"#\"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append(\"clipPath\").classed(\"contourlineclip\",!0).attr(\"id\",i),a.setClipUrl(t,i,r),o},e.labelFormatter=function(t,e){var r=t._fullLayout,n=e.trace,i=n.contours,a={type:\"linear\",_id:\"ycontour\",showexponent:\"all\",exponentformat:\"B\"};if(i.labelformat)a.tickformat=i.labelformat,u(a,r);else{var s=o.extractOpts(n);if(s&&s.colorbar&&s.colorbar._axis)a=s.colorbar._axis;else{if(\"constraint\"===i.type){var c=i.value;Array.isArray(c)?a.range=[c[0],c[c.length-1]]:a.range=[c,c]}else a.range=[i.start,i.end],a.nticks=(i.end-i.start)/i.size;a.range[0]===a.range[1]&&(a.range[1]+=a.range[0]||1),a.nticks||(a.nticks=1e3),u(a,r),l.prepTicks(a),a._tmin=null,a._tmax=null}}return function(t){return l.tickText(a,t).text}},e.calcTextOpts=function(t,e,r,n){var i=e(t);r.text(i).call(s.convertToTspans,n);var o=r.node(),l=a.bBox(o,!0);return{text:i,width:l.width,height:l.height,fontSize:+o.style[\"font-size\"].replace(\"px\",\"\"),level:t,dy:(l.top+l.bottom)/2}},e.findBestTextLocation=function(t,e,r,n,a){var o,s,l,u,c,f=r.width;e.isClosed?(s=e.len/y.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-f)/(y.INITIALSEARCHPOINTS+1),o=e.min+s+f/2,l=e.max-(s+f)/2);for(var h=1/0,p=0;p<y.ITERATIONS;p++){for(var d=o;d<l;d+=s){var v=i.getTextLocation(t,e.total,d,f),g=x(v,r,n,a);g<h&&(h=g,c=v,u=d)}if(h>2*y.MAXCOST)break;p&&(s/=2),l=(o=u-s/2)+1.5*s}if(h<=y.MAXCOST)return c},e.addLabelData=function(t,e,r,n){var i=e.fontSize,a=e.width+i/3,o=Math.max(0,e.height-i/3),s=t.x,l=t.y,u=t.theta,c=Math.sin(u),f=Math.cos(u),h=function(t,e){return[s+t*f-e*c,l+t*c+e*f]},p=[h(-a/2,-o/2),h(-a/2,o/2),h(a/2,o/2),h(a/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:u,level:e.level,width:a,height:o}),n.push(p)},e.drawLabels=function(t,e,r,a,o){var l=t.selectAll(\"text\").data(e,(function(t){return t.text+\",\"+t.x+\",\"+t.y+\",\"+t.theta}));if(l.exit().remove(),l.enter().append(\"text\").attr({\"data-notex\":1,\"text-anchor\":\"middle\"}).each((function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:\"rotate(\"+180*t.theta/Math.PI+\" \"+e+\" \"+i+\")\"}).call(s.convertToTspans,r)})),o){for(var u=\"\",c=0;c<o.length;c++)u+=\"M\"+o[c].join(\"L\")+\"Z\";i.ensureSingle(a,\"path\",\"\").attr(\"d\",u)}}},18670:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828);function a(t,e,r){var i={type:\"linear\",range:[t,e]};return n.autoTicks(i,(e-t)/(r||15)),i}t.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=i.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=i.aggNums(Math.max,null,e));var l=a(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if(\"constraint\"!==r.type){var u,c=r.start,f=r.end,h=t._input.contours;c>f&&(r.start=h.start=f,f=r.end=h.end=c,c=r.start),r.size>0||(u=c===f?1:a(c,f,t.ncontours).dtick,h.size=r.size=u)}}},84426:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(70035),o=r(86068);t.exports=function(t){var e=n.select(t).selectAll(\"g.contour\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,u=a.start,c=\"constraint\"===a.type,f=!c&&\"lines\"===a.coloring,h=!c&&\"fill\"===a.coloring,p=f||h?o(r):null;e.selectAll(\"g.contourlevel\").each((function(t){n.select(this).selectAll(\"path\").call(i.lineGroupStyle,s.width,f?p(t.level):s.color,s.dash)}));var d=a.labelfont;if(e.selectAll(\"g.contourlabels text\").each((function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(f?p(t.level):s.color)})})),c)e.selectAll(\"g.contourfill path\").style(\"fill\",r.fillcolor);else if(h){var v;e.selectAll(\"g.contourfill path\").style(\"fill\",(function(t){return void 0===v&&(v=t.level),p(t.level+.5*l)})),void 0===v&&(v=u),e.selectAll(\"g.contourbg path\").style(\"fill\",p(v-.5*l))}})),a(t)}},8724:function(t,e,r){\"use strict\";var n=r(1586),i=r(14523);t.exports=function(t,e,r,a,o){var s,l=r(\"contours.coloring\"),u=\"\";\"fill\"===l&&(s=r(\"contours.showlines\")),!1!==s&&(\"lines\"!==l&&(u=r(\"line.color\",\"#000\")),r(\"line.width\",.5),r(\"line.dash\")),\"none\"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:\"\",cLetter:\"z\"})),r(\"line.smoothing\"),i(r,a,u,o)}},88085:function(t,e,r){\"use strict\";var n=r(21606),i=r(70600),a=r(50693),o=r(1426).extendFlat,s=i.contours;t.exports=o({carpet:{valType:\"string\",editType:\"calc\"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:\"enumerated\",values:[\"fill\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},transforms:void 0},a(\"\",{cLetter:\"z\",autoColorDflt:!1}))},59885:function(t,e,r){\"use strict\";var n=r(78803),i=r(71828),a=r(68296),o=r(4742),s=r(824),l=r(43907),u=r(70769),c=r(75005),f=r(22882),h=r(18670);t.exports=function(t,e){var r=e._carpetTrace=f(t,e);if(r&&r.visible&&\"legendonly\"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),c(d,e,e._defaultColor,t._fullLayout)}var v=function(t,e){var r,c,f,h,p,d,v,g=e._carpetTrace,y=g.aaxis,m=g.baxis;y._minDtick=0,m._minDtick=0,i.isArray1D(e.z)&&a(e,y,m,\"a\",\"b\",[\"z\"]),r=e._a=e._a||e.a,h=e._b=e._b||e.b,r=r?y.makeCalcdata(e,\"_a\"):[],h=h?m.makeCalcdata(e,\"_b\"):[],c=e.a0||0,f=e.da||1,p=e.b0||0,d=e.db||1,v=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(v),s(v,e._emptypoints);var x=i.maxRowLength(v),b=\"scaled\"===e.xtype?\"\":r,_=u(e,b,c,f,x,y),w=\"scaled\"===e.ytype?\"\":h,T={a:_,b:u(e,w,p,d,v.length,m),z:v};return\"levels\"===e.contours.type&&\"none\"!==e.contours.coloring&&n(t,e,{vals:v,containerStr:\"\",cLetter:\"z\"}),[T]}(t,e);return h(e,e._z),v}}},75005:function(t,e,r){\"use strict\";var n=r(71828),i=r(67684),a=r(88085),o=r(83179),s=r(67217),l=r(8724);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,a,r,i)}if(c(\"carpet\"),t.a&&t.b){if(!i(t,e,c,u,\"a\",\"b\"))return void(e.visible=!1);c(\"text\"),\"constraint\"===c(\"contours.type\")?o(t,e,c,u,r,{hasHover:!1}):(s(t,e,c,(function(r){return n.coerce2(t,e,a,r)})),l(t,e,c,u,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},93740:function(t,e,r){\"use strict\";t.exports={attributes:r(88085),supplyDefaults:r(75005),colorbar:r(90654),calc:r(59885),plot:r(51048),style:r(84426),moduleType:\"trace\",name:\"contourcarpet\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"carpet\",\"contour\",\"symbols\",\"showLegend\",\"hasLines\",\"carpetDependent\",\"noHover\",\"noSortingByValue\"],meta:{}}},51048:function(t,e,r){\"use strict\";var n=r(39898),i=r(27669),a=r(67961),o=r(91424),s=r(71828),l=r(87678),u=r(81696),c=r(29854),f=r(36914),h=r(84857),p=r(87558),d=r(20083),v=r(22882),g=r(4536);function y(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function m(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}t.exports=function(t,e,r,b){var _=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,r,\"contour\").each((function(r){var b=n.select(this),T=r[0],k=T.trace,A=k._carpetTrace=v(t,k),M=t.calcdata[A.index][0];if(A.visible&&\"legendonly\"!==A.visible){var S=T.a,E=T.b,L=k.contours,C=p(L,e,T),P=\"constraint\"===L.type,O=L._operation,I=P?\"=\"===O?\"lines\":\"fill\":L.coloring,D=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var z=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);u(C,z,R);var F,B,N,j,U=C;\"constraint\"===L.type&&(U=h(C,O)),function(t,e){var r,n,i,a,o,s,l,u,c;for(r=0;r<t.length;r++){for(o=(a=t[r]).pedgepaths=[],s=a.ppaths=[],n=0;n<a.edgepaths.length;n++){for(c=a.edgepaths[n],l=[],i=0;i<c.length;i++)l[i]=e(c[i]);o.push(l)}for(n=0;n<a.paths.length;n++){for(c=a.paths[n],u=[],i=0;i<c.length;i++)u[i]=e(c[i]);s.push(u)}}}(C,q);var V=[];for(j=M.clipsegments.length-1;j>=0;j--)F=M.clipsegments[j],B=i([],F.x,_.c2p),N=i([],F.y,w.c2p),B.reverse(),N.reverse(),V.push(a(B,N,F.bicubic));var H=\"M\"+V.join(\"L\")+\"Z\";!function(t,e,r,n,o,l){var u,c,f,h,p=s.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"!==l||o?[]:[0]);p.enter().append(\"path\"),p.exit().remove();var d=[];for(h=0;h<e.length;h++)u=e[h],c=i([],u.x,r.c2p),f=i([],u.y,n.c2p),d.push(a(c,f,u.bicubic));p.attr(\"d\",\"M\"+d.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}(b,M.clipsegments,_,w,P,I),function(t,e,r,i,a,l,u,c,f,h,p){var v=\"fill\"===h;v&&d(a,t.contours);var y=s.ensureSingle(e,\"g\",\"contourfill\").selectAll(\"path\").data(v?a:[]);y.enter().append(\"path\"),y.exit().remove(),y.each((function(t){var e=(t.prefixBoundary?p:\"\")+function(t,e,r,n,i,a,l,u){var c,f,h,p,d,v,y,m=\"\",x=e.edgepaths.map((function(t,e){return e})),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function T(t){return Math.abs(t[1]-r[0][1])<w}function k(t){return Math.abs(t[1]-r[2][1])<w}function A(t){return Math.abs(t[0]-r[0][0])<_}function M(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,o,s,c=\"\";for(T(t)&&!M(t)||k(t)&&!A(t)?(s=i.aaxis,o=g(i,a,[t[0],e[0]],.5*(t[1]+e[1]))):(s=i.baxis,o=g(i,a,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<o.length;r++)for(c+=s.smoothing?\"C\":\"L\",n=0;n<o[r].length;n++){var f=o[r][n];c+=[l.c2p(f[0]),u.c2p(f[1])]+\" \"}return c}for(c=0,f=null;x.length;){var E=e.edgepaths[c][0];for(f&&(m+=S(f,E)),y=o.smoothopen(e.edgepaths[c].map(n),e.smoothing),m+=b?y:y.replace(/^M/,\"L\"),x.splice(x.indexOf(c),1),f=e.edgepaths[c][e.edgepaths[c].length-1],d=-1,p=0;p<4;p++){if(!f){s.log(\"Missing end?\",c,e);break}for(T(f)&&!M(f)?h=r[1]:A(f)?h=r[0]:k(f)?h=r[3]:M(f)&&(h=r[2]),v=0;v<e.edgepaths.length;v++){var L=e.edgepaths[v][0];Math.abs(f[0]-h[0])<_?Math.abs(f[0]-L[0])<_&&(L[1]-f[1])*(h[1]-L[1])>=0&&(h=L,d=v):Math.abs(f[1]-h[1])<w?Math.abs(f[1]-L[1])<w&&(L[0]-f[0])*(h[0]-L[0])>=0&&(h=L,d=v):s.log(\"endpt to newendpt is not vert. or horz.\",f,h,L)}if(d>=0)break;m+=S(f,h),f=h}if(d===e.edgepaths.length){s.log(\"unclosed perimeter path\");break}c=d,(b=-1===x.indexOf(c))&&(c=x[0],m+=S(f,h)+\"Z\",f=null)}for(c=0;c<e.paths.length;c++)m+=o.smoothclosed(e.paths[c].map(n),e.smoothing);return m}(0,t,l,u,c,f,r,i);e?n.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):n.select(this).remove()}))}(k,b,_,w,U,D,q,A,M,I,H),function(t,e,r,i,a,l,u){var h=r._context.staticPlot,p=s.ensureSingle(t,\"g\",\"contourlines\"),d=!1!==a.showlines,v=a.showlabels,g=d&&v,b=c.createLines(p,d||v,e,h),_=c.createLineClip(p,g,r,i.trace.uid),w=t.selectAll(\"g.contourlabels\").data(v?[0]:[]);if(w.exit().remove(),w.enter().append(\"g\").classed(\"contourlabels\",!0),v){var T=l.xaxis,k=l.yaxis,A=T._length,M=k._length,S=[[[0,0],[A,0],[A,M],[0,M]]],E=[];s.clearLocationCache();var L=c.labelFormatter(r,i),C=o.tester.append(\"text\").attr(\"data-notex\",1).call(o.font,a.labelfont),P={left:0,right:A,center:A/2,top:0,bottom:M,middle:M/2},O=Math.sqrt(A*A+M*M),I=f.LABELDISTANCE*O/Math.max(1,e.length/f.LABELINCREASE);b.each((function(t){var e=c.calcTextOpts(t.level,L,C,r);n.select(this).selectAll(\"path\").each((function(r){var n=this,i=s.getVisibleSegment(n,P,e.height/2);if(i&&(function(t,e,r,n,i,a){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(o){var l=i.a[0],u=i.a[i.a.length-1],c=i.b[0],f=i.b[i.b.length-1],h=y(t,0,1),p=y(t,n.total,n.total-1),d=g(o[0],h),v=n.total-g(o[o.length-1],p);n.min<d&&(n.min=d),n.max>v&&(n.max=v),n.len=n.max-n.min}function g(t,e){var r,n=0,o=.1;return(Math.abs(t[0]-l)<o||Math.abs(t[0]-u)<o)&&(r=m(i.dxydb_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),(Math.abs(t[1]-c)<o||Math.abs(t[1]-f)<o)&&(r=m(i.dxyda_rough(t[0],t[1],o)),n=Math.max(n,a*x(e,r)/2)),n}}(n,r,t,i,u,e.height),!(i.len<(e.width+e.height)*f.LABELMIN)))for(var a=Math.min(Math.ceil(i.len/I),f.LABELMAX),o=0;o<a;o++){var l=c.findBestTextLocation(n,i,e,E,P);if(!l)break;c.addLabelData(l,e,E,S)}}))})),C.remove(),c.drawLabels(w,E,r,_,g?S:null)}v&&!d&&b.remove()}(b,C,t,T,L,e,A),o.setClipUrl(b,A._clipPathId,t)}function q(t){var e=A.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}}))}},64096:function(t,e,r){\"use strict\";var n=r(50693),i=r(5386).fF,a=r(9012),o=r(99181),s=r(1426).extendFlat;t.exports=s({lon:o.lon,lat:o.lat,z:{valType:\"data_array\",editType:\"calc\"},radius:{valType:\"number\",editType:\"plot\",arrayOk:!0,min:1,dflt:30},below:{valType:\"string\",editType:\"plot\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\"lon\",\"lat\",\"z\",\"text\",\"name\"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},n(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},85070:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828).isArrayOrTypedArray,a=r(50606).BADNUM,o=r(78803),s=r(71828)._;t.exports=function(t,e){for(var r=e._length,l=new Array(r),u=e.z,c=i(u)&&u.length,f=0;f<r;f++){var h=l[f]={},p=e.lon[f],d=e.lat[f];if(h.lonlat=n(p)&&n(d)?[+p,+d]:[a,a],c){var v=u[f];h.z=n(v)?v:a}}return o(t,e,{vals:c?u:[0,1],containerStr:\"\",cLetter:\"z\"}),r&&(l[0].t={labels:{lat:s(t,\"lat:\")+\" \",lon:s(t,\"lon:\")+\" \"}}),l}},52414:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(7901),o=r(21081),s=r(50606).BADNUM,l=r(18214).makeBlank;t.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,u=e._opts={heatmap:{layout:{visibility:\"none\"},paint:{}},geojson:l()};if(!r)return u;var c,f=[],h=e.z,p=e.radius,d=i.isArrayOrTypedArray(h)&&h.length,v=i.isArrayOrTypedArray(p);for(c=0;c<t.length;c++){var g=t[c],y=g.lonlat;if(y[0]!==s){var m={};if(d){var x=g.z;m.z=x!==s?x:0}v&&(m.r=n(p[c])&&p[c]>0?+p[c]:0),f.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:y},properties:m})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],T=[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(c=1;c<_.length;c++)T.push(_[c][0],_[c][1]);var k=[\"interpolate\",[\"linear\"],[\"get\",\"z\"],b.min,0,b.max,1];return i.extendFlat(u.heatmap.paint,{\"heatmap-weight\":d?k:1/(b.max-b.min),\"heatmap-color\":T,\"heatmap-radius\":v?{type:\"identity\",property:\"r\"}:e.radius,\"heatmap-opacity\":e.opacity}),u.geojson={type:\"FeatureCollection\",features:f},u.heatmap.layout.visibility=\"visible\",u}},79429:function(t,e,r){\"use strict\";var n=r(71828),i=r(1586),a=r(64096);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\"lon\")||[],u=s(\"lat\")||[],c=Math.min(l.length,u.length);c?(e._length=c,s(\"z\"),s(\"radius\"),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},62474:function(t){\"use strict\";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},84684:function(t,e,r){\"use strict\";var n=r(89298),i=r(28178).hoverPoints,a=r(28178).getExtraText;t.exports=function(t,e,r){var o=i(t,e,r);if(o){var s=o[0],l=s.cd,u=l[0].trace,c=l[s.index];if(delete s.color,\"z\"in c){var f=s.subplot.mockAxis;s.z=c.z,s.zLabel=n.tickText(f,f.c2l(c.z),\"hover\").text}return s.extraText=a(u,c,l[0].t.labels),[s]}}},93814:function(t,e,r){\"use strict\";t.exports={attributes:r(64096),supplyDefaults:r(79429),colorbar:r(61243),formatLabels:r(15636),calc:r(85070),plot:r(7336),hoverPoints:r(84684),eventData:r(62474),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var i=r[n],a=i.id;if(\"symbol\"===i.type&&\"string\"==typeof a&&-1===a.indexOf(\"plotly-\"))return a}},moduleType:\"trace\",name:\"densitymapbox\",basePlotModule:r(50101),categories:[\"mapbox\",\"gl\",\"showLegend\"],meta:{hr_name:\"density_mapbox\"}}},7336:function(t,e,r){\"use strict\";var n=r(52414),i=r(77734).traceLayerPrefix;function a(t,e){this.type=\"densitymapbox\",this.subplot=t,this.uid=e,this.sourceId=\"source-\"+e,this.layerList=[[\"heatmap\",i+e+\"-heatmap\"]],this.below=null}var o=a.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,i=n(t),a=e.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!==this.below&&(this._removeLayers(),this._addLayers(i,a),this.below=a);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],u=s[1],c=i[l];e.setOptions(u,\"setLayoutProperty\",c.layout),\"visible\"===c.layout.visibility&&e.setOptions(u,\"setPaintProperty\",c.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(o,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),i}},49789:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.hovertext,t,\"htx\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\"mo\"),n.mergeArray(i.color,t,\"mc\");var a=i.line;a&&(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},1285:function(t,e,r){\"use strict\";var n,i=r(1486),a=r(82196).line,o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(18517),f=r(1426).extendFlat,h=r(7901);t.exports={x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s(\"x\"),yhoverformat:s(\"y\"),hovertext:i.hovertext,hovertemplate:l({},{keys:c.eventDataKeys}),hoverinfo:f({},o.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"percent initial\",\"percent previous\",\"percent total\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"percent initial\",\"percent previous\",\"percent total\",\"value\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:u({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),text:i.text,textposition:i.textposition,insidetextanchor:f({},i.insidetextanchor,{dflt:\"middle\"}),textangle:f({},i.textangle,{dflt:0}),textfont:i.textfont,insidetextfont:i.insidetextfont,outsidetextfont:i.outsidetextfont,constraintext:i.constraintext,cliponaxis:i.cliponaxis,orientation:f({},i.orientation,{}),offset:f({},i.offset,{arrayOk:!1}),width:f({},i.width,{arrayOk:!1}),marker:(n=f({},i.marker),delete n.pattern,n),connector:{fillcolor:{valType:\"color\",editType:\"style\"},line:{color:f({},a.color,{dflt:h.defaultLine}),width:f({},a.width,{dflt:0,editType:\"plot\"}),dash:a.dash,editType:\"style\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup}},9532:function(t,e,r){\"use strict\";var n=r(89298),i=r(42973),a=r(49789),o=r(66279),s=r(50606).BADNUM;function l(t){return t===s?0:t}t.exports=function(t,e){var r,u,c,f,h,p,d,v,g=n.getFromId(t,e.xaxis||\"x\"),y=n.getFromId(t,e.yaxis||\"y\");\"h\"===e.orientation?(r=g.makeCalcdata(e,\"x\"),c=y.makeCalcdata(e,\"y\"),f=i(e,y,\"y\",c),h=!!e.yperiodalignment,p=\"y\"):(r=y.makeCalcdata(e,\"y\"),c=g.makeCalcdata(e,\"x\"),f=i(e,g,\"x\",c),h=!!e.xperiodalignment,p=\"x\"),u=f.vals;var m,x=Math.min(u.length,r.length),b=new Array(x);for(e._base=[],d=0;d<x;d++){r[d]<0&&(r[d]=s);var _=!1;r[d]!==s&&d+1<x&&r[d+1]!==s&&(_=!0),v=b[d]={p:u[d],s:r[d],cNext:_},e._base[d]=-.5*v.s,h&&(b[d].orig_p=c[d],b[d][p+\"End\"]=f.ends[d],b[d][p+\"Start\"]=f.starts[d]),e.ids&&(v.id=String(e.ids[d])),0===d&&(b[0].vTotal=0),b[0].vTotal+=l(v.s),v.begR=l(v.s)/l(b[0].s)}for(d=0;d<x;d++)(v=b[d]).s!==s&&(v.sumR=v.s/b[0].vTotal,v.difR=void 0!==m?v.s/m:1,m=v.s);return a(b,e),o(b,e),b}},18517:function(t){\"use strict\";t.exports={eventDataKeys:[\"percentInitial\",\"percentPrevious\",\"percentTotal\"]}},8984:function(t,e,r){\"use strict\";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i],d=\"h\"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&\"funnel\"===p.type&&(r=s[i],d?h.push(r):f.push(r),c.push(r))}var v={mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(n(t,l,u,f,v),n(t,u,l,h,v),i=0;i<c.length;i++){r=c[i];for(var g=0;g<r.length;g++)g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0,r[g].nextP1=r[g+1].p1,r[g].nextS1=r[g+1].s1)}}},26199:function(t,e,r){\"use strict\";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(1285),u=r(7901);t.exports={supplyDefaults:function(t,e,r,i){function c(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,c)){s(t,e,i,c),c(\"xhoverformat\"),c(\"yhoverformat\"),c(\"orientation\",e.y&&!e.x?\"v\":\"h\"),c(\"offset\"),c(\"width\");var f=c(\"text\");c(\"hovertext\"),c(\"hovertemplate\");var h=c(\"textposition\");a(t,e,i,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"===e.textposition||e.texttemplate||c(\"textinfo\",Array.isArray(f)?\"text+value\":\"value\");var p=c(\"marker.color\",r);c(\"marker.line.color\",u.defaultLine),c(\"marker.line.width\"),c(\"connector.visible\")&&(c(\"connector.fillcolor\",function(t){var e=n.isArrayOrTypedArray(t)?\"#000\":t;return u.addOpacity(e,.5*u.opacity(e))}(p)),c(\"connector.line.width\")&&(c(\"connector.line.color\"),c(\"connector.line.dash\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\"group\"===e.funnelmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},34598:function(t){\"use strict\";t.exports=function(t,e){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"percentInitial\"in e&&(t.percentInitial=e.percentInitial),\"percentPrevious\"in e&&(t.percentPrevious=e.percentPrevious),\"percentTotal\"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},63341:function(t,e,r){\"use strict\";var n=r(7901).opacity,i=r(95423).hoverOnBars,a=r(71828).formatPercent;t.exports=function(t,e,r,o,s){var l=i(t,e,r,o,s);if(l){var u=l.cd,c=u[0].trace,f=\"h\"===c.orientation,h=u[l.index];l[(f?\"x\":\"y\")+\"LabelVal\"]=h.s,l.percentInitial=h.begR,l.percentInitialLabel=a(h.begR,1),l.percentPrevious=h.difR,l.percentPreviousLabel=a(h.difR,1),l.percentTotal=h.sumR,l.percentTotalLabel=a(h.sumR,1);var p=h.hi||c.hoverinfo,d=[];if(p&&\"none\"!==p&&\"skip\"!==p){var v=\"all\"===p,g=p.split(\"+\"),y=function(t){return v||-1!==g.indexOf(t)};y(\"percent initial\")&&d.push(l.percentInitialLabel+\" of initial\"),y(\"percent previous\")&&d.push(l.percentPreviousLabel+\" of previous\"),y(\"percent total\")&&d.push(l.percentTotalLabel+\" of total\")}return l.extraText=d.join(\"<br>\"),l.color=function(t,e){var r=t.marker,i=e.mc||r.color,a=e.mlc||r.line.color,o=e.mlw||r.line.width;return n(i)?i:n(a)&&o?a:void 0}(c,h),[l]}}},51759:function(t,e,r){\"use strict\";t.exports={attributes:r(1285),layoutAttributes:r(10440),supplyDefaults:r(26199).supplyDefaults,crossTraceDefaults:r(26199).crossTraceDefaults,supplyLayoutDefaults:r(93138),calc:r(9532),crossTraceCalc:r(8984),plot:r(80461),style:r(68266).style,hoverPoints:r(63341),eventData:r(34598),selectPoints:r(81974),moduleType:\"trace\",name:\"funnel\",basePlotModule:r(93612),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},10440:function(t){\"use strict\";t.exports={funnelmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},funnelgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},funnelgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},93138:function(t,e,r){\"use strict\";var n=r(71828),i=r(10440);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\"funnel\"===l.type){a=!0;break}}a&&(o(\"funnelmode\"),o(\"funnelgap\",.2),o(\"funnelgroupgap\"))}},80461:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;function u(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),i[3]=o.c2p(t.nextS1,!0),a[3]=s.c2p(t.nextP1,!0),n?[i,a]:[a,i]}t.exports=function(t,e,r,c){var f=t._fullLayout;l(\"funnel\",f),function(t,e,r,s){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(s,r,\"trace bars\").each((function(r){var s=n.select(this),f=r[0].trace,h=i.ensureSingle(s,\"g\",\"regions\");if(f.connector&&f.connector.visible){var p=\"h\"===f.orientation,d=h.selectAll(\"g.region\").data(i.identity);d.enter().append(\"g\").classed(\"region\",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var f=u(r,l,c,p),h=f[0],d=f[1],g=\"\";h[0]!==o&&d[0]!==o&&h[1]!==o&&d[1]!==o&&h[2]!==o&&d[2]!==o&&h[3]!==o&&d[3]!==o&&(g+=p?\"M\"+h[0]+\",\"+d[1]+\"L\"+h[2]+\",\"+d[2]+\"H\"+h[3]+\"L\"+h[1]+\",\"+d[1]+\"Z\":\"M\"+h[1]+\",\"+d[1]+\"L\"+h[2]+\",\"+d[3]+\"V\"+d[2]+\"L\"+h[1]+\",\"+d[0]+\"Z\"),\"\"===g&&(g=\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,r,c),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;i.makeTraceGroups(o,r,\"trace bars\").each((function(r){var o=n.select(this),c=r[0].trace,f=i.ensureSingle(o,\"g\",\"lines\");if(c.connector&&c.connector.visible&&c.connector.line.width){var h=\"h\"===c.orientation,p=f.selectAll(\"g.line\").data(i.identity);p.enter().append(\"g\").classed(\"line\",!0),p.exit().remove();var d=p.size();p.each((function(r,o){if(o===d-1||r.cNext){var c=u(r,s,l,h),f=c[0],p=c[1],v=\"\";void 0!==f[3]&&void 0!==p[3]&&(h?(v+=\"M\"+f[0]+\",\"+p[1]+\"L\"+f[2]+\",\"+p[2],v+=\"M\"+f[1]+\",\"+p[1]+\"L\"+f[3]+\",\"+p[2]):(v+=\"M\"+f[1]+\",\"+p[1]+\"L\"+f[2]+\",\"+p[3],v+=\"M\"+f[1]+\",\"+p[0]+\"L\"+f[2]+\",\"+p[2])),\"\"===v&&(v=\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",v).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,c),s.plot(t,e,r,c,{mode:f.funnelmode,norm:f.funnelmode,gap:f.funnelgap,groupgap:f.funnelgroupgap})}},68266:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll(\"g.funnellayer\").selectAll(\"g.trace\");l(t,s,\"funnel\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(\".point > path\").each((function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\"opacity\",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(\".regions\").each((function(){n.select(this).selectAll(\"path\").style(\"stroke-width\",0).call(a.fill,s.connector.fillcolor)})),r.selectAll(\".lines\").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},86807:function(t,e,r){\"use strict\";var n=r(34e3),i=r(9012),a=r(27670).Y,o=r(5386).fF,s=r(5386).si,l=r(1426).extendFlat;t.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:\"calc\"},pattern:n.marker.pattern,editType:\"calc\"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:[\"label\",\"text\",\"value\",\"percent\"]}),texttemplate:s({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),hoverinfo:l({},i.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:o({},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),textposition:l({},n.textposition,{values:[\"inside\",\"none\"],dflt:\"inside\"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:[\"top left\",\"top center\",\"top right\"],dflt:\"top center\"}),editType:\"plot\"},domain:a({name:\"funnelarea\",trace:!0,editType:\"calc\"}),aspectratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},baseratio:{valType:\"number\",min:0,max:1,dflt:.333,editType:\"plot\"}}},6452:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"funnelarea\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},89574:function(t,e,r){\"use strict\";var n=r(32354);t.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:\"funnelarea\"})}}},86282:function(t,e,r){\"use strict\";var n=r(71828),i=r(86807),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleLabelsAndValues,l=r(37434).handleMarkerDefaults;t.exports=function(t,e,r,u){function c(r,a){return n.coerce(t,e,i,r,a)}var f=c(\"labels\"),h=c(\"values\"),p=s(f,h),d=p.len;if(e._hasLabels=p.hasLabels,e._hasValues=p.hasValues,!e._hasLabels&&e._hasValues&&(c(\"label0\"),c(\"dlabel\")),d){e._length=d,l(t,e,u,c),c(\"scalegroup\");var v,g=c(\"text\"),y=c(\"texttemplate\");if(y||(v=c(\"textinfo\",Array.isArray(g)?\"text+percent\":\"percent\")),c(\"hovertext\"),c(\"hovertemplate\"),y||v&&\"none\"!==v){var m=c(\"textposition\");o(t,e,u,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,u,c),c(\"title.text\")&&(c(\"title.position\"),n.coerceFont(c,\"title.font\",u.font)),c(\"aspectratio\"),c(\"baseratio\")}else e.visible=!1}},10421:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"funnelarea\",basePlotModule:r(6452),categories:[\"pie-like\",\"funnelarea\",\"showLegend\"],attributes:r(86807),layoutAttributes:r(80097),supplyDefaults:r(86282),supplyLayoutDefaults:r(57402),calc:r(89574).calc,crossTraceCalc:r(89574).crossTraceCalc,plot:r(79187),style:r(71858),styleOne:r(63463),meta:{}}},80097:function(t,e,r){\"use strict\";var n=r(92774).hiddenlabels;t.exports={hiddenlabels:n,funnelareacolorway:{valType:\"colorlist\",editType:\"calc\"},extendfunnelareacolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},57402:function(t,e,r){\"use strict\";var n=r(71828),i=r(80097);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"hiddenlabels\"),r(\"funnelareacolorway\",e.colorway),r(\"extendfunnelareacolors\")}},79187:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(71828),o=a.strScale,s=a.strTranslate,l=r(63893),u=r(17295).toMoveInsideBar,c=r(72597),f=c.recordMinTextSize,h=c.clearMinTextSize,p=r(53581),d=r(14575),v=d.attachFxHandlers,g=d.determineInsideTextFont,y=d.layoutAreas,m=d.prerenderTitles,x=d.positionTitleOutside,b=d.formatSliceLabel;function _(t,e){return\"l\"+(e[0]-t[0])+\",\"+(e[1]-t[1])}t.exports=function(t,e){var r=t._context.staticPlot,c=t._fullLayout;h(\"funnelarea\",c),m(e,t),y(e,c._size),a.makeTraceGroups(c._funnelarealayer,e,\"trace\").each((function(e){var h=n.select(this),d=e[0],y=d.trace;!function(t){if(t.length){var e=t[0],r=e.trace,n=r.aspectratio,i=r.baseratio;i>.999&&(i=.999);var a,o,s,l=Math.pow(i,2),u=e.vTotal,c=u,f=u*l/(1-l)/u,h=[];for(h.push(E()),o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var p=s.v/c;f+=p,h.push(E())}var d=1/0,v=-1/0;for(o=0;o<h.length;o++)a=h[o],d=Math.min(d,a[1]),v=Math.max(v,a[1]);for(o=0;o<h.length;o++)h[o][1]-=(v+d)/2;var g=h[h.length-1][0],y=e.r,m=(v-d)/2,x=y/g,b=y/m*n;for(e.r=b*m,o=0;o<h.length;o++)h[o][0]*=x,h[o][1]*=b;var _,w,T=[-(a=h[0])[0],a[1]],k=[a[0],a[1]],A=0;for(o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var M=h[A+=1][0],S=h[A][1];s.TL=[-M,S],s.TR=[M,S],s.BL=T,s.BR=k,s.pxmid=(_=s.TR,w=s.BR,[.5*(_[0]+w[0]),.5*(_[1]+w[1])]),T=s.TL,k=s.TR}}function E(){var t,e={x:t=Math.sqrt(f),y:-t};return[e.x,e.y]}}(e),h.each((function(){var h=n.select(this).selectAll(\"g.slice\").data(e);h.enter().append(\"g\").classed(\"slice\",!0),h.exit().remove(),h.each((function(o,s){if(o.hidden)n.select(this).selectAll(\"path,g\").remove();else{o.pointNumber=o.i,o.curveNumber=y.index;var h=d.cx,m=d.cy,x=n.select(this),w=x.selectAll(\"path.surface\").data([o]);w.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":r?\"none\":\"all\"}),x.call(v,t,e);var T=\"M\"+(h+o.TR[0])+\",\"+(m+o.TR[1])+_(o.TR,o.BR)+_(o.BR,o.BL)+_(o.BL,o.TL)+\"Z\";w.attr(\"d\",T),b(t,o,d);var k=p.castOption(y.textposition,o.pts),A=x.selectAll(\"g.slicetext\").data(o.text&&\"none\"!==k?[0]:[]);A.enter().append(\"g\").classed(\"slicetext\",!0),A.exit().remove(),A.each((function(){var r=a.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),p=a.ensureUniformFontSize(t,g(y,o,c.font));r.text(o.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,p).call(l.convertToTspans,t);var d,v,x,b=i.bBox(r.node()),_=Math.min(o.BL[1],o.BR[1])+m,w=Math.max(o.TL[1],o.TR[1])+m;v=Math.max(o.TL[0],o.BL[0])+h,x=Math.min(o.TR[0],o.BR[0])+h,(d=u(v,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:\"middle\"})).fontSize=p.size,f(y.type,d,c),e[s].transform=d,a.setTransormAndDisplay(r,d)}))}}));var m=n.select(this).selectAll(\"g.titletext\").data(y.title.text?[0]:[]);m.enter().append(\"g\").classed(\"titletext\",!0),m.exit().remove(),m.each((function(){var e=a.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),r=y.title.text;y._meta&&(r=a.templateString(r,y._meta)),e.text(r).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,y.title.font).call(l.convertToTspans,t);var u=x(d,c._size);e.attr(\"transform\",s(u.x,u.y)+o(Math.min(1,u.scale))+s(u.tx,u.ty))}))}))}))}},71858:function(t,e,r){\"use strict\";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(\".trace\");a(t,e,\"funnelarea\"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(\"path.surface\").each((function(e){n.select(this).call(i,e,r,t)}))}))}},21606:function(t,e,r){\"use strict\";var n=r(82196),i=r(9012),a=r(41940),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(50693),c=r(1426).extendFlat;t.exports=c({z:{valType:\"data_array\",editType:\"calc\"},x:c({},n.x,{impliedEdits:{xtype:\"array\"}}),x0:c({},n.x0,{impliedEdits:{xtype:\"scaled\"}}),dx:c({},n.dx,{impliedEdits:{xtype:\"scaled\"}}),y:c({},n.y,{impliedEdits:{ytype:\"array\"}}),y0:c({},n.y0,{impliedEdits:{ytype:\"scaled\"}}),dy:c({},n.dy,{impliedEdits:{ytype:\"scaled\"}}),xperiod:c({},n.xperiod,{impliedEdits:{xtype:\"scaled\"}}),yperiod:c({},n.yperiod,{impliedEdits:{ytype:\"scaled\"}}),xperiod0:c({},n.xperiod0,{impliedEdits:{xtype:\"scaled\"}}),yperiod0:c({},n.yperiod0,{impliedEdits:{ytype:\"scaled\"}}),xperiodalignment:c({},n.xperiodalignment,{impliedEdits:{xtype:\"scaled\"}}),yperiodalignment:c({},n.yperiodalignment,{impliedEdits:{ytype:\"scaled\"}}),text:{valType:\"data_array\",editType:\"calc\"},hovertext:{valType:\"data_array\",editType:\"calc\"},transpose:{valType:\"boolean\",dflt:!1,editType:\"calc\"},xtype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},ytype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",\"best\",!1],dflt:!1,editType:\"calc\"},hoverongaps:{valType:\"boolean\",dflt:!0,editType:\"none\"},connectgaps:{valType:\"boolean\",editType:\"calc\"},xgap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},ygap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:s(),texttemplate:l({arrayOk:!1,editType:\"plot\"},{keys:[\"x\",\"y\",\"z\",\"text\"]}),textfont:a({editType:\"plot\",autoSize:!0,autoColor:!0,colorEditType:\"style\"}),showlegend:c({},i.showlegend,{dflt:!1})},{transforms:void 0},u(\"\",{cLetter:\"z\",autoColorDflt:!1}))},90757:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(89298),o=r(42973),s=r(17562),l=r(78803),u=r(68296),c=r(4742),f=r(824),h=r(43907),p=r(70769),d=r(50606).BADNUM;function v(t){for(var e=[],r=t.length,n=0;n<r;n++){var i=t[n];i!==d&&e.push(i)}return e}t.exports=function(t,e){var r,g,y,m,x,b,_,w,T,k,A,M=a.getFromId(t,e.xaxis||\"x\"),S=a.getFromId(t,e.yaxis||\"y\"),E=n.traceIs(e,\"contour\"),L=n.traceIs(e,\"histogram\"),C=n.traceIs(e,\"gl2d\"),P=E?\"best\":e.zsmooth;if(M._minDtick=0,S._minDtick=0,L)m=(A=s(t,e)).orig_x,r=A.x,g=A.x0,y=A.dx,w=A.orig_y,x=A.y,b=A.y0,_=A.dy,T=A.z;else{var O=e.z;i.isArray1D(O)?(u(e,M,S,\"x\",\"y\",[\"z\"]),r=e._x,x=e._y,O=e._z):(m=e.x?M.makeCalcdata(e,\"x\"):[],w=e.y?S.makeCalcdata(e,\"y\"):[],r=o(e,M,\"x\",m).vals,x=o(e,S,\"y\",w).vals,e._x=r,e._y=x),g=e.x0,y=e.dx,b=e.y0,_=e.dy,T=c(O,e,M,S)}function I(t){P=e._input.zsmooth=e.zsmooth=!1,i.warn('cannot use zsmooth: \"fast\": '+t)}function D(t){if(t.length>1){var e=(t[t.length-1]-t[0])/(t.length-1),r=Math.abs(e/100);for(k=0;k<t.length-1;k++)if(Math.abs(t[k+1]-t[k]-e)>r)return!1}return!0}(M.rangebreaks||S.rangebreaks)&&(T=function(t,e,r){for(var n=[],i=-1,a=0;a<r.length;a++)if(e[a]!==d){n[++i]=[];for(var o=0;o<r[a].length;o++)t[o]!==d&&n[i].push(r[a][o])}return n}(r,x,T),L||(r=v(r),x=v(x),e._x=r,e._y=x)),L||!E&&!e.connectgaps||(e._emptypoints=h(T),f(T,e._emptypoints)),e._islinear=!1,\"log\"===M.type||\"log\"===S.type?\"fast\"===P&&I(\"log axis found\"):D(r)?D(x)?e._islinear=!0:\"fast\"===P&&I(\"y scale is not linear\"):\"fast\"===P&&I(\"x scale is not linear\");var z=i.maxRowLength(T),R=\"scaled\"===e.xtype?\"\":r,F=p(e,R,g,y,z,M),B=\"scaled\"===e.ytype?\"\":x,N=p(e,B,b,_,T.length,S);C||(e._extremes[M._id]=a.findExtremes(M,F),e._extremes[S._id]=a.findExtremes(S,N));var j={x:F,y:N,z:T,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(e.xperiodalignment&&m&&(j.orig_x=m),e.yperiodalignment&&w&&(j.orig_y=w),R&&R.length===F.length-1&&(j.xCenter=R),B&&B.length===N.length-1&&(j.yCenter=B),L&&(j.xRanges=A.xRanges,j.yRanges=A.yRanges,j.pts=A.pts),E||l(t,e,{vals:T,cLetter:\"z\"}),E&&e.contours&&\"heatmap\"===e.contours.coloring){var U={type:\"contour\"===e.type?\"heatmap\":\"histogram2d\",xcalendar:e.xcalendar,ycalendar:e.ycalendar};j.xfill=p(U,R,g,y,z,M),j.yfill=p(U,B,b,_,T.length,S)}return[j]}},4742:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(50606).BADNUM;t.exports=function(t,e,r,o){var s,l,u,c,f,h;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,f=0;f<t.length;f++)s=Math.max(s,t[f].length);if(0===s)return!1;u=function(t){return t.length},c=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,u=function(t,e){return t[e].length},c=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===a||r===a?a:c(t,e,r)};function v(t){if(e&&\"carpet\"!==e.type&&\"contourcarpet\"!==e.type&&t&&\"category\"===t.type&&e[\"_\"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e[\"_\"+r+\"CategoryMap\"]||e[r];for(f=0;f<o.length;f++)n[o[f]]=f;return function(e){var r=n[t._categories[e]];return r+1?r:a}}return i.identity}var g=v(r),y=v(o);o&&\"category\"===o.type&&(s=o._categories.length);var m=new Array(s);for(f=0;f<s;f++)for(l=r&&\"category\"===r.type?r._categories.length:u(t,f),m[f]=new Array(l),h=0;h<l;h++)m[f][h]=p(d(t,y(f),g(h)));return m}},61243:function(t){\"use strict\";t.exports={min:\"zmin\",max:\"zmax\"}},68296:function(t,e,r){\"use strict\";var n=r(71828),i=r(50606).BADNUM,a=r(42973);t.exports=function(t,e,r,o,s,l){var u=t._length,c=e.makeCalcdata(t,o),f=r.makeCalcdata(t,s);c=a(t,e,o,c).vals,f=a(t,r,s,f).vals;var h,p,d,v,g=t.text,y=void 0!==g&&n.isArray1D(g),m=t.hovertext,x=void 0!==m&&n.isArray1D(m),b=n.distinctVals(c),_=b.vals,w=n.distinctVals(f),T=w.vals,k=[],A=T.length,M=_.length;for(h=0;h<l.length;h++)k[h]=n.init2dArray(A,M);y&&(d=n.init2dArray(A,M)),x&&(v=n.init2dArray(A,M));var S=n.init2dArray(A,M);for(h=0;h<u;h++)if(c[h]!==i&&f[h]!==i){var E=n.findBin(c[h]+b.minDiff/2,_),L=n.findBin(f[h]+w.minDiff/2,T);for(p=0;p<l.length;p++){var C=t[l[p]];k[p][L][E]=C[h],S[L][E]=h}y&&(d[L][E]=g[h]),x&&(v[L][E]=m[h])}for(t[\"_\"+o]=_,t[\"_\"+s]=T,p=0;p<l.length;p++)t[\"_\"+l[p]]=k[p];y&&(t._text=d),x&&(t._hovertext=v),e&&\"category\"===e.type&&(t[\"_\"+o+\"CategoryMap\"]=_.map((function(t){return e._categories[t]}))),r&&\"category\"===r.type&&(t[\"_\"+s+\"CategoryMap\"]=T.map((function(t){return r._categories[t]}))),t._after2before=S}},76382:function(t,e,r){\"use strict\";var n=r(71828),i=r(67684),a=r(58623),o=r(73927),s=r(49901),l=r(1586),u=r(21606);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}i(t,e,f,c)?(o(t,e,c,f),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),a(f,c),s(t,e,f,c),f(\"hoverongaps\"),f(\"connectgaps\",n.isArray1D(e.z)&&!1!==e.zsmooth),l(t,e,c,f,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},43907:function(t,e,r){\"use strict\";var n=r(71828).maxRowLength;t.exports=function(t){var e,r,i,a,o,s,l,u,c=[],f={},h=[],p=t[0],d=[],v=[0,0,0],g=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],i=0;i<g;i++)void 0===d[i]&&((s=(void 0!==d[i-1]?1:0)+(void 0!==d[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==p[i]?1:0))?(0===r&&s++,0===i&&s++,r===t.length-1&&s++,i===d.length-1&&s++,s<4&&(f[[r,i]]=[r,i,s]),c.push([r,i,s])):h.push([r,i]));for(;h.length;){for(l={},u=!1,o=h.length-1;o>=0;o--)(s=((f[[(r=(a=h[o])[0])-1,i=a[1]]]||v)[2]+(f[[r+1,i]]||v)[2]+(f[[r,i-1]]||v)[2]+(f[[r,i+1]]||v)[2])/20)&&(l[a]=[r,i,s],h.splice(o,1),u=!0);if(!u)throw\"findEmpties iterated with no new neighbors\";for(a in l)f[a]=l[a],c.push(l[a])}return c.sort((function(t,e){return e[2]-t[2]}))}},46248:function(t,e,r){\"use strict\";var n=r(30211),i=r(71828),a=r(89298),o=r(21081).extractOpts;t.exports=function(t,e,r,s,l){l||(l={});var u,c,f,h,p=l.isContour,d=t.cd[0],v=d.trace,g=t.xa,y=t.ya,m=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,T=d.zmask,k=v.zhoverformat,A=m,M=x;if(!1!==t.index){try{f=Math.round(t.index[1]),h=Math.round(t.index[0])}catch(e){return void i.error(\"Error hovering on heatmap, pointNumber must be [row,col], found:\",t.index)}if(f<0||f>=b[0].length||h<0||h>b.length)return}else{if(n.inbox(e-m[0],e-m[m.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(p){var S;for(A=[2*m[0]-m[1]],S=1;S<m.length;S++)A.push((m[S]+m[S-1])/2);for(A.push([2*m[m.length-1]-m[m.length-2]]),M=[2*x[0]-x[1]],S=1;S<x.length;S++)M.push((x[S]+x[S-1])/2);M.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(A.length-2,i.findBin(e,A))),h=Math.max(0,Math.min(M.length-2,i.findBin(r,M)))}var E,L,C=g.c2p(m[f]),P=g.c2p(m[f+1]),O=y.c2p(x[h]),I=y.c2p(x[h+1]);p?(E=d.orig_x||m,L=d.orig_y||x,P=C,u=E[f],I=O,c=L[h]):(E=d.orig_x||_||m,L=d.orig_y||w||x,u=_?E[f]:(E[f]+E[f+1])/2,c=w?L[h]:(L[h]+L[h+1])/2,g&&\"category\"===g.type&&(u=m[f]),y&&\"category\"===y.type&&(c=x[h]),v.zsmooth&&(C=P=g.c2p(u),O=I=y.c2p(c)));var D=b[h][f];if(T&&!T[h][f]&&(D=void 0),void 0!==D||v.hoverongaps){var z;Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[h])?z=d.hovertext[h][f]:Array.isArray(d.text)&&Array.isArray(d.text[h])&&(z=d.text[h][f]);var R=o(v),F={type:\"linear\",range:[R.min,R.max],hoverformat:k,_separators:g._separators,_numFormat:g._numFormat},B=a.tickText(F,D,\"hover\").text;return[i.extendFlat(t,{index:v._after2before?v._after2before[h][f]:[h,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:C,x1:P,y0:O,y1:I,xLabelVal:u,yLabelVal:c,zLabelVal:D,zLabel:B,text:z})]}}},92165:function(t,e,r){\"use strict\";t.exports={attributes:r(21606),supplyDefaults:r(76382),calc:r(90757),plot:r(50347),colorbar:r(61243),style:r(70035),hoverPoints:r(46248),moduleType:\"trace\",name:\"heatmap\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"2dMap\",\"showLegend\"],meta:{}}},824:function(t,e,r){\"use strict\";var n=r(71828),i=[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,a,o,s,l,u,c,f,h,p,d,v,g,y=0;for(s=0;s<e.length;s++){for(a=(n=e[s])[0],o=n[1],d=t[a][o],p=0,h=0,l=0;l<4;l++)(c=t[a+(u=i[l])[0]])&&void 0!==(f=c[o+u[1]])&&(0===p?v=g=f:(v=Math.min(v,f),g=Math.max(g,f)),h++,p+=f);if(0===h)throw\"iterateInterp2d order is wrong: no defined neighbors\";t[a][o]=p/h,void 0===d?h<4&&(y=1):(t[a][o]=(1+r)*t[a][o]-r*d,g>v&&(y=Math.max(y,Math.abs(t[a][o]-d)/(g-v))))}return y}t.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&i>.01;r++)i=o(t,e,a(i));return i>.01&&n.log(\"interp2d didn't converge quickly\",i),t}},58623:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){t(\"texttemplate\");var r=n.extendFlat({},e.font,{color:\"auto\",size:\"auto\"});n.coerceFont(t,\"textfont\",r)}},70769:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a,o,s){var l,u,c,f=[],h=n.traceIs(t,\"contour\"),p=n.traceIs(t,\"histogram\"),d=n.traceIs(t,\"gl2d\");if(i(e)&&e.length>1&&!p&&\"category\"!==s.type){var v=e.length;if(!(v<=o))return h?e.slice(0,o):e.slice(0,o+1);if(h||d)f=e.slice(0,o);else if(1===o)f=[e[0]-.5,e[0]+.5];else{for(f=[1.5*e[0]-.5*e[1]],c=1;c<v;c++)f.push(.5*(e[c-1]+e[c]));f.push(1.5*e[v-1]-.5*e[v-2])}if(v<o){var g=f[f.length-1],y=g-f[f.length-2];for(c=v;c<o;c++)g+=y,f.push(g)}}else{var m=t[s._id.charAt(0)+\"calendar\"];for(l=p?s.r2c(r,0,m):i(e)&&1===e.length?e[0]:void 0===r?0:(\"log\"===s.type?s.d2c:s.r2c)(r,0,m),u=a||1,c=h||d?0:-.5;c<o;c++)f.push(l+u*c)}return f}},50347:function(t,e,r){\"use strict\";var n=r(39898),i=r(84267),a=r(73972),o=r(91424),s=r(89298),l=r(71828),u=r(63893),c=r(8225),f=r(7901),h=r(21081).extractOpts,p=r(21081).makeColorScaleFuncFromTrace,d=r(77922),v=r(18783).LINE_SPACING,g=r(3883),y=r(32396).STYLE,m=\"heatmap-label\";function x(t){return t.selectAll(\"g.\"+m)}function b(t){x(t).remove()}function _(t,e){var r=e.length-2,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=e[n+1],o=l.constrain(n+(t-i)/(a-i)-.5,0,r),s=Math.round(o),u=Math.abs(o-s);return o&&o!==r&&u?{bin0:s,frac:u,bin1:Math.round(s+u/(o-s))}:{bin0:s,bin1:s,frac:0}}function w(t,e){var r=e.length-1,n=l.constrain(l.findBin(t,e),0,r),i=e[n],a=(t-i)/(e[n+1]-i)||0;return a<=0?{bin0:n,bin1:n,frac:0}:a<.5?{bin0:n,bin1:n+1,frac:a}:{bin0:n+1,bin1:n,frac:1-a}}function T(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}t.exports=function(t,e,r,k){var A=e.xaxis,M=e.yaxis;l.makeTraceGroups(k,r,\"hm\").each((function(e){var r,k,S,E,L,C,P,O,I=n.select(this),D=e[0],z=D.trace,R=z.xgap||0,F=z.ygap||0,B=D.z,N=D.x,j=D.y,U=D.xCenter,V=D.yCenter,H=a.traceIs(z,\"contour\"),q=H?\"best\":z.zsmooth,G=B.length,Z=l.maxRowLength(B),Y=!1,W=!1;for(C=0;void 0===r&&C<N.length-1;)r=A.c2p(N[C]),C++;for(C=N.length-1;void 0===k&&C>0;)k=A.c2p(N[C]),C--;for(k<r&&(S=k,k=r,r=S,Y=!0),C=0;void 0===E&&C<j.length-1;)E=M.c2p(j[C]),C++;for(C=j.length-1;void 0===L&&C>0;)L=M.c2p(j[C]),C--;L<E&&(S=E,E=L,L=S,W=!0),H&&(U=N,V=j,N=D.xfill,j=D.yfill);var X=\"default\";if(q?X=\"best\"===q?\"smooth\":\"fast\":z._islinear&&0===R&&0===F&&g()&&(X=\"fast\"),\"fast\"!==X){var J=\"best\"===q?0:.5;r=Math.max(-J*A._length,r),k=Math.min((1+J)*A._length,k),E=Math.max(-J*M._length,E),L=Math.min((1+J)*M._length,L)}var K,$,Q=Math.round(k-r),tt=Math.round(L-E);if(r>=A._length||k<=0||E>=M._length||L<=0)return I.selectAll(\"image\").data([]).exit().remove(),void b(I);\"fast\"===X?(K=Z,$=G):(K=Q,$=tt);var et=document.createElement(\"canvas\");et.width=K,et.height=$;var rt,nt,it=et.getContext(\"2d\",{willReadFrequently:!0}),at=p(z,{noNumericCheck:!0,returnArray:!0});\"fast\"===X?(rt=Y?function(t){return Z-1-t}:l.identity,nt=W?function(t){return G-1-t}:l.identity):(rt=function(t){return l.constrain(Math.round(A.c2p(N[t])-r),0,Q)},nt=function(t){return l.constrain(Math.round(M.c2p(j[t])-E),0,tt)});var ot,st,lt,ut,ct=nt(0),ft=[ct,ct],ht=Y?0:1,pt=W?0:1,dt=0,vt=0,gt=0,yt=0;function mt(t,e){if(void 0!==t){var r=at(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),dt+=e,vt+=r[0]*e,gt+=r[1]*e,yt+=r[2]*e,r}return[0,0,0,0]}function xt(t,e,r,n){var i=t[r.bin0];if(void 0===i)return mt(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],u=o-i||0,c=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,mt(i+r.frac*u+n.frac*(c+r.frac*a))}if(\"default\"!==X){var bt,_t=0;try{bt=new Uint8Array(K*$*4)}catch(t){bt=new Array(K*$*4)}if(\"smooth\"===X){var wt,Tt,kt,At=U||N,Mt=V||j,St=new Array(At.length),Et=new Array(Mt.length),Lt=new Array(Q),Ct=U?w:_,Pt=V?w:_;for(C=0;C<At.length;C++)St[C]=Math.round(A.c2p(At[C])-r);for(C=0;C<Mt.length;C++)Et[C]=Math.round(M.c2p(Mt[C])-E);for(C=0;C<Q;C++)Lt[C]=Ct(C,St);for(P=0;P<tt;P++)for(Tt=B[(wt=Pt(P,Et)).bin0],kt=B[wt.bin1],C=0;C<Q;C++,_t+=4)T(bt,_t,ut=xt(Tt,kt,Lt[C],wt))}else for(P=0;P<G;P++)for(lt=B[P],ft=nt(P),C=0;C<Z;C++)ut=mt(lt[C],1),T(bt,_t=4*(ft*Z+rt(C)),ut);var Ot=it.createImageData(K,$);try{Ot.data.set(bt)}catch(t){var It=Ot.data,Dt=It.length;for(P=0;P<Dt;P++)It[P]=bt[P]}it.putImageData(Ot,0,0)}else{var zt=Math.floor(R/2),Rt=Math.floor(F/2);for(P=0;P<G;P++)if(lt=B[P],ft.reverse(),ft[pt]=nt(P+1),ft[0]!==ft[1]&&void 0!==ft[0]&&void 0!==ft[1])for(ot=[st=rt(0),st],C=0;C<Z;C++)ot.reverse(),ot[ht]=rt(C+1),ot[0]!==ot[1]&&void 0!==ot[0]&&void 0!==ot[1]&&(ut=mt(lt[C],(ot[1]-ot[0])*(ft[1]-ft[0])),it.fillStyle=\"rgba(\"+ut.join(\",\")+\")\",it.fillRect(ot[0]+zt,ft[0]+Rt,ot[1]-ot[0]-R,ft[1]-ft[0]-F))}vt=Math.round(vt/dt),gt=Math.round(gt/dt),yt=Math.round(yt/dt);var Ft=i(\"rgb(\"+vt+\",\"+gt+\",\"+yt+\")\");t._hmpixcount=(t._hmpixcount||0)+dt,t._hmlumcount=(t._hmlumcount||0)+dt*Ft.getLuminance();var Bt=I.selectAll(\"image\").data(e);Bt.enter().append(\"svg:image\").attr({xmlns:d.svg,preserveAspectRatio:\"none\"}),Bt.attr({height:tt,width:Q,x:r,y:E,\"xlink:href\":et.toDataURL(\"image/png\")}),\"fast\"!==X||q||Bt.attr(\"style\",y),b(I);var Nt=z.texttemplate;if(Nt){var jt=h(z),Ut={type:\"linear\",range:[jt.min,jt.max],_separators:A._separators,_numFormat:A._numFormat},Vt=\"histogram2dcontour\"===z.type,Ht=\"contour\"===z.type,qt=Ht?G-1:G,Gt=Ht?1:0,Zt=Ht?Z-1:Z,Yt=[];for(C=Ht?1:0;C<qt;C++){var Wt;if(Ht)Wt=D.y[C];else if(Vt){if(0===C||C===G-1)continue;Wt=D.y[C]}else if(D.yCenter)Wt=D.yCenter[C];else{if(C+1===G&&void 0===D.y[C+1])continue;Wt=(D.y[C]+D.y[C+1])/2}var Xt=Math.round(M.c2p(Wt));if(!(0>Xt||Xt>M._length))for(P=Gt;P<Zt;P++){var Jt;if(Ht)Jt=D.x[P];else if(Vt){if(0===P||P===Z-1)continue;Jt=D.x[P]}else if(D.xCenter)Jt=D.xCenter[P];else{if(P+1===Z&&void 0===D.x[P+1])continue;Jt=(D.x[P]+D.x[P+1])/2}var Kt=Math.round(A.c2p(Jt));if(!(0>Kt||Kt>A._length)){var $t=c({x:Jt,y:Wt},z,t._fullLayout);$t.x=Jt,$t.y=Wt;var Qt=D.z[C][P];void 0===Qt?($t.z=\"\",$t.zLabel=\"\"):($t.z=Qt,$t.zLabel=s.tickText(Ut,Qt,\"hover\").text);var te=D.text&&D.text[C]&&D.text[C][P];void 0!==te&&!1!==te||(te=\"\"),$t.text=te;var ee=l.texttemplateString(Nt,$t,t._fullLayout._d3locale,$t,z._meta||{});if(ee){var re=ee.split(\"<br>\"),ne=re.length,ie=0;for(O=0;O<ne;O++)ie=Math.max(ie,re[O].length);Yt.push({l:ne,c:ie,t:ee,x:Kt,y:Xt,z:Qt})}}}}var ae=z.textfont,oe=ae.family,se=ae.size,le=t._fullLayout.font.size;if(!se||\"auto\"===se){var ue=1/0,ce=1/0,fe=0,he=0;for(O=0;O<Yt.length;O++){var pe=Yt[O];if(fe=Math.max(fe,pe.l),he=Math.max(he,pe.c),O<Yt.length-1){var de=Yt[O+1],ve=Math.abs(de.x-pe.x),ge=Math.abs(de.y-pe.y);ve&&(ue=Math.min(ue,ve)),ge&&(ce=Math.min(ce,ge))}}isFinite(ue)&&isFinite(ce)?(ue-=R,ce-=F,ue/=he,ce/=fe,ue/=v/2,ce/=v,se=Math.min(Math.floor(ue),Math.floor(ce),le)):se=le}if(se<=0||!isFinite(se))return;x(I).data(Yt).enter().append(\"g\").classed(m,1).append(\"text\").attr(\"text-anchor\",\"middle\").each((function(e){var r=n.select(this),i=ae.color;i&&\"auto\"!==i||(i=f.contrast(\"rgba(\"+at(e.z).join()+\")\")),r.attr(\"data-notex\",1).call(u.positionText,function(t){return t.x}(e),function(t){return t.y-se*(t.l*v/2-1)}(e)).call(o.font,oe,se,i).text(e.t).call(u.convertToTspans,t)}))}}))}},70035:function(t,e,r){\"use strict\";var n=r(39898);t.exports=function(t){n.select(t).selectAll(\".hm image\").style(\"opacity\",(function(t){return t.trace.opacity}))}},49901:function(t){\"use strict\";t.exports=function(t,e,r){!1===r(\"zsmooth\")&&(r(\"xgap\"),r(\"ygap\")),r(\"zhoverformat\")}},67684:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(73972);function o(t,e){var r=e(t);return\"scaled\"===(r?e(t+\"type\",\"array\"):\"scaled\")&&(e(t+\"0\"),e(\"d\"+t)),r}t.exports=function(t,e,r,s,l,u){var c,f,h=r(\"z\");if(l=l||\"x\",u=u||\"y\",void 0===h||!h.length)return 0;if(i.isArray1D(t.z)){c=r(l),f=r(u);var p=i.minRowLength(c),d=i.minRowLength(f);if(0===p||0===d)return 0;e._length=Math.min(p,d,h.length)}else{if(c=o(l,r),f=o(u,r),!function(t){for(var e,r=!0,a=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!i.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(a=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&a&&o}(h))return 0;r(\"transpose\"),e._length=null}return\"heatmapgl\"===t.type||a.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[l,u],s),!0}},16063:function(t,e,r){\"use strict\";for(var n=r(21606),i=r(50693),a=r(1426).extendFlat,o=r(30962).overrideAll,s=[\"z\",\"x\",\"x0\",\"dx\",\"y\",\"y0\",\"dy\",\"text\",\"transpose\",\"xtype\",\"ytype\"],l={},u=0;u<s.length;u++){var c=s[u];l[c]=n[c]}l.zsmooth={valType:\"enumerated\",values:[\"fast\",!1],dflt:\"fast\",editType:\"calc\"},a(l,i(\"\",{cLetter:\"z\",autoColorDflt:!1})),t.exports=o(l,\"calc\",\"nested\")},59560:function(t,e,r){\"use strict\";var n=r(9330).gl_heatmap2d,i=r(89298),a=r(78614);function o(t,e){this.scene=t,this.uid=e,this.type=\"heatmapgl\",this.name=\"\",this.hoverinfo=\"all\",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={zsmooth:\"fast\",z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,i=n%r[0],a=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y,this.options.zsmooth=t.zsmooth;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,i=e.length,o=new Array(i),s=new Array(4*i),l=0;l<i;l++){var u=e[l],c=a(u[1]);o[l]=r+u[0]*(n-r);for(var f=0;f<4;f++)s[4*l+f]=c[f]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var u,c,f=this.scene.xaxis,h=this.scene.yaxis;!1===t.zsmooth&&(u={ppad:r.x[1]-r.x[0]},c={ppad:r.y[1]-r.y[0]}),t._extremes[f._id]=i.findExtremes(f,r.x,u),t._extremes[h._id]=i.findExtremes(h,r.y,c)},s.dispose=function(){this.heatmap.dispose()},t.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},19600:function(t,e,r){\"use strict\";var n=r(71828),i=r(67684),a=r(1586),o=r(16063);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,l,s)?(l(\"text\"),l(\"zsmooth\"),a(t,e,s,l,{prefix:\"\",cLetter:\"z\"})):e.visible=!1}},3325:function(t,e,r){\"use strict\";[\"*heatmapgl* trace is deprecated!\",\"Please consider switching to the *heatmap* or *image* trace types.\",\"Alternatively you could contribute/sponsor rewriting this trace type\",\"based on cartesian features and using regl framework.\"].join(\" \"),t.exports={attributes:r(16063),supplyDefaults:r(19600),colorbar:r(61243),calc:r(90757),plot:r(59560),moduleType:\"trace\",name:\"heatmapgl\",basePlotModule:r(4796),categories:[\"gl\",\"gl2d\",\"2dMap\"],meta:{}}},7745:function(t,e,r){\"use strict\";var n=r(1486),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(5386).si,s=r(41940),l=r(17656),u=r(72406),c=r(1426).extendFlat;t.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),text:c({},n.text,{}),hovertext:c({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"min\",\"max\"],dflt:\"count\",editType:\"calc\"},histnorm:{valType:\"enumerated\",values:[\"\",\"percent\",\"probability\",\"density\",\"probability density\"],dflt:\"\",editType:\"calc\"},cumulative:{enabled:{valType:\"boolean\",dflt:!1,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"increasing\",\"decreasing\"],dflt:\"increasing\",editType:\"calc\"},currentbin:{valType:\"enumerated\",values:[\"include\",\"exclude\",\"half\"],dflt:\"include\",editType:\"calc\"},editType:\"calc\"},nbinsx:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},xbins:l(\"x\",!0),nbinsy:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},ybins:l(\"y\",!0),autobinx:{valType:\"boolean\",dflt:null,editType:\"calc\"},autobiny:{valType:\"boolean\",dflt:null,editType:\"calc\"},bingroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:a({},{keys:u.eventDataKeys}),texttemplate:o({arrayOk:!1,editType:\"plot\"},{keys:[\"label\",\"value\"]}),textposition:c({},n.textposition,{arrayOk:!1}),textfont:s({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),outsidetextfont:s({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),insidetextfont:s({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),insidetextanchor:n.insidetextanchor,textangle:n.textangle,cliponaxis:n.cliponaxis,constraintext:n.constraintext,marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},42174:function(t){\"use strict\";t.exports=function(t,e){for(var r=t.length,n=0,i=0;i<r;i++)e[i]?(t[i]/=e[i],n+=t[i]):t[i]=null;return n}},17656:function(t){\"use strict\";t.exports=function(t,e){return{start:{valType:\"any\",editType:\"calc\"},end:{valType:\"any\",editType:\"calc\"},size:{valType:\"any\",editType:\"calc\"},editType:\"calc\"}}},59575:function(t,e,r){\"use strict\";var n=r(92770);t.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a=i[e];return n(a)?(a=Number(a),r[t]+=a,a):0},avg:function(t,e,r,i,a){var o=i[e];return n(o)&&(o=Number(o),r[t]+=o,a[t]++),0},min:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]>a){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]<a){var o=a-r[t];return r[t]=a,o}}return 0}}},40965:function(t,e,r){\"use strict\";var n=r(50606),i=n.ONEAVGYEAR,a=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,u=n.ONESEC,c=r(89298).tickIncrement;function f(t,e,r,n){if(t*e<=0)return 1/0;for(var i=Math.abs(e-t),a=\"date\"===r.type,o=h(i,a),s=0;s<10;s++){var l=h(80*o,a);if(o===l)break;if(!p(l,t,e,a,r,n))break;o=l}return o}function h(t,e){return e&&t>u?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:u:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),u=d(r,a,s),c=t===i?0:1;return l[c]!==u[c]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split(\"-\");return\"\"===n[0]&&(n.unshift(),n[0]=\"-\"+n[0]),n}t.exports=function(t,e,r,n,a){var s,l,u=-1.1*e,h=-.1*e,p=t-h,d=r[0],v=r[1],g=Math.min(f(d+h,d+p,n,a),f(v+h,v+p,n,a)),y=Math.min(f(d+u,d+h,n,a),f(v+u,v+h,n,a));if(g>y&&y<Math.abs(v-d)/4e3?(s=g,l=!1):(s=Math.min(g,y),l=!0),\"date\"===n.type&&s>o){var m=s===i?1:6,x=s===i?\"M12\":\"M1\";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf(\"-\",m);s>0&&(o=o.substr(0,s));var u=n.d2c(o,0,a);if(u<e){var f=c(u,x,!1,a);(u+f)/2<e+t&&(u=f)}return r&&l?c(u,x,!0,a):u}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},72138:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(73972),o=r(89298),s=r(75341),l=r(59575),u=r(36362),c=r(42174),f=r(40965);function h(t,e,r,s,l){var u,c,f,p,d,v,g,y=s+\"bins\",m=t._fullLayout,x=e[\"_\"+s+\"bingroup\"],b=m._histogramBinOpts[x],_=\"overlay\"===m.barmode,w=function(t){return r.r2c(t,0,p)},T=function(t){return r.c2r(t,0,p)},k=\"date\"===r.type?function(t){return t||0===t?i.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function A(t,e,r){e[t+\"Found\"]?(e[t]=k(e[t]),null===e[t]&&(e[t]=r[t])):(v[t]=e[t]=r[t],i.nestedProperty(c[0],y+\".\"+t).set(r[t]))}if(e[\"_\"+s+\"autoBinFinished\"])delete e[\"_\"+s+\"autoBinFinished\"];else{c=b.traces;var M=[],S=!0,E=!1,L=!1;for(u=0;u<c.length;u++)if((f=c[u]).visible){var C=b.dirs[u];d=f[\"_\"+C+\"pos0\"]=r.makeCalcdata(f,C),M=i.concat(M,d),delete f[\"_\"+s+\"autoBinFinished\"],!0===e.visible&&(S?S=!1:(delete f._autoBin,f[\"_\"+s+\"autoBinFinished\"]=1),a.traceIs(f,\"2dMap\")&&(E=!0),\"histogram2dcontour\"===f.type&&(L=!0))}p=c[0][s+\"calendar\"];var P=o.autoBin(M,r,b.nbins,E,p,b.sizeFound&&b.size),O=c[0]._autoBin={};if(v=O[b.dirs[0]]={},L&&(b.size||(P.start=T(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=T(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!a.traceIs(e,\"2dMap\")&&0===P._dataSpan&&\"category\"!==r.type&&\"multicategory\"!==r.type&&\"\"===e.bingroup&&void 0===e.xbins){if(l)return[P,d,!0];P=function(t,e,r,n,a){var o,s,l,u=t._fullLayout,c=function(t,e){for(var r=e.xaxis,n=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];\"histogram\"===l.type&&!0===l.visible&&l.orientation===i&&l.xaxis===r&&l.yaxis===n&&a.push(l)}return a}(t,e),f=!1,p=1/0,d=[e];for(o=0;o<c.length;o++)if((s=c[o])===e)f=!0;else if(f){var v=h(t,s,r,n,!0),g=v[0],y=v[2];s[\"_\"+n+\"autoBinFinished\"]=1,s[\"_\"+n+\"pos0\"]=v[1],y?d.push(s):p=Math.min(p,g.size)}else l=u._histogramBinOpts[s[\"_\"+n+\"bingroup\"]],p=Math.min(p,l.size||s[a].size);var m=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o][\"_\"+n+\"pos0\"],b=0;b<x.length;b++)if(void 0!==x[b]){m[o]=x[b];break}for(isFinite(p)||(p=i.distinctVals(m).minDiff),o=0;o<d.length;o++){var _=(s=d[o])[n+\"calendar\"],w={start:r.c2r(m[o]-p/2,0,_),end:r.c2r(m[o]+p/2,0,_),size:p};s._input[a]=s[a]=w,(l=u._histogramBinOpts[s[\"_\"+n+\"bingroup\"]])&&i.extendFlat(l,w)}return e[a]}(t,e,r,s,y)}(g=f.cumulative||{}).enabled&&\"include\"!==g.currentbin&&(\"decreasing\"===g.direction?P.start=T(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=T(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(v.size=P.size,i.nestedProperty(c[0],y+\".size\").set(P.size)),A(\"start\",b,P),A(\"end\",b,P)}d=e[\"_\"+s+\"pos0\"],delete e[\"_\"+s+\"pos0\"];var I=e._input[y]||{},D=i.extendFlat({},b),z=b.start,R=r.r2l(I.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(z)){var B=F?R:i.aggNums(Math.min,null,d),N={type:\"category\"===r.type||\"multicategory\"===r.type?\"linear\":r.type,r2l:r.r2l,dtick:b.size,tick0:z,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),D.start=r.l2r(j),F||i.nestedProperty(e,y+\".start\").set(D.start)}var U=b.end,V=r.r2l(I.end),H=void 0!==V;if((b.endFound||H)&&V!==r.r2l(U)){var q=H?V:i.aggNums(Math.max,null,d);D.end=r.l2r(q),H||i.nestedProperty(e,y+\".start\").set(D.end)}var G=\"autobin\"+s;return!1===e._input[G]&&(e._input[y]=i.extendFlat({},e[y]||{}),delete e._input[G],delete e[G]),[D,d]}t.exports={calc:function(t,e){var r,a,p,d,v=[],g=[],y=\"h\"===e.orientation,m=o.getFromId(t,y?e.yaxis:e.xaxis),x=y?\"y\":\"x\",b={x:\"y\",y:\"x\"}[x],_=e[x+\"calendar\"],w=e.cumulative,T=h(t,e,m,x),k=T[0],A=T[1],M=\"string\"==typeof k.size,S=[],E=M?S:k,L=[],C=[],P=[],O=0,I=e.histnorm,D=e.histfunc,z=-1!==I.indexOf(\"density\");w.enabled&&z&&(I=I.replace(/ ?density$/,\"\"),z=!1);var R,F=\"max\"===D||\"min\"===D?null:0,B=l.count,N=u[I],j=!1,U=function(t){return m.r2c(t,0,_)};for(i.isArrayOrTypedArray(e[b])&&\"count\"!==D&&(R=e[b],j=\"avg\"===D,B=l[D]),r=U(k.start),p=U(k.end)+(r-o.tickIncrement(r,k.size,!1,_))/1e6;r<p&&v.length<1e6&&(a=o.tickIncrement(r,k.size,!1,_),v.push((r+a)/2),g.push(F),P.push([]),S.push(r),z&&L.push(1/(a-r)),j&&C.push(0),!(a<=r));)r=a;S.push(r),M||\"date\"!==m.type||(E={start:U(E.start),end:U(E.end),size:E.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var V=e[\"_\"+x+\"bingroup\"],H={leftGap:1/0,rightGap:1/0};V&&(t._fullLayout._roundFnOpts[V]||(t._fullLayout._roundFnOpts[V]=H),H=t._fullLayout._roundFnOpts[V]);var q,G=g.length,Z=!0,Y=H.leftGap,W=H.rightGap,X={};for(r=0;r<A.length;r++){var J=A[r];(d=i.findBin(J,E))>=0&&d<G&&(O+=B(d,r,g,R,C),Z&&P[d].length&&J!==A[P[d][0]]&&(Z=!1),P[d].push(r),X[r]=d,Y=Math.min(Y,J-S[d]),W=Math.min(W,S[d+1]-J))}H.leftGap=Y,H.rightGap=W,Z||(q=function(e,r){return function(){var n=t._fullLayout._roundFnOpts[V];return f(n.leftGap,n.rightGap,S,m,_)(e,r)}}),j&&(O=c(g,C)),N&&N(g,O,L),w.enabled&&function(t,e,r){var n,i,a;function o(e){a=t[e],t[e]/=2}function s(e){i=t[e],t[e]=a+i/2,a+=i}if(\"half\"===r)if(\"increasing\"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if(\"increasing\"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];\"exclude\"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];\"exclude\"===r&&(t.push(0),t.shift())}}(g,w.direction,w.currentbin);var K=Math.min(v.length,g.length),$=[],Q=0,tt=K-1;for(r=0;r<K;r++)if(g[r]){Q=r;break}for(r=K-1;r>=Q;r--)if(g[r]){tt=r;break}for(r=Q;r<=tt;r++)if(n(v[r])&&n(g[r])){var et={p:v[r],s:g[r],b:0};w.enabled||(et.pts=P[r],Z?et.ph0=et.ph1=P[r].length?A[P[r][0]]:v[r]:(e._computePh=!0,et.ph0=q(S[r]),et.ph1=q(S[r+1],!0))),$.push(et)}return 1===$.length&&($[0].width1=o.tickIncrement($[0].p,k.size,!1,_)-$[0].p),s($,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected($,e,X),$},calcAllAutoBins:h}},72406:function(t){\"use strict\";t.exports={eventDataKeys:[\"binNumber\"]}},82222:function(t,e,r){\"use strict\";var n=r(71828),i=r(41675),a=r(73972).traceIs,o=r(26125),s=n.nestedProperty,l=r(99082).getAxisGroup,u=[{aStr:{x:\"xbins.start\",y:\"ybins.start\"},name:\"start\"},{aStr:{x:\"xbins.end\",y:\"ybins.end\"},name:\"end\"},{aStr:{x:\"xbins.size\",y:\"ybins.size\"},name:\"size\"},{aStr:{x:\"nbinsx\",y:\"nbinsy\"},name:\"nbins\"}],c=[\"x\",\"y\"];t.exports=function(t,e){var r,f,h,p,d,v,g,y=e._histogramBinOpts={},m=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return\"v\"===t.orientation?\"x\":\"y\"}function T(t,r,a){var o=t.uid+\"__\"+a;r||(r=o);var s=function(t,r){return i.getFromTrace({_fullLayout:e},t,r).type}(t,a),l=t[a+\"calendar\"]||\"\",u=y[r],c=!0;u&&(s===u.axType&&l===u.calendar?(c=!1,u.traces.push(t),u.dirs.push(a)):(r=o,s!==u.axType&&n.warn([\"Attempted to group the bins of trace\",t.index,\"set on a\",\"type:\"+s,\"axis\",\"with bins on\",\"type:\"+u.axType,\"axis.\"].join(\" \")),l!==u.calendar&&n.warn([\"Attempted to group the bins of trace\",t.index,\"set with a\",l,\"calendar\",\"with bins\",u.calendar?\"on a \"+u.calendar+\" calendar\":\"w/o a set calendar\"].join(\" \")))),c&&(y[r]={traces:[t],dirs:[a],axType:s,calendar:t[a+\"calendar\"]||\"\"}),t[\"_\"+a+\"bingroup\"]=r}for(d=0;d<t.length;d++)r=t[d],a(r,\"histogram\")&&(m.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,a(r,\"2dMap\")||o(r._input,r,e,_));var k=e._alignmentOpts||{};for(d=0;d<m.length;d++){if(r=m[d],h=\"\",!a(r,\"2dMap\")){if(p=w(r),\"group\"===e.barmode&&r.alignmentgroup){var A=r[p+\"axis\"],M=l(e,A)+r.orientation;(k[M]||{})[r.alignmentgroup]&&(h=M)}h||\"overlay\"===e.barmode||(h=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}h?(x[h]||(x[h]=[]),x[h].push(r)):b.push(r)}for(h in x)if(1!==(f=x[h]).length){var S=!1;for(f.length&&(r=f[0],S=_(\"bingroup\")),h=S||h,d=0;d<f.length;d++){var E=(r=f[d])._input.bingroup;E&&E!==h&&n.warn([\"Trace\",r.index,\"must match\",\"within bingroup\",h+\".\",\"Ignoring its bingroup:\",E,\"setting.\"].join(\" \")),r.bingroup=h,T(r,h,w(r))}}else b.push(f[0]);for(d=0;d<b.length;d++){r=b[d];var L=_(\"bingroup\");if(a(r,\"2dMap\"))for(g=0;g<2;g++){var C=_((p=c[g])+\"bingroup\",L?L+\"__\"+p:null);T(r,C,p)}else T(r,L,w(r))}for(h in y){var P=y[h];for(f=P.traces,v=0;v<u.length;v++){var O,I,D=u[v],z=D.name;if(\"nbins\"!==z||!P.sizeFound){for(d=0;d<f.length;d++){if(r=f[d],p=P.dirs[d],O=D.aStr[p],void 0!==s(r._input,O).get()){P[z]=_(O),P[z+\"Found\"]=!0;break}(I=(r._autoBin||{})[p]||{})[z]&&s(r,O).set(I[z])}if(\"start\"===z||\"end\"===z)for(;d<f.length;d++)(r=f[d])[\"_\"+p+\"bingroup\"]&&_(O,(I=(r._autoBin||{})[p]||{})[z]);\"nbins\"!==z||P.sizeFound||P.nbinsFound||(r=f[0],P[z]=_(O))}}}}},11385:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(7901),o=r(90769).handleText,s=r(98340),l=r(7745);t.exports=function(t,e,r,u){function c(r,n){return i.coerce(t,e,l,r,n)}var f=c(\"x\"),h=c(\"y\");c(\"cumulative.enabled\")&&(c(\"cumulative.direction\"),c(\"cumulative.currentbin\")),c(\"text\");var p=c(\"textposition\");o(t,e,u,c,p,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),c(\"hovertext\"),c(\"hovertemplate\"),c(\"xhoverformat\"),c(\"yhoverformat\");var d=c(\"orientation\",h&&!f?\"h\":\"v\"),v=\"v\"===d?\"x\":\"y\",g=\"v\"===d?\"y\":\"x\",y=f&&h?Math.min(i.minRowLength(f)&&i.minRowLength(h)):i.minRowLength(e[v]||[]);if(y){e._length=y,n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],u),e[g]&&c(\"histfunc\"),c(\"histnorm\"),c(\"autobin\"+v),s(t,e,c,r,u),i.coerceSelectionMarkerOpacity(e,c);var m=(e.marker.line||{}).color,x=n.getComponentMethod(\"errorbars\",\"supplyDefaults\");x(t,e,m||a.defaultLine,{axis:\"y\"}),x(t,e,m||a.defaultLine,{axis:\"x\",inherit:\"y\"})}else e.visible=!1}},84402:function(t){\"use strict\";t.exports=function(t,e,r,n,i){if(t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"zLabelVal\"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var a,o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){a=[];for(var s=0;s<o.length;s++)a=a.concat(r._indexToPoints[o[s]])}else a=o;t.pointIndices=a}return t}},76440:function(t,e,r){\"use strict\";var n=r(95423).hoverPoints,i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).cd[t.index],u=t.cd[0].trace;if(!u.cumulative.enabled){var c=\"h\"===u.orientation?\"y\":\"x\";t[c+\"Label\"]=i(t[c+\"a\"],[l.ph0,l.ph1],u[c+\"hoverformat\"])}return s}}},36071:function(t,e,r){\"use strict\";t.exports={attributes:r(7745),layoutAttributes:r(43641),supplyDefaults:r(11385),crossTraceDefaults:r(82222),supplyLayoutDefaults:r(13957),calc:r(72138).calc,crossTraceCalc:r(11661).crossTraceCalc,plot:r(17295).plot,layerName:\"barlayer\",style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,colorbar:r(4898),hoverPoints:r(76440),selectPoints:r(81974),eventData:r(84402),moduleType:\"trace\",name:\"histogram\",basePlotModule:r(93612),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"histogram\",\"oriented\",\"errorBarsOK\",\"showLegend\"],meta:{}}},36362:function(t){\"use strict\";t.exports={percent:function(t,e){for(var r=t.length,n=100/e,i=0;i<r;i++)t[i]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var i=t.length;n=n||1;for(var a=0;a<i;a++)t[a]*=r[a]*n},\"probability density\":function(t,e,r,n){var i=t.length;n&&(e/=n);for(var a=0;a<i;a++)t[a]*=r[a]/e}}},35361:function(t,e,r){\"use strict\";var n=r(7745),i=r(17656),a=r(21606),o=r(9012),s=r(12663).axisHoverFormat,l=r(5386).fF,u=r(5386).si,c=r(50693),f=r(1426).extendFlat;t.exports=f({x:n.x,y:n.y,z:{valType:\"data_array\",editType:\"calc\"},marker:{color:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:i(\"x\"),nbinsy:n.nbinsy,ybins:i(\"y\"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:f({},n.bingroup,{}),xbingroup:f({},n.bingroup,{}),ybingroup:f({},n.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,xhoverformat:s(\"x\"),yhoverformat:s(\"y\"),zhoverformat:s(\"z\",1),hovertemplate:l({},{keys:\"z\"}),texttemplate:u({arrayOk:!1,editType:\"plot\"},{keys:\"z\"}),textfont:a.textfont,showlegend:f({},o.showlegend,{dflt:!1})},c(\"\",{cLetter:\"z\",autoColorDflt:!1}))},17562:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(59575),o=r(36362),s=r(42174),l=r(40965),u=r(72138).calcAllAutoBins;function c(t,e,r,n){var i,a=new Array(t);if(n)for(i=0;i<t;i++)a[i]=1/(e[i+1]-e[i]);else{var o=1/r;for(i=0;i<t;i++)a[i]=o}return a}function f(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function h(t,e,r,n,i,a){var o,s=t.length-1,u=new Array(s),c=l(r,n,t,i,a);for(o=0;o<s;o++){var f=(e||[])[o];u[o]=void 0===f?[c(t[o]),c(t[o+1],!0)]:[f,f]}return u}t.exports=function(t,e){var r,l,p,d,v=i.getFromId(t,e.xaxis),g=i.getFromId(t,e.yaxis),y=e.xcalendar,m=e.ycalendar,x=function(t){return v.r2c(t,0,y)},b=function(t){return g.r2c(t,0,m)},_=u(t,e,v,\"x\"),w=_[0],T=_[1],k=u(t,e,g,\"y\"),A=k[0],M=k[1],S=e._length;T.length>S&&T.splice(S,T.length-S),M.length>S&&M.splice(S,M.length-S);var E=[],L=[],C=[],P=\"string\"==typeof w.size,O=\"string\"==typeof A.size,I=[],D=[],z=P?I:w,R=O?D:A,F=0,B=[],N=[],j=e.histnorm,U=e.histfunc,V=-1!==j.indexOf(\"density\"),H=\"max\"===U||\"min\"===U?null:0,q=a.count,G=o[j],Z=!1,Y=[],W=[],X=\"z\"in e?e.z:\"marker\"in e&&Array.isArray(e.marker.color)?e.marker.color:\"\";X&&\"count\"!==U&&(Z=\"avg\"===U,q=a[U]);var J=w.size,K=x(w.start),$=x(w.end)+(K-i.tickIncrement(K,J,!1,y))/1e6;for(r=K;r<$;r=i.tickIncrement(r,J,!1,y))L.push(H),I.push(r),Z&&C.push(0);I.push(r);var Q,tt=L.length,et=(r-K)/tt,rt=(Q=K+et/2,v.c2r(Q,0,y)),nt=A.size,it=b(A.start),at=b(A.end)+(it-i.tickIncrement(it,nt,!1,m))/1e6;for(r=it;r<at;r=i.tickIncrement(r,nt,!1,m)){E.push(L.slice()),D.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Z&&B.push(C.slice())}D.push(r);var st=E.length,lt=(r-it)/st,ut=function(t){return g.c2r(t,0,m)}(it+lt/2);V&&(Y=c(L.length,z,et,P),W=c(E.length,R,lt,O)),P||\"date\"!==v.type||(z=f(x,z)),O||\"date\"!==g.type||(R=f(b,R));var ct=!0,ft=!0,ht=new Array(tt),pt=new Array(st),dt=1/0,vt=1/0,gt=1/0,yt=1/0;for(r=0;r<S;r++){var mt=T[r],xt=M[r];p=n.findBin(mt,z),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=q(p,r,E[d],X,B[d]),N[d][p].push(r),ct&&(void 0===ht[p]?ht[p]=mt:ht[p]!==mt&&(ct=!1)),ft&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ft=!1)),dt=Math.min(dt,mt-I[p]),vt=Math.min(vt,I[p+1]-mt),gt=Math.min(gt,xt-D[d]),yt=Math.min(yt,D[d+1]-xt))}if(Z)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,Y,W[d]);return{x:T,xRanges:h(I,ct&&ht,dt,vt,v,y),x0:rt,dx:et,y:M,yRanges:h(D,ft&&pt,gt,yt,g,m),y0:ut,dy:lt,z:E,pts:N}}},93888:function(t,e,r){\"use strict\";var n=r(71828),i=r(75238),a=r(49901),o=r(1586),s=r(58623),l=r(35361);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,u),o(t,e,u,c,{prefix:\"\",cLetter:\"z\"}),c(\"hovertemplate\"),s(c,u),c(\"xhoverformat\"),c(\"yhoverformat\"))}},76128:function(t,e,r){\"use strict\";var n=r(46248),i=r(89298).hoverLabelText;t.exports=function(t,e,r,a,o){var s=n(t,e,r,a,o);if(s){var l=(t=s[0]).index,u=l[0],c=l[1],f=t.cd[0],h=f.trace,p=f.xRanges[c],d=f.yRanges[u];return t.xLabel=i(t.xa,[p[0],p[1]],h.xhoverformat),t.yLabel=i(t.ya,[d[0],d[1]],h.yhoverformat),s}}},43905:function(t,e,r){\"use strict\";t.exports={attributes:r(35361),supplyDefaults:r(93888),crossTraceDefaults:r(82222),calc:r(90757),plot:r(50347),layerName:\"heatmaplayer\",colorbar:r(61243),style:r(70035),hoverPoints:r(76128),eventData:r(84402),moduleType:\"trace\",name:\"histogram2d\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"2dMap\",\"histogram\",\"showLegend\"],meta:{}}},75238:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r(\"x\"),s=r(\"y\"),l=i.minRowLength(o),u=i.minRowLength(s);l&&u?(e._length=Math.min(l,u),n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a),(r(\"z\")||r(\"marker.color\"))&&r(\"histfunc\"),r(\"histnorm\"),r(\"autobinx\"),r(\"autobiny\")):e.visible=!1}},99066:function(t,e,r){\"use strict\";var n=r(35361),i=r(70600),a=r(50693),o=r(12663).axisHoverFormat,s=r(1426).extendFlat;t.exports=s({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:s({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:n.hovertemplate,texttemplate:i.texttemplate,textfont:i.textfont},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},62654:function(t,e,r){\"use strict\";var n=r(71828),i=r(75238),a=r(67217),o=r(8724),s=r(58623),l=r(99066);t.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}i(t,e,c,u),!1!==e.visible&&(a(t,e,c,(function(r){return n.coerce2(t,e,l,r)})),o(t,e,c,u),c(\"xhoverformat\"),c(\"yhoverformat\"),c(\"hovertemplate\"),e.contours&&\"heatmap\"===e.contours.coloring&&s(c,u))}},35902:function(t,e,r){\"use strict\";t.exports={attributes:r(99066),supplyDefaults:r(62654),crossTraceDefaults:r(82222),calc:r(27529),plot:r(29854).plot,layerName:\"contourlayer\",style:r(84426),colorbar:r(90654),hoverPoints:r(52421),moduleType:\"trace\",name:\"histogram2dcontour\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"histogram\",\"showLegend\"],meta:{}}},46291:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(45802),c=r(43473),f=r(1426).extendFlat,h=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"plot\"},flip:u.tiling.flip,pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},marker:f({colors:l.marker.colors,line:l.marker.line,pattern:h,editType:\"calc\"},a(\"marker\",{colorAttr:\"colors\",anim:!1})),leaf:l.leaf,pathbar:u.pathbar,text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u.outsidetextfont,textposition:u.textposition,sort:s.sort,root:l.root,domain:o({name:\"icicle\",trace:!0,editType:\"calc\"})}},96346:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"icicle\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},46584:function(t,e,r){\"use strict\";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc(\"icicle\",t)}},56524:function(t,e,r){\"use strict\";var n=r(71828),i=r(46291),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p(\"labels\"),v=p(\"parents\");if(d&&d.length&&v&&v.length){var g=p(\"values\");g&&g.length?p(\"branchvalues\"):p(\"count\"),p(\"level\"),p(\"maxdepth\"),p(\"tiling.orientation\"),p(\"tiling.flip\"),p(\"tiling.pad\");var y=p(\"text\");p(\"texttemplate\"),e.texttemplate||p(\"textinfo\",Array.isArray(y)?\"text+label\":\"label\"),p(\"hovertext\"),p(\"hovertemplate\");var m=p(\"pathbar.visible\");s(t,e,c,p,\"auto\",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p(\"textposition\"),u(t,e,c,p);var x=e._hasColorscale=f(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;x&&h(t,e,c,p,{prefix:\"marker.\",cLetter:\"c\"}),p(\"leaf.opacity\",x?1:.7),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p(\"pathbar.thickness\",e.pathbar.textfont.size+2*l),p(\"pathbar.side\"),p(\"pathbar.edgeshape\")),p(\"sort\"),p(\"root.color\"),o(e,c,p),e._length=null}else e.visible=!1}},90666:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(21538),l=r(82454).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf(\"left\"),O=-1!==C.textposition.indexOf(\"right\"),I=-1!==C.textposition.indexOf(\"bottom\"),D=s(r,[g,y],{flipX:C.tiling.flip.indexOf(\"x\")>-1,flipY:C.tiling.flip.indexOf(\"y\")>-1,orientation:C.tiling.orientation,pad:{inner:C.tiling.pad},maxDepth:C._maxDepth}).descendants(),z=1/0,R=-1/0;D.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(z=Math.min(z,e),R=Math.max(R,e))})),d=d.data(D,c.getPtId),C._maxVisibleLayers=isFinite(R)?R-z+1:0,d.enter().append(\"g\").classed(\"slice\",!0),k(d,p,{},[g,y],b),d.order();var F=null;if(T&&S){var B=c.getPtId(S);d.each((function(t){null===F&&c.getPtId(t)===B&&(F={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var N=function(){return F||{x0:0,x1:g,y0:0,y1:y}},j=d;return T&&(j=j.transition().each(\"end\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),j.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.tiling.pad),s._hoverY=x(I?s.y1-C.tiling.pad/2:s.y0+C.tiling.pad/2);var d=n.select(this),v=i.ensureSingle(d,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",E?\"none\":\"all\")}));T?v.transition().attrTween(\"d\",(function(t){var e=A(t,p,N(),[g,y],{orientation:C.tiling.orientation,flipX:C.tiling.flip.indexOf(\"x\")>-1,flipY:C.tiling.flip.indexOf(\"y\")>-1});return function(t){return b(e(t))}})):v.attr(\"d\",b),d.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),v.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text=\"\":s._text=h(s,r,C,e,L)||\"\";var k=i.ensureSingle(d,\"g\",\"slicetext\"),S=i.ensureSingle(k,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),D=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));S.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",O?\"end\":P?\"start\":\"middle\").call(a.font,D).call(o.convertToTspans,t),s.textBB=a.bBox(S.node()),s.transform=_(s,{fontSize:D.size}),s.transform.fontSize=D.size,T?S.transition().attrTween(\"transform\",(function(t){var e=M(t,p,N(),[g,y]);return function(t){return w(e(t))}})):S.attr(\"transform\",w(s))})),F}},69816:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"icicle\",basePlotModule:r(96346),categories:[],animatable:!0,attributes:r(46291),layoutAttributes:r(92894),supplyDefaults:r(56524),supplyLayoutDefaults:r(21070),calc:r(46584).y,crossTraceCalc:r(46584).T,plot:r(85596),style:r(82454).style,colorbar:r(4898),meta:{}}},92894:function(t){\"use strict\";t.exports={iciclecolorway:{valType:\"colorlist\",editType:\"calc\"},extendiciclecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},21070:function(t,e,r){\"use strict\";var n=r(71828),i=r(92894);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"iciclecolorway\",e.colorway),r(\"extendiciclecolors\")}},21538:function(t,e,r){\"use strict\";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a=r.flipX,o=r.flipY,s=\"h\"===r.orientation,l=r.maxDepth,u=e[0],c=e[1];l&&(u=(t.height+1)*e[0]/Math.min(t.height+1,l),c=(t.height+1)*e[1]/Math.min(t.height+1,l));var f=n.partition().padding(r.pad.inner).size(s?[e[1],u]:[e[0],c])(t);return(s||a||o)&&i(f,e,{swapXY:s,flipX:a,flipY:o}),f}},85596:function(t,e,r){\"use strict\";var n=r(80694),i=r(90666);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:\"icicle\",drawDescendants:i})}},82454:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,\"marker.line.color\")||i.defaultLine,f=a.castOption(r,u,\"marker.line.width\")||0;t.call(s,e,r,n).style(\"stroke-width\",f).call(i.stroke,c).style(\"opacity\",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._iciclelayer.selectAll(\".trace\");o(t,e,\"icicle\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\"opacity\",i.opacity),r.selectAll(\"path.surface\").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},17230:function(t,e,r){\"use strict\";for(var n=r(9012),i=r(5386).fF,a=r(1426).extendFlat,o=r(51877).colormodel,s=[\"rgb\",\"rgba\",\"rgba256\",\"hsl\",\"hsla\"],l=[],u=[],c=0;c<s.length;c++){var f=o[s[c]];l.push(\"For the `\"+s[c]+\"` colormodel, it is [\"+(f.zminDflt||f.min).join(\", \")+\"].\"),u.push(\"For the `\"+s[c]+\"` colormodel, it is [\"+(f.zmaxDflt||f.max).join(\", \")+\"].\")}t.exports=a({source:{valType:\"string\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},colormodel:{valType:\"enumerated\",values:s,editType:\"calc\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",!1],dflt:!1,editType:\"plot\"},zmin:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},zmax:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",dflt:1,editType:\"calc\"},dy:{valType:\"number\",dflt:1,editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"data_array\",editType:\"plot\"},hoverinfo:a({},n.hoverinfo,{flags:[\"x\",\"y\",\"z\",\"color\",\"name\",\"text\"],dflt:\"x+y+z+text+name\"}),hovertemplate:i({},{keys:[\"z\",\"color\",\"colormodel\"]}),transforms:void 0})},71113:function(t,e,r){\"use strict\";var n=r(71828),i=r(51877),a=r(92770),o=r(89298),s=r(71828).maxRowLength,l=r(67395).A;function u(t,e,r,i){return function(a){return n.constrain((a-t)*e,r,i)}}function c(t,e){return function(r){return n.constrain(r,t,e)}}t.exports=function(t,e){var r,n;if(e._hasZ)r=e.z.length,n=s(e.z);else if(e._hasSource){var f=l(e.source);r=f.height,n=f.width}var h,p=o.getFromId(t,e.xaxis||\"x\"),d=o.getFromId(t,e.yaxis||\"y\"),v=p.d2c(e.x0)-e.dx/2,g=d.d2c(e.y0)-e.dy/2,y=[v,v+n*e.dx],m=[g,g+r*e.dy];if(p&&\"log\"===p.type)for(h=0;h<n;h++)y.push(v+h*e.dx);if(d&&\"log\"===d.type)for(h=0;h<r;h++)m.push(g+h*e.dy);return e._extremes[p._id]=o.findExtremes(p,y),e._extremes[d._id]=o.findExtremes(d,m),e._scaler=function(t){var e=i.colormodel[t.colormodel],r=(e.colormodel||t.colormodel).length;t._sArray=[];for(var n=0;n<r;n++)e.min[n]!==t.zmin[n]||e.max[n]!==t.zmax[n]?t._sArray.push(u(t.zmin[n],(e.max[n]-e.min[n])/(t.zmax[n]-t.zmin[n]),e.min[n],e.max[n])):t._sArray.push(c(e.min[n],e.max[n]));return function(e){for(var n=e.slice(0,r),i=0;i<r;i++){var o=n[i];if(!a(o))return!1;n[i]=t._sArray[i](o)}return n}}(e),[{x0:v,y0:g,z:e.z,w:n,h:r}]}},51877:function(t){\"use strict\";t.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:[\"\",\"\",\"\"]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},rgba256:{colormodel:\"rgba\",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+\"%\",e[2]=e[2]+\"%\",e},suffix:[\"°\",\"%\",\"%\"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+\"%\",e[2]=e[2]+\"%\",e},suffix:[\"°\",\"%\",\"%\",\"\"]}}}},13245:function(t,e,r){\"use strict\";var n=r(71828),i=r(17230),a=r(51877),o=r(25095).IMAGE_URL_PREFIX;t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"source\"),e.source&&!e.source.match(o)&&delete e.source,e._hasSource=!!e.source;var s,l=r(\"z\");e._hasZ=!(void 0===l||!l.length||!l[0]||!l[0].length),e._hasZ||e._hasSource?(r(\"x0\"),r(\"y0\"),r(\"dx\"),r(\"dy\"),e._hasZ?(r(\"colormodel\",\"rgb\"),r(\"zmin\",(s=a.colormodel[e.colormodel]).zminDflt||s.min),r(\"zmax\",s.zmaxDflt||s.max)):e._hasSource&&(e.colormodel=\"rgba256\",s=a.colormodel[e.colormodel],e.zmin=s.zminDflt,e.zmax=s.zmaxDflt),r(\"zsmooth\"),r(\"text\"),r(\"hovertext\"),r(\"hovertemplate\"),e._length=null):e.visible=!1}},30835:function(t){\"use strict\";t.exports=function(t,e){return\"xVal\"in e&&(t.x=e.xVal),\"yVal\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t.z||(t.z=e.color),t}},67395:function(t,e,r){\"use strict\";var n=r(33575),i=r(25095).IMAGE_URL_PREFIX,a=r(12856).Buffer;e.A=function(t){var e=t.replace(i,\"\"),r=new a(e,\"base64\");return n(r)}},28749:function(t,e,r){\"use strict\";var n=r(30211),i=r(71828),a=r(51877);t.exports=function(t,e,r){var o=t.cd[0],s=o.trace,l=t.xa,u=t.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)>0)){var c,f=Math.floor((e-o.x0)/s.dx),h=Math.floor(Math.abs(r-o.y0)/s.dy);if(s._hasZ?c=o.z[h][f]:s._hasSource&&(c=s._canvas.el.getContext(\"2d\",{willReadFrequently:!0}).getImageData(f,h,1,1).data),c){var p,d=o.hi||s.hoverinfo;if(d){var v=d.split(\"+\");-1!==v.indexOf(\"all\")&&(v=[\"color\"]),-1!==v.indexOf(\"color\")&&(p=!0)}var g,y=a.colormodel[s.colormodel],m=y.colormodel||s.colormodel,x=m.length,b=s._scaler(c),_=y.suffix,w=[];(s.hovertemplate||p)&&(w.push(\"[\"+[b[0]+_[0],b[1]+_[1],b[2]+_[2]].join(\", \")),4===x&&w.push(\", \"+b[3]+_[3]),w.push(\"]\"),w=w.join(\"\"),t.extraText=m.toUpperCase()+\": \"+w),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[h])?g=s.hovertext[h][f]:Array.isArray(s.text)&&Array.isArray(s.text[h])&&(g=s.text[h][f]);var T=u.c2p(o.y0+(h+.5)*s.dy),k=o.x0+(f+.5)*s.dx,A=o.y0+(h+.5)*s.dy,M=\"[\"+c.slice(0,s.colormodel.length).join(\", \")+\"]\";return[i.extendFlat(t,{index:[h,f],x0:l.c2p(o.x0+f*s.dx),x1:l.c2p(o.x0+(f+1)*s.dx),y0:T,y1:T,color:b,xVal:k,xLabelVal:k,yVal:A,yLabelVal:A,zLabelVal:M,text:g,hovertemplateLabels:{zLabel:M,colorLabel:w,\"color[0]Label\":b[0]+_[0],\"color[1]Label\":b[1]+_[1],\"color[2]Label\":b[2]+_[2],\"color[3]Label\":b[3]+_[3]}})]}}}},94507:function(t,e,r){\"use strict\";t.exports={attributes:r(17230),supplyDefaults:r(13245),calc:r(71113),plot:r(60775),style:r(12826),hoverPoints:r(28749),eventData:r(30835),moduleType:\"trace\",name:\"image\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"2dMap\",\"noSortingByValue\"],animatable:!1,meta:{}}},60775:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(51877),l=r(3883),u=r(32396).STYLE;t.exports=function(t,e,r,c){var f=e.xaxis,h=e.yaxis,p=!t._context._exportedPlot&&l();i.makeTraceGroups(c,r,\"im\").each((function(e){var r=n.select(this),l=e[0],c=l.trace,d=(\"fast\"===c.zsmooth||!1===c.zsmooth&&p)&&!c._hasZ&&c._hasSource&&\"linear\"===f.type&&\"linear\"===h.type;c._realImage=d;var v,g,y,m,x,b,_=l.z,w=l.x0,T=l.y0,k=l.w,A=l.h,M=c.dx,S=c.dy;for(b=0;void 0===v&&b<k;)v=f.c2p(w+b*M),b++;for(b=k;void 0===g&&b>0;)g=f.c2p(w+b*M),b--;for(b=0;void 0===m&&b<A;)m=h.c2p(T+b*S),b++;for(b=A;void 0===x&&b>0;)x=h.c2p(T+b*S),b--;g<v&&(y=g,g=v,v=y),x<m&&(y=m,m=x,x=y),d||(v=Math.max(-.5*f._length,v),g=Math.min(1.5*f._length,g),m=Math.max(-.5*h._length,m),x=Math.min(1.5*h._length,x));var E=Math.round(g-v),L=Math.round(x-m);if(E<=0||L<=0)r.selectAll(\"image\").data([]).exit().remove();else{var C=r.selectAll(\"image\").data([e]);C.enter().append(\"svg:image\").attr({xmlns:o.svg,preserveAspectRatio:\"none\"}),C.exit().remove();var P=!1===c.zsmooth?u:\"\";if(d){var O=i.simpleMap(f.range,f.r2l),I=i.simpleMap(h.range,h.r2l),D=O[1]<O[0],z=I[1]>I[0];if(D||z){var R=v+E/2,F=m+L/2;P+=\"transform:\"+a(R+\"px\",F+\"px\")+\"scale(\"+(D?-1:1)+\",\"+(z?-1:1)+\")\"+a(-R+\"px\",-F+\"px\")+\";\"}}C.attr(\"style\",P);var B=new Promise((function(t){if(c._hasZ)t();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===k&&c._canvas.el.height===A&&c._canvas.source===c.source)t();else{var e=document.createElement(\"canvas\");e.width=k,e.height=A;var r=e.getContext(\"2d\",{willReadFrequently:!0});c._image=c._image||new Image;var n=c._image;n.onload=function(){r.drawImage(n,0,0),c._canvas={el:e,source:c.source},t()},n.setAttribute(\"src\",c.source)}})).then((function(){var t,e;if(c._hasZ)e=N((function(t,e){return _[e][t]})),t=e.toDataURL(\"image/png\");else if(c._hasSource)if(d)t=c.source;else{var r=c._canvas.el.getContext(\"2d\",{willReadFrequently:!0}).getImageData(0,0,k,A).data;e=N((function(t,e){var n=4*(e*k+t);return[r[n],r[n+1],r[n+2],r[n+3]]})),t=e.toDataURL(\"image/png\")}C.attr({\"xlink:href\":t,height:L,width:E,x:v,y:m})}));t._promises.push(B)}function N(t){var e=document.createElement(\"canvas\");e.width=E,e.height=L;var r,n=e.getContext(\"2d\",{willReadFrequently:!0}),a=function(t){return i.constrain(Math.round(f.c2p(w+t*M)-v),0,E)},o=function(t){return i.constrain(Math.round(h.c2p(T+t*S)-m),0,L)},u=s.colormodel[c.colormodel],p=u.colormodel||c.colormodel,d=u.fmt;for(b=0;b<l.w;b++){var g=a(b),y=a(b+1);if(y!==g&&!isNaN(y)&&!isNaN(g))for(var x=0;x<l.h;x++){var _=o(x),k=o(x+1);k===_||isNaN(k)||isNaN(_)||!t(b,x)||(r=c._scaler(t(b,x)),n.fillStyle=r?p+\"(\"+d(r).join(\",\")+\")\":\"rgba(0,0,0,0)\",n.fillRect(g,_,y-g,k-_))}}return e}}))}},12826:function(t,e,r){\"use strict\";var n=r(39898);t.exports=function(t){n.select(t).selectAll(\".im image\").style(\"opacity\",(function(t){return t[0].trace.opacity}))}},54846:function(t,e,r){\"use strict\";var n=r(1426).extendFlat,i=r(1426).extendDeep,a=r(30962).overrideAll,o=r(41940),s=r(22399),l=r(27670).Y,u=r(13838),c=r(44467).templatedArray,f=r(22372),h=r(12663).descriptionOnlyNumbers,p=o({editType:\"plot\",colorEditType:\"plot\"}),d={color:{valType:\"color\",editType:\"plot\"},line:{color:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},width:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},thickness:{valType:\"number\",min:0,max:1,dflt:1,editType:\"plot\"},editType:\"calc\"},v={valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},g=c(\"step\",i({},d,{range:v}));t.exports={mode:{valType:\"flaglist\",editType:\"calc\",flags:[\"number\",\"delta\",\"gauge\"],dflt:\"number\"},value:{valType:\"number\",editType:\"calc\",anim:!0},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},domain:l({name:\"indicator\",trace:!0,editType:\"calc\"}),title:{text:{valType:\"string\",editType:\"plot\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},font:n({},p,{}),editType:\"plot\"},number:{valueformat:{valType:\"string\",dflt:\"\",editType:\"plot\",description:h(\"value\")},font:n({},p,{}),prefix:{valType:\"string\",dflt:\"\",editType:\"plot\"},suffix:{valType:\"string\",dflt:\"\",editType:\"plot\"},editType:\"plot\"},delta:{reference:{valType:\"number\",editType:\"calc\"},position:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],dflt:\"bottom\",editType:\"plot\"},relative:{valType:\"boolean\",editType:\"plot\",dflt:!1},valueformat:{valType:\"string\",editType:\"plot\",description:h(\"value\")},increasing:{symbol:{valType:\"string\",dflt:f.INCREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:f.INCREASING.COLOR,editType:\"plot\"},editType:\"plot\"},decreasing:{symbol:{valType:\"string\",dflt:f.DECREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:f.DECREASING.COLOR,editType:\"plot\"},editType:\"plot\"},font:n({},p,{}),prefix:{valType:\"string\",dflt:\"\",editType:\"plot\"},suffix:{valType:\"string\",dflt:\"\",editType:\"plot\"},editType:\"calc\"},gauge:{shape:{valType:\"enumerated\",editType:\"plot\",dflt:\"angular\",values:[\"angular\",\"bullet\"]},bar:i({},d,{color:{dflt:\"green\"}}),bgcolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},axis:a({range:v,visible:n({},u.visible,{dflt:!0}),tickmode:u.minor.tickmode,nticks:u.nticks,tick0:u.tick0,dtick:u.dtick,tickvals:u.tickvals,ticktext:u.ticktext,ticks:n({},u.ticks,{dflt:\"outside\"}),ticklen:u.ticklen,tickwidth:u.tickwidth,tickcolor:u.tickcolor,ticklabelstep:u.ticklabelstep,showticklabels:u.showticklabels,labelalias:u.labelalias,tickfont:o({}),tickangle:u.tickangle,tickformat:u.tickformat,tickformatstops:u.tickformatstops,tickprefix:u.tickprefix,showtickprefix:u.showtickprefix,ticksuffix:u.ticksuffix,showticksuffix:u.showticksuffix,separatethousands:u.separatethousands,exponentformat:u.exponentformat,minexponent:u.minexponent,showexponent:u.showexponent,editType:\"plot\"},\"plot\"),steps:g,threshold:{line:{color:n({},d.line.color,{}),width:n({},d.line.width,{dflt:1}),editType:\"plot\"},thickness:n({},d.thickness,{dflt:.85}),value:{valType:\"number\",editType:\"calc\",dflt:!1},editType:\"plot\"},editType:\"plot\"}}},15970:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"indicator\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},24667:function(t){\"use strict\";t.exports={calc:function(t,e){var r=[],n=e.value;\"number\"!=typeof e._lastValue&&(e._lastValue=e.value);var i=e._lastValue,a=i;return e._hasDelta&&\"number\"==typeof e.delta.reference&&(a=e.delta.reference),r[0]={y:n,lastY:i,delta:n-a,relativeDelta:(n-a)/a},r}}},84577:function(t){\"use strict\";t.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},94425:function(t,e,r){\"use strict\";var n=r(71828),i=r(54846),a=r(27670).c,o=r(44467),s=r(85501),l=r(84577),u=r(26218),c=r(38701),f=r(96115),h=r(89426);function p(t,e){function r(r,a){return n.coerce(t,e,i.gauge.steps,r,a)}r(\"color\"),r(\"line.color\"),r(\"line.width\"),r(\"range\"),r(\"thickness\")}t.exports={supplyDefaults:function(t,e,r,d){function v(r,a){return n.coerce(t,e,i,r,a)}a(e,d,v),v(\"mode\"),e._hasNumber=-1!==e.mode.indexOf(\"number\"),e._hasDelta=-1!==e.mode.indexOf(\"delta\"),e._hasGauge=-1!==e.mode.indexOf(\"gauge\");var g=v(\"value\");e._range=[0,\"number\"==typeof g?1.5*g:1];var y,m,x,b,_,w,T=new Array(2);function k(t,e){return n.coerce(x,b,i.gauge,t,e)}function A(t,e){return n.coerce(_,w,i.gauge.axis,t,e)}if(e._hasNumber&&(v(\"number.valueformat\"),v(\"number.font.color\",d.font.color),v(\"number.font.family\",d.font.family),v(\"number.font.size\"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,T[0]=!0),v(\"number.prefix\"),v(\"number.suffix\"),y=e.number.font.size),e._hasDelta&&(v(\"delta.font.color\",d.font.color),v(\"delta.font.family\",d.font.family),v(\"delta.font.size\"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(y||l.defaultNumberFontSize),T[1]=!0),v(\"delta.reference\",e.value),v(\"delta.relative\"),v(\"delta.valueformat\",e.delta.relative?\"2%\":\"\"),v(\"delta.increasing.symbol\"),v(\"delta.increasing.color\"),v(\"delta.decreasing.symbol\"),v(\"delta.decreasing.color\"),v(\"delta.position\"),v(\"delta.prefix\"),v(\"delta.suffix\"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||T[0])&&(!e._hasDelta||T[1])||!1,v(\"title.font.color\",d.font.color),v(\"title.font.family\",d.font.family),v(\"title.font.size\",.25*(y||m||l.defaultNumberFontSize)),v(\"title.text\"),e._hasGauge){(x=t.gauge)||(x={}),b=o.newContainer(e,\"gauge\"),k(\"shape\"),(e._isBullet=\"bullet\"===e.gauge.shape)||v(\"title.align\",\"center\"),(e._isAngular=\"angular\"===e.gauge.shape)||v(\"align\",\"center\"),k(\"bgcolor\",d.paper_bgcolor),k(\"borderwidth\"),k(\"bordercolor\"),k(\"bar.color\"),k(\"bar.line.color\"),k(\"bar.line.width\"),k(\"bar.thickness\",l.valueThickness*(\"bullet\"===e.gauge.shape?.5:1)),s(x,b,{name:\"steps\",handleItemDefaults:p}),k(\"threshold.value\"),k(\"threshold.thickness\"),k(\"threshold.line.width\"),k(\"threshold.line.color\"),_={},x&&(_=x.axis||{}),w=o.newContainer(b,\"axis\"),A(\"visible\"),e._range=A(\"range\",e._range);var M={outerTicks:!0};u(_,w,A,\"linear\"),h(_,w,A,\"linear\",M),f(_,w,A,\"linear\",M),c(_,w,A,M)}else v(\"title.align\",\"center\"),v(\"align\",\"center\"),e._isAngular=e._isBullet=!1;e._length=null}}},15154:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"indicator\",basePlotModule:r(15970),categories:[\"svg\",\"noOpacity\",\"noHover\"],animatable:!0,attributes:r(54846),supplyDefaults:r(94425).supplyDefaults,calc:r(24667).calc,plot:r(75634),meta:{}}},75634:function(t,e,r){\"use strict\";var n=r(39898),i=r(81684).sX,a=r(81684).k4,o=r(71828),s=o.strScale,l=o.strTranslate,u=o.rad2deg,c=r(18783).MID_SHIFT,f=r(91424),h=r(84577),p=r(63893),d=r(89298),v=r(71453),g=r(52830),y=r(13838),m=r(7901),x={left:\"start\",center:\"middle\",right:\"end\"},b={left:0,center:.5,right:1},_=/[yzafpnµmkMGTPEZY]/;function w(t){return t&&t.duration>0}function T(t){t.each((function(t){m.stroke(n.select(this),t.line.color)})).each((function(t){m.fill(n.select(this),t.color)})).style(\"stroke-width\",(function(t){return t.line.width}))}function k(t,e,r){var n=t._fullLayout,i=o.extendFlat({type:\"linear\",ticks:\"outside\",range:r,showline:!0},e),a={type:\"linear\",_id:\"x\"+e._id},s={letter:\"x\",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return o.coerce(i,a,y,t,e)}return v(i,a,l,s,n),g(i,a,l,s),a}function A(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+\"x\"+r]}function M(t,e,r,i){var a=document.createElementNS(\"http://www.w3.org/2000/svg\",\"text\"),o=n.select(a);return o.text(t).attr(\"x\",0).attr(\"y\",0).attr(\"text-anchor\",r).attr(\"data-unformatted\",t).call(p.convertToTspans,i).call(f.font,e),f.bBox(o.node())}function S(t,e,r,n,i,a){var s=\"_cache\"+e;t[s]&&t[s].key===i||(t[s]={key:i,value:r});var l=o.aggNums(a,null,[t[s].value,n],2);return t[s].value=l,l}t.exports=function(t,e,r,v){var g,y=t._fullLayout;w(r)&&v&&(g=v()),o.makeTraceGroups(y._indicatorlayer,e,\"trace\").each((function(e){var v,E,L,C,P,O=e[0].trace,I=n.select(this),D=O._hasGauge,z=O._isAngular,R=O._isBullet,F=O.domain,B={w:y._size.w*(F.x[1]-F.x[0]),h:y._size.h*(F.y[1]-F.y[0]),l:y._size.l+y._size.w*F.x[0],r:y._size.r+y._size.w*(1-F.x[1]),t:y._size.t+y._size.h*(1-F.y[1]),b:y._size.b+y._size.h*F.y[0]},N=B.l+B.w/2,j=B.t+B.h/2,U=Math.min(B.w/2,B.h),V=h.innerRadius*U,H=O.align||\"center\";if(E=j,D){if(z&&(v=N,E=j+U/2,L=function(t){return function(t,e){return[e/Math.sqrt(t.width/2*(t.width/2)+t.height*t.height),t,e]}(t,.9*V)}),R){var q=h.bulletPadding,G=1-h.bulletNumberDomainSize+q;v=B.l+(G+(1-G)*b[H])*B.w,L=function(t){return A(t,(h.bulletNumberDomainSize-q)*B.w,B.h)}}}else v=B.l+b[H]*B.w,L=function(t){return A(t,B.w,B.h)};!function(t,e,r,i){var u,c,h,v=r[0].trace,g=i.numbersX,y=i.numbersY,T=v.align||\"center\",A=x[T],E=i.transitionOpts,L=i.onComplete,C=o.ensureSingle(e,\"g\",\"numbers\"),P=[];v._hasNumber&&P.push(\"number\"),v._hasDelta&&(P.push(\"delta\"),\"left\"===v.delta.position&&P.reverse());var O=C.selectAll(\"text\").data(P);function I(e,r,n,i){if(!e.match(\"s\")||n>=0==i>=0||r(n).slice(-1).match(_)||r(i).slice(-1).match(_))return r;var a=e.slice().replace(\"s\",\"f\").replace(/\\d+/,(function(t){return parseInt(t)-1})),o=k(t,{tickformat:a});return function(t){return Math.abs(t)<1?d.tickText(o,t).text:r(t)}}O.enter().append(\"text\"),O.attr(\"text-anchor\",(function(){return A})).attr(\"class\",(function(t){return t})).attr(\"x\",null).attr(\"y\",null).attr(\"dx\",null).attr(\"dy\",null),O.exit().remove();var D,z=v.mode+v.align;if(v._hasDelta&&(D=function(){var e=k(t,{tickformat:v.delta.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.delta.suffix,s=v.delta.prefix,l=function(t){return v.delta.relative?t.relativeDelta:t.delta},u=function(t,e){return 0===t||\"number\"!=typeof t||isNaN(t)?\"-\":(t>0?v.delta.increasing.symbol:v.delta.decreasing.symbol)+s+e(t)+o},h=function(t){return t.delta>=0?v.delta.increasing.color:v.delta.decreasing.color};void 0===v._deltaLastValue&&(v._deltaLastValue=l(r[0]));var g=C.select(\"text.delta\");function y(){g.text(u(l(r[0]),i)).call(m.fill,h(r[0])).call(p.convertToTspans,t)}return g.call(f.font,v.delta.font).call(m.fill,h({delta:v._deltaLastValue})),w(E)?g.transition().duration(E.duration).ease(E.easing).tween(\"text\",(function(){var t=n.select(this),e=l(r[0]),o=v._deltaLastValue,s=I(v.delta.valueformat,i,o,e),c=a(o,e);return v._deltaLastValue=e,function(e){t.text(u(c(e),s)),t.call(m.fill,h({delta:c(e)}))}})).each(\"end\",(function(){y(),L&&L()})).each(\"interrupt\",(function(){y(),L&&L()})):y(),c=M(u(l(r[0]),i),v.delta.font,A,t),g}(),z+=v.delta.position+v.delta.font.size+v.delta.font.family+v.delta.valueformat,z+=v.delta.increasing.symbol+v.delta.decreasing.symbol,h=c),v._hasNumber&&(function(){var e=k(t,{tickformat:v.number.valueformat},v._range);e.setScale(),d.prepTicks(e);var i=function(t){return d.tickText(e,t).text},o=v.number.suffix,s=v.number.prefix,l=C.select(\"text.number\");function c(){var e=\"number\"==typeof r[0].y?s+i(r[0].y)+o:\"-\";l.text(e).call(f.font,v.number.font).call(p.convertToTspans,t)}w(E)?l.transition().duration(E.duration).ease(E.easing).each(\"end\",(function(){c(),L&&L()})).each(\"interrupt\",(function(){c(),L&&L()})).attrTween(\"text\",(function(){var t=n.select(this),e=a(r[0].lastY,r[0].y);v._lastValue=r[0].y;var l=I(v.number.valueformat,i,r[0].lastY,r[0].y);return function(r){t.text(s+l(e(r))+o)}})):c(),u=M(s+i(r[0].y)+o,v.number.font,A,t)}(),z+=v.number.font.size+v.number.font.family+v.number.valueformat+v.number.suffix+v.number.prefix,h=u),v._hasDelta&&v._hasNumber){var R,F,B=[(u.left+u.right)/2,(u.top+u.bottom)/2],N=[(c.left+c.right)/2,(c.top+c.bottom)/2],j=.75*v.delta.font.size;\"left\"===v.delta.position&&(R=S(v,\"deltaPos\",0,-1*(u.width*b[v.align]+c.width*(1-b[v.align])+j),z,Math.min),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:c.left+R,right:u.right,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),\"right\"===v.delta.position&&(R=S(v,\"deltaPos\",0,u.width*(1-b[v.align])+c.width*b[v.align]+j,z,Math.max),F=B[1]-N[1],h={width:u.width+c.width+j,height:Math.max(u.height,c.height),left:u.left,right:c.right+R,top:Math.min(u.top,c.top+F),bottom:Math.max(u.bottom,c.bottom+F)}),\"bottom\"===v.delta.position&&(R=null,F=c.height,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height,bottom:u.bottom+c.height}),\"top\"===v.delta.position&&(R=null,F=u.top,h={width:Math.max(u.width,c.width),height:u.height+c.height,left:Math.min(u.left,c.left),right:Math.max(u.right,c.right),top:u.bottom-u.height-c.height,bottom:u.bottom}),D.attr({dx:R,dy:F})}(v._hasNumber||v._hasDelta)&&C.attr(\"transform\",(function(){var t=i.numbersScaler(h);z+=t[2];var e,r=S(v,\"numbersScale\",1,t[0],z,Math.min);v._scaleNumbers||(r=1),e=v._isAngular?y-r*h.bottom:y-r*(h.top+h.bottom)/2,v._numbersTop=r*h.top+e;var n=h[T];\"center\"===T&&(n=(h.left+h.right)/2);var a=g-r*n;return a=S(v,\"numbersTranslate\",0,a,z,Math.max),l(a,e)+s(r)}))}(t,I,e,{numbersX:v,numbersY:E,numbersScaler:L,transitionOpts:r,onComplete:g}),D&&(C={range:O.gauge.axis.range,color:O.gauge.bgcolor,line:{color:O.gauge.bordercolor,width:0},thickness:1},P={range:O.gauge.axis.range,color:\"rgba(0, 0, 0, 0)\",line:{color:O.gauge.bordercolor,width:O.gauge.borderwidth},thickness:1});var Z=I.selectAll(\"g.angular\").data(z?e:[]);Z.exit().remove();var Y=I.selectAll(\"g.angularaxis\").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,a){var o,s,f,h,p=r[0].trace,v=a.size,g=a.radius,y=a.innerRadius,m=a.gaugeBg,x=a.gaugeOutline,b=[v.l+v.w/2,v.t+v.h/2+g/2],_=a.gauge,A=a.layer,M=a.transitionOpts,S=a.onComplete,E=Math.PI/2;function L(t){var e=p.gauge.axis.range[0],r=(t-e)/(p.gauge.axis.range[1]-e)*Math.PI-E;return r<-E?-E:r>E?E:r}function C(t){return n.svg.arc().innerRadius((y+g)/2-t/2*(g-y)).outerRadius((y+g)/2+t/2*(g-y)).startAngle(-E)}function P(t){t.attr(\"d\",(function(t){return C(t.thickness).startAngle(L(t.range[0])).endAngle(L(t.range[1]))()}))}_.enter().append(\"g\").classed(\"angular\",!0),_.attr(\"transform\",l(b[0],b[1])),A.enter().append(\"g\").classed(\"angularaxis\",!0).classed(\"crisp\",!0),A.selectAll(\"g.xangularaxistick,path,text\").remove(),(o=k(t,p.gauge.axis)).type=\"linear\",o.range=p.gauge.axis.range,o._id=\"xangularaxis\",o.ticklabeloverflow=\"allow\",o.setScale();var O=function(t){return(o.range[0]-t.x)/(o.range[1]-o.range[0])*Math.PI+Math.PI},I={},D=d.makeLabelFns(o,0).labelStandoff;I.xFn=function(t){var e=O(t);return Math.cos(e)*D},I.yFn=function(t){var e=O(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(D+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*c)},I.anchorFn=function(t){var e=O(t),r=Math.cos(e);return Math.abs(r)<.1?\"middle\":r>0?\"start\":\"end\"},I.heightFn=function(t,e,r){var n=O(t);return-.5*(1+Math.sin(n))*r};var z=function(t){return l(b[0]+g*Math.cos(t),b[1]-g*Math.sin(t))};f=function(t){return z(O(t))};if(s=d.calcTicks(o),h=d.getTickSigns(o)[2],o.visible){h=\"inside\"===o.ticks?-1:1;var R=(o.linewidth||1)/2;d.drawTicks(t,o,{vals:s,layer:A,path:\"M\"+h*R+\",0h\"+h*o.ticklen,transFn:function(t){var e=O(t);return z(e)+\"rotate(\"+-u(e)+\")\"}}),d.drawLabels(t,o,{vals:s,layer:A,transFn:f,labelFns:I})}var F=[m].concat(p.gauge.steps),B=_.selectAll(\"g.bg-arc\").data(F);B.enter().append(\"g\").classed(\"bg-arc\",!0).append(\"path\"),B.select(\"path\").call(P).call(T),B.exit().remove();var N=C(p.gauge.bar.thickness),j=_.selectAll(\"g.value-arc\").data([p.gauge.bar]);j.enter().append(\"g\").classed(\"value-arc\",!0).append(\"path\");var U,V,H,q=j.select(\"path\");w(M)?(q.transition().duration(M.duration).ease(M.easing).each(\"end\",(function(){S&&S()})).each(\"interrupt\",(function(){S&&S()})).attrTween(\"d\",(U=N,V=L(r[0].lastY),H=L(r[0].y),function(){var t=i(V,H);return function(e){return U.endAngle(t(e))()}})),p._lastValue=r[0].y):q.attr(\"d\",\"number\"==typeof r[0].y?N.endAngle(L(r[0].y)):\"M0,0Z\"),q.call(T),j.exit().remove(),F=[];var G=p.gauge.threshold.value;(G||0===G)&&F.push({range:[G,G],color:p.gauge.threshold.color,line:{color:p.gauge.threshold.line.color,width:p.gauge.threshold.line.width},thickness:p.gauge.threshold.thickness});var Z=_.selectAll(\"g.threshold-arc\").data(F);Z.enter().append(\"g\").classed(\"threshold-arc\",!0).append(\"path\"),Z.select(\"path\").call(P).call(T),Z.exit().remove();var Y=_.selectAll(\"g.gauge-outline\").data([x]);Y.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"path\"),Y.select(\"path\").call(P).call(T),Y.exit().remove()}(t,0,e,{radius:U,innerRadius:V,gauge:Z,layer:Y,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var W=I.selectAll(\"g.bullet\").data(R?e:[]);W.exit().remove();var X=I.selectAll(\"g.bulletaxis\").data(R?e:[]);X.exit().remove(),R&&function(t,e,r,n){var i,a,o,s,u,c=r[0].trace,f=n.gauge,p=n.layer,v=n.gaugeBg,g=n.gaugeOutline,y=n.size,x=c.domain,b=n.transitionOpts,_=n.onComplete;f.enter().append(\"g\").classed(\"bullet\",!0),f.attr(\"transform\",l(y.l,y.t)),p.enter().append(\"g\").classed(\"bulletaxis\",!0).classed(\"crisp\",!0),p.selectAll(\"g.xbulletaxistick,path,text\").remove();var A=y.h,M=c.gauge.bar.thickness*A,S=x.x[0],E=x.x[0]+(x.x[1]-x.x[0])*(c._hasNumber||c._hasDelta?1-h.bulletNumberDomainSize:1);function L(t){t.attr(\"width\",(function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))})).attr(\"x\",(function(t){return i.c2p(t.range[0])})).attr(\"y\",(function(t){return.5*(1-t.thickness)*A})).attr(\"height\",(function(t){return t.thickness*A}))}(i=k(t,c.gauge.axis))._id=\"xbulletaxis\",i.domain=[S,E],i.setScale(),a=d.calcTicks(i),o=d.makeTransTickFn(i),s=d.getTickSigns(i)[2],u=y.t+y.h,i.visible&&(d.drawTicks(t,i,{vals:\"inside\"===i.ticks?d.clipEnds(i,a):a,layer:p,path:d.makeTickPath(i,u,s),transFn:o}),d.drawLabels(t,i,{vals:a,layer:p,transFn:o,labelFns:d.makeLabelFns(i,u)}));var C=[v].concat(c.gauge.steps),P=f.selectAll(\"g.bg-bullet\").data(C);P.enter().append(\"g\").classed(\"bg-bullet\",!0).append(\"rect\"),P.select(\"rect\").call(L).call(T),P.exit().remove();var O=f.selectAll(\"g.value-bullet\").data([c.gauge.bar]);O.enter().append(\"g\").classed(\"value-bullet\",!0).append(\"rect\"),O.select(\"rect\").attr(\"height\",M).attr(\"y\",(A-M)/2).call(T),w(b)?O.select(\"rect\").transition().duration(b.duration).ease(b.easing).each(\"end\",(function(){_&&_()})).each(\"interrupt\",(function(){_&&_()})).attr(\"width\",Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y)))):O.select(\"rect\").attr(\"width\",\"number\"==typeof r[0].y?Math.max(0,i.c2p(Math.min(c.gauge.axis.range[1],r[0].y))):0),O.exit().remove();var I=r.filter((function(){return c.gauge.threshold.value||0===c.gauge.threshold.value})),D=f.selectAll(\"g.threshold-bullet\").data(I);D.enter().append(\"g\").classed(\"threshold-bullet\",!0).append(\"line\"),D.select(\"line\").attr(\"x1\",i.c2p(c.gauge.threshold.value)).attr(\"x2\",i.c2p(c.gauge.threshold.value)).attr(\"y1\",(1-c.gauge.threshold.thickness)/2*A).attr(\"y2\",(1-(1-c.gauge.threshold.thickness)/2)*A).call(m.stroke,c.gauge.threshold.line.color).style(\"stroke-width\",c.gauge.threshold.line.width),D.exit().remove();var z=f.selectAll(\"g.gauge-outline\").data([g]);z.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"rect\"),z.select(\"rect\").call(L).call(T),z.exit().remove()}(t,0,e,{gauge:W,layer:X,size:B,gaugeBg:C,gaugeOutline:P,transitionOpts:r,onComplete:g});var J=I.selectAll(\"text.title\").data(e);J.exit().remove(),J.enter().append(\"text\").classed(\"title\",!0),J.attr(\"text-anchor\",(function(){return R?x.right:x[O.title.align]})).text(O.title.text).call(f.font,O.title.font).call(p.convertToTspans,t),J.attr(\"transform\",(function(){var t,e=B.l+B.w*b[O.title.align],r=h.titlePadding,n=f.bBox(J.node());return D?(z&&(t=O.gauge.axis.visible?f.bBox(Y.node()).top-r-n.bottom:B.t+B.h/2-U/2-n.bottom-r),R&&(t=E-(n.top+n.bottom)/2,e=B.l-h.bulletPadding*B.w)):t=O._numbersTop-r-n.bottom,l(e,t)}))}))}},16249:function(t,e,r){\"use strict\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll,c=t.exports=u(l({x:{valType:\"data_array\"},y:{valType:\"data_array\"},z:{valType:\"data_array\"},value:{valType:\"data_array\"},isomin:{valType:\"number\"},isomax:{valType:\"number\"},surface:{show:{valType:\"boolean\",dflt:!0},count:{valType:\"integer\",dflt:2,min:1},fill:{valType:\"number\",min:0,max:1,dflt:1},pattern:{valType:\"flaglist\",flags:[\"A\",\"B\",\"C\",\"D\",\"E\"],extras:[\"all\",\"odd\",\"even\"],dflt:\"all\"}},spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}}},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:a(),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),valuehoverformat:i(\"value\",1),showlegend:l({},s.showlegend,{dflt:!1})},n(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:o.opacity,lightposition:o.lightposition,lighting:o.lighting,flatshading:o.flatshading,contour:o.contour,hoverinfo:l({},s.hoverinfo)}),\"calc\",\"nested\");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType=\"calc+clearAxisTypes\",c.transforms=void 0},56959:function(t,e,r){\"use strict\";var n=r(78803),i=r(88489).processGrid,a=r(88489).filter;t.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=a(e.x,e._len),e._y=a(e.y,e._len),e._z=a(e.z,e._len),e._value=a(e.value,e._len);var r=i(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var u=e._value[l];o=Math.min(o,u),s=Math.max(s,u)}e._minValues=o,e._maxValues=s,e._vMin=void 0===e.isomin||null===e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:\"\",cLetter:\"c\"})}},22674:function(t,e,r){\"use strict\";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),i=Math.max(e[r],e[r-1]);if(i>n&&n<t&&t<=i)return{id:r,distRatio:(i-t)/(i-n)}}return{id:0,distRatio:0}};function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\"\",this.data=null,this.showContour=!1}var c=u.prototype;c.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},c.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=h(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=i(t),this.mesh.update(l)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var f=[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"];function h(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,r,n,i,a,o,s,u=t.surface.show,c=t.spaceframe.show,h=t.surface.fill,p=t.spaceframe.fill,d=!1,v=!1,g=0,y=t._Xs,m=t._Ys,x=t._Zs,b=y.length,_=m.length,w=x.length,T=f.indexOf(t._gridFill.replace(/-/g,\"\").replace(/\\+/g,\"\")),k=function(t,e,r){switch(T){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},A=t._minValues,M=t._maxValues,S=t._vMin,E=t._vMax;function L(t,e,s){for(var l=o.length,u=r;u<l;u++)if(t===n[u]&&e===i[u]&&s===a[u])return u;return-1}function C(){r=e}function P(){n=[],i=[],a=[],o=[],e=0,C()}function O(t,r,s,l){return n.push(t),i.push(r),a.push(s),o.push(l),++e-1}function I(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=t[i]*(1-r)+r*e[i];return n}function D(t){s=t}function z(t,e){return\"all\"===t||null===t||t.indexOf(e)>-1}function R(t,e){return null===t?e:t}function F(e,r,n){C();var i,a,o,l=[r],u=[n];if(s>=1)l=[r],u=[n];else if(s>0){var c=function(t,e){var r=t[0],n=t[1],i=t[2],a=function(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=(t[i]+e[i]+r[i])/3;return n}(r,n,i),o=Math.sqrt(1-s),l=I(a,r,o),u=I(a,n,o),c=I(a,i,o),f=e[0],h=e[1],p=e[2];return{xyzv:[[r,n,u],[u,l,r],[n,i,c],[c,u,n],[i,r,l],[l,c,i]],abc:[[f,h,-1],[-1,-1,f],[h,p,-1],[-1,-1,h],[p,f,-1],[-1,-1,p]]}}(r,n);l=c.xyzv,u=c.abc}for(var f=0;f<l.length;f++){r=l[f],n=u[f];for(var h=[],p=0;p<3;p++){var d=r[p][0],v=r[p][1],y=r[p][2],m=r[p][3],x=n[p]>-1?n[p]:L(d,v,y);h[p]=x>-1?x:O(d,v,y,R(e,m))}i=h[0],a=h[1],o=h[2],t._meshI.push(i),t._meshJ.push(a),t._meshK.push(o),++g}}function B(t,e,r,n){var i=t[3];i<r&&(i=r),i>n&&(i=n);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function N(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-S);return t>=S-e&&t<=E+e}function U(e){for(var r=[],n=0;n<4;n++){var i=e[n];r.push([t._x[i],t._y[i],t._z[i],t._value[i]])}return r}var V=3;function H(t,e,r,n,i,a){a||(a=1),r=[-1,-1,-1];var o=!1,s=[N(e[0][3],n,i),N(e[1][3],n,i),N(e[2][3],n,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(F(t,e,r),!0):a<V&&H(t,e,r,S,E,++a)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var u=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach((function(a){if(s[a[0]]&&s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(h,c,n,i),d=B(h,f,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,o=l(t,[c,f,d],[r[a[0]],r[a[1]],-1])||o,u=!0}})),u||[[0,1,2],[1,2,0],[2,0,1]].forEach((function(a){if(s[a[0]]&&!s[a[1]]&&!s[a[2]]){var c=e[a[0]],f=e[a[1]],h=e[a[2]],p=B(f,c,n,i),d=B(h,c,n,i);o=l(t,[d,p,c],[-1,-1,r[a[0]]])||o,u=!0}})),o}function q(t,e,r,n){var i=!1,a=U(e),o=[N(a[0][3],r,n),N(a[1][3],r,n),N(a[2][3],r,n),N(a[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]&&o[1]&&o[2]&&o[3])return v&&(i=function(t,e,r){var n=function(n,i,a){F(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,a,e)||i),i;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]];if(v)i=F(t,[u,c,f],[e[l[0]],e[l[1]],e[l[2]]])||i;else{var p=B(h,u,r,n),d=B(h,c,r,n),g=B(h,f,r,n);i=F(null,[p,d,g],[-1,-1,-1])||i}s=!0}})),s||([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach((function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(f,u,r,n),d=B(f,c,r,n),g=B(h,c,r,n),y=B(h,u,r,n);v?(i=F(t,[u,y,p],[e[l[0]],-1,-1])||i,i=F(t,[c,d,g],[e[l[1]],-1,-1])||i):i=function(t,e,r){var n=function(t,n,i){F(null,[e[t],e[n],e[i]],[r[t],r[n],r[i]])};n(0,1,2),n(2,3,0)}(0,[p,d,g,y],[-1,-1,-1,-1])||i,s=!0}})),s||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach((function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var u=a[l[0]],c=a[l[1]],f=a[l[2]],h=a[l[3]],p=B(c,u,r,n),d=B(f,u,r,n),g=B(h,u,r,n);v?(i=F(t,[u,p,d],[e[l[0]],-1,-1])||i,i=F(t,[u,d,g],[e[l[0]],-1,-1])||i,i=F(t,[u,g,p],[e[l[0]],-1,-1])||i):i=F(null,[p,d,g],[-1,-1,-1])||i,s=!0}}))),i}function G(t,e,r,n,i,a,o,s,l,u,c){var f=!1;return d&&(z(t,\"A\")&&(f=q(null,[e,r,n,a],u,c)||f),z(t,\"B\")&&(f=q(null,[r,n,i,l],u,c)||f),z(t,\"C\")&&(f=q(null,[r,a,o,l],u,c)||f),z(t,\"D\")&&(f=q(null,[n,a,s,l],u,c)||f),z(t,\"E\")&&(f=q(null,[r,n,a,l],u,c)||f)),v&&(f=q(t,[r,n,a,l],u,c)||f),f}function Z(t,e,r,n,i,a,o,s){return[!0===s[0]||H(t,U([e,r,n]),[e,r,n],a,o),!0===s[1]||H(t,U([n,i,e]),[n,i,e],a,o)]}function Y(t,e,r,n,i,a,o,s,l){return s?Z(t,e,r,i,n,a,o,l):Z(t,r,i,n,e,a,o,l)}function W(t,e,r,n,i,a,o){var s,l,u,c,f=!1,h=function(){f=H(t,[s,l,u],[-1,-1,-1],i,a)||f,f=H(t,[u,c,s],[-1,-1,-1],i,a)||f},p=o[0],d=o[1],v=o[2];return p&&(s=I(U([k(e,r-0,n-0)])[0],U([k(e-1,r-0,n-0)])[0],p),l=I(U([k(e,r-0,n-1)])[0],U([k(e-1,r-0,n-1)])[0],p),u=I(U([k(e,r-1,n-1)])[0],U([k(e-1,r-1,n-1)])[0],p),c=I(U([k(e,r-1,n-0)])[0],U([k(e-1,r-1,n-0)])[0],p),h()),d&&(s=I(U([k(e-0,r,n-0)])[0],U([k(e-0,r-1,n-0)])[0],d),l=I(U([k(e-0,r,n-1)])[0],U([k(e-0,r-1,n-1)])[0],d),u=I(U([k(e-1,r,n-1)])[0],U([k(e-1,r-1,n-1)])[0],d),c=I(U([k(e-1,r,n-0)])[0],U([k(e-1,r-1,n-0)])[0],d),h()),v&&(s=I(U([k(e-0,r-0,n)])[0],U([k(e-0,r-0,n-1)])[0],v),l=I(U([k(e-0,r-1,n)])[0],U([k(e-0,r-1,n-1)])[0],v),u=I(U([k(e-1,r-1,n)])[0],U([k(e-1,r-1,n-1)])[0],v),c=I(U([k(e-1,r-0,n)])[0],U([k(e-1,r-0,n-1)])[0],v),h()),f}function X(t,e,r,n,i,a,o,s,l,u,c,f){var h=t;return f?(d&&\"even\"===t&&(h=null),G(h,e,r,n,i,a,o,s,l,u,c)):(d&&\"odd\"===t&&(h=null),G(h,l,s,o,a,i,n,r,e,u,c))}function J(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<w;u++)for(var c=1;c<_;c++)a.push(Y(t,k(l,c-1,u-1),k(l,c-1,u),k(l,c,u-1),k(l,c,u),r,n,(l+c+u)%2,i&&i[o]?i[o]:[])),o++;return a}function K(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<b;u++)for(var c=1;c<w;c++)a.push(Y(t,k(u-1,l,c-1),k(u,l,c-1),k(u-1,l,c),k(u,l,c),r,n,(u+l+c)%2,i&&i[o]?i[o]:[])),o++;return a}function $(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],u=1;u<_;u++)for(var c=1;c<b;c++)a.push(Y(t,k(c-1,u-1,l),k(c-1,u,l),k(c,u-1,l),k(c,u,l),r,n,(c+u+l)%2,i&&i[o]?i[o]:[])),o++;return a}function Q(t,e,r){for(var n=1;n<w;n++)for(var i=1;i<_;i++)for(var a=1;a<b;a++)X(t,k(a-1,i-1,n-1),k(a-1,i-1,n),k(a-1,i,n-1),k(a-1,i,n),k(a,i-1,n-1),k(a,i-1,n),k(a,i,n-1),k(a,i,n),e,r,(a+i+n)%2)}function tt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<w;c++)for(var f=1;f<_;f++)o.push(W(t,u,f,c,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function et(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<b;c++)for(var f=1;f<w;f++)o.push(W(t,c,u,f,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function rt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var u=e[l],c=1;c<_;c++)for(var f=1;f<b;f++)o.push(W(t,f,c,u,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function nt(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){P(),function(){for(var e=0;e<b;e++)for(var r=0;r<_;r++)for(var n=0;n<w;n++){var i=k(e,r,n);O(t._x[i],t._y[i],t._z[i],t._value[i])}}();var e=null;if(c&&p&&(D(p),v=!0,Q(e,S,E),v=!1),u&&h){D(h);for(var r=t.surface.pattern,s=t.surface.count,f=0;f<s;f++){var T=1===s?.5:f/(s-1),L=(1-T)*S+T*E,C=Math.abs(L-A)>Math.abs(L-M)?[A,L]:[L,M];d=!0,Q(r,C[0],C[1]),d=!1}}var I=[[Math.min(S,M),Math.max(S,M)],[Math.min(A,E),Math.max(A,E)]];[\"x\",\"y\",\"z\"].forEach((function(r){for(var n=[],i=0;i<I.length;i++){var a=0,o=I[i][0],s=I[i][1],u=t.slices[r];if(u.show&&u.fill){D(u.fill);var c=[],f=[],h=[];if(u.locations.length)for(var p=0;p<u.locations.length;p++){var d=l(u.locations[p],\"x\"===r?y:\"y\"===r?m:x);0===d.distRatio?c.push(d.id):d.id>0&&(f.push(d.id),\"x\"===r?h.push([d.distRatio,0,0]):\"y\"===r?h.push([0,d.distRatio,0]):h.push([0,0,d.distRatio]))}else c=nt(1,\"x\"===r?b-1:\"y\"===r?_-1:w-1);f.length>0&&(n[a]=\"x\"===r?tt(e,f,o,s,h,n[a]):\"y\"===r?et(e,f,o,s,h,n[a]):rt(e,f,o,s,h,n[a]),a++),c.length>0&&(n[a]=\"x\"===r?J(e,c,o,s,n[a]):\"y\"===r?K(e,c,o,s,n[a]):$(e,c,o,s,n[a]),a++)}var v=t.caps[r];v.show&&v.fill&&(D(v.fill),n[a]=\"x\"===r?J(e,[0,b-1],o,s,n[a]):\"y\"===r?K(e,[0,_-1],o,s,n[a]):$(e,[0,w-1],o,s,n[a]),a++)}})),0===g&&P(),t._meshX=n,t._meshY=i,t._meshZ=a,t._meshIntensity=o,t._Xs=y,t._Ys=m,t._Zs=x}(),t}t.exports={findNearestOnAxis:l,generateIsoMeshes:h,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new u(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}}},82738:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(16249),o=r(1586);function s(t,e,r,n,a){var s=a(\"isomin\"),l=a(\"isomax\");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var u=a(\"x\"),c=a(\"y\"),f=a(\"z\"),h=a(\"value\");u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length?(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],n),a(\"valuehoverformat\"),[\"x\",\"y\",\"z\"].forEach((function(t){a(t+\"hoverformat\");var e=\"caps.\"+t;a(e+\".show\")&&a(e+\".fill\");var r=\"slices.\"+t;a(r+\".show\")&&(a(r+\".fill\"),a(r+\".locations\"))})),a(\"spaceframe.show\")&&a(\"spaceframe.fill\"),a(\"surface.show\")&&(a(\"surface.count\"),a(\"surface.fill\"),a(\"surface.pattern\")),a(\"contour.show\")&&(a(\"contour.color\"),a(\"contour.width\")),[\"text\",\"hovertext\",\"hovertemplate\",\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"opacity\"].forEach((function(t){a(t)})),o(t,e,n,a,{prefix:\"\",cLetter:\"c\"}),e._length=null):e.visible=!1}t.exports={supplyDefaults:function(t,e,r,i){s(t,e,0,i,(function(r,i){return n.coerce(t,e,a,r,i)}))},supplyIsoDefaults:s}},64943:function(t,e,r){\"use strict\";t.exports={attributes:r(16249),supplyDefaults:r(82738).supplyDefaults,calc:r(56959),colorbar:{min:\"cmin\",max:\"cmax\"},plot:r(22674).createIsosurfaceTrace,moduleType:\"trace\",name:\"isosurface\",basePlotModule:r(58547),categories:[\"gl3d\",\"showLegend\"],meta:{}}},2418:function(t,e,r){\"use strict\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(54532),s=r(9012),l=r(1426).extendFlat;t.exports=l({x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},i:{valType:\"data_array\",editType:\"calc\"},j:{valType:\"data_array\",editType:\"calc\"},k:{valType:\"data_array\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:a({editType:\"calc\"}),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),delaunayaxis:{valType:\"enumerated\",values:[\"x\",\"y\",\"z\"],dflt:\"z\",editType:\"calc\"},alphahull:{valType:\"number\",dflt:-1,editType:\"calc\"},intensity:{valType:\"data_array\",editType:\"calc\"},intensitymode:{valType:\"enumerated\",values:[\"vertex\",\"cell\"],dflt:\"vertex\",editType:\"calc\"},color:{valType:\"color\",editType:\"calc\"},vertexcolor:{valType:\"data_array\",editType:\"calc\"},facecolor:{valType:\"data_array\",editType:\"calc\"},transforms:void 0},n(\"\",{colorAttr:\"`intensity`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:o.opacity,flatshading:{valType:\"boolean\",dflt:!1,editType:\"calc\"},contour:{show:l({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:\"calc\"},lightposition:{x:l({},o.lightposition.x,{dflt:1e5}),y:l({},o.lightposition.y,{dflt:1e5}),z:l({},o.lightposition.z,{dflt:0}),editType:\"calc\"},lighting:l({vertexnormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-12,editType:\"calc\"},facenormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-6,editType:\"calc\"},editType:\"calc\"},o.lighting),hoverinfo:l({},s.hoverinfo,{editType:\"calc\"}),showlegend:l({},s.showlegend,{dflt:!1})})},82932:function(t,e,r){\"use strict\";var n=r(78803);t.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:\"\",cLetter:\"c\"})}},91134:function(t,e,r){\"use strict\";var n=r(9330).gl_mesh3d,i=r(9330).delaunay_triangulate,a=r(9330).alpha_shape,o=r(9330).convex_hull,s=r(81697).parseColorScale,l=r(78614),u=r(21081).extractOpts,c=r(90060);function f(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\"\",this.color=\"#fff\",this.data=null,this.showContour=!1}var h=f.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var i=[],a=e.length,o=0;o<a;o++)i[o]=t.d2l(e[o],0,n)*r;return i}function v(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function g(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}h.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.data._cellCenter?t.traceCoordinate=t.data.dataCoordinate:t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,f=t.x.length,h=c(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!g(t.i,f)||!g(t.j,f)||!g(t.k,f))return;n=c(v(t.i),v(t.j),v(t.k))}else n=0===t.alphahull?o(h):t.alphahull>0?a(t.alphahull,h):function(t,e){for(var r=[\"x\",\"y\",\"z\"].indexOf(t),n=[],a=e.length,o=0;o<a;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return i(n)}(t.delaunayaxis,h);var y={positions:h,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var m=u(t);this.color=\"#fff\";var x=t.intensitymode;y[x+\"Intensity\"]=t.intensity,y[x+\"IntensityBounds\"]=[m.min,m.max],y.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],y.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],y.cellColors=p(t.facecolor)):(this.color=t.color,y.meshColor=l(t.color));this.mesh.update(y)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new f(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},58669:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(1586),o=r(2418);t.exports=function(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}function u(t){var e=t.map((function(t){var e=l(t);return e&&i.isArrayOrTypedArray(e)?e:null}));return e.every((function(t){return t&&t.length===e[0].length}))&&e}u([\"x\",\"y\",\"z\"])?(u([\"i\",\"j\",\"k\"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],s),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"alphahull\",\"delaunayaxis\",\"opacity\"].forEach((function(t){l(t)})),l(\"contour.show\")&&(l(\"contour.color\"),l(\"contour.width\")),\"intensity\"in t?(l(\"intensity\"),l(\"intensitymode\"),a(t,e,s,l,{prefix:\"\",cLetter:\"c\"})):(e.showscale=!1,\"facecolor\"in t?l(\"facecolor\"):\"vertexcolor\"in t?l(\"vertexcolor\"):l(\"color\",r)),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),l(\"xhoverformat\"),l(\"yhoverformat\"),l(\"zhoverformat\"),e._length=null):e.visible=!1):e.visible=!1}},21164:function(t,e,r){\"use strict\";t.exports={attributes:r(2418),supplyDefaults:r(58669),calc:r(82932),colorbar:{min:\"cmin\",max:\"cmax\"},plot:r(91134),moduleType:\"trace\",name:\"mesh3d\",basePlotModule:r(58547),categories:[\"gl3d\",\"showLegend\"],meta:{}}},2522:function(t,e,r){\"use strict\";var n=r(71828).extendFlat,i=r(82196),a=r(12663).axisHoverFormat,o=r(79952).P,s=r(77914),l=r(22372),u=l.INCREASING.COLOR,c=l.DECREASING.COLOR,f=i.line;function h(t){return{line:{color:n({},f.color,{dflt:t}),width:f.width,dash:o,editType:\"style\"},editType:\"style\"}}t.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},open:{valType:\"data_array\",editType:\"calc\"},high:{valType:\"data_array\",editType:\"calc\"},low:{valType:\"data_array\",editType:\"calc\"},close:{valType:\"data_array\",editType:\"calc\"},line:{width:n({},f.width,{}),dash:n({},o,{}),editType:\"style\"},increasing:h(u),decreasing:h(c),text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},tickwidth:{valType:\"number\",min:0,max:.5,dflt:.3,editType:\"calc\"},hoverlabel:n({},s.hoverlabel,{split:{valType:\"boolean\",dflt:!1,editType:\"style\"}})}},3485:function(t,e,r){\"use strict\";var n=r(71828),i=n._,a=r(89298),o=r(42973),s=r(50606).BADNUM;function l(t,e,r,n){return{o:t,h:e,l:r,c:n}}function u(t,e,r,o,l,u){for(var c=l.makeCalcdata(e,\"open\"),f=l.makeCalcdata(e,\"high\"),h=l.makeCalcdata(e,\"low\"),p=l.makeCalcdata(e,\"close\"),d=Array.isArray(e.text),v=Array.isArray(e.hovertext),g=!0,y=null,m=!!e.xperiodalignment,x=[],b=0;b<o.length;b++){var _=o[b],w=c[b],T=f[b],k=h[b],A=p[b];if(_!==s&&w!==s&&T!==s&&k!==s&&A!==s){A===w?null!==y&&A!==y&&(g=A>y):g=A>w,y=A;var M=u(w,T,k,A);M.pos=_,M.yc=(w+A)/2,M.i=b,M.dir=g?\"increasing\":\"decreasing\",M.x=M.pos,M.y=[k,T],m&&(M.orig_p=r[b]),d&&(M.tx=e.text[b]),v&&(M.htx=e.hovertext[b]),x.push(M)}else x.push({pos:_,empty:!0})}return e._extremes[l._id]=a.findExtremes(l,n.concat(h,f),{padded:!0}),x.length&&(x[0].t={labels:{open:i(t,\"open:\")+\" \",high:i(t,\"high:\")+\" \",low:i(t,\"low:\")+\" \",close:i(t,\"close:\")+\" \"}}),x}t.exports={calc:function(t,e){var r=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),s=function(t,e,r){var i=r._minDiff;if(!i){var a,s=t._fullData,l=[];for(i=1/0,a=0;a<s.length;a++){var u=s[a];if(\"ohlc\"===u.type&&!0===u.visible&&u.xaxis===e._id){l.push(u);var c=e.makeCalcdata(u,\"x\");u._origX=c;var f=o(r,e,\"x\",c).vals;u._xcalc=f;var h=n.distinctVals(f).minDiff;h&&isFinite(h)&&(i=Math.min(i,h))}}for(i===1/0&&(i=1),a=0;a<l.length;a++)l[a]._minDiff=i}return i*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var f=e._origX;e._origX=null;var h=e._xcalc;e._xcalc=null;var p=u(t,e,f,h,i,l);return e._extremes[r._id]=a.findExtremes(r,h,{vpad:c/2}),p.length?(n.extendFlat(p[0].t,{wHover:c/2,tickLen:s}),p):[{t:{empty:!0}}]},calcCommon:u}},16169:function(t,e,r){\"use strict\";var n=r(71828),i=r(14555),a=r(73927),o=r(2522);function s(t,e,r,n){r(n+\".line.color\"),r(n+\".line.width\",e.line.width),r(n+\".line.dash\",e.line.dash)}t.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,o,r,i)}i(t,e,u,l)?(a(t,e,l,u,{x:!0}),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"line.width\"),u(\"line.dash\"),s(0,e,u,\"increasing\"),s(0,e,u,\"decreasing\"),u(\"text\"),u(\"hovertext\"),u(\"tickwidth\"),l._requestRangeslider[e.xaxis]=!0):e.visible=!1}},66449:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828),a=r(30211),o=r(7901),s=r(71828).fillText,l=r(22372),u={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function c(t,e,r,n){var i,s,l=t.cd,u=t.xa,c=l[0].trace,f=l[0].t,h=c.type,p=\"ohlc\"===h?\"l\":\"min\",d=\"ohlc\"===h?\"h\":\"max\",v=f.bPos||0,g=function(t){return t.pos+v-e},y=f.bdPos||f.tickLen,m=f.wHover,x=Math.min(1,y/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function b(t){var e=g(t);return a.inbox(e-m,e+m,i)}function _(t){var e=t[p],n=t[d];return e===n||a.inbox(e-r,n-r,i)}function w(t){return(b(t)+_(t))/2}i=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var T=a.getDistanceFunction(n,b,_,w);if(a.getClosest(l,T,t),!1===t.index)return null;var k=l[t.index];if(k.empty)return null;var A=c[k.dir],M=A.line.color;return o.opacity(M)&&A.line.width?t.color=M:t.color=A.fillcolor,t.x0=u.c2p(k.pos+v-y,!0),t.x1=u.c2p(k.pos+v+y,!0),t.xLabelVal=void 0!==k.orig_p?k.orig_p:k.pos,t.spikeDistance=w(k)*s/i,t.xSpike=u.c2p(k.pos,!0),t}function f(t,e,r,a){var o=t.cd,s=t.ya,l=o[0].trace,u=o[0].t,f=[],h=c(t,e,r,a);if(!h)return[];var p=o[h.index].hi||l.hoverinfo,d=p.split(\"+\");if(\"all\"!==p&&-1===d.indexOf(\"y\"))return[];for(var v=[\"high\",\"open\",\"close\",\"low\"],g={},y=0;y<v.length;y++){var m,x=v[y],b=l[x][h.index],_=s.c2p(b,!0);b in g?(m=g[b]).yLabel+=\"<br>\"+u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat):((m=i.extendFlat({},h)).y0=m.y1=_,m.yLabelVal=b,m.yLabel=u.labels[x]+n.hoverLabelText(s,b,l.yhoverformat),m.name=\"\",f.push(m),g[b]=m)}return f}function h(t,e,r,i){var a=t.cd,o=t.ya,l=a[0].trace,f=a[0].t,h=c(t,e,r,i);if(!h)return[];var p=a[h.index],d=h.index=p.i,v=p.dir;function g(t){return f.labels[t]+n.hoverLabelText(o,l[t][d],l.yhoverformat)}var y=p.hi||l.hoverinfo,m=y.split(\"+\"),x=\"all\"===y,b=x||-1!==m.indexOf(\"y\"),_=x||-1!==m.indexOf(\"text\"),w=b?[g(\"open\"),g(\"high\"),g(\"low\"),g(\"close\")+\"  \"+u[v]]:[];return _&&s(p,l,w),h.extraText=w.join(\"<br>\"),h.y0=h.y1=o.c2p(p.yc,!0),[h]}t.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?f(t,e,r,n):h(t,e,r,n)},hoverSplit:f,hoverOnPoints:h}},54186:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"ohlc\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"showLegend\"],meta:{},attributes:r(2522),supplyDefaults:r(16169),calc:r(3485).calc,plot:r(72314),style:r(53101),hoverPoints:r(66449).hoverPoints,selectPoints:r(67324)}},14555:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828);t.exports=function(t,e,r,a){var o=r(\"x\"),s=r(\"open\"),l=r(\"high\"),u=r(\"low\"),c=r(\"close\");if(r(\"hoverlabel.split\"),n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\"],a),s&&l&&u&&c){var f=Math.min(s.length,l.length,u.length,c.length);return o&&(f=Math.min(f,i.minRowLength(o))),e._length=f,f}}},72314:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828);t.exports=function(t,e,r,a){var o=e.yaxis,s=e.xaxis,l=!!s.rangebreaks;i.makeTraceGroups(a,r,\"trace ohlc\").each((function(t){var e=n.select(this),r=t[0],a=r.t;if(!0!==r.trace.visible||a.empty)e.remove();else{var u=a.tickLen,c=e.selectAll(\"path\").data(i.identity);c.enter().append(\"path\"),c.exit().remove(),c.attr(\"d\",(function(t){if(t.empty)return\"M0,0Z\";var e=s.c2p(t.pos-u,!0),r=s.c2p(t.pos+u,!0),n=l?(e+r)/2:s.c2p(t.pos,!0);return\"M\"+e+\",\"+o.c2p(t.o,!0)+\"H\"+n+\"M\"+n+\",\"+o.c2p(t.h,!0)+\"V\"+o.c2p(t.l,!0)+\"M\"+r+\",\"+o.c2p(t.c,!0)+\"H\"+n}))}}))}},67324:function(t){\"use strict\";t.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},53101:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(7901);t.exports=function(t,e,r){var o=r||n.select(t).selectAll(\"g.ohlclayer\").selectAll(\"g.trace\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(t){var e=t[0].trace;n.select(this).selectAll(\"path\").each((function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style(\"fill\",\"none\").call(a.stroke,r.color).call(i.dashLine,r.dash,r.width).style(\"opacity\",e.selectedpoints&&!t.selected?.3:1)}}))}))}},99506:function(t,e,r){\"use strict\";var n=r(1426).extendFlat,i=r(9012),a=r(41940),o=r(50693),s=r(5386).fF,l=r(27670).Y,u=n({editType:\"calc\"},o(\"line\",{editTypeOverride:\"calc\"}),{shape:{valType:\"enumerated\",values:[\"linear\",\"hspline\"],dflt:\"linear\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\"]})});t.exports={domain:l({name:\"parcats\",trace:!0,editType:\"calc\"}),hoverinfo:n({},i.hoverinfo,{flags:[\"count\",\"probability\"],editType:\"plot\",arrayOk:!1}),hoveron:{valType:\"enumerated\",values:[\"category\",\"color\",\"dimension\"],dflt:\"category\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\",\"category\",\"categorycount\",\"colorcount\",\"bandcolorcount\"]}),arrangement:{valType:\"enumerated\",values:[\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"perpendicular\",editType:\"plot\"},bundlecolors:{valType:\"boolean\",dflt:!0,editType:\"plot\"},sortpaths:{valType:\"enumerated\",values:[\"forward\",\"backward\"],dflt:\"forward\",editType:\"plot\"},labelfont:a({editType:\"calc\"}),tickfont:a({editType:\"calc\"}),dimensions:{_isLinkedToArray:\"dimension\",label:{valType:\"string\",editType:\"calc\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",dflt:[],editType:\"calc\"},displayindex:{valType:\"integer\",editType:\"calc\"},editType:\"calc\",visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"}},line:u,counts:{valType:\"number\",min:0,dflt:1,arrayOk:!0,editType:\"calc\"},customdata:void 0,hoverlabel:void 0,ids:void 0,legend:void 0,legendgroup:void 0,legendrank:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},27677:function(t,e,r){\"use strict\";var n=r(27659).a0,i=r(45784),a=\"parcats\";e.name=a,e.plot=function(t,e,r,o){var s=n(t.calcdata,a);if(s.length){var l=s[0];i(t,l,r,o)}},e.clean=function(t,e,r,n){var i=n._has&&n._has(\"parcats\"),a=e._has&&e._has(\"parcats\");i&&!a&&n._paperdiv.selectAll(\".parcats\").remove()}},28699:function(t,e,r){\"use strict\";var n=r(28984).wrap,i=r(52075).hasColorscale,a=r(78803),o=r(75744),s=r(91424),l=r(71828),u=r(92770);function c(t,e,r){t.valueInds.push(e),t.count+=r}function f(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+=r}t.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var p,d,v,g=r.map((function(t){var e;if(\"trace\"===t.categoryorder)e=null;else if(\"array\"===t.categoryorder)e=t.categoryarray;else{e=o(t.values);for(var r=!0,n=0;n<e.length;n++)if(!u(e[n])){r=!1;break}e.sort(r?l.sorterAsc:void 0),\"category descending\"===t.categoryorder&&(e=e.reverse())}return function(t,e){e=null==e?[]:e.map((function(t){return t}));var r={},n={},i=[];e.forEach((function(t,e){r[t]=0,n[t]=e}));for(var a=0;a<t.length;a++){var o,s=t[a];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),i.push(o)}var l=e.map((function(t){return r[t]}));return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)}));p=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e,r=t.map((function(t){return t.displayindex}));if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(r))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach((function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])}));var y,m=e.line;m?(i(e,\"line\")&&a(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),y=s.tryColorscale(m)):y=l.identity;var x,b,_,w,T,k=r[0].values.length,A={},M=g.map((function(t){return t.inds}));for(v=0,x=0;x<k;x++){var S=[];for(b=0;b<M.length;b++)S.push(M[b][x]);d=p[x%p.length],v+=d;var E=(_=x,w=void 0,T=void 0,l.isArrayOrTypedArray(m.color)?T=w=m.color[_%m.color.length]:w=m.color,{color:y(w),rawColor:T}),L=S+\"-\"+E.rawColor;void 0===A[L]&&(A[L]=f(S,E.color,E.rawColor)),h(A[L],x,d)}var C,P=r.map((function(t,e){return function(t,e,r,n,i){return{dimensionInd:t,containerInd:e,displayInd:r,dimensionLabel:n,count:i,categories:[],dragX:null}}(e,t._index,t._displayindex,t.label,v)}));for(x=0;x<k;x++)for(d=p[x%p.length],b=0;b<P.length;b++){var O=P[b].containerInd,I=g[b].inds[x],D=P[b].categories;if(void 0===D[I]){var z=e.dimensions[O]._categoryarray[I],R=e.dimensions[O]._ticktext[I];D[I]={dimensionInd:b,categoryInd:C=I,categoryValue:z,displayInd:C,categoryLabel:R,valueInds:[],count:0,dragY:null}}c(D[I],x,d)}return n(function(t,e,r){var n=t.map((function(t){return t.categories.length})).reduce((function(t,e){return Math.max(t,e)}));return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(P,A,v))}},14647:function(t,e,r){\"use strict\";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(99506),u=r(94397);function c(t,e){function r(r,i){return n.coerce(t,e,l.dimensions,r,i)}var i=r(\"values\"),a=r(\"visible\");if(i&&i.length||(a=e.visible=!1),a){r(\"label\"),r(\"displayindex\",e._index);var o,s=t.categoryarray,u=Array.isArray(s)&&s.length>0;u&&(o=\"array\");var c=r(\"categoryorder\",o);\"array\"===c?(r(\"categoryarray\"),r(\"ticktext\")):(delete t.categoryarray,delete t.ticktext),u||\"array\"!==c||(e.categoryorder=\"trace\")}}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,l,r,i)}var p=s(t,e,{name:\"dimensions\",handleItemDefaults:c}),d=function(t,e,r,o,s){s(\"line.shape\"),s(\"line.hovertemplate\");var l=s(\"line.color\",o.colorway[0]);if(i(t,\"line\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color=r}return 1/0}(t,e,r,f,h);o(e,f,h),Array.isArray(p)&&p.length||(e.visible=!1),u(e,p,\"values\",d),h(\"hoveron\"),h(\"hovertemplate\"),h(\"arrangement\"),h(\"bundlecolors\"),h(\"sortpaths\"),h(\"counts\");var v={family:f.font.family,size:Math.round(f.font.size),color:f.font.color};n.coerceFont(h,\"labelfont\",v);var g={family:f.font.family,size:Math.round(f.font.size/1.2),color:f.font.color};n.coerceFont(h,\"tickfont\",g)}},94873:function(t,e,r){\"use strict\";t.exports={attributes:r(99506),supplyDefaults:r(14647),calc:r(28699),plot:r(45784),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcats\",basePlotModule:r(27677),categories:[\"noOpacity\"],meta:{}}},45460:function(t,e,r){\"use strict\";var n=r(39898),i=r(81684).k4,a=r(72391),o=r(30211),s=r(71828),l=s.strTranslate,u=r(91424),c=r(84267),f=r(63893);function h(t,e,r,i){var a=e._context.staticPlot,o=t.map(F.bind(0,e,r)),c=i.selectAll(\"g.parcatslayer\").data([null]);c.enter().append(\"g\").attr(\"class\",\"parcatslayer\").style(\"pointer-events\",a?\"none\":\"all\");var h=c.selectAll(\"g.trace.parcats\").data(o,p),m=h.enter().append(\"g\").attr(\"class\",\"trace parcats\");h.attr(\"transform\",(function(t){return l(t.x,t.y)})),m.append(\"g\").attr(\"class\",\"paths\");var x=h.select(\"g.paths\").selectAll(\"path.path\").data((function(t){return t.paths}),p);x.attr(\"fill\",(function(t){return t.model.color}));var w=x.enter().append(\"path\").attr(\"class\",\"path\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",0);_(w),x.attr(\"d\",(function(t){return t.svgD})),w.empty()||x.sort(v),x.exit().remove(),x.on(\"mouseover\",g).on(\"mouseout\",y).on(\"click\",b),m.append(\"g\").attr(\"class\",\"dimensions\");var A=h.select(\"g.dimensions\").selectAll(\"g.dimension\").data((function(t){return t.dimensions}),p);A.enter().append(\"g\").attr(\"class\",\"dimension\"),A.attr(\"transform\",(function(t){return l(t.x,0)})),A.exit().remove();var M=A.selectAll(\"g.category\").data((function(t){return t.categories}),p),S=M.enter().append(\"g\").attr(\"class\",\"category\");M.attr(\"transform\",(function(t){return l(0,t.y)})),S.append(\"rect\").attr(\"class\",\"catrect\").attr(\"pointer-events\",\"none\"),M.select(\"rect.catrect\").attr(\"fill\",\"none\").attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),T(S);var E=M.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),p);E.each((function(){s.raiseToTop(this)})),E.attr(\"fill\",(function(t){return t.color}));var D=E.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);E.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})).attr(\"cursor\",(function(t){return\"fixed\"===t.parcatsViewModel.arrangement?\"default\":\"perpendicular\"===t.parcatsViewModel.arrangement?\"ns-resize\":\"move\"})),k(D),E.exit().remove(),S.append(\"text\").attr(\"class\",\"catlabel\").attr(\"pointer-events\",\"none\");var z=e._fullLayout.paper_bgcolor;M.select(\"text.catlabel\").attr(\"text-anchor\",(function(t){return d(t)?\"start\":\"end\"})).attr(\"alignment-baseline\",\"middle\").style(\"text-shadow\",f.makeTextShadow(z)).style(\"fill\",\"rgb(0, 0, 0)\").attr(\"x\",(function(t){return d(t)?t.width+5:-5})).attr(\"y\",(function(t){return t.height/2})).text((function(t){return t.model.categoryLabel})).each((function(t){u.font(n.select(this),t.parcatsViewModel.categorylabelfont),f.convertToTspans(n.select(this),e)})),S.append(\"text\").attr(\"class\",\"dimlabel\"),M.select(\"text.dimlabel\").attr(\"text-anchor\",\"middle\").attr(\"alignment-baseline\",\"baseline\").attr(\"cursor\",(function(t){return\"fixed\"===t.parcatsViewModel.arrangement?\"default\":\"ew-resize\"})).attr(\"x\",(function(t){return t.width/2})).attr(\"y\",-5).text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})).each((function(t){u.font(n.select(this),t.parcatsViewModel.labelfont)})),M.selectAll(\"rect.bandrect\").on(\"mouseover\",L).on(\"mouseout\",C),M.exit().remove(),A.call(n.behavior.drag().origin((function(t){return{x:t.x,y:0}})).on(\"dragstart\",P).on(\"drag\",O).on(\"dragend\",I)),h.each((function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll(\"g.paths\").selectAll(\"path.path\"),t.dimensionSelection=n.select(this).selectAll(\"g.dimensions\").selectAll(\"g.dimension\")})),h.exit().remove()}function p(t){return t.key}function d(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function v(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function g(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){s.raiseToTop(this),w(n.select(this));var e=m(t),r=x(t);if(t.parcatsViewModel.graphDiv.emit(\"plotly_hover\",{points:e,event:n.event,constraints:r}),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"none\")){var i,a,l,u=n.mouse(this)[0],f=t.parcatsViewModel.graphDiv,h=t.parcatsViewModel.trace,p=f._fullLayout,d=p._paperdiv.node().getBoundingClientRect(),v=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(l=0;l<t.leftXs.length-1;l++)if(t.leftXs[l]+t.dimWidths[l]-2<=u&&u<=t.leftXs[l+1]+2){var g=t.parcatsViewModel.dimensions[l],y=t.parcatsViewModel.dimensions[l+1];i=(g.x+g.width+y.x)/2,a=(t.topYs[l]+t.topYs[l+1]+t.height)/2;break}var b=t.parcatsViewModel.x+i,_=t.parcatsViewModel.y+a,T=c.mostReadable(t.model.color,[\"black\",\"white\"]),k=t.model.count,A=k/t.parcatsViewModel.model.count,M={countLabel:k,probabilityLabel:A.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&S.push([\"Count:\",M.countLabel].join(\" \")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&S.push([\"P:\",M.probabilityLabel].join(\" \"));var E=S.join(\"<br>\"),L=n.mouse(f)[0];o.loneHover({trace:h,x:b-d.left+v.left,y:_-d.top+v.top,text:E,color:t.model.color,borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontSize:10,fontColor:T,idealAlign:L<b?\"right\":\"left\",hovertemplate:(h.line||{}).hovertemplate,hovertemplateLabels:M,eventData:[{data:h._input,fullData:h,count:k,probability:A}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:f})}}}function y(t){if(!t.parcatsViewModel.dragDimension&&(_(n.select(this)),o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(v),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\"))){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit(\"plotly_unhover\",{points:e,event:n.event,constraints:r})}}function m(t){for(var e=[],r=D(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var i=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:i})}return e}function x(t){for(var e={},r=t.parcatsViewModel.model.dimensions,n=0;n<r.length;n++){var i=r[n],a=i.categories[t.model.categoryInds[n]];e[i.containerInd]=a.categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function b(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){var e=m(t),r=x(t);t.parcatsViewModel.graphDiv.emit(\"plotly_click\",{points:e,event:n.event,constraints:r})}}function _(t){t.attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",.6).attr(\"stroke\",\"lightgray\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1)}function w(t){t.attr(\"fill-opacity\",.8).attr(\"stroke\",(function(t){return c.mostReadable(t.model.color,[\"black\",\"white\"])})).attr(\"stroke-width\",.3)}function T(t){t.select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",1).attr(\"stroke-opacity\",1)}function k(t){t.attr(\"stroke\",\"black\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1).attr(\"fill-opacity\",1)}function A(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter((function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color}))}function M(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=n.select(t.parentNode).selectAll(\"rect.bandrect\"),l=[];s.each((function(t){A(t).each((function(t){Array.prototype.push.apply(l,m(t))}))}));var u={};u[a.dimensionInd]=a.categoryValue,o.emit(e,{points:l,event:r,constraints:u})}function S(t,e,r){var i=n.select(t).datum(),a=i.categoryViewModel.model,o=i.parcatsViewModel.graphDiv,s=A(i),l=[];s.each((function(t){Array.prototype.push.apply(l,m(t))}));var u={};u[a.dimensionInd]=a.categoryValue,void 0!==i.rawColor&&(u.color=i.rawColor),o.emit(e,{points:l,event:r,constraints:u})}function E(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=n.select(r.parentNode).select(\"rect.catrect\"),u=l.node().getBoundingClientRect(),c=l.datum(),f=c.parcatsViewModel,h=f.model.dimensions[c.model.dimensionInd],p=f.trace,d=u.top+u.height/2;f.dimensions.length>1&&h.displayInd===f.dimensions.length-1?(i=u.left,a=\"left\"):(i=u.left+u.width,a=\"right\");var v=c.model.count,g=c.model.categoryLabel,y=v/c.parcatsViewModel.model.count,m={countLabel:v,categoryLabel:g,probabilityLabel:y.toFixed(3)},x=[];-1!==c.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&x.push([\"Count:\",m.countLabel].join(\" \")),-1!==c.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&x.push([\"P(\"+m.categoryLabel+\"):\",m.probabilityLabel].join(\" \"));var b=x.join(\"<br>\");return{trace:p,x:o*(i-e.left),y:s*(d-e.top),text:b,color:\"lightgray\",borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontSize:12,fontColor:\"black\",idealAlign:a,hovertemplate:p.hovertemplate,hovertemplateLabels:m,eventData:[{data:p._input,fullData:p,count:v,category:g,probability:y}]}}function L(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,i=r._fullLayout,a=i._paperdiv.node().getBoundingClientRect(),l=t.parcatsViewModel.hoveron,u=this;\"color\"===l?(function(t){var e=n.select(t).datum(),r=A(e);w(r),r.each((function(){s.raiseToTop(this)})),n.select(t.parentNode).selectAll(\"rect.bandrect\").filter((function(t){return t.color===e.color})).each((function(){s.raiseToTop(this),n.select(this).attr(\"stroke\",\"black\").attr(\"stroke-width\",1.5)}))}(u),S(u,\"plotly_hover\",n.event)):(function(t){n.select(t.parentNode).selectAll(\"rect.bandrect\").each((function(t){var e=A(t);w(e),e.each((function(){s.raiseToTop(this)}))})),n.select(t.parentNode).select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",2.5)}(u),M(u,\"plotly_hover\",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"none\")&&(\"category\"===l?e=E(r,a,u):\"color\"===l?e=function(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o=t._fullLayout._invScaleX,s=t._fullLayout._invScaleY,l=r.getBoundingClientRect(),u=n.select(r).datum(),f=u.categoryViewModel,h=f.parcatsViewModel,p=h.model.dimensions[f.model.dimensionInd],d=h.trace,v=l.y+l.height/2;h.dimensions.length>1&&p.displayInd===h.dimensions.length-1?(i=l.left,a=\"left\"):(i=l.left+l.width,a=\"right\");var g=f.model.categoryLabel,y=u.parcatsViewModel.model.count,m=0;u.categoryViewModel.bands.forEach((function(t){t.color===u.color&&(m+=t.count)}));var x=f.model.count,b=0;h.pathSelection.each((function(t){t.model.color===u.color&&(b+=t.model.count)}));var _=m/y,w=m/b,T=m/x,k={countLabel:y,categoryLabel:g,probabilityLabel:_.toFixed(3)},A=[];-1!==f.parcatsViewModel.hoverinfoItems.indexOf(\"count\")&&A.push([\"Count:\",k.countLabel].join(\" \")),-1!==f.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")&&(A.push(\"P(color ∩ \"+g+\"): \"+k.probabilityLabel),A.push(\"P(\"+g+\" | color): \"+w.toFixed(3)),A.push(\"P(color | \"+g+\"): \"+T.toFixed(3)));var M=A.join(\"<br>\"),S=c.mostReadable(u.color,[\"black\",\"white\"]);return{trace:d,x:o*(i-e.left),y:s*(v-e.top),text:M,color:u.color,borderColor:\"black\",fontFamily:'Monaco, \"Courier New\", monospace',fontColor:S,fontSize:10,idealAlign:a,hovertemplate:d.hovertemplate,hovertemplateLabels:k,eventData:[{data:d._input,fullData:d,category:g,count:y,probability:_,categorycount:x,colorcount:b,bandcolorcount:m}]}}(r,a,u):\"dimension\"===l&&(e=function(t,e,r){var i=[];return n.select(r.parentNode.parentNode).selectAll(\"g.category\").select(\"rect.catrect\").each((function(){i.push(E(t,e,this))})),i}(r,a,u)),e&&o.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r}))}}function C(t){var e=t.parcatsViewModel;e.dragDimension||(_(e.pathSelection),T(e.dimensionSelection.selectAll(\"g.category\")),k(e.dimensionSelection.selectAll(\"g.category\").selectAll(\"rect.bandrect\")),o.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(v),-1!==e.hoverinfoItems.indexOf(\"skip\"))||(\"color\"===t.parcatsViewModel.hoveron?S(this,\"plotly_unhover\",n.event):M(this,\"plotly_unhover\",n.event))}function P(t){\"fixed\"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll(\"g.category\").select(\"rect.catrect\").each((function(e){var r=n.mouse(this)[0],i=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map((function(t){return t.displayInd})),e.model.dragY=e.y,s.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll(\"rect.bandrect\").each((function(e){e.y<i&&i<=e.y+e.height&&(t.potentialClickBand=this)})))})),t.parcatsViewModel.dragDimension=t,o.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function O(t){if(\"fixed\"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,i=e+1,a=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=a.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,u=a.categories,c=u[l-1],f=u[l+1];void 0!==c&&s<c.y+c.height/2&&(o.model.displayInd=c.model.displayInd,c.model.displayInd=l),void 0!==f&&s+o.height>f.y+f.height/2&&(o.model.displayInd=f.model.displayInd,f.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||\"freeform\"===t.parcatsViewModel.arrangement){a.model.dragX=n.event.x;var h=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[i];void 0!==h&&a.model.dragX<h.x+h.width&&(a.model.displayInd=h.model.displayInd,h.model.displayInd=e),void 0!==p&&a.model.dragX+a.width>p.x&&(a.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}j(t.parcatsViewModel),N(t.parcatsViewModel),R(t.parcatsViewModel),z(t.parcatsViewModel)}}function I(t){if(\"fixed\"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll(\"text\").attr(\"font-weight\",\"normal\");var e={},r=D(t.parcatsViewModel),i=t.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),o=t.initialDragDimensionDisplayInds.some((function(t,e){return t!==i[e]}));o&&i.forEach((function(r,n){var i=t.parcatsViewModel.model.dimensions[n].containerInd;e[\"dimensions[\"+i+\"].displayindex\"]=r}));var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map((function(t){return t.displayInd}));if(s=t.initialDragCategoryDisplayInds.some((function(t,e){return t!==l[e]}))){var u=t.model.categories.slice().sort((function(t,e){return t.displayInd-e.displayInd})),c=u.map((function(t){return t.categoryValue})),f=u.map((function(t){return t.categoryLabel}));e[\"dimensions[\"+t.model.containerInd+\"].categoryarray\"]=[c],e[\"dimensions[\"+t.model.containerInd+\"].ticktext\"]=[f],e[\"dimensions[\"+t.model.containerInd+\"].categoryorder\"]=\"array\"}}-1===t.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")&&!t.dragHasMoved&&t.potentialClickBand&&(\"color\"===t.parcatsViewModel.hoveron?S(t.potentialClickBand,\"plotly_click\",n.event.sourceEvent):M(t.potentialClickBand,\"plotly_click\",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd&&(t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null),t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,j(t.parcatsViewModel),N(t.parcatsViewModel),n.transition().duration(300).ease(\"cubic-in-out\").each((function(){R(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)})).each(\"end\",(function(){(o||s)&&a.restyle(t.parcatsViewModel.graphDiv,e,[r])}))}}function D(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function z(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data((function(t){return t.paths}),p),(r=t.pathSelection,e?r.transition():r).attr(\"d\",(function(t){return t.svgD}))}function R(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data((function(t){return t.dimensions}),p);var i=t.dimensionSelection.selectAll(\"g.category\").data((function(t){return t.categories}),p);r(t.dimensionSelection).attr(\"transform\",(function(t){return l(t.x,0)})),r(i).attr(\"transform\",(function(t){return l(0,t.y)})),i.select(\".dimlabel\").text((function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})),i.select(\".catlabel\").attr(\"text-anchor\",(function(t){return d(t)?\"start\":\"end\"})).attr(\"x\",(function(t){return d(t)?t.width+5:-5})).each((function(t){var e,r;d(t)?(e=t.width+5,r=\"start\"):(e=-5,r=\"end\"),n.select(this).selectAll(\"tspan\").attr(\"x\",e).attr(\"text-anchor\",r)}));var a=i.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),p),o=a.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"cursor\",\"move\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);a.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})),k(o),a.each((function(){s.raiseToTop(this)})),a.exit().remove()}function F(t,e,r){var n,i=r[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,u=e.height,c=Math.floor(l*(s.x[1]-s.x[0])),f=Math.floor(u*(s.y[1]-s.y[0])),h=s.x[0]*l+a.l,p=e.height-s.y[1]*e.height+a.t,d=o.line.shape;n=\"all\"===o.hoverinfo?[\"count\",\"probability\"]:(o.hoverinfo||\"\").split(\"+\");var v={trace:o,key:o.uid,model:i,x:h,y:p,width:c,height:f,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};return i.dimensions&&(j(v),N(v)),v}function B(t,e,r,n,a){var o,s,l=[],u=[];for(s=0;s<r.length-1;s++)o=i(r[s]+t[s],t[s+1]),l.push(o(a)),u.push(o(1-a));var c=\"M \"+t[0]+\",\"+e[0];for(c+=\"l\"+r[0]+\",0 \",s=1;s<r.length;s++)c+=\"C\"+l[s-1]+\",\"+e[s-1]+\" \"+u[s-1]+\",\"+e[s]+\" \"+t[s]+\",\"+e[s],c+=\"l\"+r[s]+\",0 \";for(c+=\"l0,\"+n+\" \",c+=\"l -\"+r[r.length-1]+\",0 \",s=r.length-2;s>=0;s--)c+=\"C\"+u[s]+\",\"+(e[s+1]+n)+\" \"+l[s]+\",\"+(e[s]+n)+\" \"+(t[s]+r[s])+\",\"+(e[s]+n),c+=\"l-\"+r[s]+\",0 \";return c+\"Z\"}function N(t){var e=t.dimensions,r=t.model,n=e.map((function(t){return t.categories.map((function(t){return t.y}))})),i=t.model.dimensions.map((function(t){return t.categories.map((function(t){return t.displayInd}))})),a=t.model.dimensions.map((function(t){return t.displayInd})),o=t.dimensions.map((function(t){return t.model.dimensionInd})),s=e.map((function(t){return t.x})),l=e.map((function(t){return t.width})),u=[];for(var c in r.paths)r.paths.hasOwnProperty(c)&&u.push(r.paths[c]);function f(t){var e=t.categoryInds.map((function(t,e){return i[e][t]}));return o.map((function(t){return e[t]}))}u.sort((function(e,r){var n=f(e),i=f(r);return\"backward\"===t.sortpaths&&(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),i.unshift(r.rawColor)),n<i?-1:n>i?1:0}));for(var h=new Array(u.length),p=e[0].model.count,d=e[0].categories.map((function(t){return t.height})).reduce((function(t,e){return t+e})),v=0;v<u.length;v++){var g,y=u[v];g=p>0?d*(y.count/p):0;for(var m,x=new Array(n.length),b=0;b<y.categoryInds.length;b++){var _=y.categoryInds[b],w=i[b][_],T=a[b];x[T]=n[T][w],n[T][w]+=g;var k=t.dimensions[T].categories[w],A=k.bands.length,M=k.bands[A-1];if(void 0===M||y.rawColor!==M.rawColor){var S=void 0===M?0:M.y+M.height;k.bands.push({key:S,color:y.color,rawColor:y.rawColor,height:g,width:k.width,count:y.count,y:S,categoryViewModel:k,parcatsViewModel:t})}else{var E=k.bands[A-1];E.height+=g,E.count+=y.count}}m=\"hspline\"===t.pathShape?B(s,x,l,g,.5):B(s,x,l,g,0),h[v]={key:y.valueInds[0],model:y,height:g,leftXs:s,topYs:x,dimWidths:l,svgD:m,parcatsViewModel:t}}t.paths=h}function j(t){var e=t.model.dimensions.map((function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}}));e.sort((function(t,e){return t.displayInd-e.displayInd}));var r=[];for(var n in e){var i=e[n].dimensionInd,a=t.model.dimensions[i];r.push(U(t,a))}t.dimensions=r}function U(t,e){var r,n=t.model.dimensions.length,i=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,u,c=[],f=t.model.maxCats,h=e.categories.length,p=e.count,d=t.height-8*(f-1),v=8*(f-h)/2,g=e.categories.map((function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}}));for(g.sort((function(t,e){return t.displayInd-e.displayInd})),u=0;u<h;u++)l=g[u].categoryInd,o=e.categories[l],a=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:a,y:null!==o.dragY?o.dragY:v,bands:[],parcatsViewModel:t},v=v+a+8,c.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:c,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}t.exports=function(t,e,r,n){h(r,t,n,e)}},45784:function(t,e,r){\"use strict\";var n=r(45460);t.exports=function(t,e,r,i){var a=t._fullLayout,o=a._paper,s=a._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},73362:function(t,e,r){\"use strict\";var n=r(50693),i=r(13838),a=r(41940),o=r(27670).Y,s=r(1426).extendFlat,l=r(44467).templatedArray;t.exports={domain:o({name:\"parcoords\",trace:!0,editType:\"plot\"}),labelangle:{valType:\"angle\",dflt:0,editType:\"plot\"},labelside:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},labelfont:a({editType:\"plot\"}),tickfont:a({editType:\"plot\"}),rangefont:a({editType:\"plot\"}),dimensions:l(\"dimension\",{label:{valType:\"string\",editType:\"plot\"},tickvals:s({},i.tickvals,{editType:\"plot\"}),ticktext:s({},i.ticktext,{editType:\"plot\"}),tickformat:s({},i.tickformat,{editType:\"plot\"}),visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},constraintrange:{valType:\"info_array\",freeLength:!0,dimensions:\"1-2\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},multiselect:{valType:\"boolean\",dflt:!0,editType:\"plot\"},values:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"}),line:s({editType:\"calc\"},n(\"line\",{colorscaleDflt:\"Viridis\",autoColorDflt:!1,editTypeOverride:\"calc\"})),unselected:{line:{color:{valType:\"color\",dflt:\"#7f7f7f\",editType:\"plot\"},opacity:{valType:\"number\",min:0,max:1,dflt:\"auto\",editType:\"plot\"},editType:\"plot\"},editType:\"plot\"}}},57920:function(t,e,r){\"use strict\";var n=r(25706),i=r(39898),a=r(28984).keyFun,o=r(28984).repeat,s=r(71828).sorterAsc,l=r(71828).strTranslate,u=n.bar.snapRatio;function c(t,e){return t*(1-u)+e*u}var f=n.bar.snapClose;function h(t,e){return t*(1-f)+e*f}function p(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var i=t?-1:1,a=0,o=e.length-1;if(i<0){var s=a;a=o,o=s}for(var l=e[a],u=l,f=a;i*f<i*o;f+=i){var p=f+i,d=e[p];if(i*r<i*h(l,d))return c(l,u);if(i*r<i*d||p===o)return c(d,l);u=l,l=d}}function d(t){t.attr(\"x\",-n.bar.captureWidth/2).attr(\"width\",n.bar.captureWidth)}function v(t){t.attr(\"visibility\",\"visible\").style(\"visibility\",\"visible\").attr(\"fill\",\"yellow\").attr(\"opacity\",0)}function g(t){if(!t.brush.filterSpecified)return\"0,\"+t.height;for(var e,r,n,i=y(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;s<i.length;s++)r=(e=i[s])[1]-e[0],a.push(o),a.push(r),(n=s+1)<i.length&&(o=i[n][0]-e[1]);return a.push(t.height),a}function y(t,e){return t.map((function(t){return t.map((function(t){return Math.max(0,t*e)})).sort(s)}))}function m(){i.select(document.body).style(\"cursor\",null)}function x(t){t.attr(\"stroke-dasharray\",g)}function b(t,e){var r=i.select(t).selectAll(\".highlight, .highlight-shadow\");x(e?r.transition().duration(n.bar.snapDuration).each(\"end\",e):r)}function _(t,e){var r,i=t.brush,a=NaN,o={};if(i.filterSpecified){var s=t.height,l=i.filter.getConsolidated(),u=y(l,s),c=NaN,f=NaN,h=NaN;for(r=0;r<=u.length;r++){var p=u[r];if(p&&p[0]<=e&&e<=p[1]){c=r;break}if(f=r?r-1:NaN,p&&p[0]>e){h=r;break}}if(a=c,isNaN(a)&&(a=isNaN(f)||isNaN(h)?isNaN(f)?h:f:e-u[f][1]<u[h][0]-e?f:h),!isNaN(a)){var d=u[a],v=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?\"n\":e<=.9*t[0]+.1*t[1]?\"s\":\"ns\"}(d,e);v&&(o.interval=l[a],o.intervalPix=d,o.region=v)}}if(t.ordinal&&!o.region){var g=t.unitTickvals,m=t.unitToPaddedPx.invert(e);for(r=0;r<g.length;r++){var x=[.25*g[Math.max(r-1,0)]+.75*g[r],.25*g[Math.min(r+1,g.length-1)]+.75*g[r]];if(m>=x[0]&&m<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function w(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.brush.svgBrush;a.wasDragged=!0,a._dragging=!0,a.grabbingBar?a.newExtent=[r-a.grabPoint,r+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):a.newExtent=[a.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,a.extent=a.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),b(t.parentNode)}function T(t,e){var r=_(e,e.height-i.mouse(t)[1]-2*n.verticalPadding),a=\"crosshair\";r.clickableOrdinalRange?a=\"pointer\":r.region&&(a=r.region+\"-resize\"),i.select(document.body).style(\"cursor\",a)}function k(t){t.on(\"mousemove\",(function(t){i.event.preventDefault(),t.parent.inBrushDrag||T(this,t)})).on(\"mouseleave\",(function(t){t.parent.inBrushDrag||m()})).call(i.behavior.drag().on(\"dragstart\",(function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.unitToPaddedPx.invert(r),o=e.brush,s=_(e,r),l=s.interval,u=o.svgBrush;if(u.wasDragged=!1,u.grabbingBar=\"ns\"===s.region,u.grabbingBar){var c=l.map(e.unitToPaddedPx);u.grabPoint=r-c[0]-n.verticalPadding,u.barLength=c[1]-c[0]}u.clickableOrdinalRange=s.clickableOrdinalRange,u.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(u.stayingIntervals=u.stayingIntervals.filter((function(t){return t[0]!==l[0]&&t[1]!==l[1]}))),u.startExtent=s.region?l[\"s\"===s.region?1:0]:a,e.parent.inBrushDrag=!0,u.brushStartCallback()}(this,t)})).on(\"drag\",(function(t){w(this,t)})).on(\"dragend\",(function(t){!function(t,e){var r=e.brush,n=r.filter,a=r.svgBrush;a._dragging||(T(t,e),w(t,e),e.brush.svgBrush.wasDragged=!1),a._dragging=!1,i.event.sourceEvent.stopPropagation();var o=a.grabbingBar;if(a.grabbingBar=!1,a.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!a.wasDragged)return a.wasDragged=void 0,a.clickableOrdinalRange?r.filterSpecified&&e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent=[a.clickableOrdinalRange],r.filterSpecified=!0):o?(a.extent=a.stayingIntervals,0===a.extent.length&&M(r)):M(r),a.brushCallback(e),b(t.parentNode),void a.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),a.newExtent=[p(0,l,a.newExtent[0],a.stayingIntervals),p(1,l,a.newExtent[1],a.stayingIntervals)];var u=a.newExtent[1]>a.newExtent[0];a.extent=a.stayingIntervals.concat(u?[a.newExtent]:[]),a.extent.length||M(r),a.brushCallback(e),u?b(t.parentNode,s):(s(),b(t.parentNode))}else s();a.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)})))}function A(t,e){return t[0]-e[0]}function M(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function S(t){for(var e,r=t.slice(),n=[],i=r.shift();i;){for(e=i.slice();(i=r.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);n.push(e)}return 1===n.length&&n[0][0]>n[0][1]&&(n=[]),n}t.exports={makeBrush:function(t,e,r,n,i,a){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map((function(t){return t.slice().sort(s)})).sort(A)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=S(r),e=r.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=i,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map((function(t){return t.slice()}))}(e),n=r.slice();e.filter.set(n),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t,e,r){var i=t.selectAll(\".\"+n.cn.axisBrush).data(o,a);i.enter().append(\"g\").classed(n.cn.axisBrush,!0),function(t,e,r){var i=r._context.staticPlot,a=t.selectAll(\".background\").data(o);a.enter().append(\"rect\").classed(\"background\",!0).call(d).call(v).style(\"pointer-events\",i?\"none\":\"auto\").attr(\"transform\",l(0,n.verticalPadding)),a.call(k).attr(\"height\",(function(t){return t.height-n.verticalPadding}));var s=t.selectAll(\".highlight-shadow\").data(o);s.enter().append(\"line\").classed(\"highlight-shadow\",!0).attr(\"x\",-n.bar.width/2).attr(\"stroke-width\",n.bar.width+n.bar.strokeWidth).attr(\"stroke\",e).attr(\"opacity\",n.bar.strokeOpacity).attr(\"stroke-linecap\",\"butt\"),s.attr(\"y1\",(function(t){return t.height})).call(x);var u=t.selectAll(\".highlight\").data(o);u.enter().append(\"line\").classed(\"highlight\",!0).attr(\"x\",-n.bar.width/2).attr(\"stroke-width\",n.bar.width-n.bar.strokeWidth).attr(\"stroke\",n.bar.fillColor).attr(\"opacity\",n.bar.fillOpacity).attr(\"stroke-linecap\",\"butt\"),u.attr(\"y1\",(function(t){return t.height})).call(x)}(i,e,r)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map((function(t){return t.sort(s)})),t=e.multiselect?S(t.sort(A)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map((function(t){var e=[p(0,r,t[0],[]),p(1,r,t[1],[])];if(e[1]>e[0])return e})).filter((function(t){return t}))).length)return}return t.length>1?t:t[0]}}},71791:function(t,e,r){\"use strict\";t.exports={attributes:r(73362),supplyDefaults:r(3633),calc:r(24639),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcoords\",basePlotModule:r(49351),categories:[\"gl\",\"regl\",\"noOpacity\",\"noHover\"],meta:{}}},49351:function(t,e,r){\"use strict\";var n=r(39898),i=r(27659).a0,a=r(21341),o=r(77922);e.name=\"parcoords\",e.plot=function(t){var e=i(t.calcdata,\"parcoords\")[0];e.length&&a(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has(\"parcoords\"),a=e._has&&e._has(\"parcoords\");i&&!a&&(n._paperdiv.selectAll(\".parcoords\").remove(),n._glimages.selectAll(\"*\").remove())},e.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\".svg-container\");r.filter((function(t,e){return e===r.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t=this,r=t.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":r,preserveAspectRatio:\"none\",x:0,y:0,width:t.style.width,height:t.style.height})})),window.setTimeout((function(){n.selectAll(\"#filterBarPattern\").attr(\"id\",\"filterBarPattern\")}),60)}},24639:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray,i=r(21081),a=r(28984).wrap;t.exports=function(t,e){var r,o;return i.hasColorscale(e,\"line\")&&n(e.line.color)?(r=e.line.color,o=i.extractOpts(e.line).colorscale,i.calc(t,e,{vals:r,containerStr:\"line\",cLetter:\"c\"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),a({lineColor:r,cscale:o})}},25706:function(t){\"use strict\";t.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:[\"contextLineLayer\",\"focusLineLayer\",\"pickLineLayer\"],axisTitleOffset:28,axisExtentOffset:10,bar:{width:4,captureWidth:10,fillColor:\"magenta\",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:\"axis-extent-text\",parcoordsLineLayers:\"parcoords-line-layers\",parcoordsLineLayer:\"parcoords-lines\",parcoords:\"parcoords\",parcoordsControlView:\"parcoords-control-view\",yAxis:\"y-axis\",axisOverlays:\"axis-overlays\",axis:\"axis\",axisHeading:\"axis-heading\",axisTitle:\"axis-title\",axisExtent:\"axis-extent\",axisExtentTop:\"axis-extent-top\",axisExtentTopText:\"axis-extent-top-text\",axisExtentBottom:\"axis-extent-bottom\",axisExtentBottomText:\"axis-extent-bottom-text\",axisBrush:\"axis-brush\"},id:{filterBarPattern:\"filter-bar-pattern\"}}},3633:function(t,e,r){\"use strict\";var n=r(71828),i=r(52075).hasColorscale,a=r(1586),o=r(27670).c,s=r(85501),l=r(89298),u=r(73362),c=r(57920),f=r(25706).maxDimensionCount,h=r(94397);function p(t,e,r,i){function a(r,i){return n.coerce(t,e,u.dimensions,r,i)}var o=a(\"values\"),s=a(\"visible\");if(o&&o.length||(s=e.visible=!1),s){a(\"label\"),a(\"tickvals\"),a(\"ticktext\"),a(\"tickformat\");var f=a(\"range\");e._ax={_id:\"y\",type:\"linear\",showexponent:\"all\",exponentformat:\"B\",range:f},l.setConvert(e._ax,i.layout),a(\"multiselect\");var h=a(\"constraintrange\");h&&(e.constraintrange=c.cleanRanges(h,e))}}t.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,u,r,i)}var d=t.dimensions;Array.isArray(d)&&d.length>f&&(n.log(\"parcoords traces support up to \"+f+\" dimensions at the moment\"),d.splice(f));var v=s(t,e,{name:\"dimensions\",layout:l,handleItemDefaults:p}),g=function(t,e,r,o,s){var l=s(\"line.color\",r);if(i(t,\"line\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,c);o(e,l,c),Array.isArray(v)&&v.length||(e.visible=!1),h(e,v,\"values\",g);var y={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(c,\"labelfont\",y),n.coerceFont(c,\"tickfont\",y),n.coerceFont(c,\"rangefont\",y),c(\"labelangle\"),c(\"labelside\"),c(\"unselected.line.color\"),c(\"unselected.line.opacity\")}},1602:function(t,e,r){\"use strict\";var n=r(71828).isTypedArray;e.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},e.isOrdinal=function(t){return!!t.tickvals},e.isVisible=function(t){return t.visible||!(\"visible\"in t)}},67618:function(t,e,r){\"use strict\";var n=r(71791);n.plot=r(21341),t.exports=n},83398:function(t,e,r){\"use strict\";var n=r(56068),i=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\\n               p17_20, p21_24, p25_28, p29_32,\\n               p33_36, p37_40, p41_44, p45_48,\\n               p49_52, p53_56, p57_60, colors;\\n\\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\\n\\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\\nuniform float maskHeight;\\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\\nuniform vec4 contextColor;\\nuniform sampler2D maskTexture, palette;\\n\\nbool isPick    = (drwLayer > 1.5);\\nbool isContext = (drwLayer < 0.5);\\n\\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\\n\\nfloat val(mat4 p, mat4 v) {\\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\\n}\\n\\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\\n    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\\n    return y1 * (1.0 - ratio) + y2 * ratio;\\n}\\n\\nint iMod(int a, int b) {\\n    return a - b * (a / b);\\n}\\n\\nbool fOutside(float p, float lo, float hi) {\\n    return (lo < hi) && (lo > p || p > hi);\\n}\\n\\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\\n    return (\\n        fOutside(p[0], lo[0], hi[0]) ||\\n        fOutside(p[1], lo[1], hi[1]) ||\\n        fOutside(p[2], lo[2], hi[2]) ||\\n        fOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\\n    return (\\n        vOutside(p[0], lo[0], hi[0]) ||\\n        vOutside(p[1], lo[1], hi[1]) ||\\n        vOutside(p[2], lo[2], hi[2]) ||\\n        vOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    return mOutside(A, loA, hiA) ||\\n           mOutside(B, loB, hiB) ||\\n           mOutside(C, loC, hiC) ||\\n           mOutside(D, loD, hiD);\\n}\\n\\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    mat4 pnts[4];\\n    pnts[0] = A;\\n    pnts[1] = B;\\n    pnts[2] = C;\\n    pnts[3] = D;\\n\\n    for(int i = 0; i < 4; ++i) {\\n        for(int j = 0; j < 4; ++j) {\\n            for(int k = 0; k < 4; ++k) {\\n                if(0 == iMod(\\n                    int(255.0 * texture2D(maskTexture,\\n                        vec2(\\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\\n                        ))[3]\\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\\n                    2\\n                )) return true;\\n            }\\n        }\\n    }\\n    return false;\\n}\\n\\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float x = 0.5 * sign(v) + 0.5;\\n    float y = axisY(x, A, B, C, D);\\n    float z = 1.0 - abs(v);\\n\\n    z += isContext ? 0.0 : 2.0 * float(\\n        outsideBoundingBox(A, B, C, D) ||\\n        outsideRasterMask(A, B, C, D)\\n    );\\n\\n    return vec4(\\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\\n        z,\\n        1.0\\n    );\\n}\\n\\nvoid main() {\\n    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\\n    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\\n    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\\n    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\\n\\n    float v = colors[3];\\n\\n    gl_Position = position(isContext, v, A, B, C, D);\\n\\n    fragColor =\\n        isContext ? vec4(contextColor) :\\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\\n}\\n\"]),a=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n    gl_FragColor = fragColor;\\n}\\n\"]),o=r(25706).maxDimensionCount,s=r(71828),l=1e-6,u=new Uint8Array(4),c=new Uint8Array(4),f={shape:[256,1],format:\"rgba\",type:\"uint8\",mag:\"nearest\",min:\"nearest\"};function h(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function p(t,e,r,n,i,a){var o=a.key;r.drawCompleted||(function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var u=Math.min(n,i-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],h(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(a.count=2*u,a.offset=2*l*n,e(a),l*n+u<i&&(r.currentRafs[o]=window.requestAnimationFrame((function(){s(l+1)}))),r.drawCompleted=!1)}(0)}function d(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}function v(t,e){return(t>>>8*e)%256/255}function g(t,e,r){for(var n=new Array(8*e),i=0,a=0;a<e;a++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,u=r[64*a+l];63===l&&0===o&&(u*=-1),n[i++]=u}return n}function y(t){var e=\"0\"+t;return e.substr(e.length-2)}function m(t){return t<o?\"p\"+y(t+1)+\"_\"+y(t+4):\"colors\"}function x(t,e,r,n,i,a,o,l,u,c,f,h,p,d){for(var v=[[],[]],g=0;g<64;g++)v[0][g]=g===i?1:0,v[1][g]=g===a?1:0;o*=d,l*=d,u*=d,c*=d;var y=t.lines.canvasOverdrag*d,m=t.domain,x=t.canvasWidth*d,b=t.canvasHeight*d,_=t.pad.l*d,w=t.pad.b*d,T=t.layoutHeight*d,k=t.layoutWidth*d,A=t.deselectedLines.color,M=t.deselectedLines.opacity;return s.extendFlat({key:f,resolution:[x,b],viewBoxPos:[o+y,l],viewBoxSize:[u,c],i0:i,i1:a,dim0A:v[0].slice(0,16),dim0B:v[0].slice(16,32),dim0C:v[0].slice(32,48),dim0D:v[0].slice(48,64),dim1A:v[1].slice(0,16),dim1B:v[1].slice(16,32),dim1C:v[1].slice(32,48),dim1D:v[1].slice(48,64),drwLayer:h,contextColor:[A[0]/255,A[1]/255,A[2]/255,\"auto\"!==M?A[3]*M:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+y)+(_-y)+k*m.x[0],scissorWidth:(n===r?x-o+y:u+.5)+(n===e?o+y:0),scissorY:l+w+T*m.y[0],scissorHeight:c,viewportX:_-y+k*m.x[0],viewportY:w+T*m.y[0],viewportWidth:x,viewportHeight:b},p)}function b(t){var e=2047,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}t.exports=function(t,e){var r,n,u,y,_,w=e.context,T=e.pick,k=e.regl,A=k._gl,M=A.getParameter(A.ALIASED_LINE_WIDTH_RANGE),S=Math.max(M[0],Math.min(M[1],e.viewModel.plotGlPixelRatio)),E={currentRafs:{},drawCompleted:!0,clearOnly:!1},L=function(t){for(var e={},r=0;r<=o;r+=4)e[m(r)]=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)});return e}(k),C=k.texture(f),P=[];I(e);var O=k({profile:!1,blend:{enable:w,func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:1,dstAlpha:1},equation:{rgb:\"add\",alpha:\"add\"},color:[0,0,0,0]},depth:{enable:!w,mask:!0,func:\"less\",range:[0,1]},cull:{enable:!0,face:\"back\"},scissor:{enable:!0,box:{x:k.prop(\"scissorX\"),y:k.prop(\"scissorY\"),width:k.prop(\"scissorWidth\"),height:k.prop(\"scissorHeight\")}},viewport:{x:k.prop(\"viewportX\"),y:k.prop(\"viewportY\"),width:k.prop(\"viewportWidth\"),height:k.prop(\"viewportHeight\")},dither:!1,vert:i,frag:a,primitive:\"lines\",lineWidth:S,attributes:L,uniforms:{resolution:k.prop(\"resolution\"),viewBoxPos:k.prop(\"viewBoxPos\"),viewBoxSize:k.prop(\"viewBoxSize\"),dim0A:k.prop(\"dim0A\"),dim1A:k.prop(\"dim1A\"),dim0B:k.prop(\"dim0B\"),dim1B:k.prop(\"dim1B\"),dim0C:k.prop(\"dim0C\"),dim1C:k.prop(\"dim1C\"),dim0D:k.prop(\"dim0D\"),dim1D:k.prop(\"dim1D\"),loA:k.prop(\"loA\"),hiA:k.prop(\"hiA\"),loB:k.prop(\"loB\"),hiB:k.prop(\"hiB\"),loC:k.prop(\"loC\"),hiC:k.prop(\"hiC\"),loD:k.prop(\"loD\"),hiD:k.prop(\"hiD\"),palette:C,contextColor:k.prop(\"contextColor\"),maskTexture:k.prop(\"maskTexture\"),drwLayer:k.prop(\"drwLayer\"),maskHeight:k.prop(\"maskHeight\")},offset:k.prop(\"offset\"),count:k.prop(\"count\")});function I(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),y=u[0]?u[0].values.length:0;var e=r.lines,i=T?e.color.map((function(t,r){return r/e.color.length})):e.color,a=function(t,e,r){for(var n,i=new Array(t*(o+4)),a=0,s=0;s<t;s++){for(var u=0;u<o;u++)i[a++]=u<e.length?e[u].paddedUnitValues[s]:.5;i[a++]=v(s,2),i[a++]=v(s,1),i[a++]=v(s,0),i[a++]=(n=r[s],Math.max(l,Math.min(.999999,n)))}return i}(y,u,i);!function(t,e,r){for(var n=0;n<=o;n+=4)t[m(n)](g(n/4,e,r))}(L,y,a),w||T||(C=k.texture(s.extendFlat({data:d(r.unitToColor,255)},f)))}return{render:function(t,e,n){var i,a,o,s=t.length,l=1/0,c=-1/0;for(i=0;i<s;i++)t[i].dim0.canvasX<l&&(l=t[i].dim0.canvasX,a=i),t[i].dim1.canvasX>c&&(c=t[i].dim1.canvasX,o=i);0===s&&h(k,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,i=[[],[]];for(n=0;n<64;n++){var a=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];i[0][n]=a[0],i[1][n]=a[1]}var o=new Array(16384);for(e=0;e<16384;e++)o[e]=255;if(!t)for(e=0;e<u.length;e++){var s=e%8,l=(e-s)/8,c=Math.pow(2,s),f=u[e].brush.filter.get();if(!(f.length<2)){var h=b(f[0])[1];for(r=1;r<f.length;r++){var p=b(f[r]);for(n=h+1;n<p[0];n++)o[8*n+l]&=~c;h=Math.max(h,p[1])}}}var d={shape:[8,2048],format:\"alpha\",type:\"uint8\",mag:\"nearest\",min:\"nearest\",data:o};return _?_(d):_=k.texture(d),{maskTexture:_,maskHeight:2048,loA:i[0].slice(0,16),loB:i[0].slice(16,32),loC:i[0].slice(32,48),loD:i[0].slice(48,64),hiA:i[1].slice(0,16),hiB:i[1].slice(16,32),hiC:i[1].slice(32,48),hiD:i[1].slice(48,64)}}(w);for(i=0;i<s;i++){var d=t[i],v=d.dim0.crossfilterDimensionIndex,g=d.dim1.crossfilterDimensionIndex,m=d.canvasX,A=d.canvasY,M=m+d.panelSizeX,S=d.plotGlPixelRatio;if(e||!P[v]||P[v][0]!==m||P[v][1]!==M){P[v]=[m,M];var L=x(r,a,o,i,v,g,m,A,d.panelSizeX,d.panelSizeY,d.dim0.crossfilterDimensionIndex,w?0:T?2:1,f,S);E.clearOnly=n;var C=e?r.lines.blockLineCount:y;p(k,O,E,C,y,L)}}},readPixel:function(t,e){return k.read({x:t,y:e,width:1,height:1,data:c}),c},readPixels:function(t,e,r,n){var i=new Uint8Array(4*r*n);return k.read({x:t,y:e,width:r,height:n,data:i}),i},destroy:function(){for(var e in t.style[\"pointer-events\"]=\"none\",C.destroy(),_&&_.destroy(),L)L[e].destroy()},update:I}}},94397:function(t){\"use strict\";t.exports=function(t,e,r,n){var i,a;for(n||(n=1/0),i=0;i<e.length;i++)(a=e[i]).visible&&(n=Math.min(n,a[r].length));for(n===1/0&&(n=0),t._length=n,i=0;i<e.length;i++)(a=e[i]).visible&&(a._length=n);return n}},17171:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(36652),s=r(89298),l=i.strRotate,u=i.strTranslate,c=r(63893),f=r(91424),h=r(21081),p=r(28984),d=p.keyFun,v=p.repeat,g=p.unwrap,y=r(1602),m=r(25706),x=r(57920),b=r(83398);function _(t,e,r){return i.aggNums(t,null,e,r)}function w(t,e){return k(_(Math.min,t,e),_(Math.max,t,e))}function T(t){var e=t.range;return e?k(e[0],e[1]):w(t.values,t._length)}function k(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function A(t,e,r,i,o){var s,l,u=T(r);return i?n.scale.ordinal().domain(i.map((s=a(r.tickformat),l=o,l?function(t,e){var r=l[e];return null==r?s(t):r}:s))).range(i.map((function(r){var n=(r-u[0])/(u[1]-u[0]);return t-e+n*(2*e-t)}))):n.scale.linear().domain(u).range([t-e,e])}function M(t){if(t.tickvals){var e=T(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map((function(t){return(t-e[0])/(e[1]-e[0])})))}}function S(t){var e=t.map((function(t){return t[0]})),r=t.map((function(t){var e=o(t[1]);return n.rgb(\"rgb(\"+e[0]+\",\"+e[1]+\",\"+e[2]+\")\")})),i=\"rgb\".split(\"\").map((function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((i=t,function(t){return t[i]})));var i}));return function(t){return i.map((function(e){return e(t)}))}}function E(t){return t.dimensions.some((function(t){return t.brush.filterSpecified}))}function L(t,e,r){var a=g(e),s=a.trace,l=y.convertTypedArray(a.lineColor),u=s.line,c={color:o(s.unselected.line.color),opacity:s.unselected.line.opacity},f=h.extractOpts(u),p=f.reversescale?h.flipScale(a.cscale):a.cscale,d=s.domain,v=s.dimensions,x=t.width,b=s.labelangle,_=s.labelside,w=s.labelfont,k=s.tickfont,A=s.rangefont,M=i.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(T({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:m.blockLineCount,canvasOverdrag:m.overdrag*m.canvasPixelRatio}),E=Math.floor(x*(d.x[1]-d.x[0])),L=Math.floor(t.height*(d.y[1]-d.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},P=E,O=L;return{key:r,colCount:v.filter(y.isVisible).length,dimensions:v,tickDistance:m.tickDistance,unitToColor:S(p),lines:M,deselectedLines:c,labelAngle:b,labelSide:_,labelFont:w,tickFont:k,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:d,translateX:d.x[0]*x,translateY:t.height-d.y[1]*t.height,pad:C,canvasWidth:P*m.canvasPixelRatio+2*M.canvasOverdrag,canvasHeight:O*m.canvasPixelRatio,width:P,height:O,canvasPixelRatio:m.canvasPixelRatio}}function C(t,e,r){var o=r.width,s=r.height,l=r.dimensions,u=r.canvasPixelRatio,c=function(t){return o*t/Math.max(1,r.colCount-1)},f=m.verticalPadding/s,h=function(t,e){return n.scale.linear().range([e,t-e])}(s,m.verticalPadding),p={key:r.key,xScale:c,model:r,inBrushDrag:!1},d={};return p.dimensions=l.filter(y.isVisible).map((function(o,l){var v=function(t,e){return n.scale.linear().domain(T(t)).range([e,1-e])}(o,f),g=d[o.label];d[o.label]=(g||0)+1;var b=o.label+(g?\"__\"+g:\"\"),_=o.constraintrange,w=_&&_.length;w&&!Array.isArray(_[0])&&(_=[_]);var k=w?_.map((function(t){return t.map(v)})):[[-1/0,1/0]],S=o.values;S.length>o._length&&(S=S.slice(0,o._length));var L,C=o.tickvals;function P(t,e){return{val:t,text:L[e]}}function O(t,e){return t.val-e.val}if(Array.isArray(C)&&C.length){L=o.ticktext,Array.isArray(L)&&L.length?L.length>C.length?L=L.slice(0,C.length):C.length>L.length&&(C=C.slice(0,L.length)):L=C.map(a(o.tickformat));for(var I=1;I<C.length;I++)if(C[I]<C[I-1]){for(var D=C.map(P).sort(O),z=0;z<C.length;z++)C[z]=D[z].val,L[z]=D[z].text;break}}else C=void 0;return S=y.convertTypedArray(S),{key:b,label:o.label,tickFormat:o.tickformat,tickvals:C,ticktext:L,ordinal:y.isOrdinal(o),multiselect:o.multiselect,xIndex:l,crossfilterDimensionIndex:l,visibleIndex:o._index,height:s,values:S,paddedUnitValues:S.map(v),unitTickvals:C&&C.map(v),xScale:c,x:c(l),canvasX:c(l)*u,unitToPaddedPx:h,domainScale:A(s,m.verticalPadding,o,C,L),ordinalScale:M(o),parent:p,model:r,brush:x.makeBrush(t,w,k,(function(){t.linePickActive(!1)}),(function(){var e=p;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=E(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))}),(function(r){if(p.focusLayer.render(p.panels,!0),p.pickLayer&&p.pickLayer.render(p.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=v.invert,a=r.map((function(t){return t.map(n).sort(i.sorterAsc)})).sort((function(t,e){return t[0]-e[0]}));e.filterChanged(p.key,o._index,a)}}))}})),p}function P(t){t.classed(m.cn.axisExtentText,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"default\")}function O(t,e){var r=\"top\"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function I(t,e,r){for(var n=e.panels||(e.panels=[]),i=t.data(),a=0;a<i.length-1;a++){var o=n[a]||(n[a]={}),s=i[a],l=i[a+1];o.dim0=s,o.dim1=l,o.canvasX=s.canvasX,o.panelSizeX=l.canvasX-s.canvasX,o.panelSizeY=e.model.canvasHeight,o.y=0,o.canvasY=0,o.plotGlPixelRatio=r}}function D(t,e){return s.tickText(t._ax,e,!1).text}function z(t,e){if(t.ordinal)return\"\";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return D(t.model.dimensions[t.visibleIndex],n)}t.exports=function(t,e,r,a){var o=t._context.staticPlot,h=t._fullLayout,p=h._toppaper,_=h._glcontainer,T=t._context.plotGlPixelRatio,A=t._fullLayout.paper_bgcolor;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,i=n.dimensions,a=0;a<i.length;a++){var o=i[a].values,l=i[a]._ax;l&&(l.range?l.range=k(l.range[0],l.range[1]):l.range=w(o,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=i[a].tickformat,s.calcTicks(l),l.cleanRange())}}(e);var M,S,R=(M=!0,S=!1,{linePickActive:function(t){return arguments.length?M=!!t:M},contextShown:function(t){return arguments.length?S=!!t:S}}),F=e.filter((function(t){return g(t).trace.visible})).map(L.bind(0,r)).map(C.bind(0,R,a));_.each((function(t,e){return i.extendFlat(t,F[e])}));var B=_.selectAll(\".gl-canvas\").each((function(t){t.viewModel=F[0],t.viewModel.plotGlPixelRatio=T,t.viewModel.paperColor=A,t.model=t.viewModel?t.viewModel.model:null})),N=null;B.filter((function(t){return t.pick})).style(\"pointer-events\",o?\"none\":\"auto\").on(\"mousemove\",(function(t){if(R.linePickActive()&&t.lineLayer&&a&&a.hover){var e=n.event,r=this.width,i=this.height,o=n.mouse(this),s=o[0],l=o[1];if(s<0||l<0||s>=r||l>=i)return;var u=t.lineLayer.readPixel(s,i-1-l),c=0!==u[3],f=c?u[2]+256*(u[1]+256*u[0]):null,h={x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:f};f!==N&&(c?a.hover(h):a.unhover&&a.unhover(h),N=f)}})),B.style(\"opacity\",(function(t){return t.pick?0:1})),p.style(\"background\",\"rgba(255, 255, 255, 0)\");var j=p.selectAll(\".\"+m.cn.parcoords).data(F,d);j.exit().remove(),j.enter().append(\"g\").classed(m.cn.parcoords,!0).style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"none\"),j.attr(\"transform\",(function(t){return u(t.model.translateX,t.model.translateY)}));var U=j.selectAll(\".\"+m.cn.parcoordsControlView).data(v,d);U.enter().append(\"g\").classed(m.cn.parcoordsControlView,!0),U.attr(\"transform\",(function(t){return u(t.model.pad.l,t.model.pad.t)}));var V=U.selectAll(\".\"+m.cn.yAxis).data((function(t){return t.dimensions}),d);V.enter().append(\"g\").classed(m.cn.yAxis,!0),U.each((function(t){I(V,t,T)})),B.each((function(t){if(t.viewModel){!t.lineLayer||a?t.lineLayer=b(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||a;t.lineLayer.render(t.viewModel.panels,e)}})),V.attr(\"transform\",(function(t){return u(t.xScale(t.xIndex),0)})),V.call(n.behavior.drag().origin((function(t){return t})).on(\"drag\",(function(t){var e=t.parent;R.linePickActive(!1),t.x=Math.max(-m.overdrag,Math.min(t.model.width+m.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,V.sort((function(t,e){return t.x-e.x})).each((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio})),I(V,e,T),V.filter((function(e){return 0!==Math.abs(t.xIndex-e.xIndex)})).attr(\"transform\",(function(t){return u(t.xScale(t.xIndex),0)})),n.select(this).attr(\"transform\",u(t.x,0)),V.each((function(r,n,i){i===t.parent.key&&(e.dimensions[n]=r)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)})).on(\"dragend\",(function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,I(V,e,T),n.select(this).attr(\"transform\",(function(t){return u(t.x,0)})),e.contextLayer&&e.contextLayer.render(e.panels,!1,!E(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),R.linePickActive(!0),a&&a.axesMoved&&a.axesMoved(e.key,e.dimensions.map((function(t){return t.crossfilterDimensionIndex})))}))),V.exit().remove();var H=V.selectAll(\".\"+m.cn.axisOverlays).data(v,d);H.enter().append(\"g\").classed(m.cn.axisOverlays,!0),H.selectAll(\".\"+m.cn.axis).remove();var q=H.selectAll(\".\"+m.cn.axis).data(v,d);q.enter().append(\"g\").classed(m.cn.axis,!0),q.each((function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,i=r.domain();n.select(this).call(n.svg.axis().orient(\"left\").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat((function(e){return y.isOrdinal(t)?e:D(t.model.dimensions[t.visibleIndex],e)})).scale(r)),f.font(q.selectAll(\"text\"),t.model.tickFont)})),q.selectAll(\".domain, .tick>line\").attr(\"fill\",\"none\").attr(\"stroke\",\"black\").attr(\"stroke-opacity\",.25).attr(\"stroke-width\",\"1px\"),q.selectAll(\"text\").style(\"text-shadow\",c.makeTextShadow(A)).style(\"cursor\",\"default\");var G=H.selectAll(\".\"+m.cn.axisHeading).data(v,d);G.enter().append(\"g\").classed(m.cn.axisHeading,!0);var Z=G.selectAll(\".\"+m.cn.axisTitle).data(v,d);Z.enter().append(\"text\").classed(m.cn.axisTitle,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"ew-resize\").style(\"pointer-events\",o?\"none\":\"auto\"),Z.text((function(t){return t.label})).each((function(e){var r=n.select(this);f.font(r,e.model.labelFont),c.convertToTspans(r,t)})).attr(\"transform\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide),r=m.axisTitleOffset;return(e.dir>0?\"\":u(0,2*r+t.model.height))+l(e.degrees)+u(-r*e.dx,-r*e.dy)})).attr(\"text-anchor\",(function(t){var e=O(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?\"start\":\"end\":\"middle\"}));var Y=H.selectAll(\".\"+m.cn.axisExtent).data(v,d);Y.enter().append(\"g\").classed(m.cn.axisExtent,!0);var W=Y.selectAll(\".\"+m.cn.axisExtentTop).data(v,d);W.enter().append(\"g\").classed(m.cn.axisExtentTop,!0),W.attr(\"transform\",u(0,-m.axisExtentOffset));var X=W.selectAll(\".\"+m.cn.axisExtentTopText).data(v,d);X.enter().append(\"text\").classed(m.cn.axisExtentTopText,!0).call(P),X.text((function(t){return z(t,!0)})).each((function(t){f.font(n.select(this),t.model.rangeFont)}));var J=Y.selectAll(\".\"+m.cn.axisExtentBottom).data(v,d);J.enter().append(\"g\").classed(m.cn.axisExtentBottom,!0),J.attr(\"transform\",(function(t){return u(0,t.model.height+m.axisExtentOffset)}));var K=J.selectAll(\".\"+m.cn.axisExtentBottomText).data(v,d);K.enter().append(\"text\").classed(m.cn.axisExtentBottomText,!0).attr(\"dy\",\"0.75em\").call(P),K.text((function(t){return z(t,!1)})).each((function(t){f.font(n.select(this),t.model.rangeFont)})),x.ensureAxisBrush(H,A,t)}},21341:function(t,e,r){\"use strict\";var n=r(17171),i=r(79749),a=r(1602).isVisible,o={};function s(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}(t.exports=function(t,e){var r=t._fullLayout;if(i(t,[],o)){var l={},u={},c={},f={},h=r._size;e.forEach((function(e,r){var n=e[0].trace;c[r]=n.index;var i=f[r]=n._fullInput.index;l[r]=t.data[i].dimensions,u[r]=t.data[i].dimensions.slice()})),n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,i){var a=u[e][n],o=i.map((function(t){return t.slice()})),s=\"dimensions[\"+n+\"].constraintrange\",l=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===l[s]){var h=a.constraintrange;l[s]=h||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit(\"plotly_restyle\",[d,[f[e]]])},hover:function(e){t.emit(\"plotly_hover\",e)},unhover:function(e){t.emit(\"plotly_unhover\",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return s(t,e,r)-s(t,e,n)}}(r,u[e].filter(a));l[e].sort(n),u[e].filter((function(t){return!a(t)})).sort((function(t){return u[e].indexOf(t)})).forEach((function(t){l[e].splice(l[e].indexOf(t),1),l[e].splice(u[e].indexOf(t),0,t)})),t.emit(\"plotly_restyle\",[{dimensions:[l[e]]},[f[e]]])}})}}).reglPrecompiled=o},34e3:function(t,e,r){\"use strict\";var n=r(9012),i=r(27670).Y,a=r(41940),o=r(22399),s=r(5386).fF,l=r(5386).si,u=r(1426).extendFlat,c=r(79952).u,f=a({editType:\"plot\",arrayOk:!0,colorEditType:\"plot\"});t.exports={labels:{valType:\"data_array\",editType:\"calc\"},label0:{valType:\"number\",dflt:0,editType:\"calc\"},dlabel:{valType:\"number\",dflt:1,editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},marker:{colors:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:o.defaultLine,arrayOk:!0,editType:\"style\"},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"style\"},editType:\"calc\"},pattern:c,editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"percent\"],extras:[\"none\"],editType:\"calc\"},hoverinfo:u({},n.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:s({},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),texttemplate:l({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"plot\"},textfont:u({},f,{}),insidetextorientation:{valType:\"enumerated\",values:[\"horizontal\",\"radial\",\"tangential\",\"auto\"],dflt:\"auto\",editType:\"plot\"},insidetextfont:u({},f,{}),outsidetextfont:u({},f,{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"plot\"},font:u({},f,{}),position:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"plot\"},editType:\"plot\"},domain:i({name:\"pie\",trace:!0,editType:\"calc\"}),hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},sort:{valType:\"boolean\",dflt:!0,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"angle\",dflt:0,editType:\"calc\"},pull:{valType:\"number\",min:0,max:1,dflt:0,arrayOk:!0,editType:\"calc\"},_deprecated:{title:{valType:\"string\",dflt:\"\",editType:\"calc\"},titlefont:u({},f,{}),titleposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"calc\"}}}},13584:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"pie\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},32354:function(t,e,r){\"use strict\";var n=r(92770),i=r(84267),a=r(7901),o={};function s(t){return function(e,r){return!!e&&!!(e=i(e)).isValid()&&(e=a.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e)}}function l(t,e){var r,n=JSON.stringify(t),a=e[n];if(!a){for(a=t.slice(),r=0;r<t.length;r++)a.push(i(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)a.push(i(t[r]).darken(20).toHexString());e[n]=a}return a}t.exports={calc:function(t,e){var r,i,a=[],o=t._fullLayout,l=o.hiddenlabels||[],u=e.labels,c=e.marker.colors||[],f=e.values,h=e._length,p=e._hasValues&&h;if(e.dlabel)for(u=new Array(h),r=0;r<h;r++)u[r]=String(e.label0+r*e.dlabel);var d={},v=s(o[\"_\"+e.type+\"colormap\"]),g=0,y=!1;for(r=0;r<h;r++){var m,x,b;if(p){if(m=f[r],!n(m))continue;m=+m}else m=1;void 0!==(x=u[r])&&\"\"!==x||(x=r);var _=d[x=String(x)];void 0===_?(d[x]=a.length,(b=-1!==l.indexOf(x))||(g+=m),a.push({v:m,label:x,color:v(c[r],x),i:r,pts:[r],hidden:b})):(y=!0,(i=a[_]).v+=m,i.pts.push(r),i.hidden||(g+=m),!1===i.color&&c[r]&&(i.color=v(c[r],x)))}return a=a.filter((function(t){return t.v>=0})),(\"funnelarea\"===e.type?y:e.sort)&&a.sort((function(t,e){return e.v-t.v})),a[0]&&(a[0].vTotal=g),a},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r=\"pie\");var n=t._fullLayout,i=t.calcdata,a=n[r+\"colorway\"],s=n[\"_\"+r+\"colormap\"];n[\"extend\"+r+\"colors\"]&&(a=l(a,o));for(var u=0,c=0;c<i.length;c++){var f=i[c];if(f[0].trace.type===r)for(var h=0;h<f.length;h++){var p=f[h];!1===p.color&&(s[p.label]?p.color=s[p.label]:(s[p.label]=p.color=a[u%a.length],u++))}}},makePullColorFn:s,generateExtendedColors:l}},37434:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(34e3),o=r(27670).c,s=r(90769).handleText,l=r(71828).coercePattern;function u(t,e){var r=Array.isArray(t),a=i.isArrayOrTypedArray(e),o=Math.min(r?t.length:1/0,a?e.length:1/0);if(isFinite(o)||(o=0),o&&a){for(var s,l=0;l<o;l++){var u=e[l];if(n(u)&&u>0){s=!0;break}}s||(o=0)}return{hasLabels:r,hasValues:a,len:o}}function c(t,e,r,n,i){n(\"marker.line.width\")&&n(\"marker.line.color\",i?void 0:r.paper_bgcolor);var a=n(\"marker.colors\");l(n,\"marker.pattern\",a),t.marker&&!e.marker.pattern.fgcolor&&(e.marker.pattern.fgcolor=t.marker.colors),e.marker.pattern.bgcolor||(e.marker.pattern.bgcolor=r.paper_bgcolor)}t.exports={handleLabelsAndValues:u,handleMarkerDefaults:c,supplyDefaults:function(t,e,r,n){function l(r,n){return i.coerce(t,e,a,r,n)}var f=u(l(\"labels\"),l(\"values\")),h=f.len;if(e._hasLabels=f.hasLabels,e._hasValues=f.hasValues,!e._hasLabels&&e._hasValues&&(l(\"label0\"),l(\"dlabel\")),h){e._length=h,c(t,e,n,l,!0),l(\"scalegroup\");var p,d=l(\"text\"),v=l(\"texttemplate\");if(v||(p=l(\"textinfo\",Array.isArray(d)?\"text+percent\":\"percent\")),l(\"hovertext\"),l(\"hovertemplate\"),v||p&&\"none\"!==p){var g=l(\"textposition\");s(t,e,n,l,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(g)||\"auto\"===g||\"outside\"===g)&&l(\"automargin\"),(\"inside\"===g||\"auto\"===g||Array.isArray(g))&&l(\"insidetextorientation\")}o(e,n,l);var y=l(\"hole\");if(l(\"title.text\")){var m=l(\"title.position\",y?\"middle center\":\"top center\");y||\"middle center\"!==m||(e.title.position=\"top center\"),i.coerceFont(l,\"title.font\",n.font)}l(\"sort\"),l(\"direction\"),l(\"rotation\"),l(\"pull\")}else e.visible=!1}}},20007:function(t,e,r){\"use strict\";var n=r(23469).appendArrayMultiPointValues;t.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,bbox:t.bbox,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),\"funnelarea\"===e.type&&(delete r.v,delete r.i),r}},22209:function(t,e,r){\"use strict\";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a){var o=r.marker.pattern;o&&o.shape?n.pointStyle(t,r,a,e):i.fill(t,e.color)}},53581:function(t,e,r){\"use strict\";var n=r(71828);function i(t){return-1!==t.indexOf(\"e\")?t.replace(/[.]?0+e/,\"e\"):-1!==t.indexOf(\".\")?t.replace(/[.]?0+$/,\"\"):t}e.formatPiePercent=function(t,e){var r=i((100*t).toPrecision(3));return n.numSeparate(r,e)+\"%\"},e.formatPieValue=function(t,e){var r=i(t.toPrecision(10));return n.numSeparate(r,e)},e.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n||\"\"===n)return n}},e.castOption=function(t,r){return Array.isArray(t)?e.getFirstFilled(t,r):t||void 0},e.getRotationAngle=function(t){return(\"auto\"===t?0:t)*Math.PI/180}},58810:function(t,e,r){\"use strict\";t.exports={attributes:r(34e3),supplyDefaults:r(37434).supplyDefaults,supplyLayoutDefaults:r(92097),layoutAttributes:r(92774),calc:r(32354).calc,crossTraceCalc:r(32354).crossTraceCalc,plot:r(14575).plot,style:r(68357),styleOne:r(63463),moduleType:\"trace\",name:\"pie\",basePlotModule:r(13584),categories:[\"pie-like\",\"pie\",\"showLegend\"],meta:{}}},92774:function(t){\"use strict\";t.exports={hiddenlabels:{valType:\"data_array\",editType:\"calc\"},piecolorway:{valType:\"colorlist\",editType:\"calc\"},extendpiecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},92097:function(t,e,r){\"use strict\";var n=r(71828),i=r(92774);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"hiddenlabels\"),r(\"piecolorway\",e.colorway),r(\"extendpiecolors\")}},14575:function(t,e,r){\"use strict\";var n=r(39898),i=r(74875),a=r(30211),o=r(7901),s=r(91424),l=r(71828),u=l.strScale,c=l.strTranslate,f=r(63893),h=r(72597),p=h.recordMinTextSize,d=h.clearMinTextSize,v=r(97313).TEXTPAD,g=r(53581),y=r(20007),m=r(71828).isValidTextValue;function x(t,e,r){var i=r[0],o=i.cx,s=i.cy,u=i.trace,c=\"funnelarea\"===u.type;\"_hasHoverLabel\"in u||(u._hasHoverLabel=!1),\"_hasHoverEvent\"in u||(u._hasHoverEvent=!1),t.on(\"mouseover\",(function(t){var r=e._fullLayout,f=e._fullData[u.index];if(!e._dragging&&!1!==r.hovermode){var h=f.hoverinfo;if(Array.isArray(h)&&(h=a.castHoverinfo({hoverinfo:[g.castOption(h,t.pts)],_module:u._module},r,0)),\"all\"===h&&(h=\"label+text+value+percent+name\"),f.hovertemplate||\"none\"!==h&&\"skip\"!==h&&h){var p=t.rInscribed||0,d=o+t.pxmid[0]*(1-p),v=s+t.pxmid[1]*(1-p),m=r.separators,x=[];if(h&&-1!==h.indexOf(\"label\")&&x.push(t.label),t.text=g.castOption(f.hovertext||f.text,t.pts),h&&-1!==h.indexOf(\"text\")){var b=t.text;l.isValidTextValue(b)&&x.push(b)}t.value=t.v,t.valueLabel=g.formatPieValue(t.v,m),h&&-1!==h.indexOf(\"value\")&&x.push(t.valueLabel),t.percent=t.v/i.vTotal,t.percentLabel=g.formatPiePercent(t.percent,m),h&&-1!==h.indexOf(\"percent\")&&x.push(t.percentLabel);var _=f.hoverlabel,w=_.font,T=[];a.loneHover({trace:u,x0:d-p*i.r,x1:d+p*i.r,y:v,_x0:c?o+t.TL[0]:d-p*i.r,_x1:c?o+t.TR[0]:d+p*i.r,_y0:c?s+t.TL[1]:v-p*i.r,_y1:c?s+t.BL[1]:v+p*i.r,text:x.join(\"<br>\"),name:f.hovertemplate||-1!==h.indexOf(\"name\")?f.name:void 0,idealAlign:t.pxmid[0]<0?\"left\":\"right\",color:g.castOption(_.bgcolor,t.pts)||t.color,borderColor:g.castOption(_.bordercolor,t.pts),fontFamily:g.castOption(w.family,t.pts),fontSize:g.castOption(w.size,t.pts),fontColor:g.castOption(w.color,t.pts),nameLength:g.castOption(_.namelength,t.pts),textAlign:g.castOption(_.align,t.pts),hovertemplate:g.castOption(f.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[y(t,f)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e,inOut_bbox:T}),t.bbox=T[0],u._hasHoverLabel=!0}u._hasHoverEvent=!0,e.emit(\"plotly_hover\",{points:[y(t,f)],event:n.event})}})),t.on(\"mouseout\",(function(t){var r=e._fullLayout,i=e._fullData[u.index],o=n.select(this).datum();u._hasHoverEvent&&(t.originalEvent=n.event,e.emit(\"plotly_unhover\",{points:[y(o,i)],event:n.event}),u._hasHoverEvent=!1),u._hasHoverLabel&&(a.loneUnhover(r._hoverlayer.node()),u._hasHoverLabel=!1)})),t.on(\"click\",(function(t){var r=e._fullLayout,i=e._fullData[u.index];e._dragging||!1===r.hovermode||(e._hoverdata=[y(t,i)],a.click(e,n.event))}))}function b(t,e,r){var n=g.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=g.castOption(t._input.textfont.color,e.pts));var i=g.castOption(t.insidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,a=g.castOption(t.insidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:i,size:a}}function _(t,e){for(var r,n,i=0;i<t.length;i++)if((n=(r=t[i][0]).trace).title.text){var a=n.title.text;n._meta&&(a=l.templateString(a,n._meta));var o=s.tester.append(\"text\").attr(\"data-notex\",1).text(a).call(s.font,n.title.font).call(f.convertToTspans,e),u=s.bBox(o.node(),!0);r.titleBox={width:u.width,height:u.height},o.remove()}}function w(t,e,r){var n=r.r||e.rpx1,i=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-i,scale:0,rotate:0,textPosAngle:0};var a,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,u=e.midangle,c=r.trace.insidetextorientation,f=\"horizontal\"===c,h=\"tangential\"===c,p=\"radial\"===c,d=\"auto\"===c,v=[];if(!d){var g,y=function(r,i){if(function(t,e){var r=t.startangle,n=t.stopangle;return r>e&&e>n||r<e&&e<n}(e,r)){var s=Math.abs(r-e.startangle),l=Math.abs(r-e.stopangle),u=s<l?s:l;(a=\"tan\"===i?k(t,n,o,u,0):T(t,n,o,u,Math.PI/2)).textPosAngle=r,v.push(a)}};if(f||h){for(g=4;g>=-4;g-=2)y(Math.PI*g,\"tan\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+1),\"tan\")}if(f||p){for(g=4;g>=-4;g-=2)y(Math.PI*(g+1.5),\"rad\");for(g=4;g>=-4;g-=2)y(Math.PI*(g+.5),\"rad\")}}if(s||d||f){var m=Math.sqrt(t.width*t.width+t.height*t.height);if((a={scale:i*n*2/m,rCenter:1-i,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,a.scale>=1)return a;v.push(a)}(d||p)&&((a=T(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a)),(d||h)&&((a=k(t,n,o,l,u)).textPosAngle=(e.startangle+e.stopangle)/2,v.push(a));for(var x=0,b=0,_=0;_<v.length;_++){var w=v[_].scale;if(b<w&&(b=w,x=_),!d&&b>=1)break}return v[x]}function T(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.width/t.height,o=S(a,n,e,r);return{scale:2*o/t.height,rCenter:A(a,o/e),rotate:M(i)}}function k(t,e,r,n,i){e=Math.max(0,e-2*v);var a=t.height/t.width,o=S(a,n,e,r);return{scale:2*o/t.width,rCenter:A(a,o/e),rotate:M(i+Math.PI/2)}}function A(t,e){return Math.cos(e)-t*e}function M(t){return(180/Math.PI*t+720)%180-90}function S(t,e,r,n){var i=t+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(i*i+.5)+i),n/(Math.sqrt(t*t+n/2)+t))}function E(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function L(t,e){var r=e.pxmid[0],n=e.pxmid[1],i=t.width/2,a=t.height/2;return r<0&&(i*=-1),n<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function C(t,e){var r,n,i,a=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=a.title.font.size,i=O(a),-1!==a.title.position.indexOf(\"top\")?(o.y-=(1+i)*t.r,s.ty-=t.titleBox.height):-1!==a.title.position.indexOf(\"bottom\")&&(o.y+=(1+i)*t.r);var l,u=t.r/(void 0===(l=t.trace.aspectratio)?1:l),c=e.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!==a.title.position.indexOf(\"left\")?(c+=u,o.x-=(1+i)*u,s.tx+=t.titleBox.width/2):-1!==a.title.position.indexOf(\"center\")?c*=2:-1!==a.title.position.indexOf(\"right\")&&(c+=u,o.x+=(1+i)*u,s.tx-=t.titleBox.width/2),r=c/t.titleBox.width,n=P(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function P(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function O(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function I(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n][0],a=i.trace,o=a.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);a.title.text&&\"middle center\"!==a.title.position&&(l-=P(i,e));var u=s/2,c=l/2;\"funnelarea\"!==a.type||a.scalegroup||(c/=a.aspectratio),i.r=Math.min(u,c)/(1+O(a)),i.cx=e.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy=e.t+e.h*(1-a.domain.y[0])-l/2,a.title.text&&-1!==a.title.position.indexOf(\"bottom\")&&(i.cy-=P(i,e)),a.scalegroup&&-1===r.indexOf(a.scalegroup)&&r.push(a.scalegroup)}!function(t,e){for(var r,n,i,a=0;a<e.length;a++){var o=1/0,s=e[a];for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var l;if(\"pie\"===i.type)l=r.r*r.r;else if(\"funnelarea\"===i.type){var u,c;i.aspectratio>1?c=(u=r.r)/i.aspectratio:u=(c=r.r)*i.aspectratio,l=(u*=(1+i.baseratio)/2)*c}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if((i=(r=t[n][0]).trace).scalegroup===s){var f=o*r.vTotal;\"funnelarea\"===i.type&&(f/=(1+i.baseratio)/2,f/=i.aspectratio),r.r=Math.sqrt(f)}}}(t,r)}function D(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function z(t,e,r){var n=t._fullLayout,i=r.trace,a=i.texttemplate,o=i.textinfo;if(!a&&o&&\"none\"!==o){var s,u=o.split(\"+\"),c=function(t){return-1!==u.indexOf(t)},f=c(\"label\"),h=c(\"text\"),p=c(\"value\"),d=c(\"percent\"),v=n.separators;if(s=f?[e.label]:[],h){var y=g.getFirstFilled(i.text,e.pts);m(y)&&s.push(y)}p&&s.push(g.formatPieValue(e.v,v)),d&&s.push(g.formatPiePercent(e.v/r.vTotal,v)),e.text=s.join(\"<br>\")}if(a){var x=l.castOption(i,e.i,\"texttemplate\");if(x){var b=function(t){return{label:t.label,value:t.v,valueLabel:g.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:g.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(i,t.i,\"customdata\")}}(e),_=g.getFirstFilled(i.text,e.pts);(m(_)||\"\"===_)&&(b.text=_),e.text=l.texttemplateString(x,b,t._fullLayout._d3locale,b,i._meta||{})}else e.text=\"\"}}function R(t,e){var r=t.rotate*Math.PI/180,n=Math.cos(r),i=Math.sin(r),a=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=a*n-o*i,t.textY=a*i+o*n,t.noCenter=!0}t.exports={plot:function(t,e){var r=t._context.staticPlot,a=t._fullLayout,h=a._size;d(\"pie\",a),_(e,t),I(e,h);var v=l.makeTraceGroups(a._pielayer,e,\"trace\").each((function(e){var d=n.select(this),v=e[0],y=v.trace;!function(t){var e,r,n,i=t[0],a=i.r,o=i.trace,s=g.getRotationAngle(o.rotation),l=2*Math.PI/i.vTotal,u=\"px0\",c=\"px1\";if(\"counterclockwise\"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,u=\"px1\",c=\"px0\"}for(n=D(a,s),e=0;e<t.length;e++)(r=t[e]).hidden||(r[u]=n,r.startangle=s,s+=l*r.v/2,r.pxmid=D(a,s),r.midangle=s,n=D(a,s+=l*r.v/2),r.stopangle=s,r[c]=n,r.largeArc=r.v>i.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/i.vTotal,.5),r.ring=1-o.hole,r.rInscribed=E(r,i))}(e),d.attr(\"stroke-linejoin\",\"round\"),d.each((function(){var m=n.select(this).selectAll(\"g.slice\").data(e);m.enter().append(\"g\").classed(\"slice\",!0),m.exit().remove();var _=[[[],[]],[[],[]]],T=!1;m.each((function(i,o){if(i.hidden)n.select(this).selectAll(\"path,g\").remove();else{i.pointNumber=i.i,i.curveNumber=y.index,_[i.pxmid[1]<0?0:1][i.pxmid[0]<0?0:1].push(i);var u=v.cx,c=v.cy,h=n.select(this),d=h.selectAll(\"path.surface\").data([i]);if(d.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":r?\"none\":\"all\"}),h.call(x,t,e),y.pull){var m=+g.castOption(y.pull,i.pts)||0;m>0&&(u+=m*i.pxmid[0],c+=m*i.pxmid[1])}i.cxFinal=u,i.cyFinal=c;var k=y.hole;if(i.v===v.vTotal){var A=\"M\"+(u+i.px0[0])+\",\"+(c+i.px0[1])+P(i.px0,i.pxmid,!0,1)+P(i.pxmid,i.px0,!0,1)+\"Z\";k?d.attr(\"d\",\"M\"+(u+k*i.px0[0])+\",\"+(c+k*i.px0[1])+P(i.px0,i.pxmid,!1,k)+P(i.pxmid,i.px0,!1,k)+\"Z\"+A):d.attr(\"d\",A)}else{var M=P(i.px0,i.px1,!0,1);if(k){var S=1-k;d.attr(\"d\",\"M\"+(u+k*i.px1[0])+\",\"+(c+k*i.px1[1])+P(i.px1,i.px0,!1,k)+\"l\"+S*i.px0[0]+\",\"+S*i.px0[1]+M+\"Z\")}else d.attr(\"d\",\"M\"+u+\",\"+c+\"l\"+i.px0[0]+\",\"+i.px0[1]+M+\"Z\")}z(t,i,v);var E=g.castOption(y.textposition,i.pts),C=h.selectAll(\"g.slicetext\").data(i.text&&\"none\"!==E?[0]:[]);C.enter().append(\"g\").classed(\"slicetext\",!0),C.exit().remove(),C.each((function(){var r=l.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),h=l.ensureUniformFontSize(t,\"outside\"===E?function(t,e,r){return{color:g.castOption(t.outsidetextfont.color,e.pts)||g.castOption(t.textfont.color,e.pts)||r.color,family:g.castOption(t.outsidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,size:g.castOption(t.outsidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size}}(y,i,a.font):b(y,i,a.font));r.text(i.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,h).call(f.convertToTspans,t);var d,m=s.bBox(r.node());if(\"outside\"===E)d=L(m,i);else if(d=w(m,i,v),\"auto\"===E&&d.scale<1){var x=l.ensureUniformFontSize(t,y.outsidetextfont);r.call(s.font,x),d=L(m=s.bBox(r.node()),i)}var _=d.textPosAngle,k=void 0===_?i.pxmid:D(v.r,_);if(d.targetX=u+k[0]*d.rCenter+(d.x||0),d.targetY=c+k[1]*d.rCenter+(d.y||0),R(d,m),d.outside){var A=d.targetY;i.yLabelMin=A-m.height/2,i.yLabelMid=A,i.yLabelMax=A+m.height/2,i.labelExtraX=0,i.labelExtraY=0,T=!0}d.fontSize=h.size,p(y.type,d,a),e[o].transform=d,l.setTransormAndDisplay(r,d)}))}function P(t,e,r,n){var a=n*(e[0]-t[0]),o=n*(e[1]-t[1]);return\"a\"+n*v.r+\",\"+n*v.r+\" 0 \"+i.largeArc+(r?\" 1 \":\" 0 \")+a+\",\"+o}}));var k=n.select(this).selectAll(\"g.titletext\").data(y.title.text?[0]:[]);if(k.enter().append(\"g\").classed(\"titletext\",!0),k.exit().remove(),k.each((function(){var e,r=l.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),i=y.title.text;y._meta&&(i=l.templateString(i,y._meta)),r.text(i).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,y.title.font).call(f.convertToTspans,t),e=\"middle center\"===y.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(v):C(v,h),r.attr(\"transform\",c(e.x,e.y)+u(Math.min(1,e.scale))+c(e.tx,e.ty))})),T&&function(t,e){var r,n,i,a,o,s,l,u,c,f,h,p,d;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function y(t,e){return e.pxmid[1]-t.pxmid[1]}function m(t,r){r||(r={});var i,u,c,h,p=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),d=n?t.yLabelMin:t.yLabelMax,v=n?t.yLabelMax:t.yLabelMin,y=t.cyFinal+o(t.px0[1],t.px1[1]),m=p-d;if(m*l>0&&(t.labelExtraY=m),Array.isArray(e.pull))for(u=0;u<f.length;u++)(c=f[u])===t||(g.castOption(e.pull,t.pts)||0)>=(g.castOption(e.pull,c.pts)||0)||((t.pxmid[1]-c.pxmid[1])*l>0?(m=c.cyFinal+o(c.px0[1],c.px1[1])-d-t.labelExtraY)*l>0&&(t.labelExtraY+=m):(v+t.labelExtraY-y)*l>0&&(i=3*s*Math.abs(u-f.indexOf(t)),(h=c.cxFinal+a(c.px0[0],c.px1[0])+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=h)))}for(n=0;n<2;n++)for(i=n?v:y,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(a=r?Math.max:Math.min,s=r?1:-1,(u=t[n][r]).sort(i),c=t[1-n][r],f=c.concat(u),p=[],h=0;h<u.length;h++)void 0!==u[h].yLabelMid&&p.push(u[h]);for(d=!1,h=0;n&&h<c.length;h++)if(void 0!==c[h].yLabelMid){d=c[h];break}for(h=0;h<p.length;h++){var x=h&&p[h-1];d&&!h&&(x=d),m(p[h],x)}}}(_,y),function(t,e){t.each((function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var i=r.select(\"g.slicetext text\");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,l.setTransormAndDisplay(i,t.transform);var a=t.cxFinal+t.pxmid[0],s=\"M\"+a+\",\"+(t.cyFinal+t.pxmid[1]),u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var c=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(c)>Math.abs(f)?s+=\"l\"+f*t.pxmid[0]/t.pxmid[1]+\",\"+f+\"H\"+(a+t.labelExtraX+u):s+=\"l\"+t.labelExtraX+\",\"+c+\"v\"+(f-c)+\"h\"+u}else s+=\"V\"+(t.yLabelMid+t.labelExtraY)+\"h\"+u;l.ensureSingle(r,\"path\",\"textline\").call(o.stroke,e.outsidetextfont.color).attr({\"stroke-width\":Math.min(2,e.outsidetextfont.size/8),d:s,fill:\"none\"})}else r.select(\"path.textline\").remove()}))}(m,y),T&&y.automargin){var A=s.bBox(d.node()),M=y.domain,S=h.w*(M.x[1]-M.x[0]),E=h.h*(M.y[1]-M.y[0]),P=(.5*S-v.r)/h.w,O=(.5*E-v.r)/h.h;i.autoMargin(t,\"pie.\"+y.uid+\".automargin\",{xl:M.x[0]-P,xr:M.x[1]+P,yb:M.y[0]-O,yt:M.y[1]+O,l:Math.max(v.cx-v.r-A.left,0),r:Math.max(A.right-(v.cx+v.r),0),b:Math.max(A.bottom-(v.cy+v.r),0),t:Math.max(v.cy-v.r-A.top,0),pad:5})}}))}));setTimeout((function(){v.selectAll(\"tspan\").each((function(){var t=n.select(this);t.attr(\"dy\")&&t.attr(\"dy\",t.attr(\"dy\"))}))}),0)},formatSliceLabel:z,transformInsideText:w,determineInsideTextFont:b,positionTitleOutside:C,prerenderTitles:_,layoutAreas:I,attachFxHandlers:x,computeTransform:R}},68357:function(t,e,r){\"use strict\";var n=r(39898),i=r(63463),a=r(72597).resizeText;t.exports=function(t){var e=t._fullLayout._pielayer.selectAll(\".trace\");a(t,e,\"pie\"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(\"path.surface\").each((function(e){n.select(this).call(i,e,r,t)}))}))}},63463:function(t,e,r){\"use strict\";var n=r(7901),i=r(53581).castOption,a=r(22209);t.exports=function(t,e,r,o){var s=r.marker.line,l=i(s.color,e.pts)||n.defaultLine,u=i(s.width,e.pts)||0;t.call(a,e,r,o).style(\"stroke-width\",u).call(n.stroke,l)}},10959:function(t,e,r){\"use strict\";var n=r(82196);t.exports={x:n.x,y:n.y,xy:{valType:\"data_array\",editType:\"calc\"},indices:{valType:\"data_array\",editType:\"calc\"},xbounds:{valType:\"data_array\",editType:\"calc\"},ybounds:{valType:\"data_array\",editType:\"calc\"},text:n.text,marker:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,arrayOk:!1,editType:\"calc\"},blend:{valType:\"boolean\",dflt:null,editType:\"calc\"},sizemin:{valType:\"number\",min:.1,max:2,dflt:.5,editType:\"calc\"},sizemax:{valType:\"number\",min:.1,dflt:20,editType:\"calc\"},border:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},arearatio:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},transforms:void 0}},42743:function(t,e,r){\"use strict\";var n=r(9330).gl_pointcloud2d,i=r(78614),a=r(71739).findExtremes,o=r(34603);function s(t,e){this.scene=t,this.uid=e,this.type=\"pointcloud\",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color=\"rgb(0, 0, 0)\",this.name=\"\",this.hoverinfo=\"all\",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,u=this.xData=this.pickXData=t.x,c=this.yData=this.pickYData=t.y,f=this.pickXYData=t.xy,h=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(f){if(n=f,e=f.length>>>1,h)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=u.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=u[l],s=c[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var v=i(t.marker.color),g=i(t.marker.border.color),y=t.opacity*t.marker.opacity;v[3]*=y,this.pointcloudOptions.color=v;var m=t.marker.blend;null===m&&(m=u.length<100||c.length<100),this.pointcloudOptions.blend=m,g[3]*=y,this.pointcloudOptions.borderColor=g;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,T=b/2||.5;t._extremes[_._id]=a(_,[d[0],d[2]],{ppad:T}),t._extremes[w._id]=a(w,[d[1],d[3]],{ppad:T})},l.dispose=function(){this.pointcloud.dispose()},t.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},33876:function(t,e,r){\"use strict\";var n=r(71828),i=r(10959);t.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a(\"x\"),a(\"y\"),a(\"xbounds\"),a(\"ybounds\"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a(\"text\"),a(\"marker.color\",r),a(\"marker.opacity\"),a(\"marker.blend\"),a(\"marker.sizemin\"),a(\"marker.sizemax\"),a(\"marker.border.color\",r),a(\"marker.border.arearatio\"),e._length=null}},20593:function(t,e,r){\"use strict\";[\"*pointcloud* trace is deprecated!\",\"Please consider switching to the *scattergl* trace type.\"].join(\" \"),t.exports={attributes:r(10959),supplyDefaults:r(33876),calc:r(36563),plot:r(42743),moduleType:\"trace\",name:\"pointcloud\",basePlotModule:r(4796),categories:[\"gl\",\"gl2d\",\"showLegend\"],meta:{}}},39953:function(t,e,r){\"use strict\";var n=r(41940),i=r(9012),a=r(22399),o=r(77914),s=r(27670).Y,l=r(5386).fF,u=r(50693),c=r(44467).templatedArray,f=r(12663).descriptionOnlyNumbers,h=r(1426).extendFlat,p=r(30962).overrideAll;(t.exports=p({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:\"sankey\",trace:!0}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\"},valueformat:{valType:\"string\",dflt:\".3s\",description:f(\"value\")},valuesuffix:{valType:\"string\",dflt:\"\"},arrangement:{valType:\"enumerated\",values:[\"snap\",\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"snap\"},textfont:n({}),customdata:void 0,node:{label:{valType:\"data_array\",dflt:[]},groups:{valType:\"info_array\",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:\"number\",editType:\"calc\"}},x:{valType:\"data_array\",dflt:[]},y:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:.5,arrayOk:!0}},pad:{valType:\"number\",arrayOk:!1,min:0,dflt:20},thickness:{valType:\"number\",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]})},link:{arrowlen:{valType:\"number\",min:0,dflt:0},label:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0}},source:{valType:\"data_array\",dflt:[]},target:{valType:\"data_array\",dflt:[]},value:{valType:\"data_array\",dflt:[]},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]}),colorscales:c(\"concentrationscales\",{editType:\"calc\",label:{valType:\"string\",editType:\"calc\",dflt:\"\"},cmax:{valType:\"number\",editType:\"calc\",dflt:1},cmin:{valType:\"number\",editType:\"calc\",dflt:0},colorscale:h(u().colorscale,{dflt:[[0,\"white\"],[1,\"black\"]]})})}},\"calc\",\"nested\")).transforms=void 0},75536:function(t,e,r){\"use strict\";var n=r(30962).overrideAll,i=r(27659).a0,a=r(60436),o=r(528),s=r(6964),l=r(28569),u=r(47322).prepSelect,c=r(71828),f=r(73972),h=\"sankey\";function p(t,e){var r=t._fullData[e],n=t._fullLayout,i=n.dragmode,a=\"pan\"===n.dragmode?\"move\":\"crosshair\",o=r._bgRect;if(o&&\"pan\"!==i&&\"zoom\"!==i){s(o,a);var h={_id:\"x\",c2p:c.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:\"y\",c2p:c.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:h,yaxis:p,fillRangeItems:c.noop},subplot:e,xaxes:[h],yaxes:[p],doneFnCompleted:function(r){var n,i=t._fullData[e],a=i.node.groups.slice(),o=[];function s(t){for(var e=i._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var u=s(r[l].pointNumber);if(u)if(u.group){for(var c=0;c<u.childrenNodes.length;c++)o.push(u.childrenNodes[c].pointNumber);a[u.pointNumber-i.node._count]=!1}else o.push(u.pointNumber)}n=a.filter(Boolean).concat([o]),f.call(\"_guiRestyle\",t,{\"node.groups\":[n]},e)},prepFn:function(t,e,r){u(t,e,r,d,i)}};l.init(d)}}e.name=h,e.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},\"plot\",\"nested\"),e.plot=function(t){var r=i(t.calcdata,h)[0];a(t,r),e.updateFx(t)},e.clean=function(t,e,r,n){var i=n._has&&n._has(h),a=e._has&&e._has(h);i&&!a&&(n._paperdiv.selectAll(\".sankey\").remove(),n._paperdiv.selectAll(\".bgsankey\").remove())},e.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)p(t,e)}},92930:function(t,e,r){\"use strict\";var n=r(68664),i=r(71828),a=r(28984).wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=r(21081);t.exports=function(t,e){var r=function(t){var e,r=t.node,a=t.link,u=[],c=o(a.color),f=o(a.customdata),h={},p={},d=a.colorscales.length;for(e=0;e<d;e++){var v=a.colorscales[e],g=l.extractScale(v,{cLetter:\"c\"}),y=l.makeColorScaleFunc(g);p[v.label]=y}var m=0;for(e=0;e<a.value.length;e++)a.source[e]>m&&(m=a.source[e]),a.target[e]>m&&(m=a.target[e]);var x,b=m+1;t.node._count=b;var _=t.node.groups,w={};for(e=0;e<_.length;e++){var T=_[e];for(x=0;x<T.length;x++){var k=T[x],A=b+e;w.hasOwnProperty(k)?i.warn(\"Node \"+k+\" is already part of a group.\"):w[k]=A}}var M={source:[],target:[]};for(e=0;e<a.value.length;e++){var S=a.value[e],E=a.source[e],L=a.target[e];if(S>0&&s(E,b)&&s(L,b)&&(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!==w[L])){w.hasOwnProperty(L)&&(L=w[L]),w.hasOwnProperty(E)&&(E=w[E]),L=+L,h[E=+E]=h[L]=!0;var C=\"\";a.label&&a.label[e]&&(C=a.label[e]);var P=null;C&&p.hasOwnProperty(C)&&(P=p[C]),u.push({pointNumber:e,label:C,color:c?a.color[e]:a.color,customdata:f?a.customdata[e]:a.customdata,concentrationscale:P,source:E,target:L,value:+S}),M.source.push(E),M.target.push(L)}}var O=b+_.length,I=o(r.color),D=o(r.customdata),z=[];for(e=0;e<O;e++)if(h[e]){var R=r.label[e];z.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:R,color:I?r.color[e]:r.color,customdata:D?r.customdata[e]:r.customdata})}var F=!1;return function(t,e,r){for(var a=i.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(i.isIndex(e[o],t)&&i.isIndex(r[o],t)){if(e[o]===r[o])return!0;a[e[o]].push(r[o])}return n(a).components.some((function(t){return t.length>1}))}(O,M.source,M.target)&&(F=!0),{circular:F,links:u,nodes:z,groups:_,groupLookup:w}}(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},85247:function(t){\"use strict\";t.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:\"linear\",cn:{sankey:\"sankey\",sankeyLinks:\"sankey-links\",sankeyLink:\"sankey-link\",sankeyNodeSet:\"sankey-node-set\",sankeyNode:\"sankey-node\",nodeRect:\"node-rect\",nodeLabel:\"node-label\"}}},26857:function(t,e,r){\"use strict\";var n=r(71828),i=r(39953),a=r(7901),o=r(84267),s=r(27670).c,l=r(38048),u=r(44467),c=r(85501);function f(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r(\"label\"),r(\"cmin\"),r(\"cmax\"),r(\"colorscale\")}t.exports=function(t,e,r,h){function p(r,a){return n.coerce(t,e,i,r,a)}var d=n.extendDeep(h.hoverlabel,t.hoverlabel),v=t.node,g=u.newContainer(e,\"node\");function y(t,e){return n.coerce(v,g,i.node,t,e)}y(\"label\"),y(\"groups\"),y(\"x\"),y(\"y\"),y(\"pad\"),y(\"thickness\"),y(\"line.color\"),y(\"line.width\"),y(\"hoverinfo\",t.hoverinfo),l(v,g,y,d),y(\"hovertemplate\");var m=h.colorway;y(\"color\",g.label.map((function(t,e){return a.addOpacity(function(t){return m[t%m.length]}(e),.8)}))),y(\"customdata\");var x=t.link||{},b=u.newContainer(e,\"link\");function _(t,e){return n.coerce(x,b,i.link,t,e)}_(\"label\"),_(\"arrowlen\"),_(\"source\"),_(\"target\"),_(\"value\"),_(\"line.color\"),_(\"line.width\"),_(\"hoverinfo\",t.hoverinfo),l(x,b,_,d),_(\"hovertemplate\");var w,T=o(h.paper_bgcolor).getLuminance()<.333?\"rgba(255, 255, 255, 0.6)\":\"rgba(0, 0, 0, 0.2)\";_(\"color\",n.repeat(T,b.value.length)),_(\"customdata\"),c(x,b,{name:\"colorscales\",handleItemDefaults:f}),s(e,h,p),p(\"orientation\"),p(\"valueformat\"),p(\"valuesuffix\"),g.x.length&&g.y.length&&(w=\"freeform\"),p(\"arrangement\",w),n.coerceFont(p,\"textfont\",n.extendFlat({},h.font)),e._length=null}},29396:function(t,e,r){\"use strict\";t.exports={attributes:r(39953),supplyDefaults:r(26857),calc:r(92930),plot:r(60436),moduleType:\"trace\",name:\"sankey\",basePlotModule:r(75536),selectPoints:r(84564),categories:[\"noOpacity\"],meta:{}}},60436:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=i.numberFormat,o=r(3393),s=r(30211),l=r(7901),u=r(85247).cn,c=i._;function f(t){return\"\"!==t}function h(t,e){return t.filter((function(t){return t.key===e.traceId}))}function p(t,e){n.select(t).select(\"path\").style(\"fill-opacity\",e),n.select(t).select(\"rect\").style(\"fill-opacity\",e)}function d(t){n.select(t).select(\"text.name\").style(\"fill\",\"black\")}function v(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function y(t,e,r){e&&r&&h(r,e).selectAll(\".\"+u.sankeyLink).filter(v(e)).call(x.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll(\".\"+u.sankeyLink).filter(v(e)).call(b.bind(0,e,r,!1))}function x(t,e,r,n){var i=n.datum().link.label;n.style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),i&&h(e,t).selectAll(\".\"+u.sankeyLink).filter((function(t){return t.link.label===i})).style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),r&&h(e,t).selectAll(\".\"+u.sankeyNode).filter(g(t)).call(y)}function b(t,e,r,n){var i=n.datum().link.label;n.style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),i&&h(e,t).selectAll(\".\"+u.sankeyLink).filter((function(t){return t.link.label===i})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),r&&h(e,t).selectAll(u.sankeyNode).filter(g(t)).call(m)}function _(t,e){var r=t.hoverlabel||{},n=i.nestedProperty(r,e).get();return!Array.isArray(n)&&n}t.exports=function(t,e){for(var r=t._fullLayout,i=r._paper,h=r._size,v=0;v<t._fullData.length;v++)if(t._fullData[v].visible&&t._fullData[v].type===u.sankey&&!t._fullData[v]._viewInitial){var g=t._fullData[v].node;t._fullData[v]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var w=c(t,\"source:\")+\" \",T=c(t,\"target:\")+\" \",k=c(t,\"concentration:\")+\" \",A=c(t,\"incoming flow count:\")+\" \",M=c(t,\"outgoing flow count:\")+\" \";o(t,i,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,r,i,!0)),\"skip\"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit(\"plotly_hover\",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.link.trace.link;if(\"none\"!==o.hoverinfo&&\"skip\"!==o.hoverinfo){for(var u=[],c=0,h=0;h<i.flow.links.length;h++){var v=i.flow.links[h];if(\"closest\"!==t._fullLayout.hovermode||i.link.pointNumber===v.pointNumber){i.link.pointNumber===v.pointNumber&&(c=h),v.fullData=v.trace,o=i.link.trace.link;var g=m(v),y={valueLabel:a(i.valueFormat)(v.value)+i.valueSuffix};u.push({x:g[0],y:g[1],name:y.valueLabel,text:[v.label||\"\",w+v.source.label,T+v.target.label,v.concentrationscale?k+a(\"%0.2f\")(v.flow.labelConcentration):\"\"].filter(f).join(\"<br>\"),color:_(o,\"bgcolor\")||l.addOpacity(v.color,1),borderColor:_(o,\"bordercolor\"),fontFamily:_(o,\"font.family\"),fontSize:_(o,\"font.size\"),fontColor:_(o,\"font.color\"),nameLength:_(o,\"namelength\"),textAlign:_(o,\"align\"),idealAlign:n.event.x<g[0]?\"right\":\"left\",hovertemplate:o.hovertemplate,hovertemplateLabels:y,eventData:[v]})}}s.loneHover(u,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each((function(){i.link.concentrationscale||p(this,.65),d(this)}))}}function m(t){var e,r;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,r=(t.y0+t.y1)/2);var n=[e,r];return\"v\"===t.trace.orientation&&n.reverse(),n[0]+=i.parent.translateX,n[1]+=i.parent.translateY,n}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(b.bind(0,i,a,!0)),\"skip\"!==i.link.trace.link.hoverinfo&&(i.link.fullData=i.link.trace,t.emit(\"plotly_unhover\",{event:n.event,points:[i.link]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var i=r.link;i.originalEvent=n.event,t._hoverdata=[i],s.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(y,r,i),\"skip\"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit(\"plotly_hover\",{event:n.event,points:[r.node]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.node.trace.node;if(\"none\"!==o.hoverinfo&&\"skip\"!==o.hoverinfo){var l=n.select(e).select(\".\"+u.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=l.node().getBoundingClientRect(),v=h.left-2-c.left,g=h.right+2-c.left,y=h.top+h.height/4-c.top,m={valueLabel:a(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData=i.node.trace,t._fullLayout._calcInverseTransform(t);var x=t._fullLayout._invScaleX,b=t._fullLayout._invScaleY,w=s.loneHover({x0:x*v,x1:x*g,y:b*y,name:a(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,A+i.node.targetLinks.length,M+i.node.sourceLinks.length].filter(f).join(\"<br>\"),color:_(o,\"bgcolor\")||i.tinyColorHue,borderColor:_(o,\"bordercolor\"),fontFamily:_(o,\"font.family\"),fontSize:_(o,\"font.size\"),fontColor:_(o,\"font.color\"),nameLength:_(o,\"namelength\"),textAlign:_(o,\"align\"),idealAlign:\"left\",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});p(w,.85),d(w)}}},unhover:function(e,i,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,i,a),\"skip\"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit(\"plotly_unhover\",{event:n.event,points:[i.node]})),s.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var a=r.node;a.originalEvent=n.event,t._hoverdata=[a],n.select(e).call(m,r,i),s.click(t,{target:!0})}}})}},3393:function(t,e,r){\"use strict\";var n=r(49887),i=r(81684).k4,a=r(39898),o=r(30838),s=r(86781),l=r(85247),u=r(84267),c=r(7901),f=r(91424),h=r(71828),p=h.strTranslate,d=h.strRotate,v=r(28984),g=v.keyFun,y=v.repeat,m=v.unwrap,x=r(63893),b=r(73972),_=r(18783),w=_.CAP_SHIFT,T=_.LINE_SPACING;function k(t,e,r){var n,i=m(e),a=i.trace,c=a.domain,f=\"h\"===a.orientation,p=a.node.pad,d=a.node.thickness,v=t.width*(c.x[1]-c.x[0]),g=t.height*(c.y[1]-c.y[0]),y=i._nodes,x=i._links,b=i.circular;(n=b?s.sankeyCircular().circularLinkGap(0):o.sankey()).iterations(l.sankeyIterations).size(f?[v,g]:[g,v]).nodeWidth(d).nodePadding(p).nodeId((function(t){return t.pointNumber})).nodes(y).links(x);var _,w,T,k=n();for(var A in n.nodePadding()<p&&h.warn(\"node.pad was reduced to \",n.nodePadding(),\" to fit within the figure.\"),i._groupLookup){var M,S=parseInt(i._groupLookup[A]);for(_=0;_<k.nodes.length;_++)if(k.nodes[_].pointNumber===S){M=k.nodes[_];break}if(M){var E={pointNumber:parseInt(A),x0:M.x0,x1:M.x1,y0:M.y0,y1:M.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};k.nodes.unshift(E),M.childrenNodes.unshift(E)}}if(function(){for(_=0;_<k.nodes.length;_++){var t,e,r=k.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+\":\"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var i=Object.keys(n);for(w=0;w<i.length;w++){var a=n[t=i[w]],o=0,s={};for(T=0;T<a.length;T++)s[(e=a[T]).label]||(s[e.label]=0),s[e.label]+=e.value,o+=e.value;for(T=0;T<a.length;T++)(e=a[T]).flow={value:o,labelConcentration:s[e.label]/o,concentration:e.value/o,links:a},e.concentrationscale&&(e.color=u(e.concentrationscale(e.flow.labelConcentration)))}var l=0;for(w=0;w<r.sourceLinks.length;w++)l+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/l;var c=0;for(w=0;w<r.targetLinks.length;w++)c+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/c}}(),a.node.x.length&&a.node.y.length){for(_=0;_<Math.min(a.node.x.length,a.node.y.length,k.nodes.length);_++)if(a.node.x[_]&&a.node.y[_]){var L=[a.node.x[_]*v,a.node.y[_]*g];k.nodes[_].x0=L[0]-d/2,k.nodes[_].x1=L[0]+d/2;var C=k.nodes[_].y1-k.nodes[_].y0;k.nodes[_].y0=L[1]-C/2,k.nodes[_].y1=L[1]+C/2}\"snap\"===a.arrangement&&function(t){var e,r,n=t.map((function(t,e){return{x0:t.x0,index:e}})).sort((function(t,e){return t.x0-e.x0})),i=[],a=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(a+=1,e=s.x0),o=s.x0,i[a]||(i[a]=[]),i[a].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return i}(y=k.nodes).forEach((function(t){var e,r,n,i=0,a=t.length;for(t.sort((function(t,e){return t.y0-e.y0})),n=0;n<a;++n)(e=t[n]).y0>=i||(r=i-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),i=e.y1+p})),n.update(k)}return{circular:b,key:r,trace:a,guid:h.randstr(),horizontal:f,width:v,height:g,nodePad:a.node.pad,nodeLineColor:a.node.line.color,nodeLineWidth:a.node.line.width,linkLineColor:a.link.line.color,linkLineWidth:a.link.line.width,linkArrowLength:a.link.arrowlen,valueFormat:a.valueformat,valueSuffix:a.valuesuffix,textFont:a.textfont,translateX:c.x[0]*t.width+t.margin.l,translateY:t.height-c.y[1]*t.height+t.margin.t,dragParallel:f?g:v,dragPerpendicular:f?v:g,arrangement:a.arrangement,sankey:n,graph:k,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function A(t,e,r){var n=u(e.color),i=e.source.label+\"|\"+e.target.label+\"__\"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:c.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:M,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,linkArrowLength:t.linkArrowLength,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}function M(){return function(t){var e=t.linkArrowLength;if(t.link.circular)return function(t,e){var r=t.width/2,n=t.circularPathData;return\"top\"===t.circularLinkType?\"M \"+(n.targetX-e)+\" \"+(n.targetY+r)+\" L\"+(n.rightInnerExtent-e)+\" \"+(n.targetY+r)+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightSmallArcRadius+r)+\" 0 0 1 \"+(n.rightFullExtent-r-e)+\" \"+(n.targetY-n.rightSmallArcRadius)+\"L\"+(n.rightFullExtent-r-e)+\" \"+n.verticalRightInnerExtent+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightLargeArcRadius+r)+\" 0 0 1 \"+(n.rightInnerExtent-e)+\" \"+(n.verticalFullExtent-r)+\"L\"+n.leftInnerExtent+\" \"+(n.verticalFullExtent-r)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftLargeArcRadius+r)+\" 0 0 1 \"+(n.leftFullExtent+r)+\" \"+n.verticalLeftInnerExtent+\"L\"+(n.leftFullExtent+r)+\" \"+(n.sourceY-n.leftSmallArcRadius)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftSmallArcRadius+r)+\" 0 0 1 \"+n.leftInnerExtent+\" \"+(n.sourceY+r)+\"L\"+n.sourceX+\" \"+(n.sourceY+r)+\"L\"+n.sourceX+\" \"+(n.sourceY-r)+\"L\"+n.leftInnerExtent+\" \"+(n.sourceY-r)+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftSmallArcRadius-r)+\" 0 0 0 \"+(n.leftFullExtent-r)+\" \"+(n.sourceY-n.leftSmallArcRadius)+\"L\"+(n.leftFullExtent-r)+\" \"+n.verticalLeftInnerExtent+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftLargeArcRadius-r)+\" 0 0 0 \"+n.leftInnerExtent+\" \"+(n.verticalFullExtent+r)+\"L\"+(n.rightInnerExtent-e)+\" \"+(n.verticalFullExtent+r)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightLargeArcRadius-r)+\" 0 0 0 \"+(n.rightFullExtent+r-e)+\" \"+n.verticalRightInnerExtent+\"L\"+(n.rightFullExtent+r-e)+\" \"+(n.targetY-n.rightSmallArcRadius)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightSmallArcRadius-r)+\" 0 0 0 \"+(n.rightInnerExtent-e)+\" \"+(n.targetY-r)+\"L\"+(n.targetX-e)+\" \"+(n.targetY-r)+(e>0?\"L\"+n.targetX+\" \"+n.targetY:\"\")+\"Z\":\"M \"+(n.targetX-e)+\" \"+(n.targetY-r)+\" L\"+(n.rightInnerExtent-e)+\" \"+(n.targetY-r)+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightSmallArcRadius+r)+\" 0 0 0 \"+(n.rightFullExtent-r-e)+\" \"+(n.targetY+n.rightSmallArcRadius)+\"L\"+(n.rightFullExtent-r-e)+\" \"+n.verticalRightInnerExtent+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightLargeArcRadius+r)+\" 0 0 0 \"+(n.rightInnerExtent-e)+\" \"+(n.verticalFullExtent+r)+\"L\"+n.leftInnerExtent+\" \"+(n.verticalFullExtent+r)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftLargeArcRadius+r)+\" 0 0 0 \"+(n.leftFullExtent+r)+\" \"+n.verticalLeftInnerExtent+\"L\"+(n.leftFullExtent+r)+\" \"+(n.sourceY+n.leftSmallArcRadius)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftSmallArcRadius+r)+\" 0 0 0 \"+n.leftInnerExtent+\" \"+(n.sourceY-r)+\"L\"+n.sourceX+\" \"+(n.sourceY-r)+\"L\"+n.sourceX+\" \"+(n.sourceY+r)+\"L\"+n.leftInnerExtent+\" \"+(n.sourceY+r)+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftSmallArcRadius-r)+\" 0 0 1 \"+(n.leftFullExtent-r)+\" \"+(n.sourceY+n.leftSmallArcRadius)+\"L\"+(n.leftFullExtent-r)+\" \"+n.verticalLeftInnerExtent+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftLargeArcRadius-r)+\" 0 0 1 \"+n.leftInnerExtent+\" \"+(n.verticalFullExtent-r)+\"L\"+(n.rightInnerExtent-e)+\" \"+(n.verticalFullExtent-r)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightLargeArcRadius-r)+\" 0 0 1 \"+(n.rightFullExtent+r-e)+\" \"+n.verticalRightInnerExtent+\"L\"+(n.rightFullExtent+r-e)+\" \"+(n.targetY+n.rightSmallArcRadius)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightSmallArcRadius-r)+\" 0 0 1 \"+(n.rightInnerExtent-e)+\" \"+(n.targetY+r)+\"L\"+(n.targetX-e)+\" \"+(n.targetY+r)+(e>0?\"L\"+n.targetX+\" \"+n.targetY:\"\")+\"Z\"}(t.link,e);var r=Math.abs((t.link.target.x0-t.link.source.x1)/2);e>r&&(e=r);var n=t.link.source.x1,a=t.link.target.x0-e,o=i(n,a),s=o(.5),l=o(.5),u=t.link.y0-t.link.width/2,c=t.link.y0+t.link.width/2,f=t.link.y1-t.link.width/2,h=t.link.y1+t.link.width/2,p=\"M\"+n+\",\"+u,d=\"C\"+s+\",\"+u+\" \"+l+\",\"+f+\" \"+a+\",\"+f,v=\"C\"+l+\",\"+h+\" \"+s+\",\"+c+\" \"+n+\",\"+c,g=e>0?\"L\"+(a+e)+\",\"+(f+t.link.width/2):\"\";return p+d+(g+=\"L\"+a+\",\"+h)+v+\"Z\"}}function S(t,e){var r=u(e.color),n=l.nodePadAcross,i=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var a=e.dx,o=Math.max(.5,e.dy),s=\"node_\"+e.pointNumber;return e.group&&(s=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:s,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(a),visibleHeight:o,zoneX:-n,zoneY:-i,zoneWidth:a+2*n,zoneHeight:o+2*i,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:c.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,s].join(\"_\"),interactionState:t.interactionState,figure:t}}function E(t){t.attr(\"transform\",(function(t){return p(t.node.x0.toFixed(3),t.node.y0.toFixed(3))}))}function L(t){t.call(E)}function C(t,e){t.call(L),e.attr(\"d\",M())}function P(t){t.attr(\"width\",(function(t){return t.node.x1-t.node.x0})).attr(\"height\",(function(t){return t.visibleHeight}))}function O(t){return t.link.width>1||t.linkLineWidth>0}function I(t){return p(t.translateX,t.translateY)+(t.horizontal?\"matrix(1 0 0 1 0 0)\":\"matrix(0 1 1 0 0 0)\")}function D(t,e,r){t.on(\".basic\",null).on(\"mouseover.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])})).on(\"mousemove.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])})).on(\"mouseout.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)})).on(\"click.basic\",(function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)}))}function z(t,e,r,i){var o=a.behavior.drag().origin((function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}})).on(\"dragstart\",(function(a){if(\"fixed\"!==a.arrangement&&(h.ensureSingle(i._fullLayout._infolayer,\"g\",\"dragcover\",(function(t){i._fullLayout._dragCover=t})),h.raiseToTop(this),a.interactionState.dragInProgress=a.node,F(a.node),a.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered=!1),\"snap\"===a.arrangement)){var o=a.traceId+\"|\"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,i){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var a=r.graph.nodes.filter((function(t){return t.originalX===r.node.originalX})).filter((function(t){return!t.partOfGroup}));r.forceLayouts[e]=n.forceSimulation(a).alphaDecay(0).force(\"collide\",n.forceCollide().radius((function(t){return t.dy/2+r.nodePad/2})).strength(1).iterations(l.forceIterations)).force(\"constrain\",function(t,e,r,n){return function(){for(var t=0,i=0;i<r.length;i++){var a=r[i];a===n.interactionState.dragInProgress?(a.x=a.lastDraggedX,a.y=a.lastDraggedY):(a.vx=(a.originalX-a.x)/l.forceTicksPerFrame,a.y=Math.min(n.size-a.dy/2,Math.max(a.dy/2,a.y))),t=Math.max(t,Math.abs(a.vx),Math.abs(a.vy))}!n.interactionState.dragInProgress&&t<.1&&n.forceLayouts[e].alpha()>0&&n.forceLayouts[e].alpha(0)}}(0,e,a,r)).stop()}(0,o,a),function(t,e,r,n,i){window.requestAnimationFrame((function a(){var o;for(o=0;o<l.forceTicksPerFrame;o++)r.forceLayouts[n].tick();if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(r.graph.nodes),r.sankey.update(r.graph),C(t.filter(B(r)),e),r.forceLayouts[n].alpha()>0)window.requestAnimationFrame(a);else{var s=r.node.originalX;r.node.x0=s-r.visibleWidth/2,r.node.x1=s+r.visibleWidth/2,R(r,i)}}))}(t,e,a,o,i)}})).on(\"drag\",(function(r){if(\"fixed\"!==r.arrangement){var n=a.event.x,i=a.event.y;\"snap\"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2):(\"freeform\"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),i=Math.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2),F(r.node),\"snap\"!==r.arrangement&&(r.sankey.update(r.graph),C(t.filter(B(r)),e))}})).on(\"dragend\",(function(t){if(\"fixed\"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;\"snap\"!==t.arrangement&&R(t,i)}}));t.on(\".drag\",null).call(o)}function R(t,e){for(var r=[],n=[],i=0;i<t.graph.nodes.length;i++){var a=(t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2,o=(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;r.push(a/t.figure.width),n.push(o/t.figure.height)}b.call(\"_guiRestyle\",e,{\"node.x\":[r],\"node.y\":[n]},t.trace.index).then((function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()}))}function F(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function B(t){return function(e){return e.node.originalX===t.node.originalX}}t.exports=function(t,e,r,n,i){var o=t._context.staticPlot,s=!1;h.ensureSingle(t._fullLayout._infolayer,\"g\",\"first-render\",(function(){s=!0}));var v=t._fullLayout._dragCover,b=r.filter((function(t){return m(t).trace.visible})).map(k.bind(null,n)),_=e.selectAll(\".\"+l.cn.sankey).data(b,g);_.exit().remove(),_.enter().append(\"g\").classed(l.cn.sankey,!0).style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"shape-rendering\",\"geometricPrecision\").style(\"pointer-events\",o?\"none\":\"auto\").attr(\"transform\",I),_.each((function(e,r){t._fullData[r]._sankey=e;var n=\"bgsankey-\"+e.trace.uid+\"-\"+r;h.ensureSingle(t._fullLayout._draggers,\"rect\",n),t._fullData[r]._bgRect=a.select(\".\"+n),t._fullData[r]._bgRect.style(\"pointer-events\",o?\"none\":\"all\").attr(\"width\",e.width).attr(\"height\",e.height).attr(\"x\",e.translateX).attr(\"y\",e.translateY).classed(\"bgsankey\",!0).style({fill:\"transparent\",\"stroke-width\":0})})),_.transition().ease(l.ease).duration(l.duration).attr(\"transform\",I);var L=_.selectAll(\".\"+l.cn.sankeyLinks).data(y,g);L.enter().append(\"g\").classed(l.cn.sankeyLinks,!0).style(\"fill\",\"none\");var C=L.selectAll(\".\"+l.cn.sankeyLink).data((function(t){return t.graph.links.filter((function(t){return t.value})).map(A.bind(null,t))}),g);C.enter().append(\"path\").classed(l.cn.sankeyLink,!0).call(D,_,i.linkEvents),C.style(\"stroke\",(function(t){return O(t)?c.tinyRGB(u(t.linkLineColor)):t.tinyColorHue})).style(\"stroke-opacity\",(function(t){return O(t)?c.opacity(t.linkLineColor):t.tinyColorAlpha})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})).style(\"stroke-width\",(function(t){return O(t)?t.linkLineWidth:1})).attr(\"d\",M()),C.style(\"opacity\",(function(){return t._context.staticPlot||s||v?1:0})).transition().ease(l.ease).duration(l.duration).style(\"opacity\",1),C.exit().transition().ease(l.ease).duration(l.duration).style(\"opacity\",0).remove();var R=_.selectAll(\".\"+l.cn.sankeyNodeSet).data(y,g);R.enter().append(\"g\").classed(l.cn.sankeyNodeSet,!0),R.style(\"cursor\",(function(t){switch(t.arrangement){case\"fixed\":return\"default\";case\"perpendicular\":return\"ns-resize\";default:return\"move\"}}));var F=R.selectAll(\".\"+l.cn.sankeyNode).data((function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort((function(t,e){return t-e})),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(S.bind(null,t))}),g);F.enter().append(\"g\").classed(l.cn.sankeyNode,!0).call(E).style(\"opacity\",(function(e){return!t._context.staticPlot&&!s||e.partOfGroup?0:1})),F.call(D,_,i.nodeEvents).call(z,C,i,t),F.transition().ease(l.ease).duration(l.duration).call(E).style(\"opacity\",(function(t){return t.partOfGroup?0:1})),F.exit().transition().ease(l.ease).duration(l.duration).style(\"opacity\",0).remove();var B=F.selectAll(\".\"+l.cn.nodeRect).data(y);B.enter().append(\"rect\").classed(l.cn.nodeRect,!0).call(P),B.style(\"stroke-width\",(function(t){return t.nodeLineWidth})).style(\"stroke\",(function(t){return c.tinyRGB(u(t.nodeLineColor))})).style(\"stroke-opacity\",(function(t){return c.opacity(t.nodeLineColor)})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),B.transition().ease(l.ease).duration(l.duration).call(P);var N=F.selectAll(\".\"+l.cn.nodeLabel).data(y);N.enter().append(\"text\").classed(l.cn.nodeLabel,!0).style(\"cursor\",\"default\"),N.attr(\"data-notex\",1).text((function(t){return t.node.label})).each((function(e){var r=a.select(this);f.font(r,e.textFont),x.convertToTspans(r,t)})).style(\"text-shadow\",x.makeTextShadow(t._fullLayout.paper_bgcolor)).attr(\"text-anchor\",(function(t){return t.horizontal&&t.left?\"end\":\"start\"})).attr(\"transform\",(function(t){var e=a.select(this),r=x.lineCount(e),n=t.textFont.size*((r-1)*T-w),i=t.nodeLineWidth/2+3,o=((t.horizontal?t.visibleHeight:t.visibleWidth)-n)/2;t.horizontal&&(t.left?i=-i:i+=t.visibleWidth);var s=t.horizontal?\"\":\"scale(-1,1)\"+d(90);return p(t.horizontal?i:o,t.horizontal?o:i)+s})),N.transition().ease(l.ease).duration(l.duration)}},84564:function(t){\"use strict\";t.exports=function(t,e){for(var r=[],n=t.cd[0].trace,i=n._sankey.graph.nodes,a=0;a<i.length;a++){var o=i[a];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];\"v\"===n.orientation&&s.reverse(),e&&e.contains(s,!1,a,t)&&r.push({pointNumber:o.pointNumber})}}return r}},75225:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.texttemplate,t,\"txt\"),n.mergeArray(e.hovertext,t,\"htx\"),n.mergeArray(e.customdata,t,\"data\"),n.mergeArray(e.textposition,t,\"tp\"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,\"ts\"),n.mergeArray(e.textfont.color,t,\"tc\"),n.mergeArray(e.textfont.family,t,\"tf\"));var i=e.marker;if(i){n.mergeArrayCastPositive(i.size,t,\"ms\"),n.mergeArrayCastPositive(i.opacity,t,\"mo\"),n.mergeArray(i.symbol,t,\"mx\"),n.mergeArray(i.angle,t,\"ma\"),n.mergeArray(i.standoff,t,\"mf\"),n.mergeArray(i.color,t,\"mc\");var a=i.line;i.line&&(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"));var o=i.gradient;o&&\"none\"!==o.type&&(n.mergeArray(o.type,t,\"mgt\"),n.mergeArray(o.color,t,\"mgc\"))}}},82196:function(t,e,r){\"use strict\";var n=r(12663).axisHoverFormat,i=r(5386).si,a=r(5386).fF,o=r(50693),s=r(41940),l=r(79952).P,u=r(79952).u,c=r(91424),f=r(47581),h=r(1426).extendFlat;t.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dx:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dy:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},xperiod:{valType:\"any\",dflt:0,editType:\"calc\"},yperiod:{valType:\"any\",dflt:0,editType:\"calc\"},xperiod0:{valType:\"any\",editType:\"calc\"},yperiod0:{valType:\"any\",editType:\"calc\"},xperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},yperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},xhoverformat:n(\"x\"),yhoverformat:n(\"y\"),offsetgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},alignmentgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},stackgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc\"},groupnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},stackgaps:{valType:\"enumerated\",values:[\"infer zero\",\"interpolate\"],dflt:\"infer zero\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},texttemplate:i({},{}),hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"],editType:\"calc\"},hoveron:{valType:\"flaglist\",flags:[\"points\",\"fills\"],editType:\"style\"},hovertemplate:a({},{keys:f.eventDataKeys}),line:{color:{valType:\"color\",editType:\"style\",anim:!0},width:{valType:\"number\",min:0,dflt:2,editType:\"style\",anim:!0},shape:{valType:\"enumerated\",values:[\"linear\",\"spline\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},smoothing:{valType:\"number\",min:0,max:1.3,dflt:1,editType:\"plot\"},dash:h({},l,{editType:\"style\"}),backoff:{valType:\"number\",min:0,dflt:\"auto\",arrayOk:!0,editType:\"plot\"},simplify:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cliponaxis:{valType:\"boolean\",dflt:!0,editType:\"plot\"},fill:{valType:\"enumerated\",values:[\"none\",\"tozeroy\",\"tozerox\",\"tonexty\",\"tonextx\",\"toself\",\"tonext\"],editType:\"calc\"},fillcolor:{valType:\"color\",editType:\"style\",anim:!0},fillpattern:u,marker:h({symbol:{valType:\"enumerated\",values:c.symbolList,dflt:\"circle\",arrayOk:!0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,arrayOk:!0,editType:\"style\",anim:!0},angle:{valType:\"angle\",dflt:0,arrayOk:!0,editType:\"plot\",anim:!1},angleref:{valType:\"enumerated\",values:[\"previous\",\"up\"],dflt:\"up\",editType:\"plot\",anim:!1},standoff:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"plot\",anim:!0},size:{valType:\"number\",min:0,dflt:6,arrayOk:!0,editType:\"calc\",anim:!0},maxdisplayed:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},sizeref:{valType:\"number\",dflt:1,editType:\"calc\"},sizemin:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"diameter\",\"area\"],dflt:\"diameter\",editType:\"calc\"},line:h({width:{valType:\"number\",min:0,arrayOk:!0,editType:\"style\",anim:!0},editType:\"calc\"},o(\"marker.line\",{anim:!0})),gradient:{type:{valType:\"enumerated\",values:[\"radial\",\"horizontal\",\"vertical\",\"none\"],arrayOk:!0,dflt:\"none\",editType:\"calc\"},color:{valType:\"color\",arrayOk:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},o(\"marker\",{anim:!0})),selected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},unselected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"middle center\",arrayOk:!0,editType:\"calc\"},textfont:s({editType:\"calc\",colorEditType:\"style\",arrayOk:!0})}},47761:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(89298),o=r(42973),s=r(50606).BADNUM,l=r(34098),u=r(36922),c=r(75225),f=r(66279);function h(t,e,r,n,i,o,s){var u=e._length,c=t._fullLayout,f=r._id,h=n._id,p=c._firstScatter[v(e)]===e.uid,d=(g(e,c,r,n)||{}).orientation,y=e.fill;r._minDtick=0,n._minDtick=0;var m={padded:!0},x={padded:!0};s&&(m.ppad=x.ppad=s);var b=u<2||i[0]!==i[u-1]||o[0]!==o[u-1];b&&(\"tozerox\"===y||\"tonextx\"===y&&(p||\"h\"===d))?m.tozero=!0:(e.error_y||{}).visible||\"tonexty\"!==y&&\"tozeroy\"!==y&&(l.hasMarkers(e)||l.hasText(e))||(m.padded=!1,m.ppad=0),b&&(\"tozeroy\"===y||\"tonexty\"===y&&(p||\"v\"===d))?x.tozero=!0:\"tonextx\"!==y&&\"tozerox\"!==y||(x.padded=!1),f&&(e._extremes[f]=a.findExtremes(r,i,m)),h&&(e._extremes[h]=a.findExtremes(n,o,x))}function p(t,e){if(l.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r=\"area\"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(n.size)){var s={type:\"linear\"};a.setConvert(s);for(var u=s.makeCalcdata(t.marker,\"size\"),c=new Array(e),f=0;f<e;f++)c[f]=r(u[f]);return c}return r(n.size)}}function d(t,e){var r=v(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function v(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?\"-\"+e:\"\")}function g(t,e,r,n){var i=t.stackgroup;if(i){var a=e._scatterStackOpts[r._id+n._id][i],o=\"v\"===a.orientation?n:r;return\"linear\"===o.type||\"log\"===o.type?a:void 0}}t.exports={calc:function(t,e){var r,l,v,y,m,x,b=t._fullLayout,_=e._xA=a.getFromId(t,e.xaxis||\"x\",\"x\"),w=e._yA=a.getFromId(t,e.yaxis||\"y\",\"y\"),T=_.makeCalcdata(e,\"x\"),k=w.makeCalcdata(e,\"y\"),A=o(e,_,\"x\",T),M=o(e,w,\"y\",k),S=A.vals,E=M.vals,L=e._length,C=new Array(L),P=e.ids,O=g(e,b,_,w),I=!1;d(b,e);var D,z=\"x\",R=\"y\";O?(i.pushUnique(O.traceIndices,e._expandedIndex),(r=\"v\"===O.orientation)?(R=\"s\",D=\"x\"):(z=\"s\",D=\"y\"),m=\"interpolate\"===O.stackgaps):h(t,e,_,w,S,E,p(e,L));var F=!!e.xperiodalignment,B=!!e.yperiodalignment;for(l=0;l<L;l++){var N=C[l]={},j=n(S[l]),U=n(E[l]);j&&U?(N[z]=S[l],N[R]=E[l],F&&(N.orig_x=T[l],N.xEnd=A.ends[l],N.xStart=A.starts[l]),B&&(N.orig_y=k[l],N.yEnd=M.ends[l],N.yStart=M.starts[l])):O&&(r?j:U)?(N[D]=r?S[l]:E[l],N.gap=!0,m?(N.s=s,I=!0):N.s=0):N[z]=N[R]=s,P&&(N.id=String(P[l]))}if(c(C,e),u(t,e),f(C,e),O){for(l=0;l<C.length;)C[l][D]===s?C.splice(l,1):l++;if(i.sort(C,(function(t,e){return t[D]-e[D]||t.i-e.i})),I){for(l=0;l<C.length-1&&C[l].gap;)l++;for((x=C[l].s)||(x=C[l].s=0),v=0;v<l;v++)C[v].s=x;for(y=C.length-1;y>l&&C[y].gap;)y--;for(x=C[y].s,v=C.length-1;v>y;v--)C[v].s=x;for(;l<y;)if(C[++l].gap){for(v=l+1;C[v].gap;)v++;for(var V=C[l-1][D],H=C[l-1].s,q=(C[v].s-H)/(C[v][D]-V);l<v;)C[l].s=H+(C[l][D]-V)*q,l++}}}return C},calcMarkerSize:p,calcAxisExpansion:h,setFirstScatter:d,getStackOpts:g}},66279:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},36922:function(t,e,r){\"use strict\";var n=r(52075).hasColorscale,i=r(78803),a=r(34098);t.exports=function(t,e){a.hasLines(e)&&n(e,\"line\")&&i(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),a.hasMarkers(e)&&(n(e,\"marker\")&&i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),n(e,\"marker.line\")&&i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}))}},47581:function(t){\"use strict\";t.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},72626:function(t,e,r){\"use strict\";var n=r(47761),i=r(11661).setGroupPositions;function a(t,e,r,n,i,a,o){i[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else a&&(s.s=function(t,e,r,n){var i=t[e-1],a=t[e+1];return a?i?i.s+(a.s-i.s)*(r-i[n])/(a[n]-i[n]):a.s:i.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}t.exports=function(t,e){\"group\"===t._fullLayout.scattermode&&function(t,e){for(var r=e.xaxis,n=e.yaxis,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=[],u=[],c=0;c<o.length;c++){var f=o[c];!0===f.visible&&\"scatter\"===f.type&&f.xaxis===r._id&&f.yaxis===n._id&&(\"h\"===f.orientation?l.push(s[c]):\"v\"===f.orientation&&u.push(s[c]))}var h={mode:a.scattermode,gap:a.scattergap};i(t,r,n,u,h),i(t,n,r,l,h)}(t,e);var r=e.xaxis,o=e.yaxis,s=r._id+o._id,l=t._fullLayout._scatterStackOpts[s];if(l){var u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k=t.calcdata;for(var A in l){var M=(m=l[A]).traceIndices;if(M.length){for(x=\"interpolate\"===m.stackgaps,b=m.groupnorm,\"v\"===m.orientation?(_=\"x\",w=\"y\"):(_=\"y\",w=\"x\"),T=new Array(M.length),u=0;u<T.length;u++)T[u]=!1;d=k[M[0]];var S=new Array(d.length);for(u=0;u<d.length;u++)S[u]=d[u][_];for(u=1;u<M.length;u++){for(p=k[M[u]],c=f=0;c<p.length;c++){for(v=p[c][_];v>S[f]&&f<S.length;f++)a(p,c,S[f],u,T,x,_),c++;if(v!==S[f]){for(h=0;h<u;h++)a(k[M[h]],f,v,h,T,x,_);S.splice(f,0,v)}f++}for(;f<S.length;f++)a(p,c,S[f],u,T,x,_),c++}var E=S.length;for(c=0;c<d.length;c++){for(g=d[c][w]=d[c].s,u=1;u<M.length;u++)(p=k[M[u]])[0].trace._rawLength=p[0].trace._length,p[0].trace._length=E,g+=p[c].s,p[c][w]=g;if(b)for(y=(\"fraction\"===b?g:g/100)||1,u=0;u<M.length;u++){var L=k[M[u]][c];L[w]/=y,L.sNorm=L.s/y}}for(u=0;u<M.length;u++){var C=(p=k[M[u]])[0].trace,P=n.calcMarkerSize(C,C._rawLength),O=Array.isArray(P);if(P&&T[u]||O){var I=P;for(P=new Array(E),c=0;c<E;c++)P[c]=p[c].gap?0:O?I[p[c].i]:I}var D=new Array(E),z=new Array(E);for(c=0;c<E;c++)D[c]=p[c].x,z[c]=p[c].y;n.calcAxisExpansion(t,C,r,o,D,z,P),p[0].t.orientation=m.orientation}}}}}},34936:function(t,e,r){\"use strict\";var n=r(71828),i=r(26125),a=r(82196);t.exports=function(t,e){var r,o,s;function l(t){return n.coerce(o._input,o,a,t)}if(\"group\"===e.scattermode)for(s=0;s<t.length;s++)\"scatter\"===(o=t[s]).type&&(r=o._input,i(r,o,e,l));for(s=0;s<t.length;s++){var u=t[s];if(\"scatter\"===u.type){var c=u.fill;if(\"none\"!==c&&\"toself\"!==c&&(u.opacity=void 0,\"tonexty\"===c||\"tonextx\"===c))for(var f=s-1;f>=0;f--){var h=t[f];if(\"scatter\"===h.type&&h.xaxis===u.xaxis&&h.yaxis===u.yaxis){h.opacity=void 0;break}}}}}},17438:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(82196),o=r(47581),s=r(34098),l=r(67513),u=r(73927),c=r(565),f=r(49508),h=r(11058),p=r(94039),d=r(82410),v=r(28908),g=r(71828).coercePattern;t.exports=function(t,e,r,y){function m(r,i){return n.coerce(t,e,a,r,i)}var x=l(t,e,y,m);if(x||(e.visible=!1),e.visible){u(t,e,y,m),m(\"xhoverformat\"),m(\"yhoverformat\");var b=c(t,e,y,m);\"group\"===y.scattermode&&void 0===e.orientation&&m(\"orientation\",\"v\");var _=!b&&x<o.PTS_LINESONLY?\"lines+markers\":\"lines\";m(\"text\"),m(\"hovertext\"),m(\"mode\",_),s.hasLines(e)&&(h(t,e,r,y,m,{backoff:!0}),p(t,e,m),m(\"connectgaps\"),m(\"line.simplify\")),s.hasMarkers(e)&&f(t,e,r,y,m,{gradient:!0}),s.hasText(e)&&(m(\"texttemplate\"),d(t,e,y,m));var w=[];(s.hasMarkers(e)||s.hasText(e))&&(m(\"cliponaxis\"),m(\"marker.maxdisplayed\"),w.push(\"points\")),m(\"fill\",b?b.fillDflt:\"none\"),\"none\"!==e.fill&&(v(t,e,r,m),s.hasLines(e)||p(t,e,m),g(m,\"fillpattern\",e.fillcolor,!1));var T=(e.line||{}).color,k=(e.marker||{}).color;\"tonext\"!==e.fill&&\"toself\"!==e.fill||w.push(\"fills\"),m(\"hoveron\",w.join(\"+\")||\"points\"),\"fills\"!==e.hoveron&&m(\"hovertemplate\");var A=i.getComponentMethod(\"errorbars\",\"supplyDefaults\");A(t,e,T||k||r,{axis:\"y\"}),A(t,e,T||k||r,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,m)}}},28908:function(t,e,r){\"use strict\";var n=r(7901),i=r(71828).isArrayOrTypedArray;t.exports=function(t,e,r,a){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!i(s)?o=s:l&&!i(l)&&(o=l)}a(\"fillcolor\",n.addOpacity((e.line||{}).color||o||r,.5))}},8225:function(t,e,r){\"use strict\";var n=r(89298);t.exports=function(t,e,r){var i={},a={_fullLayout:r},o=n.getFromTrace(a,e,\"x\"),s=n.getFromTrace(a,e,\"y\"),l=t.orig_x;void 0===l&&(l=t.x);var u=t.orig_y;return void 0===u&&(u=t.y),i.xLabel=n.tickText(o,o.c2l(l),!0).text,i.yLabel=n.tickText(s,s.c2l(u),!0).text,i}},34603:function(t,e,r){\"use strict\";var n=r(7901),i=r(34098);t.exports=function(t,e){var r,a;if(\"lines\"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if(\"none\"===t.mode)return t.fill?t.fillcolor:\"\";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(a=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:\"\")?n.opacity(a)<.3?n.addOpacity(a,.3):a:(r=(t.line||{}).color)&&n.opacity(r)&&i.hasLines(t)&&t.line.width?r:t.fillcolor}},26125:function(t,e,r){\"use strict\";var n=r(99082).getAxisGroup;t.exports=function(t,e,r,i){var a=e.orientation,o=e[{v:\"x\",h:\"y\"}[a]+\"axis\"],s=n(r,o)+a,l=r._alignmentOpts||{},u=i(\"alignmentgroup\"),c=l[s];c||(c=l[s]={});var f=c[u];f?f.traces.push(e):f=c[u]={traces:[e],alignmentIndex:Object.keys(c).length,offsetGroups:{}};var h=i(\"offsetgroup\"),p=f.offsetGroups,d=p[h];h&&(d||(d=p[h]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}},33720:function(t,e,r){\"use strict\";var n=r(71828),i=r(30211),a=r(73972),o=r(34603),s=r(7901),l=n.fillText;t.exports=function(t,e,r,u){var c=t.cd,f=c[0].trace,h=t.xa,p=t.ya,d=h.c2p(e),v=p.c2p(r),g=[d,v],y=f.hoveron||\"\",m=-1!==f.mode.indexOf(\"markers\")?3:.5,x=!!f.xperiodalignment,b=!!f.yperiodalignment;if(-1!==y.indexOf(\"points\")){var _=function(t){var e=Math.max(m,t.mrc||0),r=h.c2p(t.x)-d,n=p.c2p(t.y)-v;return Math.max(Math.sqrt(r*r+n*n)-e,1-m/e)},w=i.getDistanceFunction(u,(function(t){if(x){var e=h.c2p(t.xStart),r=h.c2p(t.xEnd);return d>=Math.min(e,r)&&d<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(h.c2p(t.x)-d);return a<n?i*a/n:a-n+i}),(function(t){if(b){var e=p.c2p(t.yStart),r=p.c2p(t.yEnd);return v>=Math.min(e,r)&&v<=Math.max(e,r)?0:1/0}var n=Math.max(3,t.mrc||0),i=1-1/n,a=Math.abs(p.c2p(t.y)-v);return a<n?i*a/n:a-n+i}),_);if(i.getClosest(c,w,t),!1!==t.index){var T=c[t.index],k=h.c2p(T.x,!0),A=p.c2p(T.y,!0),M=T.mrc||1;t.index=T.i;var S=c[0].t.orientation,E=S&&(T.sNorm||T.s),L=\"h\"===S?E:void 0!==T.orig_x?T.orig_x:T.x,C=\"v\"===S?E:void 0!==T.orig_y?T.orig_y:T.y;return n.extendFlat(t,{color:o(f,T),x0:k-M,x1:k+M,xLabelVal:L,y0:A-M,y1:A+M,yLabelVal:C,spikeDistance:_(T),hovertemplate:f.hovertemplate}),l(T,f,t),a.getComponentMethod(\"errorbars\",\"hoverInfo\")(T,f,t),[t]}}if(-1!==y.indexOf(\"fills\")&&f._polygons){var P,O,I,D,z,R,F,B,N,j=f._polygons,U=[],V=!1,H=1/0,q=-1/0,G=1/0,Z=-1/0;for(P=0;P<j.length;P++)(I=j[P]).contains(g)&&(V=!V,U.push(I),G=Math.min(G,I.ymin),Z=Math.max(Z,I.ymax));if(V){var Y=((G=Math.max(G,0))+(Z=Math.min(Z,p._length)))/2;for(P=0;P<U.length;P++)for(D=U[P].pts,O=1;O<D.length;O++)(B=D[O-1][1])>Y!=(N=D[O][1])>=Y&&(R=D[O-1][0],F=D[O][0],N-B&&(z=R+(F-R)*(Y-B)/(N-B),H=Math.min(H,z),q=Math.max(q,z)));H=Math.max(H,0),q=Math.min(q,h._length);var W=s.defaultLine;return s.opacity(f.fillcolor)?W=f.fillcolor:s.opacity((f.line||{}).color)&&(W=f.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:H,x1:q,y0:Y,y1:Y,color:W,hovertemplate:!1}),delete t.index,f.text&&!Array.isArray(f.text)?t.text=String(f.text):t.text=f.name,[t]}}}},67368:function(t,e,r){\"use strict\";var n=r(34098);t.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:r(82196),layoutAttributes:r(21479),supplyDefaults:r(17438),crossTraceDefaults:r(34936),supplyLayoutDefaults:r(79334),calc:r(47761).calc,crossTraceCalc:r(72626),arraysToCalcdata:r(75225),plot:r(32663),colorbar:r(4898),formatLabels:r(8225),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(33720),selectPoints:r(98002),animatable:!0,moduleType:\"trace\",name:\"scatter\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\",\"zoomScale\"],meta:{}}},21479:function(t){\"use strict\";t.exports={scattermode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},scattergap:{valType:\"number\",min:0,max:1,editType:\"calc\"}}},79334:function(t,e,r){\"use strict\";var n=r(71828),i=r(21479);t.exports=function(t,e){var r,a=\"group\"===e.barmode;\"group\"===e.scattermode&&(\"scattergap\",r=a?e.bargap:.2,n.coerce(t,e,i,\"scattergap\",r))}},11058:function(t,e,r){\"use strict\";var n=r(71828).isArrayOrTypedArray,i=r(52075).hasColorscale,a=r(1586);t.exports=function(t,e,r,o,s,l){l||(l={});var u=(t.marker||{}).color;s(\"line.color\",r),i(t,\"line\")?a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}):s(\"line.color\",!n(u)&&u||r),s(\"line.width\"),l.noDash||s(\"line.dash\"),l.backoff&&s(\"line.backoff\")}},34621:function(t,e,r){\"use strict\";var n=r(91424),i=r(50606),a=i.BADNUM,o=i.LOG_CLIP,s=o+.5,l=o-.5,u=r(71828),c=u.segmentsIntersect,f=u.constrain,h=r(47581);t.exports=function(t,e){var r,i,o,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=e.trace||{},L=e.xaxis,C=e.yaxis,P=\"log\"===L.type,O=\"log\"===C.type,I=L._length,D=C._length,z=e.backoff,R=E.marker,F=e.connectGaps,B=e.baseTolerance,N=e.shape,j=\"linear\"===N,U=E.fill&&\"none\"!==E.fill,V=[],H=h.minTolerance,q=t.length,G=new Array(q),Z=0;function Y(r){var n=t[r];if(!n)return!1;var i=e.linearized?L.l2p(n.x):L.c2p(n.x),o=e.linearized?C.l2p(n.y):C.c2p(n.y);if(i===a){if(P&&(i=L.c2p(n.x,!0)),i===a)return!1;O&&o===a&&(i*=Math.abs(L._m*D*(L._m>0?s:l)/(C._m*I*(C._m>0?s:l)))),i*=1e3}if(o===a){if(O&&(o=C.c2p(n.y,!0)),o===a)return!1;o*=1e3}return[i,o]}function W(t,e,r,n){var i=r-t,a=n-e,o=.5-t,s=.5-e,l=i*i+a*a,u=i*o+a*s;if(u>0&&u<l){var c=o*a-s*i;if(c*c<l)return!0}}function X(t,e){var r=t[0]/I,n=t[1]/D,i=Math.max(0,-r,r-1,-n,n-1);return i&&void 0!==M&&W(r,n,M,S)&&(i=0),i&&e&&W(r,n,e[0]/I,e[1]/D)&&(i=0),(1+h.toleranceGrowth*i)*B}function J(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var K,$,Q,tt,et,rt,nt,it=h.maxScreensAway,at=-I*it,ot=I*(1+it),st=-D*it,lt=D*(1+it),ut=[[at,st,ot,st],[ot,st,ot,lt],[ot,lt,at,lt],[at,lt,at,st]];function ct(t){if(t[0]<at||t[0]>ot||t[1]<st||t[1]>lt)return[f(t[0],at,ot),f(t[1],st,lt)]}function ft(t,e){return t[0]===e[0]&&(t[0]===at||t[0]===ot)||t[1]===e[1]&&(t[1]===st||t[1]===lt)||void 0}function ht(t,e,r){return function(n,i){var a=ct(n),o=ct(i),s=[];if(a&&o&&ft(a,o))return s;a&&s.push(a),o&&s.push(o);var l=2*u.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);return l&&((a&&o?l>0==a[t]>o[t]?a:o:a||o)[t]+=l),s}}function pt(t){var e=t[0],r=t[1],n=e===G[Z-1][0],i=r===G[Z-1][1];if(!n||!i)if(Z>1){var a=e===G[Z-2][0],o=r===G[Z-2][1];n&&(e===at||e===ot)&&a?o?Z--:G[Z-1]=t:i&&(r===st||r===lt)&&o?a?Z--:G[Z-1]=t:G[Z++]=t}else G[Z++]=t}function dt(t){G[Z-1][0]!==t[0]&&G[Z-1][1]!==t[1]&&pt([Q,tt]),pt(t),et=null,Q=tt=0}\"linear\"===N||\"spline\"===N?nt=function(t,e){for(var r=[],n=0,i=0;i<4;i++){var a=ut[i],o=c(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&J(o,t)<J(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:\"hv\"===N||\"vh\"===N?nt=function(t,e){var r=[],n=ct(t),i=ct(e);return n&&i&&ft(n,i)||(n&&r.push(n),i&&r.push(i)),r}:\"hvh\"===N?nt=ht(0,at,ot):\"vhv\"===N&&(nt=ht(1,st,lt));var vt=u.isArrayOrTypedArray(R);function gt(e){if(e&&z&&(e.i=r,e.d=t,e.trace=E,e.marker=vt?R[e.i]:R,e.backoff=z),M=e[0]/I,S=e[1]/D,K=e[0]<at?at:e[0]>ot?ot:0,$=e[1]<st?st:e[1]>lt?lt:0,K||$){if(Z)if(et){var n=nt(et,e);n.length>1&&(dt(n[0]),G[Z++]=n[1])}else rt=nt(G[Z-1],e)[0],G[Z++]=rt;else G[Z++]=[K||e[0],$||e[1]];var i=G[Z-1];K&&$&&(i[0]!==K||i[1]!==$)?(et&&(Q!==K&&tt!==$?pt(Q&&tt?(a=et,s=(o=e)[0]-a[0],l=(o[1]-a[1])/s,(a[1]*o[0]-o[1]*a[0])/s>0?[l>0?at:ot,lt]:[l>0?ot:at,st]):[Q||K,tt||$]):Q&&tt&&pt([Q,tt])),pt([K,$])):Q-K&&tt-$&&pt([K||Q,$||tt]),et=e,Q=K,tt=$}else et&&dt(nt(et,e)[0]),G[Z++]=e;var a,o,s,l}for(r=0;r<q;r++)if(i=Y(r)){for(Z=0,et=null,gt(i),r++;r<q;r++){if(!(p=Y(r))){if(F)continue;break}if(j&&e.simplify){var yt=Y(r+1);if(x=J(p,i),U&&(0===Z||Z===q-1)||!(x<X(p,yt)*H)){for(y=[(p[0]-i[0])/x,(p[1]-i[1])/x],d=i,b=x,_=T=k=0,g=!1,o=p,r++;r<t.length;r++){if(v=yt,yt=Y(r+1),!v){if(F)continue;break}if(A=(m=[v[0]-i[0],v[1]-i[1]])[0]*y[1]-m[1]*y[0],T=Math.min(T,A),(k=Math.max(k,A))-T>X(v,yt))break;o=v,(w=m[0]*y[0]+m[1]*y[1])>b?(b=w,p=v,g=!1):w<_&&(_=w,d=v,g=!0)}if(g?(gt(p),o!==d&&gt(d)):(d!==i&&gt(d),o!==p&&gt(p)),gt(o),r>=t.length||!v)break;gt(v),i=v}}else gt(p)}et&&pt([Q||et[0],tt||et[1]]),V.push(G.slice(0,Z))}var mt=N.slice(N.length-1);if(z&&\"h\"!==mt&&\"v\"!==mt){for(var xt=!1,bt=-1,_t=[],wt=0;wt<V.length;wt++)for(var Tt=0;Tt<V[wt].length-1;Tt++){var kt=V[wt][Tt],At=V[wt][Tt+1],Mt=n.applyBackoff(At,kt);Mt[0]===At[0]&&Mt[1]===At[1]||(xt=!0),_t[bt+1]||(_t[++bt]=[kt,[Mt[0],Mt[1]]])}return xt?_t:V}return V}},94039:function(t){\"use strict\";t.exports=function(t,e,r){\"spline\"===r(\"line.shape\")&&r(\"line.smoothing\")}},68687:function(t){\"use strict\";var e={tonextx:1,tonexty:1,tonext:1};t.exports=function(t,r,n){var i,a,o,s,l,u={},c=!1,f=-1,h=0,p=-1;for(a=0;a<n.length;a++)(o=(i=n[a][0].trace).stackgroup||\"\")?o in u?l=u[o]:(l=u[o]=h,h++):i.fill in e&&p>=0?l=p:(l=p=h,h++),l<f&&(c=!0),i._groupIndex=f=l;var d=n.slice();c&&d.sort((function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index}));var v={};for(a=0;a<d.length;a++)o=(i=d[a][0].trace).stackgroup||\"\",!0===i.visible?(i._nexttrace=null,i.fill in e&&(s=v[o],i._prevtrace=s||null,s&&(s._nexttrace=i)),i._ownfill=i.fill&&(\"tozero\"===i.fill.substr(0,6)||\"toself\"===i.fill||\"to\"===i.fill.substr(0,2)&&!i._prevtrace),v[o]=i):i._prevtrace=i._nexttrace=i._ownfill=null;return d}},39984:function(t,e,r){\"use strict\";var n=r(92770);t.exports=function(t,e){e||(e=2);var r=t.marker,i=r.sizeref||1,a=r.sizemin||0,o=\"area\"===r.sizemode?function(t){return Math.sqrt(t/i)}:function(t){return t/i};return function(t){var r=o(t/e);return n(r)&&r>0?Math.max(r,a):0}}},4898:function(t){\"use strict\";t.exports={container:\"marker\",min:\"cmin\",max:\"cmax\"}},49508:function(t,e,r){\"use strict\";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(34098);t.exports=function(t,e,r,s,l,u){var c=o.isBubble(t),f=(t.line||{}).color;u=u||{},f&&(r=f),l(\"marker.symbol\"),l(\"marker.opacity\",c?.7:1),l(\"marker.size\"),u.noAngle||(l(\"marker.angle\"),u.noAngleRef||l(\"marker.angleref\"),u.noStandOff||l(\"marker.standoff\")),l(\"marker.color\",r),i(t,\"marker\")&&a(t,e,s,l,{prefix:\"marker.\",cLetter:\"c\"}),u.noSelect||(l(\"selected.marker.color\"),l(\"unselected.marker.color\"),l(\"selected.marker.size\"),l(\"unselected.marker.size\")),u.noLine||(l(\"marker.line.color\",f&&!Array.isArray(f)&&e.marker.color!==f?f:c?n.background:n.defaultLine),i(t,\"marker.line\")&&a(t,e,s,l,{prefix:\"marker.line.\",cLetter:\"c\"}),l(\"marker.line.width\",c?1:0)),c&&(l(\"marker.sizeref\"),l(\"marker.sizemin\"),l(\"marker.sizemode\")),u.gradient&&\"none\"!==l(\"marker.gradient.type\")&&l(\"marker.gradient.color\")}},73927:function(t,e,r){\"use strict\";var n=r(71828).dateTick0,i=r(50606).ONEWEEK;function a(t,e){return n(e,t%i==0?1:0)}t.exports=function(t,e,r,n,i){if(i||(i={x:!0,y:!0}),i.x){var o=n(\"xperiod\");o&&(n(\"xperiod0\",a(o,e.xcalendar)),n(\"xperiodalignment\"))}if(i.y){var s=n(\"yperiod\");s&&(n(\"yperiod0\",a(s,e.ycalendar)),n(\"yperiodalignment\"))}}},32663:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(71828),o=a.ensureSingle,s=a.identity,l=r(91424),u=r(34098),c=r(34621),f=r(68687),h=r(61082).tester;function p(t,e,r,f,p,d,v){var g,y=t._context.staticPlot;!function(t,e,r,i,o){var s=r.xaxis,l=r.yaxis,c=n.extent(a.simpleMap(s.range,s.r2c)),f=n.extent(a.simpleMap(l.range,l.r2c)),h=i[0].trace;if(u.hasMarkers(h)){var p=h.marker.maxdisplayed;if(0!==p){var d=i.filter((function(t){return t.x>=c[0]&&t.x<=c[1]&&t.y>=f[0]&&t.y<=f[1]})),v=Math.ceil(d.length/p),g=0;o.forEach((function(t,r){var n=t[0].trace;u.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&g++}));var y=Math.round(g*v/3+Math.floor(g/3)*v/7.1);i.forEach((function(t){delete t.vis})),d.forEach((function(t,e){0===Math.round((e+y)%v)&&(t.vis=!0)}))}}}(0,e,r,f,p);var m=!!v&&v.duration>0;function x(t){return m?t.transition():t}var b=r.xaxis,_=r.yaxis,w=f[0].trace,T=w.line,k=n.select(d),A=o(k,\"g\",\"errorbars\"),M=o(k,\"g\",\"lines\"),S=o(k,\"g\",\"points\"),E=o(k,\"g\",\"text\");if(i.getComponentMethod(\"errorbars\",\"plot\")(t,A,r,v),!0===w.visible){var L,C;x(k).style(\"opacity\",w.opacity);var P=w.fill.charAt(w.fill.length-1);\"x\"!==P&&\"y\"!==P&&(P=\"\"),f[0][r.isRangePlot?\"nodeRangePlot3\":\"node3\"]=k;var O,I,D=\"\",z=[],R=w._prevtrace;R&&(D=R._prevRevpath||\"\",C=R._nextFill,z=R._polygons);var F,B,N,j,U,V,H,q=\"\",G=\"\",Z=[],Y=a.noop;if(L=w._ownFill,u.hasLines(w)||\"none\"!==w.fill){for(C&&C.datum(f),-1!==[\"hv\",\"vh\",\"hvh\",\"vhv\"].indexOf(T.shape)?(F=l.steps(T.shape),B=l.steps(T.shape.split(\"\").reverse().join(\"\"))):F=B=\"spline\"===T.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),T.smoothing):l.smoothopen(t,T.smoothing)}:function(t){return\"M\"+t.join(\"L\")},N=function(t){return B(t.reverse())},Z=c(f,{xaxis:b,yaxis:_,trace:w,connectGaps:w.connectgaps,baseTolerance:Math.max(T.width||1,3)/4,shape:T.shape,backoff:T.backoff,simplify:T.simplify,fill:w.fill}),H=w._polygons=new Array(Z.length),g=0;g<Z.length;g++)w._polygons[g]=h(Z[g]);Z.length&&(j=Z[0][0],V=(U=Z[Z.length-1])[U.length-1]),Y=function(t){return function(e){if(O=F(e),I=N(e),q?P?(q+=\"L\"+O.substr(1),G=I+\"L\"+G.substr(1)):(q+=\"Z\"+O,G=I+\"Z\"+G):(q=O,G=I),u.hasLines(w)){var r=n.select(this);if(r.datum(f),t)x(r.style(\"opacity\",0).attr(\"d\",O).call(l.lineGroupStyle)).style(\"opacity\",1);else{var i=x(r);i.attr(\"d\",O),l.singleLineStyle(f,i)}}}}}var W=M.selectAll(\".js-line\").data(Z);x(W.exit()).style(\"opacity\",0).remove(),W.each(Y(!1)),W.enter().append(\"path\").classed(\"js-line\",!0).style(\"vector-effect\",y?\"none\":\"non-scaling-stroke\").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),Z.length?(L?(L.datum(f),j&&V&&(P?(\"y\"===P?j[1]=V[1]=_.c2p(0,!0):\"x\"===P&&(j[0]=V[0]=b.c2p(0,!0)),x(L).attr(\"d\",\"M\"+V+\"L\"+j+\"L\"+q.substr(1)).call(l.singleFillStyle,t)):x(L).attr(\"d\",q+\"Z\").call(l.singleFillStyle,t))):C&&(\"tonext\"===w.fill.substr(0,6)&&q&&D?(\"tonext\"===w.fill?x(C).attr(\"d\",q+\"Z\"+D+\"Z\").call(l.singleFillStyle,t):x(C).attr(\"d\",q+\"L\"+D.substr(1)+\"Z\").call(l.singleFillStyle,t),w._polygons=w._polygons.concat(z)):(J(C),w._polygons=null)),w._prevRevpath=G,w._prevPolygons=H):(L?J(L):C&&J(C),w._polygons=w._prevRevpath=w._prevPolygons=null),S.datum(f),E.datum(f),function(e,i,a){var o,c=a[0].trace,f=u.hasMarkers(c),h=u.hasText(c),p=et(c),d=rt,v=rt;if(f||h){var g=s,y=c.stackgroup,w=y&&\"infer zero\"===t._fullLayout._scatterStackOpts[b._id+_._id][y].stackgaps;c.marker.maxdisplayed||c._needsCull?g=w?$:K:y&&!w&&(g=Q),f&&(d=g),h&&(v=g)}var T,k=(o=e.selectAll(\"path.point\").data(d,p)).enter().append(\"path\").classed(\"point\",!0);m&&k.call(l.pointStyle,c,t).call(l.translatePoints,b,_).style(\"opacity\",0).transition().style(\"opacity\",1),o.order(),f&&(T=l.makePointStyleFns(c)),o.each((function(e){var i=n.select(this),a=x(i);l.translatePoint(e,a,b,_)?(l.singlePointStyle(e,a,c,T,t),r.layerClipId&&l.hideOutsideRangePoint(e,a,b,_,c.xcalendar,c.ycalendar),c.customdata&&i.classed(\"plotly-customdata\",null!==e.data&&void 0!==e.data)):a.remove()})),m?o.exit().transition().style(\"opacity\",0).remove():o.exit().remove(),(o=i.selectAll(\"g\").data(v,p)).enter().append(\"g\").classed(\"textpoint\",!0).append(\"text\"),o.order(),o.each((function(t){var e=n.select(this),i=x(e.select(\"text\"));l.translatePoint(t,i,b,_)?r.layerClipId&&l.hideOutsideRangePoint(t,e,b,_,c.xcalendar,c.ycalendar):e.remove()})),o.selectAll(\"text\").call(l.textPointStyle,c,t).each((function(t){var e=b.c2p(t.x),r=_.c2p(t.y);n.select(this).selectAll(\"tspan.line\").each((function(){x(n.select(this)).attr({x:e,y:r})}))})),o.exit().remove()}(S,E,f);var X=!1===w.cliponaxis?null:r.layerClipId;l.setClipUrl(S,X,t),l.setClipUrl(E,X,t)}function J(t){x(t).attr(\"d\",\"M0,0Z\")}function K(t){return t.filter((function(t){return!t.gap&&t.vis}))}function $(t){return t.filter((function(t){return t.vis}))}function Q(t){return t.filter((function(t){return!t.gap}))}function tt(t){return t.id}function et(t){if(t.ids)return tt}function rt(){return!1}}t.exports=function(t,e,r,i,a,u){var c,h,d=!a,v=!!a&&a.duration>0,g=f(t,e,r);(c=i.selectAll(\"g.trace\").data(g,(function(t){return t[0].trace.uid}))).enter().append(\"g\").attr(\"class\",(function(t){return\"trace scatter trace\"+t[0].trace.uid})).style(\"stroke-miterlimit\",2),c.order(),function(t,e,r){e.each((function(e){var i=o(n.select(this),\"g\",\"fills\");l.setClipUrl(i,r.layerClipId,t);var a=e[0].trace,u=[];a._ownfill&&u.push(\"_ownFill\"),a._nexttrace&&u.push(\"_nextFill\");var c=i.selectAll(\"g\").data(u,s);c.enter().append(\"g\"),c.exit().each((function(t){a[t]=null})).remove(),c.order().each((function(t){a[t]=o(n.select(this),\"path\",\"js-fill\")}))}))}(t,c,e),v?(u&&(h=u()),n.transition().duration(a.duration).ease(a.easing).each(\"end\",(function(){h&&h()})).each(\"interrupt\",(function(){h&&h()})).each((function(){i.selectAll(\"g.trace\").each((function(r,n){p(t,n,e,r,g,this,a)}))}))):c.each((function(r,n){p(t,n,e,r,g,this,a)})),d&&c.exit().remove(),i.selectAll(\"path:not([d])\").remove()}},98002:function(t,e,r){\"use strict\";var n=r(34098);t.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[],f=s[0].trace;if(!n.hasMarkers(f)&&!n.hasText(f))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)i=s[r],a=l.c2p(i.x),o=u.c2p(i.y),null!==i.i&&e.contains([a,o],!1,r,t)?(c.push({pointNumber:i.i,x:l.c2d(i.x),y:u.c2d(i.y)}),i.selected=1):i.selected=0;return c}},565:function(t){\"use strict\";var e=[\"orientation\",\"groupnorm\",\"stackgaps\"];t.exports=function(t,r,n,i){var a=n._scatterStackOpts,o=i(\"stackgroup\");if(o){var s=r.xaxis+r.yaxis,l=a[s];l||(l=a[s]={});var u=l[o],c=!1;u?u.traces.push(r):(u=l[o]={traceIndices:[],traces:[r]},c=!0);for(var f={orientation:r.x&&!r.y?\"h\":\"v\"},h=0;h<e.length;h++){var p=e[h],d=p+\"Found\";if(!u[d]){var v=void 0!==t[p],g=\"orientation\"===p;if((v||c)&&(u[p]=i(p,f[p]),g&&(u.fillDflt=\"h\"===u[p]?\"tonextx\":\"tonexty\"),v&&(u[d]=!0,!c&&(delete u.traces[0][p],g))))for(var y=0;y<u.traces.length-1;y++){var m=u.traces[y];m._input.fill!==m.fill&&(m.fill=u.fillDflt)}}}return u}}},16296:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(73972);function o(t,e,r){i.pointStyle(t.selectAll(\"path.point\"),e,r)}function s(t,e,r){i.textPointStyle(t.selectAll(\"text\"),e,r)}t.exports={style:function(t){var e=n.select(t).selectAll(\"g.trace.scatter\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.selectAll(\"g.points\").each((function(e){o(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.text\").each((function(e){s(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.trace path.js-line\").call(i.lineGroupStyle),e.selectAll(\"g.trace path.js-fill\").call(i.fillGroupStyle,t),a.getComponentMethod(\"errorbars\",\"style\")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(i.selectedPointStyle(r.selectAll(\"path.point\"),n),i.selectedTextStyle(r.selectAll(\"text\"),n)):(o(r,n,t),s(r,n,t))}}},34098:function(t,e,r){\"use strict\";var n=r(71828);t.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\"lines\")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf(\"markers\")||\"splom\"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\"text\")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},82410:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e,r,i,a){a=a||{},i(\"textposition\"),n.coerceFont(i,\"textfont\",a.font||r.font),a.noSelect||(i(\"selected.textfont.color\"),i(\"unselected.textfont.color\"))}},67513:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972);t.exports=function(t,e,r,a){var o,s=a(\"x\"),l=a(\"y\");if(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],r),s){var u=n.minRowLength(s);l?o=Math.min(u,n.minRowLength(l)):(o=u,a(\"y0\"),a(\"dy\"))}else{if(!l)return 0;o=n.minRowLength(l),a(\"x0\"),a(\"dx\")}return e._length=o,o}},44542:function(t,e,r){\"use strict\";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(5386).si,l=r(9012),u=r(29659),c=r(87381),f=r(1426).extendFlat,h=r(30962).overrideAll,p=r(78607),d=n.line,v=n.marker,g=v.line,y=f({width:d.width,dash:{valType:\"enumerated\",values:p(u),dflt:\"solid\"}},i(\"line\")),m=t.exports=h({x:n.x,y:n.y,z:{valType:\"data_array\"},text:f({},n.text,{}),texttemplate:s({},{}),hovertext:f({},n.hovertext,{}),hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),zhoverformat:a(\"z\"),mode:f({},n.mode,{dflt:\"lines+markers\"}),surfaceaxis:{valType:\"enumerated\",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:\"color\"},projection:{x:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},y:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},z:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:y,marker:f({symbol:{valType:\"enumerated\",values:p(c),dflt:\"circle\",arrayOk:!0},size:f({},v.size,{dflt:8}),sizeref:v.sizeref,sizemin:v.sizemin,sizemode:v.sizemode,opacity:f({},v.opacity,{arrayOk:!1}),colorbar:v.colorbar,line:f({width:f({},g.width,{arrayOk:!1})},i(\"marker.line\"))},i(\"marker\")),textposition:f({},n.textposition,{dflt:\"top center\"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:f({},n.textfont.family,{arrayOk:!1})},opacity:l.opacity,hoverinfo:f({},l.hoverinfo)},\"calc\",\"nested\");m.x.editType=m.y.editType=m.z.editType=\"calc+clearAxisTypes\"},36563:function(t,e,r){\"use strict\";var n=r(75225),i=r(36922);t.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(t,e),r}},67336:function(t,e,r){\"use strict\";var n=r(73972);function i(t,e,r,i){if(!e||!e.visible)return null;for(var a=n.getComponentMethod(\"errorbars\",\"makeComputeError\")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=a(+t[s],s);if(\"log\"===i.type){var u=i.c2l(t[s]),c=t[s]-l[0],f=t[s]+l[1];if(o[s]=[(i.c2l(c,!0)-u)*r,(i.c2l(f,!0)-u)*r],c>0){var h=i.c2l(c);i._lowerLogErrorBound||(i._lowerLogErrorBound=h),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,h)}}else o[s]=[-l[0]*r,l[1]*r]}return o}t.exports=function(t,e,r){var n=[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],u=0;u<3;u++)if(n[u])for(var c=0;c<2;c++)l[c][u]=n[u][s][c];o[s]=l}return o}},58925:function(t,e,r){\"use strict\";var n=r(9330).gl_line3d,i=r(9330).gl_scatter3d,a=r(9330).gl_error3d,o=r(9330).gl_mesh3d,s=r(9330).delaunay_triangulate,l=r(71828),u=r(78614),c=r(81697).formatColor,f=r(39984),h=r(29659),p=r(87381),d=r(89298),v=r(23469).appendArrayPointValue,g=r(67336);function y(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode=\"\",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var m=y.prototype;function x(t){return null==t?0:t.indexOf(\"left\")>-1?-1:t.indexOf(\"right\")>-1?1:0}function b(t){return null==t?0:t.indexOf(\"top\")>-1?-1:t.indexOf(\"bottom\")>-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function T(t,e,r,n,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o<e;o++)void 0===t[o]?a[o]=n:a[o]=r(t[o],i)}else a=r(t,l.identity);return a}function k(t){if(l.isArrayOrTypedArray(t)){var e=t[0];return l.isArrayOrTypedArray(e)&&(t=e),\"rgb(\"+t.slice(0,3).map((function(t){return Math.round(255*t)}))+\")\"}return null}function A(t){return l.isArrayOrTypedArray(t)?4===t.length&&\"number\"==typeof t[0]?k(t):t.map(k):null}m.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel=\"\",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},m.update=function(t){var e,r,p,y,m=this.scene.glplot.gl,k=h.solid;this.data=t;var M=function(t,e){var r,n,i,a,o,s,h=[],p=t.fullSceneLayout,y=t.dataScale,m=p.xaxis,k=p.yaxis,A=p.zaxis,M=e.marker,S=e.line,E=e.x||[],L=e.y||[],C=e.z||[],P=E.length,O=e.xcalendar,I=e.ycalendar,D=e.zcalendar;for(o=0;o<P;o++)r=m.d2l(E[o],0,O)*y[0],n=k.d2l(L[o],0,I)*y[1],i=A.d2l(C[o],0,D)*y[2],h[o]=[r,n,i];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(P),o=0;o<P;o++)s[o]=e.text;function z(t,e){var r=p[t];return d.tickText(r,r.d2l(e),!0).text}var R=e.texttemplate;if(R){var F=t.fullLayout._d3locale,B=Array.isArray(R),N=B?Math.min(R.length,P):P,j=B?function(t){return R[t]}:function(){return R};for(s=new Array(N),o=0;o<N;o++){var U={x:E[o],y:L[o],z:C[o]},V={xLabel:z(\"xaxis\",E[o]),yLabel:z(\"yaxis\",L[o]),zLabel:z(\"zaxis\",C[o])},H={};v(H,e,o);var q=e._meta||{};s[o]=l.texttemplateString(j(o),V,F,H,U,q)}}if(a={position:h,mode:e.mode,text:s},\"line\"in e&&(a.lineColor=c(S,1,P),a.lineWidth=S.width,a.lineDashes=S.dash),\"marker\"in e){var G=f(e);a.scatterColor=c(M,1,P),a.scatterSize=T(M.size,P,_,20,G),a.scatterMarker=T(M.symbol,P,w,\"●\"),a.scatterLineWidth=M.line.width,a.scatterLineColor=c(M.line,1,P),a.scatterAngle=0}\"textposition\"in e&&(a.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=x(t[r]),e[r][1]=b(t[r]));else e[0]=x(t),e[1]=b(t);return e}(e.textposition),a.textColor=c(e.textfont,1,P),a.textSize=T(e.textfont.size,P,l.identity,12),a.textFont=e.textfont.family,a.textAngle=0);var Z=[\"x\",\"y\",\"z\"];for(a.project=[!1,!1,!1],a.projectScale=[1,1,1],a.projectOpacity=[1,1,1],o=0;o<3;++o){var Y=e.projection[Z[o]];(a.project[o]=Y.show)&&(a.projectOpacity[o]=Y.opacity,a.projectScale[o]=Y.scale)}a.errorBounds=g(e,y,p);var W=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&!1!==t[2].visible&&(a=t[2]),a&&a.visible&&(e[i]=a.width/2,r[i]=u(a.color),n[i]=a.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return a.errorColor=W.color,a.errorLineWidth=W.lineWidth,a.errorCapSize=W.capSize,a.delaunayAxis=e.surfaceaxis,a.delaunayColor=u(e.surfacecolor),a}(this.scene,t);\"mode\"in M&&(this.mode=M.mode),\"lineDashes\"in M&&M.lineDashes in h&&(k=h[M.lineDashes]),this.color=A(M.scatterColor)||A(M.lineColor),this.dataPoints=M.position,e={gl:this.scene.glplot.gl,position:M.position,color:M.lineColor,lineWidth:M.lineWidth||1,dashes:k[0],dashScale:k[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf(\"lines\")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var S=t.opacity;if(t.marker&&void 0!==t.marker.opacity&&(S*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:M.position,color:M.scatterColor,size:M.scatterSize,glyph:M.scatterMarker,opacity:S,orthographic:!0,lineWidth:M.scatterLineWidth,lineColor:M.scatterLineColor,project:M.project,projectScale:M.projectScale,projectOpacity:M.projectOpacity},-1!==this.mode.indexOf(\"markers\")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=i(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),y={gl:this.scene.glplot.gl,position:M.position,glyph:M.text,color:M.textColor,size:M.textSize,angle:M.textAngle,alignment:M.textOffset,font:M.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf(\"text\")?this.textMarkers?this.textMarkers.update(y):(this.textMarkers=i(y),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),p={gl:this.scene.glplot.gl,position:M.position,color:M.errorColor,error:M.errorBounds,lineWidth:M.errorLineWidth,capSize:M.errorCapSize,opacity:t.opacity},this.errorBars?M.errorBounds?this.errorBars.update(p):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):M.errorBounds&&(this.errorBars=a(p),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),M.delaunayAxis>=0){var E=function(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var u=t[n];!isNaN(u[i])&&isFinite(u[i])&&!isNaN(u[a])&&isFinite(u[a])&&(o.push([u[i],u[a]]),l.push(n))}var c=s(o);for(n=0;n<c.length;++n)for(var f=c[n],h=0;h<f.length;++h)f[h]=l[f[h]];return{positions:t,cells:c,meshColor:e}}(M.position,M.delaunayColor,M.delaunayAxis);E.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(E):(E.gl=m,this.delaunayMesh=o(E),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},m.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},t.exports=function(t,e){var r=new y(t,e.uid);return r.update(e),r}},21428:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(34098),o=r(49508),s=r(11058),l=r(82410),u=r(44542);t.exports=function(t,e,r,c){function f(r,n){return i.coerce(t,e,u,r,n)}var h=function(t,e,r,i){var a=0,o=r(\"x\"),s=r(\"y\"),l=r(\"z\");return n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],i),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=a),a}(t,e,f,c);if(h){f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"zhoverformat\"),f(\"mode\"),a.hasLines(e)&&(f(\"connectgaps\"),s(t,e,r,c,f)),a.hasMarkers(e)&&o(t,e,r,c,f,{noSelect:!0,noAngle:!0}),a.hasText(e)&&(f(\"texttemplate\"),l(t,e,c,f,{noSelect:!0}));var p=(e.line||{}).color,d=(e.marker||{}).color;f(\"surfaceaxis\")>=0&&f(\"surfacecolor\",p||d);for(var v=[\"x\",\"y\",\"z\"],g=0;g<3;++g){var y=\"projection.\"+v[g];f(y+\".show\")&&(f(y+\".opacity\"),f(y+\".scale\"))}var m=n.getComponentMethod(\"errorbars\",\"supplyDefaults\");m(t,e,p||d||r,{axis:\"z\"}),m(t,e,p||d||r,{axis:\"y\",inherit:\"z\"}),m(t,e,p||d||r,{axis:\"x\",inherit:\"z\"})}else e.visible=!1}},13551:function(t,e,r){\"use strict\";t.exports={plot:r(58925),attributes:r(44542),markerSymbols:r(87381),supplyDefaults:r(21428),colorbar:[{container:\"marker\",min:\"cmin\",max:\"cmax\"},{container:\"line\",min:\"cmin\",max:\"cmax\"}],calc:r(36563),moduleType:\"trace\",name:\"scatter3d\",basePlotModule:r(58547),categories:[\"gl3d\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},97001:function(t,e,r){\"use strict\";var n=r(82196),i=r(9012),a=r(5386).fF,o=r(5386).si,s=r(50693),l=r(1426).extendFlat,u=n.marker,c=n.line,f=u.line;t.exports={carpet:{valType:\"string\",editType:\"calc\"},a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},mode:l({},n.mode,{dflt:\"markers\"}),text:l({},n.text,{}),texttemplate:o({editType:\"plot\"},{keys:[\"a\",\"b\",\"text\"]}),hovertext:l({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:c.dash,backoff:c.backoff,shape:l({},c.shape,{values:[\"linear\",\"spline\"]}),smoothing:c.smoothing,editType:\"calc\"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:n.fillcolor,marker:l({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,angle:u.angle,angleref:u.angleref,standoff:u.standoff,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:l({width:f.width,editType:\"calc\"},s(\"marker.line\")),gradient:u.gradient,editType:\"calc\"},s(\"marker\")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},i.hoverinfo,{flags:[\"a\",\"b\",\"text\",\"name\"]}),hoveron:n.hoveron,hovertemplate:a()}},34618:function(t,e,r){\"use strict\";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=r(22882);t.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&\"legendonly\"!==r.visible){var u;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var c,f,h=e._length,p=new Array(h),d=!1;for(u=0;u<h;u++)if(c=e.a[u],f=e.b[u],n(c)&&n(f)){var v=r.ab2xy(+c,+f,!0),g=r.isVisible(+c,+f);g||(d=!0),p[u]={x:v[0],y:v[1],a:c,b:f,vis:g}}else p[u]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,h),i(t,e),a(p,e),o(p,e),p}}},98965:function(t,e,r){\"use strict\";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(97001);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}p(\"carpet\"),e.xaxis=\"x\",e.yaxis=\"y\";var d=p(\"a\"),v=p(\"b\"),g=Math.min(d.length,v.length);if(g){e._length=g,p(\"text\"),p(\"texttemplate\"),p(\"hovertext\"),p(\"mode\",g<i.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p(\"connectgaps\")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&u(t,e,h,p);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\"marker.maxdisplayed\"),y.push(\"points\")),p(\"fill\"),\"none\"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||y.push(\"fills\"),\"fills\"!==p(\"hoveron\",y.join(\"+\")||\"points\")&&p(\"hovertemplate\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},16165:function(t){\"use strict\";t.exports=function(t,e,r,n,i){var a=n[i];return t.a=a.a,t.b=a.b,t.y=a.y,t}},48953:function(t){\"use strict\";t.exports=function(t,e){var r={},n=e._carpet,i=n.ab2ij([t.a,t.b]),a=Math.floor(i[0]),o=i[0]-a,s=Math.floor(i[1]),l=i[1]-s,u=n.evalxy([],a,s,o,l);return r.yLabel=u[1].toFixed(3),r}},22931:function(t,e,r){\"use strict\";var n=r(33720),i=r(71828).fillText;t.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,u=t.xa._length,c=u*l/2,f=u-c;return s.x0=Math.max(Math.min(s.x0,f),c),s.x1=Math.max(Math.min(s.x1,f),c),o}var h=s.cd[s.index];s.a=h.a,s.b=h.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,v=p._module.formatLabels(h,p);s.yLabel=v.yLabel,delete s.text;var g=[];if(!p.hovertemplate){var y=(h.hi||p.hoverinfo).split(\"+\");-1!==y.indexOf(\"all\")&&(y=[\"a\",\"b\",\"text\"]),-1!==y.indexOf(\"a\")&&m(d.aaxis,h.a),-1!==y.indexOf(\"b\")&&m(d.baxis,h.b),g.push(\"y: \"+s.yLabel),-1!==y.indexOf(\"text\")&&i(h,p,g),s.extraText=g.join(\"<br>\")}return o}function m(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,\"\"):t._hovertitle,g.push(r+\": \"+e.toFixed(3)+t.labelsuffix)}}},46858:function(t,e,r){\"use strict\";t.exports={attributes:r(97001),supplyDefaults:r(98965),colorbar:r(4898),formatLabels:r(48953),calc:r(34618),plot:r(1913),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(22931),selectPoints:r(98002),eventData:r(16165),moduleType:\"trace\",name:\"scattercarpet\",basePlotModule:r(93612),categories:[\"svg\",\"carpet\",\"symbols\",\"showLegend\",\"carpetDependent\",\"zoomScale\"],meta:{}}},1913:function(t,e,r){\"use strict\";var n=r(32663),i=r(89298),a=r(91424);t.exports=function(t,e,r,o){var s,l,u,c=r[0][0].carpet,f=i.getFromId(t,c.xaxis||\"x\"),h=i.getFromId(t,c.yaxis||\"y\"),p={xaxis:f,yaxis:h,plot:e.plot};for(s=0;s<r.length;s++)(l=r[s][0].trace)._xA=f,l._yA=h;for(n(t,p,r,o),s=0;s<r.length;s++)l=r[s][0].trace,u=o.selectAll(\"g.trace\"+l.uid+\" .js-line\"),a.setClipUrl(u,r[s][0].carpet._clipPathId,t)}},19316:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=r(30962).overrideAll,f=a.marker,h=a.line,p=f.line;t.exports=c({lon:{valType:\"data_array\"},lat:{valType:\"data_array\"},locations:{valType:\"data_array\"},locationmode:{valType:\"enumerated\",values:[\"ISO-3\",\"USA-states\",\"country names\",\"geojson-id\"],dflt:\"ISO-3\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:{valType:\"string\",editType:\"calc\",dflt:\"id\"},mode:u({},a.mode,{dflt:\"markers\"}),text:u({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"location\",\"text\"]}),hovertext:u({},a.hovertext,{}),textfont:a.textfont,textposition:a.textposition,line:{color:h.color,width:h.width,dash:l},connectgaps:a.connectgaps,marker:u({symbol:f.symbol,opacity:f.opacity,angle:f.angle,angleref:u({},f.angleref,{values:[\"previous\",\"up\",\"north\"]}),standoff:f.standoff,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,colorbar:f.colorbar,line:u({width:p.width},s(\"marker.line\")),gradient:f.gradient},s(\"marker\")),fill:{valType:\"enumerated\",values:[\"none\",\"toself\"],dflt:\"none\"},fillcolor:a.fillcolor,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:[\"lon\",\"lat\",\"location\",\"text\",\"name\"]}),hovertemplate:n()},\"calc\",\"nested\")},84622:function(t,e,r){\"use strict\";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(71828)._;function u(t){return t&&\"string\"==typeof t}t.exports=function(t,e){var r,c=Array.isArray(e.locations),f=c?e.locations.length:e._length,h=new Array(f);r=e.geojson?function(t){return u(t)||n(t)}:u;for(var p=0;p<f;p++){var d=h[p]={};if(c){var v=e.locations[p];d.loc=r(v)?v:null}else{var g=e.lon[p],y=e.lat[p];n(g)&&n(y)?d.lonlat=[+g,+y]:d.lonlat=[i,i]}}return o(h,e),a(t,e),s(h,e),f&&(h[0].t={labels:{lat:l(t,\"lat:\")+\" \",lon:l(t,\"lon:\")+\" \"}}),h}},10659:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(19316);t.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}var h,p=f(\"locations\");if(p&&p.length){var d,v=f(\"geojson\");(\"string\"==typeof v&&\"\"!==v||n.isPlainObject(v))&&(d=\"geojson-id\"),\"geojson-id\"===f(\"locationmode\",d)&&f(\"featureidkey\"),h=p.length}else{var g=f(\"lon\")||[],y=f(\"lat\")||[];h=Math.min(g.length,y.length)}h?(e._length=h,f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"mode\"),i.hasLines(e)&&(o(t,e,r,c,f),f(\"connectgaps\")),i.hasMarkers(e)&&a(t,e,r,c,f,{gradient:!0}),i.hasText(e)&&(f(\"texttemplate\"),s(t,e,c,f)),f(\"fill\"),\"none\"!==e.fill&&l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)):e.visible=!1}},84084:function(t){\"use strict\";t.exports=function(t,e,r,n,i){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var a=n[i];return a.fIn&&a.fIn.properties&&(t.properties=a.fIn.properties),t}},82719:function(t,e,r){\"use strict\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.geo]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},14977:function(t,e,r){\"use strict\";var n=r(30211),i=r(50606).BADNUM,a=r(34603),o=r(71828).fillText,s=r(19316);t.exports=function(t,e,r){var l=t.cd,u=l[0].trace,c=t.xa,f=t.ya,h=t.subplot,p=h.projection.isLonLatOverEdges,d=h.project;if(n.getClosest(l,(function(t){var n=t.lonlat;if(n[0]===i)return 1/0;if(p(n))return 1/0;var a=d(n),o=d([e,r]),s=Math.abs(a[0]-o[0]),l=Math.abs(a[1]-o[1]),u=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-u,1-3/u)}),t),!1!==t.index){var v=l[t.index],g=v.lonlat,y=[c.c2p(g),f.c2p(g)],m=v.mrc||1;t.x0=y[0]-m,t.x1=y[0]+m,t.y0=y[1]-m,t.y1=y[1]+m,t.loc=v.loc,t.lon=g[0],t.lat=g[1];var x={};x[u.geo]={_subplot:h};var b=u._module.formatLabels(v,u,x);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=a(u,v),t.extraText=function(t,e,r,n){if(!t.hovertemplate){var i=e.hi||t.hoverinfo,a=\"all\"===i?s.hoverinfo.flags:i.split(\"+\"),l=-1!==a.indexOf(\"location\")&&Array.isArray(t.locations),u=-1!==a.indexOf(\"lon\"),c=-1!==a.indexOf(\"lat\"),f=-1!==a.indexOf(\"text\"),h=[];return l?h.push(e.loc):u&&c?h.push(\"(\"+p(r.latLabel)+\", \"+p(r.lonLabel)+\")\"):u?h.push(n.lon+p(r.lonLabel)):c&&h.push(n.lat+p(r.latLabel)),f&&o(e,t,h),h.join(\"<br>\")}function p(t){return t+\"°\"}}(u,v,t,l[0].t.labels),t.hovertemplate=u.hovertemplate,[t]}}},17988:function(t,e,r){\"use strict\";t.exports={attributes:r(19316),supplyDefaults:r(10659),colorbar:r(4898),formatLabels:r(82719),calc:r(84622),calcGeoJSON:r(89171).calcGeoJSON,plot:r(89171).plot,style:r(33095),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(14977),eventData:r(84084),selectPoints:r(20548),moduleType:\"trace\",name:\"scattergeo\",basePlotModule:r(44622),categories:[\"geo\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},89171:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(90973).getTopojsonFeatures,o=r(18214),s=r(41327),l=r(71739).findExtremes,u=r(50606).BADNUM,c=r(47761).calcMarkerSize,f=r(34098),h=r(33095);t.exports={calcGeoJSON:function(t,e){var r,n,i=t[0].trace,o=e[i.geo],f=o._subplot,h=i._length;if(Array.isArray(i.locations)){var p=i.locationmode,d=\"geojson-id\"===p?s.extractTraceFeature(t):a(i,f.topojson);for(r=0;r<h;r++){n=t[r];var v=\"geojson-id\"===p?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat=v?v.properties.ct:[u,u]}}var g,y,m={padded:!0};if(\"geojson\"===o.fitbounds&&\"geojson-id\"===i.locationmode){var x=s.computeBbox(s.getTraceGeojson(i));g=[x[0],x[2]],y=[x[1],x[3]]}else{for(g=new Array(h),y=new Array(h),r=0;r<h;r++)n=t[r],g[r]=n.lonlat[0],y[r]=n.lonlat[1];m.ppad=c(i,h)}i._extremes.lon=l(o.lonaxis._ax,g,m),i._extremes.lat=l(o.lataxis._ax,y,m)},plot:function(t,e,r){var a=e.layers.frontplot.select(\".scatterlayer\"),s=i.makeTraceGroups(a,r,\"trace scattergeo\");function l(t,e){t.lonlat[0]===u&&n.select(e).remove()}s.selectAll(\"*\").remove(),s.each((function(e){var r=n.select(this),a=e[0].trace;if(f.hasLines(a)||\"none\"!==a.fill){var s=o.calcTraceToLineCoords(e),u=\"none\"!==a.fill?o.makePolygon(s):o.makeLine(s);r.selectAll(\"path.js-line\").data([{geojson:u,trace:a}]).enter().append(\"path\").classed(\"js-line\",!0).style(\"stroke-miterlimit\",2)}f.hasMarkers(a)&&r.selectAll(\"path.point\").data(i.identity).enter().append(\"path\").classed(\"point\",!0).each((function(t){l(t,this)})),f.hasText(a)&&r.selectAll(\"g\").data(i.identity).enter().append(\"g\").append(\"text\").each((function(t){l(t,this)})),h(t,e)}))}}},20548:function(t,e,r){\"use strict\";var n=r(34098),i=r(50606).BADNUM;t.exports=function(t,e){var r,a,o,s,l,u=t.cd,c=t.xaxis,f=t.yaxis,h=[],p=u[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<u.length;l++)u[l].selected=0;else for(l=0;l<u.length;l++)(a=(r=u[l]).lonlat)[0]!==i&&(o=c.c2p(a),s=f.c2p(a),e.contains([o,s],null,l,t)?(h.push({pointNumber:l,lon:a[0],lat:a[1]}),r.selected=1):r.selected=0);return h}},33095:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(7901),o=r(16296),s=o.stylePoints,l=o.styleText;t.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style(\"opacity\",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll(\"path.js-line\").style(\"fill\",\"none\").each((function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||\"\",o.width||0),\"none\"!==r.fill&&e.call(a.fill,r.fillcolor)}))}(t,e)}},42341:function(t,e,r){\"use strict\";var n=r(9012),i=r(82196),a=r(12663).axisHoverFormat,o=r(50693),s=r(78607),l=r(1426).extendFlat,u=r(30962).overrideAll,c=r(78232).DASHES,f=i.line,h=i.marker,p=h.line,d=t.exports=u({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"]},line:{color:f.color,width:f.width,shape:{valType:\"enumerated\",values:[\"linear\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},dash:{valType:\"enumerated\",values:s(c),dflt:\"solid\"}},marker:l({},o(\"marker\"),{symbol:h.symbol,angle:h.angle,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,opacity:h.opacity,colorbar:h.colorbar,line:l({},o(\"marker.line\"),{width:p.width})}),connectgaps:i.connectgaps,fill:l({},i.fill,{dflt:\"none\"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:n.opacity},\"calc\",\"nested\");d.x.editType=d.y.editType=d.x0.editType=d.y0.editType=\"calc+clearAxisTypes\",d.hovertemplate=i.hovertemplate,d.texttemplate=i.texttemplate},72156:function(t,e,r){\"use strict\";var n=r(20794);t.exports={moduleType:\"trace\",name:\"scattergl\",basePlotModule:r(93612),categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\"],attributes:r(42341),supplyDefaults:r(47148),crossTraceDefaults:r(34936),colorbar:r(4898),formatLabels:r(68101),calc:r(45032),hoverPoints:n.hoverPoints,selectPoints:r(58147),meta:{}}},45032:function(t,e,r){\"use strict\";var n=r(88294),i=r(71828),a=r(41675),o=r(71739).findExtremes,s=r(42973),l=r(47761),u=l.calcMarkerSize,c=l.calcAxisExpansion,f=l.setFirstScatter,h=r(36922),p=r(19635),d=r(38967),v=r(50606).BADNUM,g=r(78232).TOO_MANY_POINTS;function y(t,e,r){var n=t._extremes[e._id],i=o(e,r._bnds,{padded:!0});n.min=n.min.concat(i.min),n.max=n.max.concat(i.max)}t.exports=function(t,e){var r,o=t._fullLayout,l=e._xA=a.getFromId(t,e.xaxis,\"x\"),m=e._yA=a.getFromId(t,e.yaxis,\"y\"),x=o._plots[e.xaxis+e.yaxis],b=e._length,_=b>=g,w=2*b,T={},k=l.makeCalcdata(e,\"x\"),A=m.makeCalcdata(e,\"y\"),M=s(e,l,\"x\",k),S=s(e,m,\"y\",A),E=M.vals,L=S.vals;e._x=E,e._y=L,e.xperiodalignment&&(e._origX=k,e._xStarts=M.starts,e._xEnds=M.ends),e.yperiodalignment&&(e._origY=A,e._yStarts=S.starts,e._yEnds=S.ends);var C=new Array(w),P=new Array(b);for(r=0;r<b;r++)C[2*r]=E[r]===v?NaN:E[r],C[2*r+1]=L[r]===v?NaN:L[r],P[r]=r;if(\"log\"===l.type)for(r=0;r<w;r+=2)C[r]=l.c2l(C[r]);if(\"log\"===m.type)for(r=1;r<w;r+=2)C[r]=m.c2l(C[r]);_&&\"log\"!==l.type&&\"log\"!==m.type?T.tree=n(C):T.ids=P,h(t,e);var O,I=function(t,e,r,n,a,o){var s=p.style(t,r);if(s.marker&&(s.marker.positions=n),s.line&&n.length>1&&i.extendFlat(s.line,p.linePositions(t,r,n)),s.errorX||s.errorY){var l=p.errorBarPositions(t,r,n,a,o);s.errorX&&i.extendFlat(s.errorX,l.x),s.errorY&&i.extendFlat(s.errorY,l.y)}return s.text&&(i.extendFlat(s.text,{positions:n},p.textPosition(t,r,s.text,s.marker)),i.extendFlat(s.textSel,{positions:n},p.textPosition(t,r,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:n},p.textPosition(t,r,s.text,s.markerUnsel))),s}(t,0,e,C,E,L),D=d(t,x);return f(o,e),_?I.marker&&(O=I.marker.sizeAvg||Math.max(I.marker.size,3)):O=u(e,b),c(t,e,l,m,E,L,O),I.errorX&&y(e,l,I.errorX),I.errorY&&y(e,m,I.errorY),I.fill&&!D.fill2d&&(D.fill2d=!0),I.marker&&!D.scatter2d&&(D.scatter2d=!0),I.line&&!D.line2d&&(D.line2d=!0),!I.errorX&&!I.errorY||D.error2d||(D.error2d=!0),I.text&&!D.glText&&(D.glText=!0),I.marker&&(I.marker.snap=b),D.lineOptions.push(I.line),D.errorXOptions.push(I.errorX),D.errorYOptions.push(I.errorY),D.fillOptions.push(I.fill),D.markerOptions.push(I.marker),D.markerSelectedOptions.push(I.markerSel),D.markerUnselectedOptions.push(I.markerUnsel),D.textOptions.push(I.text),D.textSelectedOptions.push(I.textSel),D.textUnselectedOptions.push(I.textUnsel),D.selectBatch.push([]),D.unselectBatch.push([]),T._scene=D,T.index=D.count,T.x=E,T.y=L,T.positions=C,D.count++,[{x:!1,y:!1,t:T,trace:e}]}},78232:function(t){\"use strict\";t.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},19635:function(t,e,r){\"use strict\";var n=r(92770),i=r(82019),a=r(25075),o=r(73972),s=r(71828),l=r(91424),u=r(41675),c=r(81697).formatColor,f=r(34098),h=r(39984),p=r(68645),d=r(78232),v=r(37822).DESELECTDIM,g={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},y=r(23469).appendArrayPointValue;function m(t,e){var r,i=t._fullLayout,a=e._length,o=e.textfont,l=e.textposition,u=Array.isArray(l)?l:[l],c=o.color,f=o.size,h=o.family,p={},d=t._context.plotGlPixelRatio,v=e.texttemplate;if(v){p.text=[];var g=i._d3locale,m=Array.isArray(v),x=m?Math.min(v.length,a):a,b=m?function(t){return v[t]}:function(){return v};for(r=0;r<x;r++){var _={i:r},w=e._module.formatLabels(_,e,i),T={};y(T,e,r);var k=e._meta||{};p.text.push(s.texttemplateString(b(r),w,g,T,_,k))}}else Array.isArray(e.text)&&e.text.length<a?p.text=e.text.slice():p.text=e.text;if(Array.isArray(p.text))for(r=p.text.length;r<a;r++)p.text[r]=\"\";for(p.opacity=e.opacity,p.font={},p.align=[],p.baseline=[],r=0;r<u.length;r++){var A=u[r].split(/\\s+/);switch(A[1]){case\"left\":p.align.push(\"right\");break;case\"right\":p.align.push(\"left\");break;default:p.align.push(A[1])}switch(A[0]){case\"top\":p.baseline.push(\"bottom\");break;case\"bottom\":p.baseline.push(\"top\");break;default:p.baseline.push(A[0])}}if(Array.isArray(c))for(p.color=new Array(a),r=0;r<a;r++)p.color[r]=c[r];else p.color=c;if(s.isArrayOrTypedArray(f)||Array.isArray(h))for(p.font=new Array(a),r=0;r<a;r++){var M=p.font[r]={};M.size=(s.isTypedArray(f)?f[r]:Array.isArray(f)?n(f[r])?f[r]:0:f)*d,M.family=Array.isArray(h)?h[r]:h}else p.font={size:f*d,family:h};return p}function x(t,e){var r,n,i=e._length,o=e.marker,l={},u=s.isArrayOrTypedArray(o.symbol),f=s.isArrayOrTypedArray(o.angle),d=s.isArrayOrTypedArray(o.color),v=s.isArrayOrTypedArray(o.line.color),g=s.isArrayOrTypedArray(o.opacity),y=s.isArrayOrTypedArray(o.size),m=s.isArrayOrTypedArray(o.line.width);if(u||(n=p.isOpenSymbol(o.symbol)),u||d||v||g||f){l.symbols=new Array(i),l.angles=new Array(i),l.colors=new Array(i),l.borderColors=new Array(i);var x=o.symbol,b=o.angle,_=c(o,o.opacity,i),w=c(o.line,o.opacity,i);if(!Array.isArray(w[0])){var T=w;for(w=Array(i),r=0;r<i;r++)w[r]=T}if(!Array.isArray(_[0])){var k=_;for(_=Array(i),r=0;r<i;r++)_[r]=k}if(!Array.isArray(x)){var A=x;for(x=Array(i),r=0;r<i;r++)x[r]=A}if(!Array.isArray(b)){var M=b;for(b=Array(i),r=0;r<i;r++)b[r]=M}for(l.symbols=x,l.angles=b,l.colors=_,l.borderColors=w,r=0;r<i;r++)u&&(n=p.isOpenSymbol(o.symbol[r])),n&&(w[r]=_[r].slice(),_[r]=_[r].slice(),_[r][3]=0);for(l.opacity=e.opacity,l.markers=new Array(i),r=0;r<i;r++)l.markers[r]=E({mx:l.symbols[r],ma:l.angles[r]},e)}else n?(l.color=a(o.color,\"uint8\"),l.color[3]=0,l.borderColor=a(o.color,\"uint8\")):(l.color=a(o.color,\"uint8\"),l.borderColor=a(o.line.color,\"uint8\")),l.opacity=e.opacity*o.opacity,l.marker=E({mx:o.symbol,ma:o.angle},e);var S,L=h(e,1);if(y||m){var C,P=l.sizes=new Array(i),O=l.borderSizes=new Array(i),I=0;if(y){for(r=0;r<i;r++)P[r]=L(o.size[r]),I+=P[r];C=I/i}else for(S=L(o.size),r=0;r<i;r++)P[r]=S;if(m)for(r=0;r<i;r++)O[r]=o.line.width[r];else for(S=o.line.width,r=0;r<i;r++)O[r]=S;l.sizeAvg=C}else l.size=L(o&&o.size||10),l.borderSizes=L(o.line.width);return l}function b(t,e,r){var n=e.marker,i={};return r?(r.marker&&r.marker.symbol?i=x(0,s.extendFlat({},n,r.marker)):r.marker&&(r.marker.size&&(i.size=r.marker.size),r.marker.color&&(i.colors=r.marker.color),void 0!==r.marker.opacity&&(i.opacity=r.marker.opacity)),i):i}function _(t,e,r){var n={};if(!r)return n;if(r.textfont){var i={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont&&s.extendFlat(i.textfont,r.textfont),n=m(t,i)}return n}function w(t,e,r){var n={capSize:2*e.width*r,lineWidth:e.thickness*r,color:e.color};return e.copy_ystyle&&(n=t.error_y),n}var T=d.SYMBOL_SDF_SIZE,k=d.SYMBOL_SIZE,A=d.SYMBOL_STROKE,M={},S=l.symbolFuncs[0](.05*k);function E(t,e){var r,n,a=t.mx;if(\"circle\"===a)return null;var o=l.symbolNumber(a),s=l.symbolFuncs[o%100],u=!!l.symbolNoDot[o%100],c=!!l.symbolNoFill[o%100],f=p.isDotSymbol(a);if(t.ma&&(a+=\"_\"+t.ma),M[a])return M[a];var h=l.getMarkerAngle(t,e);return r=f&&!u?s(1.1*k,h)+S:s(k,h),n=i(r,{w:T,h:T,viewBox:[-k,-k,k,k],stroke:c?A:-A}),M[a]=n,n||null}t.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0},i=t._context.plotGlPixelRatio;if(!0!==e.visible)return n;if(f.hasText(e)&&(n.text=m(t,e),n.textSel=_(t,e,e.selected),n.textUnsel=_(t,e,e.unselected)),f.hasMarkers(e)&&(n.marker=x(0,e),n.markerSel=b(0,e,e.selected),n.markerUnsel=b(0,e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var a=e.marker.opacity;for(n.markerUnsel.opacity=new Array(a.length),r=0;r<a.length;r++)n.markerUnsel.opacity[r]=v*a[r]}if(f.hasLines(e)){n.line={overlay:!0,thickness:e.line.width*i,color:e.line.color,opacity:e.opacity};var o=(d.DASHES[e.line.dash]||[1]).slice();for(r=0;r<o.length;++r)o[r]*=e.line.width*i;n.line.dashes=o}return e.error_x&&e.error_x.visible&&(n.errorX=w(e,e.error_x,i)),e.error_y&&e.error_y.visible&&(n.errorY=w(e,e.error_y,i)),e.fill&&\"none\"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,i,a=r.length,o=a/2;if(f.hasLines(e)&&o)if(\"hv\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i+2],r[2*i+1]));n.push(r[a-2],r[a-1])}else if(\"hvh\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var s=(r[2*i]+r[2*i+2])/2;n.push(r[2*i],r[2*i+1],s,r[2*i+1],s,r[2*i+3])}n.push(r[a-2],r[a-1])}else if(\"vhv\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var l=(r[2*i+1]+r[2*i+3])/2;n.push(r[2*i],r[2*i+1],r[2*i],l,r[2*i+2],l)}n.push(r[a-2],r[a-1])}else if(\"vh\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+3]));n.push(r[a-2],r[a-1])}else n=r;var u=!1;for(i=0;i<n.length;i++)if(isNaN(n[i])){u=!0;break}var c=u||n.length>d.TOO_MANY_POINTS||f.hasMarkers(e)?\"rect\":\"round\";if(u&&e.connectgaps){var h=n[0],p=n[1];for(i=0;i<n.length;i+=2)isNaN(n[i])||isNaN(n[i+1])?(n[i]=h,n[i+1]=p):(h=n[i],p=n[i+1])}return{join:c,positions:n}},errorBarPositions:function(t,e,r,i,a){var s=o.getComponentMethod(\"errorbars\",\"makeComputeError\"),l=u.getFromId(t,e.xaxis,\"x\"),c=u.getFromId(t,e.yaxis,\"y\"),f=r.length/2,h={};function p(t,i){var a=i._id.charAt(0),o=e[\"error_\"+a];if(o&&o.visible&&(\"linear\"===i.type||\"log\"===i.type)){for(var l=s(o),u={x:0,y:1}[a],c={x:[0,1,2,3],y:[2,3,0,1]}[a],p=new Float64Array(4*f),d=1/0,v=-1/0,g=0,y=0;g<f;g++,y+=4){var m=t[g];if(n(m)){var x=r[2*g+u],b=l(m,g),_=b[0],w=b[1];if(n(_)&&n(w)){var T=m-_,k=m+w;p[y+c[0]]=x-i.c2l(T),p[y+c[1]]=i.c2l(k)-x,p[y+c[2]]=0,p[y+c[3]]=0,d=Math.min(d,m-_),v=Math.max(v,m+w)}}}h[a]={positions:r,errors:p,_bnds:[d,v]}}}return p(i,l),p(a,c),h},textPosition:function(t,e,r,n){var i,a=e._length,o={};if(f.hasMarkers(e)){var s=r.font,l=r.align,u=r.baseline;for(o.offset=new Array(a),i=0;i<a;i++){var c=n.sizes?n.sizes[i]:n.size,h=Array.isArray(s)?s[i].size:s.size,p=Array.isArray(l)?l.length>1?l[i]:l[0]:l,d=Array.isArray(u)?u.length>1?u[i]:u[0]:u,v=g[p],y=g[d],m=c?c/.8+1:0,x=-y*m-.5*y;o.offset[i]=[v*m/h,x/h]}}return o}}},47148:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(68645),o=r(42341),s=r(47581),l=r(34098),u=r(67513),c=r(73927),f=r(49508),h=r(11058),p=r(28908),d=r(82410);t.exports=function(t,e,r,v){function g(r,i){return n.coerce(t,e,o,r,i)}var y=!!t.marker&&a.isOpenSymbol(t.marker.symbol),m=l.isBubble(t),x=u(t,e,v,g);if(x){c(t,e,v,g),g(\"xhoverformat\"),g(\"yhoverformat\");var b=x<s.PTS_LINESONLY?\"lines+markers\":\"lines\";g(\"text\"),g(\"hovertext\"),g(\"hovertemplate\"),g(\"mode\",b),l.hasLines(e)&&(g(\"connectgaps\"),h(t,e,r,v,g),g(\"line.shape\")),l.hasMarkers(e)&&(f(t,e,r,v,g,{noAngleRef:!0,noStandOff:!0}),g(\"marker.line.width\",y||m?1:0)),l.hasText(e)&&(g(\"texttemplate\"),d(t,e,v,g));var _=(e.line||{}).color,w=(e.marker||{}).color;g(\"fill\"),\"none\"!==e.fill&&p(t,e,r,g);var T=i.getComponentMethod(\"errorbars\",\"supplyDefaults\");T(t,e,_||w||r,{axis:\"y\"}),T(t,e,_||w||r,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},5345:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(37822).DESELECTDIM;t.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,u=l._scene,c=l.index,f=u.selectBatch[c],h=u.unselectBatch[c],p=u.textOptions[c],d=u.textSelectedOptions[c]||{},v=u.textUnselectedOptions[c]||{},g=n.extendFlat({},p);if(f.length||h.length){var y=d.color,m=v.color,x=p.color,b=Array.isArray(x);for(g.color=new Array(s._length),e=0;e<f.length;e++)r=f[e],g.color[r]=y||(b?x[r]:x);for(e=0;e<h.length;e++){r=h[e];var _=b?x[r]:x;g.color[r]=m||(y?_:i.addOpacity(_,a))}}u.glText[c].update(g)}}},68101:function(t,e,r){\"use strict\";var n=r(8225);t.exports=function(t,e,r){var i=t.i;return\"x\"in t||(t.x=e._x[i]),\"y\"in t||(t.y=e._y[i]),n(t,e,r)}},68645:function(t,e,r){\"use strict\";var n=r(78232);e.isOpenSymbol=function(t){return\"string\"==typeof t?n.OPEN_RE.test(t):t%200>100},e.isDotSymbol=function(t){return\"string\"==typeof t?n.DOT_RE.test(t):t>200}},20794:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(34603);function o(t,e,r,o){var s=t.xa,l=t.ya,u=t.distance,c=t.dxy,f=t.index,h={pointNumber:f,x:e[f],y:r[f]};h.tx=Array.isArray(o.text)?o.text[f]:o.text,h.htx=Array.isArray(o.hovertext)?o.hovertext[f]:o.hovertext,h.data=Array.isArray(o.customdata)?o.customdata[f]:o.customdata,h.tp=Array.isArray(o.textposition)?o.textposition[f]:o.textposition;var p=o.textfont;p&&(h.ts=i.isArrayOrTypedArray(p.size)?p.size[f]:p.size,h.tc=Array.isArray(p.color)?p.color[f]:p.color,h.tf=Array.isArray(p.family)?p.family[f]:p.family);var d=o.marker;d&&(h.ms=i.isArrayOrTypedArray(d.size)?d.size[f]:d.size,h.mo=i.isArrayOrTypedArray(d.opacity)?d.opacity[f]:d.opacity,h.mx=i.isArrayOrTypedArray(d.symbol)?d.symbol[f]:d.symbol,h.ma=i.isArrayOrTypedArray(d.angle)?d.angle[f]:d.angle,h.mc=i.isArrayOrTypedArray(d.color)?d.color[f]:d.color);var v=d&&d.line;v&&(h.mlc=Array.isArray(v.color)?v.color[f]:v.color,h.mlw=i.isArrayOrTypedArray(v.width)?v.width[f]:v.width);var g=d&&d.gradient;g&&\"none\"!==g.type&&(h.mgt=Array.isArray(g.type)?g.type[f]:g.type,h.mgc=Array.isArray(g.color)?g.color[f]:g.color);var y=s.c2p(h.x,!0),m=l.c2p(h.y,!0),x=h.mrc||1,b=o.hoverlabel;b&&(h.hbg=Array.isArray(b.bgcolor)?b.bgcolor[f]:b.bgcolor,h.hbc=Array.isArray(b.bordercolor)?b.bordercolor[f]:b.bordercolor,h.hts=i.isArrayOrTypedArray(b.font.size)?b.font.size[f]:b.font.size,h.htc=Array.isArray(b.font.color)?b.font.color[f]:b.font.color,h.htf=Array.isArray(b.font.family)?b.font.family[f]:b.font.family,h.hnl=i.isArrayOrTypedArray(b.namelength)?b.namelength[f]:b.namelength);var _=o.hoverinfo;_&&(h.hi=Array.isArray(_)?_[f]:_);var w=o.hovertemplate;w&&(h.ht=Array.isArray(w)?w[f]:w);var T={};T[t.index]=h;var k=o._origX,A=o._origY,M=i.extendFlat({},t,{color:a(o,h),x0:y-x,x1:y+x,xLabelVal:k?k[f]:h.x,y0:m-x,y1:m+x,yLabelVal:A?A[f]:h.y,cd:T,distance:u,spikeDistance:c,hovertemplate:h.ht});return h.htx?M.text=h.htx:h.tx?M.text=h.tx:o.text&&(M.text=o.text),i.fillText(h,o,M),n.getComponentMethod(\"errorbars\",\"hoverInfo\")(h,o,M),M}t.exports={hoverPoints:function(t,e,r,n){var i,a,s,l,u,c,f,h,p,d,v=t.cd,g=v[0].t,y=v[0].trace,m=t.xa,x=t.ya,b=g.x,_=g.y,w=m.c2p(e),T=x.c2p(r),k=t.distance;if(g.tree){var A=m.p2c(w-k),M=m.p2c(w+k),S=x.p2c(T-k),E=x.p2c(T+k);i=\"x\"===n?g.tree.range(Math.min(A,M),Math.min(x._rl[0],x._rl[1]),Math.max(A,M),Math.max(x._rl[0],x._rl[1])):g.tree.range(Math.min(A,M),Math.min(S,E),Math.max(A,M),Math.max(S,E))}else i=g.ids;var L=k;if(\"x\"===n){var C=!!y.xperiodalignment,P=!!y.yperiodalignment;for(c=0;c<i.length;c++){if(l=b[a=i[c]],f=Math.abs(m.c2p(l)-w),C){var O=m.c2p(y._xStarts[a]),I=m.c2p(y._xEnds[a]);f=w>=Math.min(O,I)&&w<=Math.max(O,I)?0:1/0}if(f<L){if(L=f,u=_[a],h=x.c2p(u)-T,P){var D=x.c2p(y._yStarts[a]),z=x.c2p(y._yEnds[a]);h=T>=Math.min(D,z)&&T<=Math.max(D,z)?0:1/0}d=Math.sqrt(f*f+h*h),s=i[c]}}}else for(c=i.length-1;c>-1;c--)l=b[a=i[c]],u=_[a],f=m.c2p(l)-w,h=x.c2p(u)-T,(p=Math.sqrt(f*f+h*h))<L&&(L=d=p,s=a);return t.index=s,t.distance=L,t.dxy=d,void 0===s?[t]:[o(t,b,_,y)]},calcHover:o}},68868:function(t,e,r){\"use strict\";var n=r(72156);n.plot=r(26787),t.exports=n},26787:function(t,e,r){\"use strict\";var n=r(11870),i=r(46075),a=r(3593),o=r(42505),s=r(71828),l=r(64505).selectMode,u=r(79749),c=r(34098),f=r(68687),h=r(5345).styleTextSelection,p={};function d(t,e,r,n){var i=t._size,a=t.width*n,o=t.height*n,s=i.l*n,l=i.b*n,u=i.r*n,c=i.t*n,f=i.w*n,h=i.h*n;return[s+e.domain[0]*f,l+r.domain[0]*h,a-u-(1-e.domain[1])*f,o-c-(1-r.domain[1])*h]}(t.exports=function(t,e,r){if(r.length){var v,g,y=t._fullLayout,m=e._scene,x=e.xaxis,b=e.yaxis;if(m)if(u(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"],p)){var _=m.count,w=y._glcanvas.data()[0].regl;if(f(t,e,r),m.dirty){if(!0===m.error2d&&(m.error2d=a(w)),!0===m.line2d&&(m.line2d=i(w)),!0===m.scatter2d&&(m.scatter2d=n(w)),!0===m.fill2d&&(m.fill2d=i(w)),!0===m.glText)for(m.glText=new Array(_),v=0;v<_;v++)m.glText[v]=new o(w);if(m.glText){if(_>m.glText.length){var T=_-m.glText.length;for(v=0;v<T;v++)m.glText.push(new o(w))}else if(_<m.glText.length){var k=m.glText.length-_;m.glText.splice(_,k).forEach((function(t){t.destroy()}))}for(v=0;v<_;v++)m.glText[v].update(m.textOptions[v])}if(m.line2d&&(m.line2d.update(m.lineOptions),m.lineOptions=m.lineOptions.map((function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t})),m.line2d.update(m.lineOptions)),m.error2d){var A=(m.errorXOptions||[]).concat(m.errorYOptions||[]);m.error2d.update(A)}m.scatter2d&&m.scatter2d.update(m.markerOptions),m.fillOrder=s.repeat(null,_),m.fill2d&&(m.fillOptions=m.fillOptions.map((function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var i,a,o=n[0],s=o.trace,l=o.t,u=m.lineOptions[e],c=[];s._ownfill&&c.push(e),s._nexttrace&&c.push(e+1),c.length&&(m.fillOrder[e]=c);var f,h,p=[],d=u&&u.positions||l.positions;if(\"tozeroy\"===s.fill){for(f=0;f<d.length&&isNaN(d[f+1]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h+1]);)h-=2;0!==d[f+1]&&(p=[d[f],0]),p=p.concat(d.slice(f,h+2)),0!==d[h+1]&&(p=p.concat([d[h],0]))}else if(\"tozerox\"===s.fill){for(f=0;f<d.length&&isNaN(d[f]);)f+=2;for(h=d.length-2;h>f&&isNaN(d[h]);)h-=2;0!==d[f]&&(p=[0,d[f+1]]),p=p.concat(d.slice(f,h+2)),0!==d[h]&&(p=p.concat([0,d[h+1]]))}else if(\"toself\"===s.fill||\"tonext\"===s.fill){for(p=[],i=0,t.splitNull=!0,a=0;a<d.length;a+=2)(isNaN(d[a])||isNaN(d[a+1]))&&((p=p.concat(d.slice(i,a))).push(d[i],d[i+1]),p.push(null,null),i=a+2);p=p.concat(d.slice(i)),i&&p.push(d[i],d[i+1])}else{var v=s._nexttrace;if(v){var g=m.lineOptions[e+1];if(g){var y=g.positions;if(\"tonexty\"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=v.fillcolor}}}}if(s._prevtrace&&\"tonext\"===s._prevtrace.fill){var _=m.lineOptions[e-1].positions,w=p.length/2,T=[i=w];for(a=0;a<_.length;a+=2)(isNaN(_[a])||isNaN(_[a+1]))&&(T.push(a/2+w+1),i=a+2);p=p.concat(_),t.hole=T}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}})),m.fill2d.update(m.fillOptions))}var M=y.dragmode,S=l(M),E=y.clickmode.indexOf(\"select\")>-1;for(v=0;v<_;v++){var L=r[v][0],C=L.trace,P=L.t,O=P.index,I=C._length,D=P.x,z=P.y;if(C.selectedpoints||S||E){if(S||(S=!0),C.selectedpoints){var R=m.selectBatch[O]=s.selIndices2selPoints(C),F={};for(g=0;g<R.length;g++)F[R[g]]=1;var B=[];for(g=0;g<I;g++)F[g]||B.push(g);m.unselectBatch[O]=B}var N=P.xpx=new Array(I),j=P.ypx=new Array(I);for(g=0;g<I;g++)N[g]=x.c2p(D[g]),j[g]=b.c2p(z[g])}else P.xpx=P.ypx=null}if(S){if(m.select2d||(m.select2d=n(y._glcanvas.data()[1].regl)),m.scatter2d){var U=new Array(_);for(v=0;v<_;v++)U[v]=m.selectBatch[v].length||m.unselectBatch[v].length?m.markerUnselectedOptions[v]:{};m.scatter2d.update(U)}m.select2d&&(m.select2d.update(m.markerOptions),m.select2d.update(m.markerSelectedOptions)),m.glText&&r.forEach((function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)}))}else m.scatter2d&&m.scatter2d.update(m.markerOptions);var V={viewport:d(y,x,b,t._context.plotGlPixelRatio),range:[(x._rl||x.range)[0],(b._rl||b.range)[0],(x._rl||x.range)[1],(b._rl||b.range)[1]]},H=s.repeat(V,m.count);m.fill2d&&m.fill2d.update(H),m.line2d&&m.line2d.update(H),m.error2d&&m.error2d.update(H.concat(H)),m.scatter2d&&m.scatter2d.update(H),m.select2d&&m.select2d.update(H),m.glText&&m.glText.forEach((function(t){t.update(V)}))}else m.init()}}).reglPrecompiled=p},38967:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){var r=e._scene,i={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,a,i)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var i=0;i<r.count;i++)r.glText[i].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,i=r.error2d,a=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,u=r.selectBatch,c=r.unselectBatch,f=0;f<t;f++){if(e&&r.fillOrder[f]&&e.draw(r.fillOrder[f]),a&&r.lineOptions[f]&&a.draw(f),i&&(r.errorXOptions[f]&&i.draw(f),r.errorYOptions[f]&&i.draw(f+t)),o&&r.markerOptions[f])if(c[f].length){var h=n.repeat([],r.count);h[f]=c[f],o.draw(h)}else u[f].length||o.draw(f);s[f]&&r.textOptions[f]&&s[f].render()}l&&l.draw(u),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach((function(t){t.destroy&&t.destroy()})),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,i),r}},58147:function(t,e,r){\"use strict\";var n=r(34098),i=r(5345).styleTextSelection;t.exports=function(t,e){var r=t.cd,a=t.xaxis,o=t.yaxis,s=[],l=r[0].trace,u=r[0].t,c=l._length,f=u.x,h=u.y,p=u._scene,d=u.index;if(!p)return s;var v=n.hasText(l),g=n.hasMarkers(l),y=!g&&!v;if(!0!==l.visible||y)return s;var m=[],x=[];if(!1!==e&&!e.degenerate)for(var b=0;b<c;b++)e.contains([u.xpx[b],u.ypx[b]],!1,b,t)?(m.push(b),s.push({pointNumber:b,x:a.c2d(f[b]),y:o.c2d(h[b])})):x.push(b);if(g){var _=p.scatter2d;if(m.length||x.length){if(!p.selectBatch[d].length&&!p.unselectBatch[d].length){var w=new Array(p.count);w[d]=p.markerUnselectedOptions[d],_.update.apply(_,w)}}else{var T=new Array(p.count);T[d]=p.markerOptions[d],_.update.apply(_,T)}}return p.selectBatch[d]=m,p.unselectBatch[d]=x,v&&i(r),s}},99181:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(19316),o=r(82196),s=r(23585),l=r(9012),u=r(50693),c=r(1426).extendFlat,f=r(30962).overrideAll,h=r(23585),p=a.line,d=a.marker;t.exports=f({lon:a.lon,lat:a.lat,cluster:{enabled:{valType:\"boolean\"},maxzoom:c({},h.layers.maxzoom,{}),step:{valType:\"number\",arrayOk:!0,dflt:-1,min:-1},size:{valType:\"number\",arrayOk:!0,dflt:20,min:0},color:{valType:\"color\",arrayOk:!0},opacity:c({},d.opacity,{dflt:1})},mode:c({},o.mode,{dflt:\"markers\"}),text:c({},o.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"text\"]}),hovertext:c({},o.hovertext,{}),line:{color:p.color,width:p.width},connectgaps:o.connectgaps,marker:c({symbol:{valType:\"string\",dflt:\"circle\",arrayOk:!0},angle:{valType:\"number\",dflt:\"auto\",arrayOk:!0},allowoverlap:{valType:\"boolean\",dflt:!1},opacity:d.opacity,size:d.size,sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode},u(\"marker\")),fill:a.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:\"string\"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:c({},l.hoverinfo,{flags:[\"lon\",\"lat\",\"text\",\"name\"]}),hovertemplate:n()},\"calc\",\"nested\")},15790:function(t,e,r){\"use strict\";var n=r(92770),i=r(71828),a=r(50606).BADNUM,o=r(18214),s=r(21081),l=r(91424),u=r(39984),c=r(34098),f=r(13056),h=r(23469).appendArrayPointValue,p=r(63893).NEWLINES,d=r(63893).BR_TAG_ALL;function v(t){return{type:t,geojson:o.makeBlank(),layout:{visibility:\"none\"},filter:null,paint:{}}}function g(t,e){return i.isArrayOrTypedArray(t)?e?function(e){return n(t[e])?+t[e]:0}:function(e){return t[e]}:t?function(){return t}:y}function y(){return\"\"}function m(t){return t[0]===a}function x(t,e){var r;if(i.isArrayOrTypedArray(t)&&i.isArrayOrTypedArray(e)){r=[\"step\",[\"get\",\"point_count\"],t[0]];for(var n=1;n<t.length;n++)r.push(e[n-1],t[n])}else r=t;return r}t.exports=function(t,e){var r,a=e[0].trace,b=!0===a.visible&&0!==a._length,_=\"none\"!==a.fill,w=c.hasLines(a),T=c.hasMarkers(a),k=c.hasText(a),A=T&&\"circle\"===a.marker.symbol,M=T&&\"circle\"!==a.marker.symbol,S=a.cluster&&a.cluster.enabled,E=v(\"fill\"),L=v(\"line\"),C=v(\"circle\"),P=v(\"symbol\"),O={fill:E,line:L,circle:C,symbol:P};if(!b)return O;if((_||w)&&(r=o.calcTraceToLineCoords(e)),_&&(E.geojson=o.makePolygon(r),E.layout.visibility=\"visible\",i.extendFlat(E.paint,{\"fill-color\":a.fillcolor})),w&&(L.geojson=o.makeLine(r),L.layout.visibility=\"visible\",i.extendFlat(L.paint,{\"line-width\":a.line.width,\"line-color\":a.line.color,\"line-opacity\":a.opacity})),A){var I=function(t){var e,r,a,o,c=t[0].trace,f=c.marker,h=c.selectedpoints,p=i.isArrayOrTypedArray(f.color),d=i.isArrayOrTypedArray(f.size),v=i.isArrayOrTypedArray(f.opacity);function g(t){return c.opacity*t}p&&(r=s.hasColorscale(c,\"marker\")?s.makeColorScaleFuncFromTrace(f):i.identity),d&&(a=u(c)),v&&(o=function(t){return g(n(t)?+i.constrain(t,0,1):0)});var y,x,b=[];for(e=0;e<t.length;e++){var _=t[e],w=_.lonlat;if(!m(w)){var T={};r&&(T.mcc=_.mcc=r(_.mc)),a&&(T.mrc=_.mrc=a(_.ms)),o&&(T.mo=o(_.mo)),h&&(T.selected=_.selected||0),b.push({type:\"Feature\",id:e+1,geometry:{type:\"Point\",coordinates:w},properties:T})}}if(h)for(y=l.makeSelectedPointStyleFns(c),e=0;e<b.length;e++){var k=b[e].properties;y.selectedOpacityFn&&(k.mo=g(y.selectedOpacityFn(k))),y.selectedColorFn&&(k.mcc=y.selectedColorFn(k)),y.selectedSizeFn&&(k.mrc=y.selectedSizeFn(k))}return{geojson:{type:\"FeatureCollection\",features:b},mcc:p||y&&y.selectedColorFn?{type:\"identity\",property:\"mcc\"}:f.color,mrc:d||y&&y.selectedSizeFn?{type:\"identity\",property:\"mrc\"}:(x=f.size,x/2),mo:v||y&&y.selectedOpacityFn?{type:\"identity\",property:\"mo\"}:g(f.opacity)}}(e);C.geojson=I.geojson,C.layout.visibility=\"visible\",S&&(C.filter=[\"!\",[\"has\",\"point_count\"]],O.cluster={type:\"circle\",filter:[\"has\",\"point_count\"],layout:{visibility:\"visible\"},paint:{\"circle-color\":x(a.cluster.color,a.cluster.step),\"circle-radius\":x(a.cluster.size,a.cluster.step),\"circle-opacity\":x(a.cluster.opacity,a.cluster.step)}},O.clusterCount={type:\"symbol\",filter:[\"has\",\"point_count\"],paint:{},layout:{\"text-field\":\"{point_count_abbreviated}\",\"text-font\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],\"text-size\":12}}),i.extendFlat(C.paint,{\"circle-color\":I.mcc,\"circle-radius\":I.mrc,\"circle-opacity\":I.mo})}if(A&&S&&(C.filter=[\"!\",[\"has\",\"point_count\"]]),(M||k)&&(P.geojson=function(t,e){for(var r=e._fullLayout,n=t[0].trace,a=n.marker||{},o=a.symbol,s=a.angle,l=\"circle\"!==o?g(o):y,u=\"auto\"!==s?g(s,!0):y,f=c.hasText(n)?g(n.text):y,v=[],x=0;x<t.length;x++){var b=t[x];if(!m(b.lonlat)){var _,w=n.texttemplate;if(w){var T=Array.isArray(w)?w[x]||\"\":w,k=n._module.formatLabels(b,n,r),A={};h(A,n,b.i);var M=n._meta||{};_=i.texttemplateString(T,k,r._d3locale,A,b,M)}else _=f(x);_&&(_=_.replace(p,\"\").replace(d,\"\\n\")),v.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:b.lonlat},properties:{symbol:l(x),angle:u(x),text:_}})}}return{type:\"FeatureCollection\",features:v}}(e,t),i.extendFlat(P.layout,{visibility:\"visible\",\"icon-image\":\"{symbol}-15\",\"text-field\":\"{text}\"}),M&&(i.extendFlat(P.layout,{\"icon-size\":a.marker.size/10}),\"angle\"in a.marker&&\"auto\"!==a.marker.angle&&i.extendFlat(P.layout,{\"icon-rotate\":{type:\"identity\",property:\"angle\"},\"icon-rotation-alignment\":\"map\"}),P.layout[\"icon-allow-overlap\"]=a.marker.allowoverlap,i.extendFlat(P.paint,{\"icon-opacity\":a.opacity*a.marker.opacity,\"icon-color\":a.marker.color})),k)){var D=(a.marker||{}).size,z=f(a.textposition,D);i.extendFlat(P.layout,{\"text-size\":a.textfont.size,\"text-anchor\":z.anchor,\"text-offset\":z.offset,\"text-font\":a.textfont.family.split(\", \")}),i.extendFlat(P.paint,{\"text-color\":a.textfont.color,\"text-opacity\":a.opacity})}return O}},76645:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(82410),l=r(28908),u=r(99181),c=[\"Metropolis Black Italic\",\"Metropolis Black\",\"Metropolis Bold Italic\",\"Metropolis Bold\",\"Metropolis Extra Bold Italic\",\"Metropolis Extra Bold\",\"Metropolis Extra Light Italic\",\"Metropolis Extra Light\",\"Metropolis Light Italic\",\"Metropolis Light\",\"Metropolis Medium Italic\",\"Metropolis Medium\",\"Metropolis Regular Italic\",\"Metropolis Regular\",\"Metropolis Semi Bold Italic\",\"Metropolis Semi Bold\",\"Metropolis Thin Italic\",\"Metropolis Thin\",\"Open Sans Bold Italic\",\"Open Sans Bold\",\"Open Sans Extra Bold Italic\",\"Open Sans Extra Bold\",\"Open Sans Italic\",\"Open Sans Light Italic\",\"Open Sans Light\",\"Open Sans Regular\",\"Open Sans Semibold Italic\",\"Open Sans Semibold\",\"Klokantech Noto Sans Bold\",\"Klokantech Noto Sans CJK Bold\",\"Klokantech Noto Sans CJK Regular\",\"Klokantech Noto Sans Italic\",\"Klokantech Noto Sans Regular\"];t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,u,r,i)}function p(r,i){return n.coerce2(t,e,u,r,i)}var d=function(t,e,r){var n=r(\"lon\")||[],i=r(\"lat\")||[],a=Math.min(n.length,i.length);return e._length=a,a}(0,e,h);if(d){if(h(\"text\"),h(\"texttemplate\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"mode\"),h(\"below\"),i.hasLines(e)&&(o(t,e,r,f,h,{noDash:!0}),h(\"connectgaps\")),i.hasMarkers(e)){a(t,e,r,f,h,{noLine:!0,noAngle:!0}),h(\"marker.allowoverlap\"),h(\"marker.angle\");var v=e.marker;\"circle\"!==v.symbol&&(n.isArrayOrTypedArray(v.size)&&(v.size=v.size[0]),n.isArrayOrTypedArray(v.color)&&(v.color=v.color[0]))}var g=p(\"cluster.maxzoom\"),y=p(\"cluster.step\"),m=p(\"cluster.color\",e.marker&&e.marker.color||r),x=p(\"cluster.size\"),b=p(\"cluster.opacity\");h(\"cluster.enabled\",!1!==g||!1!==y||!1!==m||!1!==x||!1!==b),i.hasText(e)&&s(t,e,f,h,{noSelect:!0,font:{family:-1!==c.indexOf(f.font.family)?f.font.family:\"Open Sans Regular\",size:f.font.size,color:f.font.color}}),h(\"fill\"),\"none\"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},53353:function(t){\"use strict\";t.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},15636:function(t,e,r){\"use strict\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot.mockAxis,o=t.lonlat;return i.lonLabel=n.tickText(a,a.c2l(o[0]),!0).text,i.latLabel=n.tickText(a,a.c2l(o[1]),!0).text,i}},28178:function(t,e,r){\"use strict\";var n=r(30211),i=r(71828),a=r(34603),o=i.fillText,s=r(50606).BADNUM,l=r(77734).traceLayerPrefix;function u(t,e,r){if(!t.hovertemplate){var n=(e.hi||t.hoverinfo).split(\"+\"),i=-1!==n.indexOf(\"all\"),a=-1!==n.indexOf(\"lon\"),s=-1!==n.indexOf(\"lat\"),l=e.lonlat,u=[];return i||a&&s?u.push(\"(\"+c(l[1])+\", \"+c(l[0])+\")\"):a?u.push(r.lon+c(l[0])):s&&u.push(r.lat+c(l[1])),(i||-1!==n.indexOf(\"text\"))&&o(e,t,u),u.join(\"<br>\")}function c(t){return t+\"°\"}}t.exports={hoverPoints:function(t,e,r){var o=t.cd,c=o[0].trace,f=t.xa,h=t.ya,p=t.subplot,d=[],v=l+c.uid+\"-circle\",g=c.cluster&&c.cluster.enabled;if(g){var y=p.map.queryRenderedFeatures(null,{layers:[v]});d=y.map((function(t){return t.id}))}var m=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),x=e-m;if(n.getClosest(o,(function(t){var e=t.lonlat;if(e[0]===s)return 1/0;if(g&&-1===d.indexOf(t.i+1))return 1/0;var n=i.modHalf(e[0],360),a=e[1],o=p.project([n,a]),l=o.x-f.c2p([x,a]),u=o.y-h.c2p([n,r]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+u*u)-c,1-3/c)}),t),!1!==t.index){var b=o[t.index],_=b.lonlat,w=[i.modHalf(_[0],360)+m,_[1]],T=f.c2p(w),k=h.c2p(w),A=b.mrc||1;t.x0=T-A,t.x1=T+A,t.y0=k-A,t.y1=k+A;var M={};M[c.subplot]={_subplot:p};var S=c._module.formatLabels(b,c,M);return t.lonLabel=S.lonLabel,t.latLabel=S.latLabel,t.color=a(c,b),t.extraText=u(c,b,o[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}},getExtraText:u}},20467:function(t,e,r){\"use strict\";t.exports={attributes:r(99181),supplyDefaults:r(76645),colorbar:r(4898),formatLabels:r(15636),calc:r(84622),plot:r(86951),hoverPoints:r(28178).hoverPoints,eventData:r(53353),selectPoints:r(86387),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:\"trace\",name:\"scattermapbox\",basePlotModule:r(50101),categories:[\"mapbox\",\"gl\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},86951:function(t,e,r){\"use strict\";var n=r(71828),i=r(15790),a=r(77734).traceLayerPrefix,o={cluster:[\"cluster\",\"clusterCount\",\"circle\"],nonCluster:[\"fill\",\"line\",\"circle\",\"symbol\"]};function s(t,e,r,n){this.type=\"scattermapbox\",this.subplot=t,this.uid=e,this.clusterEnabled=r,this.isHidden=n,this.sourceIds={fill:\"source-\"+e+\"-fill\",line:\"source-\"+e+\"-line\",circle:\"source-\"+e+\"-circle\",symbol:\"source-\"+e+\"-symbol\",cluster:\"source-\"+e+\"-circle\",clusterCount:\"source-\"+e+\"-circle\"},this.layerIds={fill:a+e+\"-fill\",line:a+e+\"-line\",circle:a+e+\"-circle\",symbol:a+e+\"-symbol\",cluster:a+e+\"-cluster\",clusterCount:a+e+\"-cluster-count\"},this.below=null}var l=s.prototype;l.addSource=function(t,e,r){var i={type:\"geojson\",data:e.geojson};r&&r.enabled&&n.extendFlat(i,{cluster:!0,clusterMaxZoom:r.maxzoom});var a=this.subplot.map.getSource(this.sourceIds[t]);a?a.setData(e.geojson):this.subplot.map.addSource(this.sourceIds[t],i)},l.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},l.addLayer=function(t,e,r){var n={type:e.type,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint};e.filter&&(n.filter=e.filter);for(var i,a=this.layerIds[t],o=this.subplot.getMapLayers(),s=0;s<o.length;s++)if(o[s].id===a){i=!0;break}i?(this.subplot.setOptions(a,\"setLayoutProperty\",n.layout),\"visible\"===n.layout.visibility&&this.subplot.setOptions(a,\"setPaintProperty\",n.paint)):this.subplot.addLayer(n,r)},l.update=function(t){var e=t[0].trace,r=this.subplot,n=r.map,a=i(r.gd,t),s=r.belowLookup[\"trace-\"+this.uid],l=!(!e.cluster||!e.cluster.enabled),u=!!this.clusterEnabled,c=this;function f(t){u?function(t){for(var e=o.cluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i])}t||n.removeSource(c.sourceIds.circle)}(t):function(t){for(var e=o.nonCluster,r=e.length-1;r>=0;r--){var i=e[r];n.removeLayer(c.layerIds[i]),t||n.removeSource(c.sourceIds[i])}}(t)}function h(t){l?function(t){t||c.addSource(\"circle\",a.circle,e.cluster);for(var r=o.cluster,n=0;n<r.length;n++){var i=r[n],l=a[i];c.addLayer(i,l,s)}}(t):function(t){for(var e=o.nonCluster,r=0;r<e.length;r++){var n=e[r],i=a[n];t||c.addSource(n,i),c.addLayer(n,i,s)}}(t)}function p(){for(var t=l?o.cluster:o.nonCluster,e=0;e<t.length;e++){var n=t[e],i=a[n];i&&(r.setOptions(c.layerIds[n],\"setLayoutProperty\",i.layout),\"visible\"===i.layout.visibility&&(\"cluster\"!==n&&c.setSourceData(n,i),r.setOptions(c.layerIds[n],\"setPaintProperty\",i.paint)))}}var d=this.isHidden,v=!0!==e.visible;v?d||f():d?v||h():u!==l?(f(),h()):this.below!==s?(f(!0),h(!0),p()):p(),this.clusterEnabled=l,this.isHidden=v,this.below=s,t[0].trace._glTrace=this},l.dispose=function(){for(var t=this.subplot.map,e=this.clusterEnabled?o.cluster:o.nonCluster,r=e.length-1;r>=0;r--){var n=e[r];t.removeLayer(this.layerIds[n]),t.removeSource(this.sourceIds[n])}},t.exports=function(t,e){var r,n,a,l=e[0].trace,u=l.cluster&&l.cluster.enabled,c=!0!==l.visible,f=new s(t,l.uid,u,c),h=i(t.gd,e),p=f.below=t.belowLookup[\"trace-\"+l.uid];if(u)for(f.addSource(\"circle\",h.circle,l.cluster),r=0;r<o.cluster.length;r++)a=h[n=o.cluster[r]],f.addLayer(n,a,p);else for(r=0;r<o.nonCluster.length;r++)a=h[n=o.nonCluster[r]],f.addSource(n,a,l.cluster),f.addLayer(n,a,p);return e[0].trace._glTrace=f,f}},86387:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(50606).BADNUM;t.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,u=[],c=o[0].trace;if(!i.hasMarkers(c))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var f=o[r],h=f.lonlat;if(h[0]!==a){var p=[n.modHalf(h[0],360),h[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(u.push({pointNumber:r,lon:h[0],lat:h[1]}),f.selected=1):f.selected=0}}return u}},81245:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,r:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},theta:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},r0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dr:{valType:\"number\",dflt:1,editType:\"calc\"},theta0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dtheta:{valType:\"number\",editType:\"calc\"},thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\",\"gradians\"],dflt:\"degrees\",editType:\"calc+clearAxisTypes\"},text:o.text,texttemplate:i({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:[\"linear\",\"spline\"]}),smoothing:l.smoothing,editType:\"calc\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\"r\",\"theta\",\"text\",\"name\"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},26442:function(t,e,r){\"use strict\";var n=r(92770),i=r(50606).BADNUM,a=r(89298),o=r(36922),s=r(75225),l=r(66279),u=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,c=e.subplot,f=r[c].radialaxis,h=r[c].angularaxis,p=f.makeCalcdata(e,\"r\"),d=h.makeCalcdata(e,\"theta\"),v=e._length,g=new Array(v),y=0;y<v;y++){var m=p[y],x=d[y],b=g[y]={};n(m)&&n(x)?(b.r=m,b.theta=x):b.r=i}var _=u(e,v);return e._extremes.x=a.findExtremes(f,p,{ppad:_}),o(t,e),s(g,e),l(g,e),g}},22184:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(81245);function h(t,e,r,n){var i,a=n(\"r\"),o=n(\"theta\");if(a)o?i=Math.min(a.length,o.length):(i=a.length,n(\"theta0\"),n(\"dtheta\"));else{if(!o)return 0;i=e.theta.length,n(\"r0\"),n(\"dr\")}return e._length=i,i}t.exports={handleRThetaDefaults:h,supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,f,r,i)}var v=h(0,e,0,d);if(v){d(\"thetaunit\"),d(\"mode\",v<c?\"lines+markers\":\"lines\"),d(\"text\"),d(\"hovertext\"),\"fills\"!==e.hoveron&&d(\"hovertemplate\"),i.hasLines(e)&&(o(t,e,r,p,d,{backoff:!0}),s(t,e,d),d(\"connectgaps\")),i.hasMarkers(e)&&a(t,e,r,p,d,{gradient:!0}),i.hasText(e)&&(d(\"texttemplate\"),l(t,e,p,d));var g=[];(i.hasMarkers(e)||i.hasText(e))&&(d(\"cliponaxis\"),d(\"marker.maxdisplayed\"),g.push(\"points\")),d(\"fill\"),\"none\"!==e.fill&&(u(t,e,r,d),i.hasLines(e)||s(t,e,d)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||g.push(\"fills\"),d(\"hoveron\",g.join(\"+\")||\"points\"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},98608:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298);t.exports=function(t,e,r){var a,o,s={},l=r[e.subplot]._subplot;l?(a=l.radialAxis,o=l.angularAxis):(a=(l=r[e.subplot]).radialaxis,o=l.angularaxis);var u=a.c2l(t.r);s.rLabel=i.tickText(a,u,!0).text;var c=\"degrees\"===o.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel=i.tickText(o,c,!0).text,s}},59150:function(t,e,r){\"use strict\";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle=\"r\",a._hovertitle=\"θ\";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.rLabel=s.rLabel,n.thetaLabel=s.thetaLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+\": \"+e)}if(!e.hovertemplate){var f=l.split(\"+\");-1!==f.indexOf(\"all\")&&(f=[\"r\",\"theta\",\"text\"]),-1!==f.indexOf(\"r\")&&c(i,n.rLabel),-1!==f.indexOf(\"theta\")&&c(a,n.thetaLabel),-1!==f.indexOf(\"text\")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join(\"<br>\")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},91271:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"scatterpolar\",basePlotModule:r(23580),categories:[\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:r(81245),supplyDefaults:r(22184).supplyDefaults,colorbar:r(4898),formatLabels:r(98608),calc:r(26442),plot:r(45162),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(59150).hoverPoints,selectPoints:r(98002),meta:{}}},45162:function(t,e,r){\"use strict\";var n=r(32663),i=r(50606).BADNUM;t.exports=function(t,e,r){for(var a=e.layers.frontplot.select(\"g.scatterlayer\"),o=e.xaxis,s=e.yaxis,l={xaxis:o,yaxis:s,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},u=e.radialAxis,c=e.angularAxis,f=0;f<r.length;f++)for(var h=r[f],p=0;p<h.length;p++){0===p&&(h[0].trace._xA=o,h[0].trace._yA=s);var d=h[p],v=d.r;if(v===i)d.x=d.y=i;else{var g=u.c2g(v),y=c.c2g(d.theta);d.x=g*Math.cos(y),d.y=g*Math.sin(y)}}n(t,l,r,a)}},53286:function(t,e,r){\"use strict\";var n=r(81245),i=r(42341),a=r(5386).si;t.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:a({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},65746:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"scatterpolargl\",basePlotModule:r(23580),categories:[\"gl\",\"regl\",\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:r(53286),supplyDefaults:r(75485),colorbar:r(4898),formatLabels:r(46255),calc:r(37499),hoverPoints:r(29347).hoverPoints,selectPoints:r(58147),meta:{}}},37499:function(t,e,r){\"use strict\";var n=r(36922),i=r(47761).calcMarkerSize,a=r(19635),o=r(89298),s=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r=t._fullLayout,l=e.subplot,u=r[l].radialaxis,c=r[l].angularaxis,f=e._r=u.makeCalcdata(e,\"r\"),h=e._theta=c.makeCalcdata(e,\"theta\"),p=e._length,d={};p<f.length&&(f=f.slice(0,p)),p<h.length&&(h=h.slice(0,p)),d.r=f,d.theta=h,n(t,e);var v,g=d.opts=a.style(t,e);return p<s?v=i(e,p):g.marker&&(v=2*(g.marker.sizeAvg||Math.max(g.marker.size,3))),e._extremes.x=o.findExtremes(u,f,{ppad:v}),[{x:!1,y:!1,t:d,trace:e}]}},75485:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(22184).handleRThetaDefaults,o=r(49508),s=r(11058),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(53286);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=a(t,e,h,p);d?(p(\"thetaunit\"),p(\"mode\",d<c?\"lines+markers\":\"lines\"),p(\"text\"),p(\"hovertext\"),\"fills\"!==e.hoveron&&p(\"hovertemplate\"),i.hasLines(e)&&(s(t,e,r,h,p),p(\"connectgaps\")),i.hasMarkers(e)&&o(t,e,r,h,p,{noAngleRef:!0,noStandOff:!0}),i.hasText(e)&&(p(\"texttemplate\"),l(t,e,h,p)),p(\"fill\"),\"none\"!==e.fill&&u(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},46255:function(t,e,r){\"use strict\";var n=r(98608);t.exports=function(t,e,r){var i=t.i;return\"r\"in t||(t.r=e._r[i]),\"theta\"in t||(t.theta=e._theta[i]),n(t,e,r)}},29347:function(t,e,r){\"use strict\";var n=r(20794),i=r(59150).makeHoverPointText;t.exports={hoverPoints:function(t,e,r,a){var o=t.cd[0].t,s=o.r,l=o.theta,u=n.hoverPoints(t,e,r,a);if(u&&!1!==u[0].index){var c=u[0];if(void 0===c.index)return u;var f=t.subplot,h=c.cd[c.index],p=c.trace;if(h.r=s[c.index],h.theta=l[c.index],f.isPtInside(h))return c.xLabelVal=void 0,c.yLabelVal=void 0,i(h,p,f,c),u}}}},21461:function(t,e,r){\"use strict\";var n=r(65746);n.plot=r(49741),t.exports=n},49741:function(t,e,r){\"use strict\";var n=r(88294),i=r(92770),a=r(26787),o=r(38967),s=r(19635),l=r(71828),u=r(78232).TOO_MANY_POINTS;t.exports=function(t,e,r){if(r.length){var c=e.radialAxis,f=e.angularAxis,h=o(t,e);return r.forEach((function(r){if(r&&r[0]&&r[0].trace){var a,o=r[0],p=o.trace,d=o.t,v=p._length,g=d.r,y=d.theta,m=d.opts,x=g.slice(),b=y.slice();for(a=0;a<g.length;a++)e.isPtInside({r:g[a],theta:y[a]})||(x[a]=NaN,b[a]=NaN);var _=new Array(2*v),w=Array(v),T=Array(v);for(a=0;a<v;a++){var k,A,M=x[a];if(i(M)){var S=c.c2g(M),E=f.c2g(b[a],p.thetaunit);k=S*Math.cos(E),A=S*Math.sin(E)}else k=A=NaN;w[a]=_[2*a]=k,T[a]=_[2*a+1]=A}d.tree=n(_),m.marker&&v>=u&&(m.marker.cluster=d.tree),m.marker&&(m.markerSel.positions=m.markerUnsel.positions=m.marker.positions=_),m.line&&_.length>1&&l.extendFlat(m.line,s.linePositions(t,p,_)),m.text&&(l.extendFlat(m.text,{positions:_},s.textPosition(t,p,m.text,m.marker)),l.extendFlat(m.textSel,{positions:_},s.textPosition(t,p,m.text,m.markerSel)),l.extendFlat(m.textUnsel,{positions:_},s.textPosition(t,p,m.text,m.markerUnsel))),m.fill&&!h.fill2d&&(h.fill2d=!0),m.marker&&!h.scatter2d&&(h.scatter2d=!0),m.line&&!h.line2d&&(h.line2d=!0),m.text&&!h.glText&&(h.glText=!0),h.lineOptions.push(m.line),h.fillOptions.push(m.fill),h.markerOptions.push(m.marker),h.markerSelectedOptions.push(m.markerSel),h.markerUnselectedOptions.push(m.markerUnsel),h.textOptions.push(m.text),h.textSelectedOptions.push(m.textSel),h.textUnselectedOptions.push(m.textUnsel),h.selectBatch.push([]),h.unselectBatch.push([]),d.x=w,d.y=T,d.rawx=w,d.rawy=T,d.r=g,d.theta=y,d.positions=_,d._scene=h,d.index=h.count,h.count++}})),a(t,e,r)}},t.exports.reglPrecompiled={}},48300:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(1426).extendFlat,o=r(82196),s=r(9012),l=o.line;t.exports={mode:o.mode,real:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},imag:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},text:o.text,texttemplate:i({editType:\"plot\"},{keys:[\"real\",\"imag\",\"text\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,backoff:l.backoff,shape:a({},l.shape,{values:[\"linear\",\"spline\"]}),smoothing:l.smoothing,editType:\"calc\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\"real\",\"imag\",\"text\",\"name\"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},30621:function(t,e,r){\"use strict\";var n=r(92770),i=r(50606).BADNUM,a=r(36922),o=r(75225),s=r(66279),l=r(47761).calcMarkerSize;t.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,c=r[u].realaxis,f=r[u].imaginaryaxis,h=c.makeCalcdata(e,\"real\"),p=f.makeCalcdata(e,\"imag\"),d=e._length,v=new Array(d),g=0;g<d;g++){var y=h[g],m=p[g],x=v[g]={};n(y)&&n(m)?(x.real=y,x.imag=m):x.real=i}return l(e,d),a(t,e),o(v,e),s(v,e),v}},65269:function(t,e,r){\"use strict\";var n=r(71828),i=r(34098),a=r(49508),o=r(11058),s=r(94039),l=r(82410),u=r(28908),c=r(47581).PTS_LINESONLY,f=r(48300);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d=function(t,e,r,n){var i,a=n(\"real\"),o=n(\"imag\");return a&&o&&(i=Math.min(a.length,o.length)),e._length=i,i}(0,e,0,p);if(d){p(\"mode\",d<c?\"lines+markers\":\"lines\"),p(\"text\"),p(\"hovertext\"),\"fills\"!==e.hoveron&&p(\"hovertemplate\"),i.hasLines(e)&&(o(t,e,r,h,p,{backoff:!0}),s(t,e,p),p(\"connectgaps\")),i.hasMarkers(e)&&a(t,e,r,h,p,{gradient:!0}),i.hasText(e)&&(p(\"texttemplate\"),l(t,e,h,p));var v=[];(i.hasMarkers(e)||i.hasText(e))&&(p(\"cliponaxis\"),p(\"marker.maxdisplayed\"),v.push(\"points\")),p(\"fill\"),\"none\"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||s(t,e,p)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||v.push(\"fills\"),p(\"hoveron\",v.join(\"+\")||\"points\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},62047:function(t,e,r){\"use strict\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.realLabel=n.tickText(a.radialAxis,t.real,!0).text,i.imagLabel=n.tickText(a.angularAxis,t.imag,!0).text,i}},11350:function(t,e,r){\"use strict\";var n=r(33720);function i(t,e,r,n){var i=r.radialAxis,a=r.angularAxis;i._hovertitle=\"real\",a._hovertitle=\"imag\";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.realLabel=s.realLabel,n.imagLabel=s.imagLabel;var l=t.hi||e.hoverinfo,u=[];function c(t,e){u.push(t._hovertitle+\": \"+e)}if(!e.hovertemplate){var f=l.split(\"+\");-1!==f.indexOf(\"all\")&&(f=[\"real\",\"imag\",\"text\"]),-1!==f.indexOf(\"real\")&&c(i,n.realLabel),-1!==f.indexOf(\"imag\")&&c(a,n.imagLabel),-1!==f.indexOf(\"text\")&&n.text&&(u.push(n.text),delete n.text),n.extraText=u.join(\"<br>\")}}t.exports={hoverPoints:function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,i(u,c,l,s),s.hovertemplate=c.hovertemplate,o}},makeHoverPointText:i}},85956:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"scattersmith\",basePlotModule:r(7504),categories:[\"smith\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:r(48300),supplyDefaults:r(65269),colorbar:r(4898),formatLabels:r(62047),calc:r(30621),plot:r(12480),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(11350).hoverPoints,selectPoints:r(98002),meta:{}}},12480:function(t,e,r){\"use strict\";var n=r(32663),i=r(50606).BADNUM,a=r(23893).smith;t.exports=function(t,e,r){for(var o=e.layers.frontplot.select(\"g.scatterlayer\"),s=e.xaxis,l=e.yaxis,u={xaxis:s,yaxis:l,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},c=0;c<r.length;c++)for(var f=r[c],h=0;h<f.length;h++){0===h&&(f[0].trace._xA=s,f[0].trace._yA=l);var p=f[h],d=p.real;if(d===i)p.x=p.y=i;else{var v=a([d,p.imag]);p.x=v[0],p.y=v[1]}}n(t,u,r,o)}},50413:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(82196),o=r(9012),s=r(50693),l=r(79952).P,u=r(1426).extendFlat,c=a.marker,f=a.line,h=c.line;t.exports={a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},c:{valType:\"data_array\",editType:\"calc\"},sum:{valType:\"number\",dflt:0,min:0,editType:\"calc\"},mode:u({},a.mode,{dflt:\"markers\"}),text:u({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"a\",\"b\",\"c\",\"text\"]}),hovertext:u({},a.hovertext,{}),line:{color:f.color,width:f.width,dash:l,backoff:f.backoff,shape:u({},f.shape,{values:[\"linear\",\"spline\"]}),smoothing:f.smoothing,editType:\"calc\"},connectgaps:a.connectgaps,cliponaxis:a.cliponaxis,fill:u({},a.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:a.fillcolor,marker:u({symbol:c.symbol,opacity:c.opacity,angle:c.angle,angleref:c.angleref,standoff:c.standoff,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:u({width:h.width,editType:\"calc\"},s(\"marker.line\")),gradient:c.gradient,editType:\"calc\"},s(\"marker\")),textfont:a.textfont,textposition:a.textposition,selected:a.selected,unselected:a.unselected,hoverinfo:u({},o.hoverinfo,{flags:[\"a\",\"b\",\"c\",\"text\",\"name\"]}),hoveron:a.hoveron,hovertemplate:n()}},54337:function(t,e,r){\"use strict\";var n=r(92770),i=r(36922),a=r(75225),o=r(66279),s=r(47761).calcMarkerSize,l=[\"a\",\"b\",\"c\"],u={a:[\"b\",\"c\"],b:[\"a\",\"c\"],c:[\"a\",\"b\"]};t.exports=function(t,e){var r,c,f,h,p,d,v=t._fullLayout[e.subplot].sum,g=e.sum||v,y={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!y[f=l[r]]){for(p=y[u[f][0]],d=y[u[f][1]],h=new Array(p.length),c=0;c<p.length;c++)h[c]=g-p[c]-d[c];y[f]=h}var m,x,b,_,w,T,k=e._length,A=new Array(k);for(r=0;r<k;r++)m=y.a[r],x=y.b[r],b=y.c[r],n(m)&&n(x)&&n(b)?(1!=(_=v/((m=+m)+(x=+x)+(b=+b)))&&(m*=_,x*=_,b*=_),T=m,w=b-x,A[r]={x:w,y:T,a:m,b:x,c:b}):A[r]={x:!1,y:!1};return s(e,k),i(t,e),a(A,e),o(A,e),A}},46008:function(t,e,r){\"use strict\";var n=r(71828),i=r(47581),a=r(34098),o=r(49508),s=r(11058),l=r(94039),u=r(82410),c=r(28908),f=r(50413);t.exports=function(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d,v=p(\"a\"),g=p(\"b\"),y=p(\"c\");if(v?(d=v.length,g?(d=Math.min(d,g.length),y&&(d=Math.min(d,y.length))):d=y?Math.min(d,y.length):0):g&&y&&(d=Math.min(g.length,y.length)),d){e._length=d,p(\"sum\"),p(\"text\"),p(\"hovertext\"),\"fills\"!==e.hoveron&&p(\"hovertemplate\"),p(\"mode\",d<i.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)&&(s(t,e,r,h,p,{backoff:!0}),l(t,e,p),p(\"connectgaps\")),a.hasMarkers(e)&&o(t,e,r,h,p,{gradient:!0}),a.hasText(e)&&(p(\"texttemplate\"),u(t,e,h,p));var m=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\"cliponaxis\"),p(\"marker.maxdisplayed\"),m.push(\"points\")),p(\"fill\"),\"none\"!==e.fill&&(c(t,e,r,p),a.hasLines(e)||l(t,e,p)),\"tonext\"!==e.fill&&\"toself\"!==e.fill||m.push(\"fills\"),p(\"hoveron\",m.join(\"+\")||\"points\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},4524:function(t){\"use strict\";t.exports=function(t,e,r,n,i){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[i]){var a=n[i];t.a=a.a,t.b=a.b,t.c=a.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},93645:function(t,e,r){\"use strict\";var n=r(89298);t.exports=function(t,e,r){var i={},a=r[e.subplot]._subplot;return i.aLabel=n.tickText(a.aaxis,t.a,!0).text,i.bLabel=n.tickText(a.baxis,t.b,!0).text,i.cLabel=n.tickText(a.caxis,t.c,!0).text,i}},47250:function(t,e,r){\"use strict\";var n=r(33720);t.exports=function(t,e,r,i){var a=n(t,e,r,i);if(a&&!1!==a[0].index){var o=a[0];if(void 0===o.index){var s=1-o.y0/t.ya._length,l=t.xa._length,u=l*s/2,c=l-u;return o.x0=Math.max(Math.min(o.x0,c),u),o.x1=Math.max(Math.min(o.x1,c),u),a}var f=o.cd[o.index],h=o.trace,p=o.subplot;o.a=f.a,o.b=f.b,o.c=f.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var d={};d[h.subplot]={_subplot:p};var v=h._module.formatLabels(f,h,d);o.aLabel=v.aLabel,o.bLabel=v.bLabel,o.cLabel=v.cLabel;var g=f.hi||h.hoverinfo,y=[];if(!h.hovertemplate){var m=g.split(\"+\");-1!==m.indexOf(\"all\")&&(m=[\"a\",\"b\",\"c\"]),-1!==m.indexOf(\"a\")&&x(p.aaxis,o.aLabel),-1!==m.indexOf(\"b\")&&x(p.baxis,o.bLabel),-1!==m.indexOf(\"c\")&&x(p.caxis,o.cLabel)}return o.extraText=y.join(\"<br>\"),o.hovertemplate=h.hovertemplate,a}function x(t,e){y.push(t._hovertitle+\": \"+e)}}},52979:function(t,e,r){\"use strict\";t.exports={attributes:r(50413),supplyDefaults:r(46008),colorbar:r(4898),formatLabels:r(93645),calc:r(54337),plot:r(7507),style:r(16296).style,styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(47250),selectPoints:r(98002),eventData:r(4524),moduleType:\"trace\",name:\"scatterternary\",basePlotModule:r(61639),categories:[\"ternary\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},7507:function(t,e,r){\"use strict\";var n=r(32663);t.exports=function(t,e,r){var i=e.plotContainer;i.select(\".scatterlayer\").selectAll(\"*\").remove();for(var a=e.xaxis,o=e.yaxis,s={xaxis:a,yaxis:o,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},l=e.layers.frontplot.select(\"g.scatterlayer\"),u=0;u<r.length;u++){var c=r[u];c.length&&(c[0].trace._xA=a,c[0].trace._yA=o)}n(t,s,r,l)}},46880:function(t,e,r){\"use strict\";var n=r(82196),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(42341),l=r(85555).idRegex,u=r(44467).templatedArray,c=r(1426).extendFlat,f=n.marker,h=f.line,p=c(i(\"marker.line\",{editTypeOverride:\"calc\"}),{width:c({},h.width,{editType:\"calc\"}),editType:\"calc\"}),d=c(i(\"marker\"),{symbol:f.symbol,angle:f.angle,size:c({},f.size,{editType:\"markerSize\"}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:p,editType:\"calc\"});function v(t){return{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"subplotid\",regex:l[t],editType:\"plot\"}}}d.color.editType=d.cmin.editType=d.cmax.editType=\"style\",t.exports={dimensions:u(\"dimension\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},label:{valType:\"string\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},axis:{type:{valType:\"enumerated\",values:[\"linear\",\"log\",\"date\",\"category\"],editType:\"calc+clearAxisTypes\"},matches:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc+clearAxisTypes\"},editType:\"calc+clearAxisTypes\"}),text:c({},s.text,{}),hovertext:c({},s.hovertext,{}),hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),marker:d,xaxes:v(\"x\"),yaxes:v(\"y\"),diagonal:{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},showupperhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},showlowerhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},selected:{marker:s.selected.marker,editType:\"calc\"},unselected:{marker:s.unselected.marker,editType:\"calc\"},opacity:s.opacity}},65017:function(t,e,r){\"use strict\";var n=r(73972),i=r(83312);t.exports={moduleType:\"trace\",name:\"splom\",categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:r(46880),supplyDefaults:r(25784),colorbar:r(4898),calc:r(87625),plot:r(79410),hoverPoints:r(8567).hoverPoints,selectPoints:r(8689),editStyle:r(28801),meta:{}},n.register(i)},16947:function(t,e,r){\"use strict\";var n=r(46075),i=r(73972),a=r(79749),o=r(27659).a0,s=r(93612),l=r(41675).getFromId,u=r(89298).shouldShowZeroLine,c=\"splom\",f={};function h(t,e,r){for(var n=r.matrixOptions.data.length,i=e._visibleDims,a=r.viewOpts.ranges=new Array(n),o=0;o<i.length;o++){var s=i[o],u=a[o]=new Array(4),c=l(t,e._diag[s][0]);c&&(u[0]=c.r2l(c.range[0]),u[2]=c.r2l(c.range[1]));var f=l(t,e._diag[s][1]);f&&(u[1]=f.r2l(f.range[0]),u[3]=f.r2l(f.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:a},{ranges:a}):r.matrix.update({ranges:a})}function p(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,i=e._splomGrid;i||(i=e._splomGrid=n(r)),i.update(function(t){var e,r=t._context.plotGlPixelRatio,n=t._fullLayout,i=n._size,a=[0,0,n.width*r,n.height*r],o={};function s(t,e,n,i,s,l){n*=r,i*=r,s*=r,l*=r;var u=e[t+\"color\"],c=e[t+\"width\"],f=String(u+c);f in o?o[f].data.push(NaN,NaN,n,i,s,l):o[f]={data:[n,i,s,l],join:\"rect\",thickness:c*r,color:u,viewport:a,range:a,overlay:!1}}for(e in n._splomSubplots){var l,c,f=n._plots[e],h=f.xaxis,p=f.yaxis,d=h._gridVals,v=p._gridVals,g=h._offset,y=h._length,m=p._length,x=i.b+p.domain[0]*i.h,b=-p._m,_=-b*p.r2l(p.range[0],p.calendar);if(h.showgrid)for(e=0;e<d.length;e++)l=g+h.l2p(d[e].x),s(\"grid\",h,l,x,l,x+m);if(p.showgrid)for(e=0;e<v.length;e++)s(\"grid\",p,g,c=x+_+b*v[e].x,g+y,c);u(t,h,p)&&(l=g+h.l2p(0),s(\"zeroline\",h,l,x,l,x+m)),u(t,p,h)&&s(\"zeroline\",p,g,c=x+_+0,g+y,c)}var w=[];for(e in o)w.push(o[e]);return w}(t))}t.exports={name:c,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=i.getModule(c),n=o(t.calcdata,r)[0];a(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"],f)&&(e._hasOnlyLargeSploms&&p(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&p(t);for(var n=0;n<e.length;n++){var i=e[n][0].trace,a=r._splomScenes[i.uid];\"splom\"===i.type&&a&&a.matrix&&h(t,i,a)}},updateGrid:p,clean:function(t,e,r,n){var i,a={};if(n._splomScenes){for(i=0;i<t.length;i++){var o=t[i];\"splom\"===o.type&&(a[o.uid]=1)}for(i=0;i<r.length;i++){var l=r[i];if(!a[l.uid]){var u=n._splomScenes[l.uid];u&&u.destroy&&u.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG,reglPrecompiled:f}},87625:function(t,e,r){\"use strict\";var n=r(71828),i=r(41675),a=r(47761).calcMarkerSize,o=r(47761).calcAxisExpansion,s=r(36922),l=r(19635).markerSelection,u=r(19635).markerStyle,c=r(10164),f=r(50606).BADNUM,h=r(78232).TOO_MANY_POINTS;t.exports=function(t,e){var r,p,d,v,g,y,m=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],T=e._visibleDims=[];function k(t,r){for(var i=t.makeCalcdata({v:r.values,vcalendar:e.calendar},\"v\"),a=0;a<i.length;a++)i[a]=i[a]===f?NaN:i[a];_.push(i),w.push(\"log\"===t.type?n.simpleMap(i,t.c2l):i)}for(r=0;r<m.length;r++)if((d=m[r]).visible){if(v=i.getFromId(t,e._diag[r][0]),g=i.getFromId(t,e._diag[r][1]),v&&g&&v.type!==g.type){n.log(\"Skipping splom dimension \"+r+\" with conflicting axis types\");continue}v?(k(v,d),g&&\"category\"===g.type&&(g._categories=v._categories.slice())):k(g,d),T.push(r)}for(s(t,e),n.extendFlat(b,u(t,e)),y=_.length*x>h?b.sizeAvg||Math.max(b.size,3):a(e,x),p=0;p<T.length;p++)d=m[r=T[p]],v=i.getFromId(t,e._diag[r][0])||{},g=i.getFromId(t,e._diag[r][1])||{},o(t,e,v,g,_[p],_[p],y);var A=c(t,e);return A.matrix||(A.matrix=!0),A.matrixOptions=b,A.selectedOptions=l(t,e,e.selected),A.unselectedOptions=l(t,e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},25784:function(t,e,r){\"use strict\";var n=r(71828),i=r(85501),a=r(46880),o=r(34098),s=r(49508),l=r(94397),u=r(68645).isOpenSymbol;function c(t,e){function r(r,i){return n.coerce(t,e,a.dimensions,r,i)}r(\"label\");var i=r(\"values\");i&&i.length?r(\"visible\"):e.visible=!1,r(\"axis.type\"),r(\"axis.matches\")}t.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,a,r,i)}var p=i(t,e,{name:\"dimensions\",handleItemDefaults:c}),d=h(\"diagonal.visible\"),v=h(\"showupperhalf\"),g=h(\"showlowerhalf\");if(l(e,p,\"values\")&&(d||v||g)){h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"xhoverformat\"),h(\"yhoverformat\"),s(t,e,r,f,h,{noAngleRef:!0,noStandOff:!0});var y=u(e.marker.symbol),m=o.isBubble(e);h(\"marker.line.width\",y||m?1:0),function(t,e,r,n){var i,a,o=e.dimensions,s=o.length,l=e.showupperhalf,u=e.showlowerhalf,c=e.diagonal.visible,f=new Array(s),h=new Array(s);for(i=0;i<s;i++){var p=i?i+1:\"\";f[i]=\"x\"+p,h[i]=\"y\"+p}var d=n(\"xaxes\",f),v=n(\"yaxes\",h),g=e._diag=new Array(s);e._xaxes={},e._yaxes={};var y=[],m=[];function x(t,n,i,a){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e[\"_\"+o+\"axes\"][t]=1,a.push(t),!(t in s)){var l=s[t]={};i&&(l.label=i.label||\"\",i.visible&&i.axis&&(i.axis.type&&(l.type=i.axis.type),i.axis.matches&&(l.matches=n)))}}}var b=!c&&!u,_=!c&&!l;for(e._axesDim={},i=0;i<s;i++){var w=o[i],T=0===i,k=i===s-1,A=T&&b||k&&_?void 0:d[i],M=T&&_||k&&b?void 0:v[i];x(A,M,w,y),x(M,A,w,m),g[i]=[A,M],e._axesDim[A]=i,e._axesDim[M]=i}for(i=0;i<y.length;i++)for(a=0;a<m.length;a++){var S=y[i]+m[a];i>a&&l||i<a&&u?r._splomSubplots[S]=1:i!==a||!c&&u&&l||(r._splomSubplots[S]=1)}(!u||!c&&l&&u)&&(r._splomGridDflt.xside=\"bottom\",r._splomGridDflt.yside=\"left\")}(0,e,f,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},28801:function(t,e,r){\"use strict\";var n=r(71828),i=r(36922),a=r(19635).markerStyle;t.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){i(t,r),n.extendFlat(o.matrixOptions,a(t,r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},35948:function(t,e){\"use strict\";e.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],i=t._visibleDims,a=0;a<i.length;a++){var o=i[a];if(t._diag[o][n]===r)return a}return!1}},8567:function(t,e,r){\"use strict\";var n=r(35948),i=r(20794).calcHover;t.exports={hoverPoints:function(t,e,r){var a=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,u=s.c2p(e),c=l.c2p(r),f=t.distance,h=n.getDimIndex(a,s),p=n.getDimIndex(a,l);if(!1===h||!1===p)return[t];for(var d,v,g=o[h],y=o[p],m=f,x=0;x<g.length;x++){var b=g[x],_=y[x],w=s.c2p(b)-u,T=l.c2p(_)-c,k=Math.sqrt(w*w+T*T);k<m&&(m=v=k,d=x)}return t.index=d,t.distance=m,t.dxy=v,void 0===d?[t]:[i(t,g,y,a)]}}},6419:function(t,e,r){\"use strict\";var n=r(65017);n.basePlotModule=r(16947),t.exports=n},79410:function(t,e,r){\"use strict\";var n=r(60487),i=r(71828),a=r(41675),o=r(64505).selectMode;function s(t,e){var r,s,l,u,c,f=t._fullLayout,h=f._size,p=e.trace,d=e.t,v=f._splomScenes[p.uid],g=v.matrixOptions,y=g.cdata,m=f._glcanvas.data()[0].regl,x=f.dragmode;if(0!==y.length){g.lower=p.showupperhalf,g.upper=p.showlowerhalf,g.diagonal=p.diagonal.visible;var b=p._visibleDims,_=y.length,w=v.viewOpts={};for(w.ranges=new Array(_),w.domains=new Array(_),c=0;c<b.length;c++){l=b[c];var T=w.ranges[c]=new Array(4),k=w.domains[c]=new Array(4);(r=a.getFromId(t,p._diag[l][0]))&&(T[0]=r._rl[0],T[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(s=a.getFromId(t,p._diag[l][1]))&&(T[1]=s._rl[0],T[3]=s._rl[1],k[1]=s.domain[0],k[3]=s.domain[1])}var A=t._context.plotGlPixelRatio,M=h.l*A,S=h.b*A,E=h.w*A,L=h.h*A;w.viewport=[M,S,E+M,L+S],!0===v.matrix&&(v.matrix=n(m));var C=f.clickmode.indexOf(\"select\")>-1,P=!0;if(o(x)||p.selectedpoints||C){var O=p._length;if(p.selectedpoints){v.selectBatch=p.selectedpoints;var I=p.selectedpoints,D={};for(l=0;l<I.length;l++)D[I[l]]=!0;var z=[];for(l=0;l<O;l++)D[l]||z.push(l);v.unselectBatch=z}var R=d.xpx=new Array(_),F=d.ypx=new Array(_);for(c=0;c<b.length;c++){if(l=b[c],r=a.getFromId(t,p._diag[l][0]))for(R[c]=new Array(O),u=0;u<O;u++)R[c][u]=r.c2p(y[c][u]);if(s=a.getFromId(t,p._diag[l][1]))for(F[c]=new Array(O),u=0;u<O;u++)F[c][u]=s.c2p(y[c][u])}if(v.selectBatch.length||v.unselectBatch.length){var B=i.extendFlat({},g,v.unselectedOptions,w),N=i.extendFlat({},g,v.selectedOptions,w);v.matrix.update(B,N),P=!1}}else d.xpx=d.ypx=null;if(P){var j=i.extendFlat({},g,w);v.matrix.update(j,null)}}}t.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)s(t,r[n][0])}},10164:function(t,e,r){\"use strict\";var n=r(71828);t.exports=function(t,e){var r=t._fullLayout,i=e.uid,a=r._splomScenes;a||(a=r._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=a[e.uid];return s||((s=a[i]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},8689:function(t,e,r){\"use strict\";var n=r(71828),i=n.pushUnique,a=r(34098),o=r(35948);t.exports=function(t,e){var r=t.cd,s=r[0].trace,l=r[0].t,u=t.scene,c=u.matrixOptions.cdata,f=t.xaxis,h=t.yaxis,p=[];if(!u)return p;var d=!a.hasMarkers(s)&&!a.hasText(s);if(!0!==s.visible||d)return p;var v=o.getDimIndex(s,f),g=o.getDimIndex(s,h);if(!1===v||!1===g)return p;var y=l.xpx[v],m=l.ypx[g],x=c[v],b=c[g],_=(t.scene.selectBatch||[]).slice(),w=[];if(!1!==e&&!e.degenerate)for(var T=0;T<x.length;T++)e.contains([y[T],m[T]],null,T,t)?(p.push({pointNumber:T,x:x[T],y:b[T]}),i(_,T)):-1!==_.indexOf(T)?i(_,T):w.push(T);var k=u.matrixOptions;return _.length||w.length?u.selectBatch.length||u.unselectBatch.length||u.matrix.update(u.unselectedOptions,n.extendFlat({},k,u.selectedOptions,u.viewOpts)):u.matrix.update(k,null),u.selectBatch=_,u.unselectBatch=w,p}},21850:function(t,e,r){\"use strict\";var n=r(50693),i=r(12663).axisHoverFormat,a=r(5386).fF,o=r(2418),s=r(9012),l=r(1426).extendFlat,u={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},starts:{x:{valType:\"data_array\",editType:\"calc\"},y:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},maxdisplayed:{valType:\"integer\",min:0,dflt:1e3,editType:\"calc\"},sizeref:{valType:\"number\",editType:\"calc\",min:0,dflt:1},text:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:a({editType:\"calc\"},{keys:[\"tubex\",\"tubey\",\"tubez\",\"tubeu\",\"tubev\",\"tubew\",\"norm\",\"divergence\"]}),uhoverformat:i(\"u\",1),vhoverformat:i(\"v\",1),whoverformat:i(\"w\",1),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),showlegend:l({},s.showlegend,{dflt:!1})};l(u,n(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"})),[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){u[t]=o[t]})),u.hoverinfo=l({},s.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"divergence\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),u.transforms=void 0,t.exports=u},88489:function(t,e,r){\"use strict\";var n=r(71828),i=r(78803);function a(t){var e,r,i,a,s,l,u,c,f,h,p,d,v=t._x,g=t._y,y=t._z,m=t._len,x=-1/0,b=1/0,_=-1/0,w=1/0,T=-1/0,k=1/0,A=\"\";for(m&&(u=v[0],f=g[0],p=y[0]),m>1&&(c=v[m-1],h=g[m-1],d=y[m-1]),e=0;e<m;e++)x=Math.max(x,v[e]),b=Math.min(b,v[e]),_=Math.max(_,g[e]),w=Math.min(w,g[e]),T=Math.max(T,y[e]),k=Math.min(k,y[e]),a||v[e]===u||(a=!0,A+=\"x\"),s||g[e]===f||(s=!0,A+=\"y\"),l||y[e]===p||(l=!0,A+=\"z\");a||(A+=\"x\"),s||(A+=\"y\"),l||(A+=\"z\");var M=o(t._x),S=o(t._y),E=o(t._z);A=(A=(A=A.replace(\"x\",(u>c?\"-\":\"+\")+\"x\")).replace(\"y\",(f>h?\"-\":\"+\")+\"y\")).replace(\"z\",(p>d?\"-\":\"+\")+\"z\");var L=function(){m=0,M=[],S=[],E=[]};(!m||m<M.length*S.length*E.length)&&L();var C=function(t){return\"x\"===t?v:\"y\"===t?g:y},P=function(t){return\"x\"===t?M:\"y\"===t?S:E},O=function(t){return t[m-1]<t[0]?-1:1},I=C(A[1]),D=C(A[3]),z=C(A[5]),R=P(A[1]).length,F=P(A[3]).length,B=P(A[5]).length,N=!1,j=function(t,e,r){return R*(F*t+e)+r},U=O(C(A[1])),V=O(C(A[3])),H=O(C(A[5]));for(e=0;e<B-1;e++){for(r=0;r<F-1;r++){for(i=0;i<R-1;i++){var q=j(e,r,i),G=j(e,r,i+1),Z=j(e,r+1,i),Y=j(e+1,r,i);if(I[q]*U<I[G]*U&&D[q]*V<D[Z]*V&&z[q]*H<z[Y]*H||(N=!0),N)break}if(N)break}if(N)break}return N&&(n.warn(\"Encountered arbitrary coordinates! Unable to input data grid.\"),L()),{xMin:b,yMin:w,zMin:k,xMax:x,yMax:_,zMax:T,Xs:M,Ys:S,Zs:E,len:m,fill:A}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),n.isTypedArray(t))return t.subarray(0,e);for(var r=[],i=0;i<e;i++)r[i]=+t[i];return r}t.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var r=a(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;var n,o,l,u=0;e.starts&&(n=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),u=Math.min(n.length,o.length,l.length)),e._startsX=n||[],e._startsY=o||[],e._startsZ=l||[];var c,f=0,h=1/0;for(c=0;c<e._len;c++){var p=e._u[c],d=e._v[c],v=e._w[c],g=Math.sqrt(p*p+d*d+v*v);f=Math.max(f,g),h=Math.min(h,g)}for(i(t,e,{vals:[h,f],containerStr:\"\",cLetter:\"c\"}),c=0;c<u;c++){var y=n[c];r.xMax=Math.max(r.xMax,y),r.xMin=Math.min(r.xMin,y);var m=o[c];r.yMax=Math.max(r.yMax,m),r.yMin=Math.min(r.yMin,m);var x=l[c];r.zMax=Math.max(r.zMax,x),r.zMin=Math.min(r.zMin,x)}e._slen=u,e._normMax=f,e._xbnds=[r.xMin,r.xMax],e._ybnds=[r.yMin,r.yMax],e._zbnds=[r.zMin,r.zMax]},filter:s,processGrid:a}},90154:function(t,e,r){\"use strict\";var n=r(9330).gl_streamtube3d,i=n.createTubeMesh,a=r(71828),o=r(81697).parseColorScale,s=r(21081).extractOpts,l=r(90060),u={xaxis:0,yaxis:1,zaxis:2};function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var f=c.prototype;function h(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,c=e._len,f={};function d(t,e){var n=r[e],o=i[u[e]];return a.simpleMap(t,(function(t){return n.d2l(t)*o}))}if(f.vectors=l(d(e._u,\"xaxis\"),d(e._v,\"yaxis\"),d(e._w,\"zaxis\"),c),!c)return{positions:[],cells:[]};var v=d(e._Xs,\"xaxis\"),g=d(e._Ys,\"yaxis\"),y=d(e._Zs,\"zaxis\");if(f.meshgrid=[v,g,y],f.gridFill=e._gridFill,e._slen)f.startingPositions=l(d(e._startsX,\"xaxis\"),d(e._startsY,\"yaxis\"),d(e._startsZ,\"zaxis\"));else{for(var m=g[0],x=h(v),b=h(y),_=new Array(x.length*b.length),w=0,T=0;T<x.length;T++)for(var k=0;k<b.length;k++)_[w++]=[x[T],m,b[k]];f.startingPositions=_}f.colormap=o(e),f.tubeSize=e.sizeref,f.maxLength=e.maxdisplayed;var A=d(e._xbnds,\"xaxis\"),M=d(e._ybnds,\"yaxis\"),S=d(e._zbnds,\"zaxis\"),E=p(v),L=p(g),C=p(y),P=[[A[0]-E[0],M[0]-L[0],S[0]-C[0]],[A[1]+E[1],M[1]+L[1],S[1]+C[1]]],O=n(f,P),I=s(e);O.vertexIntensityBounds=[I.min/e._normMax,I.max/e._normMax];var D=e.lightposition;return O.lightPosition=[D.x,D.y,D.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}f.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var i=e[n],a=r[u[n]];return i.l2c(t)/a}if(t.object===this.mesh){var i=t.data.position,a=t.data.velocity;return t.traceCoordinate=[n(i[0],\"xaxis\"),n(i[1],\"yaxis\"),n(i[2],\"zaxis\"),n(a[0],\"xaxis\"),n(a[1],\"yaxis\"),n(a[2],\"zaxis\"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},f.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new c(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},22459:function(t,e,r){\"use strict\";var n=r(71828),i=r(1586),a=r(21850);t.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\"u\"),u=s(\"v\"),c=s(\"w\"),f=s(\"x\"),h=s(\"y\"),p=s(\"z\");l&&l.length&&u&&u.length&&c&&c.length&&f&&f.length&&h&&h.length&&p&&p.length?(s(\"starts.x\"),s(\"starts.y\"),s(\"starts.z\"),s(\"maxdisplayed\"),s(\"sizeref\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"uhoverformat\"),s(\"vhoverformat\"),s(\"whoverformat\"),s(\"xhoverformat\"),s(\"yhoverformat\"),s(\"zhoverformat\"),e._length=null):e.visible=!1}},61510:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"streamtube\",basePlotModule:r(58547),categories:[\"gl3d\",\"showLegend\"],attributes:r(21850),supplyDefaults:r(22459),colorbar:{min:\"cmin\",max:\"cmax\"},calc:r(88489).calc,plot:r(90154),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},57564:function(t,e,r){\"use strict\";var n=r(9012),i=r(5386).fF,a=r(5386).si,o=r(50693),s=r(27670).Y,l=r(34e3),u=r(7055),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:{valType:\"data_array\",editType:\"calc\"},parents:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},branchvalues:{valType:\"enumerated\",values:[\"remainder\",\"total\"],dflt:\"remainder\",editType:\"calc\"},count:{valType:\"flaglist\",flags:[\"branches\",\"leaves\"],dflt:\"leaves\",editType:\"calc\"},level:{valType:\"any\",editType:\"plot\",anim:!0},maxdepth:{valType:\"integer\",editType:\"plot\",dflt:-1},marker:c({colors:{valType:\"data_array\",editType:\"calc\"},line:{color:c({},l.marker.line.color,{dflt:null}),width:c({},l.marker.line.width,{dflt:1}),editType:\"calc\"},pattern:f,editType:\"calc\"},o(\"marker\",{colorAttr:\"colors\",anim:!1})),leaf:{opacity:{valType:\"number\",editType:\"style\",min:0,max:1},editType:\"plot\"},text:l.text,textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],extras:[\"none\"],editType:\"plot\"},texttemplate:a({editType:\"plot\"},{keys:u.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:l.hovertext,hoverinfo:c({},n.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"name\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],dflt:\"label+text+value+name\"}),hovertemplate:i({},{keys:u.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:c({},l.outsidetextfont,{}),rotation:{valType:\"angle\",dflt:0,editType:\"plot\"},sort:l.sort,root:{color:{valType:\"color\",editType:\"calc\",dflt:\"rgba(0,0,0,0)\"},editType:\"calc\"},domain:s({name:\"sunburst\",trace:!0,editType:\"calc\"})}},66888:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"sunburst\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},52147:function(t,e,r){\"use strict\";var n=r(674),i=r(92770),a=r(71828),o=r(21081).makeColorScaleFuncFromTrace,s=r(32354).makePullColorFn,l=r(32354).generateExtendedColors,u=r(21081).calc,c=r(50606).ALMOST_EQUAL,f={},h={},p={};function d(t,e,r){var n=0,i=t.children;if(i){for(var a=i.length,o=0;o<a;o++)n+=d(i[o],e,r);r.branches&&n++}else r.leaves&&n++;return t.value=t.data.data.value=n,e._values||(e._values=[]),e._values[t.data.data.i]=n,n}e.calc=function(t,e){var r,l,f,h,p,v,g=t._fullLayout,y=e.ids,m=a.isArrayOrTypedArray(y),x=e.labels,b=e.parents,_=e.values,w=a.isArrayOrTypedArray(_),T=[],k={},A={},M=function(t){return t||\"number\"==typeof t},S=function(t){return!w||i(_[t])&&_[t]>=0};m?(r=Math.min(y.length,b.length),l=function(t){return M(y[t])&&S(t)},f=function(t){return String(y[t])}):(r=Math.min(x.length,b.length),l=function(t){return M(x[t])&&S(t)},f=function(t){return String(x[t])}),w&&(r=Math.min(r,_.length));for(var E=0;E<r;E++)if(l(E)){var L=f(E),C=M(b[E])?String(b[E]):\"\",P={i:E,id:L,pid:C,label:M(x[E])?String(x[E]):\"\"};w&&(P.v=+_[E]),T.push(P),p=L,k[h=C]?k[h].push(p):k[h]=[p],A[p]=1}if(k[\"\"]){if(k[\"\"].length>1){for(var O=a.randstr(),I=0;I<T.length;I++)\"\"===T[I].pid&&(T[I].pid=O);T.unshift({hasMultipleRoots:!0,id:O,pid:\"\",label:\"\"})}}else{var D,z=[];for(D in k)A[D]||z.push(D);if(1!==z.length)return a.warn([\"Multiple implied roots, cannot build\",e.type,\"hierarchy of\",e.name+\".\",\"These roots include:\",z.join(\", \")].join(\" \"));D=z[0],T.unshift({hasImpliedRoot:!0,id:D,pid:\"\",label:D})}try{v=n.stratify().id((function(t){return t.id})).parentId((function(t){return t.pid}))(T)}catch(t){return a.warn([\"Failed to build\",e.type,\"hierarchy of\",e.name+\".\",\"Error:\",t.message].join(\" \"))}var R=n.hierarchy(v),F=!1;if(w)switch(e.branchvalues){case\"remainder\":R.sum((function(t){return t.data.v}));break;case\"total\":R.each((function(t){var r=t.data.data,n=r.v;if(t.children){var i=t.children.reduce((function(t,e){return t+e.data.data.v}),0);if((r.hasImpliedRoot||r.hasMultipleRoots)&&(n=i),n<i*c)return F=!0,a.warn([\"Total value for node\",t.data.data.id,\"of\",e.name,\"is smaller than the sum of its children.\",\"\\nparent value =\",n,\"\\nchildren sum =\",i].join(\" \"))}t.value=n}))}else d(R,e,{branches:-1!==e.count.indexOf(\"branches\"),leaves:-1!==e.count.indexOf(\"leaves\")});if(!F){var B,N;e.sort&&R.sort((function(t,e){return e.value-t.value}));var j=e.marker.colors||[],U=!!j.length;return e._hasColorscale?(U||(j=w?e.values:e._values),u(t,e,{vals:j,containerStr:\"marker\",cLetter:\"c\"}),N=o(e.marker)):B=s(g[\"_\"+e.type+\"colormap\"]),R.each((function(t){var r=t.data.data;r.color=e._hasColorscale?N(j[r.i]):B(j[r.i],r.id)})),T[0].hierarchy=R,T}},e._runCrossTraceCalc=function(t,e){var r=e._fullLayout,n=e.calcdata,i=r[t+\"colorway\"],a=r[\"_\"+t+\"colormap\"];r[\"extend\"+t+\"colors\"]&&(i=l(i,\"icicle\"===t?p:\"treemap\"===t?h:f));var o,s=0;function u(t){var e=t.data.data,r=e.id;!1===e.color&&(a[r]?e.color=a[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(a[r]=e.color=i[s%i.length],s++):e.color=o)}for(var c=0;c<n.length;c++){var d=n[c][0];d.trace.type===t&&d.hierarchy&&(o=d.trace.root.color,d.hierarchy.each(u))}},e.crossTraceCalc=function(t){return e._runCrossTraceCalc(\"sunburst\",t)}},7055:function(t){\"use strict\";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"linear\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"]}},17094:function(t,e,r){\"use strict\";var n=r(71828),i=r(57564),a=r(27670).c,o=r(90769).handleText,s=r(37434).handleMarkerDefaults,l=r(21081),u=l.hasColorscale,c=l.handleDefaults;t.exports=function(t,e,r,l){function f(r,a){return n.coerce(t,e,i,r,a)}var h=f(\"labels\"),p=f(\"parents\");if(h&&h.length&&p&&p.length){var d=f(\"values\");d&&d.length?f(\"branchvalues\"):f(\"count\"),f(\"level\"),f(\"maxdepth\"),s(t,e,l,f);var v=e._hasColorscale=u(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;v&&c(t,e,l,f,{prefix:\"marker.\",cLetter:\"c\"}),f(\"leaf.opacity\",v?1:.7);var g=f(\"text\");f(\"texttemplate\"),e.texttemplate||f(\"textinfo\",Array.isArray(g)?\"text+label\":\"label\"),f(\"hovertext\"),f(\"hovertemplate\"),o(t,e,l,f,\"auto\",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),f(\"insidetextorientation\"),f(\"sort\"),f(\"rotation\"),f(\"root.color\"),a(e,l,f),e._length=null}else e.visible=!1}},43467:function(t,e,r){\"use strict\";var n=r(91424),i=r(7901);t.exports=function(t,e,r,a,o){var s=e.data.data,l=s.i,u=o||s.color;if(l>=0){e.i=s.i;var c=r.marker;c.pattern&&c.colors&&c.pattern.shape||(c.color=u,e.color=u),n.pointStyle(t,r,a,e)}else i.fill(t,u)}},83523:function(t,e,r){\"use strict\";var n=r(39898),i=r(73972),a=r(23469).appendArrayPointValue,o=r(30211),s=r(71828),l=r(11086),u=r(2791),c=r(53581).formatPieValue;function f(t,e,r){for(var n=t.data.data,i={curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o=0;o<r.length;o++){var s=r[o];s in t&&(i[s]=t[s])}return\"parentString\"in t&&!u.isHierarchyRoot(t)&&(i.parent=t.parentString),a(i,e,n.i),i}t.exports=function(t,e,r,a,h){var p=a[0],d=p.trace,v=p.hierarchy,g=\"sunburst\"===d.type,y=\"treemap\"===d.type||\"icicle\"===d.type;\"_hasHoverLabel\"in d||(d._hasHoverLabel=!1),\"_hasHoverEvent\"in d||(d._hasHoverEvent=!1),t.on(\"mouseover\",(function(i){var a=r._fullLayout;if(!r._dragging&&!1!==a.hovermode){var l,m=r._fullData[d.index],x=i.data.data,b=x.i,_=u.isHierarchyRoot(i),w=u.getParent(v,i),T=u.getValue(i),k=function(t){return s.castOption(m,b,t)},A=k(\"hovertemplate\"),M=o.castHoverinfo(m,a,b),S=a.separators;if(A||M&&\"none\"!==M&&\"skip\"!==M){var E,L;g&&(E=p.cx+i.pxmid[0]*(1-i.rInscribed),L=p.cy+i.pxmid[1]*(1-i.rInscribed)),y&&(E=i._hoverX,L=i._hoverY);var C,P={},O=[],I=[],D=function(t){return-1!==O.indexOf(t)};M&&(O=\"all\"===M?m._module.attributes.hoverinfo.flags:M.split(\"+\")),P.label=x.label,D(\"label\")&&P.label&&I.push(P.label),x.hasOwnProperty(\"v\")&&(P.value=x.v,P.valueLabel=c(P.value,S),D(\"value\")&&I.push(P.valueLabel)),P.currentPath=i.currentPath=u.getPath(i.data),D(\"current path\")&&!_&&I.push(P.currentPath);var z=[],R=function(){-1===z.indexOf(C)&&(I.push(C),z.push(C))};P.percentParent=i.percentParent=T/u.getValue(w),P.parent=i.parentString=u.getPtLabel(w),D(\"percent parent\")&&(C=u.formatPercent(P.percentParent,S)+\" of \"+P.parent,R()),P.percentEntry=i.percentEntry=T/u.getValue(e),P.entry=i.entry=u.getPtLabel(e),!D(\"percent entry\")||_||i.onPathbar||(C=u.formatPercent(P.percentEntry,S)+\" of \"+P.entry,R()),P.percentRoot=i.percentRoot=T/u.getValue(v),P.root=i.root=u.getPtLabel(v),D(\"percent root\")&&!_&&(C=u.formatPercent(P.percentRoot,S)+\" of \"+P.root,R()),P.text=k(\"hovertext\")||k(\"text\"),D(\"text\")&&(C=P.text,s.isValidTextValue(C)&&I.push(C)),l=[f(i,m,h.eventDataKeys)];var F={trace:m,y:L,_x0:i._x0,_x1:i._x1,_y0:i._y0,_y1:i._y1,text:I.join(\"<br>\"),name:A||D(\"name\")?m.name:void 0,color:k(\"hoverlabel.bgcolor\")||x.color,borderColor:k(\"hoverlabel.bordercolor\"),fontFamily:k(\"hoverlabel.font.family\"),fontSize:k(\"hoverlabel.font.size\"),fontColor:k(\"hoverlabel.font.color\"),nameLength:k(\"hoverlabel.namelength\"),textAlign:k(\"hoverlabel.align\"),hovertemplate:A,hovertemplateLabels:P,eventData:l};g&&(F.x0=E-i.rInscribed*i.rpx1,F.x1=E+i.rInscribed*i.rpx1,F.idealAlign=i.pxmid[0]<0?\"left\":\"right\"),y&&(F.x=E,F.idealAlign=E<0?\"left\":\"right\");var B=[];o.loneHover(F,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r,inOut_bbox:B}),l[0].bbox=B[0],d._hasHoverLabel=!0}if(y){var N=t.select(\"path.surface\");h.styleOne(N,i,m,r,{hovered:!0})}d._hasHoverEvent=!0,r.emit(\"plotly_hover\",{points:l||[f(i,m,h.eventDataKeys)],event:n.event})}})),t.on(\"mouseout\",(function(e){var i=r._fullLayout,a=r._fullData[d.index],s=n.select(this).datum();if(d._hasHoverEvent&&(e.originalEvent=n.event,r.emit(\"plotly_unhover\",{points:[f(s,a,h.eventDataKeys)],event:n.event}),d._hasHoverEvent=!1),d._hasHoverLabel&&(o.loneUnhover(i._hoverlayer.node()),d._hasHoverLabel=!1),y){var l=t.select(\"path.surface\");h.styleOne(l,s,a,r,{hovered:!1})}})),t.on(\"click\",(function(t){var e=r._fullLayout,a=r._fullData[d.index],s=g&&(u.isHierarchyRoot(t)||u.isLeaf(t)),c=u.getPtId(t),p=u.isEntry(t)?u.findEntryWithChild(v,c):u.findEntryWithLevel(v,c),y=u.getPtId(p),m={points:[f(t,a,h.eventDataKeys)],event:n.event};s||(m.nextLevel=y);var x=l.triggerHandler(r,\"plotly_\"+d.type+\"click\",m);if(!1!==x&&e.hovermode&&(r._hoverdata=[f(t,a,h.eventDataKeys)],o.click(r,n.event)),!s&&!1!==x&&!r._dragging&&!r._transitioning){i.call(\"_storeDirectGUIEdit\",a,e._tracePreGUI[a.uid],{level:a.level});var b={data:[{level:y}],traces:[d.index]},_={frame:{redraw:!1,duration:h.transitionTime},transition:{duration:h.transitionTime,easing:h.transitionEasing},mode:\"immediate\",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),i.call(\"animate\",r,b,_)}}))}},2791:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(6964),o=r(53581);function s(t){return t.data.data.pid}e.findEntryWithLevel=function(t,r){var n;return r&&t.eachAfter((function(t){if(e.getPtId(t)===r)return n=t.copy()})),n||t},e.findEntryWithChild=function(t,r){var n;return t.eachAfter((function(t){for(var i=t.children||[],a=0;a<i.length;a++){var o=i[a];if(e.getPtId(o)===r)return n=t.copy()}})),n||t},e.isEntry=function(t){return!t.parent},e.isLeaf=function(t){return!t.children},e.getPtId=function(t){return t.data.data.id},e.getPtLabel=function(t){return t.data.data.label},e.getValue=function(t){return t.value},e.isHierarchyRoot=function(t){return\"\"===s(t)},e.setSliceCursor=function(t,r,n){var i=n.isTransitioning;if(!i){var o=t.datum();i=n.hideOnRoot&&e.isHierarchyRoot(o)||n.hideOnLeaves&&e.isLeaf(o)}a(t,i?null:\"pointer\")},e.getInsideTextFontKey=function(t,e,r,i,a){var o=(a||{}).onPathbar?\"pathbar.textfont\":\"insidetextfont\",s=r.data.data.i;return n.castOption(e,s,o+\".\"+t)||n.castOption(e,s,\"textfont.\"+t)||i.size},e.getOutsideTextFontKey=function(t,e,r,i){var a=r.data.data.i;return n.castOption(e,a,\"outsidetextfont.\"+t)||n.castOption(e,a,\"textfont.\"+t)||i.size},e.isOutsideText=function(t,r){return!t._hasColorscale&&e.isHierarchyRoot(r)},e.determineTextFont=function(t,r,a,o){return e.isOutsideText(t,r)?function(t,r,n){return{color:e.getOutsideTextFontKey(\"color\",t,r,n),family:e.getOutsideTextFontKey(\"family\",t,r,n),size:e.getOutsideTextFontKey(\"size\",t,r,n)}}(t,r,a):function(t,r,a,o){var s=(o||{}).onPathbar,l=r.data.data,u=l.i,c=n.castOption(t,u,(s?\"pathbar.textfont\":\"insidetextfont\")+\".color\");return!c&&t._input.textfont&&(c=n.castOption(t._input,u,\"textfont.color\")),{color:c||i.contrast(l.color),family:e.getInsideTextFontKey(\"family\",t,r,a,o),size:e.getInsideTextFontKey(\"size\",t,r,a,o)}}(t,r,a,o)},e.hasTransition=function(t){return!!(t&&t.duration>0)},e.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},e.isHeader=function(t,r){return!(e.isLeaf(t)||t.depth===r._maxDepth-1)},e.getParent=function(t,r){return e.findEntryWithLevel(t,s(r))},e.listPath=function(t,r){var n=t.parent;if(!n)return[];var i=r?[n.data[r]]:[n];return e.listPath(n,r).concat(i)},e.getPath=function(t){return e.listPath(t,\"label\").join(\"/\")+\"/\"},e.formatValue=o.formatPieValue,e.formatPercent=function(t,e){var r=n.formatPercent(t,0);return\"0%\"===r&&(r=o.formatPiePercent(t,e)),r}},87619:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"sunburst\",basePlotModule:r(66888),categories:[],animatable:!0,attributes:r(57564),layoutAttributes:r(2654),supplyDefaults:r(17094),supplyLayoutDefaults:r(57034),calc:r(52147).calc,crossTraceCalc:r(52147).crossTraceCalc,plot:r(24714).plot,style:r(29969).style,colorbar:r(4898),meta:{}}},2654:function(t){\"use strict\";t.exports={sunburstcolorway:{valType:\"colorlist\",editType:\"calc\"},extendsunburstcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},57034:function(t,e,r){\"use strict\";var n=r(71828),i=r(2654);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"sunburstcolorway\",e.colorway),r(\"extendsunburstcolors\")}},24714:function(t,e,r){\"use strict\";var n=r(39898),i=r(674),a=r(81684).sX,o=r(91424),s=r(71828),l=r(63893),u=r(72597),c=u.recordMinTextSize,f=u.clearMinTextSize,h=r(14575),p=r(53581).getRotationAngle,d=h.computeTransform,v=h.transformInsideText,g=r(29969).styleOne,y=r(16688).resizeText,m=r(83523),x=r(7055),b=r(2791);function _(t,r,u,f){var h=t._context.staticPlot,y=t._fullLayout,_=!y.uniformtext.mode&&b.hasTransition(f),T=n.select(u).selectAll(\"g.slice\"),k=r[0],A=k.trace,M=k.hierarchy,S=b.findEntryWithLevel(M,A.level),E=b.getMaxDepth(A),L=y._size,C=A.domain,P=L.w*(C.x[1]-C.x[0]),O=L.h*(C.y[1]-C.y[0]),I=.5*Math.min(P,O),D=k.cx=L.l+L.w*(C.x[1]+C.x[0])/2,z=k.cy=L.t+L.h*(1-C.y[0])-O/2;if(!S)return T.remove();var R=null,F={};_&&T.each((function(t){F[b.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!R&&b.isEntry(t)&&(R=t)}));var B=function(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(S).descendants(),N=S.height+1,j=0,U=E;k.hasMultipleRoots&&b.isHierarchyRoot(S)&&(B=B.slice(1),N-=1,j=1,U+=1),B=B.filter((function(t){return t.y1<=U}));var V=p(A.rotation);V&&B.forEach((function(t){t.x0+=V,t.x1+=V}));var H=Math.min(N,E),q=function(t){return(t-j)/H*I},G=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},Z=function(t){return s.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,D,z)},Y=function(t){return D+w(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},W=function(t){return z+w(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(T=T.data(B,b.getPtId)).enter().append(\"g\").classed(\"slice\",!0),_?T.exit().transition().each((function(){var t=n.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var e=function(t){var e,r=b.getPtId(t),n=F[r],i=F[b.getPtId(S)];if(i){var o=(t.x1>i.x1?2*Math.PI:0)+V;e=t.rpx1<i.rpx1?{x0:t.x0,x1:t.x1,rpx0:0,rpx1:0}:{x0:o,x1:o,rpx0:t.rpx0,rpx1:t.rpx1}}else{var s,l=b.getPtId(t.parent);T.each((function(t){if(b.getPtId(t)===l)return s=t}));var u,c=s.children;c.forEach((function(t,e){if(b.getPtId(t)===r)return u=e}));var f=c.length,h=a(s.x0,s.x1);e={rpx0:I,rpx1:I,x0:h(u/f),x1:h((u+1)/f)}}return a(n,e)}(t);return function(t){return Z(e(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():T.exit().remove(),T.order();var X=null;if(_&&R){var J=b.getPtId(R);T.each((function(t){null===X&&b.getPtId(t)===J&&(X=t.x1)}))}var K=T;function $(t){var e=t.parent,r=F[b.getPtId(e)],n={};if(r){var i=e.children,o=i.indexOf(t),s=i.length,l=a(r.x0,r.x1);n.x0=l(o/s),n.x1=l(o/s)}else n.x0=n.x1=0;return n}_&&(K=K.transition().each(\"end\",(function(){var e=n.select(this);b.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})}))),K.each((function(i){var u=n.select(this),f=s.ensureSingle(u,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",h?\"none\":\"all\")}));i.rpx0=q(i.y0),i.rpx1=q(i.y1),i.xmid=(i.x0+i.x1)/2,i.pxmid=G(i.rpx1,i.xmid),i.midangle=-(i.xmid-Math.PI/2),i.startangle=-(i.x0-Math.PI/2),i.stopangle=-(i.x1-Math.PI/2),i.halfangle=.5*Math.min(s.angleDelta(i.x0,i.x1)||Math.PI,Math.PI),i.ring=1-i.rpx0/i.rpx1,i.rInscribed=function(t){return 0===t.rpx0&&s.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(i),_?f.transition().attrTween(\"d\",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(R)if(t.parent)if(X){var i=(t.x1>X?2*Math.PI:0)+V;e={x0:i,x1:i}}else e={rpx0:I,rpx1:I},s.extendFlat(e,$(t));else e={rpx0:0,rpx1:0};else e={x0:V,x1:V};return a(e,n)}(t);return function(t){return Z(e(t))}})):f.attr(\"d\",Z),u.call(m,S,t,r,{eventDataKeys:x.eventDataKeys,transitionTime:x.CLICK_TRANSITION_TIME,transitionEasing:x.CLICK_TRANSITION_EASING}).call(b.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),f.call(g,i,A,t);var p=s.ensureSingle(u,\"g\",\"slicetext\"),w=s.ensureSingle(p,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),T=s.ensureUniformFontSize(t,b.determineTextFont(A,i,y.font));w.text(e.formatSliceLabel(i,S,A,r,y)).classed(\"slicetext\",!0).attr(\"text-anchor\",\"middle\").call(o.font,T).call(l.convertToTspans,t);var M=o.bBox(w.node());i.transform=v(M,i,k),i.transform.targetX=Y(i),i.transform.targetY=W(i);var E=function(t,e){var r=t.transform;return d(r,e),r.fontSize=T.size,c(A.type,r,y),s.getTextTransform(r)};_?w.transition().attrTween(\"transform\",(function(t){var e=function(t){var e,r=F[b.getPtId(t)],n=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{textPosAngle:n.textPosAngle,scale:0,rotate:n.rotate,rCenter:n.rCenter,x:n.x,y:n.y}},R)if(t.parent)if(X){var i=t.x1>X?2*Math.PI:0;e.x0=e.x1=i}else s.extendFlat(e,$(t));else e.x0=e.x1=V;else e.x0=e.x1=V;var o=a(e.transform.textPosAngle,t.transform.textPosAngle),l=a(e.rpx1,t.rpx1),u=a(e.x0,t.x0),f=a(e.x1,t.x1),h=a(e.transform.scale,n.scale),p=a(e.transform.rotate,n.rotate),d=0===n.rCenter?3:0===e.transform.rCenter?1/3:1,v=a(e.transform.rCenter,n.rCenter);return function(t){var e=l(t),r=u(t),i=f(t),a=function(t){return v(Math.pow(t,d))}(t),s={pxmid:G(e,(r+i)/2),rpx1:e,transform:{textPosAngle:o(t),rCenter:a,x:n.x,y:n.y}};return c(A.type,n,y),{transform:{targetX:Y(s),targetY:W(s),scale:h(t),rotate:p(t),rCenter:a}}}}(t);return function(t){return E(e(t),M)}})):w.attr(\"transform\",E(i,M))}))}function w(t){return e=t.rpx1,r=t.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}e.plot=function(t,e,r,i){var a,o,s=t._fullLayout,l=s._sunburstlayer,u=!r,c=!s.uniformtext.mode&&b.hasTransition(r);f(\"sunburst\",s),(a=l.selectAll(\"g.trace.sunburst\").data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(\"sunburst\",!0).attr(\"stroke-linejoin\",\"round\"),a.order(),c?(i&&(o=i()),n.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){o&&o()})).each(\"interrupt\",(function(){o&&o()})).each((function(){l.selectAll(\"g.trace\").each((function(e){_(t,e,this,r)}))}))):(a.each((function(e){_(t,e,this,r)})),s.uniformtext.mode&&y(t,s._sunburstlayer.selectAll(\".trace\"),\"sunburst\")),u&&a.exit().remove()},e.formatSliceLabel=function(t,e,r,n,i){var a=r.texttemplate,o=r.textinfo;if(!(a||o&&\"none\"!==o))return\"\";var l=i.separators,u=n[0],c=t.data.data,f=u.hierarchy,h=b.isHierarchyRoot(t),p=b.getParent(f,t),d=b.getValue(t);if(!a){var v,g=o.split(\"+\"),y=function(t){return-1!==g.indexOf(t)},m=[];if(y(\"label\")&&c.label&&m.push(c.label),c.hasOwnProperty(\"v\")&&y(\"value\")&&m.push(b.formatValue(c.v,l)),!h){y(\"current path\")&&m.push(b.getPath(t.data));var x=0;y(\"percent parent\")&&x++,y(\"percent entry\")&&x++,y(\"percent root\")&&x++;var _=x>1;if(x){var w,T=function(t){v=b.formatPercent(w,l),_&&(v+=\" of \"+t),m.push(v)};y(\"percent parent\")&&!h&&(w=d/b.getValue(p),T(\"parent\")),y(\"percent entry\")&&(w=d/b.getValue(e),T(\"entry\")),y(\"percent root\")&&(w=d/b.getValue(f),T(\"root\"))}}return y(\"text\")&&(v=s.castOption(r,c.i,\"text\"),s.isValidTextValue(v)&&m.push(v)),m.join(\"<br>\")}var k=s.castOption(r,c.i,\"texttemplate\");if(!k)return\"\";var A={};c.label&&(A.label=c.label),c.hasOwnProperty(\"v\")&&(A.value=c.v,A.valueLabel=b.formatValue(c.v,l)),A.currentPath=b.getPath(t.data),h||(A.percentParent=d/b.getValue(p),A.percentParentLabel=b.formatPercent(A.percentParent,l),A.parent=b.getPtLabel(p)),A.percentEntry=d/b.getValue(e),A.percentEntryLabel=b.formatPercent(A.percentEntry,l),A.entry=b.getPtLabel(e),A.percentRoot=d/b.getValue(f),A.percentRootLabel=b.formatPercent(A.percentRoot,l),A.root=b.getPtLabel(f),c.hasOwnProperty(\"color\")&&(A.color=c.color);var M=s.castOption(r,c.i,\"text\");return(s.isValidTextValue(M)||\"\"===M)&&(A.text=M),A.customdata=s.castOption(r,c.i,\"customdata\"),s.texttemplateString(k,A,i._d3locale,A,r._meta||{})}},29969:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(71828),o=r(72597).resizeText,s=r(43467);function l(t,e,r,n){var o=e.data.data,l=!e.children,u=o.i,c=a.castOption(r,u,\"marker.line.color\")||i.defaultLine,f=a.castOption(r,u,\"marker.line.width\")||0;t.call(s,e,r,n).style(\"stroke-width\",f).call(i.stroke,c).style(\"opacity\",l?r.leaf.opacity:null)}t.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(\".trace\");o(t,e,\"sunburst\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\"opacity\",i.opacity),r.selectAll(\"path.surface\").each((function(e){n.select(this).call(l,e,i,t)}))}))},styleOne:l}},54532:function(t,e,r){\"use strict\";var n=r(7901),i=r(50693),a=r(12663).axisHoverFormat,o=r(5386).fF,s=r(9012),l=r(1426).extendFlat,u=r(30962).overrideAll;function c(t){return{show:{valType:\"boolean\",dflt:!1},start:{valType:\"number\",dflt:null,editType:\"plot\"},end:{valType:\"number\",dflt:null,editType:\"plot\"},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\"},project:{x:{valType:\"boolean\",dflt:!1},y:{valType:\"boolean\",dflt:!1},z:{valType:\"boolean\",dflt:!1}},color:{valType:\"color\",dflt:n.defaultLine},usecolormap:{valType:\"boolean\",dflt:!1},width:{valType:\"number\",min:1,max:16,dflt:2},highlight:{valType:\"boolean\",dflt:!0},highlightcolor:{valType:\"color\",dflt:n.defaultLine},highlightwidth:{valType:\"number\",min:1,max:16,dflt:2}}}var f=t.exports=u(l({z:{valType:\"data_array\"},x:{valType:\"data_array\"},y:{valType:\"data_array\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),zhoverformat:a(\"z\"),connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},surfacecolor:{valType:\"data_array\"}},i(\"\",{colorAttr:\"z or surfacecolor\",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:\"calc\"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:\"boolean\",dflt:!1},lightposition:{x:{valType:\"number\",min:-1e5,max:1e5,dflt:10},y:{valType:\"number\",min:-1e5,max:1e5,dflt:1e4},z:{valType:\"number\",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:\"number\",min:0,max:1,dflt:.8},diffuse:{valType:\"number\",min:0,max:1,dflt:.8},specular:{valType:\"number\",min:0,max:2,dflt:.05},roughness:{valType:\"number\",min:0,max:1,dflt:.5},fresnel:{valType:\"number\",min:0,max:5,dflt:.2}},opacity:{valType:\"number\",min:0,max:1,dflt:1},opacityscale:{valType:\"any\",editType:\"calc\"},_deprecated:{zauto:l({},i.zauto,{}),zmin:l({},i.zmin,{}),zmax:l({},i.zmax,{})},hoverinfo:l({},s.hoverinfo),showlegend:l({},s.showlegend,{dflt:!1})}),\"calc\",\"nested\");f.x.editType=f.y.editType=f.z.editType=\"calc+clearAxisTypes\",f.transforms=void 0},18396:function(t,e,r){\"use strict\";var n=r(78803);t.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:\"\",cLetter:\"c\"}):n(t,e,{vals:e.z,containerStr:\"\",cLetter:\"c\"})}},43768:function(t,e,r){\"use strict\";var n=r(9330).gl_surface3d,i=r(9330).ndarray,a=r(9330).ndarray_linear_interpolate.d2,o=r(824),s=r(43907),l=r(71828).isArrayOrTypedArray,u=r(81697).parseColorScale,c=r(78614),f=r(21081).extractOpts;function h(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var p=h.prototype;p.getXat=function(t,e,r,n){var i=l(this.data.x)?l(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?i:n.d2l(i,0,r)},p.getYat=function(t,e,r,n){var i=l(this.data.y)?l(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?i:n.d2l(i,0,r)},p.getZat=function(t,e,r,n){var i=this.data.z[e][t];return null===i&&this.data.connectgaps&&this.data._interpolatedZ&&(i=this.data._interpolatedZ[e][t]),void 0===r?i:n.d2l(i,0,r)},p.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),i=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,i],t.traceCoordinate=[this.getXat(n,i),this.getYat(n,i),this.getZat(n,i)],t.dataCoordinate=[this.getXat(n,i,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,i,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,i,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var a=0;a<3;a++){null!=t.dataCoordinate[a]&&(t.dataCoordinate[a]*=this.scene.dataScale[a])}var o=this.data.hovertext||this.data.text;return Array.isArray(o)&&o[i]&&void 0!==o[i][n]?t.textLabel=o[i][n]:t.textLabel=o||\"\",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var d=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function g(t){for(var e=[],r=0;r<d.length;r++){var n=d[r];e.push(v(t,n))}return e}function y(t){for(var e=g(t),r=t,n=0;n<d.length;n++)if(e[n]>0){r=d[n];break}return r}function m(t,e){if(!(t<1||e<1)){for(var r=g(t),n=g(e),i=1,a=0;a<d.length;a++)i*=Math.pow(d[a],Math.max(r[a],n[a]));return i}}p.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),i=this.getXat(e,0);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r},p.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),i=this.getYat(0,e);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r};var x=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],b=x[9],_=x[13];function w(t,e,r){var n=r[8]+r[2]*e[0]+r[5]*e[1];return t[0]=(r[6]+r[0]*e[0]+r[3]*e[1])/n,t[1]=(r[7]+r[1]*e[0]+r[4]*e[1])/n,t}function T(t,e,r){return function(t,e,r,n){for(var i=[0,0],o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++)r(i,[l,u],n),t.set(l,u,a(e,i[0],i[1]))}(t,e,w,r),t}function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}p.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=m(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<b;)r*=2;for(;r>_;)r--,r/=y(r),++r<b&&(r=_);var n=Math.round(r/t);return n>1?n:1},p.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],a=t[0].shape[1],o=0|Math.floor(t[0].shape[0]*e+1),s=0|Math.floor(t[0].shape[1]*r+1),l=1+n+1,u=1+a+1,c=i(new Float32Array(l*u),[l,u]),f=[1/e,0,0,0,1/r,0,0,0,1],h=0;h<t.length;++h){this.surface.padField(c,t[h]);var p=i(new Float32Array(o*s),[o,s]);T(p,c,f),t[h]=p}},p.setContourLevels=function(){var t,e,r,n=[[],[],[]],i=[!1,!1,!1],a=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(a=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(i[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(a){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=i[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},p.update=function(t){var e,r,n,a,l=this.scene,h=l.fullSceneLayout,p=this.surface,d=u(t),v=l.dataScale,g=t.z[0].length,y=t._ylength,m=l.contourLevels;this.data=t;var x=[];for(e=0;e<3;e++)for(x[e]=[],r=0;r<g;r++)x[e][r]=[];for(r=0;r<g;r++)for(n=0;n<y;n++)x[0][r][n]=this.getXat(r,n,t.xcalendar,h.xaxis),x[1][r][n]=this.getYat(r,n,t.ycalendar,h.yaxis),x[2][r][n]=this.getZat(r,n,t.zcalendar,h.zaxis);if(t.connectgaps)for(t._emptypoints=s(x[2]),o(x[2],t._emptypoints),t._interpolatedZ=[],r=0;r<g;r++)for(t._interpolatedZ[r]=[],n=0;n<y;n++)t._interpolatedZ[r][n]=x[2][r][n];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null==(a=x[e][r][n])?x[e][r][n]=NaN:a=x[e][r][n]*=v[e];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(this.minValues[e]>a&&(this.minValues[e]=a),this.maxValues[e]<a&&(this.maxValues[e]=a));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)null!=(a=x[e][r][n])&&(x[e][r][n]-=this.objectOffset[e]);var b=[i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y]),i(new Float32Array(g*y),[g,y])];for(e=0;e<3;e++)for(r=0;r<g;r++)for(n=0;n<y;n++)b[e].set(r,n,x[e][r][n]);x=[];var w={colormap:d,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},T=f(t);if(w.intensityBounds=[T.min,T.max],t.surfacecolor){var k=i(new Float32Array(g*y),[g,y]);for(r=0;r<g;r++)for(n=0;n<y;n++)k.set(r,n,t.surfacecolor[n][r]);b.push(k)}else w.intensityBounds[0]*=v[2],w.intensityBounds[1]*=v[2];(_<b[0].shape[0]||_<b[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(b[0].shape[0],0),this.dataScaleY=this.estimateScale(b[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(b)),t.surfacecolor&&(w.intensity=b.pop());var A=[!0,!0,!0],M=[\"x\",\"y\",\"z\"];for(e=0;e<3;++e){var S=t.contours[M[e]];A[e]=S.highlight,w.showContour[e]=S.show||S.highlight,w.showContour[e]&&(w.contourProject[e]=[S.project.x,S.project.y,S.project.z],S.show?(this.showContour[e]=!0,w.levels[e]=m[e],p.highlightColor[e]=w.contourColor[e]=c(S.color),S.usecolormap?p.highlightTint[e]=w.contourTint[e]=0:p.highlightTint[e]=w.contourTint[e]=1,w.contourWidth[e]=S.width,this.contourStart[e]=S.start,this.contourEnd[e]=S.end,this.contourSize[e]=S.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),S.highlight&&(w.dynamicColor[e]=c(S.highlightcolor),w.dynamicWidth[e]=S.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(d)&&(w.vertexColor=!0),w.objectOffset=this.objectOffset,w.coords=b,p.update(w),p.visible=t.visible,p.enableDynamic=A,p.enableHighlight=A,p.snapToData=!0,\"lighting\"in t&&(p.ambientLight=t.lighting.ambient,p.diffuseLight=t.lighting.diffuse,p.specularLight=t.lighting.specular,p.roughness=t.lighting.roughness,p.fresnel=t.lighting.fresnel),\"lightposition\"in t&&(p.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z])},p.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new h(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},91831:function(t,e,r){\"use strict\";var n=r(73972),i=r(71828),a=r(1586),o=r(54532);function s(t,e,r,n){var i=n(\"opacityscale\");\"max\"===i?e.opacityscale=[[0,.1],[1,1]]:\"min\"===i?e.opacityscale=[[0,1],[1,.1]]:\"extremes\"===i?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var i=n/31,a=.1+.9*(1-Math.pow(Math.sin(1*i*Math.PI),2));r.push([i,Math.max(0,Math.min(1,a))])}return r}():function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(i)||(e.opacityscale=void 0)}function l(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}t.exports={supplyDefaults:function(t,e,r,u){var c,f;function h(r,n){return i.coerce(t,e,o,r,n)}var p=h(\"x\"),d=h(\"y\"),v=h(\"z\");if(!v||!v.length||p&&p.length<1||d&&d.length<1)e.visible=!1;else{e._xlength=Array.isArray(p)&&i.isArrayOrTypedArray(p[0])?v.length:v[0].length,e._ylength=v.length,n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],u),h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"xhoverformat\"),h(\"yhoverformat\"),h(\"zhoverformat\"),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"hidesurface\",\"connectgaps\",\"opacity\"].forEach((function(t){h(t)}));var g=h(\"surfacecolor\"),y=[\"x\",\"y\",\"z\"];for(c=0;c<3;++c){var m=\"contours.\"+y[c],x=h(m+\".show\"),b=h(m+\".highlight\");if(x||b)for(f=0;f<3;++f)h(m+\".project.\"+y[f]);x&&(h(m+\".color\"),h(m+\".width\"),h(m+\".usecolormap\")),b&&(h(m+\".highlightcolor\"),h(m+\".highlightwidth\")),h(m+\".start\"),h(m+\".end\"),h(m+\".size\")}g||(l(t,\"zmin\",\"cmin\"),l(t,\"zmax\",\"cmax\"),l(t,\"zauto\",\"cauto\")),a(t,e,u,h,{prefix:\"\",cLetter:\"c\"}),s(0,e,0,h),e._length=null}},opacityscaleDefaults:s}},93601:function(t,e,r){\"use strict\";t.exports={attributes:r(54532),supplyDefaults:r(91831).supplyDefaults,colorbar:{min:\"cmin\",max:\"cmax\"},calc:r(18396),plot:r(43768),moduleType:\"trace\",name:\"surface\",basePlotModule:r(58547),categories:[\"gl3d\",\"2dMap\",\"showLegend\"],meta:{}}},44464:function(t,e,r){\"use strict\";var n=r(50215),i=r(1426).extendFlat,a=r(30962).overrideAll,o=r(41940),s=r(27670).Y,l=r(12663).descriptionOnlyNumbers;(t.exports=a({domain:s({name:\"table\",trace:!0}),columnwidth:{valType:\"number\",arrayOk:!0,dflt:null},columnorder:{valType:\"data_array\"},header:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[],description:l(\"cell value\")},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[],description:l(\"cell value\")},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))}},\"calc\",\"from-root\")).transforms=void 0},99469:function(t,e,r){\"use strict\";var n=r(27659).a0,i=r(36736),a=\"table\";e.name=a,e.plot=function(t){var e=n(t.calcdata,a)[0];e.length&&i(t,e)},e.clean=function(t,e,r,n){var i=n._has&&n._has(a),o=e._has&&e._has(a);i&&!o&&n._paperdiv.selectAll(\".table\").remove()}},76333:function(t,e,r){\"use strict\";var n=r(28984).wrap;t.exports=function(){return n({})}},49850:function(t){\"use strict\";t.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\\$.*\\$$/,goldenRatio:1.618,lineBreaker:\"<br>\",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:\"cubic-out\",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:\"cubic-out\",uplift:5,wrapSpacer:\" \",wrapSplitCharacter:\" \",cn:{table:\"table\",tableControlView:\"table-control-view\",scrollBackground:\"scroll-background\",yColumn:\"y-column\",columnBlock:\"column-block\",scrollAreaClip:\"scroll-area-clip\",scrollAreaClipRect:\"scroll-area-clip-rect\",columnBoundary:\"column-boundary\",columnBoundaryClippath:\"column-boundary-clippath\",columnBoundaryRect:\"column-boundary-rect\",columnCells:\"column-cells\",columnCell:\"column-cell\",cellRect:\"cell-rect\",cellText:\"cell-text\",cellTextHolder:\"cell-text-holder\",scrollbarKit:\"scrollbar-kit\",scrollbar:\"scrollbar\",scrollbarSlider:\"scrollbar-slider\",scrollbarGlyph:\"scrollbar-glyph\",scrollbarCaptureZone:\"scrollbar-capture-zone\"}}},51018:function(t,e,r){\"use strict\";var n=r(49850),i=r(1426).extendFlat,a=r(92770);function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,i=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),i=Math.max(i,r[e].length);if(n!==i)for(e=0;e<r.length;e++){var a=i-r[e].length;a&&(r[e]=r[e].concat(u(a)))}return r}function u(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=\"\";return e}function c(t){return t.calcdata.columns.reduce((function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e}),0)}function f(t,e){return Object.keys(t).map((function(r){return i({},t[r],{auxiliaryBlocks:e})}))}function h(t,e){for(var r,n={},i=0,a=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,u=0;u<t.length;u++)r=t[u],o.rows.push({rowIndex:u,rowHeight:r}),((a+=r)>=e||u===t.length-1)&&(n[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=u,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=u+1,a=0);return n}t.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[\"\"],d=l(d));var v=d.concat(p(r).map((function(){return u((d[0]||[\"\"]).length)}))),g=e.domain,y=Math.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),m=Math.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),x=e.header.values.length?v[0].map((function(){return e.header.height})):[n.emptyHeaderHeight],b=r.length?r[0].map((function(){return e.cells.height})):[],_=x.reduce(s,0),w=h(b,m-_+n.uplift),T=f(h(x,_),[]),k=f(w,T),A={},M=e._fullInput.columnorder.concat(p(r.map((function(t,e){return e})))),S=v.map((function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1})),E=S.reduce(s,0);S=S.map((function(t){return t/E*y}));var L=Math.max(o(e.header.line.width),o(e.cells.line.width)),C={key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:y,maxLineWidth:L,height:m,columnOrder:M,groupHeight:m,rowBlocks:k,headerRowBlocks:T,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:v}),gdColumns:v.map((function(t){return t[0]})),gdColumnsOriginalOrder:v.map((function(t){return t[0]})),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:v.map((function(t,e){var r=A[t];return A[t]=(r||0)+1,{key:t+\"__\"+A[t],label:t,specIndex:e,xIndex:M[e],xScale:c,x:void 0,calcdata:void 0,columnWidth:S[e]}}))};return C.columns.forEach((function(t){t.calcdata=C,t.x=c(t)})),C}},56269:function(t,e,r){\"use strict\";var n=r(1426).extendFlat;e.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:\"header\",type:\"header\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:\"cells1\",type:\"cells\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:\"cells2\",type:\"cells\",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},e.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0;return[r,e?r+e.rows.length:0]}(t);return(t.values||[]).slice(e[0],e[1]).map((function(r,n){return{keyWithinBlock:n+(\"string\"==typeof r&&r.match(/[<$&> ]/)?\"_keybuster_\"+Math.random():\"\"),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}}))}},39754:function(t,e,r){\"use strict\";var n=r(71828),i=r(44464),a=r(27670).c;t.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s(\"columnwidth\"),s(\"header.values\"),s(\"header.format\"),s(\"header.align\"),s(\"header.prefix\"),s(\"header.suffix\"),s(\"header.height\"),s(\"header.line.width\"),s(\"header.line.color\"),s(\"header.fill.color\"),n.coerceFont(s,\"header.font\",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort((function(t,e){return t-e})),o=i.map((function(t){return a.indexOf(t)})),s=o.length;s<n;s++)o.push(s);e(\"columnorder\",o)}(e,s),s(\"cells.values\"),s(\"cells.format\"),s(\"cells.align\"),s(\"cells.prefix\"),s(\"cells.suffix\"),s(\"cells.height\"),s(\"cells.line.width\"),s(\"cells.line.color\"),s(\"cells.fill.color\"),n.coerceFont(s,\"cells.font\",n.extendFlat({},o.font)),e._length=null}},96595:function(t,e,r){\"use strict\";t.exports={attributes:r(44464),supplyDefaults:r(39754),calc:r(76333),plot:r(36736),moduleType:\"trace\",name:\"table\",basePlotModule:r(99469),categories:[\"noOpacity\"],meta:{}}},36736:function(t,e,r){\"use strict\";var n=r(49850),i=r(39898),a=r(71828).numberFormat,o=r(28984),s=r(91424),l=r(63893),u=r(71828).raiseToTop,c=r(71828).strTranslate,f=r(71828).cancelTransition,h=r(51018),p=r(56269),d=r(7901);function v(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function g(t,e){return\"clip\"+t._fullLayout._uid+\"_scrollAreaBottomClip_\"+e.key}function y(t,e){return\"clip\"+t._fullLayout._uid+\"_columnBoundaryClippath_\"+e.calcdata.key+\"_\"+e.specIndex}function m(t){return[].concat.apply([],t.map((function(t){return t}))).map((function(t){return t.__data__}))}function x(t,e,r){var a=t.selectAll(\".\"+n.cn.scrollbarKit).data(o.repeat,o.keyFun);a.enter().append(\"g\").classed(n.cn.scrollbarKit,!0).style(\"shape-rendering\",\"geometricPrecision\"),a.each((function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?R(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-S(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom})).attr(\"transform\",(function(t){var e=t.width+n.scrollbarWidth/2+n.scrollbarOffset;return c(e,S(t))}));var s=a.selectAll(\".\"+n.cn.scrollbar).data(o.repeat,o.keyFun);s.enter().append(\"g\").classed(n.cn.scrollbar,!0);var l=s.selectAll(\".\"+n.cn.scrollbarSlider).data(o.repeat,o.keyFun);l.enter().append(\"g\").classed(n.cn.scrollbarSlider,!0),l.attr(\"transform\",(function(t){return c(0,t.scrollbarState.topY||0)}));var u=l.selectAll(\".\"+n.cn.scrollbarGlyph).data(o.repeat,o.keyFun);u.enter().append(\"line\").classed(n.cn.scrollbarGlyph,!0).attr(\"stroke\",\"black\").attr(\"stroke-width\",n.scrollbarWidth).attr(\"stroke-linecap\",\"round\").attr(\"y1\",n.scrollbarWidth/2),u.attr(\"y2\",(function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2})).attr(\"stroke-opacity\",(function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4})),u.transition().delay(0).duration(0),u.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr(\"stroke-opacity\",0);var f=s.selectAll(\".\"+n.cn.scrollbarCaptureZone).data(o.repeat,o.keyFun);f.enter().append(\"line\").classed(n.cn.scrollbarCaptureZone,!0).attr(\"stroke\",\"white\").attr(\"stroke-opacity\",.01).attr(\"stroke-width\",n.scrollbarCaptureWidth).attr(\"stroke-linecap\",\"butt\").attr(\"y1\",0).on(\"mousedown\",(function(r){var n=i.event.y,a=this.getBoundingClientRect(),o=r.scrollbarState,s=n-a.top,l=i.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||L(e,t,null,l(s-o.barLength/2))(r)})).call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t})).on(\"drag\",L(e,t)).on(\"dragend\",(function(){}))),f.attr(\"y2\",(function(t){return t.scrollbarState.scrollableAreaHeight})),e._context.staticPlot&&(u.remove(),f.remove())}function b(t,e,r,a){var l=function(t){var e=t.selectAll(\".\"+n.cn.columnCells).data(o.repeat,o.keyFun);return e.enter().append(\"g\").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r),u=function(t){var e=t.selectAll(\".\"+n.cn.columnCell).data(p.splitToCells,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(n.cn.columnCell,!0),e.exit().remove(),e}(l);!function(t){t.each((function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,i={size:T(r.size,n,e),color:T(r.color,n,e),family:T(r.family,n,e)};t.rowNumber=t.key,t.align=T(t.calcdata.cells.align,n,e),t.cellBorderWidth=T(t.calcdata.cells.line.width,n,e),t.font=i}))}(u);var c=function(t){var e=t.selectAll(\".\"+n.cn.cellRect).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"rect\").classed(n.cn.cellRect,!0),e}(u);!function(t){t.attr(\"width\",(function(t){return t.column.columnWidth})).attr(\"stroke-width\",(function(t){return t.cellBorderWidth})).each((function(t){var e=i.select(this);d.stroke(e,T(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),d.fill(e,T(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))}))}(c);var f=function(t){var e=t.selectAll(\".\"+n.cn.cellTextHolder).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(n.cn.cellTextHolder,!0).style(\"shape-rendering\",\"geometricPrecision\"),e}(u),h=function(t){var e=t.selectAll(\".\"+n.cn.cellText).data(o.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"text\").classed(n.cn.cellText,!0).style(\"cursor\",(function(){return\"auto\"})).on(\"mousedown\",(function(){i.event.stopPropagation()})),e}(f);!function(t){t.each((function(t){s.font(i.select(this),t.font)}))}(h),_(h,e,a,t),D(u)}function _(t,e,r,o){t.text((function(t){var e=t.column.specIndex,r=t.rowNumber,i=t.value,o=\"string\"==typeof i,s=o&&i.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&i.match(/[<&>]/);var u,c=\"string\"==typeof(u=i)&&u.match(n.latexCheck);t.latex=c;var f,h,p=c?\"\":T(t.calcdata.cells.prefix,e,r)||\"\",d=c?\"\":T(t.calcdata.cells.suffix,e,r)||\"\",v=c?null:T(t.calcdata.cells.format,e,r)||null,g=p+(v?a(v)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!c&&(f=w(g)),t.cellHeightMayIncrease=s||c||t.mayHaveMarkup||(void 0===f?w(g):f),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var y=(\" \"===n.wrapSplitCharacter?g.replace(/<a href=/gi,\"<a_href=\"):g).split(n.wrapSplitCharacter),m=\" \"===n.wrapSplitCharacter?y.map((function(t){return t.replace(/<a_href=/gi,\"<a href=\")})):y;t.fragments=m.map((function(t){return{text:t,width:null}})),t.fragments.push({fragment:n.wrapSpacer,width:null}),h=m.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,h=g;return h})).attr(\"dy\",(function(t){return t.needsConvertToTspans?0:\"0.75em\"})).each((function(t){var a=this,s=i.select(a),u=t.wrappingNeeded?P:O;t.needsConvertToTspans?l.convertToTspans(s,o,u(r,a,e,o,t)):i.select(a.parentNode).attr(\"transform\",(function(t){return c(I(t),n.cellPad)})).attr(\"text-anchor\",(function(t){return{left:\"start\",center:\"middle\",right:\"end\"}[t.align]}))}))}function w(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function T(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function k(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr(\"transform\",c(e.x,r))}function A(t){return\"cells\"===t.type}function M(t){return\"header\"===t.type}function S(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce((function(t,e){return t+R(e,1/0)}),0)}function E(t,e,r){var n=m(e)[0];if(void 0!==n){var i=n.rowBlocks,a=n.calcdata,o=z(i,i.length),s=n.calcdata.groupHeight-S(n),l=a.scrollY=Math.max(0,Math.min(o-s,a.scrollY)),u=function(t,e,r){for(var n=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,u=0;u<s.length;u++)l+=s[u].rowHeight;o.allRowsHeight=l,e<i+l&&e+r>i&&n.push(a),i+=l}return n}(i,l,s);1===u.length&&(u[0]===i.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2&&u.reverse(),e.each((function(t,e){t.page=u[e],t.scrollY=l})),e.attr(\"transform\",(function(t){var e=z(t.rowBlocks,t.page)-t.scrollY;return c(0,e)})),t&&(C(t,r,e,u,n.prevPages,n,0),C(t,r,e,u,n.prevPages,n,1),x(r,t))}}function L(t,e,r,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter((function(t){return s.key===t.key})),u=r||s.scrollbarState.dragMultiplier,c=s.scrollY;s.scrollY=void 0===a?s.scrollY+u*i.event.dy:a;var f=l.selectAll(\".\"+n.cn.yColumn).selectAll(\".\"+n.cn.columnBlock).filter(A);return E(t,f,l),s.scrollY===c}}function C(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout((function(){var a=r.filter((function(t,e){return e===o&&n[e]!==i[e]}));b(t,e,a,r),i[o]=n[o]})))}function P(t,e,r,a){return function(){var o=i.select(e.parentNode);o.each((function(t){var e=t.fragments;o.selectAll(\"tspan.line\").each((function(t,r){e[r].width=this.getComputedTextLength()}));var r,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],u=0,c=t.column.columnWidth-2*n.cellPad;for(t.value=\"\";s.length;)u+(i=(r=s.shift()).width+a)>c&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],u=0),l.push(r.text),u+=i;u&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0})),o.selectAll(\"tspan.line\").remove(),_(o.select(\".\"+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(D)}}function O(t,e,r,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=B(o),u=o.key-l.firstRowIndex,f=l.rows[u].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:f,p=Math.max(h,f);p-l.rows[u].rowHeight&&(l.rows[u].rowHeight=p,t.selectAll(\".\"+n.cn.columnCell).call(D),E(null,t.filter(A),0),x(r,a,!0)),s.attr(\"transform\",(function(){var t=this,e=t.parentNode.getBoundingClientRect(),r=i.select(t.parentNode).select(\".\"+n.cn.cellRect).node().getBoundingClientRect(),a=t.transform.baseVal.consolidate(),s=r.top-e.top+(a?a.matrix.f:n.cellPad);return c(I(o,i.select(t.parentNode).select(\".\"+n.cn.cellTextHolder).node().getBoundingClientRect().width),s)})),o.settledY=!0}}}function I(t,e){switch(t.align){case\"left\":default:return n.cellPad;case\"right\":return t.column.columnWidth-(e||0)-n.cellPad;case\"center\":return(t.column.columnWidth-(e||0))/2}}function D(t){t.attr(\"transform\",(function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce((function(t,e){return t+R(e,1/0)}),0),r=R(B(t),t.key);return c(0,r+e)})).selectAll(\".\"+n.cn.cellRect).attr(\"height\",(function(t){return(e=B(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r}))}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=F(t[n]);return r}function R(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function F(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function B(t){return t.rowBlocks[t.page]}t.exports=function(t,e){var r=!t._context.staticPlot,a=t._fullLayout._paper.selectAll(\".\"+n.cn.table).data(e.map((function(e){var r=o.unwrap(e).trace;return h(t,r)})),o.keyFun);a.exit().remove(),a.enter().append(\"g\").classed(n.cn.table,!0).attr(\"overflow\",\"visible\").style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"overflow\",\"visible\").style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"all\"),a.attr(\"width\",(function(t){return t.width+t.size.l+t.size.r})).attr(\"height\",(function(t){return t.height+t.size.t+t.size.b})).attr(\"transform\",(function(t){return c(t.translateX,t.translateY)}));var l=a.selectAll(\".\"+n.cn.tableControlView).data(o.repeat,o.keyFun),d=l.enter().append(\"g\").classed(n.cn.tableControlView,!0).style(\"box-sizing\",\"content-box\");if(r){var _=\"onwheel\"in document?\"wheel\":\"mousewheel\";d.on(\"mousemove\",(function(e){l.filter((function(t){return e===t})).call(x,t)})).on(_,(function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+i.event.deltaY;L(t,l,null,r)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling=!1}})).call(x,t,!0)}l.attr(\"transform\",(function(t){return c(t.size.l,t.size.t)}));var w=l.selectAll(\".\"+n.cn.scrollBackground).data(o.repeat,o.keyFun);w.enter().append(\"rect\").classed(n.cn.scrollBackground,!0).attr(\"fill\",\"none\"),w.attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),l.each((function(e){s.setClipUrl(i.select(this),g(t,e),t)}));var T=l.selectAll(\".\"+n.cn.yColumn).data((function(t){return t.columns}),o.keyFun);T.enter().append(\"g\").classed(n.cn.yColumn,!0),T.exit().remove(),T.attr(\"transform\",(function(t){return c(t.x,0)})),r&&T.call(i.behavior.drag().origin((function(e){return k(i.select(this),e,-n.uplift),u(this),e.calcdata.columnDragInProgress=!0,x(l.filter((function(t){return e.calcdata.key===t.key})),t),e})).on(\"drag\",(function(t){var e=i.select(this),r=function(e){return(t===e?i.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,i.event.x)),m(T).filter((function(e){return e.calcdata.key===t.calcdata.key})).sort((function(t,e){return r(t)-r(e)})).forEach((function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)})),T.filter((function(e){return t!==e})).transition().ease(n.transitionEase).duration(n.transitionDuration).attr(\"transform\",(function(t){return c(t.x,0)})),e.call(f).attr(\"transform\",c(t.x,-n.uplift))})).on(\"dragend\",(function(e){var r=i.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,k(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort((function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]})),e.columnorder=r,t.emit(\"plotly_restyle\")}(t,n,n.columns.map((function(t){return t.xIndex})))}))),T.each((function(e){s.setClipUrl(i.select(this),y(t,e),t)}));var S=T.selectAll(\".\"+n.cn.columnBlock).data(p.splitToPanels,o.keyFun);S.enter().append(\"g\").classed(n.cn.columnBlock,!0).attr(\"id\",(function(t){return t.key})),S.style(\"cursor\",(function(t){return t.dragHandle?\"ew-resize\":t.calcdata.scrollbarState.barWiggleRoom?\"ns-resize\":\"default\"}));var C=S.filter(M),P=S.filter(A);r&&P.call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t})).on(\"drag\",L(t,l,-1)).on(\"dragend\",(function(){}))),b(t,l,C,S),b(t,l,P,S);var O=l.selectAll(\".\"+n.cn.scrollAreaClip).data(o.repeat,o.keyFun);O.enter().append(\"clipPath\").classed(n.cn.scrollAreaClip,!0).attr(\"id\",(function(e){return g(t,e)}));var I=O.selectAll(\".\"+n.cn.scrollAreaClipRect).data(o.repeat,o.keyFun);I.enter().append(\"rect\").classed(n.cn.scrollAreaClipRect,!0).attr(\"x\",-n.overdrag).attr(\"y\",-n.uplift).attr(\"fill\",\"none\"),I.attr(\"width\",(function(t){return t.width+2*n.overdrag})).attr(\"height\",(function(t){return t.height+n.uplift})),T.selectAll(\".\"+n.cn.columnBoundary).data(o.repeat,o.keyFun).enter().append(\"g\").classed(n.cn.columnBoundary,!0);var D=T.selectAll(\".\"+n.cn.columnBoundaryClippath).data(o.repeat,o.keyFun);D.enter().append(\"clipPath\").classed(n.cn.columnBoundaryClippath,!0),D.attr(\"id\",(function(e){return y(t,e)}));var z=D.selectAll(\".\"+n.cn.columnBoundaryRect).data(o.repeat,o.keyFun);z.enter().append(\"rect\").classed(n.cn.columnBoundaryRect,!0).attr(\"fill\",\"none\"),z.attr(\"width\",(function(t){return t.columnWidth+2*v(t)})).attr(\"height\",(function(t){return t.calcdata.height+2*v(t)+n.uplift})).attr(\"x\",(function(t){return-v(t)})).attr(\"y\",(function(t){return-v(t)})),E(null,P,l)}},45802:function(t,e,r){\"use strict\";var n=r(5386).fF,i=r(5386).si,a=r(50693),o=r(27670).Y,s=r(34e3),l=r(57564),u=r(43473),c=r(1426).extendFlat,f=r(79952).u;t.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:\"enumerated\",values:[\"squarify\",\"binary\",\"dice\",\"slice\",\"slice-dice\",\"dice-slice\"],dflt:\"squarify\",editType:\"plot\"},squarifyratio:{valType:\"number\",min:1,dflt:1,editType:\"plot\"},flip:{valType:\"flaglist\",flags:[\"x\",\"y\"],dflt:\"\",editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:3,editType:\"plot\"},editType:\"calc\"},marker:c({pad:{t:{valType:\"number\",min:0,editType:\"plot\"},l:{valType:\"number\",min:0,editType:\"plot\"},r:{valType:\"number\",min:0,editType:\"plot\"},b:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\"},colors:l.marker.colors,pattern:f,depthfade:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],editType:\"style\"},line:l.marker.line,cornerradius:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},a(\"marker\",{colorAttr:\"colors\",anim:!1})),pathbar:{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},edgeshape:{valType:\"enumerated\",values:[\">\",\"<\",\"|\",\"/\",\"\\\\\"],dflt:\">\",editType:\"plot\"},thickness:{valType:\"number\",min:12,editType:\"plot\"},textfont:c({},s.textfont,{}),editType:\"calc\"},text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\"plot\"},{keys:u.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:u.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:c({},s.outsidetextfont,{}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"top left\",editType:\"plot\"},sort:s.sort,root:l.root,domain:o({name:\"treemap\",trace:!0,editType:\"calc\"})}},78018:function(t,e,r){\"use strict\";var n=r(74875);e.name=\"treemap\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},65039:function(t,e,r){\"use strict\";var n=r(52147);e.y=function(t,e){return n.calc(t,e)},e.T=function(t){return n._runCrossTraceCalc(\"treemap\",t)}},43473:function(t){\"use strict\";t.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"poly\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"],gapWithPathbar:1}},91174:function(t,e,r){\"use strict\";var n=r(71828),i=r(45802),a=r(7901),o=r(27670).c,s=r(90769).handleText,l=r(97313).TEXTPAD,u=r(37434).handleMarkerDefaults,c=r(21081),f=c.hasColorscale,h=c.handleDefaults;t.exports=function(t,e,r,c){function p(r,a){return n.coerce(t,e,i,r,a)}var d=p(\"labels\"),v=p(\"parents\");if(d&&d.length&&v&&v.length){var g=p(\"values\");g&&g.length?p(\"branchvalues\"):p(\"count\"),p(\"level\"),p(\"maxdepth\"),\"squarify\"===p(\"tiling.packing\")&&p(\"tiling.squarifyratio\"),p(\"tiling.flip\"),p(\"tiling.pad\");var y=p(\"text\");p(\"texttemplate\"),e.texttemplate||p(\"textinfo\",Array.isArray(y)?\"text+label\":\"label\"),p(\"hovertext\"),p(\"hovertemplate\");var m=p(\"pathbar.visible\");s(t,e,c,p,\"auto\",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),p(\"textposition\");var x=-1!==e.textposition.indexOf(\"bottom\");u(t,e,c,p),(e._hasColorscale=f(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis)?h(t,e,c,p,{prefix:\"marker.\",cLetter:\"c\"}):p(\"marker.depthfade\",!(e.marker.colors||[]).length);var b=2*e.textfont.size;p(\"marker.pad.t\",x?b/4:b),p(\"marker.pad.l\",b/4),p(\"marker.pad.r\",b/4),p(\"marker.pad.b\",x?b:b/4),p(\"marker.cornerradius\"),e._hovered={marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},m&&(p(\"pathbar.thickness\",e.pathbar.textfont.size+2*l),p(\"pathbar.side\"),p(\"pathbar.edgeshape\")),p(\"sort\"),p(\"root.color\"),o(e,c,p),e._length=null}else e.visible=!1}},80694:function(t,e,r){\"use strict\";var n=r(39898),i=r(2791),a=r(72597).clearMinTextSize,o=r(16688).resizeText,s=r(46650);t.exports=function(t,e,r,l,u){var c,f,h=u.type,p=u.drawDescendants,d=t._fullLayout,v=d[\"_\"+h+\"layer\"],g=!r;a(h,d),(c=v.selectAll(\"g.trace.\"+h).data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(h,!0),c.order(),!d.uniformtext.mode&&i.hasTransition(r)?(l&&(f=l()),n.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){f&&f()})).each(\"interrupt\",(function(){f&&f()})).each((function(){v.selectAll(\"g.trace\").each((function(e){s(t,e,this,r,p)}))}))):(c.each((function(e){s(t,e,this,r,p)})),d.uniformtext.mode&&o(t,v.selectAll(\".trace\"),h)),g&&c.exit().remove()}},66209:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=!0;t.exports=function(t,e,r,p,d){var v=d.barDifY,g=d.width,y=d.height,m=d.viewX,x=d.viewY,b=d.pathSlice,_=d.toMoveInsideSlice,w=d.strTransform,T=d.hasTransition,k=d.handleSlicesExit,A=d.makeUpdateSliceInterpolator,M=d.makeUpdateTextInterpolator,S={},E=t._context.staticPlot,L=t._fullLayout,C=e[0],P=C.trace,O=C.hierarchy,I=g/P._entryDepth,D=c.listPath(r.data,\"id\"),z=s(O.copy(),[g,y],{packing:\"dice\",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(z=z.filter((function(t){var e=D.indexOf(t.data.id);return-1!==e&&(t.x0=I*e,t.x1=I*(e+1),t.y0=v,t.y1=v+y,t.onPathbar=!0,!0)}))).reverse(),(p=p.data(z,c.getPtId)).enter().append(\"g\").classed(\"pathbar\",!0),k(p,h,S,[g,y],b),p.order();var R=p;T&&(R=R.transition().each(\"end\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})}))),R.each((function(s){s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-Math.min(g,y)/2),s._hoverY=x(s.y1-y/2);var p=n.select(this),d=i.ensureSingle(p,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",E?\"none\":\"all\")}));T?d.transition().attrTween(\"d\",(function(t){var e=A(t,h,S,[g,y]);return function(t){return b(e(t))}})):d.attr(\"d\",b),p.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),d.call(l,s,P,t,{hovered:!1}),s._text=(c.getPtLabel(s)||\"\").split(\"<br>\").join(\" \")||\"\";var v=i.ensureSingle(p,\"g\",\"slicetext\"),k=i.ensureSingle(v,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),C=i.ensureUniformFontSize(t,c.determineTextFont(P,s,L.font,{onPathbar:!0}));k.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",\"start\").call(a.font,C).call(o.convertToTspans,t),s.textBB=a.bBox(k.node()),s.transform=_(s,{fontSize:C.size,onPathbar:!0}),s.transform.fontSize=C.size,T?k.transition().attrTween(\"transform\",(function(t){var e=M(t,h,S,[g,y]);return function(t){return w(e(t))}})):k.attr(\"transform\",w(s))}))}},52583:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(63893),s=r(37210),l=r(96362).styleOne,u=r(43473),c=r(2791),f=r(83523),h=r(24714).formatSliceLabel,p=!1;t.exports=function(t,e,r,d,v){var g=v.width,y=v.height,m=v.viewX,x=v.viewY,b=v.pathSlice,_=v.toMoveInsideSlice,w=v.strTransform,T=v.hasTransition,k=v.handleSlicesExit,A=v.makeUpdateSliceInterpolator,M=v.makeUpdateTextInterpolator,S=v.prevEntry,E=t._context.staticPlot,L=t._fullLayout,C=e[0].trace,P=-1!==C.textposition.indexOf(\"left\"),O=-1!==C.textposition.indexOf(\"right\"),I=-1!==C.textposition.indexOf(\"bottom\"),D=!I&&!C.marker.pad.t||I&&!C.marker.pad.b,z=s(r,[g,y],{packing:C.tiling.packing,squarifyratio:C.tiling.squarifyratio,flipX:C.tiling.flip.indexOf(\"x\")>-1,flipY:C.tiling.flip.indexOf(\"y\")>-1,pad:{inner:C.tiling.pad,top:C.marker.pad.t,left:C.marker.pad.l,right:C.marker.pad.r,bottom:C.marker.pad.b}}).descendants(),R=1/0,F=-1/0;z.forEach((function(t){var e=t.depth;e>=C._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(R=Math.min(R,e),F=Math.max(F,e))})),d=d.data(z,c.getPtId),C._maxVisibleLayers=isFinite(F)?F-R+1:0,d.enter().append(\"g\").classed(\"slice\",!0),k(d,p,{},[g,y],b),d.order();var B=null;if(T&&S){var N=c.getPtId(S);d.each((function(t){null===B&&c.getPtId(t)===N&&(B={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var j=function(){return B||{x0:0,x1:g,y0:0,y1:y}},U=d;return T&&(U=U.transition().each(\"end\",(function(){var e=n.select(this);c.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),U.each((function(s){var d=c.isHeader(s,C);s._x0=m(s.x0),s._x1=m(s.x1),s._y0=x(s.y0),s._y1=x(s.y1),s._hoverX=m(s.x1-C.marker.pad.r),s._hoverY=x(I?s.y1-C.marker.pad.b/2:s.y0+C.marker.pad.t/2);var v=n.select(this),k=i.ensureSingle(v,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",E?\"none\":\"all\")}));T?k.transition().attrTween(\"d\",(function(t){var e=A(t,p,j(),[g,y]);return function(t){return b(e(t))}})):k.attr(\"d\",b),v.call(f,r,t,e,{styleOne:l,eventDataKeys:u.eventDataKeys,transitionTime:u.CLICK_TRANSITION_TIME,transitionEasing:u.CLICK_TRANSITION_EASING}).call(c.setSliceCursor,t,{isTransitioning:t._transitioning}),k.call(l,s,C,t,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text=\"\":s._text=d?D?\"\":c.getPtLabel(s)||\"\":h(s,r,C,e,L)||\"\";var S=i.ensureSingle(v,\"g\",\"slicetext\"),z=i.ensureSingle(S,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),R=i.ensureUniformFontSize(t,c.determineTextFont(C,s,L.font));z.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",O?\"end\":P||d?\"start\":\"middle\").call(a.font,R).call(o.convertToTspans,t),s.textBB=a.bBox(z.node()),s.transform=_(s,{fontSize:R.size,isHeader:d}),s.transform.fontSize=R.size,T?z.transition().attrTween(\"transform\",(function(t){var e=M(t,p,j(),[g,y]);return function(t){return w(e(t))}})):z.attr(\"transform\",w(s))})),B}},14102:function(t){\"use strict\";t.exports=function t(e,r,n){var i;n.swapXY&&(i=e.x0,e.x0=e.y0,e.y0=i,i=e.x1,e.x1=e.y1,e.y1=i),n.flipX&&(i=e.x0,e.x0=r[0]-e.x1,e.x1=r[0]-i),n.flipY&&(i=e.y0,e.y0=r[1]-e.y1,e.y1=r[1]-i);var a=e.children;if(a)for(var o=0;o<a.length;o++)t(a[o],r,n)}},70954:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"treemap\",basePlotModule:r(78018),categories:[],animatable:!0,attributes:r(45802),layoutAttributes:r(55479),supplyDefaults:r(91174),supplyLayoutDefaults:r(77182),calc:r(65039).y,crossTraceCalc:r(65039).T,plot:r(5893),style:r(96362).style,colorbar:r(4898),meta:{}}},55479:function(t){\"use strict\";t.exports={treemapcolorway:{valType:\"colorlist\",editType:\"calc\"},extendtreemapcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},77182:function(t,e,r){\"use strict\";var n=r(71828),i=r(55479);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"treemapcolorway\",e.colorway),r(\"extendtreemapcolors\")}},37210:function(t,e,r){\"use strict\";var n=r(674),i=r(14102);t.exports=function(t,e,r){var a,o=r.flipX,s=r.flipY,l=\"dice-slice\"===r.packing,u=r.pad[s?\"bottom\":\"top\"],c=r.pad[o?\"right\":\"left\"],f=r.pad[o?\"left\":\"right\"],h=r.pad[s?\"top\":\"bottom\"];l&&(a=c,c=u,u=a,a=f,f=h,h=a);var p=n.treemap().tile(function(t,e){switch(t){case\"squarify\":return n.treemapSquarify.ratio(e);case\"binary\":return n.treemapBinary;case\"dice\":return n.treemapDice;case\"slice\":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(c).paddingRight(f).paddingTop(u).paddingBottom(h).size(l?[e[1],e[0]]:e)(t);return(l||o||s)&&i(p,e,{swapXY:l,flipX:o,flipY:s}),p}},5893:function(t,e,r){\"use strict\";var n=r(80694),i=r(52583);t.exports=function(t,e,r,a){return n(t,e,r,a,{type:\"treemap\",drawDescendants:i})}},46650:function(t,e,r){\"use strict\";var n=r(39898),i=r(81684).sX,a=r(2791),o=r(71828),s=r(97313).TEXTPAD,l=r(17295).toMoveInsideBar,u=r(72597).recordMinTextSize,c=r(43473),f=r(66209);function h(t){return a.isHierarchyRoot(t)?\"\":a.getPtId(t)}t.exports=function(t,e,r,p,d){var v=t._fullLayout,g=e[0],y=g.trace,m=\"icicle\"===y.type,x=g.hierarchy,b=a.findEntryWithLevel(x,y.level),_=n.select(r),w=_.selectAll(\"g.pathbar\"),T=_.selectAll(\"g.slice\");if(!b)return w.remove(),void T.remove();var k=a.isHierarchyRoot(b),A=!v.uniformtext.mode&&a.hasTransition(p),M=a.getMaxDepth(y),S=v._size,E=y.domain,L=S.w*(E.x[1]-E.x[0]),C=S.h*(E.y[1]-E.y[0]),P=L,O=y.pathbar.thickness,I=y.marker.line.width+c.gapWithPathbar,D=y.pathbar.visible?y.pathbar.side.indexOf(\"bottom\")>-1?C+I:-(O+I):0,z={x0:P,x1:P,y0:D,y1:D+O},R=function(t,e,r){var n=y.tiling.pad,i=function(t){return t-n<=e.x0},a=function(t){return t+n>=e.x1},o=function(t){return t-n<=e.y0},s=function(t){return t+n>=e.y1};return t.x0===e.x0&&t.x1===e.x1&&t.y0===e.y0&&t.y1===e.y1?{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1}:{x0:i(t.x0-n)?0:a(t.x0-n)?r[0]:t.x0,x1:i(t.x1+n)?0:a(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},F=null,B={},N={},j=null,U=function(t,e){return e?B[h(t)]:N[h(t)]};g.hasMultipleRoots&&k&&M++,y._maxDepth=M,y._backgroundColor=v.paper_bgcolor,y._entryDepth=b.data.depth,y._atRootLevel=k;var V=-L/2+S.l+S.w*(E.x[1]+E.x[0])/2,H=-C/2+S.t+S.h*(1-(E.y[1]+E.y[0])/2),q=function(t){return V+t},G=function(t){return H+t},Z=G(0),Y=q(0),W=function(t){return Y+t},X=function(t){return Z+t};function J(t,e){return t+\",\"+e}var K=W(0),$=function(t){t.x=Math.max(K,t.x)},Q=y.pathbar.edgeshape,tt=y[m?\"tiling\":\"marker\"].pad,et=function(t){return-1!==y.textposition.indexOf(t)},rt=et(\"top\"),nt=et(\"left\"),it=et(\"right\"),at=et(\"bottom\"),ot=function(t,e){var r=t.x0,n=t.x1,i=t.y0,a=t.y1,o=t.textBB,c=rt||e.isHeader&&!at?\"start\":at?\"end\":\"middle\",f=et(\"right\"),h=et(\"left\")||e.onPathbar?-1:f?1:0;if(e.isHeader){if((r+=(m?tt:tt.l)-s)>=(n-=(m?tt:tt.r)-s)){var p=(r+n)/2;r=p,n=p}var d;at?i<(d=a-(m?tt:tt.b))&&d<a&&(i=d):i<(d=i+(m?tt:tt.t))&&d<a&&(a=d)}var g=l(r,n,i,a,o,{isHorizontal:!1,constrained:!0,angle:0,anchor:c,leftToRight:h});return g.fontSize=e.fontSize,g.targetX=q(g.targetX),g.targetY=G(g.targetY),isNaN(g.targetX)||isNaN(g.targetY)?{}:(r!==n&&i!==a&&u(y.type,g,v),{scale:g.scale,rotate:g.rotate,textX:g.textX,textY:g.textY,anchorX:g.anchorX,anchorY:g.anchorY,targetX:g.targetX,targetY:g.targetY})},st=function(t,e){for(var r,n=0,i=t;!r&&n<M;)n++,(i=i.parent)?r=U(i,e):n=M;return r||{}},lt=function(t,e,r,n,a){var s,l=U(t,e);if(l)s=l;else if(e)s=z;else if(F)if(t.parent){var u=j||r;u&&!e?s=R(t,u,n):(s={},o.extendFlat(s,st(t,e)))}else s=o.extendFlat({},t),m&&(\"h\"===a.orientation?a.flipX?s.x0=t.x1:s.x1=0:a.flipY?s.y0=t.y1:s.y1=0);else s={};return i(s,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},ut=function(t,e,r,n){var s=U(t,e),l={},c=function(t,e,r,n){if(e)return B[h(x)]||z;var i=N[y.level]||r;return function(t){return t.data.depth-b.data.depth<M}(t)?R(t,i,n):{}}(t,e,r,n);o.extendFlat(l,{transform:ot({x0:c.x0,x1:c.x1,y0:c.y0,y1:c.y1,textBB:t.textBB,_text:t._text},{isHeader:a.isHeader(t,y)})}),s?l=s:t.parent&&o.extendFlat(l,st(t,e));var f=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,f,v),i(l,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},ct=function(t,e,r,a,o){var s=a[0],l=a[1];A?t.exit().transition().each((function(){var t=n.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var r=function(t,e,r,n){var a,o=U(t,e);if(e)a=z;else{var s=U(b,e);a=s?R(t,s,n):{}}return i(o,a)}(t,e,0,[s,l]);return function(t){return o(r(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():t.exit().remove()},ft=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&u(y.type,e,v),o.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};A&&(w.each((function(t){B[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(B[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})})),T.each((function(t){N[h(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(N[h(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!F&&a.isEntry(t)&&(F=t)}))),j=d(t,e,b,T,{width:L,height:C,viewX:q,viewY:G,pathSlice:function(t){var e=q(t.x0),r=q(t.x1),n=G(t.y0),i=G(t.y1),a=r-e,o=i-n;if(!a||!o)return\"\";var s=y.marker.cornerradius||0,l=Math.min(s,a/2,o/2);l&&t.data&&t.data.data&&t.data.data.label&&(rt&&(l=Math.min(l,tt.t)),nt&&(l=Math.min(l,tt.l)),it&&(l=Math.min(l,tt.r)),at&&(l=Math.min(l,tt.b)));var u=function(t,e){return l?\"a\"+J(l,l)+\" 0 0 1 \"+J(t,e):\"\"};return\"M\"+J(e,n+l)+u(l,-l)+\"L\"+J(r-l,n)+u(l,l)+\"L\"+J(r,i-l)+u(-l,l)+\"L\"+J(e+l,i)+u(-l,-l)+\"Z\"},toMoveInsideSlice:ot,prevEntry:F,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}),y.pathbar.visible?f(t,e,b,w,{barDifY:D,width:P,height:O,viewX:W,viewY:X,pathSlice:function(t){var e=W(Math.max(Math.min(t.x0,t.x0),0)),r=W(Math.min(Math.max(t.x1,t.x1),P)),n=X(t.y0),i=X(t.y1),a=O/2,o={},s={};o.x=e,s.x=r,o.y=s.y=(n+i)/2;var l={x:e,y:n},u={x:r,y:n},c={x:r,y:i},f={x:e,y:i};return\">\"===Q?(l.x-=a,u.x-=a,c.x-=a,f.x-=a):\"/\"===Q?(c.x-=a,f.x-=a,o.x-=a/2,s.x-=a/2):\"\\\\\"===Q?(l.x-=a,u.x-=a,o.x-=a/2,s.x-=a/2):\"<\"===Q&&(o.x-=a,s.x-=a),$(l),$(f),$(o),$(u),$(c),$(s),\"M\"+J(l.x,l.y)+\"L\"+J(u.x,u.y)+\"L\"+J(s.x,s.y)+\"L\"+J(c.x,c.y)+\"L\"+J(f.x,f.y)+\"L\"+J(o.x,o.y)+\"Z\"},toMoveInsideSlice:ot,makeUpdateSliceInterpolator:lt,makeUpdateTextInterpolator:ut,handleSlicesExit:ct,hasTransition:A,strTransform:ft}):w.remove()}},96362:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(71828),o=r(2791),s=r(72597).resizeText,l=r(43467);function u(t,e,r,n,s){var u,c,f=(s||{}).hovered,h=e.data.data,p=h.i,d=h.color,v=o.isHierarchyRoot(e),g=1;if(f)u=r._hovered.marker.line.color,c=r._hovered.marker.line.width;else if(v&&d===r.root.color)g=100,u=\"rgba(0,0,0,0)\",c=0;else if(u=a.castOption(r,p,\"marker.line.color\")||i.defaultLine,c=a.castOption(r,p,\"marker.line.width\")||0,!r._hasColorscale&&!e.onPathbar){var y=r.marker.depthfade;if(y){var m,x=i.combine(i.addOpacity(r._backgroundColor,.75),d);if(!0===y){var b=o.getMaxDepth(r);m=isFinite(b)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else m=e.data.depth-r._entryDepth,r._atRootLevel||m++;if(m>0)for(var _=0;_<m;_++){var w=.5*_/m;d=i.combine(i.addOpacity(x,w),d)}}}t.call(l,e,r,n,d).style(\"stroke-width\",c).call(i.stroke,u).style(\"opacity\",g)}t.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(\".trace\");s(t,e,\"treemap\"),e.each((function(e){var r=n.select(this),i=e[0].trace;r.style(\"opacity\",i.opacity),r.selectAll(\"path.surface\").each((function(e){n.select(this).call(u,e,i,t,{hovered:!1})}))}))},styleOne:u}},68875:function(t,e,r){\"use strict\";var n=r(53522),i=r(1426).extendFlat,a=r(12663).axisHoverFormat;t.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),name:i({},n.name,{}),orientation:i({},n.orientation,{}),bandwidth:{valType:\"number\",min:0,editType:\"calc\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},scalemode:{valType:\"enumerated\",values:[\"width\",\"count\"],dflt:\"width\",editType:\"calc\"},spanmode:{valType:\"enumerated\",values:[\"soft\",\"hard\",\"manual\"],dflt:\"soft\",editType:\"calc\"},span:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:n.fillcolor,points:i({},n.boxpoints,{}),jitter:i({},n.jitter,{}),pointpos:i({},n.pointpos,{}),width:i({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,quartilemethod:n.quartilemethod,box:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},width:{valType:\"number\",min:0,max:1,dflt:.25,editType:\"plot\"},fillcolor:{valType:\"color\",editType:\"style\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},editType:\"plot\"},meanline:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"plot\"},side:{valType:\"enumerated\",values:[\"both\",\"positive\",\"negative\"],dflt:\"both\",editType:\"calc\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:\"flaglist\",flags:[\"violins\",\"points\",\"kde\"],dflt:\"violins+points+kde\",extras:[\"all\"],editType:\"style\"}}},38603:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(48518),o=r(60168),s=r(50606).BADNUM;function l(t,e,r){var i=e.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a=r.length,o=n.stdev(r,a-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function u(t,e,r,n){var a,o=t.spanmode,l=t.span||[],u=[e.min,e.max],c=[e.min-2*n,e.max+2*n];function f(n){var i=l[n],a=\"multicategory\"===r.type?r.r2c(i):r.d2c(i,0,t[e.valLetter+\"calendar\"]);return a===s?c[n]:a}var h={type:\"linear\",range:a=\"soft\"===o?c:\"hard\"===o?u:[f(0),f(1)]};return i.setConvert(h),h.cleanRange(),a}t.exports=function(t,e){var r=a(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,c=i.getFromId(t,e[\"h\"===e.orientation?\"xaxis\":\"yaxis\"]),f=1/0,h=-1/0,p=0,d=0,v=0;v<r.length;v++){var g=r[v],y=g.pts.map(o.extractVal),m=g.bandwidth=l(e,g,y),x=g.span=u(e,g,c,m);if(g.min===g.max&&0===m)x=g.span=[g.min,g.max],g.density=[{v:1,t:x[0]}],g.bandwidth=m,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(m/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error(\"Something went wrong with computing the violin span\"),r[0].t.empty=!0,r;var T=o.makeKDE(g,e,y);g.density=new Array(_);for(var k=0,A=x[0];A<x[1]+w/2;k++,A+=w){var M=T(A);g.density[k]={v:M,t:A},p=Math.max(p,M)}}d=Math.max(d,y.length),f=Math.min(f,x[0]),h=Math.max(h,x[1])}var S=i.findExtremes(c,[f,h],{padded:!0});if(e._extremes[c._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,L=e.scalegroup,C=E[L];C?(C.maxKDE=Math.max(C.maxKDE,p),C.maxCount=Math.max(C.maxCount,d)):E[L]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,\"kde:\"),r}},86403:function(t,e,r){\"use strict\";var n=r(37188).setPositionOffset,i=[\"v\",\"h\"];t.exports=function(t,e){for(var r=t.calcdata,a=e.xaxis,o=e.yaxis,s=0;s<i.length;s++){for(var l=i[s],u=\"h\"===l?o:a,c=[],f=0;f<r.length;f++){var h=r[f],p=h[0].t,d=h[0].trace;!0!==d.visible||\"violin\"!==d.type||p.empty||d.orientation!==l||d.xaxis!==a._id||d.yaxis!==o._id||c.push(f)}n(\"violin\",t,c,u)}}},15899:function(t,e,r){\"use strict\";var n=r(71828),i=r(7901),a=r(36411),o=r(68875);t.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}function u(r,i){return n.coerce2(t,e,o,r,i)}if(a.handleSampleDefaults(t,e,l,s),!1!==e.visible){l(\"bandwidth\"),l(\"side\"),l(\"width\")||(l(\"scalegroup\",e.name),l(\"scalemode\"));var c,f=l(\"span\");Array.isArray(f)&&(c=\"manual\"),l(\"spanmode\",c);var h=l(\"line.color\",(t.marker||{}).color||r),p=l(\"line.width\"),d=l(\"fillcolor\",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:\"\"});var v=u(\"box.width\"),g=u(\"box.fillcolor\",d),y=u(\"box.line.color\",h),m=u(\"box.line.width\",p);l(\"box.visible\",Boolean(v||g||y||m))||(e.box={visible:!1});var x=u(\"meanline.color\",h),b=u(\"meanline.width\",p);l(\"meanline.visible\",Boolean(x||b))||(e.meanline={visible:!1}),l(\"quartilemethod\")}}},60168:function(t,e,r){\"use strict\";var n=r(71828),i=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};e.makeKDE=function(t,e,r){var n=r.length,a=i,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,i=0;i<n;i++)e+=a((t-r[i])/o);return s*e}},e.getPositionOnKdePath=function(t,e,r){var i,a;\"h\"===e.orientation?(i=\"y\",a=\"x\"):(i=\"x\",a=\"y\");var o=n.findPointOnPath(t.path,r,a,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[i];return[l,\"both\"===e.side?2*s-l:s]},e.getKdeValue=function(t,r,n){var i=t.pts.map(e.extractVal);return e.makeKDE(t,r,i)(n)/t.posDensityScale},e.extractVal=function(t){return t.v}},57634:function(t,e,r){\"use strict\";var n=r(7901),i=r(71828),a=r(89298),o=r(41868),s=r(60168);t.exports=function(t,e,r,l,u){u||(u={});var c,f,h=u.hoverLayer,p=t.cd,d=p[0].trace,v=d.hoveron,g=-1!==v.indexOf(\"violins\"),y=-1!==v.indexOf(\"kde\"),m=[];if(g||y){var x=o.hoverOnBoxes(t,e,r,l);if(y&&x.length>0){var b,_,w,T,k,A=t.xa,M=t.ya;\"h\"===d.orientation?(k=e,b=\"y\",w=M,_=\"x\",T=A):(k=r,b=\"x\",w=A,_=\"y\",T=M);var S=p[t.index];if(k>=S.span[0]&&k<=S.span[1]){var E=i.extendFlat({},t),L=T.c2p(k,!0),C=s.getKdeValue(S,d,k),P=s.getPositionOnKdePath(S,d,L),O=w._offset,I=w._length;E[b+\"0\"]=P[0],E[b+\"1\"]=P[1],E[_+\"0\"]=E[_+\"1\"]=L,E[_+\"Label\"]=_+\": \"+a.hoverLabelText(T,k,d[_+\"hoverformat\"])+\", \"+p[0].t.labels.kde+\" \"+C.toFixed(3);for(var D=0,z=0;z<x.length;z++)if(\"med\"===x[z].attr){D=z;break}E.spikeDistance=x[D].spikeDistance;var R=b+\"Spike\";E[R]=x[D][R],x[D].spikeDistance=void 0,x[D][R]=void 0,E.hovertemplate=!1,m.push(E),(f={})[b+\"1\"]=i.constrain(O+P[0],O,O+I),f[b+\"2\"]=i.constrain(O+P[1],O,O+I),f[_+\"1\"]=f[_+\"2\"]=T._offset+L}}g&&(m=m.concat(x))}-1!==v.indexOf(\"points\")&&(c=o.hoverOnPoints(t,e,r));var F=h.selectAll(\".violinline-\"+d.uid).data(f?[0]:[]);return F.enter().append(\"line\").classed(\"violinline-\"+d.uid,!0).attr(\"stroke-width\",1.5),F.exit().remove(),F.attr(f).call(n.stroke,t.color),\"closest\"===l?c?[c]:m:c?(m.push(c),m):m}},47462:function(t,e,r){\"use strict\";t.exports={attributes:r(68875),layoutAttributes:r(9228),supplyDefaults:r(15899),crossTraceDefaults:r(36411).crossTraceDefaults,supplyLayoutDefaults:r(33598),calc:r(38603),crossTraceCalc:r(86403),plot:r(28443),style:r(31847),styleOnSelect:r(16296).styleOnSelect,hoverPoints:r(57634),selectPoints:r(24626),moduleType:\"trace\",name:\"violin\",basePlotModule:r(93612),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"violinLayout\",\"zoomScale\"],meta:{}}},9228:function(t,e,r){\"use strict\";var n=r(40094),i=r(71828).extendFlat;t.exports={violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},33598:function(t,e,r){\"use strict\";var n=r(71828),i=r(9228),a=r(4199);t.exports=function(t,e,r){a._supply(t,e,r,(function(r,a){return n.coerce(t,e,i,r,a)}),\"violin\")}},28443:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(86047),s=r(34621),l=r(60168);t.exports=function(t,e,r,u){var c=t._context.staticPlot,f=t._fullLayout,h=e.xaxis,p=e.yaxis;function d(t,e){var r=s(t,{xaxis:h,yaxis:p,trace:e,connectGaps:!0,baseTolerance:.75,shape:\"spline\",simplify:!0,linearized:!0});return a.smoothopen(r[0],1)}i.makeTraceGroups(u,r,\"trace violins\").each((function(t){var r=n.select(this),a=t[0],s=a.t,u=a.trace;if(!0!==u.visible||s.empty)r.remove();else{var v=s.bPos,g=s.bdPos,y=e[s.valLetter+\"axis\"],m=e[s.posLetter+\"axis\"],x=\"both\"===u.side,b=x||\"positive\"===u.side,_=x||\"negative\"===u.side,w=r.selectAll(\"path.violin\").data(i.identity);w.enter().append(\"path\").style(\"vector-effect\",c?\"none\":\"non-scaling-stroke\").attr(\"class\",\"violin\"),w.exit().remove(),w.each((function(t){var e,r,i,a,o,l,c,h,p=n.select(this),w=t.density,T=w.length,k=m.c2l(t.pos+v,!0),A=m.l2p(k);if(u.width)e=s.maxKDE/g;else{var M=f._violinScaleGroupStats[u.scalegroup];e=\"count\"===u.scalemode?M.maxKDE/g*(M.maxCount/t.pts.length):M.maxKDE/g}if(b){for(c=new Array(T),o=0;o<T;o++)(h=c[o]={})[s.posLetter]=k+w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);r=d(c,u)}if(_){for(c=new Array(T),l=0,o=T-1;l<T;l++,o--)(h=c[l]={})[s.posLetter]=k-w[o].v/e,h[s.valLetter]=y.c2l(w[o].t,!0);i=d(c,u)}if(x)a=r+\"L\"+i.substr(1)+\"Z\";else{var S=[A,y.c2p(w[0].t)],E=[A,y.c2p(w[T-1].t)];\"h\"===u.orientation&&(S.reverse(),E.reverse()),a=b?\"M\"+S+\"L\"+r.substr(1)+\"L\"+E:\"M\"+E+\"L\"+i.substr(1)+\"L\"+S}p.attr(\"d\",a),t.posCenterPx=A,t.posDensityScale=e*g,t.path=p.node(),t.pathLength=t.path.getTotalLength()/(x?2:1)}));var T,k,A,M=u.box,S=M.width,E=(M.line||{}).width;x?(T=g*S,k=0):b?(T=[0,g*S/2],k=E*{x:1,y:-1}[s.posLetter]):(T=[g*S/2,0],k=E*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:y},u,{bPos:v,bdPos:T,bPosPxOffset:k}),!u.box.visible&&u.meanline.visible&&(A=i.identity);var L=r.selectAll(\"path.meanline\").data(A||[]);L.enter().append(\"path\").attr(\"class\",\"meanline\").style(\"fill\",\"none\").style(\"vector-effect\",c?\"none\":\"non-scaling-stroke\"),L.exit().remove(),L.each((function(t){var e=y.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,u,e);n.select(this).attr(\"d\",\"h\"===u.orientation?\"M\"+e+\",\"+r[0]+\"V\"+r[1]:\"M\"+r[0]+\",\"+e+\"H\"+r[1])})),o.plotPoints(r,{x:h,y:p},u,s)}}))}},31847:function(t,e,r){\"use strict\";var n=r(39898),i=r(7901),a=r(16296).stylePoints;t.exports=function(t){var e=n.select(t).selectAll(\"g.trace.violins\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},u=r.meanline||{},c=u.width;o.selectAll(\"path.violin\").style(\"stroke-width\",r.line.width+\"px\").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),o.selectAll(\"path.box\").style(\"stroke-width\",l.width+\"px\").call(i.stroke,l.color).call(i.fill,s.fillcolor);var f={\"stroke-width\":c+\"px\",\"stroke-dasharray\":2*c+\"px,\"+c+\"px\"};o.selectAll(\"path.mean\").style(f).call(i.stroke,u.color),o.selectAll(\"path.meanline\").style(f).call(i.stroke,u.color),a(o,r,t)}))}},16336:function(t,e,r){\"use strict\";var n=r(50693),i=r(16249),a=r(54532),o=r(9012),s=r(1426).extendFlat,l=r(30962).overrideAll,u=t.exports=l(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,xhoverformat:i.xhoverformat,yhoverformat:i.yhoverformat,zhoverformat:i.zhoverformat,valuehoverformat:i.valuehoverformat,hovertemplate:i.hovertemplate},n(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),\"calc\",\"nested\");u.x.editType=u.y.editType=u.z.editType=u.value.editType=\"calc+clearAxisTypes\",u.transforms=void 0},64809:function(t,e,r){\"use strict\";var n=r(9330).gl_mesh3d,i=r(81697).parseColorScale,a=r(78614),o=r(21081).extractOpts,s=r(90060),l=r(22674).findNearestOnAxis,u=r(22674).generateIsoMeshes;function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\"\",this.data=null,this.showContour=!1}var f=c.prototype;f.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],i=this.data._meshZ[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,u=l(n,this.data._Ys).id,c=l(i,this.data._Zs).id,f=t.index=c+o*u+o*a*s;t.traceCoordinate=[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h=this.data.hovertext||this.data.text;return Array.isArray(h)&&void 0!==h[f]?t.textLabel=h[f]:h&&(t.textLabel=h),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data=u(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=i(t),this.mesh.update(l)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},t.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new c(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},47651:function(t,e,r){\"use strict\";var n=r(71828),i=r(16336),a=r(82738).supplyIsoDefaults,o=r(91831).opacityscaleDefaults;t.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,r,s,l),o(t,e,s,l)}},17659:function(t,e,r){\"use strict\";t.exports={attributes:r(16336),supplyDefaults:r(47651),calc:r(56959),colorbar:{min:\"cmin\",max:\"cmax\"},plot:r(64809),moduleType:\"trace\",name:\"volume\",basePlotModule:r(58547),categories:[\"gl3d\",\"showLegend\"],meta:{}}},43037:function(t,e,r){\"use strict\";var n=r(1486),i=r(82196).line,a=r(9012),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(5386).si,u=r(48334),c=r(1426).extendFlat,f=r(7901);function h(t){return{marker:{color:c({},n.marker.color,{arrayOk:!1,editType:\"style\"}),line:{color:c({},n.marker.line.color,{arrayOk:!1,editType:\"style\"}),width:c({},n.marker.line.width,{arrayOk:!1,editType:\"style\"}),editType:\"style\"},editType:\"style\"},editType:\"style\"}}t.exports={measure:{valType:\"data_array\",dflt:[],editType:\"calc\"},base:{valType:\"number\",dflt:null,arrayOk:!1,editType:\"calc\"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),hovertext:n.hovertext,hovertemplate:s({},{keys:u.eventDataKeys}),hoverinfo:c({},a.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"initial\",\"delta\",\"final\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"initial\",\"delta\",\"final\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:l({editType:\"plot\"},{keys:u.eventDataKeys.concat([\"label\"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},i.color,{dflt:f.defaultLine}),width:c({},i.width,{editType:\"plot\"}),dash:i.dash,editType:\"plot\"},mode:{valType:\"enumerated\",values:[\"spanning\",\"between\"],dflt:\"between\",editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},52752:function(t,e,r){\"use strict\";var n=r(89298),i=r(42973),a=r(71828).mergeArray,o=r(66279),s=r(50606).BADNUM;function l(t){return\"a\"===t||\"absolute\"===t}function u(t){return\"t\"===t||\"total\"===t}t.exports=function(t,e){var r,c,f,h,p,d,v=n.getFromId(t,e.xaxis||\"x\"),g=n.getFromId(t,e.yaxis||\"y\");\"h\"===e.orientation?(r=v.makeCalcdata(e,\"x\"),f=g.makeCalcdata(e,\"y\"),h=i(e,g,\"y\",f),p=!!e.yperiodalignment,d=\"y\"):(r=g.makeCalcdata(e,\"y\"),f=v.makeCalcdata(e,\"x\"),h=i(e,v,\"x\",f),p=!!e.xperiodalignment,d=\"x\"),c=h.vals;for(var y,m=Math.min(c.length,r.length),x=new Array(m),b=0,_=!1,w=0;w<m;w++){var T=r[w]||0,k=!1;(r[w]!==s||u(e.measure[w])||l(e.measure[w]))&&w+1<m&&(r[w+1]!==s||u(e.measure[w+1])||l(e.measure[w+1]))&&(k=!0);var A=x[w]={i:w,p:c[w],s:T,rawS:T,cNext:k};l(e.measure[w])?(b=A.s,A.isSum=!0,A.dir=\"totals\",A.s=b):u(e.measure[w])?(A.isSum=!0,A.dir=\"totals\",A.s=b):(A.isSum=!1,A.dir=A.rawS<0?\"decreasing\":\"increasing\",y=A.s,A.s=b+y,b+=y),\"totals\"===A.dir&&(_=!0),p&&(x[w].orig_p=f[w],x[w][d+\"End\"]=h.ends[w],x[w][d+\"Start\"]=h.starts[w]),e.ids&&(A.id=String(e.ids[w])),A.v=(e.base||0)+b}return x.length&&(x[0].hasTotals=_),a(e.text,x,\"tx\"),a(e.hovertext,x,\"htx\"),o(x,e),x}},48334:function(t){\"use strict\";t.exports={eventDataKeys:[\"initial\",\"delta\",\"final\"]}},70766:function(t,e,r){\"use strict\";var n=r(11661).setGroupPositions;t.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,u=e.yaxis,c=[],f=[],h=[];for(i=0;i<o.length;i++){var p=o[i];!0===p.visible&&p.xaxis===l._id&&p.yaxis===u._id&&\"waterfall\"===p.type&&(r=s[i],\"h\"===p.orientation?h.push(r):f.push(r),c.push(r))}var d={mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(n(t,l,u,f,d),n(t,u,l,h,d),i=0;i<c.length;i++){r=c[i];for(var v=0;v<r.length;v++){var g=r[v];!1===g.isSum&&(g.s0+=0===v?0:r[v-1].s),v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0)}}}},83266:function(t,e,r){\"use strict\";var n=r(71828),i=r(26125),a=r(90769).handleText,o=r(67513),s=r(73927),l=r(43037),u=r(7901),c=r(22372),f=c.INCREASING.COLOR,h=c.DECREASING.COLOR;function p(t,e,r){t(e+\".marker.color\",r),t(e+\".marker.line.color\",u.defaultLine),t(e+\".marker.line.width\")}t.exports={supplyDefaults:function(t,e,r,i){function u(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,u)){s(t,e,i,u),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"measure\"),u(\"orientation\",e.x&&!e.y?\"h\":\"v\"),u(\"base\"),u(\"offset\"),u(\"width\"),u(\"text\"),u(\"hovertext\"),u(\"hovertemplate\");var c=u(\"textposition\");a(t,e,i,u,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"!==e.textposition&&(u(\"texttemplate\"),e.texttemplate||u(\"textinfo\")),p(u,\"increasing\",f),p(u,\"decreasing\",h),p(u,\"totals\",\"#4499FF\"),u(\"connector.visible\")&&(u(\"connector.mode\"),u(\"connector.line.width\")&&(u(\"connector.line.color\"),u(\"connector.line.dash\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\"group\"===e.waterfallmode)for(var s=0;s<t.length;s++)r=(a=t[s])._input,i(r,a,e,o)}}},58593:function(t){\"use strict\";t.exports=function(t,e){return t.x=\"xVal\"in e?e.xVal:e.x,t.y=\"yVal\"in e?e.yVal:e.y,\"initial\"in e&&(t.initial=e.initial),\"delta\"in e&&(t.delta=e.delta),\"final\"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},61326:function(t,e,r){\"use strict\";var n=r(89298).hoverLabelText,i=r(7901).opacity,a=r(95423).hoverOnBars,o=r(22372),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;t.exports=function(t,e,r,o,u){var c=a(t,e,r,o,u);if(c){var f=c.cd,h=f[0].trace,p=\"h\"===h.orientation,d=p?\"x\":\"y\",v=p?t.xa:t.ya,g=f[c.index],y=g.isSum?g.b+g.s:g.rawS;c.initial=g.b+g.s-y,c.delta=y,c.final=c.initial+c.delta;var m=k(Math.abs(c.delta));c.deltaLabel=y<0?\"(\"+m+\")\":m,c.finalLabel=k(c.final),c.initialLabel=k(c.initial);var x=g.hi||h.hoverinfo,b=[];if(x&&\"none\"!==x&&\"skip\"!==x){var _=\"all\"===x,w=x.split(\"+\"),T=function(t){return _||-1!==w.indexOf(t)};g.isSum||(!T(\"final\")||T(p?\"x\":\"y\")||b.push(c.finalLabel),T(\"delta\")&&(y<0?b.push(c.deltaLabel+\" \"+l):b.push(c.deltaLabel+\" \"+s)),T(\"initial\")&&b.push(\"Initial: \"+c.initialLabel))}return b.length&&(c.extraText=b.join(\"<br>\")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,a=r.line.color,o=r.line.width;return i(n)?n:i(a)&&o?a:void 0}(h,g),[c]}function k(t){return n(v,t,h[d+\"hoverformat\"])}}},19990:function(t,e,r){\"use strict\";t.exports={attributes:r(43037),layoutAttributes:r(13494),supplyDefaults:r(83266).supplyDefaults,crossTraceDefaults:r(83266).crossTraceDefaults,supplyLayoutDefaults:r(5176),calc:r(52752),crossTraceCalc:r(70766),plot:r(30436),style:r(55750).style,hoverPoints:r(61326),eventData:r(58593),selectPoints:r(81974),moduleType:\"trace\",name:\"waterfall\",basePlotModule:r(93612),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},13494:function(t){\"use strict\";t.exports={waterfallmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"group\",editType:\"calc\"},waterfallgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},waterfallgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},5176:function(t,e,r){\"use strict\";var n=r(71828),i=r(13494);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\"waterfall\"===l.type){a=!0;break}}a&&(o(\"waterfallmode\"),o(\"waterfallgap\",.2),o(\"waterfallgroupgap\"))}},30436:function(t,e,r){\"use strict\";var n=r(39898),i=r(71828),a=r(91424),o=r(50606).BADNUM,s=r(17295),l=r(72597).clearMinTextSize;t.exports=function(t,e,r,u){var c=t._fullLayout;l(\"waterfall\",c),s.plot(t,e,r,u,{mode:c.waterfallmode,norm:c.waterfallmode,gap:c.waterfallgap,groupgap:c.waterfallgroupgap}),function(t,e,r,s){var l=e.xaxis,u=e.yaxis;i.makeTraceGroups(s,r,\"trace bars\").each((function(r){var s=n.select(this),c=r[0].trace,f=i.ensureSingle(s,\"g\",\"lines\");if(c.connector&&c.connector.visible){var h=\"h\"===c.orientation,p=c.connector.mode,d=f.selectAll(\"g.line\").data(i.identity);d.enter().append(\"g\").classed(\"line\",!0),d.exit().remove();var v=d.size();d.each((function(r,s){if(s===v-1||r.cNext){var c=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),n?[i,a]:[a,i]}(r,l,u,h),f=c[0],d=c[1],g=\"\";f[0]!==o&&d[0]!==o&&f[1]!==o&&d[1]!==o&&(\"spanning\"===p&&!r.isSum&&s>0&&(g+=h?\"M\"+f[0]+\",\"+d[1]+\"V\"+d[0]:\"M\"+f[1]+\",\"+d[0]+\"H\"+f[0]),\"between\"!==p&&(r.isSum||s<v-1)&&(g+=h?\"M\"+f[1]+\",\"+d[0]+\"V\"+d[1]:\"M\"+f[0]+\",\"+d[1]+\"H\"+f[1]),f[2]!==o&&d[2]!==o&&(g+=h?\"M\"+f[1]+\",\"+d[1]+\"V\"+d[2]:\"M\"+f[1]+\",\"+d[1]+\"H\"+f[2])),\"\"===g&&(g=\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,u)}},55750:function(t,e,r){\"use strict\";var n=r(39898),i=r(91424),a=r(7901),o=r(37822).DESELECTDIM,s=r(16688),l=r(72597).resizeText,u=s.styleTextPoints;t.exports={style:function(t,e,r){var s=r||n.select(t).selectAll(\"g.waterfalllayer\").selectAll(\"g.trace\");l(t,s,\"waterfall\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r=n.select(this),s=e[0].trace;r.selectAll(\".point > path\").each((function(t){if(!t.isBlank){var e=s[t.dir].marker;n.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style(\"opacity\",s.selectedpoints&&!t.selected?o:1)}})),u(r,s,t),r.selectAll(\".lines\").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},82887:function(t,e,r){\"use strict\";var n=r(89298),i=r(71828),a=r(86281),o=r(79344).p,s=r(50606).BADNUM;e.moduleType=\"transform\",e.name=\"aggregate\";var l=e.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},aggregations:{_isLinkedToArray:\"aggregation\",target:{valType:\"string\",editType:\"calc\"},func:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"median\",\"mode\",\"rms\",\"stddev\",\"min\",\"max\",\"first\",\"last\",\"change\",\"range\"],dflt:\"first\",editType:\"calc\"},funcmode:{valType:\"enumerated\",values:[\"sample\",\"population\"],dflt:\"sample\",editType:\"calc\"},enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},u=l.aggregations;function c(t,e,r,a){if(a.enabled){for(var o=a.target,l=i.nestedProperty(e,o),u=l.get(),c=function(t,e){var r=t.func,n=e.d2c,a=e.c2d;switch(r){case\"count\":return f;case\"first\":return h;case\"last\":return p;case\"sum\":return function(t,e){for(var r=0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r+=o)}return a(r)};case\"avg\":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,i++)}return i?a(r/i):s};case\"min\":return function(t,e){for(var r=1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:a(r)};case\"max\":return function(t,e){for(var r=-1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:a(r)};case\"range\":return function(t,e){for(var r=1/0,i=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),i=Math.max(i,l))}return i===-1/0||r===1/0?s:a(i-r)};case\"change\":return function(t,e){var r=n(t[e[0]]),i=n(t[e[e.length-1]]);return r===s||i===s?s:a(i-r)};case\"median\":return function(t,e){for(var r=[],o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&r.push(l)}if(!r.length)return s;r.sort(i.sorterAsc);var u=(r.length-1)/2;return a((r[Math.floor(u)]+r[Math.ceil(u)])/2)};case\"mode\":return function(t,e){for(var r={},i=0,o=s,l=0;l<e.length;l++){var u=n(t[e[l]]);if(u!==s){var c=r[u]=(r[u]||0)+1;c>i&&(i=c,o=u)}}return i?a(o):s};case\"rms\":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,i++)}return i?a(Math.sqrt(r/i)):s};case\"stddev\":return function(e,r){var i,a=0,o=0,l=1,u=s;for(i=0;i<r.length&&u===s;i++)u=n(e[r[i]]);if(u===s)return s;for(;i<r.length;i++){var c=n(e[r[i]]);if(c!==s){var f=c-u;a+=f,o+=f*f,l++}}var h=\"sample\"===t.funcmode?l-1:l;return h?Math.sqrt((o-a*a/l)/h):0}}}(a,n.getDataConversions(t,e,o,u)),d=new Array(r.length),v=0;v<r.length;v++)d[v]=c(u,r[v]);l.set(d),\"count\"===a.func&&i.pushUnique(e._arrayAttrs,o)}}function f(t,e){return e.length}function h(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}e.supplyDefaults=function(t,e){var r,n={};function o(e,r){return i.coerce(t,n,l,e,r)}if(!o(\"enabled\"))return n;var s=a.findArrayAttributes(e),c={};for(r=0;r<s.length;r++)c[s[r]]=1;var f=o(\"groups\");if(!Array.isArray(f)){if(!c[f])return n.enabled=!1,n;c[f]=0}var h,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function v(t,e){return i.coerce(p[r],h,u,t,e)}for(r=0;r<p.length;r++){h={_index:r};var g=v(\"target\"),y=v(\"func\");v(\"enabled\")&&g&&(c[g]||\"count\"===y&&void 0===c[g])?(\"stddev\"===y&&v(\"funcmode\"),c[g]=0,d[r]=h):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)c[s[r]]&&d.push({target:s[r],func:u.func.dflt,enabled:!0,_index:-1});return n},e.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,a=i.getTargetArray(e,{target:n});if(a){var s,l,u,f,h={},p={},d=[],v=o(e.transforms,r),g=a.length;for(e._length&&(g=Math.min(g,e._length)),s=0;s<g;s++)void 0===(u=h[l=a[s]])?(h[l]=d.length,f=[s],d.push(f),p[h[l]]=v(s)):(d[u].push(s),p[h[l]]=(p[h[l]]||[]).concat(v(s)));r._indexToPoints=p;var y=r.aggregations;for(s=0;s<y.length;s++)c(t,e,d,y[s]);\"string\"==typeof n&&c(t,e,d,{target:n,func:\"first\",enabled:!0}),e._length=d.length}}}},14382:function(t,e,r){\"use strict\";var n=r(71828),i=r(73972),a=r(89298),o=r(79344).p,s=r(74808),l=s.COMPARISON_OPS,u=s.INTERVAL_OPS,c=s.SET_OPS;e.moduleType=\"transform\",e.name=\"filter\",e.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},operation:{valType:\"enumerated\",values:[].concat(l).concat(u).concat(c),dflt:\"=\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},preservegaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc\"},e.supplyDefaults=function(t){var r={};function a(i,a){return n.coerce(t,r,e.attributes,i,a)}if(a(\"enabled\")){var o=a(\"target\");if(n.isArrayOrTypedArray(o)&&0===o.length)return r.enabled=!1,r;a(\"preservegaps\"),a(\"operation\"),a(\"value\");var s=i.getComponentMethod(\"calendars\",\"handleDefaults\");s(t,r,\"valuecalendar\",null),s(t,r,\"targetcalendar\",null)}return r},e.calcTransform=function(t,e,r){if(r.enabled){var i=n.getTargetArray(e,r);if(i){var s=r.target,f=i.length;e._length&&(f=Math.min(f,e._length));var h=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if(\"string\"==typeof s){var v=n.nestedProperty(e,s+\"calendar\").get();v&&(h=v)}var g,y,m=function(t,e,r){var n=t.operation,i=t.value,a=Array.isArray(i);function o(t){return-1!==t.indexOf(n)}var s,f=function(r){return e(r,0,t.valuecalendar)},h=function(t){return e(t,0,r)};switch(o(l)?s=f(a?i[0]:i):o(u)?s=a?[f(i[0]),f(i[1])]:[f(i),f(i)]:o(c)&&(s=a?i.map(f):[f(i)]),n){case\"=\":return function(t){return h(t)===s};case\"!=\":return function(t){return h(t)!==s};case\"<\":return function(t){return h(t)<s};case\"<=\":return function(t){return h(t)<=s};case\">\":return function(t){return h(t)>s};case\">=\":return function(t){return h(t)>=s};case\"[]\":return function(t){var e=h(t);return e>=s[0]&&e<=s[1]};case\"()\":return function(t){var e=h(t);return e>s[0]&&e<s[1]};case\"[)\":return function(t){var e=h(t);return e>=s[0]&&e<s[1]};case\"(]\":return function(t){var e=h(t);return e>s[0]&&e<=s[1]};case\"][\":return function(t){var e=h(t);return e<=s[0]||e>=s[1]};case\")(\":return function(t){var e=h(t);return e<s[0]||e>s[1]};case\"](\":return function(t){var e=h(t);return e<=s[0]||e>s[1]};case\")[\":return function(t){var e=h(t);return e<s[0]||e>=s[1]};case\"{}\":return function(t){return-1!==s.indexOf(h(t))};case\"}{\":return function(t){return-1===s.indexOf(h(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),h),x={},b={},_=0;d?(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(f))},y=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},y=function(t,e){var r=x[t.astr][e];t.get().push(r)}),k(g);for(var w=o(e.transforms,r),T=0;T<f;T++)m(i[T])?(k(y,T),b[_++]=w(T)):d&&_++;r._indexToPoints=b,e._length=_}}function k(t,r){for(var i=0;i<p.length;i++)t(n.nestedProperty(e,p[i]),r)}}},43102:function(t,e,r){\"use strict\";var n=r(71828),i=r(86281),a=r(74875),o=r(79344).p;function s(t,e){var r,s,l,u,c,f,h,p,d,v,g=e.transform,y=e.transformIndex,m=t.transforms[y].groups,x=o(t.transforms,g);if(!n.isArrayOrTypedArray(m)||0===m.length)return[t];var b=n.filterUnique(m),_=new Array(b.length),w=m.length,T=i.findArrayAttributes(t),k=g.styles||[],A={};for(r=0;r<k.length;r++)A[k[r].target]=k[r].value;g.styles&&(v=n.keyedContainer(g,\"styles\",\"target\",\"value.name\"));var M={},S={};for(r=0;r<b.length;r++){M[f=b[r]]=r,S[f]=0,(h=_[r]=n.extendDeepNoArrays({},t))._group=f,h.transforms[y]._indexToPoints={};var E=null;for(v&&(E=v.get(f)),h.name=E||\"\"===E?E:n.templateString(g.nameformat,{trace:t.name,group:f}),p=h.transforms,h.transforms=[],s=0;s<p.length;s++)h.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<T.length;s++)n.nestedProperty(h,T[s]).set([])}for(l=0;l<T.length;l++){for(u=T[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],u).get();for(c=n.nestedProperty(t,u).get(),s=0;s<w;s++)d[M[m[s]]].push(c[s])}for(s=0;s<w;s++)(h=_[M[m[s]]]).transforms[y]._indexToPoints[S[m[s]]]=x(s),S[m[s]]++;for(r=0;r<b.length;r++)f=b[r],h=_[r],a.clearExpandedTraceDefaultColors(h),h=n.extendDeepNoArrays(h,A[f]||{});return _}e.moduleType=\"transform\",e.name=\"groupby\",e.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"data_array\",dflt:[],editType:\"calc\"},nameformat:{valType:\"string\",editType:\"calc\"},styles:{_isLinkedToArray:\"style\",target:{valType:\"string\",editType:\"calc\"},value:{valType:\"any\",dflt:{},editType:\"calc\",_compareAsJSON:!0},editType:\"calc\"},editType:\"calc\"},e.supplyDefaults=function(t,r,i){var a,o={};function s(r,i){return n.coerce(t,o,e.attributes,r,i)}if(!s(\"enabled\"))return o;s(\"groups\"),s(\"nameformat\",i._dataLength>1?\"%{group} (%{trace})\":\"%{group}\");var l=t.styles,u=o.styles=[];if(l)for(a=0;a<l.length;a++){var c=u[a]={};n.coerce(l[a],u[a],e.attributes.styles,\"target\");var f=n.coerce(l[a],u[a],e.attributes.styles,\"value\");n.isPlainObject(f)?c.value=n.extendDeep({},f):f&&delete c.value}return o},e.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},79344:function(t,e){\"use strict\";e.p=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);var a=n?function(t){return n[t]}:function(t){return[t]};return a}},32275:function(t,e,r){\"use strict\";var n=r(71828),i=r(89298),a=r(79344).p,o=r(50606).BADNUM;e.moduleType=\"transform\",e.name=\"sort\",e.attributes={enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},order:{valType:\"enumerated\",values:[\"ascending\",\"descending\"],dflt:\"ascending\",editType:\"calc\"},editType:\"calc\"},e.supplyDefaults=function(t){var r={};function i(i,a){return n.coerce(t,r,e.attributes,i,a)}return i(\"enabled\")&&(i(\"target\"),i(\"order\")),r},e.calcTransform=function(t,e,r){if(r.enabled){var s=n.getTargetArray(e,r);if(s){var l=r.target,u=s.length;e._length&&(u=Math.min(u,e._length));var c,f,h=e._arrayAttrs,p=function(t,e,r,n){var i,a=new Array(n),s=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case\"ascending\":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:n-i};case\"descending\":return function(t,r){var n=e(t.v),i=e(r.v);return n===o?1:i===o?-1:i-n}}}(t,r)),i=0;i<n;i++)s[i]=a[i].i;return s}(r,s,i.getDataToCoordFunc(t,e,l,s),u),d=a(e.transforms,r),v={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),y=g.get(),m=new Array(u);for(f=0;f<u;f++)m[f]=y[p[f]];g.set(m)}for(f=0;f<u;f++)v[f]=d(p[f]);r._indexToPoints=v,e._length=u}}}},11506:function(t,e){\"use strict\";e.version=\"2.27.0\"},9330:function(t,e,r){var n,i=r(90386);self,n=function(){return function(){var t={7386:function(t,e,r){t.exports={alpha_shape:r(2350),convex_hull:r(5537),delaunay_triangulate:r(4419),gl_cone3d:r(1140),gl_error3d:r(3110),gl_heatmap2d:r(6386),gl_line3d:r(6086),gl_mesh3d:r(8116),gl_plot2d:r(2117),gl_plot3d:r(1059),gl_pointcloud2d:r(8271),gl_scatter3d:r(2182),gl_select_box:r(6623),gl_spikes2d:r(3050),gl_streamtube3d:r(7307),gl_surface3d:r(3754),ndarray:r(5050),ndarray_linear_interpolate:r(3581)}},2146:function(t,e,r){\"use strict\";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},s(t)}var l=r(3910),u=r(3187),c=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;e.lW=p,e.h2=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if(\"number\"==typeof t){if(\"string\"==typeof e)throw new TypeError('The \"string\" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if(\"string\"==typeof t)return function(t,e){if(\"string\"==typeof e&&\"\"!==e||(e=\"utf8\"),!p.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if(\"undefined\"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if(\"number\"==typeof t)throw new TypeError('The \"value\" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?\"number\"!=typeof t.length||et(t.length)?h(0):y(t):\"Buffer\"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+s(t))}function v(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('\"offset\" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+f.toString(16)+\" bytes\");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if(\"string\"!=typeof t)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return K(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return $(t).length;default:if(i)return n?-1:K(t).length;e=(\"\"+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return z(this,e,r);case\"utf8\":case\"utf-8\":return P(this,e,r);case\"ascii\":return I(this,e,r);case\"latin1\":case\"binary\":return D(this,e,r);case\"base64\":return C(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return R(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if(\"number\"==typeof e)return e&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r=\"\",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(p.prototype,\"parent\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,\"offset\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?\"string\"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?\"\":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t=\"\",r=e.h2;return t=this.toString(\"hex\",0,r).replace(/(.{2})/g,\"$1 \").trim(),this.length>r&&(t+=\" ... \"),\"<Buffer \"+t+\">\"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n=\"utf8\",r=this.length,e=0;else if(void 0===r&&\"string\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var a=!1;;)switch(n){case\"hex\":return A(this,t,e,r);case\"utf8\":case\"utf-8\":return M(this,t,e,r);case\"ascii\":case\"latin1\":case\"binary\":return S(this,t,e,r);case\"base64\":return E(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return L(this,t,e,r);default:if(a)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n=\"\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n=\"\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i=\"\",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i=\"\",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError(\"offset is not uint\");if(t+e>r)throw new RangeError(\"Trying to access beyond buffer length\")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('\"value\" argument is out of bounds');if(r+n>t.length)throw new RangeError(\"Index out of range\")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if(\"string\"==typeof t){if(\"string\"==typeof e?(n=e,e=0,r=this.length):\"string\"==typeof r&&(n=r,r=this.length),void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!p.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1===t.length){var i=t.charCodeAt(0);(\"utf8\"===n&&i<128||\"latin1\"===n)&&(t=i)}}else\"number\"==typeof t?t&=255:\"boolean\"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError(\"Out of range index\");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\"number\"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===s(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,p),r=h.call(this),Object.defineProperty(a(r),\"message\",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name=\"\".concat(r.name,\" [\").concat(t,\"]\"),r.stack,delete r.name,r}return l=p,(u=[{key:\"code\",get:function(){return t},set:function(t){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:\"toString\",value:function(){return\"\".concat(this.name,\" [\").concat(t,\"]: \").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,\"prototype\",{writable:!1}),p}(r)}function Z(t){for(var e=\"\",r=t.length,n=\"-\"===t[0]?1:0;r>=n+4;r-=3)e=\"_\".concat(t.slice(r-3,r)).concat(e);return\"\".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s=\"bigint\"==typeof e?\"n\":\"\";throw o=a>3?0===e||e===BigInt(0)?\">= 0\".concat(s,\" and < 2\").concat(s,\" ** \").concat(8*(a+1)).concat(s):\">= -(2\".concat(s,\" ** \").concat(8*(a+1)-1).concat(s,\") and < 2 ** \")+\"\".concat(8*(a+1)-1).concat(s):\">= \".concat(e).concat(s,\" and <= \").concat(r).concat(s),new q.ERR_OUT_OF_RANGE(\"value\",o,t)}!function(t,e,r){W(e,\"offset\"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if(\"number\"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,\"number\",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||\"offset\",\">= \".concat(r?1:0,\" and <= \").concat(e),t)}G(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(t){return t?\"\".concat(t,\" is outside of buffer bounds\"):\"Attempt to access memory outside buffer bounds\"}),RangeError),G(\"ERR_INVALID_ARG_TYPE\",(function(t,e){return'The \"'.concat(t,'\" argument must be of type number. Received type ').concat(s(e))}),TypeError),G(\"ERR_OUT_OF_RANGE\",(function(t,e,r){var n='The value of \"'.concat(t,'\" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):\"bigint\"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+=\"n\"),n+\" It must be \".concat(e,\". Received \").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split(\"=\")[0]).trim().replace(J,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t=\"0123456789abcdef\",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return\"undefined\"==typeof BigInt?it:t}function it(){throw new Error(\"BigInt not supported\")}},2321:function(t){\"use strict\";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||\"undefined\"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&\"string\"==typeof i.headers[\"user-agent\"]&&(i=i.headers[\"user-agent\"]),\"string\"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf(\"Macintosh\")&&-1!==i.indexOf(\"Safari\")&&(a=!0),a}},3910:function(t,e){\"use strict\";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+\"==\")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\"=\")),a.join(\"\")};for(var r=[],n=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join(\"\")}n[\"-\".charCodeAt(0)]=62,n[\"_\".charCodeAt(0)]=63},3187:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},1152:function(t,e,r){\"use strict\";t.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],u=t.mode||\"turntable\",c=n(),f=i(),h=a();return c.setDistanceLimits(l[0],l[1]),c.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),new o({turntable:c,orbit:f,matrix:h},u)};var n=r(3440),i=r(7774),a=r(9298);function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map((function(e){return t[e]})),this._mode=e,this._active=t[e],this._active||(this._mode=\"turntable\",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;s.flush=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].flush(t)},s.idle=function(t){for(var e=this._controllerList,r=0;r<e.length;++r)e[r].idle(t)},s.lookAt=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].lookAt(t,e,r,n)},s.rotate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].rotate(t,e,r,n)},s.pan=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].pan(t,e,r,n)},s.translate=function(t,e,r,n){for(var i=this._controllerList,a=0;a<i.length;++a)i[a].translate(t,e,r,n)},s.setMatrix=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setMatrix(t,e)},s.setDistanceLimits=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistanceLimits(t,e)},s.setDistance=function(t,e){for(var r=this._controllerList,n=0;n<r.length;++n)r[n].setDistance(t,e)},s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],i=Math.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},8126:function(t,e,r){\"use strict\";var n=\"undefined\"==typeof WeakMap?r(5346):WeakMap,i=r(5827),a=r(2944),o=new n;t.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},8008:function(t,e,r){var n=r(4930);t.exports=function(t,e,r){e=\"number\"==typeof e?e:1,r=r||\": \";var i=t.split(/\\r?\\n/),a=String(i.length+e-1).length;return i.map((function(t,i){var o=i+e,s=String(o).length;return n(o,a-s)+r+t})).join(\"\\n\")}},2153:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],a=[0],o=1;o<e;++o)if(n.push(t[o]),i(n,r)){if(a.push(o),a.length===r+1)return a}else n.pop();return a};var n=r(417);function i(t,e){for(var r=new Array(e+1),i=0;i<t.length;++i)r[i]=t[i];for(i=0;i<=t.length;++i){for(var a=t.length;a<=e;++a){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(a+1-i,s);r[a]=o}if(n.apply(void 0,r))return!0}return!1}},4653:function(t,e,r){\"use strict\";t.exports=function(t,e){return n(e).filter((function(r){for(var n=new Array(r.length),a=0;a<r.length;++a)n[a]=e[r[a]];return i(n)*t<1}))};var n=r(4419),i=r(1778)},2350:function(t,e,r){t.exports=function(t,e){return i(n(t,e))};var n=r(4653),i=r(8691)},7896:function(t){t.exports=function(t){return atob(t)}},957:function(t,e,r){\"use strict\";t.exports=function(t,e){for(var r=e.length,a=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];a[o]=s}for(a[r]=new Array(r+1),o=0;o<=r;++o)a[r][o]=1;var u=new Array(r+1);for(o=0;o<r;++o)u[o]=e[o];u[r]=1;var c=n(a,u),f=i(c[r+1]);0===f&&(f=1);var h=new Array(r+1);for(o=0;o<=r;++o)h[o]=i(c[o])/f;return h};var n=r(6606);function i(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},1539:function(t,e,r){\"use strict\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},8846:function(t){\"use strict\";t.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},9189:function(t,e,r){\"use strict\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},5125:function(t,e,r){\"use strict\";var n=r(234),i=r(3218),a=r(5514),o=r(2813),s=r(8524),l=r(9189);t.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var u,c,f=0;if(i(e))u=e.clone();else if(\"string\"==typeof e)u=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))u=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),f-=256;u=a(e)}}if(n(r))u.mul(r[1]),c=r[0].clone();else if(i(r))c=r.clone();else if(\"string\"==typeof r)c=o(r);else if(r)if(r===Math.floor(r))c=a(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),f+=256;c=a(r)}else c=a(1);return f>0?u=u.ushln(f):f<0&&(c=c.ushln(-f)),s(u,c)}},234:function(t,e,r){\"use strict\";var n=r(3218);t.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},4275:function(t,e,r){\"use strict\";var n=r(1928);t.exports=function(t){return t.cmp(new n(0))}},9958:function(t,e,r){\"use strict\";var n=r(4275);t.exports=function(t){var e=t.length,r=t.words,i=0;if(1===e)i=r[0];else if(2===e)i=r[0]+67108864*r[1];else for(var a=0;a<e;a++)i+=r[a]*Math.pow(67108864,a);return n(t)*i}},1112:function(t,e,r){\"use strict\";var n=r(8362),i=r(2288).countTrailingZeros;t.exports=function(t){var e=i(n.lo(t));if(e<32)return e;var r=i(n.hi(t));return r>20?52:r+32}},3218:function(t,e,r){\"use strict\";r(1928),t.exports=function(t){return t&&\"object\"==typeof t&&Boolean(t.words)}},5514:function(t,e,r){\"use strict\";var n=r(1928),i=r(8362);t.exports=function(t){var e=i.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},8524:function(t,e,r){\"use strict\";var n=r(5514),i=r(4275);t.exports=function(t,e){var r=i(t),a=i(e);if(0===r)return[n(0),n(1)];if(0===a)return[n(0),n(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);return o.cmpn(1)?[t.div(o),e.div(o)]:[t,e]}},2813:function(t,e,r){\"use strict\";var n=r(1928);t.exports=function(t){return new n(t)}},3962:function(t,e,r){\"use strict\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},4951:function(t,e,r){\"use strict\";var n=r(4275);t.exports=function(t){return n(t[0])*n(t[1])}},4354:function(t,e,r){\"use strict\";var n=r(8524);t.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},7999:function(t,e,r){\"use strict\";var n=r(9958),i=r(1112);t.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(r.abs()),o=a.div,s=n(o),l=a.mod,u=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return u*s;if(s){var c=i(s)+4;return u*(s+(h=n(l.ushln(c).divRound(r)))*Math.pow(2,-c))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?u*h*Math.pow(2,-f):u*(h*=Math.pow(2,-1023))*Math.pow(2,1023-f)}},5070:function(t){\"use strict\";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return\"function\"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},2288:function(t,e){\"use strict\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},1928:function(t,e,r){!function(t,e){\"use strict\";function n(t,e){if(!t)throw new Error(e||\"Assertion failed\")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function a(t,e,r){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&(\"le\"!==e&&\"be\"!==e||(r=e,e=10),this._init(t||0,e||10,r||\"be\"))}var o;\"object\"==typeof t?t.exports=a:e.BN=a,a.BN=a,a.wordSize=26;try{o=\"undefined\"!=typeof window&&void 0!==window.Buffer?window.Buffer:r(6601).Buffer}catch(t){}function s(t,e){var r=t.charCodeAt(e);return r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function l(t,e,r){var n=s(t,r);return r-1>=e&&(n|=s(t,r-1)<<4),n}function u(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&\"object\"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if(\"number\"==typeof t)return this._initNumber(t,e,r);if(\"object\"==typeof t)return this._initArray(t,e,r);\"hex\"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;\"-\"===(t=t.toString().replace(/\\s+/g,\"\"))[0]&&(i++,this.negative=1),i<t.length&&(16===e?this._parseHex(t,i,r):(this._parseBase(t,e,i),\"le\"===r&&this._initArray(this.toArray(),e,r)))},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),\"le\"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n(\"number\"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if(\"be\"===r)for(i=t.length-1,a=0;i>=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if(\"le\"===r)for(i=0,a=0;i<t.length;i+=3)o=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e,r){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var i,a=0,o=0;if(\"be\"===r)for(n=t.length-1;n>=e;n-=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;else for(n=(t.length-e)%2==0?e+1:e;n<t.length;n+=2)i=l(t,e,n)<<a,this.words[o]|=67108863&i,a>=18?(a-=18,o+=1,this.words[o]|=i>>>26):a+=8;this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,s=Math.min(a,a-o)+r,l=0,c=r;c<s;c+=n)l=u(t,c,c+n,e),this.imuln(i),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(0!==o){var f=1;for(l=u(t,c,t.length,e),c=0;c<o;c++)f*=e;this.imuln(f),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this.strip()},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"};var c=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function p(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var u=1;u<n;u++){for(var c=l>>>26,f=67108863&l,h=Math.min(u,e.length-1),p=Math.max(0,u-t.length+1);p<=h;p++){var d=u-p|0;c+=(o=(i=0|t.words[d])*(a=0|e.words[p])+f)/67108864|0,f=67108863&o}r.words[u]=0|f,l=0|c}return 0!==l?r.words[u]=0|l:r.length--,r.strip()}a.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||\"hex\"===t){r=\"\";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);r=0!=(a=s>>>24-i&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=f[t],p=h[t];r=\"\";var d=this.clone();for(d.negative=0;!d.isZero();){var v=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?v+r:c[u-v.length]+v+r}for(this.isZero()&&(r=\"0\"+r);r.length%e!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}n(!1,\"Base should be between 2 and 36\")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n(void 0!==o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,\"byte array longer than desired length\"),n(a>0,\"Requested array length <= 0\"),this.strip();var o,s,l=\"le\"===e,u=new t(a),c=this.clone();if(l){for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[s]=o;for(;s<a;s++)u[s]=0}else{for(s=0;s<a-i;s++)u[s]=0;for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[a-s-1]=o}return u},Math.clz32?a.prototype._countBits=function(t){return 32-Math.clz32(t)}:a.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n(\"number\"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n(\"number\"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a<n.length;a++)e=(0|r.words[a])+(0|n.words[a])+i,this.words[a]=67108863&e,i=e>>>26;for(;0!==i&&a<r.length;a++)e=(0|r.words[a])+i,this.words[a]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var a=0,o=0;o<n.length;o++)a=(e=(0|r.words[o])-(0|n.words[o])+a)>>26,this.words[o]=67108863&e;for(;0!==a&&o<r.length;o++)a=(e=(0|r.words[o])+a)>>26,this.words[o]=67108863&e;if(0===a&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var d=function(t,e,r){var n,i,a,o=t.words,s=e.words,l=r.words,u=0,c=0|o[0],f=8191&c,h=c>>>13,p=0|o[1],d=8191&p,v=p>>>13,g=0|o[2],y=8191&g,m=g>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],T=8191&w,k=w>>>13,A=0|o[5],M=8191&A,S=A>>>13,E=0|o[6],L=8191&E,C=E>>>13,P=0|o[7],O=8191&P,I=P>>>13,D=0|o[8],z=8191&D,R=D>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],U=8191&j,V=j>>>13,H=0|s[1],q=8191&H,G=H>>>13,Z=0|s[2],Y=8191&Z,W=Z>>>13,X=0|s[3],J=8191&X,K=X>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ut=st>>>13,ct=0|s[8],ft=8191&ct,ht=ct>>>13,pt=0|s[9],dt=8191&pt,vt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(n=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,V))+Math.imul(h,U)|0))<<13)|0;u=((a=Math.imul(h,V))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(d,U),i=(i=Math.imul(d,V))+Math.imul(v,U)|0,a=Math.imul(v,V);var yt=(u+(n=n+Math.imul(f,q)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,q)|0))<<13)|0;u=((a=a+Math.imul(h,G)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,V))+Math.imul(m,U)|0,a=Math.imul(m,V),n=n+Math.imul(d,q)|0,i=(i=i+Math.imul(d,G)|0)+Math.imul(v,q)|0,a=a+Math.imul(v,G)|0;var mt=(u+(n=n+Math.imul(f,Y)|0)|0)+((8191&(i=(i=i+Math.imul(f,W)|0)+Math.imul(h,Y)|0))<<13)|0;u=((a=a+Math.imul(h,W)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(b,U),i=(i=Math.imul(b,V))+Math.imul(_,U)|0,a=Math.imul(_,V),n=n+Math.imul(y,q)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(m,q)|0,a=a+Math.imul(m,G)|0,n=n+Math.imul(d,Y)|0,i=(i=i+Math.imul(d,W)|0)+Math.imul(v,Y)|0,a=a+Math.imul(v,W)|0;var xt=(u+(n=n+Math.imul(f,J)|0)|0)+((8191&(i=(i=i+Math.imul(f,K)|0)+Math.imul(h,J)|0))<<13)|0;u=((a=a+Math.imul(h,K)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(T,U),i=(i=Math.imul(T,V))+Math.imul(k,U)|0,a=Math.imul(k,V),n=n+Math.imul(b,q)|0,i=(i=i+Math.imul(b,G)|0)+Math.imul(_,q)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(y,Y)|0,i=(i=i+Math.imul(y,W)|0)+Math.imul(m,Y)|0,a=a+Math.imul(m,W)|0,n=n+Math.imul(d,J)|0,i=(i=i+Math.imul(d,K)|0)+Math.imul(v,J)|0,a=a+Math.imul(v,K)|0;var bt=(u+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,tt)|0)+Math.imul(h,Q)|0))<<13)|0;u=((a=a+Math.imul(h,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(M,U),i=(i=Math.imul(M,V))+Math.imul(S,U)|0,a=Math.imul(S,V),n=n+Math.imul(T,q)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(k,q)|0,a=a+Math.imul(k,G)|0,n=n+Math.imul(b,Y)|0,i=(i=i+Math.imul(b,W)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,W)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,K)|0)+Math.imul(m,J)|0,a=a+Math.imul(m,K)|0,n=n+Math.imul(d,Q)|0,i=(i=i+Math.imul(d,tt)|0)+Math.imul(v,Q)|0,a=a+Math.imul(v,tt)|0;var _t=(u+(n=n+Math.imul(f,rt)|0)|0)+((8191&(i=(i=i+Math.imul(f,nt)|0)+Math.imul(h,rt)|0))<<13)|0;u=((a=a+Math.imul(h,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,U),i=(i=Math.imul(L,V))+Math.imul(C,U)|0,a=Math.imul(C,V),n=n+Math.imul(M,q)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(S,q)|0,a=a+Math.imul(S,G)|0,n=n+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,W)|0)+Math.imul(k,Y)|0,a=a+Math.imul(k,W)|0,n=n+Math.imul(b,J)|0,i=(i=i+Math.imul(b,K)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,K)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,tt)|0)+Math.imul(m,Q)|0,a=a+Math.imul(m,tt)|0,n=n+Math.imul(d,rt)|0,i=(i=i+Math.imul(d,nt)|0)+Math.imul(v,rt)|0,a=a+Math.imul(v,nt)|0;var wt=(u+(n=n+Math.imul(f,at)|0)|0)+((8191&(i=(i=i+Math.imul(f,ot)|0)+Math.imul(h,at)|0))<<13)|0;u=((a=a+Math.imul(h,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,U),i=(i=Math.imul(O,V))+Math.imul(I,U)|0,a=Math.imul(I,V),n=n+Math.imul(L,q)|0,i=(i=i+Math.imul(L,G)|0)+Math.imul(C,q)|0,a=a+Math.imul(C,G)|0,n=n+Math.imul(M,Y)|0,i=(i=i+Math.imul(M,W)|0)+Math.imul(S,Y)|0,a=a+Math.imul(S,W)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,K)|0)+Math.imul(k,J)|0,a=a+Math.imul(k,K)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(_,Q)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=(i=i+Math.imul(y,nt)|0)+Math.imul(m,rt)|0,a=a+Math.imul(m,nt)|0,n=n+Math.imul(d,at)|0,i=(i=i+Math.imul(d,ot)|0)+Math.imul(v,at)|0,a=a+Math.imul(v,ot)|0;var Tt=(u+(n=n+Math.imul(f,lt)|0)|0)+((8191&(i=(i=i+Math.imul(f,ut)|0)+Math.imul(h,lt)|0))<<13)|0;u=((a=a+Math.imul(h,ut)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(z,U),i=(i=Math.imul(z,V))+Math.imul(R,U)|0,a=Math.imul(R,V),n=n+Math.imul(O,q)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(I,q)|0,a=a+Math.imul(I,G)|0,n=n+Math.imul(L,Y)|0,i=(i=i+Math.imul(L,W)|0)+Math.imul(C,Y)|0,a=a+Math.imul(C,W)|0,n=n+Math.imul(M,J)|0,i=(i=i+Math.imul(M,K)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,K)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(k,Q)|0,a=a+Math.imul(k,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(y,at)|0,i=(i=i+Math.imul(y,ot)|0)+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0,n=n+Math.imul(d,lt)|0,i=(i=i+Math.imul(d,ut)|0)+Math.imul(v,lt)|0,a=a+Math.imul(v,ut)|0;var kt=(u+(n=n+Math.imul(f,ft)|0)|0)+((8191&(i=(i=i+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))<<13)|0;u=((a=a+Math.imul(h,ht)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(B,U),i=(i=Math.imul(B,V))+Math.imul(N,U)|0,a=Math.imul(N,V),n=n+Math.imul(z,q)|0,i=(i=i+Math.imul(z,G)|0)+Math.imul(R,q)|0,a=a+Math.imul(R,G)|0,n=n+Math.imul(O,Y)|0,i=(i=i+Math.imul(O,W)|0)+Math.imul(I,Y)|0,a=a+Math.imul(I,W)|0,n=n+Math.imul(L,J)|0,i=(i=i+Math.imul(L,K)|0)+Math.imul(C,J)|0,a=a+Math.imul(C,K)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(S,Q)|0,a=a+Math.imul(S,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(k,rt)|0,a=a+Math.imul(k,nt)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(y,lt)|0,i=(i=i+Math.imul(y,ut)|0)+Math.imul(m,lt)|0,a=a+Math.imul(m,ut)|0,n=n+Math.imul(d,ft)|0,i=(i=i+Math.imul(d,ht)|0)+Math.imul(v,ft)|0,a=a+Math.imul(v,ht)|0;var At=(u+(n=n+Math.imul(f,dt)|0)|0)+((8191&(i=(i=i+Math.imul(f,vt)|0)+Math.imul(h,dt)|0))<<13)|0;u=((a=a+Math.imul(h,vt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,q),i=(i=Math.imul(B,G))+Math.imul(N,q)|0,a=Math.imul(N,G),n=n+Math.imul(z,Y)|0,i=(i=i+Math.imul(z,W)|0)+Math.imul(R,Y)|0,a=a+Math.imul(R,W)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,K)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,K)|0,n=n+Math.imul(L,Q)|0,i=(i=i+Math.imul(L,tt)|0)+Math.imul(C,Q)|0,a=a+Math.imul(C,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(S,rt)|0,a=a+Math.imul(S,nt)|0,n=n+Math.imul(T,at)|0,i=(i=i+Math.imul(T,ot)|0)+Math.imul(k,at)|0,a=a+Math.imul(k,ot)|0,n=n+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(_,lt)|0,a=a+Math.imul(_,ut)|0,n=n+Math.imul(y,ft)|0,i=(i=i+Math.imul(y,ht)|0)+Math.imul(m,ft)|0,a=a+Math.imul(m,ht)|0;var Mt=(u+(n=n+Math.imul(d,dt)|0)|0)+((8191&(i=(i=i+Math.imul(d,vt)|0)+Math.imul(v,dt)|0))<<13)|0;u=((a=a+Math.imul(v,vt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,Y),i=(i=Math.imul(B,W))+Math.imul(N,Y)|0,a=Math.imul(N,W),n=n+Math.imul(z,J)|0,i=(i=i+Math.imul(z,K)|0)+Math.imul(R,J)|0,a=a+Math.imul(R,K)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,tt)|0)+Math.imul(I,Q)|0,a=a+Math.imul(I,tt)|0,n=n+Math.imul(L,rt)|0,i=(i=i+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,a=a+Math.imul(C,nt)|0,n=n+Math.imul(M,at)|0,i=(i=i+Math.imul(M,ot)|0)+Math.imul(S,at)|0,a=a+Math.imul(S,ot)|0,n=n+Math.imul(T,lt)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(k,lt)|0,a=a+Math.imul(k,ut)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ht)|0)+Math.imul(_,ft)|0,a=a+Math.imul(_,ht)|0;var St=(u+(n=n+Math.imul(y,dt)|0)|0)+((8191&(i=(i=i+Math.imul(y,vt)|0)+Math.imul(m,dt)|0))<<13)|0;u=((a=a+Math.imul(m,vt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),i=(i=Math.imul(B,K))+Math.imul(N,J)|0,a=Math.imul(N,K),n=n+Math.imul(z,Q)|0,i=(i=i+Math.imul(z,tt)|0)+Math.imul(R,Q)|0,a=a+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,i=(i=i+Math.imul(O,nt)|0)+Math.imul(I,rt)|0,a=a+Math.imul(I,nt)|0,n=n+Math.imul(L,at)|0,i=(i=i+Math.imul(L,ot)|0)+Math.imul(C,at)|0,a=a+Math.imul(C,ot)|0,n=n+Math.imul(M,lt)|0,i=(i=i+Math.imul(M,ut)|0)+Math.imul(S,lt)|0,a=a+Math.imul(S,ut)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ht)|0)+Math.imul(k,ft)|0,a=a+Math.imul(k,ht)|0;var Et=(u+(n=n+Math.imul(b,dt)|0)|0)+((8191&(i=(i=i+Math.imul(b,vt)|0)+Math.imul(_,dt)|0))<<13)|0;u=((a=a+Math.imul(_,vt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,Q),i=(i=Math.imul(B,tt))+Math.imul(N,Q)|0,a=Math.imul(N,tt),n=n+Math.imul(z,rt)|0,i=(i=i+Math.imul(z,nt)|0)+Math.imul(R,rt)|0,a=a+Math.imul(R,nt)|0,n=n+Math.imul(O,at)|0,i=(i=i+Math.imul(O,ot)|0)+Math.imul(I,at)|0,a=a+Math.imul(I,ot)|0,n=n+Math.imul(L,lt)|0,i=(i=i+Math.imul(L,ut)|0)+Math.imul(C,lt)|0,a=a+Math.imul(C,ut)|0,n=n+Math.imul(M,ft)|0,i=(i=i+Math.imul(M,ht)|0)+Math.imul(S,ft)|0,a=a+Math.imul(S,ht)|0;var Lt=(u+(n=n+Math.imul(T,dt)|0)|0)+((8191&(i=(i=i+Math.imul(T,vt)|0)+Math.imul(k,dt)|0))<<13)|0;u=((a=a+Math.imul(k,vt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,rt),i=(i=Math.imul(B,nt))+Math.imul(N,rt)|0,a=Math.imul(N,nt),n=n+Math.imul(z,at)|0,i=(i=i+Math.imul(z,ot)|0)+Math.imul(R,at)|0,a=a+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,i=(i=i+Math.imul(O,ut)|0)+Math.imul(I,lt)|0,a=a+Math.imul(I,ut)|0,n=n+Math.imul(L,ft)|0,i=(i=i+Math.imul(L,ht)|0)+Math.imul(C,ft)|0,a=a+Math.imul(C,ht)|0;var Ct=(u+(n=n+Math.imul(M,dt)|0)|0)+((8191&(i=(i=i+Math.imul(M,vt)|0)+Math.imul(S,dt)|0))<<13)|0;u=((a=a+Math.imul(S,vt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,at),i=(i=Math.imul(B,ot))+Math.imul(N,at)|0,a=Math.imul(N,ot),n=n+Math.imul(z,lt)|0,i=(i=i+Math.imul(z,ut)|0)+Math.imul(R,lt)|0,a=a+Math.imul(R,ut)|0,n=n+Math.imul(O,ft)|0,i=(i=i+Math.imul(O,ht)|0)+Math.imul(I,ft)|0,a=a+Math.imul(I,ht)|0;var Pt=(u+(n=n+Math.imul(L,dt)|0)|0)+((8191&(i=(i=i+Math.imul(L,vt)|0)+Math.imul(C,dt)|0))<<13)|0;u=((a=a+Math.imul(C,vt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),i=(i=Math.imul(B,ut))+Math.imul(N,lt)|0,a=Math.imul(N,ut),n=n+Math.imul(z,ft)|0,i=(i=i+Math.imul(z,ht)|0)+Math.imul(R,ft)|0,a=a+Math.imul(R,ht)|0;var Ot=(u+(n=n+Math.imul(O,dt)|0)|0)+((8191&(i=(i=i+Math.imul(O,vt)|0)+Math.imul(I,dt)|0))<<13)|0;u=((a=a+Math.imul(I,vt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ft),i=(i=Math.imul(B,ht))+Math.imul(N,ft)|0,a=Math.imul(N,ht);var It=(u+(n=n+Math.imul(z,dt)|0)|0)+((8191&(i=(i=i+Math.imul(z,vt)|0)+Math.imul(R,dt)|0))<<13)|0;u=((a=a+Math.imul(R,vt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863;var Dt=(u+(n=Math.imul(B,dt))|0)+((8191&(i=(i=Math.imul(B,vt))+Math.imul(N,dt)|0))<<13)|0;return u=((a=Math.imul(N,vt))+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,l[0]=gt,l[1]=yt,l[2]=mt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=Tt,l[8]=kt,l[9]=At,l[10]=Mt,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=Pt,l[16]=Ot,l[17]=It,l[18]=Dt,0!==u&&(l[19]=u,r.length++),r};function v(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(d=p),a.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?d(this,t,e):n<63?p(this,t,e):n<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a<r.length-1;a++){var o=i;i=0;for(var s=67108863&n,l=Math.min(a,e.length-1),u=Math.max(0,a-t.length+1);u<=l;u++){var c=a-u,f=(0|t.words[c])*(0|e.words[u]),h=67108863&f;s=67108863&(h=h+s|0),i+=(o=(o=o+(f/67108864|0)|0)+(h>>>26)|0)>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}(this,t,e):v(this,t,e),r},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o<a;o++)n[o]=e[t[o]],i[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),u=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var f=l,h=u,p=0;p<o;p++){var d=r[c+p],v=n[c+p],g=r[c+p+o],y=n[c+p+o],m=f*g-h*y;y=f*y+h*g,g=m,r[c+p]=d+g,n[c+p]=v+y,r[c+p+o]=d-g,n[c+p+o]=v-y,p!==s&&(m=l*f-u*h,h=l*h+u*f,f=m)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},g.prototype.convert13b=function(t,e,r,i){for(var a=0,o=0;o<e;o++)a+=0|t[o],r[2*o]=8191&a,a>>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o<i;++o)r[o]=0;n(0===a),n(0==(-8192&a))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),a=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),u=new Array(n),c=new Array(n),f=new Array(n),h=r.words;h.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,u,n),this.transform(o,a,s,l,n,i),this.transform(u,a,c,f,n,i);for(var p=0;p<n;p++){var d=s[p]*c[p]-l[p]*f[p];l[p]=s[p]*f[p]+l[p]*c[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,h,a,n,i),this.conjugate(h,a,n),this.normalize13b(h,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),v(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){n(\"number\"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}(t);if(0===e.length)return new a(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},a.prototype.iushln=function(t){n(\"number\"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,r){var i;n(\"number\"==typeof t&&t>=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=r;if(i-=o,i=Math.max(0,i),l){for(var u=0;u<o;u++)l.words[u]=this.words[u];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,u=0;u<this.length;u++)this.words[u]=this.words[u+o];else this.words[0]=0,this.length=1;var c=0;for(u=this.length-1;u>=0&&(0!==c||u>=i);u--){var f=0|this.words[u];this.words[u]=c<<26-a|f>>>a,c=f&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n(\"number\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;return!(this.length<=r||!(this.words[r]&i))},a.prototype.imaskn=function(t){n(\"number\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return n(\"number\"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n(\"number\"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,r){var i,a,o=t.length+r;this._expand(o);var s=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+s;var l=(0|t.words[i])*e;s=((a-=67108863&l)>>26)-(l/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)s=(a=(0|this.words[i+r])+s)>>26,this.words[i+r]=67108863&a;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)s=(a=-(0|this.words[i])+s)>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if(\"mod\"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var u=0;u<s.length;u++)s.words[u]=0}var c=n.clone()._ishlnsubmul(i,1,l);0===c.negative&&(n=c,s&&(s.words[l]=1));for(var f=l-1;f>=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),n.strip(),\"div\"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),\"mod\"!==e&&(i=s.div.neg()),\"div\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),\"mod\"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),\"div\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?\"div\"===e?{div:this.divn(t.words[0]),mod:null}:\"mod\"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,\"div\",!1).div},a.prototype.mod=function(t){return this.divmod(t,\"mod\",!1).mod},a.prototype.umod=function(t){return this.divmod(t,\"mod\",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),f=e.clone();!e.isZero();){for(var h=0,p=1;0==(e.words[0]&p)&&h<26;++h,p<<=1);if(h>0)for(e.iushrn(h);h-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(c),o.isub(f)),i.iushrn(1),o.iushrn(1);for(var d=0,v=1;0==(r.words[0]&v)&&d<26;++d,v<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(f)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(u)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n(\"number\"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var a=i,o=r;0!==a&&o<this.length;o++){var s=0|this.words[o];a=(s+=a)>>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,\"Number is too big\");var i=0|this.words[0];e=i===t?0:i<t?-1:1}return 0!==this.negative?0|-e:e},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new T(t)},a.prototype.toRed=function(t){return n(!this.red,\"Already a number in reduction context\"),n(0===this.negative,\"red works only with positives\"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,\"Already a number in reduction context\"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,\"redAdd works only with red numbers\"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,\"redSub works only with red numbers\"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,\"redISub works only with red numbers\"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,\"redShl works only with red numbers\"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,t)};var y={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){m.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function b(){m.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function _(){m.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function w(){m.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function T(t){if(\"string\"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),\"modulus must be greater than 1\"),this.m=t,this.prime=null}function k(t){T.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},i(x,m),x.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=a&r,i=10;i<t.length;i++){var o=0|t.words[i];t.words[i-10]=(o&r)<<4|a>>>22,a=o}a>>>=22,t.words[i-10]=a,0===a&&t.length>10?t.length-=10:t.length-=9},x.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,m),i(_,m),i(w,m),w.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(y[t])return y[t];var e;if(\"k256\"===t)e=new x;else if(\"p224\"===t)e=new b;else if(\"p192\"===t)e=new _;else{if(\"p25519\"!==t)throw new Error(\"Unknown prime \"+t);e=new w}return y[t]=e,e},T.prototype._verify1=function(t){n(0===t.negative,\"red works only with positives\"),n(t.red,\"red works only with red numbers\")},T.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),\"red works only with positives\"),n(t.red&&t.red===e.red,\"red works only with red numbers\")},T.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},T.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},T.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},T.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},T.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},T.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},T.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},T.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},T.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},T.prototype.isqr=function(t){return this.imul(t,t.clone())},T.prototype.sqr=function(t){return this.mul(t,t)},T.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,u).cmp(l);)c.redIAdd(l);for(var f=this.pow(c,i),h=this.pow(t,i.addn(1).iushrn(1)),p=this.pow(t,i),d=o;0!==p.cmp(s);){for(var v=p,g=0;0!==v.cmp(s);g++)v=v.redSqr();n(g<d);var y=this.pow(f,new a(1).iushln(d-g-1));h=h.redMul(y),f=y.redSqr(),p=p.redMul(f),d=g}return h},T.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},T.prototype.pow=function(t,e){if(e.isZero())return new a(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new a(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var i=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var u=e.words[n],c=l-1;c>=0;c--){var f=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==f||0!==o?(o<<=1,o|=f,(4==++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},T.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},T.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new k(t)},i(k,T),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t=r.nmd(t),this)},2692:function(t){\"use strict\";t.exports=function(t){var e,r,n,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],u=l.length;for(r=0;r<u;++r){var c=o[s++]=new Array(u-1),f=0;for(n=0;n<u;++n)n!==r&&(c[f++]=l[n]);if(1&r){var h=c[1];c[1]=c[0],c[0]=h}}}return o}},2569:function(t,e,r){\"use strict\";t.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],u(i=t,i,c,!0),n;case 2:return\"function\"==typeof e?u(t,t,e,!0):function(t,e){return n=[],u(t,e,c,!1),n}(t,e);case 3:return u(t,e,r,!1);default:throw new Error(\"box-intersect: Invalid arguments\")}var i};var n,i=r(5306),a=r(1390),o=r(2337);function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var i=0,a=0,o=0,l=t.length;o<l;++o){var u=t[o];if(!s(e,u)){for(var c=0;c<2*e;++c)r[i++]=u[c];n[a++]=o}}return a}function u(t,e,r,n){var s=t.length,u=e.length;if(!(s<=0||u<=0)){var c=t[0].length>>>1;if(!(c<=0)){var f,h=i.mallocDouble(2*c*s),p=i.mallocInt32(s);if((s=l(t,c,h,p))>0){if(1===c&&n)a.init(s),f=a.sweepComplete(c,r,0,s,h,p,0,s,h,p);else{var d=i.mallocDouble(2*c*u),v=i.mallocInt32(u);(u=l(e,c,d,v))>0&&(a.init(s+u),f=1===c?a.sweepBipartite(c,r,0,s,h,p,0,u,d,v):o(c,r,n,s,h,p,u,d,v),i.free(d),i.free(v))}i.free(h),i.free(p)}return f}}}function c(t,e){n.push([t,e])}},7333:function(t,e){\"use strict\";function r(t){return t?function(t,e,r,n,i,a,o,s,l,u,c){return i-n>l-s?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=u[e+m+t],_=c[y];if(!(b<d||v<x)){for(var w=e+1;w<t;++w){var T=a[w+p],k=a[w+t+p],A=u[w+m],M=u[w+t+m];if(k<A||M<T)continue t}var S=r(g,_);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=u[e+p+t],g=c[h];t:for(var y=n,m=f*n;y<i;++y,m+=f){var x=a[e+m],b=a[e+m+t],_=o[y];if(!(v<x||b<d)){for(var w=e+1;w<t;++w){var T=a[w+m],k=a[w+t+m],A=u[w+p],M=u[w+t+p];if(k<A||M<T)continue t}var S=r(_,g);if(void 0!==S)return S}}}}(t,e,r,n,i,a,o,s,l,u,c)}:function(t,e,r,n,i,a,o,s,l,u,c,f){return a-i>u-l?n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<=d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(b,g);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=n,p=f*n;h<i;++h,p+=f){var d=a[e+p],v=a[e+p+t],g=o[h];t:for(var y=s,m=f*s;y<l;++y,m+=f){var x=u[e+m],b=c[y];if(!(x<d||v<x)){for(var _=e+1;_<t;++_){var w=a[_+p],T=a[_+t+p],k=u[_+m],A=u[_+t+m];if(T<k||A<w)continue t}var M=r(g,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):n?function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<=m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(v,b);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f):function(t,e,r,n,i,a,o,s,l,u,c){for(var f=2*t,h=s,p=f*s;h<l;++h,p+=f){var d=u[e+p],v=c[h];t:for(var g=n,y=f*n;g<i;++g,y+=f){var m=a[e+y],x=a[e+y+t],b=o[g];if(!(d<m||x<d)){for(var _=e+1;_<t;++_){var w=a[_+y],T=a[_+t+y],k=u[_+p],A=u[_+t+p];if(T<k||A<w)continue t}var M=r(b,v);if(void 0!==M)return M}}}}(t,e,r,i,a,o,s,l,u,c,f)}}e.partial=r(!1),e.full=r(!0)},2337:function(t,e,r){\"use strict\";t.exports=function(t,e,r,a,c,S,E,L,C){!function(t,e){var r=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(b*r);w.length<a&&(n.free(w),w=n.mallocInt32(a));var o=i.nextPow2(_*r);T.length<o&&(n.free(T),T=n.mallocDouble(o))}(t,a+E);var P,O=0,I=2*t;for(k(O++,0,0,a,0,E,r?16:0,-1/0,1/0),r||k(O++,0,0,E,0,a,1,-1/0,1/0);O>0;){var D=(O-=1)*b,z=w[D],R=w[D+1],F=w[D+2],B=w[D+3],N=w[D+4],j=w[D+5],U=O*_,V=T[U],H=T[U+1],q=1&j,G=!!(16&j),Z=c,Y=S,W=L,X=C;if(q&&(Z=L,Y=C,W=c,X=S),!(2&j&&R>=(F=g(t,z,R,F,Z,Y,H))||4&j&&(R=y(t,z,R,F,Z,Y,V))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,z,e,R,F,Z,Y,B,N,W,X)))return P;continue}}else{if(t*Math.min(J,K)<f){if(void 0!==(P=o(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}if(t*J*K<h){if(void 0!==(P=l.scanBipartite(t,z,e,q,R,F,Z,Y,B,N,W,X)))return P;continue}}var $=d(t,z,R,F,Z,Y,V,H);if(R<$)if(t*($-R)<f){if(void 0!==(P=s(t,z+1,e,R,$,Z,Y,B,N,W,X)))return P}else if(z===t-2){if(void 0!==(P=q?l.sweepBipartite(t,e,B,N,W,X,R,$,Z,Y):l.sweepBipartite(t,e,R,$,Z,Y,B,N,W,X)))return P}else k(O++,z+1,R,$,B,N,q,-1/0,1/0),k(O++,z+1,B,N,R,$,1^q,-1/0,1/0);if($<F){var Q=u(t,z,B,N,W,X),tt=W[I*Q+z],et=v(t,z,Q,N,W,X,tt);if(et<N&&k(O++,z,$,F,et,N,(4|q)+(G?16:0),tt,H),B<Q&&k(O++,z,$,F,B,Q,(2|q)+(G?16:0),V,tt),Q+1===et){if(void 0!==(P=G?M(t,z,e,$,F,Z,Y,Q,W,X[Q]):A(t,z,e,q,$,F,Z,Y,Q,W,X[Q])))return P}else if(Q<et){var rt;if(G){if($<(rt=m(t,z,$,F,Z,Y,tt))){var nt=v(t,z,$,rt,Z,Y,tt);if(z===t-2){if($<nt&&void 0!==(P=l.sweepComplete(t,e,$,nt,Z,Y,Q,et,W,X)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Z,Y,Q,et,W,X)))return P}else $<nt&&k(O++,z+1,$,nt,Q,et,16,-1/0,1/0),nt<rt&&(k(O++,z+1,nt,rt,Q,et,0,-1/0,1/0),k(O++,z+1,Q,et,nt,rt,1,-1/0,1/0))}}else $<(rt=q?x(t,z,$,F,Z,Y,tt):m(t,z,$,F,Z,Y,tt))&&(z===t-2?P=q?l.sweepBipartite(t,e,Q,et,W,X,$,rt,Z,Y):l.sweepBipartite(t,e,$,rt,Z,Y,Q,et,W,X):(k(O++,z+1,$,rt,Q,et,q,-1/0,1/0),k(O++,z+1,Q,et,$,rt,1^q,-1/0,1/0)))}}}}};var n=r(5306),i=r(2288),a=r(7333),o=a.partial,s=a.full,l=r(1390),u=r(2464),c=r(122),f=128,h=1<<22,p=1<<22,d=c(\"!(lo>=p0)&&!(p1>=hi)\"),v=c(\"lo===p0\"),g=c(\"lo<p0\"),y=c(\"hi<=p0\"),m=c(\"lo<=p0&&p0<=hi\"),x=c(\"lo<p0&&p0<=hi\"),b=6,_=2,w=n.mallocInt32(1024),T=n.mallocDouble(1024);function k(t,e,r,n,i,a,o,s,l){var u=b*t;w[u]=e,w[u+1]=r,w[u+2]=n,w[u+3]=i,w[u+4]=a,w[u+5]=o;var c=_*t;T[c]=s,T[c+1]=l}function A(t,e,r,n,i,a,o,s,l,u,c){var f=2*t,h=l*f,p=u[h+e];t:for(var d=i,v=i*f;d<a;++d,v+=f){var g=o[v+e],y=o[v+e+t];if(!(p<g||y<p||n&&p===g)){for(var m,x=s[d],b=e+1;b<t;++b){g=o[v+b],y=o[v+b+t];var _=u[h+b],w=u[h+b+t];if(y<_||w<g)continue t}if(void 0!==(m=n?r(c,x):r(x,c)))return m}}}function M(t,e,r,n,i,a,o,s,l,u){var c=2*t,f=s*c,h=l[f+e];t:for(var p=n,d=n*c;p<i;++p,d+=c){var v=o[p];if(v!==u){var g=a[d+e],y=a[d+e+t];if(!(h<g||y<h)){for(var m=e+1;m<t;++m){g=a[d+m],y=a[d+m+t];var x=l[f+m],b=l[f+m+t];if(y<x||b<g)continue t}var _=r(v,u);if(void 0!==_)return _}}}}},2464:function(t,e,r){\"use strict\";t.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;for(var u=r,c=o,f=o+r>>>1,h=2*t,p=f,d=s[h*f+e];u<c;){if(c-u<i){a(t,e,u,c,s,l),d=s[h*f+e];break}var v=c-u,g=Math.random()*v+u|0,y=s[h*g+e],m=Math.random()*v+u|0,x=s[h*m+e],b=Math.random()*v+u|0,_=s[h*b+e];y<=x?_>=x?(p=m,d=x):y>=_?(p=g,d=y):(p=b,d=_):x>=_?(p=m,d=x):_>=y?(p=g,d=y):(p=b,d=_);for(var w=h*(c-1),T=h*p,k=0;k<h;++k,++w,++T){var A=s[w];s[w]=s[T],s[T]=A}var M=l[c-1];for(l[c-1]=l[p],l[p]=M,w=h*(c-1),T=h*(p=n(t,e,u,c-1,s,l,d)),k=0;k<h;++k,++w,++T)A=s[w],s[w]=s[T],s[T]=A;if(M=l[c-1],l[c-1]=l[p],l[p]=M,f<p){for(c=p-1;u<c&&s[h*(c-1)+e]===d;)c-=1;c+=1}else{if(!(p<f))break;for(u=p+1;u<c&&s[h*u+e]===d;)u+=1}}return n(t,e,r,f,s,l,s[h*f+e])};var n=r(122)(\"lo<p0\"),i=8;function a(t,e,r,n,i,a){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var u=i[s],c=l,f=o*(l-1);c>r&&i[f+e]>u;--c,f-=o){for(var h=f,p=f+o,d=0;d<o;++d,++h,++p){var v=i[h];i[h]=i[p],i[p]=v}var g=a[c];a[c]=a[c-1],a[c-1]=g}}},122:function(t){\"use strict\";t.exports=function(t){return e[t]};var e={\"lo===p0\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]===o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\"lo<p0\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=r;n>h;++h,l+=s)if(i[l+f]<o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\"lo<=p0\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\"hi<=p0\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=t+e,h=r;n>h;++h,l+=s)if(i[l+f]<=o)if(c===h)c+=1,u+=s;else{for(var p=0;s>p;++p){var d=i[l+p];i[l+p]=i[u],i[u++]=d}var v=a[h];a[h]=a[c],a[c++]=v}return c},\"lo<p0&&p0<=hi\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},\"lo<=p0&&p0<=hi\":function(t,e,r,n,i,a,o){for(var s=2*t,l=s*r,u=l,c=r,f=e,h=t+e,p=r;n>p;++p,l+=s){var d=i[l+f],v=i[l+h];if(d<=o&&o<=v)if(c===p)c+=1,u+=s;else{for(var g=0;s>g;++g){var y=i[l+g];i[l+g]=i[u],i[u++]=y}var m=a[p];a[p]=a[c],a[c++]=m}}return c},\"!(lo>=p0)&&!(p1>=hi)\":function(t,e,r,n,i,a,o,s){for(var l=2*t,u=l*r,c=u,f=r,h=e,p=t+e,d=r;n>d;++d,u+=l){var v=i[u+h],g=i[u+p];if(!(v>=o||s>=g))if(f===d)f+=1,c+=l;else{for(var y=0;l>y;++y){var m=i[u+y];i[u+y]=i[c],i[c++]=m}var x=a[d];a[d]=a[f],a[f++]=x}}return f}}},309:function(t){\"use strict\";t.exports=function(t,n){n<=4*e?r(0,n-1,t):u(0,n-1,t)};var e=32;function r(t,e,r){for(var n=2*(t+1),i=t+1;i<=e;++i){for(var a=r[n++],o=r[n++],s=i,l=n-2;s-- >t;){var u=r[l-2],c=r[l-1];if(u<a)break;if(u===a&&c<o)break;r[l]=u,r[l+1]=c,l-=2}r[l]=a,r[l+1]=o}}function n(t,e,r){e*=2;var n=r[t*=2],i=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=i}function i(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function a(t,e,r,n){e*=2,r*=2;var i=n[t*=2],a=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=i,n[r+1]=a}function o(t,e,r,n,i){e*=2,i[t*=2]=i[e],i[e]=r,i[t+1]=i[e+1],i[e+1]=n}function s(t,e,r){e*=2;var n=r[t*=2],i=r[e];return!(n<i)&&(n!==i||r[t+1]>r[e+1])}function l(t,e,r,n){var i=n[t*=2];return i<e||i===e&&n[t+1]<r}function u(t,c,f){var h=(c-t+1)/6|0,p=t+h,d=c-h,v=t+c>>1,g=v-h,y=v+h,m=p,x=g,b=v,_=y,w=d,T=t+1,k=c-1,A=0;s(m,x,f)&&(A=m,m=x,x=A),s(_,w,f)&&(A=_,_=w,w=A),s(m,b,f)&&(A=m,m=b,b=A),s(x,b,f)&&(A=x,x=b,b=A),s(m,_,f)&&(A=m,m=_,_=A),s(b,_,f)&&(A=b,b=_,_=A),s(x,w,f)&&(A=x,x=w,w=A),s(x,b,f)&&(A=x,x=b,b=A),s(_,w,f)&&(A=_,_=w,w=A);for(var M=f[2*x],S=f[2*x+1],E=f[2*_],L=f[2*_+1],C=2*m,P=2*b,O=2*w,I=2*p,D=2*v,z=2*d,R=0;R<2;++R){var F=f[C+R],B=f[P+R],N=f[O+R];f[I+R]=F,f[D+R]=B,f[z+R]=N}i(g,t,f),i(y,c,f);for(var j=T;j<=k;++j)if(l(j,M,S,f))j!==T&&n(j,T,f),++T;else if(!l(j,E,L,f))for(;;){if(l(k,E,L,f)){l(k,M,S,f)?(a(j,T,k,f),++T,--k):(n(j,k,f),--k);break}if(--k<j)break}o(t,T-1,M,S,f),o(c,k+1,E,L,f),T-2-t<=e?r(t,T-2,f):u(t,T-2,f),c-(k+2)<=e?r(k+2,c,f):u(k+2,c,f),k-T<=e?r(T,k,f):u(T,k,f)}},1390:function(t,e,r){\"use strict\";t.exports={init:function(t){var e=i.nextPow2(t);l.length<e&&(n.free(l),l=n.mallocInt32(e)),u.length<e&&(n.free(u),u=n.mallocInt32(e)),c.length<e&&(n.free(c),c=n.mallocInt32(e)),f.length<e&&(n.free(f),f=n.mallocInt32(e)),h.length<e&&(n.free(h),h=n.mallocInt32(e)),p.length<e&&(n.free(p),p=n.mallocInt32(e));var r=8*e;d.length<r&&(n.free(d),d=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,i,s,h,p,y,m){for(var x=0,b=2*t,_=t-1,w=b-1,T=r;T<n;++T){var k=s[T],A=b*T;d[x++]=i[A+_],d[x++]=-(k+1),d[x++]=i[A+w],d[x++]=k}for(T=h;T<p;++T){k=m[T]+o;var M=b*T;d[x++]=y[M+_],d[x++]=-k,d[x++]=y[M+w],d[x++]=k}var S=x>>>1;a(d,S);var E=0,L=0;for(T=0;T<S;++T){var C=0|d[2*T+1];if(C>=o)v(c,f,L--,C=C-o|0);else if(C>=0)v(l,u,E--,C);else if(C<=-o){C=-C-o|0;for(var P=0;P<E;++P)if(void 0!==(O=e(l[P],C)))return O;g(c,f,L++,C)}else{for(C=-C-1|0,P=0;P<L;++P){var O;if(void 0!==(O=e(C,c[P])))return O}g(l,u,E++,C)}}},sweepComplete:function(t,e,r,n,i,o,s,y,m,x){for(var b=0,_=2*t,w=t-1,T=_-1,k=r;k<n;++k){var A=o[k]+1<<1,M=_*k;d[b++]=i[M+w],d[b++]=-A,d[b++]=i[M+T],d[b++]=A}for(k=s;k<y;++k){A=x[k]+1<<1;var S=_*k;d[b++]=m[S+w],d[b++]=1|-A,d[b++]=m[S+T],d[b++]=1|A}var E=b>>>1;a(d,E);var L=0,C=0,P=0;for(k=0;k<E;++k){var O=0|d[2*k+1],I=1&O;if(k<E-1&&O>>1==d[2*k+3]>>1&&(I=2,k+=1),O<0){for(var D=-(O>>1)-1,z=0;z<P;++z)if(void 0!==(R=e(h[z],D)))return R;if(0!==I)for(z=0;z<L;++z)if(void 0!==(R=e(l[z],D)))return R;if(1!==I)for(z=0;z<C;++z){var R;if(void 0!==(R=e(c[z],D)))return R}0===I?g(l,u,L++,D):1===I?g(c,f,C++,D):2===I&&g(h,p,P++,D)}else D=(O>>1)-1,0===I?v(l,u,L--,D):1===I?v(c,f,C--,D):2===I&&v(h,p,P--,D)}},scanBipartite:function(t,e,r,n,i,s,c,f,h,p,y,m){var x=0,b=2*t,_=e,w=e+t,T=1,k=1;n?k=o:T=o;for(var A=i;A<s;++A){var M=A+T,S=b*A;d[x++]=c[S+_],d[x++]=-M,d[x++]=c[S+w],d[x++]=M}for(A=h;A<p;++A){M=A+k;var E=b*A;d[x++]=y[E+_],d[x++]=-M}var L=x>>>1;a(d,L);var C=0;for(A=0;A<L;++A){var P=0|d[2*A+1];if(P<0){var O=!1;if((M=-P)>=o?(O=!n,M-=o):(O=!!n,M-=1),O)g(l,u,C++,M);else{var I=m[M],D=b*M,z=y[D+e+1],R=y[D+e+1+t];t:for(var F=0;F<C;++F){var B=l[F],N=b*B;if(!(R<c[N+e+1]||c[N+e+1+t]<z)){for(var j=e+2;j<t;++j)if(y[D+j+t]<c[N+j]||c[N+j+t]<y[D+j])continue t;var U,V=f[B];if(void 0!==(U=n?r(I,V):r(V,I)))return U}}}}else v(l,u,C--,P-T)}},scanComplete:function(t,e,r,n,i,s,u,c,f,h,p){for(var v=0,g=2*t,y=e,m=e+t,x=n;x<i;++x){var b=x+o,_=g*x;d[v++]=s[_+y],d[v++]=-b,d[v++]=s[_+m],d[v++]=b}for(x=c;x<f;++x){b=x+1;var w=g*x;d[v++]=h[w+y],d[v++]=-b}var T=v>>>1;a(d,T);var k=0;for(x=0;x<T;++x){var A=0|d[2*x+1];if(A<0)if((b=-A)>=o)l[k++]=b-o;else{var M=p[b-=1],S=g*b,E=h[S+e+1],L=h[S+e+1+t];t:for(var C=0;C<k;++C){var P=l[C],O=u[P];if(O===M)break;var I=g*P;if(!(L<s[I+e+1]||s[I+e+1+t]<E)){for(var D=e+2;D<t;++D)if(h[S+D+t]<s[I+D]||s[I+D+t]<h[S+D])continue t;var z=r(O,M);if(void 0!==z)return z}}}else{for(b=A-o,C=k-1;C>=0;--C)if(l[C]===b){for(D=C+1;D<k;++D)l[D-1]=l[D];break}--k}}}};var n=r(5306),i=r(2288),a=r(309),o=1<<28,s=1024,l=n.mallocInt32(s),u=n.mallocInt32(s),c=n.mallocInt32(s),f=n.mallocInt32(s),h=n.mallocInt32(s),p=n.mallocInt32(s),d=n.mallocDouble(8192);function v(t,e,r,n){var i=e[n],a=t[r-1];t[i]=a,e[a]=i}function g(t,e,r,n){t[r]=n,e[n]=r}},7761:function(t,e,r){\"use strict\";var n=r(9971),i=r(743),a=r(2161),o=r(7098);function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function u(t,e,r){return e in t?t[e]:r}t.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var c=!!u(r,\"delaunay\",!0),f=!!u(r,\"interior\",!0),h=!!u(r,\"exterior\",!0),p=!!u(r,\"infinity\",!1);if(!f&&!h||0===t.length)return[];var d=n(t,e);if(c||f!==h||p){for(var v=i(t.length,function(t){return t.map(s).sort(l)}(e)),g=0;g<d.length;++g){var y=d[g];v.addTriangle(y[0],y[1],y[2])}return c&&a(t,v),h?f?p?o(v,0,p):v.cells():o(v,1,p):o(v,-1)}return d}},2161:function(t,e,r){\"use strict\";var n=r(2227)[4];function i(t,e,r,i,a,o){var s=e.opposite(i,a);if(!(s<0)){if(a<i){var l=i;i=a,a=l,l=o,o=s,s=l}e.isConstraint(i,a)||n(t[i],t[a],t[o],t[s])<0&&r.push(i,a)}}r(5070),t.exports=function(t,e){for(var r=[],a=t.length,o=e.stars,s=0;s<a;++s)for(var l=o[s],u=1;u<l.length;u+=2)if(!((p=l[u])<s||e.isConstraint(s,p))){for(var c=l[u-1],f=-1,h=1;h<l.length;h+=2)if(l[h-1]===p){f=l[h];break}f<0||n(t[s],t[p],t[c],t[f])<0&&r.push(s,p)}for(;r.length>0;){for(var p=r.pop(),d=(c=-1,f=-1,l=o[s=r.pop()],1);d<l.length;d+=2){var v=l[d-1],g=l[d];v===p?f=g:g===p&&(c=v)}c<0||f<0||n(t[s],t[p],t[c],t[f])>=0||(e.flip(s,p),i(t,e,r,c,s,f),i(t,e,r,s,f,c),i(t,e,r,f,p,c),i(t,e,r,p,c,f))}}},7098:function(t,e,r){\"use strict\";var n,i=r(5070);function a(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}t.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,i=0;i<n;++i){var s=(y=r[i])[0],l=y[1],u=y[2];l<u?l<s&&(y[0]=l,y[1]=u,y[2]=s):u<s&&(y[0]=u,y[1]=s,y[2]=l)}r.sort(o);var c=new Array(n);for(i=0;i<c.length;++i)c[i]=0;var f=[],h=[],p=new Array(3*n),d=new Array(3*n),v=null;e&&(v=[]);var g=new a(r,p,d,c,f,h,v);for(i=0;i<n;++i)for(var y=r[i],m=0;m<3;++m){s=y[m],l=y[(m+1)%3];var x=p[3*i+m]=g.locate(l,s,t.opposite(l,s)),b=d[3*i+m]=t.isConstraint(s,l);x<0&&(b?h.push(i):(f.push(i),c[i]=1),e&&v.push([l,s,-1]))}return g}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;for(var i=1,s=n.active,l=n.next,u=n.flags,c=n.cells,f=n.constraint,h=n.neighbor;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(u[p]!==-i){u[p]=i,c[p];for(var d=0;d<3;++d){var v=h[3*p+d];v>=0&&0===u[v]&&(f[3*p+d]?l.push(v):(s.push(v),u[v]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var y=function(t,e,r){for(var n=0,i=0;i<t.length;++i)e[i]===r&&(t[n++]=t[i]);return t.length=n,t}(c,u,e);return r?y.concat(n.boundary):y},a.prototype.locate=(n=[0,0,0],function(t,e,r){var a=t,s=e,l=r;return e<r?e<t&&(a=e,s=r,l=t):r<t&&(a=r,s=t,l=e),a<0?-1:(n[0]=a,n[1]=s,n[2]=l,i.eq(this.cells,n,o))})},9971:function(t,e,r){\"use strict\";var n=r(5070),i=r(417)[3];function a(t,e,r,n,i){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=i}function o(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function s(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(0!==t.type&&(r=i(t.a,t.b,e.b))?r:t.idx-e.idx)}function l(t,e){return i(t.a,t.b,e)}function u(t,e,r,a,o){for(var s=n.lt(e,a,l),u=n.gt(e,a,l),c=s;c<u;++c){for(var f=e[c],h=f.lowerIds,p=h.length;p>1&&i(r[h[p-2]],r[h[p-1]],a)>0;)t.push([h[p-1],h[p-2],o]),p-=1;h.length=p,h.push(o);var d=f.upperIds;for(p=d.length;p>1&&i(r[d[p-2]],r[d[p-1]],a)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function c(t,e){var r;return(r=t.a[0]<e.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function f(t,e,r){var i=n.le(t,r,c),o=t[i],s=o.upperIds,l=s[s.length-1];o.upperIds=[l],t.splice(i+1,0,new a(r.a,r.b,r.idx,[l],s))}function h(t,e,r){var i=r.a;r.a=r.b,r.b=i;var a=n.eq(t,r,c),o=t[a];t[a-1].upperIds=o.upperIds,t.splice(a,1)}t.exports=function(t,e){for(var r=t.length,n=e.length,i=[],l=0;l<r;++l)i.push(new o(t[l],null,0,l));for(l=0;l<n;++l){var c=e[l],p=t[c[0]],d=t[c[1]];p[0]<d[0]?i.push(new o(p,d,2,l),new o(d,p,1,l)):p[0]>d[0]&&i.push(new o(d,p,2,l),new o(p,d,1,l))}i.sort(s);for(var v=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),g=[new a([v,1],[v,0],-1,[],[],[],[])],y=[],m=(l=0,i.length);l<m;++l){var x=i[l],b=x.type;0===b?u(y,g,t,x.a,x.idx):2===b?f(g,0,x):h(g,0,x)}return y}},743:function(t,e,r){\"use strict\";var n=r(5070);function i(t,e){this.stars=t,this.edges=e}t.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new i(r,e)};var a=i.prototype;function o(t,e,r){for(var n=1,i=t.length;n<i;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[i-2],t[n]=t[i-1],void(t.length=i-2)}a.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,i){return t[0]=Math.min(r,i),t[1]=Math.max(r,i),n.eq(this.edges,t,e)>=0}}(),a.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;n<i;n+=2)if(r[n]===t)return r[n-1];return-1},a.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},a.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},a.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},9887:function(t){\"use strict\";t.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},9243:function(t,e,r){\"use strict\";var n=r(3094),i=r(6606);function a(t,e){for(var r=0,n=t.length,i=0;i<n;++i)r+=t[i]*e[i];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*a(t[s],t[l]);o[s]=a(t[s],t[s])}var u=i(r,o),c=0,f=u[e+1];for(s=0;s<f.length;++s)c+=f[s];var h=new Array(e);for(s=0;s<e;++s){f=u[s];var p=0;for(l=0;l<f.length;++l)p+=f[l];h[s]=p/c}return h}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),i=o(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)r[s]+=t[a][s]*i[a];return r}s.barycenetric=o,t.exports=s},1778:function(t,e,r){t.exports=function(t){for(var e=n(t),r=0,i=0;i<t.length;++i)for(var a=t[i],o=0;o<e.length;++o)r+=Math.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)};var n=r(9243)},197:function(t,e,r){\"use strict\";t.exports=function(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;a<e.length;++a){var o=e[a];i[a]=[o[0],o[1],r[a]]}e=i}for(var s=function(t,e,r){var n=d(t,[],p(t));return y(e,n,r),!!n}(t,e,!!r);m(t,e,!!r);)s=!0;if(r&&s)for(n.length=0,r.length=0,a=0;a<e.length;++a)o=e[a],n.push([o[0],o[1]]),r.push(o[2]);return s};var n=r(1731),i=r(2569),a=r(4434),o=r(5125),s=r(8846),l=r(7999),u=r(2826),c=r(8551),f=r(5528);function h(t){var e=l(t);return[c(e,-1/0),c(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[c(n[0],-1/0),c(n[1],-1/0),c(n[0],1/0),c(n[1],1/0)]}return e}function d(t,e,r){for(var a=e.length,o=new n(a),s=[],l=0;l<e.length;++l){var u=e[l],f=h(u[0]),p=h(u[1]);s.push([c(f[0],-1/0),c(p[0],-1/0),c(f[1],1/0),c(p[1],1/0)])}i(s,(function(t,e){o.link(t,e)}));var d=!0,v=new Array(a);for(l=0;l<a;++l)(y=o.find(l))!==l&&(d=!1,t[y]=[Math.min(t[l][0],t[y][0]),Math.min(t[l][1],t[y][1])]);if(d)return null;var g=0;for(l=0;l<a;++l){var y;(y=o.find(l))===l?(v[l]=g,t[g++]=t[l]):v[l]=-1}for(t.length=g,l=0;l<a;++l)v[l]<0&&(v[l]=v[o.find(l)]);return v}function v(t,e){return t[0]-e[0]||t[1]-e[1]}function g(t,e){return t[0]-e[0]||t[1]-e[1]||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function y(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var i=e[(o=t[n])[0]],a=e[o[1]];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}else for(n=0;n<t.length;++n){var o;i=(o=t[n])[0],a=o[1],o[0]=Math.min(i,a),o[1]=Math.max(i,a)}r?t.sort(g):t.sort(v);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],u=t[n];(u[0]!==l[0]||u[1]!==l[1]||r&&u[2]!==l[2])&&(t[s++]=u)}t.length=s}}function m(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var i=e[n],a=t[i[0]],o=t[i[1]];r[n]=[c(Math.min(a[0],o[0]),-1/0),c(Math.min(a[1],o[1]),-1/0),c(Math.max(a[0],o[0]),1/0),c(Math.max(a[1],o[1]),1/0)]}return r}(t,e),h=function(t,e,r){var n=[];return i(r,(function(r,i){var o=e[r],s=e[i];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],u=t[o[1]],c=t[s[0]],f=t[s[1]];a(l,u,c,f)&&n.push([r,i])}})),n}(t,e,n),v=function(t,e,r,n){var o=[];return i(r,n,(function(r,n){var i=e[r];if(i[0]!==n&&i[1]!==n){var s=t[n],l=t[i[0]],u=t[i[1]];a(l,u,s,s)&&o.push([r,n])}})),o}(t,e,n,p(t)),g=function(t,e,r,n,i){var a,c,h=t.map((function(t){return[o(t[0]),o(t[1])]}));for(a=0;a<r.length;++a){var p=r[a];c=p[0];var d=p[1],v=e[c],g=e[d],y=f(u(t[v[0]]),u(t[v[1]]),u(t[g[0]]),u(t[g[1]]));if(y){var m=t.length;t.push([l(y[0]),l(y[1])]),h.push(y),n.push([c,m],[d,m])}}for(n.sort((function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=h[t[1]],n=h[e[1]];return s(r[0],n[0])||s(r[1],n[1])})),a=n.length-1;a>=0;--a){var x=e[c=(S=n[a])[0]],b=x[0],_=x[1],w=t[b],T=t[_];if((w[0]-T[0]||w[1]-T[1])<0){var k=b;b=_,_=k}x[0]=b;var A,M=x[1]=S[1];for(i&&(A=x[2]);a>0&&n[a-1][0]===c;){var S,E=(S=n[--a])[1];i?e.push([M,E,A]):e.push([M,E]),M=E}i?e.push([M,_,A]):e.push([M,_])}return h}(t,e,h,v,r),m=d(t,g);return y(e,m,r),!!m||h.length>0||v.length>0}},5528:function(t,e,r){\"use strict\";t.exports=function(t,e,r,n){var a=s(e,t),f=s(n,r),h=c(a,f);if(0===o(h))return null;var p=c(f,s(t,r)),d=i(p,h),v=u(a,d);return l(t,v)};var n=r(3962),i=r(9189),a=r(4354),o=r(4951),s=r(6695),l=r(7584),u=r(4469);function c(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},5692:function(t){t.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],\"rainbow-soft\":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],\"freesurface-blue\":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],\"freesurface-red\":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],\"velocity-blue\":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],\"velocity-green\":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},9156:function(t,e,r){\"use strict\";var n=r(5692),i=r(3578);function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r=\"#\",n=0;n<3;++n)r+=(\"00\"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return\"rgba(\"+t.join(\",\")+\")\"}t.exports=function(t){var e,r,l,u,c,f,h,p,d,v;if(t||(t={}),p=(t.nshades||72)-1,h=t.format||\"hex\",(f=t.colormap)||(f=\"jet\"),\"string\"==typeof f){if(f=f.toLowerCase(),!n[f])throw Error(f+\" not a supported colorscale\");c=n[f]}else{if(!Array.isArray(f))throw Error(\"unsupported colormap option\",f);c=f.slice()}if(c.length>p+1)throw new Error(f+\" map requires nshades to be at least size \"+c.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():\"number\"==typeof t.alpha?[t.alpha,t.alpha]:[1,1],e=c.map((function(t){return Math.round(t.index*p)})),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var g=c.map((function(t,e){var r=c[e].index,n=c[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1||(n[3]=d[0]+(d[1]-d[0])*r),n})),y=[];for(v=0;v<e.length-1;++v){u=e[v+1]-e[v],r=g[v],l=g[v+1];for(var m=0;m<u;m++){var x=m/u;y.push([Math.round(i(r[0],l[0],x)),Math.round(i(r[1],l[1],x)),Math.round(i(r[2],l[2],x)),i(r[3],l[3],x)])}}return y.push(c[c.length-1].rgb.concat(d[1])),\"hex\"===h?y=y.map(o):\"rgbaString\"===h?y=y.map(s):\"float\"===h&&(y=y.map(a)),y}},9398:function(t,e,r){\"use strict\";t.exports=function(t,e,r,a){var o=n(e,r,a);if(0===o){var s=i(n(t,e,r)),u=i(n(t,e,a));if(s===u){if(0===s){var c=l(t,e,r);return c===l(t,e,a)?0:c?1:-1}return 0}return 0===u?s>0||l(t,e,a)?-1:1:0===s?u>0||l(t,e,r)?1:-1:i(u-s)}var f=n(t,e,r);return f>0?o>0&&n(t,e,a)>0?1:-1:f<0?o>0||n(t,e,a)>0?1:-1:n(t,e,a)>0||l(t,e,r)?1:-1};var n=r(417),i=r(7538),a=r(87),o=r(2019),s=r(9662);function l(t,e,r){var n=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(r[0],-e[0]),u=a(r[1],-e[1]),c=s(o(n,l),o(i,u));return c[c.length-1]>=0}},7538:function(t){\"use strict\";t.exports=function(t){return t<0?-1:t>0?1:0}},9209:function(t){t.exports=function(t,n){var i=t.length,a=t.length-n.length;if(a)return a;switch(i){case 0:return 0;case 1:return t[0]-n[0];case 2:return t[0]+t[1]-n[0]-n[1]||e(t[0],t[1])-e(n[0],n[1]);case 3:var o=t[0]+t[1],s=n[0]+n[1];if(a=o+t[2]-(s+n[2]))return a;var l=e(t[0],t[1]),u=e(n[0],n[1]);return e(l,t[2])-e(u,n[2])||e(l+t[2],o)-e(u+n[2],s);case 4:var c=t[0],f=t[1],h=t[2],p=t[3],d=n[0],v=n[1],g=n[2],y=n[3];return c+f+h+p-(d+v+g+y)||e(c,f,h,p)-e(d,v,g,y,d)||e(c+f,c+h,c+p,f+h,f+p,h+p)-e(d+v,d+g,d+y,v+g,v+y,g+y)||e(c+f+h,c+f+p,c+h+p,f+h+p)-e(d+v+g,d+v+y,d+g+y,v+g+y);default:for(var m=t.slice().sort(r),x=n.slice().sort(r),b=0;b<i;++b)if(a=m[b]-x[b])return a;return 0}};var e=Math.min;function r(t,e){return t-e}},1284:function(t,e,r){\"use strict\";var n=r(9209),i=r(9887);t.exports=function(t,e){return n(t,e)||i(t)-i(e)}},5537:function(t,e,r){\"use strict\";var n=r(8950),i=r(8722),a=r(3332);t.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;return 0===r?[]:1===r?n(t):2===r?i(t):a(t,r)}},8950:function(t){\"use strict\";t.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},8722:function(t,e,r){\"use strict\";t.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var i=new Array(r),a=e[r-1],o=0;o<r;++o){var s=e[o];i[o]=[a,s],a=s}return i};var n=r(3266)},3332:function(t,e,r){\"use strict\";t.exports=function(t,e){try{return n(t,!0)}catch(o){var r=i(t);if(r.length<=e)return[];var a=function(t,e){for(var r=t.length,n=new Array(r),i=0;i<e.length;++i)n[i]=t[e[i]];var a=e.length;for(i=0;i<r;++i)e.indexOf(i)<0&&(n[a++]=t[i]);return n}(t,r);return function(t,e){for(var r=t.length,n=e.length,i=0;i<r;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<n)a[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}(n(a,!0),r)}};var n=r(2183),i=r(2153)},9680:function(t){\"use strict\";t.exports=function(t,e,r,n,i,a){var o=i-1,s=i*i,l=o*o,u=(1+2*i)*l,c=i*l,f=s*(3-2*i),h=s*o;if(t.length){a||(a=new Array(t.length));for(var p=t.length-1;p>=0;--p)a[p]=u*t[p]+c*e[p]+f*r[p]+h*n[p];return a}return u*t+c*e+f*r+h*n},t.exports.derivative=function(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,u=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var c=t.length-1;c>=0;--c)a[c]=o*t[c]+s*e[c]+l*r[c]+u*n[c];return a}return o*t+s*e+l*r[c]+u*n}},4419:function(t,e,r){\"use strict\";var n=r(2183),i=r(1215);function a(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,i=r.length,a=0;a<i;++a){var o=n[a]-r[a];if(o)return o}return 0}t.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map((function(t,e){return[t[0],e]}));n.sort((function(t,e){return t[0]-e[0]}));for(var i=new Array(t-1),a=1;a<t;++a){var o=n[a-1],s=n[a];i[a-1]=[o[1],s[1]]}return r&&i.push([-1,i[0][1]],[i[t-1][1],-1]),i}(r,t,e);for(var l=new Array(r),u=1,c=0;c<r;++c){for(var f=t[c],h=new Array(s+1),p=0,d=0;d<s;++d){var v=f[d];h[d]=v,p+=v*v}h[s]=p,l[c]=new a(h,c),u=Math.max(p,u)}i(l,o),r=l.length;var g=new Array(r+s+1),y=new Array(r+s+1),m=(s+1)*(s+1)*u,x=new Array(s+1);for(c=0;c<=s;++c)x[c]=0;for(x[s]=m,g[0]=x.slice(),y[0]=-1,c=0;c<=s;++c)(h=x.slice())[c]=1,g[c+1]=h,y[c+1]=-1;for(c=0;c<r;++c){var b=l[c];g[c+s+1]=b.point,y[c+s+1]=b.index}var _=n(g,!1);if(_=e?_.filter((function(t){for(var e=0,r=0;r<=s;++r){var n=y[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0})):_.filter((function(t){for(var e=0;e<=s;++e){var r=y[t[e]];if(r<0)return!1;t[e]=r}return!0})),1&s)for(c=0;c<_.length;++c)h=(b=_[c])[0],b[0]=b[1],b[1]=h;return _}},8362:function(t){var e=!1;if(\"undefined\"!=typeof Float64Array){var r=new Float64Array(1),n=new Uint32Array(r.buffer);r[0]=1,e=!0,1072693248===n[1]?(t.exports=function(t){return r[0]=t,[n[0],n[1]]},t.exports.pack=function(t,e){return n[0]=t,n[1]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[0]},t.exports.hi=function(t){return r[0]=t,n[1]}):1072693248===n[0]?(t.exports=function(t){return r[0]=t,[n[1],n[0]]},t.exports.pack=function(t,e){return n[1]=t,n[0]=e,r[0]},t.exports.lo=function(t){return r[0]=t,n[1]},t.exports.hi=function(t){return r[0]=t,n[0]}):e=!1}if(!e){var i=new Buffer(8);t.exports=function(t){return i.writeDoubleLE(t,0,!0),[i.readUInt32LE(0,!0),i.readUInt32LE(4,!0)]},t.exports.pack=function(t,e){return i.writeUInt32LE(t,0,!0),i.writeUInt32LE(e,4,!0),i.readDoubleLE(0,!0)},t.exports.lo=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(0,!0)},t.exports.hi=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(4,!0)}}t.exports.sign=function(e){return t.exports.hi(e)>>>31},t.exports.exponent=function(e){return(t.exports.hi(e)<<1>>>21)-1023},t.exports.fraction=function(e){var r=t.exports.lo(e),n=t.exports.hi(e),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},t.exports.denormalized=function(e){return!(2146435072&t.exports.hi(e))}},3094:function(t){\"use strict\";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case\"number\":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case\"object\":if(\"number\"==typeof t.length)return e(t,r,0)}return[]}},8348:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=t.length;if(\"number\"!=typeof e){e=0;for(var i=0;i<r;++i){var a=t[i];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;var o=new Array(e);for(i=0;i<e;++i)o[i]=[];for(i=0;i<r;++i)o[(a=t[i])[0]].push(a[1]),o[a[1]].push(a[0]);for(var s=0;s<e;++s)n(o[s],(function(t,e){return t-e}));return o};var n=r(1215)},5795:function(t){\"use strict\";t.exports=function(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},8444:function(t,e,r){\"use strict\";t.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:return\"number\"==typeof t?new o(n=l(t),n,0):new o(t,l(t.length),0);case 2:var n;if(\"number\"==typeof e)return new o(t,n=l(t.length),+e);r=0;case 3:if(t.length!==e.length)throw new Error(\"state and velocity lengths must match\");return new o(t,e,r)}};var n=r(9680),i=r(5070);function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=i.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=i.le(e,t),s=this._scratch[0],l=this._state,u=this._velocity,c=this.dimension,f=this.bounds;if(o<0)for(var h=c-1,p=0;p<c;++p,--h)s[p]=l[h];else if(o>=r-1){h=l.length-1;var d=t-e[r-1];for(p=0;p<c;++p,--h)s[p]=l[h]+d*u[h]}else{h=c*(o+1)-1;var v=e[o],g=e[o+1]-v||1,y=this._scratch[1],m=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<c;++p,--h)y[p]=l[h],x[p]=u[h]*g,m[p]=l[h+c],b[p]=u[h+c]*g,_=_&&y[p]===m[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<c;++p)s[p]=y[p];else n(y,x,m,b,(t-v)/g,s)}var w=f[0],T=f[1];for(p=0;p<c;++p)s[p]=a(w[p],T[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,a=i.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,u=this.dimension;if(a>=r-1)for(var c=s.length-1,f=(e[r-1],0);f<u;++f,--c)o[f]=l[c];else{c=u*(a+1)-1;var h=e[a],p=e[a+1]-h||1,d=this._scratch[1],v=this._scratch[2],g=this._scratch[3],y=this._scratch[4],m=!0;for(f=0;f<u;++f,--c)d[f]=s[c],g[f]=l[c]*p,v[f]=s[c+u],y[f]=l[c+u]*p,m=m&&d[f]===v[f]&&g[f]===y[f]&&0===g[f];if(m)for(f=0;f<u;++f)o[f]=0;else for(n.derivative(d,g,v,y,(t-h)/p,o),f=0;f<u;++f)o[f]/=p}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1];this._time.push(e,t);for(var c=0;c<2;++c)for(var f=0;f<r;++f)n.push(n[o++]),i.push(0);for(this._time.push(t),f=r;f>0;--f)n.push(a(l[f-1],u[f-1],arguments[f])),i.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,u=l[0],c=l[1],f=s>1e-6?1/s:0;this._time.push(t);for(var h=r;h>0;--h){var p=a(u[h-1],c[h-1],arguments[h]);n.push(p),i.push((p-n[o++])*f)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,i=this.bounds,o=i[0],s=i[1];this._time.push(t);for(var l=e;l>0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1],c=t-e,f=c>1e-6?1/c:0;this._time.push(t);for(var h=r;h>0;--h){var p=arguments[h];n.push(a(l[h-1],u[h-1],n[o++]+p)),i.push(p*f)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,i=this._velocity,o=n.length-r,s=this.bounds,l=s[0],u=s[1],c=t-e;this._time.push(t);for(var f=r-1;f>=0;--f)n.push(a(l[f],u[f],n[o]+c*i[o])),i.push(0),o+=1}}},7080:function(t){\"use strict\";function e(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function r(t){return new e(t._color,t.key,t.value,t.left,t.right,t._count)}function n(t,r){return new e(t,r.key,r.value,r.left,r.right,r._count)}function i(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function a(t,e){this._compare=t,this.root=e}t.exports=function(t){return new a(t||p,null)};var o=a.prototype;function s(t,e){var r;return e.left&&(r=s(t,e.left))?r:(r=t(e.key,e.value))||(e.right?s(t,e.right):void 0)}function l(t,e,r,n){if(e(t,n.key)<=0){var i;if(n.left&&(i=l(t,e,r,n.left)))return i;if(i=r(n.key,n.value))return i}if(n.right)return l(t,e,r,n.right)}function u(t,e,r,n,i){var a,o=r(t,i.key),s=r(e,i.key);if(o<=0){if(i.left&&(a=u(t,e,r,n,i.left)))return a;if(s>0&&(a=n(i.key,i.value)))return a}if(s>0&&i.right)return u(t,e,r,n,i.right)}function c(t,e){this.tree=t,this._stack=e}Object.defineProperty(o,\"keys\",{get:function(){var t=[];return this.forEach((function(e,r){t.push(e)})),t}}),Object.defineProperty(o,\"values\",{get:function(){var t=[];return this.forEach((function(e,r){t.push(r)})),t}}),Object.defineProperty(o,\"length\",{get:function(){return this.root?this.root._count:0}}),o.insert=function(t,r){for(var o=this._compare,s=this.root,l=[],u=[];s;){var c=o(t,s.key);l.push(s),u.push(c),s=c<=0?s.left:s.right}l.push(new e(0,t,r,null,null,1));for(var f=l.length-2;f>=0;--f)s=l[f],u[f]<=0?l[f]=new e(s._color,s.key,s.value,l[f+1],s.right,s._count+1):l[f]=new e(s._color,s.key,s.value,s.left,l[f+1],s._count+1);for(f=l.length-1;f>1;--f){var h=l[f-1];if(s=l[f],1===h._color||1===s._color)break;var p=l[f-2];if(p.left===h)if(h.left===s){if(!(d=p.right)||0!==d._color){p._color=0,p.left=h.right,h._color=1,h.right=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).left===p?v.left=h:v.right=h);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else{if(!(d=p.right)||0!==d._color){h.right=s.left,p._color=0,p.left=s.right,s._color=1,s.left=h,s.right=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).left===p?v.left=s:v.right=s);break}h._color=1,p.right=n(1,d),p._color=0,f-=1}else if(h.right===s){if(!(d=p.left)||0!==d._color){p._color=0,p.right=h.left,h._color=1,h.left=p,l[f-2]=h,l[f-1]=s,i(p),i(h),f>=3&&((v=l[f-3]).right===p?v.right=h:v.left=h);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}else{var d;if(!(d=p.left)||0!==d._color){var v;h.left=s.right,p._color=0,p.right=s.left,s._color=1,s.right=h,s.left=p,l[f-2]=s,l[f-1]=h,i(p),i(h),i(s),f>=3&&((v=l[f-3]).right===p?v.right=s:v.left=s);break}h._color=1,p.left=n(1,d),p._color=0,f-=1}}return l[0]._color=1,new a(o,l[0])},o.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return s(t,this.root);case 2:return l(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return u(e,r,this._compare,t,this.root)}},Object.defineProperty(o,\"begin\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new c(this,t)}}),Object.defineProperty(o,\"end\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new c(this,t)}}),o.at=function(t){if(t<0)return new c(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new c(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new c(this,[])},o.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new c(this,n)},o.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new c(this,n)},o.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new c(this,n);r=i<=0?r.left:r.right}return new c(this,[])},o.remove=function(t){var e=this.find(t);return e?e.remove():this},o.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=c.prototype;function h(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function p(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,\"valid\",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,\"node\",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new c(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var o=new Array(t.length),s=t[t.length-1];o[o.length-1]=new e(s._color,s.key,s.value,s.left,s.right,s._count);for(var l=t.length-2;l>=0;--l)(s=t[l]).left===t[l+1]?o[l]=new e(s._color,s.key,s.value,o[l+1],s.right,s._count):o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);if((s=o[o.length-1]).left&&s.right){var u=o.length;for(s=s.left;s.right;)o.push(s),s=s.right;var c=o[u-1];for(o.push(new e(s._color,c.key,c.value,s.left,s.right,s._count)),o[u-1].key=s.key,o[u-1].value=s.value,l=o.length-2;l>=u;--l)s=o[l],o[l]=new e(s._color,s.key,s.value,s.left,o[l+1],s._count);o[u-1].left=o[u]}if(0===(s=o[o.length-1])._color){var f=o[o.length-2];for(f.left===s?f.left=null:f.right===s&&(f.right=null),o.pop(),l=0;l<o.length;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(s.left||s.right){for(s.left?h(s,s.left):s.right&&h(s,s.right),s._color=1,l=0;l<o.length-1;++l)o[l]._count--;return new a(this.tree._compare,o[0])}if(1===o.length)return new a(this.tree._compare,null);for(l=0;l<o.length;++l)o[l]._count--;var p=o[o.length-2];return function(t){for(var e,a,o,s,l=t.length-1;l>=0;--l){if(e=t[l],0===l)return void(e._color=1);if((a=t[l-1]).left===e){if((o=a.right).right&&0===o.right._color)return s=(o=a.right=r(o)).right=r(o.right),a.right=o.left,o.left=a,o.right=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),void(t[l-1]=o);if(o.left&&0===o.left._color)return s=(o=a.right=r(o)).left=r(o.left),a.right=s.left,o.left=s.right,s.left=a,s.right=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).left===a?u.left=s:u.right=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.right=n(0,o));a.right=n(0,o);continue}o=r(o),a.right=o.left,o.left=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).left===a?u.left=o:u.right=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}else{if((o=a.left).left&&0===o.left._color)return s=(o=a.left=r(o)).left=r(o.left),a.left=o.right,o.right=a,o.left=s,o._color=a._color,e._color=1,a._color=1,s._color=1,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),void(t[l-1]=o);if(o.right&&0===o.right._color)return s=(o=a.left=r(o)).right=r(o.right),a.left=s.right,o.right=s.left,s.right=a,s.left=o,s._color=a._color,a._color=1,o._color=1,e._color=1,i(a),i(o),i(s),l>1&&((u=t[l-2]).right===a?u.right=s:u.left=s),void(t[l-1]=s);if(1===o._color){if(0===a._color)return a._color=1,void(a.left=n(0,o));a.left=n(0,o);continue}var u;o=r(o),a.left=o.right,o.right=a,o._color=a._color,a._color=0,i(a),i(o),l>1&&((u=t[l-2]).right===a?u.right=o:u.left=o),t[l-1]=o,t[l]=a,l+1<t.length?t[l+1]=e:t.push(e),l+=2}}}(o),p.left===s?p.left=null:p.right=null,new a(this.tree._compare,o[0])},Object.defineProperty(f,\"key\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,\"value\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,\"index\",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\"hasNext\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var r=this._stack;if(0===r.length)throw new Error(\"Can't update empty node!\");var n=new Array(r.length),i=r[r.length-1];n[n.length-1]=new e(i._color,i.key,t,i.left,i.right,i._count);for(var o=r.length-2;o>=0;--o)(i=r[o]).left===r[o+1]?n[o]=new e(i._color,i.key,i.value,n[o+1],i.right,i._count):n[o]=new e(i._color,i.key,i.value,i.left,n[o+1],i._count);return new a(this.tree._compare,n[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\"hasPrev\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},7453:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=new c(t);return r.update(e),r};var n=r(9557),i=r(1681),a=r(1011),o=r(2864),s=r(8468),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function u(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function c(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=[\"auto\",\"auto\",\"auto\"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=[\"x\",\"y\",\"z\"],this.labelEnable=[!0,!0,!0],this.labelFont=\"sans-serif\",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=[\"auto\",\"auto\",\"auto\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=a(t)}var f=c.prototype;function h(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}f.update=function(t){function e(e,r,n){if(n in t){var i,a=t[n],o=this[n];(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?this[n]=i=[r(a[0]),r(a[1]),r(a[2])]:this[n]=i=[r(a),r(a),r(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var r,a=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),u=e.bind(this,!0,(function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]})),c=!1,f=!1;if(\"bounds\"in t)for(var h=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)h[p][d]!==this.bounds[p][d]&&(f=!0),this.bounds[p][d]=h[p][d];if(\"ticks\"in t)for(r=t.ticks,c=!0,this.autoTicks=!1,p=0;p<3;++p)this.tickSpacing[p]=0;else a(\"tickSpacing\")&&(this.autoTicks=!0,f=!0);if(this._firstInit&&(\"ticks\"in t||\"tickSpacing\"in t||(this.autoTicks=!0),f=!0,c=!0,this._firstInit=!1),f&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),c=!0),c){for(p=0;p<3;++p)r[p].sort((function(t,e){return t.x-e.x}));s.equal(r,this.ticks)?c=!1:this.ticks=r}o(\"tickEnable\"),l(\"tickFont\")&&(c=!0),a(\"tickSize\"),a(\"tickAngle\"),a(\"tickPad\"),u(\"tickColor\");var v=l(\"labels\");l(\"labelFont\")&&(v=!0),o(\"labelEnable\"),a(\"labelSize\"),a(\"labelPad\"),u(\"labelColor\"),o(\"lineEnable\"),o(\"lineMirror\"),a(\"lineWidth\"),u(\"lineColor\"),o(\"lineTickEnable\"),o(\"lineTickMirror\"),a(\"lineTickLength\"),a(\"lineTickWidth\"),u(\"lineTickColor\"),o(\"gridEnable\"),a(\"gridWidth\"),u(\"gridColor\"),o(\"zeroEnable\"),u(\"zeroLineColor\"),a(\"zeroLineWidth\"),o(\"backgroundEnable\"),u(\"backgroundColor\"),this._text?this._text&&(v||c)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&c&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=i(this.gl,this.bounds,this.ticks))};var p=[new h,new h,new h];function d(t,e,r,n,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,u=n[e],c=0;c<3;++c)if(e!==c){var f=a,h=s,p=o,d=l;u&1<<c&&(f=s,h=a,p=l,d=o),f[c]=r[0][c],h[c]=r[1][c],i[c]>0?(p[c]=-1,d[c]=0):(p[c]=0,d[c]=1)}}var v=[0,0,0],g={model:l,view:l,projection:l,_ortho:!1};f.isOpaque=function(){return!0},f.isTransparent=function(){return!1},f.drawTransparent=function(t){};var y=[0,0,0],m=[0,0,0],x=[0,0,0];f.draw=function(t){t=t||g;for(var e=this.gl,r=t.model||l,n=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,c=o(r,n,i,a,s),f=c.cubeEdges,h=c.axis,b=n[12],_=n[13],w=n[14],T=n[15],k=(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*T)/e.drawingBufferHeight,A=0;A<3;++A)this.lastCubeProps.cubeEdges[A]=f[A],this.lastCubeProps.axis[A]=h[A];var M=p;for(A=0;A<3;++A)d(p[A],A,this.bounds,f,h);e=this.gl;var S,E,L,C=v;for(A=0;A<3;++A)this.backgroundEnable[A]?C[A]=h[A]:C[A]=0;for(this._background.draw(r,n,i,a,C,this.backgroundColor),this._lines.bind(r,n,i,this),A=0;A<3;++A){var P=[0,0,0];h[A]>0?P[A]=a[1][A]:P[A]=a[0][A];for(var O=0;O<2;++O){var I=(A+1+O)%3,D=(A+1+(1^O))%3;this.gridEnable[I]&&this._lines.drawGrid(I,D,this.bounds,P,this.gridColor[I],this.gridWidth[I]*this.pixelRatio)}for(O=0;O<2;++O)I=(A+1+O)%3,D=(A+1+(1^O))%3,this.zeroEnable[D]&&Math.min(a[0][D],a[1][D])<=0&&Math.max(a[0][D],a[1][D])>=0&&this._lines.drawZero(I,D,this.bounds,P,this.zeroLineColor[D],this.zeroLineWidth[D]*this.pixelRatio)}for(A=0;A<3;++A){this.lineEnable[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].primalOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio),this.lineMirror[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].mirrorOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio);var z=u(y,M[A].primalMinor),R=u(m,M[A].mirrorMinor),F=this.lineTickLength;for(O=0;O<3;++O){var B=k/r[5*O];z[O]*=F[O]*B,R[O]*=F[O]*B}this.lineTickEnable[A]&&this._lines.drawAxisTicks(A,M[A].primalOffset,z,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio),this.lineTickMirror[A]&&this._lines.drawAxisTicks(A,M[A].mirrorOffset,R,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio)}function N(t){(L=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,i=(t+2)%3,a=e[n],o=e[i],s=r[n],l=r[i];a>0&&l>0||a>0&&l<0||a<0&&l>0||a<0&&l<0?N(n):(o>0&&s>0||o>0&&s<0||o<0&&s>0||o<0&&s<0)&&N(i)}for(this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio),A=0;A<3;++A){var U=M[A].primalMinor,V=M[A].mirrorMinor,H=u(x,M[A].primalOffset);for(O=0;O<3;++O)this.lineTickEnable[A]&&(H[O]+=k*U[O]*Math.max(this.lineTickLength[O],0)/r[5*O]);var q=[0,0,0];if(q[A]=1,this.tickEnable[A]){for(-3600===this.tickAngle[A]?(this.tickAngle[A]=0,this.tickAlign[A]=\"auto\"):this.tickAlign[A]=-1,E=1,\"auto\"===(S=[this.tickAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(\"\"+S[0]),L=[0,0,0],j(A,U,V),O=0;O<3;++O)H[O]+=k*U[O]*this.tickPad[O]/r[5*O];this._text.drawTicks(A,this.tickSize[A],this.tickAngle[A],H,this.tickColor[A],q,L,S)}if(this.labelEnable[A]){for(E=0,L=[0,0,0],this.labels[A].length>4&&(N(A),E=1),\"auto\"===(S=[this.labelAlign[A],.5,E])[0]?S[0]=0:S[0]=parseInt(\"\"+S[0]),O=0;O<3;++O)H[O]+=k*U[O]*this.labelPad[O]/r[5*O];H[A]+=.5*(a[0][A]+a[1][A]),this._text.drawLabel(A,this.labelSize[A],this.labelAngle[A],H,this.labelColor[A],[0,0,0],L,S)}}this._text.unbind()},f.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},1011:function(t,e,r){\"use strict\";t.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var u=(l+1)%3,c=(l+2)%3,f=[0,0,0],h=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),f[l]=p,h[l]=p;for(var d=-1;d<=1;d+=2){f[u]=d;for(var v=-1;v<=1;v+=2)f[c]=v,e.push(f[0],f[1],f[2],h[0],h[1],h[2]),s+=1}var g=u;u=c,c=g}var y=n(t,new Float32Array(e)),m=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=i(t,[{buffer:y,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:y,type:t.FLOAT,size:3,offset:12,stride:24}],m),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,y,x,b)};var n=r(5827),i=r(2944),a=r(1943).bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},2864:function(t,e,r){\"use strict\";t.exports=function(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var m=0,x=0;x<2;++x){c[2]=a[x][2];for(var b=0;b<2;++b){c[1]=a[b][1];for(var _=0;_<2;++_)c[0]=a[_][0],h(l[m],c,s),m+=1}}var w=-1;for(x=0;x<8;++x){for(var T=l[x][3],k=0;k<3;++k)u[x][k]=l[x][k]/T;p&&(u[x][2]*=-1),T<0&&(w<0||u[x][2]<u[w][2])&&(w=x)}if(w<0){w=0;for(var A=0;A<3;++A){for(var M=(A+2)%3,S=(A+1)%3,E=-1,L=-1,C=0;C<2;++C){var P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);o(u[I],u[P],u[O],f)<0||(C?E=1:L=1)}if(E<0||L<0)L>E&&(w|=1<<A);else{for(C=0;C<2;++C){P=(I=C<<A)+(C<<M)+(1-C<<S),O=I+(1-C<<M)+(C<<S);var I,D=d([l[I],l[P],l[O],l[I+(1<<M)+(1<<S)]]);C?E=D:L=D}L>E&&(w|=1<<A)}}}var z=7^w,R=-1;for(x=0;x<8;++x)x!==w&&x!==z&&(R<0||u[R][1]>u[x][1])&&(R=x);var F=-1;for(x=0;x<3;++x)(N=R^1<<x)!==w&&N!==z&&(F<0&&(F=N),(S=u[N])[0]<u[F][0]&&(F=N));var B=-1;for(x=0;x<3;++x){var N;(N=R^1<<x)!==w&&N!==z&&N!==F&&(B<0&&(B=N),(S=u[N])[0]>u[B][0]&&(B=N))}var j=v;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^B)]=R&B;var U=7^B;U===w||U===z?(U=7^F,j[n.log2(B^U)]=U&B):j[n.log2(F^U)]=U&F;var V=g,H=w;for(A=0;A<3;++A)V[A]=H&1<<A?-1:1;return y};var n=r(2288),i=r(104),a=r(4670),o=r(417),s=new Array(16),l=new Array(8),u=new Array(8),c=new Array(3),f=[0,0,0];function h(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var i=0;i<3;++i)t[n]+=e[i]*r[4*i+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],u[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=a.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],i=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],u=s[0]/s[3]-n,c=s[1]/s[3]-i,f=l[0]/l[3]-n,h=l[1]/l[3]-i;o+=Math.abs(u*h-c*f)}return o}var v=[1,1,1],g=[0,0,0],y={cubeEdges:v,axis:g}},1681:function(t,e,r){\"use strict\";t.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var f=0;f<3;++f){for(var h=o.length/3|0,d=0;d<r[f].length;++d){var v=+r[f][d].x;o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1)}var g=o.length/3|0;s[f]=h,l[f]=g-h,h=o.length/3|0;for(var y=0;y<r[f].length;++y)v=+r[f][y].x,o.push(v,0,1,v,1,1,v,0,-1,v,0,-1,v,1,1,v,1,-1);g=o.length/3|0,u[f]=h,c[f]=g-h}var m=n(t,new Float32Array(o)),x=i(t,[{buffer:m,type:t.FLOAT,size:3,stride:0,offset:0}]),b=a(t);return b.attributes.position.location=0,new p(t,m,x,b,l,s,c,u)};var n=r(5827),i=r(2944),a=r(1943).j,o=[0,0,0],s=[0,0,0],l=[0,0,0],u=[0,0,0],c=[1,1];function f(t){return t[0]=t[1]=t[2]=0,t}function h(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,c[0]=this.gl.drawingBufferWidth,c[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=c,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,i){var a=f(s);this.shader.uniforms.majorAxis=s,a[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=a;var o,c=h(u,r);c[t]+=e[0][t],this.shader.uniforms.offset=c,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=n,(o=f(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=f(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,i){if(this.tickCount[t]){var a=f(o);a[t]=1,this.shader.uniforms.majorAxis=a,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=i;var s=f(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,i,a){if(this.gridCount[t]){var c=f(s);c[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=c;var p=h(u,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=f(o);d[t]=1,this.shader.uniforms.majorAxis=d;var v=f(l);v[t]=1,this.shader.uniforms.screenAxis=v,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,i,a){var o=f(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var c=h(u,n);c[t]+=r[0][t],this.shader.uniforms.offset=c;var p=f(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},1943:function(t,e,r){\"use strict\";var n=r(6832),i=r(5158),a=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\\nuniform float lineWidth;\\nuniform vec2 screenShape;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nvoid main() {\\n  vec3 major = position.x * majorAxis;\\n  vec3 minor = position.y * minorAxis;\\n\\n  vec3 vPosition = major + minor + offset;\\n  vec3 pPosition = project(vPosition);\\n  vec3 offset = project(vPosition + screenAxis * position.z);\\n\\n  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\\n\\n  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\\n}\\n\"]),o=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = color;\\n}\"]);e.j=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"}])};var s=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, axis, alignDir, alignOpt;\\nuniform float scale, angle, pixelScale;\\nuniform vec2 resolution;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nfloat computeViewAngle(vec3 a, vec3 b) {\\n  vec3 A = project(a);\\n  vec3 B = project(b);\\n\\n  return atan(\\n    (B.y - A.y) * resolution.y,\\n    (B.x - A.x) * resolution.x\\n  );\\n}\\n\\nconst float PI = 3.141592;\\nconst float TWO_PI = 2.0 * PI;\\nconst float HALF_PI = 0.5 * PI;\\nconst float ONE_AND_HALF_PI = 1.5 * PI;\\n\\nint option = int(floor(alignOpt.x + 0.001));\\nfloat hv_ratio =       alignOpt.y;\\nbool enableAlign =    (alignOpt.z != 0.0);\\n\\nfloat mod_angle(float a) {\\n  return mod(a, PI);\\n}\\n\\nfloat positive_angle(float a) {\\n  return mod_angle((a < 0.0) ?\\n    a + TWO_PI :\\n    a\\n  );\\n}\\n\\nfloat look_upwards(float a) {\\n  float b = positive_angle(a);\\n  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\\n    b - PI :\\n    b;\\n}\\n\\nfloat look_horizontal_or_vertical(float a, float ratio) {\\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\\n  // if ratio is set to 0.5 then it is 50%, 50%.\\n  // when using a higher ratio e.g. 0.75 the result would\\n  // likely be more horizontal than vertical.\\n\\n  float b = positive_angle(a);\\n\\n  return\\n    (b < (      ratio) * HALF_PI) ? 0.0 :\\n    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\\n    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\\n    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\\n                                    0.0;\\n}\\n\\nfloat roundTo(float a, float b) {\\n  return float(b * floor((a + 0.5 * b) / b));\\n}\\n\\nfloat look_round_n_directions(float a, int n) {\\n  float b = positive_angle(a);\\n  float div = TWO_PI / float(n);\\n  float c = roundTo(b, div);\\n  return look_upwards(c);\\n}\\n\\nfloat applyAlignOption(float rawAngle, float delta) {\\n  return\\n    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\\n    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\\n    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\\n    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\\n    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\\n                    rawAngle;                // otherwise return back raw input angle\\n}\\n\\nbool isAxisTitle = (axis.x == 0.0) &&\\n                   (axis.y == 0.0) &&\\n                   (axis.z == 0.0);\\n\\nvoid main() {\\n  //Compute world offset\\n  float axisDistance = position.z;\\n  vec3 dataPosition = axisDistance * axis + offset;\\n\\n  float beta = angle; // i.e. user defined attributes for each tick\\n\\n  float axisAngle;\\n  float clipAngle;\\n  float flip;\\n\\n  if (enableAlign) {\\n    axisAngle = (isAxisTitle) ? HALF_PI :\\n                      computeViewAngle(dataPosition, dataPosition + axis);\\n    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\\n\\n    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\\n    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\\n\\n    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\\n                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\\n\\n    beta += applyAlignOption(clipAngle, flip * PI);\\n  }\\n\\n  //Compute plane offset\\n  vec2 planeCoord = position.xy * pixelScale;\\n\\n  mat2 planeXform = scale * mat2(\\n     cos(beta), sin(beta),\\n    -sin(beta), cos(beta)\\n  );\\n\\n  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\\n\\n  //Compute clip position\\n  vec3 clipPosition = project(dataPosition);\\n\\n  //Apply text offset in clip coordinates\\n  clipPosition += vec3(viewOffset, 0.0);\\n\\n  //Done\\n  gl_Position = vec4(clipPosition, 1.0);\\n}\"]),l=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = color;\\n}\"]);e.f=function(t){return i(t,s,l,null,[{name:\"position\",type:\"vec3\"}])};var u=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec3 normal;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 enable;\\nuniform vec3 bounds[2];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n\\n  vec3 signAxis = sign(bounds[1] - bounds[0]);\\n\\n  vec3 realNormal = signAxis * normal;\\n\\n  if(dot(realNormal, enable) > 0.0) {\\n    vec3 minRange = min(bounds[0], bounds[1]);\\n    vec3 maxRange = max(bounds[0], bounds[1]);\\n    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\\n    gl_Position = projection * view * model * vec4(nPosition, 1.0);\\n  } else {\\n    gl_Position = vec4(0,0,0,0);\\n  }\\n\\n  colorChannel = abs(realNormal);\\n}\"]),c=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 colors[3];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n  gl_FragColor = colorChannel.x * colors[0] +\\n                 colorChannel.y * colors[1] +\\n                 colorChannel.z * colors[2];\\n}\"]);e.bg=function(t){return i(t,u,c,null,[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}])}},9557:function(t,e,r){\"use strict\";t.exports=function(t,e,r,i,o,l){var u=n(t),f=a(t,[{buffer:u,size:3}]),h=s(t);h.attributes.position.location=0;var p=new c(t,h,u,f);return p.update(e,r,i,o,l),p};var n=r(5827),a=r(2944),o=r(875),s=r(1943).f,l=window||i.global||{},u=l.__TEXT_CACHE||{};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}l.__TEXT_CACHE={};var f=c.prototype,h=[0,0];f.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},f.unbind=function(){this.vao.unbind()},f.update=function(t,e,r,n,i){var a=[];function s(t,e,r,n,i,s){var l=u[r];l||(l=u[r]={});var c=l[e];c||(c=l[e]=function(t,e){try{return o(t,e)}catch(e){return console.warn('error vectorizing text:\"'+t+'\" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:\"center\",textBaseline:\"middle\",lineSpacing:i,styletags:s}));for(var f=(n||12)/12,h=c.positions,p=c.cells,d=0,v=p.length;d<v;++d)for(var g=p[d],y=2;y>=0;--y){var m=h[g[y]];a.push(f*m[0],-f*m[1],t)}}for(var l=[0,0,0],c=[0,0,0],f=[0,0,0],h=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){f[d]=a.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),h[d]=(a.length/3|0)-f[d],l[d]=a.length/3|0;for(var v=0;v<n[d].length;++v)n[d][v].text&&s(n[d][v].x,n[d][v].text,n[d][v].font||i,n[d][v].fontSize||12,1.25,p);c[d]=(a.length/3|0)-l[d]}this.buffer.update(a),this.tickOffset=l,this.tickCount=c,this.labelOffset=f,this.labelCount=h},f.drawTicks=function(t,e,r,n,i,a,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},f.drawLabel=function(t,e,r,n,i,a,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},f.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}},8468:function(t,e){\"use strict\";function r(t,e){var r=t+\"\",n=r.indexOf(\".\"),i=0;n>=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+\"\";if(s.indexOf(\"e\")>=0)return s;var l=o/a,u=o%a;o<0?(l=0|-Math.ceil(l),u=0|-u):(l=0|Math.floor(l),u|=0);var c=\"\"+l;if(o<0&&(c=\"-\"+c),i){for(var f=\"\"+u;f.length<i;)f=\"0\"+f;return c+\".\"+f}return c}e.create=function(t,e){for(var n=[],i=0;i<3;++i){for(var a=[],o=(t[0][i],t[1][i],0);o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:r(e[i],o)});for(o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:r(e[i],o)});n.push(a)}return n},e.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var i=t[r][n],a=e[r][n];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}},2771:function(t,e,r){\"use strict\";t.exports=function(t,e,r,l,f){var h=e.model||u,p=e.view||u,y=e.projection||u,m=e._ortho||!1,x=t.bounds,b=(f=f||a(h,p,y,x,m)).axis;o(c,p,h),o(c,y,c);for(var _=v,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var T=n(s(c,c));s(c,c);for(var k=0;k<3;++k){var A=(k+1)%3,M=(k+2)%3,S=g;t:for(w=0;w<2;++w){var E=[];if(b[k]<0!=!!w){S[k]=x[w][k];for(var L=0;L<2;++L){S[A]=x[L^w][A];for(var C=0;C<2;++C)S[M]=x[C^L^w][M],E.push(S.slice())}var P=m?5:4;for(L=P;L===P;++L){if(0===E.length)continue t;E=i.positive(E,T[L])}for(L=0;L<E.length;++L){M=E[L];var O=d(g,c,M,r,l);for(C=0;C<3;++C)_[C].lo=Math.min(_[C].lo,M[C]),_[C].hi=Math.max(_[C].hi,M[C]),C!==k&&(_[C].pixelsPerDataUnit=Math.min(_[C].pixelsPerDataUnit,Math.abs(O[C])))}}}}return _};var n=r(5795),i=r(4670),a=r(2864),o=r(104),s=r(2142),l=r(6342),u=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),c=new Float32Array(16);function f(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var h=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,i){for(var a=0;a<3;++a){for(var o=h,s=p,u=0;u<3;++u)s[u]=o[u]=r[u];s[3]=o[3]=1,s[a]+=1,l(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,l(o,o,e),o[3]<0&&(t[a]=1/0);var c=(o[0]/o[3]-s[0]/s[3])*n,f=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(c*c+f*f)}return t}var v=[new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0)],g=[0,0,0]},5827:function(t,e,r){\"use strict\";var n=r(5306),i=r(7498),a=r(5050),o=[\"uint8\",\"uint8_clamped\",\"uint16\",\"uint32\",\"int8\",\"int16\",\"int32\",\"float32\"];function s(t,e,r,n,i){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=i}var l=s.prototype;function u(t,e,r,n,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,n),o;if(o+a>r)throw new Error(\"gl-buffer: If resizing buffer, must not specify offset\");return t.bufferSubData(e,a,i),r}function c(t,e){for(var r=n.malloc(t.length,e),i=t.length,a=0;a<i;++a)r[a]=t[a];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if(\"number\"!=typeof e&&(e=-1),this.bind(),\"object\"==typeof t&&void 0!==t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r=\"float32\"),this.type===this.gl.ELEMENT_ARRAY_BUFFER&&(r=gl.getExtension(\"OES_element_index_uint\")&&\"uint16\"!==r?\"uint32\":\"uint16\"),r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=u(this.gl,this.type,this.length,this.usage,t.data,e):this.length=u(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=a(s,t.shape);i.assign(l,t),this.length=u(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var f;f=this.type===this.gl.ELEMENT_ARRAY_BUFFER?c(t,\"uint16\"):c(t,\"float32\"),this.length=u(this.gl,this.type,this.length,this.usage,e<0?f:f.subarray(0,t.length),e),n.free(f)}else if(\"object\"==typeof t&&\"number\"==typeof t.length)this.length=u(this.gl,this.type,this.length,this.usage,t,e);else{if(\"number\"!=typeof t&&void 0!==t)throw new Error(\"gl-buffer: Invalid data type\");if(e>=0)throw new Error(\"gl-buffer: Cannot specify offset when resizing buffer\");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},t.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error(\"gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER\");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error(\"gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\");var i=t.createBuffer(),a=new s(t,r,i,0,n);return a.update(e),a}},1140:function(t,e,r){\"use strict\";var n=r(2858);t.exports=function(t,e){var r=t.positions,i=t.vectors,a={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),a;for(var o=0,s=1/0,l=-1/0,u=1/0,c=-1/0,f=1/0,h=-1/0,p=null,d=null,v=[],g=1/0,y=!1,m=0;m<r.length;m++){var x=r[m];s=Math.min(x[0],s),l=Math.max(x[0],l),u=Math.min(x[1],u),c=Math.max(x[1],c),f=Math.min(x[2],f),h=Math.max(x[2],h);var b=i[m];if(n.length(b)>o&&(o=n.length(b)),m){var _=2*n.distance(p,x)/(n.length(d)+n.length(b));_?(g=Math.min(g,_),y=!1):y=!0}y||(p=x,d=b),v.push(b)}var w=[s,u,f],T=[l,c,h];e&&(e[0]=w,e[1]=T),0===o&&(o=1);var k=1/o;isFinite(g)||(g=1),a.vectorScale=g;var A=t.coneSize||.5;t.absoluteConeSize&&(A=t.absoluteConeSize*k),a.coneScale=A,m=0;for(var M=0;m<r.length;m++)for(var S=(x=r[m])[0],E=x[1],L=x[2],C=v[m],P=n.length(C)*k,O=0;O<8;O++){a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.positions.push([S,E,L,M++]),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vertexIntensity.push(P,P,P),a.vertexIntensity.push(P,P,P);var I=a.positions.length;a.cells.push([I-6,I-5,I-4],[I-3,I-2,I-1])}return a};var i=r(7234);t.exports.createMesh=r(5028),t.exports.createConeMesh=function(e,r){return t.exports.createMesh(e,r,{shaders:i,traceType:\"cone\"})}},5028:function(t,e,r){\"use strict\";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(104),l=r(7437),u=r(5050),c=r(9156),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e,r,n,i,a,o,s,l,u,c){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=u,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=c,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=f,this._view=f,this._projection=f,this._resolution=[1,1]}var p=h.prototype;p.isOpaque=function(){return this.opacity>=1},p.isTransparent=function(){return this.opacity<1},p.pickSlots=1,p.setPickBase=function(t){this.pickId=t},p.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\"lightPosition\"in t&&(this.lightPosition=t.lightPosition),\"opacity\"in t&&(this.opacity=t.opacity),\"ambient\"in t&&(this.ambientLight=t.ambient),\"diffuse\"in t&&(this.diffuseLight=t.diffuse),\"specular\"in t&&(this.specularLight=t.specular),\"roughness\"in t&&(this.roughness=t.roughness),\"fresnel\"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=c({colormap:t,nshades:256,format:\"rgba\"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,i=t.vectors;if(n&&r&&i){var a=[],o=[],s=[],l=[],f=[];this.cells=r,this.positions=n,this.vectors=i;var h=t.meshColor||[1,1,1,1],p=t.vertexIntensity,d=1/0,v=-1/0;if(p)if(t.vertexIntensityBounds)d=+t.vertexIntensityBounds[0],v=+t.vertexIntensityBounds[1];else for(var g=0;g<p.length;++g){var y=p[g];d=Math.min(d,y),v=Math.max(v,y)}else for(g=0;g<n.length;++g)y=n[g][2],d=Math.min(d,y),v=Math.max(v,y);for(this.intensity=p||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],g=0;g<n.length;++g)for(var m=n[g],x=0;x<3;++x)!isNaN(m[x])&&isFinite(m[x])&&(this.bounds[0][x]=Math.min(this.bounds[0][x],m[x]),this.bounds[1][x]=Math.max(this.bounds[1][x],m[x]));var b=0;t:for(g=0;g<r.length;++g){var _=r[g];if(3===_.length){for(x=0;x<3;++x){m=n[T=_[x]];for(var w=0;w<3;++w)if(isNaN(m[w])||!isFinite(m[w]))continue t}for(x=0;x<3;++x){var T;m=n[T=_[2-x]],a.push(m[0],m[1],m[2],m[3]);var k=i[T];o.push(k[0],k[1],k[2],k[3]||0);var A,M=h;3===M.length?s.push(M[0],M[1],M[2],1):s.push(M[0],M[1],M[2],M[3]),A=p?[(p[T]-d)/(v-d),0]:[(m[2]-d)/(v-d),0],l.push(A[0],A[1]),f.push(g)}b+=1}}this.triangleCount=b,this.trianglePositions.update(a),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(f))}},p.drawTransparent=p.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var u={model:r,view:n,projection:i,inverseModel:f.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};u.inverseModel=l(u.inverseModel,u.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(s(c,u.view,u.model),s(c,u.projection,c),l(c,c),o=0;o<3;++o)u.eyePosition[o]=c[12+o]/c[15];var h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];u.lightPosition[o]=p/h}if(this.triangleCount>0){var v=this.triShader;v.bind(),v.uniforms=u,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||f,n=t.view||f,i=t.projection||f,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3),i={position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return\"cone\"===this.traceType?i.index=Math.floor(r[1]/48):\"streamtube\"===this.traceType&&(i.intensity=this.intensity[r[1]],i.velocity=this.vectors[r[1]].slice(0,3),i.divergence=this.vectors[r[1]][3],i.index=e),i},p.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},t.exports=function(t,e,r){var s=r.shaders;1===arguments.length&&(t=(e=t).gl);var l=function(t,e){var r=n(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location=0,r.attributes.color.location=2,r.attributes.uv.location=3,r.attributes.vector.location=4,r}(t,s),c=function(t,e){var r=n(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location=0,r.attributes.id.location=1,r.attributes.vector.location=4,r}(t,s),f=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));f.generateMipmap(),f.minFilter=t.LINEAR_MIPMAP_LINEAR,f.magFilter=t.LINEAR;var p=i(t),d=i(t),v=i(t),g=i(t),y=i(t),m=new h(t,f,l,c,p,d,y,v,g,a(t,[{buffer:p,type:t.FLOAT,size:4},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:g,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:4}]),r.traceType||\"cone\");return m.update(e),m}},7234:function(t,e,r){var n=r(6832),i=n([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount = 8.0;\\n\\n  float index = rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment = floor(0.001 + index/6.0);\\n  float segmentIndex = index - (segment*6.0);\\n\\n  normal = -normalize(d);\\n\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle = (\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 = v1 - d;\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\n  vec3 v3 = v2 + x + y;\\n  if (segmentIndex < 3.0) {\\n    vec3 tx = u * sin(angle);\\n    vec3 ty = v * -cos(angle);\\n    vec3 tangent = tx + ty;\\n    normal = normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex == 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec3 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, coneScale, coneOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model & view changes.\\n  vec3 normal;\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * conePosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  = model * vec4(conePosition, 1.0);\\n  vec4 t_position  = view * conePosition;\\n  gl_Position      = projection * t_position;\\n\\n  f_color          = color;\\n  f_data           = conePosition.xyz;\\n  f_position       = position.xyz;\\n  f_uv             = uv;\\n}\\n\"]),a=n([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * opacity;\\n}\\n\"]),o=n([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount = 8.0;\\n\\n  float index = rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment = floor(0.001 + index/6.0);\\n  float segmentIndex = index - (segment*6.0);\\n\\n  normal = -normalize(d);\\n\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle = (\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 = v1 - d;\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\n  vec3 v3 = v2 + x + y;\\n  if (segmentIndex < 3.0) {\\n    vec3 tx = u * sin(angle);\\n    vec3 ty = v * -cos(angle);\\n    vec3 tangent = tx + ty;\\n    normal = normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex == 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float vectorScale, coneScale, coneOffset;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n  gl_Position = projection * view * conePosition;\\n  f_id        = id;\\n  f_position  = position.xyz;\\n}\\n\"]),s=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec3\"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec3\"}]}},1950:function(t){t.exports={0:\"NONE\",1:\"ONE\",2:\"LINE_LOOP\",3:\"LINE_STRIP\",4:\"TRIANGLES\",5:\"TRIANGLE_STRIP\",6:\"TRIANGLE_FAN\",256:\"DEPTH_BUFFER_BIT\",512:\"NEVER\",513:\"LESS\",514:\"EQUAL\",515:\"LEQUAL\",516:\"GREATER\",517:\"NOTEQUAL\",518:\"GEQUAL\",519:\"ALWAYS\",768:\"SRC_COLOR\",769:\"ONE_MINUS_SRC_COLOR\",770:\"SRC_ALPHA\",771:\"ONE_MINUS_SRC_ALPHA\",772:\"DST_ALPHA\",773:\"ONE_MINUS_DST_ALPHA\",774:\"DST_COLOR\",775:\"ONE_MINUS_DST_COLOR\",776:\"SRC_ALPHA_SATURATE\",1024:\"STENCIL_BUFFER_BIT\",1028:\"FRONT\",1029:\"BACK\",1032:\"FRONT_AND_BACK\",1280:\"INVALID_ENUM\",1281:\"INVALID_VALUE\",1282:\"INVALID_OPERATION\",1285:\"OUT_OF_MEMORY\",1286:\"INVALID_FRAMEBUFFER_OPERATION\",2304:\"CW\",2305:\"CCW\",2849:\"LINE_WIDTH\",2884:\"CULL_FACE\",2885:\"CULL_FACE_MODE\",2886:\"FRONT_FACE\",2928:\"DEPTH_RANGE\",2929:\"DEPTH_TEST\",2930:\"DEPTH_WRITEMASK\",2931:\"DEPTH_CLEAR_VALUE\",2932:\"DEPTH_FUNC\",2960:\"STENCIL_TEST\",2961:\"STENCIL_CLEAR_VALUE\",2962:\"STENCIL_FUNC\",2963:\"STENCIL_VALUE_MASK\",2964:\"STENCIL_FAIL\",2965:\"STENCIL_PASS_DEPTH_FAIL\",2966:\"STENCIL_PASS_DEPTH_PASS\",2967:\"STENCIL_REF\",2968:\"STENCIL_WRITEMASK\",2978:\"VIEWPORT\",3024:\"DITHER\",3042:\"BLEND\",3088:\"SCISSOR_BOX\",3089:\"SCISSOR_TEST\",3106:\"COLOR_CLEAR_VALUE\",3107:\"COLOR_WRITEMASK\",3317:\"UNPACK_ALIGNMENT\",3333:\"PACK_ALIGNMENT\",3379:\"MAX_TEXTURE_SIZE\",3386:\"MAX_VIEWPORT_DIMS\",3408:\"SUBPIXEL_BITS\",3410:\"RED_BITS\",3411:\"GREEN_BITS\",3412:\"BLUE_BITS\",3413:\"ALPHA_BITS\",3414:\"DEPTH_BITS\",3415:\"STENCIL_BITS\",3553:\"TEXTURE_2D\",4352:\"DONT_CARE\",4353:\"FASTEST\",4354:\"NICEST\",5120:\"BYTE\",5121:\"UNSIGNED_BYTE\",5122:\"SHORT\",5123:\"UNSIGNED_SHORT\",5124:\"INT\",5125:\"UNSIGNED_INT\",5126:\"FLOAT\",5386:\"INVERT\",5890:\"TEXTURE\",6401:\"STENCIL_INDEX\",6402:\"DEPTH_COMPONENT\",6406:\"ALPHA\",6407:\"RGB\",6408:\"RGBA\",6409:\"LUMINANCE\",6410:\"LUMINANCE_ALPHA\",7680:\"KEEP\",7681:\"REPLACE\",7682:\"INCR\",7683:\"DECR\",7936:\"VENDOR\",7937:\"RENDERER\",7938:\"VERSION\",9728:\"NEAREST\",9729:\"LINEAR\",9984:\"NEAREST_MIPMAP_NEAREST\",9985:\"LINEAR_MIPMAP_NEAREST\",9986:\"NEAREST_MIPMAP_LINEAR\",9987:\"LINEAR_MIPMAP_LINEAR\",10240:\"TEXTURE_MAG_FILTER\",10241:\"TEXTURE_MIN_FILTER\",10242:\"TEXTURE_WRAP_S\",10243:\"TEXTURE_WRAP_T\",10497:\"REPEAT\",10752:\"POLYGON_OFFSET_UNITS\",16384:\"COLOR_BUFFER_BIT\",32769:\"CONSTANT_COLOR\",32770:\"ONE_MINUS_CONSTANT_COLOR\",32771:\"CONSTANT_ALPHA\",32772:\"ONE_MINUS_CONSTANT_ALPHA\",32773:\"BLEND_COLOR\",32774:\"FUNC_ADD\",32777:\"BLEND_EQUATION_RGB\",32778:\"FUNC_SUBTRACT\",32779:\"FUNC_REVERSE_SUBTRACT\",32819:\"UNSIGNED_SHORT_4_4_4_4\",32820:\"UNSIGNED_SHORT_5_5_5_1\",32823:\"POLYGON_OFFSET_FILL\",32824:\"POLYGON_OFFSET_FACTOR\",32854:\"RGBA4\",32855:\"RGB5_A1\",32873:\"TEXTURE_BINDING_2D\",32926:\"SAMPLE_ALPHA_TO_COVERAGE\",32928:\"SAMPLE_COVERAGE\",32936:\"SAMPLE_BUFFERS\",32937:\"SAMPLES\",32938:\"SAMPLE_COVERAGE_VALUE\",32939:\"SAMPLE_COVERAGE_INVERT\",32968:\"BLEND_DST_RGB\",32969:\"BLEND_SRC_RGB\",32970:\"BLEND_DST_ALPHA\",32971:\"BLEND_SRC_ALPHA\",33071:\"CLAMP_TO_EDGE\",33170:\"GENERATE_MIPMAP_HINT\",33189:\"DEPTH_COMPONENT16\",33306:\"DEPTH_STENCIL_ATTACHMENT\",33635:\"UNSIGNED_SHORT_5_6_5\",33648:\"MIRRORED_REPEAT\",33901:\"ALIASED_POINT_SIZE_RANGE\",33902:\"ALIASED_LINE_WIDTH_RANGE\",33984:\"TEXTURE0\",33985:\"TEXTURE1\",33986:\"TEXTURE2\",33987:\"TEXTURE3\",33988:\"TEXTURE4\",33989:\"TEXTURE5\",33990:\"TEXTURE6\",33991:\"TEXTURE7\",33992:\"TEXTURE8\",33993:\"TEXTURE9\",33994:\"TEXTURE10\",33995:\"TEXTURE11\",33996:\"TEXTURE12\",33997:\"TEXTURE13\",33998:\"TEXTURE14\",33999:\"TEXTURE15\",34e3:\"TEXTURE16\",34001:\"TEXTURE17\",34002:\"TEXTURE18\",34003:\"TEXTURE19\",34004:\"TEXTURE20\",34005:\"TEXTURE21\",34006:\"TEXTURE22\",34007:\"TEXTURE23\",34008:\"TEXTURE24\",34009:\"TEXTURE25\",34010:\"TEXTURE26\",34011:\"TEXTURE27\",34012:\"TEXTURE28\",34013:\"TEXTURE29\",34014:\"TEXTURE30\",34015:\"TEXTURE31\",34016:\"ACTIVE_TEXTURE\",34024:\"MAX_RENDERBUFFER_SIZE\",34041:\"DEPTH_STENCIL\",34055:\"INCR_WRAP\",34056:\"DECR_WRAP\",34067:\"TEXTURE_CUBE_MAP\",34068:\"TEXTURE_BINDING_CUBE_MAP\",34069:\"TEXTURE_CUBE_MAP_POSITIVE_X\",34070:\"TEXTURE_CUBE_MAP_NEGATIVE_X\",34071:\"TEXTURE_CUBE_MAP_POSITIVE_Y\",34072:\"TEXTURE_CUBE_MAP_NEGATIVE_Y\",34073:\"TEXTURE_CUBE_MAP_POSITIVE_Z\",34074:\"TEXTURE_CUBE_MAP_NEGATIVE_Z\",34076:\"MAX_CUBE_MAP_TEXTURE_SIZE\",34338:\"VERTEX_ATTRIB_ARRAY_ENABLED\",34339:\"VERTEX_ATTRIB_ARRAY_SIZE\",34340:\"VERTEX_ATTRIB_ARRAY_STRIDE\",34341:\"VERTEX_ATTRIB_ARRAY_TYPE\",34342:\"CURRENT_VERTEX_ATTRIB\",34373:\"VERTEX_ATTRIB_ARRAY_POINTER\",34466:\"NUM_COMPRESSED_TEXTURE_FORMATS\",34467:\"COMPRESSED_TEXTURE_FORMATS\",34660:\"BUFFER_SIZE\",34661:\"BUFFER_USAGE\",34816:\"STENCIL_BACK_FUNC\",34817:\"STENCIL_BACK_FAIL\",34818:\"STENCIL_BACK_PASS_DEPTH_FAIL\",34819:\"STENCIL_BACK_PASS_DEPTH_PASS\",34877:\"BLEND_EQUATION_ALPHA\",34921:\"MAX_VERTEX_ATTRIBS\",34922:\"VERTEX_ATTRIB_ARRAY_NORMALIZED\",34930:\"MAX_TEXTURE_IMAGE_UNITS\",34962:\"ARRAY_BUFFER\",34963:\"ELEMENT_ARRAY_BUFFER\",34964:\"ARRAY_BUFFER_BINDING\",34965:\"ELEMENT_ARRAY_BUFFER_BINDING\",34975:\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",35040:\"STREAM_DRAW\",35044:\"STATIC_DRAW\",35048:\"DYNAMIC_DRAW\",35632:\"FRAGMENT_SHADER\",35633:\"VERTEX_SHADER\",35660:\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",35661:\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",35663:\"SHADER_TYPE\",35664:\"FLOAT_VEC2\",35665:\"FLOAT_VEC3\",35666:\"FLOAT_VEC4\",35667:\"INT_VEC2\",35668:\"INT_VEC3\",35669:\"INT_VEC4\",35670:\"BOOL\",35671:\"BOOL_VEC2\",35672:\"BOOL_VEC3\",35673:\"BOOL_VEC4\",35674:\"FLOAT_MAT2\",35675:\"FLOAT_MAT3\",35676:\"FLOAT_MAT4\",35678:\"SAMPLER_2D\",35680:\"SAMPLER_CUBE\",35712:\"DELETE_STATUS\",35713:\"COMPILE_STATUS\",35714:\"LINK_STATUS\",35715:\"VALIDATE_STATUS\",35716:\"INFO_LOG_LENGTH\",35717:\"ATTACHED_SHADERS\",35718:\"ACTIVE_UNIFORMS\",35719:\"ACTIVE_UNIFORM_MAX_LENGTH\",35720:\"SHADER_SOURCE_LENGTH\",35721:\"ACTIVE_ATTRIBUTES\",35722:\"ACTIVE_ATTRIBUTE_MAX_LENGTH\",35724:\"SHADING_LANGUAGE_VERSION\",35725:\"CURRENT_PROGRAM\",36003:\"STENCIL_BACK_REF\",36004:\"STENCIL_BACK_VALUE_MASK\",36005:\"STENCIL_BACK_WRITEMASK\",36006:\"FRAMEBUFFER_BINDING\",36007:\"RENDERBUFFER_BINDING\",36048:\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",36049:\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",36050:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",36051:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",36053:\"FRAMEBUFFER_COMPLETE\",36054:\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",36055:\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",36057:\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",36061:\"FRAMEBUFFER_UNSUPPORTED\",36064:\"COLOR_ATTACHMENT0\",36096:\"DEPTH_ATTACHMENT\",36128:\"STENCIL_ATTACHMENT\",36160:\"FRAMEBUFFER\",36161:\"RENDERBUFFER\",36162:\"RENDERBUFFER_WIDTH\",36163:\"RENDERBUFFER_HEIGHT\",36164:\"RENDERBUFFER_INTERNAL_FORMAT\",36168:\"STENCIL_INDEX8\",36176:\"RENDERBUFFER_RED_SIZE\",36177:\"RENDERBUFFER_GREEN_SIZE\",36178:\"RENDERBUFFER_BLUE_SIZE\",36179:\"RENDERBUFFER_ALPHA_SIZE\",36180:\"RENDERBUFFER_DEPTH_SIZE\",36181:\"RENDERBUFFER_STENCIL_SIZE\",36194:\"RGB565\",36336:\"LOW_FLOAT\",36337:\"MEDIUM_FLOAT\",36338:\"HIGH_FLOAT\",36339:\"LOW_INT\",36340:\"MEDIUM_INT\",36341:\"HIGH_INT\",36346:\"SHADER_COMPILER\",36347:\"MAX_VERTEX_UNIFORM_VECTORS\",36348:\"MAX_VARYING_VECTORS\",36349:\"MAX_FRAGMENT_UNIFORM_VECTORS\",37440:\"UNPACK_FLIP_Y_WEBGL\",37441:\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",37442:\"CONTEXT_LOST_WEBGL\",37443:\"UNPACK_COLORSPACE_CONVERSION_WEBGL\",37444:\"BROWSER_DEFAULT_WEBGL\"}},6603:function(t,e,r){var n=r(1950);t.exports=function(t){return n[t]}},3110:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl,r=n(e),o=i(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var u=new s(e,r,o,l);return u.update(t),u};var n=r(5827),i=r(2944),a=r(7667),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function u(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,i=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],s=n[13],l=n[14],u=n[15],c=(t._ortho?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*u)/e.drawingBufferHeight;this.vao.bind();for(var f=0;f<3;++f)e.lineWidth(this.lineWidth[f]*this.pixelRatio),r.capSize=this.capSize[f]*c,this.lineCount[f]&&e.drawArrays(e.LINES,this.lineOffset[f],this.lineCount[f]);this.vao.unbind()};var c=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(n+e)%3]=i,r.push(a)}t[e]=r}return t}();function f(t,e,r,n){for(var i=c[n],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}l.update=function(t){\"lineWidth\"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),\"capSize\"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var i=[],a=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<a;++l){for(var c=r[l],h=0;h<3;++h)if(isNaN(c[h])||!isFinite(c[h]))continue t;var p,d=n[l],v=e[s];Array.isArray(v[0])&&(v=e[l]),3===v.length?v=[v[0],v[1],v[2],1]:4===v.length&&(v=[v[0],v[1],v[2],v[3]],!this.hasAlpha&&v[3]<1&&(this.hasAlpha=!0)),isNaN(d[0][s])||isNaN(d[1][s])||(d[0][s]<0&&((p=c.slice())[s]+=d[0][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)),d[1][s]>0&&((p=c.slice())[s]+=d[1][s],i.push(c[0],c[1],c[2],v[0],v[1],v[2],v[3],0,0,0,p[0],p[1],p[2],v[0],v[1],v[2],v[3],0,0,0),u(this.bounds,p),o+=2+f(i,p,v,s)))}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},7667:function(t,e,r){\"use strict\";var n=r(6832),i=r(5158),a=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, offset;\\nattribute vec4 color;\\nuniform mat4 model, view, projection;\\nuniform float capSize;\\nvarying vec4 fragColor;\\nvarying vec3 fragPosition;\\n\\nvoid main() {\\n  vec4 worldPosition  = model * vec4(position, 1.0);\\n  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\\n  gl_Position         = projection * view * worldPosition;\\n  fragColor           = color;\\n  fragPosition        = position;\\n}\"]),o=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float opacity;\\nvarying vec3 fragPosition;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\\n    fragColor.a * opacity == 0.\\n  ) discard;\\n\\n  gl_FragColor = opacity * fragColor;\\n}\"]);t.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"offset\",type:\"vec3\"}])}},4234:function(t,e,r){\"use strict\";var n=r(8931);t.exports=function(t,e,r,n){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var u=t.getExtension(\"WEBGL_draw_buffers\");if(!l&&u&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;a<n;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(a=n;a<r;++a)i[a]=t.NONE;l[n]=i}}(t,u),Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]),\"number\"!=typeof e)throw new Error(\"gl-fbo: Missing shape parameter\");var c=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>c||r<0||r>c)throw new Error(\"gl-fbo: Parameters are too large for FBO\");var f=1;if(\"color\"in(n=n||{})){if((f=Math.max(0|n.color,0))<0)throw new Error(\"gl-fbo: Must specify a nonnegative number of colors\");if(f>1){if(!u)throw new Error(\"gl-fbo: Multiple draw buffer extension not supported\");if(f>t.getParameter(u.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error(\"gl-fbo: Context does not support \"+f+\" draw buffers\")}}var h=t.UNSIGNED_BYTE,p=t.getExtension(\"OES_texture_float\");if(n.float&&f>0){if(!p)throw new Error(\"gl-fbo: Context does not support floating point textures\");h=t.FLOAT}else n.preferFloat&&f>0&&p&&(h=t.FLOAT);var v=!0;\"depth\"in n&&(v=!!n.depth);var g=!1;return\"stencil\"in n&&(g=!!n.stencil),new d(t,e,r,h,f,v,g,u)};var i,a,o,s,l=null;function u(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function c(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function f(t){switch(t){case i:throw new Error(\"gl-fbo: Framebuffer unsupported\");case a:throw new Error(\"gl-fbo: Framebuffer incomplete attachment\");case o:throw new Error(\"gl-fbo: Framebuffer incomplete dimensions\");case s:throw new Error(\"gl-fbo: Framebuffer incomplete missing attachment\");default:throw new Error(\"gl-fbo: Framebuffer failed for unspecified reason\")}}function h(t,e,r,i,a,o){if(!i)return null;var s=n(t,e,r,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var d=0;d<i;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=a,this._useStencil=o;var v=this,g=[0|e,0|r];Object.defineProperties(g,{0:{get:function(){return v._shape[0]},set:function(t){return v.width=t}},1:{get:function(){return v._shape[1]},set:function(t){return v.height=t}}}),this._shapeVector=g,function(t){var e=u(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),i=t._shape[0],a=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,v=t._useDepth,g=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var y=0;y<o;++y)t.color[y]=h(r,i,a,g,r.RGBA,r.COLOR_ATTACHMENT0+y);0===o?(t._color_rb=p(r,i,a,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var m=r.getExtension(\"WEBGL_depth_texture\");m?d?t.depth=h(r,i,a,m.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v&&(t.depth=h(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):v&&d?t._depth_rb=p(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):v?t._depth_rb=p(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),y=0;y<t.color.length;++y)t.color[y].dispose(),t.color[y]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),c(r,e),f(x)}c(r,e)}(this)}var v=d.prototype;function g(t,e,r){if(t._destroyed)throw new Error(\"gl-fbo: Can't resize destroyed FBO\");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,i=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\"gl-fbo: Can't resize FBO, invalid dimensions\");t._shape[0]=e,t._shape[1]=r;for(var a=u(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),c(n,a),f(s)),c(n,a)}}Object.defineProperties(v,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error(\"gl-fbo: Shape vector must be length 2\");var e=0|t[0],r=0|t[1];return g(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return g(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,g(this,this._shape[0],t),t},enumerable:!1}}),v.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},v.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},3530:function(t,e,r){var n=r(8974).sprintf,i=r(6603),a=r(9365),o=r(8008);t.exports=function(t,e,r){\"use strict\";var s=a(e)||\"of unknown name (see npm glsl-shader-name)\",l=\"unknown type\";void 0!==r&&(l=r===i.FRAGMENT_SHADER?\"fragment\":\"vertex\");for(var u=n(\"Error compiling %s shader %s:\\n\",l,s),c=n(\"%s%s\",u,t),f=t.split(\"\\n\"),h={},p=0;p<f.length;p++){var d=f[p];if(\"\"!==d&&\"\\0\"!==d){var v=parseInt(d.split(\":\")[2]);if(isNaN(v))throw new Error(n(\"Could not parse error: %s\",d));h[v]=d}}var g=o(e).split(\"\\n\");for(p=0;p<g.length;p++)if((h[p+3]||h[p+2]||h[p+1])&&(u+=g[p]+\"\\n\",h[p+1])){var y=h[p+1];y=y.substr(y.split(\":\",3).join(\":\").length+1).trim(),u+=n(\"^^^ %s\\n\\n\",y)}return{long:u.trim(),short:c.trim()}}},6386:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=t.gl,n=new u(t,o(r,l.vertex,l.fragment),o(r,l.pickVertex,l.pickFragment),s(r),s(r),s(r),s(r));return n.update(e),t.addObject(n),n};var n=r(5070),i=r(9560),a=r(5306),o=r(5158),s=r(5827),l=r(1292);function u(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var c,f=u.prototype,h=[0,0,1,0,0,1,1,0,1,1,0,1];f.draw=(c=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var i=t.gl,a=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=a[2]-a[0],u=a[3]-a[1];c[0]=2*o/l,c[4]=2*s/u,c[6]=2*(r[0]-a[0])/l-1,c[7]=2*(r[1]-a[1])/u-1,e.bind();var f=e.uniforms;f.viewTransform=c,f.shape=this.shape;var h=e.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),f.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,u=a[2]-a[0],c=a[3]-a[1],f=l[2]-l[0],h=l[3]-l[1];t[0]=2*u/f,t[4]=2*c/h,t[6]=2*(a[0]-l[0])/f-1,t[7]=2*(a[1]-l[1])/h-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,i.bind();var d=i.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var v=i.attributes;return this.positionBuffer.bind(),v.position.pointer(),this.weightBuffer.bind(),v.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),v.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),f.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r<n||r>=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},f.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]),l=!1!==t.zsmooth;this.xData=r,this.yData=o;var u,c,f,p,d=t.colorLevels||[0],v=t.colorValues||[0,0,0,1],g=d.length,y=this.bounds;l?(u=y[0]=r[0],c=y[1]=o[0],f=y[2]=r[r.length-1],p=y[3]=o[o.length-1]):(u=y[0]=r[0]+(r[1]-r[0])/2,c=y[1]=o[0]+(o[1]-o[0])/2,f=y[2]=r[r.length-1]+(r[r.length-1]-r[r.length-2])/2,p=y[3]=o[o.length-1]+(o[o.length-1]-o[o.length-2])/2);var m=1/(f-u),x=1/(p-c),b=e[0],_=e[1];this.shape=[b,_];var w=(l?(b-1)*(_-1):b*_)*(h.length>>>1);this.numVertices=w;for(var T=a.mallocUint8(4*w),k=a.mallocFloat32(2*w),A=a.mallocUint8(2*w),M=a.mallocUint32(w),S=0,E=l?b-1:b,L=l?_-1:_,C=0;C<L;++C){var P,O;l?(P=x*(o[C]-c),O=x*(o[C+1]-c)):(P=C<_-1?x*(o[C]-(o[C+1]-o[C])/2-c):x*(o[C]-(o[C]-o[C-1])/2-c),O=C<_-1?x*(o[C]+(o[C+1]-o[C])/2-c):x*(o[C]+(o[C]-o[C-1])/2-c));for(var I=0;I<E;++I){var D,z;l?(D=m*(r[I]-u),z=m*(r[I+1]-u)):(D=I<b-1?m*(r[I]-(r[I+1]-r[I])/2-u):m*(r[I]-(r[I]-r[I-1])/2-u),z=I<b-1?m*(r[I]+(r[I+1]-r[I])/2-u):m*(r[I]+(r[I]-r[I-1])/2-u));for(var R=0;R<h.length;R+=2){var F,B,N,j,U=h[R],V=h[R+1],H=s[l?(C+V)*b+(I+U):C*b+I],q=n.le(d,H);if(q<0)F=v[0],B=v[1],N=v[2],j=v[3];else if(q===g-1)F=v[4*g-4],B=v[4*g-3],N=v[4*g-2],j=v[4*g-1];else{var G=(H-d[q])/(d[q+1]-d[q]),Z=1-G,Y=4*q,W=4*(q+1);F=Z*v[Y]+G*v[W],B=Z*v[Y+1]+G*v[W+1],N=Z*v[Y+2]+G*v[W+2],j=Z*v[Y+3]+G*v[W+3]}T[4*S]=255*F,T[4*S+1]=255*B,T[4*S+2]=255*N,T[4*S+3]=255*j,k[2*S]=.5*D+.5*z,k[2*S+1]=.5*P+.5*O,A[2*S]=U,A[2*S+1]=V,M[S]=C*b+I,S+=1}}}this.positionBuffer.update(k),this.weightBuffer.update(A),this.colorBuffer.update(T),this.idBuffer.update(M),a.free(k),a.free(T),a.free(A),a.free(M)},f.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},1292:function(t,e,r){\"use strict\";var n=r(6832);t.exports={fragment:n([\"precision lowp float;\\n#define GLSLIFY 1\\nvarying vec4 fragColor;\\nvoid main() {\\n  gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\\n}\\n\"]),vertex:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 color;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  fragColor = color;\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"]),pickFragment:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nuniform vec2 shape;\\nuniform vec4 pickOffset;\\n\\nvoid main() {\\n  vec2 d = step(.5, vWeight);\\n  vec4 id = fragId + pickOffset;\\n  id.x += d.x + d.y*shape.x;\\n\\n  id.y += floor(id.x / 256.0);\\n  id.x -= floor(id.x / 256.0) * 256.0;\\n\\n  id.z += floor(id.y / 256.0);\\n  id.y -= floor(id.y / 256.0) * 256.0;\\n\\n  id.w += floor(id.z / 256.0);\\n  id.z -= floor(id.z / 256.0) * 256.0;\\n\\n  gl_FragColor = id/255.;\\n}\\n\"]),pickVertex:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nvoid main() {\\n  vWeight = weight;\\n\\n  fragId = pickId;\\n\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"])}},248:function(t,e,r){var n=r(6832),i=r(5158),a=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, nextPosition;\\nattribute float arcLength, lineWidth;\\nattribute vec4 color;\\n\\nuniform vec2 screenShape;\\nuniform float pixelRatio;\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 fragColor;\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  vec4 startPoint = project(position);\\n  vec4 endPoint   = project(nextPosition);\\n\\n  vec2 A = startPoint.xy / startPoint.w;\\n  vec2 B =   endPoint.xy /   endPoint.w;\\n\\n  float clipAngle = atan(\\n    (B.y - A.y) * screenShape.y,\\n    (B.x - A.x) * screenShape.x\\n  );\\n\\n  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\\n    sin(clipAngle),\\n    -cos(clipAngle)\\n  ) / screenShape;\\n\\n  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\\n\\n  worldPosition = position;\\n  pixelArcLength = arcLength;\\n  fragColor = color;\\n}\\n\"]),o=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3      clipBounds[2];\\nuniform sampler2D dashTexture;\\nuniform float     dashScale;\\nuniform float     opacity;\\n\\nvarying vec3    worldPosition;\\nvarying float   pixelArcLength;\\nvarying vec4    fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\\n    fragColor.a * opacity == 0.\\n  ) discard;\\n\\n  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\\n  if(dashWeight < 0.5) {\\n    discard;\\n  }\\n  gl_FragColor = fragColor * opacity;\\n}\\n\"]),s=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\n#define FLOAT_MAX  1.70141184e38\\n#define FLOAT_MIN  1.17549435e-38\\n\\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\\nvec4 packFloat(float v) {\\n  float av = abs(v);\\n\\n  //Handle special cases\\n  if(av < FLOAT_MIN) {\\n    return vec4(0.0, 0.0, 0.0, 0.0);\\n  } else if(v > FLOAT_MAX) {\\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\\n  } else if(v < -FLOAT_MAX) {\\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\\n  }\\n\\n  vec4 c = vec4(0,0,0,0);\\n\\n  //Compute exponent and mantissa\\n  float e = floor(log2(av));\\n  float m = av * pow(2.0, -e) - 1.0;\\n\\n  //Unpack mantissa\\n  c[1] = floor(128.0 * m);\\n  m -= c[1] / 128.0;\\n  c[2] = floor(32768.0 * m);\\n  m -= c[2] / 32768.0;\\n  c[3] = floor(8388608.0 * m);\\n\\n  //Unpack exponent\\n  float ebias = e + 127.0;\\n  c[0] = floor(ebias / 2.0);\\n  ebias -= c[0] * 2.0;\\n  c[1] += floor(ebias) * 128.0;\\n\\n  //Unpack sign bit\\n  c[0] += 128.0 * step(0.0, -v);\\n\\n  //Scale back to range\\n  return c / 255.0;\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform float pickId;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\\n\\n  gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\\n}\"]),l=[{name:\"position\",type:\"vec3\"},{name:\"nextPosition\",type:\"vec3\"},{name:\"arcLength\",type:\"float\"},{name:\"lineWidth\",type:\"float\"},{name:\"color\",type:\"vec4\"}];e.createShader=function(t){return i(t,a,o,null,l)},e.createPickShader=function(t){return i(t,a,s,null,l)}},6086:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=f(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=h(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),l=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),c=u(new Array(1024),[256,1,4]),p=0;p<1024;++p)c.data[p]=255;var d=a(e,c);d.wrap=e.REPEAT;var v=new y(e,r,o,s,l,d);return v.update(t),v};var n=r(5827),i=r(2944),a=r(8931),o=new Uint8Array(4),s=new Float32Array(o.buffer),l=r(5070),u=r(5050),c=r(248),f=c.createShader,h=c.createPickShader,p=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function v(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function g(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function y(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var m=y.prototype;m.isTransparent=function(){return this.hasAlpha},m.isOpaque=function(){return!this.hasAlpha},m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.drawTransparent=m.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:v(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:v(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;\"dashScale\"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],s=0,c=0,f=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],h=t.position||t.positions;if(h){var p=t.color||t.colors||[0,0,0,1],v=t.lineWidth||1,g=!1;t:for(e=1;e<h.length;++e){var y,m,x,b=h[e-1],_=h[e];for(a.push(s),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&i.length>0){for(var w=0;w<24;++w)i.push(i[i.length-12]);c+=2,g=!0}continue t}f[0][r]=Math.min(f[0][r],b[r],_[r]),f[1][r]=Math.max(f[1][r],b[r],_[r])}Array.isArray(p[0])?(y=p.length>e-1?p[e-1]:p.length>0?p[p.length-1]:[0,0,0,1],m=p.length>e?p[e]:p.length>0?p[p.length-1]:[0,0,0,1]):y=m=p,3===y.length&&(y=[y[0],y[1],y[2],1]),3===m.length&&(m=[m[0],m[1],m[2],1]),!this.hasAlpha&&y[3]<1&&(this.hasAlpha=!0),x=Array.isArray(v)?v.length>e-1?v[e-1]:v.length>0?v[v.length-1]:[0,0,0,1]:v;var T=s;if(s+=d(b,_),g){for(r=0;r<2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3]);c+=2,g=!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,y[0],y[1],y[2],y[3],b[0],b[1],b[2],_[0],_[1],_[2],T,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,m[0],m[1],m[2],m[3]),c+=4}}if(this.buffer.update(i),a.push(s),o.push(h[h.length-1].slice()),this.bounds=f,this.vertexCount=c,this.points=o,this.arcLength=a,\"dashes\"in t){var k=t.dashes.slice();for(k.unshift(0),e=1;e<k.length;++e)k[e]=k[e-1]+k[e];var A=u(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)A.set(e,0,r,0);1&l.le(k,k[k.length-1]*e/255)?A.set(e,0,0,0):A.set(e,0,0,255)}this.texture.setPixels(A)}},m.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,r,n){return o[0]=0,o[1]=r,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2]),r=l.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],i=this.points[Math.min(r+1,this.points.length-1)],a=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),u=1-a,c=[0,0,0],f=0;f<3;++f)c[f]=u*n[f]+a*i[f];var h=Math.min(a<.5?r:r+1,this.points.length-1);return new g(e,c,h,this.points[h])}},7332:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},9823:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7787:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},5950:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7280:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},9947:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},7437:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},3012:function(t,e,r){var n=r(9947);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},104:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},5268:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},1120:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},4422:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},6109:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},7115:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},5240:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},3668:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},998:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},2142:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},4340:function(t,e,r){\"use strict\";var n=r(957),i=r(7309);function a(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var i=0;i<4;++i)r[i]+=t[4*n+i]*e[n];return r}function o(t,e,r,n,i){for(var o=a(n,a(r,a(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}function s(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var i=t[n],a=e[n],o=0;o<3;++o)r[o]+=a*i[o];return r}t.exports=function(t,e,r,a,l,u){if(1===t.length)return[0,t[0].slice()];for(var c=new Array(t.length),f=0;f<t.length;++f)c[f]=o(t[f],r,a,l,u);var h=0,p=1/0;for(f=0;f<c.length;++f){for(var d=0,v=0;v<2;++v)d+=Math.pow(c[f][v]-e[v],2);d<p&&(p=d,h=f)}var g=function(t,e){if(2===t.length){for(var r=0,a=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),a+=Math.pow(e[o]-t[1][o],2);return(r=Math.sqrt(r))+(a=Math.sqrt(a))<1e-6?[1,0]:[a/(r+a),r/(a+r)]}if(3===t.length){var s=[0,0];return i(t[0],t[1],t[2],e,s),n(t,s)}return[]}(c,e),y=0;for(f=0;f<3;++f){if(g[f]<-.001||g[f]>1.0001)return null;y+=g[f]}return Math.abs(y-1)>.001?null:[h,s(t,g),g]}},2056:function(t,e,r){var n=r(6832),i=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, normal;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model\\n           , view\\n           , projection\\n           , inverseModel;\\nuniform vec3 eyePosition\\n           , lightPosition;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  gl_Position      = project(position);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * vec4(position , 1.0);\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  f_color          = color;\\n  f_data           = position;\\n  f_uv             = uv;\\n}\\n\"]),a=n([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness\\n            , fresnel\\n            , kambient\\n            , kdiffuse\\n            , kspecular;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (f_color.a == 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\\n  ) discard;\\n\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\\n\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * f_color.a;\\n}\\n\"]),o=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n  f_color = color;\\n  f_data  = position;\\n  f_uv    = uv;\\n}\"]),s=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\\n\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),l=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\nattribute float pointSize;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\\n  } else {\\n    gl_Position = projection * view * model * vec4(position, 1.0);\\n  }\\n  gl_PointSize = pointSize;\\n  f_color = color;\\n  f_uv = uv;\\n}\"]),u=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\\n  if(dot(pointR, pointR) > 0.25) {\\n    discard;\\n  }\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),c=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n  f_id        = id;\\n  f_position  = position;\\n}\"]),f=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]),h=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3  position;\\nattribute float pointSize;\\nattribute vec4  id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\\n  } else {\\n    gl_Position  = projection * view * model * vec4(position, 1.0);\\n    gl_PointSize = pointSize;\\n  }\\n  f_id         = id;\\n  f_position   = position;\\n}\"]),p=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\n\\nvoid main() {\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\n}\"]),d=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec3 contourColor;\\n\\nvoid main() {\\n  gl_FragColor = vec4(contourColor, 1.0);\\n}\\n\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},e.wireShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},e.pointShader={vertex:l,fragment:u,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"pointSize\",type:\"float\"}]},e.pickShader={vertex:c,fragment:f,attributes:[{name:\"position\",type:\"vec3\"},{name:\"id\",type:\"vec4\"}]},e.pointPickShader={vertex:h,fragment:f,attributes:[{name:\"position\",type:\"vec3\"},{name:\"pointSize\",type:\"float\"},{name:\"id\",type:\"vec4\"}]},e.contourShader={vertex:p,fragment:d,attributes:[{name:\"position\",type:\"vec3\"}]}},8116:function(t,e,r){\"use strict\";var n=r(5158),i=r(5827),a=r(2944),o=r(8931),s=r(115),l=r(104),u=r(7437),c=r(5050),f=r(9156),h=r(7212),p=r(5306),d=r(2056),v=r(4340),g=d.meshShader,y=d.wireShader,m=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function T(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A,M,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=c,this.triangleNormals=h,this.triangleUVs=f,this.triangleIds=u,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=g,this.edgeUVs=y,this.edgeIds=v,this.edgeVAO=m,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=T,this.pointSizes=k,this.pointIds=b,this.pointVAO=A,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=M,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var k=T.prototype;function A(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function M(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function L(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}k.isOpaque=function(){return!this.hasAlpha},k.isTransparent=function(){return this.hasAlpha},k.pickSlots=1,k.setPickBase=function(t){this.pickId=t},k.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var u=r[l],c=0;c<2;++c){var f=u[0];2===u.length&&(f=u[c]);for(var d=n[f][0],v=n[f][1],g=i[f],y=1-g,m=this.positions[d],x=this.positions[v],b=0;b<3;++b)o[s++]=g*m[b]+y*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},k.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\"contourEnable\"in t&&(this.contourEnable=t.contourEnable),\"contourColor\"in t&&(this.contourColor=t.contourColor),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"lightPosition\"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),\"opacityscale\"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),\"ambient\"in t&&(this.ambientLight=t.ambient),\"diffuse\"in t&&(this.diffuseLight=t.diffuse),\"specular\"in t&&(this.specularLight=t.specular),\"roughness\"in t&&(this.roughness=t.roughness),\"fresnel\"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=f({colormap:t,nshades:256,format:\"rgba\"}),n=new Uint8Array(1024),i=0;i<256;++i){for(var a=r[i],o=0;o<3;++o)n[4*i+o]=a[o];n[4*i+3]=e?255*A(i/255,e):255*a[3]}return c(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var i=[],a=[],l=[],u=[],h=[],p=[],d=[],v=[],g=[],y=[],m=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,T=t.cellNormals,k=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,M=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!T&&(T=s.faceNormals(r,n,M)),T||w||(w=s.vertexNormals(r,n,k));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,I=t.cellIntensity,D=1/0,z=-1/0;if(!C&&!O)if(P)if(t.vertexIntensityBounds)D=+t.vertexIntensityBounds[0],z=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];D=Math.min(D,F),z=Math.max(z,F)}else if(I)if(t.cellIntensityBounds)D=+t.cellIntensityBounds[0],z=+t.cellIntensityBounds[1];else for(R=0;R<I.length;++R)F=I[R],D=Math.min(D,F),z=Math.max(z,F);else for(R=0;R<n.length;++R)F=n[R][2],D=Math.min(D,F),z=Math.max(z,F);this.intensity=P||I||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.pickVertex=!(I||E);var B=t.pointSizes,N=t.pointSize||1;for(this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],R=0;R<n.length;++R)for(var j=n[R],U=0;U<3;++U)!isNaN(j[U])&&isFinite(j[U])&&(this.bounds[0][U]=Math.min(this.bounds[0][U],j[U]),this.bounds[1][U]=Math.max(this.bounds[1][U],j[U]));var V=0,H=0,q=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[Y=G[0]],U=0;U<3;++U)if(isNaN(j[U])||!isFinite(j[U]))continue t;y.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?m.push(W[0],W[1],W[2],this.opacity):(m.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],x.push(X[0],X[1]),B?b.push(B[Y]):b.push(N),_.push(R),q+=1;break;case 2:for(U=0;U<2;++U){j=n[Y=G[U]];for(var Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t}for(U=0;U<2;++U)j=n[Y=G[U]],p.push(j[0],j[1],j[2]),W=S?S[Y]:E?E[R]:L,this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?d.push(W[0],W[1],W[2],this.opacity):(d.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],v.push(X[0],X[1]),g.push(R);H+=1;break;case 3:for(U=0;U<3;++U)for(j=n[Y=G[U]],Z=0;Z<3;++Z)if(isNaN(j[Z])||!isFinite(j[Z]))continue t;for(U=0;U<3;++U){var Y,W,X,J;j=n[Y=G[2-U]],i.push(j[0],j[1],j[2]),(W=S?S[Y]:E?E[R]:L)?this.opacityscale&&P?a.push(W[0],W[1],W[2],this.opacity*A((P[Y]-D)/(z-D),this.opacityscale)):3===W.length?a.push(W[0],W[1],W[2],this.opacity):(a.push(W[0],W[1],W[2],W[3]*this.opacity),W[3]<1&&(this.hasAlpha=!0)):a.push(.5,.5,.5,1),X=C?C[Y]:P?[(P[Y]-D)/(z-D),0]:O?O[R]:I?[(I[R]-D)/(z-D),0]:[(j[2]-D)/(z-D),0],u.push(X[0],X[1]),J=w?w[Y]:T[R],l.push(J[0],J[1],J[2]),h.push(R)}V+=1}}this.pointCount=q,this.edgeCount=H,this.triangleCount=V,this.pointPositions.update(y),this.pointColors.update(m),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(v),this.edgeIds.update(new Uint32Array(g)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(u),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(h))}},k.drawTransparent=k.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=u(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var c=new Array(16);for(l(c,s.view,s.model),l(c,s.projection,c),u(c,c),o=0;o<3;++o)s.eyePosition[o]=c[12+o]/c[15];var f,h=c[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*c[4*o+3];for(o=0;o<3;++o){for(var p=c[12+o],d=0;d<3;++d)p+=c[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/h}this.triangleCount>0&&((f=this.triShader).bind(),f.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&this.lineWidth>0&&((f=this.lineShader).bind(),f.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((f=this.pointShader).bind(),f.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()),this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((f=this.contourShader).bind(),f.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},k.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};(s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},k.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;a<r.length;++a)i[a]=n[r[a]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[r[0]],u=this.positions[r[1]],c=this.positions[r[2]],f=[(l[0]+u[0]+c[0])/3,(l[1]+u[1]+c[1])/3,(l[2]+u[2]+c[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:f}}var h=v(i,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!h)return null;var p=h[2],d=0;for(a=0;a<r.length;++a)d+=p[a]*this.intensity[r[a]];return{position:h[1],index:r[h[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[h[0]]]}},k.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},t.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension(\"OES_standard_derivatives\")||t.getExtension(\"MOZ_OES_standard_derivatives\")||t.getExtension(\"WEBKIT_OES_standard_derivatives\")))throw new Error(\"derivatives not supported\");var r=function(t){var e=n(t,g.vertex,g.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=M(t),u=S(t),f=E(t),h=L(t),p=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=i(t),v=i(t),m=i(t),x=i(t),b=i(t),_=a(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:v,type:t.FLOAT,size:4},{buffer:m,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=i(t),k=i(t),A=i(t),C=i(t),P=a(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:k,type:t.FLOAT,size:4},{buffer:A,type:t.FLOAT,size:2}]),O=i(t),I=i(t),D=i(t),z=i(t),R=i(t),F=a(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:I,type:t.FLOAT,size:4},{buffer:D,type:t.FLOAT,size:2},{buffer:z,type:t.FLOAT,size:1}]),B=i(t),N=new T(t,p,r,s,l,u,f,h,d,b,v,m,x,_,w,C,k,A,P,O,R,I,D,z,F,B,a(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},4554:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl;return new o(t,n(e,[0,0,0,1,1,0,1,1]),i(e,a.boxVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,i){var a=this.plot,o=this.shader,u=a.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=i,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},3016:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl;return new s(t,n(e),i(e,o.gridVert,o.gridFrag),i(e,o.tickVert,o.gridFrag))};var n=r(5827),i=r(5158),a=r(5070),o=r(2709);function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var u,c,f,h,p,d=s.prototype;d.draw=(u=[0,0],c=[0,0],f=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,i=t.gl,a=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,h=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,v=0;v<2;++v){var g=a[v],y=a[v+2]-g,m=.5*(o[v+2]+o[v]),x=o[v+2]-o[v];c[v]=2*y/x,u[v]=2*(g-m)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=u,r.uniforms.dataScale=c;var b=0;for(v=0;v<2;++v){f[0]=f[1]=0,f[v]=1,r.uniforms.dataAxis=f,r.uniforms.lineWidth=l[v]/(s[v+2]-s[v])*d,r.uniforms.color=h[v];var _=6*n[v].length;p[v]&&_&&i.drawArrays(i.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],i=[0,0],o=[0,0];return function(){for(var s=this.plot,u=this.vbo,c=this.tickShader,f=this.ticks,h=s.gl,p=s._tickBounds,d=s.dataBox,v=s.viewBox,g=s.pixelRatio,y=s.screenBox,m=y[2]-y[0],x=y[3]-y[1],b=v[2]-v[0],_=v[3]-v[1],w=0;w<2;++w){var T=p[w],k=p[w+2]-T,A=.5*(d[w+2]+d[w]),M=d[w+2]-d[w];e[w]=2*k/M,t[w]=2*(T-A)/M}e[0]*=b/m,t[0]*=b/m,e[1]*=_/x,t[1]*=_/x,c.bind(),u.bind(),c.attributes.dataCoord.pointer();var S=c.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,P=6*f[0].length,O=Math.min(a.ge(f[0],(d[0]-p[0])/(p[2]-p[0]),l),f[0].length),I=Math.min(a.gt(f[0],(d[2]-p[0])/(p[2]-p[0]),l),f[0].length),D=0+6*O,z=6*Math.max(0,I-O),R=Math.min(a.ge(f[1],(d[1]-p[1])/(p[3]-p[1]),l),f[1].length),F=Math.min(a.gt(f[1],(d[3]-p[1])/(p[3]-p[1]),l),f[1].length),B=P+6*R,N=6*Math.max(0,F-R);i[0]=2*(v[0]-E[1])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[1]*g/m,o[1]=L[1]*g/x,N&&(S.color=C[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[1]-E[0])/x-1,o[0]=L[0]*g/m,o[1]=E[0]*g/x,z&&(S.color=C[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z)),i[0]=2*(v[2]+E[3])/m-1,i[1]=(v[3]+v[1])/x-1,o[0]=E[3]*g/m,o[1]=L[3]*g/x,N&&(S.color=C[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,h.drawArrays(h.TRIANGLES,B,N)),i[0]=(v[2]+v[0])/m-1,i[1]=2*(v[3]+E[2])/x-1,o[0]=L[2]*g/m,o[1]=E[2]*g/x,z&&(S.color=C[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,h.drawArrays(h.TRIANGLES,D,z))}}(),d.update=(h=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),i=(this.plot.zeroLineEnable,0),a=[[],[]],o=0;o<2;++o)for(var s=a[o],l=e[o],u=r[o],c=r[o+2],f=0;f<l.length;++f){var d=(l[f].x-u)/(c-u);s.push(d);for(var v=0;v<6;++v)n[i++]=d,n[i++]=h[v],n[i++]=p[v]}this.ticks=a,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},1154:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl;return new o(t,n(e,[-1,-1,-1,1,1,-1,1,1]),i(e,a.lineVert,a.lineFrag))};var n=r(5827),i=r(5158),a=r(2709);function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,u=o.prototype;u.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},u.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,i,a){var o=this.plot,u=this.shader,c=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,u.uniforms.start=s,u.uniforms.end=l,u.uniforms.width=i*o.pixelRatio,u.uniforms.color=a,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),u.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2709:function(t,e,r){\"use strict\";var n=r(6832),i=n([\"precision lowp float;\\n#define GLSLIFY 1\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor = vec4(color.xyz * color.w, color.w);\\n}\\n\"]);t.exports={lineVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 start, end;\\nuniform float width;\\n\\nvec2 perp(vec2 v) {\\n  return vec2(v.y, -v.x);\\n}\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  vec2 delta = normalize(perp(start - end));\\n  vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\\n  gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\\n}\\n\"]),lineFrag:i,textVert:n([\"#define GLSLIFY 1\\nattribute vec3 textCoordinate;\\n\\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\\nuniform float angle;\\n\\nvoid main() {\\n  float dataOffset  = textCoordinate.z;\\n  vec2 glyphOffset  = textCoordinate.xy;\\n  mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\\n  vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\\n    glyphMatrix * glyphOffset * textScale + screenOffset;\\n  gl_Position = vec4(screenCoordinate, 0, 1);\\n}\\n\"]),textFrag:i,gridVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale;\\nuniform float lineWidth;\\n\\nvoid main() {\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\n  pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\\n  gl_Position = vec4(pos, 0, 1);\\n}\\n\"]),gridFrag:i,boxVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 lo, hi;\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\\n}\\n\"]),tickVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\\n\\nvoid main() {\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\n  gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\\n}\\n\"])}},5613:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl;return new l(t,n(e),i(e,s.textVert,s.textFrag))};var n=r(5827),i=r(5158),a=r(6946),o=r(5070),s=r(2709);function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var u,c,f,h,p,d,v=l.prototype;v.drawTicks=(u=[0,0],c=[0,0],f=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],i=this.tickOffset[t],a=e.gl,s=e.viewBox,l=e.dataBox,h=e.screenBox,p=e.pixelRatio,d=e.tickEnable,v=e.tickPad,g=e.tickColor,y=e.tickAngle,m=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],T=this.labelCount[t],k=o.lt(n,l[t]),A=o.le(n,l[t+2]);u[0]=u[1]=0,u[t]=1,c[t]=(s[2+t]+s[t])/(h[2+t]-h[t])-1;var M=2/h[2+(1^t)]-h[1^t];c[1^t]=M*s[1^t]-1,d[t]&&(c[1^t]-=M*p*v[t],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t],r.uniforms.angle=y[t],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t]&&T&&(c[1^t]-=M*p*x[t],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t],r.uniforms.angle=_[t],a.drawArrays(a.TRIANGLES,w,T)),c[1^t]=M*s[2+(1^t)]-1,d[t+2]&&(c[1^t]+=M*p*v[t+2],k<A&&i[A]>i[k]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t+2],r.uniforms.angle=y[t+2],a.drawArrays(a.TRIANGLES,i[k],i[A]-i[k]))),m[t+2]&&T&&(c[1^t]+=M*p*x[t+2],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],a.drawArrays(a.TRIANGLES,w,T))}),v.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,u=r.pixelRatio;if(this.titleCount){for(var c=0;c<2;++c)e[c]=2*(o[c]*u-a[c])/(a[2+c]-a[c])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),v.bind=(h=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,u=.5*(n[o+2]+n[o]),c=n[o+2]-n[o],f=a[o],v=a[o+2]-f,g=i[o],y=i[o+2]-g;p[o]=2*l/c*v/y,h[o]=2*(s-u)/c*v/y}d[1]=2*t.pixelRatio/(i[3]-i[1]),d[0]=d[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=h,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),v.update=function(t){var e,r,n,i,o,s=[],l=t.ticks,u=t.bounds;for(o=0;o<2;++o){var c=[Math.floor(s.length/3)],f=[-1/0],h=l[o];for(e=0;e<h.length;++e){var p=h[e],d=p.x,v=p.text,g=p.font||\"sans-serif\";i=p.fontSize||12;for(var y=1/(u[o+2]-u[o]),m=u[o],x=v.split(\"\\n\"),b=0;b<x.length;b++)for(n=a(g,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*i,-n[r+1]*i-b*i*1.2,(d-m)*y);c.push(Math.floor(s.length/3)),f.push(d)}this.tickOffset[o]=c,this.tickX[o]=f}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=a(t.labelFont[o],t.labels[o],{textAlign:\"center\"}).data,i=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=a(t.titleFont,t.title).data,i=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},v.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},2117:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl,r=new l(e,n(e,[e.drawingBufferWidth,e.drawingBufferHeight]));return r.grid=i(r),r.text=a(r),r.line=o(r),r.box=s(r),r.update(t),r};var n=r(2611),i=r(3016),a=r(5613),o=r(1154),s=r(4554);function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var u=l.prototype;function c(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function f(t,e){return t.x-e.x}u.setDirty=function(){this.dirty=this.pickDirty=!0},u.setOverlayDirty=function(){this.dirty=!0},u.nextDepthValue=function(){return this._depthCounter++/65536},u.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var u=this.borderColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var c=this.backgroundColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var f=this.zeroLineEnable,h=this.zeroLineColor,p=this.zeroLineWidth;if(f[0]||f[1]){o.bind();for(var d=0;d<2;++d)if(f[d]&&n[d]<=0&&n[d+2]>=0){var v=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(v,e[1],v,e[3],p[d],h[d]):o.drawLine(e[0],v,e[2],v,p[d],h[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g=this.borderLineEnable,y=this.borderLineWidth,m=this.borderLineColor;for(g[1]&&o.drawLine(r[0],r[1]-.5*y[1]*i,r[0],r[3]+.5*y[3]*i,y[1],m[1]),g[0]&&o.drawLine(r[0]-.5*y[0]*i,r[1],r[2]+.5*y[2]*i,r[1],y[0],m[0]),g[3]&&o.drawLine(r[2],r[1]-.5*y[1]*i,r[2],r[3]+.5*y[3]*i,y[3],m[3]),g[2]&&o.drawLine(r[0]-.5*y[0]*i,r[3],r[2]+.5*y[2]*i,r[3],y[2],m[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},u.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl,this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},u.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/r)*n),o=0|Math.round((e-i[1]/r)*n),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),u=this.objects,c=0;c<u.length;++c){var f=u[c].pick(a,o,l);if(f)return f}return null}},u.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},u.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},u.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},u.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]),this.screenBox,this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,i=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=c(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=c(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=c(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!(\"titleEnable\"in t)||!!t.titleEnable,this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=c(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=c(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=c(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=a[s].slice(0);0!==l.length&&(l.sort(f),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||[\"x\",\"y\"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||[\"sans-serif\",\"sans-serif\"],title:t.title||\"\",titleSize:t.titleSize||18,titleFont:t.titleFont||\"sans-serif\"}),this.static=!!t.static,this.setDirty()},u.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();for(this.objects.length=0,t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},u.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},u.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},u.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},u.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},4296:function(t,e,r){\"use strict\";t.exports=function(t,e){t=t||document.body;var r=[.01,1/0];\"distanceLimits\"in(e=e||{})&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]),\"zoomMin\"in e&&(r[0]=e.zoomMin),\"zoomMax\"in e&&(r[1]=e.zoomMax);var u=i({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||\"orbit\",distanceLimits:r}),c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],f=0,h=t.clientWidth,p=t.clientHeight,d={keyBindingMode:\"rotate\",enableWheel:!0,view:u,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:u.modes,_ortho:e._ortho||e.projection&&\"orthographic\"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,i=e-2*r;u.idle(e-r),u.recalcMatrix(i),u.flush(e-(100+2*r));for(var a=!0,o=u.computedMatrix,s=0;s<16;++s)a=a&&c[s]===o[s],c[s]=o[s];var l=t.clientWidth===h&&t.clientHeight===p;return h=t.clientWidth,p=t.clientHeight,a?!l:(f=Math.exp(u.computedRadius[0]),!0)},lookAt:function(t,e,r){u.lookAt(u.lastT(),t,e,r)},rotate:function(t,e,r){u.rotate(u.lastT(),t,e,r)},pan:function(t,e,r){u.pan(u.lastT(),t,e,r)},translate:function(t,e,r){u.translate(u.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return u.computedMatrix},set:function(t){return u.setMatrix(u.lastT(),t),u.computedMatrix},enumerable:!0},mode:{get:function(){return u.getMode()},set:function(t){var e=u.computedUp.slice(),r=u.computedEye.slice(),i=u.computedCenter.slice();if(u.setMode(t),\"turntable\"===t){var a=n();u._active.lookAt(a,r,i,e),u._active.lookAt(a+500,r,i,[0,0,1]),u._active.flush(a)}return u.getMode()},enumerable:!0},center:{get:function(){return u.computedCenter},set:function(t){return u.lookAt(u.lastT(),null,t),u.computedCenter},enumerable:!0},eye:{get:function(){return u.computedEye},set:function(t){return u.lookAt(u.lastT(),t),u.computedEye},enumerable:!0},up:{get:function(){return u.computedUp},set:function(t){return u.lookAt(u.lastT(),null,null,t),u.computedUp},enumerable:!0},distance:{get:function(){return f},set:function(t){return u.setDistance(u.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return u.getDistanceLimits(r)},set:function(t){return u.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener(\"contextmenu\",(function(t){return t.preventDefault(),!1})),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,i,a){var o=d.keyBindingMode;if(!1!==o){var s=\"rotate\"===o,l=\"pan\"===o,c=\"zoom\"===o,h=!!a.control,p=!!a.alt,v=!!a.shift,g=!!(1&e),y=!!(2&e),m=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(i-d._lastY),w=d.flipX?1:-1,T=d.flipY?1:-1,k=Math.PI*d.rotateSpeed,A=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&g&&!h&&!p&&!v||g&&!h&&!p&&v)&&u.rotate(A,w*k*b,-T*k*_,0),(l&&g&&!h&&!p&&!v||y||g&&h&&!p&&!v)&&u.pan(A,-d.translateSpeed*b*f,d.translateSpeed*_*f,0),c&&g&&!h&&!p&&!v||m||g&&!h&&p&&!v)){var M=-d.zoomSpeed*_/window.innerHeight*(A-u.lastT())*100;u.pan(A,0,0,f*(Math.exp(M)-1))}return d._lastX=r,d._lastY=i,d._lastMods=a,!0}}d.mouseListener=a(t,e),t.addEventListener(\"touchstart\",(function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods)}),!!l&&{passive:!0}),t.addEventListener(\"touchmove\",(function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()}),!!l&&{passive:!1}),t.addEventListener(\"touchend\",(function(t){e(0,d._lastX,d._lastY,d._lastMods)}),!!l&&{passive:!0}),d.wheelListener=o(t,(function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,i=d.flipY?1:-1,a=n();if(Math.abs(t)>Math.abs(e))u.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*i*e/window.innerHeight*(a-u.lastT())/20;u.pan(a,0,0,f*(Math.exp(o)-1))}}}),!0)},d.enableMouseListeners(),d};var n=r(8161),i=r(1152),a=r(6145),o=r(6475),s=r(2565),l=r(5233)},8245:function(t,e,r){var n=r(6832),i=r(5158),a=n([\"precision mediump float;\\n#define GLSLIFY 1\\nattribute vec2 position;\\nvarying vec2 uv;\\nvoid main() {\\n  uv = position;\\n  gl_Position = vec4(position, 0, 1);\\n}\"]),o=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D accumBuffer;\\nvarying vec2 uv;\\n\\nvoid main() {\\n  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\\n  gl_FragColor = min(vec4(1,1,1,1), accum);\\n}\"]);t.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec2\"}])}},1059:function(t,e,r){\"use strict\";var n=r(4296),i=r(7453),a=r(2771),o=r(6496),s=r(2611),l=r(4234),u=r(8126),c=r(6145),f=r(1120),h=r(5268),p=r(8245),d=r(2321)({tablet:!0,featureDetect:!0});function v(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function g(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}return e>0?(r=Math.round(Math.pow(10,e)),Math.ceil(t/r)*r):Math.ceil(t)}function y(t){return\"boolean\"!=typeof t||t}t.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;e||(e=document.createElement(\"canvas\"),t.container?t.container.appendChild(e):document.body.appendChild(e));var r=t.gl;if(r||(t.glOptions&&(d=!!t.glOptions.preserveDrawingBuffer),r=function(t,e){var r=null;try{(r=t.getContext(\"webgl\",e))||(r=t.getContext(\"experimental-webgl\",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d})),!r)throw new Error(\"webgl not supported\");var m=t.bounds||[[-10,-10,-10],[10,10,10]],x=new v,b=l(r,r.drawingBufferWidth,r.drawingBufferHeight,{preferFloat:!d}),_=p(r),w=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&\"orthographic\"===t.camera.projection.type||!1,T={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||\"turntable\",_ortho:w},k=t.axes||{},A=i(r,k);A.enable=!k.disable;var M=t.spikes||{},S=o(r,M),E=[],L=[],C=[],P=[],O=!0,I=!0,D={view:null,projection:new Array(16),model:new Array(16),_ortho:!1},z=(I=!0,[r.drawingBufferWidth,r.drawingBufferHeight]),R=t.cameraObject||n(e,T),F={gl:r,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:x,camera:R,axes:A,axesPixels:null,spikes:S,bounds:m,objects:E,shape:z,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:y(t.autoResize),autoBounds:y(t.autoBounds),autoScale:!!t.autoScale,autoCenter:y(t.autoCenter),clipToBounds:y(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:D,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,I=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},B=[r.drawingBufferWidth/F.pixelRatio|0,r.drawingBufferHeight/F.pixelRatio|0];function N(){if(!F._stopped&&F.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var i=0|Math.ceil(r*F.pixelRatio),a=0|Math.ceil(n*F.pixelRatio);if(i!==e.width||a!==e.height){e.width=i,e.height=a;var o=e.style;o.position=o.position||\"absolute\",o.left=\"0px\",o.top=\"0px\",o.width=r+\"px\",o.height=n+\"px\",O=!0}}}function j(){for(var t=E.length,e=P.length,n=0;n<e;++n)C[n]=0;t:for(n=0;n<t;++n){var i=E[n],a=i.pickSlots;if(a){for(var o=0;o<e;++o)if(C[o]+a<255){L[n]=o,i.setPickBase(C[o]+1),C[o]+=a;continue t}var l=s(r,z);L[n]=e,P.push(l),C.push(a),i.setPickBase(1),e+=1}else L[n]=-1}for(;e>0&&0===C[e-1];)C.pop(),P.pop().dispose()}function U(){if(F.contextLost)return!0;r.isContextLost()&&(F.contextLost=!0,F.mouseListener.enabled=!1,F.selection.object=null,F.oncontextloss&&F.oncontextloss())}F.autoResize&&N(),window.addEventListener(\"resize\",N),F.update=function(t){F._stopped||(t=t||{},O=!0,I=!0)},F.add=function(t){F._stopped||(t.axes=A,E.push(t),L.push(-1),O=!0,I=!0,j())},F.remove=function(t){if(!F._stopped){var e=E.indexOf(t);e<0||(E.splice(e,1),L.pop(),O=!0,I=!0,j())}},F.dispose=function(){if(!F._stopped&&(F._stopped=!0,window.removeEventListener(\"resize\",N),e.removeEventListener(\"webglcontextlost\",U),F.mouseListener.enabled=!1,!F.contextLost)){A.dispose(),S.dispose();for(var t=0;t<E.length;++t)E[t].dispose();for(b.dispose(),t=0;t<P.length;++t)P[t].dispose();_.dispose(),r=null,A=null,S=null,E=[]}},F._mouseRotating=!1,F._prevButtons=0,F.enableMouseListeners=function(){F.mouseListener=c(e,(function(t,e,r){if(!F._stopped){var n=P.length,i=E.length,a=x.object;x.distance=1/0,x.mouse[0]=e,x.mouse[1]=r,x.object=null,x.screen=null,x.dataCoordinate=x.dataPosition=null;var o=!1;if(t&&F._prevButtons)F._mouseRotating=!0;else{F._mouseRotating&&(I=!0),F._mouseRotating=!1;for(var s=0;s<n;++s){var l=P[s].query(e,B[1]-r-1,F.pickRadius);if(l){if(l.distance>x.distance)continue;for(var u=0;u<i;++u){var c=E[u];if(L[u]===s){var f=c.pick(l);f&&(x.buttons=t,x.screen=l.coord,x.distance=l.distance,x.object=c,x.index=f.distance,x.dataPosition=f.position,x.dataCoordinate=f.dataCoordinate,x.data=f,o=!0)}}}}}a&&a!==x.object&&(a.highlight&&a.highlight(null),O=!0),x.object&&(x.object.highlight&&x.object.highlight(x.data),O=!0),(o=o||x.object!==a)&&F.onselect&&F.onselect(x),1&t&&!(1&F._prevButtons)&&F.onclick&&F.onclick(x),F._prevButtons=t}}))},e.addEventListener(\"webglcontextlost\",U);var V=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],H=[V[0].slice(),V[1].slice()];function q(){if(!U()){N();var t=F.camera.tick();D.view=F.camera.matrix,O=O||t,I=I||t,A.pixelRatio=F.pixelRatio,S.pixelRatio=F.pixelRatio;var e=E.length,n=V[0],i=V[1];n[0]=n[1]=n[2]=1/0,i[0]=i[1]=i[2]=-1/0;for(var o=0;o<e;++o){(C=E[o]).pixelRatio=F.pixelRatio,C.axes=F.axes,O=O||!!C.dirty,I=I||!!C.dirty;var s=C.bounds;if(s)for(var l=s[0],c=s[1],p=0;p<3;++p)n[p]=Math.min(n[p],l[p]),i[p]=Math.max(i[p],c[p])}var d=F.bounds;if(F.autoBounds)for(p=0;p<3;++p){if(i[p]<n[p])n[p]=-1,i[p]=1;else{n[p]===i[p]&&(n[p]-=1,i[p]+=1);var v=.05*(i[p]-n[p]);n[p]=n[p]-v,i[p]=i[p]+v}d[0][p]=n[p],d[1][p]=i[p]}var y=!1;for(p=0;p<3;++p)y=y||H[0][p]!==d[0][p]||H[1][p]!==d[1][p],H[0][p]=d[0][p],H[1][p]=d[1][p];if(I=I||y,O=O||y){if(y){var m=[0,0,0];for(o=0;o<3;++o)m[o]=g((d[1][o]-d[0][o])/10);A.autoTicks?A.update({bounds:d,tickSpacing:m}):A.update({bounds:d})}var T=r.drawingBufferWidth,k=r.drawingBufferHeight;for(z[0]=T,z[1]=k,B[0]=0|Math.max(T/F.pixelRatio,1),B[1]=0|Math.max(k/F.pixelRatio,1),function(t,e){var r=t.bounds,n=t.cameraParams,i=n.projection,a=n.model,o=t.gl.drawingBufferWidth,s=t.gl.drawingBufferHeight,l=t.zNear,u=t.zFar,c=t.fovy,p=o/s;e?(h(i,-p,p,-1,1,l,u),n._ortho=!0):(f(i,c,p,l,u),n._ortho=!1);for(var d=0;d<16;++d)a[d]=0;a[15]=1;var v=0;for(d=0;d<3;++d)v=Math.max(v,r[1][d]-r[0][d]);for(d=0;d<3;++d)t.autoScale?a[5*d]=t.aspect[d]/(r[1][d]-r[0][d]):a[5*d]=1/v,t.autoCenter&&(a[12+d]=.5*-a[5*d]*(r[0][d]+r[1][d]))}(F,w),o=0;o<e;++o)(C=E[o]).axesBounds=d,F.clipToBounds&&(C.clipBounds=d);x.object&&(F.snapToData?S.position=x.dataCoordinate:S.position=x.dataPosition,S.bounds=d),I&&(I=!1,function(){if(!U()){r.colorMask(!0,!0,!0,!0),r.depthMask(!0),r.disable(r.BLEND),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL);for(var t=E.length,e=P.length,n=0;n<e;++n){var i=P[n];i.shape=B,i.begin();for(var a=0;a<t;++a)if(L[a]===n){var o=E[a];o.drawPick&&(o.pixelRatio=1,o.drawPick(D))}i.end()}}}()),F.axesPixels=a(F.axes,D,T,k),F.onrender&&F.onrender(),r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,T,k),F.clearRGBA(),r.depthMask(!0),r.colorMask(!0,!0,!0,!0),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.disable(r.BLEND),r.disable(r.CULL_FACE);var M=!1;for(A.enable&&(M=M||A.isTransparent(),A.draw(D)),S.axes=A,x.object&&S.draw(D),r.disable(r.CULL_FACE),o=0;o<e;++o)(C=E[o]).axes=A,C.pixelRatio=F.pixelRatio,C.isOpaque&&C.isOpaque()&&C.draw(D),C.isTransparent&&C.isTransparent()&&(M=!0);if(M){for(b.shape=z,b.bind(),r.clear(r.DEPTH_BUFFER_BIT),r.colorMask(!1,!1,!1,!1),r.depthMask(!0),r.depthFunc(r.LESS),A.enable&&A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o)(C=E[o]).isOpaque&&C.isOpaque()&&C.draw(D);for(r.enable(r.BLEND),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.colorMask(!0,!0,!0,!0),r.depthMask(!1),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),A.isTransparent()&&A.drawTransparent(D),o=0;o<e;++o){var C;(C=E[o]).isTransparent&&C.isTransparent()&&C.drawTransparent(D)}r.bindFramebuffer(r.FRAMEBUFFER,null),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.disable(r.DEPTH_TEST),_.bind(),b.color[0].bind(0),_.uniforms.accumBuffer=0,u(r),r.disable(r.BLEND)}for(O=!1,o=0;o<e;++o)E[o].dirty=!1}}}return F.enableMouseListeners(),function t(){F._stopped||F.contextLost||(q(),requestAnimationFrame(t))}(),F.redraw=function(){F._stopped||(O=!0,q())},F},createCamera:n}},8023:function(t,e,r){var n=r(6832);e.pointVertex=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform float pointCloud;\\n\\nhighp float rand(vec2 co) {\\n  highp float a = 12.9898;\\n  highp float b = 78.233;\\n  highp float c = 43758.5453;\\n  highp float d = dot(co.xy, vec2(a, b));\\n  highp float e = mod(d, 3.14);\\n  return fract(sin(e) * c);\\n}\\n\\nvoid main() {\\n  vec3 hgPosition = matrix * vec3(position, 1);\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\n    // if we don't jitter the point size a bit, overall point cloud\\n    // saturation 'jumps' on zooming, which is disturbing and confusing\\n  gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\n    // get the same square surface as circle would be\\n    gl_PointSize *= 0.886;\\n  }\\n}\"]),e.pointFragment=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color, borderColor;\\nuniform float centerFraction;\\nuniform float pointCloud;\\n\\nvoid main() {\\n  float radius;\\n  vec4 baseColor;\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\n    if(centerFraction == 1.0) {\\n      gl_FragColor = color;\\n    } else {\\n      gl_FragColor = mix(borderColor, color, centerFraction);\\n    }\\n  } else {\\n    radius = length(2.0 * gl_PointCoord.xy - 1.0);\\n    if(radius > 1.0) {\\n      discard;\\n    }\\n    baseColor = mix(borderColor, color, step(radius, centerFraction));\\n    gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\\n  }\\n}\\n\"]),e.pickVertex=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform vec4 pickOffset;\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  vec3 hgPosition = matrix * vec3(position, 1);\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\n  gl_PointSize = pointSize;\\n\\n  vec4 id = pickId + pickOffset;\\n  id.y += floor(id.x / 256.0);\\n  id.x -= floor(id.x / 256.0) * 256.0;\\n\\n  id.z += floor(id.y / 256.0);\\n  id.y -= floor(id.y / 256.0) * 256.0;\\n\\n  id.w += floor(id.z / 256.0);\\n  id.z -= floor(id.z / 256.0) * 256.0;\\n\\n  fragId = id;\\n}\\n\"]),e.pickFragment=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  float radius = length(2.0 * gl_PointCoord.xy - 1.0);\\n  if(radius > 1.0) {\\n    discard;\\n  }\\n  gl_FragColor = fragId / 255.0;\\n}\\n\"])},8271:function(t,e,r){\"use strict\";var n=r(5158),i=r(5827),a=r(5306),o=r(8023);function s(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}t.exports=function(t,e){var r=t.gl,a=new s(t,i(r),i(r),n(r,o.pointVertex,o.pointFragment),n(r,o.pickVertex,o.pickFragment));return a.update(e),t.addObject(a),a};var l,u,c=s.prototype;c.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},c.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r(\"sizeMin\",.5),this.sizeMax=r(\"sizeMax\",20),this.color=r(\"color\",[1,0,0,1]).slice(),this.areaRatio=r(\"areaRatio\",1),this.borderColor=r(\"borderColor\",[0,0,0,1]).slice(),this.blend=r(\"blend\",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=i?s:a.mallocFloat32(s.length),u=o?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e=0;e<n;e++)u[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(u),i||a.free(l),o||a.free(u),this.pointCount=n,this.pickOffset=0},c.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],u=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,i=this.plot.dataBox;if(0===this.pointCount)return t;var a=i[2]-i[0],o=i[3]-i[1],s=function(t,e){var r,n=0,i=t.length>>>1;for(r=0;r<i;r++){var a=t[2*r],o=t[2*r+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,i),c=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=c<5,r.uniforms.pointSize=c,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(u[0]=255&t,u[1]=t>>8&255,u[2]=t>>16&255,u[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=u,this.pickOffset=t);var f=n.getParameter(n.BLEND),h=n.getParameter(n.DITHER);return f&&!this.blend&&n.disable(n.BLEND),h&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),f&&!this.blend&&n.enable(n.BLEND),h&&n.enable(n.DITHER),t+this.pointCount}),c.draw=c.unifiedDraw,c.drawPick=c.unifiedDraw,c.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},6093:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],f=e[2],h=e[3],p=r[0],d=r[1],v=r[2],g=r[3];return(a=u*p+c*d+f*v+h*g)<0&&(a=-a,p=-p,d=-d,v=-v,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n),t[0]=s*u+l*p,t[1]=s*c+l*d,t[2]=s*f+l*v,t[3]=s*h+l*g,t}},8240:function(t){\"use strict\";t.exports=function(t){return t||0===t?t.toString():\"\"}},4123:function(t,e,r){\"use strict\";var n=r(875);t.exports=function(t,e,r){var a=i[e];if(a||(a=i[e]={}),t in a)return a[t];var o={textAlign:\"center\",textBaseline:\"middle\",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,u,c=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(u=0;u<s.positions[l].length;++u)s.positions[l][u]/=r;for(l=0;l<c.positions.length;++l)for(u=0;u<c.positions[l].length;++u)c.positions[l][u]/=r}var f=[[1/0,1/0],[-1/0,-1/0]],h=c.positions.length;for(l=0;l<h;++l){var p=c.positions[l];for(u=0;u<2;++u)f[0][u]=Math.min(f[0][u],p[u]),f[1][u]=Math.max(f[1][u],p[u])}return a[t]=[s,c,f]};var i={}},9282:function(t,e,r){var n=r(5158),i=r(6832),a=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform vec4 highlightId;\\nuniform float highlightScale;\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float scale = 1.0;\\n    if(distance(highlightId, id) < 0.0001) {\\n      scale = highlightScale;\\n    }\\n\\n    vec4 worldPosition = model * vec4(position, 1);\\n    vec4 viewPosition = view * worldPosition;\\n    viewPosition = viewPosition / viewPosition.w;\\n    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\\n\\n    gl_Position = clipPosition;\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = position;\\n  }\\n}\"]),o=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float highlightScale, pixelRatio;\\nuniform vec4 highlightId;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float scale = pixelRatio;\\n    if(distance(highlightId.bgr, id.bgr) < 0.001) {\\n      scale *= highlightScale;\\n    }\\n\\n    vec4 worldPosition = model * vec4(position, 1.0);\\n    vec4 viewPosition = view * worldPosition;\\n    vec4 clipPosition = projection * viewPosition;\\n    clipPosition /= clipPosition.w;\\n\\n    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = position;\\n  }\\n}\"]),s=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform float highlightScale;\\nuniform vec4 highlightId;\\nuniform vec3 axes[2];\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float scale, pixelRatio;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position = vec4(0,0,0,0);\\n  } else {\\n    float lscale = pixelRatio * scale;\\n    if(distance(highlightId, id) < 0.0001) {\\n      lscale *= highlightScale;\\n    }\\n\\n    vec4 clipCenter   = projection * view * model * vec4(position, 1);\\n    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\\n    vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\\n\\n    gl_Position = clipPosition;\\n    interpColor = color;\\n    pickId = id;\\n    dataCoordinate = dataPosition;\\n  }\\n}\\n\"]),l=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float opacity;\\n\\nvarying vec4 interpColor;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (\\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\\n    interpColor.a * opacity == 0.\\n  ) discard;\\n  gl_FragColor = interpColor * opacity;\\n}\\n\"]),u=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float pickGroup;\\n\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\\n\\n  gl_FragColor = vec4(pickGroup, pickId.bgr);\\n}\"]),c=[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"glyph\",type:\"vec2\"},{name:\"id\",type:\"vec4\"}],f={vertex:a,fragment:l,attributes:c},h={vertex:o,fragment:l,attributes:c},p={vertex:s,fragment:l,attributes:c},d={vertex:a,fragment:u,attributes:c},v={vertex:o,fragment:u,attributes:c},g={vertex:s,fragment:u,attributes:c};function y(t,e){var r=n(t,e),i=r.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,r}e.createPerspective=function(t){return y(t,f)},e.createOrtho=function(t){return y(t,h)},e.createProject=function(t){return y(t,p)},e.createPickPerspective=function(t){return y(t,d)},e.createPickOrtho=function(t){return y(t,v)},e.createPickProject=function(t){return y(t,g)}},2182:function(t,e,r){\"use strict\";var n=r(3596),i=r(5827),a=r(2944),o=r(5306),s=r(104),l=r(9282),u=r(4123),c=r(8240),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return h(n,n),h(n,n),h(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function v(t){return!0===t||t>1?1:t}function g(t,e,r,n,i,a,o,s,l,u,c,f){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=u,this.pickOrthoShader=c,this.pickProjectShader=f,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}t.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),u=l.createPickOrtho(e),c=l.createPickProject(e),f=i(e),h=i(e),p=i(e),d=i(e),v=new g(e,r,n,o,f,h,p,d,a(e,[{buffer:f,size:3,type:e.FLOAT},{buffer:h,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),s,u,c);return v.update(t),v};var y=g.prototype;y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},y.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var m=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],T=f.slice(),k=[0,0,0],A=[[0,0,0],[0,0,0]];function M(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}var L=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function C(t,e,r,n,i,a,o){var l=r.gl;if((a===r.projectHasAlpha||o)&&function(t,e,r,n){var i,a=e.axesProject,o=e.gl,l=t.uniforms,u=r.model||f,c=r.view||f,h=r.projection||f,d=e.axesBounds,v=function(t){for(var e=A,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],m[0]=2/o.drawingBufferWidth,m[1]=2/o.drawingBufferHeight,t.bind(),l.view=c,l.projection=h,l.screenSize=m,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=v,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var g=0;g<3;++g)if(a[g]){l.scale=e.projectScale[g],l.opacity=e.projectOpacity[g];for(var y=T,L=0;L<16;++L)y[L]=0;for(L=0;L<4;++L)y[5*L]=1;y[5*g]=0,i[g]<0?y[12+g]=d[0][g]:y[12+g]=d[1][g],s(y,u,y),l.model=y;var C=(g+1)%3,P=(g+2)%3,O=M(x),I=M(b);O[C]=1,I[P]=1;var D=p(0,0,0,S(_,O)),z=p(0,0,0,S(w,I));if(Math.abs(D[1])>Math.abs(z[1])){var R=D;D=z,z=R,R=O,O=I,I=R;var F=C;C=P,P=F}D[0]<0&&(O[C]=-1),z[1]>0&&(I[P]=-1);var B=0,N=0;for(L=0;L<4;++L)B+=Math.pow(u[4*C+L],2),N+=Math.pow(u[4*P+L],2);O[C]/=Math.sqrt(B),I[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=I,l.fragClipBounds[0]=E(k,v[0],g,-1e8),l.fragClipBounds[1]=E(k,v[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}(e,r,n,i),a===r.hasAlpha||o){t.bind();var u=t.uniforms;u.model=n.model||f,u.view=n.view||f,u.projection=n.projection||f,m[0]=2/l.drawingBufferWidth,m[1]=2/l.drawingBufferHeight,u.screenSize=m,u.highlightId=r.highlightId,u.highlightScale=r.highlightScale,u.fragClipBounds=L,u.clipBounds=r.axes.bounds,u.opacity=r.opacity,u.pickGroup=r.pickId/255,u.pixelRatio=i,r.vao.bind(),r.vao.draw(l.TRIANGLES,r.vertexCount),r.lineWidth>0&&(l.lineWidth(r.lineWidth*i),r.vao.draw(l.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function P(t,e,r,i){var a;a=Array.isArray(t)?e<t.length?t[e]:void 0:t,a=c(a);var o=!0;n(a)&&(a=\"▼\",o=!1);var s=u(a,r,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}y.draw=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},y.drawTransparent=function(t){C(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},y.drawPick=function(t){C(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},y.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},y.update=function(t){if(\"perspective\"in(t=t||{})&&(this.useOrtho=!t.perspective),\"orthographic\"in t&&(this.useOrtho=!!t.orthographic),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"project\"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if(\"projectScale\"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,\"projectOpacity\"in t){Array.isArray(t.projectOpacity)?this.projectOpacity=t.projectOpacity.slice():(r=+t.projectOpacity,this.projectOpacity=[r,r,r]);for(var n=0;n<3;++n)this.projectOpacity[n]=v(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,\"opacity\"in t&&(this.opacity=v(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||\"normal\",u=t.alignment||[0,0];if(2===u.length)i=u[0],a=u[1];else for(i=[],a=[],n=0;n<u.length;++n)i[n]=u[n][0],a[n]=u[n][1];var c=[1/0,1/0,1/0],f=[-1/0,-1/0,-1/0],h=t.glyph,p=t.color,d=t.size,g=t.angle,y=t.lineColor,m=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],T=0;T<3;++T)if(isNaN(w[T])||!isFinite(w[T]))continue t;var k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;x+=3*k.cells.length,b+=2*A.edges.length}}var S=x+b,E=o.mallocFloat(3*S),L=o.mallocFloat(4*S),C=o.mallocFloat(2*S),O=o.mallocUint32(S);if(S>0){var I=0,D=x,z=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(y)&&Array.isArray(y[0]);t:for(n=0;n<_;++n){for(m+=1,w=s[n],T=0;T<3;++T){if(isNaN(w[T])||!isFinite(w[T]))continue t;f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T])}k=(N=P(h,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(U=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(T=0;T<3;++T)z[T]=U[T];z[3]=1}else if(4===U.length){for(T=0;T<4;++T)z[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else z[0]=z[1]=z[2]=0,z[3]=1;else z=[1,1,1,0];if(j)if(Array.isArray(y)){var U;if(3===(U=B?n<y.length?y[n]:[0,0,0,0]:y).length){for(T=0;T<3;++T)R[T]=U[T];R[T]=1}else if(4===U.length){for(T=0;T<4;++T)R[T]=U[T];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var V=.5;j?Array.isArray(d)?V=n<d.length?+d[n]:12:d?V=+d:this.useOrtho&&(V=12):V=0;var H=0;Array.isArray(g)?H=n<g.length?+g[n]:0:g&&(H=+g);var q=Math.cos(H),G=Math.sin(H);for(w=s[n],T=0;T<3;++T)f[T]=Math.max(f[T],w[T]),c[T]=Math.min(c[T],w[T]);var Z=i,Y=a;Z=0,Array.isArray(i)?Z=n<i.length?i[n]:0:i&&(Z=i),Y=0,Array.isArray(a)?Y=n<a.length?a[n]:0:a&&(Y=a);var W=[Z*=Z>0?1-M[0][0]:Z<0?1+M[1][0]:1,Y*=Y>0?1-M[0][1]:Y<0?1+M[1][1]:1],X=k.cells||[],J=k.positions||[];for(T=0;T<X.length;++T)for(var K=X[T],$=0;$<3;++$){for(var Q=0;Q<3;++Q)E[3*I+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*I+Q]=z[Q];O[I]=m;var tt=J[K[$]];C[2*I]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*I+1]=V*(G*tt[0]+q*tt[1]+W[1]),I+=1}for(X=A.edges,J=A.positions,T=0;T<X.length;++T)for(K=X[T],$=0;$<2;++$){for(Q=0;Q<3;++Q)E[3*D+Q]=w[Q];for(Q=0;Q<4;++Q)L[4*D+Q]=R[Q];O[D]=m,tt=J[K[$]],C[2*D]=V*(q*tt[0]-G*tt[1]+W[0]),C[2*D+1]=V*(G*tt[0]+q*tt[1]+W[1]),D+=1}}}this.bounds=[c,f],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(O),o.free(E),o.free(L),o.free(C),o.free(O)},y.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},1884:function(t,e,r){\"use strict\";var n=r(6832);e.boxVertex=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 vertex;\\n\\nuniform vec2 cornerA, cornerB;\\n\\nvoid main() {\\n  gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\\n}\\n\"]),e.boxFragment=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\n\\nvoid main() {\\n  gl_FragColor = color;\\n}\\n\"])},6623:function(t,e,r){\"use strict\";var n=r(5158),i=r(5827),a=r(1884);function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}t.exports=function(t,e){var r=t.gl,s=new o(t,i(r,[0,0,0,1,1,0,1,1]),n(r,a.boxVertex,a.boxFragment));return s.update(e),t.addOverlay(s),s};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),i=(this.outerFill,this.outerColor),a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,u=t.viewBox,c=t.pixelRatio,f=(e[0]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],h=(e[1]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1],p=(e[2]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],d=(e[3]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1];if(f=Math.max(f,u[0]),h=Math.max(h,u[1]),p=Math.min(p,u[2]),d=Math.min(d,u[3]),!(p<f||d<h)){o.bind();var v=s[2]-s[0],g=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,v,h,i),o.drawBox(0,h,f,d,i),o.drawBox(0,d,v,g,i),o.drawBox(p,h,v,d,i)),this.innerFill&&o.drawBox(f,h,p,d,n),r>0){var y=r*c;o.drawBox(f-y,h-y,p+y,h+y,a),o.drawBox(f-y,d-y,p+y,d+y,a),o.drawBox(f-y,h-y,f+y,d+y,a),o.drawBox(p-y,h-y,p+y,d+y,a)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},2611:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=e[0],a=e[1];return new l(t,n(t,r,a,{}),i.mallocUint8(r*a*4))};var n=r(4234),i=r(5306),a=r(5050),o=r(2288).nextPow2;function s(t,e,r,n,i){this.coord=[t,e],this.id=r,this.value=n,this.distance=i}function l(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=l.prototype;Object.defineProperty(u,\"shape\",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){i.free(this.buffer);for(var n=this.buffer=i.mallocUint8(o(r*e*4)),a=0;a<r*e*4;++a)n[a]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape,t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,\"number\"!=typeof r&&(r=1);var i=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),l=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=i||u<=l)return null;var c=[o-i,u-l],f=a(this.buffer,[c[0],c[1],4],[4,4*n[0],1],4*(i+n[0]*l)),h=function(t,e,r){for(var n=1e8,i=-1,a=-1,o=t.shape[0],s=t.shape[1],l=0;l<o;l++)for(var u=0;u<s;u++){var c=t.get(l,u,0),f=t.get(l,u,1),h=t.get(l,u,2),p=t.get(l,u,3);if(c<255||f<255||h<255||p<255){var d=e-l,v=r-u,g=d*d+v*v;g<n&&(n=g,i=l,a=u)}}return[i,a,n]}(f.hi(c[0],c[1],1),r,r),p=h[0],d=h[1];return p<0||Math.pow(this.radius,2)<h[2]?null:new s(p+i|0,d+l|0,f.get(p,d,0),[f.get(p,d,1),f.get(p,d,2),f.get(p,d,3)],Math.sqrt(h[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),i.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},5158:function(t,e,r){\"use strict\";var n=r(9016),i=r(4280),a=r(3984),o=r(1628),s=r(2631),l=r(9068);function u(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var c=u.prototype;function f(t,e){return t.name<e.name?-1:1}c.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},c.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},c.update=function(t,e,r,u){if(!e||1===arguments.length){var c=t;t=c.vertex,e=c.fragment,r=c.uniforms,u=c.attributes}var h=this,p=h.gl,d=h._vref;h._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),h.vertShader=h._vref.shader;var v=this._fref;if(h._fref=o.shader(p,p.FRAGMENT_SHADER,e),v&&v.dispose(),h.fragShader=h._fref.shader,!r||!u){var g=p.createProgram();if(p.attachShader(g,h.fragShader),p.attachShader(g,h.vertShader),p.linkProgram(g),!p.getProgramParameter(g,p.LINK_STATUS)){var y=p.getProgramInfoLog(g);throw new l(y,\"Error linking program:\"+y)}r=r||s.uniforms(p,g),u=u||s.attributes(p,g),p.deleteProgram(g)}(u=u.slice()).sort(f);var m,x=[],b=[],_=[];for(m=0;m<u.length;++m){var w=u[m];if(w.type.indexOf(\"mat\")>=0){for(var T=0|w.type.charAt(w.type.length-1),k=new Array(T),A=0;A<T;++A)k[A]=_.length,b.push(w.name+\"[\"+A+\"]\"),\"number\"==typeof w.location?_.push(w.location+A):Array.isArray(w.location)&&w.location.length===T&&\"number\"==typeof w.location[A]?_.push(0|w.location[A]):_.push(-1);x.push({name:w.name,type:w.type,locations:k})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),\"number\"==typeof w.location?_.push(0|w.location):_.push(-1)}var M=0;for(m=0;m<_.length;++m)if(_[m]<0){for(;_.indexOf(M)>=0;)M+=1;_[m]=M}var S=new Array(r.length);function E(){h.program=o.program(p,h._vref,h._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(h.program,r[t].name)}E(),h._relink=E,h.types={uniforms:a(r),attributes:a(u)},h.attributes=i(p,h,x,_),Object.defineProperty(h,\"uniforms\",n(p,h,r,S))},t.exports=function(t,e,r,n,i){var a=new u(t);return a.update(e,r,n,i),a}},9068:function(t){function e(t,e,r){this.shortMessage=e||\"\",this.longMessage=r||\"\",this.rawError=t||\"\",this.message=\"gl-shader: \"+(e||t||\"\")+(r?\"\\n\"+r:\"\"),this.stack=(new Error).stack}e.prototype=new Error,e.prototype.name=\"GLError\",e.prototype.constructor=e,t.exports=e},4280:function(t,e,r){\"use strict\";t.exports=function(t,e,r,i){for(var a={},o=0,u=r.length;o<u;++o){var c=r[o],f=c.name,h=c.type,p=c.locations;switch(h){case\"bool\":case\"int\":case\"float\":s(t,e,p[0],i,1,a,f);break;default:if(h.indexOf(\"vec\")>=0){if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n(\"\",\"Invalid data type for attribute \"+f+\": \"+h);s(t,e,p[0],i,d,a,f)}else{if(!(h.indexOf(\"mat\")>=0))throw new n(\"\",\"Unknown data type for attribute \"+f+\": \"+h);var d;if((d=h.charCodeAt(h.length-1)-48)<2||d>4)throw new n(\"\",\"Invalid data type for attribute \"+f+\": \"+h);l(t,e,p,i,d,a,f)}}}return a};var n=r(9068);function i(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}var a=i.prototype;a.pointer=function(t,e,r,n){var i=this,a=i._gl,o=i._locations[i._index];a.vertexAttribPointer(o,i._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(o)},a.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(a,\"location\",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}});var o=[function(t,e,r){return void 0===r.length?t.vertexAttrib1f(e,r):t.vertexAttrib1fv(e,r)},function(t,e,r,n){return void 0===r.length?t.vertexAttrib2f(e,r,n):t.vertexAttrib2fv(e,r)},function(t,e,r,n,i){return void 0===r.length?t.vertexAttrib3f(e,r,n,i):t.vertexAttrib3fv(e,r)},function(t,e,r,n,i,a){return void 0===r.length?t.vertexAttrib4f(e,r,n,i,a):t.vertexAttrib4fv(e,r)}];function s(t,e,r,n,a,s,l){var u=o[a],c=new i(t,e,r,n,a,u);Object.defineProperty(s,l,{set:function(e){return t.disableVertexAttribArray(n[r]),u(t,n[r],e),e},get:function(){return c},enumerable:!0})}function l(t,e,r,n,i,a,o){for(var l=new Array(i),u=new Array(i),c=0;c<i;++c)s(t,e,r[c],n,i,l,c),u[c]=l[c];Object.defineProperty(l,\"location\",{set:function(t){if(Array.isArray(t))for(var e=0;e<i;++e)u[e].location=t[e];else for(e=0;e<i;++e)u[e].location=t+e;return t},get:function(){for(var t=new Array(i),e=0;e<i;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,a,o,s){e=e||t.FLOAT,a=!!a,o=o||i*i,s=s||0;for(var l=0;l<i;++l){var u=n[r[l]];t.vertexAttribPointer(u,i,e,a,o,s+l*i),t.enableVertexAttribArray(u)}};var f=new Array(i),h=t[\"vertexAttrib\"+i+\"fv\"];Object.defineProperty(a,o,{set:function(e){for(var a=0;a<i;++a){var o=n[r[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))h.call(t,o,e[a]);else{for(var s=0;s<i;++s)f[s]=e[i*a+s];h.call(t,o,f)}}return e},get:function(){return l},enumerable:!0})}},9016:function(t,e,r){\"use strict\";var n=r(3984),i=r(9068);function a(t){return function(){return t}}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}t.exports=function(t,e,r,s){function l(e){return function(n){for(var a=u(\"\",e),o=0;o<a.length;++o){var l=a[o],c=l[0],f=l[1];if(s[f]){var h=n;if(\"string\"==typeof c&&(0===c.indexOf(\".\")||0===c.indexOf(\"[\"))){var p=c;if(0===c.indexOf(\".\")&&(p=c.slice(1)),p.indexOf(\"]\")===p.length-1){var d=p.indexOf(\"[\"),v=p.slice(0,d),g=p.slice(d+1,p.length-1);h=v?n[v][g]:n[g]}else h=n[p]}var y,m=r[f].type;switch(m){case\"bool\":case\"int\":case\"sampler2D\":case\"samplerCube\":t.uniform1i(s[f],h);break;case\"float\":t.uniform1f(s[f],h);break;default:var x=m.indexOf(\"vec\");if(!(0<=x&&x<=1&&m.length===4+x)){if(0===m.indexOf(\"mat\")&&4===m.length){if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+m);t[\"uniformMatrix\"+y+\"fv\"](s[f],!1,h);break}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+m)}if((y=m.charCodeAt(m.length-1)-48)<2||y>4)throw new i(\"\",\"Invalid data type\");switch(m.charAt(0)){case\"b\":case\"i\":t[\"uniform\"+y+\"iv\"](s[f],h);break;case\"v\":t[\"uniform\"+y+\"fv\"](s[f],h);break;default:throw new i(\"\",\"Unrecognized data type for vector \"+name+\": \"+m)}}}}}}function u(t,e){if(\"object\"!=typeof e)return[[t,e]];var r=[];for(var n in e){var i=e[n],a=t;parseInt(n)+\"\"===n?a+=\"[\"+n+\"]\":a+=\".\"+n,\"object\"==typeof i?r.push.apply(r,u(a,i)):r.push([a,i])}return r}function c(t,e,n){if(\"object\"==typeof n){var u=f(n);Object.defineProperty(t,e,{get:a(u),set:l(n),enumerable:!0,configurable:!1})}else s[n]?Object.defineProperty(t,e,{get:(c=n,function(t,e,r){return t.getUniform(e.program,r[c])}),set:l(n),enumerable:!0,configurable:!1}):t[e]=function(t){switch(t){case\"bool\":return!1;case\"int\":case\"sampler2D\":case\"samplerCube\":case\"float\":return 0;default:var e=t.indexOf(\"vec\");if(0<=e&&e<=1&&t.length===4+e){if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i(\"\",\"Invalid data type\");return\"b\"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf(\"mat\")&&4===t.length){var r;if((r=t.charCodeAt(t.length-1)-48)<2||r>4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+t);return o(r*r,0)}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+t)}}(r[n].type);var c}function f(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)c(e,r,t[r])}else for(var n in e={},t)c(e,n,t[n]);return e}var h=n(r,!0);return{get:a(f(h)),set:l(h),enumerable:!0,configurable:!0}}},3984:function(t){\"use strict\";t.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var i=t[n].name.split(\".\"),a=r,o=0;o<i.length;++o){var s=i[o].split(\"[\");if(s.length>1){s[0]in a||(a[s[0]]=[]),a=a[s[0]];for(var l=1;l<s.length;++l){var u=parseInt(s[l]);l<s.length-1||o<i.length-1?(u in a||(l<s.length-1?a[u]=[]:a[u]={}),a=a[u]):a[u]=e?n:t[n].type}}else o<i.length-1?(s[0]in a||(a[s[0]]={}),a=a[s[0]]):a[s[0]]=e?n:t[n].type}return r}},2631:function(t,e){\"use strict\";e.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=i(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace(\"[0]\",\"[\"+l+\"]\"),type:s});else n.push({name:o.name,type:s})}}return n},e.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&n.push({name:o.name,type:i(t,o.type)})}return n};var r={FLOAT:\"float\",FLOAT_VEC2:\"vec2\",FLOAT_VEC3:\"vec3\",FLOAT_VEC4:\"vec4\",INT:\"int\",INT_VEC2:\"ivec2\",INT_VEC3:\"ivec3\",INT_VEC4:\"ivec4\",BOOL:\"bool\",BOOL_VEC2:\"bvec2\",BOOL_VEC3:\"bvec3\",BOOL_VEC4:\"bvec4\",FLOAT_MAT2:\"mat2\",FLOAT_MAT3:\"mat3\",FLOAT_MAT4:\"mat4\",SAMPLER_2D:\"sampler2D\",SAMPLER_CUBE:\"samplerCube\"},n=null;function i(t,e){if(!n){var i=Object.keys(r);n={};for(var a=0;a<i.length;++a){var o=i[a];n[t[o]]=r[o]}}return n[e]}},1628:function(t,e,r){\"use strict\";e.shader=function(t,e,r){return c(t).getShaderReference(e,r)},e.program=function(t,e,r,n,i){return c(t).getProgram(e,r,n,i)};var n=r(9068),i=r(3530),a=new(\"undefined\"==typeof WeakMap?r(4037):WeakMap),o=0;function s(t,e,r,n,i,a,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=a,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,i=r.length;n<i;++n){var a=t.programs[r[n]];a&&(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var u=l.prototype;function c(t){var e=a.get(t);return e||(e=new l(t),a.set(t,e)),e}u.getShaderReference=function(t,e){var r=this.gl,a=this.shaders[t===r.FRAGMENT_SHADER|0],l=a[e];if(l&&r.isShader(l.shader))l.count+=1;else{var u=function(t,e,r){var a=t.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(a);try{var s=i(o,r,e)}catch(t){throw console.warn(\"Failed to format compiler error: \"+t),new n(o,\"Error compiling shader:\\n\"+o)}throw new n(o,s.short,s.long)}return a}(r,t,e);l=a[e]=new s(o++,e,t,u,[],1,this)}return l},u.getProgram=function(t,e,r,i){var a=[t.id,e.id,r.join(\":\"),i.join(\":\")].join(\"@\"),o=this.programs[a];return o&&this.gl.isProgram(o)||(this.programs[a]=o=function(t,e,r,i,a){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<i.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,\"Error linking program: \"+l)}return o}(this.gl,t.shader,e.shader,r,i),t.programs.push(a),e.programs.push(a)),o}},3050:function(t){\"use strict\";function e(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}t.exports=function(t,r){var n=new e(t);return n.update(r),t.addOverlay(n),n};var r=e.prototype;r.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map((function(t){return t.slice()})),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},r.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),u=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,u,s[0],u,e[0],r[0]),t[1]&&a.drawLine(l,u,l,s[1],e[1],r[1]),t[2]&&a.drawLine(l,u,s[2],u,e[2],r[2]),t[3]&&a.drawLine(l,u,l,s[3],e[3],r[3])}},r.dispose=function(){this.plot.removeOverlay(this)}},3540:function(t,e,r){\"use strict\";var n=r(6832),i=r(5158),a=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, color;\\nattribute float weight;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 coordinates[3];\\nuniform vec4 colors[3];\\nuniform vec2 screenShape;\\nuniform float lineWidth;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vertexPosition = mix(coordinates[0],\\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\\n\\n  vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\\n  vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\\n  vec2 delta = weight * clipOffset * screenShape;\\n  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\\n\\n  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\\n  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\\n}\\n\"]),o=n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  gl_FragColor = fragColor;\\n}\"]);t.exports=function(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec3\"},{name:\"weight\",type:\"float\"}])}},6496:function(t,e,r){\"use strict\";var n=r(5827),i=r(2944),a=r(3540);t.exports=function(t,e){var r=[];function o(t,e,n,i,a,o){var s=[t,e,n,0,0,0,1];s[i+3]=1,s[i]=a,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[i]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[i]=a,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),u=i(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),c=a(t);c.attributes.position.location=0,c.attributes.color.location=1,c.attributes.weight.location=2;var f=new s(t,l,u,c);return f.update(e),f};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,u=[0,0,0],c=[0,0,0],f=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var i,a=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(i=this.axes.lastCubeProps.axis);for(var h=u,p=c,d=0;d<3;++d)i&&i[d]<0?(h[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(h[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);for(f[0]=e.drawingBufferWidth,f[1]=e.drawingBufferHeight,n.uniforms.model=a,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,h,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=f,d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&(\"bounds\"in t&&(this.bounds=t.bounds),\"position\"in t&&(this.position=t.position),\"lineWidth\"in t&&(this.lineWidth=t.lineWidth),\"colors\"in t&&(this.colors=t.colors),\"enabled\"in t&&(this.enabled=t.enabled),\"drawSides\"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},9578:function(t,e,r){var n=r(6832),i=n([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount = 8.0;\\n\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d);\\n  vec3 y = v * sin(angle) * length(d);\\n  vec3 v3 = x + y;\\n\\n  normal = normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, tubeScale;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model & view changes.\\n  vec3 normal;\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * tubePosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  = model * vec4(tubePosition, 1.0);\\n  vec4 t_position  = view * tubePosition;\\n  gl_Position      = projection * t_position;\\n\\n  f_color          = color;\\n  f_data           = tubePosition.xyz;\\n  f_position       = position.xyz;\\n  f_uv             = uv;\\n}\\n\"]),a=n([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H = normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\n  float G = min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D = beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F = pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N = normalize(f_normal);\\n  vec3 L = normalize(f_lightDirection);\\n  vec3 V = normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = litColor * opacity;\\n}\\n\"]),o=n([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\n  // Assign z = 0, x = -b, y = a:\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount = 8.0;\\n\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u = getOrthogonalVector(d);\\n  vec3 v = normalize(cross(u, d));\\n\\n  vec3 x = u * cos(angle) * length(d);\\n  vec3 y = v * sin(angle) * length(d);\\n  vec3 v3 = x + y;\\n\\n  normal = normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float tubeScale;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  gl_Position = projection * view * tubePosition;\\n  f_id        = id;\\n  f_position  = position.xyz;\\n}\\n\"]),s=n([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\n}\"]);e.meshShader={vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec4\"}]},e.pickShader={vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec4\"}]}},7307:function(t,e,r){\"use strict\";var n=r(2858),i=r(4020),a=[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"],o=function(t,e){var r,n=t.length;for(r=0;r<n;r++){var i=t[r];if(i===e)return r;if(i>e)return r-1}return r},s=function(t,e,r){return t<e?e:t>r?r:t},l=function(t){var e=1/0;t.sort((function(t,e){return t-e}));for(var r=t.length,n=1;n<r;n++){var i=Math.abs(t[n]-t[n-1]);i<e&&(e=i)}return e};t.exports=function(t,e){var r=t.startingPositions,u=t.maxLength||1e3,c=t.tubeSize||1,f=t.absoluteTubeSize,h=t.gridFill||\"+x+y+z\",p={};-1!==h.indexOf(\"-x\")&&(p.reversedX=!0),-1!==h.indexOf(\"-y\")&&(p.reversedY=!0),-1!==h.indexOf(\"-z\")&&(p.reversedZ=!0),p.filled=a.indexOf(h.replace(/-/g,\"\").replace(/\\+/g,\"\"));var d=t.getVelocity||function(e){return function(t,e,r){var i=e.vectors,a=e.meshgrid,l=t[0],u=t[1],c=t[2],f=a[0].length,h=a[1].length,p=a[2].length,d=o(a[0],l),v=o(a[1],u),g=o(a[2],c),y=d+1,m=v+1,x=g+1;if(d=s(d,0,f-1),y=s(y,0,f-1),v=s(v,0,h-1),m=s(m,0,h-1),g=s(g,0,p-1),x=s(x,0,p-1),d<0||v<0||g<0||y>f-1||m>h-1||x>p-1)return n.create();var b,_,w,T,k,A,M=a[0][d],S=a[0][y],E=a[1][v],L=a[1][m],C=a[2][g],P=(l-M)/(S-M),O=(u-E)/(L-E),I=(c-C)/(a[2][x]-C);switch(isFinite(P)||(P=.5),isFinite(O)||(O=.5),isFinite(I)||(I=.5),r.reversedX&&(d=f-1-d,y=f-1-y),r.reversedY&&(v=h-1-v,m=h-1-m),r.reversedZ&&(g=p-1-g,x=p-1-x),r.filled){case 5:k=g,A=x,w=v*p,T=m*p,b=d*p*h,_=y*p*h;break;case 4:k=g,A=x,b=d*p,_=y*p,w=v*p*f,T=m*p*f;break;case 3:w=v,T=m,k=g*h,A=x*h,b=d*h*p,_=y*h*p;break;case 2:w=v,T=m,b=d*h,_=y*h,k=g*h*f,A=x*h*f;break;case 1:b=d,_=y,k=g*f,A=x*f,w=v*f*p,T=m*f*p;break;default:b=d,_=y,w=v*f,T=m*f,k=g*f*h,A=x*f*h}var D=i[b+w+k],z=i[b+w+A],R=i[b+T+k],F=i[b+T+A],B=i[_+w+k],N=i[_+w+A],j=i[_+T+k],U=i[_+T+A],V=n.create(),H=n.create(),q=n.create(),G=n.create();n.lerp(V,D,B,P),n.lerp(H,z,N,P),n.lerp(q,R,j,P),n.lerp(G,F,U,P);var Z=n.create(),Y=n.create();n.lerp(Z,V,q,O),n.lerp(Y,H,G,O);var W=n.create();return n.lerp(W,Z,Y,I),W}(e,t,p)},v=t.getDivergence||function(t,e){var r=n.create(),i=1e-4;n.add(r,t,[i,0,0]);var a=d(r);n.subtract(a,a,e),n.scale(a,a,1/i),n.add(r,t,[0,i,0]);var o=d(r);n.subtract(o,o,e),n.scale(o,o,1/i),n.add(r,t,[0,0,i]);var s=d(r);return n.subtract(s,s,e),n.scale(s,s,1/i),n.add(r,a,o),n.add(r,r,s),r},g=[],y=e[0][0],m=e[0][1],x=e[0][2],b=e[1][0],_=e[1][1],w=e[1][2],T=function(t){var e=t[0],r=t[1],n=t[2];return!(e<y||e>b||r<m||r>_||n<x||n>w)},k=10*n.distance(e[0],e[1])/u,A=k*k,M=1,S=0,E=r.length;E>1&&(M=function(t){for(var e=[],r=[],n=[],i={},a={},o={},s=t.length,u=0;u<s;u++){var c=t[u],f=c[0],h=c[1],p=c[2];i[f]||(e.push(f),i[f]=!0),a[h]||(r.push(h),a[h]=!0),o[p]||(n.push(p),o[p]=!0)}var d=l(e),v=l(r),g=l(n),y=Math.min(d,v,g);return isFinite(y)?y:1}(r));for(var L=0;L<E;L++){var C=n.create();n.copy(C,r[L]);var P=[C],O=[],I=d(C),D=C;O.push(I);var z=[],R=v(C,I),F=n.length(R);isFinite(F)&&F>S&&(S=F),z.push(F),g.push({points:P,velocities:O,divergences:z});for(var B=0;B<100*u&&P.length<u&&T(C);){B++;var N=n.clone(I),j=n.squaredLength(N);if(0===j)break;j>A&&n.scale(N,N,k/Math.sqrt(j)),n.add(N,N,C),I=d(N),n.squaredDistance(D,N)-A>-1e-4*A&&(P.push(N),D=N,O.push(I),R=v(N,I),F=n.length(R),isFinite(F)&&F>S&&(S=F),z.push(F)),C=N}}var U=function(t,e,r,a){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,u=0;u<l.length;u++)o=Math.max(o,n.length(l[u]));var c=t.map((function(t){return function(t,e,r,a){for(var o=t.points,s=t.velocities,l=t.divergences,u=[],c=[],f=[],h=[],p=[],d=[],v=0,g=0,y=i.create(),m=i.create(),x=0;x<o.length;x++){var b=o[x],_=s[x],w=l[x];0===e&&(w=.05*r),g=n.length(_)/a,y=i.create(),n.copy(y,_),y[3]=w;for(var T=0;T<8;T++)p[T]=[b[0],b[1],b[2],T];if(h.length>0)for(T=0;T<8;T++){var k=(T+1)%8;u.push(h[T],p[T],p[k],p[k],h[k],h[T]),f.push(m,y,y,y,m,m),d.push(v,g,g,g,v,v);var A=u.length;c.push([A-6,A-5,A-4],[A-3,A-2,A-1])}var M=h;h=p,p=M;var S=m;m=y,y=S;var E=v;v=g,g=E}return{positions:u,cells:c,vectors:f,vertexIntensity:d}}(t,r,a,o)})),f=[],h=[],p=[],d=[];for(s=0;s<c.length;s++){var v=c[s],g=f.length;for(f=f.concat(v.positions),p=p.concat(v.vectors),d=d.concat(v.vertexIntensity),u=0;u<v.cells.length;u++){var y=v.cells[u],m=[];h.push(m);for(var x=0;x<y.length;x++)m.push(y[x]+g)}}return{positions:f,cells:h,vectors:p,vertexIntensity:d,colormap:e}}(g,t.colormap,S,M);return f?U.tubeScale=f:(0===S&&(S=1),U.tubeScale=.5*c*M/S),U};var u=r(9578),c=r(1140).createMesh;t.exports.createTubeMesh=function(t,e){return c(t,e,{shaders:u,traceType:\"streamtube\"})}},9054:function(t,e,r){var n=r(5158),i=r(6832),a=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute vec3 f;\\nattribute vec3 normal;\\n\\nuniform vec3 objectOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 lightPosition, eyePosition;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 localCoordinate = vec3(uv.zw, f.x);\\n  worldCoordinate = objectOffset + localCoordinate;\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\n  vec4 clipPosition = projection * view * worldPosition;\\n  gl_Position = clipPosition;\\n  kill = f.y;\\n  value = f.z;\\n  planeCoordinate = uv.xy;\\n\\n  vColor = texture2D(colormap, vec2(value, value));\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate = view * worldPosition;\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\n  lightDirection = lightPosition - cameraCoordinate.xyz;\\n  eyeDirection   = eyePosition - cameraCoordinate.xyz;\\n  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);\\n}\\n\"]),o=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH = max(x, 0.0001);\\n  float cos2Alpha = NdotH * NdotH;\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 = roughness * roughness;\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat beckmannSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness) {\\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 lowerBound, upperBound;\\nuniform float contourTint;\\nuniform vec4 contourColor;\\nuniform sampler2D colormap;\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform float vertexColor;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  if (\\n    kill > 0.0 ||\\n    vColor.a == 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\\n  ) discard;\\n\\n  vec3 N = normalize(surfaceNormal);\\n  vec3 V = normalize(eyeDirection);\\n  vec3 L = normalize(lightDirection);\\n\\n  if(gl_FrontFacing) {\\n    N = -N;\\n  }\\n\\n  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  //decide how to interpolate color — in vertex or in fragment\\n  vec4 surfaceColor =\\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\\n    step(.5, vertexColor) * vColor;\\n\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\\n}\\n\"]),s=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute float f;\\n\\nuniform vec3 objectOffset;\\nuniform mat3 permutation;\\nuniform mat4 model, view, projection;\\nuniform float height, zOffset;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 dataCoordinate = permutation * vec3(uv.xy, height);\\n  worldCoordinate = objectOffset + dataCoordinate;\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\n\\n  vec4 clipPosition = projection * view * worldPosition;\\n  clipPosition.z += zOffset;\\n\\n  gl_Position = clipPosition;\\n  value = f + objectOffset.z;\\n  kill = -1.0;\\n  planeCoordinate = uv.zw;\\n\\n  vColor = texture2D(colormap, vec2(value, value));\\n\\n  //Don't do lighting for contours\\n  surfaceNormal   = vec3(1,0,0);\\n  eyeDirection    = vec3(0,1,0);\\n  lightDirection  = vec3(0,0,1);\\n}\\n\"]),l=i([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p > max(a, b)) || \\n          (p < min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec2 shape;\\nuniform vec3 clipBounds[2];\\nuniform float pickId;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 surfaceNormal;\\n\\nvec2 splitFloat(float v) {\\n  float vh = 255.0 * v;\\n  float upper = floor(vh);\\n  float lower = fract(vh);\\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\\n}\\n\\nvoid main() {\\n  if ((kill > 0.0) ||\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\n\\n  vec2 ux = splitFloat(planeCoordinate.x / shape.x);\\n  vec2 uy = splitFloat(planeCoordinate.y / shape.y);\\n  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\\n}\\n\"]);e.createShader=function(t){var e=n(t,a,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createPickShader=function(t){var e=n(t,a,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},e.createContourShader=function(t){var e=n(t,s,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},e.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},3754:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.gl,r=m(e),n=b(e),s=x(e),l=_(e),u=i(e),c=a(e,[{buffer:u,size:4,stride:w,offset:0},{buffer:u,size:3,stride:w,offset:16},{buffer:u,size:3,stride:w,offset:28}]),f=i(e),h=a(e,[{buffer:f,size:4,stride:20,offset:0},{buffer:f,size:1,stride:20,offset:16}]),p=i(e),d=a(e,[{buffer:p,size:2,type:e.FLOAT}]),v=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);v.minFilter=e.LINEAR,v.magFilter=e.LINEAR;var g=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,u,c,v,s,l,f,h,p,d,[0,0,0]),y={levels:[[],[],[]]};for(var T in t)y[T]=t[T];return y.colormap=y.colormap||\"jet\",g.update(y),g};var n=r(2288),i=r(5827),a=r(2944),o=r(8931),s=r(5306),l=r(9156),u=r(7498),c=r(7382),f=r(5050),h=r(4162),p=r(104),d=r(7437),v=r(5070),g=r(9144),y=r(9054),m=y.createShader,x=y.createContourShader,b=y.createPickShader,_=y.createPickContourShader,w=40,T=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],k=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],A=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function M(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}!function(){for(var t=0;t<3;++t){var e=A[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,i,a,o,l,u,c,h,p,d,v,g){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=g,this.intensityBounds=[],this._shader=n,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=u,this._contourPickShader=c,this._contourBuffer=h,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new M([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=v,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var L=E.prototype;L.genColormap=function(t,e){var r=!1,n=c([l({colormap:t,nshades:S,format:\"rgba\"}).map((function(t,n){var i=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(n/255,e):t[3];return i<1&&(r=!0),[t[0],t[1],t[2],255*i]}))]);return u.divseq(n,255),this.hasAlphaScale=r,n},L.isTransparent=function(){return this.opacity<1||this.hasAlphaScale},L.isOpaque=function(){return!this.isTransparent()},L.pickSlots=1,L.setPickBase=function(t){this.pickId=t};var C=[0,0,0],P={showSurface:!1,showContour:!1,projections:[T.slice(),T.slice(),T.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||C,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],p(l,t.model,l);var u=P.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)u[i][n]=t.clipBounds[i][n];u[0][r]=-1e8,u[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var I={model:T,view:T,projection:T,inverseModel:T.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},D=T.slice(),z=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=I;n.model=t.model||T,n.view=t.view||T,n.projection=t.projection||T,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=z,n.vertexColor=this.vertexColor;var s=D;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i=0;i<3;++i)n.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var u=s[12+i];for(o=0;o<3;++o)u+=s[4*o+i]*this.lightPosition[o];n.lightPosition[i]=u/l}var c=O(n,this);if(c.showSurface){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=c.projections[i],this._shader.uniforms.clipBounds=c.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(c.showContour){var f=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,f.bind(),f.uniforms=n;var h=this._contourVAO;for(h.bind(),i=0;i<3;++i)for(f.uniforms.permutation=A[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o<this.contourLevels[i].length;++o)o===this.highlightLevel[i]?(f.uniforms.contourColor=this.highlightColor[i],f.uniforms.contourTint=this.highlightTint[i]):0!==o&&o-1!==this.highlightLevel[i]||(f.uniforms.contourColor=this.contourColor[i],f.uniforms.contourTint=this.contourTint[i]),this._contourCounts[i][o]&&(f.uniforms.height=this.contourLevels[i][o],h.draw(r.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i=0;i<3;++i)for(f.uniforms.model=c.projections[i],f.uniforms.clipBounds=c.clipBounds[i],o=0;o<3;++o)if(this.contourProject[i][o]){f.uniforms.permutation=A[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var v=0;v<this.contourLevels[o].length;++v)v===this.highlightLevel[o]?(f.uniforms.contourColor=this.highlightColor[o],f.uniforms.contourTint=this.highlightTint[o]):0!==v&&v-1!==this.highlightLevel[o]||(f.uniforms.contourColor=this.contourColor[o],f.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][v]&&(f.uniforms.height=this.contourLevels[o][v],h.draw(r.LINES,this._contourCounts[o][v],this._contourOffsets[o][v]))}for(h.unbind(),(h=this._dynamicVAO).bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(f.uniforms.model=n.model,f.uniforms.clipBounds=n.clipBounds,f.uniforms.permutation=A[i],r.lineWidth(this.dynamicWidth[i]*this.pixelRatio),f.uniforms.contourColor=this.dynamicColor[i],f.uniforms.contourTint=this.dynamicTint[i],f.uniforms.height=this.dynamicLevel[i],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o=0;o<3;++o)this.contourProject[o][i]&&(f.uniforms.model=c.projections[o],f.uniforms.clipBounds=c.clipBounds[o],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));h.unbind()}}L.draw=function(t){return R.call(this,t,!1)},L.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:T,view:T,projection:T,inverseModel:T,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}L.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||T,r.view=t.view||T,r.projection=t.projection||T,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=z;for(var n=0;n<2;++n)for(var i=r.clipBounds[n],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation=A[a],n=0;n<this.contourLevels[a].length;++n)this._contourCounts[a][n]&&(s.uniforms.height=this.contourLevels[a][n],l.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],a=0;a<3;++a)if(this.contourProject[n][a]){s.uniforms.permutation=A[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var u=0;u<this.contourLevels[a].length;++u)this._contourCounts[a][u]&&(s.uniforms.height=this.contourLevels[a][u],l.draw(e.LINES,this._contourCounts[a][u],this._contourOffsets[a][u]))}l.unbind()}},L.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var u=r.position;u[0]=u[1]=u[2]=0;for(var c=0;c<2;++c)for(var f=c?a:1-a,h=0;h<2;++h)for(var p=i+c,d=s+h,g=f*(h?l:1-l),y=0;y<3;++y)u[y]+=this._field[y].get(p,d)*g;for(var m=this._pickResult.level,x=0;x<3;++x)if(m[x]=v.le(this.contourLevels[x],u[x]),m[x]<0)this.contourLevels[x].length>0&&(m[x]=0);else if(m[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][m[x]],_=this.contourLevels[x][m[x]+1];Math.abs(b-u[x])>Math.abs(_-u[x])&&(m[x]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],y=0;y<3;++y)r.dataCoordinate[y]=this._field[y].get(r.index[0],r.index[1]);return r},L.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();u.assign(t.lo(1,1).hi(r[0],r[1]),e),u.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),u.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),u.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),u.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},L.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,\"contourWidth\"in t&&(this.contourWidth=B(t.contourWidth,Number)),\"showContour\"in t&&(this.showContour=B(t.showContour,Boolean)),\"showSurface\"in t&&(this.showSurface=!!t.showSurface),\"contourTint\"in t&&(this.contourTint=B(t.contourTint,Boolean)),\"contourColor\"in t&&(this.contourColor=j(t.contourColor)),\"contourProject\"in t&&(this.contourProject=B(t.contourProject,(function(t){return B(t,Boolean)}))),\"surfaceProject\"in t&&(this.surfaceProject=t.surfaceProject),\"dynamicColor\"in t&&(this.dynamicColor=j(t.dynamicColor)),\"dynamicTint\"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),\"dynamicWidth\"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),\"opacity\"in t&&(this.opacity=t.opacity),\"opacityscale\"in t&&(this.opacityscale=t.opacityscale),\"colorBounds\"in t&&(this.colorBounds=t.colorBounds),\"vertexColor\"in t&&(this.vertexColor=t.vertexColor?1:0),\"colormap\"in t&&this._colorMap.setPixels(this.genColormap(t.colormap,this.opacityscale));var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),\"field\"in t||\"coords\"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(i))),this._field[2]=f(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var l=t.coords;if(!Array.isArray(l)||3!==l.length)throw new Error(\"gl-surface: invalid coordinates for x/y\");for(o=0;o<2;++o){var u=l[o];for(y=0;y<2;++y)if(u.shape[y]!==a[y])throw new Error(\"gl-surface: coords have incorrect shape\");this.padField(this._field[o],u)}}else if(t.ticks){var c=t.ticks;if(!Array.isArray(c)||2!==c.length)throw new Error(\"gl-surface: invalid ticks\");for(o=0;o<2;++o){var p=c[o];if((Array.isArray(p)||p.length)&&(p=f(p)),p.shape[0]!==a[o])throw new Error(\"gl-surface: invalid tick length\");var d=f(p.data,a);d.stride[o]=p.stride[0],d.stride[1^o]=0,this.padField(this._field[o],d)}}else{for(o=0;o<2;++o){var v=[0,0];v[o]=1,this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2],v,0)}this._field[0].set(0,0,0);for(var y=0;y<a[0];++y)this._field[0].set(y+1,0,y);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),y=0;y<a[1];++y)this._field[1].set(0,y+1,y);this._field[1].set(0,a[1]+1,a[1]-1)}var m=this._field,x=f(s.mallocFloat(3*m[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)g(x.pick(o),m[o],\"mirror\");var b=f(s.mallocFloat(3*m[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(y=0;y<a[1]+2;++y){var _=x.get(0,o,y,0),w=x.get(0,o,y,1),T=x.get(1,o,y,0),A=x.get(1,o,y,1),M=x.get(2,o,y,0),S=x.get(2,o,y,1),E=T*S-A*M,L=M*w-S*_,C=_*A-w*T,P=Math.sqrt(E*E+L*L+C*C);P<1e-8?(P=Math.max(Math.abs(E),Math.abs(L),Math.abs(C)))<1e-8?(C=1,L=E=0,P=1):P=1/P:P=1/Math.sqrt(P),b.set(o,y,0,E*P),b.set(o,y,1,L*P),b.set(o,y,2,C*P)}s.free(x.data);var O=[1/0,1/0,1/0],I=[-1/0,-1/0,-1/0],D=1/0,z=-1/0,R=(a[0]-1)*(a[1]-1)*6,F=s.mallocFloat(n.nextPow2(10*R)),N=0,U=0;for(o=0;o<a[0]-1;++o)t:for(y=0;y<a[1]-1;++y){for(var V=0;V<2;++V)for(var H=0;H<2;++H)for(var q=0;q<3;++q){var G=this._field[q].get(1+o+V,1+y+H);if(isNaN(G)||!isFinite(G))continue t}for(q=0;q<6;++q){var Z=o+k[q][0],Y=y+k[q][1],W=this._field[0].get(Z+1,Y+1),X=this._field[1].get(Z+1,Y+1);G=this._field[2].get(Z+1,Y+1),E=b.get(Z+1,Y+1,0),L=b.get(Z+1,Y+1,1),C=b.get(Z+1,Y+1,2),t.intensity&&(J=t.intensity.get(Z,Y));var J=t.intensity?t.intensity.get(Z,Y):G+this.objectOffset[2];F[N++]=Z,F[N++]=Y,F[N++]=W,F[N++]=X,F[N++]=G,F[N++]=0,F[N++]=J,F[N++]=E,F[N++]=L,F[N++]=C,O[0]=Math.min(O[0],W+this.objectOffset[0]),O[1]=Math.min(O[1],X+this.objectOffset[1]),O[2]=Math.min(O[2],G+this.objectOffset[2]),D=Math.min(D,J),I[0]=Math.max(I[0],W+this.objectOffset[0]),I[1]=Math.max(I[1],X+this.objectOffset[1]),I[2]=Math.max(I[2],G+this.objectOffset[2]),z=Math.max(z,J),U+=1}}for(t.intensityBounds&&(D=+t.intensityBounds[0],z=+t.intensityBounds[1]),o=6;o<N;o+=10)F[o]=(F[o]-D)/(z-D);this._vertexCount=U,this._coordinateBuffer.update(F.subarray(0,N)),s.freeFloat(F),s.free(b.data),this.bounds=[O,I],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===D&&this.intensityBounds[1]===z||(r=!0),this.intensityBounds=[D,z]}if(\"levels\"in t){var K=t.levels;for(K=Array.isArray(K[0])?K.slice():[[],[],K],o=0;o<3;++o)K[o]=K[o].slice(),K[o].sort((function(t,e){return t-e}));for(o=0;o<3;++o)for(y=0;y<K[o].length;++y)K[o][y]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(K[o].length!==this.contourLevels[o].length){r=!0;break}for(y=0;y<K[o].length;++y)if(K[o][y]!==this.contourLevels[o][y]){r=!0;break t}}this.contourLevels=K}if(r){m=this._field,a=this.shape;for(var $=[],Q=0;Q<3;++Q){var tt=this.contourLevels[Q],et=[],rt=[],nt=[0,0,0];for(o=0;o<tt.length;++o){var it=h(this._field[Q],tt[o]);et.push($.length/5|0),U=0;t:for(y=0;y<it.cells.length;++y){var at=it.cells[y];for(q=0;q<2;++q){var ot=it.positions[at[q]],st=ot[0],lt=0|Math.floor(st),ut=st-lt,ct=ot[1],ft=0|Math.floor(ct),ht=ct-ft,pt=!1;e:for(var dt=0;dt<3;++dt){nt[dt]=0;var vt=(Q+dt+1)%3;for(V=0;V<2;++V){var gt=V?ut:1-ut;for(Z=0|Math.min(Math.max(lt+V,0),a[0]),H=0;H<2;++H){var yt=H?ht:1-ht;if(Y=0|Math.min(Math.max(ft+H,0),a[1]),G=dt<2?this._field[vt].get(Z,Y):(this.intensity.get(Z,Y)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(G)||isNaN(G)){pt=!0;break e}var mt=gt*yt;nt[dt]+=mt*G}}}if(pt){if(q>0){for(var xt=0;xt<5;++xt)$.pop();U-=1}continue t}$.push(nt[0],nt[1],ot[0],ot[1],nt[2]),U+=1}}rt.push(U)}this._contourOffsets[Q]=et,this._contourCounts[Q]=rt}var bt=s.mallocFloat($.length);for(o=0;o<$.length;++o)bt[o]=$[o];this._contourBuffer.update(bt),s.freeFloat(bt)}},L.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},L.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,i=this.shape,a=s.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,u=(o+2)%3,c=this._field[o],f=this._field[l],p=this._field[u],d=h(c,r[o]),v=d.cells,g=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<v.length;++e)for(var y=v[e],m=0;m<2;++m){var x=g[y[m]],b=+x[0],_=0|b,w=0|Math.min(_+1,i[0]),T=b-_,k=1-T,A=+x[1],M=0|A,S=0|Math.min(M+1,i[1]),E=A-M,L=1-E,C=k*L,P=k*E,O=T*L,I=T*E,D=C*f.get(_,M)+P*f.get(_,S)+O*f.get(w,M)+I*f.get(w,S),z=C*p.get(_,M)+P*p.get(_,S)+O*p.get(w,M)+I*p.get(w,S);if(isNaN(D)||isNaN(z)){m&&(n-=1);break}a[2*n+0]=D,a[2*n+1]=z,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*n)),s.freeFloat(a)}}},8931:function(t,e,r){\"use strict\";var n=r(5050),i=r(7498),a=r(5306);t.exports=function(t){if(arguments.length<=1)throw new Error(\"gl-texture2d: Missing arguments for texture2d constructor\");if(o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t),\"number\"==typeof arguments[1])return g(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return g(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(\"object\"==typeof arguments[1]){var e=arguments[1],r=u(e)?e:e.raw;if(r)return function(t,e,r,n,i,a){var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new h(t,o,r,n,i,a)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error(\"gl-texture2d: Invalid texture size\");var l=d(o,e.stride.slice()),u=0;\"float32\"===r?u=t.FLOAT:\"float64\"===r?(u=t.FLOAT,l=!1,r=\"float32\"):\"uint8\"===r?u=t.UNSIGNED_BYTE:(u=t.UNSIGNED_BYTE,l=!1,r=\"uint8\");var f,p,g=0;if(2===o.length)g=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1===o[2])g=t.ALPHA;else if(2===o[2])g=t.LUMINANCE_ALPHA;else if(3===o[2])g=t.RGB;else{if(4!==o[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");g=t.RGBA}}u!==t.FLOAT||t.getExtension(\"OES_texture_float\")||(u=t.UNSIGNED_BYTE,l=!1);var y=e.size;if(l)f=0===e.offset&&e.data.length===y?e.data:e.data.subarray(e.offset,e.offset+y);else{var m=[o[2],o[2]*o[0],1];p=a.malloc(y,r);var x=n(p,o,m,0);\"float32\"!==r&&\"float64\"!==r||u!==t.UNSIGNED_BYTE?i.assign(x,e):c(x,e),f=p.subarray(0,y)}var b=v(t);return t.texImage2D(t.TEXTURE_2D,0,g,o[0],o[1],0,g,u,f),l||a.free(p),new h(t,b,o[0],o[1],g,u)}(t,e)}throw new Error(\"gl-texture2d: Invalid arguments for texture2d constructor\")};var o=null,s=null,l=null;function u(t){return\"undefined\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\"undefined\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||\"undefined\"!=typeof ImageData&&t instanceof ImageData}var c=function(t,e){i.muls(t,e,255)};function f(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\"gl-texture2d: Invalid texture size\");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function h(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=h.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function v(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function g(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error(\"gl-texture2d: Invalid texture shape\");if(i===t.FLOAT&&!t.getExtension(\"OES_texture_float\"))throw new Error(\"gl-texture2d: Floating point textures not supported on this platform\");var o=v(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new h(t,o,e,r,n,i)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\"OES_texture_float_linear\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\"OES_texture_float_linear\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension(\"EXT_texture_filter_anisotropic\");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error(\"gl-texture2d: Must specify wrap mode for rows and columns\");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error(\"gl-texture2d: Invalid texture shape\")}else t=[0|t,0|t];return f(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return f(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,f(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=u(t)?t:t.raw;if(l)this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l);else{if(!(t.shape&&t.stride&&t.data))throw new Error(\"gl-texture2d: Unsupported data type\");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error(\"gl-texture2d: Texture dimensions are out of bounds\");!function(t,e,r,o,s,l,u,f){var h=f.dtype,p=f.shape.slice();if(p.length<2||p.length>3)throw new Error(\"gl-texture2d: Invalid ndarray, must be 2d or 3d\");var v=0,g=0,y=d(p,f.stride.slice());if(\"float32\"===h?v=t.FLOAT:\"float64\"===h?(v=t.FLOAT,y=!1,h=\"float32\"):\"uint8\"===h?v=t.UNSIGNED_BYTE:(v=t.UNSIGNED_BYTE,y=!1,h=\"uint8\"),2===p.length)g=t.LUMINANCE,p=[p[0],p[1],1],f=n(f.data,p,[f.stride[0],f.stride[1],1],f.offset);else{if(3!==p.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1===p[2])g=t.ALPHA;else if(2===p[2])g=t.LUMINANCE_ALPHA;else if(3===p[2])g=t.RGB;else{if(4!==p[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");g=t.RGBA}p[2]}if(g!==t.LUMINANCE&&g!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(g=s),g!==s)throw new Error(\"gl-texture2d: Incompatible texture format for setPixels\");var m=f.size,x=u.indexOf(o)<0;if(x&&u.push(o),v===l&&y)0===f.offset&&f.data.length===m?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data.subarray(f.offset,f.offset+m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data.subarray(f.offset,f.offset+m));else{var b;b=l===t.FLOAT?a.mallocFloat32(m):a.mallocUint8(m);var _=n(b,p,[p[2],p[2]*p[0],1]);v===t.FLOAT&&l===t.UNSIGNED_BYTE?c(_,f):i.assign(_,f),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,m)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,m)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},3056:function(t){\"use strict\";t.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error(\"gl-vao: Too many vertex attributes\");for(var i=0;i<r.length;++i){var a=r[i];if(a.buffer){var o=a.buffer,s=a.size||4,l=a.type||t.FLOAT,u=!!a.normalized,c=a.stride||0,f=a.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,u,c,f)}else{if(\"number\"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error(\"gl-vao: Invalid vertex attribute\");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<n;++i)t.disableVertexAttribArray(i)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),i=0;i<n;++i)t.disableVertexAttribArray(i)}},7220:function(t,e,r){\"use strict\";var n=r(3056);function i(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},i.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.dispose=function(){},i.prototype.unbind=function(){},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t){return new i(t)}},3778:function(t,e,r){\"use strict\";var n=r(3056);function i(t,e,r,n,i,a){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=i,this.d=a}function a(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var a=0;a<t.length;++a){var o=t[a];\"number\"==typeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)&&this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},t.exports=function(t,e){return new a(t,e,e.createVertexArrayOES())}},2944:function(t,e,r){\"use strict\";var n=r(3778),i=r(7220);function a(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}t.exports=function(t,e,r,o){var s,l=t.createVertexArray?new a(t):t.getExtension(\"OES_vertex_array_object\");return(s=l?n(t,l):i(t)).update(e,r,o),s}},2598:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},5879:function(t,e,r){t.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);i(r,r),i(o,o);var s=a(r,o);return s>1?0:Math.acos(s)};var n=r(5415),i=r(899),a=r(9305)},8827:function(t){t.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},7622:function(t){t.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},8782:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},8501:function(t){t.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},903:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}},5981:function(t,e,r){t.exports=r(8288)},8288:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},8629:function(t,e,r){t.exports=r(7979)},7979:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},9305:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},154:function(t){t.exports=1e-6},4932:function(t,e,r){t.exports=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))};var n=r(154)},5777:function(t){t.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},3306:function(t){t.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},7447:function(t,e,r){t.exports=function(t,e,r,i,a,o){var s,l;for(e||(e=3),r||(r=0),l=i?Math.min(i*e+r,t.length):t.length,s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],a(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=r(8501)()},5415:function(t){t.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},2858:function(t,e,r){t.exports={EPSILON:r(154),create:r(8501),clone:r(7622),angle:r(5879),fromValues:r(5415),copy:r(8782),set:r(831),equals:r(4932),exactEquals:r(5777),add:r(2598),subtract:r(911),sub:r(8921),multiply:r(105),mul:r(5733),divide:r(7979),div:r(8629),min:r(3605),max:r(1716),floor:r(3306),ceil:r(8827),round:r(1624),scale:r(5685),scaleAndAdd:r(6722),distance:r(8288),dist:r(5981),squaredDistance:r(6403),sqrDist:r(5294),length:r(4693),len:r(1468),squaredLength:r(4337),sqrLen:r(3303),negate:r(435),inverse:r(2073),normalize:r(899),dot:r(9305),cross:r(903),lerp:r(1868),random:r(6660),transformMat4:r(3255),transformMat3:r(9908),transformQuat:r(6568),rotateX:r(392),rotateY:r(3222),rotateZ:r(3388),forEach:r(7447)}},2073:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},1468:function(t,e,r){t.exports=r(4693)},4693:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},1868:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}},1716:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},3605:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},5733:function(t,e,r){t.exports=r(105)},105:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},435:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},899:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t}},6660:function(t){t.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}},392:function(t){t.exports=function(t,e,r,n){var i=r[1],a=r[2],o=e[1]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=e[0],t[1]=i+o*u-s*l,t[2]=a+o*l+s*u,t}},3222:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[2],o=e[0]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+s*l+o*u,t[1]=e[1],t[2]=a+s*u-o*l,t}},3388:function(t){t.exports=function(t,e,r,n){var i=r[0],a=r[1],o=e[0]-i,s=e[1]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+o*u-s*l,t[1]=a+o*l+s*u,t[2]=e[2],t}},1624:function(t){t.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},5685:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},6722:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},831:function(t){t.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},5294:function(t,e,r){t.exports=r(6403)},3303:function(t,e,r){t.exports=r(4337)},6403:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}},4337:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},8921:function(t,e,r){t.exports=r(911)},911:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},9908:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},3255:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},6568:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t}},3433:function(t){t.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},1413:function(t){t.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},3470:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},5313:function(t){t.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},5446:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}},205:function(t){t.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},4242:function(t){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},5680:function(t){t.exports=function(t,e,r,n){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}},4020:function(t,e,r){t.exports={create:r(5313),clone:r(1413),fromValues:r(5680),copy:r(3470),set:r(6453),add:r(3433),subtract:r(2705),multiply:r(746),divide:r(205),min:r(2170),max:r(3030),scale:r(5510),scaleAndAdd:r(4224),distance:r(5446),squaredDistance:r(1542),length:r(8177),squaredLength:r(9037),negate:r(6459),inverse:r(8057),normalize:r(381),dot:r(4242),lerp:r(8746),random:r(3770),transformMat4:r(6342),transformQuat:r(5022)}},8057:function(t){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},8177:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}},8746:function(t){t.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},3030:function(t){t.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},2170:function(t){t.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},746:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},6459:function(t){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},381:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o),t}},3770:function(t,e,r){var n=r(381),i=r(5510);t.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),i(t,t,e),t}},5510:function(t){t.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},4224:function(t){t.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},6453:function(t){t.exports=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}},1542:function(t){t.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}},9037:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}},2705:function(t){t.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},6342:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},5022:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t[3]=e[3],t}},9365:function(t,e,r){var n=r(8096),i=r(7896);t.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var a=e[r];if(\"preprocessor\"===a.type){var o=a.data.match(/\\#define\\s+SHADER_NAME(_B64)?\\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?i(l):l).trim()}}}}},3193:function(t,e,r){t.exports=function(t){var e,r,T,k=0,A=0,M=l,S=[],E=[],L=1,C=0,P=0,O=!1,I=!1,D=\"\",z=a,R=n;\"300 es\"===(t=t||{}).version&&(z=s,R=o);var F={},B={};for(k=0;k<z.length;k++)F[z[k]]=!0;for(k=0;k<R.length;k++)B[R[k]]=!0;return function(t){return E=[],null!==t?function(t){var r;for(k=0,t.toString&&(t=t.toString()),D+=t.replace(/\\r\\n/g,\"\\n\"),T=D.length;e=D[k],k<T;){switch(r=k,M){case c:k=H();break;case f:case h:k=V();break;case p:k=q();break;case d:k=Y();break;case _:k=Z();break;case v:k=W();break;case u:k=X();break;case x:k=U();break;case l:k=j()}r!==k&&(\"\\n\"===D[r]?(C=0,++L):++C)}return A+=k,D=D.slice(k),E}(t):(S.length&&N(S.join(\"\")),M=b,N(\"(eof)\"),E)};function N(t){t.length&&E.push({type:w[M],data:t,position:P,line:L,column:C})}function j(){return S=S.length?[]:S,\"/\"===r&&\"*\"===e?(P=A+k-1,M=c,r=e,k+1):\"/\"===r&&\"/\"===e?(P=A+k-1,M=f,r=e,k+1):\"#\"===e?(M=h,P=A+k,k):/\\s/.test(e)?(M=x,P=A+k,k):(O=/\\d/.test(e),I=/[^\\w_]/.test(e),P=A+k,M=O?d:I?p:u,k)}function U(){return/[^\\s]/g.test(e)?(N(S.join(\"\")),M=l,k):(S.push(e),r=e,k+1)}function V(){return\"\\r\"!==e&&\"\\n\"!==e||\"\\\\\"===r?(S.push(e),r=e,k+1):(N(S.join(\"\")),M=l,k)}function H(){return\"/\"===e&&\"*\"===r?(S.push(e),N(S.join(\"\")),M=l,k+1):(S.push(e),r=e,k+1)}function q(){if(\".\"===r&&/\\d/.test(e))return M=v,k;if(\"/\"===r&&\"*\"===e)return M=c,k;if(\"/\"===r&&\"/\"===e)return M=f,k;if(\".\"===e&&S.length){for(;G(S););return M=v,k}if(\";\"===e||\")\"===e||\"(\"===e){if(S.length)for(;G(S););return N(e),M=l,k+1}var t=2===S.length&&\"=\"!==e;if(/[\\w_\\d\\s]/.test(e)||t){for(;G(S););return M=l,k}return S.push(e),r=e,k+1}function G(t){for(var e,r,n=0;;){if(e=i.indexOf(t.slice(0,t.length+n).join(\"\")),r=i[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join(\"\")}return N(r),P+=r.length,(S=S.slice(r.length)).length}}function Z(){return/[^a-fA-F0-9]/.test(e)?(N(S.join(\"\")),M=l,k):(S.push(e),r=e,k+1)}function Y(){return\".\"===e||/[eE]/.test(e)?(S.push(e),M=v,r=e,k+1):\"x\"===e&&1===S.length&&\"0\"===S[0]?(M=_,S.push(e),r=e,k+1):/[^\\d]/.test(e)?(N(S.join(\"\")),M=l,k):(S.push(e),r=e,k+1)}function W(){return\"f\"===e&&(S.push(e),r=e,k+=1),/[eE]/.test(e)?(S.push(e),r=e,k+1):(\"-\"!==e&&\"+\"!==e||!/[eE]/.test(r))&&/[^\\d]/.test(e)?(N(S.join(\"\")),M=l,k):(S.push(e),r=e,k+1)}function X(){if(/[^\\d\\w_]/.test(e)){var t=S.join(\"\");return M=B[t]?m:F[t]?y:g,N(S.join(\"\")),M=l,k}return S.push(e),r=e,k+1}};var n=r(399),i=r(9746),a=r(9525),o=r(9458),s=r(3585),l=999,u=9999,c=0,f=1,h=2,p=3,d=4,v=5,g=6,y=7,m=8,x=9,b=10,_=11,w=[\"block-comment\",\"line-comment\",\"preprocessor\",\"operator\",\"integer\",\"float\",\"ident\",\"builtin\",\"keyword\",\"whitespace\",\"eof\",\"integer\"]},3585:function(t,e,r){var n=r(9525);n=n.slice().filter((function(t){return!/^(gl\\_|texture)/.test(t)})),t.exports=n.concat([\"gl_VertexID\",\"gl_InstanceID\",\"gl_Position\",\"gl_PointSize\",\"gl_FragCoord\",\"gl_FrontFacing\",\"gl_FragDepth\",\"gl_PointCoord\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexUniformVectors\",\"gl_MaxVertexOutputVectors\",\"gl_MaxFragmentInputVectors\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxTextureImageUnits\",\"gl_MaxFragmentUniformVectors\",\"gl_MaxDrawBuffers\",\"gl_MinProgramTexelOffset\",\"gl_MaxProgramTexelOffset\",\"gl_DepthRangeParameters\",\"gl_DepthRange\",\"trunc\",\"round\",\"roundEven\",\"isnan\",\"isinf\",\"floatBitsToInt\",\"floatBitsToUint\",\"intBitsToFloat\",\"uintBitsToFloat\",\"packSnorm2x16\",\"unpackSnorm2x16\",\"packUnorm2x16\",\"unpackUnorm2x16\",\"packHalf2x16\",\"unpackHalf2x16\",\"outerProduct\",\"transpose\",\"determinant\",\"inverse\",\"texture\",\"textureSize\",\"textureProj\",\"textureLod\",\"textureOffset\",\"texelFetch\",\"texelFetchOffset\",\"textureProjOffset\",\"textureLodOffset\",\"textureProjLod\",\"textureProjLodOffset\",\"textureGrad\",\"textureGradOffset\",\"textureProjGrad\",\"textureProjGradOffset\"])},9525:function(t){t.exports=[\"abs\",\"acos\",\"all\",\"any\",\"asin\",\"atan\",\"ceil\",\"clamp\",\"cos\",\"cross\",\"dFdx\",\"dFdy\",\"degrees\",\"distance\",\"dot\",\"equal\",\"exp\",\"exp2\",\"faceforward\",\"floor\",\"fract\",\"gl_BackColor\",\"gl_BackLightModelProduct\",\"gl_BackLightProduct\",\"gl_BackMaterial\",\"gl_BackSecondaryColor\",\"gl_ClipPlane\",\"gl_ClipVertex\",\"gl_Color\",\"gl_DepthRange\",\"gl_DepthRangeParameters\",\"gl_EyePlaneQ\",\"gl_EyePlaneR\",\"gl_EyePlaneS\",\"gl_EyePlaneT\",\"gl_Fog\",\"gl_FogCoord\",\"gl_FogFragCoord\",\"gl_FogParameters\",\"gl_FragColor\",\"gl_FragCoord\",\"gl_FragData\",\"gl_FragDepth\",\"gl_FragDepthEXT\",\"gl_FrontColor\",\"gl_FrontFacing\",\"gl_FrontLightModelProduct\",\"gl_FrontLightProduct\",\"gl_FrontMaterial\",\"gl_FrontSecondaryColor\",\"gl_LightModel\",\"gl_LightModelParameters\",\"gl_LightModelProducts\",\"gl_LightProducts\",\"gl_LightSource\",\"gl_LightSourceParameters\",\"gl_MaterialParameters\",\"gl_MaxClipPlanes\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxDrawBuffers\",\"gl_MaxFragmentUniformComponents\",\"gl_MaxLights\",\"gl_MaxTextureCoords\",\"gl_MaxTextureImageUnits\",\"gl_MaxTextureUnits\",\"gl_MaxVaryingFloats\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxVertexUniformComponents\",\"gl_ModelViewMatrix\",\"gl_ModelViewMatrixInverse\",\"gl_ModelViewMatrixInverseTranspose\",\"gl_ModelViewMatrixTranspose\",\"gl_ModelViewProjectionMatrix\",\"gl_ModelViewProjectionMatrixInverse\",\"gl_ModelViewProjectionMatrixInverseTranspose\",\"gl_ModelViewProjectionMatrixTranspose\",\"gl_MultiTexCoord0\",\"gl_MultiTexCoord1\",\"gl_MultiTexCoord2\",\"gl_MultiTexCoord3\",\"gl_MultiTexCoord4\",\"gl_MultiTexCoord5\",\"gl_MultiTexCoord6\",\"gl_MultiTexCoord7\",\"gl_Normal\",\"gl_NormalMatrix\",\"gl_NormalScale\",\"gl_ObjectPlaneQ\",\"gl_ObjectPlaneR\",\"gl_ObjectPlaneS\",\"gl_ObjectPlaneT\",\"gl_Point\",\"gl_PointCoord\",\"gl_PointParameters\",\"gl_PointSize\",\"gl_Position\",\"gl_ProjectionMatrix\",\"gl_ProjectionMatrixInverse\",\"gl_ProjectionMatrixInverseTranspose\",\"gl_ProjectionMatrixTranspose\",\"gl_SecondaryColor\",\"gl_TexCoord\",\"gl_TextureEnvColor\",\"gl_TextureMatrix\",\"gl_TextureMatrixInverse\",\"gl_TextureMatrixInverseTranspose\",\"gl_TextureMatrixTranspose\",\"gl_Vertex\",\"greaterThan\",\"greaterThanEqual\",\"inversesqrt\",\"length\",\"lessThan\",\"lessThanEqual\",\"log\",\"log2\",\"matrixCompMult\",\"max\",\"min\",\"mix\",\"mod\",\"normalize\",\"not\",\"notEqual\",\"pow\",\"radians\",\"reflect\",\"refract\",\"sign\",\"sin\",\"smoothstep\",\"sqrt\",\"step\",\"tan\",\"texture2D\",\"texture2DLod\",\"texture2DProj\",\"texture2DProjLod\",\"textureCube\",\"textureCubeLod\",\"texture2DLodEXT\",\"texture2DProjLodEXT\",\"textureCubeLodEXT\",\"texture2DGradEXT\",\"texture2DProjGradEXT\",\"textureCubeGradEXT\"]},9458:function(t,e,r){var n=r(399);t.exports=n.slice().concat([\"layout\",\"centroid\",\"smooth\",\"case\",\"mat2x2\",\"mat2x3\",\"mat2x4\",\"mat3x2\",\"mat3x3\",\"mat3x4\",\"mat4x2\",\"mat4x3\",\"mat4x4\",\"uvec2\",\"uvec3\",\"uvec4\",\"samplerCubeShadow\",\"sampler2DArray\",\"sampler2DArrayShadow\",\"isampler2D\",\"isampler3D\",\"isamplerCube\",\"isampler2DArray\",\"usampler2D\",\"usampler3D\",\"usamplerCube\",\"usampler2DArray\",\"coherent\",\"restrict\",\"readonly\",\"writeonly\",\"resource\",\"atomic_uint\",\"noperspective\",\"patch\",\"sample\",\"subroutine\",\"common\",\"partition\",\"active\",\"filter\",\"image1D\",\"image2D\",\"image3D\",\"imageCube\",\"iimage1D\",\"iimage2D\",\"iimage3D\",\"iimageCube\",\"uimage1D\",\"uimage2D\",\"uimage3D\",\"uimageCube\",\"image1DArray\",\"image2DArray\",\"iimage1DArray\",\"iimage2DArray\",\"uimage1DArray\",\"uimage2DArray\",\"image1DShadow\",\"image2DShadow\",\"image1DArrayShadow\",\"image2DArrayShadow\",\"imageBuffer\",\"iimageBuffer\",\"uimageBuffer\",\"sampler1DArray\",\"sampler1DArrayShadow\",\"isampler1D\",\"isampler1DArray\",\"usampler1D\",\"usampler1DArray\",\"isampler2DRect\",\"usampler2DRect\",\"samplerBuffer\",\"isamplerBuffer\",\"usamplerBuffer\",\"sampler2DMS\",\"isampler2DMS\",\"usampler2DMS\",\"sampler2DMSArray\",\"isampler2DMSArray\",\"usampler2DMSArray\"])},399:function(t){t.exports=[\"precision\",\"highp\",\"mediump\",\"lowp\",\"attribute\",\"const\",\"uniform\",\"varying\",\"break\",\"continue\",\"do\",\"for\",\"while\",\"if\",\"else\",\"in\",\"out\",\"inout\",\"float\",\"int\",\"uint\",\"void\",\"bool\",\"true\",\"false\",\"discard\",\"return\",\"mat2\",\"mat3\",\"mat4\",\"vec2\",\"vec3\",\"vec4\",\"ivec2\",\"ivec3\",\"ivec4\",\"bvec2\",\"bvec3\",\"bvec4\",\"sampler1D\",\"sampler2D\",\"sampler3D\",\"samplerCube\",\"sampler1DShadow\",\"sampler2DShadow\",\"struct\",\"asm\",\"class\",\"union\",\"enum\",\"typedef\",\"template\",\"this\",\"packed\",\"goto\",\"switch\",\"default\",\"inline\",\"noinline\",\"volatile\",\"public\",\"static\",\"extern\",\"external\",\"interface\",\"long\",\"short\",\"double\",\"half\",\"fixed\",\"unsigned\",\"input\",\"output\",\"hvec2\",\"hvec3\",\"hvec4\",\"dvec2\",\"dvec3\",\"dvec4\",\"fvec2\",\"fvec3\",\"fvec4\",\"sampler2DRect\",\"sampler3DRect\",\"sampler2DRectShadow\",\"sizeof\",\"cast\",\"namespace\",\"using\"]},9746:function(t){t.exports=[\"<<=\",\">>=\",\"++\",\"--\",\"<<\",\">>\",\"<=\",\">=\",\"==\",\"!=\",\"&&\",\"||\",\"+=\",\"-=\",\"*=\",\"/=\",\"%=\",\"&=\",\"^^\",\"^=\",\"|=\",\"(\",\")\",\"[\",\"]\",\".\",\"!\",\"~\",\"*\",\"/\",\"%\",\"+\",\"-\",\"<\",\">\",\"&\",\"^\",\"|\",\"?\",\":\",\"=\",\",\",\";\",\"{\",\"}\"]},8096:function(t,e,r){var n=r(3193);t.exports=function(t,e){var r=n(e),i=[];return(i=i.concat(r(t))).concat(r(null))}},6832:function(t){t.exports=function(t){\"string\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||\"\");return r.push(t[n]),r.join(\"\")}},5233:function(t,e,r){\"use strict\";var n=r(4846);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(e){t=!1}return t}()},2183:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=t.length;if(0===r)throw new Error(\"Must have at least d+1 points\");var i=t[0].length;if(r<=i)throw new Error(\"Must input at least d+1 points\");var o=t.slice(0,i+1),s=n.apply(void 0,o);if(0===s)throw new Error(\"Input not in general position\");for(var l=new Array(i+1),c=0;c<=i;++c)l[c]=c;s<0&&(l[0]=1,l[1]=0);var f=new a(l,new Array(i+1),!1),h=f.adjacent,p=new Array(i+2);for(c=0;c<=i;++c){for(var d=l.slice(),v=0;v<=i;++v)v===c&&(d[v]=-1);var g=d[0];d[0]=d[1],d[1]=g;var y=new a(d,new Array(i+1),!0);h[c]=y,p[c]=y}for(p[i+1]=f,c=0;c<=i;++c){d=h[c].vertices;var m=h[c].adjacent;for(v=0;v<=i;++v){var x=d[v];if(x<0)m[v]=f;else for(var b=0;b<=i;++b)h[b].vertices.indexOf(x)<0&&(m[v]=h[b])}}var _=new u(i,o,p),w=!!e;for(c=i+1;c<r;++c)_.insert(t[c],w);return _.boundary()};var n=r(417),i=r(8211).H;function a(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function u(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter((function(t){return!t.boundary})),this.tuple=new Array(t+1);for(var i=0;i<=t;++i)this.tuple[i]=this.vertices[i];var a,o=l[t];o||(o=l[t]=((a=n[t+1])||(a=n),function(t){return function(){var e=this.tuple;return t.apply(this,e)}}(a))),this.orient=o}var c=u.prototype;c.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;)for(var s=(t=o.pop()).adjacent,l=0;l<=r;++l){var u=s[l];if(u.boundary&&!(u.lastVisited<=-n)){for(var c=u.vertices,f=0;f<=r;++f){var h=c[f];i[f]=h<0?e:a[h]}var p=this.orient();if(p>0)return u;u.lastVisited=-n,0===p&&o.push(u)}}return null},c.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,u=s.adjacent,c=0;c<=n;++c)a[c]=i[l[c]];for(s.lastVisited=r,c=0;c<=n;++c){var f=u[c];if(!(f.lastVisited>=r)){var h=a[c];a[c]=t;var p=this.orient();if(a[c]=h,p<0){s=f;continue t}f.boundary?f.lastVisited=-r:f.lastVisited=r}}return}return s},c.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,l=this.tuple,u=this.interior,c=this.simplices,f=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,u.push(e);for(var h=[];f.length>0;){var p=(e=f.pop()).vertices,d=e.adjacent,v=p.indexOf(r);if(!(v<0))for(var g=0;g<=n;++g)if(g!==v){var y=d[g];if(y.boundary&&!(y.lastVisited>=r)){var m=y.vertices;if(y.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)m[b]<0?(x=b,l[b]=t):l[b]=i[m[b]];if(this.orient()>0){m[x]=r,y.boundary=!1,u.push(y),f.push(y),y.lastVisited=r;continue}y.lastVisited=-r}var _=y.adjacent,w=p.slice(),T=d.slice(),k=new a(w,T,!0);c.push(k);var A=_.indexOf(e);if(!(A<0))for(_[A]=k,T[v]=y,w[g]=-1,T[g]=e,d[g]=k,k.flip(),b=0;b<=n;++b){var M=w[b];if(!(M<0||M===r)){for(var S=new Array(n-1),E=0,L=0;L<=n;++L){var C=w[L];C<0||L===b||(S[E++]=C)}h.push(new o(S,k,b))}}}}}for(h.sort(s),g=0;g+1<h.length;g+=2){var P=h[g],O=h[g+1],I=P.index,D=O.index;I<0||D<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},c.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=n.vertices[o];a[o]=s<0?t:r[s]}var l=this.orient(a);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},c.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,i=0;i<n;++i){var a=r[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,u=0,c=0;c<=t;++c)s[c]>=0?o[l++]=s[c]:u=1&c;if(u===(1&t)){var f=o[0];o[0]=o[1],o[1]=f}e.push(o)}}return e}},9014:function(t,e,r){\"use strict\";var n=r(5070);function i(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}t.exports=function(t){return t&&0!==t.length?new y(g(t)):new y(null)};var a=i.prototype;function o(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function s(t,e){var r=g(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function l(t,e){var r=t.intervals([]);r.push(e),s(t,r)}function u(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?0:(r.splice(n,1),s(t,r),1)}function c(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var i=r(t[n]);if(i)return i}}function f(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function h(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function p(t,e){return t-e}function d(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){return t[1]-e[1]||t[0]-e[0]}function g(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(p);var n=e[e.length>>1],a=[],o=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?a.push(l):n<l[0]?o.push(l):s.push(l)}var u=s,c=s.slice();return u.sort(d),c.sort(v),new i(n,g(a),g(o),u,c)}function y(t){this.root=t}a.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},a.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?l(this,t):this.left.insert(t):this.left=g([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?l(this,t):this.right.insert(t):this.right=g([t]);else{var r=n.ge(this.leftPoints,t,d),i=n.ge(this.rightPoints,t,v);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},a.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?u(this,t):2===(s=this.left.remove(t))?(this.left=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?u(this,t):2===(s=this.right.remove(t))?(this.right=null,this.count-=1,1):(1===s&&(this.count-=1),s):0;if(1===this.count)return this.leftPoints[0]===t?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,i=this.left;i.right;)r=i,i=i.right;if(r===this)i.right=this.right;else{var a=this.left,s=this.right;r.count-=i.count,r.right=i.left,i.left=a,i.right=s}o(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?o(this,this.left):o(this,this.right);return 1}for(a=n.ge(this.leftPoints,t,d);a<this.leftPoints.length&&this.leftPoints[a][0]===t[0];++a)if(this.leftPoints[a]===t)for(this.count-=1,this.leftPoints.splice(a,1),s=n.ge(this.rightPoints,t,v);s<this.rightPoints.length&&this.rightPoints[s][1]===t[1];++s)if(this.rightPoints[s]===t)return this.rightPoints.splice(s,1),1;return 0},a.queryPoint=function(t,e){return t<this.mid?this.left&&(r=this.left.queryPoint(t,e))?r:c(this.leftPoints,t,e):t>this.mid?this.right&&(r=this.right.queryPoint(t,e))?r:f(this.rightPoints,t,e):h(this.leftPoints,e);var r},a.queryInterval=function(t,e,r){var n;return t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r))||e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r))?n:e<this.mid?c(this.leftPoints,e,r):t>this.mid?f(this.rightPoints,t,r):h(this.leftPoints,r)};var m=y.prototype;m.insert=function(t){this.root?this.root.insert(t):this.root=new i(t[0],null,null,[t],[t])},m.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),0!==e}return!1},m.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},m.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(m,\"count\",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(m,\"intervals\",{get:function(){return this.root?this.root.intervals([]):[]}})},9560:function(t){\"use strict\";t.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},4846:function(t){t.exports=!0},4780:function(t){function e(t){return!!t.constructor&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return\"function\"==typeof t.readFloatLE&&\"function\"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},3596:function(t){\"use strict\";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},3578:function(t){t.exports=function(t,e,r){return t*(1-r)+e*r}},7191:function(t,e,r){var n=r(4690),i=r(9823),a=r(7332),o=r(7787),s=r(7437),l=r(2142),u={length:r(4693),normalize:r(899),dot:r(9305),cross:r(903)},c=i(),f=i(),h=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function v(t,e,r,n,i){t[0]=e[0]*n+r[0]*i,t[1]=e[1]*n+r[1]*i,t[2]=e[2]*n+r[2]*i}t.exports=function(t,e,r,i,g,y){if(e||(e=[0,0,0]),r||(r=[0,0,0]),i||(i=[0,0,0]),g||(g=[0,0,0,1]),y||(y=[0,0,0,1]),!n(c,t))return!1;if(a(f,c),f[3]=0,f[7]=0,f[11]=0,f[15]=1,Math.abs(o(f)<1e-8))return!1;var m,x,b,_,w,T,k,A=c[3],M=c[7],S=c[11],E=c[12],L=c[13],C=c[14],P=c[15];if(0!==A||0!==M||0!==S){if(h[0]=A,h[1]=M,h[2]=S,h[3]=P,!s(f,f))return!1;l(f,f),m=g,b=f,_=(x=h)[0],w=x[1],T=x[2],k=x[3],m[0]=b[0]*_+b[4]*w+b[8]*T+b[12]*k,m[1]=b[1]*_+b[5]*w+b[9]*T+b[13]*k,m[2]=b[2]*_+b[6]*w+b[10]*T+b[14]*k,m[3]=b[3]*_+b[7]*w+b[11]*T+b[15]*k}else g[0]=g[1]=g[2]=0,g[3]=1;if(e[0]=E,e[1]=L,e[2]=C,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,c),r[0]=u.length(p[0]),u.normalize(p[0],p[0]),i[0]=u.dot(p[0],p[1]),v(p[1],p[1],p[0],1,-i[0]),r[1]=u.length(p[1]),u.normalize(p[1],p[1]),i[0]/=r[1],i[1]=u.dot(p[0],p[2]),v(p[2],p[2],p[0],1,-i[1]),i[2]=u.dot(p[1],p[2]),v(p[2],p[2],p[1],1,-i[2]),r[2]=u.length(p[2]),u.normalize(p[2],p[2]),i[1]/=r[2],i[2]/=r[2],u.cross(d,p[1],p[2]),u.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return y[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),y[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),y[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),y[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(y[0]=-y[0]),p[0][2]>p[2][0]&&(y[1]=-y[1]),p[1][0]>p[0][1]&&(y[2]=-y[2]),!0}},4690:function(t){t.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},7649:function(t,e,r){var n=r(1868),i=r(1102),a=r(7191),o=r(7787),s=r(1116),l=f(),u=f(),c=f();function f(){return{translate:h(),scale:h(1),skew:h(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function h(t){return[t||0,t||0,t||0]}t.exports=function(t,e,r,f){if(0===o(e)||0===o(r))return!1;var h=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=a(r,u.translate,u.scale,u.skew,u.perspective,u.quaternion);return!(!h||!p||(n(c.translate,l.translate,u.translate,f),n(c.skew,l.skew,u.skew,f),n(c.scale,l.scale,u.scale,f),n(c.perspective,l.perspective,u.perspective,f),s(c.quaternion,l.quaternion,u.quaternion,f),i(t,c.translate,c.scale,c.skew,c.perspective,c.quaternion),0))}},1102:function(t,e,r){var n={identity:r(9947),translate:r(998),multiply:r(104),create:r(9823),scale:r(3668),fromRotationTranslation:r(7280)},i=(n.create(),n.create());t.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},9298:function(t,e,r){\"use strict\";var n=r(5070),i=r(7649),a=r(7437),o=r(6109),s=r(7115),l=r(5240),u=r(3012),c=r(998),f=(r(3668),r(899)),h=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}t.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,u=0;u<16;++u)o[u]=s[l++];else{var c=e[r+1]-e[r],h=(l=16*r,this.prevMatrix),p=!0;for(u=0;u<16;++u)h[u]=s[l++];var d=this.nextMatrix;for(u=0;u<16;++u)d[u]=s[l++],p=p&&h[u]===d[u];if(c<1e-6||p)for(u=0;u<16;++u)o[u]=h[u];else i(o,h,d,(t-e[r])/c)}var v=this.computedUp;v[0]=o[1],v[1]=o[5],v[2]=o[9],f(v,v);var g=this.computedInverse;a(g,o);var y=this.computedEye,m=g[15];y[0]=g[12]/m,y[1]=g[13]/m,y[2]=g[14]/m;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(u=0;u<3;++u)x[u]=y[u]-o[2+4*u]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||h,n=n||this.computedUp,this.setMatrix(t,u(this.computedMatrix,e,r,n));for(var i=0,a=0;a<3;++a)i+=Math.pow(r[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var i=this.computedInverse;e&&s(i,i,e),r&&o(i,i,r),n&&l(i,i,n),this.setMatrix(t,a(this.computedMatrix,i))};var v=[0,0,0];d.pan=function(t,e,r,n){v[0]=-(e||0),v[1]=-(r||0),v[2]=-(n||0),this.recalcMatrix(t);var i=this.computedInverse;c(i,i,v),this.setMatrix(t,a(i,i))},d.translate=function(t,e,r,n){v[0]=e||0,v[1]=r||0,v[2]=n||0,this.recalcMatrix(t);var i=this.computedMatrix;c(i,i,v),this.setMatrix(t,i)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},3266:function(t,e,r){\"use strict\";t.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),i=0;i<e;++i)r[i]=i;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}var a=new Array(e);for(i=0;i<e;++i)a[i]=i;a.sort((function(e,r){return t[e][0]-t[r][0]||t[e][1]-t[r][1]}));var o=[a[0],a[1]],s=[a[0],a[1]];for(i=2;i<e;++i){for(var l=a[i],u=t[l],c=o.length;c>1&&n(t[o[c-2]],t[o[c-1]],u)<=0;)c-=1,o.pop();for(o.push(l),c=s.length;c>1&&n(t[s[c-2]],t[s[c-1]],u)>=0;)c-=1,s.pop();s.push(l)}r=new Array(s.length+o.length-2);for(var f=0,h=(i=0,o.length);i<h;++i)r[f++]=o[i];for(var p=s.length-2;p>0;--p)r[f++]=s[p];return r};var n=r(417)[3]},6145:function(t,e,r){\"use strict\";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\"altKey\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\"shiftKey\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\"ctrlKey\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\"metaKey\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);\"buttons\"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener(\"mousemove\",p),t.addEventListener(\"mousedown\",d),t.addEventListener(\"mouseup\",v),t.addEventListener(\"mouseleave\",c),t.addEventListener(\"mouseenter\",c),t.addEventListener(\"mouseout\",c),t.addEventListener(\"mouseover\",c),t.addEventListener(\"blur\",f),t.addEventListener(\"keyup\",h),t.addEventListener(\"keydown\",h),t.addEventListener(\"keypress\",h),t!==window&&(window.addEventListener(\"blur\",f),window.addEventListener(\"keyup\",h),window.addEventListener(\"keydown\",h),window.addEventListener(\"keypress\",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener(\"mousemove\",p),t.removeEventListener(\"mousedown\",d),t.removeEventListener(\"mouseup\",v),t.removeEventListener(\"mouseleave\",c),t.removeEventListener(\"mouseenter\",c),t.removeEventListener(\"mouseout\",c),t.removeEventListener(\"mouseover\",c),t.removeEventListener(\"blur\",f),t.removeEventListener(\"keyup\",h),t.removeEventListener(\"keydown\",h),t.removeEventListener(\"keypress\",h),t!==window&&(window.removeEventListener(\"blur\",f),window.removeEventListener(\"keyup\",h),window.removeEventListener(\"keydown\",h),window.removeEventListener(\"keypress\",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(4110)},2565:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},4110:function(t,e){\"use strict\";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if(\"object\"==typeof t){if(\"buttons\"in t)return t.buttons;if(\"which\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\"button\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if(\"object\"==typeof t){if(\"offsetX\"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if(\"object\"==typeof t){if(\"offsetY\"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},6475:function(t,e,r){\"use strict\";var n=r(14);t.exports=function(t,e,r){\"function\"==typeof t&&(r=!!e,e=t,t=window);var i=n(\"ex\",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener(\"wheel\",a),a}},9284:function(t,e,r){\"use strict\";var n=r(5306);t.exports=function(t){function e(t){throw new Error(\"ndarray-extract-contour: \"+t)}\"object\"!=typeof t&&e(\"Must specify arguments\");var r=t.order;Array.isArray(r)||e(\"Must specify order\");var a=t.arrayArguments||1;a<1&&e(\"Must have at least one array argument\"),(t.scalarArguments||0)<0&&e(\"Scalar arg count must be > 0\"),\"function\"!=typeof t.vertex&&e(\"Must specify vertex creation function\"),\"function\"!=typeof t.cell&&e(\"Must specify cell creation function\"),\"function\"!=typeof t.phase&&e(\"Must specify phase function\");for(var o=t.getters||[],s=new Array(a),l=0;l<a;++l)o.indexOf(l)>=0?s[l]=!0:s[l]=!1;return function(t,e,r,a,o,s){var l=[s,o].join(\",\");return(0,i[l])(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,0,r,s)};var i={\"false,0,1\":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|d,k=v-d*c|0,A=0,M=0,S=0,E=2*c|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-c,F=0|c,B=0,N=-c-1|0,j=c-1|0,U=0,V=0,H=0;for(A=0;A<c;++A)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,f>0){if(M=1,L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,M=2;M<f;++M){if(L[P++]=r(h[g],o,s,l),g+=T,c>0)for(A=1,u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l)),P+=1,g+=T,A=2;A<c;++A)u=h[g],O=L[P]=r(u,o,s,l),z=L[P+I],B=L[P+R],U=L[P+N],O===z&&O===B&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,z,B,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,b,w,B,U,o,s,l),U!==z&&e(C[P+I],V,w,m,U,z,o,s,l)),P+=1,g+=T;1&M&&(P=0),H=I,I=D,D=H,H=R,R=F,F=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}},\"false,1,0\":function(t,e,r,n,i){return function(a,o,s,l){var u,c=0|a.shape[0],f=0|a.shape[1],h=a.data,p=0|a.offset,d=0|a.stride[0],v=0|a.stride[1],g=p,y=0|-d,m=0,x=0|-v,b=0,_=-d-v|0,w=0,T=0|v,k=d-v*f|0,A=0,M=0,S=0,E=2*f|0,L=n(E),C=n(E),P=0,O=0,I=-1,D=-1,z=0,R=0|-f,F=0|f,B=0,N=-f-1|0,j=f-1|0,U=0,V=0,H=0;for(M=0;M<f;++M)L[P++]=r(h[g],o,s,l),g+=T;if(g+=k,c>0){if(A=1,L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l)),P+=1,g+=T;for(g+=k,P=0,H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,A=2;A<c;++A){if(L[P++]=r(h[g],o,s,l),g+=T,f>0)for(M=1,u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T,M=2;M<f;++M)u=h[g],O=L[P]=r(u,o,s,l),B=L[P+R],z=L[P+I],U=L[P+N],O===B&&O===z&&O===U||(m=h[g+y],b=h[g+x],w=h[g+_],t(A,M,u,m,b,w,O,B,z,U,o,s,l),V=C[P]=S++,U!==z&&e(C[P+I],V,b,w,z,U,o,s,l),U!==B&&e(C[P+R],V,w,m,U,B,o,s,l)),P+=1,g+=T;1&A&&(P=0),H=R,R=F,F=H,H=I,I=D,D=H,H=N,N=j,j=H,g+=k}}i(C),i(L)}}}},9144:function(t,e,r){\"use strict\";var n=r(3094),i={zero:function(t,e,r,n){var i=t[0];n|=0;var a=0,o=r[0];for(a=0;a<i;++a)e[n]=0,n+=o},fdTemplate1:function(t,e,r,n,i,a,o){var s=t[0],l=r[0],u=-1*l,c=l;n|=0,o|=0;var f=0,h=l,p=a[0];for(f=0;f<s;++f)i[o]=.5*(e[n+u]-e[n+c]),n+=h,o+=p},fdTemplate2:function(t,e,r,n,i,a,o,s,l,u){var c=t[0],f=t[1],h=r[0],p=r[1],d=a[0],v=a[1],g=l[0],y=l[1],m=-1*h,x=h,b=-1*p,_=p;n|=0,o|=0,u|=0;var w=0,T=0,k=p,A=h-f*p,M=v,S=d-f*v,E=y,L=g-f*y;for(T=0;T<c;++T){for(w=0;w<f;++w)i[o]=.5*(e[n+m]-e[n+x]),s[u]=.5*(e[n+b]-e[n+_]),n+=k,o+=M,u+=E;n+=A,o+=S,u+=L}}},a={cdiff:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},zero:function(t){var e={};return function(r){var n=r.dtype,i=r.order,a=[n,i.join()].join(),o=e[a];return o||(e[a]=o=t([n,i])),o(r.shape.slice(0),r.data,r.stride,0|r.offset)}},fdTemplate1:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}},fdTemplate2:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}}};function o(t){return(0,a[t.funcName])(s.bind(void 0,t))}function s(t){return i[t.funcName]}function l(t){return o({funcName:t.funcName})}var u={},c={},f=l({funcName:\"cdiff\"}),h=l({funcName:\"zero\"});function p(t){return t in u?u[t]:u[t]=l({funcName:\"fdTemplate\"+t})}function d(t,e,r,n){return function(t,i){var a=i.shape.slice();return a[0]>2&&a[1]>2&&n(i.pick(-1,-1).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,0).lo(1,1).hi(a[0]-2,a[1]-2),t.pick(-1,-1,1).lo(1,1).hi(a[0]-2,a[1]-2)),a[1]>2&&(r(i.pick(0,-1).lo(1).hi(a[1]-2),t.pick(0,-1,1).lo(1).hi(a[1]-2)),e(t.pick(0,-1,0).lo(1).hi(a[1]-2))),a[1]>2&&(r(i.pick(a[0]-1,-1).lo(1).hi(a[1]-2),t.pick(a[0]-1,-1,1).lo(1).hi(a[1]-2)),e(t.pick(a[0]-1,-1,0).lo(1).hi(a[1]-2))),a[0]>2&&(r(i.pick(-1,0).lo(1).hi(a[0]-2),t.pick(-1,0,0).lo(1).hi(a[0]-2)),e(t.pick(-1,0,1).lo(1).hi(a[0]-2))),a[0]>2&&(r(i.pick(-1,a[1]-1).lo(1).hi(a[0]-2),t.pick(-1,a[1]-1,0).lo(1).hi(a[0]-2)),e(t.pick(-1,a[1]-1,1).lo(1).hi(a[0]-2))),t.set(0,0,0,0),t.set(0,0,1,0),t.set(a[0]-1,0,0,0),t.set(a[0]-1,0,1,0),t.set(0,a[1]-1,0,0),t.set(0,a[1]-1,1,0),t.set(a[0]-1,a[1]-1,0,0),t.set(a[0]-1,a[1]-1,1,0),t}}t.exports=function(t,e,r){return Array.isArray(r)||(r=n(e.dimension,\"string\"==typeof r?r:\"clamp\")),0===e.size?t:0===e.dimension?(t.set(0),t):function(t){var e=t.join();if(a=c[e])return a;for(var r=t.length,n=[f,h],i=1;i<=r;++i)n.push(p(i));var a=d.apply(void 0,n);return c[e]=a,a}(r)(t,e)}},3581:function(t){\"use strict\";function e(t,e){var r=Math.floor(e),n=e-r,i=0<=r&&r<t.shape[0],a=0<=r+1&&r+1<t.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function r(t,e,r){var n=Math.floor(e),i=e-n,a=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,u=0<=s&&s<t.shape[1],c=0<=s+1&&s+1<t.shape[1],f=a&&u?t.get(n,s):0,h=a&&c?t.get(n,s+1):0;return(1-l)*((1-i)*f+i*(o&&u?t.get(n+1,s):0))+l*((1-i)*h+i*(o&&c?t.get(n+1,s+1):0))}function n(t,e,r,n){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(r),u=r-l,c=0<=l&&l<t.shape[1],f=0<=l+1&&l+1<t.shape[1],h=Math.floor(n),p=n-h,d=0<=h&&h<t.shape[2],v=0<=h+1&&h+1<t.shape[2],g=o&&c&&d?t.get(i,l,h):0,y=o&&f&&d?t.get(i,l+1,h):0,m=s&&c&&d?t.get(i+1,l,h):0,x=s&&f&&d?t.get(i+1,l+1,h):0,b=o&&c&&v?t.get(i,l,h+1):0,_=o&&f&&v?t.get(i,l+1,h+1):0;return(1-p)*((1-u)*((1-a)*g+a*m)+u*((1-a)*y+a*x))+p*((1-u)*((1-a)*b+a*(s&&c&&v?t.get(i+1,l,h+1):0))+u*((1-a)*_+a*(s&&f&&v?t.get(i+1,l+1,h+1):0)))}function i(t){var e,r,n=0|t.shape.length,i=new Array(n),a=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],i[e]=Math.floor(r),a[e]=r-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,u,c,f=0;t:for(e=0;e<1<<n;++e){for(u=1,c=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;u*=a[l],c+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;u*=1-a[l],c+=t.stride[l]*i[l]}f+=u*t.data[c]}return f}t.exports=function(t,a,o,s){switch(t.shape.length){case 0:return 0;case 1:return e(t,a);case 2:return r(t,a,o);case 3:return n(t,a,o,s);default:return i.apply(void 0,arguments)}},t.exports.d1=e,t.exports.d2=r,t.exports.d3=n},7498:function(t,e){\"use strict\";var r={\"float64,2,1,0\":function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2];n|=0;var f=0,h=0,p=0,d=c,v=u-s*c,g=l-o*u;for(p=0;p<a;++p){for(h=0;h<o;++h){for(f=0;f<s;++f)e[n]/=i,n+=d;n+=v}n+=g}}},\"uint8,2,0,1,float64,2,1,0\":function(){return function(t,e,r,n,i,a,o,s){for(var l=t[0],u=t[1],c=t[2],f=r[0],h=r[1],p=r[2],d=a[0],v=a[1],g=a[2],y=n|=0,m=o|=0,x=0|t[0];x>0;){x<64?(l=x,x=0):(l=64,x-=64);for(var b=0|t[1];b>0;){b<64?(u=b,b=0):(u=64,b-=64),n=y+x*f+b*h,o=m+x*d+b*v;var _=0,w=0,T=0,k=p,A=f-c*p,M=h-l*f,S=g,E=d-c*g,L=v-l*d;for(T=0;T<u;++T){for(w=0;w<l;++w){for(_=0;_<c;++_)e[n]=i[o]*s,n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}},\"float32,1,0,float32,1,0\":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1];n|=0,o|=0;var p=0,d=0,v=c,g=u-l*c,y=h,m=f-l*h;for(d=0;d<s;++d){for(p=0;p<l;++p)e[n]=i[o],n+=v,o+=y;n+=g,o+=m}}},\"float32,1,0,float32,0,1\":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=r[0],c=r[1],f=a[0],h=a[1],p=n|=0,d=o|=0,v=0|t[1];v>0;){v<64?(l=v,v=0):(l=64,v-=64);for(var g=0|t[0];g>0;){g<64?(s=g,g=0):(s=64,g-=64),n=p+v*c+g*u,o=d+v*h+g*f;var y=0,m=0,x=c,b=u-l*c,_=h,w=f-l*h;for(m=0;m<s;++m){for(y=0;y<l;++y)e[n]=i[o],n+=x,o+=_;n+=b,o+=w}}}}},\"uint8,2,0,1,uint8,1,2,0\":function(){return function(t,e,r,n,i,a,o){for(var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2],g=n|=0,y=o|=0,m=0|t[2];m>0;){m<64?(u=m,m=0):(u=64,m-=64);for(var x=0|t[0];x>0;){x<64?(s=x,x=0):(s=64,x-=64);for(var b=0|t[1];b>0;){b<64?(l=b,b=0):(l=64,b-=64),n=g+m*h+x*c+b*f,o=y+m*v+x*p+b*d;var _=0,w=0,T=0,k=h,A=c-u*h,M=f-s*c,S=v,E=p-u*v,L=d-s*p;for(T=0;T<l;++T){for(w=0;w<s;++w){for(_=0;_<u;++_)e[n]=i[o],n+=k,o+=S;n+=A,o+=E}n+=M,o+=L}}}}}},\"uint8,2,0,1,array,2,0,1\":function(){return function(t,e,r,n,i,a,o){var s=t[0],l=t[1],u=t[2],c=r[0],f=r[1],h=r[2],p=a[0],d=a[1],v=a[2];n|=0,o|=0;var g=0,y=0,m=0,x=h,b=c-u*h,_=f-s*c,w=v,T=p-u*v,k=d-s*p;for(m=0;m<l;++m){for(y=0;y<s;++y){for(g=0;g<u;++g)e[n]=i[o],n+=x,o+=w;n+=b,o+=T}n+=_,o+=k}}}},n=function(t,e){var n=e.join(\",\");return(0,r[n])()},i={mul:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},muls:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},mulseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},div:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=i.dtype,c=i.order,f=[a,o.join(),s,l.join(),u,c.join()].join(),h=e[f];return h||(e[f]=h=t([a,o,s,l,u,c])),h(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i.data,i.stride,0|i.offset)}},divs:function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=n.dtype,l=n.order,u=[a,o.join(),s,l.join()].join(),c=e[u];return c||(e[u]=c=t([a,o,s,l])),c(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset,i)}},divseq:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}},assign:function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=n.dtype,s=n.order,l=[i,a.join(),o,s.join()].join(),u=e[l];return u||(e[l]=u=t([i,a,o,s])),u(r.shape.slice(0),r.data,r.stride,0|r.offset,n.data,n.stride,0|n.offset)}}};function a(t){return e={funcName:t.funcName},(0,i[e.funcName])(n.bind(void 0,e));var e}var o={mul:\"*\",div:\"/\"};!function(){for(var t in o)e[t]=a({funcName:t}),e[t+\"s\"]=a({funcName:t+\"s\"}),e[t+\"seq\"]=a({funcName:t+\"seq\"})}(),e.assign=a({funcName:\"assign\"})},7382:function(t,e,r){\"use strict\";var n=r(5050),i=r(9262);t.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},9262:function(t){\"use strict\";t.exports=function(t){var e={};return function(r,n){var i=r.dtype,a=r.order,o=[i,a.join()].join(),s=e[o];return s||(e[o]=s=t([i,a])),s(r.shape.slice(0),r.data,r.stride,0|r.offset,n)}}(function(){return function(t,e,r,n,i){var a=t[0],o=t[1],s=t[2],l=r[0],u=r[1],c=r[2],f=[0,0,0];n|=0;var h=0,p=0,d=0,v=c,g=u-s*c,y=l-o*u;for(d=0;d<a;++d){for(p=0;p<o;++p){for(h=0;h<s;++h){var m,x=i;for(m=0;m<f.length-1;++m)x=x[f[m]];e[n]=x[f[f.length-1]],n+=v,++f[2]}n+=g,f[2]-=s,++f[1]}n+=y,f[1]-=o,++f[0]}}}.bind(void 0,{funcName:\"convert\"}))},8139:function(t,e,r){\"use strict\";var n=r(5306);function i(t){return\"uint32\"===t?[n.mallocUint32,n.freeUint32]:null}var a={\"uint32,1,0\":function(t,e){return function(r,n,i,a,o,s,l,u,c,f,h){var p,d,v,g,y,m,x,b,_=r*o+a,w=t(u);for(p=r+1;p<=n;++p){for(d=p,v=_+=o,y=0,m=_,g=0;g<u;++g)w[y++]=i[m],m+=c;t:for(;d-- >r;){y=0,m=v-o;e:for(g=0;g<u;++g){if((x=i[m])<(b=w[y]))break t;if(x>b)break e;m+=f,y+=h}for(y=v,m=v-o,g=0;g<u;++g)i[y]=i[m],y+=c,m+=c;v-=o}for(y=v,m=0,g=0;g<u;++g)i[y]=w[m++],y+=c}e(w)}}},o={\"uint32,1,0\":function(t,e,r){return function n(i,a,o,s,l,u,c,f,h,p,d){var v,g,y,m,x,b,_,w,T,k,A,M,S,E,L,C,P,O,I,D,z,R,F,B,N,j=(a-i+1)/6|0,U=i+j,V=a-j,H=i+a>>1,q=H-j,G=H+j,Z=U,Y=q,W=H,X=G,J=V,K=i+1,$=a-1,Q=!0,tt=0,et=0,rt=0,nt=f,it=e(nt),at=e(nt);A=l*Z,M=l*Y,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=Y,Y=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*Z,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Z,Z=X,X=g;break t}if(rt<0)break t;N+=p}A=l*W,M=l*X,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=W,W=X,X=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=J,J=g;break t}if(rt<0)break t;N+=p}A=l*Y,M=l*W,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=Y,Y=W,W=g;break t}if(rt<0)break t;N+=p}A=l*X,M=l*J,N=s;t:for(k=0;k<f;++k){if(w=M+N,(rt=o[_=A+N]-o[w])>0){g=X,X=J,J=g;break t}if(rt<0)break t;N+=p}for(A=l*Z,M=l*Y,S=l*W,E=l*X,L=l*J,C=l*U,P=l*H,O=l*V,B=0,N=s,k=0;k<f;++k)_=A+N,w=M+N,T=S+N,I=E+N,D=L+N,z=C+N,R=P+N,F=O+N,it[B]=o[w],at[B]=o[I],Q=Q&&it[B]===at[B],y=o[_],m=o[T],x=o[D],o[z]=y,o[R]=m,o[F]=x,++B,N+=h;for(A=l*q,M=l*i,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;for(A=l*G,M=l*a,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],N+=h;if(Q)for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(0!==rt)if(rt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(!(rt>0)){if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$;break}for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$;break}$--}}else for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(tt<0){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(et>0)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(!(rt>0)){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}for(A=l*i,M=l*(K-1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=it[B],++B,N+=h;for(A=l*a,M=l*($+1),B=0,N=s,k=0;k<f;++k)w=M+N,o[_=A+N]=o[w],o[w]=at[B],++B,N+=h;if(K-2-i<=32?t(i,K-2,o,s,l,u,c,f,h,p,d):n(i,K-2,o,s,l,u,c,f,h,p,d),a-($+2)<=32?t($+2,a,o,s,l,u,c,f,h,p,d):n($+2,a,o,s,l,u,c,f,h,p,d),Q)return r(it),void r(at);if(K<U&&$>V){t:for(;;){for(_=s+K*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==it[B])break t;++B,_+=h}++K}t:for(;;){for(_=s+$*l,B=0,N=s,k=0;k<f;++k){if(o[_]!==at[B])break t;++B,_+=h}--$}for(b=K;b<=$;++b){for(_=s+b*l,B=0,k=0;k<f&&0==(tt=o[_]-it[B]);++k)B+=d,_+=p;if(0===tt){if(b!==K)for(A=l*b,M=l*K,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;++K}else{for(_=s+b*l,B=0,k=0;k<f&&0==(et=o[_]-at[B]);++k)B+=d,_+=p;if(0===et)for(;;){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-at[B]);++k)B+=d,_+=p;if(0!==rt){for(_=s+$*l,B=0,k=0;k<f&&0==(rt=o[_]-it[B]);++k)B+=d,_+=p;if(rt<0){for(A=l*b,M=l*K,S=l*$,N=s,k=0;k<f;++k)w=M+N,T=S+N,v=o[_=A+N],o[_]=o[w],o[w]=o[T],o[T]=v,N+=h;++K,--$}else{for(A=l*b,M=l*$,N=s,k=0;k<f;++k)w=M+N,v=o[_=A+N],o[_]=o[w],o[w]=v,N+=h;--$}break}if(--$<b)break}}}}r(it),r(at),$-K<=32?t(K,$,o,s,l,u,c,f,h,p,d):n(K,$,o,s,l,u,c,f,h,p,d)}}},s={\"uint32,1,0\":function(t,e){return function(r){var n=r.data,i=0|r.offset,a=r.shape,o=r.stride,s=0|o[0],l=0|a[0],u=0|o[1],c=0|a[1],f=u,h=u;l<=32?t(0,l-1,n,i,s,u,l,c,f,h,1):e(0,l-1,n,i,s,u,l,c,f,h,1)}}};t.exports=function(t,e){var r=[e,t].join(\",\"),n=s[r],l=function(t,e){var r=i(e),n=[e,t].join(\",\"),o=a[n];return r?o(r[0],r[1]):o()}(t,e),u=function(t,e,r){var n=i(e),a=[e,t].join(\",\"),s=o[a];return t.length>1&&n?s(r,n[0],n[1]):s(r)}(t,e,l);return n(l,u)}},8729:function(t,e,r){\"use strict\";var n=r(8139),i={};t.exports=function(t){var e=t.order,r=t.dtype,a=[e,r].join(\":\"),o=i[a];return o||(i[a]=o=n(e,r)),o(t),t}},5050:function(t,e,r){var n=r(4780),i=\"undefined\"!=typeof Float64Array;function a(t,e){return t[0]-e[0]}function o(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(a);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}var s={T:function(t){function e(t){this.data=t}var r=e.prototype;return r.dtype=t,r.index=function(){return-1},r.size=0,r.dimension=-1,r.shape=r.stride=r.order=[],r.lo=r.hi=r.transpose=r.step=function(){return new e(this.data)},r.get=r.set=function(){},r.pick=function(){return null},function(t){return new e(t)}},0:function(t,e){function r(t,e){this.data=t,this.offset=e}var n=r.prototype;return n.dtype=t,n.index=function(){return this.offset},n.dimension=0,n.size=1,n.shape=n.stride=n.order=[],n.lo=n.hi=n.transpose=n.step=function(){return new r(this.data,this.offset)},n.pick=function(){return e(this.data)},n.valueOf=n.get=function(){return\"generic\"===t?this.data.get(this.offset):this.data[this.offset]},n.set=function(e){return\"generic\"===t?this.data.set(this.offset,e):this.data[this.offset]=e},function(t,e,n,i){return new r(t,i)}},1:function(t,e,r){function n(t,e,r,n){this.data=t,this.shape=[e],this.stride=[r],this.offset=0|n}var i=n.prototype;return i.dtype=t,i.dimension=1,Object.defineProperty(i,\"size\",{get:function(){return this.shape[0]}}),i.order=[0],i.set=function(e,r){return\"generic\"===t?this.data.set(this.offset+this.stride[0]*e,r):this.data[this.offset+this.stride[0]*e]=r},i.get=function(e){return\"generic\"===t?this.data.get(this.offset+this.stride[0]*e):this.data[this.offset+this.stride[0]*e]},i.index=function(t){return this.offset+this.stride[0]*t},i.hi=function(t){return new n(this.data,\"number\"!=typeof t||t<0?this.shape[0]:0|t,this.stride[0],this.offset)},i.lo=function(t){var e=this.offset,r=0,i=this.shape[0],a=this.stride[0];return\"number\"==typeof t&&t>=0&&(e+=a*(r=0|t),i-=r),new n(this.data,i,a,e)},i.step=function(t){var e=this.shape[0],r=this.stride[0],i=this.offset,a=0,o=Math.ceil;return\"number\"==typeof t&&((a=0|t)<0?(i+=r*(e-1),e=o(-e/a)):e=o(e/a),r*=a),new n(this.data,e,r,i)},i.transpose=function(t){t=void 0===t?0:0|t;var e=this.shape,r=this.stride;return new n(this.data,e[t],r[t],this.offset)},i.pick=function(t){var r=[],n=[],i=this.offset;return\"number\"==typeof t&&t>=0?i=i+this.stride[0]*t|0:(r.push(this.shape[0]),n.push(this.stride[0])),(0,e[r.length+1])(this.data,r,n,i)},function(t,e,r,i){return new n(t,e[0],r[0],i)}},2:function(t,e,r){function n(t,e,r,n,i,a){this.data=t,this.shape=[e,r],this.stride=[n,i],this.offset=0|a}var i=n.prototype;return i.dtype=t,i.dimension=2,Object.defineProperty(i,\"size\",{get:function(){return this.shape[0]*this.shape[1]}}),Object.defineProperty(i,\"order\",{get:function(){return Math.abs(this.stride[0])>Math.abs(this.stride[1])?[1,0]:[0,1]}}),i.set=function(e,r,n){return\"generic\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r,n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]=n},i.get=function(e,r){return\"generic\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r):this.data[this.offset+this.stride[0]*e+this.stride[1]*r]},i.index=function(t,e){return this.offset+this.stride[0]*t+this.stride[1]*e},i.hi=function(t,e){return new n(this.data,\"number\"!=typeof t||t<0?this.shape[0]:0|t,\"number\"!=typeof e||e<0?this.shape[1]:0|e,this.stride[0],this.stride[1],this.offset)},i.lo=function(t,e){var r=this.offset,i=0,a=this.shape[0],o=this.shape[1],s=this.stride[0],l=this.stride[1];return\"number\"==typeof t&&t>=0&&(r+=s*(i=0|t),a-=i),\"number\"==typeof e&&e>=0&&(r+=l*(i=0|e),o-=i),new n(this.data,a,o,s,l,r)},i.step=function(t,e){var r=this.shape[0],i=this.shape[1],a=this.stride[0],o=this.stride[1],s=this.offset,l=0,u=Math.ceil;return\"number\"==typeof t&&((l=0|t)<0?(s+=a*(r-1),r=u(-r/l)):r=u(r/l),a*=l),\"number\"==typeof e&&((l=0|e)<0?(s+=o*(i-1),i=u(-i/l)):i=u(i/l),o*=l),new n(this.data,r,i,a,o,s)},i.transpose=function(t,e){t=void 0===t?0:0|t,e=void 0===e?1:0|e;var r=this.shape,i=this.stride;return new n(this.data,r[t],r[e],i[t],i[e],this.offset)},i.pick=function(t,r){var n=[],i=[],a=this.offset;return\"number\"==typeof t&&t>=0?a=a+this.stride[0]*t|0:(n.push(this.shape[0]),i.push(this.stride[0])),\"number\"==typeof r&&r>=0?a=a+this.stride[1]*r|0:(n.push(this.shape[1]),i.push(this.stride[1])),(0,e[n.length+1])(this.data,n,i,a)},function(t,e,r,i){return new n(t,e[0],e[1],r[0],r[1],i)}},3:function(t,e,r){function n(t,e,r,n,i,a,o,s){this.data=t,this.shape=[e,r,n],this.stride=[i,a,o],this.offset=0|s}var i=n.prototype;return i.dtype=t,i.dimension=3,Object.defineProperty(i,\"size\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]}}),Object.defineProperty(i,\"order\",{get:function(){var t=Math.abs(this.stride[0]),e=Math.abs(this.stride[1]),r=Math.abs(this.stride[2]);return t>e?e>r?[2,1,0]:t>r?[1,2,0]:[1,0,2]:t>r?[2,0,1]:r>e?[0,1,2]:[0,2,1]}}),i.set=function(e,r,n,i){return\"generic\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n,i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]=i},i.get=function(e,r,n){return\"generic\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n]},i.index=function(t,e,r){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r},i.hi=function(t,e,r){return new n(this.data,\"number\"!=typeof t||t<0?this.shape[0]:0|t,\"number\"!=typeof e||e<0?this.shape[1]:0|e,\"number\"!=typeof r||r<0?this.shape[2]:0|r,this.stride[0],this.stride[1],this.stride[2],this.offset)},i.lo=function(t,e,r){var i=this.offset,a=0,o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.stride[0],c=this.stride[1],f=this.stride[2];return\"number\"==typeof t&&t>=0&&(i+=u*(a=0|t),o-=a),\"number\"==typeof e&&e>=0&&(i+=c*(a=0|e),s-=a),\"number\"==typeof r&&r>=0&&(i+=f*(a=0|r),l-=a),new n(this.data,o,s,l,u,c,f,i)},i.step=function(t,e,r){var i=this.shape[0],a=this.shape[1],o=this.shape[2],s=this.stride[0],l=this.stride[1],u=this.stride[2],c=this.offset,f=0,h=Math.ceil;return\"number\"==typeof t&&((f=0|t)<0?(c+=s*(i-1),i=h(-i/f)):i=h(i/f),s*=f),\"number\"==typeof e&&((f=0|e)<0?(c+=l*(a-1),a=h(-a/f)):a=h(a/f),l*=f),\"number\"==typeof r&&((f=0|r)<0?(c+=u*(o-1),o=h(-o/f)):o=h(o/f),u*=f),new n(this.data,i,a,o,s,l,u,c)},i.transpose=function(t,e,r){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r;var i=this.shape,a=this.stride;return new n(this.data,i[t],i[e],i[r],a[t],a[e],a[r],this.offset)},i.pick=function(t,r,n){var i=[],a=[],o=this.offset;return\"number\"==typeof t&&t>=0?o=o+this.stride[0]*t|0:(i.push(this.shape[0]),a.push(this.stride[0])),\"number\"==typeof r&&r>=0?o=o+this.stride[1]*r|0:(i.push(this.shape[1]),a.push(this.stride[1])),\"number\"==typeof n&&n>=0?o=o+this.stride[2]*n|0:(i.push(this.shape[2]),a.push(this.stride[2])),(0,e[i.length+1])(this.data,i,a,o)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],r[0],r[1],r[2],i)}},4:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u){this.data=t,this.shape=[e,r,n,i],this.stride=[a,o,s,l],this.offset=0|u}var i=n.prototype;return i.dtype=t,i.dimension=4,Object.defineProperty(i,\"size\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]}}),Object.defineProperty(i,\"order\",{get:r}),i.set=function(e,r,n,i,a){return\"generic\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i,a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]=a},i.get=function(e,r,n,i){return\"generic\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i]},i.index=function(t,e,r,n){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n},i.hi=function(t,e,r,i){return new n(this.data,\"number\"!=typeof t||t<0?this.shape[0]:0|t,\"number\"!=typeof e||e<0?this.shape[1]:0|e,\"number\"!=typeof r||r<0?this.shape[2]:0|r,\"number\"!=typeof i||i<0?this.shape[3]:0|i,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.offset)},i.lo=function(t,e,r,i){var a=this.offset,o=0,s=this.shape[0],l=this.shape[1],u=this.shape[2],c=this.shape[3],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3];return\"number\"==typeof t&&t>=0&&(a+=f*(o=0|t),s-=o),\"number\"==typeof e&&e>=0&&(a+=h*(o=0|e),l-=o),\"number\"==typeof r&&r>=0&&(a+=p*(o=0|r),u-=o),\"number\"==typeof i&&i>=0&&(a+=d*(o=0|i),c-=o),new n(this.data,s,l,u,c,f,h,p,d,a)},i.step=function(t,e,r,i){var a=this.shape[0],o=this.shape[1],s=this.shape[2],l=this.shape[3],u=this.stride[0],c=this.stride[1],f=this.stride[2],h=this.stride[3],p=this.offset,d=0,v=Math.ceil;return\"number\"==typeof t&&((d=0|t)<0?(p+=u*(a-1),a=v(-a/d)):a=v(a/d),u*=d),\"number\"==typeof e&&((d=0|e)<0?(p+=c*(o-1),o=v(-o/d)):o=v(o/d),c*=d),\"number\"==typeof r&&((d=0|r)<0?(p+=f*(s-1),s=v(-s/d)):s=v(s/d),f*=d),\"number\"==typeof i&&((d=0|i)<0?(p+=h*(l-1),l=v(-l/d)):l=v(l/d),h*=d),new n(this.data,a,o,s,l,u,c,f,h,p)},i.transpose=function(t,e,r,i){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i;var a=this.shape,o=this.stride;return new n(this.data,a[t],a[e],a[r],a[i],o[t],o[e],o[r],o[i],this.offset)},i.pick=function(t,r,n,i){var a=[],o=[],s=this.offset;return\"number\"==typeof t&&t>=0?s=s+this.stride[0]*t|0:(a.push(this.shape[0]),o.push(this.stride[0])),\"number\"==typeof r&&r>=0?s=s+this.stride[1]*r|0:(a.push(this.shape[1]),o.push(this.stride[1])),\"number\"==typeof n&&n>=0?s=s+this.stride[2]*n|0:(a.push(this.shape[2]),o.push(this.stride[2])),\"number\"==typeof i&&i>=0?s=s+this.stride[3]*i|0:(a.push(this.shape[3]),o.push(this.stride[3])),(0,e[a.length+1])(this.data,a,o,s)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],r[0],r[1],r[2],r[3],i)}},5:function(t,e,r){function n(t,e,r,n,i,a,o,s,l,u,c,f){this.data=t,this.shape=[e,r,n,i,a],this.stride=[o,s,l,u,c],this.offset=0|f}var i=n.prototype;return i.dtype=t,i.dimension=5,Object.defineProperty(i,\"size\",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]*this.shape[4]}}),Object.defineProperty(i,\"order\",{get:r}),i.set=function(e,r,n,i,a,o){return\"generic\"===t?this.data.set(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a,o):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]=o},i.get=function(e,r,n,i,a){return\"generic\"===t?this.data.get(this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a):this.data[this.offset+this.stride[0]*e+this.stride[1]*r+this.stride[2]*n+this.stride[3]*i+this.stride[4]*a]},i.index=function(t,e,r,n,i){return this.offset+this.stride[0]*t+this.stride[1]*e+this.stride[2]*r+this.stride[3]*n+this.stride[4]*i},i.hi=function(t,e,r,i,a){return new n(this.data,\"number\"!=typeof t||t<0?this.shape[0]:0|t,\"number\"!=typeof e||e<0?this.shape[1]:0|e,\"number\"!=typeof r||r<0?this.shape[2]:0|r,\"number\"!=typeof i||i<0?this.shape[3]:0|i,\"number\"!=typeof a||a<0?this.shape[4]:0|a,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.stride[4],this.offset)},i.lo=function(t,e,r,i,a){var o=this.offset,s=0,l=this.shape[0],u=this.shape[1],c=this.shape[2],f=this.shape[3],h=this.shape[4],p=this.stride[0],d=this.stride[1],v=this.stride[2],g=this.stride[3],y=this.stride[4];return\"number\"==typeof t&&t>=0&&(o+=p*(s=0|t),l-=s),\"number\"==typeof e&&e>=0&&(o+=d*(s=0|e),u-=s),\"number\"==typeof r&&r>=0&&(o+=v*(s=0|r),c-=s),\"number\"==typeof i&&i>=0&&(o+=g*(s=0|i),f-=s),\"number\"==typeof a&&a>=0&&(o+=y*(s=0|a),h-=s),new n(this.data,l,u,c,f,h,p,d,v,g,y,o)},i.step=function(t,e,r,i,a){var o=this.shape[0],s=this.shape[1],l=this.shape[2],u=this.shape[3],c=this.shape[4],f=this.stride[0],h=this.stride[1],p=this.stride[2],d=this.stride[3],v=this.stride[4],g=this.offset,y=0,m=Math.ceil;return\"number\"==typeof t&&((y=0|t)<0?(g+=f*(o-1),o=m(-o/y)):o=m(o/y),f*=y),\"number\"==typeof e&&((y=0|e)<0?(g+=h*(s-1),s=m(-s/y)):s=m(s/y),h*=y),\"number\"==typeof r&&((y=0|r)<0?(g+=p*(l-1),l=m(-l/y)):l=m(l/y),p*=y),\"number\"==typeof i&&((y=0|i)<0?(g+=d*(u-1),u=m(-u/y)):u=m(u/y),d*=y),\"number\"==typeof a&&((y=0|a)<0?(g+=v*(c-1),c=m(-c/y)):c=m(c/y),v*=y),new n(this.data,o,s,l,u,c,f,h,p,d,v,g)},i.transpose=function(t,e,r,i,a){t=void 0===t?0:0|t,e=void 0===e?1:0|e,r=void 0===r?2:0|r,i=void 0===i?3:0|i,a=void 0===a?4:0|a;var o=this.shape,s=this.stride;return new n(this.data,o[t],o[e],o[r],o[i],o[a],s[t],s[e],s[r],s[i],s[a],this.offset)},i.pick=function(t,r,n,i,a){var o=[],s=[],l=this.offset;return\"number\"==typeof t&&t>=0?l=l+this.stride[0]*t|0:(o.push(this.shape[0]),s.push(this.stride[0])),\"number\"==typeof r&&r>=0?l=l+this.stride[1]*r|0:(o.push(this.shape[1]),s.push(this.stride[1])),\"number\"==typeof n&&n>=0?l=l+this.stride[2]*n|0:(o.push(this.shape[2]),s.push(this.stride[2])),\"number\"==typeof i&&i>=0?l=l+this.stride[3]*i|0:(o.push(this.shape[3]),s.push(this.stride[3])),\"number\"==typeof a&&a>=0?l=l+this.stride[4]*a|0:(o.push(this.shape[4]),s.push(this.stride[4])),(0,e[o.length+1])(this.data,o,s,l)},function(t,e,r,i){return new n(t,e[0],e[1],e[2],e[3],e[4],r[0],r[1],r[2],r[3],r[4],i)}}};function l(t,e){var r=-1===e?\"T\":String(e),n=s[r];return-1===e?n(t):0===e?n(t,u[t][0]):n(t,u[t],o)}var u={generic:[],buffer:[],array:[],float32:[],float64:[],int8:[],int16:[],int32:[],uint8_clamped:[],uint8:[],uint16:[],uint32:[],bigint64:[],biguint64:[]};t.exports=function(t,e,r,a){if(void 0===t)return(0,u.array[0])([]);\"number\"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,c=1;s>=0;--s)r[s]=c,c*=e[s]}if(void 0===a)for(a=0,s=0;s<o;++s)r[s]<0&&(a-=(e[s]-1)*r[s]);for(var f=function(t){if(n(t))return\"buffer\";if(i)switch(Object.prototype.toString.call(t)){case\"[object Float64Array]\":return\"float64\";case\"[object Float32Array]\":return\"float32\";case\"[object Int8Array]\":return\"int8\";case\"[object Int16Array]\":return\"int16\";case\"[object Int32Array]\":return\"int32\";case\"[object Uint8ClampedArray]\":return\"uint8_clamped\";case\"[object Uint8Array]\":return\"uint8\";case\"[object Uint16Array]\":return\"uint16\";case\"[object Uint32Array]\":return\"uint32\";case\"[object BigInt64Array]\":return\"bigint64\";case\"[object BigUint64Array]\":return\"biguint64\"}return Array.isArray(t)?\"array\":\"generic\"}(t),h=u[f];h.length<=o+1;)h.push(l(f,h.length-1));return(0,h[o+1])(t,e,r,a)}},8551:function(t,e,r){\"use strict\";var n=r(8362),i=Math.pow(2,-1074),a=-1>>>0;t.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var r=n.hi(t),o=n.lo(t);return e>t==t>0?o===a?(r+=1,o=0):o+=1:0===o?(o=a,r-=1):o-=1,n.pack(o,r)}},115:function(t,e){e.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o)i[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,u=s[s.length-1],c=s[0],f=0;f<s.length;++f){l=u,u=c,c=s[(f+1)%s.length];for(var h=e[l],p=e[u],d=e[c],v=new Array(3),g=0,y=new Array(3),m=0,x=0;x<3;++x)v[x]=h[x]-p[x],g+=v[x]*v[x],y[x]=d[x]-p[x],m+=y[x]*y[x];if(g*m>a){var b=i[u],_=1/Math.sqrt(g*m);for(x=0;x<3;++x){var w=(x+1)%3,T=(x+2)%3;b[x]+=_*(y[w]*v[T]-y[T]*v[w])}}}for(o=0;o<n;++o){b=i[o];var k=0;for(x=0;x<3;++x)k+=b[x]*b[x];if(k>a)for(_=1/Math.sqrt(k),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return i},e.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),u=0;u<3;++u)l[u]=e[s[u]];var c=new Array(3),f=new Array(3);for(u=0;u<3;++u)c[u]=l[1][u]-l[0][u],f[u]=l[2][u]-l[0][u];var h=new Array(3),p=0;for(u=0;u<3;++u){var d=(u+1)%3,v=(u+2)%3;h[u]=c[d]*f[v]-c[v]*f[d],p+=h[u]*h[u]}for(p=p>a?1/Math.sqrt(p):0,u=0;u<3;++u)h[u]*=p;i[o]=h}return i}},567:function(t){\"use strict\";t.exports=function(t,e,r,n,i,a,o,s,l,u){var c=e+a+u;if(f>0){var f=Math.sqrt(c+1);t[0]=.5*(o-l)/f,t[1]=.5*(s-n)/f,t[2]=.5*(r-a)/f,t[3]=.5*f}else{var h=Math.max(e,a,u);f=Math.sqrt(2*h-c+1),e>=h?(t[0]=.5*f,t[1]=.5*(i+r)/f,t[2]=.5*(s+n)/f,t[3]=.5*(o-l)/f):a>=h?(t[0]=.5*(r+i)/f,t[1]=.5*f,t[2]=.5*(l+o)/f,t[3]=.5*(s-n)/f):(t[0]=.5*(n+s)/f,t[1]=.5*(o+l)/f,t[2]=.5*f,t[3]=.5*(r-i)/f)}return t}},7774:function(t,e,r){\"use strict\";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),c(r=[].slice.call(r,0,4),r);var i=new f(r,e,Math.log(n));return i.setDistanceLimits(t.zoomMin,t.zoomMax),(\"eye\"in t||\"up\"in t)&&i.lookAt(0,t.eye,t.center,t.up),i};var n=r(8444),i=r(3012),a=r(5950),o=r(7437),s=r(567);function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function c(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=u(r,n,i,a);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function f(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var h=f.prototype;h.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},h.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;c(e,e);var r=this.computedMatrix;a(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var u=0,f=0;f<3;++f)u+=r[l+4*f]*i[f];r[12+l]=-u}},h.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},h.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},h.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},h.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],u=l(a,o,s);a/=u,o/=u,s/=u;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=l(c-=a*p,f-=o*p,h-=s*p);c/=d,f/=d,h/=d;var v=i[2],g=i[6],y=i[10],m=v*a+g*o+y*s,x=v*c+g*f+y*h,b=l(v-=m*a+x*c,g-=m*o+x*f,y-=m*s+x*h);v/=b,g/=b,y/=b;var _=c*e+a*r,w=f*e+o*r,T=h*e+s*r;this.center.move(t,_,w,T);var k=Math.exp(this.computedRadius[0]);k=Math.max(1e-4,k+n),this.radius.set(t,Math.log(k))},h.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var i=this.computedMatrix,a=i[0],o=i[4],s=i[8],c=i[1],f=i[5],h=i[9],p=i[2],d=i[6],v=i[10],g=e*a+r*c,y=e*o+r*f,m=e*s+r*h,x=-(d*m-v*y),b=-(v*g-p*m),_=-(p*y-d*g),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),T=u(x,b,_,w);T>1e-6?(x/=T,b/=T,_/=T,w/=T):(x=b=_=0,w=1);var k=this.computedRotation,A=k[0],M=k[1],S=k[2],E=k[3],L=A*w+E*x+M*_-S*b,C=M*w+E*b+S*x-A*_,P=S*w+E*_+A*b-M*x,O=E*w-A*x-M*b-S*_;if(n){x=p,b=d,_=v;var I=Math.sin(n)/l(x,b,_);x*=I,b*=I,_*=I,O=O*(w=Math.cos(e))-(L=L*w+O*x+C*_-P*b)*x-(C=C*w+O*b+P*x-L*_)*b-(P=P*w+O*_+L*b-C*x)*_}var D=u(L,C,P,O);D>1e-6?(L/=D,C/=D,P/=D,O/=D):(L=C=P=0,O=1),this.rotation.set(t,L,C,P,O)},h.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var a=this.computedMatrix;i(a,e,r,n);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),c(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,u=0;u<3;++u)l+=Math.pow(r[u]-e[u],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},h.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},h.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),c(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var i=n[15];if(Math.abs(i)>1e-6){var a=n[12]/i,l=n[13]/i,u=n[14]/i;this.recalcMatrix(t);var f=Math.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*f,l-n[6]*f,u-n[10]*f),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},h.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},h.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},h.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},h.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},h.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},4930:function(t,e,r){\"use strict\";var n=r(6184);t.exports=function(t,e,r){return n(r=void 0!==r?r+\"\":\" \",e)+t}},4405:function(t){t.exports=function(t,e){e||(e=[0,\"\"]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\\d.\\-\\+]*\\s*(.*)/)[1]||\"\",e}},4166:function(t,e,r){\"use strict\";t.exports=function(t,e){for(var r=0|e.length,i=t.length,a=[new Array(r),new Array(r)],o=0;o<r;++o)a[0][o]=[],a[1][o]=[];for(o=0;o<i;++o){var s=t[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}var l=[];for(o=0;o<r;++o)a[0][o].length+a[1][o].length===0&&l.push([o]);function u(t,e){var r=a[e][t[e]];r.splice(r.indexOf(t),1)}function c(t,r,i){for(var o,s,l,c=0;c<2;++c)if(a[c][r].length>0){o=a[c][r][0],l=c;break}s=o[1^l];for(var f=0;f<2;++f)for(var h=a[f][r],p=0;p<h.length;++p){var d=h[p],v=d[1^f];n(e[t],e[r],e[s],e[v])>0&&(o=d,s=v,l=f)}return i||o&&u(o,l),s}function f(t,r){var i=a[r][t][0],o=[t];u(i,r);for(var s=i[1^r];;){for(;s!==t;)o.push(s),s=c(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],f=t,h=o[1],p=c(l,f,!0);if(n(e[l],e[f],e[h],e[p])<0)break;o.push(t),s=c(l,f)}return o}function h(t,e){return e[1]===e[e.length-1]}for(o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];a[p][o].length>0;){a[0][o].length;var v=f(o,p);h(0,v)?d.push.apply(d,v):(d.length>0&&l.push(d),d=v)}d.length>0&&l.push(d)}return l};var n=r(9398)},3959:function(t,e,r){\"use strict\";t.exports=function(t,e){for(var r=n(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;a[s]=l,i[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){i[p=o.pop()]=!1;var u=r[p];for(s=0;s<u.length;++s){var c=u[s];0==--a[c]&&o.push(c)}}var f=new Array(e.length),h=[];for(s=0;s<e.length;++s)if(i[s]){var p=h.length;f[s]=p,h.push(e[s])}else f[s]=-1;var d=[];for(s=0;s<t.length;++s){var v=t[s];i[v[0]]&&i[v[1]]&&d.push([f[v[0]],f[v[1]]])}return[d,h]};var n=r(8348)},8040:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=u(t,e);t=r[0];for(var f=(e=r[1]).length,h=(t.length,n(t,e.length)),p=0;p<f;++p)if(h[p].length%2==1)throw new Error(\"planar-graph-to-polyline: graph must be manifold\");var d=i(t,e),v=(d=d.filter((function(t){for(var r=t.length,n=[0],i=0;i<r;++i){var a=e[t[i]],l=e[t[(i+1)%r]],u=o(-a[0],a[1]),c=o(-a[0],l[1]),f=o(l[0],a[1]),h=o(l[0],l[1]);n=s(n,s(s(u,c),s(f,h)))}return n[n.length-1]>0}))).length,g=new Array(v),y=new Array(v);for(p=0;p<v;++p){g[p]=p;var m=new Array(v),x=d[p].map((function(t){return e[t]})),b=a([x]),_=0;t:for(var w=0;w<v;++w)if(m[w]=0,p!==w){for(var T=(H=d[w]).length,k=0;k<T;++k){var A=b(e[H[k]]);if(0!==A){A<0&&(m[w]=1,_+=1);continue t}}m[w]=1,_+=1}y[p]=[_,p,m]}for(y.sort((function(t,e){return e[0]-t[0]})),p=0;p<v;++p){var M=(m=y[p])[1],S=m[2];for(w=0;w<v;++w)S[w]&&(g[w]=M)}var E=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(v);for(p=0;p<v;++p)E[p].push(g[p]),E[g[p]].push(p);var L={},C=c(f,!1);for(p=0;p<v;++p)for(T=(H=d[p]).length,w=0;w<T;++w){var P=H[w],O=H[(w+1)%T],I=Math.min(P,O)+\":\"+Math.max(P,O);if(I in L){var D=L[I];E[D].push(p),E[p].push(D),C[P]=C[O]=!0}else L[I]=p}function z(t){for(var e=t.length,r=0;r<e;++r)if(!C[t[r]])return!1;return!0}var R=[],F=c(v,-1);for(p=0;p<v;++p)g[p]!==p||z(d[p])?F[p]=-1:(R.push(p),F[p]=0);for(r=[];R.length>0;){var B=R.pop(),N=E[B];l(N,(function(t,e){return t-e}));var j,U=N.length,V=F[B];for(0===V&&(j=[H=d[B]]),p=0;p<U;++p){var H,q=N[p];F[q]>=0||(F[q]=1^V,R.push(q),0===V&&(z(H=d[q])||(H.reverse(),j.push(H))))}0===V&&r.push(j)}return r};var n=r(8348),i=r(4166),a=r(211),o=r(9660),s=r(9662),l=r(1215),u=r(3959);function c(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},211:function(t,e,r){t.exports=function(t){for(var e=t.length,r=[],a=[],s=0;s<e;++s)for(var c=t[s],f=c.length,h=f-1,p=0;p<f;h=p++){var d=c[h],v=c[p];d[0]===v[0]?a.push([d,v]):r.push([d,v])}if(0===r.length)return 0===a.length?u:(g=l(a),function(t){return g(t[0],t[1])?0:1});var g,y=i(r),m=function(t,e){return function(r){var i=o.le(e,r[0]);if(i<0)return 1;var a=t[i];if(!a){if(!(i>0&&e[i]===r[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,u=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(u<0)a=a.left;else{if(!(u>0))return 0;s=-1,a=a.right}else if(u>0)a=a.left;else{if(!(u<0))return 0;s=1,a=a.right}}return s}}(y.slabs,y.coordinates);return 0===a.length?m:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),m)};var n=r(417)[3],i=r(4385),a=r(9014),o=r(5070);function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],i=n[0][0],o=n[0][1],l=n[1][1],u=[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(u):e[i]=[u]}var c={},f=Object.keys(e);for(r=0;r<f.length;++r){var h=e[f[r]];c[f[r]]=a(h)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(c)}function u(t){return 1}},7309:function(t){\"use strict\";var e=new Float64Array(4),r=new Float64Array(4),n=new Float64Array(4);t.exports=function(t,i,a,o,s){e.length<o.length&&(e=new Float64Array(o.length),r=new Float64Array(o.length),n=new Float64Array(o.length));for(var l=0;l<o.length;++l)e[l]=t[l]-o[l],r[l]=i[l]-t[l],n[l]=a[l]-t[l];var u=0,c=0,f=0,h=0,p=0,d=0;for(l=0;l<o.length;++l){var v=r[l],g=n[l],y=e[l];u+=v*v,c+=v*g,f+=g*g,h+=y*v,p+=y*g,d+=y*y}var m,x,b,_,w,T=Math.abs(u*f-c*c),k=c*p-f*h,A=c*h-u*p;if(k+A<=T)if(k<0)A<0&&h<0?(A=0,-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d):(k=0,p>=0?(A=0,m=d):-p>=f?(A=1,m=f+2*p+d):m=p*(A=-p/f)+d);else if(A<0)A=0,h>=0?(k=0,m=d):-h>=u?(k=1,m=u+2*h+d):m=h*(k=-h/u)+d;else{var M=1/T;m=(k*=M)*(u*k+c*(A*=M)+2*h)+A*(c*k+f*A+2*p)+d}else k<0?(b=f+p)>(x=c+h)?(_=b-x)>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d:(k=0,b<=0?(A=1,m=f+2*p+d):p>=0?(A=0,m=d):m=p*(A=-p/f)+d):A<0?(b=u+h)>(x=c+p)?(_=b-x)>=(w=u-2*c+f)?(A=1,k=0,m=f+2*p+d):m=(k=1-(A=_/w))*(u*k+c*A+2*h)+A*(c*k+f*A+2*p)+d:(A=0,b<=0?(k=1,m=u+2*h+d):h>=0?(k=0,m=d):m=h*(k=-h/u)+d):(_=f+p-c-h)<=0?(k=0,A=1,m=f+2*p+d):_>=(w=u-2*c+f)?(k=1,A=0,m=u+2*h+d):m=(k=_/w)*(u*k+c*(A=1-k)+2*h)+A*(c*k+f*A+2*p)+d;var S=1-k-A;for(l=0;l<o.length;++l)s[l]=S*t[l]+k*i[l]+A*a[l];return m<0?0:m}},1116:function(t,e,r){t.exports=r(6093)},7584:function(t,e,r){\"use strict\";var n=r(1539);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},2826:function(t,e,r){\"use strict\";t.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=r(5125)},4469:function(t,e,r){\"use strict\";var n=r(5125),i=r(3962);t.exports=function(t,e){for(var r=n(e),a=t.length,o=new Array(a),s=0;s<a;++s)o[s]=i(t[s],r);return o}},6695:function(t,e,r){\"use strict\";var n=r(4354);t.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},7037:function(t,e,r){\"use strict\";var n=r(9209),i=r(1284),a=r(9887);t.exports=function(t){t.sort(i);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=a(s);if(0!==l){if(r>0){var u=t[r-1];if(0===n(s,u)&&a(u)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},6184:function(t){\"use strict\";var e,r=\"\";t.exports=function(t,n){if(\"string\"!=typeof t)throw new TypeError(\"expected a string\");if(1===n)return t;if(2===n)return t+t;var i=t.length*n;if(e!==t||void 0===e)e=t,r=\"\";else if(r.length>=i)return r.substr(0,i);for(;i>r.length&&n>1;)1&n&&(r+=t),n>>=1,t+=t;return r=(r+=t).substr(0,i)}},8161:function(t,e,r){t.exports=r.g.performance&&r.g.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}},402:function(t){\"use strict\";t.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r;(l=(s=t[i])-((r=a+s)-a))&&(t[--n]=r,r=l)}var o=0;for(i=n;i<e;++i){var s,l;(l=(s=r)-((r=(a=t[i])+s)-a))&&(t[o++]=l)}return t[o++]=r,t.length=o,t}},8167:function(t,e,r){\"use strict\";var n=r(9660),i=r(9662),a=r(8289),o=r(402);function s(t,e,r,n){return function(e){return n(t(r(e[0][0],e[1][1]),r(-e[0][1],e[1][0])))}}function l(t,e,r,n){return function(i){return n(t(e(t(r(i[1][1],i[2][2]),r(-i[1][2],i[2][1])),i[0][0]),t(e(t(r(i[1][0],i[2][2]),r(-i[1][2],i[2][0])),-i[0][1]),e(t(r(i[1][0],i[2][1]),r(-i[1][1],i[2][0])),i[0][2]))))}}function u(t,e,r,n){return function(i){return n(t(t(e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][1]),t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),-i[1][2]),e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][3]))),i[0][0]),e(t(e(t(r(i[2][2],i[3][3]),r(-i[2][3],i[3][2])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][2]),e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),i[1][3]))),-i[0][1])),t(e(t(e(t(r(i[2][1],i[3][3]),r(-i[2][3],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][3]),r(-i[2][3],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][3]))),i[0][2]),e(t(e(t(r(i[2][1],i[3][2]),r(-i[2][2],i[3][1])),i[1][0]),t(e(t(r(i[2][0],i[3][2]),r(-i[2][2],i[3][0])),-i[1][1]),e(t(r(i[2][0],i[3][1]),r(-i[2][1],i[3][0])),i[1][2]))),-i[0][3]))))}}function c(t,e,r,n){return function(i){return n(t(t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][1]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),-i[1][4]))),i[0][0]),e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][2]),t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),-i[2][3]),e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][2])),t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][4]))),-i[0][1])),t(e(t(t(e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][3]),e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][3],i[4][4]),r(-i[3][4],i[4][3])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][3]),e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][3]),e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),-i[1][4]))),i[0][2]),t(e(t(t(e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][4]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][4]),r(-i[3][4],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][4]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][4]),r(-i[3][4],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][4]),r(-i[3][4],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][4]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][4]))),-i[0][3]),e(t(t(e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][1]),t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),-i[2][2]),e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][3]))),i[1][0]),e(t(e(t(r(i[3][2],i[4][3]),r(-i[3][3],i[4][2])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][2]),e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),i[2][3]))),-i[1][1])),t(e(t(e(t(r(i[3][1],i[4][3]),r(-i[3][3],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][3]),r(-i[3][3],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][3]))),i[1][2]),e(t(e(t(r(i[3][1],i[4][2]),r(-i[3][2],i[4][1])),i[2][0]),t(e(t(r(i[3][0],i[4][2]),r(-i[3][2],i[4][0])),-i[2][1]),e(t(r(i[3][0],i[4][1]),r(-i[3][1],i[4][0])),i[2][2]))),-i[1][3]))),i[0][4])))))}}function f(t){return(2===t?s:3===t?l:4===t?u:5===t?c:void 0)(i,a,n,o)}var h=[function(){return[0]},function(t){return[t[0][0]]}];function p(t,e,r,n,i,a,o,s){return function(l){switch(l.length){case 0:return t(l);case 1:return e(l);case 2:return r(l);case 3:return n(l);case 4:return i(l);case 5:return a(l)}var u=o[l.length];return u||(u=o[l.length]=s(l.length)),u(l)}}!function(){for(;h.length<6;)h.push(f(h.length));t.exports=p.apply(void 0,h.concat([h,f]));for(var e=0;e<h.length;++e)t.exports[e]=h[e]}()},9130:function(t,e,r){\"use strict\";var n=r(9660),i=r(9662);t.exports=function(t,e){for(var r=n(t[0],e[0]),a=1;a<t.length;++a)r=i(r,n(t[a],e[a]));return r}},2227:function(t,e,r){\"use strict\";var n=r(9660),i=r(9662),a=r(4078),o=r(8289);function s(t){return(3===t?l:4===t?u:5===t?c:f)(i,a,n,o)}function l(t,e,r,n){return function(i,a,o){var s=r(i[0],i[0]),l=n(s,a[0]),u=n(s,o[0]),c=r(a[0],a[0]),f=n(c,i[0]),h=n(c,o[0]),p=r(o[0],o[0]),d=n(p,i[0]),v=n(p,a[0]),g=t(e(v,h),e(f,l)),y=e(d,u),m=e(g,y);return m[m.length-1]}}function u(t,e,r,n){return function(i,a,o,s){var l=t(r(i[0],i[0]),r(i[1],i[1])),u=n(l,a[0]),c=n(l,o[0]),f=n(l,s[0]),h=t(r(a[0],a[0]),r(a[1],a[1])),p=n(h,i[0]),d=n(h,o[0]),v=n(h,s[0]),g=t(r(o[0],o[0]),r(o[1],o[1])),y=n(g,i[0]),m=n(g,a[0]),x=n(g,s[0]),b=t(r(s[0],s[0]),r(s[1],s[1])),_=n(b,i[0]),w=n(b,a[0]),T=n(b,o[0]),k=t(t(n(e(T,x),a[1]),t(n(e(w,v),-o[1]),n(e(m,d),s[1]))),t(n(e(w,v),i[1]),t(n(e(_,f),-a[1]),n(e(p,u),s[1])))),A=t(t(n(e(T,x),i[1]),t(n(e(_,f),-o[1]),n(e(y,c),s[1]))),t(n(e(m,d),i[1]),t(n(e(y,c),-a[1]),n(e(p,u),o[1])))),M=e(k,A);return M[M.length-1]}}function c(t,e,r,n){return function(i,a,o,s,l){var u=t(r(i[0],i[0]),t(r(i[1],i[1]),r(i[2],i[2]))),c=n(u,a[0]),f=n(u,o[0]),h=n(u,s[0]),p=n(u,l[0]),d=t(r(a[0],a[0]),t(r(a[1],a[1]),r(a[2],a[2]))),v=n(d,i[0]),g=n(d,o[0]),y=n(d,s[0]),m=n(d,l[0]),x=t(r(o[0],o[0]),t(r(o[1],o[1]),r(o[2],o[2]))),b=n(x,i[0]),_=n(x,a[0]),w=n(x,s[0]),T=n(x,l[0]),k=t(r(s[0],s[0]),t(r(s[1],s[1]),r(s[2],s[2]))),A=n(k,i[0]),M=n(k,a[0]),S=n(k,o[0]),E=n(k,l[0]),L=t(r(l[0],l[0]),t(r(l[1],l[1]),r(l[2],l[2]))),C=n(L,i[0]),P=n(L,a[0]),O=n(L,o[0]),I=n(L,s[0]),D=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),a[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),-o[2]),n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),s[2]))),t(n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),-l[2]),t(n(t(n(e(I,E),a[1]),t(n(e(P,m),-s[1]),n(e(M,y),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-a[2])))),t(t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),s[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),-l[2]),n(t(n(e(S,w),a[1]),t(n(e(M,y),-o[1]),n(e(_,g),s[1]))),i[2]))),t(n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-a[2]),t(n(t(n(e(M,y),i[1]),t(n(e(A,h),-a[1]),n(e(v,c),s[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-s[2]))))),z=t(t(t(n(t(n(e(I,E),o[1]),t(n(e(O,T),-s[1]),n(e(S,w),l[1]))),i[2]),n(t(n(e(I,E),i[1]),t(n(e(C,p),-s[1]),n(e(A,h),l[1]))),-o[2])),t(n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),s[2]),n(t(n(e(S,w),i[1]),t(n(e(A,h),-o[1]),n(e(b,f),s[1]))),-l[2]))),t(t(n(t(n(e(O,T),a[1]),t(n(e(P,m),-o[1]),n(e(_,g),l[1]))),i[2]),n(t(n(e(O,T),i[1]),t(n(e(C,p),-o[1]),n(e(b,f),l[1]))),-a[2])),t(n(t(n(e(P,m),i[1]),t(n(e(C,p),-a[1]),n(e(v,c),l[1]))),o[2]),n(t(n(e(_,g),i[1]),t(n(e(b,f),-a[1]),n(e(v,c),o[1]))),-l[2])))),R=e(D,z);return R[R.length-1]}}function f(t,e,r,n){return function(i,a,o,s,l,u){var c=t(t(r(i[0],i[0]),r(i[1],i[1])),t(r(i[2],i[2]),r(i[3],i[3]))),f=n(c,a[0]),h=n(c,o[0]),p=n(c,s[0]),d=n(c,l[0]),v=n(c,u[0]),g=t(t(r(a[0],a[0]),r(a[1],a[1])),t(r(a[2],a[2]),r(a[3],a[3]))),y=n(g,i[0]),m=n(g,o[0]),x=n(g,s[0]),b=n(g,l[0]),_=n(g,u[0]),w=t(t(r(o[0],o[0]),r(o[1],o[1])),t(r(o[2],o[2]),r(o[3],o[3]))),T=n(w,i[0]),k=n(w,a[0]),A=n(w,s[0]),M=n(w,l[0]),S=n(w,u[0]),E=t(t(r(s[0],s[0]),r(s[1],s[1])),t(r(s[2],s[2]),r(s[3],s[3]))),L=n(E,i[0]),C=n(E,a[0]),P=n(E,o[0]),O=n(E,l[0]),I=n(E,u[0]),D=t(t(r(l[0],l[0]),r(l[1],l[1])),t(r(l[2],l[2]),r(l[3],l[3]))),z=n(D,i[0]),R=n(D,a[0]),F=n(D,o[0]),B=n(D,s[0]),N=n(D,u[0]),j=t(t(r(u[0],u[0]),r(u[1],u[1])),t(r(u[2],u[2]),r(u[3],u[3]))),U=n(j,i[0]),V=n(j,a[0]),H=n(j,o[0]),q=n(j,s[0]),G=n(j,l[0]),Z=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),a[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-s[2])),t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),l[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),s[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),a[2]),n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-u[2]))),i[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-a[3]),n(t(t(n(t(n(e(q,I),a[1]),t(n(e(V,_),-s[1]),n(e(C,x),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-u[2]))),o[3])),t(n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),u[3]))))),Y=t(t(t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),o[2]),n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),-s[2])),t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),l[2]),n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),-u[2]))),i[3]),t(n(t(t(n(t(n(e(G,N),s[1]),t(n(e(q,I),-l[1]),n(e(B,O),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-s[2])),t(n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),l[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-u[2]))),-o[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),s[3]))),t(t(n(t(t(n(t(n(e(q,I),o[1]),t(n(e(H,S),-s[1]),n(e(P,A),u[1]))),i[2]),n(t(n(e(q,I),i[1]),t(n(e(U,v),-s[1]),n(e(L,p),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-u[2]))),-l[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),u[3])),t(n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),a[2]),n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),-o[2])),t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),l[2]),n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),-u[2]))),i[3]),n(t(t(n(t(n(e(G,N),o[1]),t(n(e(H,S),-l[1]),n(e(F,M),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-o[2])),t(n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),l[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-u[2]))),-a[3])))),t(t(t(n(t(t(n(t(n(e(G,N),a[1]),t(n(e(V,_),-l[1]),n(e(R,b),u[1]))),i[2]),n(t(n(e(G,N),i[1]),t(n(e(U,v),-l[1]),n(e(z,d),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),l[2]),n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),-u[2]))),o[3]),n(t(t(n(t(n(e(H,S),a[1]),t(n(e(V,_),-o[1]),n(e(k,m),u[1]))),i[2]),n(t(n(e(H,S),i[1]),t(n(e(U,v),-o[1]),n(e(T,h),u[1]))),-a[2])),t(n(t(n(e(V,_),i[1]),t(n(e(U,v),-a[1]),n(e(y,f),u[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-u[2]))),-l[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),u[3]),n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),a[2]),n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),-o[2])),t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),s[2]),n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),-l[2]))),i[3]))),t(t(n(t(t(n(t(n(e(B,O),o[1]),t(n(e(F,M),-s[1]),n(e(P,A),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-o[2])),t(n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),s[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-l[2]))),-a[3]),n(t(t(n(t(n(e(B,O),a[1]),t(n(e(R,b),-s[1]),n(e(C,x),l[1]))),i[2]),n(t(n(e(B,O),i[1]),t(n(e(z,d),-s[1]),n(e(L,p),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),s[2]),n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),-l[2]))),o[3])),t(n(t(t(n(t(n(e(F,M),a[1]),t(n(e(R,b),-o[1]),n(e(k,m),l[1]))),i[2]),n(t(n(e(F,M),i[1]),t(n(e(z,d),-o[1]),n(e(T,h),l[1]))),-a[2])),t(n(t(n(e(R,b),i[1]),t(n(e(z,d),-a[1]),n(e(y,f),l[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-l[2]))),-s[3]),n(t(t(n(t(n(e(P,A),a[1]),t(n(e(C,x),-o[1]),n(e(k,m),s[1]))),i[2]),n(t(n(e(P,A),i[1]),t(n(e(L,p),-o[1]),n(e(T,h),s[1]))),-a[2])),t(n(t(n(e(C,x),i[1]),t(n(e(L,p),-a[1]),n(e(y,f),s[1]))),o[2]),n(t(n(e(k,m),i[1]),t(n(e(T,h),-a[1]),n(e(y,f),o[1]))),-s[2]))),l[3]))))),W=e(Z,Y);return W[W.length-1]}}var h=[function(){return 0},function(){return 0},function(){return 0}];function p(t){var e=h[t.length];return e||(e=h[t.length]=s(t.length)),e.apply(void 0,t)}function d(t,e,r,n,i,a,o,s){return function(e,r,l,u,c,f){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,l);case 4:return a(e,r,l,u);case 5:return o(e,r,l,u,c);case 6:return s(e,r,l,u,c,f)}for(var h=new Array(arguments.length),p=0;p<arguments.length;++p)h[p]=arguments[p];return t(h)}}!function(){for(;h.length<=6;)h.push(s(h.length));t.exports=d.apply(void 0,[p].concat(h));for(var e=0;e<=6;++e)t.exports[e]=h[e]}()},6606:function(t,e,r){\"use strict\";var n=r(8167);function i(t){return(2===t?a:3===t?o:4===t?s:5===t?l:u)(t<6?n[t]:n)}function a(t){return function(e,r){return[t([[+r[0],+e[0][1]],[+r[1],+e[1][1]]]),t([[+e[0][0],+r[0]],[+e[1][0],+r[1]]]),t(e)]}}function o(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2]],[+r[1],+e[1][1],+e[1][2]],[+r[2],+e[2][1],+e[2][2]]]),t([[+e[0][0],+r[0],+e[0][2]],[+e[1][0],+r[1],+e[1][2]],[+e[2][0],+r[2],+e[2][2]]]),t([[+e[0][0],+e[0][1],+r[0]],[+e[1][0],+e[1][1],+r[1]],[+e[2][0],+e[2][1],+r[2]]]),t(e)]}}function s(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3]],[+r[1],+e[1][1],+e[1][2],+e[1][3]],[+r[2],+e[2][1],+e[2][2],+e[2][3]],[+r[3],+e[3][1],+e[3][2],+e[3][3]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3]],[+e[1][0],+r[1],+e[1][2],+e[1][3]],[+e[2][0],+r[2],+e[2][2],+e[2][3]],[+e[3][0],+r[3],+e[3][2],+e[3][3]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3]],[+e[1][0],+e[1][1],+r[1],+e[1][3]],[+e[2][0],+e[2][1],+r[2],+e[2][3]],[+e[3][0],+e[3][1],+r[3],+e[3][3]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+r[3]]]),t(e)]}}function l(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4]]]),t(e)]}}function u(t){return function(e,r){return[t([[+r[0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+r[1],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+r[2],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+r[3],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+r[4],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+r[5],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+r[0],+e[0][2],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+r[1],+e[1][2],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+r[2],+e[2][2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+r[3],+e[3][2],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+r[4],+e[4][2],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+r[5],+e[5][2],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+r[0],+e[0][3],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+r[1],+e[1][3],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+r[2],+e[2][3],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+r[3],+e[3][3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+r[4],+e[4][3],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+r[5],+e[5][3],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+r[0],+e[0][4],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+r[1],+e[1][4],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+r[2],+e[2][4],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+r[3],+e[3][4],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+r[4],+e[4][4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+r[5],+e[5][4],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+r[0],+e[0][5]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+r[1],+e[1][5]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+r[2],+e[2][5]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+r[3],+e[3][5]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+r[4],+e[4][5]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+r[5],+e[5][5]]]),t([[+e[0][0],+e[0][1],+e[0][2],+e[0][3],+e[0][4],+r[0]],[+e[1][0],+e[1][1],+e[1][2],+e[1][3],+e[1][4],+r[1]],[+e[2][0],+e[2][1],+e[2][2],+e[2][3],+e[2][4],+r[2]],[+e[3][0],+e[3][1],+e[3][2],+e[3][3],+e[3][4],+r[3]],[+e[4][0],+e[4][1],+e[4][2],+e[4][3],+e[4][4],+r[4]],[+e[5][0],+e[5][1],+e[5][2],+e[5][3],+e[5][4],+r[5]]]),t(e)]}}var c=[function(){return[[0]]},function(t,e){return[[e[0]],[t[0][0]]]}];function f(t,e,r,n,i,a,o,s){return function(l,u){switch(l.length){case 0:return t(l,u);case 1:return e(l,u);case 2:return r(l,u);case 3:return n(l,u);case 4:return i(l,u);case 5:return a(l,u)}var c=o[l.length];return c||(c=o[l.length]=s(l.length)),c(l,u)}}!function(){for(;c.length<6;)c.push(i(c.length));t.exports=f.apply(void 0,c.concat([c,i]));for(var e=0;e<6;++e)t.exports[e]=c[e]}()},417:function(t,e,r){\"use strict\";var n=r(9660),i=r(9662),a=r(8289),o=r(4078);function s(t,e,r,n){return function(r,i,a){var o=t(t(e(i[1],a[0]),e(-a[1],i[0])),t(e(r[1],i[0]),e(-i[1],r[0]))),s=t(e(r[1],a[0]),e(-a[1],r[0])),l=n(o,s);return l[l.length-1]}}function l(t,e,r,n){return function(i,a,o,s){var l=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2])))),u=t(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2])))),c=n(l,u);return c[c.length-1]}}function u(t,e,r,n){return function(i,a,o,s,l){var u=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),a[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),-o[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),s[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),-l[3]),t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-s[2]),r(t(e(a[1],s[0]),e(-s[1],a[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-a[3])))),t(t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),s[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),-l[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),a[2]),t(r(t(e(a[1],s[0]),e(-s[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),s[2]))),i[3]))),t(r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-a[3]),t(r(t(r(t(e(a[1],s[0]),e(-s[1],a[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),s[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-s[3]))))),c=t(t(t(r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),o[2]),t(r(t(e(o[1],l[0]),e(-l[1],o[0])),-s[2]),r(t(e(o[1],s[0]),e(-s[1],o[0])),l[2]))),i[3]),r(t(r(t(e(s[1],l[0]),e(-l[1],s[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-s[2]),r(t(e(i[1],s[0]),e(-s[1],i[0])),l[2]))),-o[3])),t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),s[3]),r(t(r(t(e(o[1],s[0]),e(-s[1],o[0])),i[2]),t(r(t(e(i[1],s[0]),e(-s[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),s[2]))),-l[3]))),t(t(r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),a[2]),t(r(t(e(a[1],l[0]),e(-l[1],a[0])),-o[2]),r(t(e(a[1],o[0]),e(-o[1],a[0])),l[2]))),i[3]),r(t(r(t(e(o[1],l[0]),e(-l[1],o[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-o[2]),r(t(e(i[1],o[0]),e(-o[1],i[0])),l[2]))),-a[3])),t(r(t(r(t(e(a[1],l[0]),e(-l[1],a[0])),i[2]),t(r(t(e(i[1],l[0]),e(-l[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),l[2]))),o[3]),r(t(r(t(e(a[1],o[0]),e(-o[1],a[0])),i[2]),t(r(t(e(i[1],o[0]),e(-o[1],i[0])),-a[2]),r(t(e(i[1],a[0]),e(-a[1],i[0])),o[2]))),-l[3])))),f=n(u,c);return f[f.length-1]}}function c(t){return(3===t?s:4===t?l:u)(i,n,a,o)}var f=c(3),h=c(4),p=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i=(t[1]-r[1])*(e[0]-r[0]),a=(t[0]-r[0])*(e[1]-r[1]),o=i-a;if(i>0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=33306690738754716e-32*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],u=r[1]-n[1],c=t[2]-n[2],f=e[2]-n[2],p=r[2]-n[2],d=a*u,v=o*l,g=o*s,y=i*u,m=i*l,x=a*s,b=c*(d-v)+f*(g-y)+p*(m-x),_=7771561172376103e-31*((Math.abs(d)+Math.abs(v))*Math.abs(c)+(Math.abs(g)+Math.abs(y))*Math.abs(f)+(Math.abs(m)+Math.abs(x))*Math.abs(p));return b>_||-b>_?b:h(t,e,r,n)}];function d(t){var e=p[t.length];return e||(e=p[t.length]=c(t.length)),e.apply(void 0,t)}function v(t,e,r,n,i,a,o){return function(e,r,s,l,u){switch(arguments.length){case 0:case 1:return 0;case 2:return n(e,r);case 3:return i(e,r,s);case 4:return a(e,r,s,l);case 5:return o(e,r,s,l,u)}for(var c=new Array(arguments.length),f=0;f<arguments.length;++f)c[f]=arguments[f];return t(c)}}!function(){for(;p.length<=5;)p.push(c(p.length));t.exports=v.apply(void 0,[d].concat(p));for(var e=0;e<=5;++e)t.exports[e]=p[e]}()},2019:function(t,e,r){\"use strict\";var n=r(9662),i=r(8289);t.exports=function(t,e){if(1===t.length)return i(e,t[0]);if(1===e.length)return i(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var a=0;a<t.length;++a)r=n(r,i(e,t[a]));else for(a=0;a<e.length;++a)r=n(r,i(t,e[a]));return r}},8289:function(t,e,r){\"use strict\";var n=r(9660),i=r(87);t.exports=function(t,e){var r=t.length;if(1===r){var a=n(t[0],e);return a[0]?a:[a[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],u=0;n(t[0],e,s),s[0]&&(o[u++]=s[0]);for(var c=1;c<r;++c){n(t[c],e,l);var f=s[1];i(f,l[0],s),s[0]&&(o[u++]=s[0]);var h=l[1],p=s[1],d=h+p,v=p-(d-h);s[1]=d,v&&(o[u++]=v)}return s[1]&&(o[u++]=s[1]),0===u&&(o[u++]=0),o.length=u,o}},4434:function(t,e,r){\"use strict\";t.exports=function(t,e,r,i){var a=n(t,r,i),o=n(e,r,i);if(a>0&&o>0||a<0&&o<0)return!1;var s=n(r,t,e),l=n(i,t,e);return!(s>0&&l>0||s<0&&l<0)&&(0!==a||0!==o||0!==s||0!==l||function(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),u=r[i],c=n[i],f=Math.min(u,c);if(Math.max(u,c)<s||l<f)return!1}return!0}(t,e,r,i))};var n=r(417)[3]},4078:function(t){\"use strict\";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],-e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=-e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=-e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=-e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=-e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},9662:function(t){\"use strict\";t.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);return i?[i,r]:[r]}(t[0],e[0]);var i,a,o=new Array(r+n),s=0,l=0,u=0,c=Math.abs,f=t[l],h=c(f),p=e[u],d=c(p);h<d?(a=f,(l+=1)<r&&(h=c(f=t[l]))):(a=p,(u+=1)<n&&(d=c(p=e[u]))),l<r&&h<d||u>=n?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u])));for(var v,g,y=i+a,m=y-i,x=a-m,b=x,_=y;l<r&&u<n;)h<d?(i=f,(l+=1)<r&&(h=c(f=t[l]))):(i=p,(u+=1)<n&&(d=c(p=e[u]))),(x=(a=b)-(m=(y=i+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v;for(;l<r;)(x=(a=b)-(m=(y=(i=f)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(l+=1)<r&&(f=t[l]);for(;u<n;)(x=(a=b)-(m=(y=(i=p)+a)-i))&&(o[s++]=x),b=_-((v=_+y)-(g=v-_))+(y-g),_=v,(u+=1)<n&&(p=e[u]);return b&&(o[s++]=b),_&&(o[s++]=_),s||(o[s++]=0),o.length=s,o}},8691:function(t,e,r){\"use strict\";t.exports=function(t){return i(n(t))};var n=r(2692),i=r(7037)},7212:function(t,e,r){\"use strict\";t.exports=function(t,e,r,s){if(r=r||0,void 0===s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t)),0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=i.mallocUint8(r),a=0;a<r;++a)n[a]=t[a]<e|0;return n}(e,+r),u=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=i.mallocUint32(2*o),l=0,u=0;u<r;++u)for(var c=t[u],f=(e=c.length,0);f<e;++f)for(var h=0;h<f;++h){var p=c[h],d=c[f];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}a(n(s,[l/2|0,2]));var v=2;for(u=2;u<l;u+=2)s[u-2]===s[u]&&s[u-1]===s[u+1]||(s[v++]=s[u],s[v++]=s[u+1]);return n(s,[v/2|0,2])}(t,s),c=function(t,e,r,a){for(var o=t.data,s=t.shape[0],l=i.mallocDouble(s),u=0,c=0;c<s;++c){var f=o[2*c],h=o[2*c+1];if(r[f]!==r[h]){var p=e[f],d=e[h];o[2*u]=f,o[2*u+1]=h,l[u++]=(d-a)/(d-p)}}return t.shape[0]=u,n(l,[u])}(u,e,l,+r),f=function(t,e){var r=i.mallocInt32(2*e),n=t.shape[0],a=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=a[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}for(r[2*o+1]=n;++o<e;)r[2*o]=r[2*o+1]=n;return r}(u,0|e.length),h=o(s)(t,u.data,f,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),i=0;i<e;++i)n[i]=[r[2*i],r[2*i+1]];return n}(u),d=[].slice.call(c.data,0,c.shape[0]);return i.free(l),i.free(u.data),i.free(c.data),i.free(f),{cells:h,vertexIds:p,vertexWeights:d}};var n=r(5050),i=r(5306),a=r(8729),o=r(1168)},1168:function(t){\"use strict\";t.exports=function(t){return e[t]()};var e=[function(){return function(t,e,r,n){for(var i=t.length,a=0;a<i;++a)t[a].length;return[]}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s];if(2===l.length){var u=(i[l[0]]<<0)+(i[l[1]]<<1);if(0===u||3===u)continue;switch(u){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}},function(){function t(t,e,r,n){for(var i=0|Math.min(r,n),a=0|Math.max(r,n),o=t[2*i],s=t[2*i+1];o<s;){var l=o+s>>1,u=e[2*l+1];if(u===a)return l;a<u?s=l:o=l+1}return o}return function(e,r,n,i){for(var a=e.length,o=[],s=0;s<a;++s){var l=e[s],u=l.length;if(4===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2)+(i[l[3]]<<3))||15===c)continue;switch(c){case 0:case 15:break;case 1:o.push([t(n,r,l[0],l[1]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])]);break;case 2:o.push([t(n,r,l[1],l[2]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])]);break;case 3:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[0],l[3])],[t(n,r,l[1],l[3]),t(n,r,l[1],l[2]),t(n,r,l[0],l[3])]);break;case 4:o.push([t(n,r,l[2],l[0]),t(n,r,l[2],l[1]),t(n,r,l[2],l[3])]);break;case 5:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[0],l[3])],[t(n,r,l[2],l[1]),t(n,r,l[2],l[3]),t(n,r,l[0],l[3])]);break;case 6:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[1],l[3])],[t(n,r,l[2],l[3]),t(n,r,l[2],l[0]),t(n,r,l[1],l[3])]);break;case 7:o.push([t(n,r,l[0],l[3]),t(n,r,l[1],l[3]),t(n,r,l[2],l[3])]);break;case 8:o.push([t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[3],l[2])]);break;case 9:o.push([t(n,r,l[3],l[1]),t(n,r,l[0],l[1]),t(n,r,l[0],l[2])],[t(n,r,l[3],l[2]),t(n,r,l[3],l[1]),t(n,r,l[0],l[2])]);break;case 10:o.push([t(n,r,l[1],l[0]),t(n,r,l[3],l[0]),t(n,r,l[1],l[2])],[t(n,r,l[3],l[0]),t(n,r,l[3],l[2]),t(n,r,l[1],l[2])]);break;case 11:o.push([t(n,r,l[1],l[2]),t(n,r,l[0],l[2]),t(n,r,l[3],l[2])]);break;case 12:o.push([t(n,r,l[3],l[0]),t(n,r,l[2],l[0]),t(n,r,l[2],l[1])],[t(n,r,l[3],l[1]),t(n,r,l[3],l[0]),t(n,r,l[2],l[1])]);break;case 13:o.push([t(n,r,l[0],l[1]),t(n,r,l[2],l[1]),t(n,r,l[3],l[1])]);break;case 14:o.push([t(n,r,l[2],l[0]),t(n,r,l[1],l[0]),t(n,r,l[3],l[0])])}}else if(3===u){if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1)+(i[l[2]]<<2))||7===c)continue;switch(c){case 0:case 7:break;case 1:o.push([t(n,r,l[0],l[2]),t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0]),t(n,r,l[1],l[2])]);break;case 3:o.push([t(n,r,l[0],l[2]),t(n,r,l[1],l[2])]);break;case 4:o.push([t(n,r,l[2],l[1]),t(n,r,l[2],l[0])]);break;case 5:o.push([t(n,r,l[2],l[1]),t(n,r,l[0],l[1])]);break;case 6:o.push([t(n,r,l[1],l[0]),t(n,r,l[2],l[0])])}}else if(2===u){var c;if(0==(c=(i[l[0]]<<0)+(i[l[1]]<<1))||3===c)continue;switch(c){case 0:case 3:break;case 1:o.push([t(n,r,l[0],l[1])]);break;case 2:o.push([t(n,r,l[1],l[0])])}}}return o}}]},8211:function(t,e,r){\"use strict\";r(2288),r(1731),e.H=function(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}},9392:function(t,e){\"use strict\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,1+((t|=t>>>8)|t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},6656:function(t,e,r){\"use strict\";var n=r(9392),i=r(9521);function a(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),u=i(e[0],e[1]);return(s=i(l,t[2])-i(u,e[2]))||i(l+t[2],a)-i(u+e[2],o);default:var c=t.slice(0);c.sort();var f=e.slice(0);f.sort();for(var h=0;h<r;++h)if(n=c[h]-f[h])return n;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),i=0;i<r;++i)n[i]=[t[i],e[i]];for(n.sort(o),i=0;i<r;++i)t[i]=n[i][0],e[i]=n[i][1];return t}return t.sort(a),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var i=t[n];if(a(i,t[n-1])){if(n===e){e++;continue}t[e++]=i}}return t.length=e,t}function u(t,e){for(var r=0,n=t.length-1,i=-1;r<=n;){var o=r+n>>1,s=a(t[o],e);s<=0?(0===s&&(i=o),r=o+1):s>0&&(n=o-1)}return i}function c(t,e){for(var r=new Array(t.length),i=0,o=r.length;i<o;++i)r[i]=[];for(var s=[],l=(i=0,e.length);i<l;++i)for(var c=e[i],f=c.length,h=1,p=1<<f;h<p;++h){s.length=n.popCount(h);for(var d=0,v=0;v<f;++v)h&1<<v&&(s[d++]=c[v]);var g=u(t,s);if(!(g<0))for(;r[g++].push(i),!(g>=t.length||0!==a(t[g],s)););}return r}function f(t,e){if(e<0)return[];for(var r=[],i=(1<<e+1)-1,a=0;a<t.length;++a)for(var o=t[a],l=i;l<1<<o.length;l=n.nextCombination(l)){for(var u=new Array(e+1),c=0,f=0;f<o.length;++f)l&1<<f&&(u[c++]=o[f]);r.push(u)}return s(r)}e.dimension=function(t){for(var e=0,r=Math.max,n=0,i=t.length;n<i;++n)e=r(e,t[n].length);return e-1},e.countVertices=function(t){for(var e=-1,r=Math.max,n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)e=r(e,a[o]);return e+1},e.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},e.compareCells=a,e.normalize=s,e.unique=l,e.findCell=u,e.incidence=c,e.dual=function(t,e){if(!e)return c(l(f(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)r[a[o]].push(n);return r},e.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0|i.length,o=1,l=1<<a;o<l;++o){for(var u=[],c=0;c<a;++c)o>>>c&1&&u.push(i[c]);e.push(u)}return s(e)},e.skeleton=f,e.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;++a){for(var l=new Array(i.length-1),u=0,c=0;u<o;++u)u!==a&&(l[c++]=i[u]);e.push(l)}return s(e)},e.connectedComponents=function(t,e){return e?function(t,e){for(var r=new i(e),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var s=o+1;s<a.length;++s)r.link(a[o],a[s]);var l=[],u=r.ranks;for(n=0;n<u.length;++n)u[n]=-1;for(n=0;n<t.length;++n){var c=r.find(t[n][0]);u[c]<0?(u[c]=l.length,l.push([t[n].slice(0)])):l[u[c]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(f(t,0))),r=new i(e.length),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var c=u(e,[a[o]]),h=o+1;h<a.length;++h)r.link(c,u(e,[a[h]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var v=r.find(u(e,[t[n][0]]));d[v]<0?(d[v]=p.length,p.push([t[n].slice(0)])):p[d[v]].push(t[n].slice(0))}return p}(t)}},9521:function(t){\"use strict\";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e,e.prototype.length=function(){return this.roots.length},e.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},e.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},e.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},8243:function(t,e,r){\"use strict\";t.exports=function(t,e,r){for(var a=e.length,o=t.length,s=new Array(a),l=new Array(a),u=new Array(a),c=new Array(a),f=0;f<a;++f)s[f]=l[f]=-1,u[f]=1/0,c[f]=!1;for(f=0;f<o;++f){var h=t[f];if(2!==h.length)throw new Error(\"Input must be a graph\");var p=h[1],d=h[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function v(t){if(c[t])return 1/0;var r,i,a,o=s[t],u=l[t];return o<0||u<0?1/0:(r=e[t],i=e[o],a=e[u],Math.abs(n(r,i,a))/Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)))}function g(t,e){var r=k[t],n=k[e];k[t]=n,k[e]=r,A[r]=e,A[n]=t}function y(t){return u[k[t]]}function m(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=y(t);;){var r=e,n=2*t+1,i=2*(t+1),a=t;if(n<M){var o=y(n);o<r&&(a=n,r=o)}if(i<M&&y(i)<r&&(a=i),a===t)return t;g(t,a),t=a}}function b(t){for(var e=y(t);t>0;){var r=m(t);if(!(r>=0&&e<y(r)))return t;g(t,r),t=r}}function _(){if(M>0){var t=k[0];return g(0,M-1),M-=1,x(0),t}return-1}function w(t,e){var r=k[t];return u[r]===e?t:(u[r]=-1/0,b(t),_(),u[r]=e,b((M+=1)-1))}function T(t){if(!c[t]){c[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),A[e]>=0&&w(A[e],v(e)),A[r]>=0&&w(A[r],v(r))}}var k=[],A=new Array(a);for(f=0;f<a;++f)(u[f]=v(f))<1/0?(A[f]=k.length,k.push(f)):A[f]=-1;var M=k.length;for(f=M>>1;f>=0;--f)x(f);for(;;){var S=_();if(S<0||u[S]>r)break;T(S)}var E=[];for(f=0;f<a;++f)c[f]||(A[f]=E.length,E.push(e[f].slice()));function L(t,e){if(t[e]<0)return e;var r=e,n=e;do{var i=t[n];if(!c[n]||i<0||i===n)break;if(i=t[n=i],!c[n]||i<0||i===n)break;n=i,r=t[r]}while(r!==n);for(var a=e;a!==n;a=t[a])t[a]=n;return n}E.length;var C=[];return t.forEach((function(t){var e=L(s,t[0]),r=L(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=A[e],i=A[r];n!==i&&C.push([n,i])}})),i.unique(i.normalize(C)),{positions:E,edges:C}};var n=r(417),i=r(6656)},6638:function(t,e,r){\"use strict\";t.exports=function(t,e){var r,a,o,s;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0]))return i(e,t);r=e[1],a=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=n(r,a,s),u=n(r,a,o);if(l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;if(l=n(s,o,a),u=n(s,o,r),l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;return a[0]-s[0]};var n=r(417);function i(t,e){var r,i,a,o;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),u=Math.min(e[0][1],e[1][1]),c=Math.max(e[0][1],e[1][1]);return l<u?l-u:s>c?s-c:l-c}r=e[1],i=e[0]}t[0][1]<t[1][1]?(a=t[0],o=t[1]):(a=t[1],o=t[0]);var f=n(i,r,a);return f||(f=n(i,r,o))||o-i}},4385:function(t,e,r){\"use strict\";t.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),a=0;a<e;++a){var l=t[a],u=l[0][0]<l[1][0];n[2*a]=new f(l[0][0],l,u,a),n[2*a+1]=new f(l[1][0],l,!u,a)}n.sort((function(t,e){var r=t.x-e.x;return r||(r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1])}));var h=i(o),p=[],d=[],v=[];for(a=0;a<r;){for(var g=n[a].x,y=[];a<r;){var m=n[a];if(m.x!==g)break;a+=1,m.segment[0][0]===m.x&&m.segment[1][0]===m.x?m.create&&(m.segment[0][1]<m.segment[1][1]?(y.push(new c(m.segment[0][1],m.index,!0,!0)),y.push(new c(m.segment[1][1],m.index,!1,!1))):(y.push(new c(m.segment[1][1],m.index,!0,!1)),y.push(new c(m.segment[0][1],m.index,!1,!0)))):h=m.create?h.insert(m.segment,m.index):h.remove(m.segment)}p.push(h.root),d.push(g),v.push(y)}return new s(p,d,v)};var n=r(5070),i=r(7080),a=r(417),o=r(6638);function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function u(t,e){for(var r=null;t;){var n,i,o=t.key;o[0][0]<o[1][0]?(n=o[0],i=o[1]):(n=o[1],i=o[0]);var s=a(n,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=u(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=u(t.right,e))return l;t=t.left}}return r}function c(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function f(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=u(this.slabs[e],t),i=-1;if(r&&(i=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var c=u(this.slabs[e-1],t);c&&(s?o(c.key,s)>0&&(s=c.key,i=c.value):(i=c.value,s=c.key))}var f=this.horizontal[e];if(f.length>0){var h=n.ge(f,t[1],l);if(h<f.length){var p=f[h];if(t[1]===p.y){if(p.closed)return p.index;for(;h<f.length-1&&f[h+1].y===t[1];)if((p=f[h+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((h+=1)>=f.length)return i;p=f[h]}}if(p.start)if(s){var d=a(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(i=p.index)}else i=p.index;else p.y!==t[1]&&(i=p.index)}}}return i}},4670:function(t,e,r){\"use strict\";var n=r(9130),i=r(9662);function a(t,e){var r=i(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i=-e/(n-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=i*t[l]+a*r[l];return s}t.exports=function(t,e){for(var r=[],n=[],i=a(t[t.length-1],e),s=t[t.length-1],l=t[0],u=0;u<t.length;++u,s=l){var c=a(l=t[u],e);if(i<0&&c>0||i>0&&c<0){var f=o(s,c,l,i);r.push(f),n.push(f.slice())}c<0?n.push(l.slice()):c>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i=c}return{positive:r,negative:n}},t.exports.positive=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u>=0&&r.push(s.slice()),n=u}return r},t.exports.negative=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var u=a(s=t[l],e);(n<0&&u>0||n>0&&u<0)&&r.push(o(i,u,s,n)),u<=0&&r.push(s.slice()),n=u}return r}},8974:function(t,e,r){var n;!function(){\"use strict\";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\x25]+/,modulo:/^\\x25{2}/,placeholder:/^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\d]*)/i,key_access:/^\\.([a-z_][a-z_\\d]*)/i,index_access:/^\\[(\\d+)\\]/,sign:/^[+-]/};function a(t){return function(t,e){var r,n,o,s,l,u,c,f,h,p=1,d=t.length,v=\"\";for(n=0;n<d;n++)if(\"string\"==typeof t[n])v+=t[n];else if(\"object\"==typeof t[n]){if((s=t[n]).keys)for(r=e[p],o=0;o<s.keys.length;o++){if(null==r)throw new Error(a('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"',s.keys[o],s.keys[o-1]));r=r[s.keys[o]]}else r=s.param_no?e[s.param_no]:e[p++];if(i.not_type.test(s.type)&&i.not_primitive.test(s.type)&&r instanceof Function&&(r=r()),i.numeric_arg.test(s.type)&&\"number\"!=typeof r&&isNaN(r))throw new TypeError(a(\"[sprintf] expecting number but found %T\",r));switch(i.number.test(s.type)&&(f=r>=0),s.type){case\"b\":r=parseInt(r,10).toString(2);break;case\"c\":r=String.fromCharCode(parseInt(r,10));break;case\"d\":case\"i\":r=parseInt(r,10);break;case\"j\":r=JSON.stringify(r,null,s.width?parseInt(s.width):0);break;case\"e\":r=s.precision?parseFloat(r).toExponential(s.precision):parseFloat(r).toExponential();break;case\"f\":r=s.precision?parseFloat(r).toFixed(s.precision):parseFloat(r);break;case\"g\":r=s.precision?String(Number(r.toPrecision(s.precision))):parseFloat(r);break;case\"o\":r=(parseInt(r,10)>>>0).toString(8);break;case\"s\":r=String(r),r=s.precision?r.substring(0,s.precision):r;break;case\"t\":r=String(!!r),r=s.precision?r.substring(0,s.precision):r;break;case\"T\":r=Object.prototype.toString.call(r).slice(8,-1).toLowerCase(),r=s.precision?r.substring(0,s.precision):r;break;case\"u\":r=parseInt(r,10)>>>0;break;case\"v\":r=r.valueOf(),r=s.precision?r.substring(0,s.precision):r;break;case\"x\":r=(parseInt(r,10)>>>0).toString(16);break;case\"X\":r=(parseInt(r,10)>>>0).toString(16).toUpperCase()}i.json.test(s.type)?v+=r:(!i.number.test(s.type)||f&&!s.sign?h=\"\":(h=f?\"+\":\"-\",r=r.toString().replace(i.sign,\"\")),u=s.pad_char?\"0\"===s.pad_char?\"0\":s.pad_char.charAt(1):\" \",c=s.width-(h+r).length,l=s.width&&c>0?u.repeat(c):\"\",v+=s.align?h+r+l:\"0\"===u?h+l+r:l+h+r)}return v}(function(t){if(s[t])return s[t];for(var e,r=t,n=[],a=0;r;){if(null!==(e=i.text.exec(r)))n.push(e[0]);else if(null!==(e=i.modulo.exec(r)))n.push(\"%\");else{if(null===(e=i.placeholder.exec(r)))throw new SyntaxError(\"[sprintf] unexpected placeholder\");if(e[2]){a|=1;var o=[],l=e[2],u=[];if(null===(u=i.key.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");for(o.push(u[1]);\"\"!==(l=l.substring(u[0].length));)if(null!==(u=i.key_access.exec(l)))o.push(u[1]);else{if(null===(u=i.index_access.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");o.push(u[1])}e[2]=o}else a|=2;if(3===a)throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\");n.push({placeholder:e[0],param_no:e[1],keys:e[2],sign:e[3],pad_char:e[4],align:e[5],width:e[6],precision:e[7],type:e[8]})}r=r.substring(e[0].length)}return s[t]=n}(t),arguments)}function o(t,e){return a.apply(null,[t].concat(e||[]))}var s=Object.create(null);e.sprintf=a,e.vsprintf=o,\"undefined\"!=typeof window&&(window.sprintf=a,window.vsprintf=o,void 0===(n=function(){return{sprintf:a,vsprintf:o}}.call(e,r,e,t))||(t.exports=n))}()},4162:function(t,e,r){\"use strict\";t.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=i(t,e),n=r.length,a=new Array(n),o=new Array(n),s=0;s<n;++s)a[s]=[r[s]],o[s]=[s];return{positions:a,cells:o}}(t,e);var r=t.order.join()+\"-\"+t.dtype,s=o[r];return e=+e||0,s||(s=o[r]=function(t,e){var r=t.length+\"d\",i=a[r];if(i)return i(n,t,e)}(t.order,t.dtype)),s(t,e)};var n=r(9284),i=r(9584),a={\"2d\":function(t,e,r){var n=t({order:e,scalarArguments:3,getters:\"generic\"===r?[0]:void 0,phase:function(t,e,r,n){return t>n|0},vertex:function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=(o<<0)+(s<<1)+(l<<2)+(u<<3)|0;if(0!==p&&15!==p)switch(p){case 0:case 15:c.push([t-.5,e-.5]);break;case 1:c.push([t-.25-.25*(n+r-2*h)/(r-n),e-.25-.25*(i+r-2*h)/(r-i)]);break;case 2:c.push([t-.75-.25*(-n-r+2*h)/(n-r),e-.25-.25*(a+n-2*h)/(n-a)]);break;case 3:c.push([t-.5,e-.5-.5*(i+r+a+n-4*h)/(r-i+n-a)]);break;case 4:c.push([t-.25-.25*(a+i-2*h)/(i-a),e-.75-.25*(-i-r+2*h)/(i-r)]);break;case 5:c.push([t-.5-.5*(n+r+a+i-4*h)/(r-n+i-a),e-.5]);break;case 6:c.push([t-.5-.25*(-n-r+a+i)/(n-r+i-a),e-.5-.25*(-i-r+a+n)/(i-r+n-a)]);break;case 7:c.push([t-.75-.25*(a+i-2*h)/(i-a),e-.75-.25*(a+n-2*h)/(n-a)]);break;case 8:c.push([t-.75-.25*(-a-i+2*h)/(a-i),e-.75-.25*(-a-n+2*h)/(a-n)]);break;case 9:c.push([t-.5-.25*(n+r+-a-i)/(r-n+a-i),e-.5-.25*(i+r+-a-n)/(r-i+a-n)]);break;case 10:c.push([t-.5-.5*(-n-r-a-i+4*h)/(n-r+a-i),e-.5]);break;case 11:c.push([t-.25-.25*(-a-i+2*h)/(a-i),e-.75-.25*(i+r-2*h)/(r-i)]);break;case 12:c.push([t-.5,e-.5-.5*(-i-r-a-n+4*h)/(i-r+a-n)]);break;case 13:c.push([t-.75-.25*(n+r-2*h)/(r-n),e-.25-.25*(-a-n+2*h)/(a-n)]);break;case 14:c.push([t-.25-.25*(-n-r+2*h)/(n-r),e-.25-.25*(-i-r+2*h)/(i-r)])}},cell:function(t,e,r,n,i,a,o,s,l){i?s.push([t,e]):s.push([e,t])}});return function(t,e){var r=[],i=[];return n(t,r,i,e),{positions:r,cells:i}}}},o={}},6946:function(t,e,r){\"use strict\";t.exports=function t(e,r,i){i=i||{};var a=o[e];a||(a=o[e]={\" \":{data:new Float32Array(0),shape:.2}});var s=a[r];if(!s)if(r.length<=1||!/\\d/.test(r))s=a[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var u=r[s[l]];n[i++]=u[0],n[i++]=u[1]+1.4,a=Math.max(u[0],a)}return{data:n,shape:a}}(n(r,{triangles:!0,font:e,textAlign:i.textAlign||\"left\",textBaseline:\"alphabetic\",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\\d|\\s)/),u=new Array(l.length),c=0,f=0,h=0;h<l.length;++h)u[h]=t(e,l[h]),c+=u[h].data.length,f+=u[h].shape,h>0&&(f+=.02);var p=new Float32Array(c),d=0,v=-.5*f;for(h=0;h<u.length;++h){for(var g=u[h].data,y=0;y<g.length;y+=2)p[d++]=g[y]+v,p[d++]=g[y+1];v+=u[h].shape+.02}s=a[r]={data:p,shape:f}}return s};var n=r(875),a=window||i.global||{},o=a.__TEXT_CACHE||{};a.__TEXT_CACHE={}},14:function(t,e,r){\"use strict\";var n=r(4405);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||\"px\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\"%\":return e.clientHeight/100;case\"ch\":case\"ex\":return function(t,e){var r=document.createElement(\"div\");r.style[\"font-size\"]=\"128\"+t,e.appendChild(r);var n=a(r,\"font-size\")/128;return e.removeChild(r),n}(t,e);case\"em\":return a(e,\"font-size\");case\"rem\":return a(document.body,\"font-size\");case\"vw\":return window.innerWidth/100;case\"vh\":return window.innerHeight/100;case\"vmin\":return Math.min(window.innerWidth,window.innerHeight)/100;case\"vmax\":return Math.max(window.innerWidth,window.innerHeight)/100;case\"in\":return i;case\"cm\":return i/2.54;case\"mm\":return i/25.4;case\"pt\":return i/72;case\"pc\":return i/6}return 1}},3440:function(t,e,r){\"use strict\";t.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||f(r),i=t.radius||1,a=t.theta||0,c=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),\"eye\"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),u(n[0],n[1],n[2])<1e-6?n=f(r):s(n,n),i=u(d[0],d[1],d[2]);var v=l(r,d)/i,g=l(n,d)/i;c=Math.acos(v),a=Math.acos(g)}return i=Math.log(i),new h(t.zoomMin,t.zoomMax,e,r,n,i,a,c)};var n=r(8444),i=r(7437),a=r(4422),o=r(903),s=r(899),l=r(9305);function u(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t){return Math.min(1,Math.max(-1,t))}function f(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),i=[0,0,0];e>Math.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function h(t,e,r,i,a,o,s,l){this.center=n(r),this.up=n(i),this.right=n(a),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var u=0;u<16;++u)this.computedMatrix[u]=.5;this.recalcMatrix(0)}var p=h.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,i=0,a=0;a<3;++a)i+=e[a]*r[a],n+=e[a]*e[a];var l=Math.sqrt(n),c=0;for(a=0;a<3;++a)r[a]-=e[a]*i/n,c+=r[a]*r[a],e[a]/=l;var f=Math.sqrt(c);for(a=0;a<3;++a)r[a]/=f;var h=this.computedToward;o(h,e,r),s(h,h);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],v=this.computedAngle[1],g=Math.cos(d),y=Math.sin(d),m=Math.cos(v),x=Math.sin(v),b=this.computedCenter,_=g*m,w=y*m,T=x,k=-g*x,A=-y*x,M=m,S=this.computedEye,E=this.computedMatrix;for(a=0;a<3;++a){var L=_*r[a]+w*h[a]+T*e[a];E[4*a+1]=k*r[a]+A*h[a]+M*e[a],E[4*a+2]=L,E[4*a+3]=0}var C=E[1],P=E[5],O=E[9],I=E[2],D=E[6],z=E[10],R=P*z-O*D,F=O*I-C*z,B=C*D-P*I,N=u(R,F,B);for(R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B,a=0;a<3;++a)S[a]=b[a]+E[2+4*a]*p;for(a=0;a<3;++a){c=0;for(var j=0;j<3;++j)c+=E[a+4*j]*S[j];E[12+a]=-c}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;d[0]=i[2],d[1]=i[6],d[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,u=0;u<3;++u)i[4*u]=o[u],i[4*u+1]=s[u],i[4*u+2]=l[u];for(a(i,i,n,d),u=0;u<3;++u)o[u]=i[4*u],s[u]=i[4*u+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=u(a,o,s);a/=l,o/=l,s/=l;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=u(c-=a*p,f-=o*p,h-=s*p),v=(c/=d)*e+a*r,g=(f/=d)*e+o*r,y=(h/=d)*e+s*r;this.center.move(t,v,g,y);var m=Math.exp(this.computedRadius[0]);m=Math.max(1e-4,m+n),this.radius.set(t,Math.log(m))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var a=1;\"number\"==typeof r&&(a=0|r),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],f=e[a+8];if(n){var h=Math.abs(s),p=Math.abs(l),d=Math.abs(f),v=Math.max(h,p,d);h===v?(s=s<0?-1:1,l=f=0):d===v?(f=f<0?-1:1,s=l=0):(l=l<0?-1:1,s=f=0)}else{var g=u(s,l,f);s/=g,l/=g,f/=g}var y,m,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*f,T=u(x-=s*w,b-=l*w,_-=f*w),k=l*(_/=T)-f*(b/=T),A=f*(x/=T)-s*_,M=s*b-l*x,S=u(k,A,M);if(k/=S,A/=S,M/=S,this.center.jump(t,q,G,Z),this.radius.idle(t),this.up.jump(t,s,l,f),this.right.jump(t,x,b,_),2===a){var E=e[1],L=e[5],C=e[9],P=E*x+L*b+C*_,O=E*k+L*A+C*M;y=R<0?-Math.PI/2:Math.PI/2,m=Math.atan2(O,P)}else{var I=e[2],D=e[6],z=e[10],R=I*s+D*l+z*f,F=I*x+D*b+z*_,B=I*k+D*A+z*M;y=Math.asin(c(R)),m=Math.atan2(B,F)}this.angle.jump(t,m,y),this.recalcMatrix(t);var N=e[2],j=e[6],U=e[10],V=this.computedMatrix;i(V,e);var H=V[15],q=V[12]/H,G=V[13]/H,Z=V[14]/H,Y=Math.exp(this.computedRadius[0]);this.center.jump(t,q-N*Y,G-j*Y,Z-U*Y)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var i=(n=n||this.computedUp)[0],a=n[1],o=n[2],s=u(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-r[0],f=e[1]-r[1],h=e[2]-r[2],p=u(l,f,h);if(!(p<1e-6)){l/=p,f/=p,h/=p;var d=this.computedRight,v=d[0],g=d[1],y=d[2],m=i*v+a*g+o*y,x=u(v-=m*i,g-=m*a,y-=m*o);if(!(x<.01&&(x=u(v=a*h-o*f,g=o*l-i*h,y=i*f-a*l))<1e-6)){v/=x,g/=x,y/=x,this.up.set(t,i,a,o),this.right.set(t,v,g,y),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=a*y-o*g,_=o*v-i*y,w=i*g-a*v,T=u(b,_,w),k=i*l+a*f+o*h,A=v*l+g*f+y*h,M=(b/=T)*l+(_/=T)*f+(w/=T)*h,S=Math.asin(c(k)),E=Math.atan2(M,A),L=this.angle._state,C=L[L.length-1],P=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-E),I=Math.abs(C-E),D=Math.abs(C-2*Math.PI-E);O<I&&(C+=2*Math.PI),D<I&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},9660:function(t){\"use strict\";t.exports=function(t,r,n){var i=t*r,a=e*t,o=a-(a-t),s=t-o,l=e*r,u=l-(l-r),c=r-u,f=s*c-(i-o*u-s*u-o*c);return n?(n[0]=f,n[1]=i,n):[f,i]};var e=+(Math.pow(2,27)+1)},87:function(t){\"use strict\";t.exports=function(t,e,r){var n=t+e,i=n-t,a=e-i,o=t-(n-i);return r?(r[0]=o+a,r[1]=n,r):[o+a,n]}},5306:function(t,e,r){\"use strict\";var n=r(2288),i=r(3094),a=r(2146).lW;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o=\"undefined\"!=typeof Uint8ClampedArray,s=\"undefined\"!=typeof BigUint64Array,l=\"undefined\"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if(\"[object ArrayBuffer]\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||\"arraybuffer\"===e)return p(t);switch(e){case\"uint8\":return d(t);case\"uint16\":return v(t);case\"uint32\":return g(t);case\"int8\":return y(t);case\"int16\":return m(t);case\"int32\":return x(t);case\"float\":case\"float32\":return b(t);case\"double\":case\"float64\":return _(t);case\"uint8_clamped\":return w(t);case\"bigint64\":return k(t);case\"biguint64\":return T(t);case\"buffer\":return M(t);case\"data\":case\"dataview\":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},1731:function(t){\"use strict\";function e(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}t.exports=e;var r=e.prototype;Object.defineProperty(r,\"length\",{get:function(){return this.roots.length}}),r.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},r.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},r.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},1215:function(t){\"use strict\";t.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,i=t[0],a=t[0],o=1;o<n;++o)if(a=i,e(i=t[o],a)){if(o===r){r++;continue}t[r++]=i}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],i=t[0],a=1;a<r;++a,i=n)if(i=n,(n=t[a])!==i){if(a===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},875:function(t,e,r){\"use strict\";t.exports=function(t,e){return\"object\"==typeof e&&null!==e||(e={}),n(t,e.canvas||i,e.context||a,e)};var n=r(712),i=null,a=null;\"undefined\"!=typeof document&&((i=document.createElement(\"canvas\")).width=8192,i.height=1024,a=i.getContext(\"2d\"))},712:function(t,e,r){t.exports=function(t,e,r,n){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};return n&&(n.size&&n.size>0&&(a=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts)),r.font=[n.fontStyle,n.fontVariant,n.fontWeight,a+\"px\",n.font].filter((function(t){return t})).join(\" \"),r.textAlign=\"start\",r.textBaseline=\"alphabetic\",r.direction=\"ltr\",w(function(t,e,r,n,a,o){r=r.replace(/\\n/g,\"\"),r=!0===o.breaklines?r.replace(/\\<br\\>/g,\"\\n\"):r.replace(/\\<br\\>/g,\" \");var s=\"\",l=[];for(T=0;T<r.length;++T)l[T]=s;!0===o.bolds&&(l=x(u,c,r,l)),!0===o.italics&&(l=x(f,h,r,l)),!0===o.superscripts&&(l=x(p,v,r,l)),!0===o.subscripts&&(l=x(g,m,r,l));var b=[],_=\"\";for(T=0;T<r.length;++T)null!==l[T]&&(_+=r[T],b.push(l[T]));var w,T,k,A,M,S=_.split(\"\\n\"),E=S.length,L=Math.round(a*n),C=n,P=2*n,O=0,I=E*L+P;t.height<I&&(t.height=I),e.fillStyle=\"#000\",e.fillRect(0,0,t.width,t.height),e.fillStyle=\"#fff\";var D=0,z=\"\";function R(){if(\"\"!==z){var t=e.measureText(z).width;e.fillText(z,C+k,P+A),k+=t}}function F(){return Math.round(M)+\"px \"}function B(t,r){var n=\"\"+e.font;if(!0===o.subscripts){var i=t.indexOf(y),a=r.indexOf(y),s=i>-1?parseInt(t[1+i]):0,l=a>-1?parseInt(r[1+a]):0;s!==l&&(n=n.replace(F(),\"?px \"),M*=Math.pow(.75,l-s),n=n.replace(\"?px \",F())),A+=.25*L*(l-s)}if(!0===o.superscripts){var u=t.indexOf(d),f=r.indexOf(d),p=u>-1?parseInt(t[1+u]):0,v=f>-1?parseInt(r[1+f]):0;p!==v&&(n=n.replace(F(),\"?px \"),M*=Math.pow(.75,v-p),n=n.replace(\"?px \",F())),A-=.25*L*(v-p)}if(!0===o.bolds){var g=t.indexOf(c)>-1,m=r.indexOf(c)>-1;!g&&m&&(n=x?n.replace(\"italic \",\"italic bold \"):\"bold \"+n),g&&!m&&(n=n.replace(\"bold \",\"\"))}if(!0===o.italics){var x=t.indexOf(h)>-1,b=r.indexOf(h)>-1;!x&&b&&(n=\"italic \"+n),x&&!b&&(n=n.replace(\"italic \",\"\"))}e.font=n}for(w=0;w<E;++w){var N=S[w]+\"\\n\";for(k=0,A=w*L,M=n,z=\"\",T=0;T<N.length;++T){var j=T+D<b.length?b[T+D]:b[b.length-1];s===j?z+=N[T]:(R(),z=N[T],void 0!==j&&(B(s,j),s=j))}R(),D+=N.length;var U=0|Math.round(k+2*C);O<U&&(O=U)}var V=O,H=P+L*E;return i(e.getImageData(0,0,V,H).data,[H,V,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,a,o,s),n,a)},t.exports.processPixels=w;var n=r(4162),i=r(5050),a=r(8243),o=r(197),s=r(7761),l=r(8040),u=\"b\",c=\"b|\",f=\"i\",h=\"i|\",p=\"sup\",d=\"+\",v=\"+1\",g=\"sub\",y=\"-\",m=\"-1\";function x(t,e,r,n){for(var i=\"<\"+t+\">\",a=\"</\"+t+\">\",o=i.length,s=a.length,l=e[0]===d||e[0]===y,u=0,c=-s;u>-1&&-1!==(u=r.indexOf(i,u))&&-1!==(c=r.indexOf(a,u+o))&&!(c<=u);){for(var f=u;f<c+s;++f)if(f<u+o||f>=c)n[f]=null,r=r.substr(0,f)+\" \"+r.substr(f+1);else if(null!==n[f]){var h=n[f].indexOf(e[0]);-1===h?n[f]+=e:l&&(n[f]=n[f].substr(0,h+1)+(1+parseInt(n[f][h+1]))+n[f].substr(h+2))}var p=u+o,v=r.substr(p,c-p).indexOf(i);u=-1!==v?v:c+s}return n}function b(t,e){var r=n(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var i=b(t,n),a=function(t,e,r){for(var n=e.textAlign||\"start\",i=e.textBaseline||\"alphabetic\",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var u=t[l],c=0;c<2;++c)a[c]=0|Math.min(a[c],u[c]),o[c]=0|Math.max(o[c],u[c]);var f=0;switch(n){case\"center\":f=-.5*(a[0]+o[0]);break;case\"right\":case\"end\":f=-o[0];break;case\"left\":case\"start\":f=-a[0];break;default:throw new Error(\"vectorize-text: Unrecognized textAlign: '\"+n+\"'\")}var h=0;switch(i){case\"hanging\":case\"top\":h=-a[1];break;case\"middle\":h=-.5*(a[1]+o[1]);break;case\"alphabetic\":case\"ideographic\":h=-3*r;break;case\"bottom\":h=-o[1];break;default:throw new Error(\"vectorize-text: Unrecoginized textBaseline: '\"+i+\"'\")}var p=1/r;return\"lineHeight\"in e?p*=+e.lineHeight:\"width\"in e?p=e.width/(o[0]-a[0]):\"height\"in e&&(p=e.height/(o[1]-a[1])),t.map((function(t){return[p*(t[0]+f),p*(t[1]+h)]}))}(i.positions,e,r),u=i.edges,c=\"ccw\"===e.orientation;if(o(a,u),e.polygons||e.polygon||e.polyline){for(var f=l(u,a),h=new Array(f.length),p=0;p<f.length;++p){for(var d=f[p],v=new Array(d.length),g=0;g<d.length;++g){for(var y=d[g],m=new Array(y.length),x=0;x<y.length;++x)m[x]=a[y[x]].slice();c&&m.reverse(),v[g]=m}h[p]=v}return h}return e.triangles||e.triangulate||e.triangle?{cells:s(a,u,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:u,positions:a}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},5346:function(t){!function(){\"use strict\";if(\"undefined\"==typeof ses||!ses.ok||ses.ok()){\"undefined\"!=typeof ses&&(ses.weakMapPermitHostObjects=g);var e=!1;if(\"function\"==typeof WeakMap){var r=WeakMap;if(\"undefined\"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,i=Object.freeze({});if(n.set(i,1),1===n.get(i))return void(t.exports=WeakMap);e=!0}}Object.prototype.hasOwnProperty;var a=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l=\"weakmap:\",u=l+\"ident:\"+Math.random()+\"___\";if(\"undefined\"!=typeof crypto&&\"function\"==typeof crypto.getRandomValues&&\"function\"==typeof ArrayBuffer&&\"function\"==typeof Uint8Array){var c=new ArrayBuffer(25),f=new Uint8Array(c);crypto.getRandomValues(f),u=l+\"rand:\"+Array.prototype.map.call(f,(function(t){return(t%36).toString(36)})).join(\"\")+\"___\"}if(o(Object,\"getOwnPropertyNames\",{value:function(t){return a(t).filter(y)}}),\"getPropertyNames\"in Object){var h=Object.getPropertyNames;o(Object,\"getPropertyNames\",{value:function(t){return h(t).filter(y)}})}!function(){var t=Object.freeze;o(Object,\"freeze\",{value:function(e){return m(e),t(e)}});var e=Object.seal;o(Object,\"seal\",{value:function(t){return m(t),e(t)}});var r=Object.preventExtensions;o(Object,\"preventExtensions\",{value:function(t){return m(t),r(t)}})}();var p=!1,d=0,v=function(){this instanceof v||b();var t=[],e=[],r=d++;return Object.create(v.prototype,{get___:{value:x((function(n,i){var a,o=m(n);return o?r in o?o[r]:i:(a=t.indexOf(n))>=0?e[a]:i}))},has___:{value:x((function(e){var n=m(e);return n?r in n:t.indexOf(e)>=0}))},set___:{value:x((function(n,i){var a,o=m(n);return o?o[r]=i:(a=t.indexOf(n))>=0?e[a]=i:(a=t.length,e[a]=i,t[a]=n),this}))},delete___:{value:x((function(n){var i,a,o=m(n);return o?r in o&&delete o[r]:!((i=t.indexOf(n))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))}))}})};v.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),\"function\"==typeof r?function(){function n(){this instanceof v||b();var t,n=new r,i=void 0,a=!1;return t=e?function(t,e){return n.set(t,e),n.has(t)||(i||(i=new v),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i=new v),i.set___(t,e)}else n.set(t,e);return this},Object.create(v.prototype,{get___:{value:x((function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)}))},has___:{value:x((function(t){return n.has(t)||!!i&&i.has___(t)}))},set___:{value:x(t)},delete___:{value:x((function(t){var e=!!n.delete(t);return i&&i.delete___(t)||e}))},permitHostObjects___:{value:x((function(t){if(t!==g)throw new Error(\"bogus call to permitHostObjects___\");a=!0}))}})}e&&\"undefined\"!=typeof Proxy&&(Proxy=void 0),n.prototype=v.prototype,t.exports=n,Object.defineProperty(WeakMap.prototype,\"constructor\",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():(\"undefined\"!=typeof Proxy&&(Proxy=void 0),t.exports=v)}function g(t){t.permitHostObjects___&&t.permitHostObjects___(g)}function y(t){return!(t.substr(0,8)==l&&\"___\"===t.substr(t.length-3))}function m(t){if(t!==Object(t))throw new TypeError(\"Not an object: \"+t);var e=t[u];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,u,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||\"undefined\"==typeof console||(p=!0,console.warn(\"WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future.\"))}}()},9222:function(t,e,r){var n=r(7178);t.exports=function(){var t={};return function(e){if((\"object\"!=typeof e||null===e)&&\"function\"!=typeof e)throw new Error(\"Weakmap-shim: Key must be object\");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},7178:function(t){t.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,\"valueOf\",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},4037:function(t,e,r){var n=r(9222);t.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty(\"value\")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return\"value\"in t(e)},delete:function(e){return delete t(e).value}}}},6183:function(t){\"use strict\";t.exports=function(t){var e={};return function(r,n,i){var a=r.dtype,o=r.order,s=[a,o.join()].join(),l=e[s];return l||(e[s]=l=t([a,o])),l(r.shape.slice(0),r.data,r.stride,0|r.offset,n,i)}}(function(){return function(t,e,r,n,i,a){var o=t[0],s=r[0],l=[0],u=s;n|=0;var c=0,f=s;for(c=0;c<o;++c){var h=e[n]-a,p=e[n+u]-a;h>=0!=p>=0&&i.push(l[0]+.5+.5*(h+p)/(h-p)),n+=f,++l[0]}}}.bind(void 0,{funcName:\"zeroCrossings\"}))},9584:function(t,e,r){\"use strict\";t.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=r(6183)},6601:function(){}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}return r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r(7386)}()},t.exports=n()},12856:function(t,e,r){\"use strict\";function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==s(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,\"string\");if(\"object\"!==s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key),\"symbol\"===s(i)?i:String(i)),n)}var i}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function a(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function o(t){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},o(t)}function s(t){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},s(t)}var l=r(95341),u=r(95280),c=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;var f=2147483647;function h(t){if(t>f)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,r){if(\"number\"==typeof t){if(\"string\"==typeof e)throw new TypeError('The \"string\" argument must be of type string. Received type number');return g(t)}return d(t,e,r)}function d(t,e,r){if(\"string\"==typeof t)return function(t,e){if(\"string\"==typeof e&&\"\"!==e||(e=\"utf8\"),!p.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);var r=0|b(t,e),n=h(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(tt(t,Uint8Array)){var e=new Uint8Array(t);return m(e.buffer,e.byteOffset,e.byteLength)}return y(t)}(t);if(null==t)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+s(t));if(tt(t,ArrayBuffer)||t&&tt(t.buffer,ArrayBuffer))return m(t,e,r);if(\"undefined\"!=typeof SharedArrayBuffer&&(tt(t,SharedArrayBuffer)||t&&tt(t.buffer,SharedArrayBuffer)))return m(t,e,r);if(\"number\"==typeof t)throw new TypeError('The \"value\" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return p.from(n,e,r);var i=function(t){if(p.isBuffer(t)){var e=0|x(t.length),r=h(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?\"number\"!=typeof t.length||et(t.length)?h(0):y(t):\"Buffer\"===t.type&&Array.isArray(t.data)?y(t.data):void 0}(t);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+s(t))}function v(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function g(t){return v(t),h(t<0?0:0|x(t))}function y(t){for(var e=t.length<0?0:0|x(t.length),r=h(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function m(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('\"offset\" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,p.prototype),n}function x(t){if(t>=f)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+f.toString(16)+\" bytes\");return 0|t}function b(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||tt(t,ArrayBuffer))return t.byteLength;if(\"string\"!=typeof t)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+s(t));var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return K(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return $(t).length;default:if(i)return n?-1:K(t).length;e=(\"\"+e).toLowerCase(),i=!0}}function _(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return z(this,e,r);case\"utf8\":case\"utf-8\":return P(this,e,r);case\"ascii\":return I(this,e,r);case\"latin1\":case\"binary\":return D(this,e,r);case\"base64\":return C(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return R(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function w(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function T(t,e,r,n,i){if(0===t.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),et(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof e&&(e=p.from(e,n)),p.isBuffer(e))return 0===e.length?-1:k(t,e,r,n,i);if(\"number\"==typeof e)return e&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):k(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function k(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;a<s;a++)if(u(t,a)===u(e,-1===c?0:a-c)){if(-1===c&&(c=a),a-c+1===l)return c*o}else-1!==c&&(a-=a-c),c=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;h<l;h++)if(u(t,a+h)!==u(e,h)){f=!1;break}if(f)return a}return-1}function A(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a,o=e.length;for(n>o/2&&(n=o/2),a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(et(s))return a;t[r+a]=s}return a}function M(t,e,r,n){return Q(K(e,t.length-r),t,r,n)}function S(t,e,r,n){return Q(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function E(t,e,r,n){return Q($(e),t,r,n)}function L(t,e,r,n){return Q(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(r=t.charCodeAt(o))>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?l.fromByteArray(t):l.fromByteArray(t.slice(e,r))}function P(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l=void 0,u=void 0,c=void 0,f=void 0;switch(s){case 1:a<128&&(o=a);break;case 2:128==(192&(l=t[i+1]))&&(f=(31&a)<<6|63&l)>127&&(o=f);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(f=(15&a)<<12|(63&l)<<6|63&u)>2047&&(f<55296||f>57343)&&(o=f);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(f=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(o=f)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r=\"\",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=f,p.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),p.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(p.prototype,\"parent\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.buffer}}),Object.defineProperty(p.prototype,\"offset\",{enumerable:!0,get:function(){if(p.isBuffer(this))return this.byteOffset}}),p.poolSize=8192,p.from=function(t,e,r){return d(t,e,r)},Object.setPrototypeOf(p.prototype,Uint8Array.prototype),Object.setPrototypeOf(p,Uint8Array),p.alloc=function(t,e,r){return function(t,e,r){return v(t),t<=0?h(t):void 0!==e?\"string\"==typeof r?h(t).fill(e,r):h(t).fill(e):h(t)}(t,e,r)},p.allocUnsafe=function(t){return g(t)},p.allocUnsafeSlow=function(t){return g(t)},p.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==p.prototype},p.compare=function(t,e){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),tt(e,Uint8Array)&&(e=p.from(e,e.offset,e.byteLength)),!p.isBuffer(t)||!p.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},p.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},p.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return p.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=p.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(tt(a,Uint8Array))i+a.length>n.length?(p.isBuffer(a)||(a=p.from(a)),a.copy(n,i)):Uint8Array.prototype.set.call(n,a,i);else{if(!p.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(n,i)}i+=a.length}return n},p.byteLength=b,p.prototype._isBuffer=!0,p.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var e=0;e<t;e+=2)w(this,e,e+1);return this},p.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},p.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},p.prototype.toString=function(){var t=this.length;return 0===t?\"\":0===arguments.length?P(this,0,t):_.apply(this,arguments)},p.prototype.toLocaleString=p.prototype.toString,p.prototype.equals=function(t){if(!p.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===p.compare(this,t)},p.prototype.inspect=function(){var t=\"\",r=e.INSPECT_MAX_BYTES;return t=this.toString(\"hex\",0,r).replace(/(.{2})/g,\"$1 \").trim(),this.length>r&&(t+=\" ... \"),\"<Buffer \"+t+\">\"},c&&(p.prototype[c]=p.prototype.inspect),p.prototype.compare=function(t,e,r,n,i){if(tt(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+s(t));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f<l;++f)if(u[f]!==c[f]){a=u[f],o=c[f];break}return a<o?-1:o<a?1:0},p.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},p.prototype.indexOf=function(t,e,r){return T(this,t,e,r,!0)},p.prototype.lastIndexOf=function(t,e,r){return T(this,t,e,r,!1)},p.prototype.write=function(t,e,r,n){if(void 0===e)n=\"utf8\",r=this.length,e=0;else if(void 0===r&&\"string\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var a=!1;;)switch(n){case\"hex\":return A(this,t,e,r);case\"utf8\":case\"utf-8\":return M(this,t,e,r);case\"ascii\":case\"latin1\":case\"binary\":return S(this,t,e,r);case\"base64\":return E(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return L(this,t,e,r);default:if(a)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),a=!0}},p.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function I(t,e,r){var n=\"\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,e,r){var n=\"\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function z(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i=\"\",a=e;a<r;++a)i+=rt[t[a]];return i}function R(t,e,r){for(var n=t.slice(e,r),i=\"\",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function F(t,e,r){if(t%1!=0||t<0)throw new RangeError(\"offset is not uint\");if(t+e>r)throw new RangeError(\"Trying to access beyond buffer length\")}function B(t,e,r,n,i,a){if(!p.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('\"value\" argument is out of bounds');if(r+n>t.length)throw new RangeError(\"Index out of range\")}function N(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a,a>>=8,t[r++]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,r}function j(t,e,r,n,i){Y(e,n,i,t,r,7);var a=Number(e&BigInt(4294967295));t[r+7]=a,a>>=8,t[r+6]=a,a>>=8,t[r+5]=a,a>>=8,t[r+4]=a;var o=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=o,o>>=8,t[r+2]=o,o>>=8,t[r+1]=o,o>>=8,t[r]=o,r+8}function U(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function V(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,4),u.write(t,e,r,n,23,4),r+4}function H(t,e,r,n,i){return e=+e,r>>>=0,i||U(t,0,r,8),u.write(t,e,r,n,52,8),r+8}p.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return Object.setPrototypeOf(n,p.prototype),n},p.prototype.readUintLE=p.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},p.prototype.readUintBE=p.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||F(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),i=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+r*Math.pow(2,24);return BigInt(n)+(BigInt(i)<<BigInt(32))})),p.prototype.readBigUInt64BE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],i=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),p.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},p.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||F(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},p.prototype.readInt8=function(t,e){return t>>>=0,e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(t,e){t>>>=0,e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24))})),p.prototype.readBigInt64BE=nt((function(t){W(t>>>=0,\"offset\");var e=this[t],r=this[t+7];void 0!==e&&void 0!==r||X(t,this.length-8);var n=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+r)})),p.prototype.readFloatLE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||F(t,4,this.length),u.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||F(t,8,this.length),u.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},p.prototype.writeUintBE=p.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),p.prototype.writeBigUInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),p.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},p.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=nt((function(t){return N(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),p.prototype.writeBigInt64BE=nt((function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),p.prototype.writeFloatLE=function(t,e,r){return V(this,t,e,!0,r)},p.prototype.writeFloatBE=function(t,e,r){return V(this,t,e,!1,r)},p.prototype.writeDoubleLE=function(t,e,r){return H(this,t,e,!0,r)},p.prototype.writeDoubleBE=function(t,e,r){return H(this,t,e,!1,r)},p.prototype.copy=function(t,e,r,n){if(!p.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i=n-r;return this===t&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},p.prototype.fill=function(t,e,r,n){if(\"string\"==typeof t){if(\"string\"==typeof e?(n=e,e=0,r=this.length):\"string\"==typeof r&&(n=r,r=this.length),void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!p.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1===t.length){var i=t.charCodeAt(0);(\"utf8\"===n&&i<128||\"latin1\"===n)&&(t=i)}}else\"number\"==typeof t?t&=255:\"boolean\"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError(\"Out of range index\");if(r<=e)return this;var a;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\"number\"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var o=p.isBuffer(t)?t:p.from(t,n),s=o.length;if(0===s)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(a=0;a<r-e;++a)this[a+e]=o[a%s]}return this};var q={};function G(t,e,r){q[t]=function(r){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&i(t,e)}(p,r);var l,u,c,f,h=(c=p,f=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=o(c);if(f){var r=o(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===s(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return a(t)}(this,t)});function p(){var r;return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,p),r=h.call(this),Object.defineProperty(a(r),\"message\",{value:e.apply(a(r),arguments),writable:!0,configurable:!0}),r.name=\"\".concat(r.name,\" [\").concat(t,\"]\"),r.stack,delete r.name,r}return l=p,(u=[{key:\"code\",get:function(){return t},set:function(t){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:t,writable:!0})}},{key:\"toString\",value:function(){return\"\".concat(this.name,\" [\").concat(t,\"]: \").concat(this.message)}}])&&n(l.prototype,u),Object.defineProperty(l,\"prototype\",{writable:!1}),p}(r)}function Z(t){for(var e=\"\",r=t.length,n=\"-\"===t[0]?1:0;r>=n+4;r-=3)e=\"_\".concat(t.slice(r-3,r)).concat(e);return\"\".concat(t.slice(0,r)).concat(e)}function Y(t,e,r,n,i,a){if(t>r||t<e){var o,s=\"bigint\"==typeof e?\"n\":\"\";throw o=a>3?0===e||e===BigInt(0)?\">= 0\".concat(s,\" and < 2\").concat(s,\" ** \").concat(8*(a+1)).concat(s):\">= -(2\".concat(s,\" ** \").concat(8*(a+1)-1).concat(s,\") and < 2 ** \")+\"\".concat(8*(a+1)-1).concat(s):\">= \".concat(e).concat(s,\" and <= \").concat(r).concat(s),new q.ERR_OUT_OF_RANGE(\"value\",o,t)}!function(t,e,r){W(e,\"offset\"),void 0!==t[e]&&void 0!==t[e+r]||X(e,t.length-(r+1))}(n,i,a)}function W(t,e){if(\"number\"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,\"number\",t)}function X(t,e,r){if(Math.floor(t)!==t)throw W(t,r),new q.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||\"offset\",\">= \".concat(r?1:0,\" and <= \").concat(e),t)}G(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(t){return t?\"\".concat(t,\" is outside of buffer bounds\"):\"Attempt to access memory outside buffer bounds\"}),RangeError),G(\"ERR_INVALID_ARG_TYPE\",(function(t,e){return'The \"'.concat(t,'\" argument must be of type number. Received type ').concat(s(e))}),TypeError),G(\"ERR_OUT_OF_RANGE\",(function(t,e,r){var n='The value of \"'.concat(t,'\" is out of range.'),i=r;return Number.isInteger(r)&&Math.abs(r)>Math.pow(2,32)?i=Z(String(r)):\"bigint\"==typeof r&&(i=String(r),(r>Math.pow(BigInt(2),BigInt(32))||r<-Math.pow(BigInt(2),BigInt(32)))&&(i=Z(i)),i+=\"n\"),n+\" It must be \".concat(e,\". Received \").concat(i)}),RangeError);var J=/[^+/0-9A-Za-z-_]/g;function K(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function $(t){return l.toByteArray(function(t){if((t=(t=t.split(\"=\")[0]).trim().replace(J,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function Q(t,e,r,n){var i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function tt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function et(t){return t!=t}var rt=function(){for(var t=\"0123456789abcdef\",e=new Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)e[n+i]=t[r]+t[i];return e}();function nt(t){return\"undefined\"==typeof BigInt?it:t}function it(){throw new Error(\"BigInt not supported\")}},35791:function(t){\"use strict\";t.exports=i,t.exports.isMobile=i,t.exports.default=i;var e=/(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,r=/CrOS/,n=/android|ipad|playbook|silk/i;function i(t){t||(t={});var i=t.ua;if(i||\"undefined\"==typeof navigator||(i=navigator.userAgent),i&&i.headers&&\"string\"==typeof i.headers[\"user-agent\"]&&(i=i.headers[\"user-agent\"]),\"string\"!=typeof i)return!1;var a=e.test(i)&&!r.test(i)||!!t.tablet&&n.test(i);return!a&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==i.indexOf(\"Macintosh\")&&-1!==i.indexOf(\"Safari\")&&(a=!0),a}},86781:function(t,e,r){\"use strict\";r.r(e),r.d(e,{sankeyCenter:function(){return h},sankeyCircular:function(){return C},sankeyJustify:function(){return f},sankeyLeft:function(){return u},sankeyRight:function(){return c}});var n=r(33064),i=r(15140),a=r(45879),o=r(2502),s=r.n(o);function l(t){return t.target.depth}function u(t){return t.depth}function c(t,e){return e-1-t.height}function f(t,e){return t.sourceLinks.length?t.depth:e-1}function h(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,l)-1:0}function p(t){return function(){return t}}var d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};function v(t,e){return y(t.source,e.source)||t.index-e.index}function g(t,e){return y(t.target,e.target)||t.index-e.index}function y(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:\"top\"===t.circularLinkType||\"bottom\"===e.circularLinkType?-1:1}function m(t){return t.value}function x(t){return(t.y0+t.y1)/2}function b(t){return x(t.source)}function _(t){return x(t.target)}function w(t){return t.index}function T(t){return t.nodes}function k(t){return t.links}function A(t,e){var r=t.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function M(t,e){return e(t)}var S=25,E=10,L=.3;function C(){var t,e,r=0,a=0,o=1,l=1,u=24,c=w,h=f,M=T,C=k,O=32,D=2,z=null;function F(){var f={nodes:M.apply(null,arguments),links:C.apply(null,arguments)};!function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,c);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;\"object\"!==(void 0===n?\"undefined\":d(n))&&(n=t.source=A(e,n)),\"object\"!==(void 0===i?\"undefined\":d(i))&&(i=t.target=A(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(f),function(t,e,r){var n=0;if(null===r){for(var i=[],a=0;a<t.links.length;a++){var o=t.links[a],l=o.source.index,u=o.target.index;i[l]||(i[l]=[]),i[u]||(i[u]=[]),-1===i[l].indexOf(u)&&i[l].push(u)}var c=s()(i);c.sort((function(t,e){return t.length-e.length}));var f={};for(a=0;a<c.length;a++){var h=c[a].slice(-2);f[h[0]]||(f[h[0]]={}),f[h[0]][h[1]]=!0}t.links.forEach((function(t){var e=t.target.index,r=t.source.index;e===r||f[r]&&f[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1}))}else t.links.forEach((function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)}))}(f,0,z),function(t){t.nodes.forEach((function(t){t.partOfCycle=!1,t.value=Math.max((0,n.Sm)(t.sourceLinks,m),(0,n.Sm)(t.targetLinks,m)),t.sourceLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})),t.targetLinks.forEach((function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}))}))}(f),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.depth=n,t.sourceLinks.forEach((function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)}))}));for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach((function(t){t.height=n,t.targetLinks.forEach((function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)}))}));t.nodes.forEach((function(t){t.column=Math.floor(h.call(null,t,n))}))}(f),P(f,c),function(s,c,f){var h=(0,i.b1)().key((function(t){return t.column})).sortKeys(n.j2).entries(s.nodes).map((function(t){return t.values}));(function(i){if(e){var c=1/0;h.forEach((function(t){var r=l*e/(t.length+1);c=r<c?r:c})),t=c}var f=(0,n.VV)(h,(function(e){return(l-a-(e.length-1)*t)/(0,n.Sm)(e,m)}));f*=L,s.links.forEach((function(t){t.width=t.value*f}));var p=function(t){var e=0,r=0,i=0,a=0,o=(0,n.Fp)(t.nodes,(function(t){return t.column}));return t.links.forEach((function(t){t.circular&&(\"top\"==t.circularLinkType?e+=t.width:r+=t.width,0==t.target.column&&(a+=t.width),t.source.column==o&&(i+=t.width))})),{top:e=e>0?e+S+E:e,bottom:r=r>0?r+S+E:r,left:a=a>0?a+S+E:a,right:i=i>0?i+S+E:i}}(s),d=function(t,e){var i=(0,n.Fp)(t.nodes,(function(t){return t.column})),s=o-r,c=l-a,f=s/(s+e.right+e.left),h=c/(c+e.top+e.bottom);return r=r*f+e.left,o=0==e.right?o:o*f,a=a*h+e.top,l*=h,t.nodes.forEach((function(t){t.x0=r+t.column*((o-r-u)/i),t.x1=t.x0+u})),h}(s,p);f*=d,s.links.forEach((function(t){t.width=t.value*f})),h.forEach((function(t){var e=t.length;t.forEach((function(t,r){t.depth==h.length-1&&1==e||0==t.depth&&1==e?(t.y0=l/2-t.value*f,t.y1=t.y0+t.value*f):t.partOfCycle?0==I(t,i)?(t.y0=l/2+r,t.y1=t.y0+t.value*f):\"top\"==t.circularLinkType?(t.y0=a+r,t.y1=t.y0+t.value*f):(t.y0=l-t.value*f-r,t.y1=t.y0+t.value*f):0==p.top||0==p.bottom?(t.y0=(l-a)/e*r,t.y1=t.y0+t.value*f):(t.y0=(l-a)/2-e/2+r,t.y1=t.y0+t.value*f)}))}))})(f),g();for(var p=1,d=c;d>0;--d)v(p*=.99,f),g();function v(t,e){var r=h.length;h.forEach((function(i){var a=i.length,o=i[0].depth;i.forEach((function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&I(i,e)>0);else if(0==o&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else if(o==r-1&&1==a)s=i.y1-i.y0,i.y0=l/2-s/2,i.y1=l/2+s/2;else{var u=(0,n.J6)(i.sourceLinks,_),c=(0,n.J6)(i.targetLinks,b),f=((u&&c?(u+c)/2:u||c)-x(i))*t;i.y0+=f,i.y1+=f}}))}))}function g(){h.forEach((function(e){var r,n,i,o=a,s=e.length;for(e.sort(y),i=0;i<s;++i)(n=o-(r=e[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+t;if((n=o-t-l)>0)for(o=r.y0-=n,r.y1-=n,i=s-2;i>=0;--i)(n=(r=e[i]).y1+t-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(f,O,c),B(f);for(var p=0;p<4;p++)W(f,l,c),X(f,0,c),Z(f,a,l,c),W(f,l,c),X(f,0,c);return function(t,e,r){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach((function(t){\"top\"==t.circularLinkType?o=!0:\"bottom\"==t.circularLinkType&&(s=!0)})),0==o||0==s){var l=(0,n.VV)(i,(function(t){return t.y0})),u=(r-e)/((0,n.Fp)(i,(function(t){return t.y1}))-l);i.forEach((function(t){var e=(t.y1-t.y0)*u;t.y0=(t.y0-l)*u,t.y1=t.y0+e})),a.forEach((function(t){t.y0=(t.y0-l)*u,t.y1=(t.y1-l)*u,t.width=t.width*u}))}}(f,a,l),R(f,D,l,c),f}function B(t){t.nodes.forEach((function(t){t.sourceLinks.sort(g),t.targetLinks.sort(v)})),t.nodes.forEach((function(t){var e=t.y0,r=e,n=t.y1,i=n;t.sourceLinks.forEach((function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)})),t.targetLinks.forEach((function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=r+t.width/2,r+=t.width)}))}))}return F.nodeId=function(t){return arguments.length?(c=\"function\"==typeof t?t:p(t),F):c},F.nodeAlign=function(t){return arguments.length?(h=\"function\"==typeof t?t:p(t),F):h},F.nodeWidth=function(t){return arguments.length?(u=+t,F):u},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(M=\"function\"==typeof t?t:p(t),F):M},F.links=function(t){return arguments.length?(C=\"function\"==typeof t?t:p(t),F):C},F.size=function(t){return arguments.length?(r=a=0,o=+t[0],l=+t[1],F):[o-r,l-a]},F.extent=function(t){return arguments.length?(r=+t[0][0],o=+t[1][0],a=+t[0][1],l=+t[1][1],F):[[r,a],[o,l]]},F.iterations=function(t){return arguments.length?(O=+t,F):O},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(e=+t,F):e},F.sortNodes=function(t){return arguments.length?(z=t,F):z},F.update=function(t){return P(t,c),B(t),t.links.forEach((function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<l?\"top\":\"bottom\",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)})),W(t,l,c,!1),X(t,0,c),R(t,D,l,c),t},F}function P(t,e){var r=0,n=0;t.links.forEach((function(i){i.circular&&(i.source.circularLinkType||i.target.circularLinkType?i.circularLinkType=i.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:i.circularLinkType=r<n?\"top\":\"bottom\",\"top\"==i.circularLinkType?r+=1:n+=1,t.nodes.forEach((function(t){M(t,e)!=M(i.source,e)&&M(t,e)!=M(i.target,e)||(t.circularLinkType=i.circularLinkType)})))})),t.links.forEach((function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),$(t,e)&&(t.circularLinkType=t.source.circularLinkType))}))}function O(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function I(t,e){var r=0;t.sourceLinks.forEach((function(t){r=t.circular&&!$(t,e)?r+1:r}));var n=0;return t.targetLinks.forEach((function(t){n=t.circular&&!$(t,e)?n+1:n})),r+n}function D(t){var e=t.source.sourceLinks,r=0;e.forEach((function(t){r=t.circular?r+1:r}));var n=t.target.targetLinks,i=0;return n.forEach((function(t){i=t.circular?i+1:i})),!(r>1||i>1)}function z(t,e,r){return t.sort(F),t.forEach((function(n,i){var a,o,s=0;if($(n,r)&&D(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<i;l++)if(a=t[i],o=t[l],!(a.source.column<o.target.column||a.target.column>o.source.column)){var u=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=u>s?u:s}n.circularPathData.verticalBuffer=s+n.width/2}})),t}function R(t,e,r,i){var o=(0,n.VV)(t.links,(function(t){return t.source.y0}));t.links.forEach((function(t){t.circular&&(t.circularPathData={})})),z(t.links.filter((function(t){return\"top\"==t.circularLinkType})),e,i),z(t.links.filter((function(t){return\"bottom\"==t.circularLinkType})),e,i),t.links.forEach((function(n){if(n.circular){if(n.circularPathData.arcRadius=n.width+E,n.circularPathData.leftNodeBuffer=5,n.circularPathData.rightNodeBuffer=5,n.circularPathData.sourceWidth=n.source.x1-n.source.x0,n.circularPathData.sourceX=n.source.x0+n.circularPathData.sourceWidth,n.circularPathData.targetX=n.target.x0,n.circularPathData.sourceY=n.y0,n.circularPathData.targetY=n.y1,$(n,i)&&D(n))n.circularPathData.leftSmallArcRadius=E+n.width/2,n.circularPathData.leftLargeArcRadius=E+n.width/2,n.circularPathData.rightSmallArcRadius=E+n.width/2,n.circularPathData.rightLargeArcRadius=E+n.width/2,\"bottom\"==n.circularLinkType?(n.circularPathData.verticalFullExtent=n.source.y1+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=n.source.y0-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius);else{var s=n.source.column,l=n.circularLinkType,u=t.links.filter((function(t){return t.source.column==s&&t.circularLinkType==l}));\"bottom\"==n.circularLinkType?u.sort(N):u.sort(B);var c=0;u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.leftSmallArcRadius=E+n.width/2+c,n.circularPathData.leftLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),s=n.target.column,u=t.links.filter((function(t){return t.target.column==s&&t.circularLinkType==l})),\"bottom\"==n.circularLinkType?u.sort(U):u.sort(j),c=0,u.forEach((function(t,r){t.circularLinkID==n.circularLinkID&&(n.circularPathData.rightSmallArcRadius=E+n.width/2+c,n.circularPathData.rightLargeArcRadius=E+n.width/2+r*e+c),c+=t.width})),\"bottom\"==n.circularLinkType?(n.circularPathData.verticalFullExtent=Math.max(r,n.source.y1,n.target.y1)+S+n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent-n.circularPathData.rightLargeArcRadius):(n.circularPathData.verticalFullExtent=o-S-n.circularPathData.verticalBuffer,n.circularPathData.verticalLeftInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.leftLargeArcRadius,n.circularPathData.verticalRightInnerExtent=n.circularPathData.verticalFullExtent+n.circularPathData.rightLargeArcRadius)}n.circularPathData.leftInnerExtent=n.circularPathData.sourceX+n.circularPathData.leftNodeBuffer,n.circularPathData.rightInnerExtent=n.circularPathData.targetX-n.circularPathData.rightNodeBuffer,n.circularPathData.leftFullExtent=n.circularPathData.sourceX+n.circularPathData.leftLargeArcRadius+n.circularPathData.leftNodeBuffer,n.circularPathData.rightFullExtent=n.circularPathData.targetX-n.circularPathData.rightLargeArcRadius-n.circularPathData.rightNodeBuffer}if(n.circular)n.path=function(t){return\"top\"==t.circularLinkType?\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 0 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 0 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 0 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 0 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY:\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 1 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 1 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 1 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 1 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY}(n);else{var f=(0,a.h5)().source((function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]})).target((function(t){return[t.target.x0,t.y1]}));n.path=f(n)}}))}function F(t,e){return V(t)==V(e)?\"bottom\"==t.circularLinkType?N(t,e):B(t,e):V(e)-V(t)}function B(t,e){return t.y0-e.y0}function N(t,e){return e.y0-t.y0}function j(t,e){return t.y1-e.y1}function U(t,e){return e.y1-t.y1}function V(t){return t.target.column-t.source.column}function H(t){return t.target.x0-t.source.x1}function q(t,e){var r=O(t),n=H(e)/Math.tan(r);return\"up\"==K(t)?t.y1+n:t.y1-n}function G(t,e){var r=O(t),n=H(e)/Math.tan(r);return\"up\"==K(t)?t.y1-n:t.y1+n}function Z(t,e,r,n){t.links.forEach((function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach((function(o){if(o.column==a){var u,c=s/(l+1),f=Math.pow(1-c,3),h=3*c*Math.pow(1-c,2),p=3*Math.pow(c,2)*(1-c),d=Math.pow(c,3),v=f*i.y0+h*i.y0+p*i.y1+d*i.y1,g=v-i.width/2,y=v+i.width/2;g>o.y0&&g<o.y1?(u=o.y1-g+10,u=\"bottom\"==o.circularLinkType?u:-u,o=Y(o,u,e,r),t.nodes.forEach((function(t){var i,a;M(t,n)!=M(o,n)&&t.column==o.column&&(a=t,(i=o).y0>a.y0&&i.y0<a.y1||i.y1>a.y0&&i.y1<a.y1||i.y0<a.y0&&i.y1>a.y1)&&Y(t,u,e,r)}))):(y>o.y0&&y<o.y1||g<o.y0&&y>o.y1)&&(u=y-o.y0+10,o=Y(o,u,e,r),t.nodes.forEach((function(t){M(t,n)!=M(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&Y(t,u,e,r)})))}}))}}))}function Y(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach((function(t){t.y1=t.y1+e})),t.sourceLinks.forEach((function(t){t.y0=t.y0+e}))),t}function W(t,e,r,n){t.nodes.forEach((function(i){n&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter((function(t){return M(t.source,r)==M(i,r)})),o=a.length;o>1&&a.sort((function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!J(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=G(e,t);return t.y1-r}if(e.target.column>t.target.column)return G(t,e)-e.y1}return t.circular&&!e.circular?\"top\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\"top\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\"top\"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&\"bottom\"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:\"top\"==t.circularLinkType?-1:1:void 0}));var s=i.y0;a.forEach((function(t){t.y0=s+t.width/2,s+=t.width})),a.forEach((function(t,e){if(\"bottom\"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=a[r].width;t.y0=i.y1-n-t.width/2}}))}))}function X(t,e,r){t.nodes.forEach((function(e){var n=t.links.filter((function(t){return M(t.target,r)==M(e,r)})),i=n.length;i>1&&n.sort((function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!J(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=q(e,t);return t.y0-r}if(t.source.column<e.source.column)return q(t,e)-e.y0}return t.circular&&!e.circular?\"top\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\"top\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\"top\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&\"bottom\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:\"top\"==t.circularLinkType?-1:1:void 0}));var a=e.y0;n.forEach((function(t){t.y1=a+t.width/2,a+=t.width})),n.forEach((function(t,r){if(\"bottom\"==t.circularLinkType){for(var a=r+1,o=0;a<i;a++)o+=n[a].width;t.y1=e.y1-o-t.width/2}}))}))}function J(t,e){return K(t)==K(e)}function K(t){return t.y0-t.y1>0?\"up\":\"down\"}function $(t,e){return M(t.source,e)==M(t.target,e)}},30838:function(t,e,r){\"use strict\";r.r(e),r.d(e,{sankey:function(){return w},sankeyCenter:function(){return u},sankeyJustify:function(){return l},sankeyLeft:function(){return o},sankeyLinkHorizontal:function(){return M},sankeyRight:function(){return s}});var n=r(33064),i=r(15140);function a(t){return t.target.depth}function o(t){return t.depth}function s(t,e){return e-1-t.height}function l(t,e){return t.sourceLinks.length?t.depth:e-1}function u(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?(0,n.VV)(t.sourceLinks,a)-1:0}function c(t){return function(){return t}}function f(t,e){return p(t.source,e.source)||t.index-e.index}function h(t,e){return p(t.target,e.target)||t.index-e.index}function p(t,e){return t.y0-e.y0}function d(t){return t.value}function v(t){return(t.y0+t.y1)/2}function g(t){return v(t.source)*t.value}function y(t){return v(t.target)*t.value}function m(t){return t.index}function x(t){return t.nodes}function b(t){return t.links}function _(t,e){var r=t.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function w(){var t=0,e=0,r=1,a=1,o=24,s=8,u=m,w=l,T=x,k=b,A=32;function M(){var l={nodes:T.apply(null,arguments),links:k.apply(null,arguments)};return function(t){t.nodes.forEach((function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]}));var e=(0,i.UI)(t.nodes,u);t.links.forEach((function(t,r){t.index=r;var n=t.source,i=t.target;\"object\"!=typeof n&&(n=t.source=_(e,n)),\"object\"!=typeof i&&(i=t.target=_(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}(l),function(t){t.nodes.forEach((function(t){t.value=Math.max((0,n.Sm)(t.sourceLinks,d),(0,n.Sm)(t.targetLinks,d))}))}(l),function(e){var n,i,a;for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.depth=a,t.sourceLinks.forEach((function(t){i.indexOf(t.target)<0&&i.push(t.target)}))}));for(n=e.nodes,i=[],a=0;n.length;++a,n=i,i=[])n.forEach((function(t){t.height=a,t.targetLinks.forEach((function(t){i.indexOf(t.source)<0&&i.push(t.source)}))}));var s=(r-t-o)/(a-1);e.nodes.forEach((function(e){e.x1=(e.x0=t+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*s)+o}))}(l),function(t){var r=(0,i.b1)().key((function(t){return t.x0})).sortKeys(n.j2).entries(t.nodes).map((function(t){return t.values}));(function(){var i=(0,n.Fp)(r,(function(t){return t.length})),o=.6666666666666666*(a-e)/(i-1);s>o&&(s=o);var l=(0,n.VV)(r,(function(t){return(a-e-(t.length-1)*s)/(0,n.Sm)(t,d)}));r.forEach((function(t){t.forEach((function(t,e){t.y1=(t.y0=e)+t.value*l}))})),t.links.forEach((function(t){t.width=t.value*l}))})(),f();for(var o=1,l=A;l>0;--l)c(o*=.99),f(),u(o),f();function u(t){r.forEach((function(e){e.forEach((function(e){if(e.targetLinks.length){var r=((0,n.Sm)(e.targetLinks,g)/(0,n.Sm)(e.targetLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function c(t){r.slice().reverse().forEach((function(e){e.forEach((function(e){if(e.sourceLinks.length){var r=((0,n.Sm)(e.sourceLinks,y)/(0,n.Sm)(e.sourceLinks,d)-v(e))*t;e.y0+=r,e.y1+=r}}))}))}function f(){r.forEach((function(t){var r,n,i,o=e,l=t.length;for(t.sort(p),i=0;i<l;++i)(n=o-(r=t[i]).y0)>0&&(r.y0+=n,r.y1+=n),o=r.y1+s;if((n=o-s-a)>0)for(o=r.y0-=n,r.y1-=n,i=l-2;i>=0;--i)(n=(r=t[i]).y1+s-o)>0&&(r.y0-=n,r.y1-=n),o=r.y0}))}}(l),S(l),l}function S(t){t.nodes.forEach((function(t){t.sourceLinks.sort(h),t.targetLinks.sort(f)})),t.nodes.forEach((function(t){var e=t.y0,r=e;t.sourceLinks.forEach((function(t){t.y0=e+t.width/2,e+=t.width})),t.targetLinks.forEach((function(t){t.y1=r+t.width/2,r+=t.width}))}))}return M.update=function(t){return S(t),t},M.nodeId=function(t){return arguments.length?(u=\"function\"==typeof t?t:c(t),M):u},M.nodeAlign=function(t){return arguments.length?(w=\"function\"==typeof t?t:c(t),M):w},M.nodeWidth=function(t){return arguments.length?(o=+t,M):o},M.nodePadding=function(t){return arguments.length?(s=+t,M):s},M.nodes=function(t){return arguments.length?(T=\"function\"==typeof t?t:c(t),M):T},M.links=function(t){return arguments.length?(k=\"function\"==typeof t?t:c(t),M):k},M.size=function(n){return arguments.length?(t=e=0,r=+n[0],a=+n[1],M):[r-t,a-e]},M.extent=function(n){return arguments.length?(t=+n[0][0],r=+n[1][0],e=+n[0][1],a=+n[1][1],M):[[t,e],[r,a]]},M.iterations=function(t){return arguments.length?(A=+t,M):A},M}var T=r(45879);function k(t){return[t.source.x1,t.y0]}function A(t){return[t.target.x0,t.y1]}function M(){return(0,T.h5)().source(k).target(A)}},39898:function(t,e,r){var n,i;(function(){var a={version:\"3.8.0\"},o=[].slice,s=function(t){return o.call(t)},l=self.document;function u(t){return t&&(t.ownerDocument||t.document||t).documentElement}function c(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(l)try{s(l.documentElement.childNodes)[0].nodeType}catch(t){s=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),l)try{l.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\")}catch(t){var f=this.Element.prototype,h=f.setAttribute,p=f.setAttributeNS,d=this.CSSStyleDeclaration.prototype,v=d.setProperty;f.setAttribute=function(t,e){h.call(this,t,e+\"\")},f.setAttributeNS=function(t,e,r){p.call(this,t,e,r+\"\")},d.setProperty=function(t,e,r){v.call(this,t,e+\"\",r)}}function g(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function y(t){return null===t?NaN:+t}function m(t){return!isNaN(t)}function x(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}a.ascending=g,a.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},a.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&r>n&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&r>n&&(r=n)}return r},a.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&n>r&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&n>r&&(r=n)}return r},a.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(n=t[a])&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=t[a])&&(r>n&&(r=n),i<n&&(i=n))}else{for(;++a<o;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=e.call(t,t[a],a))&&(r>n&&(r=n),i<n&&(i=n))}return[r,i]},a.sum=function(t,e){var r,n=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)m(r=+t[a])&&(n+=r);else for(;++a<i;)m(r=+e.call(t,t[a],a))&&(n+=r);return n},a.mean=function(t,e){var r,n=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)m(r=y(t[a]))?n+=r:--o;else for(;++a<i;)m(r=y(e.call(t,t[a],a)))?n+=r:--o;if(o)return n/o},a.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i},a.median=function(t,e){var r,n=[],i=t.length,o=-1;if(1===arguments.length)for(;++o<i;)m(r=y(t[o]))&&n.push(r);else for(;++o<i;)m(r=y(e.call(t,t[o],o)))&&n.push(r);if(n.length)return a.quantile(n.sort(g),.5)},a.variance=function(t,e){var r,n,i=t.length,a=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<i;)m(r=y(t[s]))&&(o+=(n=r-a)*(r-(a+=n/++l)));else for(;++s<i;)m(r=y(e.call(t,t[s],s)))&&(o+=(n=r-a)*(r-(a+=n/++l)));if(l>1)return o/(l-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var b=x(g);function _(t){return t.length}a.bisectLeft=b.left,a.bisect=a.bisectRight=b.right,a.bisector=function(t){return x(1===t.length?function(e,r){return g(t(e),r)}:t)},a.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},a.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},a.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e<r;)i[e]=[n,n=t[++e]];return i},a.transpose=function(t){if(!(i=t.length))return[];for(var e=-1,r=a.min(t,_),n=new Array(r);++e<r;)for(var i,o=-1,s=n[e]=new Array(i);++o<i;)s[o]=t[o][e];return n},a.zip=function(){return a.transpose(arguments)},a.keys=function(t){var e=[];for(var r in t)e.push(r);return e},a.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},a.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},a.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r};var w=Math.abs;function T(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function k(){this._=Object.create(null)}a.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error(\"infinite range\");var n,i=[],a=function(t){for(var e=1;t*e%1;)e*=10;return e}(w(r)),o=-1;if(t*=a,e*=a,(r*=a)<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)<e;)i.push(n/a);return i},a.map=function(t,e){var r=new k;if(t instanceof k)t.forEach((function(t,e){r.set(t,e)}));else if(Array.isArray(t)){var n,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)r.set(i,t[i]);else for(;++i<a;)r.set(e.call(t,n=t[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};var A=\"__proto__\",M=\"\\0\";function S(t){return(t+=\"\")===A||t[0]===M?M+t:t}function E(t){return(t+=\"\")[0]===M?t.slice(1):t}function L(t){return S(t)in this._}function C(t){return(t=S(t))in this._&&delete this._[t]}function P(){var t=[];for(var e in this._)t.push(E(e));return t}function O(){var t=0;for(var e in this._)++t;return t}function I(){for(var t in this._)return!1;return!0}function D(){this._=Object.create(null)}function z(t){return t}function R(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function F(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=B.length;r<n;++r){var i=B[r]+e;if(i in t)return i}}T(k,{has:L,get:function(t){return this._[S(t)]},set:function(t,e){return this._[S(t)]=e},remove:C,keys:P,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:E(e),value:this._[e]});return t},size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e),this._[e])}}),a.nest=function(){var t,e,r={},n=[],i=[];function o(i,a,s){if(s>=n.length)return e?e.call(r,a):t?a.sort(t):a;for(var l,u,c,f,h=-1,p=a.length,d=n[s++],v=new k;++h<p;)(f=v.get(l=d(u=a[h])))?f.push(u):v.set(l,[u]);return i?(u=i(),c=function(t,e){u.set(t,o(i,e,s))}):(u={},c=function(t,e){u[t]=o(i,e,s)}),v.forEach(c),u}function s(t,e){if(e>=n.length)return t;var r=[],a=i[e++];return t.forEach((function(t,n){r.push({key:t,values:s(n,e)})})),a?r.sort((function(t,e){return a(t.key,e.key)})):r}return r.map=function(t,e){return o(e,t,0)},r.entries=function(t){return s(o(a.map,t,0),0)},r.key=function(t){return n.push(t),r},r.sortKeys=function(t){return i[n.length-1]=t,r},r.sortValues=function(e){return t=e,r},r.rollup=function(t){return e=t,r},r},a.set=function(t){var e=new D;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},T(D,{has:L,add:function(t){return this._[S(t+=\"\")]=!0,t},remove:C,values:P,size:O,empty:I,forEach:function(t){for(var e in this._)t.call(this,E(e))}}),a.behavior={},a.rebind=function(t,e){for(var r,n=1,i=arguments.length;++n<i;)t[r=arguments[n]]=R(t,e,e[r]);return t};var B=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function N(){}function j(){}function U(t){var e=[],r=new k;function n(){for(var r,n=e,i=-1,a=n.length;++i<a;)(r=n[i].on)&&r.apply(this,arguments);return t}return n.on=function(n,i){var a,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,a=e.indexOf(o)).concat(e.slice(a+1)),r.remove(n)),i&&e.push(r.set(n,{on:i})),t)},n}function V(){a.event.preventDefault()}function H(){for(var t,e=a.event;t=e.sourceEvent;)e=t;return e}function q(t){for(var e=new j,r=0,n=arguments.length;++r<n;)e[arguments[r]]=U(e);return e.of=function(r,n){return function(i){try{var o=i.sourceEvent=a.event;i.target=t,a.event=i,e[i.type].apply(r,n)}finally{a.event=o}}},e}a.dispatch=function(){for(var t=new j,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=U(t);return t},j.prototype.on=function(t,e){var r=t.indexOf(\".\"),n=\"\";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},a.event=null,a.requote=function(t){return t.replace(G,\"\\\\$&\")};var G=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,Z={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function Y(t){return Z(t,K),t}var W=function(t,e){return e.querySelector(t)},X=function(t,e){return e.querySelectorAll(t)},J=function(t,e){var r=t.matches||t[F(t,\"matchesSelector\")];return J=function(t,e){return r.call(t,e)},J(t,e)};\"function\"==typeof Sizzle&&(W=function(t,e){return Sizzle(t,e)[0]||null},X=Sizzle,J=Sizzle.matchesSelector),a.selection=function(){return a.select(l.documentElement)};var K=a.selection.prototype=[];function $(t){return\"function\"==typeof t?t:function(){return W(t,this)}}function Q(t){return\"function\"==typeof t?t:function(){return X(t,this)}}K.select=function(t){var e,r,n,i,a=[];t=$(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,u=n.length;++l<u;)(i=n[l])?(e.push(r=t.call(i,i.__data__,l,o)),r&&\"__data__\"in i&&(r.__data__=i.__data__)):e.push(null)}return Y(a)},K.selectAll=function(t){var e,r,n=[];t=Q(t);for(var i=-1,a=this.length;++i<a;)for(var o=this[i],l=-1,u=o.length;++l<u;)(r=o[l])&&(n.push(e=s(t.call(r,r.__data__,l,i))),e.parentNode=r);return Y(n)};var tt=\"http://www.w3.org/1999/xhtml\",et={svg:\"http://www.w3.org/2000/svg\",xhtml:tt,xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};function rt(t,e){return t=a.ns.qualify(t),null==e?t.local?function(){this.removeAttributeNS(t.space,t.local)}:function(){this.removeAttribute(t)}:\"function\"==typeof e?t.local?function(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}:function(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}:t.local?function(){this.setAttributeNS(t.space,t.local,e)}:function(){this.setAttribute(t,e)}}function nt(t){return t.trim().replace(/\\s+/g,\" \")}function it(t){return new RegExp(\"(?:^|\\\\s+)\"+a.requote(t)+\"(?:\\\\s+|$)\",\"g\")}function at(t){return(t+\"\").trim().split(/^|\\s+/)}function ot(t,e){var r=(t=at(t).map(st)).length;return\"function\"==typeof e?function(){for(var n=-1,i=e.apply(this,arguments);++n<r;)t[n](this,i)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function st(t){var e=it(t);return function(r,n){if(i=r.classList)return n?i.add(t):i.remove(t);var i=r.getAttribute(\"class\")||\"\";n?(e.lastIndex=0,e.test(i)||r.setAttribute(\"class\",nt(i+\" \"+t))):r.setAttribute(\"class\",nt(i.replace(e,\" \")))}}function lt(t,e,r){return null==e?function(){this.style.removeProperty(t)}:\"function\"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function ut(t,e){return null==e?function(){delete this[t]}:\"function\"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ct(t){return\"function\"==typeof t?t:(t=a.ns.qualify(t)).local?function(){return this.ownerDocument.createElementNS(t.space,t.local)}:function(){var e=this.ownerDocument,r=this.namespaceURI;return r===tt&&e.documentElement.namespaceURI===tt?e.createElement(t):e.createElementNS(r,t)}}function ft(){var t=this.parentNode;t&&t.removeChild(this)}function ht(t){return{__data__:t}}function pt(t){return function(){return J(this,t)}}function dt(t){return arguments.length||(t=g),function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}function vt(t,e){for(var r=0,n=t.length;r<n;r++)for(var i,a=t[r],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,r);return t}function gt(t){return Z(t,yt),t}a.ns={prefix:et,qualify:function(t){var e=t.indexOf(\":\"),r=t;return e>=0&&\"xmlns\"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),et.hasOwnProperty(r)?{space:et[r],local:t}:t}},K.attr=function(t,e){if(arguments.length<2){if(\"string\"==typeof t){var r=this.node();return(t=a.ns.qualify(t)).local?r.getAttributeNS(t.space,t.local):r.getAttribute(t)}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},K.classed=function(t,e){if(arguments.length<2){if(\"string\"==typeof t){var r=this.node(),n=(t=at(t)).length,i=-1;if(e=r.classList){for(;++i<n;)if(!e.contains(t[i]))return!1}else for(e=r.getAttribute(\"class\");++i<n;)if(!it(t[i]).test(e))return!1;return!0}for(e in t)this.each(ot(e,t[e]));return this}return this.each(ot(t,e))},K.style=function(t,e,r){var n=arguments.length;if(n<3){if(\"string\"!=typeof t){for(r in n<2&&(e=\"\"),t)this.each(lt(r,t[r],e));return this}if(n<2){var i=this.node();return c(i).getComputedStyle(i,null).getPropertyValue(t)}r=\"\"}return this.each(lt(t,e,r))},K.property=function(t,e){if(arguments.length<2){if(\"string\"==typeof t)return this.node()[t];for(e in t)this.each(ut(e,t[e]));return this}return this.each(ut(t,e))},K.text=function(t){return arguments.length?this.each(\"function\"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?\"\":e}:null==t?function(){this.textContent=\"\"}:function(){this.textContent=t}):this.node().textContent},K.html=function(t){return arguments.length?this.each(\"function\"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?\"\":e}:null==t?function(){this.innerHTML=\"\"}:function(){this.innerHTML=t}):this.node().innerHTML},K.append=function(t){return t=ct(t),this.select((function(){return this.appendChild(t.apply(this,arguments))}))},K.insert=function(t,e){return t=ct(t),e=$(e),this.select((function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}))},K.remove=function(){return this.each(ft)},K.data=function(t,e){var r,n,i=-1,a=this.length;if(!arguments.length){for(t=new Array(a=(r=this[0]).length);++i<a;)(n=r[i])&&(t[i]=n.__data__);return t}function o(t,r){var n,i,a,o=t.length,c=r.length,f=Math.min(o,c),h=new Array(c),p=new Array(c),d=new Array(o);if(e){var v,g=new k,y=new Array(o);for(n=-1;++n<o;)(i=t[n])&&(g.has(v=e.call(i,i.__data__,n))?d[n]=i:g.set(v,i),y[n]=v);for(n=-1;++n<c;)(i=g.get(v=e.call(r,a=r[n],n)))?!0!==i&&(h[n]=i,i.__data__=a):p[n]=ht(a),g.set(v,!0);for(n=-1;++n<o;)n in y&&!0!==g.get(y[n])&&(d[n]=t[n])}else{for(n=-1;++n<f;)i=t[n],a=r[n],i?(i.__data__=a,h[n]=i):p[n]=ht(a);for(;n<c;++n)p[n]=ht(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=h,p.parentNode=h.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(h),u.push(d)}var s=gt([]),l=Y([]),u=Y([]);if(\"function\"==typeof t)for(;++i<a;)o(r=this[i],t.call(r,r.parentNode.__data__,i));else for(;++i<a;)o(r=this[i],t);return l.enter=function(){return s},l.exit=function(){return u},l},K.datum=function(t){return arguments.length?this.property(\"__data__\",t):this.property(\"__data__\")},K.filter=function(t){var e,r,n,i=[];\"function\"!=typeof t&&(t=pt(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(r=this[a]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return Y(i)},K.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],i=n.length-1,a=n[i];--i>=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},K.sort=function(t){t=dt.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},K.each=function(t){return vt(this,(function(e,r,n){t.call(e,e.__data__,r,n)}))},K.call=function(t){var e=s(arguments);return t.apply(e[0]=this,e),this},K.empty=function(){return!this.node()},K.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,i=r.length;n<i;n++){var a=r[n];if(a)return a}return null},K.size=function(){var t=0;return vt(this,(function(){++t})),t};var yt=[];function mt(t,e,r){var n=\"__on\"+t,i=t.indexOf(\".\"),o=bt;i>0&&(t=t.slice(0,i));var l=xt.get(t);function u(){var e=this[n];e&&(this.removeEventListener(t,e,e.$),delete this[n])}return l&&(t=l,o=_t),i?e?function(){var i=o(e,s(arguments));u.call(this),this.addEventListener(t,this[n]=i,i.$=r),i._=e}:u:e?N:function(){var e,r=new RegExp(\"^__on([^.]+)\"+a.requote(t)+\"$\");for(var n in this)if(e=n.match(r)){var i=this[n];this.removeEventListener(e[1],i,i.$),delete this[n]}}}a.selection.enter=gt,a.selection.enter.prototype=yt,yt.append=K.append,yt.empty=K.empty,yt.node=K.node,yt.call=K.call,yt.size=K.size,yt.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s<l;){n=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var u=-1,c=i.length;++u<c;)(a=i[u])?(e.push(n[u]=r=t.call(i.parentNode,a.__data__,u,s)),r.__data__=a.__data__):e.push(null)}return Y(o)},yt.insert=function(t,e){var r,n,i;return arguments.length<2&&(r=this,e=function(t,e,a){var o,s=r[a].update,l=s.length;for(a!=i&&(i=a,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),K.insert.call(this,t,e)},a.select=function(t){var e;return\"string\"==typeof t?(e=[W(t,l)]).parentNode=l.documentElement:(e=[t]).parentNode=u(t),Y([e])},a.selectAll=function(t){var e;return\"string\"==typeof t?(e=s(X(t,l))).parentNode=l.documentElement:(e=s(t)).parentNode=null,Y([e])},K.on=function(t,e,r){var n=arguments.length;if(n<3){if(\"string\"!=typeof t){for(r in n<2&&(e=!1),t)this.each(mt(r,t[r],e));return this}if(n<2)return(n=this.node()[\"__on\"+t])&&n._;r=!1}return this.each(mt(t,e,r))};var xt=a.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});function bt(t,e){return function(r){var n=a.event;a.event=r,e[0]=this.__data__;try{t.apply(this,e)}finally{a.event=n}}}function _t(t,e){var r=bt(t,e);return function(t){var e=this,n=t.relatedTarget;n&&(n===e||8&n.compareDocumentPosition(e))||r.call(e,t)}}l&&xt.forEach((function(t){\"on\"+t in l&&xt.remove(t)}));var wt,Tt=0;function kt(t){var e=\".dragsuppress-\"+ ++Tt,r=\"click\"+e,n=a.select(c(t)).on(\"touchmove\"+e,V).on(\"dragstart\"+e,V).on(\"selectstart\"+e,V);if(null==wt&&(wt=!(\"onselectstart\"in t)&&F(t.style,\"userSelect\")),wt){var i=u(t).style,o=i[wt];i[wt]=\"none\"}return function(t){if(n.on(e,null),wt&&(i[wt]=o),t){var a=function(){n.on(r,null)};n.on(r,(function(){V(),a()}),!0),setTimeout(a,0)}}}a.mouse=function(t){return Mt(t,H())};var At=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function Mt(t,e){e.changedTouches&&(e=e.changedTouches[0]);var r=t.ownerSVGElement||t;if(r.createSVGPoint){var n=r.createSVGPoint();if(At<0){var i=c(t);if(i.scrollX||i.scrollY){var o=(r=a.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\"))[0][0].getScreenCTM();At=!(o.f||o.e),r.remove()}}return At?(n.x=e.pageX,n.y=e.pageY):(n.x=e.clientX,n.y=e.clientY),[(n=n.matrixTransform(t.getScreenCTM().inverse())).x,n.y]}var s=t.getBoundingClientRect();return[e.clientX-s.left-t.clientLeft,e.clientY-s.top-t.clientTop]}function St(){return a.event.changedTouches[0].identifier}a.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=H().changedTouches),e)for(var n,i=0,a=e.length;i<a;++i)if((n=e[i]).identifier===r)return Mt(t,n)},a.behavior.drag=function(){var t=q(i,\"drag\",\"dragstart\",\"dragend\"),e=null,r=o(N,a.mouse,c,\"mousemove\",\"mouseup\"),n=o(St,a.touch,z,\"touchmove\",\"touchend\");function i(){this.on(\"mousedown.drag\",r).on(\"touchstart.drag\",n)}function o(r,n,i,o,s){return function(){var l,u=this,c=a.event.target.correspondingElement||a.event.target,f=u.parentNode,h=t.of(u,arguments),p=0,d=r(),v=\".drag\"+(null==d?\"\":\"-\"+d),g=a.select(i(c)).on(o+v,(function(){var t,e,r=n(f,d);r&&(t=r[0]-m[0],e=r[1]-m[1],p|=t|e,m=r,h({type:\"drag\",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e}))})).on(s+v,(function(){n(f,d)&&(g.on(o+v,null).on(s+v,null),y(p),h({type:\"dragend\"}))})),y=kt(c),m=n(f,d);l=e?[(l=e.apply(u,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:\"dragstart\"})}}return i.origin=function(t){return arguments.length?(e=t,i):e},a.rebind(i,t,\"on\")},a.touches=function(t,e){return arguments.length<2&&(e=H().touches),e?s(e).map((function(e){var r=Mt(t,e);return r.identifier=e.identifier,r})):[]};var Et=1e-6,Lt=Et*Et,Ct=Math.PI,Pt=2*Ct,Ot=Pt-Et,It=Ct/2,Dt=Ct/180,zt=180/Ct;function Rt(t){return t>1?It:t<-1?-It:Math.asin(t)}function Ft(t){return((t=Math.exp(t))+1/t)/2}var Bt=Math.SQRT2;a.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,f=l-a,h=c*c+f*f;if(h<Lt)n=Math.log(u/o)/Bt,r=function(t){return[i+t*c,a+t*f,o*Math.exp(Bt*t*n)]};else{var p=Math.sqrt(h),d=(u*u-o*o+4*h)/(2*o*2*p),v=(u*u-o*o-4*h)/(2*u*2*p),g=Math.log(Math.sqrt(d*d+1)-d),y=Math.log(Math.sqrt(v*v+1)-v);n=(y-g)/Bt,r=function(t){var e,r=t*n,s=Ft(g),l=o/(2*p)*(s*(e=Bt*r+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+l*c,a+l*f,o*s/Ft(Bt*r+g)]}}return r.duration=1e3*n,r},a.behavior.zoom=function(){var t,e,r,n,i,o,s,u,f,h={x:0,y:0,k:1},p=[960,500],d=Ut,v=250,g=0,y=\"mousedown.zoom\",m=\"mousemove.zoom\",x=\"mouseup.zoom\",b=\"touchstart.zoom\",_=q(w,\"zoomstart\",\"zoom\",\"zoomend\");function w(t){t.on(y,P).on(jt+\".zoom\",I).on(\"dblclick.zoom\",D).on(b,O)}function T(t){return[(t[0]-h.x)/h.k,(t[1]-h.y)/h.k]}function k(t){h.k=Math.max(d[0],Math.min(d[1],t))}function A(t,e){e=function(t){return[t[0]*h.k+h.x,t[1]*h.k+h.y]}(e),h.x+=t[0]-e[0],h.y+=t[1]-e[1]}function M(t,r,n,i){t.__chart__={x:h.x,y:h.y,k:h.k},k(Math.pow(2,i)),A(e=r,n),t=a.select(t),v>0&&(t=t.transition().duration(v)),t.call(w.event)}function S(){s&&s.domain(o.range().map((function(t){return(t-h.x)/h.k})).map(o.invert)),f&&f.domain(u.range().map((function(t){return(t-h.y)/h.k})).map(u.invert))}function E(t){g++||t({type:\"zoomstart\"})}function L(t){S(),t({type:\"zoom\",scale:h.k,translate:[h.x,h.y]})}function C(t){--g||(t({type:\"zoomend\"}),e=null)}function P(){var t=this,e=_.of(t,arguments),r=0,n=a.select(c(t)).on(m,(function(){r=1,A(a.mouse(t),i),L(e)})).on(x,(function(){n.on(m,null).on(x,null),o(r),C(e)})),i=T(a.mouse(t)),o=kt(t);Ji.call(t),E(e)}function O(){var t,e=this,r=_.of(e,arguments),n={},o=0,s=\".zoom-\"+a.event.changedTouches[0].identifier,l=\"touchmove\"+s,u=\"touchend\"+s,c=[],f=a.select(e),p=kt(e);function d(){var r=a.touches(e);return t=h.k,r.forEach((function(t){t.identifier in n&&(n[t.identifier]=T(t))})),r}function v(){var t=a.event.target;a.select(t).on(l,g).on(u,m),c.push(t);for(var r=a.event.changedTouches,s=0,f=r.length;s<f;++s)n[r[s].identifier]=null;var p=d(),v=Date.now();if(1===p.length){if(v-i<500){var y=p[0];M(e,y,n[y.identifier],Math.floor(Math.log(h.k)/Math.LN2)+1),V()}i=v}else if(p.length>1){y=p[0];var x=p[1],b=y[0]-x[0],_=y[1]-x[1];o=b*b+_*_}}function g(){var s,l,u,c,f=a.touches(e);Ji.call(e);for(var h=0,p=f.length;h<p;++h,c=null)if(u=f[h],c=n[u.identifier]){if(l)break;s=u,l=c}if(c){var d=(d=u[0]-s[0])*d+(d=u[1]-s[1])*d,v=o&&Math.sqrt(d/o);s=[(s[0]+u[0])/2,(s[1]+u[1])/2],l=[(l[0]+c[0])/2,(l[1]+c[1])/2],k(v*t)}i=null,A(s,l),L(r)}function m(){if(a.event.touches.length){for(var t=a.event.changedTouches,e=0,i=t.length;e<i;++e)delete n[t[e].identifier];for(var o in n)return void d()}a.selectAll(c).on(s,null),f.on(y,P).on(b,O),p(),C(r)}v(),E(r),f.on(y,null).on(b,v)}function I(){var i=_.of(this,arguments);n?clearTimeout(n):(Ji.call(this),t=T(e=r||a.mouse(this)),E(i)),n=setTimeout((function(){n=null,C(i)}),50),V(),k(Math.pow(2,.002*Nt())*h.k),A(e,t),L(i)}function D(){var t=a.mouse(this),e=Math.log(h.k)/Math.LN2;M(this,t,T(t),a.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}return jt||(jt=\"onwheel\"in l?(Nt=function(){return-a.event.deltaY*(a.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in l?(Nt=function(){return a.event.wheelDelta},\"mousewheel\"):(Nt=function(){return-a.event.detail},\"MozMousePixelScroll\")),w.event=function(t){t.each((function(){var t=_.of(this,arguments),r=h;Qi?a.select(this).transition().each(\"start.zoom\",(function(){h=this.__chart__||{x:0,y:0,k:1},E(t)})).tween(\"zoom:zoom\",(function(){var n=p[0],i=p[1],o=e?e[0]:n/2,s=e?e[1]:i/2,l=a.interpolateZoom([(o-h.x)/h.k,(s-h.y)/h.k,n/h.k],[(o-r.x)/r.k,(s-r.y)/r.k,n/r.k]);return function(e){var r=l(e),i=n/r[2];this.__chart__=h={x:o-r[0]*i,y:s-r[1]*i,k:i},L(t)}})).each(\"interrupt.zoom\",(function(){C(t)})).each(\"end.zoom\",(function(){C(t)})):(this.__chart__=h,E(t),L(t),C(t))}))},w.translate=function(t){return arguments.length?(h={x:+t[0],y:+t[1],k:h.k},S(),w):[h.x,h.y]},w.scale=function(t){return arguments.length?(h={x:h.x,y:h.y,k:null},k(+t),S(),w):h.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?Ut:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(r=t&&[+t[0],+t[1]],w):r},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(v=+t,w):v},w.x=function(t){return arguments.length?(s=t,o=t.copy(),h={x:0,y:0,k:1},w):s},w.y=function(t){return arguments.length?(f=t,u=t.copy(),h={x:0,y:0,k:1},w):f},a.rebind(w,_,\"on\")};var Nt,jt,Ut=[0,1/0];function Vt(){}function Ht(t,e,r){return this instanceof Ht?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Ht?new Ht(t.h,t.s,t.l):ce(\"\"+t,fe,Ht):new Ht(t,e,r)}a.color=Vt,Vt.prototype.toString=function(){return this.rgb()+\"\"},a.hsl=Ht;var qt=Ht.prototype=new Vt;function Gt(t,e,r){var n,i;function a(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(i-n)*t/60:t<180?i:t<240?n+(i-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)||e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(i=r<=.5?r*(1+e):r+e-r*e),new ae(a(t+120),a(t),a(t-120))}function Zt(t,e,r){return this instanceof Zt?(this.h=+t,this.c=+e,void(this.l=+r)):arguments.length<2?t instanceof Zt?new Zt(t.h,t.c,t.l):function(t,e,r){return t>0?new Zt(Math.atan2(r,e)*zt,Math.sqrt(e*e+r*r),t):new Zt(NaN,NaN,t)}(t instanceof Xt?t.l:(t=he((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Zt(t,e,r)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ht(this.h,this.s,t*this.l)},qt.rgb=function(){return Gt(this.h,this.s,this.l)},a.hcl=Zt;var Yt=Zt.prototype=new Vt;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Dt)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Zt?Wt(t.h,t.c,t.l):he((t=ae(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Zt(this.h,this.c,Math.min(100,this.l+Jt*(arguments.length?t:1)))},Yt.darker=function(t){return new Zt(this.h,this.c,Math.max(0,this.l-Jt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},a.lab=Xt;var Jt=18,Kt=.95047,$t=1,Qt=1.08883,te=Xt.prototype=new Vt;function ee(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return new ae(ie(3.2404542*(i=re(i)*Kt)-1.5371385*(n=re(n)*$t)-.4985314*(a=re(a)*Qt)),ie(-.969266*i+1.8760108*n+.041556*a),ie(.0556434*i-.2040259*n+1.0572252*a))}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,r){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ce(\"\"+t,ae,Gt):new ae(t,e,r)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+\"\"}te.brighter=function(t){return new Xt(Math.min(100,this.l+Jt*(arguments.length?t:1)),this.a,this.b)},te.darker=function(t){return new Xt(Math.max(0,this.l-Jt*(arguments.length?t:1)),this.a,this.b)},te.rgb=function(){return ee(this.l,this.a,this.b)},a.rgb=ae;var le=ae.prototype=new Vt;function ue(t){return t<16?\"0\"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ce(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\\((.*)\\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(\",\"),n[1]){case\"hsl\":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\"rgb\":return e(de(i[0]),de(i[1]),de(i[2]))}return(a=ve.get(t))?e(a.r,a.g,a.b):(null==t||\"#\"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function fe(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,i=l>0&&l<1?0:n),new Ht(n,i,l)}function he(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Kt),i=ne((.2126729*t+.7151522*e+.072175*r)/$t);return Xt(116*i-16,500*(n-i),200*(i-ne((.0193339*t+.119192*e+.9503041*r)/Qt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return\"%\"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e<i&&(e=i),r&&r<i&&(r=i),n&&n<i&&(n=i),new ae(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ae(i,i,i)},le.darker=function(t){return new ae((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return fe(this.r,this.g,this.b)},le.toString=function(){return\"#\"+ue(this.r)+ue(this.g)+ue(this.b)};var ve=a.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ge(t){return\"function\"==typeof t?t:function(){return t}}function ye(t){return function(e,r,n){return 2===arguments.length&&\"function\"==typeof r&&(n=r,r=null),me(e,r,t,n)}}function me(t,e,r,n){var i={},o=a.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),l={},u=new XMLHttpRequest,c=null;function f(){var t,e=u.status;if(!e&&function(t){var e=t.responseType;return e&&\"text\"!==e?t.response:t.responseText}(u)||e>=200&&e<300||304===e){try{t=r.call(i,u)}catch(t){return void o.error.call(i,t)}o.load.call(i,t)}else o.error.call(i,u)}return self.XDomainRequest&&!(\"withCredentials\"in u)&&/^(http(s)?:)?\\/\\//.test(t)&&(u=new XDomainRequest),\"onload\"in u?u.onload=u.onerror=f:u.onreadystatechange=function(){u.readyState>3&&f()},u.onprogress=function(t){var e=a.event;a.event=t;try{o.progress.call(i,u)}finally{a.event=e}},i.header=function(t,e){return t=(t+\"\").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+\"\",i)},i.mimeType=function(t){return arguments.length?(e=null==t?null:t+\"\",i):e},i.responseType=function(t){return arguments.length?(c=t,i):c},i.response=function(t){return r=t,i},[\"get\",\"post\"].forEach((function(t){i[t]=function(){return i.send.apply(i,[t].concat(s(arguments)))}})),i.send=function(r,n,a){if(2===arguments.length&&\"function\"==typeof n&&(a=n,n=null),u.open(r,t,!0),null==e||\"accept\"in l||(l.accept=e+\",*/*\"),u.setRequestHeader)for(var s in l)u.setRequestHeader(s,l[s]);return null!=e&&u.overrideMimeType&&u.overrideMimeType(e),null!=c&&(u.responseType=c),null!=a&&i.on(\"error\",a).on(\"load\",(function(t){a(null,t)})),o.beforesend.call(i,u),u.send(null==n?null:n),i},i.abort=function(){return u.abort(),i},a.rebind(i,o,\"on\"),null==n?i:i.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(n))}ve.forEach((function(t,e){ve.set(t,oe(e))})),a.functor=ge,a.xhr=ye(z),a.dsv=function(t,e){var r=new RegExp('[\"'+t+\"\\n]\"),n=t.charCodeAt(0);function i(t,r,n){arguments.length<3&&(n=r,r=null);var i=me(t,e,null==r?a:o(r),n);return i.row=function(t){return arguments.length?i.response(null==(r=t)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'\"'+t.replace(/\\\"/g,'\"\"')+'\"':t}return i.parse=function(t,e){var r;return i.parseRows(t,(function(t,n){if(r)return r(t,n-1);var i=function(e){for(var r={},n=t.length,i=0;i<n;++i)r[t[i]]=e[i];return r};r=e?function(t,r){return e(i(t),r)}:i}))},i.parseRows=function(t,e){var r,i,a={},o={},s=[],l=t.length,u=0,c=0;function f(){if(u>=l)return o;if(i)return i=!1,a;var e=u;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return u=r+2,13===(s=t.charCodeAt(r+1))?(i=!0,10===t.charCodeAt(r+2)&&++u):10===s&&(i=!0),t.slice(e+1,r).replace(/\"\"/g,'\"')}for(;u<l;){var s,c=1;if(10===(s=t.charCodeAt(u++)))i=!0;else if(13===s)i=!0,10===t.charCodeAt(u)&&(++u,++c);else if(s!==n)continue;return t.slice(e,u-c)}return t.slice(e)}for(;(r=f())!==o;){for(var h=[];r!==a&&r!==o;)h.push(r),r=f();e&&null==(h=e(h,c++))||s.push(h)}return s},i.format=function(e){if(Array.isArray(e[0]))return i.formatRows(e);var r=new D,n=[];return e.forEach((function(t){for(var e in t)r.has(e)||n.push(r.add(e))})),[n.map(l).join(t)].concat(e.map((function(e){return n.map((function(t){return l(e[t])})).join(t)}))).join(\"\\n\")},i.formatRows=function(t){return t.map(s).join(\"\\n\")},i},a.csv=a.dsv(\",\",\"text/csv\"),a.tsv=a.dsv(\"\\t\",\"text/tab-separated-values\");var xe,be,_e,we,Te=this[F(this,\"requestAnimationFrame\")]||function(t){setTimeout(t,17)};function ke(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var i={c:t,t:r+e,n:null};return be?be.n=i:xe=i,be=i,_e||(we=clearTimeout(we),_e=1,Te(Ae)),i}function Ae(){var t=Me(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Ae,e)),_e=0):(_e=1,Te(Ae))}function Me(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t){return t[0]}function Le(t){return t[1]}function Ce(t){for(var e,r,n,i=t.length,a=[0,1],o=2,s=2;s<i;s++){for(;o>1&&(e=t[a[o-2]],r=t[a[o-1]],n=t[s],(r[0]-e[0])*(n[1]-e[1])-(r[1]-e[1])*(n[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}function Pe(t,e){return t[0]-e[0]||t[1]-e[1]}a.timer=function(){ke.apply(this,arguments)},a.timer.flush=function(){Me(),Se()},a.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)},a.geom={},a.geom.hull=function(t){var e=Ee,r=Le;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,i=ge(e),a=ge(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+i.call(this,t[n],n),+a.call(this,t[n],n),n]);for(s.sort(Pe),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var u=Ce(s),c=Ce(l),f=c[0]===u[0],h=c[c.length-1]===u[u.length-1],p=[];for(n=u.length-1;n>=0;--n)p.push(t[s[u[n]][2]]);for(n=+f;n<c.length-h;++n)p.push(t[s[c[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},a.geom.polygon=function(t){return Z(t,Oe),t};var Oe=a.geom.polygon.prototype=[];function Ie(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function De(t,e,r,n){var i=t[0],a=r[0],o=e[0]-i,s=n[0]-a,l=t[1],u=r[1],c=e[1]-l,f=n[1]-u,h=(s*(l-u)-f*(i-a))/(f*o-s*c);return[i+h*o,l+h*c]}function ze(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}Oe.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],i=0;++e<r;)t=n,n=this[e],i+=t[1]*n[0]-t[0]*n[1];return.5*i},Oe.centroid=function(t){var e,r,n=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++n<i;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[a*t,o*t]},Oe.clip=function(t){for(var e,r,n,i,a,o,s=ze(t),l=-1,u=this.length-ze(this),c=this[u-1];++l<u;){for(e=t.slice(),t.length=0,i=this[l],a=e[(n=e.length-s)-1],r=-1;++r<n;)Ie(o=e[r],c,i)?(Ie(a,c,i)||t.push(De(a,o,c,i)),t.push(o)):Ie(a,c,i)&&t.push(De(a,o,c,i)),a=o;s&&t.push(t[0]),c=i}return t};var Re,Fe,Be,Ne,je,Ue=[],Ve=[];function He(){sr(this),this.edge=this.site=this.circle=null}function qe(t){var e=Ue.pop()||new He;return e.site=t,e}function Ge(t){tr(t),Be.remove(t),Ue.push(t),sr(t)}function Ze(t){var e=t.circle,r=e.x,n=e.cy,i={x:r,y:n},a=t.P,o=t.N,s=[t];Ge(t);for(var l=a;l.circle&&w(r-l.circle.x)<Et&&w(n-l.circle.cy)<Et;)a=l.P,s.unshift(l),Ge(l),l=a;s.unshift(l),tr(l);for(var u=o;u.circle&&w(r-u.circle.x)<Et&&w(n-u.circle.cy)<Et;)o=u.N,s.push(u),Ge(u),u=o;s.push(u),tr(u);var c,f=s.length;for(c=1;c<f;++c)u=s[c],l=s[c-1],ir(u.edge,l.site,u.site,i);l=s[0],(u=s[f-1]).edge=nr(l.site,u.site,null,i),Qe(l),Qe(u)}function Ye(t){for(var e,r,n,i,a=t.x,o=t.y,s=Be._;s;)if((n=We(s,o)-a)>Et)s=s.L;else{if(!((i=a-Xe(s,o))>Et)){n>-Et?(e=s.P,r=s):i>-Et?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=qe(t);if(Be.insert(e,l),e||r){if(e===r)return tr(e),r=qe(e.site),Be.insert(l,r),l.edge=r.edge=nr(e.site,l.site),Qe(e),void Qe(r);if(r){tr(e),tr(r);var u=e.site,c=u.x,f=u.y,h=t.x-c,p=t.y-f,d=r.site,v=d.x-c,g=d.y-f,y=2*(h*g-p*v),m=h*h+p*p,x=v*v+g*g,b={x:(g*m-p*x)/y+c,y:(h*x-v*m)/y+f};ir(r.edge,u,d,b),l.edge=nr(u,t,null,b),r.edge=nr(t,d,null,b),Qe(e),Qe(r)}else l.edge=nr(e.site,l.site)}}function We(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,u=l-e;if(!u)return s;var c=s-n,f=1/a-1/u,h=c/u;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*u)-l+u/2+i-a/2)))/f+n:(n+s)/2}function Xe(t,e){var r=t.N;if(r)return We(r,e);var n=t.site;return n.y===e?n.x:1/0}function Je(t){this.site=t,this.edges=[]}function Ke(t,e){return e.angle-t.angle}function $e(){sr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Qe(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,u=n.y-s,c=a.x-o,f=2*(l*(g=a.y-s)-u*c);if(!(f>=-Lt)){var h=l*l+u*u,p=c*c+g*g,d=(g*h-u*p)/f,v=(l*p-c*h)/f,g=v+s,y=Ve.pop()||new $e;y.arc=t,y.site=i,y.x=d+o,y.y=g+Math.sqrt(d*d+v*v),y.cy=g,t.circle=y;for(var m=null,x=je._;x;)if(y.y<x.y||y.y===x.y&&y.x<=x.x){if(!x.L){m=x.P;break}x=x.L}else{if(!x.R){m=x;break}x=x.R}je.insert(m,y),m||(Ne=y)}}}}function tr(t){var e=t.circle;e&&(e.P||(Ne=e.N),je.remove(e),Ve.push(e),sr(e),t.circle=null)}function er(t,e){var r=t.b;if(r)return!0;var n,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],u=e[1][1],c=t.l,f=t.r,h=c.x,p=c.y,d=f.x,v=f.y,g=(h+d)/2,y=(p+v)/2;if(v===p){if(g<o||g>=s)return;if(h>d){if(a){if(a.y>=u)return}else a={x:g,y:l};r={x:g,y:u}}else{if(a){if(a.y<l)return}else a={x:g,y:u};r={x:g,y:l}}}else if(i=y-(n=(h-d)/(v-p))*g,n<-1||n>1)if(h>d){if(a){if(a.y>=u)return}else a={x:(l-i)/n,y:l};r={x:(u-i)/n,y:u}}else{if(a){if(a.y<l)return}else a={x:(u-i)/n,y:u};r={x:(l-i)/n,y:l}}else if(p<v){if(a){if(a.x>=s)return}else a={x:o,y:n*o+i};r={x:s,y:n*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:n*s+i};r={x:o,y:n*o+i}}return t.a=a,t.b=r,!0}function rr(t,e){this.l=t,this.r=e,this.a=this.b=null}function nr(t,e,r,n){var i=new rr(t,e);return Re.push(i),r&&ir(i,t,e,r),n&&ir(i,e,t,n),Fe[t.i].edges.push(new ar(i,t,e)),Fe[e.i].edges.push(new ar(i,e,t)),i}function ir(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function ar(t,e,r){var n=t.a,i=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function or(){this._=null}function sr(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function lr(t,e){var r=e,n=e.R,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function ur(t,e){var r=e,n=e.L,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function cr(t){for(;t.L;)t=t.L;return t}function fr(t,e){var r,n,i,a=t.sort(hr).pop();for(Re=[],Fe=new Array(t.length),Be=new or,je=new or;;)if(i=Ne,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===r&&a.y===n||(Fe[a.i]=new Je(a),Ye(a),r=a.x,n=a.y),a=t.pop();else{if(!i)break;Ze(i.arc)}e&&(function(t){for(var e,r,n,i,a,o=Re,s=(r=t[0][0],n=t[0][1],i=t[1][0],a=t[1][1],function(t){var e,o=t.a,s=t.b,l=o.x,u=o.y,c=0,f=1,h=s.x-l,p=s.y-u;if(e=r-l,h||!(e>0)){if(e/=h,h<0){if(e<c)return;e<f&&(f=e)}else if(h>0){if(e>f)return;e>c&&(c=e)}if(e=i-l,h||!(e<0)){if(e/=h,h<0){if(e>f)return;e>c&&(c=e)}else if(h>0){if(e<c)return;e<f&&(f=e)}if(e=n-u,p||!(e>0)){if(e/=p,p<0){if(e<c)return;e<f&&(f=e)}else if(p>0){if(e>f)return;e>c&&(c=e)}if(e=a-u,p||!(e<0)){if(e/=p,p<0){if(e>f)return;e>c&&(c=e)}else if(p>0){if(e<c)return;e<f&&(f=e)}return c>0&&(t.a={x:l+c*h,y:u+c*p}),f<1&&(t.b={x:l+f*h,y:u+f*p}),t}}}}}),l=o.length;l--;)(!er(e=o[l],t)||!s(e)||w(e.a.x-e.b.x)<Et&&w(e.a.y-e.b.y)<Et)&&(e.a=e.b=null,o.splice(l,1))}(e),function(t){for(var e,r,n,i,a,o,s,l,u,c,f=t[0][0],h=t[1][0],p=t[0][1],d=t[1][1],v=Fe,g=v.length;g--;)if((a=v[g])&&a.prepare())for(l=(s=a.edges).length,o=0;o<l;)n=(c=s[o].end()).x,i=c.y,e=(u=s[++o%l].start()).x,r=u.y,(w(n-e)>Et||w(i-r)>Et)&&(s.splice(o,0,new ar((y=a.site,m=c,x=w(n-f)<Et&&d-i>Et?{x:f,y:w(e-f)<Et?r:d}:w(i-d)<Et&&h-n>Et?{x:w(r-d)<Et?e:h,y:d}:w(n-h)<Et&&i-p>Et?{x:h,y:w(e-h)<Et?r:p}:w(i-p)<Et&&n-f>Et?{x:w(r-p)<Et?e:f,y:p}:null,b=void 0,(b=new rr(y,null)).a=m,b.b=x,Re.push(b),b),a.site,null)),++l);var y,m,x,b}(e));var o={cells:Fe,edges:Re};return Be=je=Re=Fe=null,o}function hr(t,e){return e.y-t.y||e.x-t.x}Je.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Ke),e.length},ar.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},or.prototype={insert:function(t,e){var r,n,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=cr(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(i=n.R)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.R&&(lr(this,r),r=(t=r).U),r.C=!1,n.C=!0,ur(this,n)):(i=n.L)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.L&&(ur(this,r),r=(t=r).U),r.C=!1,n.C=!0,lr(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,i=t.U,a=t.L,o=t.R;if(r=a?o?cr(o):a:o,i?i.L===t?i.L=r:i.R=r:this._=r,a&&o?(n=r.C,r.C=t.C,r.L=a,a.U=r,r!==o?(i=r.U,r.U=t.U,t=r.R,i.L=t,r.R=o,o.U=r):(r.U=i,i=r,t=r.R)):(n=t.C,t=r),t&&(t.U=i),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,lr(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,ur(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,lr(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,ur(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,lr(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,ur(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},a.geom.voronoi=function(t){var e=Ee,r=Le,n=e,i=r,a=pr;if(t)return o(t);function o(t){var e=new Array(t.length),r=a[0][0],n=a[0][1],i=a[1][0],o=a[1][1];return fr(s(t),a).cells.forEach((function(a,s){var l=a.edges,u=a.site;(e[s]=l.length?l.map((function(t){var e=t.start();return[e.x,e.y]})):u.x>=r&&u.x<=i&&u.y>=n&&u.y<=o?[[r,o],[i,o],[i,n],[r,n]]:[]).point=t[s]})),e}function s(t){return t.map((function(t,e){return{x:Math.round(n(t,e)/Et)*Et,y:Math.round(i(t,e)/Et)*Et,i:e}}))}return o.links=function(t){return fr(s(t)).edges.filter((function(t){return t.l&&t.r})).map((function(e){return{source:t[e.l.i],target:t[e.r.i]}}))},o.triangles=function(t){var e=[];return fr(s(t)).cells.forEach((function(r,n){for(var i,a,o,s,l=r.site,u=r.edges.sort(Ke),c=-1,f=u.length,h=u[f-1].edge,p=h.l===l?h.r:h.l;++c<f;)i=p,p=(h=u[c].edge).l===l?h.r:h.l,n<i.i&&n<p.i&&(o=i,s=p,((a=l).x-s.x)*(o.y-a.y)-(a.x-o.x)*(s.y-a.y)<0)&&e.push([t[n],t[i.i],t[p.i]])})),e},o.x=function(t){return arguments.length?(n=ge(e=t),o):e},o.y=function(t){return arguments.length?(i=ge(r=t),o):r},o.clipExtent=function(t){return arguments.length?(a=null==t?pr:t,o):a===pr?null:a},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):a===pr?null:a&&a[1]},o};var pr=[[-1e6,-1e6],[1e6,1e6]];function dr(t){return t.x}function vr(t){return t.y}function gr(t,e,r,n,i,a){if(!t(e,r,n,i,a)){var o=.5*(r+i),s=.5*(n+a),l=e.nodes;l[0]&&gr(t,l[0],r,n,o,s),l[1]&&gr(t,l[1],o,n,i,s),l[2]&&gr(t,l[2],r,s,o,a),l[3]&&gr(t,l[3],o,s,i,a)}}function yr(t,e){t=a.rgb(t),e=a.rgb(e);var r=t.r,n=t.g,i=t.b,o=e.r-r,s=e.g-n,l=e.b-i;return function(t){return\"#\"+ue(Math.round(r+o*t))+ue(Math.round(n+s*t))+ue(Math.round(i+l*t))}}function mr(t,e){var r,n={},i={};for(r in t)r in e?n[r]=Tr(t[r],e[r]):i[r]=t[r];for(r in e)r in t||(i[r]=e[r]);return function(t){for(r in n)i[r]=n[r](t);return i}}function xr(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function br(t,e){var r,n,i,a=_r.lastIndex=wr.lastIndex=0,o=-1,s=[],l=[];for(t+=\"\",e+=\"\";(r=_r.exec(t))&&(n=wr.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:xr(r,n)})),a=wr.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+\"\"}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\"\")})}a.geom.delaunay=function(t){return a.geom.voronoi().triangles(t)},a.geom.quadtree=function(t,e,r,n,i){var a,o=Ee,s=Le;if(a=arguments.length)return o=dr,s=vr,3===a&&(i=r,n=e,r=e=0),l(t);function l(t){var l,u,c,f,h,p,d,v,g,y=ge(o),m=ge(s);if(null!=e)p=e,d=r,v=n,g=i;else if(v=g=-(p=d=1/0),u=[],c=[],h=t.length,a)for(f=0;f<h;++f)(l=t[f]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>v&&(v=l.x),l.y>g&&(g=l.y),u.push(l.x),c.push(l.y);else for(f=0;f<h;++f){var x=+y(l=t[f],f),b=+m(l,f);x<p&&(p=x),b<d&&(d=b),x>v&&(v=x),b>g&&(g=b),u.push(x),c.push(b)}var _=v-p,T=g-d;function k(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,u=t.y;if(null!=l)if(w(l-r)+w(u-n)<.01)A(t,e,r,n,i,a,o,s);else{var c=t.point;t.x=t.y=t.point=null,A(t,c,l,u,i,a,o,s),A(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else A(t,e,r,n,i,a,o,s)}function A(t,e,r,n,i,a,o,s){var l=.5*(i+o),u=.5*(a+s),c=r>=l,f=n>=u,h=f<<1|c;t.leaf=!1,c?i=l:o=l,f?a=u:s=u,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,i,a,o,s)}_>T?g=d+_:v=p+T;var M={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(M,t,+y(t,++f),+m(t,f),p,d,v,g)}};if(M.visit=function(t){gr(t,M,p,d,v,g)},M.find=function(t){return function(t,e,r,n,i,a,o){var s,l=1/0;return function t(u,c,f,h,p){if(!(c>a||f>o||h<n||p<i)){if(d=u.point){var d,v=e-u.x,g=r-u.y,y=v*v+g*g;if(y<l){var m=Math.sqrt(l=y);n=e-m,i=r-m,a=e+m,o=r+m,s=d}}for(var x=u.nodes,b=.5*(c+h),_=.5*(f+p),w=(r>=_)<<1|e>=b,T=w+4;w<T;++w)if(u=x[3&w])switch(3&w){case 0:t(u,c,f,b,_);break;case 1:t(u,b,f,h,_);break;case 2:t(u,c,_,b,p);break;case 3:t(u,b,_,h,p)}}}(t,n,i,a,o),s}(M,t[0],t[1],p,d,v,g)},f=-1,null==e){for(;++f<h;)k(M,t[f],u[f],c[f],p,d,v,g);--f}else t.forEach(M.add);return u=c=t=l=null,M}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),l):null==e?null:[[e,r],[n,i]]},l.size=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=r=0,n=+t[0],i=+t[1]),l):null==e?null:[n-e,i-r]},l},a.interpolateRgb=yr,a.interpolateObject=mr,a.interpolateNumber=xr,a.interpolateString=br;var _r=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,wr=new RegExp(_r.source,\"g\");function Tr(t,e){for(var r,n=a.interpolators.length;--n>=0&&!(r=a.interpolators[n](t,e)););return r}function kr(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Tr(t[r],e[r]));for(;r<a;++r)i[r]=t[r];for(;r<o;++r)i[r]=e[r];return function(t){for(r=0;r<s;++r)i[r]=n[r](t);return i}}a.interpolate=Tr,a.interpolators=[function(t,e){var r=typeof e;return(\"string\"===r?ve.has(e.toLowerCase())||/^(#|rgb\\(|hsl\\()/i.test(e)?yr:br:e instanceof Vt?yr:Array.isArray(e)?kr:\"object\"===r&&isNaN(e)?mr:xr)(t,e)}],a.interpolateArray=kr;var Ar=function(){return z},Mr=a.map({linear:Ar,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return Cr},cubic:function(){return Pr},sin:function(){return Ir},exp:function(){return Dr},circle:function(){return zr},elastic:function(t,e){var r;return arguments.length<2&&(e=.45),arguments.length?r=e/Pt*Math.asin(1/t):(t=1,r=e/4),function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*Pt/e)}},back:function(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}},bounce:function(){return Rr}}),Sr=a.map({in:z,out:Er,\"in-out\":Lr,\"out-in\":function(t){return Lr(Er(t))}});function Er(t){return function(e){return 1-t(1-e)}}function Lr(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Cr(t){return t*t}function Pr(t){return t*t*t}function Or(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function Ir(t){return 1-Math.cos(t*It)}function Dr(t){return Math.pow(2,10*(t-1))}function zr(t){return 1-Math.sqrt(1-t*t)}function Rr(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Fr(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function Br(t){var e,r,n,i=[t.a,t.b],a=[t.c,t.d],o=jr(i),s=Nr(i,a),l=jr(((e=a)[0]+=(n=-s)*(r=i)[0],e[1]+=n*r[1],e))||0;i[0]*a[1]<a[0]*i[1]&&(i[0]*=-1,i[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*zt,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*zt:0}function Nr(t,e){return t[0]*e[0]+t[1]*e[1]}function jr(t){var e=Math.sqrt(Nr(t,t));return e&&(t[0]/=e,t[1]/=e),e}a.ease=function(t){var e,r=t.indexOf(\"-\"),n=r>=0?t.slice(0,r):t,i=r>=0?t.slice(r+1):\"in\";return n=Mr.get(n)||Ar,i=Sr.get(i)||z,e=i(n.apply(null,o.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},a.interpolateHcl=function(t,e){t=a.hcl(t),e=a.hcl(e);var r=t.h,n=t.c,i=t.l,o=e.h-r,s=e.c-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.c:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Wt(r+o*t,n+s*t,i+l*t)+\"\"}},a.interpolateHsl=function(t,e){t=a.hsl(t),e=a.hsl(e);var r=t.h,n=t.s,i=t.l,o=e.h-r,s=e.s-n,l=e.l-i;return isNaN(s)&&(s=0,n=isNaN(n)?e.s:n),isNaN(o)?(o=0,r=isNaN(r)?e.h:r):o>180?o-=360:o<-180&&(o+=360),function(t){return Gt(r+o*t,n+s*t,i+l*t)+\"\"}},a.interpolateLab=function(t,e){t=a.lab(t),e=a.lab(e);var r=t.l,n=t.a,i=t.b,o=e.l-r,s=e.a-n,l=e.b-i;return function(t){return ee(r+o*t,n+s*t,i+l*t)+\"\"}},a.interpolateRound=Fr,a.transform=function(t){var e=l.createElementNS(a.ns.prefix.svg,\"g\");return(a.transform=function(t){if(null!=t){e.setAttribute(\"transform\",t);var r=e.transform.baseVal.consolidate()}return new Br(r?r.matrix:Ur)})(t)},Br.prototype.toString=function(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};var Ur={a:1,b:0,c:0,d:1,e:0,f:0};function Vr(t){return t.length?t.pop()+\",\":\"\"}function Hr(t,e){var r=[],n=[];return t=a.transform(t),e=a.transform(e),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(\"translate(\",null,\",\",null,\")\");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else(e[0]||e[1])&&r.push(\"translate(\"+e+\")\")}(t.translate,e.translate,r,n),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(Vr(r)+\"rotate(\",null,\")\")-2,x:xr(t,e)})):e&&r.push(Vr(r)+\"rotate(\"+e+\")\")}(t.rotate,e.rotate,r,n),function(t,e,r,n){t!==e?n.push({i:r.push(Vr(r)+\"skewX(\",null,\")\")-2,x:xr(t,e)}):e&&r.push(Vr(r)+\"skewX(\"+e+\")\")}(t.skew,e.skew,r,n),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(Vr(r)+\"scale(\",null,\",\",null,\")\");n.push({i:i-4,x:xr(t[0],e[0])},{i:i-2,x:xr(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(Vr(r)+\"scale(\"+e+\")\")}(t.scale,e.scale,r,n),t=e=null,function(t){for(var e,i=-1,a=n.length;++i<a;)r[(e=n[i]).i]=e.x(t);return r.join(\"\")}}function qr(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function Gr(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function Zr(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;for(var r=Yr(t),n=Yr(e),i=r.pop(),a=n.pop(),o=null;i===a;)o=i,i=r.pop(),a=n.pop();return o}(e,r),i=[e];e!==n;)e=e.parent,i.push(e);for(var a=i.length;r!==n;)i.splice(a,0,r),r=r.parent;return i}function Yr(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function Wr(t){t.fixed|=2}function Xr(t){t.fixed&=-7}function Jr(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Kr(t){t.fixed&=-5}function $r(t,e,r){var n=0,i=0;if(t.charge=0,!t.leaf)for(var a,o=t.nodes,s=o.length,l=-1;++l<s;)null!=(a=o[l])&&($r(a,e,r),t.charge+=a.charge,n+=a.charge*a.cx,i+=a.charge*a.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var u=e*r[t.point.index];t.charge+=t.pointCharge=u,n+=u*t.point.x,i+=u*t.point.y}t.cx=n/t.charge,t.cy=i/t.charge}a.interpolateTransform=Hr,a.layout={},a.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(Zr(t[r]));return e}},a.layout.chord=function(){var t,e,r,n,i,o,s,l={},u=0;function c(){var l,c,h,p,d,v={},g=[],y=a.range(n),m=[];for(t=[],e=[],l=0,p=-1;++p<n;){for(c=0,d=-1;++d<n;)c+=r[p][d];g.push(c),m.push(a.range(n)),l+=c}for(i&&y.sort((function(t,e){return i(g[t],g[e])})),o&&m.forEach((function(t,e){t.sort((function(t,n){return o(r[e][t],r[e][n])}))})),l=(Pt-u*n)/l,c=0,p=-1;++p<n;){for(h=c,d=-1;++d<n;){var x=y[p],b=m[x][d],_=r[x][b],w=c,T=c+=_*l;v[x+\"-\"+b]={index:x,subindex:b,startAngle:w,endAngle:T,value:_}}e[x]={index:x,startAngle:h,endAngle:c,value:g[x]},c+=u}for(p=-1;++p<n;)for(d=p-1;++d<n;){var k=v[p+\"-\"+d],A=v[d+\"-\"+p];(k.value||A.value)&&t.push(k.value<A.value?{source:A,target:k}:{source:k,target:A})}s&&f()}function f(){t.sort((function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)}))}return l.matrix=function(i){return arguments.length?(n=(r=i)&&r.length,t=e=null,l):r},l.padding=function(r){return arguments.length?(u=r,t=e=null,l):u},l.sortGroups=function(r){return arguments.length?(i=r,t=e=null,l):i},l.sortSubgroups=function(e){return arguments.length?(o=e,t=null,l):o},l.sortChords=function(e){return arguments.length?(s=e,t&&f(),l):s},l.chords=function(){return t||c(),t},l.groups=function(){return e||c(),e},l},a.layout.force=function(){var t,e,r,n,i,o,s={},l=a.dispatch(\"start\",\"tick\",\"end\"),u=[1,1],c=.9,f=Qr,h=tn,p=-30,d=en,v=.1,g=.64,y=[],m=[];function x(t){return function(e,r,n,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,s=i-r,l=a*a+o*o;if(s*s/g<l){if(l<d){var u=e.charge/l;t.px-=a*u,t.py-=o*u}return!0}e.point&&l&&l<d&&(u=e.pointCharge/l,t.px-=a*u,t.py-=o*u)}return!e.charge}}function b(t){t.px=a.event.x,t.py=a.event.y,s.resume()}return s.tick=function(){if((r*=.99)<.005)return t=null,l.end({type:\"end\",alpha:r=0}),!0;var e,s,f,h,d,g,b,_,w,T=y.length,k=m.length;for(s=0;s<k;++s)h=(f=m[s]).source,(g=(_=(d=f.target).x-h.x)*_+(w=d.y-h.y)*w)&&(_*=g=r*i[s]*((g=Math.sqrt(g))-n[s])/g,w*=g,d.x-=_*(b=h.weight+d.weight?h.weight/(h.weight+d.weight):.5),d.y-=w*b,h.x+=_*(b=1-b),h.y+=w*b);if((b=r*v)&&(_=u[0]/2,w=u[1]/2,s=-1,b))for(;++s<T;)(f=y[s]).x+=(_-f.x)*b,f.y+=(w-f.y)*b;if(p)for($r(e=a.geom.quadtree(y),r,o),s=-1;++s<T;)(f=y[s]).fixed||e.visit(x(f));for(s=-1;++s<T;)(f=y[s]).fixed?(f.x=f.px,f.y=f.py):(f.x-=(f.px-(f.px=f.x))*c,f.y-=(f.py-(f.py=f.y))*c);l.tick({type:\"tick\",alpha:r})},s.nodes=function(t){return arguments.length?(y=t,s):y},s.links=function(t){return arguments.length?(m=t,s):m},s.size=function(t){return arguments.length?(u=t,s):u},s.linkDistance=function(t){return arguments.length?(f=\"function\"==typeof t?t:+t,s):f},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(h=\"function\"==typeof t?t:+t,s):h},s.friction=function(t){return arguments.length?(c=+t,s):c},s.charge=function(t){return arguments.length?(p=\"function\"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(v=+t,s):v},s.theta=function(t){return arguments.length?(g=t*t,s):Math.sqrt(g)},s.alpha=function(e){return arguments.length?(e=+e,r?e>0?r=e:(t.c=null,t.t=NaN,t=null,l.end({type:\"end\",alpha:r=0})):e>0&&(l.start({type:\"start\",alpha:r=e}),t=ke(s.tick)),s):r},s.start=function(){var t,e,r,a=y.length,l=m.length,c=u[0],d=u[1];for(t=0;t<a;++t)(r=y[t]).index=t,r.weight=0;for(t=0;t<l;++t)\"number\"==typeof(r=m[t]).source&&(r.source=y[r.source]),\"number\"==typeof r.target&&(r.target=y[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<a;++t)r=y[t],isNaN(r.x)&&(r.x=v(\"x\",c)),isNaN(r.y)&&(r.y=v(\"y\",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(n=[],\"function\"==typeof f)for(t=0;t<l;++t)n[t]=+f.call(this,m[t],t);else for(t=0;t<l;++t)n[t]=f;if(i=[],\"function\"==typeof h)for(t=0;t<l;++t)i[t]=+h.call(this,m[t],t);else for(t=0;t<l;++t)i[t]=h;if(o=[],\"function\"==typeof p)for(t=0;t<a;++t)o[t]=+p.call(this,y[t],t);else for(t=0;t<a;++t)o[t]=p;function v(r,n){if(!e){for(e=new Array(a),u=0;u<a;++u)e[u]=[];for(u=0;u<l;++u){var i=m[u];e[i.source.index].push(i.target),e[i.target.index].push(i.source)}}for(var o,s=e[t],u=-1,c=s.length;++u<c;)if(!isNaN(o=s[u][r]))return o;return Math.random()*n}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(e||(e=a.behavior.drag().origin(z).on(\"dragstart.force\",Wr).on(\"drag.force\",b).on(\"dragend.force\",Xr)),!arguments.length)return e;this.on(\"mouseover.force\",Jr).on(\"mouseout.force\",Kr).call(e)},a.rebind(s,l,\"on\")};var Qr=20,tn=1,en=1/0;function rn(t,e){return a.rebind(t,e,\"sort\",\"children\",\"value\"),t.nodes=t,t.links=un,t}function nn(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(i=t.children)&&(n=i.length))for(var n,i;--n>=0;)r.push(i[n])}function an(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)r.push(a[o]);for(;null!=(t=n.pop());)e(t)}function on(t){return t.children}function sn(t){return t.value}function ln(t,e){return e.value-t.value}function un(t){return a.merge(t.map((function(t){return(t.children||[]).map((function(e){return{source:t,target:e}}))})))}a.layout.hierarchy=function(){var t=ln,e=on,r=sn;function n(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(u=e.call(n,a,a.depth))&&(l=u.length)){for(var l,u,c;--l>=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;r&&(a.value=0),a.children=u}else r&&(a.value=+r.call(n,a,a.depth)||0),delete a.children;return an(i,(function(e){var n,i;t&&(n=e.children)&&n.sort(t),r&&(i=e.parent)&&(i.value+=e.value)})),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(nn(t,(function(t){t.children&&(t.value=0)})),an(t,(function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)}))),t},n},a.layout.partition=function(){var t=a.layout.hierarchy(),e=[1,1];function r(t,e,n,i){var a=t.children;if(t.x=e,t.y=t.depth*i,t.dx=n,t.dy=i,a&&(o=a.length)){var o,s,l,u=-1;for(n=t.value?n/t.value:0;++u<o;)r(s=a[u],e,l=s.value*n,i),e+=l}}function n(t){var e=t.children,r=0;if(e&&(i=e.length))for(var i,a=-1;++a<i;)r=Math.max(r,n(e[a]));return 1+r}function i(i,a){var o=t.call(this,i,a);return r(o[0],0,e[0],e[1]/n(o[0])),o}return i.size=function(t){return arguments.length?(e=t,i):e},rn(i,t)},a.layout.pie=function(){var t=Number,e=cn,r=0,n=Pt,i=0;function o(s){var l,u=s.length,c=s.map((function(e,r){return+t.call(o,e,r)})),f=+(\"function\"==typeof r?r.apply(this,arguments):r),h=(\"function\"==typeof n?n.apply(this,arguments):n)-f,p=Math.min(Math.abs(h)/u,+(\"function\"==typeof i?i.apply(this,arguments):i)),d=p*(h<0?-1:1),v=a.sum(c),g=v?(h-u*d)/v:0,y=a.range(u),m=[];return null!=e&&y.sort(e===cn?function(t,e){return c[e]-c[t]}:function(t,r){return e(s[t],s[r])}),y.forEach((function(t){m[t]={data:s[t],value:l=c[t],startAngle:f,endAngle:f+=l*g+d,padAngle:p}})),m}return o.value=function(e){return arguments.length?(t=e,o):t},o.sort=function(t){return arguments.length?(e=t,o):e},o.startAngle=function(t){return arguments.length?(r=t,o):r},o.endAngle=function(t){return arguments.length?(n=t,o):n},o.padAngle=function(t){return arguments.length?(i=t,o):i},o};var cn={};function fn(t){return t.x}function hn(t){return t.y}function pn(t,e,r){t.y0=e,t.y=r}a.layout.stack=function(){var t=z,e=gn,r=yn,n=pn,i=fn,o=hn;function s(l,u){if(!(p=l.length))return l;var c=l.map((function(e,r){return t.call(s,e,r)})),f=c.map((function(t){return t.map((function(t,e){return[i.call(s,t,e),o.call(s,t,e)]}))})),h=e.call(s,f,u);c=a.permute(c,h),f=a.permute(f,h);var p,d,v,g,y=r.call(s,f,u),m=c[0].length;for(v=0;v<m;++v)for(n.call(s,c[0][v],g=y[v],f[0][v][1]),d=1;d<p;++d)n.call(s,c[d][v],g+=f[d-1][v][1],f[d][v][1]);return l}return s.values=function(e){return arguments.length?(t=e,s):t},s.order=function(t){return arguments.length?(e=\"function\"==typeof t?t:dn.get(t)||gn,s):e},s.offset=function(t){return arguments.length?(r=\"function\"==typeof t?t:vn.get(t)||yn,s):r},s.x=function(t){return arguments.length?(i=t,s):i},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(n=t,s):n},s};var dn=a.map({\"inside-out\":function(t){var e,r,n=t.length,i=t.map(mn),o=t.map(xn),s=a.range(n).sort((function(t,e){return i[t]-i[e]})),l=0,u=0,c=[],f=[];for(e=0;e<n;++e)r=s[e],l<u?(l+=o[r],c.push(r)):(u+=o[r],f.push(r));return f.reverse().concat(c)},reverse:function(t){return a.range(t.length).reverse()},default:gn}),vn=a.map({silhouette:function(t){var e,r,n,i=t.length,a=t[0].length,o=[],s=0,l=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<a;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,u,c=t.length,f=t[0],h=f.length,p=[];for(p[0]=l=u=0,r=1;r<h;++r){for(e=0,i=0;e<c;++e)i+=t[e][r][1];for(e=0,a=0,s=f[r][0]-f[r-1][0];e<c;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;a+=o*t[e][r][1]}p[r]=l-=i?a/i*s:0,l<u&&(u=l)}for(r=0;r<h;++r)p[r]-=u;return p},expand:function(t){var e,r,n,i=t.length,a=t[0].length,o=1/i,s=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];if(n)for(e=0;e<i;e++)t[e][r][1]/=n;else for(e=0;e<i;e++)t[e][r][1]=o}for(r=0;r<a;++r)s[r]=0;return s},zero:yn});function gn(t){return a.range(t.length)}function yn(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function mn(t){for(var e,r=1,n=0,i=t[0][1],a=t.length;r<a;++r)(e=t[r][1])>i&&(n=r,i=e);return n}function xn(t){return t.reduce(bn,0)}function bn(t,e){return t+e[1]}function _n(t,e){return wn(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function wn(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Tn(t){return[a.min(t),a.max(t)]}function kn(t,e){return t.value-e.value}function An(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Mn(t,e){t._pack_next=e,e._pack_prev=t}function Sn(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function En(t){if((e=t.children)&&(l=e.length)){var e,r,n,i,a,o,s,l,u=1/0,c=-1/0,f=1/0,h=-1/0;if(e.forEach(Ln),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(On(r,n,i=e[2]),x(i),An(r,i),r._pack_prev=i,An(i,n),n=r._pack_next,a=3;a<l;a++){On(r,n,i=e[a]);var p=0,d=1,v=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if(Sn(o,i)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!Sn(s,i);s=s._pack_prev,v++);p?(d<v||d==v&&n.r<r.r?Mn(r,n=o):Mn(r=s,n),a--):(An(r,i),n=i,x(i))}var g=(u+c)/2,y=(f+h)/2,m=0;for(a=0;a<l;a++)(i=e[a]).x-=g,i.y-=y,m=Math.max(m,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=m,e.forEach(Cn)}function x(t){u=Math.min(t.x-t.r,u),c=Math.max(t.x+t.r,c),f=Math.min(t.y-t.r,f),h=Math.max(t.y+t.r,h)}}function Ln(t){t._pack_next=t._pack_prev=t}function Cn(t){delete t._pack_next,delete t._pack_prev}function Pn(t,e,r,n){var i=t.children;if(t.x=e+=n*t.x,t.y=r+=n*t.y,t.r*=n,i)for(var a=-1,o=i.length;++a<o;)Pn(i[a],e,r,n)}function On(t,e,r){var n=t.r+r.r,i=e.x-t.x,a=e.y-t.y;if(n&&(i||a)){var o=e.r+r.r,s=i*i+a*a,l=.5+((n*=n)-(o*=o))/(2*s),u=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*i+u*a,r.y=t.y+l*a-u*i}else r.x=t.x+n,r.y=t.y}function In(t,e){return t.parent==e.parent?1:2}function Dn(t){var e=t.children;return e.length?e[0]:t.t}function zn(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function Rn(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function Fn(t,e,r){return t.a.parent===e.parent?t.a:r}function Bn(t){var e=t.children;return e&&e.length?Bn(e[0]):t}function Nn(t){var e,r=t.children;return r&&(e=r.length)?Nn(r[e-1]):t}function jn(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Un(t,e){var r=t.x+e[3],n=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(r+=i/2,i=0),a<0&&(n+=a/2,a=0),{x:r,y:n,dx:i,dy:a}}function Vn(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function Hn(t){return t.rangeExtent?t.rangeExtent():Vn(t.range())}function qn(t,e,r,n){var i=r(t[0],t[1]),a=n(e[0],e[1]);return function(t){return a(i(t))}}function Gn(t,e){var r,n=0,i=t.length-1,a=t[n],o=t[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),t[n]=e.floor(a),t[i]=e.ceil(o),t}function Zn(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:Yn}a.layout.histogram=function(){var t=!0,e=Number,r=Tn,n=_n;function i(i,o){for(var s,l,u=[],c=i.map(e,this),f=r.call(this,c,o),h=n.call(this,f,c,o),p=(o=-1,c.length),d=h.length-1,v=t?1:1/p;++o<d;)(s=u[o]=[]).dx=h[o+1]-(s.x=h[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=c[o])>=f[0]&&l<=f[1]&&((s=u[a.bisect(h,l,1,d)-1]).y+=v,s.push(i[o]));return u}return i.value=function(t){return arguments.length?(e=t,i):e},i.range=function(t){return arguments.length?(r=ge(t),i):r},i.bins=function(t){return arguments.length?(n=\"number\"==typeof t?function(e){return wn(e,t)}:ge(t),i):n},i.frequency=function(e){return arguments.length?(t=!!e,i):t},i},a.layout.pack=function(){var t,e=a.layout.hierarchy().sort(kn),r=0,n=[1,1];function i(i,a){var o=e.call(this,i,a),s=o[0],l=n[0],u=n[1],c=null==t?Math.sqrt:\"function\"==typeof t?t:function(){return t};if(s.x=s.y=0,an(s,(function(t){t.r=+c(t.value)})),an(s,En),r){var f=r*(t?1:Math.max(2*s.r/l,2*s.r/u))/2;an(s,(function(t){t.r+=f})),an(s,En),an(s,(function(t){t.r-=f}))}return Pn(s,l/2,u/2,t?1:1/Math.max(2*s.r/l,2*s.r/u)),o}return i.size=function(t){return arguments.length?(n=t,i):n},i.radius=function(e){return arguments.length?(t=null==e||\"function\"==typeof e?e:+e,i):t},i.padding=function(t){return arguments.length?(r=+t,i):r},rn(i,e)},a.layout.tree=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=null;function i(i,a){var u=t.call(this,i,a),c=u[0],f=function(t){for(var e,r={A:null,children:[t]},n=[r];null!=(e=n.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)n.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return r.children[0]}(c);if(an(f,o),f.parent.m=-f.z,nn(f,s),n)nn(c,l);else{var h=c,p=c,d=c;nn(c,(function(t){t.x<h.x&&(h=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)}));var v=e(h,p)/2-h.x,g=r[0]/(p.x+e(p,h)/2+v),y=r[1]/(d.depth||1);nn(c,(function(t){t.x=(t.x+v)*g,t.y=t.depth*y}))}return u}function o(t){var r=t.children,n=t.parent.children,i=t.i?n[t.i-1]:null;if(r.length){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var a=(r[0].z+r[r.length-1].z)/2;i?(t.z=i.z+e(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+e(t._,i._));t.parent.A=function(t,r,n){if(r){for(var i,a=t,o=t,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=zn(s),a=Dn(a),s&&a;)l=Dn(l),(o=zn(o)).a=t,(i=s.z+f-a.z-u+e(s._,a._))>0&&(Rn(Fn(s,t,n),t,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!zn(o)&&(o.t=s,o.m+=f-c),a&&!Dn(l)&&(l.t=a,l.m+=u-h,n=t)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=r[0],t.y=t.depth*r[1]}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t)?l:null,i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null==(r=t)?null:l,i):n?r:null},rn(i,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),e=In,r=[1,1],n=!1;function i(i,o){var s,l=t.call(this,i,o),u=l[0],c=0;an(u,(function(t){var r=t.children;r&&r.length?(t.x=function(t){return t.reduce((function(t,e){return t+e.x}),0)/t.length}(r),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(r)):(t.x=s?c+=e(t,s):0,t.y=0,s=t)}));var f=Bn(u),h=Nn(u),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2;return an(u,n?function(t){t.x=(t.x-u.x)*r[0],t.y=(u.y-t.y)*r[1]}:function(t){t.x=(t.x-p)/(d-p)*r[0],t.y=(1-(u.y?t.y/u.y:1))*r[1]}),l}return i.separation=function(t){return arguments.length?(e=t,i):e},i.size=function(t){return arguments.length?(n=null==(r=t),i):n?null:r},i.nodeSize=function(t){return arguments.length?(n=null!=(r=t),i):n?r:null},rn(i,t)},a.layout.treemap=function(){var t,e=a.layout.hierarchy(),r=Math.round,n=[1,1],i=null,o=jn,s=!1,l=\"squarify\",u=.5*(1+Math.sqrt(5));function c(t,e){for(var r,n,i=-1,a=t.length;++i<a;)n=(r=t[i]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function f(t){var e=t.children;if(e&&e.length){var r,n,i,a=o(t),s=[],u=e.slice(),h=1/0,v=\"slice\"===l?a.dx:\"dice\"===l?a.dy:\"slice-dice\"===l?1&t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(c(u,a.dx*a.dy/t.value),s.area=0;(i=u.length)>0;)s.push(r=u[i-1]),s.area+=r.area,\"squarify\"!==l||(n=p(s,v))<=h?(u.pop(),h=n):(s.area-=s.pop().area,d(s,v,a,!1),v=Math.min(a.dx,a.dy),s.length=s.area=0,h=1/0);s.length&&(d(s,v,a,!0),s.length=s.area=0),e.forEach(f)}}function h(t){var e=t.children;if(e&&e.length){var r,n=o(t),i=e.slice(),a=[];for(c(i,n.dx*n.dy/t.value),a.area=0;r=i.pop();)a.push(r),a.area+=r.area,null!=r.z&&(d(a,r.z?n.dx:n.dy,n,!i.length),a.length=a.area=0);e.forEach(h)}}function p(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<a&&(a=r),r>i&&(i=r));return e*=e,(n*=n)?Math.max(e*i*u/n,n/(e*a*u)):1/0}function d(t,e,n,i){var a,o=-1,s=t.length,l=n.x,u=n.y,c=e?r(t.area/e):0;if(e==n.dx){for((i||c>n.dy)&&(c=n.dy);++o<s;)(a=t[o]).x=l,a.y=u,a.dy=c,l+=a.dx=Math.min(n.x+n.dx-l,c?r(a.area/c):0);a.z=!0,a.dx+=n.x+n.dx-l,n.y+=c,n.dy-=c}else{for((i||c>n.dx)&&(c=n.dx);++o<s;)(a=t[o]).x=l,a.y=u,a.dx=c,u+=a.dy=Math.min(n.y+n.dy-u,c?r(a.area/c):0);a.z=!1,a.dy+=n.y+n.dy-u,n.x+=c,n.dx-=c}}function v(r){var i=t||e(r),a=i[0];return a.x=a.y=0,a.value?(a.dx=n[0],a.dy=n[1]):a.dx=a.dy=0,t&&e.revalue(a),c([a],a.dx*a.dy/a.value),(t?h:f)(a),s&&(t=i),i}return v.size=function(t){return arguments.length?(n=t,v):n},v.padding=function(t){if(!arguments.length)return i;function e(e){return Un(e,t)}var r;return o=null==(i=t)?jn:\"function\"==(r=typeof t)?function(e){var r=t.call(v,e,e.depth);return null==r?jn(e):Un(e,\"number\"==typeof r?[r,r,r,r]:r)}:\"number\"===r?(t=[t,t,t,t],e):e,v},v.round=function(t){return arguments.length?(r=t?Math.round:Number,v):r!=Number},v.sticky=function(e){return arguments.length?(s=e,t=null,v):s},v.ratio=function(t){return arguments.length?(u=t,v):u},v.mode=function(t){return arguments.length?(l=t+\"\",v):l},rn(v,e)},a.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,i;do{i=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!i||i>1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=a.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},a.scale={};var Yn={floor:z,ceil:z};function Wn(t,e,r,n){var i=[],o=[],s=0,l=Math.min(t.length,e.length)-1;for(t[l]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<=l;)i.push(r(t[s-1],t[s])),o.push(n(e[s-1],e[s]));return function(e){var r=a.bisect(t,e,1,l)-1;return o[r](i[r](e))}}function Xn(t,e,r,n){var i,a;function o(){var o=Math.min(t.length,e.length)>2?Wn:qn,l=n?Gr:qr;return i=o(t,e,l,r),a=o(e,t,l,Tr),s}function s(t){return i(t)}return s.invert=function(t){return a(t)},s.domain=function(e){return arguments.length?(t=e.map(Number),o()):t},s.range=function(t){return arguments.length?(e=t,o()):e},s.rangeRound=function(t){return s.range(t).interpolate(Fr)},s.clamp=function(t){return arguments.length?(n=t,o()):n},s.interpolate=function(t){return arguments.length?(r=t,o()):r},s.ticks=function(e){return Qn(t,e)},s.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},s.nice=function(e){return Kn(t,e),o()},s.copy=function(){return Xn(t,e,r,n)},o()}function Jn(t,e){return a.rebind(t,e,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function Kn(t,e){return Gn(t,Zn($n(t,e)[2])),Gn(t,Zn($n(t,e)[2])),t}function $n(t,e){null==e&&(e=10);var r=Vn(t),n=r[1]-r[0],i=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a=e/n*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),r[0]=Math.ceil(r[0]/i)*i,r[1]=Math.floor(r[1]/i)*i+.5*i,r[2]=i,r}function Qn(t,e){return a.range.apply(a,$n(t,e))}function ti(t,e,r,n){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(i(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(r=e[0]>=0,t.domain((n=e.map(Number)).map(i)),o):n},o.base=function(r){return arguments.length?(e=+r,t.domain(n.map(i)),o):e},o.nice=function(){var e=Gn(n.map(i),r?Math:ei);return t.domain(e),n=e.map(a),o},o.ticks=function(){var t=Vn(n),o=[],s=t[0],l=t[1],u=Math.floor(i(s)),c=Math.ceil(i(l)),f=e%1?2:e;if(isFinite(c-u)){if(r){for(;u<c;u++)for(var h=1;h<f;h++)o.push(a(u)*h);o.push(a(u))}else for(o.push(a(u));u++<c;)for(h=f-1;h>0;h--)o.push(a(u)*h);for(u=0;o[u]<s;u++);for(c=o.length;o[c-1]>l;c--);o=o.slice(u,c)}return o},o.copy=function(){return ti(t.copy(),e,r,n)},Jn(o,t)}a.scale.linear=function(){return Xn([0,1],[0,1],Tr,!1)},a.scale.log=function(){return ti(a.scale.linear().domain([0,1]),10,!0,[1,10])};var ei={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function ri(t,e,r){var n=ni(e),i=ni(1/e);function a(e){return t(n(e))}return a.invert=function(e){return i(t.invert(e))},a.domain=function(e){return arguments.length?(t.domain((r=e.map(Number)).map(n)),a):r},a.ticks=function(t){return Qn(r,t)},a.tickFormat=function(t,e){return d3_scale_linearTickFormat(r,t,e)},a.nice=function(t){return a.domain(Kn(r,t))},a.exponent=function(o){return arguments.length?(n=ni(e=o),i=ni(1/e),t.domain(r.map(n)),a):e},a.copy=function(){return ri(t.copy(),e,r)},Jn(a,t)}function ni(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function ii(t,e){var r,n,i;function o(i){return n[((r.get(i)||(\"range\"===e.t?r.set(i,t.push(i)):NaN))-1)%n.length]}function s(e,r){return a.range(t.length).map((function(t){return e+r*t}))}return o.domain=function(n){if(!arguments.length)return t;t=[],r=new k;for(var i,a=-1,s=n.length;++a<s;)r.has(i=n[a])||r.set(i,t.push(i));return o[e.t].apply(o,e.a)},o.range=function(t){return arguments.length?(n=t,i=0,e={t:\"range\",a:arguments},o):n},o.rangePoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=(l+u)/2,0):(u-l)/(t.length-1+a);return n=s(l+c*a/2,c),i=0,e={t:\"rangePoints\",a:arguments},o},o.rangeRoundPoints=function(r,a){arguments.length<2&&(a=0);var l=r[0],u=r[1],c=t.length<2?(l=u=Math.round((l+u)/2),0):(u-l)/(t.length-1+a)|0;return n=s(l+Math.round(c*a/2+(u-l-(t.length-1+a)*c)/2),c),i=0,e={t:\"rangeRoundPoints\",a:arguments},o},o.rangeBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=(r[1-u]-c)/(t.length-a+2*l);return n=s(c+f*l,f),u&&n.reverse(),i=f*(1-a),e={t:\"rangeBands\",a:arguments},o},o.rangeRoundBands=function(r,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var u=r[1]<r[0],c=r[u-0],f=r[1-u],h=Math.floor((f-c)/(t.length-a+2*l));return n=s(c+Math.round((f-c-(t.length-a)*h)/2),h),u&&n.reverse(),i=Math.round(h*(1-a)),e={t:\"rangeRoundBands\",a:arguments},o},o.rangeBand=function(){return i},o.rangeExtent=function(){return Vn(e.a[0])},o.copy=function(){return ii(t,e)},o.domain(t)}a.scale.pow=function(){return ri(a.scale.linear(),1,[0,1])},a.scale.sqrt=function(){return a.scale.pow().exponent(.5)},a.scale.ordinal=function(){return ii([],{t:\"range\",a:[[]]})},a.scale.category10=function(){return a.scale.ordinal().range(ai)},a.scale.category20=function(){return a.scale.ordinal().range(oi)},a.scale.category20b=function(){return a.scale.ordinal().range(si)},a.scale.category20c=function(){return a.scale.ordinal().range(li)};var ai=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),oi=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),si=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),li=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function ui(t,e){var r;function n(){var n=0,o=e.length;for(r=[];++n<o;)r[n-1]=a.quantile(t,n/o);return i}function i(t){if(!isNaN(t=+t))return e[a.bisect(r,t)]}return i.domain=function(e){return arguments.length?(t=e.map(y).filter(m).sort(g),n()):t},i.range=function(t){return arguments.length?(e=t,n()):e},i.quantiles=function(){return r},i.invertExtent=function(n){return(n=e.indexOf(n))<0?[NaN,NaN]:[n>0?r[n-1]:t[0],n<r.length?r[n]:t[t.length-1]]},i.copy=function(){return ui(t,e)},n()}function ci(t,e,r){var n,i;function a(e){return r[Math.max(0,Math.min(i,Math.floor(n*(e-t))))]}function o(){return n=r.length/(e-t),i=r.length-1,a}return a.domain=function(r){return arguments.length?(t=+r[0],e=+r[r.length-1],o()):[t,e]},a.range=function(t){return arguments.length?(r=t,o()):r},a.invertExtent=function(e){return[e=(e=r.indexOf(e))<0?NaN:e/n+t,e+1/n]},a.copy=function(){return ci(t,e,r)},o()}function fi(t,e){function r(r){if(r<=r)return e[a.bisect(t,r)]}return r.domain=function(e){return arguments.length?(t=e,r):t},r.range=function(t){return arguments.length?(e=t,r):e},r.invertExtent=function(r){return r=e.indexOf(r),[t[r-1],t[r]]},r.copy=function(){return fi(t,e)},r}function hi(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(r){return arguments.length?(t=r.map(e),e):t},e.ticks=function(e){return Qn(t,e)},e.tickFormat=function(e,r){return d3_scale_linearTickFormat(t,e,r)},e.copy=function(){return hi(t)},e}function pi(){return 0}a.scale.quantile=function(){return ui([],[])},a.scale.quantize=function(){return ci(0,1,[0,1])},a.scale.threshold=function(){return fi([.5],[0,1])},a.scale.identity=function(){return hi([0,1])},a.svg={},a.svg.arc=function(){var t=vi,e=gi,r=pi,n=di,i=yi,a=mi,o=xi;function s(){var s=Math.max(0,+t.apply(this,arguments)),u=Math.max(0,+e.apply(this,arguments)),c=i.apply(this,arguments)-It,f=a.apply(this,arguments)-It,h=Math.abs(f-c),p=c>f?0:1;if(u<s&&(d=u,u=s,s=d),h>=Ot)return l(u,p)+(s?l(s,1-p):\"\")+\"Z\";var d,v,g,y,m,x,b,_,w,T,k,A,M=0,S=0,E=[];if((y=(+o.apply(this,arguments)||0)/2)&&(g=n===di?Math.sqrt(s*s+u*u):+n.apply(this,arguments),p||(S*=-1),u&&(S=Rt(g/u*Math.sin(y))),s&&(M=Rt(g/s*Math.sin(y)))),u){m=u*Math.cos(c+S),x=u*Math.sin(c+S),b=u*Math.cos(f-S),_=u*Math.sin(f-S);var L=Math.abs(f-c-2*S)<=Ct?0:1;if(S&&bi(m,x,b,_)===p^L){var C=(c+f)/2;m=u*Math.cos(C),x=u*Math.sin(C),b=_=null}}else m=x=0;if(s){w=s*Math.cos(f-M),T=s*Math.sin(f-M),k=s*Math.cos(c+M),A=s*Math.sin(c+M);var P=Math.abs(c-f+2*M)<=Ct?0:1;if(M&&bi(w,T,k,A)===1-p^P){var O=(c+f)/2;w=s*Math.cos(O),T=s*Math.sin(O),k=A=null}}else w=T=0;if(h>Et&&(d=Math.min(Math.abs(u-s)/2,+r.apply(this,arguments)))>.001){v=s<u^p?0:1;var I=d,D=d;if(h<Ct){var z=null==k?[w,T]:null==b?[m,x]:De([m,x],[k,A],[b,_],[w,T]),R=m-z[0],F=x-z[1],B=b-z[0],N=_-z[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),U=Math.sqrt(z[0]*z[0]+z[1]*z[1]);D=Math.min(d,(s-U)/(j-1)),I=Math.min(d,(u-U)/(j+1))}if(null!=b){var V=_i(null==k?[w,T]:[k,A],[m,x],u,I,p),H=_i([b,_],[w,T],u,I,p);d===I?E.push(\"M\",V[0],\"A\",I,\",\",I,\" 0 0,\",v,\" \",V[1],\"A\",u,\",\",u,\" 0 \",1-p^bi(V[1][0],V[1][1],H[1][0],H[1][1]),\",\",p,\" \",H[1],\"A\",I,\",\",I,\" 0 0,\",v,\" \",H[0]):E.push(\"M\",V[0],\"A\",I,\",\",I,\" 0 1,\",v,\" \",H[0])}else E.push(\"M\",m,\",\",x);if(null!=k){var q=_i([m,x],[k,A],s,-D,p),G=_i([w,T],null==b?[m,x]:[b,_],s,-D,p);d===D?E.push(\"L\",G[0],\"A\",D,\",\",D,\" 0 0,\",v,\" \",G[1],\"A\",s,\",\",s,\" 0 \",p^bi(G[1][0],G[1][1],q[1][0],q[1][1]),\",\",1-p,\" \",q[1],\"A\",D,\",\",D,\" 0 0,\",v,\" \",q[0]):E.push(\"L\",G[0],\"A\",D,\",\",D,\" 0 0,\",v,\" \",q[0])}else E.push(\"L\",w,\",\",T)}else E.push(\"M\",m,\",\",x),null!=b&&E.push(\"A\",u,\",\",u,\" 0 \",L,\",\",p,\" \",b,\",\",_),E.push(\"L\",w,\",\",T),null!=k&&E.push(\"A\",s,\",\",s,\" 0 \",P,\",\",1-p,\" \",k,\",\",A);return E.push(\"Z\"),E.join(\"\")}function l(t,e){return\"M0,\"+t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+-t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+t}return s.innerRadius=function(e){return arguments.length?(t=ge(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ge(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ge(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==di?di:ge(t),s):n},s.startAngle=function(t){return arguments.length?(i=ge(t),s):i},s.endAngle=function(t){return arguments.length?(a=ge(t),s):a},s.padAngle=function(t){return arguments.length?(o=ge(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-It;return[Math.cos(n)*r,Math.sin(n)*r]},s};var di=\"auto\";function vi(t){return t.innerRadius}function gi(t){return t.outerRadius}function yi(t){return t.startAngle}function mi(t){return t.endAngle}function xi(t){return t&&t.padAngle}function bi(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function _i(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,f=t[1]+u,h=e[0]+l,p=e[1]+u,d=(c+h)/2,v=(f+p)/2,g=h-c,y=p-f,m=g*g+y*y,x=r-n,b=c*p-h*f,_=(y<0?-1:1)*Math.sqrt(Math.max(0,x*x*m-b*b)),w=(b*y-g*_)/m,T=(-b*g-y*_)/m,k=(b*y+g*_)/m,A=(-b*g+y*_)/m,M=w-d,S=T-v,E=k-d,L=A-v;return M*M+S*S>E*E+L*L&&(w=k,T=A),[[w-l,T-u],[w*r/x,T*r/x]]}function wi(){return!0}function Ti(t){var e=Ee,r=Le,n=wi,i=Ai,a=i.key,o=.7;function s(a){var s,l=[],u=[],c=-1,f=a.length,h=ge(e),p=ge(r);function d(){l.push(\"M\",i(t(u),o))}for(;++c<f;)n.call(this,s=a[c],c)?u.push([+h.call(this,s,c),+p.call(this,s,c)]):u.length&&(d(),u=[]);return u.length&&d(),l.length?l.join(\"\"):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(a=\"function\"==typeof t?i=t:(i=ki.get(t)||Ai).key,s):a},s.tension=function(t){return arguments.length?(o=t,s):o},s}a.svg.line=function(){return Ti(z)};var ki=a.map({linear:Ai,\"linear-closed\":Mi,step:function(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\",\",n[1]];++e<r;)i.push(\"H\",(n[0]+(n=t[e])[0])/2,\"V\",n[1]);return r>1&&i.push(\"H\",n[0]),i.join(\"\")},\"step-before\":Si,\"step-after\":Ei,basis:Pi,\"basis-open\":function(t){if(t.length<4)return Ai(t);for(var e,r=[],n=-1,i=t.length,a=[0],o=[0];++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);for(r.push(Oi(zi,a)+\",\"+Oi(zi,o)),--n;++n<i;)e=t[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ri(r,a,o);return r.join(\"\")},\"basis-closed\":function(t){for(var e,r,n=-1,i=t.length,a=i+4,o=[],s=[];++n<4;)r=t[n%i],o.push(r[0]),s.push(r[1]);for(e=[Oi(zi,o),\",\",Oi(zi,s)],--n;++n<a;)r=t[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),Ri(e,o,s);return e.join(\"\")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,i,a=t[0][0],o=t[0][1],s=t[r][0]-a,l=t[r][1]-o,u=-1;++u<=r;)i=u/r,(n=t[u])[0]=e*n[0]+(1-e)*(a+i*s),n[1]=e*n[1]+(1-e)*(o+i*l);return Pi(t)},cardinal:function(t,e){return t.length<3?Ai(t):t[0]+Li(t,Ci(t,e))},\"cardinal-open\":function(t,e){return t.length<4?Ai(t):t[1]+Li(t.slice(1,-1),Ci(t,e))},\"cardinal-closed\":function(t,e){return t.length<3?Mi(t):t[0]+Li((t.push(t[0]),t),Ci([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Ai(t):t[0]+Li(t,function(t){for(var e,r,n,i,a=[],o=function(t){for(var e=0,r=t.length-1,n=[],i=t[0],a=t[1],o=n[0]=Fi(i,a);++e<r;)n[e]=(o+(o=Fi(i=a,a=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;++s<l;)e=Fi(t[s],t[s+1]),w(e)<Et?o[s]=o[s+1]=0:(i=(r=o[s]/e)*r+(n=o[s+1]/e)*n)>9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n);for(s=-1;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Ai(t){return t.length>1?t.join(\"L\"):t+\"Z\"}function Mi(t){return t.join(\"L\")+\"Z\"}function Si(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\",\",n[1]];++e<r;)i.push(\"V\",(n=t[e])[1],\"H\",n[0]);return i.join(\"\")}function Ei(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\",\",n[1]];++e<r;)i.push(\"H\",(n=t[e])[0],\"V\",n[1]);return i.join(\"\")}function Li(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Ai(t);var r=t.length!=e.length,n=\"\",i=t[0],a=t[1],o=e[0],s=o,l=1;if(r&&(n+=\"Q\"+(a[0]-2*o[0]/3)+\",\"+(a[1]-2*o[1]/3)+\",\"+a[0]+\",\"+a[1],i=t[1],l=2),e.length>1){s=e[1],a=t[l],l++,n+=\"C\"+(i[0]+o[0])+\",\"+(i[1]+o[1])+\",\"+(a[0]-s[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1];for(var u=2;u<e.length;u++,l++)a=t[l],s=e[u],n+=\"S\"+(a[0]-s[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1]}if(r){var c=t[l];n+=\"Q\"+(a[0]+2*s[0]/3)+\",\"+(a[1]+2*s[1]/3)+\",\"+c[0]+\",\"+c[1]}return n}function Ci(t,e){for(var r,n=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)r=a,a=o,o=t[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function Pi(t){if(t.length<3)return Ai(t);var e=1,r=t.length,n=t[0],i=n[0],a=n[1],o=[i,i,i,(n=t[1])[0]],s=[a,a,a,n[1]],l=[i,\",\",a,\"L\",Oi(zi,o),\",\",Oi(zi,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),Ri(l,o,s);return t.pop(),l.push(\"L\",n),l.join(\"\")}function Oi(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}ki.forEach((function(t,e){e.key=t,e.closed=/-closed$/.test(t)}));var Ii=[0,2/3,1/3,0],Di=[0,1/3,2/3,0],zi=[0,1/6,2/3,1/6];function Ri(t,e,r){t.push(\"C\",Oi(Ii,e),\",\",Oi(Ii,r),\",\",Oi(Di,e),\",\",Oi(Di,r),\",\",Oi(zi,e),\",\",Oi(zi,r))}function Fi(t,e){return(e[1]-t[1])/(e[0]-t[0])}function Bi(t){for(var e,r,n,i=-1,a=t.length;++i<a;)r=(e=t[i])[0],n=e[1]-It,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function Ni(t){var e=Ee,r=Ee,n=0,i=Le,a=wi,o=Ai,s=o.key,l=o,u=\"L\",c=.7;function f(s){var f,h,p,d=[],v=[],g=[],y=-1,m=s.length,x=ge(e),b=ge(n),_=e===r?function(){return h}:ge(r),w=n===i?function(){return p}:ge(i);function T(){d.push(\"M\",o(t(g),c),u,l(t(v.reverse()),c),\"Z\")}for(;++y<m;)a.call(this,f=s[y],y)?(v.push([h=+x.call(this,f,y),p=+b.call(this,f,y)]),g.push([+_.call(this,f,y),+w.call(this,f,y)])):v.length&&(T(),v=[],g=[]);return v.length&&T(),d.length?d.join(\"\"):null}return f.x=function(t){return arguments.length?(e=r=t,f):r},f.x0=function(t){return arguments.length?(e=t,f):e},f.x1=function(t){return arguments.length?(r=t,f):r},f.y=function(t){return arguments.length?(n=i=t,f):i},f.y0=function(t){return arguments.length?(n=t,f):n},f.y1=function(t){return arguments.length?(i=t,f):i},f.defined=function(t){return arguments.length?(a=t,f):a},f.interpolate=function(t){return arguments.length?(s=\"function\"==typeof t?o=t:(o=ki.get(t)||Ai).key,l=o.reverse||o,u=o.closed?\"M\":\"L\",f):s},f.tension=function(t){return arguments.length?(c=t,f):c},f}function ji(t){return t.source}function Ui(t){return t.target}function Vi(t){return t.radius}function Hi(t){return[t.x,t.y]}function qi(){return 64}function Gi(){return\"circle\"}function Zi(t){var e=Math.sqrt(t/Ct);return\"M0,\"+e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+-e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+e+\"Z\"}a.svg.line.radial=function(){var t=Ti(Bi);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Si.reverse=Ei,Ei.reverse=Si,a.svg.area=function(){return Ni(z)},a.svg.area.radial=function(){var t=Ni(Bi);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},a.svg.chord=function(){var t=ji,e=Ui,r=Vi,n=yi,i=mi;function a(r,n){var i,a,u=o(this,t,r,n),c=o(this,e,r,n);return\"M\"+u.p0+s(u.r,u.p1,u.a1-u.a0)+(a=c,((i=u).a0==a.a0&&i.a1==a.a1?l(u.r,u.p1,u.r,u.p0):l(u.r,u.p1,c.r,c.p0)+s(c.r,c.p1,c.a1-c.a0)+l(c.r,c.p1,u.r,u.p0))+\"Z\")}function o(t,e,a,o){var s=e.call(t,a,o),l=r.call(t,s,o),u=n.call(t,s,o)-It,c=i.call(t,s,o)-It;return{r:l,a0:u,a1:c,p0:[l*Math.cos(u),l*Math.sin(u)],p1:[l*Math.cos(c),l*Math.sin(c)]}}function s(t,e,r){return\"A\"+t+\",\"+t+\" 0 \"+ +(r>Ct)+\",1 \"+e}function l(t,e,r,n){return\"Q 0,0 \"+n}return a.radius=function(t){return arguments.length?(r=ge(t),a):r},a.source=function(e){return arguments.length?(t=ge(e),a):t},a.target=function(t){return arguments.length?(e=ge(t),a):e},a.startAngle=function(t){return arguments.length?(n=ge(t),a):n},a.endAngle=function(t){return arguments.length?(i=ge(t),a):i},a},a.svg.diagonal=function(){var t=ji,e=Ui,r=Hi;function n(n,i){var a=t.call(this,n,i),o=e.call(this,n,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return\"M\"+(l=l.map(r))[0]+\"C\"+l[1]+\" \"+l[2]+\" \"+l[3]}return n.source=function(e){return arguments.length?(t=ge(e),n):t},n.target=function(t){return arguments.length?(e=ge(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),e=Hi,r=t.projection;return t.projection=function(t){return arguments.length?r(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-It;return[r*Math.cos(n),r*Math.sin(n)]}}(e=t)):e},t},a.svg.symbol=function(){var t=Gi,e=qi;function r(r,n){return(Yi.get(t.call(this,r,n))||Zi)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ge(e),r):t},r.size=function(t){return arguments.length?(e=ge(t),r):e},r};var Yi=a.map({circle:Zi,cross:function(t){var e=Math.sqrt(t/5)/2;return\"M\"+-3*e+\",\"+-e+\"H\"+-e+\"V\"+-3*e+\"H\"+e+\"V\"+-e+\"H\"+3*e+\"V\"+e+\"H\"+e+\"V\"+3*e+\"H\"+-e+\"V\"+e+\"H\"+-3*e+\"Z\"},diamond:function(t){var e=Math.sqrt(t/(2*Xi)),r=e*Xi;return\"M0,\"+-e+\"L\"+r+\",0 0,\"+e+\" \"+-r+\",0Z\"},square:function(t){var e=Math.sqrt(t)/2;return\"M\"+-e+\",\"+-e+\"L\"+e+\",\"+-e+\" \"+e+\",\"+e+\" \"+-e+\",\"+e+\"Z\"},\"triangle-down\":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return\"M0,\"+r+\"L\"+e+\",\"+-r+\" \"+-e+\",\"+-r+\"Z\"},\"triangle-up\":function(t){var e=Math.sqrt(t/Wi),r=e*Wi/2;return\"M0,\"+-r+\"L\"+e+\",\"+r+\" \"+-e+\",\"+r+\"Z\"}});a.svg.symbolTypes=Yi.keys();var Wi=Math.sqrt(3),Xi=Math.tan(30*Dt);K.transition=function(t){for(var e,r,n=Qi||++ra,i=aa(t),a=[],o=ta||{time:Date.now(),ease:Or,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(r=u[c])&&oa(r,c,i,n,o),e.push(r)}return $i(a,i,n)},K.interrupt=function(t){return this.each(null==t?Ji:Ki(aa(t)))};var Ji=Ki(aa());function Ki(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function $i(t,e,r){return Z(t,ea),t.namespace=e,t.id=r,t}var Qi,ta,ea=[],ra=0;function na(t,e,r,n){var i=t.id,a=t.namespace;return vt(t,\"function\"==typeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[a][i].tween.set(e,r)}))}function ia(t){return null==t&&(t=\"\"),function(){this.textContent=t}}function aa(t){return null==t?\"__transition__\":\"__transition_\"+t+\"__\"}function oa(t,e,r,n,i){var a,o,s,l,u,c=t[r]||(t[r]={active:0,count:0}),f=c[n];function h(r){var i=c.active,h=c[i];for(var d in h&&(h.timer.c=null,h.timer.t=NaN,--c.count,delete c[i],h.event&&h.event.interrupt.call(t,t.__data__,h.index)),c)if(+d<n){var v=c[d];v.timer.c=null,v.timer.t=NaN,--c.count,delete c[d]}o.c=p,ke((function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1}),0,a),c.active=n,f.event&&f.event.start.call(t,t.__data__,e),u=[],f.tween.forEach((function(r,n){(n=n.call(t,t.__data__,e))&&u.push(n)})),l=f.ease,s=f.duration}function p(i){for(var a=i/s,o=l(a),h=u.length;h>0;)u[--h].call(t,o);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,e),--c.count?delete c[n]:delete t[r],1}f||(a=i.time,o=ke((function(t){var e=f.delay;if(o.t=e+a,e<=t)return h(t-e);o.c=h}),0,a),f=c[n]={tween:new k,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++c.count)}ea.call=K.call,ea.empty=K.empty,ea.node=K.node,ea.size=K.size,a.transition=function(t,e){return t&&t.transition?Qi?t.transition(e):t:a.selection().transition(t)},a.transition.prototype=ea,ea.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=$(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var u=this[s],c=-1,f=u.length;++c<f;)(n=u[c])&&(r=t.call(n,n.__data__,c,s))?(\"__data__\"in n&&(r.__data__=n.__data__),oa(r,c,a,i,n[a][i]),e.push(r)):e.push(null)}return $i(o,a,i)},ea.selectAll=function(t){var e,r,n,i,a,o=this.id,s=this.namespace,l=[];t=Q(t);for(var u=-1,c=this.length;++u<c;)for(var f=this[u],h=-1,p=f.length;++h<p;)if(n=f[h]){a=n[s][o],r=t.call(n,n.__data__,h,u),l.push(e=[]);for(var d=-1,v=r.length;++d<v;)(i=r[d])&&oa(i,d,s,o,a),e.push(i)}return $i(l,s,o)},ea.filter=function(t){var e,r,n=[];\"function\"!=typeof t&&(t=pt(t));for(var i=0,a=this.length;i<a;i++){n.push(e=[]);for(var o,s=0,l=(o=this[i]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,i)&&e.push(r)}return $i(n,this.namespace,this.id)},ea.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):vt(this,null==e?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},ea.attr=function(t,e){if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var r=\"transform\"==t?Hr:Tr,n=a.ns.qualify(t);function i(){this.removeAttribute(n)}function o(){this.removeAttributeNS(n.space,n.local)}return na(this,\"attr.\"+t,e,n.local?function(t){return null==t?o:(t+=\"\",function(){var e,i=this.getAttributeNS(n.space,n.local);return i!==t&&(e=r(i,t),function(t){this.setAttributeNS(n.space,n.local,e(t))})})}:function(t){return null==t?i:(t+=\"\",function(){var e,i=this.getAttribute(n);return i!==t&&(e=r(i,t),function(t){this.setAttribute(n,e(t))})})})},ea.attrTween=function(t,e){var r=a.ns.qualify(t);return this.tween(\"attr.\"+t,r.local?function(t,n){var i=e.call(this,t,n,this.getAttributeNS(r.space,r.local));return i&&function(t){this.setAttributeNS(r.space,r.local,i(t))}}:function(t,n){var i=e.call(this,t,n,this.getAttribute(r));return i&&function(t){this.setAttribute(r,i(t))}})},ea.style=function(t,e,r){var n=arguments.length;if(n<3){if(\"string\"!=typeof t){for(r in n<2&&(e=\"\"),t)this.style(r,t[r],e);return this}r=\"\"}function i(){this.style.removeProperty(t)}return na(this,\"style.\"+t,e,(function(e){return null==e?i:(e+=\"\",function(){var n,i=c(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(n=Tr(i,e),function(e){this.style.setProperty(t,n(e),r)})})}))},ea.styleTween=function(t,e,r){return arguments.length<3&&(r=\"\"),this.tween(\"style.\"+t,(function(n,i){var a=e.call(this,n,i,c(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),r)}}))},ea.text=function(t){return na(this,\"text\",t,ia)},ea.remove=function(){var t=this.namespace;return this.each(\"end.transition\",(function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)}))},ea.ease=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].ease:(\"function\"!=typeof t&&(t=a.ease.apply(a,arguments)),vt(this,(function(n){n[r][e].ease=t})))},ea.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:vt(this,\"function\"==typeof t?function(n,i,a){n[r][e].delay=+t.call(n,n.__data__,i,a)}:(t=+t,function(n){n[r][e].delay=t}))},ea.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:vt(this,\"function\"==typeof t?function(n,i,a){n[r][e].duration=Math.max(1,t.call(n,n.__data__,i,a))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},ea.each=function(t,e){var r=this.id,n=this.namespace;if(arguments.length<2){var i=ta,o=Qi;try{Qi=r,vt(this,(function(e,i,a){ta=e[n][r],t.call(e,e.__data__,i,a)}))}finally{ta=i,Qi=o}}else vt(this,(function(i){var o=i[n][r];(o.event||(o.event=a.dispatch(\"start\",\"end\",\"interrupt\"))).on(t,e)}));return this},ea.transition=function(){for(var t,e,r,n=this.id,i=++ra,a=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var u,c=0,f=(u=this[s]).length;c<f;c++)(e=u[c])&&oa(e,c,a,i,{time:(r=e[a][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return $i(o,a,i)},a.svg.axis=function(){var t,e=a.scale.linear(),r=sa,n=6,i=6,o=3,l=[10],u=null;function c(s){s.each((function(){var s,c=a.select(this),f=this.__chart__||e,h=this.__chart__=e.copy(),p=null==u?h.ticks?h.ticks.apply(h,l):h.domain():u,d=null==t?h.tickFormat?h.tickFormat.apply(h,l):z:t,v=c.selectAll(\".tick\").data(p,h),g=v.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",Et),y=a.transition(v.exit()).style(\"opacity\",Et).remove(),m=a.transition(v.order()).style(\"opacity\",1),x=Math.max(n,0)+o,b=Hn(h),_=c.selectAll(\".domain\").data([0]),w=(_.enter().append(\"path\").attr(\"class\",\"domain\"),a.transition(_));g.append(\"line\"),g.append(\"text\");var T,k,A,M,S=g.select(\"line\"),E=m.select(\"line\"),L=v.select(\"text\").text(d),C=g.select(\"text\"),P=m.select(\"text\"),O=\"top\"===r||\"left\"===r?-1:1;if(\"bottom\"===r||\"top\"===r?(s=ua,T=\"x\",A=\"y\",k=\"x2\",M=\"y2\",L.attr(\"dy\",O<0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\"),w.attr(\"d\",\"M\"+b[0]+\",\"+O*i+\"V0H\"+b[1]+\"V\"+O*i)):(s=ca,T=\"y\",A=\"x\",k=\"y2\",M=\"x2\",L.attr(\"dy\",\".32em\").style(\"text-anchor\",O<0?\"end\":\"start\"),w.attr(\"d\",\"M\"+O*i+\",\"+b[0]+\"H0V\"+b[1]+\"H\"+O*i)),S.attr(M,O*n),C.attr(A,O*x),E.attr(k,0).attr(M,O*n),P.attr(T,0).attr(A,O*x),h.rangeBand){var I=h,D=I.rangeBand()/2;f=h=function(t){return I(t)+D}}else f.rangeBand?f=h:y.call(s,h,f);g.call(s,f,h),m.call(s,h,h)}))}return c.scale=function(t){return arguments.length?(e=t,c):e},c.orient=function(t){return arguments.length?(r=t in la?t+\"\":sa,c):r},c.ticks=function(){return arguments.length?(l=s(arguments),c):l},c.tickValues=function(t){return arguments.length?(u=t,c):u},c.tickFormat=function(e){return arguments.length?(t=e,c):t},c.tickSize=function(t){var e=arguments.length;return e?(n=+t,i=+arguments[e-1],c):n},c.innerTickSize=function(t){return arguments.length?(n=+t,c):n},c.outerTickSize=function(t){return arguments.length?(i=+t,c):i},c.tickPadding=function(t){return arguments.length?(o=+t,c):o},c.tickSubdivide=function(){return arguments.length&&c},c};var sa=\"bottom\",la={top:1,right:1,bottom:1,left:1};function ua(t,e,r){t.attr(\"transform\",(function(t){var n=e(t);return\"translate(\"+(isFinite(n)?n:r(t))+\",0)\"}))}function ca(t,e,r){t.attr(\"transform\",(function(t){var n=e(t);return\"translate(0,\"+(isFinite(n)?n:r(t))+\")\"}))}a.svg.brush=function(){var t,e,r=q(h,\"brushstart\",\"brush\",\"brushend\"),n=null,i=null,o=[0,0],s=[0,0],l=!0,u=!0,f=ha[0];function h(t){t.each((function(){var t=a.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",g).on(\"touchstart.brush\",g),e=t.selectAll(\".background\").data([0]);e.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var r=t.selectAll(\".resize\").data(f,z);r.exit().remove(),r.enter().append(\"g\").attr(\"class\",(function(t){return\"resize \"+t})).style(\"cursor\",(function(t){return fa[t]})).append(\"rect\").attr(\"x\",(function(t){return/[ew]$/.test(t)?-3:null})).attr(\"y\",(function(t){return/^[ns]/.test(t)?-3:null})).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),r.style(\"display\",h.empty()?\"none\":null);var o,s=a.transition(t),l=a.transition(e);n&&(o=Hn(n),l.attr(\"x\",o[0]).attr(\"width\",o[1]-o[0]),d(s)),i&&(o=Hn(i),l.attr(\"y\",o[0]).attr(\"height\",o[1]-o[0]),v(s)),p(s)}))}function p(t){t.selectAll(\".resize\").attr(\"transform\",(function(t){return\"translate(\"+o[+/e$/.test(t)]+\",\"+s[+/^s/.test(t)]+\")\"}))}function d(t){t.select(\".extent\").attr(\"x\",o[0]),t.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",o[1]-o[0])}function v(t){t.select(\".extent\").attr(\"y\",s[0]),t.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",s[1]-s[0])}function g(){var f,g,y=this,m=a.select(a.event.target),x=r.of(y,arguments),b=a.select(y),_=m.datum(),w=!/^(n|s)$/.test(_)&&n,T=!/^(e|w)$/.test(_)&&i,k=m.classed(\"extent\"),A=kt(y),M=a.mouse(y),S=a.select(c(y)).on(\"keydown.brush\",(function(){32==a.event.keyCode&&(k||(f=null,M[0]-=o[1],M[1]-=s[1],k=2),V())})).on(\"keyup.brush\",(function(){32==a.event.keyCode&&2==k&&(M[0]+=o[1],M[1]+=s[1],k=0,V())}));if(a.event.changedTouches?S.on(\"touchmove.brush\",C).on(\"touchend.brush\",O):S.on(\"mousemove.brush\",C).on(\"mouseup.brush\",O),b.interrupt().selectAll(\"*\").interrupt(),k)M[0]=o[0]-M[0],M[1]=s[0]-M[1];else if(_){var E=+/w$/.test(_),L=+/^n/.test(_);g=[o[1-E]-M[0],s[1-L]-M[1]],M[0]=o[E],M[1]=s[L]}else a.event.altKey&&(f=M.slice());function C(){var t=a.mouse(y),e=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(o[0]+o[1])/2,(s[0]+s[1])/2]),M[0]=o[+(t[0]<f[0])],M[1]=s[+(t[1]<f[1])]):f=null),w&&P(t,n,0)&&(d(b),e=!0),T&&P(t,i,1)&&(v(b),e=!0),e&&(p(b),x({type:\"brush\",mode:k?\"move\":\"resize\"}))}function P(r,n,i){var a,c,h=Hn(n),p=h[0],d=h[1],v=M[i],g=i?s:o,y=g[1]-g[0];if(k&&(p-=v,d-=y+v),a=(i?u:l)?Math.max(p,Math.min(d,r[i])):r[i],k?c=(a+=v)+y:(f&&(v=Math.max(p,Math.min(d,2*f[i]-a))),v<a?(c=a,a=v):c=v),g[0]!=a||g[1]!=c)return i?e=null:t=null,g[0]=a,g[1]=c,!0}function O(){C(),b.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",h.empty()?\"none\":null),a.select(\"body\").style(\"cursor\",null),S.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null),A(),x({type:\"brushend\"})}b.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null),a.select(\"body\").style(\"cursor\",m.style(\"cursor\")),x({type:\"brushstart\"}),C()}return h.event=function(n){n.each((function(){var n=r.of(this,arguments),i={x:o,y:s,i:t,j:e},l=this.__chart__||i;this.__chart__=i,Qi?a.select(this).transition().each(\"start.brush\",(function(){t=l.i,e=l.j,o=l.x,s=l.y,n({type:\"brushstart\"})})).tween(\"brush:brush\",(function(){var r=kr(o,i.x),a=kr(s,i.y);return t=e=null,function(t){o=i.x=r(t),s=i.y=a(t),n({type:\"brush\",mode:\"resize\"})}})).each(\"end.brush\",(function(){t=i.i,e=i.j,n({type:\"brush\",mode:\"resize\"}),n({type:\"brushend\"})})):(n({type:\"brushstart\"}),n({type:\"brush\",mode:\"resize\"}),n({type:\"brushend\"}))}))},h.x=function(t){return arguments.length?(f=ha[!(n=t)<<1|!i],h):n},h.y=function(t){return arguments.length?(f=ha[!n<<1|!(i=t)],h):i},h.clamp=function(t){return arguments.length?(n&&i?(l=!!t[0],u=!!t[1]):n?l=!!t:i&&(u=!!t),h):n&&i?[l,u]:n?l:i?u:null},h.extent=function(r){var a,l,u,c,f;return arguments.length?(n&&(a=r[0],l=r[1],i&&(a=a[0],l=l[0]),t=[a,l],n.invert&&(a=n(a),l=n(l)),l<a&&(f=a,a=l,l=f),a==o[0]&&l==o[1]||(o=[a,l])),i&&(u=r[0],c=r[1],n&&(u=u[1],c=c[1]),e=[u,c],i.invert&&(u=i(u),c=i(c)),c<u&&(f=u,u=c,c=f),u==s[0]&&c==s[1]||(s=[u,c])),h):(n&&(t?(a=t[0],l=t[1]):(a=o[0],l=o[1],n.invert&&(a=n.invert(a),l=n.invert(l)),l<a&&(f=a,a=l,l=f))),i&&(e?(u=e[0],c=e[1]):(u=s[0],c=s[1],i.invert&&(u=i.invert(u),c=i.invert(c)),c<u&&(f=u,u=c,c=f))),n&&i?[[a,u],[l,c]]:n?[a,l]:i&&[u,c])},h.clear=function(){return h.empty()||(o=[0,0],s=[0,0],t=e=null),h},h.empty=function(){return!!n&&o[0]==o[1]||!!i&&s[0]==s[1]},a.rebind(h,r,\"on\")};var fa={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"},ha=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]];function pa(t){return JSON.parse(t.responseText)}function da(t){var e=l.createRange();return e.selectNode(l.body),e.createContextualFragment(t.responseText)}a.text=ye((function(t){return t.responseText})),a.json=function(t,e){return me(t,\"application/json\",pa,e)},a.html=function(t,e){return me(t,\"text/html\",da,e)},a.xml=ye((function(t){return t.responseXML})),void 0===(i=\"function\"==typeof(n=a)?n.call(e,r,e,t):n)||(t.exports=i)}).apply(self)},88294:function(t,e,r){\"use strict\";t.exports=r(62849)},62849:function(t,e,r){\"use strict\";var n=r(91358),i=r(53435),a=r(18863),o=r(21527),s=r(71299),l=r(46775),u=r(30120),c=r(64941),f=r(90660),h=r(27084);function p(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,u=t.length/2;l<u;l++)s[2*l]=i((t[2*l]-r)*a,0,1),s[2*l+1]=i((t[2*l+1]-n)*o,0,1);return s}t.exports=function(t,e){e||(e={}),t=u(t,\"float64\"),e=s(e,{bounds:\"range bounds dataBox databox\",maxDepth:\"depth maxDepth maxdepth level maxLevel maxlevel levels\",dtype:\"type dtype format out dst output destination\"});var r=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var d,v=p(t,i),g=t.length>>>1;e.dtype||(e.dtype=\"array\"),\"string\"==typeof e.dtype?d=new(f(e.dtype))(g):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=g));for(var y=0;y<g;++y)d[y]=y;var m=[],x=[],b=[],_=[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l=m[o]||(m[o]=[]),u=b[o]||(b[o]=[]),c=x[o]||(x[o]=[]),f=l.length;if(++o>r||s>1073741824){for(var h=0;h<a.length;h++)l.push(a[h]),u.push(s),c.push(null,null,null,null);return f}if(l.push(a[0]),u.push(s),a.length<=1)return c.push(null,null,null,null),f;for(var p=.5*i,d=e+p,g=n+p,y=[],_=[],w=[],T=[],k=1,A=a.length;k<A;k++){var M=a[k],S=v[2*M],E=v[2*M+1];S<d?E<g?y.push(M):_.push(M):E<g?w.push(M):T.push(M)}return s<<=2,c.push(t(e,n,p,y,o,s),t(e,g,p,_,o,s+1),t(d,n,p,w,o,s+2),t(d,g,p,T,o,s+3)),f}(0,0,1,d,0,1);for(var w=0,T=0;T<m.length;T++){var k=m[T];if(d.set)d.set(k,w);else for(var A=0,M=k.length;A<M;A++)d[A+w]=k[A];var S=w+m[T].length;_[T]=[w,S],w=S}return d.range=function(){for(var e,r=[],o=arguments.length;o--;)r[o]=arguments[o];if(c(r[r.length-1])){var u=r.pop();r.length||null==u.x&&null==u.l&&null==u.left||(r=[u],e={}),e=s(u,{level:\"level maxLevel\",d:\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\",lod:\"lod details ranges offsets\"})}else e={};r.length||(r=i);var f,d=a.apply(void 0,r),v=[Math.min(d.x,d.x+d.width),Math.min(d.y,d.y+d.height),Math.max(d.x,d.x+d.width),Math.max(d.y,d.y+d.height)],g=v[0],y=v[1],w=v[2],T=v[3],k=p([g,y,w,T],i),A=k[0],M=k[1],S=k[2],L=k[3],C=l(e.level,m.length);null!=e.d&&(\"number\"==typeof e.d?f=[e.d,e.d]:e.d.length&&(f=e.d),C=Math.min(Math.max(Math.ceil(-h(Math.abs(f[0])/(i[2]-i[0]))),Math.ceil(-h(Math.abs(f[1])/(i[3]-i[1])))),C));if(C=Math.min(C,m.length),e.lod)return function(t,e,r,i,a){for(var o=[],s=0;s<a;s++){var l=b[s],u=_[s][0],c=E(t,e,s),f=E(r,i,s),h=n.ge(l,c),p=n.gt(l,f,h,l.length-1);o[s]=[h+u,p+u]}return o}(A,M,S,L,C);var P=[];return function e(r,n,i,a,o,s){if(null!==o&&null!==s&&!(A>r+i||M>n+i||S<r||L<n||a>=C||o===s)){var l=m[a];void 0===s&&(s=l.length);for(var u=o;u<s;u++){var c=l[u],f=t[2*c],h=t[2*c+1];f>=g&&f<=w&&h>=y&&h<=T&&P.push(c)}var p=x[a],d=p[4*o+0],v=p[4*o+1],b=p[4*o+2],_=p[4*o+3],k=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(p,o+1),E=.5*i,O=a+1;e(r,n,E,O,d,v||b||_||k),e(r,n+E,E,O,v,b||_||k),e(r+E,n,E,O,b,_||k),e(r+E,n+E,E,O,_,k)}}(0,0,1,0,0,1),P},d;function E(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return n}}},30774:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(60302),i=6378137;function a(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,a,o,l,u=0,c=t.length;if(c>2){for(l=0;l<c;l++)l===c-2?(n=c-2,a=c-1,o=0):l===c-1?(n=c-1,a=0,o=1):(n=l,a=l+1,o=l+2),e=t[n],r=t[a],u+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));u=u*i*i/2}return u}function s(t){return t*Math.PI/180}e.default=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case\"Polygon\":return a(t.coordinates);case\"MultiPolygon\":for(e=0;e<t.coordinates.length;e++)r+=a(t.coordinates[e]);return r;case\"Point\":case\"MultiPoint\":case\"LineString\":case\"MultiLineString\":return 0}return 0}(e)}),0)}},23132:function(t,e){\"use strict\";function r(t,e,r){void 0===r&&(r={});var n={type:\"Feature\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error(\"coordinates is required\");if(!Array.isArray(t))throw new Error(\"coordinates must be an Array\");if(t.length<2)throw new Error(\"coordinates must be at least 2 numbers long\");if(!p(t[0])||!p(t[1]))throw new Error(\"coordinates must contain numbers\");return r({type:\"Point\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\"First and last Position are not equivalent.\")}return r({type:\"Polygon\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\"coordinates must be an array of two or more positions\");return r({type:\"LineString\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\"FeatureCollection\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\"MultiLineString\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPoint\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPolygon\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t*n}function f(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\"Point\":return n(e).geometry;case\"LineString\":return a(e).geometry;case\"Polygon\":return i(e).geometry;case\"MultiPoint\":return l(e).geometry;case\"MultiLineString\":return s(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\"GeometryCollection\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\"precision must be a positive number\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\"kilometers\"),void 0===r&&(r=\"kilometers\"),!(t>=0))throw new Error(\"length must be a positive number\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\"meters\"),void 0===n&&(n=\"kilometers\"),!(t>=0))throw new Error(\"area must be a positive number\");var i=e.areaFactors[r];if(!i)throw new Error(\"invalid original units\");var a=e.areaFactors[n];if(!a)throw new Error(\"invalid final units\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!==t.length&&6!==t.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!p(t))throw new Error(\"bbox must only contain numbers\")}))},e.validateId=function(t){if(!t)throw new Error(\"id is required\");if(-1===[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")}},60302:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(23132);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\"FeatureCollection\"===d,g=\"Feature\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\"GeometryCollection\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\"Polygon\"!==w&&\"MultiPolygon\"!==w?0:1,w){case null:break;case\"Point\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\"LineString\":case\"MultiPoint\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\"MultiPoint\"===w&&b++}\"LineString\"===w&&b++;break;case\"Polygon\":case\"MultiLineString\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\"MultiLineString\"===w&&b++,\"Polygon\"===w&&_++}\"Polygon\"===w&&b++;break;case\"MultiPolygon\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\"GeometryCollection\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var r;switch(t.type){case\"FeatureCollection\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"===t.type)e(t,0);else if(\"FeatureCollection\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\"FeatureCollection\"===t.type,d=\"Feature\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\"GeometryCollection\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1===e(a,h,u,c,f))return!1;break;case\"GeometryCollection\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\"MultiPoint\":s=\"Point\";break;case\"MultiLineString\":s=\"LineString\";break;case\"MultiPolygon\":s=\"Polygon\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\"Point\"!==s&&\"MultiPoint\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\"LineString\":if(!1===e(t,r,i,0,0))return!1;break;case\"Polygon\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":return n.point(u,l,e);case\"MultiPoint\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\"LineString\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},85268:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(27138);function i(t){var e=[1/0,1/0,-1/0,-1/0];return n.coordEach(t,(function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])})),e}i.default=i,e.default=i},94228:function(t,e){\"use strict\";function r(t,e,r){void 0===r&&(r={});var n={type:\"Feature\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){if(void 0===n&&(n={}),!t)throw new Error(\"coordinates is required\");if(!Array.isArray(t))throw new Error(\"coordinates must be an Array\");if(t.length<2)throw new Error(\"coordinates must be at least 2 numbers long\");if(!p(t[0])||!p(t[1]))throw new Error(\"coordinates must contain numbers\");return r({type:\"Point\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\"First and last Position are not equivalent.\")}return r({type:\"Polygon\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\"coordinates must be an array of two or more positions\");return r({type:\"LineString\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\"FeatureCollection\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\"MultiLineString\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPoint\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPolygon\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t*n}function f(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:1.0936*e.earthRadius},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1.0936133},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\"Point\":return n(e).geometry;case\"LineString\":return a(e).geometry;case\"Polygon\":return i(e).geometry;case\"MultiPoint\":return l(e).geometry;case\"MultiLineString\":return s(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\"GeometryCollection\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\"precision must be a positive number\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\"kilometers\"),void 0===r&&(r=\"kilometers\"),!(t>=0))throw new Error(\"length must be a positive number\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\"meters\"),void 0===n&&(n=\"kilometers\"),!(t>=0))throw new Error(\"area must be a positive number\");var i=e.areaFactors[r];if(!i)throw new Error(\"invalid original units\");var a=e.areaFactors[n];if(!a)throw new Error(\"invalid final units\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!==t.length&&6!==t.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!p(t))throw new Error(\"bbox must only contain numbers\")}))},e.validateId=function(t){if(!t)throw new Error(\"id is required\");if(-1===[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")}},27138:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(94228);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\"FeatureCollection\"===d,g=\"Feature\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\"GeometryCollection\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\"Polygon\"!==w&&\"MultiPolygon\"!==w?0:1,w){case null:break;case\"Point\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\"LineString\":case\"MultiPoint\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\"MultiPoint\"===w&&b++}\"LineString\"===w&&b++;break;case\"Polygon\":case\"MultiLineString\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\"MultiLineString\"===w&&b++,\"Polygon\"===w&&_++}\"Polygon\"===w&&b++;break;case\"MultiPolygon\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\"GeometryCollection\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var r;switch(t.type){case\"FeatureCollection\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"===t.type)e(t,0);else if(\"FeatureCollection\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\"FeatureCollection\"===t.type,d=\"Feature\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\"GeometryCollection\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1===e(a,h,u,c,f))return!1;break;case\"GeometryCollection\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\"MultiPoint\":s=\"Point\";break;case\"MultiLineString\":s=\"LineString\";break;case\"MultiPolygon\":s=\"Polygon\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\"Point\"!==s&&\"MultiPoint\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\"LineString\":if(!1===e(t,r,i,0,0))return!1;break;case\"Polygon\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":return n.point(u,l,e);case\"MultiPoint\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\"LineString\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},29261:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(88553),i=r(64182);e.default=function(t,e){void 0===e&&(e={});var r=0,a=0,o=0;return n.coordEach(t,(function(t){r+=t[0],a+=t[1],o++})),i.point([r/o,a/o],e.properties)}},64182:function(t,e){\"use strict\";function r(t,e,r){void 0===r&&(r={});var n={type:\"Feature\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:\"Point\",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\"First and last Position are not equivalent.\")}return r({type:\"Polygon\",coordinates:t},e,n)}function a(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error(\"coordinates must be an array of two or more positions\");return r({type:\"LineString\",coordinates:t},e,n)}function o(t,e){void 0===e&&(e={});var r={type:\"FeatureCollection\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function s(t,e,n){return void 0===n&&(n={}),r({type:\"MultiLineString\",coordinates:t},e,n)}function l(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPoint\",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:\"MultiPolygon\",coordinates:t},e,n)}function c(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t*n}function f(t,r){void 0===r&&(r=\"kilometers\");var n=e.factors[r];if(!n)throw new Error(r+\" units is invalid\");return t/n}function h(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\\s*$/.test(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\"Point\":return n(e).geometry;case\"LineString\":return a(e).geometry;case\"Polygon\":return i(e).geometry;case\"MultiPoint\":return l(e).geometry;case\"MultiLineString\":return s(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return i(t,e)})),r)},e.lineString=a,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),o(t.map((function(t){return a(t,e)})),r)},e.featureCollection=o,e.multiLineString=s,e.multiPoint=l,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:\"GeometryCollection\",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\"precision must be a positive number\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=f,e.lengthToDegrees=function(t,e){return h(f(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=h,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e=\"kilometers\"),void 0===r&&(r=\"kilometers\"),!(t>=0))throw new Error(\"length must be a positive number\");return c(f(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r=\"meters\"),void 0===n&&(n=\"kilometers\"),!(t>=0))throw new Error(\"area must be a positive number\");var i=e.areaFactors[r];if(!i)throw new Error(\"invalid original units\");var a=e.areaFactors[n];if(!a)throw new Error(\"invalid final units\");return t/i*a},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!==t.length&&6!==t.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!p(t))throw new Error(\"bbox must only contain numbers\")}))},e.validateId=function(t){if(!t)throw new Error(\"id is required\");if(-1===[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")},e.radians2degrees=function(){throw new Error(\"method has been renamed to `radiansToDegrees`\")},e.degrees2radians=function(){throw new Error(\"method has been renamed to `degreesToRadians`\")},e.distanceToDegrees=function(){throw new Error(\"method has been renamed to `lengthToDegrees`\")},e.distanceToRadians=function(){throw new Error(\"method has been renamed to `lengthToRadians`\")},e.radiansToDistance=function(){throw new Error(\"method has been renamed to `radiansToLength`\")},e.bearingToAngle=function(){throw new Error(\"method has been renamed to `bearingToAzimuth`\")},e.convertDistance=function(){throw new Error(\"method has been renamed to `convertLength`\")}},88553:function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(64182);function i(t,e,r){if(null!==t)for(var n,a,o,s,l,u,c,f,h=0,p=0,d=t.type,v=\"FeatureCollection\"===d,g=\"Feature\"===d,y=v?t.features.length:1,m=0;m<y;m++){l=(f=!!(c=v?t.features[m].geometry:g?t.geometry:t)&&\"GeometryCollection\"===c.type)?c.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=f?c.geometries[x]:c)){u=s.coordinates;var w=s.type;switch(h=!r||\"Polygon\"!==w&&\"MultiPolygon\"!==w?0:1,w){case null:break;case\"Point\":if(!1===e(u,p,m,b,_))return!1;p++,b++;break;case\"LineString\":case\"MultiPoint\":for(n=0;n<u.length;n++){if(!1===e(u[n],p,m,b,_))return!1;p++,\"MultiPoint\"===w&&b++}\"LineString\"===w&&b++;break;case\"Polygon\":case\"MultiLineString\":for(n=0;n<u.length;n++){for(a=0;a<u[n].length-h;a++){if(!1===e(u[n][a],p,m,b,_))return!1;p++}\"MultiLineString\"===w&&b++,\"Polygon\"===w&&_++}\"Polygon\"===w&&b++;break;case\"MultiPolygon\":for(n=0;n<u.length;n++){for(_=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-h;o++){if(!1===e(u[n][a][o],p,m,b,_))return!1;p++}_++}b++}break;case\"GeometryCollection\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var r;switch(t.type){case\"FeatureCollection\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"===t.type)e(t,0);else if(\"FeatureCollection\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,u,c,f,h=0,p=\"FeatureCollection\"===t.type,d=\"Feature\"===t.type,v=p?t.features.length:1;for(r=0;r<v;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,f=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\"GeometryCollection\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1===e(a,h,u,c,f))return!1;break;case\"GeometryCollection\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],h,u,c,f))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1===e(null,h,u,c,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\"MultiPoint\":s=\"Point\";break;case\"MultiLineString\":s=\"LineString\";break;case\"MultiPolygon\":s=\"Polygon\"}for(var u=0;u<t.coordinates.length;u++){var c={type:s,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){l(t,(function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\"Point\"!==s&&\"MultiPoint\"!==s){var l,u=0,c=0,f=0;return!1!==i(t,(function(i,s,h,p,d){if(void 0===l||r>u||p>c||d>f)return l=i,u=r,c=p,f=d,void(o=0);var v=n.lineString([l,i],t.properties);if(!1===e(v,r,a,d,o))return!1;o++,l=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\"LineString\":if(!1===e(t,r,i,0,0))return!1;break;case\"Polygon\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var a=r;return i(t,(function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)}),n),a},e.propEach=a,e.propReduce=function(t,e,r){var n=r;return a(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=o,e.featureReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=s,e.geomReduce=function(t,e,r){var n=r;return s(t,(function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)})),n},e.flattenEach=l,e.flattenReduce=function(t,e,r){var n=r;return l(t,(function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s<0&&(s=u.length+s-1),n.lineString([u[s],u[s+1]],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s-1),n.lineString([u[o][s],u[o][s+1]],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s-1),n.lineString([u[a][s],u[a][s+1]],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s-1),n.lineString([u[a][o][s],u[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\"FeatureCollection\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\"Feature\":l=l||t.properties,r=t.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r=t;break;default:throw new Error(\"geojson is invalid\")}if(null===r)return null;var u=r.coordinates;switch(r.type){case\"Point\":return n.point(u,l,e);case\"MultiPoint\":return a<0&&(a=u.length+a),n.point(u[a],l,e);case\"LineString\":return s<0&&(s=u.length+s),n.point(u[s],l,e);case\"Polygon\":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),n.point(u[o][s],l,e);case\"MultiLineString\":return a<0&&(a=u.length+a),s<0&&(s=u[a].length+s),n.point(u[a][s],l,e);case\"MultiPolygon\":return a<0&&(a=u.length+a),o<0&&(o=u[a].length+o),s<0&&(s=u[a][o].length-s),n.point(u[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},65185:function(t){t.exports=function(t){var e=0,r=0,n=0,i=0;return t.map((function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case\"a\":t[6]+=n,t[7]+=i;break;case\"v\":t[1]+=i;break;case\"h\":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=i}switch(o){case\"Z\":n=e,i=r;break;case\"H\":n=t[1];break;case\"V\":i=t[1];break;case\"M\":n=e=t[1],i=r=t[2];break;default:n=t[t.length-2],i=t[t.length-1]}return t}))}},21527:function(t){\"use strict\";t.exports=function(t,e){if(!t||null==t.length)throw Error(\"Argument should be an array\");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var i=-1/0,a=1/0,o=n,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);r[n]=a,r[e+n]=i}return r}},6851:function(t){\"use strict\";t.exports=function(t,e,r){if(\"function\"==typeof Array.prototype.findIndex)return t.findIndex(e,r);if(\"function\"!=typeof e)throw new TypeError(\"predicate must be a function\");var n=Object(t),i=n.length;if(0===i)return-1;for(var a=0;a<i;a++)if(e.call(r,n[a],a,n))return a;return-1}},54:function(t,e,r){\"use strict\";var n=r(21527);t.exports=function(t,e,r){if(!t||null==t.length)throw Error(\"Argument should be an array\");null==e&&(e=1),null==r&&(r=n(t,e));for(var i=0;i<e;i++){var a=r[e+i],o=r[i],s=i,l=t.length;if(a===1/0&&o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===o?0:1;else{var u=a-o;for(s=i;s<l;s+=e)isNaN(t[s])||(t[s]=0===u?.5:(t[s]-o)/u)}}return t}},57471:function(t){t.exports=function(t,e){var r=\"number\"==typeof t,n=\"number\"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var i=(e|=0)-(t|=0);if(i<0)throw new Error(\"array length must be positive\");for(var a=new Array(i),o=0,s=t;o<i;o++,s++)a[o]=s;return a}},32791:function(t,e,r){\"use strict\";var n=r(90386);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}var a,o,s=r(79616).codes,l=s.ERR_AMBIGUOUS_ARGUMENT,u=s.ERR_INVALID_ARG_TYPE,c=s.ERR_INVALID_ARG_VALUE,f=s.ERR_INVALID_RETURN_VALUE,h=s.ERR_MISSING_ARGS,p=r(73894),d=r(43827).inspect,v=r(43827).types,g=v.isPromise,y=v.isRegExp,m=Object.assign?Object.assign:r(73523).assign,x=Object.is?Object.is:r(64003);function b(){var t=r(74061);a=t.isDeepEqual,o=t.isDeepStrictEqual}new Map;var _=!1,w=t.exports=M,T={};function k(t){if(t.message instanceof Error)throw t.message;throw new p(t)}function A(t,e,r,n){if(!r){var i=!1;if(0===e)i=!0,n=\"No value argument passed to `assert.ok()`\";else if(n instanceof Error)throw n;var a=new p({actual:r,expected:!0,message:n,operator:\"==\",stackStartFn:t});throw a.generatedMessage=i,a}}function M(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[M,e.length].concat(e))}w.fail=function t(e,r,i,a,o){var s,l=arguments.length;if(0===l?s=\"Failed\":1===l?(i=e,e=void 0):(!1===_&&(_=!0,(n.emitWarning?n.emitWarning:console.warn.bind(console))(\"assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.\",\"DeprecationWarning\",\"DEP0094\")),2===l&&(a=\"!=\")),i instanceof Error)throw i;var u={actual:e,expected:r,operator:void 0===a?\"fail\":a,stackStartFn:o||t};void 0!==i&&(u.message=i);var c=new p(u);throw s&&(c.message=s,c.generatedMessage=!0),c},w.AssertionError=p,w.ok=M,w.equal=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");e!=r&&k({actual:e,expected:r,message:n,operator:\"==\",stackStartFn:t})},w.notEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");e==r&&k({actual:e,expected:r,message:n,operator:\"!=\",stackStartFn:t})},w.deepEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");void 0===a&&b(),a(e,r)||k({actual:e,expected:r,message:n,operator:\"deepEqual\",stackStartFn:t})},w.notDeepEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");void 0===a&&b(),a(e,r)&&k({actual:e,expected:r,message:n,operator:\"notDeepEqual\",stackStartFn:t})},w.deepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");void 0===a&&b(),o(e,r)||k({actual:e,expected:r,message:n,operator:\"deepStrictEqual\",stackStartFn:t})},w.notDeepStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");void 0===a&&b(),o(e,r)&&k({actual:e,expected:r,message:n,operator:\"notDeepStrictEqual\",stackStartFn:t})},w.strictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");x(e,r)||k({actual:e,expected:r,message:n,operator:\"strictEqual\",stackStartFn:t})},w.notStrictEqual=function t(e,r,n){if(arguments.length<2)throw new h(\"actual\",\"expected\");x(e,r)&&k({actual:e,expected:r,message:n,operator:\"notStrictEqual\",stackStartFn:t})};var S=function t(e,r,n){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),r.forEach((function(t){t in e&&(void 0!==n&&\"string\"==typeof n[t]&&y(e[t])&&e[t].test(n[t])?i[t]=n[t]:i[t]=e[t])}))};function E(t,e,r,n){if(\"function\"!=typeof e){if(y(e))return e.test(t);if(2===arguments.length)throw new u(\"expected\",[\"Function\",\"RegExp\"],e);if(\"object\"!==i(t)||null===t){var s=new p({actual:t,expected:e,message:r,operator:\"deepStrictEqual\",stackStartFn:n});throw s.operator=n.name,s}var l=Object.keys(e);if(e instanceof Error)l.push(\"name\",\"message\");else if(0===l.length)throw new c(\"error\",e,\"may not be an empty object\");return void 0===a&&b(),l.forEach((function(i){\"string\"==typeof t[i]&&y(e[i])&&e[i].test(t[i])||function(t,e,r,n,i,a){if(!(r in t)||!o(t[r],e[r])){if(!n){var s=new S(t,i),l=new S(e,i,t),u=new p({actual:s,expected:l,operator:\"deepStrictEqual\",stackStartFn:a});throw u.actual=t,u.expected=e,u.operator=a.name,u}k({actual:t,expected:e,message:n,operator:a.name,stackStartFn:a})}}(t,e,i,r,l,n)})),!0}return void 0!==e.prototype&&t instanceof e||!Error.isPrototypeOf(e)&&!0===e.call({},t)}function L(t){if(\"function\"!=typeof t)throw new u(\"fn\",\"Function\",t);try{t()}catch(t){return t}return T}function C(t){return g(t)||null!==t&&\"object\"===i(t)&&\"function\"==typeof t.then&&\"function\"==typeof t.catch}function P(t){return Promise.resolve().then((function(){var e;if(\"function\"==typeof t){if(!C(e=t()))throw new f(\"instance of Promise\",\"promiseFn\",e)}else{if(!C(t))throw new u(\"promiseFn\",[\"Function\",\"Promise\"],t);e=t}return Promise.resolve().then((function(){return e})).then((function(){return T})).catch((function(t){return t}))}))}function O(t,e,r,n){if(\"string\"==typeof r){if(4===arguments.length)throw new u(\"error\",[\"Object\",\"Error\",\"Function\",\"RegExp\"],r);if(\"object\"===i(e)&&null!==e){if(e.message===r)throw new l(\"error/message\",'The error message \"'.concat(e.message,'\" is identical to the message.'))}else if(e===r)throw new l(\"error/message\",'The error \"'.concat(e,'\" is identical to the message.'));n=r,r=void 0}else if(null!=r&&\"object\"!==i(r)&&\"function\"!=typeof r)throw new u(\"error\",[\"Object\",\"Error\",\"Function\",\"RegExp\"],r);if(e===T){var a=\"\";r&&r.name&&(a+=\" (\".concat(r.name,\")\")),a+=n?\": \".concat(n):\".\";var o=\"rejects\"===t.name?\"rejection\":\"exception\";k({actual:void 0,expected:r,operator:t.name,message:\"Missing expected \".concat(o).concat(a),stackStartFn:t})}if(r&&!E(e,r,n,t))throw e}function I(t,e,r,n){if(e!==T){if(\"string\"==typeof r&&(n=r,r=void 0),!r||E(e,r)){var i=n?\": \".concat(n):\".\",a=\"doesNotReject\"===t.name?\"rejection\":\"exception\";k({actual:e,expected:r,operator:t.name,message:\"Got unwanted \".concat(a).concat(i,\"\\n\")+'Actual message: \"'.concat(e&&e.message,'\"'),stackStartFn:t})}throw e}}function D(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];A.apply(void 0,[D,e.length].concat(e))}w.throws=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];O.apply(void 0,[t,L(e)].concat(n))},w.rejects=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return O.apply(void 0,[t,e].concat(n))}))},w.doesNotThrow=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];I.apply(void 0,[t,L(e)].concat(n))},w.doesNotReject=function t(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return P(e).then((function(e){return I.apply(void 0,[t,e].concat(n))}))},w.ifError=function t(e){if(null!=e){var r=\"ifError got unwanted exception: \";\"object\"===i(e)&&\"string\"==typeof e.message?0===e.message.length&&e.constructor?r+=e.constructor.name:r+=e.message:r+=d(e);var n=new p({actual:e,expected:null,operator:\"ifError\",message:r,stackStartFn:t}),a=e.stack;if(\"string\"==typeof a){var o=a.split(\"\\n\");o.shift();for(var s=n.stack.split(\"\\n\"),l=0;l<o.length;l++){var u=s.indexOf(o[l]);if(-1!==u){s=s.slice(0,u);break}}n.stack=\"\".concat(s.join(\"\\n\"),\"\\n\").concat(o.join(\"\\n\"))}throw n}},w.strict=m(D,w,{equal:w.strictEqual,deepEqual:w.deepStrictEqual,notEqual:w.notStrictEqual,notDeepEqual:w.notDeepStrictEqual}),w.strict.strict=w.strict},73894:function(t,e,r){\"use strict\";var n=r(90386);function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,e){return!e||\"object\"!==h(e)&&\"function\"!=typeof e?s(t):e}function s(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function l(t){var e=\"function\"==typeof Map?new Map:void 0;return l=function(t){if(null===t||(r=t,-1===Function.toString.call(r).indexOf(\"[native code]\")))return t;var r;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return u(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},l(t)}function u(t,e,r){return u=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var i=new(Function.bind.apply(t,n));return r&&c(i,r.prototype),i},u.apply(null,arguments)}function c(t,e){return c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},c(t,e)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}function h(t){return h=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},h(t)}var p=r(43827).inspect,d=r(79616).codes.ERR_INVALID_ARG_TYPE;function v(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}var g=\"\",y=\"\",m=\"\",x=\"\",b={deepStrictEqual:\"Expected values to be strictly deep-equal:\",strictEqual:\"Expected values to be strictly equal:\",strictEqualObject:'Expected \"actual\" to be reference-equal to \"expected\":',deepEqual:\"Expected values to be loosely deep-equal:\",equal:\"Expected values to be loosely equal:\",notDeepStrictEqual:'Expected \"actual\" not to be strictly deep-equal to:',notStrictEqual:'Expected \"actual\" to be strictly unequal to:',notStrictEqualObject:'Expected \"actual\" not to be reference-equal to \"expected\":',notDeepEqual:'Expected \"actual\" not to be loosely deep-equal to:',notEqual:'Expected \"actual\" to be loosely unequal to:',notIdentical:\"Values identical but not reference-equal:\"};function _(t){var e=Object.keys(t),r=Object.create(Object.getPrototypeOf(t));return e.forEach((function(e){r[e]=t[e]})),Object.defineProperty(r,\"message\",{value:t.message}),r}function w(t){return p(t,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}var T=function(t){function e(t){var r;if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,e),\"object\"!==h(t)||null===t)throw new d(\"options\",\"Object\",t);var i=t.message,a=t.operator,l=t.stackStartFn,u=t.actual,c=t.expected,p=Error.stackTraceLimit;if(Error.stackTraceLimit=0,null!=i)r=o(this,f(e).call(this,String(i)));else if(n.stderr&&n.stderr.isTTY&&(n.stderr&&n.stderr.getColorDepth&&1!==n.stderr.getColorDepth()?(g=\"\u001b[34m\",y=\"\u001b[32m\",x=\"\u001b[39m\",m=\"\u001b[31m\"):(g=\"\",y=\"\",x=\"\",m=\"\")),\"object\"===h(u)&&null!==u&&\"object\"===h(c)&&null!==c&&\"stack\"in u&&u instanceof Error&&\"stack\"in c&&c instanceof Error&&(u=_(u),c=_(c)),\"deepStrictEqual\"===a||\"strictEqual\"===a)r=o(this,f(e).call(this,function(t,e,r){var i=\"\",a=\"\",o=0,s=\"\",l=!1,u=w(t),c=u.split(\"\\n\"),f=w(e).split(\"\\n\"),p=0,d=\"\";if(\"strictEqual\"===r&&\"object\"===h(t)&&\"object\"===h(e)&&null!==t&&null!==e&&(r=\"strictEqualObject\"),1===c.length&&1===f.length&&c[0]!==f[0]){var _=c[0].length+f[0].length;if(_<=10){if(!(\"object\"===h(t)&&null!==t||\"object\"===h(e)&&null!==e||0===t&&0===e))return\"\".concat(b[r],\"\\n\\n\")+\"\".concat(c[0],\" !== \").concat(f[0],\"\\n\")}else if(\"strictEqualObject\"!==r&&_<(n.stderr&&n.stderr.isTTY?n.stderr.columns:80)){for(;c[0][p]===f[0][p];)p++;p>2&&(d=\"\\n  \".concat(function(t,e){if(e=Math.floor(e),0==t.length||0==e)return\"\";var r=t.length*e;for(e=Math.floor(Math.log(e)/Math.log(2));e;)t+=t,e--;return t+t.substring(0,r-t.length)}(\" \",p),\"^\"),p=0)}}for(var T=c[c.length-1],k=f[f.length-1];T===k&&(p++<2?s=\"\\n  \".concat(T).concat(s):i=T,c.pop(),f.pop(),0!==c.length&&0!==f.length);)T=c[c.length-1],k=f[f.length-1];var A=Math.max(c.length,f.length);if(0===A){var M=u.split(\"\\n\");if(M.length>30)for(M[26]=\"\".concat(g,\"...\").concat(x);M.length>27;)M.pop();return\"\".concat(b.notIdentical,\"\\n\\n\").concat(M.join(\"\\n\"),\"\\n\")}p>3&&(s=\"\\n\".concat(g,\"...\").concat(x).concat(s),l=!0),\"\"!==i&&(s=\"\\n  \".concat(i).concat(s),i=\"\");var S=0,E=b[r]+\"\\n\".concat(y,\"+ actual\").concat(x,\" \").concat(m,\"- expected\").concat(x),L=\" \".concat(g,\"...\").concat(x,\" Lines skipped\");for(p=0;p<A;p++){var C=p-o;if(c.length<p+1)C>1&&p>2&&(C>4?(a+=\"\\n\".concat(g,\"...\").concat(x),l=!0):C>3&&(a+=\"\\n  \".concat(f[p-2]),S++),a+=\"\\n  \".concat(f[p-1]),S++),o=p,i+=\"\\n\".concat(m,\"-\").concat(x,\" \").concat(f[p]),S++;else if(f.length<p+1)C>1&&p>2&&(C>4?(a+=\"\\n\".concat(g,\"...\").concat(x),l=!0):C>3&&(a+=\"\\n  \".concat(c[p-2]),S++),a+=\"\\n  \".concat(c[p-1]),S++),o=p,a+=\"\\n\".concat(y,\"+\").concat(x,\" \").concat(c[p]),S++;else{var P=f[p],O=c[p],I=O!==P&&(!v(O,\",\")||O.slice(0,-1)!==P);I&&v(P,\",\")&&P.slice(0,-1)===O&&(I=!1,O+=\",\"),I?(C>1&&p>2&&(C>4?(a+=\"\\n\".concat(g,\"...\").concat(x),l=!0):C>3&&(a+=\"\\n  \".concat(c[p-2]),S++),a+=\"\\n  \".concat(c[p-1]),S++),o=p,a+=\"\\n\".concat(y,\"+\").concat(x,\" \").concat(O),i+=\"\\n\".concat(m,\"-\").concat(x,\" \").concat(P),S+=2):(a+=i,i=\"\",1!==C&&0!==p||(a+=\"\\n  \".concat(O),S++))}if(S>20&&p<A-2)return\"\".concat(E).concat(L,\"\\n\").concat(a,\"\\n\").concat(g,\"...\").concat(x).concat(i,\"\\n\")+\"\".concat(g,\"...\").concat(x)}return\"\".concat(E).concat(l?L:\"\",\"\\n\").concat(a).concat(i).concat(s).concat(d)}(u,c,a)));else if(\"notDeepStrictEqual\"===a||\"notStrictEqual\"===a){var T=b[a],k=w(u).split(\"\\n\");if(\"notStrictEqual\"===a&&\"object\"===h(u)&&null!==u&&(T=b.notStrictEqualObject),k.length>30)for(k[26]=\"\".concat(g,\"...\").concat(x);k.length>27;)k.pop();r=1===k.length?o(this,f(e).call(this,\"\".concat(T,\" \").concat(k[0]))):o(this,f(e).call(this,\"\".concat(T,\"\\n\\n\").concat(k.join(\"\\n\"),\"\\n\")))}else{var A=w(u),M=\"\",S=b[a];\"notDeepEqual\"===a||\"notEqual\"===a?(A=\"\".concat(b[a],\"\\n\\n\").concat(A)).length>1024&&(A=\"\".concat(A.slice(0,1021),\"...\")):(M=\"\".concat(w(c)),A.length>512&&(A=\"\".concat(A.slice(0,509),\"...\")),M.length>512&&(M=\"\".concat(M.slice(0,509),\"...\")),\"deepEqual\"===a||\"equal\"===a?A=\"\".concat(S,\"\\n\\n\").concat(A,\"\\n\\nshould equal\\n\\n\"):M=\" \".concat(a,\" \").concat(M)),r=o(this,f(e).call(this,\"\".concat(A).concat(M)))}return Error.stackTraceLimit=p,r.generatedMessage=!i,Object.defineProperty(s(r),\"name\",{value:\"AssertionError [ERR_ASSERTION]\",enumerable:!1,writable:!0,configurable:!0}),r.code=\"ERR_ASSERTION\",r.actual=u,r.expected=c,r.operator=a,Error.captureStackTrace&&Error.captureStackTrace(s(r),l),r.stack,r.name=\"AssertionError\",o(r)}var r,l;return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(e,t),r=e,l=[{key:\"toString\",value:function(){return\"\".concat(this.name,\" [\").concat(this.code,\"]: \").concat(this.message)}},{key:p.custom,value:function(t,e){return p(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=Object.keys(r);\"function\"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})))),n.forEach((function(e){i(t,e,r[e])}))}return t}({},e,{customInspect:!1,depth:0}))}}],l&&a(r.prototype,l),e}(l(Error));t.exports=T},79616:function(t,e,r){\"use strict\";function n(t){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n(t)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function a(t,e){return a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},a(t,e)}var o,s,l={};function u(t,e,r){r||(r=Error);var o=function(r){function o(r,a,s){var l;return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),l=function(t,e){return!e||\"object\"!==n(e)&&\"function\"!=typeof e?function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t):e}(this,i(o).call(this,function(t,r,n){return\"string\"==typeof e?e:e(t,r,n)}(r,a,s))),l.code=t,l}return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(o,r),o}(r);l[t]=o}function c(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?\"one of \".concat(e,\" \").concat(t.slice(0,r-1).join(\", \"),\", or \")+t[r-1]:2===r?\"one of \".concat(e,\" \").concat(t[0],\" or \").concat(t[1]):\"of \".concat(e,\" \").concat(t[0])}return\"of \".concat(e,\" \").concat(String(t))}u(\"ERR_AMBIGUOUS_ARGUMENT\",'The \"%s\" argument is ambiguous. %s',TypeError),u(\"ERR_INVALID_ARG_TYPE\",(function(t,e,i){var a,s,l,u,f;if(void 0===o&&(o=r(32791)),o(\"string\"==typeof t,\"'name' must be a string\"),\"string\"==typeof e&&(s=\"not \",e.substr(0,4)===s)?(a=\"must not be\",e=e.replace(/^not /,\"\")):a=\"must be\",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t,\" argument\"))l=\"The \".concat(t,\" \").concat(a,\" \").concat(c(e,\"type\"));else{var h=(\"number\"!=typeof f&&(f=0),f+1>(u=t).length||-1===u.indexOf(\".\",f)?\"argument\":\"property\");l='The \"'.concat(t,'\" ').concat(h,\" \").concat(a,\" \").concat(c(e,\"type\"))}return l+\". Received type \".concat(n(i))}),TypeError),u(\"ERR_INVALID_ARG_VALUE\",(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"is invalid\";void 0===s&&(s=r(43827));var i=s.inspect(e);return i.length>128&&(i=\"\".concat(i.slice(0,128),\"...\")),\"The argument '\".concat(t,\"' \").concat(n,\". Received \").concat(i)}),TypeError,RangeError),u(\"ERR_INVALID_RETURN_VALUE\",(function(t,e,r){var i;return i=r&&r.constructor&&r.constructor.name?\"instance of \".concat(r.constructor.name):\"type \".concat(n(r)),\"Expected \".concat(t,' to be returned from the \"').concat(e,'\"')+\" function but got \".concat(i,\".\")}),TypeError),u(\"ERR_MISSING_ARGS\",(function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];void 0===o&&(o=r(32791)),o(e.length>0,\"At least one arg needs to be specified\");var i=\"The \",a=e.length;switch(e=e.map((function(t){return'\"'.concat(t,'\"')})),a){case 1:i+=\"\".concat(e[0],\" argument\");break;case 2:i+=\"\".concat(e[0],\" and \").concat(e[1],\" arguments\");break;default:i+=e.slice(0,a-1).join(\", \"),i+=\", and \".concat(e[a-1],\" arguments\")}return\"\".concat(i,\" must be specified\")}),TypeError),t.exports.codes=l},74061:function(t,e,r){\"use strict\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{n||null==s.return||s.return()}finally{if(i)throw a}}return r}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}var a=void 0!==/a/g.flags,o=function(t){var e=[];return t.forEach((function(t){return e.push(t)})),e},s=function(t){var e=[];return t.forEach((function(t,r){return e.push([r,t])})),e},l=Object.is?Object.is:r(64003),u=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},c=Number.isNaN?Number.isNaN:r(15567);function f(t){return t.call.bind(t)}var h=f(Object.prototype.hasOwnProperty),p=f(Object.prototype.propertyIsEnumerable),d=f(Object.prototype.toString),v=r(43827).types,g=v.isAnyArrayBuffer,y=v.isArrayBufferView,m=v.isDate,x=v.isMap,b=v.isRegExp,_=v.isSet,w=v.isNativeError,T=v.isBoxedPrimitive,k=v.isNumberObject,A=v.isStringObject,M=v.isBooleanObject,S=v.isBigIntObject,E=v.isSymbolObject,L=v.isFloat32Array,C=v.isFloat64Array;function P(t){if(0===t.length||t.length>10)return!0;for(var e=0;e<t.length;e++){var r=t.charCodeAt(e);if(r<48||r>57)return!0}return 10===t.length&&t>=Math.pow(2,32)}function O(t){return Object.keys(t).filter(P).concat(u(t).filter(Object.prototype.propertyIsEnumerable.bind(t)))}function I(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}var D=0,z=1,R=2,F=3;function B(t,e,r,n){if(t===e)return 0!==t||!r||l(t,e);if(r){if(\"object\"!==i(t))return\"number\"==typeof t&&c(t)&&c(e);if(\"object\"!==i(e)||null===t||null===e)return!1;if(Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1}else{if(null===t||\"object\"!==i(t))return(null===e||\"object\"!==i(e))&&t==e;if(null===e||\"object\"!==i(e))return!1}var o,s,u,f,h=d(t);if(h!==d(e))return!1;if(Array.isArray(t)){if(t.length!==e.length)return!1;var p=O(t),v=O(e);return p.length===v.length&&j(t,e,r,n,z,p)}if(\"[object Object]\"===h&&(!x(t)&&x(e)||!_(t)&&_(e)))return!1;if(m(t)){if(!m(e)||Date.prototype.getTime.call(t)!==Date.prototype.getTime.call(e))return!1}else if(b(t)){if(!b(e)||(u=t,f=e,!(a?u.source===f.source&&u.flags===f.flags:RegExp.prototype.toString.call(u)===RegExp.prototype.toString.call(f))))return!1}else if(w(t)||t instanceof Error){if(t.message!==e.message||t.name!==e.name)return!1}else{if(y(t)){if(r||!L(t)&&!C(t)){if(!function(t,e){return t.byteLength===e.byteLength&&0===I(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}(t,e))return!1}else if(!function(t,e){if(t.byteLength!==e.byteLength)return!1;for(var r=0;r<t.byteLength;r++)if(t[r]!==e[r])return!1;return!0}(t,e))return!1;var P=O(t),B=O(e);return P.length===B.length&&j(t,e,r,n,D,P)}if(_(t))return!(!_(e)||t.size!==e.size)&&j(t,e,r,n,R);if(x(t))return!(!x(e)||t.size!==e.size)&&j(t,e,r,n,F);if(g(t)){if(s=e,(o=t).byteLength!==s.byteLength||0!==I(new Uint8Array(o),new Uint8Array(s)))return!1}else if(T(t)&&!function(t,e){return k(t)?k(e)&&l(Number.prototype.valueOf.call(t),Number.prototype.valueOf.call(e)):A(t)?A(e)&&String.prototype.valueOf.call(t)===String.prototype.valueOf.call(e):M(t)?M(e)&&Boolean.prototype.valueOf.call(t)===Boolean.prototype.valueOf.call(e):S(t)?S(e)&&BigInt.prototype.valueOf.call(t)===BigInt.prototype.valueOf.call(e):E(e)&&Symbol.prototype.valueOf.call(t)===Symbol.prototype.valueOf.call(e)}(t,e))return!1}return j(t,e,r,n,D)}function N(t,e){return e.filter((function(e){return p(t,e)}))}function j(t,e,r,a,l,c){if(5===arguments.length){c=Object.keys(t);var f=Object.keys(e);if(c.length!==f.length)return!1}for(var d=0;d<c.length;d++)if(!h(e,c[d]))return!1;if(r&&5===arguments.length){var v=u(t);if(0!==v.length){var g=0;for(d=0;d<v.length;d++){var y=v[d];if(p(t,y)){if(!p(e,y))return!1;c.push(y),g++}else if(p(e,y))return!1}var m=u(e);if(v.length!==m.length&&N(e,m).length!==g)return!1}else{var x=u(e);if(0!==x.length&&0!==N(e,x).length)return!1}}if(0===c.length&&(l===D||l===z&&0===t.length||0===t.size))return!0;if(void 0===a)a={val1:new Map,val2:new Map,position:0};else{var b=a.val1.get(t);if(void 0!==b){var _=a.val2.get(e);if(void 0!==_)return b===_}a.position++}a.val1.set(t,a.position),a.val2.set(e,a.position);var w=function(t,e,r,a,l,u){var c=0;if(u===R){if(!function(t,e,r,n){for(var a=null,s=o(t),l=0;l<s.length;l++){var u=s[l];if(\"object\"===i(u)&&null!==u)null===a&&(a=new Set),a.add(u);else if(!e.has(u)){if(r)return!1;if(!H(t,e,u))return!1;null===a&&(a=new Set),a.add(u)}}if(null!==a){for(var c=o(e),f=0;f<c.length;f++){var h=c[f];if(\"object\"===i(h)&&null!==h){if(!U(a,h,r,n))return!1}else if(!r&&!t.has(h)&&!U(a,h,r,n))return!1}return 0===a.size}return!0}(t,e,r,l))return!1}else if(u===F){if(!function(t,e,r,a){for(var o=null,l=s(t),u=0;u<l.length;u++){var c=n(l[u],2),f=c[0],h=c[1];if(\"object\"===i(f)&&null!==f)null===o&&(o=new Set),o.add(f);else{var p=e.get(f);if(void 0===p&&!e.has(f)||!B(h,p,r,a)){if(r)return!1;if(!q(t,e,f,h,a))return!1;null===o&&(o=new Set),o.add(f)}}}if(null!==o){for(var d=s(e),v=0;v<d.length;v++){var g=n(d[v],2),y=(f=g[0],g[1]);if(\"object\"===i(f)&&null!==f){if(!G(o,t,f,y,r,a))return!1}else if(!(r||t.has(f)&&B(t.get(f),y,!1,a)||G(o,t,f,y,!1,a)))return!1}return 0===o.size}return!0}(t,e,r,l))return!1}else if(u===z)for(;c<t.length;c++){if(!h(t,c)){if(h(e,c))return!1;for(var f=Object.keys(t);c<f.length;c++){var p=f[c];if(!h(e,p)||!B(t[p],e[p],r,l))return!1}return f.length===Object.keys(e).length}if(!h(e,c)||!B(t[c],e[c],r,l))return!1}for(c=0;c<a.length;c++){var d=a[c];if(!B(t[d],e[d],r,l))return!1}return!0}(t,e,r,c,a,l);return a.val1.delete(t),a.val2.delete(e),w}function U(t,e,r,n){for(var i=o(t),a=0;a<i.length;a++){var s=i[a];if(B(e,s,r,n))return t.delete(s),!0}return!1}function V(t){switch(i(t)){case\"undefined\":return null;case\"object\":return;case\"symbol\":return!1;case\"string\":t=+t;case\"number\":if(c(t))return!1}return!0}function H(t,e,r){var n=V(r);return null!=n?n:e.has(n)&&!t.has(n)}function q(t,e,r,n,i){var a=V(r);if(null!=a)return a;var o=e.get(a);return!(void 0===o&&!e.has(a)||!B(n,o,!1,i))&&!t.has(a)&&B(n,o,!1,i)}function G(t,e,r,n,i,a){for(var s=o(t),l=0;l<s.length;l++){var u=s[l];if(B(r,u,i,a)&&B(n,e.get(u),i,a))return t.delete(u),!0}return!1}t.exports={isDeepEqual:function(t,e){return B(t,e,!1)},isDeepStrictEqual:function(t,e){return B(t,e,!0)}}},95341:function(t,e){\"use strict\";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,a=s(t),o=a[0],l=a[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,l)),c=0,f=l>0?o-4:o;for(r=0;r<f;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===l&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===l&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,a=[],o=16383,s=0,u=n-i;s<u;s+=o)a.push(l(t,s,s+o>u?u:s+o));return 1===i?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+\"==\")):2===i&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\"=\")),a.join(\"\")};for(var r=[],n=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",o=0;o<64;++o)r[o]=a[o],n[a.charCodeAt(o)]=o;function s(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,n){for(var i,a,o=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join(\"\")}n[\"-\".charCodeAt(0)]=62,n[\"_\".charCodeAt(0)]=63},91358:function(t){\"use strict\";function e(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>=0?(a=o,i=o-1):n=o+1}return a}function r(t,e,r,n,i){for(var a=i+1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)>0?(a=o,i=o-1):n=o+1}return a}function n(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<0?(a=o,n=o+1):i=o-1}return a}function i(t,e,r,n,i){for(var a=n-1;n<=i;){var o=n+i>>>1,s=t[o];(void 0!==r?r(s,e):s-e)<=0?(a=o,n=o+1):i=o-1}return a}function a(t,e,r,n,i){for(;n<=i;){var a=n+i>>>1,o=t[a],s=void 0!==r?r(o,e):o-e;if(0===s)return a;s<=0?n=a+1:i=a-1}return-1}function o(t,e,r,n,i,a){return\"function\"==typeof r?a(t,e,r,void 0===n?0:0|n,void 0===i?t.length-1:0|i):a(t,e,void 0,void 0===r?0:0|r,void 0===n?t.length-1:0|n)}t.exports={ge:function(t,r,n,i,a){return o(t,r,n,i,a,e)},gt:function(t,e,n,i,a){return o(t,e,n,i,a,r)},lt:function(t,e,r,i,a){return o(t,e,r,i,a,n)},le:function(t,e,r,n,a){return o(t,e,r,n,a,i)},eq:function(t,e,r,n,i){return o(t,e,r,n,i,a)}}},13547:function(t,e){\"use strict\";function r(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}e.INT_BITS=32,e.INT_MAX=2147483647,e.INT_MIN=-1<<31,e.sign=function(t){return(t>0)-(t<0)},e.abs=function(t){var e=t>>31;return(t^e)-e},e.min=function(t,e){return e^(t^e)&-(t<e)},e.max=function(t,e){return t^(t^e)&-(t<e)},e.isPow2=function(t){return!(t&t-1||!t)},e.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},e.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},e.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},e.countTrailingZeros=r,e.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,1+(t|=t>>>16)},e.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},e.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var n=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(n),e.reverse=function(t){return n[255&t]<<24|n[t>>>8&255]<<16|n[t>>>16&255]<<8|n[t>>>24&255]},e.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},e.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},e.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},e.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},e.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>r(t)+1}},44781:function(t,e,r){\"use strict\";var n=r(53435);t.exports=function(t,e){e||(e={});var r,o,s,l,u,c,f,h,p,d,v,g=null==e.cutoff?.25:e.cutoff,y=null==e.radius?8:e.radius,m=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error(\"For raw data width and height should be provided by options\");r=e.width,o=e.height,l=t,c=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(f=(h=t).getContext(\"2d\"),r=h.width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t,r=(h=t.canvas).width,o=h.height,l=(p=f.getImageData(0,0,r,o)).data,c=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,c=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(u=l,l=Array(r*o),d=0,v=u.length;d<v;d++)l[d]=u[d*c+m]/255;else if(1!==c)throw Error(\"Raw data can have only 1 value per pixel\");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),T=Array(s+1),k=Array(s);for(d=0,v=r*o;d<v;d++){var A=l[d];x[d]=1===A?0:0===A?i:Math.pow(Math.max(0,.5-A),2),b[d]=1===A?i:0===A?0:Math.pow(Math.max(0,A-.5),2)}a(x,r,o,_,w,k,T),a(b,r,o,_,w,k,T);var M=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,v=r*o;d<v;d++)M[d]=n(1-((x[d]-b[d])/y+g),0,1);return M};var i=1e20;function a(t,e,r,n,i,a,s){for(var l=0;l<e;l++){for(var u=0;u<r;u++)n[u]=t[u*e+l];for(o(n,i,a,s,r),u=0;u<r;u++)t[u*e+l]=i[u]}for(u=0;u<r;u++){for(l=0;l<e;l++)n[l]=t[u*e+l];for(o(n,i,a,s,e),l=0;l<e;l++)t[u*e+l]=Math.sqrt(i[l])}}function o(t,e,r,n,a){r[0]=0,n[0]=-i,n[1]=+i;for(var o=1,s=0;o<a;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+i}for(o=0,s=0;o<a;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},6614:function(t,e,r){\"use strict\";var n=r(68318),i=r(68222),a=i(n(\"String.prototype.indexOf\"));t.exports=function(t,e){var r=n(t,!!e);return\"function\"==typeof r&&a(t,\".prototype.\")>-1?i(r):r}},68222:function(t,e,r){\"use strict\";var n=r(77575),i=r(68318),a=i(\"%Function.prototype.apply%\"),o=i(\"%Function.prototype.call%\"),s=i(\"%Reflect.apply%\",!0)||n.call(o,a),l=i(\"%Object.getOwnPropertyDescriptor%\",!0),u=i(\"%Object.defineProperty%\",!0),c=i(\"%Math.max%\");if(u)try{u({},\"a\",{value:1})}catch(t){u=null}t.exports=function(t){var e=s(n,o,arguments);return l&&u&&l(e,\"length\").configurable&&u(e,\"length\",{value:1+c(0,t.length-(arguments.length-1))}),e};var f=function(){return s(n,a,arguments)};u?u(t.exports,\"apply\",{value:f}):t.exports.apply=f},53435:function(t){t.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},6475:function(t,e,r){\"use strict\";var n=r(53435);function i(t,e){null==e&&(e=!0);var r=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,i*=255,a*=255,o*=255),16777216*(r=255&n(r,0,255))+((i=255&n(i,0,255))<<16)+((a=255&n(a,0,255))<<8)+(255&n(o,0,255))}t.exports=i,t.exports.to=i,t.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},76857:function(t){\"use strict\";t.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},25075:function(t,e,r){\"use strict\";var n=r(36652),i=r(53435),a=r(90660);t.exports=function(t,e){\"float\"!==e&&e||(e=\"array\"),\"uint\"===e&&(e=\"uint8\"),\"uint_clamped\"===e&&(e=\"uint8_clamped\");var r=new(a(e))(4),o=\"uint8\"!==e&&\"uint8_clamped\"!==e;return t.length&&\"string\"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=i(Math.floor(255*t[0]),0,255),r[1]=i(Math.floor(255*t[1]),0,255),r[2]=i(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},90736:function(t,e,r){\"use strict\";var n=r(76857),i=r(10973),a=r(46775);t.exports=function(t){var e,s,l=[],u=1;if(\"string\"==typeof t)if(n[t])l=n[t].slice(),s=\"rgb\";else if(\"transparent\"===t)u=0,s=\"rgb\",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var c=t.slice(1);u=1,(p=c.length)<=4?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],4===p&&(u=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],8===p&&(u=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s=\"rgb\"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\s*\\(([^\\)]*)\\)/.exec(t)){var f=e[1],h=\"rgb\"===f;s=c=f.replace(/a$/,\"\");var p=\"cmyk\"===c?4:\"gray\"===c?1:3;l=e[2].trim().split(/\\s*,\\s*/).map((function(t,e){if(/%$/.test(t))return e===p?parseFloat(t)/100:\"rgb\"===c?255*parseFloat(t)/100:parseFloat(t);if(\"h\"===c[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)})),f===c&&l.push(1),u=h||void 0===l[p]?1:l[p],l=l.slice(0,p)}else t.length>10&&/[0-9](?:\\s|\\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),s=t.match(/([a-z])/gi).join(\"\").toLowerCase());else if(isNaN(t))if(i(t)){var d=a(t.r,t.red,t.R,null);null!==d?(s=\"rgb\",l=[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s=\"hsl\",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),u=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(u/=100)}else(Array.isArray(t)||r.g.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s=\"rgb\",u=4===t.length?t[3]:1);else s=\"rgb\",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:u}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}},36652:function(t,e,r){\"use strict\";var n=r(90736),i=r(80009),a=r(53435);t.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=a(r.values[0],0,255),e[1]=a(r.values[1],0,255),e[2]=a(r.values[2],0,255),\"h\"===r.space[0]&&(e=i.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},80009:function(t,e,r){\"use strict\";var n=r(6866);t.exports={name:\"hsl\",min:[0,0,0],max:[360,100,100],channel:[\"hue\",\"saturation\",\"lightness\"],alias:[\"HSL\"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var u=0;u<3;u++)(n=o+1/3*-(u-1))<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[u]=255*a;return i}},n.hsl=function(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),l=s-o;return s===o?e=0:n===s?e=(i-a)/l:i===s?e=2+(a-n)/l:a===s&&(e=4+(n-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},6866:function(t){\"use strict\";t.exports={name:\"rgb\",min:[0,0,0],max:[255,255,255],channel:[\"red\",\"green\",\"blue\"],alias:[\"RGB\"]}},24138:function(t){t.exports={AFG:\"afghan\",ALA:\"\\\\b\\\\wland\",ALB:\"albania\",DZA:\"algeria\",ASM:\"^(?=.*americ).*samoa\",AND:\"andorra\",AGO:\"angola\",AIA:\"anguill?a\",ATA:\"antarctica\",ATG:\"antigua\",ARG:\"argentin\",ARM:\"armenia\",ABW:\"^(?!.*bonaire).*\\\\baruba\",AUS:\"australia\",AUT:\"^(?!.*hungary).*austria|\\\\baustri.*\\\\bemp\",AZE:\"azerbaijan\",BHS:\"bahamas\",BHR:\"bahrain\",BGD:\"bangladesh|^(?=.*east).*paki?stan\",BRB:\"barbados\",BLR:\"belarus|byelo\",BEL:\"^(?!.*luxem).*belgium\",BLZ:\"belize|^(?=.*british).*honduras\",BEN:\"benin|dahome\",BMU:\"bermuda\",BTN:\"bhutan\",BOL:\"bolivia\",BES:\"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\\\bbes.?islands\",BIH:\"herzegovina|bosnia\",BWA:\"botswana|bechuana\",BVT:\"bouvet\",BRA:\"brazil\",IOT:\"british.?indian.?ocean\",BRN:\"brunei\",BGR:\"bulgaria\",BFA:\"burkina|\\\\bfaso|upper.?volta\",BDI:\"burundi\",CPV:\"verde\",KHM:\"cambodia|kampuchea|khmer\",CMR:\"cameroon\",CAN:\"canada\",CYM:\"cayman\",CAF:\"\\\\bcentral.african.republic\",TCD:\"\\\\bchad\",CHL:\"\\\\bchile\",CHN:\"^(?!.*\\\\bmac)(?!.*\\\\bhong)(?!.*\\\\btai)(?!.*\\\\brep).*china|^(?=.*peo)(?=.*rep).*china\",CXR:\"christmas\",CCK:\"\\\\bcocos|keeling\",COL:\"colombia\",COM:\"comoro\",COG:\"^(?!.*\\\\bdem)(?!.*\\\\bd[\\\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\\\bcongo\",COK:\"\\\\bcook\",CRI:\"costa.?rica\",CIV:\"ivoire|ivory\",HRV:\"croatia\",CUB:\"\\\\bcuba\",CUW:\"^(?!.*bonaire).*\\\\bcura(c|ç)ao\",CYP:\"cyprus\",CSK:\"czechoslovakia\",CZE:\"^(?=.*rep).*czech|czechia|bohemia\",COD:\"\\\\bdem.*congo|congo.*\\\\bdem|congo.*\\\\bd[\\\\.]?r|\\\\bd[\\\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc\",DNK:\"denmark\",DJI:\"djibouti\",DMA:\"dominica(?!n)\",DOM:\"dominican.rep\",ECU:\"ecuador\",EGY:\"egypt\",SLV:\"el.?salvador\",GNQ:\"guine.*eq|eq.*guine|^(?=.*span).*guinea\",ERI:\"eritrea\",EST:\"estonia\",ETH:\"ethiopia|abyssinia\",FLK:\"falkland|malvinas\",FRO:\"faroe|faeroe\",FJI:\"fiji\",FIN:\"finland\",FRA:\"^(?!.*\\\\bdep)(?!.*martinique).*france|french.?republic|\\\\bgaul\",GUF:\"^(?=.*french).*guiana\",PYF:\"french.?polynesia|tahiti\",ATF:\"french.?southern\",GAB:\"gabon\",GMB:\"gambia\",GEO:\"^(?!.*south).*georgia\",DDR:\"german.?democratic.?republic|democratic.?republic.*germany|east.germany\",DEU:\"^(?!.*east).*germany|^(?=.*\\\\bfed.*\\\\brep).*german\",GHA:\"ghana|gold.?coast\",GIB:\"gibraltar\",GRC:\"greece|hellenic|hellas\",GRL:\"greenland\",GRD:\"grenada\",GLP:\"guadeloupe\",GUM:\"\\\\bguam\",GTM:\"guatemala\",GGY:\"guernsey\",GIN:\"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea\",GNB:\"bissau|^(?=.*portu).*guinea\",GUY:\"guyana|british.?guiana\",HTI:\"haiti\",HMD:\"heard.*mcdonald\",VAT:\"holy.?see|vatican|papal.?st\",HND:\"^(?!.*brit).*honduras\",HKG:\"hong.?kong\",HUN:\"^(?!.*austr).*hungary\",ISL:\"iceland\",IND:\"india(?!.*ocea)\",IDN:\"indonesia\",IRN:\"\\\\biran|persia\",IRQ:\"\\\\biraq|mesopotamia\",IRL:\"(^ireland)|(^republic.*ireland)\",IMN:\"^(?=.*isle).*\\\\bman\",ISR:\"israel\",ITA:\"italy\",JAM:\"jamaica\",JPN:\"japan\",JEY:\"jersey\",JOR:\"jordan\",KAZ:\"kazak\",KEN:\"kenya|british.?east.?africa|east.?africa.?prot\",KIR:\"kiribati\",PRK:\"^(?=.*democrat|people|north|d.*p.*.r).*\\\\bkorea|dprk|korea.*(d.*p.*r)\",KWT:\"kuwait\",KGZ:\"kyrgyz|kirghiz\",LAO:\"\\\\blaos?\\\\b\",LVA:\"latvia\",LBN:\"lebanon\",LSO:\"lesotho|basuto\",LBR:\"liberia\",LBY:\"libya\",LIE:\"liechtenstein\",LTU:\"lithuania\",LUX:\"^(?!.*belg).*luxem\",MAC:\"maca(o|u)\",MDG:\"madagascar|malagasy\",MWI:\"malawi|nyasa\",MYS:\"malaysia\",MDV:\"maldive\",MLI:\"\\\\bmali\\\\b\",MLT:\"\\\\bmalta\",MHL:\"marshall\",MTQ:\"martinique\",MRT:\"mauritania\",MUS:\"mauritius\",MYT:\"\\\\bmayotte\",MEX:\"\\\\bmexic\",FSM:\"fed.*micronesia|micronesia.*fed\",MCO:\"monaco\",MNG:\"mongolia\",MNE:\"^(?!.*serbia).*montenegro\",MSR:\"montserrat\",MAR:\"morocco|\\\\bmaroc\",MOZ:\"mozambique\",MMR:\"myanmar|burma\",NAM:\"namibia\",NRU:\"nauru\",NPL:\"nepal\",NLD:\"^(?!.*\\\\bant)(?!.*\\\\bcarib).*netherlands\",ANT:\"^(?=.*\\\\bant).*(nether|dutch)\",NCL:\"new.?caledonia\",NZL:\"new.?zealand\",NIC:\"nicaragua\",NER:\"\\\\bniger(?!ia)\",NGA:\"nigeria\",NIU:\"niue\",NFK:\"norfolk\",MNP:\"mariana\",NOR:\"norway\",OMN:\"\\\\boman|trucial\",PAK:\"^(?!.*east).*paki?stan\",PLW:\"palau\",PSE:\"palestin|\\\\bgaza|west.?bank\",PAN:\"panama\",PNG:\"papua|new.?guinea\",PRY:\"paraguay\",PER:\"peru\",PHL:\"philippines\",PCN:\"pitcairn\",POL:\"poland\",PRT:\"portugal\",PRI:\"puerto.?rico\",QAT:\"qatar\",KOR:\"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\\\bkorea(?!.*d.*p.*r)\",MDA:\"moldov|b(a|e)ssarabia\",REU:\"r(e|é)union\",ROU:\"r(o|u|ou)mania\",RUS:\"\\\\brussia|soviet.?union|u\\\\.?s\\\\.?s\\\\.?r|socialist.?republics\",RWA:\"rwanda\",BLM:\"barth(e|é)lemy\",SHN:\"helena\",KNA:\"kitts|\\\\bnevis\",LCA:\"\\\\blucia\",MAF:\"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)\",SPM:\"miquelon\",VCT:\"vincent\",WSM:\"^(?!.*amer).*samoa\",SMR:\"san.?marino\",STP:\"\\\\bs(a|ã)o.?tom(e|é)\",SAU:\"\\\\bsa\\\\w*.?arabia\",SEN:\"senegal\",SRB:\"^(?!.*monte).*serbia\",SYC:\"seychell\",SLE:\"sierra\",SGP:\"singapore\",SXM:\"^(?!.*martin)(?!.*saba).*maarten\",SVK:\"^(?!.*cze).*slovak\",SVN:\"slovenia\",SLB:\"solomon\",SOM:\"somali\",ZAF:\"south.africa|s\\\\\\\\..?africa\",SGS:\"south.?georgia|sandwich\",SSD:\"\\\\bs\\\\w*.?sudan\",ESP:\"spain\",LKA:\"sri.?lanka|ceylon\",SDN:\"^(?!.*\\\\bs(?!u)).*sudan\",SUR:\"surinam|dutch.?guiana\",SJM:\"svalbard\",SWZ:\"swaziland\",SWE:\"sweden\",CHE:\"switz|swiss\",SYR:\"syria\",TWN:\"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china\",TJK:\"tajik\",THA:\"thailand|\\\\bsiam\",MKD:\"macedonia|fyrom\",TLS:\"^(?=.*leste).*timor|^(?=.*east).*timor\",TGO:\"togo\",TKL:\"tokelau\",TON:\"tonga\",TTO:\"trinidad|tobago\",TUN:\"tunisia\",TUR:\"turkey\",TKM:\"turkmen\",TCA:\"turks\",TUV:\"tuvalu\",UGA:\"uganda\",UKR:\"ukrain\",ARE:\"emirates|^u\\\\.?a\\\\.?e\\\\.?$|united.?arab.?em\",GBR:\"united.?kingdom|britain|^u\\\\.?k\\\\.?$\",TZA:\"tanzania\",USA:\"united.?states\\\\b(?!.*islands)|\\\\bu\\\\.?s\\\\.?a\\\\.?\\\\b|^\\\\s*u\\\\.?s\\\\.?\\\\b(?!.*islands)\",UMI:\"minor.?outlying.?is\",URY:\"uruguay\",UZB:\"uzbek\",VUT:\"vanuatu|new.?hebrides\",VEN:\"venezuela\",VNM:\"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam\",VGB:\"^(?=.*\\\\bu\\\\.?\\\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin\",VIR:\"^(?=.*\\\\bu\\\\.?\\\\s?s).*virgin|^(?=.*states).*virgin\",WLF:\"futuna|wallis\",ESH:\"western.sahara\",YEM:\"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YMD:\"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YUG:\"yugoslavia\",ZMB:\"zambia|northern.?rhodesia\",EAZ:\"zanzibar\",ZWE:\"zimbabwe|^(?!.*northern).*rhodesia\"}},72791:function(t,e,r){\"use strict\";t.exports={parse:r(41004),stringify:r(53313)}},63625:function(t,e,r){\"use strict\";var n=r(40402);t.exports={isSize:function(t){return/^[\\d\\.]/.test(t)||-1!==t.indexOf(\"/\")||-1!==n.indexOf(t)}}},41004:function(t,e,r){\"use strict\";var n=r(90448),i=r(38732),a=r(41901),o=r(15659),s=r(96209),l=r(83794),u=r(99011),c=r(63625).isSize;t.exports=h;var f=h.cache={};function h(t){if(\"string\"!=typeof t)throw new Error(\"Font argument must be a string.\");if(f[t])return f[t];if(\"\"===t)throw new Error(\"Cannot parse an empty string.\");if(-1!==a.indexOf(t))return f[t]={system:t};for(var e,r={style:\"normal\",variant:\"normal\",weight:\"normal\",stretch:\"normal\",lineHeight:\"normal\",size:\"1rem\",family:[\"serif\"]},h=u(t,/\\s+/);e=h.shift();){if(-1!==i.indexOf(e))return[\"style\",\"variant\",\"weight\",\"stretch\"].forEach((function(t){r[t]=e})),f[t]=r;if(-1===s.indexOf(e))if(\"normal\"!==e&&\"small-caps\"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(c(e)){var d=u(e,\"/\");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):\"/\"===h[0]&&(h.shift(),r.lineHeight=p(h.shift())),!h.length)throw new Error(\"Missing required font-family.\");return r.family=u(h.join(\" \"),/\\s*,\\s*/).map(n),f[t]=r}throw new Error(\"Unknown or unsupported font token: \"+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error(\"Missing required font-size.\")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},53313:function(t,e,r){\"use strict\";var n=r(71299),i=r(63625).isSize,a=d(r(38732)),o=d(r(41901)),s=d(r(15659)),l=d(r(96209)),u=d(r(83794)),c={normal:1,\"small-caps\":1},f={serif:1,\"sans-serif\":1,monospace:1,cursive:1,fantasy:1,\"system-ui\":1},h=\"serif\";function p(t,e){if(t&&!e[t]&&!a[t])throw Error(\"Unknown keyword `\"+t+\"`\");return t}function d(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}t.exports=function(t){if((t=n(t,{style:\"style fontstyle fontStyle font-style slope distinction\",variant:\"variant font-variant fontVariant fontvariant var capitalization\",weight:\"weight w font-weight fontWeight fontweight\",stretch:\"stretch font-stretch fontStretch fontstretch width\",size:\"size s font-size fontSize fontsize height em emSize\",lineHeight:\"lh line-height lineHeight lineheight leading\",family:\"font family fontFamily font-family fontfamily type typeface face\",system:\"system reserved default global\"})).system)return t.system&&p(t.system,o),t.system;if(p(t.style,l),p(t.variant,c),p(t.weight,s),p(t.stretch,u),null==t.size&&(t.size=\"1rem\"),\"number\"==typeof t.size&&(t.size+=\"px\"),!i)throw Error(\"Bad size value `\"+t.size+\"`\");t.family||(t.family=h),Array.isArray(t.family)&&(t.family.length||(t.family=[h]),t.family=t.family.map((function(t){return f[t]?t:'\"'+t+'\"'})).join(\", \"));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||\"normal\"===t.lineHeight||t.lineHeight+\"\"==\"1\"?\"\":\"/\"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(\" \")}},55174:function(t,e,r){\"use strict\";var n,i=r(24582),a=r(10424),o=r(82527),s=r(19012),l=r(21780),u=r(16906),c=Function.prototype.bind,f=Object.defineProperty,h=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,i=a(e)&&o(e.value);return delete(n=s(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&h.call(this,t)?i:(e.value=c.call(i,r.resolveContext?r.resolveContext(this):this),f(this,t,e),this[t])},n},t.exports=function(t){var e=l(arguments[1]);return i(e.resolveContext)&&o(e.resolveContext),u(t,(function(t,r){return n(r,t,e)}))}},62072:function(t,e,r){\"use strict\";var n=r(24582),i=r(84985),a=r(95879),o=r(21780),s=r(66741),l=t.exports=function(t,e){var r,i,l,u,c;return arguments.length<2||\"string\"!=typeof t?(u=e,e=t,t=null):u=arguments[2],n(t)?(r=s.call(t,\"c\"),i=s.call(t,\"e\"),l=s.call(t,\"w\")):(r=l=!0,i=!1),c={value:e,configurable:r,enumerable:i,writable:l},u?a(o(u),c):c};l.gs=function(t,e,r){var l,u,c,f;return\"string\"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],n(e)?i(e)?n(r)?i(r)||(c=r,r=void 0):r=void 0:(c=e,e=r=void 0):e=void 0,n(t)?(l=s.call(t,\"c\"),u=s.call(t,\"e\")):(l=!0,u=!1),f={get:e,set:r,configurable:l,enumerable:u},c?a(o(c),f):f}},33064:function(t,e,r){\"use strict\";function n(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}r.d(e,{j2:function(){return n},Fp:function(){return s},J6:function(){return u},TS:function(){return c},VV:function(){return f},w6:function(){return h},Sm:function(){return p}}),1===(i=n).length&&(a=i,i=function(t,e){return n(a(t),e)});var i,a,o=Array.prototype;function s(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&r>n&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&r>n&&(n=r);return n}function l(t){return null===t?NaN:+t}function u(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a<n;)isNaN(r=l(t[a]))?--i:o+=r;else for(;++a<n;)isNaN(r=l(e(t[a],a,t)))?--i:o+=r;if(i)return o/i}function c(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r}function f(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&n>r&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&n>r&&(n=r);return n}function h(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=0|Math.max(0,Math.ceil((e-t)/r)),a=new Array(i);++n<i;)a[n]=t+n*r;return a}function p(t,e){var r,n=t.length,i=-1,a=0;if(null==e)for(;++i<n;)(r=+t[i])&&(a+=r);else for(;++i<n;)(r=+e(t[i],i,t))&&(a+=r);return a}o.slice,o.map,Math.sqrt(50),Math.sqrt(10),Math.sqrt(2)},15140:function(t,e,r){\"use strict\";r.d(e,{UI:function(){return o},b1:function(){return s}});var n=\"$\";function i(){}function a(t,e){var r=new i;if(t instanceof i)t.each((function(t,e){r.set(e,t)}));else if(Array.isArray(t)){var n,a=-1,o=t.length;if(null==e)for(;++a<o;)r.set(a,t[a]);else for(;++a<o;)r.set(e(n=t[a],a,t),n)}else if(t)for(var s in t)r.set(s,t[s]);return r}i.prototype=a.prototype={constructor:i,has:function(t){return n+t in this},get:function(t){return this[n+t]},set:function(t,e){return this[n+t]=e,this},remove:function(t){var e=n+t;return e in this&&delete this[e]},clear:function(){for(var t in this)t[0]===n&&delete this[t]},keys:function(){var t=[];for(var e in this)e[0]===n&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)e[0]===n&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)e[0]===n&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)e[0]===n&&++t;return t},empty:function(){for(var t in this)if(t[0]===n)return!1;return!0},each:function(t){for(var e in this)e[0]===n&&t(this[e],e.slice(1),this)}};var o=a;function s(){var t,e,r,n=[],i=[];function a(r,i,s,l){if(i>=n.length)return null!=t&&r.sort(t),null!=e?e(r):r;for(var u,c,f,h=-1,p=r.length,d=n[i++],v=o(),g=s();++h<p;)(f=v.get(u=d(c=r[h])+\"\"))?f.push(c):v.set(u,[c]);return v.each((function(t,e){l(g,e,a(t,i,s,l))})),g}function s(t,r){if(++r>n.length)return t;var a,o=i[r-1];return null!=e&&r>=n.length?a=t.entries():(a=[],t.each((function(t,e){a.push({key:e,values:s(t,r)})}))),null!=o?a.sort((function(t,e){return o(t.key,e.key)})):a}return r={object:function(t){return a(t,0,l,u)},map:function(t){return a(t,0,c,f)},entries:function(t){return s(a(t,0,c,f),0)},key:function(t){return n.push(t),r},sortKeys:function(t){return i[n.length-1]=t,r},sortValues:function(e){return t=e,r},rollup:function(t){return e=t,r}}}function l(){return{}}function u(t,e,r){t[e]=r}function c(){return o()}function f(t,e,r){t.set(e,r)}function h(){}var p=o.prototype;h.prototype=function(t,e){var r=new h;if(t instanceof h)t.each((function(t){r.add(t)}));else if(t){var n=-1,i=t.length;if(null==e)for(;++n<i;)r.add(t[n]);else for(;++n<i;)r.add(e(t[n],n,t))}return r}.prototype={constructor:h,has:p.has,add:function(t){return this[n+(t+=\"\")]=t,this},remove:p.remove,clear:p.clear,values:p.keys,size:p.size,empty:p.empty,each:p.each}},49887:function(t,e,r){\"use strict\";function n(t,e){var r;function n(){var n,i,a=r.length,o=0,s=0;for(n=0;n<a;++n)o+=(i=r[n]).x,s+=i.y;for(o=o/a-t,s=s/a-e,n=0;n<a;++n)(i=r[n]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n}function i(t){return function(){return t}}function a(){return 1e-6*(Math.random()-.5)}function o(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,u,c,f,h,p=t._root,d={data:n},v=t._x0,g=t._y0,y=t._x1,m=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o,i=p,!(p=p[f=c<<1|u]))return i[f]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,i?i[f]=d:t._root=d,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(u=e>=(a=(v+y)/2))?v=a:y=a,(c=r>=(o=(g+m)/2))?g=o:m=o}while((f=c<<1|u)==(h=(l>=o)<<1|s>=a));return i[h]=p,i[f]=d,t}function s(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i}function l(t){return t[0]}function u(t){return t[1]}function c(t,e,r){var n=new f(null==e?l:e,null==r?u:r,NaN,NaN,NaN,NaN);return null==t?n:n.addAll(t)}function f(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function h(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}r.r(e),r.d(e,{forceCenter:function(){return n},forceCollide:function(){return g},forceLink:function(){return b},forceManyBody:function(){return J},forceRadial:function(){return K},forceSimulation:function(){return X},forceX:function(){return $},forceY:function(){return Q}});var p=c.prototype=f.prototype;function d(t){return t.x+t.vx}function v(t){return t.y+t.vy}function g(t){var e,r,n=1,o=1;function s(){for(var t,i,s,u,f,h,p,g=e.length,y=0;y<o;++y)for(i=c(e,d,v).visitAfter(l),t=0;t<g;++t)s=e[t],h=r[s.index],p=h*h,u=s.x+s.vx,f=s.y+s.vy,i.visit(m);function m(t,e,r,i,o){var l=t.data,c=t.r,d=h+c;if(!l)return e>u+d||i<u-d||r>f+d||o<f-d;if(l.index>s.index){var v=u-l.x-l.vx,g=f-l.y-l.vy,y=v*v+g*g;y<d*d&&(0===v&&(y+=(v=a())*v),0===g&&(y+=(g=a())*g),y=(d-(y=Math.sqrt(y)))/y*n,s.vx+=(v*=y)*(d=(c*=c)/(p+c)),s.vy+=(g*=y)*d,l.vx-=v*(d=1-d),l.vy-=g*d)}}}function l(t){if(t.data)return t.r=r[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function u(){if(e){var n,i,a=e.length;for(r=new Array(a),n=0;n<a;++n)i=e[n],r[i.index]=+t(i,n,e)}}return\"function\"!=typeof t&&(t=i(null==t?1:+t)),s.initialize=function(t){e=t,u()},s.iterations=function(t){return arguments.length?(o=+t,s):o},s.strength=function(t){return arguments.length?(n=+t,s):n},s.radius=function(e){return arguments.length?(t=\"function\"==typeof e?e:i(+e),u(),s):t},s}p.copy=function(){var t,e,r=new f(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=h(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=h(e));return r},p.add=function(t){var e=+this._x.call(null,t),r=+this._y.call(null,t);return o(this.cover(e,r),e,r,t)},p.addAll=function(t){var e,r,n,i,a=t.length,s=new Array(a),l=new Array(a),u=1/0,c=1/0,f=-1/0,h=-1/0;for(r=0;r<a;++r)isNaN(n=+this._x.call(null,e=t[r]))||isNaN(i=+this._y.call(null,e))||(s[r]=n,l[r]=i,n<u&&(u=n),n>f&&(f=n),i<c&&(c=i),i>h&&(h=i));if(u>f||c>h)return this;for(this.cover(u,c).cover(f,h),r=0;r<a;++r)o(this,s[r],l[r],t[r]);return this},p.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{for(var o,s,l=i-r,u=this._root;r>t||t>=i||n>e||e>=a;)switch(s=(e<n)<<1|t<r,(o=new Array(4))[s]=u,u=o,l*=2,s){case 0:i=r+l,a=n+l;break;case 1:r=i-l,a=n+l;break;case 2:i=r+l,n=a-l;break;case 3:r=i-l,n=a-l}this._root&&this._root.length&&(this._root=u)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},p.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},p.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},p.find=function(t,e,r){var n,i,a,o,l,u,c,f=this._x0,h=this._y0,p=this._x1,d=this._y1,v=[],g=this._root;for(g&&v.push(new s(g,f,h,p,d)),null==r?r=1/0:(f=t-r,h=e-r,p=t+r,d=e+r,r*=r);u=v.pop();)if(!(!(g=u.node)||(i=u.x0)>p||(a=u.y0)>d||(o=u.x1)<f||(l=u.y1)<h))if(g.length){var y=(i+o)/2,m=(a+l)/2;v.push(new s(g[3],y,m,o,l),new s(g[2],i,m,y,l),new s(g[1],y,a,o,m),new s(g[0],i,a,y,m)),(c=(e>=m)<<1|t>=y)&&(u=v[v.length-1],v[v.length-1]=v[v.length-1-c],v[v.length-1-c]=u)}else{var x=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),_=x*x+b*b;if(_<r){var w=Math.sqrt(r=_);f=t-w,h=e-w,p=t+w,d=e+w,n=g.data}}return n},p.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,u,c,f,h,p=this._root,d=this._x0,v=this._y0,g=this._x1,y=this._y1;if(!p)return this;if(p.length)for(;;){if((u=a>=(s=(d+g)/2))?d=s:g=s,(c=o>=(l=(v+y)/2))?v=l:y=l,e=p,!(p=p[f=c<<1|u]))return this;if(!p.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(r=e,h=f)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,n?(i?n.next=i:delete n.next,this):e?(i?e[f]=i:delete e[f],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[h]=p:this._root=p),this):(this._root=i,this)},p.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},p.root=function(){return this._root},p.size=function(){var t=0;return this.visit((function(e){if(!e.length)do{++t}while(e=e.next)})),t},p.visit=function(t){var e,r,n,i,a,o,l=[],u=this._root;for(u&&l.push(new s(u,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(u=e.node,n=e.x0,i=e.y0,a=e.x1,o=e.y1)&&u.length){var c=(n+a)/2,f=(i+o)/2;(r=u[3])&&l.push(new s(r,c,f,a,o)),(r=u[2])&&l.push(new s(r,n,f,c,o)),(r=u[1])&&l.push(new s(r,c,i,a,f)),(r=u[0])&&l.push(new s(r,n,i,c,f))}return this},p.visitAfter=function(t){var e,r=[],n=[];for(this._root&&r.push(new s(this._root,this._x0,this._y0,this._x1,this._y1));e=r.pop();){var i=e.node;if(i.length){var a,o=e.x0,l=e.y0,u=e.x1,c=e.y1,f=(o+u)/2,h=(l+c)/2;(a=i[0])&&r.push(new s(a,o,l,f,h)),(a=i[1])&&r.push(new s(a,f,l,u,h)),(a=i[2])&&r.push(new s(a,o,h,f,c)),(a=i[3])&&r.push(new s(a,f,h,u,c))}n.push(e)}for(;e=n.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},p.x=function(t){return arguments.length?(this._x=t,this):this._x},p.y=function(t){return arguments.length?(this._y=t,this):this._y};var y=r(15140);function m(t){return t.index}function x(t,e){var r=t.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function b(t){var e,r,n,o,s,l=m,u=function(t){return 1/Math.min(o[t.source.index],o[t.target.index])},c=i(30),f=1;function h(n){for(var i=0,o=t.length;i<f;++i)for(var l,u,c,h,p,d,v,g=0;g<o;++g)u=(l=t[g]).source,h=(c=l.target).x+c.vx-u.x-u.vx||a(),p=c.y+c.vy-u.y-u.vy||a(),h*=d=((d=Math.sqrt(h*h+p*p))-r[g])/d*n*e[g],p*=d,c.vx-=h*(v=s[g]),c.vy-=p*v,u.vx+=h*(v=1-v),u.vy+=p*v}function p(){if(n){var i,a,u=n.length,c=t.length,f=(0,y.UI)(n,l);for(i=0,o=new Array(u);i<c;++i)(a=t[i]).index=i,\"object\"!=typeof a.source&&(a.source=x(f,a.source)),\"object\"!=typeof a.target&&(a.target=x(f,a.target)),o[a.source.index]=(o[a.source.index]||0)+1,o[a.target.index]=(o[a.target.index]||0)+1;for(i=0,s=new Array(c);i<c;++i)a=t[i],s[i]=o[a.source.index]/(o[a.source.index]+o[a.target.index]);e=new Array(c),d(),r=new Array(c),v()}}function d(){if(n)for(var r=0,i=t.length;r<i;++r)e[r]=+u(t[r],r,t)}function v(){if(n)for(var e=0,i=t.length;e<i;++e)r[e]=+c(t[e],e,t)}return null==t&&(t=[]),h.initialize=function(t){n=t,p()},h.links=function(e){return arguments.length?(t=e,p(),h):t},h.id=function(t){return arguments.length?(l=t,h):l},h.iterations=function(t){return arguments.length?(f=+t,h):f},h.strength=function(t){return arguments.length?(u=\"function\"==typeof t?t:i(+t),d(),h):u},h.distance=function(t){return arguments.length?(c=\"function\"==typeof t?t:i(+t),v(),h):c},h}var _={value:function(){}};function w(){for(var t,e=0,r=arguments.length,n={};e<r;++e){if(!(t=arguments[e]+\"\")||t in n||/[\\s.]/.test(t))throw new Error(\"illegal type: \"+t);n[t]=[]}return new T(n)}function T(t){this._=t}function k(t,e){for(var r,n=0,i=t.length;n<i;++n)if((r=t[n]).name===e)return r.value}function A(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=_,t=t.slice(0,n).concat(t.slice(n+1));break}return null!=r&&t.push({name:e,value:r}),t}T.prototype=w.prototype={constructor:T,on:function(t,e){var r,n,i=this._,a=(n=i,(t+\"\").trim().split(/^|\\s+/).map((function(t){var e=\"\",r=t.indexOf(\".\");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);return{type:t,name:e}}))),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&\"function\"!=typeof e)throw new Error(\"invalid callback: \"+e);for(;++o<s;)if(r=(t=a[o]).type)i[r]=A(i[r],t.name,e);else if(null==e)for(r in i)i[r]=A(i[r],t.name,null);return this}for(;++o<s;)if((r=(t=a[o]).type)&&(r=k(i[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new T(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,i=new Array(r),a=0;a<r;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(a=0,r=(n=this._[t]).length;a<r;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}};var M,S,E=w,L=0,C=0,P=0,O=1e3,I=0,D=0,z=0,R=\"object\"==typeof performance&&performance.now?performance:Date,F=\"object\"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function B(){return D||(F(N),D=R.now()+z)}function N(){D=0}function j(){this._call=this._time=this._next=null}function U(t,e,r){var n=new j;return n.restart(t,e,r),n}function V(){D=(I=R.now())+z,L=C=0;try{!function(){B(),++L;for(var t,e=M;e;)(t=D-e._time)>=0&&e._call.call(null,t),e=e._next;--L}()}finally{L=0,function(){for(var t,e,r=M,n=1/0;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:M=e);S=t,q(n)}(),D=0}}function H(){var t=R.now(),e=t-I;e>O&&(z-=e,I=t)}function q(t){L||(C&&(C=clearTimeout(C)),t-D>24?(t<1/0&&(C=setTimeout(V,t-R.now()-z)),P&&(P=clearInterval(P))):(P||(I=R.now(),P=setInterval(H,O)),L=1,F(V)))}function G(t){return t.x}function Z(t){return t.y}j.prototype=U.prototype={constructor:j,restart:function(t,e,r){if(\"function\"!=typeof t)throw new TypeError(\"callback is not a function\");r=(null==r?B():+r)+(null==e?0:+e),this._next||S===this||(S?S._next=this:M=this,S=this),this._call=t,this._time=r,q()},stop:function(){this._call&&(this._call=null,this._time=1/0,q())}};var Y=10,W=Math.PI*(3-Math.sqrt(5));function X(t){var e,r=1,n=.001,i=1-Math.pow(n,1/300),a=0,o=.6,s=(0,y.UI)(),l=U(c),u=E(\"tick\",\"end\");function c(){f(),u.call(\"tick\",e),r<n&&(l.stop(),u.call(\"end\",e))}function f(n){var l,u,c=t.length;void 0===n&&(n=1);for(var f=0;f<n;++f)for(r+=(a-r)*i,s.each((function(t){t(r)})),l=0;l<c;++l)null==(u=t[l]).fx?u.x+=u.vx*=o:(u.x=u.fx,u.vx=0),null==u.fy?u.y+=u.vy*=o:(u.y=u.fy,u.vy=0);return e}function h(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,null!=e.fx&&(e.x=e.fx),null!=e.fy&&(e.y=e.fy),isNaN(e.x)||isNaN(e.y)){var i=Y*Math.sqrt(r),a=r*W;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function p(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),h(),e={tick:f,restart:function(){return l.restart(c),e},stop:function(){return l.stop(),e},nodes:function(r){return arguments.length?(t=r,h(),s.each(p),e):t},alpha:function(t){return arguments.length?(r=+t,e):r},alphaMin:function(t){return arguments.length?(n=+t,e):n},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},force:function(t,r){return arguments.length>1?(null==r?s.remove(t):s.set(t,p(r)),e):s.get(t)},find:function(e,r,n){var i,a,o,s,l,u=0,c=t.length;for(null==n?n=1/0:n*=n,u=0;u<c;++u)(o=(i=e-(s=t[u]).x)*i+(a=r-s.y)*a)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(u.on(t,r),e):u.on(t)}}}function J(){var t,e,r,n,o=i(-30),s=1,l=1/0,u=.81;function f(n){var i,a=t.length,o=c(t,G,Z).visitAfter(p);for(r=n,i=0;i<a;++i)e=t[i],o.visit(d)}function h(){if(t){var e,r,i=t.length;for(n=new Array(i),e=0;e<i;++e)r=t[e],n[r.index]=+o(r,e,t)}}function p(t){var e,r,i,a,o,s=0,l=0;if(t.length){for(i=a=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,i+=r*e.x,a+=r*e.y);t.x=i/l,t.y=a/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=n[e.data.index]}while(e=e.next)}t.value=s}function d(t,i,o,c){if(!t.value)return!0;var f=t.x-e.x,h=t.y-e.y,p=c-i,d=f*f+h*h;if(p*p/u<d)return d<l&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)),e.vx+=f*t.value*r/d,e.vy+=h*t.value*r/d),!0;if(!(t.length||d>=l)){(t.data!==e||t.next)&&(0===f&&(d+=(f=a())*f),0===h&&(d+=(h=a())*h),d<s&&(d=Math.sqrt(s*d)));do{t.data!==e&&(p=n[t.data.index]*r/d,e.vx+=f*p,e.vy+=h*p)}while(t=t.next)}}return f.initialize=function(e){t=e,h()},f.strength=function(t){return arguments.length?(o=\"function\"==typeof t?t:i(+t),h(),f):o},f.distanceMin=function(t){return arguments.length?(s=t*t,f):Math.sqrt(s)},f.distanceMax=function(t){return arguments.length?(l=t*t,f):Math.sqrt(l)},f.theta=function(t){return arguments.length?(u=t*t,f):Math.sqrt(u)},f}function K(t,e,r){var n,a,o,s=i(.1);function l(t){for(var i=0,s=n.length;i<s;++i){var l=n[i],u=l.x-e||1e-6,c=l.y-r||1e-6,f=Math.sqrt(u*u+c*c),h=(o[i]-f)*a[i]*t/f;l.vx+=u*h,l.vy+=c*h}}function u(){if(n){var e,r=n.length;for(a=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),a[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return\"function\"!=typeof t&&(t=i(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,u()},l.strength=function(t){return arguments.length?(s=\"function\"==typeof t?t:i(+t),u(),l):s},l.radius=function(e){return arguments.length?(t=\"function\"==typeof e?e:i(+e),u(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l}function $(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(n[a]-i.x)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return\"function\"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a=\"function\"==typeof t?t:i(+t),s(),o):a},o.x=function(e){return arguments.length?(t=\"function\"==typeof e?e:i(+e),s(),o):t},o}function Q(t){var e,r,n,a=i(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(n[a]-i.y)*r[a]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return\"function\"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a=\"function\"==typeof t?t:i(+t),s(),o):a},o.y=function(e){return arguments.length?(t=\"function\"==typeof e?e:i(+e),s(),o):t},o}},60721:function(t,e,r){\"use strict\";function n(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf(\"e\"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}r.d(e,{WU:function(){return h},FF:function(){return v}});var i,a=/^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;function o(t){if(!(e=a.exec(t)))throw new Error(\"invalid format: \"+t);var e;return new s({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function s(t){this.fill=void 0===t.fill?\" \":t.fill+\"\",this.align=void 0===t.align?\">\":t.align+\"\",this.sign=void 0===t.sign?\"-\":t.sign+\"\",this.symbol=void 0===t.symbol?\"\":t.symbol+\"\",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?\"\":t.type+\"\"}function l(t,e){var r=n(t,e);if(!r)return t+\"\";var i=r[0],a=r[1];return a<0?\"0.\"+new Array(-a).join(\"0\")+i:i.length>a+1?i.slice(0,a+1)+\".\"+i.slice(a+1):i+new Array(a-i.length+2).join(\"0\")}o.prototype=s.prototype,s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?\"0\":\"\")+(void 0===this.width?\"\":Math.max(1,0|this.width))+(this.comma?\",\":\"\")+(void 0===this.precision?\"\":\".\"+Math.max(0,0|this.precision))+(this.trim?\"~\":\"\")+this.type};var u={\"%\":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+\"\"},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString(\"en\").replace(/,/g,\"\"):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return l(100*t,e)},r:l,s:function(t,e){var r=n(t,e);if(!r)return t+\"\";var a=r[0],o=r[1],s=o-(i=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,l=a.length;return s===l?a:s>l?a+new Array(s-l+1).join(\"0\"):s>0?a.slice(0,s)+\".\"+a.slice(s):\"0.\"+new Array(1-s).join(\"0\")+n(t,Math.max(0,e+s-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}};function c(t){return t}var f,h,p=Array.prototype.map,d=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];function v(t){var e,r,a=void 0===t.grouping||void 0===t.thousands?c:(e=p.call(t.grouping,Number),r=t.thousands+\"\",function(t,n){for(var i=t.length,a=[],o=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[o=(o+1)%e.length];return a.reverse().join(r)}),s=void 0===t.currency?\"\":t.currency[0]+\"\",l=void 0===t.currency?\"\":t.currency[1]+\"\",f=void 0===t.decimal?\".\":t.decimal+\"\",h=void 0===t.numerals?c:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(p.call(t.numerals,String)),v=void 0===t.percent?\"%\":t.percent+\"\",g=void 0===t.minus?\"-\":t.minus+\"\",y=void 0===t.nan?\"NaN\":t.nan+\"\";function m(t){var e=(t=o(t)).fill,r=t.align,n=t.sign,c=t.symbol,p=t.zero,m=t.width,x=t.comma,b=t.precision,_=t.trim,w=t.type;\"n\"===w?(x=!0,w=\"g\"):u[w]||(void 0===b&&(b=12),_=!0,w=\"g\"),(p||\"0\"===e&&\"=\"===r)&&(p=!0,e=\"0\",r=\"=\");var T=\"$\"===c?s:\"#\"===c&&/[boxX]/.test(w)?\"0\"+w.toLowerCase():\"\",k=\"$\"===c?l:/[%p]/.test(w)?v:\"\",A=u[w],M=/[defgprs%]/.test(w);function S(t){var o,s,l,u=T,c=k;if(\"c\"===w)c=A(t)+c,t=\"\";else{var v=(t=+t)<0||1/t<0;if(t=isNaN(t)?y:A(Math.abs(t),b),_&&(t=function(t){t:for(var e,r=t.length,n=1,i=-1;n<r;++n)switch(t[n]){case\".\":i=e=n;break;case\"0\":0===i&&(i=n),e=n;break;default:if(!+t[n])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),v&&0==+t&&\"+\"!==n&&(v=!1),u=(v?\"(\"===n?n:g:\"-\"===n||\"(\"===n?\"\":n)+u,c=(\"s\"===w?d[8+i/3]:\"\")+c+(v&&\"(\"===n?\")\":\"\"),M)for(o=-1,s=t.length;++o<s;)if(48>(l=t.charCodeAt(o))||l>57){c=(46===l?f+t.slice(o+1):t.slice(o))+c,t=t.slice(0,o);break}}x&&!p&&(t=a(t,1/0));var S=u.length+t.length+c.length,E=S<m?new Array(m-S+1).join(e):\"\";switch(x&&p&&(t=a(E+t,E.length?m-c.length:1/0),E=\"\"),r){case\"<\":t=u+t+c+E;break;case\"=\":t=u+E+t+c;break;case\"^\":t=E.slice(0,S=E.length>>1)+u+t+c+E.slice(S);break;default:t=E+u+t+c}return h(t)}return b=void 0===b?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),S.toString=function(){return t+\"\"},S}return{format:m,formatPrefix:function(t,e){var r,i=m(((t=o(t)).type=\"f\",t)),a=3*Math.max(-8,Math.min(8,Math.floor((r=e,((r=n(Math.abs(r)))?r[1]:NaN)/3)))),s=Math.pow(10,-a),l=d[8+a/3];return function(t){return i(s*t)+l}}}}f=v({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],minus:\"-\"}),h=f.format,f.formatPrefix},65704:function(t,e,r){\"use strict\";r.r(e),r.d(e,{geoAiry:function(){return z},geoAiryRaw:function(){return D},geoAitoff:function(){return F},geoAitoffRaw:function(){return R},geoArmadillo:function(){return N},geoArmadilloRaw:function(){return B},geoAugust:function(){return U},geoAugustRaw:function(){return j},geoBaker:function(){return G},geoBakerRaw:function(){return q},geoBerghaus:function(){return W},geoBerghausRaw:function(){return Y},geoBertin1953:function(){return rt},geoBertin1953Raw:function(){return et},geoBoggs:function(){return ct},geoBoggsRaw:function(){return ut},geoBonne:function(){return vt},geoBonneRaw:function(){return dt},geoBottomley:function(){return yt},geoBottomleyRaw:function(){return gt},geoBromley:function(){return xt},geoBromleyRaw:function(){return mt},geoChamberlin:function(){return Et},geoChamberlinAfrica:function(){return St},geoChamberlinRaw:function(){return At},geoCollignon:function(){return Ct},geoCollignonRaw:function(){return Lt},geoCraig:function(){return Ot},geoCraigRaw:function(){return Pt},geoCraster:function(){return zt},geoCrasterRaw:function(){return Dt},geoCylindricalEqualArea:function(){return Ft},geoCylindricalEqualAreaRaw:function(){return Rt},geoCylindricalStereographic:function(){return Nt},geoCylindricalStereographicRaw:function(){return Bt},geoEckert1:function(){return Ut},geoEckert1Raw:function(){return jt},geoEckert2:function(){return Ht},geoEckert2Raw:function(){return Vt},geoEckert3:function(){return Gt},geoEckert3Raw:function(){return qt},geoEckert4:function(){return Yt},geoEckert4Raw:function(){return Zt},geoEckert5:function(){return Xt},geoEckert5Raw:function(){return Wt},geoEckert6:function(){return Kt},geoEckert6Raw:function(){return Jt},geoEisenlohr:function(){return te},geoEisenlohrRaw:function(){return Qt},geoFahey:function(){return ne},geoFaheyRaw:function(){return re},geoFoucaut:function(){return ae},geoFoucautRaw:function(){return ie},geoFoucautSinusoidal:function(){return se},geoFoucautSinusoidalRaw:function(){return oe},geoGilbert:function(){return he},geoGingery:function(){return ge},geoGingeryRaw:function(){return pe},geoGinzburg4:function(){return xe},geoGinzburg4Raw:function(){return me},geoGinzburg5:function(){return _e},geoGinzburg5Raw:function(){return be},geoGinzburg6:function(){return Te},geoGinzburg6Raw:function(){return we},geoGinzburg8:function(){return Ae},geoGinzburg8Raw:function(){return ke},geoGinzburg9:function(){return Se},geoGinzburg9Raw:function(){return Me},geoGringorten:function(){return Ce},geoGringortenQuincuncial:function(){return ii},geoGringortenRaw:function(){return Le},geoGuyou:function(){return De},geoGuyouRaw:function(){return Ie},geoHammer:function(){return $},geoHammerRaw:function(){return J},geoHammerRetroazimuthal:function(){return Be},geoHammerRetroazimuthalRaw:function(){return Re},geoHealpix:function(){return Ye},geoHealpixRaw:function(){return He},geoHill:function(){return Xe},geoHillRaw:function(){return We},geoHomolosine:function(){return er},geoHomolosineRaw:function(){return tr},geoHufnagel:function(){return nr},geoHufnagelRaw:function(){return rr},geoHyperelliptical:function(){return sr},geoHyperellipticalRaw:function(){return or},geoInterrupt:function(){return cr},geoInterruptedBoggs:function(){return hr},geoInterruptedHomolosine:function(){return dr},geoInterruptedMollweide:function(){return gr},geoInterruptedMollweideHemispheres:function(){return mr},geoInterruptedQuarticAuthalic:function(){return fn},geoInterruptedSinuMollweide:function(){return br},geoInterruptedSinusoidal:function(){return wr},geoKavrayskiy7:function(){return kr},geoKavrayskiy7Raw:function(){return Tr},geoLagrange:function(){return Mr},geoLagrangeRaw:function(){return Ar},geoLarrivee:function(){return Lr},geoLarriveeRaw:function(){return Er},geoLaskowski:function(){return Pr},geoLaskowskiRaw:function(){return Cr},geoLittrow:function(){return Ir},geoLittrowRaw:function(){return Or},geoLoximuthal:function(){return zr},geoLoximuthalRaw:function(){return Dr},geoMiller:function(){return Fr},geoMillerRaw:function(){return Rr},geoModifiedStereographic:function(){return Xr},geoModifiedStereographicAlaska:function(){return qr},geoModifiedStereographicGs48:function(){return Gr},geoModifiedStereographicGs50:function(){return Zr},geoModifiedStereographicLee:function(){return Wr},geoModifiedStereographicMiller:function(){return Yr},geoModifiedStereographicRaw:function(){return Br},geoMollweide:function(){return ot},geoMollweideRaw:function(){return at},geoMtFlatPolarParabolic:function(){return Qr},geoMtFlatPolarParabolicRaw:function(){return $r},geoMtFlatPolarQuartic:function(){return en},geoMtFlatPolarQuarticRaw:function(){return tn},geoMtFlatPolarSinusoidal:function(){return nn},geoMtFlatPolarSinusoidalRaw:function(){return rn},geoNaturalEarth:function(){return an.Z},geoNaturalEarth2:function(){return sn},geoNaturalEarth2Raw:function(){return on},geoNaturalEarthRaw:function(){return an.K},geoNellHammer:function(){return un},geoNellHammerRaw:function(){return ln},geoNicolosi:function(){return pn},geoNicolosiRaw:function(){return hn},geoPatterson:function(){return kn},geoPattersonRaw:function(){return Tn},geoPeirceQuincuncial:function(){return ai},geoPierceQuincuncial:function(){return ai},geoPolyconic:function(){return Mn},geoPolyconicRaw:function(){return An},geoPolyhedral:function(){return On},geoPolyhedralButterfly:function(){return Nn},geoPolyhedralCollignon:function(){return Vn},geoPolyhedralWaterman:function(){return Hn},geoProject:function(){return Wn},geoQuantize:function(){return oi},geoQuincuncial:function(){return ni},geoRectangularPolyconic:function(){return li},geoRectangularPolyconicRaw:function(){return si},geoRobinson:function(){return fi},geoRobinsonRaw:function(){return ci},geoSatellite:function(){return pi},geoSatelliteRaw:function(){return hi},geoSinuMollweide:function(){return Qe},geoSinuMollweideRaw:function(){return $e},geoSinusoidal:function(){return pt},geoSinusoidalRaw:function(){return ht},geoStitch:function(){return Oi},geoTimes:function(){return Di},geoTimesRaw:function(){return Ii},geoTwoPointAzimuthal:function(){return Bi},geoTwoPointAzimuthalRaw:function(){return Ri},geoTwoPointAzimuthalUsa:function(){return Fi},geoTwoPointEquidistant:function(){return Ui},geoTwoPointEquidistantRaw:function(){return Ni},geoTwoPointEquidistantUsa:function(){return ji},geoVanDerGrinten:function(){return Hi},geoVanDerGrinten2:function(){return Gi},geoVanDerGrinten2Raw:function(){return qi},geoVanDerGrinten3:function(){return Yi},geoVanDerGrinten3Raw:function(){return Zi},geoVanDerGrinten4:function(){return Xi},geoVanDerGrinten4Raw:function(){return Wi},geoVanDerGrintenRaw:function(){return Vi},geoWagner:function(){return Ki},geoWagner4:function(){return ra},geoWagner4Raw:function(){return ea},geoWagner6:function(){return ia},geoWagner6Raw:function(){return na},geoWagner7:function(){return $i},geoWagnerRaw:function(){return Ji},geoWiechel:function(){return oa},geoWiechelRaw:function(){return aa},geoWinkel3:function(){return la},geoWinkel3Raw:function(){return sa}});var n=r(15002),i=Math.abs,a=Math.atan,o=Math.atan2,s=(Math.ceil,Math.cos),l=Math.exp,u=Math.floor,c=Math.log,f=Math.max,h=Math.min,p=Math.pow,d=Math.round,v=Math.sign||function(t){return t>0?1:t<0?-1:0},g=Math.sin,y=Math.tan,m=1e-6,x=1e-12,b=Math.PI,_=b/2,w=b/4,T=Math.SQRT1_2,k=P(2),A=P(b),M=2*b,S=180/b,E=b/180;function L(t){return t>1?_:t<-1?-_:Math.asin(t)}function C(t){return t>1?0:t<-1?b:Math.acos(t)}function P(t){return t>0?Math.sqrt(t):0}function O(t){return(l(t)-l(-t))/2}function I(t){return(l(t)+l(-t))/2}function D(t){var e=y(t/2),r=2*c(s(t/2))/(e*e);function n(t,e){var n=s(t),i=s(e),a=g(e),o=i*n,l=-((1-o?c((1+o)/2)/(1-o):-.5)+r/(1+o));return[l*i*g(t),l*a]}return n.invert=function(e,n){var a,l=P(e*e+n*n),u=-t/2,f=50;if(!l)return[0,0];do{var h=u/2,p=s(h),d=g(h),v=d/p,y=-c(i(p));u-=a=(2/v*y-r*v-l)/(-y/(d*d)+1-r/(2*p*p))*(p<0?.7:1)}while(i(a)>m&&--f>0);var x=g(u);return[o(e*x,l*s(u)),L(n*x/l)]},n}function z(){var t=_,e=(0,n.r)(D),r=e(t);return r.radius=function(r){return arguments.length?e(t=r*E):t*S},r.scale(179.976).clipAngle(147)}function R(t,e){var r=s(e),n=function(t){return t?t/Math.sin(t):1}(C(r*s(t/=2)));return[2*r*g(t)*n,g(e)*n]}function F(){return(0,n.Z)(R).scale(152.63)}function B(t){var e=g(t),r=s(t),n=t>=0?1:-1,a=y(n*t),l=(1+e-r)/2;function u(t,i){var u=s(i),c=s(t/=2);return[(1+u)*g(t),(n*i>-o(c,a)-.001?0:10*-n)+l+g(i)*r-(1+u)*e*c]}return u.invert=function(t,u){var c=0,f=0,h=50;do{var p=s(c),d=g(c),v=s(f),y=g(f),x=1+v,b=x*d-t,_=l+y*r-x*e*p-u,w=x*p/2,T=-d*y,k=e*x*d/2,A=r*v+e*p*y,M=T*k-A*w,S=(_*T-b*A)/M/2,E=(b*k-_*w)/M;i(E)>2&&(E/=2),c-=S,f-=E}while((i(S)>m||i(E)>m)&&--h>0);return n*f>-o(s(c),a)-.001?[2*c,f]:null},u}function N(){var t=20*E,e=t>=0?1:-1,r=y(e*t),i=(0,n.r)(B),a=i(t),l=a.stream;return a.parallel=function(n){return arguments.length?(r=y((e=(t=n*E)>=0?1:-1)*t),i(t)):t*S},a.stream=function(n){var i=a.rotate(),u=l(n),c=(a.rotate([0,0]),l(n)),f=a.precision();return a.rotate(i),u.sphere=function(){c.polygonStart(),c.lineStart();for(var n=-180*e;e*n<180;n+=90*e)c.point(n,90*e);if(t)for(;e*(n-=3*e*f)>=-180;)c.point(n,e*-o(s(n*E/2),r)*S);c.lineEnd(),c.polygonEnd()},u},a.scale(218.695).center([0,28.0974])}function j(t,e){var r=y(e/2),n=P(1-r*r),i=1+n*s(t/=2),a=g(t)*n/i,o=r/i,l=a*a,u=o*o;return[4/3*a*(3+l-3*u),4/3*o*(3+3*l-u)]}function U(){return(0,n.Z)(j).scale(66.1603)}R.invert=function(t,e){if(!(t*t+4*e*e>b*b+m)){var r=t,n=e,a=25;do{var o,l=g(r),u=g(r/2),c=s(r/2),f=g(n),h=s(n),p=g(2*n),d=f*f,v=h*h,y=u*u,x=1-v*c*c,_=x?C(h*c)*P(o=1/x):o=0,w=2*_*h*u-t,T=_*f-e,k=o*(v*y+_*h*c*d),A=o*(.5*l*p-2*_*f*u),M=.25*o*(p*u-_*f*v*l),S=o*(d*c+_*y*h),E=A*M-S*k;if(!E)break;var L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},j.invert=function(t,e){if(e*=3/8,!(t*=3/8)&&i(e)>1)return null;var r=1+t*t+e*e,n=P((r-P(r*r-4*e*e))/2),a=L(n)/3,l=n?function(t){return c(t+P(t*t-1))}(i(e/n))/3:function(t){return c(t+P(t*t+1))}(i(t))/3,u=s(a),f=I(l),h=f*f-u*u;return[2*v(t)*o(O(l)*u,.25-h),2*v(e)*o(f*g(a),.25+h)]};var V=P(8),H=c(1+k);function q(t,e){var r=i(e);return r<w?[t,c(y(w+e/2))]:[t*s(r)*(2*k-1/g(r)),v(e)*(2*k*(r-w)-c(y(r/2)))]}function G(){return(0,n.Z)(q).scale(112.314)}q.invert=function(t,e){if((n=i(e))<H)return[t,2*a(l(e))-_];var r,n,o=w,u=25;do{var f=s(o/2),h=y(o/2);o-=r=(V*(o-w)-c(h)-n)/(V-f*f/(2*h))}while(i(r)>x&&--u>0);return[t/(s(o)*(V-1/g(o))),v(e)*o]};var Z=r(17889);function Y(t){var e=2*b/t;function r(t,r){var n=(0,Z.N)(t,r);if(i(t)>_){var a=o(n[1],n[0]),l=P(n[0]*n[0]+n[1]*n[1]),u=e*d((a-_)/e)+_,c=o(g(a-=u),2-s(a));a=u+L(b/l*g(c))-c,n[0]=l*s(a),n[1]=l*g(a)}return n}return r.invert=function(t,r){var n=P(t*t+r*r);if(n>_){var i=o(r,t),l=e*d((i-_)/e)+_,u=i>l?-1:1,c=n*s(l-i),f=1/y(u*C((c-b)/P(b*(b-2*c)+n*n)));i=l+2*a((f+u*P(f*f-3))/3),t=n*s(i),r=n*g(i)}return Z.N.invert(t,r)},r}function W(){var t=5,e=(0,n.r)(Y),r=e(t),i=r.stream,a=.01,l=-s(a*E),u=g(a*E);return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),c=i(e),f=(r.rotate([0,0]),i(e));return r.rotate(n),c.sphere=function(){f.polygonStart(),f.lineStart();for(var e=0,r=360/t,n=2*b/t,i=90-180/t,c=_;e<t;++e,i-=r,c-=n)f.point(o(u*s(c),l)*S,L(u*g(c))*S),i<-90?(f.point(-90,-180-i-a),f.point(-90,-180-i+a)):(f.point(90,i+a),f.point(90,i-a));f.lineEnd(),f.polygonEnd()},c},r.scale(87.8076).center([0,17.1875]).clipAngle(179.999)}var X=r(12956);function J(t,e){if(arguments.length<2&&(e=t),1===e)return X.l;if(e===1/0)return K;function r(r,n){var i=(0,X.l)(r/e,n);return i[0]*=t,i}return r.invert=function(r,n){var i=X.l.invert(r/t,n);return i[0]*=e,i},r}function K(t,e){return[t*s(e)/s(e/=2),2*g(e)]}function $(){var t=2,e=(0,n.r)(J),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r.scale(169.529)}function Q(t,e,r){var n,a,o,s=100;r=void 0===r?0:+r,e=+e;do{(a=t(r))===(o=t(r+m))&&(o=a+m),r-=n=-1*m*(a-e)/(a-o)}while(s-- >0&&i(n)>m);return s<0?NaN:r}function tt(t,e,r){return void 0===e&&(e=40),void 0===r&&(r=x),function(n,a,o,s){var l,u,c;o=void 0===o?0:+o,s=void 0===s?0:+s;for(var f=0;f<e;f++){var h=t(o,s),p=h[0]-n,d=h[1]-a;if(i(p)<r&&i(d)<r)break;var v=p*p+d*d;if(v>l)o-=u/=2,s-=c/=2;else{l=v;var g=(o>0?-1:1)*r,y=(s>0?-1:1)*r,m=t(o+g,s),x=t(o,s+y),b=(m[0]-h[0])/g,_=(m[1]-h[1])/g,w=(x[0]-h[0])/y,T=(x[1]-h[1])/y,k=T*b-_*w,A=(i(k)<.5?.5:1)/k;if(o+=u=(d*w-p*T)*A,s+=c=(p*_-d*b)*A,i(u)<r&&i(c)<r)break}}return[o,s]}}function et(){var t=J(1.68,2);function e(e,r){if(e+r<-1.4){var n=(e-r+1.6)*(e+r+1.4)/8;e+=n,r-=.8*n*g(r+b/2)}var i=t(e,r),a=(1-s(e*r))/12;return i[1]<0&&(i[0]*=1+a),i[1]>0&&(i[1]*=1+a/1.5*i[0]*i[0]),i}return e.invert=tt(e),e}function rt(){return(0,n.Z)(et()).rotate([-16.5,-42]).scale(176.57).center([7.93,.09])}function nt(t,e){var r,n=t*g(e),a=30;do{e-=r=(e+g(e)-n)/(1+s(e))}while(i(r)>m&&--a>0);return e/2}function it(t,e,r){function n(n,i){return[t*n*s(i=nt(r,i)),e*g(i)]}return n.invert=function(n,i){return i=L(i/e),[n/(t*s(i)),L((2*i+g(2*i))/r)]},n}K.invert=function(t,e){var r=2*L(e/2);return[t*s(r/2)/s(r),r]};var at=it(k/_,k,b);function ot(){return(0,n.Z)(at).scale(169.529)}var st=2.00276,lt=1.11072;function ut(t,e){var r=nt(b,e);return[st*t/(1/s(e)+lt/s(r)),(e+k*g(r))/st]}function ct(){return(0,n.Z)(ut).scale(160.857)}function ft(t){var e=0,r=(0,n.r)(t),i=r(e);return i.parallel=function(t){return arguments.length?r(e=t*E):e*S},i}function ht(t,e){return[t*s(e),e]}function pt(){return(0,n.Z)(ht).scale(152.63)}function dt(t){if(!t)return ht;var e=1/y(t);function r(r,n){var i=e+t-n,a=i?r*s(n)/i:i;return[i*g(a),e-i*s(a)]}return r.invert=function(r,n){var i=P(r*r+(n=e-n)*n),a=e+t-i;return[i/s(a)*o(r,n),a]},r}function vt(){return ft(dt).scale(123.082).center([0,26.1441]).parallel(45)}function gt(t){function e(e,r){var n=_-r,i=n?e*t*g(n)/n:n;return[n*g(i)/t,_-n*s(i)]}return e.invert=function(e,r){var n=e*t,i=_-r,a=P(n*n+i*i),s=o(n,i);return[(a?a/g(a):1)*s/t,_-a]},e}function yt(){var t=.5,e=(0,n.r)(gt),r=e(t);return r.fraction=function(r){return arguments.length?e(t=+r):t},r.scale(158.837)}ut.invert=function(t,e){var r,n,a=st*e,o=e<0?-w:w,l=25;do{n=a-k*g(o),o-=r=(g(2*o)+2*o-b*g(n))/(2*s(2*o)+2+b*s(n)*k*s(o))}while(i(r)>m&&--l>0);return n=a-k*g(o),[t*(1/s(n)+lt/s(o))/st,n]},ht.invert=function(t,e){return[t/s(e),e]};var mt=it(1,4/b,b);function xt(){return(0,n.Z)(mt).scale(152.63)}var bt=r(66624),_t=r(49386);function wt(t,e,r,n,a,l){var u,c=s(l);if(i(t)>1||i(l)>1)u=C(r*a+e*n*c);else{var f=g(t/2),h=g(l/2);u=2*L(P(f*f+e*n*h*h))}return i(u)>m?[u,o(n*g(l),e*a-r*n*c)]:[0,0]}function Tt(t,e,r){return C((t*t+e*e-r*r)/(2*t*e))}function kt(t){return t-2*b*u((t+b)/(2*b))}function At(t,e,r){for(var n,i=[[t[0],t[1],g(t[1]),s(t[1])],[e[0],e[1],g(e[1]),s(e[1])],[r[0],r[1],g(r[1]),s(r[1])]],a=i[2],o=0;o<3;++o,a=n)n=i[o],a.v=wt(n[1]-a[1],a[3],a[2],n[3],n[2],n[0]-a[0]),a.point=[0,0];var l=Tt(i[0].v[0],i[2].v[0],i[1].v[0]),u=Tt(i[0].v[0],i[1].v[0],i[2].v[0]),c=b-l;i[2].point[1]=0,i[0].point[0]=-(i[1].point[0]=i[0].v[0]/2);var f=[i[2].point[0]=i[0].point[0]+i[2].v[0]*s(l),2*(i[0].point[1]=i[1].point[1]=i[2].v[0]*g(l))];return function(t,e){var r,n=g(e),a=s(e),o=new Array(3);for(r=0;r<3;++r){var l=i[r];if(o[r]=wt(e-l[1],l[3],l[2],a,n,t-l[0]),!o[r][0])return l.point;o[r][1]=kt(o[r][1]-l.v[1])}var h=f.slice();for(r=0;r<3;++r){var p=2==r?0:r+1,d=Tt(i[r].v[0],o[r][0],o[p][0]);o[r][1]<0&&(d=-d),r?1==r?(d=u-d,h[0]-=o[r][0]*s(d),h[1]-=o[r][0]*g(d)):(d=c-d,h[0]+=o[r][0]*s(d),h[1]+=o[r][0]*g(d)):(h[0]+=o[r][0]*s(d),h[1]-=o[r][0]*g(d))}return h[0]/=3,h[1]/=3,h}}function Mt(t){return t[0]*=E,t[1]*=E,t}function St(){return Et([0,22],[45,22],[22.5,-22]).scale(380).center([22.5,2])}function Et(t,e,r){var i=(0,bt.Z)({type:\"MultiPoint\",coordinates:[t,e,r]}),a=[-i[0],-i[1]],o=(0,_t.Z)(a),s=At(Mt(o(t)),Mt(o(e)),Mt(o(r)));s.invert=tt(s);var l=(0,n.Z)(s).rotate(a),u=l.center;return delete l.rotate,l.center=function(t){return arguments.length?u(o(t)):o.invert(u())},l.clipAngle(90)}function Lt(t,e){var r=P(1-g(e));return[2/A*t*r,A*(1-r)]}function Ct(){return(0,n.Z)(Lt).scale(95.6464).center([0,30])}function Pt(t){var e=y(t);function r(t,r){return[t,(t?t/g(t):1)*(g(r)*s(t)-e*s(r))]}return r.invert=e?function(t,r){t&&(r*=g(t)/t);var n=s(t);return[t,2*o(P(n*n+e*e-r*r)-n,e-r)]}:function(t,e){return[t,L(t?e*y(t)/t:e)]},r}function Ot(){return ft(Pt).scale(249.828).clipAngle(90)}Lt.invert=function(t,e){var r=(r=e/A-1)*r;return[r>0?t*P(b/r)/2:0,L(1-r)]};var It=P(3);function Dt(t,e){return[It*t*(2*s(2*e/3)-1)/A,It*A*g(e/3)]}function zt(){return(0,n.Z)(Dt).scale(156.19)}function Rt(t){var e=s(t);function r(t,r){return[t*e,g(r)/e]}return r.invert=function(t,r){return[t/e,L(r*e)]},r}function Ft(){return ft(Rt).parallel(38.58).scale(195.044)}function Bt(t){var e=s(t);function r(t,r){return[t*e,(1+e)*y(r/2)]}return r.invert=function(t,r){return[t/e,2*a(r/(1+e))]},r}function Nt(){return ft(Bt).scale(124.75)}function jt(t,e){var r=P(8/(3*b));return[r*t*(1-i(e)/b),r*e]}function Ut(){return(0,n.Z)(jt).scale(165.664)}function Vt(t,e){var r=P(4-3*g(i(e)));return[2/P(6*b)*t*r,v(e)*P(2*b/3)*(2-r)]}function Ht(){return(0,n.Z)(Vt).scale(165.664)}function qt(t,e){var r=P(b*(4+b));return[2/r*t*(1+P(1-4*e*e/(b*b))),4/r*e]}function Gt(){return(0,n.Z)(qt).scale(180.739)}function Zt(t,e){var r=(2+_)*g(e);e/=2;for(var n=0,a=1/0;n<10&&i(a)>m;n++){var o=s(e);e-=a=(e+g(e)*(o+2)-r)/(2*o*(1+o))}return[2/P(b*(4+b))*t*(1+s(e)),2*P(b/(4+b))*g(e)]}function Yt(){return(0,n.Z)(Zt).scale(180.739)}function Wt(t,e){return[t*(1+s(e))/P(2+b),2*e/P(2+b)]}function Xt(){return(0,n.Z)(Wt).scale(173.044)}function Jt(t,e){for(var r=(1+_)*g(e),n=0,a=1/0;n<10&&i(a)>m;n++)e-=a=(e+g(e)-r)/(1+s(e));return r=P(2+b),[t*(1+s(e))/r,2*e/r]}function Kt(){return(0,n.Z)(Jt).scale(173.044)}Dt.invert=function(t,e){var r=3*L(e/(It*A));return[A*t/(It*(2*s(2*r/3)-1)),r]},jt.invert=function(t,e){var r=P(8/(3*b)),n=e/r;return[t/(r*(1-i(n)/b)),n]},Vt.invert=function(t,e){var r=2-i(e)/P(2*b/3);return[t*P(6*b)/(2*r),v(e)*L((4-r*r)/3)]},qt.invert=function(t,e){var r=P(b*(4+b))/2;return[t*r/(1+P(1-e*e*(4+b)/(4*b))),e*r/2]},Zt.invert=function(t,e){var r=e*P((4+b)/b)/2,n=L(r),i=s(n);return[t/(2/P(b*(4+b))*(1+i)),L((n+r*(i+2))/(2+_))]},Wt.invert=function(t,e){var r=P(2+b),n=e*r/2;return[r*t/(1+s(n)),n]},Jt.invert=function(t,e){var r=1+_,n=P(r/2);return[2*t*n/(1+s(e*=n)),L((e+g(e))/r)]};var $t=3+2*k;function Qt(t,e){var r=g(t/=2),n=s(t),i=P(s(e)),o=s(e/=2),l=g(e)/(o+k*n*i),u=P(2/(1+l*l)),f=P((k*o+(n+r)*i)/(k*o+(n-r)*i));return[$t*(u*(f-1/f)-2*c(f)),$t*(u*l*(f+1/f)-2*a(l))]}function te(){return(0,n.Z)(Qt).scale(62.5271)}Qt.invert=function(t,e){if(!(r=j.invert(t/1.2,1.065*e)))return null;var r,n=r[0],o=r[1],l=20;t/=$t,e/=$t;do{var u=n/2,p=o/2,d=g(u),v=s(u),y=g(p),x=s(p),b=s(o),w=P(b),A=y/(x+k*v*w),M=A*A,S=P(2/(1+M)),E=(k*x+(v+d)*w)/(k*x+(v-d)*w),L=P(E),C=L-1/L,O=L+1/L,I=S*C-2*c(L)-t,D=S*A*O-2*a(A)-e,z=y&&T*w*d*M/y,R=(k*v*x+w)/(2*(x+k*v*w)*(x+k*v*w)*w),F=-.5*A*S*S*S,B=F*z,N=F*R,U=(U=2*x+k*w*(v-d))*U*L,V=(k*v*x*w+b)/U,H=-k*d*y/(w*U),q=C*B-2*V/L+S*(V+V/E),G=C*N-2*H/L+S*(H+H/E),Z=A*O*B-2*z/(1+M)+S*O*z+S*A*(V-V/E),Y=A*O*N-2*R/(1+M)+S*O*R+S*A*(H-H/E),W=G*Z-Y*q;if(!W)break;var X=(D*G-I*Y)/W,J=(I*Z-D*q)/W;n-=X,o=f(-_,h(_,o-J))}while((i(X)>m||i(J)>m)&&--l>0);return i(i(o)-_)<m?[0,o]:l&&[n,o]};var ee=s(35*E);function re(t,e){var r=y(e/2);return[t*ee*P(1-r*r),(1+ee)*r]}function ne(){return(0,n.Z)(re).scale(137.152)}function ie(t,e){var r=e/2,n=s(r);return[2*t/A*s(e)*n*n,A*y(r)]}function ae(){return(0,n.Z)(ie).scale(135.264)}function oe(t){var e=1-t,r=i(b,0)[0]-i(-b,0)[0],n=P(2*(i(0,_)[1]-i(0,-_)[1])/r);function i(r,n){var i=s(n),a=g(n);return[i/(e+t*i)*r,e*n+t*a]}function a(t,e){var r=i(t,e);return[r[0]*n,r[1]/n]}function o(t){return a(0,t)[1]}return a.invert=function(r,i){var a=Q(o,i);return[r/n*(t+e/s(a)),a]},a}function se(){var t=.5,e=(0,n.r)(oe),r=e(t);return r.alpha=function(r){return arguments.length?e(t=+r):t},r.scale(168.725)}re.invert=function(t,e){var r=e/(1+ee);return[t&&t/(ee*P(1-r*r)),2*a(r)]},ie.invert=function(t,e){var r=a(e/A),n=s(r),i=2*r;return[t*A/2/(s(i)*n*n),i]};var le=r(57962),ue=r(97492);function ce(t){return[t[0]/2,L(y(t[1]/2*E))*S]}function fe(t){return[2*t[0],2*a(g(t[1]*E))*S]}function he(t){null==t&&(t=le.Z);var e=t(),r=(0,ue.Z)().scale(S).precision(0).clipAngle(null).translate([0,0]);function n(t){return e(ce(t))}function i(t){n[t]=function(){return arguments.length?(e[t].apply(e,arguments),n):e[t]()}}return e.invert&&(n.invert=function(t){return fe(e.invert(t))}),n.stream=function(t){var n=e.stream(t),i=r.stream({point:function(t,e){n.point(t/2,L(y(-e/2*E))*S)},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}});return i.sphere=n.sphere,i},n.rotate=function(t){return arguments.length?(r.rotate(t),n):r.rotate()},n.center=function(t){return arguments.length?(e.center(ce(t)),n):fe(e.center())},i(\"angle\"),i(\"clipAngle\"),i(\"clipExtent\"),i(\"fitExtent\"),i(\"fitHeight\"),i(\"fitSize\"),i(\"fitWidth\"),i(\"scale\"),i(\"translate\"),i(\"precision\"),n.scale(249.5)}function pe(t,e){var r=2*b/e,n=t*t;function a(e,a){var l=(0,Z.N)(e,a),u=l[0],c=l[1],f=u*u+c*c;if(f>n){var h=P(f),p=o(c,u),v=r*d(p/r),y=p-v,x=t*s(y),w=(t*g(y)-y*g(x))/(_-x),T=de(y,w),k=(b-t)/ve(T,x,b);u=h;var A,M=50;do{u-=A=(t+ve(T,x,u)*k-h)/(T(u)*k)}while(i(A)>m&&--M>0);c=y*g(u),u<_&&(c-=w*(u-_));var S=g(v),E=s(v);l[0]=u*E-c*S,l[1]=u*S+c*E}return l}return a.invert=function(e,a){var l=e*e+a*a;if(l>n){var u=P(l),c=o(a,e),f=r*d(c/r),h=c-f;e=u*s(h),a=u*g(h);for(var p=e-_,v=g(e),y=a/v,m=e<_?1/0:0,w=10;;){var T=t*g(y),k=t*s(y),A=g(k),M=_-k,S=(T-y*A)/M,E=de(y,S);if(i(m)<x||!--w)break;y-=m=(y*v-S*p-a)/(v-2*p*(M*(k+y*T*s(k)-A)-T*(T-y*A))/(M*M))}e=(u=t+ve(E,k,e)*(b-t)/ve(E,k,b))*s(c=f+y),a=u*g(c)}return Z.N.invert(e,a)},a}function de(t,e){return function(r){var n=t*s(r);return r<_&&(n-=e),P(1+n*n)}}function ve(t,e,r){for(var n=(r-e)/50,i=t(e)+t(r),a=1,o=e;a<50;++a)i+=2*t(o+=n);return.5*i*n}function ge(){var t=6,e=30*E,r=s(e),i=g(e),a=(0,n.r)(pe),l=a(e,t),u=l.stream,c=-s(.01*E),f=g(.01*E);return l.radius=function(n){return arguments.length?(r=s(e=n*E),i=g(e),a(e,t)):e*S},l.lobes=function(r){return arguments.length?a(e,t=+r):t},l.stream=function(e){var n=l.rotate(),a=u(e),h=(l.rotate([0,0]),u(e));return l.rotate(n),a.sphere=function(){h.polygonStart(),h.lineStart();for(var e=0,n=2*b/t,a=0;e<t;++e,a-=n)h.point(o(f*s(a),c)*S,L(f*g(a))*S),h.point(o(i*s(a-n/2),r)*S,L(i*g(a-n/2))*S);h.lineEnd(),h.polygonEnd()},a},l.rotate([90,-40]).scale(91.7095).clipAngle(179.999)}function ye(t,e,r,n,a,o,l,u){function c(i,c){if(!c)return[t*i/b,0];var f=c*c,h=t+f*(e+f*(r+f*n)),p=c*(a-1+f*(o-u+f*l)),d=(h*h+p*p)/(2*p),v=i*L(h/d)/b;return[d*g(v),c*(1+f*u)+d*(1-s(v))]}return arguments.length<8&&(u=0),c.invert=function(c,f){var h,p,d=b*c/t,v=f,y=50;do{var x=v*v,_=t+x*(e+x*(r+x*n)),w=v*(a-1+x*(o-u+x*l)),T=_*_+w*w,k=2*w,A=T/k,M=A*A,S=L(_/A)/b,E=d*S,C=_*_,O=(2*e+x*(4*r+6*x*n))*v,I=a+x*(3*o+5*x*l),D=(2*(_*O+w*(I-1))*k-T*(2*(I-1)))/(k*k),z=s(E),R=g(E),F=A*z,B=A*R,N=d/b*(1/P(1-C/M))*(O*A-_*D)/M,j=B-c,U=v*(1+x*u)+A-F-f,V=D*R+F*N,H=F*S,q=1+D-(D*z-B*N),G=B*S,Z=V*G-q*H;if(!Z)break;d-=h=(U*V-j*q)/Z,v-=p=(j*G-U*H)/Z}while((i(h)>m||i(p)>m)&&--y>0);return[d,v]},c}var me=ye(2.8284,-1.6988,.75432,-.18071,1.76003,-.38914,.042555);function xe(){return(0,n.Z)(me).scale(149.995)}var be=ye(2.583819,-.835827,.170354,-.038094,1.543313,-.411435,.082742);function _e(){return(0,n.Z)(be).scale(153.93)}var we=ye(5/6*b,-.62636,-.0344,0,1.3493,-.05524,0,.045);function Te(){return(0,n.Z)(we).scale(130.945)}function ke(t,e){var r=t*t,n=e*e;return[t*(1-.162388*n)*(.87-952426e-9*r*r),e*(1+n/12)]}function Ae(){return(0,n.Z)(ke).scale(131.747)}ke.invert=function(t,e){var r,n=t,a=e,o=50;do{var s=a*a;a-=r=(a*(1+s/12)-e)/(1+s/4)}while(i(r)>m&&--o>0);o=50,t/=1-.162388*s;do{var l=(l=n*n)*l;n-=r=(n*(.87-952426e-9*l)-t)/(.87-.00476213*l)}while(i(r)>m&&--o>0);return[n,a]};var Me=ye(2.6516,-.76534,.19123,-.047094,1.36289,-.13965,.031762);function Se(){return(0,n.Z)(Me).scale(131.087)}function Ee(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var i=r>0?-.5:.5,a=t(r+i*b,n);return a[0]-=i*e,a}return t.invert&&(r.invert=function(r,n){var i=r>0?-.5:.5,a=t.invert(r+i*e,n),o=a[0]-i*b;return o<-b?o+=2*b:o>b&&(o-=2*b),a[0]=o,a}),r}function Le(t,e){var r=v(t),n=v(e),a=s(e),l=s(t)*a,u=g(t)*a,c=g(n*e);t=i(o(u,c)),e=L(l),i(t-_)>m&&(t%=_);var f=function(t,e){if(e===_)return[0,0];var r,n,a=g(e),o=a*a,l=o*o,u=1+l,c=1+3*l,f=1-l,h=L(1/P(u)),p=f+o*u*h,d=(1-a)/p,v=P(d),y=d*u,x=P(y),w=v*f;if(0===t)return[0,-(w+o*x)];var T,k=s(e),A=1/k,M=2*a*k,S=(-p*k-(1-a)*((-3*o+h*c)*M))/(p*p),E=-A*M,C=-A*(o*u*S+d*c*M),O=-2*A*(f*(.5*S/v)-2*o*v*M),I=4*t/b;if(t>.222*b||e<b/4&&t>.175*b){if(r=(w+o*P(y*(1+l)-w*w))/(1+l),t>b/4)return[r,r];var D=r,z=.5*r;r=.5*(z+D),n=50;do{var R=r*(O+E*P(y-r*r))+C*L(r/x)-I;if(!R)break;R<0?z=r:D=r,r=.5*(z+D)}while(i(D-z)>m&&--n>0)}else{r=m,n=25;do{var F=r*r,B=P(y-F),N=O+E*B,j=r*N+C*L(r/x)-I;r-=T=B?j/(N+(C-E*F)/B):0}while(i(T)>m&&--n>0)}return[r,-w-o*P(y-r*r)]}(t>b/4?_-t:t,e);return t>b/4&&(c=f[0],f[0]=-f[1],f[1]=-c),f[0]*=r,f[1]*=-n,f}function Ce(){return(0,n.Z)(Ee(Le)).scale(239.75)}function Pe(t,e){var r,n,o,u,c,f;if(e<m)return[(u=g(t))-(r=e*(t-u*(n=s(t)))/4)*n,n+r*u,1-e*u*u/2,t-r];if(e>=1-m)return r=(1-e)/4,o=1/(n=I(t)),[(u=((f=l(2*(f=t)))-1)/(f+1))+r*((c=n*O(t))-t)/(n*n),o-r*u*o*(c-t),o+r*u*o*(c+t),2*a(l(t))-_+r*(c-t)/n];var h=[1,0,0,0,0,0,0,0,0],p=[P(e),0,0,0,0,0,0,0,0],d=0;for(n=P(1-e),c=1;i(p[d]/h[d])>m&&d<8;)r=h[d++],p[d]=(r-n)/2,h[d]=(r+n)/2,n=P(r*n),c*=2;o=c*h[d]*t;do{o=(L(u=p[d]*g(n=o)/h[d])+o)/2}while(--d);return[g(o),u=s(o),u/s(o-n),o]}function Oe(t,e){if(!e)return t;if(1===e)return c(y(t/2+w));for(var r=1,n=P(1-e),o=P(e),s=0;i(o)>m;s++){if(t%b){var l=a(n*y(t)/r);l<0&&(l+=b),t+=l+~~(t/b)*b}else t+=t;o=(r+n)/2,n=P(r*n),o=((r=o)-n)/2}return t/(p(2,s)*r)}function Ie(t,e){var r=(k-1)/(k+1),n=P(1-r*r),u=Oe(_,n*n),f=c(y(b/4+i(e)/2)),h=l(-1*f)/P(r),p=function(t,e){var r=t*t,n=e+1,i=1-r-e*e;return[.5*((t>=0?_:-_)-o(i,2*t)),-.25*c(i*i+4*r)+.5*c(n*n+r)]}(h*s(-1*t),h*g(-1*t)),d=function(t,e,r){var n=i(t),o=O(i(e));if(n){var s=1/g(n),l=1/(y(n)*y(n)),u=-(l+r*(o*o*s*s)-1+r),c=(-u+P(u*u-(r-1)*l*4))/2;return[Oe(a(1/P(c)),r)*v(t),Oe(a(P((c/l-1)/r)),1-r)*v(e)]}return[0,Oe(a(o),1-r)*v(e)]}(p[0],p[1],n*n);return[-d[1],(e>=0?1:-1)*(.5*u-d[0])]}function De(){return(0,n.Z)(Ee(Ie)).scale(151.496)}Le.invert=function(t,e){i(t)>1&&(t=2*v(t)-t),i(e)>1&&(e=2*v(e)-e);var r=v(t),n=v(e),a=-r*t,l=-n*e,u=l/a<1,c=function(t,e){for(var r=0,n=1,a=.5,o=50;;){var l=a*a,u=P(a),c=L(1/P(1+l)),f=1-l+a*(1+l)*c,h=(1-u)/f,p=P(h),d=h*(1+l),v=p*(1-l),g=P(d-t*t),y=e+v+a*g;if(i(n-r)<x||0==--o||0===y)break;y>0?r=a:n=a,a=.5*(r+n)}if(!o)return null;var m=L(u),_=s(m),w=1/_,T=2*u*_,k=(-f*_-(-3*a+c*(1+3*l))*T*(1-u))/(f*f);return[b/4*(t*(-2*w*((1-l)*(.5*k/p)-2*a*p*T)+-w*T*g)+-w*(a*(1+l)*k+h*(1+3*l)*T)*L(t/P(d))),m]}(u?l:a,u?a:l),f=c[0],h=c[1],p=s(h);return u&&(f=-_-f),[r*(o(g(f)*p,-g(h))+b),n*L(s(f)*p)]},Ie.invert=function(t,e){var r,n,i,s,u,f,h=(k-1)/(k+1),p=P(1-h*h),d=(n=-t,i=p*p,(r=.5*Oe(_,p*p)-e)?(s=Pe(r,i),n?(f=(u=Pe(n,1-i))[1]*u[1]+i*s[0]*s[0]*u[0]*u[0],[[s[0]*u[2]/f,s[1]*s[2]*u[0]*u[1]/f],[s[1]*u[1]/f,-s[0]*s[2]*u[0]*u[2]/f],[s[2]*u[1]*u[2]/f,-i*s[0]*s[1]*u[0]/f]]):[[s[0],0],[s[1],0],[s[2],0]]):[[0,(u=Pe(n,1-i))[0]/u[1]],[1/u[1],0],[u[2]/u[1],0]]),v=function(t,e){var r=e[0]*e[0]+e[1]*e[1];return[(t[0]*e[0]+t[1]*e[1])/r,(t[1]*e[0]-t[0]*e[1])/r]}(d[0],d[1]);return[o(v[1],v[0])/-1,2*a(l(-.5*c(h*v[0]*v[0]+h*v[1]*v[1])))-_]};var ze=r(7613);function Re(t){var e=g(t),r=s(t),n=Fe(t);function a(t,a){var o=n(t,a);t=o[0],a=o[1];var l=g(a),u=s(a),c=s(t),f=C(e*l+r*u*c),h=g(f),p=i(h)>m?f/h:1;return[p*r*g(t),(i(t)>_?p:-p)*(e*u-r*l*c)]}return n.invert=Fe(-t),a.invert=function(t,r){var i=P(t*t+r*r),a=-g(i),l=s(i),u=i*l,c=-r*a,f=i*e,h=P(u*u+c*c-f*f),p=o(u*f+c*h,c*f-u*h),d=(i>_?-1:1)*o(t*a,i*s(p)*l+r*g(p)*a);return n.invert(d,p)},a}function Fe(t){var e=g(t),r=s(t);return function(t,n){var i=s(n),a=s(t)*i,l=g(t)*i,u=g(n);return[o(l,a*r-u*e),L(u*r+a*e)]}}function Be(){var t=0,e=(0,n.r)(Re),r=e(t),i=r.rotate,a=r.stream,o=(0,ze.Z)();return r.parallel=function(n){if(!arguments.length)return t*S;var i=r.rotate();return e(t=n*E).rotate(i)},r.rotate=function(e){return arguments.length?(i.call(r,[e[0],e[1]-t*S]),o.center([-e[0],-e[1]]),r):((e=i.call(r))[1]+=t*S,e)},r.stream=function(t){return(t=a(t)).sphere=function(){t.polygonStart();var e,r=o.radius(89.99)().coordinates[0],n=r.length-1,i=-1;for(t.lineStart();++i<n;)t.point((e=r[i])[0],e[1]);for(t.lineEnd(),n=(r=o.radius(90.01)().coordinates[0]).length-1,t.lineStart();--i>=0;)t.point((e=r[i])[0],e[1]);t.lineEnd(),t.polygonEnd()},t},r.scale(79.4187).parallel(45).clipAngle(179.999)}var Ne=r(33064),je=r(72736),Ue=L(1-1/3)*S,Ve=Rt(0);function He(t){var e=Ue*E,r=Lt(b,e)[0]-Lt(-b,e)[0],n=Ve(0,e)[1],a=Lt(0,e)[1],o=A-a,s=M/t,l=4/M,c=n+o*o*4/M;function p(p,d){var v,g=i(d);if(g>e){var y=h(t-1,f(0,u((p+b)/s)));(v=Lt(p+=b*(t-1)/t-y*s,g))[0]=v[0]*M/r-M*(t-1)/(2*t)+y*M/t,v[1]=n+4*(v[1]-a)*o/M,d<0&&(v[1]=-v[1])}else v=Ve(p,d);return v[0]*=l,v[1]/=c,v}return p.invert=function(e,p){e/=l;var d=i(p*=c);if(d>n){var v=h(t-1,f(0,u((e+b)/s)));e=(e+b*(t-1)/t-v*s)*r/M;var g=Lt.invert(e,.25*(d-n)*M/o+a);return g[0]-=b*(t-1)/t-v*s,p<0&&(g[1]=-g[1]),g}return Ve.invert(e,p)},p}function qe(t,e){return[t,1&e?90-m:Ue]}function Ge(t,e){return[t,1&e?-90+m:-Ue]}function Ze(t){return[t[0]*(1-m),t[1]]}function Ye(){var t=4,e=(0,n.r)(He),r=e(t),i=r.stream;return r.lobes=function(r){return arguments.length?e(t=+r):t},r.stream=function(e){var n=r.rotate(),a=i(e),o=(r.rotate([0,0]),i(e));return r.rotate(n),a.sphere=function(){var e,r;(0,je.Z)((e=180/t,r=[].concat((0,Ne.w6)(-180,180+e/2,e).map(qe),(0,Ne.w6)(180,-180-e/2,-e).map(Ge)),{type:\"Polygon\",coordinates:[180===e?r.map(Ze):r]}),o)},a},r.scale(239.75)}function We(t){var e,r=1+t,n=L(g(1/r)),a=2*P(b/(e=b+4*n*r)),l=.5*a*(r+P(t*(2+t))),u=t*t,c=r*r;function f(f,h){var p,d,v=1-g(h);if(v&&v<2){var y,m=_-h,w=25;do{var T=g(m),k=s(m),A=n+o(T,r-k),M=1+c-2*r*k;m-=y=(m-u*n-r*T+M*A-.5*v*e)/(2*r*T*A)}while(i(y)>x&&--w>0);p=a*P(M),d=f*A/b}else p=a*(t+v),d=f*n/b;return[p*g(d),l-p*s(d)]}return f.invert=function(t,i){var s=t*t+(i-=l)*i,f=(1+c-s/(a*a))/(2*r),h=C(f),p=g(h),d=n+o(p,r-f);return[L(t/P(s))*b/d,L(1-2*(h-u*n-r*p+(1+c-2*r*f)*d)/e)]},f}function Xe(){var t=1,e=(0,n.r)(We),r=e(t);return r.ratio=function(r){return arguments.length?e(t=+r):t},r.scale(167.774).center([0,18.67])}var Je=.7109889596207567,Ke=.0528035274542;function $e(t,e){return e>-Je?((t=at(t,e))[1]+=Ke,t):ht(t,e)}function Qe(){return(0,n.Z)($e).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}function tr(t,e){return i(e)>Je?((t=at(t,e))[1]-=e>0?Ke:-Ke,t):ht(t,e)}function er(){return(0,n.Z)(tr).scale(152.63)}function rr(t,e,r,n){var i=P(4*b/(2*r+(1+t-e/2)*g(2*r)+(t+e)/2*g(4*r)+e/2*g(6*r))),a=P(n*g(r)*P((1+t*s(2*r)+e*s(4*r))/(1+t+e))),o=r*u(1);function l(r){return P(1+t*s(2*r)+e*s(4*r))}function u(n){var i=n*r;return(2*i+(1+t-e/2)*g(2*i)+(t+e)/2*g(4*i)+e/2*g(6*i))/r}function c(t){return l(t)*g(t)}var f=function(t,e){var n=r*Q(u,o*g(e)/r,e/b);isNaN(n)&&(n=r*v(e));var c=i*l(n);return[c*a*t/b*s(n),c/a*g(n)]};return f.invert=function(t,e){var n=Q(c,e*a/i);return[t*b/(s(n)*i*a*l(n)),L(r*u(n/r)/o)]},0===r&&(i=P(n/b),(f=function(t,e){return[t*i,g(e)/i]}).invert=function(t,e){return[t/i,L(e*i)]}),f}function nr(){var t=1,e=0,r=45*E,i=2,a=(0,n.r)(rr),o=a(t,e,r,i);return o.a=function(n){return arguments.length?a(t=+n,e,r,i):t},o.b=function(n){return arguments.length?a(t,e=+n,r,i):e},o.psiMax=function(n){return arguments.length?a(t,e,r=+n*E,i):r*S},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(180.739)}function ir(t,e,r,n,i,a,o,s,l,u,c){if(c.nanEncountered)return NaN;var f,h,p,d,v,g,y,m,x,b;if(h=t(e+.25*(f=r-e)),p=t(r-.25*f),isNaN(h))c.nanEncountered=!0;else{if(!isNaN(p))return b=((g=(d=f*(n+4*h+i)/12)+(v=f*(i+4*p+a)/12))-o)/15,u>l?(c.maxDepthCount++,g+b):Math.abs(b)<s?g+b:(m=ir(t,e,y=e+.5*f,n,h,i,d,.5*s,l,u+1,c),isNaN(m)?(c.nanEncountered=!0,NaN):(x=ir(t,y,r,i,p,a,v,.5*s,l,u+1,c),isNaN(x)?(c.nanEncountered=!0,NaN):m+x));c.nanEncountered=!0}}function ar(t,e,r,n,i){void 0===n&&(n=1e-8),void 0===i&&(i=20);var a=t(e),o=t(.5*(e+r)),s=t(r);return ir(t,e,r,a,o,s,(a+4*o+s)*(r-e)/6,n,i,1,{maxDepthCount:0,nanEncountered:!1})}function or(t,e,r){function n(r){return t+(1-t)*p(1-p(r,e),1/e)}function a(t){return ar(n,0,t,1e-4)}for(var o=1/a(1),s=1e3,l=(1+1e-8)*o,u=[],c=0;c<=s;c++)u.push(a(c/s)*l);function f(t){var e=0,r=s,n=500;do{u[n]>t?r=n:e=n,n=e+r>>1}while(n>e);var i=u[n+1]-u[n];return i&&(i=(t-u[n+1])/i),(n+1+i)/s}var h=2*f(1)/b*o/r,d=function(t,e){var r=f(i(g(e))),a=n(r)*t;return r/=h,[a,e>=0?r:-r]};return d.invert=function(t,e){var r;return i(e*=h)<1&&(r=v(e)*L(a(i(e))*o)),[t/n(i(e)),r]},d}function sr(){var t=0,e=2.5,r=1.183136,i=(0,n.r)(or),a=i(t,e,r);return a.alpha=function(n){return arguments.length?i(t=+n,e,r):t},a.k=function(n){return arguments.length?i(t,e=+n,r):e},a.gamma=function(n){return arguments.length?i(t,e,r=+n):r},a.scale(152.63)}function lr(t,e){return i(t[0]-e[0])<m&&i(t[1]-e[1])<m}function ur(t,e){for(var r,n,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){n=((r=t[a])[0]-s[0])/e,i=(r[1]-s[1])/e;for(var u=0;u<e;++u)l.push([s[0]+u*n,s[1]+u*i]);s=r}return l.push(r),l}function cr(t,e,r){var i,a;function o(r,n){for(var i=n<0?-1:1,a=e[+(n<0)],o=0,s=a.length-1;o<s&&r>a[o][2][0];++o);var l=t(r-a[o][1][0],n);return l[0]+=t(a[o][1][0],i*n>i*a[o][0][1]?a[o][0][1]:n)[0],l}r?o.invert=r(o):t.invert&&(o.invert=function(r,n){for(var i=a[+(n<0)],s=e[+(n<0)],l=0,u=i.length;l<u;++l){var c=i[l];if(c[0][0]<=r&&r<c[1][0]&&c[0][1]<=n&&n<c[1][1]){var f=t.invert(r-t(s[l][1][0],0)[0],n);return f[0]+=s[l][1][0],lr(o(f[0],f[1]),[r,n])?f:null}}});var s=(0,n.Z)(o),l=s.stream;return s.stream=function(t){var e=s.rotate(),r=l(t),n=(s.rotate([0,0]),l(t));return s.rotate(e),r.sphere=function(){(0,je.Z)(i,n)},r},s.lobes=function(r){return arguments.length?(i=function(t){var e,r,n,i,a,o,s,l=[],u=t[0].length;for(s=0;s<u;++s)r=(e=t[0][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[r+m,n+m],[r+m,i-m],[a-m,i-m],[a-m,o+m]],30));for(s=t[1].length-1;s>=0;--s)r=(e=t[1][s])[0][0],n=e[0][1],i=e[1][1],a=e[2][0],o=e[2][1],l.push(ur([[a-m,o-m],[a-m,i+m],[r+m,i+m],[r+m,n-m]],30));return{type:\"Polygon\",coordinates:[(0,Ne.TS)(l)]}}(r),e=r.map((function(t){return t.map((function(t){return[[t[0][0]*E,t[0][1]*E],[t[1][0]*E,t[1][1]*E],[t[2][0]*E,t[2][1]*E]]}))})),a=e.map((function(e){return e.map((function(e){var r,n=t(e[0][0],e[0][1])[0],i=t(e[2][0],e[2][1])[0],a=t(e[1][0],e[0][1])[1],o=t(e[1][0],e[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]}))})),s):e.map((function(t){return t.map((function(t){return[[t[0][0]*S,t[0][1]*S],[t[1][0]*S,t[1][1]*S],[t[2][0]*S,t[2][1]*S]]}))}))},null!=e&&s.lobes(e),s}$e.invert=function(t,e){return e>-Je?at.invert(t,e-Ke):ht.invert(t,e)},tr.invert=function(t,e){return i(e)>Je?at.invert(t,e+(e>0?Ke:-Ke)):ht.invert(t,e)};var fr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function hr(){return cr(ut,fr).scale(160.857)}var pr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function dr(){return cr(tr,pr).scale(152.63)}var vr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function gr(){return cr(at,vr).scale(169.529)}var yr=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function mr(){return cr(at,yr).scale(169.529).rotate([20,0])}var xr=[[[[-180,35],[-30,90],[0,35]],[[0,35],[30,90],[180,35]]],[[[-180,-10],[-102,-90],[-65,-10]],[[-65,-10],[5,-90],[77,-10]],[[77,-10],[103,-90],[180,-10]]]];function br(){return cr($e,xr,tt).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}var _r=[[[[-180,0],[-110,90],[-40,0]],[[-40,0],[0,90],[40,0]],[[40,0],[110,90],[180,0]]],[[[-180,0],[-110,-90],[-40,0]],[[-40,0],[0,-90],[40,0]],[[40,0],[110,-90],[180,0]]]];function wr(){return cr(ht,_r).scale(152.63).rotate([-20,0])}function Tr(t,e){return[3/M*t*P(b*b/3-e*e),e]}function kr(){return(0,n.Z)(Tr).scale(158.837)}function Ar(t){function e(e,r){if(i(i(r)-_)<m)return[0,r<0?-2:2];var n=g(r),a=p((1+n)/(1-n),t/2),o=.5*(a+1/a)+s(e*=t);return[2*g(e)/o,(a-1/a)/o]}return e.invert=function(e,r){var n=i(r);if(i(n-2)<m)return e?null:[0,v(r)*_];if(n>2)return null;var a=(e/=2)*e,s=(r/=2)*r,l=2*r/(1+a+s);return l=p((1+l)/(1-l),1/t),[o(2*e,1-a-s)/t,L((l-1)/(l+1))]},e}function Mr(){var t=.5,e=(0,n.r)(Ar),r=e(t);return r.spacing=function(r){return arguments.length?e(t=+r):t},r.scale(124.75)}Tr.invert=function(t,e){return[M/3*t/P(b*b/3-e*e),e]};var Sr=b/k;function Er(t,e){return[t*(1+P(s(e)))/2,e/(s(e/2)*s(t/6))]}function Lr(){return(0,n.Z)(Er).scale(97.2672)}function Cr(t,e){var r=t*t,n=e*e;return[t*(.975534+n*(-.0143059*r-.119161+-.0547009*n)),e*(1.00384+r*(.0802894+-.02855*n+199025e-9*r)+n*(.0998909+-.0491032*n))]}function Pr(){return(0,n.Z)(Cr).scale(139.98)}function Or(t,e){return[g(t)/s(e),y(e)*s(t)]}function Ir(){return(0,n.Z)(Or).scale(144.049).clipAngle(89.999)}function Dr(t){var e=s(t),r=y(w+t/2);function n(n,a){var o=a-t,s=i(o)<m?n*e:i(s=w+a/2)<m||i(i(s)-_)<m?0:n*o/c(y(s)/r);return[s,o]}return n.invert=function(n,a){var o,s=a+t;return[i(a)<m?n/e:i(o=w+s/2)<m||i(i(o)-_)<m?0:n*c(y(o)/r)/a,s]},n}function zr(){return ft(Dr).parallel(40).scale(158.837)}function Rr(t,e){return[t,1.25*c(y(w+.4*e))]}function Fr(){return(0,n.Z)(Rr).scale(108.318)}function Br(t){var e=t.length-1;function r(r,n){for(var i,a=s(n),o=2/(1+a*s(r)),l=o*a*g(r),u=o*g(n),c=e,f=t[c],h=f[0],p=f[1];--c>=0;)h=(f=t[c])[0]+l*(i=h)-u*p,p=f[1]+l*p+u*i;return[h=l*(i=h)-u*p,p=l*p+u*i]}return r.invert=function(r,n){var l=20,u=r,c=n;do{for(var f,h=e,p=t[h],d=p[0],v=p[1],y=0,x=0;--h>=0;)y=d+u*(f=y)-c*x,x=v+u*x+c*f,d=(p=t[h])[0]+u*(f=d)-c*v,v=p[1]+u*v+c*f;var b,_,w=(y=d+u*(f=y)-c*x)*y+(x=v+u*x+c*f)*x;u-=b=((d=u*(f=d)-c*v-r)*y+(v=u*v+c*f-n)*x)/w,c-=_=(v*y-d*x)/w}while(i(b)+i(_)>m*m&&--l>0);if(l){var T=P(u*u+c*c),k=2*a(.5*T),A=g(k);return[o(u*A,T*s(k)),T?L(c*A/T):0]}},r}Er.invert=function(t,e){var r=i(t),n=i(e),a=m,o=_;n<Sr?o*=n/Sr:a+=6*C(Sr/n);for(var l=0;l<25;l++){var u=g(o),c=P(s(o)),f=g(o/2),h=s(o/2),p=g(a/6),d=s(a/6),v=.5*a*(1+c)-r,y=o/(h*d)-n,x=c?-.25*a*u/c:0,b=.5*(1+c),w=(1+.5*o*f/h)/(h*d),T=o/h*(p/6)/(d*d),k=x*T-w*b,A=(v*T-y*b)/k,M=(y*x-v*w)/k;if(o-=A,a-=M,i(A)<m&&i(M)<m)break}return[t<0?-a:a,e<0?-o:o]},Cr.invert=function(t,e){var r=v(t)*b,n=e/2,a=50;do{var o=r*r,s=n*n,l=r*n,u=r*(.975534+s*(-.0143059*o-.119161+-.0547009*s))-t,c=n*(1.00384+o*(.0802894+-.02855*s+199025e-9*o)+s*(.0998909+-.0491032*s))-e,f=.975534-s*(.119161+3*o*.0143059+.0547009*s),h=-l*(.238322+.2188036*s+.0286118*o),p=l*(.1605788+7961e-7*o+-.0571*s),d=1.00384+o*(.0802894+199025e-9*o)+s*(3*(.0998909-.02855*o)-.245516*s),g=h*p-d*f,y=(c*h-u*d)/g,x=(u*p-c*f)/g;r-=y,n-=x}while((i(y)>m||i(x)>m)&&--a>0);return a&&[r,n]},Or.invert=function(t,e){var r=t*t,n=e*e+1,i=r+n,a=t?T*P((i-P(i*i-4*r))/r):1/P(n);return[L(t*a),v(e)*C(a)]},Rr.invert=function(t,e){return[t,2.5*a(l(.8*e))-.625*b]};var Nr=[[.9972523,0],[.0052513,-.0041175],[.0074606,.0048125],[-.0153783,-.1968253],[.0636871,-.1408027],[.3660976,-.2937382]],jr=[[.98879,0],[0,0],[-.050909,0],[0,0],[.075528,0]],Ur=[[.984299,0],[.0211642,.0037608],[-.1036018,-.0575102],[-.0329095,-.0320119],[.0499471,.1223335],[.026046,.0899805],[7388e-7,-.1435792],[.0075848,-.1334108],[-.0216473,.0776645],[-.0225161,.0853673]],Vr=[[.9245,0],[0,0],[.01943,0]],Hr=[[.721316,0],[0,0],[-.00881625,-.00617325]];function qr(){return Xr(Nr,[152,-64]).scale(1400).center([-160.908,62.4864]).clipAngle(30).angle(7.8)}function Gr(){return Xr(jr,[95,-38]).scale(1e3).clipAngle(55).center([-96.5563,38.8675])}function Zr(){return Xr(Ur,[120,-45]).scale(359.513).clipAngle(55).center([-117.474,53.0628])}function Yr(){return Xr(Vr,[-20,-18]).scale(209.091).center([20,16.7214]).clipAngle(82)}function Wr(){return Xr(Hr,[165,10]).scale(250).clipAngle(130).center([-165,-10])}function Xr(t,e){var r=(0,n.Z)(Br(t)).rotate(e).clipAngle(90),i=(0,_t.Z)(e),a=r.center;return delete r.rotate,r.center=function(t){return arguments.length?a(i(t)):i.invert(a())},r}var Jr=P(6),Kr=P(7);function $r(t,e){var r=L(7*g(e)/(3*Jr));return[Jr*t*(2*s(2*r/3)-1)/Kr,9*g(r/3)/Kr]}function Qr(){return(0,n.Z)($r).scale(164.859)}function tn(t,e){for(var r,n=(1+T)*g(e),a=e,o=0;o<25&&(a-=r=(g(a/2)+g(a)-n)/(.5*s(a/2)+s(a)),!(i(r)<m));o++);return[t*(1+2*s(a)/s(a/2))/(3*k),2*P(3)*g(a/2)/P(2+k)]}function en(){return(0,n.Z)(tn).scale(188.209)}function rn(t,e){for(var r,n=P(6/(4+b)),a=(1+b/4)*g(e),o=e/2,l=0;l<25&&(o-=r=(o/2+g(o)-a)/(.5+s(o)),!(i(r)<m));l++);return[n*(.5+s(o))*t/1.5,n*o]}function nn(){return(0,n.Z)(rn).scale(166.518)}$r.invert=function(t,e){var r=3*L(e*Kr/9);return[t*Kr/(Jr*(2*s(2*r/3)-1)),L(3*g(r)*Jr/7)]},tn.invert=function(t,e){var r=e*P(2+k)/(2*P(3)),n=2*L(r);return[3*k*t/(1+2*s(n)/s(n/2)),L((r+g(n))/(1+T))]},rn.invert=function(t,e){var r=P(6/(4+b)),n=e/r;return i(i(n)-_)<m&&(n=n<0?-_:_),[1.5*t/(r*(.5+s(n))),L((n/2+g(n))/(1+b/4))]};var an=r(26867);function on(t,e){var r=e*e,n=r*r,i=r*n;return[t*(.84719-.13063*r+i*i*(.05494*r-.04515-.02326*n+.00331*i)),e*(1.01183+n*n*(.01926*r-.02625-.00396*n))]}function sn(){return(0,n.Z)(on).scale(175.295)}function ln(t,e){return[t*(1+s(e))/2,2*(e-y(e/2))]}function un(){return(0,n.Z)(ln).scale(152.63)}on.invert=function(t,e){var r,n,a,o,s=e,l=25;do{s-=r=(s*(1.01183+(a=(n=s*s)*n)*a*(.01926*n-.02625-.00396*a))-e)/(1.01183+a*a*(.21186*n-.23625+-.05148*a))}while(i(r)>x&&--l>0);return[t/(.84719-.13063*(n=s*s)+(o=n*(a=n*n))*o*(.05494*n-.04515-.02326*a+.00331*o)),s]},ln.invert=function(t,e){for(var r=e/2,n=0,a=1/0;n<10&&i(a)>m;++n){var o=s(e/2);e-=a=(e-y(e/2)-r)/(1-.5/(o*o))}return[2*t/(1+s(e)),e]};var cn=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function fn(){return cr(J(1/0),cn).rotate([20,0]).scale(152.63)}function hn(t,e){var r=g(e),n=s(e),a=v(t);if(0===t||i(e)===_)return[0,e];if(0===e)return[t,0];if(i(t)===_)return[t*n,_*r];var o=b/(2*t)-2*t/b,l=2*e/b,u=(1-l*l)/(r-l),c=o*o,f=u*u,h=1+c/f,p=1+f/c,d=(o*r/u-o/2)/h,y=(f*r/c+u/2)/p,m=y*y-(f*r*r/c+u*r-1)/p;return[_*(d+P(d*d+n*n/h)*a),_*(y+P(m<0?0:m)*v(-e*o)*a)]}function pn(){return(0,n.Z)(hn).scale(127.267)}hn.invert=function(t,e){var r=(t/=_)*t,n=r+(e/=_)*e,i=b*b;return[t?(n-1+P((1-n)*(1-n)+4*r))/(2*t)*_:0,Q((function(t){return n*(b*g(t)-2*t)*b+4*t*t*(e-g(t))+2*b*t-i*e}),0)]};var dn=1.0148,vn=.23185,gn=-.14499,yn=.02406,mn=dn,xn=5*vn,bn=7*gn,_n=9*yn,wn=1.790857183;function Tn(t,e){var r=e*e;return[t,e*(dn+r*r*(vn+r*(gn+yn*r)))]}function kn(){return(0,n.Z)(Tn).scale(139.319)}function An(t,e){if(i(e)<m)return[t,0];var r=y(e),n=t*g(e);return[g(n)/r,e+(1-s(n))/r]}function Mn(){return(0,n.Z)(An).scale(103.74)}Tn.invert=function(t,e){e>wn?e=wn:e<-1.790857183&&(e=-1.790857183);var r,n=e;do{var a=n*n;n-=r=(n*(dn+a*a*(vn+a*(gn+yn*a)))-e)/(mn+a*a*(xn+a*(bn+_n*a)))}while(i(r)>m);return[t,n]},An.invert=function(t,e){if(i(e)<m)return[t,0];var r,n=t*t+e*e,a=.5*e,o=10;do{var l=y(a),u=1/s(a),c=n-2*e*a+a*a;a-=r=(l*c+2*(a-e))/(2+c*u*u+2*(a-e)*l)}while(i(r)>m&&--o>0);return l=y(a),[(i(e)<i(a+1/l)?L(t*l):v(e)*v(t)*(C(i(t*l))+_))/g(a),a]};var Sn=r(77338),En=r(83074);function Ln(t,e){return[t[0]*e[0]+t[1]*e[3],t[0]*e[1]+t[1]*e[4],t[0]*e[2]+t[1]*e[5]+t[2],t[3]*e[0]+t[4]*e[3],t[3]*e[1]+t[4]*e[4],t[3]*e[2]+t[4]*e[5]+t[5]]}function Cn(t,e){return[t[0]-e[0],t[1]-e[1]]}function Pn(t){return P(t[0]*t[0]+t[1]*t[1])}function On(t,e,r){function i(t,r){var n,i=e(t,r),a=i.project([t*S,r*S]);return(n=i.transform)?[n[0]*a[0]+n[1]*a[1]+n[2],-(n[3]*a[0]+n[4]*a[1]+n[5])]:(a[1]=-a[1],a)}function a(t,r){var n=t.project.invert,i=t.transform,o=r;if(i&&(i=function(t){var e=1/(t[0]*t[4]-t[1]*t[3]);return[e*t[4],-e*t[1],e*(t[1]*t[5]-t[2]*t[4]),-e*t[3],e*t[0],e*(t[2]*t[3]-t[0]*t[5])]}(i),o=[i[0]*o[0]+i[1]*o[1]+i[2],i[3]*o[0]+i[4]*o[1]+i[5]]),n&&t===function(t){return e(t[0]*E,t[1]*E)}(s=n(o)))return s;for(var s,l=t.children,u=0,c=l&&l.length;u<c;++u)if(s=a(l[u],r))return s}!function t(e,r){if(e.edges=function(t){for(var e=t.length,r=[],n=t[e-1],i=0;i<e;++i)r.push([n,n=t[i]]);return r}(e.face),r.face){var n=e.shared=function(t,e){for(var r,n,i=t.length,a=null,o=0;o<i;++o){r=t[o];for(var s=e.length;--s>=0;)if(n=e[s],r[0]===n[0]&&r[1]===n[1]){if(a)return[a,r];a=r}}}(e.face,r.face),i=(c=n.map(r.project),f=n.map(e.project),h=Cn(c[1],c[0]),p=Cn(f[1],f[0]),d=function(t,e){return o(t[0]*e[1]-t[1]*e[0],t[0]*e[0]+t[1]*e[1])}(h,p),v=Pn(h)/Pn(p),Ln([1,0,c[0][0],0,1,c[0][1]],Ln([v,0,0,0,v,0],Ln([s(d),g(d),0,-g(d),s(d),0],[1,0,-f[0][0],0,1,-f[0][1]]))));e.transform=r.transform?Ln(r.transform,i):i;for(var a=r.edges,l=0,u=a.length;l<u;++l)Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=e),Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=e);for(l=0,u=(a=e.edges).length;l<u;++l)Dn(n[0],a[l][0])&&Dn(n[1],a[l][1])&&(a[l]=r),Dn(n[0],a[l][1])&&Dn(n[1],a[l][0])&&(a[l]=r)}else e.transform=r.transform;var c,f,h,p,d,v;return e.children&&e.children.forEach((function(r){t(r,e)})),e}(t,{transform:null}),zn(t)&&(i.invert=function(e,r){var n=a(t,[e,-r]);return n&&(n[0]*=E,n[1]*=E,n)});var l=(0,n.Z)(i),u=l.stream;return l.stream=function(e){var r=l.rotate(),n=u(e),i=(l.rotate([0,0]),u(e));return l.rotate(r),n.sphere=function(){i.polygonStart(),i.lineStart(),In(i,t),i.lineEnd(),i.polygonEnd()},n},l.angle(null==r?-30:r*S)}function In(t,e,r){var n,a,o=e.edges,s=o.length,l={type:\"MultiPoint\",coordinates:e.face},u=e.face.filter((function(t){return 90!==i(t[1])})),c=(0,Sn.Z)({type:\"MultiPoint\",coordinates:u}),f=!1,h=-1,p=c[1][0]-c[0][0],d=180===p||360===p?[(c[0][0]+c[1][0])/2,(c[0][1]+c[1][1])/2]:(0,bt.Z)(l);if(r)for(;++h<s&&o[h]!==r;);++h;for(var v=0;v<s;++v)a=o[(v+h)%s],Array.isArray(a)?(f||(t.point((n=(0,En.Z)(a[0],d)(m))[0],n[1]),f=!0),t.point((n=(0,En.Z)(a[1],d)(m))[0],n[1])):(f=!1,a!==r&&In(t,a,e))}function Dn(t,e){return t&&e&&t[0]===e[0]&&t[1]===e[1]}function zn(t){return t.project.invert||t.children&&t.children.some(zn)}var Rn=r(98936),Fn=[[0,90],[-90,0],[0,0],[90,0],[180,0],[0,-90]],Bn=[[0,2,1],[0,3,2],[5,1,2],[5,2,3],[0,1,4],[0,4,3],[5,4,1],[5,3,4]].map((function(t){return t.map((function(t){return Fn[t]}))}));function Nn(t){t=t||function(t){var e=(0,bt.Z)({type:\"MultiPoint\",coordinates:t});return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(101.858).center([0,45])}var jn=2/P(3);function Un(t,e){var r=Lt(t,e);return[r[0]*jn,r[1]]}function Vn(t){t=t||function(t){var e=(0,bt.Z)({type:\"MultiPoint\",coordinates:t});return(0,n.Z)(Un).translate([0,0]).scale(1).rotate(e[1]>0?[-e[0],0]:[180-e[0],180])};var e=Bn.map((function(e){return{face:e,project:t(e)}}));return[-1,0,0,1,0,1,4,5].forEach((function(t,r){var n=e[t];n&&(n.children||(n.children=[])).push(e[r])})),On(e[0],(function(t,r){return e[t<-b/2?r<0?6:4:t<0?r<0?2:0:t<b/2?r<0?3:1:r<0?7:5]})).angle(-30).scale(121.906).center([0,48.5904])}function Hn(t){t=t||function(t){var e=6===t.length?(0,bt.Z)({type:\"MultiPoint\",coordinates:t}):t[0];return(0,Rn.Z)().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=Bn.map((function(t){for(var e,r=t.map(Zn),n=r.length,i=r[n-1],a=[],o=0;o<n;++o)e=r[o],a.push(Gn([.9486832980505138*i[0]+.31622776601683794*e[0],.9486832980505138*i[1]+.31622776601683794*e[1],.9486832980505138*i[2]+.31622776601683794*e[2]]),Gn([.9486832980505138*e[0]+.31622776601683794*i[0],.9486832980505138*e[1]+.31622776601683794*i[1],.9486832980505138*e[2]+.31622776601683794*i[2]])),i=e;return a})),r=[],n=[-1,0,0,1,0,1,4,5];e.forEach((function(t,i){for(var a,o,s=Bn[i],l=s.length,u=r[i]=[],c=0;c<l;++c)e.push([s[c],t[(2*c+2)%(2*l)],t[(2*c+1)%(2*l)]]),n.push(i),u.push((a=Zn(t[(2*c+2)%(2*l)]),o=Zn(t[(2*c+1)%(2*l)]),[a[1]*o[2]-a[2]*o[1],a[2]*o[0]-a[0]*o[2],a[0]*o[1]-a[1]*o[0]]))}));var i=e.map((function(e){return{project:t(e),face:e}}));return n.forEach((function(t,e){var r=i[t];r&&(r.children||(r.children=[])).push(i[e])})),On(i[0],(function(t,e){var n=s(e),a=[n*s(t),n*g(t),g(e)],o=t<-b/2?e<0?6:4:t<0?e<0?2:0:t<b/2?e<0?3:1:e<0?7:5,l=r[o];return i[qn(l[0],a)<0?8+3*o:qn(l[1],a)<0?8+3*o+1:qn(l[2],a)<0?8+3*o+2:o]})).angle(-30).scale(110.625).center([0,45])}function qn(t,e){for(var r=0,n=t.length,i=0;r<n;++r)i+=t[r]*e[r];return i}function Gn(t){return[o(t[1],t[0])*S,L(f(-1,h(1,t[2])))*S]}function Zn(t){var e=t[0]*E,r=t[1]*E,n=s(r);return[n*s(e),n*g(e),g(r)]}function Yn(){}function Wn(t,e){var r,n=e.stream;if(!n)throw new Error(\"invalid projection\");switch(t&&t.type){case\"Feature\":r=Jn;break;case\"FeatureCollection\":r=Xn;break;default:r=Kn}return r(t,n)}function Xn(t,e){return{type:\"FeatureCollection\",features:t.features.map((function(t){return Jn(t,e)}))}}function Jn(t,e){return{type:\"Feature\",id:t.id,properties:t.properties,geometry:Kn(t.geometry,e)}}function Kn(t,e){if(!t)return null;if(\"GeometryCollection\"===t.type)return function(t,e){return{type:\"GeometryCollection\",geometries:t.geometries.map((function(t){return Kn(t,e)}))}}(t,e);var r;switch(t.type){case\"Point\":case\"MultiPoint\":r=ti;break;case\"LineString\":case\"MultiLineString\":r=ei;break;case\"Polygon\":case\"MultiPolygon\":case\"Sphere\":r=ri;break;default:return null}return(0,je.Z)(t,e(r)),r.result()}Un.invert=function(t,e){return Lt.invert(t/jn,e)};var $n=[],Qn=[],ti={point:function(t,e){$n.push([t,e])},result:function(){var t=$n.length?$n.length<2?{type:\"Point\",coordinates:$n[0]}:{type:\"MultiPoint\",coordinates:$n}:null;return $n=[],t}},ei={lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){$n.length&&(Qn.push($n),$n=[])},result:function(){var t=Qn.length?Qn.length<2?{type:\"LineString\",coordinates:Qn[0]}:{type:\"MultiLineString\",coordinates:Qn}:null;return Qn=[],t}},ri={polygonStart:Yn,lineStart:Yn,point:function(t,e){$n.push([t,e])},lineEnd:function(){var t=$n.length;if(t){do{$n.push($n[0].slice())}while(++t<4);Qn.push($n),$n=[]}},polygonEnd:Yn,result:function(){if(!Qn.length)return null;var t=[],e=[];return Qn.forEach((function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])})),e.forEach((function(e){var r=e[0];t.some((function(t){if(function(t,e){for(var r=e[0],n=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],u=l[0],c=l[1],f=t[s],h=f[0],p=f[1];c>n^p>n&&r<(h-u)*(n-c)/(p-c)+u&&(i=!i)}return i}(t[0],r))return t.push(e),!0}))||t.push([e])})),Qn=[],t.length?t.length>1?{type:\"MultiPolygon\",coordinates:t}:{type:\"Polygon\",coordinates:t[0]}:null}};function ni(t){var e=t(_,0)[0]-t(-_,0)[0];function r(r,n){var a=i(r)<_,o=t(a?r:r>0?r-b:r+b,n),s=(o[0]-o[1])*T,l=(o[0]+o[1])*T;if(a)return[s,l];var u=e*T,c=s>0^l>0?-1:1;return[c*s-v(l)*u,c*l-v(s)*u]}return t.invert&&(r.invert=function(r,n){var a=(r+n)*T,o=(n-r)*T,s=i(a)<.5*e&&i(o)<.5*e;if(!s){var l=e*T,u=a>0^o>0?-1:1,c=-u*r+(o>0?1:-1)*l,f=-u*n+(a>0?1:-1)*l;a=(-c-f)*T,o=(c-f)*T}var h=t.invert(a,o);return s||(h[0]+=a>0?b:-b),h}),(0,n.Z)(r).rotate([-90,-90,45]).clipAngle(179.999)}function ii(){return ni(Le).scale(176.423)}function ai(){return ni(Ie).scale(111.48)}function oi(t,e){if(!(0<=(e=+e)&&e<=20))throw new Error(\"invalid digits\");function r(t){var r=t.length,n=2,i=new Array(r);for(i[0]=+t[0].toFixed(e),i[1]=+t[1].toFixed(e);n<r;)i[n]=t[n],++n;return i}function n(t){return t.map(r)}function i(t){for(var e=r(t[0]),n=[e],i=1;i<t.length;i++){var a=r(t[i]);(a.length>2||a[0]!=e[0]||a[1]!=e[1])&&(n.push(a),e=a)}return 1===n.length&&t.length>1&&n.push(r(t[t.length-1])),n}function a(t){return t.map(i)}function o(t){if(null==t)return t;var e;switch(t.type){case\"GeometryCollection\":e={type:\"GeometryCollection\",geometries:t.geometries.map(o)};break;case\"Point\":e={type:\"Point\",coordinates:r(t.coordinates)};break;case\"MultiPoint\":e={type:t.type,coordinates:n(t.coordinates)};break;case\"LineString\":e={type:t.type,coordinates:i(t.coordinates)};break;case\"MultiLineString\":case\"Polygon\":e={type:t.type,coordinates:a(t.coordinates)};break;case\"MultiPolygon\":e={type:\"MultiPolygon\",coordinates:t.coordinates.map(a)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function s(t){var e={type:\"Feature\",properties:t.properties,geometry:o(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),e}if(null!=t)switch(t.type){case\"Feature\":return s(t);case\"FeatureCollection\":var l={type:\"FeatureCollection\",features:t.features.map(s)};return null!=t.bbox&&(l.bbox=t.bbox),l;default:return o(t)}return t}function si(t){var e=g(t);function r(r,n){var i=e?y(r*e/2)/e:r/2;if(!n)return[2*i,-t];var o=2*a(i*g(n)),l=1/y(n);return[g(o)*l,n+(1-s(o))*l-t]}return r.invert=function(r,n){if(i(n+=t)<m)return[e?2*a(e*r/2)/e:r,0];var o,l=r*r+n*n,u=0,c=10;do{var f=y(u),h=1/s(u),p=l-2*n*u+u*u;u-=o=(f*p+2*(u-n))/(2+p*h*h+2*(u-n)*f)}while(i(o)>m&&--c>0);var d=r*(f=y(u)),v=y(i(n)<i(u+1/f)?.5*L(d):.5*C(d)+b/4)/g(u);return[e?2*a(e*v)/e:2*v,u]},r}function li(){return ft(si).scale(131.215)}var ui=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function ci(t,e){var r,n=h(18,36*i(e)/b),a=u(n),o=n-a,s=(r=ui[a])[0],l=r[1],c=(r=ui[++a])[0],f=r[1],p=(r=ui[h(19,++a)])[0],d=r[1];return[t*(c+o*(p-s)/2+o*o*(p-2*c+s)/2),(e>0?_:-_)*(f+o*(d-l)/2+o*o*(d-2*f+l)/2)]}function fi(){return(0,n.Z)(ci).scale(152.63)}function hi(t,e){var r=function(t){function e(e,r){var n=s(r),i=(t-1)/(t-n*s(e));return[i*n*g(e),i*g(r)]}return e.invert=function(e,r){var n=e*e+r*r,i=P(n),a=(t-P(1-n*(t+1)/(t-1)))/((t-1)/i+i/(t-1));return[o(e*a,i*P(1-a*a)),i?L(r*a/i):0]},e}(t);if(!e)return r;var n=s(e),i=g(e);function a(e,a){var o=r(e,a),s=o[1],l=s*i/(t-1)+n;return[o[0]*n/l,s/l]}return a.invert=function(e,a){var o=(t-1)/(t-1-a*i);return r.invert(o*e,o*a*n)},a}function pi(){var t=2,e=0,r=(0,n.r)(hi),i=r(t,e);return i.distance=function(n){return arguments.length?r(t=+n,e):t},i.tilt=function(n){return arguments.length?r(t,e=n*E):e*S},i.scale(432.147).clipAngle(C(1/t)*S-1e-6)}ui.forEach((function(t){t[1]*=1.0144})),ci.invert=function(t,e){var r=e/_,n=90*r,a=h(18,i(n/5)),o=f(0,u(a));do{var s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],p=c-s,d=c-2*l+s,v=2*(i(r)-l)/p,g=d/p,y=v*(1-g*v*(1-2*g*v));if(y>=0||1===o){n=(e>=0?5:-5)*(y+a);var m,b=50;do{y=(a=h(18,i(n)/5))-(o=u(a)),s=ui[o][1],l=ui[o+1][1],c=ui[h(19,o+2)][1],n-=(m=(e>=0?_:-_)*(l+y*(c-s)/2+y*y*(c-2*l+s)/2)-e)*S}while(i(m)>x&&--b>0);break}}while(--o>=0);var w=ui[o][0],T=ui[o+1][0],k=ui[h(19,o+2)][0];return[t/(T+y*(k-w)/2+y*y*(k-2*T+w)/2),n*E]};var di=1e-4,vi=1e4,gi=-180,yi=gi+di,mi=180,xi=mi-di,bi=-90,_i=bi+di,wi=90,Ti=wi-di;function ki(t){return t.length>0}function Ai(t){return t===bi||t===wi?[0,t]:[gi,(e=t,Math.floor(e*vi)/vi)];var e}function Mi(t){var e=t[0],r=t[1],n=!1;return e<=yi?(e=gi,n=!0):e>=xi&&(e=mi,n=!0),r<=_i?(r=bi,n=!0):r>=Ti&&(r=wi,n=!0),n?[e,r]:t}function Si(t){return t.map(Mi)}function Ei(t,e,r){for(var n=0,i=t.length;n<i;++n){var a=t[n].slice();r.push({index:-1,polygon:e,ring:a});for(var o=0,s=a.length;o<s;++o){var l=a[o],u=l[0],c=l[1];if(u<=yi||u>=xi||c<=_i||c>=Ti){a[o]=Mi(l);for(var f=o+1;f<s;++f){var h=a[f],p=h[0],d=h[1];if(p>yi&&p<xi&&d>_i&&d<Ti)break}if(f===o+1)continue;if(o){var v={index:-1,polygon:e,ring:a.slice(0,o+1)};v.ring[v.ring.length-1]=Ai(c),r[r.length-1]=v}else r.pop();if(f>=s)break;r.push({index:-1,polygon:e,ring:a=a.slice(f-1)}),a[0]=Ai(a[0][1]),o=-1,s=a.length}}}}function Li(t){var e,r,n,i,a,o,s=t.length,l={},u={};for(e=0;e<s;++e)n=(r=t[e]).ring[0],a=r.ring[r.ring.length-1],n[0]!==a[0]||n[1]!==a[1]?(r.index=e,l[n]=u[a]=r):(r.polygon.push(r.ring),t[e]=null);for(e=0;e<s;++e)if(r=t[e]){if(n=r.ring[0],a=r.ring[r.ring.length-1],i=u[n],o=l[a],delete l[n],delete u[a],n[0]===a[0]&&n[1]===a[1]){r.polygon.push(r.ring);continue}i?(delete u[n],delete l[i.ring[0]],i.ring.pop(),t[i.index]=null,r={index:-1,polygon:i.polygon,ring:i.ring.concat(r.ring)},i===o?r.polygon.push(r.ring):(r.index=s++,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r))):o?(delete l[a],delete u[o.ring[o.ring.length-1]],r.ring.pop(),r={index:s++,polygon:o.polygon,ring:r.ring.concat(o.ring)},t[o.index]=null,t.push(l[r.ring[0]]=u[r.ring[r.ring.length-1]]=r)):(r.ring.push(r.ring[0]),r.polygon.push(r.ring))}}function Ci(t){var e={type:\"Feature\",geometry:Pi(t.geometry)};return null!=t.id&&(e.id=t.id),null!=t.bbox&&(e.bbox=t.bbox),null!=t.properties&&(e.properties=t.properties),e}function Pi(t){if(null==t)return t;var e,r,n,i;switch(t.type){case\"GeometryCollection\":e={type:\"GeometryCollection\",geometries:t.geometries.map(Pi)};break;case\"Point\":e={type:\"Point\",coordinates:Mi(t.coordinates)};break;case\"MultiPoint\":case\"LineString\":e={type:t.type,coordinates:Si(t.coordinates)};break;case\"MultiLineString\":e={type:\"MultiLineString\",coordinates:t.coordinates.map(Si)};break;case\"Polygon\":var a=[];Ei(t.coordinates,a,r=[]),Li(r),e={type:\"Polygon\",coordinates:a};break;case\"MultiPolygon\":r=[],n=-1,i=t.coordinates.length;for(var o=new Array(i);++n<i;)Ei(t.coordinates[n],o[n]=[],r);Li(r),e={type:\"MultiPolygon\",coordinates:o.filter(ki)};break;default:return t}return null!=t.bbox&&(e.bbox=t.bbox),e}function Oi(t){if(null==t)return t;switch(t.type){case\"Feature\":return Ci(t);case\"FeatureCollection\":var e={type:\"FeatureCollection\",features:t.features.map(Ci)};return null!=t.bbox&&(e.bbox=t.bbox),e;default:return Pi(t)}}function Ii(t,e){var r=y(e/2),n=g(w*r);return[t*(.74482-.34588*n*n),1.70711*r]}function Di(){return(0,n.Z)(Ii).scale(146.153)}function zi(t,e,r){var i=(0,En.Z)(e,r),a=i(.5),o=(0,_t.Z)([-a[0],-a[1]])(e),s=i.distance/2,l=-L(g(o[1]*E)/g(s)),u=[-a[0],-a[1],-(o[0]>0?b-l:l)*S],c=(0,n.Z)(t(s)).rotate(u),f=(0,_t.Z)(u),h=c.center;return delete c.rotate,c.center=function(t){return arguments.length?h(f(t)):f.invert(h())},c.clipAngle(90)}function Ri(t){var e=s(t);function r(t,r){var n=(0,Rn.M)(t,r);return n[0]*=e,n}return r.invert=function(t,r){return Rn.M.invert(t/e,r)},r}function Fi(){return Bi([-158,21.5],[-77,39]).clipAngle(60).scale(400)}function Bi(t,e){return zi(Ri,t,e)}function Ni(t){if(!(t*=2))return Z.N;var e=-t/2,r=-e,n=t*t,i=y(r),a=.5/g(r);function l(i,a){var o=C(s(a)*s(i-e)),l=C(s(a)*s(i-r));return[((o*=o)-(l*=l))/(2*t),(a<0?-1:1)*P(4*n*l-(n-o+l)*(n-o+l))/(2*t)]}return l.invert=function(t,n){var l,u,c=n*n,f=s(P(c+(l=t+e)*l)),h=s(P(c+(l=t+r)*l));return[o(u=f-h,l=(f+h)*i),(n<0?-1:1)*C(P(l*l+u*u)*a)]},l}function ji(){return Ui([-158,21.5],[-77,39]).clipAngle(130).scale(122.571)}function Ui(t,e){return zi(Ni,t,e)}function Vi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a/(r+a-1),c=u*(2/r-1),f=c*c,h=f+l,p=u-f,d=l+u;return[v(t)*b*(o*p+P(l*p*p-h*(u*u-f)))/h,v(e)*b*(c*d-o*P((l+1)*h-d*d))/h]}function Hi(){return(0,n.Z)(Vi).scale(79.4183)}function qi(t,e){if(i(e)<m)return[t,0];var r=i(e/_),n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,v(e)*b*y(n/2)];var a=s(n),o=i(b/t-t/b)/2,l=o*o,u=a*(P(1+l)-o*a)/(1+l*r*r);return[v(t)*b*u,v(e)*b*P(1-u*(2*o+u))]}function Gi(){return(0,n.Z)(qi).scale(79.4183)}function Zi(t,e){if(i(e)<m)return[t,0];var r=e/_,n=L(r);if(i(t)<m||i(i(e)-_)<m)return[0,b*y(n/2)];var a=(b/t-t/b)/2,o=r/(1+s(n));return[b*(v(t)*P(a*a+1-o*o)-a),b*o]}function Yi(){return(0,n.Z)(Zi).scale(79.4183)}function Wi(t,e){if(!e)return[t,0];var r=i(e);if(!t||r===_)return[0,e];var n=r/_,a=n*n,o=(8*n-a*(a+2)-5)/(2*a*(n-1)),s=o*o,l=n*o,u=a+s+2*l,c=n+3*o,f=t/_,h=f+1/f,p=v(i(t)-_)*P(h*h-4),d=p*p,g=(p*(u+s-1)+2*P(u*(a+s*d-1)+(1-a)*(a*(c*c+4*s)+12*l*s+4*s*s)))/(4*u+d);return[v(t)*_*g,v(e)*_*P(1+p*i(g)-g*g)]}function Xi(){return(0,n.Z)(Wi).scale(127.16)}function Ji(t,e,r,n){var i=b/3;t=f(t,m),e=f(e,m),t=h(t,_),e=h(e,b-m),r=f(r,0),r=h(r,100-m);var a=(n=f(n,m))/100,l=C((r/100+1)*s(i))/i,u=g(t)/g(l*_),c=e/b,p=P(a*g(t/2)/g(e/2));return function(t,e,r,n,i){function a(a,o){var l=r*g(n*o),u=P(1-l*l),c=P(2/(1+u*s(a*=i)));return[t*u*c*g(a),e*l*c]}return a.invert=function(a,s){var l=a/t,u=s/e,c=P(l*l+u*u),f=2*L(c/2);return[o(a*y(f),t*c)/i,c&&L(s*g(f)/(e*r*c))/n]},a}(p/P(c*u*l),1/(p*P(c*u*l)),u,l,c)}function Ki(){var t=65*E,e=60*E,r=20,i=200,a=(0,n.r)(Ji),o=a(t,e,r,i);return o.poleline=function(n){return arguments.length?a(t=+n*E,e,r,i):t*S},o.parallels=function(n){return arguments.length?a(t,e=+n*E,r,i):e*S},o.inflation=function(n){return arguments.length?a(t,e,r=+n,i):r},o.ratio=function(n){return arguments.length?a(t,e,r,i=+n):i},o.scale(163.775)}function $i(){return Ki().poleline(65).parallels(60).inflation(0).ratio(200).scale(172.633)}Ii.invert=function(t,e){var r=e/1.70711,n=g(w*r);return[t/(.74482-.34588*n*n),2*a(r)]},Vi.invert=function(t,e){if(i(e)<m)return[t,0];if(i(t)<m)return[0,_*g(2*a(e/b))];var r=(t/=b)*t,n=(e/=b)*e,o=r+n,l=o*o,u=-i(e)*(1+o),c=u-2*n+r,f=-2*u+1+2*n+l,h=n/f+(2*c*c*c/(f*f*f)-9*u*c/(f*f))/27,p=(u-c*c/(3*f))/f,d=2*P(-p/3),y=C(3*h/(p*d))/3;return[b*(o-1+P(1+2*(r-n)+l))/(2*t),v(e)*b*(-d*s(y+b/3)-c/(3*f))]},qi.invert=function(t,e){if(!t)return[0,_*g(2*a(e/b))];var r=i(t/b),n=(1-r*r-(e/=b)*e)/(2*r),s=P(n*n+1);return[v(t)*b*(s-n),v(e)*_*g(2*o(P((1-2*n*r)*(n+s)-r),P(s+n+r)))]},Zi.invert=function(t,e){if(!e)return[t,0];var r=e/b,n=(b*b*(1-r*r)-t*t)/(2*b*t);return[t?b*(v(t)*P(n*n+1)-n):0,_*g(2*a(r))]},Wi.invert=function(t,e){var r;if(!t||!e)return[t,e];e/=b;var n=v(t)*t/_,a=(n*n-1+4*e*e)/i(n),o=a*a,s=2*e,l=50;do{var u=s*s,c=(8*s-u*(u+2)-5)/(2*u*(s-1)),f=(3*s-u*s-10)/(2*u*s),h=c*c,p=s*c,d=s+c,g=d*d,y=s+3*c,x=-2*d*(4*p*h+(1-4*u+3*u*u)*(1+f)+h*(14*u-6-o+(8*u-8-2*o)*f)+p*(12*u-8+(10*u-10-o)*f)),w=P(g*(u+h*o-1)+(1-u)*(u*(y*y+4*h)+h*(12*p+4*h)));s-=r=(a*(g+h-1)+2*w-n*(4*g+o))/(a*(2*c*f+2*d*(1+f))+x/w-8*d*(a*(-1+h+g)+2*w)*(1+f)/(o+4*g))}while(r>m&&--l>0);return[v(t)*(P(a*a+4)+a)*b/4,_*s]};var Qi=4*b+3*P(3),ta=2*P(2*b*P(3)/Qi),ea=it(ta*P(3)/b,ta,Qi/6);function ra(){return(0,n.Z)(ea).scale(176.84)}function na(t,e){return[t*P(1-3*e*e/(b*b)),e]}function ia(){return(0,n.Z)(na).scale(152.63)}function aa(t,e){var r=s(e),n=s(t)*r,i=1-n,a=s(t=o(g(t)*r,-g(e))),l=g(t);return[l*(r=P(1-n*n))-a*i,-a*r-l*i]}function oa(){return(0,n.Z)(aa).rotate([0,-90,45]).scale(124.75).clipAngle(179.999)}function sa(t,e){var r=R(t,e);return[(r[0]+t/_)/2,(r[1]+e)/2]}function la(){return(0,n.Z)(sa).scale(158.837)}na.invert=function(t,e){return[t/P(1-3*e*e/(b*b)),e]},aa.invert=function(t,e){var r=(t*t+e*e)/-2,n=P(-r*(2+r)),i=e*r+t*n,a=t*r-e*n,s=P(a*a+i*i);return[o(n*i,s*(1+r)),s?-L(n*a/s):0]},sa.invert=function(t,e){var r=t,n=e,a=25;do{var o,l=s(n),u=g(n),c=g(2*n),f=u*u,h=l*l,p=g(r),d=s(r/2),v=g(r/2),y=v*v,x=1-h*d*d,b=x?C(l*d)*P(o=1/x):o=0,w=.5*(2*b*l*v+r/_)-t,T=.5*(b*u+n)-e,k=.5*o*(h*y+b*l*d*f)+.5/_,A=o*(p*c/4-b*u*v),M=.125*o*(c*v-b*u*h*p),S=.5*o*(f*d+b*y*l)+.5,E=A*M-S*k,L=(T*A-w*S)/E,O=(w*M-T*k)/E;r-=L,n-=O}while((i(L)>m||i(O)>m)&&--a>0);return[r,n]}},33940:function(t,e,r){\"use strict\";function n(){return new i}function i(){this.reset()}r.d(e,{Z:function(){return n}}),i.prototype={constructor:i,reset:function(){this.s=this.t=0},add:function(t){o(a,t,this.t),o(this,a.s,this.s),this.s?this.t+=a.t:this.s=a.t},valueOf:function(){return this.s}};var a=new i;function o(t,e,r){var n=t.s=e+r,i=n-e,a=n-i;t.t=e-a+(r-i)}},97860:function(t,e,r){\"use strict\";r.d(e,{L9:function(){return h},ZP:function(){return x},gL:function(){return d}});var n,i,a,o,s,l=r(33940),u=r(39695),c=r(73182),f=r(72736),h=(0,l.Z)(),p=(0,l.Z)(),d={point:c.Z,lineStart:c.Z,lineEnd:c.Z,polygonStart:function(){h.reset(),d.lineStart=v,d.lineEnd=g},polygonEnd:function(){var t=+h;p.add(t<0?u.BZ+t:t),this.lineStart=this.lineEnd=this.point=c.Z},sphere:function(){p.add(u.BZ)}};function v(){d.point=y}function g(){m(n,i)}function y(t,e){d.point=m,n=t,i=e,t*=u.uR,e*=u.uR,a=t,o=(0,u.mC)(e=e/2+u.pu),s=(0,u.O$)(e)}function m(t,e){t*=u.uR,e=(e*=u.uR)/2+u.pu;var r=t-a,n=r>=0?1:-1,i=n*r,l=(0,u.mC)(e),c=(0,u.O$)(e),f=s*c,p=o*l+f*(0,u.mC)(i),d=f*n*(0,u.O$)(i);h.add((0,u.fv)(d,p)),a=t,o=l,s=c}function x(t){return p.reset(),(0,f.Z)(t,d),2*p}},77338:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return C}});var n,i,a,o,s,l,u,c,f,h,p=r(33940),d=r(97860),v=r(7620),g=r(39695),y=r(72736),m=(0,p.Z)(),x={point:b,lineStart:w,lineEnd:T,polygonStart:function(){x.point=k,x.lineStart=A,x.lineEnd=M,m.reset(),d.gL.polygonStart()},polygonEnd:function(){d.gL.polygonEnd(),x.point=b,x.lineStart=w,x.lineEnd=T,d.L9<0?(n=-(a=180),i=-(o=90)):m>g.Ho?o=90:m<-g.Ho&&(i=-90),h[0]=n,h[1]=a},sphere:function(){n=-(a=180),i=-(o=90)}};function b(t,e){f.push(h=[n=t,a=t]),e<i&&(i=e),e>o&&(o=e)}function _(t,e){var r=(0,v.Og)([t*g.uR,e*g.uR]);if(c){var l=(0,v.T5)(c,r),u=[l[1],-l[0],0],p=(0,v.T5)(u,l);(0,v.iJ)(p),p=(0,v.Y1)(p);var d,y=t-s,m=y>0?1:-1,x=p[0]*g.RW*m,b=(0,g.Wn)(y)>180;b^(m*s<x&&x<m*t)?(d=p[1]*g.RW)>o&&(o=d):b^(m*s<(x=(x+360)%360-180)&&x<m*t)?(d=-p[1]*g.RW)<i&&(i=d):(e<i&&(i=e),e>o&&(o=e)),b?t<s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t):a>=n?(t<n&&(n=t),t>a&&(a=t)):t>s?S(n,t)>S(n,a)&&(a=t):S(t,a)>S(n,a)&&(n=t)}else f.push(h=[n=t,a=t]);e<i&&(i=e),e>o&&(o=e),c=r,s=t}function w(){x.point=_}function T(){h[0]=n,h[1]=a,x.point=b,c=null}function k(t,e){if(c){var r=t-s;m.add((0,g.Wn)(r)>180?r+(r>0?360:-360):r)}else l=t,u=e;d.gL.point(t,e),_(t,e)}function A(){d.gL.lineStart()}function M(){k(l,u),d.gL.lineEnd(),(0,g.Wn)(m)>g.Ho&&(n=-(a=180)),h[0]=n,h[1]=a,c=null}function S(t,e){return(e-=t)<0?e+360:e}function E(t,e){return t[0]-e[0]}function L(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}function C(t){var e,r,s,l,u,c,p;if(o=a=-(n=i=1/0),f=[],(0,y.Z)(t,x),r=f.length){for(f.sort(E),e=1,u=[s=f[0]];e<r;++e)L(s,(l=f[e])[0])||L(s,l[1])?(S(s[0],l[1])>S(s[0],s[1])&&(s[1]=l[1]),S(l[0],s[1])>S(s[0],s[1])&&(s[0]=l[0])):u.push(s=l);for(c=-1/0,e=0,s=u[r=u.length-1];e<=r;s=l,++e)l=u[e],(p=S(s[1],l[0]))>c&&(c=p,n=l[0],a=s[1])}return f=h=null,n===1/0||i===1/0?[[NaN,NaN],[NaN,NaN]]:[[n,i],[a,o]]}},7620:function(t,e,r){\"use strict\";r.d(e,{Og:function(){return a},T:function(){return u},T5:function(){return s},Y1:function(){return i},iJ:function(){return c},j9:function(){return o},s0:function(){return l}});var n=r(39695);function i(t){return[(0,n.fv)(t[1],t[0]),(0,n.ZR)(t[2])]}function a(t){var e=t[0],r=t[1],i=(0,n.mC)(r);return[i*(0,n.mC)(e),i*(0,n.O$)(e),(0,n.O$)(r)]}function o(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function s(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function l(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function u(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function c(t){var e=(0,n._b)(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}},66624:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return I}});var n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x=r(39695),b=r(73182),_=r(72736),w={sphere:b.Z,point:T,lineStart:A,lineEnd:E,polygonStart:function(){w.lineStart=L,w.lineEnd=C},polygonEnd:function(){w.lineStart=A,w.lineEnd=E}};function T(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);k(r*(0,x.mC)(t),r*(0,x.O$)(t),(0,x.O$)(e))}function k(t,e,r){++n,a+=(t-a)/n,o+=(e-o)/n,s+=(r-s)/n}function A(){w.point=M}function M(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),w.point=S,k(g,y,m)}function S(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=(0,x.fv)((0,x._b)((s=y*o-m*a)*s+(s=m*n-g*o)*s+(s=g*a-y*n)*s),g*n+y*a+m*o);i+=s,l+=s*(g+(g=n)),u+=s*(y+(y=a)),c+=s*(m+(m=o)),k(g,y,m)}function E(){w.point=T}function L(){w.point=P}function C(){O(d,v),w.point=T}function P(t,e){d=t,v=e,t*=x.uR,e*=x.uR,w.point=O;var r=(0,x.mC)(e);g=r*(0,x.mC)(t),y=r*(0,x.O$)(t),m=(0,x.O$)(e),k(g,y,m)}function O(t,e){t*=x.uR,e*=x.uR;var r=(0,x.mC)(e),n=r*(0,x.mC)(t),a=r*(0,x.O$)(t),o=(0,x.O$)(e),s=y*o-m*a,d=m*n-g*o,v=g*a-y*n,b=(0,x._b)(s*s+d*d+v*v),_=(0,x.ZR)(b),w=b&&-_/b;f+=w*s,h+=w*d,p+=w*v,i+=_,l+=_*(g+(g=n)),u+=_*(y+(y=a)),c+=_*(m+(m=o)),k(g,y,m)}function I(t){n=i=a=o=s=l=u=c=f=h=p=0,(0,_.Z)(t,w);var e=f,r=h,d=p,v=e*e+r*r+d*d;return v<x.aW&&(e=l,r=u,d=c,i<x.Ho&&(e=a,r=o,d=s),(v=e*e+r*r+d*d)<x.aW)?[NaN,NaN]:[(0,x.fv)(r,e)*x.RW,(0,x.ZR)(d/(0,x._b)(v))*x.RW]}},7613:function(t,e,r){\"use strict\";r.d(e,{m:function(){return s},Z:function(){return u}});var n=r(7620);function i(t){return function(){return t}}var a=r(39695),o=r(49386);function s(t,e,r,i,o,s){if(r){var u=(0,a.mC)(e),c=(0,a.O$)(e),f=i*r;null==o?(o=e+i*a.BZ,s=e-f/2):(o=l(u,o),s=l(u,s),(i>0?o<s:o>s)&&(o+=i*a.BZ));for(var h,p=o;i>0?p>s:p<s;p-=f)h=(0,n.Y1)([u,-c*(0,a.mC)(p),-c*(0,a.O$)(p)]),t.point(h[0],h[1])}}function l(t,e){(e=(0,n.Og)(e))[0]-=t,(0,n.iJ)(e);var r=(0,a.Kh)(-e[1]);return((-e[2]<0?-r:r)+a.BZ-a.Ho)%a.BZ}function u(){var t,e,r=i([0,0]),n=i(90),l=i(6),u={point:function(r,n){t.push(r=e(r,n)),r[0]*=a.RW,r[1]*=a.RW}};function c(){var i=r.apply(this,arguments),c=n.apply(this,arguments)*a.uR,f=l.apply(this,arguments)*a.uR;return t=[],e=(0,o.I)(-i[0]*a.uR,-i[1]*a.uR,0).invert,s(u,c,f,1),i={type:\"Polygon\",coordinates:[t]},t=e=null,i}return c.center=function(t){return arguments.length?(r=\"function\"==typeof t?t:i([+t[0],+t[1]]),c):r},c.radius=function(t){return arguments.length?(n=\"function\"==typeof t?t:i(+t),c):n},c.precision=function(t){return arguments.length?(l=\"function\"==typeof t?t:i(+t),c):l},c}},87070:function(t,e,r){\"use strict\";var n=r(97023),i=r(39695);e.Z=(0,n.Z)((function(){return!0}),(function(t){var e,r=NaN,n=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,s){var l=o>0?i.pi:-i.pi,u=(0,i.Wn)(o-r);(0,i.Wn)(u-i.pi)<i.Ho?(t.point(r,n=(n+s)/2>0?i.ou:-i.ou),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),t.point(o,n),e=0):a!==l&&u>=i.pi&&((0,i.Wn)(r-a)<i.Ho&&(r-=a*i.Ho),(0,i.Wn)(o-l)<i.Ho&&(o-=l*i.Ho),n=function(t,e,r,n){var a,o,s=(0,i.O$)(t-r);return(0,i.Wn)(s)>i.Ho?(0,i.z4)(((0,i.O$)(e)*(o=(0,i.mC)(n))*(0,i.O$)(r)-(0,i.O$)(n)*(a=(0,i.mC)(e))*(0,i.O$)(t))/(a*o*s)):(e+n)/2}(r,n,o,s),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(l,n),e=0),t.point(r=o,n=s),a=l},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}}),(function(t,e,r,n){var a;if(null==t)a=r*i.ou,n.point(-i.pi,a),n.point(0,a),n.point(i.pi,a),n.point(i.pi,0),n.point(i.pi,-a),n.point(0,-a),n.point(-i.pi,-a),n.point(-i.pi,0),n.point(-i.pi,a);else if((0,i.Wn)(t[0]-e[0])>i.Ho){var o=t[0]<e[0]?i.pi:-i.pi;a=r*o/2,n.point(-o,a),n.point(0,a),n.point(o,a)}else n.point(e[0],e[1])}),[-i.pi,-i.ou])},85272:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return i}});var n=r(73182);function i(){var t,e=[];return{point:function(e,r,n){t.push([e,r,n])},lineStart:function(){e.push(t=[])},lineEnd:n.Z,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var r=e;return e=[],t=null,r}}}},1457:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return l}});var n=r(7620),i=r(7613),a=r(39695),o=r(67108),s=r(97023);function l(t){var e=(0,a.mC)(t),r=6*a.uR,l=e>0,u=(0,a.Wn)(e)>a.Ho;function c(t,r){return(0,a.mC)(t)*(0,a.mC)(r)>e}function f(t,r,i){var o=(0,n.Og)(t),s=(0,n.Og)(r),l=[1,0,0],u=(0,n.T5)(o,s),c=(0,n.j9)(u,u),f=u[0],h=c-f*f;if(!h)return!i&&t;var p=e*c/h,d=-e*f/h,v=(0,n.T5)(l,u),g=(0,n.T)(l,p),y=(0,n.T)(u,d);(0,n.s0)(g,y);var m=v,x=(0,n.j9)(g,m),b=(0,n.j9)(m,m),_=x*x-b*((0,n.j9)(g,g)-1);if(!(_<0)){var w=(0,a._b)(_),T=(0,n.T)(m,(-x-w)/b);if((0,n.s0)(T,g),T=(0,n.Y1)(T),!i)return T;var k,A=t[0],M=r[0],S=t[1],E=r[1];M<A&&(k=A,A=M,M=k);var L=M-A,C=(0,a.Wn)(L-a.pi)<a.Ho;if(!C&&E<S&&(k=S,S=E,E=k),C||L<a.Ho?C?S+E>0^T[1]<((0,a.Wn)(T[0]-A)<a.Ho?S:E):S<=T[1]&&T[1]<=E:L>a.pi^(A<=T[0]&&T[0]<=M)){var P=(0,n.T)(m,(-x+w)/b);return(0,n.s0)(P,g),[T,(0,n.Y1)(P)]}}}function h(e,r){var n=l?t:a.pi-t,i=0;return e<-n?i|=1:e>n&&(i|=2),r<-n?i|=4:r>n&&(i|=8),i}return(0,s.Z)(c,(function(t){var e,r,n,i,s;return{lineStart:function(){i=n=!1,s=1},point:function(p,d){var v,g=[p,d],y=c(p,d),m=l?y?0:h(p,d):y?h(p+(p<0?a.pi:-a.pi),d):0;if(!e&&(i=n=y)&&t.lineStart(),y!==n&&(!(v=f(e,g))||(0,o.Z)(e,v)||(0,o.Z)(g,v))&&(g[2]=1),y!==n)s=0,y?(t.lineStart(),v=f(g,e),t.point(v[0],v[1])):(v=f(e,g),t.point(v[0],v[1],2),t.lineEnd()),e=v;else if(u&&e&&l^y){var x;m&r||!(x=f(g,e,!0))||(s=0,l?(t.lineStart(),t.point(x[0][0],x[0][1]),t.point(x[1][0],x[1][1]),t.lineEnd()):(t.point(x[1][0],x[1][1]),t.lineEnd(),t.lineStart(),t.point(x[0][0],x[0][1],3)))}!y||e&&(0,o.Z)(e,g)||t.point(g[0],g[1]),e=g,n=y,r=m},lineEnd:function(){n&&t.lineEnd(),e=null},clean:function(){return s|(i&&n)<<1}}}),(function(e,n,a,o){(0,i.m)(o,t,r,a,e,n)}),l?[0,-t]:[-a.pi,t-a.pi])}},97023:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return l}});var n=r(85272),i=r(46225),a=r(39695),o=r(23071),s=r(33064);function l(t,e,r,a){return function(l){var f,h,p,d=e(l),v=(0,n.Z)(),g=e(v),y=!1,m={point:x,lineStart:_,lineEnd:w,polygonStart:function(){m.point=T,m.lineStart=k,m.lineEnd=A,h=[],f=[]},polygonEnd:function(){m.point=x,m.lineStart=_,m.lineEnd=w,h=(0,s.TS)(h);var t=(0,o.Z)(f,a);h.length?(y||(l.polygonStart(),y=!0),(0,i.Z)(h,c,t,r,l)):t&&(y||(l.polygonStart(),y=!0),l.lineStart(),r(null,null,1,l),l.lineEnd()),y&&(l.polygonEnd(),y=!1),h=f=null},sphere:function(){l.polygonStart(),l.lineStart(),r(null,null,1,l),l.lineEnd(),l.polygonEnd()}};function x(e,r){t(e,r)&&l.point(e,r)}function b(t,e){d.point(t,e)}function _(){m.point=b,d.lineStart()}function w(){m.point=x,d.lineEnd()}function T(t,e){p.push([t,e]),g.point(t,e)}function k(){g.lineStart(),p=[]}function A(){T(p[0][0],p[0][1]),g.lineEnd();var t,e,r,n,i=g.clean(),a=v.result(),o=a.length;if(p.pop(),f.push(p),p=null,o)if(1&i){if((e=(r=a[0]).length-1)>0){for(y||(l.polygonStart(),y=!0),l.lineStart(),t=0;t<e;++t)l.point((n=r[t])[0],n[1]);l.lineEnd()}}else o>1&&2&i&&a.push(a.pop().concat(a.shift())),h.push(a.filter(u))}return m}}function u(t){return t.length>1}function c(t,e){return((t=t.x)[0]<0?t[1]-a.ou-a.Ho:a.ou-t[1])-((e=e.x)[0]<0?e[1]-a.ou-a.Ho:a.ou-e[1])}},87605:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return u}});var n=r(39695),i=r(85272),a=r(46225),o=r(33064),s=1e9,l=-s;function u(t,e,r,u){function c(n,i){return t<=n&&n<=r&&e<=i&&i<=u}function f(n,i,a,o){var s=0,l=0;if(null==n||(s=h(n,a))!==(l=h(i,a))||d(n,i)<0^a>0)do{o.point(0===s||3===s?t:r,s>1?u:e)}while((s=(s+a+4)%4)!==l);else o.point(i[0],i[1])}function h(i,a){return(0,n.Wn)(i[0]-t)<n.Ho?a>0?0:3:(0,n.Wn)(i[0]-r)<n.Ho?a>0?2:1:(0,n.Wn)(i[1]-e)<n.Ho?a>0?1:0:a>0?3:2}function p(t,e){return d(t.x,e.x)}function d(t,e){var r=h(t,1),n=h(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}return function(n){var h,d,v,g,y,m,x,b,_,w,T,k=n,A=(0,i.Z)(),M={point:S,lineStart:function(){M.point=E,d&&d.push(v=[]),w=!0,_=!1,x=b=NaN},lineEnd:function(){h&&(E(g,y),m&&_&&A.rejoin(),h.push(A.result())),M.point=S,_&&k.lineEnd()},polygonStart:function(){k=A,h=[],d=[],T=!0},polygonEnd:function(){var e=function(){for(var e=0,r=0,n=d.length;r<n;++r)for(var i,a,o=d[r],s=1,l=o.length,c=o[0],f=c[0],h=c[1];s<l;++s)i=f,a=h,f=(c=o[s])[0],h=c[1],a<=u?h>u&&(f-i)*(u-a)>(h-a)*(t-i)&&++e:h<=u&&(f-i)*(u-a)<(h-a)*(t-i)&&--e;return e}(),r=T&&e,i=(h=(0,o.TS)(h)).length;(r||i)&&(n.polygonStart(),r&&(n.lineStart(),f(null,null,1,n),n.lineEnd()),i&&(0,a.Z)(h,p,e,f,n),n.polygonEnd()),k=n,h=d=v=null}};function S(t,e){c(t,e)&&k.point(t,e)}function E(n,i){var a=c(n,i);if(d&&v.push([n,i]),w)g=n,y=i,m=a,w=!1,a&&(k.lineStart(),k.point(n,i));else if(a&&_)k.point(n,i);else{var o=[x=Math.max(l,Math.min(s,x)),b=Math.max(l,Math.min(s,b))],f=[n=Math.max(l,Math.min(s,n)),i=Math.max(l,Math.min(s,i))];!function(t,e,r,n,i,a){var o,s=t[0],l=t[1],u=0,c=1,f=e[0]-s,h=e[1]-l;if(o=r-s,f||!(o>0)){if(o/=f,f<0){if(o<u)return;o<c&&(c=o)}else if(f>0){if(o>c)return;o>u&&(u=o)}if(o=i-s,f||!(o<0)){if(o/=f,f<0){if(o>c)return;o>u&&(u=o)}else if(f>0){if(o<u)return;o<c&&(c=o)}if(o=n-l,h||!(o>0)){if(o/=h,h<0){if(o<u)return;o<c&&(c=o)}else if(h>0){if(o>c)return;o>u&&(u=o)}if(o=a-l,h||!(o<0)){if(o/=h,h<0){if(o>c)return;o>u&&(u=o)}else if(h>0){if(o<u)return;o<c&&(c=o)}return u>0&&(t[0]=s+u*f,t[1]=l+u*h),c<1&&(e[0]=s+c*f,e[1]=l+c*h),!0}}}}}(o,f,t,e,r,u)?a&&(k.lineStart(),k.point(n,i),T=!1):(_||(k.lineStart(),k.point(o[0],o[1])),k.point(f[0],f[1]),a||k.lineEnd(),T=!1)}x=n,b=i,_=a}return M}}},46225:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return o}});var n=r(67108),i=r(39695);function a(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function o(t,e,r,o,l){var u,c,f=[],h=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,r,o=t[0],s=t[e];if((0,n.Z)(o,s)){if(!o[2]&&!s[2]){for(l.lineStart(),u=0;u<e;++u)l.point((o=t[u])[0],o[1]);return void l.lineEnd()}s[0]+=2*i.Ho}f.push(r=new a(o,t,null,!0)),h.push(r.o=new a(o,null,r,!1)),f.push(r=new a(s,t,null,!1)),h.push(r.o=new a(s,null,r,!0))}})),f.length){for(h.sort(e),s(f),s(h),u=0,c=h.length;u<c;++u)h[u].e=r=!r;for(var p,d,v=f[0];;){for(var g=v,y=!0;g.v;)if((g=g.n)===v)return;p=g.z,l.lineStart();do{if(g.v=g.o.v=!0,g.e){if(y)for(u=0,c=p.length;u<c;++u)l.point((d=p[u])[0],d[1]);else o(g.x,g.n.x,1,l);g=g.n}else{if(y)for(p=g.p.z,u=p.length-1;u>=0;--u)l.point((d=p[u])[0],d[1]);else o(g.x,g.p.x,-1,l);g=g.p}p=(g=g.o).z,y=!y}while(!g.v);l.lineEnd()}}}function s(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n<e;)i.n=r=t[n],r.p=i,i=r;i.n=r=t[0],r.p=i}}},96059:function(t,e,r){\"use strict\";function n(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}r.d(e,{Z:function(){return n}})},8593:function(t,e,r){\"use strict\";function n(t){return t}r.d(e,{Z:function(){return n}})},27362:function(t,e,r){\"use strict\";r.r(e),r.d(e,{geoAlbers:function(){return Gt},geoAlbersUsa:function(){return Yt},geoArea:function(){return n.ZP},geoAzimuthalEqualArea:function(){return Wt.Z},geoAzimuthalEqualAreaRaw:function(){return Wt.l},geoAzimuthalEquidistant:function(){return Xt.Z},geoAzimuthalEquidistantRaw:function(){return Xt.N},geoBounds:function(){return i.Z},geoCentroid:function(){return a.Z},geoCircle:function(){return o.Z},geoClipAntimeridian:function(){return s.Z},geoClipCircle:function(){return l.Z},geoClipExtent:function(){return c},geoClipRectangle:function(){return u.Z},geoConicConformal:function(){return re},geoConicConformalRaw:function(){return ee},geoConicEqualArea:function(){return qt},geoConicEqualAreaRaw:function(){return Ht},geoConicEquidistant:function(){return ae},geoConicEquidistantRaw:function(){return ie},geoContains:function(){return R},geoDistance:function(){return S},geoEqualEarth:function(){return he},geoEqualEarthRaw:function(){return fe},geoEquirectangular:function(){return ne.Z},geoEquirectangularRaw:function(){return ne.k},geoGnomonic:function(){return pe.Z},geoGnomonicRaw:function(){return pe.M},geoGraticule:function(){return j},geoGraticule10:function(){return U},geoIdentity:function(){return ve},geoInterpolate:function(){return Z.Z},geoLength:function(){return k},geoMercator:function(){return $t},geoMercatorRaw:function(){return Kt},geoNaturalEarth1:function(){return ge.Z},geoNaturalEarth1Raw:function(){return ge.K},geoOrthographic:function(){return ye.Z},geoOrthographicRaw:function(){return ye.I},geoPath:function(){return jt},geoProjection:function(){return Ut.Z},geoProjectionMutator:function(){return Ut.r},geoRotation:function(){return Jt.Z},geoStereographic:function(){return be},geoStereographicRaw:function(){return xe},geoStream:function(){return m.Z},geoTransform:function(){return de.Z},geoTransverseMercator:function(){return we},geoTransverseMercatorRaw:function(){return _e}});var n=r(97860),i=r(77338),a=r(66624),o=r(7613),s=r(87070),l=r(1457),u=r(87605);function c(){var t,e,r,n=0,i=0,a=960,o=500;return r={stream:function(r){return t&&e===r?t:t=(0,u.Z)(n,i,a,o)(e=r)},extent:function(s){return arguments.length?(n=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,r):[[n,i],[a,o]]}}}var f,h,p,d=r(23071),v=r(33940),g=r(39695),y=r(73182),m=r(72736),x=(0,v.Z)(),b={sphere:y.Z,point:y.Z,lineStart:function(){b.point=w,b.lineEnd=_},lineEnd:y.Z,polygonStart:y.Z,polygonEnd:y.Z};function _(){b.point=b.lineEnd=y.Z}function w(t,e){t*=g.uR,e*=g.uR,f=t,h=(0,g.O$)(e),p=(0,g.mC)(e),b.point=T}function T(t,e){t*=g.uR,e*=g.uR;var r=(0,g.O$)(e),n=(0,g.mC)(e),i=(0,g.Wn)(t-f),a=(0,g.mC)(i),o=n*(0,g.O$)(i),s=p*r-h*n*a,l=h*r+p*n*a;x.add((0,g.fv)((0,g._b)(o*o+s*s),l)),f=t,h=r,p=n}function k(t){return x.reset(),(0,m.Z)(t,b),+x}var A=[null,null],M={type:\"LineString\",coordinates:A};function S(t,e){return A[0]=t,A[1]=e,k(M)}var E={Feature:function(t,e){return C(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)if(C(r[n].geometry,e))return!0;return!1}},L={Sphere:function(){return!0},Point:function(t,e){return P(t.coordinates,e)},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(P(r[n],e))return!0;return!1},LineString:function(t,e){return O(t.coordinates,e)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(O(r[n],e))return!0;return!1},Polygon:function(t,e){return I(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(I(r[n],e))return!0;return!1},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)if(C(r[n],e))return!0;return!1}};function C(t,e){return!(!t||!L.hasOwnProperty(t.type))&&L[t.type](t,e)}function P(t,e){return 0===S(t,e)}function O(t,e){for(var r,n,i,a=0,o=t.length;a<o;a++){if(0===(n=S(t[a],e)))return!0;if(a>0&&(i=S(t[a],t[a-1]))>0&&r<=i&&n<=i&&(r+n-i)*(1-Math.pow((r-n)/i,2))<g.aW*i)return!0;r=n}return!1}function I(t,e){return!!(0,d.Z)(t.map(D),z(e))}function D(t){return(t=t.map(z)).pop(),t}function z(t){return[t[0]*g.uR,t[1]*g.uR]}function R(t,e){return(t&&E.hasOwnProperty(t.type)?E[t.type]:C)(t,e)}var F=r(33064);function B(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[t,e]}))}}function N(t,e,r){var n=(0,F.w6)(t,e-g.Ho,r).concat(e);return function(t){return n.map((function(e){return[e,t]}))}}function j(){var t,e,r,n,i,a,o,s,l,u,c,f,h=10,p=h,d=90,v=360,y=2.5;function m(){return{type:\"MultiLineString\",coordinates:x()}}function x(){return(0,F.w6)((0,g.mD)(n/d)*d,r,d).map(c).concat((0,F.w6)((0,g.mD)(s/v)*v,o,v).map(f)).concat((0,F.w6)((0,g.mD)(e/h)*h,t,h).filter((function(t){return(0,g.Wn)(t%d)>g.Ho})).map(l)).concat((0,F.w6)((0,g.mD)(a/p)*p,i,p).filter((function(t){return(0,g.Wn)(t%v)>g.Ho})).map(u))}return m.lines=function(){return x().map((function(t){return{type:\"LineString\",coordinates:t}}))},m.outline=function(){return{type:\"Polygon\",coordinates:[c(n).concat(f(o).slice(1),c(r).reverse().slice(1),f(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(n=+t[0][0],r=+t[1][0],s=+t[0][1],o=+t[1][1],n>r&&(t=n,n=r,r=t),s>o&&(t=s,s=o,o=t),m.precision(y)):[[n,s],[r,o]]},m.extentMinor=function(r){return arguments.length?(e=+r[0][0],t=+r[1][0],a=+r[0][1],i=+r[1][1],e>t&&(r=e,e=t,t=r),a>i&&(r=a,a=i,i=r),m.precision(y)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(d=+t[0],v=+t[1],m):[d,v]},m.stepMinor=function(t){return arguments.length?(h=+t[0],p=+t[1],m):[h,p]},m.precision=function(h){return arguments.length?(y=+h,l=B(a,i,90),u=N(e,t,y),c=B(s,o,90),f=N(n,r,y),m):y},m.extentMajor([[-180,-90+g.Ho],[180,90-g.Ho]]).extentMinor([[-180,-80-g.Ho],[180,80+g.Ho]])}function U(){return j()()}var V,H,q,G,Z=r(83074),Y=r(8593),W=(0,v.Z)(),X=(0,v.Z)(),J={point:y.Z,lineStart:y.Z,lineEnd:y.Z,polygonStart:function(){J.lineStart=K,J.lineEnd=tt},polygonEnd:function(){J.lineStart=J.lineEnd=J.point=y.Z,W.add((0,g.Wn)(X)),X.reset()},result:function(){var t=W/2;return W.reset(),t}};function K(){J.point=$}function $(t,e){J.point=Q,V=q=t,H=G=e}function Q(t,e){X.add(G*t-q*e),q=t,G=e}function tt(){Q(V,H)}var et,rt,nt,it,at=J,ot=r(3559),st=0,lt=0,ut=0,ct=0,ft=0,ht=0,pt=0,dt=0,vt=0,gt={point:yt,lineStart:mt,lineEnd:_t,polygonStart:function(){gt.lineStart=wt,gt.lineEnd=Tt},polygonEnd:function(){gt.point=yt,gt.lineStart=mt,gt.lineEnd=_t},result:function(){var t=vt?[pt/vt,dt/vt]:ht?[ct/ht,ft/ht]:ut?[st/ut,lt/ut]:[NaN,NaN];return st=lt=ut=ct=ft=ht=pt=dt=vt=0,t}};function yt(t,e){st+=t,lt+=e,++ut}function mt(){gt.point=xt}function xt(t,e){gt.point=bt,yt(nt=t,it=e)}function bt(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,yt(nt=t,it=e)}function _t(){gt.point=yt}function wt(){gt.point=kt}function Tt(){At(et,rt)}function kt(t,e){gt.point=At,yt(et=nt=t,rt=it=e)}function At(t,e){var r=t-nt,n=e-it,i=(0,g._b)(r*r+n*n);ct+=i*(nt+t)/2,ft+=i*(it+e)/2,ht+=i,pt+=(i=it*t-nt*e)*(nt+t),dt+=i*(it+e),vt+=3*i,yt(nt=t,it=e)}var Mt=gt;function St(t){this._context=t}St.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,g.BZ)}},result:y.Z};var Et,Lt,Ct,Pt,Ot,It=(0,v.Z)(),Dt={point:y.Z,lineStart:function(){Dt.point=zt},lineEnd:function(){Et&&Rt(Lt,Ct),Dt.point=y.Z},polygonStart:function(){Et=!0},polygonEnd:function(){Et=null},result:function(){var t=+It;return It.reset(),t}};function zt(t,e){Dt.point=Rt,Lt=Pt=t,Ct=Ot=e}function Rt(t,e){Pt-=t,Ot-=e,It.add((0,g._b)(Pt*Pt+Ot*Ot)),Pt=t,Ot=e}var Ft=Dt;function Bt(){this._string=[]}function Nt(t){return\"m0,\"+t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+-2*t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+2*t+\"z\"}function jt(t,e){var r,n,i=4.5;function a(t){return t&&(\"function\"==typeof i&&n.pointRadius(+i.apply(this,arguments)),(0,m.Z)(t,r(n))),n.result()}return a.area=function(t){return(0,m.Z)(t,r(at)),at.result()},a.measure=function(t){return(0,m.Z)(t,r(Ft)),Ft.result()},a.bounds=function(t){return(0,m.Z)(t,r(ot.Z)),ot.Z.result()},a.centroid=function(t){return(0,m.Z)(t,r(Mt)),Mt.result()},a.projection=function(e){return arguments.length?(r=null==e?(t=null,Y.Z):(t=e).stream,a):t},a.context=function(t){return arguments.length?(n=null==t?(e=null,new Bt):new St(e=t),\"function\"!=typeof i&&n.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i=\"function\"==typeof t?t:(n.pointRadius(+t),+t),a):i},a.projection(t).context(e)}Bt.prototype={_radius:4.5,_circle:Nt(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push(\"Z\"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push(\"M\",t,\",\",e),this._point=1;break;case 1:this._string.push(\"L\",t,\",\",e);break;default:null==this._circle&&(this._circle=Nt(this._radius)),this._string.push(\"M\",t,\",\",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join(\"\");return this._string=[],t}return null}};var Ut=r(15002);function Vt(t){var e=0,r=g.pi/3,n=(0,Ut.r)(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*g.uR,r=t[1]*g.uR):[e*g.RW,r*g.RW]},i}function Ht(t,e){var r=(0,g.O$)(t),n=(r+(0,g.O$)(e))/2;if((0,g.Wn)(n)<g.Ho)return function(t){var e=(0,g.mC)(t);function r(t,r){return[t*e,(0,g.O$)(r)/e]}return r.invert=function(t,r){return[t/e,(0,g.ZR)(r*e)]},r}(t);var i=1+r*(2*n-r),a=(0,g._b)(i)/n;function o(t,e){var r=(0,g._b)(i-2*n*(0,g.O$)(e))/n;return[r*(0,g.O$)(t*=n),a-r*(0,g.mC)(t)]}return o.invert=function(t,e){var r=a-e,o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,(0,g.ZR)((i-(t*t+r*r)*n*n)/(2*n))]},o}function qt(){return Vt(Ht).scale(155.424).center([0,33.6442])}function Gt(){return qt().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}var Zt=r(47589);function Yt(){var t,e,r,n,i,a,o=Gt(),s=qt().rotate([154,0]).center([-2,58.5]).parallels([55,65]),l=qt().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function c(t){var e=t[0],o=t[1];return a=null,r.point(e,o),a||(n.point(e,o),a)||(i.point(e,o),a)}function f(){return t=e=null,c}return c.invert=function(t){var e=o.scale(),r=o.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?s:i>=.166&&i<.234&&n>=-.214&&n<-.115?l:o).invert(t)},c.stream=function(r){return t&&e===r?t:(n=[o.stream(e=r),s.stream(r),l.stream(r)],i=n.length,t={point:function(t,e){for(var r=-1;++r<i;)n[r].point(t,e)},sphere:function(){for(var t=-1;++t<i;)n[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)n[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)n[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)n[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)n[t].polygonEnd()}});var n,i},c.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),l.precision(t),f()):o.precision()},c.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),l.scale(t),c.translate(o.translate())):o.scale()},c.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],c=+t[1];return r=o.translate(t).clipExtent([[a-.455*e,c-.238*e],[a+.455*e,c+.238*e]]).stream(u),n=s.translate([a-.307*e,c+.201*e]).clipExtent([[a-.425*e+g.Ho,c+.12*e+g.Ho],[a-.214*e-g.Ho,c+.234*e-g.Ho]]).stream(u),i=l.translate([a-.205*e,c+.212*e]).clipExtent([[a-.214*e+g.Ho,c+.166*e+g.Ho],[a-.115*e-g.Ho,c+.234*e-g.Ho]]).stream(u),f()},c.fitExtent=function(t,e){return(0,Zt.qg)(c,t,e)},c.fitSize=function(t,e){return(0,Zt.mF)(c,t,e)},c.fitWidth=function(t,e){return(0,Zt.V6)(c,t,e)},c.fitHeight=function(t,e){return(0,Zt.rf)(c,t,e)},c.scale(1070)}var Wt=r(12956),Xt=r(17889),Jt=r(49386);function Kt(t,e){return[t,(0,g.cM)((0,g.OR)((g.ou+e)/2))]}function $t(){return Qt(Kt).scale(961/g.BZ)}function Qt(t){var e,r,n,i=(0,Ut.Z)(t),a=i.center,o=i.scale,s=i.translate,l=i.clipExtent,u=null;function c(){var a=g.pi*o(),s=i((0,Jt.Z)(i.rotate()).invert([0,0]));return l(null==u?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===Kt?[[Math.max(s[0]-a,u),e],[Math.min(s[0]+a,r),n]]:[[u,Math.max(s[1]-a,e)],[r,Math.min(s[1]+a,n)]])}return i.scale=function(t){return arguments.length?(o(t),c()):o()},i.translate=function(t){return arguments.length?(s(t),c()):s()},i.center=function(t){return arguments.length?(a(t),c()):a()},i.clipExtent=function(t){return arguments.length?(null==t?u=e=r=n=null:(u=+t[0][0],e=+t[0][1],r=+t[1][0],n=+t[1][1]),c()):null==u?null:[[u,e],[r,n]]},c()}function te(t){return(0,g.OR)((g.ou+t)/2)}function ee(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(0,g.cM)(r/(0,g.mC)(e))/(0,g.cM)(te(e)/te(t)),i=r*(0,g.sQ)(te(t),n)/n;if(!n)return Kt;function a(t,e){i>0?e<-g.ou+g.Ho&&(e=-g.ou+g.Ho):e>g.ou-g.Ho&&(e=g.ou-g.Ho);var r=i/(0,g.sQ)(te(e),n);return[r*(0,g.O$)(n*t),i-r*(0,g.mC)(n*t)]}return a.invert=function(t,e){var r=i-e,a=(0,g.Xx)(n)*(0,g._b)(t*t+r*r),o=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(o-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[o/n,2*(0,g.z4)((0,g.sQ)(i/a,1/n))-g.ou]},a}function re(){return Vt(ee).scale(109.5).parallels([30,30])}Kt.invert=function(t,e){return[t,2*(0,g.z4)((0,g.Qq)(e))-g.ou]};var ne=r(97492);function ie(t,e){var r=(0,g.mC)(t),n=t===e?(0,g.O$)(t):(r-(0,g.mC)(e))/(e-t),i=r/n+t;if((0,g.Wn)(n)<g.Ho)return ne.k;function a(t,e){var r=i-e,a=n*t;return[r*(0,g.O$)(a),i-r*(0,g.mC)(a)]}return a.invert=function(t,e){var r=i-e,a=(0,g.fv)(t,(0,g.Wn)(r))*(0,g.Xx)(r);return r*n<0&&(a-=g.pi*(0,g.Xx)(t)*(0,g.Xx)(r)),[a/n,i-(0,g.Xx)(n)*(0,g._b)(t*t+r*r)]},a}function ae(){return Vt(ie).scale(131.154).center([0,13.9389])}var oe=1.340264,se=-.081106,le=893e-6,ue=.003796,ce=(0,g._b)(3)/2;function fe(t,e){var r=(0,g.ZR)(ce*(0,g.O$)(e)),n=r*r,i=n*n*n;return[t*(0,g.mC)(r)/(ce*(oe+3*se*n+i*(7*le+9*ue*n))),r*(oe+se*n+i*(le+ue*n))]}function he(){return(0,Ut.Z)(fe).scale(177.158)}fe.invert=function(t,e){for(var r,n=e,i=n*n,a=i*i*i,o=0;o<12&&(a=(i=(n-=r=(n*(oe+se*i+a*(le+ue*i))-e)/(oe+3*se*i+a*(7*le+9*ue*i)))*n)*i*i,!((0,g.Wn)(r)<g.aW));++o);return[ce*t*(oe+3*se*i+a*(7*le+9*ue*i))/(0,g.mC)(n),(0,g.ZR)((0,g.O$)(n)/ce)]};var pe=r(98936),de=r(64684);function ve(){var t,e,r,n,i,a,o,s=1,l=0,c=0,f=1,h=1,p=0,d=null,v=1,y=1,m=(0,de.l)({point:function(t,e){var r=_([t,e]);this.stream.point(r[0],r[1])}}),x=Y.Z;function b(){return v=s*f,y=s*h,a=o=null,_}function _(r){var n=r[0]*v,i=r[1]*y;if(p){var a=i*t-n*e;n=n*t+i*e,i=a}return[n+l,i+c]}return _.invert=function(r){var n=r[0]-l,i=r[1]-c;if(p){var a=i*t+n*e;n=n*t-i*e,i=a}return[n/v,i/y]},_.stream=function(t){return a&&o===t?a:a=m(x(o=t))},_.postclip=function(t){return arguments.length?(x=t,d=r=n=i=null,b()):x},_.clipExtent=function(t){return arguments.length?(x=null==t?(d=r=n=i=null,Y.Z):(0,u.Z)(d=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),b()):null==d?null:[[d,r],[n,i]]},_.scale=function(t){return arguments.length?(s=+t,b()):s},_.translate=function(t){return arguments.length?(l=+t[0],c=+t[1],b()):[l,c]},_.angle=function(r){return arguments.length?(p=r%360*g.uR,e=(0,g.O$)(p),t=(0,g.mC)(p),b()):p*g.RW},_.reflectX=function(t){return arguments.length?(f=t?-1:1,b()):f<0},_.reflectY=function(t){return arguments.length?(h=t?-1:1,b()):h<0},_.fitExtent=function(t,e){return(0,Zt.qg)(_,t,e)},_.fitSize=function(t,e){return(0,Zt.mF)(_,t,e)},_.fitWidth=function(t,e){return(0,Zt.V6)(_,t,e)},_.fitHeight=function(t,e){return(0,Zt.rf)(_,t,e)},_}var ge=r(26867),ye=r(57962),me=r(25382);function xe(t,e){var r=(0,g.mC)(e),n=1+(0,g.mC)(t)*r;return[r*(0,g.O$)(t)/n,(0,g.O$)(e)/n]}function be(){return(0,Ut.Z)(xe).scale(250).clipAngle(142)}function _e(t,e){return[(0,g.cM)((0,g.OR)((g.ou+e)/2)),-t]}function we(){var t=Qt(_e),e=t.center,r=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90]).scale(159.155)}xe.invert=(0,me.O)((function(t){return 2*(0,g.z4)(t)})),_e.invert=function(t,e){return[-e,2*(0,g.z4)((0,g.Qq)(t))-g.ou]}},83074:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){var r=t[0]*n.uR,i=t[1]*n.uR,a=e[0]*n.uR,o=e[1]*n.uR,s=(0,n.mC)(i),l=(0,n.O$)(i),u=(0,n.mC)(o),c=(0,n.O$)(o),f=s*(0,n.mC)(r),h=s*(0,n.O$)(r),p=u*(0,n.mC)(a),d=u*(0,n.O$)(a),v=2*(0,n.ZR)((0,n._b)((0,n.Jy)(o-i)+s*u*(0,n.Jy)(a-r))),g=(0,n.O$)(v),y=v?function(t){var e=(0,n.O$)(t*=v)/g,r=(0,n.O$)(v-t)/g,i=r*f+e*p,a=r*h+e*d,o=r*l+e*c;return[(0,n.fv)(a,i)*n.RW,(0,n.fv)(o,(0,n._b)(i*i+a*a))*n.RW]}:function(){return[r*n.RW,i*n.RW]};return y.distance=v,y}},39695:function(t,e,r){\"use strict\";r.d(e,{BZ:function(){return l},Ho:function(){return n},Jy:function(){return A},Kh:function(){return T},O$:function(){return x},OR:function(){return w},Qq:function(){return g},RW:function(){return u},Wn:function(){return f},Xx:function(){return b},ZR:function(){return k},_b:function(){return _},aW:function(){return i},cM:function(){return y},fv:function(){return p},mC:function(){return d},mD:function(){return v},ou:function(){return o},pi:function(){return a},pu:function(){return s},sQ:function(){return m},uR:function(){return c},z4:function(){return h}});var n=1e-6,i=1e-12,a=Math.PI,o=a/2,s=a/4,l=2*a,u=180/a,c=a/180,f=Math.abs,h=Math.atan,p=Math.atan2,d=Math.cos,v=Math.ceil,g=Math.exp,y=(Math.floor,Math.log),m=Math.pow,x=Math.sin,b=Math.sign||function(t){return t>0?1:t<0?-1:0},_=Math.sqrt,w=Math.tan;function T(t){return t>1?0:t<-1?a:Math.acos(t)}function k(t){return t>1?o:t<-1?-o:Math.asin(t)}function A(t){return(t=x(t/2))*t}},73182:function(t,e,r){\"use strict\";function n(){}r.d(e,{Z:function(){return n}})},3559:function(t,e,r){\"use strict\";var n=r(73182),i=1/0,a=i,o=-i,s=o,l={point:function(t,e){t<i&&(i=t),t>o&&(o=t),e<a&&(a=e),e>s&&(s=e)},lineStart:n.Z,lineEnd:n.Z,polygonStart:n.Z,polygonEnd:n.Z,result:function(){var t=[[i,a],[o,s]];return o=s=-(a=i=1/0),t}};e.Z=l},67108:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return i}});var n=r(39695);function i(t,e){return(0,n.Wn)(t[0]-e[0])<n.Ho&&(0,n.Wn)(t[1]-e[1])<n.Ho}},23071:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return l}});var n=r(33940),i=r(7620),a=r(39695),o=(0,n.Z)();function s(t){return(0,a.Wn)(t[0])<=a.pi?t[0]:(0,a.Xx)(t[0])*(((0,a.Wn)(t[0])+a.pi)%a.BZ-a.pi)}function l(t,e){var r=s(e),n=e[1],l=(0,a.O$)(n),u=[(0,a.O$)(r),-(0,a.mC)(r),0],c=0,f=0;o.reset(),1===l?n=a.ou+a.Ho:-1===l&&(n=-a.ou-a.Ho);for(var h=0,p=t.length;h<p;++h)if(v=(d=t[h]).length)for(var d,v,g=d[v-1],y=s(g),m=g[1]/2+a.pu,x=(0,a.O$)(m),b=(0,a.mC)(m),_=0;_<v;++_,y=T,x=A,b=M,g=w){var w=d[_],T=s(w),k=w[1]/2+a.pu,A=(0,a.O$)(k),M=(0,a.mC)(k),S=T-y,E=S>=0?1:-1,L=E*S,C=L>a.pi,P=x*A;if(o.add((0,a.fv)(P*E*(0,a.O$)(L),b*M+P*(0,a.mC)(L))),c+=C?S+E*a.BZ:S,C^y>=r^T>=r){var O=(0,i.T5)((0,i.Og)(g),(0,i.Og)(w));(0,i.iJ)(O);var I=(0,i.T5)(u,O);(0,i.iJ)(I);var D=(C^S>=0?-1:1)*(0,a.ZR)(I[2]);(n>D||n===D&&(O[0]||O[1]))&&(f+=C^S>=0?1:-1)}}return(c<-a.Ho||c<a.Ho&&o<-a.Ho)^1&f}},25382:function(t,e,r){\"use strict\";r.d(e,{O:function(){return a},W:function(){return i}});var n=r(39695);function i(t){return function(e,r){var i=(0,n.mC)(e),a=(0,n.mC)(r),o=t(i*a);return[o*a*(0,n.O$)(e),o*(0,n.O$)(r)]}}function a(t){return function(e,r){var i=(0,n._b)(e*e+r*r),a=t(i),o=(0,n.O$)(a),s=(0,n.mC)(a);return[(0,n.fv)(e*o,i*s),(0,n.ZR)(i&&r*o/i)]}}},12956:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return s},l:function(){return o}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(0,n._b)(2/(1+t))}));function s(){return(0,a.Z)(o).scale(124.75).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return 2*(0,n.ZR)(t/2)}))},17889:function(t,e,r){\"use strict\";r.d(e,{N:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002),o=(0,i.W)((function(t){return(t=(0,n.Kh)(t))&&t/(0,n.O$)(t)}));function s(){return(0,a.Z)(o).scale(79.4188).clipAngle(179.999)}o.invert=(0,i.O)((function(t){return t}))},97492:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return a},k:function(){return i}});var n=r(15002);function i(t,e){return[t,e]}function a(){return(0,n.Z)(i).scale(152.63)}i.invert=i},47589:function(t,e,r){\"use strict\";r.d(e,{V6:function(){return l},mF:function(){return s},qg:function(){return o},rf:function(){return u}});var n=r(72736),i=r(3559);function a(t,e,r){var a=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=a&&t.clipExtent(null),(0,n.Z)(r,t.stream(i.Z)),e(i.Z.result()),null!=a&&t.clipExtent(a),t}function o(t,e,r){return a(t,(function(r){var n=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(n/(r[1][0]-r[0][0]),i/(r[1][1]-r[0][1])),o=+e[0][0]+(n-a*(r[1][0]+r[0][0]))/2,s=+e[0][1]+(i-a*(r[1][1]+r[0][1]))/2;t.scale(150*a).translate([o,s])}),r)}function s(t,e,r){return o(t,[[0,0],e],r)}function l(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][0]-r[0][0]),a=(n-i*(r[1][0]+r[0][0]))/2,o=-i*r[0][1];t.scale(150*i).translate([a,o])}),r)}function u(t,e,r){return a(t,(function(r){var n=+e,i=n/(r[1][1]-r[0][1]),a=-i*r[0][0],o=(n-i*(r[1][1]+r[0][1]))/2;t.scale(150*i).translate([a,o])}),r)}},98936:function(t,e,r){\"use strict\";r.d(e,{M:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){var r=(0,n.mC)(e),i=(0,n.mC)(t)*r;return[r*(0,n.O$)(t)/i,(0,n.O$)(e)/i]}function s(){return(0,a.Z)(o).scale(144.049).clipAngle(60)}o.invert=(0,i.O)(n.z4)},15002:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return x},r:function(){return b}});var n=r(87070),i=r(1457),a=r(87605),o=r(96059),s=r(8593),l=r(39695),u=r(49386),c=r(64684),f=r(47589),h=r(7620),p=16,d=(0,l.mC)(30*l.uR);function v(t,e){return+e?function(t,e){function r(n,i,a,o,s,u,c,f,h,p,v,g,y,m){var x=c-n,b=f-i,_=x*x+b*b;if(_>4*e&&y--){var w=o+p,T=s+v,k=u+g,A=(0,l._b)(w*w+T*T+k*k),M=(0,l.ZR)(k/=A),S=(0,l.Wn)((0,l.Wn)(k)-1)<l.Ho||(0,l.Wn)(a-h)<l.Ho?(a+h)/2:(0,l.fv)(T,w),E=t(S,M),L=E[0],C=E[1],P=L-n,O=C-i,I=b*P-x*O;(I*I/_>e||(0,l.Wn)((x*P+b*O)/_-.5)>.3||o*p+s*v+u*g<d)&&(r(n,i,a,o,s,u,L,C,S,w/=A,T/=A,k,y,m),m.point(L,C),r(L,C,S,w,T,k,c,f,h,p,v,g,y,m))}}return function(e){var n,i,a,o,s,l,u,c,f,d,v,g,y={point:m,lineStart:x,lineEnd:_,polygonStart:function(){e.polygonStart(),y.lineStart=w},polygonEnd:function(){e.polygonEnd(),y.lineStart=x}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function x(){c=NaN,y.point=b,e.lineStart()}function b(n,i){var a=(0,h.Og)([n,i]),o=t(n,i);r(c,f,u,d,v,g,c=o[0],f=o[1],u=n,d=a[0],v=a[1],g=a[2],p,e),e.point(c,f)}function _(){y.point=m,e.lineEnd()}function w(){x(),y.point=T,y.lineEnd=k}function T(t,e){b(n=t,e),i=c,a=f,o=d,s=v,l=g,y.point=b}function k(){r(c,f,u,d,v,g,i,a,n,o,s,l,p,e),y.lineEnd=_,_()}return y}}(t,e):function(t){return(0,c.l)({point:function(e,r){e=t(e,r),this.stream.point(e[0],e[1])}})}(t)}var g=(0,c.l)({point:function(t,e){this.stream.point(t*l.uR,e*l.uR)}});function y(t,e,r,n,i){function a(a,o){return[e+t*(a*=n),r-t*(o*=i)]}return a.invert=function(a,o){return[(a-e)/t*n,(r-o)/t*i]},a}function m(t,e,r,n,i,a){var o=(0,l.mC)(a),s=(0,l.O$)(a),u=o*t,c=s*t,f=o/t,h=s/t,p=(s*r-o*e)/t,d=(s*e+o*r)/t;function v(t,a){return[u*(t*=n)-c*(a*=i)+e,r-c*t-u*a]}return v.invert=function(t,e){return[n*(f*t-h*e+p),i*(d-h*t-f*e)]},v}function x(t){return b((function(){return t}))()}function b(t){var e,r,h,p,d,x,b,_,w,T,k=150,A=480,M=250,S=0,E=0,L=0,C=0,P=0,O=0,I=1,D=1,z=null,R=n.Z,F=null,B=s.Z,N=.5;function j(t){return _(t[0]*l.uR,t[1]*l.uR)}function U(t){return(t=_.invert(t[0],t[1]))&&[t[0]*l.RW,t[1]*l.RW]}function V(){var t=m(k,0,0,I,D,O).apply(null,e(S,E)),n=(O?m:y)(k,A-t[0],M-t[1],I,D,O);return r=(0,u.I)(L,C,P),b=(0,o.Z)(e,n),_=(0,o.Z)(r,b),x=v(b,N),H()}function H(){return w=T=null,j}return j.stream=function(t){return w&&T===t?w:w=g(function(t){return(0,c.l)({point:function(e,r){var n=t(e,r);return this.stream.point(n[0],n[1])}})}(r)(R(x(B(T=t)))))},j.preclip=function(t){return arguments.length?(R=t,z=void 0,H()):R},j.postclip=function(t){return arguments.length?(B=t,F=h=p=d=null,H()):B},j.clipAngle=function(t){return arguments.length?(R=+t?(0,i.Z)(z=t*l.uR):(z=null,n.Z),H()):z*l.RW},j.clipExtent=function(t){return arguments.length?(B=null==t?(F=h=p=d=null,s.Z):(0,a.Z)(F=+t[0][0],h=+t[0][1],p=+t[1][0],d=+t[1][1]),H()):null==F?null:[[F,h],[p,d]]},j.scale=function(t){return arguments.length?(k=+t,V()):k},j.translate=function(t){return arguments.length?(A=+t[0],M=+t[1],V()):[A,M]},j.center=function(t){return arguments.length?(S=t[0]%360*l.uR,E=t[1]%360*l.uR,V()):[S*l.RW,E*l.RW]},j.rotate=function(t){return arguments.length?(L=t[0]%360*l.uR,C=t[1]%360*l.uR,P=t.length>2?t[2]%360*l.uR:0,V()):[L*l.RW,C*l.RW,P*l.RW]},j.angle=function(t){return arguments.length?(O=t%360*l.uR,V()):O*l.RW},j.reflectX=function(t){return arguments.length?(I=t?-1:1,V()):I<0},j.reflectY=function(t){return arguments.length?(D=t?-1:1,V()):D<0},j.precision=function(t){return arguments.length?(x=v(b,N=t*t),H()):(0,l._b)(N)},j.fitExtent=function(t,e){return(0,f.qg)(j,t,e)},j.fitSize=function(t,e){return(0,f.mF)(j,t,e)},j.fitWidth=function(t,e){return(0,f.V6)(j,t,e)},j.fitHeight=function(t,e){return(0,f.rf)(j,t,e)},function(){return e=t.apply(this,arguments),j.invert=e.invert&&U,V()}}},26867:function(t,e,r){\"use strict\";r.d(e,{K:function(){return a},Z:function(){return o}});var n=r(15002),i=r(39695);function a(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}function o(){return(0,n.Z)(a).scale(175.295)}a.invert=function(t,e){var r,n=e,a=25;do{var o=n*n,s=o*o;n-=r=(n*(1.007226+o*(.015085+s*(.028874*o-.044475-.005916*s)))-e)/(1.007226+o*(.045255+s*(.259866*o-.311325-.005916*11*s)))}while((0,i.Wn)(r)>i.Ho&&--a>0);return[t/(.8707+(o=n*n)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),n]}},57962:function(t,e,r){\"use strict\";r.d(e,{I:function(){return o},Z:function(){return s}});var n=r(39695),i=r(25382),a=r(15002);function o(t,e){return[(0,n.mC)(e)*(0,n.O$)(t),(0,n.O$)(e)]}function s(){return(0,a.Z)(o).scale(249.5).clipAngle(90+n.Ho)}o.invert=(0,i.O)(n.ZR)},49386:function(t,e,r){\"use strict\";r.d(e,{I:function(){return o},Z:function(){return c}});var n=r(96059),i=r(39695);function a(t,e){return[(0,i.Wn)(t)>i.pi?t+Math.round(-t/i.BZ)*i.BZ:t,e]}function o(t,e,r){return(t%=i.BZ)?e||r?(0,n.Z)(l(t),u(e,r)):l(t):e||r?u(e,r):a}function s(t){return function(e,r){return[(e+=t)>i.pi?e-i.BZ:e<-i.pi?e+i.BZ:e,r]}}function l(t){var e=s(t);return e.invert=s(-t),e}function u(t,e){var r=(0,i.mC)(t),n=(0,i.O$)(t),a=(0,i.mC)(e),o=(0,i.O$)(e);function s(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*r+l*n;return[(0,i.fv)(u*a-f*o,l*r-c*n),(0,i.ZR)(f*a+u*o)]}return s.invert=function(t,e){var s=(0,i.mC)(e),l=(0,i.mC)(t)*s,u=(0,i.O$)(t)*s,c=(0,i.O$)(e),f=c*a-u*o;return[(0,i.fv)(u*a+c*o,l*r+f*n),(0,i.ZR)(f*r-l*n)]},s}function c(t){function e(e){return(e=t(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e}return t=o(t[0]*i.uR,t[1]*i.uR,t.length>2?t[2]*i.uR:0),e.invert=function(e){return(e=t.invert(e[0]*i.uR,e[1]*i.uR))[0]*=i.RW,e[1]*=i.RW,e},e}a.invert=a},72736:function(t,e,r){\"use strict\";function n(t,e){t&&a.hasOwnProperty(t.type)&&a[t.type](t,e)}r.d(e,{Z:function(){return l}});var i={Feature:function(t,e){n(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,i=-1,a=r.length;++i<a;)n(r[i].geometry,e)}},a={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){o(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)o(r[n],e,0)},Polygon:function(t,e){s(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)s(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,i=-1,a=r.length;++i<a;)n(r[i],e)}};function o(t,e,r){var n,i=-1,a=t.length-r;for(e.lineStart();++i<a;)n=t[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function s(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)o(t[r],e,1);e.polygonEnd()}function l(t,e){t&&i.hasOwnProperty(t.type)?i[t.type](t,e):n(t,e)}},64684:function(t,e,r){\"use strict\";function n(t){return{stream:i(t)}}function i(t){return function(e){var r=new a;for(var n in t)r[n]=t[n];return r.stream=e,r}}function a(){}r.d(e,{Z:function(){return n},l:function(){return i}}),a.prototype={constructor:a,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}}},674:function(t,e,r){\"use strict\";function n(t,e){return t.parent===e.parent?1:2}function i(t,e){return t+e.x}function a(t,e){return Math.max(t,e.y)}function o(){var t=n,e=1,r=1,o=!1;function s(n){var s,l=0;n.eachAfter((function(e){var r=e.children;r?(e.x=function(t){return t.reduce(i,0)/t.length}(r),e.y=function(t){return 1+t.reduce(a,0)}(r)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(n),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(n),f=u.x-t(u,c)/2,h=c.x+t(c,u)/2;return n.eachAfter(o?function(t){t.x=(t.x-n.x)*e,t.y=(n.y-t.y)*r}:function(t){t.x=(t.x-f)/(h-f)*e,t.y=(1-(n.y?t.y/n.y:1))*r})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,e=+t[0],r=+t[1],s):o?null:[e,r]},s.nodeSize=function(t){return arguments.length?(o=!0,e=+t[0],r=+t[1],s):o?[e,r]:null},s}function s(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function l(t,e){var r,n,i,a,o,s=new h(t),l=+t.value&&(s.value=t.value),c=[s];for(null==e&&(e=u);r=c.pop();)if(l&&(r.value=+r.data.value),(i=e(r.data))&&(o=i.length))for(r.children=new Array(o),a=o-1;a>=0;--a)c.push(n=r.children[a]=new h(i[a])),n.parent=r,n.depth=r.depth+1;return s.eachBefore(f)}function u(t){return t.children}function c(t){t.data=t.data.data}function f(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function h(t){this.data=t,this.depth=this.height=0,this.parent=null}r.r(e),r.d(e,{cluster:function(){return o},hierarchy:function(){return l},pack:function(){return O},packEnclose:function(){return d},packSiblings:function(){return S},partition:function(){return B},stratify:function(){return q},tree:function(){return K},treemap:function(){return rt},treemapBinary:function(){return nt},treemapDice:function(){return F},treemapResquarify:function(){return at},treemapSlice:function(){return $},treemapSliceDice:function(){return it},treemapSquarify:function(){return et}}),h.prototype=l.prototype={constructor:h,count:function(){return this.eachAfter(s)},each:function(t){var e,r,n,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),r=a.children)for(n=0,i=r.length;n<i;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(r=0,n=e.length;r<n;++r)a.push(e[r]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,r,n=this,i=[n];n=i.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)i.push(e[r]);return this},sum:function(t){return this.eachAfter((function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(r){r!==t&&e.push({source:r.parent,target:r})})),e},copy:function(){return l(this).eachBefore(c)}};var p=Array.prototype.slice;function d(t){for(var e,r,n=0,i=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(p.call(t))).length,a=[];n<i;)e=t[n],r&&y(r,e)?++n:(r=x(a=v(a,e)),n=0);return r}function v(t,e){var r,n;if(m(e,t))return[e];for(r=0;r<t.length;++r)if(g(e,t[r])&&m(b(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(g(b(t[r],t[n]),e)&&g(b(t[r],e),t[n])&&g(b(t[n],e),t[r])&&m(_(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function g(t,e){var r=t.r-e.r,n=e.x-t.x,i=e.y-t.y;return r<0||r*r<n*n+i*i}function y(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function m(t,e){for(var r=0;r<e.length;++r)if(!y(t,e[r]))return!1;return!0}function x(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return b(t[0],t[1]);case 3:return _(t[0],t[1],t[2])}var e}function b(t,e){var r=t.x,n=t.y,i=t.r,a=e.x,o=e.y,s=e.r,l=a-r,u=o-n,c=s-i,f=Math.sqrt(l*l+u*u);return{x:(r+a+l/f*c)/2,y:(n+o+u/f*c)/2,r:(f+i+s)/2}}function _(t,e,r){var n=t.x,i=t.y,a=t.r,o=e.x,s=e.y,l=e.r,u=r.x,c=r.y,f=r.r,h=n-o,p=n-u,d=i-s,v=i-c,g=l-a,y=f-a,m=n*n+i*i-a*a,x=m-o*o-s*s+l*l,b=m-u*u-c*c+f*f,_=p*d-h*v,w=(d*b-v*x)/(2*_)-n,T=(v*g-d*y)/_,k=(p*x-h*b)/(2*_)-i,A=(h*y-p*g)/_,M=T*T+A*A-1,S=2*(a+w*T+k*A),E=w*w+k*k-a*a,L=-(M?(S+Math.sqrt(S*S-4*M*E))/(2*M):E/S);return{x:n+w+T*L,y:i+k+A*L,r:L}}function w(t,e,r){var n,i,a,o,s=t.x-e.x,l=t.y-e.y,u=s*s+l*l;u?(i=e.r+r.r,i*=i,o=t.r+r.r,i>(o*=o)?(n=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-n*n)),r.x=t.x-n*s-a*l,r.y=t.y-n*l+a*s):(n=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-n*n)),r.x=e.x+n*s-a*l,r.y=e.y+n*l+a*s)):(r.x=e.x+r.r,r.y=e.y)}function T(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function k(t){var e=t._,r=t.next._,n=e.r+r.r,i=(e.x*r.r+r.x*e.r)/n,a=(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function A(t){this._=t,this.next=null,this.previous=null}function M(t){if(!(i=t.length))return 0;var e,r,n,i,a,o,s,l,u,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(i>2))return e.r+r.r;w(r,e,n=t[2]),e=new A(e),r=new A(r),n=new A(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<i;++s){w(e._,r._,n=t[s]),n=new A(n),l=r.next,u=e.previous,c=r._.r,f=e._.r;do{if(c<=f){if(T(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}c+=l._.r,l=l.next}else{if(T(u._,n._)){(e=u).next=r,r.previous=e,--s;continue t}f+=u._.r,u=u.previous}}while(l!==u.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,a=k(e);(n=n.next)!==r;)(o=k(n))<a&&(e=n,a=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=d(e),s=0;s<i;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function S(t){return M(t),t}function E(t){if(\"function\"!=typeof t)throw new Error;return t}function L(){return 0}function C(t){return function(){return t}}function P(t){return Math.sqrt(t.value)}function O(){var t=null,e=1,r=1,n=L;function i(i){return i.x=e/2,i.y=r/2,t?i.eachBefore(I(t)).eachAfter(D(n,.5)).eachBefore(z(1)):i.eachBefore(I(P)).eachAfter(D(L,1)).eachAfter(D(n,i.r/Math.min(e,r))).eachBefore(z(Math.min(e,r)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(r=e)?null:E(r),i):t;var r},i.size=function(t){return arguments.length?(e=+t[0],r=+t[1],i):[e,r]},i.padding=function(t){return arguments.length?(n=\"function\"==typeof t?t:C(+t),i):n},i}function I(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function D(t,e){return function(r){if(n=r.children){var n,i,a,o=n.length,s=t(r)*e||0;if(s)for(i=0;i<o;++i)n[i].r+=s;if(a=M(n),s)for(i=0;i<o;++i)n[i].r-=s;r.r=a+s}}}function z(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function R(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function F(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(n-e)/t.value;++s<l;)(a=o[s]).y0=r,a.y1=i,a.x0=e,a.x1=e+=a.value*u}function B(){var t=1,e=1,r=0,n=!1;function i(i){var a=i.height+1;return i.x0=i.y0=r,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(n){n.children&&F(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var i=n.x0,a=n.y0,o=n.x1-r,s=n.y1-r;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),n.x0=i,n.y0=a,n.x1=o,n.y1=s}}(e,a)),n&&i.eachBefore(R),i}return i.round=function(t){return arguments.length?(n=!!t,i):n},i.size=function(r){return arguments.length?(t=+r[0],e=+r[1],i):[t,e]},i.padding=function(t){return arguments.length?(r=+t,i):r},i}var N=\"$\",j={depth:-1},U={};function V(t){return t.id}function H(t){return t.parentId}function q(){var t=V,e=H;function r(r){var n,i,a,o,s,l,u,c=r.length,p=new Array(c),d={};for(i=0;i<c;++i)n=r[i],s=p[i]=new h(n),null!=(l=t(n,i,r))&&(l+=\"\")&&(d[u=N+(s.id=l)]=u in d?U:s);for(i=0;i<c;++i)if(s=p[i],null!=(l=e(r[i],i,r))&&(l+=\"\")){if(!(o=d[N+l]))throw new Error(\"missing: \"+l);if(o===U)throw new Error(\"ambiguous: \"+l);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error(\"multiple roots\");a=s}if(!a)throw new Error(\"no root\");if(a.parent=j,a.eachBefore((function(t){t.depth=t.parent.depth+1,--c})).eachBefore(f),a.parent=null,c>0)throw new Error(\"cycle\");return a}return r.id=function(e){return arguments.length?(t=E(e),r):t},r.parentId=function(t){return arguments.length?(e=E(t),r):e},r}function G(t,e){return t.parent===e.parent?1:2}function Z(t){var e=t.children;return e?e[0]:t.t}function Y(t){var e=t.children;return e?e[e.length-1]:t.t}function W(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function X(t,e,r){return t.a.parent===e.parent?t.a:r}function J(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function K(){var t=G,e=1,r=1,n=null;function i(i){var l=function(t){for(var e,r,n,i,a,o=new J(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(a=n.length),i=a-1;i>=0;--i)s.push(r=e.children[i]=new J(n[i],i)),r.parent=e;return(o.parent=new J(null,0)).children=[o],o}(i);if(l.eachAfter(a),l.parent.m=-l.z,l.eachBefore(o),n)i.eachBefore(s);else{var u=i,c=i,f=i;i.eachBefore((function(t){t.x<u.x&&(u=t),t.x>c.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=u===c?1:t(u,c)/2,p=h-u.x,d=e/(c.x+h+p),v=r/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+p)*d,t.y=t.depth*v}))}return i}function a(e){var r=e.children,n=e.parent.children,i=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var a=(r[0].z+r[r.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,r,n){if(r){for(var i,a=e,o=e,s=r,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=Y(s),a=Z(a),s&&a;)l=Z(l),(o=Y(o)).a=e,(i=s.z+f-a.z-u+t(s._,a._))>0&&(W(X(s,e,n),e,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!Y(o)&&(o.t=s,o.m+=f-c),a&&!Z(l)&&(l.t=a,l.m+=u-h,n=e)}return n}(e,i,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],i):n?null:[e,r]},i.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],i):n?[e,r]:null},i}function $(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,u=t.value&&(i-r)/t.value;++s<l;)(a=o[s]).x0=e,a.x1=n,a.y0=r,a.y1=r+=a.value*u}J.prototype=Object.create(h.prototype);var Q=(1+Math.sqrt(5))/2;function tt(t,e,r,n,i,a){for(var o,s,l,u,c,f,h,p,d,v,g,y=[],m=e.children,x=0,b=0,_=m.length,w=e.value;x<_;){l=i-r,u=a-n;do{c=m[b++].value}while(!c&&b<_);for(f=h=c,g=c*c*(v=Math.max(u/l,l/u)/(w*t)),d=Math.max(h/g,g/f);b<_;++b){if(c+=s=m[b].value,s<f&&(f=s),s>h&&(h=s),g=c*c*v,(p=Math.max(h/g,g/f))>d){c-=s;break}d=p}y.push(o={value:c,dice:l<u,children:m.slice(x,b)}),o.dice?F(o,r,n,i,w?n+=u*c/w:a):$(o,r,n,w?r+=l*c/w:i,a),w-=c,x=b}return y}var et=function t(e){function r(t,r,n,i,a){tt(e,t,r,n,i,a)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q);function rt(){var t=et,e=!1,r=1,n=1,i=[0],a=L,o=L,s=L,l=L,u=L;function c(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(f),i=[0],e&&t.eachBefore(R),t}function f(e){var r=i[e.depth],n=e.x0+r,c=e.y0+r,f=e.x1-r,h=e.y1-r;f<n&&(n=f=(n+f)/2),h<c&&(c=h=(c+h)/2),e.x0=n,e.y0=c,e.x1=f,e.y1=h,e.children&&(r=i[e.depth+1]=a(e)/2,n+=u(e)-r,c+=o(e)-r,(f-=s(e)-r)<n&&(n=f=(n+f)/2),(h-=l(e)-r)<c&&(c=h=(c+h)/2),t(e,n,c,f,h))}return c.round=function(t){return arguments.length?(e=!!t,c):e},c.size=function(t){return arguments.length?(r=+t[0],n=+t[1],c):[r,n]},c.tile=function(e){return arguments.length?(t=E(e),c):t},c.padding=function(t){return arguments.length?c.paddingInner(t).paddingOuter(t):c.paddingInner()},c.paddingInner=function(t){return arguments.length?(a=\"function\"==typeof t?t:C(+t),c):a},c.paddingOuter=function(t){return arguments.length?c.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):c.paddingTop()},c.paddingTop=function(t){return arguments.length?(o=\"function\"==typeof t?t:C(+t),c):o},c.paddingRight=function(t){return arguments.length?(s=\"function\"==typeof t?t:C(+t),c):s},c.paddingBottom=function(t){return arguments.length?(l=\"function\"==typeof t?t:C(+t),c):l},c.paddingLeft=function(t){return arguments.length?(u=\"function\"==typeof t?t:C(+t),c):u},c}function nt(t,e,r,n,i){var a,o,s=t.children,l=s.length,u=new Array(l+1);for(u[0]=o=a=0;a<l;++a)u[a+1]=o+=s[a].value;!function t(e,r,n,i,a,o,l){if(e>=r-1){var c=s[e];return c.x0=i,c.y0=a,c.x1=o,void(c.y1=l)}for(var f=u[e],h=n/2+f,p=e+1,d=r-1;p<d;){var v=p+d>>>1;u[v]<h?p=v+1:d=v}h-u[p-1]<u[p]-h&&e+1<p&&--p;var g=u[p]-f,y=n-g;if(o-i>l-a){var m=(i*y+o*g)/n;t(e,p,g,i,a,m,l),t(p,r,y,m,a,o,l)}else{var x=(a*y+l*g)/n;t(e,p,g,i,a,o,x),t(p,r,y,i,x,o,l)}}(0,l,t.value,e,r,n,i)}function it(t,e,r,n,i){(1&t.depth?$:F)(t,e,r,n,i)}var at=function t(e){function r(t,r,n,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,u,c,f=-1,h=o.length,p=t.value;++f<h;){for(l=(s=o[f]).children,u=s.value=0,c=l.length;u<c;++u)s.value+=l[u].value;s.dice?F(s,r,n,i,n+=(a-n)*s.value/p):$(s,r,n,r+=(i-r)*s.value/p,a),p-=s.value}else t._squarify=o=tt(e,t,r,n,i,a),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(Q)},45879:function(t,e,r){\"use strict\";r.d(e,{h5:function(){return y}});var n=Math.PI,i=2*n,a=1e-6,o=i-a;function s(){this._x0=this._y0=this._x1=this._y1=null,this._=\"\"}function l(){return new s}s.prototype=l.prototype={constructor:s,moveTo:function(t,e){this._+=\"M\"+(this._x0=this._x1=+t)+\",\"+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+=\"Z\")},lineTo:function(t,e){this._+=\"L\"+(this._x1=+t)+\",\"+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+=\"Q\"+ +t+\",\"+ +e+\",\"+(this._x1=+r)+\",\"+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+=\"C\"+ +t+\",\"+ +e+\",\"+ +r+\",\"+ +n+\",\"+(this._x1=+i)+\",\"+(this._y1=+a)},arcTo:function(t,e,r,i,o){t=+t,e=+e,r=+r,i=+i,o=+o;var s=this._x1,l=this._y1,u=r-t,c=i-e,f=s-t,h=l-e,p=f*f+h*h;if(o<0)throw new Error(\"negative radius: \"+o);if(null===this._x1)this._+=\"M\"+(this._x1=t)+\",\"+(this._y1=e);else if(p>a)if(Math.abs(h*u-c*f)>a&&o){var d=r-s,v=i-l,g=u*u+c*c,y=d*d+v*v,m=Math.sqrt(g),x=Math.sqrt(p),b=o*Math.tan((n-Math.acos((g+p-y)/(2*m*x)))/2),_=b/x,w=b/m;Math.abs(_-1)>a&&(this._+=\"L\"+(t+_*f)+\",\"+(e+_*h)),this._+=\"A\"+o+\",\"+o+\",0,0,\"+ +(h*d>f*v)+\",\"+(this._x1=t+w*u)+\",\"+(this._y1=e+w*c)}else this._+=\"L\"+(this._x1=t)+\",\"+(this._y1=e)},arc:function(t,e,r,s,l,u){t=+t,e=+e,u=!!u;var c=(r=+r)*Math.cos(s),f=r*Math.sin(s),h=t+c,p=e+f,d=1^u,v=u?s-l:l-s;if(r<0)throw new Error(\"negative radius: \"+r);null===this._x1?this._+=\"M\"+h+\",\"+p:(Math.abs(this._x1-h)>a||Math.abs(this._y1-p)>a)&&(this._+=\"L\"+h+\",\"+p),r&&(v<0&&(v=v%i+i),v>o?this._+=\"A\"+r+\",\"+r+\",0,1,\"+d+\",\"+(t-c)+\",\"+(e-f)+\"A\"+r+\",\"+r+\",0,1,\"+d+\",\"+(this._x1=h)+\",\"+(this._y1=p):v>a&&(this._+=\"A\"+r+\",\"+r+\",0,\"+ +(v>=n)+\",\"+d+\",\"+(this._x1=t+r*Math.cos(l))+\",\"+(this._y1=e+r*Math.sin(l))))},rect:function(t,e,r,n){this._+=\"M\"+(this._x0=this._x1=+t)+\",\"+(this._y0=this._y1=+e)+\"h\"+ +r+\"v\"+ +n+\"h\"+-r+\"Z\"},toString:function(){return this._}};var u=l,c=Array.prototype.slice;function f(t){return function(){return t}}function h(t){return t[0]}function p(t){return t[1]}function d(t){return t.source}function v(t){return t.target}function g(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function y(){return function(t){var e=d,r=v,n=h,i=p,a=null;function o(){var o,s=c.call(arguments),l=e.apply(this,s),f=r.apply(this,s);if(a||(a=o=u()),t(a,+n.apply(this,(s[0]=l,s)),+i.apply(this,s),+n.apply(this,(s[0]=f,s)),+i.apply(this,s)),o)return a=null,o+\"\"||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(r=t,o):r},o.x=function(t){return arguments.length?(n=\"function\"==typeof t?t:f(+t),o):n},o.y=function(t){return arguments.length?(i=\"function\"==typeof t?t:f(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}(g)}},84096:function(t,e,r){\"use strict\";r.d(e,{i$:function(){return d},Dq:function(){return h},g0:function(){return v}});var n=r(58176),i=r(48480),a=r(59879),o=r(82301),s=r(34823),l=r(79791);function u(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function c(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function f(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function h(t){var e=t.dateTime,r=t.date,s=t.time,l=t.periods,h=t.days,p=t.shortDays,d=t.months,v=t.shortMonths,y=w(l),m=T(l),x=w(h),b=T(h),_=w(p),St=T(p),Et=w(d),Lt=T(d),Ct=w(v),Pt=T(v),Ot={a:function(t){return p[t.getDay()]},A:function(t){return h[t.getDay()]},b:function(t){return v[t.getMonth()]},B:function(t){return d[t.getMonth()]},c:null,d:q,e:q,f:X,H:G,I:Z,j:Y,L:W,m:J,M:K,p:function(t){return l[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:At,s:Mt,S:$,u:Q,U:tt,V:et,w:rt,W:nt,x:null,X:null,y:it,Y:at,Z:ot,\"%\":kt},It={a:function(t){return p[t.getUTCDay()]},A:function(t){return h[t.getUTCDay()]},b:function(t){return v[t.getUTCMonth()]},B:function(t){return d[t.getUTCMonth()]},c:null,d:st,e:st,f:ht,H:lt,I:ut,j:ct,L:ft,m:pt,M:dt,p:function(t){return l[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:At,s:Mt,S:vt,u:gt,U:yt,V:mt,w:xt,W:bt,x:null,X:null,y:_t,Y:wt,Z:Tt,\"%\":kt},Dt={a:function(t,e,r){var n=_.exec(e.slice(r));return n?(t.w=St[n[0].toLowerCase()],r+n[0].length):-1},A:function(t,e,r){var n=x.exec(e.slice(r));return n?(t.w=b[n[0].toLowerCase()],r+n[0].length):-1},b:function(t,e,r){var n=Ct.exec(e.slice(r));return n?(t.m=Pt[n[0].toLowerCase()],r+n[0].length):-1},B:function(t,e,r){var n=Et.exec(e.slice(r));return n?(t.m=Lt[n[0].toLowerCase()],r+n[0].length):-1},c:function(t,r,n){return Ft(t,e,r,n)},d:D,e:D,f:j,H:R,I:R,j:z,L:N,m:I,M:F,p:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.p=m[n[0].toLowerCase()],r+n[0].length):-1},q:O,Q:V,s:H,S:B,u:A,U:M,V:S,w:k,W:E,x:function(t,e,n){return Ft(t,r,e,n)},X:function(t,e,r){return Ft(t,s,e,r)},y:C,Y:L,Z:P,\"%\":U};function zt(t,e){return function(r){var n,i,a,o=[],s=-1,l=0,u=t.length;for(r instanceof Date||(r=new Date(+r));++s<u;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=g[n=t.charAt(++s)])?n=t.charAt(++s):i=\"e\"===n?\" \":\"0\",(a=e[n])&&(n=a(r,i)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join(\"\")}}function Rt(t,e){return function(r){var s,l,h=f(1900,void 0,1);if(Ft(h,t,r+=\"\",0)!=r.length)return null;if(\"Q\"in h)return new Date(h.Q);if(\"s\"in h)return new Date(1e3*h.s+(\"L\"in h?h.L:0));if(e&&!(\"Z\"in h)&&(h.Z=0),\"p\"in h&&(h.H=h.H%12+12*h.p),void 0===h.m&&(h.m=\"q\"in h?h.q:0),\"V\"in h){if(h.V<1||h.V>53)return null;\"w\"in h||(h.w=1),\"Z\"in h?(l=(s=c(f(h.y,0,1))).getUTCDay(),s=l>4||0===l?n.l6.ceil(s):(0,n.l6)(s),s=i.Z.offset(s,7*(h.V-1)),h.y=s.getUTCFullYear(),h.m=s.getUTCMonth(),h.d=s.getUTCDate()+(h.w+6)%7):(l=(s=u(f(h.y,0,1))).getDay(),s=l>4||0===l?a.wA.ceil(s):(0,a.wA)(s),s=o.Z.offset(s,7*(h.V-1)),h.y=s.getFullYear(),h.m=s.getMonth(),h.d=s.getDate()+(h.w+6)%7)}else(\"W\"in h||\"U\"in h)&&(\"w\"in h||(h.w=\"u\"in h?h.u%7:\"W\"in h?1:0),l=\"Z\"in h?c(f(h.y,0,1)).getUTCDay():u(f(h.y,0,1)).getDay(),h.m=0,h.d=\"W\"in h?(h.w+6)%7+7*h.W-(l+5)%7:h.w+7*h.U-(l+6)%7);return\"Z\"in h?(h.H+=h.Z/100|0,h.M+=h.Z%100,c(h)):u(h)}}function Ft(t,e,r,n){for(var i,a,o=0,s=e.length,l=r.length;o<s;){if(n>=l)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=Dt[i in g?e.charAt(o++):i])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return Ot.x=zt(r,Ot),Ot.X=zt(s,Ot),Ot.c=zt(e,Ot),It.x=zt(r,It),It.X=zt(s,It),It.c=zt(e,It),{format:function(t){var e=zt(t+=\"\",Ot);return e.toString=function(){return t},e},parse:function(t){var e=Rt(t+=\"\",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=zt(t+=\"\",It);return e.toString=function(){return t},e},utcParse:function(t){var e=Rt(t+=\"\",!0);return e.toString=function(){return t},e}}}var p,d,v,g={\"-\":\"\",_:\" \",0:\"0\"},y=/^\\s*\\d+/,m=/^%/,x=/[\\\\^$*+?|[\\]().{}]/g;function b(t,e,r){var n=t<0?\"-\":\"\",i=(n?-t:t)+\"\",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function _(t){return t.replace(x,\"\\\\$&\")}function w(t){return new RegExp(\"^(?:\"+t.map(_).join(\"|\")+\")\",\"i\")}function T(t){for(var e={},r=-1,n=t.length;++r<n;)e[t[r].toLowerCase()]=r;return e}function k(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function A(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function M(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function S(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function E(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function L(t,e,r){var n=y.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function C(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function P(t,e,r){var n=/^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||\"00\")),r+n[0].length):-1}function O(t,e,r){var n=y.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function I(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function D(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function z(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function R(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function F(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function B(t,e,r){var n=y.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function N(t,e,r){var n=y.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function j(t,e,r){var n=y.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function U(t,e,r){var n=m.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function V(t,e,r){var n=y.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function H(t,e,r){var n=y.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function q(t,e){return b(t.getDate(),e,2)}function G(t,e){return b(t.getHours(),e,2)}function Z(t,e){return b(t.getHours()%12||12,e,2)}function Y(t,e){return b(1+o.Z.count((0,s.Z)(t),t),e,3)}function W(t,e){return b(t.getMilliseconds(),e,3)}function X(t,e){return W(t,e)+\"000\"}function J(t,e){return b(t.getMonth()+1,e,2)}function K(t,e){return b(t.getMinutes(),e,2)}function $(t,e){return b(t.getSeconds(),e,2)}function Q(t){var e=t.getDay();return 0===e?7:e}function tt(t,e){return b(a.OM.count((0,s.Z)(t)-1,t),e,2)}function et(t,e){var r=t.getDay();return t=r>=4||0===r?(0,a.bL)(t):a.bL.ceil(t),b(a.bL.count((0,s.Z)(t),t)+(4===(0,s.Z)(t).getDay()),e,2)}function rt(t){return t.getDay()}function nt(t,e){return b(a.wA.count((0,s.Z)(t)-1,t),e,2)}function it(t,e){return b(t.getFullYear()%100,e,2)}function at(t,e){return b(t.getFullYear()%1e4,e,4)}function ot(t){var e=t.getTimezoneOffset();return(e>0?\"-\":(e*=-1,\"+\"))+b(e/60|0,\"0\",2)+b(e%60,\"0\",2)}function st(t,e){return b(t.getUTCDate(),e,2)}function lt(t,e){return b(t.getUTCHours(),e,2)}function ut(t,e){return b(t.getUTCHours()%12||12,e,2)}function ct(t,e){return b(1+i.Z.count((0,l.Z)(t),t),e,3)}function ft(t,e){return b(t.getUTCMilliseconds(),e,3)}function ht(t,e){return ft(t,e)+\"000\"}function pt(t,e){return b(t.getUTCMonth()+1,e,2)}function dt(t,e){return b(t.getUTCMinutes(),e,2)}function vt(t,e){return b(t.getUTCSeconds(),e,2)}function gt(t){var e=t.getUTCDay();return 0===e?7:e}function yt(t,e){return b(n.Ox.count((0,l.Z)(t)-1,t),e,2)}function mt(t,e){var r=t.getUTCDay();return t=r>=4||0===r?(0,n.hB)(t):n.hB.ceil(t),b(n.hB.count((0,l.Z)(t),t)+(4===(0,l.Z)(t).getUTCDay()),e,2)}function xt(t){return t.getUTCDay()}function bt(t,e){return b(n.l6.count((0,l.Z)(t)-1,t),e,2)}function _t(t,e){return b(t.getUTCFullYear()%100,e,2)}function wt(t,e){return b(t.getUTCFullYear()%1e4,e,4)}function Tt(){return\"+0000\"}function kt(){return\"%\"}function At(t){return+t}function Mt(t){return Math.floor(+t/1e3)}p=h({dateTime:\"%x, %X\",date:\"%-m/%-d/%Y\",time:\"%-I:%M:%S %p\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]}),d=p.format,p.parse,v=p.utcFormat,p.utcParse},82301:function(t,e,r){\"use strict\";r.d(e,{a:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.UD}),(function(t){return t.getDate()-1}));e.Z=a;var o=a.range},54263:function(t,e,r){\"use strict\";r.d(e,{UD:function(){return o},Y2:function(){return a},Ym:function(){return n},iM:function(){return s},yB:function(){return i}});var n=1e3,i=6e4,a=36e5,o=864e5,s=6048e5},81041:function(t,e,r){\"use strict\";r.r(e),r.d(e,{timeDay:function(){return y.Z},timeDays:function(){return y.a},timeFriday:function(){return m.mC},timeFridays:function(){return m.b$},timeHour:function(){return v},timeHours:function(){return g},timeInterval:function(){return n.Z},timeMillisecond:function(){return a},timeMilliseconds:function(){return o},timeMinute:function(){return h},timeMinutes:function(){return p},timeMonday:function(){return m.wA},timeMondays:function(){return m.bJ},timeMonth:function(){return b},timeMonths:function(){return _},timeSaturday:function(){return m.EY},timeSaturdays:function(){return m.Ff},timeSecond:function(){return u},timeSeconds:function(){return c},timeSunday:function(){return m.OM},timeSundays:function(){return m.vm},timeThursday:function(){return m.bL},timeThursdays:function(){return m.$t},timeTuesday:function(){return m.sy},timeTuesdays:function(){return m.aU},timeWednesday:function(){return m.zg},timeWednesdays:function(){return m.Ld},timeWeek:function(){return m.OM},timeWeeks:function(){return m.vm},timeYear:function(){return w.Z},timeYears:function(){return w.g},utcDay:function(){return L.Z},utcDays:function(){return L.y},utcFriday:function(){return C.QQ},utcFridays:function(){return C.fz},utcHour:function(){return S},utcHours:function(){return E},utcMillisecond:function(){return a},utcMilliseconds:function(){return o},utcMinute:function(){return k},utcMinutes:function(){return A},utcMonday:function(){return C.l6},utcMondays:function(){return C.$3},utcMonth:function(){return O},utcMonths:function(){return I},utcSaturday:function(){return C.g4},utcSaturdays:function(){return C.Q_},utcSecond:function(){return u},utcSeconds:function(){return c},utcSunday:function(){return C.Ox},utcSundays:function(){return C.SU},utcThursday:function(){return C.hB},utcThursdays:function(){return C.xj},utcTuesday:function(){return C.J1},utcTuesdays:function(){return C.DK},utcWednesday:function(){return C.b3},utcWednesdays:function(){return C.uy},utcWeek:function(){return C.Ox},utcWeeks:function(){return C.SU},utcYear:function(){return D.Z},utcYears:function(){return D.D}});var n=r(30052),i=(0,n.Z)((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?(0,n.Z)((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,r){e.setTime(+e+r*t)}),(function(e,r){return(r-e)/t})):i:null};var a=i,o=i.range,s=r(54263),l=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*s.Ym)}),(function(t,e){return(e-t)/s.Ym}),(function(t){return t.getUTCSeconds()})),u=l,c=l.range,f=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getMinutes()})),h=f,p=f.range,d=(0,n.Z)((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*s.Ym-t.getMinutes()*s.yB)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getHours()})),v=d,g=d.range,y=r(82301),m=r(59879),x=(0,n.Z)((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),b=x,_=x.range,w=r(34823),T=(0,n.Z)((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*s.yB)}),(function(t,e){return(e-t)/s.yB}),(function(t){return t.getUTCMinutes()})),k=T,A=T.range,M=(0,n.Z)((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*s.Y2)}),(function(t,e){return(e-t)/s.Y2}),(function(t){return t.getUTCHours()})),S=M,E=M.range,L=r(48480),C=r(58176),P=(0,n.Z)((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),O=P,I=P.range,D=r(79791)},30052:function(t,e,r){\"use strict\";r.d(e,{Z:function(){return a}});var n=new Date,i=new Date;function a(t,e,r,o){function s(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return s.floor=function(e){return t(e=new Date(+e)),e},s.ceil=function(r){return t(r=new Date(r-1)),e(r,1),t(r),r},s.round=function(t){var e=s(t),r=s.ceil(t);return t-e<r-t?e:r},s.offset=function(t,r){return e(t=new Date(+t),null==r?1:Math.floor(r)),t},s.range=function(r,n,i){var a,o=[];if(r=s.ceil(r),i=null==i?1:Math.floor(i),!(r<n&&i>0))return o;do{o.push(a=new Date(+r)),e(r,i),t(r)}while(a<r&&r<n);return o},s.filter=function(r){return a((function(e){if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)}),(function(t,n){if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}))},r&&(s.count=function(e,a){return n.setTime(+e),i.setTime(+a),t(n),t(i),Math.floor(r(n,i))},s.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?s.filter(o?function(e){return o(e)%t==0}:function(e){return s.count(0,e)%t==0}):s:null}),s}},48480:function(t,e,r){\"use strict\";r.d(e,{y:function(){return o}});var n=r(30052),i=r(54263),a=(0,n.Z)((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/i.UD}),(function(t){return t.getUTCDate()-1}));e.Z=a;var o=a.range},58176:function(t,e,r){\"use strict\";r.d(e,{$3:function(){return d},DK:function(){return v},J1:function(){return l},Ox:function(){return o},QQ:function(){return f},Q_:function(){return x},SU:function(){return p},b3:function(){return u},fz:function(){return m},g4:function(){return h},hB:function(){return c},l6:function(){return s},uy:function(){return g},xj:function(){return y}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},79791:function(t,e,r){\"use strict\";r.d(e,{D:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})):null},e.Z=i;var a=i.range},59879:function(t,e,r){\"use strict\";r.d(e,{$t:function(){return y},EY:function(){return h},Ff:function(){return x},Ld:function(){return g},OM:function(){return o},aU:function(){return v},b$:function(){return m},bJ:function(){return d},bL:function(){return c},mC:function(){return f},sy:function(){return l},vm:function(){return p},wA:function(){return s},zg:function(){return u}});var n=r(30052),i=r(54263);function a(t){return(0,n.Z)((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*i.yB)/i.iM}))}var o=a(0),s=a(1),l=a(2),u=a(3),c=a(4),f=a(5),h=a(6),p=o.range,d=s.range,v=l.range,g=u.range,y=c.range,m=f.range,x=h.range},34823:function(t,e,r){\"use strict\";r.d(e,{g:function(){return a}});var n=r(30052),i=(0,n.Z)((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));i.every=function(t){return isFinite(t=Math.floor(t))&&t>0?(0,n.Z)((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,r){e.setFullYear(e.getFullYear()+r*t)})):null},e.Z=i;var a=i.range},17045:function(t,e,r){\"use strict\";var n=r(8709),i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol(\"foo\"),a=Object.prototype.toString,o=Array.prototype.concat,s=Object.defineProperty,l=r(55622)(),u=s&&l,c=function(t,e,r,n){if(e in t)if(!0===n){if(t[e]===r)return}else if(\"function\"!=typeof(i=n)||\"[object Function]\"!==a.call(i)||!n())return;var i;u?s(t,e,{configurable:!0,enumerable:!1,value:r,writable:!0}):t[e]=r},f=function(t,e){var r=arguments.length>2?arguments[2]:{},a=n(e);i&&(a=o.call(a,Object.getOwnPropertySymbols(e)));for(var s=0;s<a.length;s+=1)c(t,a[s],e[a[s]],r[a[s]])};f.supportsDescriptors=!!u,t.exports=f},46775:function(t){t.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},53545:function(t){\"use strict\";t.exports=n;var e=(n.canvas=document.createElement(\"canvas\")).getContext(\"2d\"),r=i([32,126]);function n(t,n){Array.isArray(t)&&(t=t.join(\", \"));var a,o={},s=16,l=.05;n&&(2===n.length&&\"number\"==typeof n[0]?a=i(n):Array.isArray(n)?a=n:(n.o?a=i(n.o):n.pairs&&(a=n.pairs),n.fontSize&&(s=n.fontSize),null!=n.threshold&&(l=n.threshold))),a||(a=r),e.font=s+\"px \"+t;for(var u=0;u<a.length;u++){var c=a[u],f=e.measureText(c[0]).width+e.measureText(c[1]).width,h=e.measureText(c).width;if(Math.abs(f-h)>s*l){var p=(h-f)/s;o[c]=1e3*p}}return o}function i(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),i=t[0];i<t[1];i++){var a=n+String.fromCharCode(i);e.push(a)}return e}n.createPairs=i,n.ascii=r},31457:function(t,e,r){var n=r(65185),i=r(18625),a={M:\"moveTo\",C:\"bezierCurveTo\"};t.exports=function(t,e){t.beginPath(),i(n(e)).forEach((function(e){var r=e[0],n=e.slice(1);t[a[r]].apply(t,n)})),t.closePath()}},90660:function(t){t.exports=function(t){switch(t){case\"int8\":return Int8Array;case\"int16\":return Int16Array;case\"int32\":return Int32Array;case\"uint8\":return Uint8Array;case\"uint16\":return Uint16Array;case\"uint32\":return Uint32Array;case\"float32\":return Float32Array;case\"float64\":return Float64Array;case\"array\":return Array;case\"uint8_clamped\":return Uint8ClampedArray}}},12129:function(t){\"use strict\";function e(t,r,n){var i=0|t[n];if(i<=0)return[];var a,o=new Array(i);if(n===t.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=e(t,r,n+1);return o}t.exports=function(t,r){switch(void 0===r&&(r=0),typeof t){case\"number\":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,r);break;case\"object\":if(\"number\"==typeof t.length)return e(t,r,0)}return[]}},11474:function(t){\"use strict\";function e(t,e,a){a=a||2;var o,s,l,f,h,d,v,g=e&&e.length,y=g?e[0]*a:t.length,m=r(t,0,y,a,!0),x=[];if(!m||m.next===m.prev)return x;if(g&&(m=function(t,e,i,a){var o,s,l,f=[];for(o=0,s=e.length;o<s;o++)(l=r(t,e[o]*a,o<s-1?e[o+1]*a:t.length,a,!1))===l.next&&(l.steiner=!0),f.push(p(l));for(f.sort(u),o=0;o<f.length;o++)c(f[o],i),i=n(i,i.next);return i}(t,e,m,a)),t.length>80*a){o=l=t[0],s=f=t[1];for(var b=a;b<y;b+=a)(h=t[b])<o&&(o=h),(d=t[b+1])<s&&(s=d),h>l&&(l=h),d>f&&(f=d);v=0!==(v=Math.max(l-o,f-s))?1/v:0}return i(m,x,a,o,s,v),x}function r(t,e,r,n,i){var a,o;if(i===M(t,e,r,n)>0)for(a=e;a<r;a+=n)o=T(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=T(a,t[a],t[a+1],o);return o&&y(o,o.next)&&(k(o),o=o.next),o}function n(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!y(n,n.next)&&0!==g(n.prev,n,n.next))n=n.next;else{if(k(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function i(t,e,r,u,c,f,p){if(t){!p&&f&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=h(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,u,c,f);for(var d,v,g=t;t.prev!==t.next;)if(d=t.prev,v=t.next,f?o(t,u,c,f):a(t))e.push(d.i/r),e.push(t.i/r),e.push(v.i/r),k(t),t=v.next,g=v.next;else if((t=v)===g){p?1===p?i(t=s(n(t),e,r),e,r,u,c,f,2):2===p&&l(t,e,r,u,c,f):i(n(t),e,r,u,c,f,1);break}}}function a(t){var e=t.prev,r=t,n=t.next;if(g(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(d(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&g(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function o(t,e,r,n){var i=t.prev,a=t,o=t.next;if(g(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=h(s,l,e,r,n),p=h(u,c,e,r,n),v=t.prevZ,y=t.nextZ;v&&v.z>=f&&y&&y.z<=p;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;if(v=v.prevZ,y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;v&&v.z>=f;){if(v!==t.prev&&v!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;v=v.prevZ}for(;y&&y.z<=p;){if(y!==t.prev&&y!==t.next&&d(i.x,i.y,a.x,a.y,o.x,o.y,y.x,y.y)&&g(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function s(t,e,r){var i=t;do{var a=i.prev,o=i.next.next;!y(a,o)&&m(a,i,i.next,o)&&_(a,o)&&_(o,a)&&(e.push(a.i/r),e.push(i.i/r),e.push(o.i/r),k(i),k(i.next),i=t=o),i=i.next}while(i!==t);return n(i)}function l(t,e,r,a,o,s){var l=t;do{for(var u=l.next.next;u!==l.prev;){if(l.i!==u.i&&v(l,u)){var c=w(l,u);return l=n(l,l.next),c=n(c,c.next),i(l,e,r,a,o,s),void i(c,e,r,a,o,s)}u=u.next}l=l.next}while(l!==t)}function u(t,e){return t.x-e.x}function c(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,h=r.y,p=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&d(a<h?i:o,a,c,h,a<h?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),_(n,t)&&(l<p||l===p&&(n.x>r.x||n.x===r.x&&f(r,n)))&&(r=n,p=l)),n=n.next}while(n!==u);return r}(t,e),e){var r=w(e,t);n(e,e.next),n(r,r.next)}}function f(t,e){return g(t.prev,t,e.prev)<0&&g(e.next,t,t.next)<0}function h(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function p(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function d(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function v(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&m(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(_(t,e)&&_(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(g(t.prev,t,e.prev)||g(t,e.prev,e))||y(t,e)&&g(t.prev,t,t.next)>0&&g(e.prev,e,e.next)>0)}function g(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function m(t,e,r,n){var i=b(g(t,e,r)),a=b(g(t,e,n)),o=b(g(r,n,t)),s=b(g(r,n,e));return i!==a&&o!==s||!(0!==i||!x(t,r,e))||!(0!==a||!x(t,n,e))||!(0!==o||!x(r,t,n))||!(0!==s||!x(r,e,n))}function x(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function b(t){return t>0?1:t<0?-1:0}function _(t,e){return g(t.prev,t,t.next)<0?g(t,e,t.next)>=0&&g(t,t.prev,e)>=0:g(t,e,t.prev)<0||g(t,t.next,e)<0}function w(t,e){var r=new A(t.i,t.x,t.y),n=new A(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function T(t,e,r,n){var i=new A(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function k(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function M(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}t.exports=e,t.exports.default=e,e.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(M(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(M(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},e.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},2502:function(t,e,r){var n=r(68664);t.exports=function(t,e){var r,i=[],a=[],o=[],s={},l=[];function u(t){o[t]=!1,s.hasOwnProperty(t)&&Object.keys(s[t]).forEach((function(e){delete s[t][e],o[e]&&u(e)}))}function c(t){var e,n,i=!1;for(a.push(t),o[t]=!0,e=0;e<l[t].length;e++)(n=l[t][e])===r?(f(r,a),i=!0):o[n]||(i=c(n));if(i)u(t);else for(e=0;e<l[t].length;e++){n=l[t][e];var h=s[n];h||(h={},s[n]=h),h[n]=!0}return a.pop(),i}function f(t,r){var n=[].concat(r).concat(t);e?e(c):i.push(n)}function h(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter((function(t){return t>=e}))}(e);for(var r,i=n(t).components.filter((function(t){return t.length>1})),a=1/0,o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)i[o][s]<a&&(a=i[o][s],r=o);var l=i[r];if(!l)return!1;var u=t.map((function(t,e){return-1===l.indexOf(e)?[]:t.filter((function(t){return-1!==l.indexOf(t)}))}));return{leastVertex:a,adjList:u}}r=0;for(var p=t.length;r<p;){var d=h(r);if(r=d.leastVertex,l=d.adjList){for(var v=0;v<l.length;v++)for(var g=0;g<l[v].length;g++){var y=l[v][g];o[+y]=!1,s[y]={}}c(r),r+=1}else r=p}return e?void 0:i}},16134:function(t,e,r){\"use strict\";var n=r(36672);t.exports=function(){return n(this).length=0,this}},4892:function(t,e,r){\"use strict\";t.exports=r(64404)()?Array.from:r(49441)},64404:function(t){\"use strict\";t.exports=function(){var t,e,r=Array.from;return\"function\"==typeof r&&(e=r(t=[\"raz\",\"dwa\"]),Boolean(e&&e!==t&&\"dwa\"===e[1]))}},49441:function(t,e,r){\"use strict\";var n=r(8260).iterator,i=r(73051),a=r(33717),o=r(35976),s=r(78513),l=r(36672),u=r(95296),c=r(87963),f=Array.isArray,h=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;t.exports=function(t){var e,r,v,g,y,m,x,b,_,w,T=arguments[1],k=arguments[2];if(t=Object(l(t)),u(T)&&s(T),this&&this!==Array&&a(this))e=this;else{if(!T){if(i(t))return 1!==(y=t.length)?Array.apply(null,t):((g=new Array(1))[0]=t[0],g);if(f(t)){for(g=new Array(y=t.length),r=0;r<y;++r)g[r]=t[r];return g}}g=[]}if(!f(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(g=new e),b=x.next(),r=0;!b.done;)w=T?h.call(T,k,b.value,r):b.value,e?(p.value=w,d(g,r,p)):g[r]=w,b=x.next(),++r;y=r}else if(c(t)){for(y=t.length,e&&(g=new e),r=0,v=0;r<y;++r)w=t[r],r+1<y&&(m=w.charCodeAt(0))>=55296&&m<=56319&&(w+=t[++r]),w=T?h.call(T,k,w,v):w,e?(p.value=w,d(g,v,p)):g[v]=w,++v;y=v}if(void 0===y)for(y=o(t.length),e&&(g=new e(y)),r=0;r<y;++r)w=T?h.call(T,k,t[r],r):t[r],e?(p.value=w,d(g,r,p)):g[r]=w;return e&&(p.value=null,g.length=y),g}},73051:function(t){\"use strict\";var e=Object.prototype.toString,r=e.call(function(){return arguments}());t.exports=function(t){return e.call(t)===r}},33717:function(t){\"use strict\";var e=Object.prototype.toString,r=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);t.exports=function(t){return\"function\"==typeof t&&r(e.call(t))}},52345:function(t){\"use strict\";t.exports=function(){}},9953:function(t,e,r){\"use strict\";t.exports=r(90436)()?Math.sign:r(6069)},90436:function(t){\"use strict\";t.exports=function(){var t=Math.sign;return\"function\"==typeof t&&1===t(10)&&-1===t(-20)}},6069:function(t){\"use strict\";t.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},56247:function(t,e,r){\"use strict\";var n=r(9953),i=Math.abs,a=Math.floor;t.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*a(i(t)):t}},35976:function(t,e,r){\"use strict\";var n=r(56247),i=Math.max;t.exports=function(t){return i(0,n(t))}},67260:function(t,e,r){\"use strict\";var n=r(78513),i=r(36672),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;t.exports=function(t,e){return function(r,u){var c,f=arguments[2],h=arguments[3];return r=Object(i(r)),n(u),c=s(r),h&&c.sort(\"function\"==typeof h?a.call(h,r):void 0),\"function\"!=typeof t&&(t=c[t]),o.call(t,c,(function(t,n){return l.call(r,t)?o.call(u,f,r[t],t,r,n):e}))}}},95879:function(t,e,r){\"use strict\";t.exports=r(73583)()?Object.assign:r(34205)},73583:function(t){\"use strict\";t.exports=function(){var t,e=Object.assign;return\"function\"==typeof e&&(e(t={foo:\"raz\"},{bar:\"dwa\"},{trzy:\"trzy\"}),t.foo+t.bar+t.trzy===\"razdwatrzy\")}},34205:function(t,e,r){\"use strict\";var n=r(68700),i=r(36672),a=Math.max;t.exports=function(t,e){var r,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)n(e=arguments[o]).forEach(s);if(void 0!==r)throw r;return t}},19012:function(t,e,r){\"use strict\";var n=r(4892),i=r(95879),a=r(36672);t.exports=function(t){var e=Object(a(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,(function(e){(o.ensure||e in t)&&(s[e]=t[e])})):i(s,t),s}},52818:function(t,e,r){\"use strict\";var n,i,a,o,s=Object.create;r(33247)()||(n=r(51882)),t.exports=n?1!==n.level?s:(i={},a={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach((function(t){a[t]=\"__proto__\"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}})),Object.defineProperties(i,a),Object.defineProperty(n,\"nullPolyfill\",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null===t?i:t,e)}):s},96437:function(t,e,r){\"use strict\";t.exports=r(67260)(\"forEach\")},99611:function(t,e,r){\"use strict\";var n=r(95296),i={function:!0,object:!0};t.exports=function(t){return n(t)&&i[typeof t]||!1}},95296:function(t,e,r){\"use strict\";var n=r(52345)();t.exports=function(t){return t!==n&&null!==t}},68700:function(t,e,r){\"use strict\";t.exports=r(13895)()?Object.keys:r(25217)},13895:function(t){\"use strict\";t.exports=function(){try{return Object.keys(\"primitive\"),!0}catch(t){return!1}}},25217:function(t,e,r){\"use strict\";var n=r(95296),i=Object.keys;t.exports=function(t){return i(n(t)?Object(t):t)}},16906:function(t,e,r){\"use strict\";var n=r(78513),i=r(96437),a=Function.prototype.call;t.exports=function(t,e){var r={},o=arguments[2];return n(e),i(t,(function(t,n,i,s){r[n]=a.call(e,o,t,n,i,s)})),r}},21780:function(t,e,r){\"use strict\";var n=r(95296),i=Array.prototype.forEach,a=Object.create;t.exports=function(t){var e=a(null);return i.call(arguments,(function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)})),e}},1496:function(t,e,r){\"use strict\";t.exports=r(33247)()?Object.setPrototypeOf:r(51882)},33247:function(t){\"use strict\";var e=Object.create,r=Object.getPrototypeOf,n={};t.exports=function(){var t=Object.setPrototypeOf;return\"function\"==typeof t&&r(t((arguments[0]||e)(null),n))===n}},51882:function(t,e,r){\"use strict\";var n,i,a,o,s=r(99611),l=r(36672),u=Object.prototype.isPrototypeOf,c=Object.defineProperty,f={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError(\"Prototype must be null or an object\")},t.exports=(i=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}(),i?(2===i.level?i.set?(o=i.set,a=function(t,e){return o.call(n(t,e),e),t}):a=function(t,e){return n(t,e).__proto__=e,t}:a=function t(e,r){var i;return n(e,r),(i=u.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,i&&c(t.nullPolyfill,\"__proto__\",f),e},Object.defineProperty(a,\"level\",{configurable:!1,enumerable:!1,writable:!1,value:i.level})):null),r(52818)},78513:function(t){\"use strict\";t.exports=function(t){if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");return t}},98976:function(t,e,r){\"use strict\";var n=r(99611);t.exports=function(t){if(!n(t))throw new TypeError(t+\" is not an Object\");return t}},36672:function(t,e,r){\"use strict\";var n=r(95296);t.exports=function(t){if(!n(t))throw new TypeError(\"Cannot use null or undefined\");return t}},66741:function(t,e,r){\"use strict\";t.exports=r(17557)()?String.prototype.contains:r(60381)},17557:function(t){\"use strict\";var e=\"razdwatrzy\";t.exports=function(){return\"function\"==typeof e.contains&&!0===e.contains(\"dwa\")&&!1===e.contains(\"foo\")}},60381:function(t){\"use strict\";var e=String.prototype.indexOf;t.exports=function(t){return e.call(this,t,arguments[1])>-1}},87963:function(t){\"use strict\";var e=Object.prototype.toString,r=e.call(\"\");t.exports=function(t){return\"string\"==typeof t||t&&\"object\"==typeof t&&(t instanceof String||e.call(t)===r)||!1}},43043:function(t){\"use strict\";var e=Object.create(null),r=Math.random;t.exports=function(){var t;do{t=r().toString(36).slice(2)}while(e[t]);return t}},32411:function(t,e,r){\"use strict\";var n,i=r(1496),a=r(66741),o=r(62072),s=r(8260),l=r(95426),u=Object.defineProperty;n=t.exports=function(t,e){if(!(this instanceof n))throw new TypeError(\"Constructor requires 'new'\");l.call(this,t),e=e?a.call(e,\"key+value\")?\"key+value\":a.call(e,\"key\")?\"key\":\"value\":\"value\",u(this,\"__kind__\",o(\"\",e))},i&&i(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o((function(t){return\"value\"===this.__kind__?this.__list__[t]:\"key+value\"===this.__kind__?[t,this.__list__[t]]:t}))}),u(n.prototype,s.toStringTag,o(\"c\",\"Array Iterator\"))},27515:function(t,e,r){\"use strict\";var n=r(73051),i=r(78513),a=r(87963),o=r(66661),s=Array.isArray,l=Function.prototype.call,u=Array.prototype.some;t.exports=function(t,e){var r,c,f,h,p,d,v,g,y=arguments[2];if(s(t)||n(t)?r=\"array\":a(t)?r=\"string\":t=o(t),i(e),f=function(){h=!0},\"array\"!==r)if(\"string\"!==r)for(c=t.next();!c.done;){if(l.call(e,y,c.value,f),h)return;c=t.next()}else for(d=t.length,p=0;p<d&&(v=t[p],p+1<d&&(g=v.charCodeAt(0))>=55296&&g<=56319&&(v+=t[++p]),l.call(e,y,v,f),!h);++p);else u.call(t,(function(t){return l.call(e,y,t,f),h}))}},66661:function(t,e,r){\"use strict\";var n=r(73051),i=r(87963),a=r(32411),o=r(259),s=r(58095),l=r(8260).iterator;t.exports=function(t){return\"function\"==typeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},95426:function(t,e,r){\"use strict\";var n,i=r(16134),a=r(95879),o=r(78513),s=r(36672),l=r(62072),u=r(55174),c=r(8260),f=Object.defineProperty,h=Object.defineProperties;t.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError(\"Constructor requires 'new'\");h(this,{__list__:l(\"w\",s(t)),__context__:l(\"w\",e),__nextIndex__:l(\"w\",0)}),e&&(o(e.on),e.on(\"_add\",this._onAdd),e.on(\"_delete\",this._onDelete),e.on(\"_clear\",this._onClear))},delete n.prototype.constructor,h(n.prototype,a({_next:l((function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()})),next:l((function(){return this._createResult(this._next())})),_createResult:l((function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}})),_resolve:l((function(t){return this.__list__[t]})),_unBind:l((function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off(\"_add\",this._onAdd),this.__context__.off(\"_delete\",this._onDelete),this.__context__.off(\"_clear\",this._onClear),this.__context__=null)})),toString:l((function(){return\"[object \"+(this[c.toStringTag]||\"Object\")+\"]\"}))},u({_onAdd:l((function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(e,r){e>=t&&(this.__redo__[r]=++e)}),this),this.__redo__.push(t)):f(this,\"__redo__\",l(\"c\",[t])))})),_onDelete:l((function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach((function(e,r){e>t&&(this.__redo__[r]=--e)}),this)))})),_onClear:l((function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0}))}))),f(n.prototype,c.iterator,l((function(){return this})))},35940:function(t,e,r){\"use strict\";var n=r(73051),i=r(95296),a=r(87963),o=r(8260).iterator,s=Array.isArray;t.exports=function(t){return!(!i(t)||!s(t)&&!a(t)&&!n(t)&&\"function\"!=typeof t[o])}},259:function(t,e,r){\"use strict\";var n,i=r(1496),a=r(62072),o=r(8260),s=r(95426),l=Object.defineProperty;n=t.exports=function(t){if(!(this instanceof n))throw new TypeError(\"Constructor requires 'new'\");t=String(t),s.call(this,t),l(this,\"__length__\",a(\"\",t.length))},i&&i(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:a((function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()})),_resolve:a((function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r}))}),l(n.prototype,o.toStringTag,a(\"c\",\"String Iterator\"))},58095:function(t,e,r){\"use strict\";var n=r(35940);t.exports=function(t){if(!n(t))throw new TypeError(t+\" is not iterable\");return t}},73523:function(t){\"use strict\";function e(t,e){if(null==t)throw new TypeError(\"Cannot convert first argument to object\");for(var r=Object(t),n=1;n<arguments.length;n++){var i=arguments[n];if(null!=i)for(var a=Object.keys(Object(i)),o=0,s=a.length;o<s;o++){var l=a[o],u=Object.getOwnPropertyDescriptor(i,l);void 0!==u&&u.enumerable&&(r[l]=i[l])}}return r}t.exports={assign:e,polyfill:function(){Object.assign||Object.defineProperty(Object,\"assign\",{enumerable:!1,configurable:!0,writable:!0,value:e})}}},8260:function(t,e,r){\"use strict\";t.exports=r(69711)()?r(94908).Symbol:r(18415)},69711:function(t,e,r){\"use strict\";var n=r(94908),i={object:!0,symbol:!0};t.exports=function(){var t,e=n.Symbol;if(\"function\"!=typeof e)return!1;t=e(\"test symbol\");try{String(t)}catch(t){return!1}return!!i[typeof e.iterator]&&!!i[typeof e.toPrimitive]&&!!i[typeof e.toStringTag]}},82276:function(t){\"use strict\";t.exports=function(t){return!!t&&(\"symbol\"==typeof t||!!t.constructor&&\"Symbol\"===t.constructor.name&&\"Symbol\"===t[t.constructor.toStringTag])}},29366:function(t,e,r){\"use strict\";var n=r(62072),i=Object.create,a=Object.defineProperty,o=Object.prototype,s=i(null);t.exports=function(t){for(var e,r,i=0;s[t+(i||\"\")];)++i;return s[t+=i||\"\"]=!0,a(o,e=\"@@\"+t,n.gs(null,(function(t){r||(r=!0,a(this,e,n(t)),r=!1)}))),e}},92842:function(t,e,r){\"use strict\";var n=r(62072),i=r(94908).Symbol;t.exports=function(t){return Object.defineProperties(t,{hasInstance:n(\"\",i&&i.hasInstance||t(\"hasInstance\")),isConcatSpreadable:n(\"\",i&&i.isConcatSpreadable||t(\"isConcatSpreadable\")),iterator:n(\"\",i&&i.iterator||t(\"iterator\")),match:n(\"\",i&&i.match||t(\"match\")),replace:n(\"\",i&&i.replace||t(\"replace\")),search:n(\"\",i&&i.search||t(\"search\")),species:n(\"\",i&&i.species||t(\"species\")),split:n(\"\",i&&i.split||t(\"split\")),toPrimitive:n(\"\",i&&i.toPrimitive||t(\"toPrimitive\")),toStringTag:n(\"\",i&&i.toStringTag||t(\"toStringTag\")),unscopables:n(\"\",i&&i.unscopables||t(\"unscopables\"))})}},13304:function(t,e,r){\"use strict\";var n=r(62072),i=r(53308),a=Object.create(null);t.exports=function(t){return Object.defineProperties(t,{for:n((function(e){return a[e]?a[e]:a[e]=t(String(e))})),keyFor:n((function(t){var e;for(e in i(t),a)if(a[e]===t)return e}))})}},18415:function(t,e,r){\"use strict\";var n,i,a,o=r(62072),s=r(53308),l=r(94908).Symbol,u=r(29366),c=r(92842),f=r(13304),h=Object.create,p=Object.defineProperties,d=Object.defineProperty;if(\"function\"==typeof l)try{String(l()),a=!0}catch(t){}else l=null;i=function(t){if(this instanceof i)throw new TypeError(\"Symbol is not a constructor\");return n(t)},t.exports=n=function t(e){var r;if(this instanceof t)throw new TypeError(\"Symbol is not a constructor\");return a?l(e):(r=h(i.prototype),e=void 0===e?\"\":String(e),p(r,{__description__:o(\"\",e),__name__:o(\"\",u(e))}))},c(n),f(n),p(i.prototype,{constructor:o(n),toString:o(\"\",(function(){return this.__name__}))}),p(n.prototype,{toString:o((function(){return\"Symbol (\"+s(this).__description__+\")\"})),valueOf:o((function(){return s(this)}))}),d(n.prototype,n.toPrimitive,o(\"\",(function(){var t=s(this);return\"symbol\"==typeof t?t:t.toString()}))),d(n.prototype,n.toStringTag,o(\"c\",\"Symbol\")),d(i.prototype,n.toStringTag,o(\"c\",n.prototype[n.toStringTag])),d(i.prototype,n.toPrimitive,o(\"c\",n.prototype[n.toPrimitive]))},53308:function(t,e,r){\"use strict\";var n=r(82276);t.exports=function(t){if(!n(t))throw new TypeError(t+\" is not a symbol\");return t}},83522:function(t,e,r){\"use strict\";t.exports=r(96402)()?WeakMap:r(329)},96402:function(t){\"use strict\";t.exports=function(){var t,e;if(\"function\"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},\"one\"],[{},\"two\"],[{},\"three\"]])}catch(t){return!1}return\"[object WeakMap]\"===String(t)&&\"function\"==typeof t.set&&t.set({},1)===t&&\"function\"==typeof t.delete&&\"function\"==typeof t.has&&\"one\"===t.get(e)}},96416:function(t){\"use strict\";t.exports=\"function\"==typeof WeakMap&&\"[object WeakMap]\"===Object.prototype.toString.call(new WeakMap)},329:function(t,e,r){\"use strict\";var n,i=r(95296),a=r(1496),o=r(98976),s=r(36672),l=r(43043),u=r(62072),c=r(66661),f=r(27515),h=r(8260).toStringTag,p=r(96416),d=Array.isArray,v=Object.defineProperty,g=Object.prototype.hasOwnProperty,y=Object.getPrototypeOf;t.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError(\"Constructor requires 'new'\");return t=p&&a&&WeakMap!==n?a(new WeakMap,y(this)):this,i(e)&&(d(e)||(e=c(e))),v(t,\"__weakMapData__\",u(\"c\",\"$weakMap$\"+l())),e?(f(e,(function(e){s(e),t.set(e[0],e[1])})),t):t},p&&(a&&a(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:u(n)})),Object.defineProperties(n.prototype,{delete:u((function(t){return!!g.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)})),get:u((function(t){if(g.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]})),has:u((function(t){return g.call(o(t),this.__weakMapData__)})),set:u((function(t,e){return v(o(t),this.__weakMapData__,u(\"c\",e)),this})),toString:u((function(){return\"[object WeakMap]\"}))}),v(n.prototype,h,u(\"c\",\"WeakMap\"))},15398:function(t){\"use strict\";var e,r=\"object\"==typeof Reflect?Reflect:null,n=r&&\"function\"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&\"function\"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(t,e){return new Promise((function(r,n){function i(r){t.removeListener(e,a),n(r)}function a(){\"function\"==typeof t.removeListener&&t.removeListener(\"error\",i),r([].slice.call(arguments))}v(t,e,a,{once:!0}),\"error\"!==e&&function(t,e,r){\"function\"==typeof t.on&&v(t,\"error\",e,{once:!0})}(t,i)}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var o=10;function s(t){if(\"function\"!=typeof t)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof t)}function l(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function u(t,e,r,n){var i,a,o,u;if(s(r),void 0===(a=t._events)?(a=t._events=Object.create(null),t._eventsCount=0):(void 0!==a.newListener&&(t.emit(\"newListener\",e,r.listener?r.listener:r),a=t._events),o=a[e]),void 0===o)o=a[e]=r,++t._eventsCount;else if(\"function\"==typeof o?o=a[e]=n?[r,o]:[o,r]:n?o.unshift(r):o.push(r),(i=l(t))>0&&o.length>i&&!o.warned){o.warned=!0;var c=new Error(\"Possible EventEmitter memory leak detected. \"+o.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");c.name=\"MaxListenersExceededWarning\",c.emitter=t,c.type=e,c.count=o.length,u=c,console&&console.warn&&console.warn(u)}return t}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=c.bind(n);return i.listener=r,n.wrapFn=i,i}function h(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:\"function\"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(i):d(i,i.length)}function p(t){var e=this._events;if(void 0!==e){var r=e[t];if(\"function\"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function d(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}function v(t,e,r,n){if(\"function\"==typeof t.on)n.once?t.once(e,r):t.on(e,r);else{if(\"function\"!=typeof t.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function i(a){n.once&&t.removeEventListener(e,i),r(a)}))}}Object.defineProperty(a,\"defaultMaxListeners\",{enumerable:!0,get:function(){return o},set:function(t){if(\"number\"!=typeof t||t<0||i(t))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+t+\".\");o=t}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(t){if(\"number\"!=typeof t||t<0||i(t))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+t+\".\");return this._maxListeners=t,this},a.prototype.getMaxListeners=function(){return l(this)},a.prototype.emit=function(t){for(var e=[],r=1;r<arguments.length;r++)e.push(arguments[r]);var i=\"error\"===t,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var o;if(e.length>0&&(o=e[0]),o instanceof Error)throw o;var s=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw s.context=o,s}var l=a[t];if(void 0===l)return!1;if(\"function\"==typeof l)n(l,this,e);else{var u=l.length,c=d(l,u);for(r=0;r<u;++r)n(c[r],this,e)}return!0},a.prototype.addListener=function(t,e){return u(this,t,e,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(t,e){return u(this,t,e,!0)},a.prototype.once=function(t,e){return s(e),this.on(t,f(this,t,e)),this},a.prototype.prependOnceListener=function(t,e){return s(e),this.prependListener(t,f(this,t,e)),this},a.prototype.removeListener=function(t,e){var r,n,i,a,o;if(s(e),void 0===(n=this._events))return this;if(void 0===(r=n[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete n[t],n.removeListener&&this.emit(\"removeListener\",t,r.listener||e));else if(\"function\"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===e||r[a].listener===e){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(r,i),1===r.length&&(n[t]=r[0]),void 0!==n.removeListener&&this.emit(\"removeListener\",t,o||e)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(t){var e,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[t]),this;if(0===arguments.length){var i,a=Object.keys(r);for(n=0;n<a.length;++n)\"removeListener\"!==(i=a[n])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(e=r[t]))this.removeListener(t,e);else if(void 0!==e)for(n=e.length-1;n>=0;n--)this.removeListener(t,e[n]);return this},a.prototype.listeners=function(t){return h(this,t,!0)},a.prototype.rawListeners=function(t){return h(this,t,!1)},a.listenerCount=function(t,e){return\"function\"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},60774:function(t){var e=function(){if(\"object\"==typeof self&&self)return self;if(\"object\"==typeof window&&window)return window;throw new Error(\"Unable to resolve global `this`\")};t.exports=function(){if(this)return this;try{Object.defineProperty(Object.prototype,\"__global__\",{get:function(){return this},configurable:!0})}catch(t){return e()}try{return __global__||e()}finally{delete Object.prototype.__global__}}()},94908:function(t,e,r){\"use strict\";t.exports=r(51152)()?globalThis:r(60774)},51152:function(t){\"use strict\";t.exports=function(){return\"object\"==typeof globalThis&&!!globalThis&&globalThis.Array===Array}},92770:function(t,e,r){\"use strict\";var n=r(18546);t.exports=function(t){var e=typeof t;if(\"string\"===e){var r=t;if(0==(t=+t)&&n(r))return!1}else if(\"number\"!==e)return!1;return t-t<1}},30120:function(t,e,r){var n=r(90660);t.exports=function(t,e,r){if(!t)throw new TypeError(\"must specify data as first parameter\");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&\"number\"==typeof t[0][0]){var i,a,o,s,l=t[0].length,u=t.length*l;e&&\"string\"!=typeof e||(e=new(n(e||\"float32\"))(u+r));var c=e.length-r;if(u!==c)throw new Error(\"source length \"+u+\" (\"+l+\"x\"+t.length+\") does not match destination length \"+c);for(i=0,o=r;i<t.length;i++)for(a=0;a<l;a++)e[o++]=null===t[i][a]?NaN:t[i][a]}else if(e&&\"string\"!=typeof e)e.set(t,r);else{var f=n(e||\"float32\");if(Array.isArray(t)||\"array\"===e)for(i=0,o=r,s=(e=new f(t.length+r)).length;o<s;o++,i++)e[o]=null===t[i]?NaN:t[i];else 0===r?e=new f(t):(e=new f(t.length+r)).set(t,r)}return e}},68016:function(t,e,r){\"use strict\";var n=r(53313),i=[32,126];t.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement(\"canvas\"),a=t.font,o=\"number\"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||i;if(a&&\"string\"!=typeof a&&(a=n(a)),Array.isArray(s)){if(2===s.length&&\"number\"==typeof s[0]&&\"number\"==typeof s[1]){for(var l=[],u=s[0],c=0;u<=s[1];u++)l[c++]=String.fromCharCode(u);s=l}}else s=String(s).split(\"\");e=e.slice(),r.width=e[0],r.height=e[1];var f=r.getContext(\"2d\");f.fillStyle=\"#000\",f.fillRect(0,0,r.width,r.height),f.font=a,f.textAlign=\"center\",f.textBaseline=\"middle\",f.fillStyle=\"#fff\";var h=o[0]/2,p=o[1]/2;for(u=0;u<s.length;u++)f.fillText(s[u],h,p),(h+=o[0])>e[0]-o[0]/2&&(h=o[0]/2,p+=o[1]);return r}},32879:function(t){\"use strict\";function e(t,a){a||(a={}),(\"string\"==typeof t||Array.isArray(t))&&(a.family=t);var o=Array.isArray(a.family)?a.family.join(\", \"):a.family;if(!o)throw Error(\"`family` must be defined\");var s=a.size||a.fontSize||a.em||48,l=a.weight||a.fontWeight||\"\",u=(t=[a.style||a.fontStyle||\"\",l,s].join(\" \")+\"px \"+o,a.origin||\"top\");if(e.cache[o]&&s<=e.cache[o].em)return r(e.cache[o],u);var c=a.canvas||e.canvas,f=c.getContext(\"2d\"),h={upper:void 0!==a.upper?a.upper:\"H\",lower:void 0!==a.lower?a.lower:\"x\",descent:void 0!==a.descent?a.descent:\"p\",ascent:void 0!==a.ascent?a.ascent:\"h\",tittle:void 0!==a.tittle?a.tittle:\"i\",overshoot:void 0!==a.overshoot?a.overshoot:\"O\"},p=Math.ceil(1.5*s);c.height=p,c.width=.5*p,f.font=t;var d=\"H\",v={top:0};f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillStyle=\"black\",f.fillText(d,0,0);var g=n(f.getImageData(0,0,p,p));f.clearRect(0,0,p,p),f.textBaseline=\"bottom\",f.fillText(d,0,p);var y=n(f.getImageData(0,0,p,p));v.lineHeight=v.bottom=p-y+g,f.clearRect(0,0,p,p),f.textBaseline=\"alphabetic\",f.fillText(d,0,p);var m=p-n(f.getImageData(0,0,p,p))-1+g;v.baseline=v.alphabetic=m,f.clearRect(0,0,p,p),f.textBaseline=\"middle\",f.fillText(d,0,.5*p);var x=n(f.getImageData(0,0,p,p));v.median=v.middle=p-x-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline=\"hanging\",f.fillText(d,0,.5*p);var b=n(f.getImageData(0,0,p,p));v.hanging=p-b-1+g-.5*p,f.clearRect(0,0,p,p),f.textBaseline=\"ideographic\",f.fillText(d,0,p);var _=n(f.getImageData(0,0,p,p));if(v.ideographic=p-_-1+g,h.upper&&(f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.upper,0,0),v.upper=n(f.getImageData(0,0,p,p)),v.capHeight=v.baseline-v.upper),h.lower&&(f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.lower,0,0),v.lower=n(f.getImageData(0,0,p,p)),v.xHeight=v.baseline-v.lower),h.tittle&&(f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.tittle,0,0),v.tittle=n(f.getImageData(0,0,p,p))),h.ascent&&(f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.ascent,0,0),v.ascent=n(f.getImageData(0,0,p,p))),h.descent&&(f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.descent,0,0),v.descent=i(f.getImageData(0,0,p,p))),h.overshoot){f.clearRect(0,0,p,p),f.textBaseline=\"top\",f.fillText(h.overshoot,0,0);var w=i(f.getImageData(0,0,p,p));v.overshoot=w-m}for(var T in v)v[T]/=s;return v.em=s,e.cache[o]=v,r(v,u)}function r(t,e){var r={};for(var n in\"string\"==typeof e&&(e=t[e]),t)\"em\"!==n&&(r[n]=t[n]-e);return r}function n(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function i(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}t.exports=e,e.canvas=document.createElement(\"canvas\"),e.cache={}},31353:function(t,e,r){\"use strict\";var n=r(85395),i=Object.prototype.toString,a=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){if(!n(e))throw new TypeError(\"iterator must be a function\");var o;arguments.length>=3&&(o=r),\"[object Array]\"===i.call(t)?function(t,e,r){for(var n=0,i=t.length;n<i;n++)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o):\"string\"==typeof t?function(t,e,r){for(var n=0,i=t.length;n<i;n++)null==r?e(t.charAt(n),n,t):e.call(r,t.charAt(n),n,t)}(t,e,o):function(t,e,r){for(var n in t)a.call(t,n)&&(null==r?e(t[n],n,t):e.call(r,t[n],n,t))}(t,e,o)}},73047:function(t){\"use strict\";var e=Array.prototype.slice,r=Object.prototype.toString;t.exports=function(t){var n=this;if(\"function\"!=typeof n||\"[object Function]\"!==r.call(n))throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);for(var i,a=e.call(arguments,1),o=Math.max(0,n.length-a.length),s=[],l=0;l<o;l++)s.push(\"$\"+l);if(i=Function(\"binder\",\"return function (\"+s.join(\",\")+\"){ return binder.apply(this,arguments); }\")((function(){if(this instanceof i){var r=n.apply(this,a.concat(e.call(arguments)));return Object(r)===r?r:this}return n.apply(t,a.concat(e.call(arguments)))})),n.prototype){var u=function(){};u.prototype=n.prototype,i.prototype=new u,u.prototype=null}return i}},77575:function(t,e,r){\"use strict\";var n=r(73047);t.exports=Function.prototype.bind||n},86249:function(t){t.exports=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"must specify type string\");if(e=e||{},\"undefined\"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement(\"canvas\");\"number\"==typeof e.width&&(r.width=e.width),\"number\"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf(\"webgl\")&&a.push(\"experimental-\"+t);for(var o=0;o<a.length;o++)if(n=r.getContext(a[o],i))return n}catch(t){n=null}return n||null}},68318:function(t,e,r){\"use strict\";var n,i=SyntaxError,a=Function,o=TypeError,s=function(t){try{return a('\"use strict\"; return ('+t+\").constructor;\")()}catch(t){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},\"\")}catch(t){l=null}var u=function(){throw new o},c=l?function(){try{return u}catch(t){try{return l(arguments,\"callee\").get}catch(t){return u}}}():u,f=r(57877)(),h=Object.getPrototypeOf||function(t){return t.__proto__},p={},d=\"undefined\"==typeof Uint8Array?n:h(Uint8Array),v={\"%AggregateError%\":\"undefined\"==typeof AggregateError?n:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":\"undefined\"==typeof ArrayBuffer?n:ArrayBuffer,\"%ArrayIteratorPrototype%\":f?h([][Symbol.iterator]()):n,\"%AsyncFromSyncIteratorPrototype%\":n,\"%AsyncFunction%\":p,\"%AsyncGenerator%\":p,\"%AsyncGeneratorFunction%\":p,\"%AsyncIteratorPrototype%\":p,\"%Atomics%\":\"undefined\"==typeof Atomics?n:Atomics,\"%BigInt%\":\"undefined\"==typeof BigInt?n:BigInt,\"%BigInt64Array%\":\"undefined\"==typeof BigInt64Array?n:BigInt64Array,\"%BigUint64Array%\":\"undefined\"==typeof BigUint64Array?n:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":\"undefined\"==typeof DataView?n:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":Error,\"%eval%\":eval,\"%EvalError%\":EvalError,\"%Float32Array%\":\"undefined\"==typeof Float32Array?n:Float32Array,\"%Float64Array%\":\"undefined\"==typeof Float64Array?n:Float64Array,\"%FinalizationRegistry%\":\"undefined\"==typeof FinalizationRegistry?n:FinalizationRegistry,\"%Function%\":a,\"%GeneratorFunction%\":p,\"%Int8Array%\":\"undefined\"==typeof Int8Array?n:Int8Array,\"%Int16Array%\":\"undefined\"==typeof Int16Array?n:Int16Array,\"%Int32Array%\":\"undefined\"==typeof Int32Array?n:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":f?h(h([][Symbol.iterator]())):n,\"%JSON%\":\"object\"==typeof JSON?JSON:n,\"%Map%\":\"undefined\"==typeof Map?n:Map,\"%MapIteratorPrototype%\":\"undefined\"!=typeof Map&&f?h((new Map)[Symbol.iterator]()):n,\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":Object,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":\"undefined\"==typeof Promise?n:Promise,\"%Proxy%\":\"undefined\"==typeof Proxy?n:Proxy,\"%RangeError%\":RangeError,\"%ReferenceError%\":ReferenceError,\"%Reflect%\":\"undefined\"==typeof Reflect?n:Reflect,\"%RegExp%\":RegExp,\"%Set%\":\"undefined\"==typeof Set?n:Set,\"%SetIteratorPrototype%\":\"undefined\"!=typeof Set&&f?h((new Set)[Symbol.iterator]()):n,\"%SharedArrayBuffer%\":\"undefined\"==typeof SharedArrayBuffer?n:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":f?h(\"\"[Symbol.iterator]()):n,\"%Symbol%\":f?Symbol:n,\"%SyntaxError%\":i,\"%ThrowTypeError%\":c,\"%TypedArray%\":d,\"%TypeError%\":o,\"%Uint8Array%\":\"undefined\"==typeof Uint8Array?n:Uint8Array,\"%Uint8ClampedArray%\":\"undefined\"==typeof Uint8ClampedArray?n:Uint8ClampedArray,\"%Uint16Array%\":\"undefined\"==typeof Uint16Array?n:Uint16Array,\"%Uint32Array%\":\"undefined\"==typeof Uint32Array?n:Uint32Array,\"%URIError%\":URIError,\"%WeakMap%\":\"undefined\"==typeof WeakMap?n:WeakMap,\"%WeakRef%\":\"undefined\"==typeof WeakRef?n:WeakRef,\"%WeakSet%\":\"undefined\"==typeof WeakSet?n:WeakSet};try{null.error}catch(t){var g=h(h(t));v[\"%Error.prototype%\"]=g}var y=function t(e){var r;if(\"%AsyncFunction%\"===e)r=s(\"async function () {}\");else if(\"%GeneratorFunction%\"===e)r=s(\"function* () {}\");else if(\"%AsyncGeneratorFunction%\"===e)r=s(\"async function* () {}\");else if(\"%AsyncGenerator%\"===e){var n=t(\"%AsyncGeneratorFunction%\");n&&(r=n.prototype)}else if(\"%AsyncIteratorPrototype%\"===e){var i=t(\"%AsyncGenerator%\");i&&(r=h(i.prototype))}return v[e]=r,r},m={\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},x=r(77575),b=r(35065),_=x.call(Function.call,Array.prototype.concat),w=x.call(Function.apply,Array.prototype.splice),T=x.call(Function.call,String.prototype.replace),k=x.call(Function.call,String.prototype.slice),A=x.call(Function.call,RegExp.prototype.exec),M=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,S=/\\\\(\\\\)?/g,E=function(t,e){var r,n=t;if(b(m,n)&&(n=\"%\"+(r=m[n])[0]+\"%\"),b(v,n)){var a=v[n];if(a===p&&(a=y(n)),void 0===a&&!e)throw new o(\"intrinsic \"+t+\" exists, but is not available. Please file an issue!\");return{alias:r,name:n,value:a}}throw new i(\"intrinsic \"+t+\" does not exist!\")};t.exports=function(t,e){if(\"string\"!=typeof t||0===t.length)throw new o(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&\"boolean\"!=typeof e)throw new o('\"allowMissing\" argument must be a boolean');if(null===A(/^%?[^%]*%?$/,t))throw new i(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var r=function(t){var e=k(t,0,1),r=k(t,-1);if(\"%\"===e&&\"%\"!==r)throw new i(\"invalid intrinsic syntax, expected closing `%`\");if(\"%\"===r&&\"%\"!==e)throw new i(\"invalid intrinsic syntax, expected opening `%`\");var n=[];return T(t,M,(function(t,e,r,i){n[n.length]=r?T(i,S,\"$1\"):e||t})),n}(t),n=r.length>0?r[0]:\"\",a=E(\"%\"+n+\"%\",e),s=a.name,u=a.value,c=!1,f=a.alias;f&&(n=f[0],w(r,_([0,1],f)));for(var h=1,p=!0;h<r.length;h+=1){var d=r[h],g=k(d,0,1),y=k(d,-1);if(('\"'===g||\"'\"===g||\"`\"===g||'\"'===y||\"'\"===y||\"`\"===y)&&g!==y)throw new i(\"property names with quotes must have matching quotes\");if(\"constructor\"!==d&&p||(c=!0),b(v,s=\"%\"+(n+=\".\"+d)+\"%\"))u=v[s];else if(null!=u){if(!(d in u)){if(!e)throw new o(\"base intrinsic for \"+t+\" exists, but the property is not available.\");return}if(l&&h+1>=r.length){var m=l(u,d);u=(p=!!m)&&\"get\"in m&&!(\"originalValue\"in m.get)?m.get:u[d]}else p=b(u,d),u=u[d];p&&!c&&(v[s]=u)}}return u}},85400:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15];return t[0]=s*(h*y-p*g)-f*(l*y-u*g)+v*(l*p-u*h),t[1]=-(n*(h*y-p*g)-f*(i*y-a*g)+v*(i*p-a*h)),t[2]=n*(l*y-u*g)-s*(i*y-a*g)+v*(i*u-a*l),t[3]=-(n*(l*p-u*h)-s*(i*p-a*h)+f*(i*u-a*l)),t[4]=-(o*(h*y-p*g)-c*(l*y-u*g)+d*(l*p-u*h)),t[5]=r*(h*y-p*g)-c*(i*y-a*g)+d*(i*p-a*h),t[6]=-(r*(l*y-u*g)-o*(i*y-a*g)+d*(i*u-a*l)),t[7]=r*(l*p-u*h)-o*(i*p-a*h)+c*(i*u-a*l),t[8]=o*(f*y-p*v)-c*(s*y-u*v)+d*(s*p-u*f),t[9]=-(r*(f*y-p*v)-c*(n*y-a*v)+d*(n*p-a*f)),t[10]=r*(s*y-u*v)-o*(n*y-a*v)+d*(n*u-a*s),t[11]=-(r*(s*p-u*f)-o*(n*p-a*f)+c*(n*u-a*s)),t[12]=-(o*(f*g-h*v)-c*(s*g-l*v)+d*(s*h-l*f)),t[13]=r*(f*g-h*v)-c*(n*g-i*v)+d*(n*h-i*f),t[14]=-(r*(s*g-l*v)-o*(n*g-i*v)+d*(n*l-i*s)),t[15]=r*(s*h-l*f)-o*(n*h-i*f)+c*(n*l-i*s),t}},42331:function(t){t.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},31042:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},11902:function(t){t.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},89887:function(t){t.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],f=t[10],h=t[11],p=t[12],d=t[13],v=t[14],g=t[15];return(e*o-r*a)*(f*g-h*v)-(e*s-n*a)*(c*g-h*d)+(e*l-i*a)*(c*v-f*d)+(r*s-n*o)*(u*g-h*p)-(r*l-i*o)*(u*v-f*p)+(n*l-i*s)*(u*d-c*p)}},27812:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,f=n*s,h=i*o,p=i*s,d=i*l,v=a*o,g=a*s,y=a*l;return t[0]=1-f-d,t[1]=c+y,t[2]=h-g,t[3]=0,t[4]=c-y,t[5]=1-u-d,t[6]=p+v,t[7]=0,t[8]=h+g,t[9]=p-v,t[10]=1-u-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},34045:function(t){t.exports=function(t,e,r){var n,i,a,o=r[0],s=r[1],l=r[2],u=Math.sqrt(o*o+s*s+l*l);return Math.abs(u)<1e-6?null:(o*=u=1/u,s*=u,l*=u,n=Math.sin(e),a=1-(i=Math.cos(e)),t[0]=o*o*a+i,t[1]=s*o*a+l*n,t[2]=l*o*a-s*n,t[3]=0,t[4]=o*s*a-l*n,t[5]=s*s*a+i,t[6]=l*s*a+o*n,t[7]=0,t[8]=o*l*a+s*n,t[9]=s*l*a-o*n,t[10]=l*l*a+i,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}},45973:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,f=n*l,h=n*u,p=i*l,d=i*u,v=a*u,g=o*s,y=o*l,m=o*u;return t[0]=1-(p+v),t[1]=f+m,t[2]=h-y,t[3]=0,t[4]=f-m,t[5]=1-(c+v),t[6]=d+g,t[7]=0,t[8]=h+y,t[9]=d-g,t[10]=1-(c+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},81472:function(t){t.exports=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},14669:function(t){t.exports=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}},75262:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},331:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},11049:function(t){t.exports=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},75195:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(r-e),l=1/(i-n),u=1/(a-o);return t[0]=2*a*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a*l,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*l,t[10]=(o+a)*u,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*u,t[15]=0,t}},71551:function(t){t.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},79576:function(t,e,r){t.exports={create:r(11902),clone:r(42331),copy:r(31042),identity:r(71551),transpose:r(88654),invert:r(95874),adjoint:r(85400),determinant:r(89887),multiply:r(91362),translate:r(31283),scale:r(10789),rotate:r(65074),rotateX:r(35545),rotateY:r(94918),rotateZ:r(15692),fromRotation:r(34045),fromRotationTranslation:r(45973),fromScaling:r(81472),fromTranslation:r(14669),fromXRotation:r(75262),fromYRotation:r(331),fromZRotation:r(11049),fromQuat:r(27812),frustum:r(75195),perspective:r(7864),perspectiveFromFieldOfView:r(35279),ortho:r(60378),lookAt:r(65551),str:r(6726)}},95874:function(t){t.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null}},65551:function(t,e,r){var n=r(71551);t.exports=function(t,e,r,i){var a,o,s,l,u,c,f,h,p,d,v=e[0],g=e[1],y=e[2],m=i[0],x=i[1],b=i[2],_=r[0],w=r[1],T=r[2];return Math.abs(v-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(y-T)<1e-6?n(t):(f=v-_,h=g-w,p=y-T,a=x*(p*=d=1/Math.sqrt(f*f+h*h+p*p))-b*(h*=d),o=b*(f*=d)-m*p,s=m*h-x*f,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0),l=h*s-p*o,u=p*a-f*s,c=f*o-h*a,(d=Math.sqrt(l*l+u*u+c*c))?(l*=d=1/d,u*=d,c*=d):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=f,t[3]=0,t[4]=o,t[5]=u,t[6]=h,t[7]=0,t[8]=s,t[9]=c,t[10]=p,t[11]=0,t[12]=-(a*v+o*g+s*y),t[13]=-(l*v+u*g+c*y),t[14]=-(f*v+h*g+p*y),t[15]=1,t)}},91362:function(t){t.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}},60378:function(t){t.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},7864:function(t){t.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},35279:function(t){t.exports=function(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),u=2/(i+a);return t[0]=l,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=-(o-s)*l*.5,t[9]=(i-a)*u*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}},65074:function(t){t.exports=function(t,e,r,n){var i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);return Math.abs(P)<1e-6?null:(E*=P=1/P,L*=P,C*=P,i=Math.sin(r),o=1-(a=Math.cos(r)),s=e[0],l=e[1],u=e[2],c=e[3],f=e[4],h=e[5],p=e[6],d=e[7],v=e[8],g=e[9],y=e[10],m=e[11],x=E*E*o+a,b=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,T=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,M=L*C*o-E*i,S=C*C*o+a,t[0]=s*x+f*b+v*_,t[1]=l*x+h*b+g*_,t[2]=u*x+p*b+y*_,t[3]=c*x+d*b+m*_,t[4]=s*w+f*T+v*k,t[5]=l*w+h*T+g*k,t[6]=u*w+p*T+y*k,t[7]=c*w+d*T+m*k,t[8]=s*A+f*M+v*S,t[9]=l*A+h*M+g*S,t[10]=u*A+p*M+y*S,t[11]=c*A+d*M+m*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}},35545:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t}},94918:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-f*n,t[3]=l*i-h*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+f*i,t[11]=l*n+h*i,t}},15692:function(t){t.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t}},10789:function(t){t.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},6726:function(t){t.exports=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"}},31283:function(t){t.exports=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t}},88654:function(t){t.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},42505:function(t,e,r){\"use strict\";var n=r(72791),i=r(71299),a=r(98580),o=r(12018),s=r(83522),l=r(25075),u=r(68016),c=r(58404),f=r(18863),h=r(10973),p=r(25677),d=r(75686),v=r(53545),g=r(56131),y=r(32879),m=r(30120),x=r(13547).nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement(\"div\"));w.style.font=\"italic small-caps bold condensed 16px/2 cursive\",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var T=function(t){!function(t){return\"function\"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:\"uint8\",usage:\"stream\"}),this.sizeBuffer=this.regl.buffer({type:\"float\",usage:\"stream\"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(h(t)?t:{})};T.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop(\"count\"),offset:t.prop(\"offset\"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this(\"sizeBuffer\")},width:{offset:0,stride:8,buffer:t.this(\"sizeBuffer\")},char:t.this(\"charBuffer\"),position:t.this(\"position\")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop(\"color\"),opacity:t.prop(\"opacity\"),viewport:t.this(\"viewportArray\"),scale:t.this(\"scale\"),align:t.prop(\"align\"),baseline:t.prop(\"baseline\"),translate:t.this(\"translate\"),positionOffset:t.prop(\"positionOffset\")},primitive:\"points\",viewport:t.this(\"viewport\"),vert:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tattribute float width, charOffset, char;\\n\\t\\t\\tattribute vec2 position;\\n\\t\\t\\tuniform float fontSize, charStep, em, align, baseline;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tuniform vec4 color;\\n\\t\\t\\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\\n\\t\\t\\t\\t\\t+ vec2(positionOffset.x, -positionOffset.y)))\\n\\t\\t\\t\\t\\t/ (viewport.zw * scale.xy);\\n\\n\\t\\t\\t\\tvec2 position = (position + translate) * scale;\\n\\t\\t\\t\\tposition += offset * scale;\\n\\n\\t\\t\\t\\tcharCoord = position * viewport.zw + viewport.xy;\\n\\n\\t\\t\\t\\tgl_Position = vec4(position * 2. - 1., 0, 1);\\n\\n\\t\\t\\t\\tgl_PointSize = charStep;\\n\\n\\t\\t\\t\\tcharId.x = mod(char, atlasDim.x);\\n\\t\\t\\t\\tcharId.y = floor(char / atlasDim.x);\\n\\n\\t\\t\\t\\tcharWidth = width * em;\\n\\n\\t\\t\\t\\tfontColor = color / 255.;\\n\\t\\t\\t}\",frag:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tuniform float fontSize, charStep, opacity;\\n\\t\\t\\tuniform vec2 atlasSize;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tuniform sampler2D atlas;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\n\\t\\t\\tfloat lightness(vec4 color) {\\n\\t\\t\\t\\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\\n\\t\\t\\t\\tfloat halfCharStep = floor(charStep * .5 + .5);\\n\\n\\t\\t\\t\\t// invert y and shift by 1px (FF expecially needs that)\\n\\t\\t\\t\\tuv.y = charStep - uv.y;\\n\\n\\t\\t\\t\\t// ignore points outside of character bounding box\\n\\t\\t\\t\\tfloat halfCharWidth = ceil(charWidth * .5);\\n\\t\\t\\t\\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\\n\\t\\t\\t\\t\\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\\n\\n\\t\\t\\t\\tuv += charId * charStep;\\n\\t\\t\\t\\tuv = uv / atlasSize;\\n\\n\\t\\t\\t\\tvec4 color = fontColor;\\n\\t\\t\\t\\tvec4 mask = texture2D(atlas, uv);\\n\\n\\t\\t\\t\\tfloat maskY = lightness(mask);\\n\\t\\t\\t\\t// float colorY = lightness(color);\\n\\t\\t\\t\\tcolor.a *= maskY;\\n\\t\\t\\t\\tcolor.a *= opacity;\\n\\n\\t\\t\\t\\t// color.a += .1;\\n\\n\\t\\t\\t\\t// antialiasing, see yiq color space y-channel formula\\n\\t\\t\\t\\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\\n\\n\\t\\t\\t\\tgl_FragColor = color;\\n\\t\\t\\t}\"});return{regl:t,draw:e,atlas:{}}},T.prototype.update=function(t){var e=this;if(\"string\"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:\"position positions coord coords coordinates\",font:\"font fontFace fontface typeface cssFont css-font family fontFamily\",fontSize:\"fontSize fontsize size font-size\",text:\"text texts chars characters value values symbols\",align:\"align alignment textAlign textbaseline\",baseline:\"baseline textBaseline textbaseline\",direction:\"dir direction textDirection\",color:\"color colour fill fill-color fillColor textColor textcolor\",kerning:\"kerning kern\",range:\"range dataBox\",viewport:\"vp viewport viewBox viewbox viewPort\",opacity:\"opacity alpha transparency visible visibility opaque\",offset:\"offset positionOffset padding shift indent indentation\"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map((function(t){return parseFloat(t)})):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=f(t.viewport),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&(\"number\"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=m(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=T.baseFontSize+\"px sans-serif\");var r,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach((function(t,r){if(\"string\"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(T.baseFontSize+\"px \"+t)}else t=n.parse(n.stringify(t));var i=n.stringify({size:T.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&i==e.font[r].baseString||(a=!0,e.font[r]=T.fonts[i],e.font[r]))){var u=t.family.join(\", \"),c=[t.style];t.style!=t.variant&&c.push(t.variant),t.variant!=t.weight&&c.push(t.weight),_&&t.weight!=t.stretch&&c.push(t.stretch),e.font[r]={baseString:i,family:u,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:y(u,{origin:\"top\",fontSize:T.baseFontSize,fontStyle:c.join(\" \")})},T.fonts[i]=e.font[r]}})),(a||o)&&this.font.forEach((function(r,i){var a=n.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]=e.shader.atlas[a],!e.fontAtlas[i]){var o=r.metrics;e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)})),\"string\"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),h=0;h<s.length;h++)s[h]=t.text;t.text=s}if(null!=t.text||a){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join(\"\")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach((function(t,n){T.atlasContext.font=t.baseString;for(var i=e.fontAtlas[n],a=0;a<e.text.length;a++){var o=e.text.charAt(a);if(null==i.ids[o]&&(i.ids[o]=i.chars.length,i.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=T.atlasContext.measureText(o).width/T.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);g(t.kerning,v(t.family,{pairs:s}))}}}))}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,k=c.mallocFloat(2*this.count),A=0,M=0;A<this.counts.length;A++){var S=this.counts[A];if(w)for(var E=0;E<S;E++)k[M++]=t.position[2*A],k[M++]=t.position[2*A+1];else for(var L=0;L<S;L++)k[M++]=t.position[A][0],k[M++]=t.position[A][1]}this.position.call?this.position({type:\"float\",data:k}):this.position=this.regl.buffer({type:\"float\",data:k}),c.freeFloat(k)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||a){var C=c.mallocUint8(this.count),P=c.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,I=0;O<this.counts.length;O++){for(var D=this.counts[O],z=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<D;F++){var B=this.text.charAt(I),N=this.text.charAt(I-1);if(C[I]=R.ids[B],P[2*I]=z.width[B],F){var j=P[2*I-2],U=P[2*I],V=P[2*I-1]+.5*j+.5*U;if(this.kerning){var H=z.kerning[N+B];H&&(V+=.001*H)}P[2*I+1]=V}else P[2*I+1]=.5*P[2*I];I++}this.textWidth.push(P.length?.5*P[2*I-2]+P[2*I-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:C,type:\"uint8\",usage:\"stream\"}),this.sizeBuffer({data:P,type:\"float\",usage:\"stream\"}),c.freeUint8(C),c.freeFloat(P),r.length&&this.font.forEach((function(t,r){var n=e.fontAtlas[r],i=n.step,a=Math.floor(T.maxAtlasSize/i),o=Math.min(a,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*i),c=x(s*i);n.width=l,n.height=c,n.rows=s,n.cols=o,n.em&&n.texture({data:u({canvas:T.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,c],step:[i,i]})})}))}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map((function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if(\"number\"==typeof n)return n;switch(n){case\"right\":case\"end\":return-t;case\"center\":case\"centre\":case\"middle\":return.5*-t}return 0}))),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map((function(t,r){var n=(e.font[r]||e.font[0]).metrics,i=0;return i+=.5*n.bottom,-1*(i+=\"number\"==typeof t?t-n.baseline:-n[t])}))),null!=t.color)if(t.color||(t.color=\"transparent\"),\"string\"!=typeof t.color&&isNaN(t.color)){var q;if(\"number\"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;q=c.mallocUint8(G);for(var Z=(t.color.subarray||t.color.slice).bind(t.color),Y=0;Y<G;Y+=4)q.set(l(Z(Y,Y+4),\"uint8\"),Y)}else{var W=t.color.length;q=c.mallocUint8(4*W);for(var X=0;X<W;X++)q.set(l(t.color[X]||0,\"uint8\"),4*X)}this.color=q}else this.color=l(t.color,\"uint8\");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},T.prototype.destroy=function(){},T.prototype.kerning=!0,T.prototype.position={constant:new Float32Array(2)},T.prototype.translate=null,T.prototype.scale=null,T.prototype.font=null,T.prototype.text=\"\",T.prototype.positionOffset=[0,0],T.prototype.opacity=1,T.prototype.color=new Uint8Array([0,0,0,255]),T.prototype.alignOffset=[0,0],T.maxAtlasSize=1024,T.atlasCanvas=document.createElement(\"canvas\"),T.atlasContext=T.atlasCanvas.getContext(\"2d\",{alpha:!1}),T.baseFontSize=64,T.fonts={},t.exports=T},12018:function(t,e,r){\"use strict\";var n=r(71299);function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.g.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.g.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return\"function\"==typeof t.getContext&&\"width\"in t&&\"height\"in t}function o(){var t=document.createElement(\"canvas\");return t.style.position=\"absolute\",t.style.top=0,t.style.left=0,t}t.exports=function(t){var e;if(t?\"string\"==typeof t&&(t={container:t}):t={},(t=a(t)||\"string\"==typeof(e=t).nodeName&&\"function\"==typeof e.appendChild&&\"function\"==typeof e.getBoundingClientRect?{container:t}:function(t){return\"function\"==typeof t.drawArrays||\"function\"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:\"container target element el canvas holder parent parentNode wrapper use ref root node\",gl:\"gl context webgl glContext\",attrs:\"attributes attrs contextAttributes\",pixelRatio:\"pixelRatio pxRatio px ratio pxratio pixelratio\",width:\"w width\",height:\"h height\"},!0)).pixelRatio||(t.pixelRatio=r.g.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if(\"string\"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error(\"Element \"+t.container+\" is not found\");t.container=s}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if(\"undefined\"==typeof document)throw Error(\"Not DOM environment. Use headless-gl.\");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),i(t)}return t.gl||[\"webgl\",\"experimental-webgl\",\"webgl-experimental\"].some((function(e){try{t.gl=t.canvas.getContext(e,t.attrs)}catch(t){}return t.gl})),t.gl}},56068:function(t){t.exports=function(t){\"string\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||\"\");return r.push(t[n]),r.join(\"\")}},40383:function(t,e,r){\"use strict\";var n=r(68318)(\"%Object.getOwnPropertyDescriptor%\",!0);if(n)try{n([],\"length\")}catch(t){n=null}t.exports=n},57035:function(t,e,r){\"use strict\";var n,i=r(54404);n=\"function\"==typeof r.g.matchMedia?!r.g.matchMedia(\"(hover: none)\").matches:i,t.exports=n},38520:function(t,e,r){\"use strict\";var n=r(54404);t.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(e){t=!1}return t}()},55622:function(t,e,r){\"use strict\";var n=r(68318)(\"%Object.defineProperty%\",!0),i=function(){if(n)try{return n({},\"a\",{value:1}),!0}catch(t){return!1}return!1};i.hasArrayLengthDefineBug=function(){if(!i())return null;try{return 1!==n([],\"length\",{value:1}).length}catch(t){return!0}},t.exports=i},57877:function(t,e,r){\"use strict\";var n=\"undefined\"!=typeof Symbol&&Symbol,i=r(35638);t.exports=function(){return\"function\"==typeof n&&\"function\"==typeof Symbol&&\"symbol\"==typeof n(\"foo\")&&\"symbol\"==typeof Symbol(\"bar\")&&i()}},35638:function(t){\"use strict\";t.exports=function(){if(\"function\"!=typeof Symbol||\"function\"!=typeof Object.getOwnPropertySymbols)return!1;if(\"symbol\"==typeof Symbol.iterator)return!0;var t={},e=Symbol(\"test\"),r=Object(e);if(\"string\"==typeof e)return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(e))return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if(\"function\"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if(\"function\"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if(\"function\"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},84543:function(t,e,r){\"use strict\";var n=r(35638);t.exports=function(){return n()&&!!Symbol.toStringTag}},35065:function(t,e,r){\"use strict\";var n=r(77575);t.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},95280:function(t,e){e.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v}},42018:function(t){\"function\"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},47216:function(t,e,r){\"use strict\";var n=r(84543)(),i=r(6614)(\"Object.prototype.toString\"),a=function(t){return!(n&&t&&\"object\"==typeof t&&Symbol.toStringTag in t)&&\"[object Arguments]\"===i(t)},o=function(t){return!!a(t)||null!==t&&\"object\"==typeof t&&\"number\"==typeof t.length&&t.length>=0&&\"[object Array]\"!==i(t)&&\"[object Function]\"===i(t.callee)},s=function(){return a(arguments)}();a.isLegacyArguments=o,t.exports=s?a:o},54404:function(t){t.exports=!0},85395:function(t){\"use strict\";var e,r,n=Function.prototype.toString,i=\"object\"==typeof Reflect&&null!==Reflect&&Reflect.apply;if(\"function\"==typeof i&&\"function\"==typeof Object.defineProperty)try{e=Object.defineProperty({},\"length\",{get:function(){throw r}}),r={},i((function(){throw 42}),null,e)}catch(t){t!==r&&(i=null)}else i=null;var a=/^\\s*class\\b/,o=function(t){try{var e=n.call(t);return a.test(e)}catch(t){return!1}},s=function(t){try{return!o(t)&&(n.call(t),!0)}catch(t){return!1}},l=Object.prototype.toString,u=\"function\"==typeof Symbol&&!!Symbol.toStringTag,c=!(0 in[,]),f=function(){return!1};if(\"object\"==typeof document){var h=document.all;l.call(h)===l.call(document.all)&&(f=function(t){if((c||!t)&&(void 0===t||\"object\"==typeof t))try{var e=l.call(t);return(\"[object HTMLAllCollection]\"===e||\"[object HTML document.all class]\"===e||\"[object HTMLCollection]\"===e||\"[object Object]\"===e)&&null==t(\"\")}catch(t){}return!1})}t.exports=i?function(t){if(f(t))return!0;if(!t)return!1;if(\"function\"!=typeof t&&\"object\"!=typeof t)return!1;try{i(t,null,e)}catch(t){if(t!==r)return!1}return!o(t)&&s(t)}:function(t){if(f(t))return!0;if(!t)return!1;if(\"function\"!=typeof t&&\"object\"!=typeof t)return!1;if(u)return s(t);if(o(t))return!1;var e=l.call(t);return!(\"[object Function]\"!==e&&\"[object GeneratorFunction]\"!==e&&!/^\\[object HTML/.test(e))&&s(t)}},65481:function(t,e,r){\"use strict\";var n,i=Object.prototype.toString,a=Function.prototype.toString,o=/^\\s*(?:function)?\\*/,s=r(84543)(),l=Object.getPrototypeOf;t.exports=function(t){if(\"function\"!=typeof t)return!1;if(o.test(a.call(t)))return!0;if(!s)return\"[object GeneratorFunction]\"===i.call(t);if(!l)return!1;if(void 0===n){var e=function(){if(!s)return!1;try{return Function(\"return function*() {}\")()}catch(t){}}();n=!!e&&l(e)}return l(t)===n}},62683:function(t){\"use strict\";t.exports=\"undefined\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion))},64274:function(t){\"use strict\";t.exports=function(t){return t!=t}},15567:function(t,e,r){\"use strict\";var n=r(68222),i=r(17045),a=r(64274),o=r(14922),s=r(22442),l=n(o(),Number);i(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},14922:function(t,e,r){\"use strict\";var n=r(64274);t.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN(\"a\")?Number.isNaN:n}},22442:function(t,e,r){\"use strict\";var n=r(17045),i=r(14922);t.exports=function(){var t=i();return n(Number,{isNaN:t},{isNaN:function(){return Number.isNaN!==t}}),t}},64941:function(t){\"use strict\";t.exports=function(t){var e=typeof t;return null!==t&&(\"object\"===e||\"function\"===e)}},10973:function(t){\"use strict\";var e=Object.prototype.toString;t.exports=function(t){var r;return\"[object Object]\"===e.call(t)&&(null===(r=Object.getPrototypeOf(t))||r===Object.getPrototypeOf({}))}},18546:function(t){\"use strict\";t.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},89546:function(t){\"use strict\";t.exports=function(t){return\"string\"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\\dz]$/i.test(t)&&t.length>4))}},9187:function(t,e,r){\"use strict\";var n=r(31353),i=r(72077),a=r(6614),o=a(\"Object.prototype.toString\"),s=r(84543)(),l=r(40383),u=\"undefined\"==typeof globalThis?r.g:globalThis,c=i(),f=a(\"Array.prototype.indexOf\",!0)||function(t,e){for(var r=0;r<t.length;r+=1)if(t[r]===e)return r;return-1},h=a(\"String.prototype.slice\"),p={},d=Object.getPrototypeOf;s&&l&&d&&n(c,(function(t){var e=new u[t];if(Symbol.toStringTag in e){var r=d(e),n=l(r,Symbol.toStringTag);if(!n){var i=d(r);n=l(i,Symbol.toStringTag)}p[t]=n.get}})),t.exports=function(t){if(!t||\"object\"!=typeof t)return!1;if(!s||!(Symbol.toStringTag in t)){var e=h(o(t),8,-1);return f(c,e)>-1}return!!l&&function(t){var e=!1;return n(p,(function(r,n){if(!e)try{e=r.call(t)===n}catch(t){}})),e}(t)}},44517:function(t){t.exports=function(){\"use strict\";var t,e,r;function n(n,i){if(t)if(e){var a=\"var sharedChunk = {}; (\"+t+\")(sharedChunk); (\"+e+\")(sharedChunk);\",o={};t(o),(r=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:\"text/javascript\"}))}else e=i;else t=i}return n(0,(function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=\"1.10.1\",n=i;function i(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}i.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},i.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},i.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},i.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if((i=t)<(r=0))return r;if(i>(n=1))return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r}return i},i.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var a=o;function o(t,e){this.x=t,this.y=e}function s(t,e,r,i){var a=new n(t,e,r,i);return function(t){return a.solve(t)}}o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),a=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=a,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.convert=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t};var l=s(.25,.1,.25,1);function u(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function f(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}var h=1;function p(){return h++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function v(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function g(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e))}))}function y(t,e){return-1!==t.indexOf(e,t.length-e.length)}function m(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function x(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function b(t){return Array.isArray(t)?t.map(b):\"object\"==typeof t&&t?m(t,b):t}var _={};function w(t){_[t]||(\"undefined\"!=typeof console&&console.warn(t),_[t]=!0)}function T(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function k(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r<n;i=r++)a=t[r],e+=((o=t[i]).x-a.x)*(a.y+o.y);return e}function A(){return\"undefined\"!=typeof WorkerGlobalScope&&\"undefined\"!=typeof self&&self instanceof WorkerGlobalScope}function M(t){var e={};if(t.replace(/(?:^|(?:\\s*\\,\\s*))([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var r=parseInt(e[\"max-age\"],10);isNaN(r)?delete e[\"max-age\"]:e[\"max-age\"]=r}return e}var S=null;function E(t){if(null==S){var e=t.navigator?t.navigator.userAgent:null;S=!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")&&!e.match(\"Chrome\")))}return S}function L(t){try{var e=self[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return!1}}var C,P,O,I,D=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),z=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,R=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,F={now:D,frame:function(t){var e=z(t);return{cancel:function(){return R(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=self.document.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)throw new Error(\"failed to create canvas 2d context\");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return C||(C=self.document.createElement(\"a\")),C.href=t,C.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==P&&(P=self.matchMedia(\"(prefers-reduced-motion: reduce)\")),P.matches)}},B={API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0===this.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},N={supported:!1,testSupport:function(t){!j&&I&&(U?V(t):O=t)}},j=!1,U=!1;function V(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,I),t.isContextLost())return;N.supported=!0}catch(t){}t.deleteTexture(e),j=!0}self.document&&((I=self.document.createElement(\"img\")).onload=function(){O&&V(O),O=null,U=!0},I.onerror=function(){j=!0,O=null},I.src=\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\");var H=\"01\";var q=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function G(t){return 0===t.indexOf(\"mapbox:\")}q.prototype._createSkuToken=function(){var t=function(){for(var t=\"\",e=0;e<10;e++)t+=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return{token:[\"1\",H,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},q.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},q.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},q.prototype.normalizeStyleURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\"/styles/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeGlyphsURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\"/fonts/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSourceURL=function(t,e){if(!G(t))return t;var r=X(t);return r.path=\"/v4/\"+r.authority+\".json\",r.params.push(\"secure\"),this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSpriteURL=function(t,e,r,n){var i=X(t);return G(t)?(i.path=\"/styles/v1\"+i.path+\"/sprite\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=\"\"+e+r,J(i))},q.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!G(t))return t;var r=X(t),n=F.devicePixelRatio>=2||512===e?\"@2x\":\"\",i=N.supported?\".webp\":\"$1\";r.path=r.path.replace(/(\\.(png|jpg)\\d*)(?=$)/,\"\"+n+i),r.path=r.path.replace(/^.+\\/v4\\//,\"/\"),r.path=\"/v4\"+r.path;var a=this._customAccessToken||function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e].match(/^access_token=(.*)$/);if(n)return n[1]}return null}(r.params)||B.ACCESS_TOKEN;return B.REQUIRE_ACCESS_TOKEN&&a&&this._skuToken&&r.params.push(\"sku=\"+this._skuToken),this._makeAPIURL(r,a)},q.prototype.canonicalizeTileURL=function(t,e){var r=X(t);if(!r.path.match(/(^\\/v4\\/)/)||!r.path.match(/\\.[\\w]+$/))return t;var n=\"mapbox://tiles/\";n+=r.path.replace(\"/v4/\",\"\");var i=r.params;return e&&(i=i.filter((function(t){return!t.match(/^access_token=/)}))),i.length&&(n+=\"?\"+i.join(\"&\")),n},q.prototype.canonicalizeTileset=function(t,e){for(var r=!!e&&G(e),n=[],i=0,a=t.tiles||[];i<a.length;i+=1){var o=a[i];Y(o)?n.push(this.canonicalizeTileURL(o,r)):n.push(o)}return n},q.prototype._makeAPIURL=function(t,e){var r=\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\",n=X(B.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,\"/\"!==n.path&&(t.path=\"\"+n.path+t.path),!B.REQUIRE_ACCESS_TOKEN)return J(t);if(!(e=e||B.ACCESS_TOKEN))throw new Error(\"An API access token is required to use Mapbox GL. \"+r);if(\"s\"===e[0])throw new Error(\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \"+r);return t.params=t.params.filter((function(t){return-1===t.indexOf(\"access_token\")})),t.params.push(\"access_token=\"+e),J(t)};var Z=/^((https?:)?\\/\\/)?([^\\/]+\\.)?mapbox\\.c(n|om)(\\/|\\?|$)/i;function Y(t){return Z.test(t)}var W=/^(\\w+):\\/\\/([^/?]*)(\\/[^?]+)?\\??(.+)?/;function X(t){var e=t.match(W);if(!e)throw new Error(\"Unable to parse URL object\");return{protocol:e[1],authority:e[2],path:e[3]||\"/\",params:e[4]?e[4].split(\"&\"):[]}}function J(t){var e=t.params.length?\"?\"+t.params.join(\"&\"):\"\";return t.protocol+\"://\"+t.authority+t.path+e}var K=\"mapbox.eventData\";function $(t){if(!t)return null;var e,r=t.split(\".\");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split(\"\").map((function(t){return\"%\"+(\"00\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\"\"))))}catch(t){return null}}var Q=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};Q.prototype.getStorageKey=function(t){var e,r,n=$(B.ACCESS_TOKEN);return e=n&&n.u?(r=n.u,self.btoa(encodeURIComponent(r).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\"0x\"+e))})))):B.ACCESS_TOKEN||\"\",t?K+\".\"+t+\":\"+e:K+\":\"+e},Q.prototype.fetchEventData=function(){var t=L(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=self.localStorage.getItem(r);i&&(this.anonId=i)}catch(t){w(\"Unable to read from LocalStorage\")}},Q.prototype.saveEventData=function(){var t=L(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w(\"Unable to write to LocalStorage\")}},Q.prototype.processRequests=function(t){},Q.prototype.postEvent=function(t,e,n,i){var a=this;if(B.EVENTS_URL){var o=X(B.EVENTS_URL);o.params.push(\"access_token=\"+(i||B.ACCESS_TOKEN||\"\"));var s={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:r,skuId:H,userId:this.anonId},l=e?f(s,e):s,u={url:J(o),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([l])};this.pendingRequest=At(u,(function(t){a.pendingRequest=null,n(t),a.saveEventData(),a.processRequests(i)}))}},Q.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var tt,et,rt=function(t){function e(){t.call(this,\"map.load\"),this.success={},this.skuToken=\"\"}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(B.EVENTS_URL&&n||B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)})))&&this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),v(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0)}),t))}},e}(Q),nt=function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){B.EVENTS_URL&&B.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return G(t)||Y(t)}))&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=$(B.ACCESS_TOKEN),n=r?r.u:B.ACCESS_TOKEN,i=n!==this.eventData.tokenU;v(this.anonId)||(this.anonId=d(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),l=(a-this.eventData.lastSuccess)/864e5;i=i||l>=1||l<-1||o.getDate()!==s.getDate()}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n)}),t)}},e}(Q),it=new nt,at=it.postTurnstileEvent.bind(it),ot=new rt,st=ot.postMapLoadEvent.bind(ot),lt=\"mapbox-tiles\",ut=500,ct=50,ft=42e4;function ht(){self.caches&&!tt&&(tt=self.caches.open(lt))}function pt(t,e,r){if(ht(),tt){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=M(e.headers.get(\"Cache-Control\")||\"\");i[\"no-store\"]||(i[\"max-age\"]&&n.headers.set(\"Expires\",new Date(r+1e3*i[\"max-age\"]).toUTCString()),new Date(n.headers.get(\"Expires\")).getTime()-r<ft||function(t,e){if(void 0===et)try{new Response(new ReadableStream),et=!0}catch(t){et=!1}et?e(t.body):t.blob().then(e)}(e,(function(e){var r=new self.Response(e,n);ht(),tt&&tt.then((function(e){return e.put(dt(t.url),r)})).catch((function(t){return w(t.message)}))})))}}function dt(t){var e=t.indexOf(\"?\");return e<0?t:t.slice(0,e)}function vt(t,e){if(ht(),!tt)return e(null);var r=dt(t.url);tt.then((function(t){t.match(r).then((function(n){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get(\"Expires\")||0),r=M(t.headers.get(\"Cache-Control\")||\"\");return e>Date.now()&&!r[\"no-cache\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i)})).catch(e)})).catch(e)}var gt,yt=1/0;function mt(){return null==gt&&(gt=self.OffscreenCanvas&&new self.OffscreenCanvas(1,1).getContext(\"2d\")&&\"function\"==typeof self.createImageBitmap),gt}var xt={Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"==typeof Object.freeze&&Object.freeze(xt);var bt=function(t){function e(e,r,n){401===r&&Y(n)&&(e+=\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),_t=A()?function(){return self.worker&&self.worker.referrer}:function(){return(\"blob:\"===self.location.protocol?self.parent:self).location.href};function wt(t,e){var r,n=new self.AbortController,i=new self.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:_t(),signal:n.signal}),a=!1,o=!1,s=(r=i.url).indexOf(\"sku=\")>0&&Y(r);\"json\"===t.type&&i.headers.set(\"Accept\",\"application/json\");var l=function(r,n,a){if(!o){if(r&&\"SecurityError\"!==r.message&&w(r),n&&a)return u(n);var l=Date.now();self.fetch(i).then((function(r){if(r.ok){var n=s?r.clone():null;return u(r,n,l)}return e(new bt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message))}))}},u=function(r,n,s){(\"arrayBuffer\"===t.type?r.arrayBuffer():\"json\"===t.type?r.json():r.text()).then((function(t){o||(n&&s&&pt(i,n,s),a=!0,e(null,t,r.headers.get(\"Cache-Control\"),r.headers.get(\"Expires\")))})).catch((function(t){o||e(new Error(t.message))}))};return s?vt(i,l):l(null,null),{cancel:function(){o=!0,a||n.abort()}}}var Tt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(_t())&&!/^\\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty(\"signal\"))return wt(t,e);if(A()&&self.worker&&self.worker.actor){return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"===t.type&&(r.responseType=\"arraybuffer\"),t.headers)r.setRequestHeader(n,t.headers[n]);return\"json\"===t.type&&(r.responseType=\"text\",r.setRequestHeader(\"Accept\",\"application/json\")),r.withCredentials=\"include\"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\"json\"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader(\"Cache-Control\"),r.getResponseHeader(\"Expires\"))}else e(new bt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},kt=function(t,e){return Tt(f(t,{type:\"arrayBuffer\"}),e)},At=function(t,e){return Tt(f(t,{method:\"POST\"}),e)};var Mt,St;Mt=[],St=0;var Et=function(t,e){if(N.supported&&(t.headers||(t.headers={}),t.headers.accept=\"image/webp,*/*\"),St>=B.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return Mt.push(r),r}St++;var n=!1,i=function(){if(!n)for(n=!0,St--;Mt.length&&St<B.MAX_PARALLEL_IMAGE_REQUESTS;){var t=Mt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=Et(e,r).cancel)}},a=kt(t,(function(t,r,n,a){i(),t?e(t):r&&(mt()?function(t,e){var r=new self.Blob([new Uint8Array(t)],{type:\"image/png\"});self.createImageBitmap(r).then((function(t){e(null,t)})).catch((function(t){e(new Error(\"Could not load image because of \"+t.message+\". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))}))}(r,e):function(t,e,r,n){var i=new self.Image,a=self.URL;i.onload=function(){e(null,i),a.revokeObjectURL(i.src)},i.onerror=function(){return e(new Error(\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))};var o=new self.Blob([new Uint8Array(t)],{type:\"image/png\"});i.cacheControl=r,i.expires=n,i.src=t.byteLength?a.createObjectURL(o):\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\"}(r,e,n,a))}));return{cancel:function(){a.cancel(),i()}}};function Lt(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function Ct(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var Pt=function(t,e){void 0===e&&(e={}),f(this,e),this.type=t},Ot=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,\"error\",f({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Pt),It=function(){};It.prototype.on=function(t,e){return this._listeners=this._listeners||{},Lt(t,e,this._listeners),this},It.prototype.off=function(t,e){return Ct(t,e,this._listeners),Ct(t,e,this._oneTimeListeners),this},It.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},Lt(t,e,this._oneTimeListeners),this},It.prototype.fire=function(t,e){\"string\"==typeof t&&(t=new Pt(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,i=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<i.length;n+=1)i[n].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a<o.length;a+=1){var s=o[a];Ct(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(f(t,\"function\"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof Ot&&console.error(t.error);return this},It.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},It.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Dt={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{},within:{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},expression_name:{type:\"enum\",values:{let:{group:\"Variable binding\"},var:{group:\"Variable binding\"},literal:{group:\"Types\"},array:{group:\"Types\"},at:{group:\"Lookup\"},in:{group:\"Lookup\"},\"index-of\":{group:\"Lookup\"},slice:{group:\"Lookup\"},case:{group:\"Decision\"},match:{group:\"Decision\"},coalesce:{group:\"Decision\"},step:{group:\"Ramps, scales, curves\"},interpolate:{group:\"Ramps, scales, curves\"},\"interpolate-hcl\":{group:\"Ramps, scales, curves\"},\"interpolate-lab\":{group:\"Ramps, scales, curves\"},ln2:{group:\"Math\"},pi:{group:\"Math\"},e:{group:\"Math\"},typeof:{group:\"Types\"},string:{group:\"Types\"},number:{group:\"Types\"},boolean:{group:\"Types\"},object:{group:\"Types\"},collator:{group:\"Types\"},format:{group:\"Types\"},image:{group:\"Types\"},\"number-format\":{group:\"Types\"},\"to-string\":{group:\"Types\"},\"to-number\":{group:\"Types\"},\"to-boolean\":{group:\"Types\"},\"to-rgba\":{group:\"Color\"},\"to-color\":{group:\"Types\"},rgb:{group:\"Color\"},rgba:{group:\"Color\"},get:{group:\"Lookup\"},has:{group:\"Lookup\"},length:{group:\"Lookup\"},properties:{group:\"Feature data\"},\"feature-state\":{group:\"Feature data\"},\"geometry-type\":{group:\"Feature data\"},id:{group:\"Feature data\"},zoom:{group:\"Zoom\"},\"heatmap-density\":{group:\"Heatmap\"},\"line-progress\":{group:\"Feature data\"},accumulated:{group:\"Feature data\"},\"+\":{group:\"Math\"},\"*\":{group:\"Math\"},\"-\":{group:\"Math\"},\"/\":{group:\"Math\"},\"%\":{group:\"Math\"},\"^\":{group:\"Math\"},sqrt:{group:\"Math\"},log10:{group:\"Math\"},ln:{group:\"Math\"},log2:{group:\"Math\"},sin:{group:\"Math\"},cos:{group:\"Math\"},tan:{group:\"Math\"},asin:{group:\"Math\"},acos:{group:\"Math\"},atan:{group:\"Math\"},min:{group:\"Math\"},max:{group:\"Math\"},round:{group:\"Math\"},abs:{group:\"Math\"},ceil:{group:\"Math\"},floor:{group:\"Math\"},distance:{group:\"Math\"},\"==\":{group:\"Decision\"},\"!=\":{group:\"Decision\"},\">\":{group:\"Decision\"},\"<\":{group:\"Decision\"},\">=\":{group:\"Decision\"},\"<=\":{group:\"Decision\"},all:{group:\"Decision\"},any:{group:\"Decision\"},\"!\":{group:\"Decision\"},within:{group:\"Decision\"},\"is-supported-script\":{group:\"String\"},upcase:{group:\"String\"},downcase:{group:\"String\"},concat:{group:\"String\"},\"resolved-locale\":{group:\"String\"}}},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}}},zt=function(t,e,r,n){this.message=(t?t+\": \":\"\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function Rt(t){var e=t.key,r=t.value;return r?[new zt(e,r,\"constants have been deprecated as of v8\")]:[]}function Ft(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}function Bt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function Nt(t){if(Array.isArray(t))return t.map(Nt);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e={};for(var r in t)e[r]=Nt(t[r]);return e}return Bt(t)}var jt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Ut=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var i=n[r],a=i[0],o=i[1];this.bindings[a]=o}};Ut.prototype.concat=function(t){return new Ut(this,t)},Ut.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\" not found in scope.\")},Ut.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var Vt={kind:\"null\"},Ht={kind:\"number\"},qt={kind:\"string\"},Gt={kind:\"boolean\"},Zt={kind:\"color\"},Yt={kind:\"object\"},Wt={kind:\"value\"},Xt={kind:\"collator\"},Jt={kind:\"formatted\"},Kt={kind:\"resolvedImage\"};function $t(t,e){return{kind:\"array\",itemType:t,N:e}}function Qt(t){if(\"array\"===t.kind){var e=Qt(t.itemType);return\"number\"==typeof t.N?\"array<\"+e+\", \"+t.N+\">\":\"value\"===t.itemType.kind?\"array\":\"array<\"+e+\">\"}return t.kind}var te=[Vt,Ht,qt,Gt,Zt,Jt,Yt,$t(Wt),Kt];function ee(t,e){if(\"error\"===e.kind)return null;if(\"array\"===t.kind){if(\"array\"===e.kind&&(0===e.N&&\"value\"===e.itemType.kind||!ee(t.itemType,e.itemType))&&(\"number\"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(\"value\"===t.kind)for(var r=0,n=te;r<n.length;r+=1)if(!ee(n[r],e))return null}return\"Expected \"+Qt(t)+\" but found \"+Qt(e)+\" instead.\"}function re(t,e){return e.some((function(e){return e.kind===t.kind}))}function ne(t,e){return e.some((function(e){return\"null\"===e?null===t:\"array\"===e?Array.isArray(t):\"object\"===e?t&&!Array.isArray(t)&&\"object\"==typeof t:e===typeof t}))}var ie=e((function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return\"%\"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return\"%\"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,\"\").toLowerCase();if(i in r)return r[i].slice();if(\"#\"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=i.indexOf(\"(\"),u=i.indexOf(\")\");if(-1!==l&&u+1===i.length){var c=i.substr(0,l),f=i.substr(l+1,u-(l+1)).split(\",\"),h=1;switch(c){case\"rgba\":if(4!==f.length)return null;h=o(f.pop());case\"rgb\":return 3!==f.length?null:[a(f[0]),a(f[1]),a(f[2]),h];case\"hsla\":if(4!==f.length)return null;h=o(f.pop());case\"hsl\":if(3!==f.length)return null;var p=(parseFloat(f[0])%360+360)%360/360,d=o(f[1]),v=o(f[2]),g=v<=.5?v*(d+1):v+d-v*d,y=2*v-g;return[n(255*s(y,g,p+1/3)),n(255*s(y,g,p)),n(255*s(y,g,p-1/3)),h];default:return null}}return null}}catch(t){}})),ae=ie.parseCSSColor,oe=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};oe.parse=function(t){if(t){if(t instanceof oe)return t;if(\"string\"==typeof t){var e=ae(t);if(e)return new oe(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},oe.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return\"rgba(\"+Math.round(e)+\",\"+Math.round(r)+\",\"+Math.round(n)+\",\"+i+\")\"},oe.prototype.toArray=function(){var t=this,e=t.r,r=t.g,n=t.b,i=t.a;return 0===i?[0,0,0,0]:[255*e/i,255*r/i,255*n/i,i]},oe.black=new oe(0,0,0,1),oe.white=new oe(1,1,1,1),oe.transparent=new oe(0,0,0,0),oe.red=new oe(1,0,0,1);var se=function(t,e,r){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"})};se.prototype.compare=function(t,e){return this.collator.compare(t,e)},se.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var le=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i},ue=function(t){this.sections=t};ue.fromString=function(t){return new ue([new le(t,null,null,null,null)])},ue.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},ue.factory=function(t){return t instanceof ue?t:ue.fromString(t)},ue.prototype.toString=function(){return 0===this.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},ue.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];if(n.image)t.push([\"image\",n.image.name]);else{t.push(n.text);var i={};n.fontStack&&(i[\"text-font\"]=[\"literal\",n.fontStack.split(\",\")]),n.scale&&(i[\"font-scale\"]=n.scale),n.textColor&&(i[\"text-color\"]=[\"rgba\"].concat(n.textColor.toArray())),t.push(i)}}return t};var ce=function(t){this.name=t.name,this.available=t.available};function fe(t,e,r,n){return\"number\"==typeof t&&t>=0&&t<=255&&\"number\"==typeof e&&e>=0&&e<=255&&\"number\"==typeof r&&r>=0&&r<=255?void 0===n||\"number\"==typeof n&&n>=0&&n<=1?null:\"Invalid rgba value [\"+[t,e,r,n].join(\", \")+\"]: 'a' must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"==typeof n?[t,e,r,n]:[t,e,r]).join(\", \")+\"]: 'r', 'g', and 'b' must be between 0 and 255.\"}function he(t){if(null===t)return!0;if(\"string\"==typeof t)return!0;if(\"boolean\"==typeof t)return!0;if(\"number\"==typeof t)return!0;if(t instanceof oe)return!0;if(t instanceof se)return!0;if(t instanceof ue)return!0;if(t instanceof ce)return!0;if(Array.isArray(t)){for(var e=0,r=t;e<r.length;e+=1)if(!he(r[e]))return!1;return!0}if(\"object\"==typeof t){for(var n in t)if(!he(t[n]))return!1;return!0}return!1}function pe(t){if(null===t)return Vt;if(\"string\"==typeof t)return qt;if(\"boolean\"==typeof t)return Gt;if(\"number\"==typeof t)return Ht;if(t instanceof oe)return Zt;if(t instanceof se)return Xt;if(t instanceof ue)return Jt;if(t instanceof ce)return Kt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n<i.length;n+=1){var a=pe(i[n]);if(e){if(e===a)continue;e=Wt;break}e=a}return $t(e||Wt,r)}return Yt}function de(t){var e=typeof t;return null===t?\"\":\"string\"===e||\"number\"===e||\"boolean\"===e?String(t):t instanceof oe||t instanceof ue||t instanceof ce?t.toString():JSON.stringify(t)}ce.prototype.toString=function(){return this.name},ce.fromString=function(t){return t?new ce({name:t,available:!1}):null},ce.prototype.serialize=function(){return[\"image\",this.name]};var ve=function(t,e){this.type=t,this.value=e};ve.parse=function(t,e){if(2!==t.length)return e.error(\"'literal' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(!he(t[1]))return e.error(\"invalid value\");var r=t[1],n=pe(r),i=e.expectedType;return\"array\"!==n.kind||0!==n.N||!i||\"array\"!==i.kind||\"number\"==typeof i.N&&0!==i.N||(n=i),new ve(n,r)},ve.prototype.evaluate=function(){return this.value},ve.prototype.eachChild=function(){},ve.prototype.outputDefined=function(){return!0},ve.prototype.serialize=function(){return\"array\"===this.type.kind||\"object\"===this.type.kind?[\"literal\",this.value]:this.value instanceof oe?[\"rgba\"].concat(this.value.toArray()):this.value instanceof ue?this.value.serialize():this.value};var ge=function(t){this.name=\"ExpressionEvaluationError\",this.message=t};ge.prototype.toJSON=function(){return this.message};var ye={string:qt,number:Ht,boolean:Gt,object:Yt},me=function(t,e){this.type=t,this.args=e};me.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r,n=1,i=t[0];if(\"array\"===i){var a,o;if(t.length>2){var s=t[1];if(\"string\"!=typeof s||!(s in ye)||\"object\"===s)return e.error('The item type argument of \"array\" must be one of string, number, boolean',1);a=ye[s],n++}else a=Wt;if(t.length>3){if(null!==t[2]&&(\"number\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \"array\" must be a positive integer literal',2);o=t[2],n++}r=$t(a,o)}else r=ye[i];for(var l=[];n<t.length;n++){var u=e.parse(t[n],n,Wt);if(!u)return null;l.push(u)}return new me(r,l)},me.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!ee(this.type,pe(r)))return r;if(e===this.args.length-1)throw new ge(\"Expected value to be of type \"+Qt(this.type)+\", but found \"+Qt(pe(r))+\" instead.\")}return null},me.prototype.eachChild=function(t){this.args.forEach(t)},me.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},me.prototype.serialize=function(){var t=this.type,e=[t.kind];if(\"array\"===t.kind){var r=t.itemType;if(\"string\"===r.kind||\"number\"===r.kind||\"boolean\"===r.kind){e.push(r.kind);var n=t.N;(\"number\"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var xe=function(t){this.type=Jt,this.sections=t};xe.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[1];if(!Array.isArray(r)&&\"object\"==typeof r)return e.error(\"First argument must be an image or text section.\");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\"object\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\"font-scale\"]&&!(s=e.parse(o[\"font-scale\"],1,Ht)))return null;var l=null;if(o[\"text-font\"]&&!(l=e.parse(o[\"text-font\"],1,$t(qt))))return null;var u=null;if(o[\"text-color\"]&&!(u=e.parse(o[\"text-color\"],1,Zt)))return null;var c=n[n.length-1];c.scale=s,c.font=l,c.textColor=u}else{var f=e.parse(t[a],1,Wt);if(!f)return null;var h=f.type.kind;if(\"string\"!==h&&\"value\"!==h&&\"null\"!==h&&\"resolvedImage\"!==h)return e.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");i=!0,n.push({content:f,scale:null,font:null,textColor:null})}}return new xe(n)},xe.prototype.evaluate=function(t){return new ue(this.sections.map((function(e){var r=e.content.evaluate(t);return pe(r)===Kt?new le(\"\",r,null,null,null):new le(de(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},xe.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.content),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor)}},xe.prototype.outputDefined=function(){return!1},xe.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.content.serialize());var i={};n.scale&&(i[\"font-scale\"]=n.scale.serialize()),n.font&&(i[\"text-font\"]=n.font.serialize()),n.textColor&&(i[\"text-color\"]=n.textColor.serialize()),t.push(i)}return t};var be=function(t){this.type=Kt,this.input=t};be.parse=function(t,e){if(2!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,qt);return r?new be(r):e.error(\"No image name provided.\")},be.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=ce.fromString(e);return r&&t.availableImages&&(r.available=t.availableImages.indexOf(e)>-1),r},be.prototype.eachChild=function(t){t(this.input)},be.prototype.outputDefined=function(){return!1},be.prototype.serialize=function(){return[\"image\",this.input.serialize()]};var _e={\"to-boolean\":Gt,\"to-color\":Zt,\"to-number\":Ht,\"to-string\":qt},we=function(t,e){this.type=t,this.args=e};we.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[0];if((\"to-boolean\"===r||\"to-string\"===r)&&2!==t.length)return e.error(\"Expected one argument.\");for(var n=_e[r],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Wt);if(!o)return null;i.push(o)}return new we(n,i)},we.prototype.evaluate=function(t){if(\"boolean\"===this.type.kind)return Boolean(this.args[0].evaluate(t));if(\"color\"===this.type.kind){for(var e,r,n=0,i=this.args;n<i.length;n+=1){if(r=null,(e=i[n].evaluate(t))instanceof oe)return e;if(\"string\"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":fe(e[0],e[1],e[2],e[3])))return new oe(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ge(r||\"Could not parse color from value '\"+(\"string\"==typeof e?e:String(JSON.stringify(e)))+\"'\")}if(\"number\"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var u=Number(o);if(!isNaN(u))return u}throw new ge(\"Could not convert \"+JSON.stringify(o)+\" to number.\")}return\"formatted\"===this.type.kind?ue.fromString(de(this.args[0].evaluate(t))):\"resolvedImage\"===this.type.kind?ce.fromString(de(this.args[0].evaluate(t))):de(this.args[0].evaluate(t))},we.prototype.eachChild=function(t){this.args.forEach(t)},we.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},we.prototype.serialize=function(){if(\"formatted\"===this.type.kind)return new xe([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if(\"resolvedImage\"===this.type.kind)return new be(this.args[0]).serialize();var t=[\"to-\"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize())})),t};var Te=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],ke=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null};ke.prototype.id=function(){return this.feature&&\"id\"in this.feature?this.feature.id:null},ke.prototype.geometryType=function(){return this.feature?\"number\"==typeof this.feature.type?Te[this.feature.type]:this.feature.type:null},ke.prototype.geometry=function(){return this.feature&&\"geometry\"in this.feature?this.feature.geometry:null},ke.prototype.canonicalID=function(){return this.canonical},ke.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ke.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=oe.parse(t)),e};var Ae=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};Ae.prototype.evaluate=function(t){return this._evaluate(t,this.args)},Ae.prototype.eachChild=function(t){this.args.forEach(t)},Ae.prototype.outputDefined=function(){return!1},Ae.prototype.serialize=function(){return[this.name].concat(this.args.map((function(t){return t.serialize()})))},Ae.parse=function(t,e){var r,n=t[0],i=Ae.definitions[n];if(!i)return e.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter((function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1})),l=null,u=0,c=s;u<c.length;u+=1){var f=c[u],h=f[0],p=f[1];l=new We(e.registry,e.path,null,e.scope);for(var d=[],v=!1,g=1;g<t.length;g++){var y=t[g],m=Array.isArray(h)?h[g-1]:h.type,x=l.parse(y,1+d.length,m);if(!x){v=!0;break}d.push(x)}if(!v)if(Array.isArray(h)&&h.length!==d.length)l.error(\"Expected \"+h.length+\" arguments, but found \"+d.length+\" instead.\");else{for(var b=0;b<d.length;b++){var _=Array.isArray(h)?h[b]:h.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new Ae(n,a,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var T=(s.length?s:o).map((function(t){return e=t[0],Array.isArray(e)?\"(\"+e.map(Qt).join(\", \")+\")\":\"(\"+Qt(e.type)+\"...)\";var e})).join(\" | \"),k=[],A=1;A<t.length;A++){var M=e.parse(t[A],1+k.length);if(!M)return null;k.push(Qt(M.type))}e.error(\"Expected arguments of type \"+T+\", but found (\"+k.join(\", \")+\") instead.\")}return null},Ae.register=function(t,e){for(var r in Ae.definitions=e,e)t[r]=Ae};var Me=function(t,e,r){this.type=Xt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};Me.parse=function(t,e){if(2!==t.length)return e.error(\"Expected one argument.\");var r=t[1];if(\"object\"!=typeof r||Array.isArray(r))return e.error(\"Collator options argument must be an object.\");var n=e.parse(void 0!==r[\"case-sensitive\"]&&r[\"case-sensitive\"],1,Gt);if(!n)return null;var i=e.parse(void 0!==r[\"diacritic-sensitive\"]&&r[\"diacritic-sensitive\"],1,Gt);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,qt))?null:new Me(n,i,a)},Me.prototype.evaluate=function(t){return new se(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},Me.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},Me.prototype.outputDefined=function(){return!1},Me.prototype.serialize=function(){var t={};return t[\"case-sensitive\"]=this.caseSensitive.serialize(),t[\"diacritic-sensitive\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\"collator\",t]};var Se=8192;function Ee(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1])}function Le(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function Ce(t,e){var r,n=(180+t[0])/360,i=(r=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360),a=Math.pow(2,e.z);return[Math.round(n*a*Se),Math.round(i*a*Se)]}function Pe(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function Oe(t,e){for(var r=!1,n=0,i=e.length;n<i;n++)for(var a=e[n],o=0,s=a.length;o<s-1;o++){if(l=t,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,d=void 0,f=l[0]-u[0],h=l[1]-u[1],p=l[0]-c[0],d=l[1]-c[1],f*d-p*h==0&&f*p<=0&&h*d<=0)return!1;Pe(t,a[o],a[o+1])&&(r=!r)}var l,u,c,f,h,p,d;return r}function Ie(t,e){for(var r=0;r<e.length;r++)if(Oe(t,e[r]))return!0;return!1}function De(t,e,r,n){var i=t[0]-r[0],a=t[1]-r[1],o=e[0]-r[0],s=e[1]-r[1],l=n[0]-r[0],u=n[1]-r[1],c=i*u-l*a,f=o*u-l*s;return c>0&&f<0||c<0&&f>0}function ze(t,e,r){for(var n=0,i=r;n<i.length;n+=1)for(var a=i[n],o=0;o<a.length-1;++o)if(s=t,l=e,u=a[o],c=a[o+1],f=void 0,h=void 0,p=void 0,p=[l[0]-s[0],l[1]-s[1]],0!=(f=[c[0]-u[0],c[1]-u[1]],h=p,f[0]*h[1]-f[1]*h[0])&&De(s,l,u,c)&&De(u,c,s,l))return!0;var s,l,u,c,f,h,p;return!1}function Re(t,e){for(var r=0;r<t.length;++r)if(!Oe(t[r],e))return!1;for(var n=0;n<t.length-1;++n)if(ze(t[n],t[n+1],e))return!1;return!0}function Fe(t,e){for(var r=0;r<e.length;r++)if(Re(t,e[r]))return!0;return!1}function Be(t,e,r){for(var n=[],i=0;i<t.length;i++){for(var a=[],o=0;o<t[i].length;o++){var s=Ce(t[i][o],r);Ee(e,s),a.push(s)}n.push(a)}return n}function Ne(t,e,r){for(var n=[],i=0;i<t.length;i++){var a=Be(t[i],e,r);n.push(a)}return n}function je(t,e,r,n){if(t[0]<r[0]||t[0]>r[2]){var i=.5*n,a=t[0]-r[0]>i?-n:r[0]-t[0]>i?n:0;0===a&&(a=t[0]-r[2]>i?-n:r[2]-t[0]>i?n:0),t[0]+=a}Ee(e,t)}function Ue(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1)for(var u=0,c=l[s];u<c.length;u+=1){var f=c[u],h=[f.x+a[0],f.y+a[1]];je(h,e,r,i),o.push(h)}return o}function Ve(t,e,r,n){for(var i=Math.pow(2,n.z)*Se,a=[n.x*Se,n.y*Se],o=[],s=0,l=t;s<l.length;s+=1){for(var u=[],c=0,f=l[s];c<f.length;c+=1){var h=f[c],p=[h.x+a[0],h.y+a[1]];Ee(e,p),u.push(p)}o.push(u)}if(e[2]-e[0]<=i/2){(m=e)[0]=m[1]=1/0,m[2]=m[3]=-1/0;for(var d=0,v=o;d<v.length;d+=1)for(var g=0,y=v[d];g<y.length;g+=1)je(y[g],e,r,i)}var m;return o}var He=function(t,e){this.type=Gt,this.geojson=t,this.geometries=e};function qe(t){if(t instanceof Ae){if(\"get\"===t.name&&1===t.args.length)return!1;if(\"feature-state\"===t.name)return!1;if(\"has\"===t.name&&1===t.args.length)return!1;if(\"properties\"===t.name||\"geometry-type\"===t.name||\"id\"===t.name)return!1;if(/^filter-/.test(t.name))return!1}if(t instanceof He)return!1;var e=!0;return t.eachChild((function(t){e&&!qe(t)&&(e=!1)})),e}function Ge(t){if(t instanceof Ae&&\"feature-state\"===t.name)return!1;var e=!0;return t.eachChild((function(t){e&&!Ge(t)&&(e=!1)})),e}function Ze(t,e){if(t instanceof Ae&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild((function(t){r&&!Ze(t,e)&&(r=!1)})),r}He.parse=function(t,e){if(2!==t.length)return e.error(\"'within' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(he(t[1])){var r=t[1];if(\"FeatureCollection\"===r.type)for(var n=0;n<r.features.length;++n){var i=r.features[n].geometry.type;if(\"Polygon\"===i||\"MultiPolygon\"===i)return new He(r,r.features[n].geometry)}else if(\"Feature\"===r.type){var a=r.geometry.type;if(\"Polygon\"===a||\"MultiPolygon\"===a)return new He(r,r.geometry)}else if(\"Polygon\"===r.type||\"MultiPolygon\"===r.type)return new He(r,r)}return e.error(\"'within' expression requires valid geojson object that contains polygon geometry type.\")},He.prototype.evaluate=function(t){if(null!=t.geometry()&&null!=t.canonicalID()){if(\"Point\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Be(e.coordinates,n,i),o=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Oe(l[s],a))return!1}if(\"MultiPolygon\"===e.type){var u=Ne(e.coordinates,n,i),c=Ue(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Ie(h[f],u))return!1}return!0}(t,this.geometries);if(\"LineString\"===t.geometryType())return function(t,e){var r=[1/0,1/0,-1/0,-1/0],n=[1/0,1/0,-1/0,-1/0],i=t.canonicalID();if(\"Polygon\"===e.type){var a=Be(e.coordinates,n,i),o=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var s=0,l=o;s<l.length;s+=1)if(!Re(l[s],a))return!1}if(\"MultiPolygon\"===e.type){var u=Ne(e.coordinates,n,i),c=Ve(t.geometry(),r,n,i);if(!Le(r,n))return!1;for(var f=0,h=c;f<h.length;f+=1)if(!Fe(h[f],u))return!1}return!0}(t,this.geometries)}return!1},He.prototype.eachChild=function(){},He.prototype.outputDefined=function(){return!0},He.prototype.serialize=function(){return[\"within\",this.geojson]};var Ye=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};Ye.parse=function(t,e){if(2!==t.length||\"string\"!=typeof t[1])return e.error(\"'var' expression requires exactly one string literal argument.\");var r=t[1];return e.scope.has(r)?new Ye(r,e.scope.get(r)):e.error('Unknown variable \"'+r+'\". Make sure \"'+r+'\" has been bound in an enclosing \"let\" expression before using it.',1)},Ye.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},Ye.prototype.eachChild=function(){},Ye.prototype.outputDefined=function(){return!1},Ye.prototype.serialize=function(){return[\"var\",this.name]};var We=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Ut),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map((function(t){return\"[\"+t+\"]\"})).join(\"\"),this.scope=n,this.errors=i,this.expectedType=r};function Xe(t){if(t instanceof Ye)return Xe(t.boundExpression);if(t instanceof Ae&&\"error\"===t.name)return!1;if(t instanceof Me)return!1;if(t instanceof He)return!1;var e=t instanceof we||t instanceof me,r=!0;return t.eachChild((function(t){r=e?r&&Xe(t):r&&t instanceof ve})),!!r&&qe(t)&&Ze(t,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}function Je(t,e){for(var r,n,i=t.length-1,a=0,o=i,s=0;a<=o;)if(r=t[s=Math.floor((a+o)/2)],n=t[s+1],r<=e){if(s===i||e<n)return s;a=s+1}else{if(!(r>e))throw new ge(\"Input is not a number.\");o=s-1}return 0}We.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},We.prototype._parse=function(t,e){function r(t,e,r){return\"assert\"===r?new me(e,[t]):\"coerce\"===r?new we(e,[t]):t}if(null!==t&&\"string\"!=typeof t&&\"boolean\"!=typeof t&&\"number\"!=typeof t||(t=[\"literal\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');var n=t[0];if(\"string\"!=typeof n)return this.error(\"Expression name must be a string, but found \"+typeof n+' instead. If you wanted a literal array, use [\"literal\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\"string\"!==o.kind&&\"number\"!==o.kind&&\"boolean\"!==o.kind&&\"object\"!==o.kind&&\"array\"!==o.kind||\"value\"!==s.kind)if(\"color\"!==o.kind&&\"formatted\"!==o.kind&&\"resolvedImage\"!==o.kind||\"value\"!==s.kind&&\"string\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\"coerce\");else a=r(a,o,e.typeAnnotation||\"assert\")}if(!(a instanceof ve)&&\"resolvedImage\"!==a.type.kind&&Xe(a)){var l=new ke;try{a=new ve(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0)}return void 0===t?this.error(\"'undefined' value invalid. Use null instead.\"):\"object\"==typeof t?this.error('Bare objects invalid. Use [\"literal\", {...}] instead.'):this.error(\"Expected an array, but found \"+typeof t+\" instead.\")},We.prototype.concat=function(t,e,r){var n=\"number\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new We(this.registry,n,e||null,i,this.errors)},We.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\"\"+this.key+e.map((function(t){return\"[\"+t+\"]\"})).join(\"\");this.errors.push(new jt(n,t))},We.prototype.checkSubtype=function(t,e){var r=ee(t,e);return r&&this.error(r),r};var Ke=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n<i.length;n+=1){var a=i[n],o=a[0],s=a[1];this.labels.push(o),this.outputs.push(s)}};function $e(t,e,r){return t*(1-r)+e*r}Ke.parse=function(t,e){if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=[],i=null;e.expectedType&&\"value\"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],l=a,u=a+1;if(\"number\"!=typeof o)return e.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',l);var c=e.parse(s,u,i);if(!c)return null;i=i||c.type,n.push([o,c])}return new Ke(i,r,n)},Ke.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[Je(e,n)].evaluate(t)},Ke.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ke.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},Ke.prototype.serialize=function(){for(var t=[\"step\",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Qe=Object.freeze({__proto__:null,number:$e,color:function(t,e,r){return new oe($e(t.r,e.r,r),$e(t.g,e.g,r),$e(t.b,e.b,r),$e(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return $e(t,e[n],r)}))}}),tr=.95047,er=1,rr=1.08883,nr=4/29,ir=6/29,ar=3*ir*ir,or=ir*ir*ir,sr=Math.PI/180,lr=180/Math.PI;function ur(t){return t>or?Math.pow(t,1/3):t/ar+nr}function cr(t){return t>ir?t*t*t:ar*(t-nr)}function fr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function hr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function pr(t){var e=hr(t.r),r=hr(t.g),n=hr(t.b),i=ur((.4124564*e+.3575761*r+.1804375*n)/tr),a=ur((.2126729*e+.7151522*r+.072175*n)/er);return{l:116*a-16,a:500*(i-a),b:200*(a-ur((.0193339*e+.119192*r+.9503041*n)/rr)),alpha:t.a}}function dr(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=er*cr(e),r=tr*cr(r),n=rr*cr(n),new oe(fr(3.2404542*r-1.5371385*e-.4985314*n),fr(-.969266*r+1.8760108*e+.041556*n),fr(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function vr(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var gr={forward:pr,reverse:dr,interpolate:function(t,e,r){return{l:$e(t.l,e.l,r),a:$e(t.a,e.a,r),b:$e(t.b,e.b,r),alpha:$e(t.alpha,e.alpha,r)}}},yr={forward:function(t){var e=pr(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*lr;return{h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*sr,r=t.c;return dr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:vr(t.h,e.h,r),c:$e(t.c,e.c,r),l:$e(t.l,e.l,r),alpha:$e(t.alpha,e.alpha,r)}}},mr=Object.freeze({__proto__:null,lab:gr,hcl:yr}),xr=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1];this.labels.push(l),this.outputs.push(u)}};function br(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}xr.interpolationFactor=function(t,e,r,i){var a=0;if(\"exponential\"===t.name)a=br(e,t.base,r,i);else if(\"linear\"===t.name)a=br(e,1,r,i);else if(\"cubic-bezier\"===t.name){var o=t.controlPoints;a=new n(o[0],o[1],o[2],o[3]).solve(br(e,1,r,i))}return a},xr.parse=function(t,e){var r=t[0],n=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error(\"Expected an interpolation type expression.\",1);if(\"linear\"===n[0])n={name:\"linear\"};else if(\"exponential\"===n[0]){var o=n[1];if(\"number\"!=typeof o)return e.error(\"Exponential interpolation requires a numeric base.\",1,1);n={name:\"exponential\",base:o}}else{if(\"cubic-bezier\"!==n[0])return e.error(\"Unknown interpolation type \"+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some((function(t){return\"number\"!=typeof t||t<0||t>1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n={name:\"cubic-bezier\",controlPoints:s}}if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");if(!(i=e.parse(i,2,Ht)))return null;var l=[],u=null;\"interpolate-hcl\"===r||\"interpolate-lab\"===r?u=Zt:e.expectedType&&\"value\"!==e.expectedType.kind&&(u=e.expectedType);for(var c=0;c<a.length;c+=2){var f=a[c],h=a[c+1],p=c+3,d=c+4;if(\"number\"!=typeof f)return e.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=f)return e.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',p);var v=e.parse(h,d,u);if(!v)return null;u=u||v.type,l.push([f,v])}return\"number\"===u.kind||\"color\"===u.kind||\"array\"===u.kind&&\"number\"===u.itemType.kind&&\"number\"==typeof u.N?new xr(u,r,n,i,l):e.error(\"Type \"+Qt(u)+\" is not interpolatable.\")},xr.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=Je(e,n),o=e[a],s=e[a+1],l=xr.interpolationFactor(this.interpolation,n,o,s),u=r[a].evaluate(t),c=r[a+1].evaluate(t);return\"interpolate\"===this.operator?Qe[this.type.kind.toLowerCase()](u,c,l):\"interpolate-hcl\"===this.operator?yr.reverse(yr.interpolate(yr.forward(u),yr.forward(c),l)):gr.reverse(gr.interpolate(gr.forward(u),gr.forward(c),l))},xr.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},xr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))},xr.prototype.serialize=function(){var t;t=\"linear\"===this.interpolation.name?[\"linear\"]:\"exponential\"===this.interpolation.name?1===this.interpolation.base?[\"linear\"]:[\"exponential\",this.interpolation.base]:[\"cubic-bezier\"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var _r=function(t,e){this.type=t,this.args=e};_r.parse=function(t,e){if(t.length<2)return e.error(\"Expectected at least one argument.\");var r=null,n=e.expectedType;n&&\"value\"!==n.kind&&(r=n);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=o[a],l=e.parse(s,1+i.length,r,void 0,{typeAnnotation:\"omit\"});if(!l)return null;r=r||l.type,i.push(l)}var u=n&&i.some((function(t){return ee(n,t.type)}));return new _r(u?Wt:r,i)},_r.prototype.evaluate=function(t){for(var e,r=null,n=0,i=0,a=this.args;i<a.length&&(n++,(r=a[i].evaluate(t))&&r instanceof ce&&!r.available&&(e||(e=r.name),r=null,n===this.args.length&&(r=e)),null===r);i+=1);return r},_r.prototype.eachChild=function(t){this.args.forEach(t)},_r.prototype.outputDefined=function(){return this.args.every((function(t){return t.outputDefined()}))},_r.prototype.serialize=function(){var t=[\"coalesce\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var wr=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};wr.prototype.evaluate=function(t){return this.result.evaluate(t)},wr.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},wr.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found \"+(t.length-1)+\" instead.\");for(var r=[],n=1;n<t.length-1;n+=2){var i=t[n];if(\"string\"!=typeof i)return e.error(\"Expected string, but found \"+typeof i+\" instead.\",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\"Variable names must contain only alphanumeric characters or '_'.\",n);var a=e.parse(t[n+1],n+1);if(!a)return null;r.push([i,a])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new wr(r,o):null},wr.prototype.outputDefined=function(){return this.result.outputDefined()},wr.prototype.serialize=function(){for(var t=[\"let\"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t.push(i,a.serialize())}return t.push(this.result.serialize()),t};var Tr=function(t,e,r){this.type=t,this.index=e,this.input=r};Tr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Ht),n=e.parse(t[2],2,$t(e.expectedType||Wt));if(!r||!n)return null;var i=n.type;return new Tr(i.itemType,r,n)},Tr.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new ge(\"Array index out of bounds: \"+e+\" < 0.\");if(e>=r.length)throw new ge(\"Array index out of bounds: \"+e+\" > \"+(r.length-1)+\".\");if(e!==Math.floor(e))throw new ge(\"Array index must be an integer, but found \"+e+\" instead.\");return r[e]},Tr.prototype.eachChild=function(t){t(this.index),t(this.input)},Tr.prototype.outputDefined=function(){return!1},Tr.prototype.serialize=function(){return[\"at\",this.index.serialize(),this.input.serialize()]};var kr=function(t,e){this.type=Gt,this.needle=t,this.haystack=e};kr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);return r&&n?re(r.type,[Gt,qt,Ht,Vt,Wt])?new kr(r,n):e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Qt(r.type)+\" instead\"):null},kr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!r)return!1;if(!ne(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ge(\"Expected first argument to be of type boolean, string, number or null, but found \"+Qt(pe(e))+\" instead.\");if(!ne(r,[\"string\",\"array\"]))throw new ge(\"Expected second argument to be of type array or string, but found \"+Qt(pe(r))+\" instead.\");return r.indexOf(e)>=0},kr.prototype.eachChild=function(t){t(this.needle),t(this.haystack)},kr.prototype.outputDefined=function(){return!0},kr.prototype.serialize=function(){return[\"in\",this.needle.serialize(),this.haystack.serialize()]};var Ar=function(t,e,r){this.type=Ht,this.needle=t,this.haystack=e,this.fromIndex=r};Ar.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Wt);if(!r||!n)return null;if(!re(r.type,[Gt,qt,Ht,Vt,Wt]))return e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Qt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Ar(r,n,i):null}return new Ar(r,n)},Ar.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!ne(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ge(\"Expected first argument to be of type boolean, string, number or null, but found \"+Qt(pe(e))+\" instead.\");if(!ne(r,[\"string\",\"array\"]))throw new ge(\"Expected second argument to be of type array or string, but found \"+Qt(pe(r))+\" instead.\");if(this.fromIndex){var n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},Ar.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)},Ar.prototype.outputDefined=function(){return!1},Ar.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return[\"index-of\",this.needle.serialize(),this.haystack.serialize(),t]}return[\"index-of\",this.needle.serialize(),this.haystack.serialize()]};var Mr=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a};Mr.parse=function(t,e){if(t.length<5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=1)return e.error(\"Expected an even number of arguments.\");var r,n;e.expectedType&&\"value\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var u=e.concat(o);if(0===s.length)return u.error(\"Expected at least one branch label.\");for(var c=0,f=s;c<f.length;c+=1){var h=f[c];if(\"number\"!=typeof h&&\"string\"!=typeof h)return u.error(\"Branch labels must be numbers or strings.\");if(\"number\"==typeof h&&Math.abs(h)>Number.MAX_SAFE_INTEGER)return u.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"==typeof h&&Math.floor(h)!==h)return u.error(\"Numeric branch labels must be integer values.\");if(r){if(u.checkSubtype(r,pe(h)))return null}else r=pe(h);if(void 0!==i[String(h)])return u.error(\"Branch labels must be unique.\");i[String(h)]=a.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,a.push(p)}var d=e.parse(t[1],1,Wt);if(!d)return null;var v=e.parse(t[t.length-1],t.length-1,n);return v?\"value\"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new Mr(r,n,d,i,a,v):null},Mr.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(pe(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Mr.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Mr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},Mr.prototype.serialize=function(){for(var t=this,e=[\"match\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(f=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[f][1].push(o)}for(var s=function(e){return\"number\"===t.inputType.kind?Number(e):e},l=0,u=r;l<u.length;l+=1){var c=u[l],f=c[0],h=c[1];1===h.length?e.push(s(h[0])):e.push(h.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var Sr=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};Sr.parse=function(t,e){if(t.length<4)return e.error(\"Expected at least 3 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=0)return e.error(\"Expected an odd number of arguments.\");var r;e.expectedType&&\"value\"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,Gt);if(!a)return null;var o=e.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Sr(r,n,s):null},Sr.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];if(i.evaluate(t))return a.evaluate(t)}return this.otherwise.evaluate(t)},Sr.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t(i),t(a)}t(this.otherwise)},Sr.prototype.outputDefined=function(){return this.branches.every((function(t){return t[0],t[1].outputDefined()}))&&this.otherwise.outputDefined()},Sr.prototype.serialize=function(){var t=[\"case\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var Er=function(t,e,r,n){this.type=t,this.input=e,this.beginIndex=r,this.endIndex=n};function Lr(t,e){return\"==\"===t||\"!=\"===t?\"boolean\"===e.kind||\"string\"===e.kind||\"number\"===e.kind||\"null\"===e.kind||\"value\"===e.kind:\"string\"===e.kind||\"number\"===e.kind||\"value\"===e.kind}function Cr(t,e,r,n){return 0===n.compare(e,r)}function Pr(t,e,r){var n=\"==\"!==t&&\"!=\"!==t;return function(){function i(t,e,r){this.type=Gt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument=\"value\"===t.type.kind||\"value\"===e.type.kind}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error(\"Expected two or three arguments.\");var r=t[0],a=e.parse(t[1],1,Wt);if(!a)return null;if(!Lr(r,a.type))return e.concat(1).error('\"'+r+\"\\\" comparisons are not supported for type '\"+Qt(a.type)+\"'.\");var o=e.parse(t[2],2,Wt);if(!o)return null;if(!Lr(r,o.type))return e.concat(2).error('\"'+r+\"\\\" comparisons are not supported for type '\"+Qt(o.type)+\"'.\");if(a.type.kind!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot compare types '\"+Qt(a.type)+\"' and '\"+Qt(o.type)+\"'.\");n&&(\"value\"===a.type.kind&&\"value\"!==o.type.kind?a=new me(o.type,[a]):\"value\"!==a.type.kind&&\"value\"===o.type.kind&&(o=new me(a.type,[o])));var s=null;if(4===t.length){if(\"string\"!==a.type.kind&&\"string\"!==o.type.kind&&\"value\"!==a.type.kind&&\"value\"!==o.type.kind)return e.error(\"Cannot use collator to compare non-string types.\");if(!(s=e.parse(t[3],3,Xt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){var s=pe(a),l=pe(o);if(s.kind!==l.kind||\"string\"!==s.kind&&\"number\"!==s.kind)throw new ge('Expected arguments for \"'+t+'\" to be (string, string) or (number, number), but found ('+s.kind+\", \"+l.kind+\") instead.\")}if(this.collator&&!n&&this.hasUntypedArgument){var u=pe(a),c=pe(o);if(\"string\"!==u.kind||\"string\"!==c.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},i.prototype.outputDefined=function(){return!0},i.prototype.serialize=function(){var e=[t];return this.eachChild((function(t){e.push(t.serialize())})),e},i}()}Er.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Wt),n=e.parse(t[2],2,Ht);if(!r||!n)return null;if(!re(r.type,[$t(Wt),qt,Wt]))return e.error(\"Expected first argument to be of type array or string, but found \"+Qt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ht);return i?new Er(r.type,r,n,i):null}return new Er(r.type,r,n)},Er.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!ne(e,[\"string\",\"array\"]))throw new ge(\"Expected first argument to be of type array or string, but found \"+Qt(pe(e))+\" instead.\");if(this.endIndex){var n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},Er.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)},Er.prototype.outputDefined=function(){return!1},Er.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return[\"slice\",this.input.serialize(),this.beginIndex.serialize(),t]}return[\"slice\",this.input.serialize(),this.beginIndex.serialize()]};var Or=Pr(\"==\",(function(t,e,r){return e===r}),Cr),Ir=Pr(\"!=\",(function(t,e,r){return e!==r}),(function(t,e,r,n){return!Cr(0,e,r,n)})),Dr=Pr(\"<\",(function(t,e,r){return e<r}),(function(t,e,r,n){return n.compare(e,r)<0})),zr=Pr(\">\",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),Rr=Pr(\"<=\",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),Fr=Pr(\">=\",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),Br=function(t,e,r,n,i){this.type=qt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i};Br.parse=function(t,e){if(3!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=t[2];if(\"object\"!=typeof n||Array.isArray(n))return e.error(\"NumberFormat options argument must be an object.\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,qt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,qt)))return null;var o=null;if(n[\"min-fraction-digits\"]&&!(o=e.parse(n[\"min-fraction-digits\"],1,Ht)))return null;var s=null;return n[\"max-fraction-digits\"]&&!(s=e.parse(n[\"max-fraction-digits\"],1,Ht))?null:new Br(r,i,a,o,s)},Br.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Br.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},Br.prototype.outputDefined=function(){return!1},Br.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\"min-fraction-digits\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\"max-fraction-digits\"]=this.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var Nr=function(t){this.type=Ht,this.input=t};Nr.parse=function(t,e){if(2!==t.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1);return r?\"array\"!==r.type.kind&&\"string\"!==r.type.kind&&\"value\"!==r.type.kind?e.error(\"Expected argument of type string or array, but found \"+Qt(r.type)+\" instead.\"):new Nr(r):null},Nr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\"string\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ge(\"Expected value to be of type string or array, but found \"+Qt(pe(e))+\" instead.\")},Nr.prototype.eachChild=function(t){t(this.input)},Nr.prototype.outputDefined=function(){return!1},Nr.prototype.serialize=function(){var t=[\"length\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var jr={\"==\":Or,\"!=\":Ir,\">\":zr,\"<\":Dr,\">=\":Fr,\"<=\":Rr,array:me,at:Tr,boolean:me,case:Sr,coalesce:_r,collator:Me,format:xe,image:be,in:kr,\"index-of\":Ar,interpolate:xr,\"interpolate-hcl\":xr,\"interpolate-lab\":xr,length:Nr,let:wr,literal:ve,match:Mr,number:me,\"number-format\":Br,object:me,slice:Er,step:Ke,string:me,\"to-boolean\":we,\"to-color\":we,\"to-number\":we,\"to-string\":we,var:Ye,within:He};function Ur(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=fe(r,n,i,o);if(s)throw new ge(s);return new oe(r/255*o,n/255*o,i/255*o,o)}function Vr(t,e){return t in e}function Hr(t,e){var r=e[t];return void 0===r?null:r}function qr(t){return{type:t}}function Gr(t){return{result:\"success\",value:t}}function Zr(t){return{result:\"error\",value:t}}function Yr(t){return\"data-driven\"===t[\"property-type\"]||\"cross-faded-data-driven\"===t[\"property-type\"]}function Wr(t){return!!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1}function Xr(t){return!!t.expression&&t.expression.interpolated}function Jr(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null===t?\"null\":typeof t}function Kr(t){return\"object\"==typeof t&&null!==t&&!Array.isArray(t)}function $r(t){return t}function Qr(t,e){var r,n,i,a=\"color\"===e.type,o=t.stops&&\"object\"==typeof t.stops[0][0],s=o||void 0!==t.property,l=o||!s,u=t.type||(Xr(e)?\"exponential\":\"interval\");if(a&&((t=Ft({},t)).stops&&(t.stops=t.stops.map((function(t){return[t[0],oe.parse(t[1])]}))),t.default?t.default=oe.parse(t.default):t.default=oe.parse(e.default)),t.colorSpace&&\"rgb\"!==t.colorSpace&&!mr[t.colorSpace])throw new Error(\"Unknown color space: \"+t.colorSpace);if(\"exponential\"===u)r=nn;else if(\"interval\"===u)r=rn;else if(\"categorical\"===u){r=en,n=Object.create(null);for(var c=0,f=t.stops;c<f.length;c+=1){var h=f[c];n[h[0]]=h[1]}i=typeof t.stops[0][0]}else{if(\"identity\"!==u)throw new Error('Unknown function type \"'+u+'\"');r=an}if(o){for(var p={},d=[],v=0;v<t.stops.length;v++){var g=t.stops[v],y=g[0].zoom;void 0===p[y]&&(p[y]={zoom:y,type:t.type,property:t.property,default:t.default,stops:[]},d.push(y)),p[y].stops.push([g[0].value,g[1]])}for(var m=[],x=0,b=d;x<b.length;x+=1){var _=b[x];m.push([p[_].zoom,Qr(p[_],e)])}var w={name:\"linear\"};return{kind:\"composite\",interpolationType:w,interpolationFactor:xr.interpolationFactor.bind(void 0,w),zoomStops:m.map((function(t){return t[0]})),evaluate:function(r,n){var i=r.zoom;return nn({stops:m,base:t.base},e,i).evaluate(i,n)}}}if(l){var T=\"exponential\"===u?{name:\"exponential\",base:void 0!==t.base?t.base:1}:null;return{kind:\"camera\",interpolationType:T,interpolationFactor:xr.interpolationFactor.bind(void 0,T),zoomStops:t.stops.map((function(t){return t[0]})),evaluate:function(a){var o=a.zoom;return r(t,e,o,n,i)}}}return{kind:\"source\",evaluate:function(a,o){var s=o&&o.properties?o.properties[t.property]:void 0;return void 0===s?tn(t.default,e.default):r(t,e,s,n,i)}}}function tn(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function en(t,e,r,n,i){return tn(typeof r===i?n[r]:void 0,t.default,e.default)}function rn(t,e,r){if(\"number\"!==Jr(r))return tn(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=Je(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function nn(t,e,r){var n=void 0!==t.base?t.base:1;if(\"number\"!==Jr(r))return tn(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=Je(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],u=Qe[e.type]||$r;if(t.colorSpace&&\"rgb\"!==t.colorSpace){var c=mr[t.colorSpace];u=function(t,e){return c.reverse(c.interpolate(c.forward(t),c.forward(e),o))}}return\"function\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return u(r,n,o)}}:u(s,l,o)}function an(t,e,r){return\"color\"===e.type?r=oe.parse(r):\"formatted\"===e.type?r=ue.fromString(r.toString()):\"resolvedImage\"===e.type?r=ce.fromString(r.toString()):Jr(r)===e.type||\"enum\"===e.type&&e.values[r]||(r=void 0),tn(r,t.default,e.default)}Ae.register(jr,{error:[{kind:\"error\"},[qt],function(t,e){var r=e[0];throw new ge(r.evaluate(t))}],typeof:[qt,[Wt],function(t,e){return Qt(pe(e[0].evaluate(t)))}],\"to-rgba\":[$t(Ht,4),[Zt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Zt,[Ht,Ht,Ht],Ur],rgba:[Zt,[Ht,Ht,Ht,Ht],Ur],has:{type:Gt,overloads:[[[qt],function(t,e){return Vr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Vr(r.evaluate(t),n.evaluate(t))}]]},get:{type:Wt,overloads:[[[qt],function(t,e){return Hr(e[0].evaluate(t),t.properties())}],[[qt,Yt],function(t,e){var r=e[0],n=e[1];return Hr(r.evaluate(t),n.evaluate(t))}]]},\"feature-state\":[Wt,[qt],function(t,e){return Hr(e[0].evaluate(t),t.featureState||{})}],properties:[Yt,[],function(t){return t.properties()}],\"geometry-type\":[qt,[],function(t){return t.geometryType()}],id:[Wt,[],function(t){return t.id()}],zoom:[Ht,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Ht,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Ht,[],function(t){return t.globals.lineProgress||0}],accumulated:[Wt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\"+\":[Ht,qr(Ht),function(t,e){for(var r=0,n=0,i=e;n<i.length;n+=1)r+=i[n].evaluate(t);return r}],\"*\":[Ht,qr(Ht),function(t,e){for(var r=1,n=0,i=e;n<i.length;n+=1)r*=i[n].evaluate(t);return r}],\"-\":{type:Ht,overloads:[[[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[Ht],function(t,e){return-e[0].evaluate(t)}]]},\"/\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],\"%\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[Ht,[],function(){return Math.LN2}],pi:[Ht,[],function(){return Math.PI}],e:[Ht,[],function(){return Math.E}],\"^\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[Ht,[Ht],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[Ht,[Ht],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[Ht,[Ht],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[Ht,[Ht],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[Ht,[Ht],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[Ht,[Ht],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[Ht,[Ht],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[Ht,qr(Ht),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Ht,qr(Ht),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Ht,[Ht],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[Ht,[Ht],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ht,[Ht],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[Ht,[Ht],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],\"filter-==\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],\"filter-id-==\":[Gt,[Wt],function(t,e){var r=e[0];return t.id()===r.value}],\"filter-type-==\":[Gt,[qt],function(t,e){var r=e[0];return t.geometryType()===r.value}],\"filter-<\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<a}],\"filter-id-<\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<i}],\"filter->\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\"filter-id->\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\"filter-<=\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\"filter-id-<=\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\"filter->=\":[Gt,[qt,Wt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\"filter-id->=\":[Gt,[Wt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\"filter-has\":[Gt,[Wt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[Gt,[],function(t){return null!==t.id()&&void 0!==t.id()}],\"filter-type-in\":[Gt,[$t(qt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\"filter-id-in\":[Gt,[$t(Wt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\"filter-in-small\":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\"filter-in-large\":[Gt,[qt,$t(Wt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Gt,overloads:[[[Gt,Gt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[qr(Gt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},\"!\":[Gt,[Gt],function(t,e){return!e[0].evaluate(t)}],\"is-supported-script\":[Gt,[qt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[qt,[qt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[qt,qr(Wt),function(t,e){return e.map((function(e){return de(e.evaluate(t))})).join(\"\")}],\"resolved-locale\":[qt,[Xt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var on=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new ke,this._defaultValue=e?function(t){return\"color\"===t.type&&Kr(t.default)?new oe(0,0,0,0):\"color\"===t.type?oe.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&\"enum\"===e.type?e.values:null};function sn(t){return Array.isArray(t)&&t.length>0&&\"string\"==typeof t[0]&&t[0]in jr}function ln(t,e){var r=new We(jr,[],e?function(t){var e={color:Zt,string:qt,number:Ht,enum:qt,boolean:Gt,formatted:Jt,resolvedImage:Kt};return\"array\"===t.type?$t(e[t.value]||Wt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\"string\"===e.type?{typeAnnotation:\"coerce\"}:void 0);return n?Gr(new on(n,e)):Zr(r.errors)}on.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},on.prototype.evaluate=function(t,e,r,n,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||\"number\"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new ge(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(o)+\" instead.\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\"undefined\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var un=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\"constant\"!==t&&!Ge(e.expression)};un.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},un.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var cn=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=\"camera\"!==t&&!Ge(e.expression),this.interpolationType=n};function fn(t,e){if(\"error\"===(t=ln(t,e)).result)return t;var r=t.value.expression,n=qe(r);if(!n&&!Yr(e))return Zr([new jt(\"\",\"data expressions not supported\")]);var i=Ze(r,[\"zoom\"]);if(!i&&!Wr(e))return Zr([new jt(\"\",\"zoom expressions not supported\")]);var a=pn(r);if(!a&&!i)return Zr([new jt(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);if(a instanceof jt)return Zr([a]);if(a instanceof xr&&!Xr(e))return Zr([new jt(\"\",'\"interpolate\" expressions cannot be used with this property')]);if(!a)return Gr(new un(n?\"constant\":\"source\",t.value));var o=a instanceof xr?a.interpolation:void 0;return Gr(new cn(n?\"camera\":\"composite\",t.value,a.labels,o))}cn.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},cn.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)},cn.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?xr.interpolationFactor(this.interpolationType,t,e,r):0};var hn=function(t,e){this._parameters=t,this._specification=e,Ft(this,Qr(this._parameters,this._specification))};function pn(t){var e=null;if(t instanceof wr)e=pn(t.result);else if(t instanceof _r)for(var r=0,n=t.args;r<n.length;r+=1){var i=n[r];if(e=pn(i))break}else(t instanceof Ke||t instanceof xr)&&t.input instanceof Ae&&\"zoom\"===t.input.name&&(e=t);return e instanceof jt||t.eachChild((function(t){var r=pn(t);r instanceof jt?e=r:!e&&r?e=new jt(\"\",'\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'):e&&r&&e!==r&&(e=new jt(\"\",'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.'))})),e}function dn(t){var e=t.key,r=t.value,n=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],l=Jr(r);if(\"object\"!==l)return[new zt(e,r,\"object expected, \"+l+\" found\")];for(var u in r){var c=u.split(\".\")[0],f=n[c]||n[\"*\"],h=void 0;if(i[c])h=i[c];else if(n[c])h=Un;else if(i[\"*\"])h=i[\"*\"];else{if(!n[\"*\"]){s.push(new zt(e,r[u],'unknown property \"'+u+'\"'));continue}h=Un}s=s.concat(h({key:(e?e+\".\":e)+u,value:r[u],valueSpec:f,style:a,styleSpec:o,object:r,objectKey:u},r))}for(var p in n)i[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new zt(e,r,'missing required property \"'+p+'\"'));return s}function vn(t){var e=t.value,r=t.valueSpec,n=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||Un;if(\"array\"!==Jr(e))return[new zt(a,e,\"array expected, \"+Jr(e)+\" found\")];if(r.length&&e.length!==r.length)return[new zt(a,e,\"array length \"+r.length+\" expected, length \"+e.length+\" found\")];if(r[\"min-length\"]&&e.length<r[\"min-length\"])return[new zt(a,e,\"array length at least \"+r[\"min-length\"]+\" expected, length \"+e.length+\" found\")];var s={type:r.value,values:r.values};i.$version<7&&(s.function=r.function),\"object\"===Jr(r.value)&&(s=r.value);for(var l=[],u=0;u<e.length;u++)l=l.concat(o({array:e,arrayIndex:u,value:e[u],valueSpec:s,style:n,styleSpec:i,key:a+\"[\"+u+\"]\"}));return l}function gn(t){var e=t.key,r=t.value,n=t.valueSpec,i=Jr(r);return\"number\"===i&&r!=r&&(i=\"NaN\"),\"number\"!==i?[new zt(e,r,\"number expected, \"+i+\" found\")]:\"minimum\"in n&&r<n.minimum?[new zt(e,r,r+\" is less than the minimum value \"+n.minimum)]:\"maximum\"in n&&r>n.maximum?[new zt(e,r,r+\" is greater than the maximum value \"+n.maximum)]:[]}function yn(t){var e,r,n,i=t.valueSpec,a=Bt(t.value.type),o={},s=\"categorical\"!==a&&void 0===t.value.property,l=!s,u=\"array\"===Jr(t.value.stops)&&\"array\"===Jr(t.value.stops[0])&&\"object\"===Jr(t.value.stops[0][0]),c=dn({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"===a)return[new zt(t.key,t.value,'identity function may not have a \"stops\" property')];var e=[],r=t.value;return e=e.concat(vn({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:f})),\"array\"===Jr(r)&&0===r.length&&e.push(new zt(t.key,r,\"array must have at least one stop\")),e},default:function(t){return Un({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return\"identity\"===a&&s&&c.push(new zt(t.key,t.value,'missing required property \"property\"')),\"identity\"===a||t.value.stops||c.push(new zt(t.key,t.value,'missing required property \"stops\"')),\"exponential\"===a&&t.valueSpec.expression&&!Xr(t.valueSpec)&&c.push(new zt(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(l&&!Yr(t.valueSpec)?c.push(new zt(t.key,t.value,\"property functions not supported\")):s&&!Wr(t.valueSpec)&&c.push(new zt(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!==a&&!u||void 0!==t.value.property||c.push(new zt(t.key,t.value,'\"property\" property is required')),c;function f(t){var e=[],a=t.value,s=t.key;if(\"array\"!==Jr(a))return[new zt(s,a,\"array expected, \"+Jr(a)+\" found\")];if(2!==a.length)return[new zt(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(u){if(\"object\"!==Jr(a[0]))return[new zt(s,a,\"object expected, \"+Jr(a[0])+\" found\")];if(void 0===a[0].zoom)return[new zt(s,a,\"object stop key must have zoom\")];if(void 0===a[0].value)return[new zt(s,a,\"object stop key must have value\")];if(n&&n>Bt(a[0].zoom))return[new zt(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Bt(a[0].zoom)!==n&&(n=Bt(a[0].zoom),r=void 0,o={}),e=e.concat(dn({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:gn,value:h}}))}else e=e.concat(h({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return sn(Nt(a[1]))?e.concat([new zt(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(Un({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=Jr(t.value),l=Bt(t.value),u=null!==t.value?t.value:n;if(e){if(s!==e)return[new zt(t.key,u,s+\" stop domain type must match previous stop domain type \"+e)]}else e=s;if(\"number\"!==s&&\"string\"!==s&&\"boolean\"!==s)return[new zt(t.key,u,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!==s&&\"categorical\"!==a){var c=\"number expected, \"+s+\" found\";return Yr(i)&&void 0===a&&(c+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new zt(t.key,u,c)]}return\"categorical\"!==a||\"number\"!==s||isFinite(l)&&Math.floor(l)===l?\"categorical\"!==a&&\"number\"===s&&void 0!==r&&l<r?[new zt(t.key,u,\"stop domain values must appear in ascending order\")]:(r=l,\"categorical\"===a&&l in o?[new zt(t.key,u,\"stop domain values must be unique\")]:(o[l]=!0,[])):[new zt(t.key,u,\"integer expected, found \"+l)]}}function mn(t){var e=(\"property\"===t.expressionContext?fn:ln)(Nt(t.value),t.valueSpec);if(\"error\"===e.result)return e.value.map((function(e){return new zt(\"\"+t.key+e.key,t.value,e.message)}));var r=e.value.expression||e.value._styleExpression.expression;if(\"property\"===t.expressionContext&&\"text-font\"===t.propertyKey&&!r.outputDefined())return[new zt(t.key,t.value,'Invalid data expression for \"'+t.propertyKey+'\". Output values must be contained as literals within the expression.')];if(\"property\"===t.expressionContext&&\"layout\"===t.propertyType&&!Ge(r))return[new zt(t.key,t.value,'\"feature-state\" data expressions are not supported with layout properties.')];if(\"filter\"===t.expressionContext&&!Ge(r))return[new zt(t.key,t.value,'\"feature-state\" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf(\"cluster\")){if(!Ze(r,[\"zoom\",\"feature-state\"]))return[new zt(t.key,t.value,'\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];if(\"cluster-initial\"===t.expressionContext&&!qe(r))return[new zt(t.key,t.value,\"Feature data expressions are not supported with initial expression part of cluster properties.\")]}return[]}function xn(t){var e=t.key,r=t.value,n=t.valueSpec,i=[];return Array.isArray(n.values)?-1===n.values.indexOf(Bt(r))&&i.push(new zt(e,r,\"expected one of [\"+n.values.join(\", \")+\"], \"+JSON.stringify(r)+\" found\")):-1===Object.keys(n.values).indexOf(Bt(r))&&i.push(new zt(e,r,\"expected one of [\"+Object.keys(n.values).join(\", \")+\"], \"+JSON.stringify(r)+\" found\")),i}function bn(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case\"has\":return t.length>=2&&\"$id\"!==t[1]&&\"$type\"!==t[1];case\"in\":return t.length>=3&&(\"string\"!=typeof t[1]||Array.isArray(t[2]));case\"!in\":case\"!has\":case\"none\":return!1;case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!bn(n)&&\"boolean\"!=typeof n)return!1}return!0;default:return!0}}hn.deserialize=function(t){return new hn(t._parameters,t._specification)},hn.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var _n={type:\"boolean\",default:!1,transition:!1,\"property-type\":\"data-driven\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]}};function wn(t){if(null==t)return{filter:function(){return!0},needGeometry:!1};bn(t)||(t=An(t));var e=ln(t,_n);if(\"error\"===e.result)throw new Error(e.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return{filter:function(t,r,n){return e.value.evaluate(t,r,{},n)},needGeometry:kn(t)}}function Tn(t,e){return t<e?-1:t>e?1:0}function kn(t){if(!Array.isArray(t))return!1;if(\"within\"===t[0])return!0;for(var e=1;e<t.length;e++)if(kn(t[e]))return!0;return!1}function An(t){if(!t)return!0;var e,r=t[0];return t.length<=1?\"any\"!==r:\"==\"===r?Mn(t[1],t[2],\"==\"):\"!=\"===r?Ln(Mn(t[1],t[2],\"==\")):\"<\"===r||\">\"===r||\"<=\"===r||\">=\"===r?Mn(t[1],t[2],r):\"any\"===r?(e=t.slice(1),[\"any\"].concat(e.map(An))):\"all\"===r?[\"all\"].concat(t.slice(1).map(An)):\"none\"===r?[\"all\"].concat(t.slice(1).map(An).map(Ln)):\"in\"===r?Sn(t[1],t.slice(2)):\"!in\"===r?Ln(Sn(t[1],t.slice(2))):\"has\"===r?En(t[1]):\"!has\"===r?Ln(En(t[1])):\"within\"!==r||t}function Mn(t,e,r){switch(t){case\"$type\":return[\"filter-type-\"+r,e];case\"$id\":return[\"filter-id-\"+r,e];default:return[\"filter-\"+r,t,e]}}function Sn(t,e){if(0===e.length)return!1;switch(t){case\"$type\":return[\"filter-type-in\",[\"literal\",e]];case\"$id\":return[\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(Tn)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function En(t){switch(t){case\"$type\":return!0;case\"$id\":return[\"filter-has-id\"];default:return[\"filter-has\",t]}}function Ln(t){return[\"!\",t]}function Cn(t){return bn(Nt(t.value))?mn(Ft({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):Pn(t)}function Pn(t){var e=t.value,r=t.key;if(\"array\"!==Jr(e))return[new zt(r,e,\"array expected, \"+Jr(e)+\" found\")];var n,i=t.styleSpec,a=[];if(e.length<1)return[new zt(r,e,\"filter array must have at least 1 element\")];switch(a=a.concat(xn({key:r+\"[0]\",value:e[0],valueSpec:i.filter_operator,style:t.style,styleSpec:t.styleSpec})),Bt(e[0])){case\"<\":case\"<=\":case\">\":case\">=\":e.length>=2&&\"$type\"===Bt(e[1])&&a.push(new zt(r,e,'\"$type\" cannot be use with operator \"'+e[0]+'\"'));case\"==\":case\"!=\":3!==e.length&&a.push(new zt(r,e,'filter array for operator \"'+e[0]+'\" must have 3 elements'));case\"in\":case\"!in\":e.length>=2&&\"string\"!==(n=Jr(e[1]))&&a.push(new zt(r+\"[1]\",e[1],\"string expected, \"+n+\" found\"));for(var o=2;o<e.length;o++)n=Jr(e[o]),\"$type\"===Bt(e[1])?a=a.concat(xn({key:r+\"[\"+o+\"]\",value:e[o],valueSpec:i.geometry_type,style:t.style,styleSpec:t.styleSpec})):\"string\"!==n&&\"number\"!==n&&\"boolean\"!==n&&a.push(new zt(r+\"[\"+o+\"]\",e[o],\"string, number, or boolean expected, \"+n+\" found\"));break;case\"any\":case\"all\":case\"none\":for(var s=1;s<e.length;s++)a=a.concat(Pn({key:r+\"[\"+s+\"]\",value:e[s],style:t.style,styleSpec:t.styleSpec}));break;case\"has\":case\"!has\":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for \"'+e[0]+'\" operator must have 2 elements')):\"string\"!==n&&a.push(new zt(r+\"[1]\",e[1],\"string expected, \"+n+\" found\"));break;case\"within\":n=Jr(e[1]),2!==e.length?a.push(new zt(r,e,'filter array for \"'+e[0]+'\" operator must have 2 elements')):\"object\"!==n&&a.push(new zt(r+\"[1]\",e[1],\"object expected, \"+n+\" found\"))}return a}function On(t,e){var r=t.key,n=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+\"_\"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if(\"paint\"===e&&l&&s[l[1]]&&s[l[1]].transition)return Un({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var u,c=t.valueSpec||s[o];if(!c)return[new zt(r,a,'unknown property \"'+o+'\"')];if(\"string\"===Jr(a)&&Yr(c)&&!c.tokens&&(u=/^{([^}]+)}$/.exec(a)))return[new zt(r,a,'\"'+o+'\" does not support interpolation syntax\\nUse an identity property function instead: `{ \"type\": \"identity\", \"property\": '+JSON.stringify(u[1])+\" }`.\")];var f=[];return\"symbol\"===t.layerType&&(\"text-field\"===o&&n&&!n.glyphs&&f.push(new zt(r,a,'use of \"text-field\" requires a style \"glyphs\" property')),\"text-font\"===o&&Kr(Nt(a))&&\"identity\"===Bt(a.type)&&f.push(new zt(r,a,'\"text-font\" does not support identity functions'))),f.concat(Un({key:t.key,value:a,valueSpec:c,style:n,styleSpec:i,expressionContext:\"property\",propertyType:e,propertyKey:o}))}function In(t){return On(t,\"paint\")}function Dn(t){return On(t,\"layout\")}function zn(t){var e=[],r=t.value,n=t.key,i=t.style,a=t.styleSpec;r.type||r.ref||e.push(new zt(n,r,'either \"type\" or \"ref\" is required'));var o,s=Bt(r.type),l=Bt(r.ref);if(r.id)for(var u=Bt(r.id),c=0;c<t.arrayIndex;c++){var f=i.layers[c];Bt(f.id)===u&&e.push(new zt(n,r.id,'duplicate layer id \"'+r.id+'\", previously used at line '+f.id.__line__))}if(\"ref\"in r)[\"type\",\"source\",\"source-layer\",\"filter\",\"layout\"].forEach((function(t){t in r&&e.push(new zt(n,r[t],'\"'+t+'\" is prohibited for ref layers'))})),i.layers.forEach((function(t){Bt(t.id)===l&&(o=t)})),o?o.ref?e.push(new zt(n,r.ref,\"ref cannot reference another ref layer\")):s=Bt(o.type):e.push(new zt(n,r.ref,'ref layer \"'+l+'\" not found'));else if(\"background\"!==s)if(r.source){var h=i.sources&&i.sources[r.source],p=h&&Bt(h.type);h?\"vector\"===p&&\"raster\"===s?e.push(new zt(n,r.source,'layer \"'+r.id+'\" requires a raster source')):\"raster\"===p&&\"raster\"!==s?e.push(new zt(n,r.source,'layer \"'+r.id+'\" requires a vector source')):\"vector\"!==p||r[\"source-layer\"]?\"raster-dem\"===p&&\"hillshade\"!==s?e.push(new zt(n,r.source,\"raster-dem source can only be used with layer type 'hillshade'.\")):\"line\"!==s||!r.paint||!r.paint[\"line-gradient\"]||\"geojson\"===p&&h.lineMetrics||e.push(new zt(n,r,'layer \"'+r.id+'\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new zt(n,r,'layer \"'+r.id+'\" must specify a \"source-layer\"')):e.push(new zt(n,r.source,'source \"'+r.source+'\" not found'))}else e.push(new zt(n,r,'missing required property \"source\"'));return e=e.concat(dn({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(){return[]},type:function(){return Un({key:n+\".type\",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:\"type\"})},filter:Cn,layout:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return Dn(Ft({layerType:s},t))}}})},paint:function(t){return dn({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return In(Ft({layerType:s},t))}}})}}})),e}function Rn(t){var e=t.value,r=t.key,n=Jr(e);return\"string\"!==n?[new zt(r,e,\"string expected, \"+n+\" found\")]:[]}var Fn={promoteId:function(t){var e=t.key,r=t.value;if(\"string\"===Jr(r))return Rn({key:e,value:r});var n=[];for(var i in r)n.push.apply(n,Rn({key:e+\".\"+i,value:r[i]}));return n}};function Bn(t){var e=t.value,r=t.key,n=t.styleSpec,i=t.style;if(!e.type)return[new zt(r,e,'\"type\" is required')];var a,o=Bt(e.type);switch(o){case\"vector\":case\"raster\":case\"raster-dem\":return dn({key:r,value:e,valueSpec:n[\"source_\"+o.replace(\"-\",\"_\")],style:t.style,styleSpec:n,objectElementValidators:Fn});case\"geojson\":if(a=dn({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n,objectElementValidators:Fn}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],u=l[0],c=l[1],f=\"string\"==typeof u?[u,[\"accumulated\"],[\"get\",s]]:u;a.push.apply(a,mn({key:r+\".\"+s+\".map\",value:c,expressionContext:\"cluster-map\"})),a.push.apply(a,mn({key:r+\".\"+s+\".reduce\",value:f,expressionContext:\"cluster-reduce\"}))}return a;case\"video\":return dn({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case\"image\":return dn({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case\"canvas\":return[new zt(r,null,\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\",\"source.canvas\")];default:return xn({key:r+\".type\",value:e.type,valueSpec:{values:[\"vector\",\"raster\",\"raster-dem\",\"geojson\",\"video\",\"image\"]},style:i,styleSpec:n})}}function Nn(t){var e=t.value,r=t.styleSpec,n=r.light,i=t.style,a=[],o=Jr(e);if(void 0===e)return a;if(\"object\"!==o)return a.concat([new zt(\"light\",e,\"object expected, \"+o+\" found\")]);for(var s in e){var l=s.match(/^(.*)-transition$/);a=l&&n[l[1]]&&n[l[1]].transition?a.concat(Un({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r})):n[s]?a.concat(Un({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r})):a.concat([new zt(s,e[s],'unknown property \"'+s+'\"')])}return a}var jn={\"*\":function(){return[]},array:vn,boolean:function(t){var e=t.value,r=t.key,n=Jr(e);return\"boolean\"!==n?[new zt(r,e,\"boolean expected, \"+n+\" found\")]:[]},number:gn,color:function(t){var e=t.key,r=t.value,n=Jr(r);return\"string\"!==n?[new zt(e,r,\"color expected, \"+n+\" found\")]:null===ae(r)?[new zt(e,r,'color expected, \"'+r+'\" found')]:[]},constants:Rt,enum:xn,filter:Cn,function:yn,layer:zn,object:dn,source:Bn,light:Nn,string:Rn,formatted:function(t){return 0===Rn(t).length?[]:mn(t)},resolvedImage:function(t){return 0===Rn(t).length?[]:mn(t)}};function Un(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&Kr(Bt(e))?yn(t):r.expression&&sn(Nt(e))?mn(t):r.type&&jn[r.type]?jn[r.type](t):dn(Ft({},t,{valueSpec:r.type?n[r.type]:r}))}function Vn(t){var e=t.value,r=t.key,n=Rn(t);return n.length||(-1===e.indexOf(\"{fontstack}\")&&n.push(new zt(r,e,'\"glyphs\" url must include a \"{fontstack}\" token')),-1===e.indexOf(\"{range}\")&&n.push(new zt(r,e,'\"glyphs\" url must include a \"{range}\" token'))),n}function Hn(t,e){void 0===e&&(e=Dt);var r=[];return r=r.concat(Un({key:\"\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Vn,\"*\":function(){return[]}}})),t.constants&&(r=r.concat(Rt({key:\"constants\",value:t.constants,style:t,styleSpec:e}))),qn(r)}function qn(t){return[].concat(t).sort((function(t,e){return t.line-e.line}))}function Gn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return qn(t.apply(this,e))}}Hn.source=Gn(Bn),Hn.light=Gn(Nn),Hn.layer=Gn(zn),Hn.filter=Gn(Cn),Hn.paintProperty=Gn(In),Hn.layoutProperty=Gn(Dn);var Zn=Hn,Yn=Zn.light,Wn=Zn.paintProperty,Xn=Zn.layoutProperty;function Jn(t,e){var r=!1;if(e&&e.length)for(var n=0,i=e;n<i.length;n+=1){var a=i[n];t.fire(new Ot(new Error(a.message))),r=!0}return r}var Kn=Qn,$n=3;function Qn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],e=i[1],r=i[2],this.d=e+2*r;for(var a=0;a<this.d*this.d;a++){var o=i[$n+a],s=i[$n+a+1];n.push(o===s?null:i.subarray(o,s))}var l=i[$n+n.length],u=i[$n+n.length+1];this.keys=i.subarray(l,u),this.bboxes=i.subarray(u),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var c=0;c<this.d*this.d;c++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var f=r/e*t;this.min=-f,this.max=t+f}Qn.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qn.prototype._insertReadonly=function(){throw\"Cannot insert into a GridIndex created from an ArrayBuffer.\"},Qn.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a)},Qn.prototype.query=function(t,e,r,n,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=r&&o<=n&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},Qn.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=this.cells[i];if(null!==l)for(var u=this.keys,c=this.bboxes,f=0;f<l.length;f++){var h=l[f];if(void 0===o[h]){var p=4*h;(s?s(c[p+0],c[p+1],c[p+2],c[p+3]):t<=c[p+2]&&e<=c[p+3]&&r>=c[p+0]&&n>=c[p+1])?(o[h]=!0,a.push(u[h])):o[h]=!1}}},Qn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToCellCoord(t),u=this._convertToCellCoord(e),c=this._convertToCellCoord(r),f=this._convertToCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.d*p+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(p),this._convertFromCellCoord(h+1),this._convertFromCellCoord(p+1)))&&i.call(this,t,e,r,n,d,a,o,s))return}},Qn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},Qn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Qn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=$n+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var i=new Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[$n+o]=a,i.set(s,a),a+=s.length}return i[$n+t.length]=a,i.set(this.keys,a),a+=this.keys.length,i[$n+t.length+1]=a,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var ti=self.ImageData,ei=self.ImageBitmap,ri={};function ni(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,\"_classRegistryKey\",{value:t,writeable:!1}),ri[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var ii in ni(\"Object\",Object),Kn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},Kn.deserialize=function(t){return new Kn(t.buffer)},ni(\"Grid\",Kn),ni(\"Color\",oe),ni(\"Error\",Error),ni(\"ResolvedImage\",ce),ni(\"StylePropertyFunction\",hn),ni(\"StyleExpression\",on,{omit:[\"_evaluator\"]}),ni(\"ZoomDependentExpression\",cn),ni(\"ZoomConstantExpression\",un),ni(\"CompoundExpression\",Ae,{omit:[\"_evaluate\"]}),jr)jr[ii]._classRegistryKey||ni(\"Expression_\"+ii,jr[ii]);function ai(t){return t&&\"undefined\"!=typeof ArrayBuffer&&(t instanceof ArrayBuffer||t.constructor&&\"ArrayBuffer\"===t.constructor.name)}function oi(t){return ei&&t instanceof ei}function si(t,e){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(ai(t)||oi(t))return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof ti)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],i=0,a=t;i<a.length;i+=1){var o=a[i];n.push(si(o,e))}return n}if(\"object\"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error(\"can't serialize object of unregistered class\");var u=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var c in t)if(t.hasOwnProperty(c)&&!(ri[l].omit.indexOf(c)>=0)){var f=t[c];u[c]=ri[l].shallow.indexOf(c)>=0?f:si(f,e)}t instanceof Error&&(u.message=t.message)}if(u.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return\"Object\"!==l&&(u.$name=l),u}throw new Error(\"can't serialize object of type \"+typeof t)}function li(t){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||ai(t)||oi(t)||ArrayBuffer.isView(t)||t instanceof ti)return t;if(Array.isArray(t))return t.map(li);if(\"object\"==typeof t){var e=t.$name||\"Object\",r=ri[e].klass;if(!r)throw new Error(\"can't deserialize unregistered class \"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if(\"$name\"!==o){var s=t[o];n[o]=ri[e].shallow.indexOf(o)>=0?s:li(s)}}return n}throw new Error(\"can't deserialize object of type \"+typeof t)}var ui=function(){this.first=!0};ui.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var ci={\"Latin-1 Supplement\":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\"Arabic Supplement\":function(t){return t>=1872&&t<=1919},\"Arabic Extended-A\":function(t){return t>=2208&&t<=2303},\"Hangul Jamo\":function(t){return t>=4352&&t<=4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t>=6320&&t<=6399},\"General Punctuation\":function(t){return t>=8192&&t<=8303},\"Letterlike Symbols\":function(t){return t>=8448&&t<=8527},\"Number Forms\":function(t){return t>=8528&&t<=8591},\"Miscellaneous Technical\":function(t){return t>=8960&&t<=9215},\"Control Pictures\":function(t){return t>=9216&&t<=9279},\"Optical Character Recognition\":function(t){return t>=9280&&t<=9311},\"Enclosed Alphanumerics\":function(t){return t>=9312&&t<=9471},\"Geometric Shapes\":function(t){return t>=9632&&t<=9727},\"Miscellaneous Symbols\":function(t){return t>=9728&&t<=9983},\"Miscellaneous Symbols and Arrows\":function(t){return t>=11008&&t<=11263},\"CJK Radicals Supplement\":function(t){return t>=11904&&t<=12031},\"Kangxi Radicals\":function(t){return t>=12032&&t<=12255},\"Ideographic Description Characters\":function(t){return t>=12272&&t<=12287},\"CJK Symbols and Punctuation\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\"Hangul Compatibility Jamo\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\"Bopomofo Extended\":function(t){return t>=12704&&t<=12735},\"CJK Strokes\":function(t){return t>=12736&&t<=12783},\"Katakana Phonetic Extensions\":function(t){return t>=12784&&t<=12799},\"Enclosed CJK Letters and Months\":function(t){return t>=12800&&t<=13055},\"CJK Compatibility\":function(t){return t>=13056&&t<=13311},\"CJK Unified Ideographs Extension A\":function(t){return t>=13312&&t<=19903},\"Yijing Hexagram Symbols\":function(t){return t>=19904&&t<=19967},\"CJK Unified Ideographs\":function(t){return t>=19968&&t<=40959},\"Yi Syllables\":function(t){return t>=40960&&t<=42127},\"Yi Radicals\":function(t){return t>=42128&&t<=42191},\"Hangul Jamo Extended-A\":function(t){return t>=43360&&t<=43391},\"Hangul Syllables\":function(t){return t>=44032&&t<=55215},\"Hangul Jamo Extended-B\":function(t){return t>=55216&&t<=55295},\"Private Use Area\":function(t){return t>=57344&&t<=63743},\"CJK Compatibility Ideographs\":function(t){return t>=63744&&t<=64255},\"Arabic Presentation Forms-A\":function(t){return t>=64336&&t<=65023},\"Vertical Forms\":function(t){return t>=65040&&t<=65055},\"CJK Compatibility Forms\":function(t){return t>=65072&&t<=65103},\"Small Form Variants\":function(t){return t>=65104&&t<=65135},\"Arabic Presentation Forms-B\":function(t){return t>=65136&&t<=65279},\"Halfwidth and Fullwidth Forms\":function(t){return t>=65280&&t<=65519}};function fi(t){for(var e=0,r=t;e<r.length;e+=1)if(hi(r[e].charCodeAt(0)))return!0;return!1}function hi(t){return!(746!==t&&747!==t&&(t<4352||!(ci[\"Bopomofo Extended\"](t)||ci.Bopomofo(t)||ci[\"CJK Compatibility Forms\"](t)&&!(t>=65097&&t<=65103)||ci[\"CJK Compatibility Ideographs\"](t)||ci[\"CJK Compatibility\"](t)||ci[\"CJK Radicals Supplement\"](t)||ci[\"CJK Strokes\"](t)||!(!ci[\"CJK Symbols and Punctuation\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||ci[\"CJK Unified Ideographs Extension A\"](t)||ci[\"CJK Unified Ideographs\"](t)||ci[\"Enclosed CJK Letters and Months\"](t)||ci[\"Hangul Compatibility Jamo\"](t)||ci[\"Hangul Jamo Extended-A\"](t)||ci[\"Hangul Jamo Extended-B\"](t)||ci[\"Hangul Jamo\"](t)||ci[\"Hangul Syllables\"](t)||ci.Hiragana(t)||ci[\"Ideographic Description Characters\"](t)||ci.Kanbun(t)||ci[\"Kangxi Radicals\"](t)||ci[\"Katakana Phonetic Extensions\"](t)||ci.Katakana(t)&&12540!==t||!(!ci[\"Halfwidth and Fullwidth Forms\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!ci[\"Small Form Variants\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||ci[\"Unified Canadian Aboriginal Syllabics\"](t)||ci[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||ci[\"Vertical Forms\"](t)||ci[\"Yijing Hexagram Symbols\"](t)||ci[\"Yi Syllables\"](t)||ci[\"Yi Radicals\"](t))))}function pi(t){return!(hi(t)||function(t){return!!(ci[\"Latin-1 Supplement\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||ci[\"General Punctuation\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||ci[\"Letterlike Symbols\"](t)||ci[\"Number Forms\"](t)||ci[\"Miscellaneous Technical\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||ci[\"Control Pictures\"](t)&&9251!==t||ci[\"Optical Character Recognition\"](t)||ci[\"Enclosed Alphanumerics\"](t)||ci[\"Geometric Shapes\"](t)||ci[\"Miscellaneous Symbols\"](t)&&!(t>=9754&&t<=9759)||ci[\"Miscellaneous Symbols and Arrows\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||ci[\"CJK Symbols and Punctuation\"](t)||ci.Katakana(t)||ci[\"Private Use Area\"](t)||ci[\"CJK Compatibility Forms\"](t)||ci[\"Small Form Variants\"](t)||ci[\"Halfwidth and Fullwidth Forms\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function di(t){return ci.Arabic(t)||ci[\"Arabic Supplement\"](t)||ci[\"Arabic Extended-A\"](t)||ci[\"Arabic Presentation Forms-A\"](t)||ci[\"Arabic Presentation Forms-B\"](t)}function vi(t){return t>=1424&&t<=2303||ci[\"Arabic Presentation Forms-A\"](t)||ci[\"Arabic Presentation Forms-B\"](t)}function gi(t,e){return!(!e&&vi(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||ci.Khmer(t))}function yi(t){for(var e=0,r=t;e<r.length;e+=1)if(vi(r[e].charCodeAt(0)))return!0;return!1}var mi=\"deferred\",xi=\"loading\",bi=\"loaded\",_i=\"error\",wi=null,Ti=\"unavailable\",ki=null,Ai=function(t){t&&\"string\"==typeof t&&t.indexOf(\"NetworkError\")>-1&&(Ti=_i),wi&&wi(t)};function Mi(){Si.fire(new Pt(\"pluginStateChange\",{pluginStatus:Ti,pluginURL:ki}))}var Si=new It,Ei=function(){return Ti},Li=function(){if(Ti!==mi||!ki)throw new Error(\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\");Ti=xi,Mi(),ki&&kt({url:ki},(function(t){t?Ai(t):(Ti=bi,Mi())}))},Ci={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return Ti===bi||null!=Ci.applyArabicShaping},isLoading:function(){return Ti===xi},setState:function(t){Ti=t.pluginStatus,ki=t.pluginURL},isParsed:function(){return null!=Ci.applyArabicShaping&&null!=Ci.processBidirectionalText&&null!=Ci.processStyledBidirectionalText},getPluginURL:function(){return ki}},Pi=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new ui,this.transition={})};Pi.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!gi(n[r].charCodeAt(0),e))return!1;return!0}(t,Ci.isLoaded())},Pi.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Pi.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var Oi=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Kr(t))return new hn(t,e);if(sn(t)){var r=fn(t,e);if(\"error\"===r.result)throw new Error(r.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return r.value}var n=t;return\"string\"==typeof t&&\"color\"===e.type&&(n=oe.parse(t)),{kind:\"constant\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};Oi.prototype.isDataDriven=function(){return\"source\"===this.expression.kind||\"composite\"===this.expression.kind},Oi.prototype.possiblyEvaluate=function(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var Ii=function(t){this.property=t,this.value=new Oi(t,void 0)};Ii.prototype.transitioned=function(t,e){return new zi(this.property,this.value,e,f({},t.transition,this.transition),t.now)},Ii.prototype.untransitioned=function(){return new zi(this.property,this.value,null,{},0)};var Di=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};Di.prototype.getValue=function(t){return b(this._values[t].value.value)},Di.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].value=new Oi(this._values[t].property,null===e?void 0:b(e))},Di.prototype.getTransition=function(t){return b(this._values[t].transition)},Di.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new Ii(this._values[t].property)),this._values[t].transition=b(e)||void 0},Di.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);var a=this.getTransition(n);void 0!==a&&(t[n+\"-transition\"]=a)}return t},Di.prototype.transitioned=function(t,e){for(var r=new Ri(this._properties),n=0,i=Object.keys(this._values);n<i.length;n+=1){var a=i[n];r._values[a]=this._values[a].transitioned(t,e._values[a])}return r},Di.prototype.untransitioned=function(){for(var t=new Ri(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var zi=function(t,e,r,n,i){this.property=t,this.value=e,this.begin=i+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};zi.prototype.possiblyEvaluate=function(t,e,r){var n=t.now||0,i=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(a){if(n>this.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(n<this.begin)return a.possiblyEvaluate(t,e,r);var o=(n-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),i,function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(o))}return i};var Ri=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Ri.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n},Ri.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Fi=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Fi.prototype.getValue=function(t){return b(this._values[t].value)},Fi.prototype.setValue=function(t,e){this._values[t]=new Oi(this._values[t].property,null===e?void 0:b(e))},Fi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i)}return t},Fi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new Ni(this._properties),i=0,a=Object.keys(this._values);i<a.length;i+=1){var o=a[i];n._values[o]=this._values[o].possiblyEvaluate(t,e,r)}return n};var Bi=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Bi.prototype.isConstant=function(){return\"constant\"===this.value.kind},Bi.prototype.constantOr=function(t){return\"constant\"===this.value.kind?this.value.value:t},Bi.prototype.evaluate=function(t,e,r,n){return this.property.evaluate(this.value,this.parameters,t,e,r,n)};var Ni=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Ni.prototype.get=function(t){return this._values[t]};var ji=function(t){this.specification=t};ji.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},ji.prototype.interpolate=function(t,e,r){var n=Qe[this.specification.type];return n?n(t,e,r):t};var Ui=function(t,e){this.specification=t,this.overrides=e};Ui.prototype.possiblyEvaluate=function(t,e,r,n){return\"constant\"===t.expression.kind||\"camera\"===t.expression.kind?new Bi(this,{kind:\"constant\",value:t.expression.evaluate(e,null,{},r,n)},e):new Bi(this,t.expression,e)},Ui.prototype.interpolate=function(t,e,r){if(\"constant\"!==t.value.kind||\"constant\"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Bi(this,{kind:\"constant\",value:void 0},t.parameters);var n=Qe[this.specification.type];return n?new Bi(this,{kind:\"constant\",value:n(t.value.value,e.value.value,r)},t.parameters):t},Ui.prototype.evaluate=function(t,e,r,n,i,a){return\"constant\"===t.kind?t.value:t.evaluate(e,r,n,i,a)};var Vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0===t.value)return new Bi(this,{kind:\"constant\",value:void 0},e);if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n),a=\"resolvedImage\"===t.property.specification.type&&\"string\"!=typeof i?i.name:i,o=this._calculate(a,a,a,e);return new Bi(this,{kind:\"constant\",value:o},e)}if(\"camera\"===t.expression.kind){var s=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Bi(this,{kind:\"constant\",value:s},e)}return new Bi(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n,i,a){if(\"source\"===t.kind){var o=t.evaluate(e,r,n,i,a);return this._calculate(o,o,o,e)}return\"composite\"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Ui),Hi=function(t){this.specification=t};Hi.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0!==t.value){if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new Pi(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom),e)),t.expression.evaluate(new Pi(Math.floor(e.zoom+1),e)),e)}},Hi.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},Hi.prototype.interpolate=function(t){return t};var qi=function(t){this.specification=t};qi.prototype.possiblyEvaluate=function(t,e,r,n){return!!t.expression.evaluate(e,null,{},r,n)},qi.prototype.interpolate=function(){return!1};var Gi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new Oi(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new Ii(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};ni(\"DataDrivenProperty\",Ui),ni(\"DataConstantProperty\",ji),ni(\"CrossFadedDataDrivenProperty\",Vi),ni(\"CrossFadedProperty\",Hi),ni(\"ColorRampProperty\",qi);var Zi=\"-transition\",Yi=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return!0},needGeometry:!1},\"custom\"!==e.type&&(this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\"background\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\"source-layer\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Fi(r.layout)),r.paint)){for(var n in this._transitionablePaint=new Di(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new Ni(r.paint)}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return\"visibility\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\"layers.\"+this.id+\".layout.\"+t;if(this._validate(Xn,n,t,e,r))return}\"visibility\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return y(t,Zi)?this._transitionablePaint.getTransition(t.slice(0,-11)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\"layers.\"+this.id+\".paint.\"+t;if(this._validate(Wn,n,t,e,r))return!1}if(y(t,Zi))return this._transitionablePaint.setTransition(t.slice(0,-11),e||void 0),!1;var i=this._transitionablePaint._values[t],a=\"cross-faded-data-driven\"===i.property.specification[\"property-type\"],o=i.value.isDataDriven(),s=i.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l=this._transitionablePaint._values[t].value;return l.isDataDriven()||o||a||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||\"none\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,(function(t,e){return!(void 0===t||\"layout\"===e&&!Object.keys(t).length||\"paint\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Jn(this,t.call(Zn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Dt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Bi&&Yr(e.property.specification)&&(\"source\"===e.value.kind||\"composite\"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(It),Wi={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Xi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Ji=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Ki(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map((function(t){var i,a=(i=t.type,Wi[i].BYTES_PER_ELEMENT),o=r=$i(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}})),size:$i(r,Math.max(n,e)),alignment:e}}function $i(t,e){return Math.ceil(t/e)*e}Ji.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Ji.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Ji.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Ji.prototype.clear=function(){this.length=0},Ji.prototype.resize=function(t){this.reserve(t),this.length=t},Ji.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Ji.prototype._refreshViews=function(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var Qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(Ji);Qi.prototype.bytesPerElement=4,ni(\"StructArrayLayout2i4\",Qi);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(Ji);ta.prototype.bytesPerElement=8,ni(\"StructArrayLayout4i8\",ta);var ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);ea.prototype.bytesPerElement=12,ni(\"StructArrayLayout2i4i12\",ea);var ra=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=i,this.uint8[l+6]=a,this.uint8[l+7]=o,t},e}(Ji);ra.prototype.bytesPerElement=8,ni(\"StructArrayLayout2i4ub8\",ra);var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,r,n,i,a,o,s,l,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c){var f=9*t,h=18*t;return this.uint16[f+0]=e,this.uint16[f+1]=r,this.uint16[f+2]=n,this.uint16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=l,this.uint8[h+16]=u,this.uint8[h+17]=c,t},e}(Ji);na.prototype.bytesPerElement=18,ni(\"StructArrayLayout8ui2ub18\",na);var ia=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,l,u,c,f)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=12*t;return this.int16[p+0]=e,this.int16[p+1]=r,this.int16[p+2]=n,this.int16[p+3]=i,this.uint16[p+4]=a,this.uint16[p+5]=o,this.uint16[p+6]=s,this.uint16[p+7]=l,this.int16[p+8]=u,this.int16[p+9]=c,this.int16[p+10]=f,this.int16[p+11]=h,t},e}(Ji);ia.prototype.bytesPerElement=24,ni(\"StructArrayLayout4i4ui4i24\",ia);var aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(Ji);aa.prototype.bytesPerElement=12,ni(\"StructArrayLayout3f12\",aa);var oa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Ji);oa.prototype.bytesPerElement=4,ni(\"StructArrayLayout1ul4\",oa);var sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,n,i,a,o,s,l)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u){var c=10*t,f=5*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=i,this.int16[c+4]=a,this.int16[c+5]=o,this.uint32[f+3]=s,this.uint16[c+8]=l,this.uint16[c+9]=u,t},e}(Ji);sa.prototype.bytesPerElement=20,ni(\"StructArrayLayout6i1ul2ui20\",sa);var la=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(Ji);la.prototype.bytesPerElement=12,ni(\"StructArrayLayout2i2i2i12\",la);var ua=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace=function(t,e,r,n,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=n,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(Ji);ua.prototype.bytesPerElement=16,ni(\"StructArrayLayout2f1f2i16\",ua);var ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(Ji);ca.prototype.bytesPerElement=12,ni(\"StructArrayLayout2ub2f12\",ca);var fa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(Ji);fa.prototype.bytesPerElement=6,ni(\"StructArrayLayout3ui6\",fa);var ha=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g){var y=this.length;return this.resize(y+1),this.emplace(y,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y){var m=24*t,x=12*t,b=48*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=n,this.uint16[m+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[m+10]=l,this.uint16[m+11]=u,this.uint16[m+12]=c,this.float32[x+7]=f,this.float32[x+8]=h,this.uint8[b+36]=p,this.uint8[b+37]=d,this.uint8[b+38]=v,this.uint32[x+10]=g,this.int16[m+22]=y,t},e}(Ji);ha.prototype.bytesPerElement=48,ni(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",ha);var pa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S){var E=this.length;return this.resize(E+1),this.emplace(E,t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,w,T,k,A,M,S,E){var L=34*t,C=17*t;return this.int16[L+0]=e,this.int16[L+1]=r,this.int16[L+2]=n,this.int16[L+3]=i,this.int16[L+4]=a,this.int16[L+5]=o,this.int16[L+6]=s,this.int16[L+7]=l,this.uint16[L+8]=u,this.uint16[L+9]=c,this.uint16[L+10]=f,this.uint16[L+11]=h,this.uint16[L+12]=p,this.uint16[L+13]=d,this.uint16[L+14]=v,this.uint16[L+15]=g,this.uint16[L+16]=y,this.uint16[L+17]=m,this.uint16[L+18]=x,this.uint16[L+19]=b,this.uint16[L+20]=_,this.uint16[L+21]=w,this.uint16[L+22]=T,this.uint32[C+12]=k,this.float32[C+13]=A,this.float32[C+14]=M,this.float32[C+15]=S,this.float32[C+16]=E,t},e}(Ji);pa.prototype.bytesPerElement=68,ni(\"StructArrayLayout8i15ui1ul4f68\",pa);var da=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Ji);da.prototype.bytesPerElement=4,ni(\"StructArrayLayout1f4\",da);var va=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(Ji);va.prototype.bytesPerElement=6,ni(\"StructArrayLayout3i6\",va);var ga=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=2*t,a=4*t;return this.uint32[i+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=n,t},e}(Ji);ga.prototype.bytesPerElement=8,ni(\"StructArrayLayout1ul2ui8\",ga);var ya=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(Ji);ya.prototype.bytesPerElement=4,ni(\"StructArrayLayout2ui4\",ya);var ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Ji);ma.prototype.bytesPerElement=2,ni(\"StructArrayLayout1ui2\",ma);var xa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(Ji);xa.prototype.bytesPerElement=8,ni(\"StructArrayLayout2f8\",xa);var ba=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(Ji);ba.prototype.bytesPerElement=16,ni(\"StructArrayLayout4f16\",ba);var _a=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get=function(){return new a(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Xi);_a.prototype.size=20;var wa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _a(this,t)},e}(sa);ni(\"CollisionBoxArray\",wa);var Ta=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Xi);Ta.prototype.size=48;var ka=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ta(this,t)},e}(ha);ni(\"PlacedSymbolArray\",ka);var Aa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Xi);Aa.prototype.size=68;var Ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Aa(this,t)},e}(pa);ni(\"SymbolInstanceArray\",Ma);var Sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(da);ni(\"GlyphOffsetArray\",Sa);var Ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(va);ni(\"SymbolLineVertexArray\",Ea);var La=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Xi);La.prototype.size=8;var Ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new La(this,t)},e}(ga);ni(\"FeatureIndexArray\",Ca);var Pa=Ki([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,Oa=function(t){void 0===t&&(t=[]),this.segments=t};function Ia(t,e){return 256*(t=u(Math.floor(t),0,255))+u(Math.floor(e),0,255)}Oa.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>Oa.MAX_VERTEX_ARRAY_LENGTH&&w(\"Max vertices per segment is \"+Oa.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t>Oa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},Oa.prototype.get=function(){return this.segments},Oa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Oa.simpleSegment=function(t,e,r,n){return new Oa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Oa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,ni(\"SegmentVector\",Oa);var Da=Ki([{name:\"a_pattern_from\",components:4,type:\"Uint16\"},{name:\"a_pattern_to\",components:4,type:\"Uint16\"},{name:\"a_pixel_ratio_from\",components:1,type:\"Uint8\"},{name:\"a_pixel_ratio_to\",components:1,type:\"Uint8\"}]),za=e((function(t){t.exports=function(t,e){var r,n,i,a,o,s,l,u;for(r=3&t.length,n=t.length-r,i=e,o=3432918353,s=461845907,u=0;u<n;)l=255&t.charCodeAt(u)|(255&t.charCodeAt(++u))<<8|(255&t.charCodeAt(++u))<<16|(255&t.charCodeAt(++u))<<24,++u,i=27492+(65535&(a=5*(65535&(i=(i^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(u+2))<<16;case 2:l^=(255&t.charCodeAt(u+1))<<8;case 1:i^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(u)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}})),Ra=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}})),Fa=za,Ba=za,Na=Ra;Fa.murmur3=Ba,Fa.murmur2=Na;var ja=function(){this.ids=[],this.positions=[],this.indexed=!1};ja.prototype.add=function(t,e,r,n){this.ids.push(Va(t)),this.positions.push(e,r,n)},ja.prototype.getPositions=function(t){for(var e=Va(t),r=0,n=this.ids.length-1;r<n;){var i=r+n>>1;this.ids[i]>=e?n=i:r=i+1}for(var a=[];this.ids[r]===e;){var o=this.positions[3*r],s=this.positions[3*r+1],l=this.positions[3*r+2];a.push({index:o,start:s,end:l}),r++}return a},ja.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return Ha(r,n,0,r.length-1),e&&e.push(r.buffer,n.buffer),{ids:r,positions:n}},ja.deserialize=function(t){var e=new ja;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e};var Ua=Math.pow(2,53)-1;function Va(t){var e=+t;return!isNaN(e)&&e<=Ua?e:Fa(String(t))}function Ha(t,e,r,n){for(;r<n;){for(var i=t[r+n>>1],a=r-1,o=n+1;;){do{a++}while(t[a]<i);do{o--}while(t[o]>i);if(a>=o)break;qa(t,a,o),qa(e,3*a,3*o),qa(e,3*a+1,3*o+1),qa(e,3*a+2,3*o+2)}o-r<n-o?(Ha(t,e,r,o),r=o+1):(Ha(t,e,o+1,n),n=o)}}function qa(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}ni(\"FeaturePositionMap\",ja);var Ga=function(t,e){this.gl=t.gl,this.location=e},Za=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Ga),Ya=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Ga),Wa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ga),Xa=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ga),Ja=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ga),Ka=function(t){function e(e,r){t.call(this,e,r),this.current=oe.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ga),$a=new Float32Array(16),Qa=function(t){function e(e,r){t.call(this,e,r),this.current=$a}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ga);function to(t){return[Ia(255*t.r,255*t.g),Ia(255*t.b,255*t.a)]}var eo=function(t,e,r){this.value=t,this.uniformNames=e.map((function(t){return\"u_\"+t})),this.type=r};eo.prototype.setUniform=function(t,e,r){t.set(r.constantOr(this.value))},eo.prototype.getBinding=function(t,e,r){return\"color\"===this.type?new Ka(t,e):new Ya(t,e)};var ro=function(t,e){this.uniformNames=e.map((function(t){return\"u_\"+t})),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1};ro.prototype.setConstantPatternPositions=function(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr},ro.prototype.setUniform=function(t,e,r,n){var i=\"u_pattern_to\"===n?this.patternTo:\"u_pattern_from\"===n?this.patternFrom:\"u_pixel_ratio_to\"===n?this.pixelRatioTo:\"u_pixel_ratio_from\"===n?this.pixelRatioFrom:null;i&&t.set(i)},ro.prototype.getBinding=function(t,e,r){return\"u_pattern\"===r.substr(0,9)?new Ja(t,e):new Ya(t,e)};var no=function(t,e,r,n){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"===r?2:1,offset:0}})),this.paintVertexArray=new n};no.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.paintVertexArray.length,o=this.expression.evaluate(new Pi(0),e,{},n,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o)},no.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:0},r,n);this._setPaintValue(t,e,i)},no.prototype._setPaintValue=function(t,e,r){if(\"color\"===this.type)for(var n=to(r),i=t;i<e;i++)this.paintVertexArray.emplace(i,n[0],n[1]);else{for(var a=t;a<e;a++)this.paintVertexArray.emplace(a,r);this.maxValue=Math.max(this.maxValue,Math.abs(r))}},no.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},no.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()};var io=function(t,e,r,n,i,a){this.expression=t,this.uniformNames=e.map((function(t){return\"u_\"+t+\"_t\"})),this.type=r,this.useIntegerZoom=n,this.zoom=i,this.maxValue=0,this.paintVertexAttributes=e.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"===r?4:2,offset:0}})),this.paintVertexArray=new a};io.prototype.populatePaintArray=function(t,e,r,n,i){var a=this.expression.evaluate(new Pi(this.zoom),e,{},n,[],i),o=this.expression.evaluate(new Pi(this.zoom+1),e,{},n,[],i),s=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o)},io.prototype.updatePaintArray=function(t,e,r,n){var i=this.expression.evaluate({zoom:this.zoom},r,n),a=this.expression.evaluate({zoom:this.zoom+1},r,n);this._setPaintValue(t,e,i,a)},io.prototype._setPaintValue=function(t,e,r,n){if(\"color\"===this.type)for(var i=to(r),a=to(n),o=t;o<e;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else{for(var s=t;s<e;s++)this.paintVertexArray.emplace(s,r,n);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(n))}},io.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},io.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},io.prototype.setUniform=function(t,e){var r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,n=u(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(n)},io.prototype.getBinding=function(t,e,r){return new Ya(t,e)};var ao=function(t,e,r,n,i,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=n,this.layerId=a,this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};ao.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(n,t,e.patterns&&e.patterns[this.layerId],r)},ao.prototype.updatePaintArray=function(t,e,r,n,i){this._setPaintValues(t,e,r.patterns&&r.patterns[this.layerId],i)},ao.prototype._setPaintValues=function(t,e,r,n){if(n&&r){var i=r.min,a=r.mid,o=r.max,s=n[i],l=n[a],u=n[o];if(s&&l&&u)for(var c=t;c<e;c++)this.zoomInPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],s.tl[0],s.tl[1],s.br[0],s.br[1],l.pixelRatio,s.pixelRatio),this.zoomOutPaintVertexArray.emplace(c,l.tl[0],l.tl[1],l.br[0],l.br[1],u.tl[0],u.tl[1],u.br[0],u.br[1],l.pixelRatio,u.pixelRatio)}},ao.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,Da.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,Da.members,this.expression.isStateDependent))},ao.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()};var oo=function(t,e,r,n){this.binders={},this.layoutAttributes=n,this._buffers=[];var i=[];for(var a in t.paint._values)if(r(a)){var o=t.paint.get(a);if(o instanceof Bi&&Yr(o.property.specification)){var s=lo(a,t.type),l=o.value,u=o.property.specification.type,c=o.property.useIntegerZoom,f=o.property.specification[\"property-type\"],h=\"cross-faded\"===f||\"cross-faded-data-driven\"===f;if(\"constant\"===l.kind)this.binders[a]=h?new ro(l.value,s):new eo(l.value,s,u),i.push(\"/u_\"+a);else if(\"source\"===l.kind||h){var p=uo(a,u,\"source\");this.binders[a]=h?new ao(l,u,c,e,p,t.id):new no(l,s,u,p),i.push(\"/a_\"+a)}else{var d=uo(a,u,\"composite\");this.binders[a]=new io(l,s,u,c,e,d),i.push(\"/z_\"+a)}}}this.cacheKey=i.sort().join(\"\")};oo.prototype.getMaxValue=function(t){var e=this.binders[t];return e instanceof no||e instanceof io?e.maxValue:0},oo.prototype.populatePaintArrays=function(t,e,r,n,i){for(var a in this.binders){var o=this.binders[a];(o instanceof no||o instanceof io||o instanceof ao)&&o.populatePaintArray(t,e,r,n,i)}},oo.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders){var n=this.binders[r];n instanceof ro&&n.setConstantPatternPositions(t,e)}},oo.prototype.updatePaintArrays=function(t,e,r,n,i){var a=!1;for(var o in t)for(var s=0,l=e.getPositions(o);s<l.length;s+=1){var u=l[s],c=r.feature(u.index);for(var f in this.binders){var h=this.binders[f];if((h instanceof no||h instanceof io||h instanceof ao)&&!0===h.expression.isStateDependent){var p=n.paint.get(f);h.expression=p.value,h.updatePaintArray(u.start,u.end,c,t[o],i),a=!0}}}return a},oo.prototype.defines=function(){var t=[];for(var e in this.binders){var r=this.binders[e];(r instanceof eo||r instanceof ro)&&t.push.apply(t,r.uniformNames.map((function(t){return\"#define HAS_UNIFORM_\"+t})))}return t},oo.prototype.getPaintVertexBuffers=function(){return this._buffers},oo.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders){var i=this.binders[n];if(i instanceof eo||i instanceof ro||i instanceof io)for(var a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var l=i.getBinding(t,e[s],s);r.push({name:s,property:n,binding:l})}}}return r},oo.prototype.setUniforms=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,l=o.property,u=o.binding;this.binders[l].setUniform(u,n,r.get(l),s)}},oo.prototype.updatePaintBuffers=function(t){for(var e in this._buffers=[],this.binders){var r=this.binders[e];if(t&&r instanceof ao){var n=2===t.fromScale?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;n&&this._buffers.push(n)}else(r instanceof no||r instanceof io)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer)}},oo.prototype.upload=function(t){for(var e in this.binders){var r=this.binders[e];(r instanceof no||r instanceof io||r instanceof ao)&&r.upload(t)}this.updatePaintBuffers()},oo.prototype.destroy=function(){for(var t in this.binders){var e=this.binders[t];(e instanceof no||e instanceof io||e instanceof ao)&&e.destroy()}};var so=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var i=0,a=e;i<a.length;i+=1){var o=a[i];this.programConfigurations[o.id]=new oo(o,r,n,t)}this.needsUpload=!1,this._featureMap=new ja,this._bufferOffset=0};function lo(t,e){return{\"text-opacity\":[\"opacity\"],\"icon-opacity\":[\"opacity\"],\"text-color\":[\"fill_color\"],\"icon-color\":[\"fill_color\"],\"text-halo-color\":[\"halo_color\"],\"icon-halo-color\":[\"halo_color\"],\"text-halo-blur\":[\"halo_blur\"],\"icon-halo-blur\":[\"halo_blur\"],\"text-halo-width\":[\"halo_width\"],\"icon-halo-width\":[\"halo_width\"],\"line-gap-width\":[\"gapwidth\"],\"line-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-extrusion-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"]}[t]||[t.replace(e+\"-\",\"\").replace(/-/g,\"_\")]}function uo(t,e,r){var n={color:{source:xa,composite:ba},number:{source:da,composite:xa}},i=function(t){return{\"line-pattern\":{source:na,composite:na},\"fill-pattern\":{source:na,composite:na},\"fill-extrusion-pattern\":{source:na,composite:na}}[t]}(t);return i&&i[r]||n[e][r]}so.prototype.populatePaintArrays=function(t,e,r,n,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,n,i,a);void 0!==e.id&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0},so.prototype.updatePaintArrays=function(t,e,r,n){for(var i=0,a=r;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,n)||this.needsUpload}},so.prototype.get=function(t){return this.programConfigurations[t]},so.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},so.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},ni(\"ConstantBinder\",eo),ni(\"CrossFadedConstantBinder\",ro),ni(\"SourceExpressionBinder\",no),ni(\"CrossFadedCompositeBinder\",ao),ni(\"CompositeExpressionBinder\",io),ni(\"ProgramConfiguration\",oo,{omit:[\"_buffers\"]}),ni(\"ProgramConfigurationSet\",so);var co=8192;var fo,ho=(fo=15,{min:-1*Math.pow(2,fo-1),max:Math.pow(2,fo-1)-1});function po(t){for(var e=co/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var i=r[n],a=0;a<i.length;a++){var o=i[a];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<ho.min||o.x>ho.max||o.y<ho.min||o.y>ho.max)&&(w(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\"),o.x=u(o.x,ho.min,ho.max),o.y=u(o.y,ho.min,ho.max))}return r}function vo(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var go=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Qi,this.indexArray=new fa,this.segments=new Oa,this.programConfigurations=new so(Pa,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function yo(t,e){for(var r=0;r<t.length;r++)if(Mo(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(Mo(t,e[n]))return!0;return!!_o(t,e)}function mo(t,e,r){return!!Mo(t,e)||!!To(e,t,r)}function xo(t,e){if(1===t.length)return Ao(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(Mo(t,n[i]))return!0;for(var a=0;a<t.length;a++)if(Ao(e,t[a]))return!0;for(var o=0;o<e.length;o++)if(_o(t,e[o]))return!0;return!1}function bo(t,e,r){if(t.length>1){if(_o(t,e))return!0;for(var n=0;n<e.length;n++)if(To(e[n],t,r))return!0}for(var i=0;i<t.length;i++)if(To(t[i],e,r))return!0;return!1}function _o(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++)if(wo(n,i,e[a],e[a+1]))return!0;return!1}function wo(t,e,r,n){return T(t,r,n)!==T(e,r,n)&&T(t,e,r)!==T(t,e,n)}function To(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++)if(ko(t,e[i-1],e[i])<n)return!0;return!1}function ko(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i<0?t.distSqr(e):i>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Ao(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],i=r[l],n.y>e.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Mo(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}function So(t,e,r){var n=r[0],i=r[2];if(t.x<n.x&&e.x<n.x||t.x>i.x&&e.x>i.x||t.y<n.y&&e.y<n.y||t.y>i.y&&e.y>i.y)return!1;var a=T(t,e,r[0]);return a!==T(t,e,r[1])||a!==T(t,e,r[2])||a!==T(t,e,r[3])}function Eo(t,e,r){var n=e.paint.get(t).value;return\"constant\"===n.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function Lo(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Co(t,e,r,n,i){if(!e[0]&&!e[1])return t;var o=a.convert(e)._mult(i);\"viewport\"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var u=t[l];s.push(u.sub(o))}return s}go.prototype.populate=function(t,e,r){var n=this.layers[0],i=[],a=null;\"circle\"===n.type&&(a=n.layout.get(\"circle-sort-key\"));for(var o=0,s=t;o<s.length;o+=1){var l=s[o],u=l.feature,c=l.id,f=l.index,h=l.sourceLayerIndex,p=this.layers[0]._featureFilter.needGeometry,d={type:u.type,id:c,properties:u.properties,geometry:p?po(u):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),d,r)){p||(d.geometry=po(u));var v=a?a.evaluate(d,{},r):void 0,g={id:c,properties:u.properties,type:u.type,sourceLayerIndex:h,index:f,geometry:d.geometry,patterns:{},sortKey:v};i.push(g)}}a&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=x,_=b.geometry,w=b.index,T=b.sourceLayerIndex,k=t[w].feature;this.addFeature(x,_,w,r),e.featureIndex.insert(k,_,w,T,this.index)}},go.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},go.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},go.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},go.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},go.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},go.prototype.addFeature=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1)for(var o=0,s=a[i];o<s.length;o+=1){var l=s[o],u=l.x,c=l.y;if(!(u<0||u>=co||c<0||c>=co)){var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=f.vertexLength;vo(this.layoutVertexArray,u,c,-1,-1),vo(this.layoutVertexArray,u,c,1,-1),vo(this.layoutVertexArray,u,c,1,1),vo(this.layoutVertexArray,u,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),f.vertexLength+=4,f.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n)},ni(\"CircleBucket\",go,{omit:[\"layers\"]});var Po=new Gi({\"circle-sort-key\":new Ui(Dt.layout_circle[\"circle-sort-key\"])}),Oo={paint:new Gi({\"circle-radius\":new Ui(Dt.paint_circle[\"circle-radius\"]),\"circle-color\":new Ui(Dt.paint_circle[\"circle-color\"]),\"circle-blur\":new Ui(Dt.paint_circle[\"circle-blur\"]),\"circle-opacity\":new Ui(Dt.paint_circle[\"circle-opacity\"]),\"circle-translate\":new ji(Dt.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new ji(Dt.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new ji(Dt.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new ji(Dt.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new Ui(Dt.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new Ui(Dt.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new Ui(Dt.paint_circle[\"circle-stroke-opacity\"])}),layout:Po},Io=\"undefined\"!=typeof Float32Array?Float32Array:Array;function Do(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function zo(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],v=e[12],g=e[13],y=e[14],m=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*v,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*y,t[3]=x*o+b*c+_*d+w*m,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*v,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*y,t[7]=x*o+b*c+_*d+w*m,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*v,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*y,t[11]=x*o+b*c+_*d+w*m,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*v,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*y,t[15]=x*o+b*c+_*d+w*m,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var Ro=zo;var Fo,Bo=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t};function No(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}Fo=new Io(3),Io!=Float32Array&&(Fo[0]=0,Fo[1]=0,Fo[2]=0),function(){var t=new Io(4);Io!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var jo=function(t){var e=t[0],r=t[1];return e*e+r*r},Uo=(function(){var t=new Io(2);Io!=Float32Array&&(t[0]=0,t[1]=0)}(),function(t){function e(e){t.call(this,e,Oo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new go(t)},e.prototype.queryRadius=function(t){var e=t;return Eo(\"circle-radius\",this,e)+Eo(\"circle-stroke-width\",this,e)+Lo(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var l=Co(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),u=this.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),c=\"map\"===this.paint.get(\"circle-pitch-alignment\"),f=c?l:function(t,e){return t.map((function(t){return Vo(t,e)}))}(l,s),h=c?u*o:u,p=0,d=n;p<d.length;p+=1)for(var v=0,g=d[p];v<g.length;v+=1){var y=g[v],m=c?y:Vo(y,s),x=h,b=No([],[y.x,y.y,0,1],s);if(\"viewport\"===this.paint.get(\"circle-pitch-scale\")&&\"map\"===this.paint.get(\"circle-pitch-alignment\")?x*=b[3]/a.cameraToCenterDistance:\"map\"===this.paint.get(\"circle-pitch-scale\")&&\"viewport\"===this.paint.get(\"circle-pitch-alignment\")&&(x*=a.cameraToCenterDistance/b[3]),mo(f,m,x))return!0}return!1},e}(Yi));function Vo(t,e){var r=No([],[t.x,t.y,0,1],e);return new a(r[0]/r[3],r[1]/r[3])}var Ho=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(go);function qo(t,e,r,n){var i=e.width,a=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==i*a*r)throw new RangeError(\"mismatched image size\")}else n=new Uint8Array(i*a*r);return t.width=i,t.height=a,t.data=n,t}function Go(t,e,r){var n=e.width,i=e.height;if(n!==t.width||i!==t.height){var a=qo({},{width:n,height:i},r);Zo(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width=n,t.height=i,t.data=a.data}}function Zo(t,e,r,n,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o=t.data,s=e.data,l=0;l<i.height;l++)for(var u=((r.y+l)*t.width+r.x)*a,c=((n.y+l)*e.width+n.x)*a,f=0;f<i.width*a;f++)s[c+f]=o[u+f];return e}ni(\"HeatmapBucket\",Ho,{omit:[\"layers\"]});var Yo=function(t,e){qo(this,t,1,e)};Yo.prototype.resize=function(t){Go(this,t,1)},Yo.prototype.clone=function(){return new Yo({width:this.width,height:this.height},new Uint8Array(this.data))},Yo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,1)};var Wo=function(t,e){qo(this,t,4,e)};Wo.prototype.resize=function(t){Go(this,t,4)},Wo.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Wo.prototype.clone=function(){return new Wo({width:this.width,height:this.height},new Uint8Array(this.data))},Wo.copy=function(t,e,r,n,i){Zo(t,e,r,n,i,4)},ni(\"AlphaImage\",Yo),ni(\"RGBAImage\",Wo);var Xo={paint:new Gi({\"heatmap-radius\":new Ui(Dt.paint_heatmap[\"heatmap-radius\"]),\"heatmap-weight\":new Ui(Dt.paint_heatmap[\"heatmap-weight\"]),\"heatmap-intensity\":new ji(Dt.paint_heatmap[\"heatmap-intensity\"]),\"heatmap-color\":new qi(Dt.paint_heatmap[\"heatmap-color\"]),\"heatmap-opacity\":new ji(Dt.paint_heatmap[\"heatmap-opacity\"])})};function Jo(t,e){for(var r=new Uint8Array(1024),n={},i=0,a=0;i<256;i++,a+=4){n[e]=i/255;var o=t.evaluate(n);r[a+0]=Math.floor(255*o.r/o.a),r[a+1]=Math.floor(255*o.g/o.a),r[a+2]=Math.floor(255*o.b/o.a),r[a+3]=Math.floor(255*o.a)}return new Wo({width:256,height:1},r)}var Ko=function(t){function e(e){t.call(this,e,Xo),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Ho(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"heatmap-color\"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values[\"heatmap-color\"].value.expression;this.colorRamp=Jo(t,\"heatmapDensity\"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"heatmap-opacity\")&&\"none\"!==this.visibility},e}(Yi),$o={paint:new Gi({\"hillshade-illumination-direction\":new ji(Dt.paint_hillshade[\"hillshade-illumination-direction\"]),\"hillshade-illumination-anchor\":new ji(Dt.paint_hillshade[\"hillshade-illumination-anchor\"]),\"hillshade-exaggeration\":new ji(Dt.paint_hillshade[\"hillshade-exaggeration\"]),\"hillshade-shadow-color\":new ji(Dt.paint_hillshade[\"hillshade-shadow-color\"]),\"hillshade-highlight-color\":new ji(Dt.paint_hillshade[\"hillshade-highlight-color\"]),\"hillshade-accent-color\":new ji(Dt.paint_hillshade[\"hillshade-accent-color\"])})},Qo=function(t){function e(e){t.call(this,e,$o)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\"hillshade-exaggeration\")&&\"none\"!==this.visibility},e}(Yi),ts=Ki([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,es=ns,rs=ns;function ns(t,e,r){r=r||2;var n,i,a,o,s,l,u,c=e&&e.length,f=c?e[0]*r:t.length,h=is(t,0,f,r,!0),p=[];if(!h||h.next===h.prev)return p;if(c&&(h=function(t,e,r,n){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=is(t,e[i]*n,i<a-1?e[i+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push(vs(o));for(s.sort(fs),i=0;i<s.length;i++)hs(s[i],r),r=as(r,r.next);return r}(t,e,h,r)),t.length>80*r){n=a=t[0],i=o=t[1];for(var d=r;d<f;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<i&&(i=l),s>a&&(a=s),l>o&&(o=l);u=0!==(u=Math.max(a-n,o-i))?1/u:0}return os(h,p,r,n,i,u),p}function is(t,e,r,n,i){var a,o;if(i===Es(t,e,r,n)>0)for(a=e;a<r;a+=n)o=As(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=As(a,t[a],t[a+1],o);return o&&xs(o,o.next)&&(Ms(o),o=o.next),o}function as(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!xs(n,n.next)&&0!==ms(n.prev,n,n.next))n=n.next;else{if(Ms(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function os(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=ds(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,n,i,a);for(var s,l,u=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?ls(t,n,i,a):ss(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),Ms(t),t=l.next,u=l.next;else if((t=l)===u){o?1===o?os(t=us(as(t),e,r),e,r,n,i,a,2):2===o&&cs(t,e,r,n,i,a):os(as(t),e,r,n,i,a,1);break}}}function ss(t){var e=t.prev,r=t,n=t.next;if(ms(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(gs(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&ms(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function ls(t,e,r,n){var i=t.prev,a=t,o=t.next;if(ms(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=ds(s,l,e,r,n),h=ds(u,c,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=f&&d&&d.z<=h;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=f;){if(p!==t.prev&&p!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&ms(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=h;){if(d!==t.prev&&d!==t.next&&gs(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&ms(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function us(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!xs(i,a)&&bs(i,n,n.next,a)&&Ts(i,a)&&Ts(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),Ms(n),Ms(n.next),n=t=a),n=n.next}while(n!==t);return as(n)}function cs(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&ys(o,s)){var l=ks(o,s);return o=as(o,o.next),l=as(l,l.next),os(o,e,r,n,i,a),void os(l,e,r,n,i,a)}s=s.next}o=o.next}while(o!==t)}function fs(t,e){return t.x-e.x}function hs(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r;var l,u=r,c=r.x,f=r.y,h=1/0;n=r;do{i>=n.x&&n.x>=c&&i!==n.x&&gs(a<f?i:o,a,c,f,a<f?o:i,a,n.x,n.y)&&(l=Math.abs(a-n.y)/(i-n.x),Ts(n,t)&&(l<h||l===h&&(n.x>r.x||n.x===r.x&&ps(r,n)))&&(r=n,h=l)),n=n.next}while(n!==u);return r}(t,e)){var r=ks(e,t);as(e,e.next),as(r,r.next)}}function ps(t,e){return ms(t.prev,t,e.prev)<0&&ms(e.next,t,t.next)<0}function ds(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function vs(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function gs(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function ys(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&bs(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(Ts(t,e)&&Ts(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(ms(t.prev,t,e.prev)||ms(t,e.prev,e))||xs(t,e)&&ms(t.prev,t,t.next)>0&&ms(e.prev,e,e.next)>0)}function ms(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function xs(t,e){return t.x===e.x&&t.y===e.y}function bs(t,e,r,n){var i=ws(ms(t,e,r)),a=ws(ms(t,e,n)),o=ws(ms(r,n,t)),s=ws(ms(r,n,e));return i!==a&&o!==s||!(0!==i||!_s(t,r,e))||!(0!==a||!_s(t,n,e))||!(0!==o||!_s(r,t,n))||!(0!==s||!_s(r,e,n))}function _s(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function ws(t){return t>0?1:t<0?-1:0}function Ts(t,e){return ms(t.prev,t,t.next)<0?ms(t,e,t.next)>=0&&ms(t,t.prev,e)>=0:ms(t,e,t.prev)<0||ms(t,t.next,e)<0}function ks(t,e){var r=new Ss(t.i,t.x,t.y),n=new Ss(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function As(t,e,r,n){var i=new Ss(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Ms(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Ss(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Es(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function Ls(t,e,r,n,i){Cs(t,e,r||0,n||t.length-1,i||Os)}function Cs(t,e,r,n,i){for(;n>r;){if(n-r>600){var a=n-r+1,o=e-r+1,s=Math.log(a),l=.5*Math.exp(2*s/3),u=.5*Math.sqrt(s*l*(a-l)/a)*(o-a/2<0?-1:1);Cs(t,e,Math.max(r,Math.floor(e-o*l/a+u)),Math.min(n,Math.floor(e+(a-o)*l/a+u)),i)}var c=t[e],f=r,h=n;for(Ps(t,r,e),i(t[n],c)>0&&Ps(t,r,n);f<h;){for(Ps(t,f,h),f++,h--;i(t[f],c)<0;)f++;for(;i(t[h],c)>0;)h--}0===i(t[r],c)?Ps(t,r,h):Ps(t,++h,n),h<=e&&(r=h+1),e<=h&&(n=h-1)}}function Ps(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Os(t,e){return t<e?-1:t>e?1:0}function Is(t,e){var r=t.length;if(r<=1)return[t];for(var n,i,a=[],o=0;o<r;o++){var s=k(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(n&&a.push(n),n=[t[o]]):n.push(t[o]))}if(n&&a.push(n),e>1)for(var l=0;l<a.length;l++)a[l].length<=e||(Ls(a[l],e,1,a[l].length-1,Ds),a[l]=a[l].slice(0,e));return a}function Ds(t,e){return e.area-t.area}function zs(t,e,r){for(var n=r.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+\"-pattern\");s.isConstant()||(i=!0);var l=s.constantOr(null);l&&(i=!0,n[l.to]=!0,n[l.from]=!0)}return i}function Rs(t,e,r,n,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.paint.get(t+\"-pattern\").value;if(\"constant\"!==u.kind){var c=u.evaluate({zoom:n-1},r,{},i.availableImages),f=u.evaluate({zoom:n},r,{},i.availableImages),h=u.evaluate({zoom:n+1},r,{},i.availableImages);c=c&&c.name?c.name:c,f=f&&f.name?f.name:f,h=h&&h.name?h.name:h,a[c]=!0,a[f]=!0,a[h]=!0,r.patterns[l.id]={min:c,mid:f,max:h}}}return r}ns.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(Es(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(Es(t,u,c,r))}var f=0;for(s=0;s<n.length;s+=3){var h=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;f+=Math.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0===o&&0===f?0:Math.abs((f-o)/o)},ns.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r},es.default=rs;var Fs=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Qi,this.indexArray=new fa,this.indexArray2=new ya,this.programConfigurations=new so(ts,t.layers,t.zoom),this.segments=new Oa,this.segments2=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Fs.prototype.populate=function(t,e,r){this.hasPattern=zs(\"fill\",this.layers,e);for(var n=this.layers[0].layout.get(\"fill-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r,e.availableImages):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs(\"fill\",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},Fs.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Fs.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},Fs.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Fs.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Fs.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ts),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},Fs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},Fs.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray),h=f.vertexLength,p=[],d=[],v=0,g=s;v<g.length;v+=1){var y=g[v];if(0!==y.length){y!==s[0]&&d.push(p.length/2);var m=this.segments2.prepareSegment(y.length,this.layoutVertexArray,this.indexArray2),x=m.vertexLength;this.layoutVertexArray.emplaceBack(y[0].x,y[0].y),this.indexArray2.emplaceBack(x+y.length-1,x),p.push(y[0].x),p.push(y[0].y);for(var b=1;b<y.length;b++)this.layoutVertexArray.emplaceBack(y[b].x,y[b].y),this.indexArray2.emplaceBack(x+b-1,x+b),p.push(y[b].x),p.push(y[b].y);m.vertexLength+=y.length,m.primitiveLength+=y.length}}for(var _=es(p,d),w=0;w<_.length;w+=3)this.indexArray.emplaceBack(h+_[w],h+_[w+1],h+_[w+2]);f.vertexLength+=l,f.primitiveLength+=_.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni(\"FillBucket\",Fs,{omit:[\"layers\",\"patternFeatures\"]});var Bs=new Gi({\"fill-sort-key\":new Ui(Dt.layout_fill[\"fill-sort-key\"])}),Ns={paint:new Gi({\"fill-antialias\":new ji(Dt.paint_fill[\"fill-antialias\"]),\"fill-opacity\":new Ui(Dt.paint_fill[\"fill-opacity\"]),\"fill-color\":new Ui(Dt.paint_fill[\"fill-color\"]),\"fill-outline-color\":new Ui(Dt.paint_fill[\"fill-outline-color\"]),\"fill-translate\":new ji(Dt.paint_fill[\"fill-translate\"]),\"fill-translate-anchor\":new ji(Dt.paint_fill[\"fill-translate-anchor\"]),\"fill-pattern\":new Vi(Dt.paint_fill[\"fill-pattern\"])}),layout:Bs},js=function(t){function e(e){t.call(this,e,Ns)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r);var n=this.paint._values[\"fill-outline-color\"];\"constant\"===n.value.kind&&void 0===n.value.value&&(this.paint._values[\"fill-outline-color\"]=this.paint._values[\"fill-color\"])},e.prototype.createBucket=function(t){return new Fs(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get(\"fill-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){return xo(Co(t,this.paint.get(\"fill-translate\"),this.paint.get(\"fill-translate-anchor\"),a.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(Yi),Us=Ki([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_normal_ed\",components:4,type:\"Int16\"}],4).members,Vs=Hs;function Hs(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(qs,this,e)}function qs(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Gs(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}Hs.types=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],Hs.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,o=0,s=0,l=[];t.pos<r;){if(i<=0){var u=t.readVarint();n=7&u,i=u>>3}if(i--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new a(o,s));else{if(7!==n)throw new Error(\"unknown command \"+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},Hs.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,u=-1/0;t.pos<e;){if(n<=0){var c=t.readVarint();r=7&c,n=c>>3}if(n--,1===r||2===r)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<l&&(l=a),a>u&&(u=a);else if(7!==r)throw new Error(\"unknown command \"+r)}return[o,l,s,u]},Hs.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),u=Hs.types[this.type];function c(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/a;t[e]=[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var f=[];for(n=0;n<l.length;n++)f[n]=l[n][0];c(l=f);break;case 2:for(n=0;n<l.length;n++)c(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,i=[],a=0;a<e;a++){var o=Gs(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]))}return r&&i.push(r),i}(l),n=0;n<l.length;n++)for(i=0;i<l[n].length;i++)c(l[n][i])}1===l.length?l=l[0]:u=\"Multi\"+u;var h={type:\"Feature\",geometry:{type:u,coordinates:l},properties:this.properties};return\"id\"in this&&(h.id=this.id),h};var Zs=Ys;function Ys(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Ws,this,e),this.length=this._features.length}function Ws(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function Xs(t,e,r){if(3===t){var n=new Zs(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}Ys.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Vs(this._pbf,e,this.extent,this._keys,this._values)};var Js={VectorTile:function(t,e){this.layers=t.readFields(Xs,{},e)},VectorTileFeature:Vs,VectorTileLayer:Zs},Ks=Js.VectorTileFeature.types,$s=Math.pow(2,13);function Qs(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*$s)+o,i*$s*2,a*$s*2,Math.round(s))}var tl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ea,this.indexArray=new fa,this.programConfigurations=new so(Us,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function el(t,e){return t.x===e.x&&(t.x<0||t.x>co)||t.y===e.y&&(t.y<0||t.y>co)}tl.prototype.populate=function(t,e,r){this.features=[],this.hasPattern=zs(\"fill-extrusion\",this.layers,e);for(var n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.feature,s=a.id,l=a.index,u=a.sourceLayerIndex,c=this.layers[0]._featureFilter.needGeometry,f={type:o.type,id:s,properties:o.properties,geometry:c?po(o):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),f,r)){var h={id:s,sourceLayerIndex:u,index:l,geometry:c?f.geometry:po(o),properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(h.id=o.id),this.hasPattern?this.features.push(Rs(\"fill-extrusion\",this.layers,h,this.zoom,e)):this.addFeature(h,h.geometry,l,r,{}),e.featureIndex.insert(o,h.geometry,l,u,this.index,!0)}}},tl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.features;n<i.length;n+=1){var a=i[n],o=a.geometry;this.addFeature(a,o,a.index,e,r)}},tl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},tl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},tl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},tl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Us),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},tl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},tl.prototype.addFeature=function(t,e,r,n,i){for(var a=0,o=Is(e,500);a<o.length;a+=1){for(var s=o[a],l=0,u=0,c=s;u<c.length;u+=1)l+=c[u].length;for(var f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,p=s;h<p.length;h+=1){var d=p[h];if(0!==d.length&&!((O=d).every((function(t){return t.x<0}))||O.every((function(t){return t.x>co}))||O.every((function(t){return t.y<0}))||O.every((function(t){return t.y>co}))))for(var v=0,g=0;g<d.length;g++){var y=d[g];if(g>=1){var m=d[g-1];if(!el(y,m)){f.vertexLength+4>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x=y.sub(m)._perp()._unit(),b=m.dist(y);v+b>32768&&(v=0),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,1,v),v+=b,Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,0,v),Qs(this.layoutVertexArray,m.x,m.y,x.x,x.y,0,1,v);var _=f.vertexLength;this.indexArray.emplaceBack(_,_+2,_+1),this.indexArray.emplaceBack(_+1,_+2,_+3),f.vertexLength+=4,f.primitiveLength+=2}}}}if(f.vertexLength+l>Oa.MAX_VERTEX_ARRAY_LENGTH&&(f=this.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray)),\"Polygon\"===Ks[t.type]){for(var w=[],T=[],k=f.vertexLength,A=0,M=s;A<M.length;A+=1){var S=M[A];if(0!==S.length){S!==s[0]&&T.push(w.length/2);for(var E=0;E<S.length;E++){var L=S[E];Qs(this.layoutVertexArray,L.x,L.y,0,0,1,1,0),w.push(L.x),w.push(L.y)}}}for(var C=es(w,T),P=0;P<C.length;P+=3)this.indexArray.emplaceBack(k+C[P],k+C[P+2],k+C[P+1]);f.primitiveLength+=C.length/3,f.vertexLength+=l}}var O;this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},ni(\"FillExtrusionBucket\",tl,{omit:[\"layers\",\"features\"]});var rl={paint:new Gi({\"fill-extrusion-opacity\":new ji(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-opacity\"]),\"fill-extrusion-color\":new Ui(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-color\"]),\"fill-extrusion-translate\":new ji(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-translate\"]),\"fill-extrusion-translate-anchor\":new ji(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-translate-anchor\"]),\"fill-extrusion-pattern\":new Vi(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-pattern\"]),\"fill-extrusion-height\":new Ui(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-height\"]),\"fill-extrusion-base\":new Ui(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-base\"]),\"fill-extrusion-vertical-gradient\":new ji(Dt[\"paint_fill-extrusion\"][\"fill-extrusion-vertical-gradient\"])})},nl=function(t){function e(e){t.call(this,e,rl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new tl(t)},e.prototype.queryRadius=function(){return Lo(this.paint.get(\"fill-extrusion-translate\"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s,l){var u=Co(t,this.paint.get(\"fill-extrusion-translate\"),this.paint.get(\"fill-extrusion-translate-anchor\"),o.angle,s),c=this.paint.get(\"fill-extrusion-height\").evaluate(e,r),f=this.paint.get(\"fill-extrusion-base\").evaluate(e,r),h=function(t,e,r,n){for(var i=[],o=0,s=t;o<s.length;o+=1){var l=s[o],u=[l.x,l.y,n,1];No(u,u,e),i.push(new a(u[0]/u[3],u[1]/u[3]))}return i}(u,l,0,0),p=function(t,e,r,n){for(var i=[],o=[],s=n[8]*e,l=n[9]*e,u=n[10]*e,c=n[11]*e,f=n[8]*r,h=n[9]*r,p=n[10]*r,d=n[11]*r,v=0,g=t;v<g.length;v+=1){for(var y=[],m=[],x=0,b=g[v];x<b.length;x+=1){var _=b[x],w=_.x,T=_.y,k=n[0]*w+n[4]*T+n[12],A=n[1]*w+n[5]*T+n[13],M=n[2]*w+n[6]*T+n[14],S=n[3]*w+n[7]*T+n[15],E=M+u,L=S+c,C=k+f,P=A+h,O=M+p,I=S+d,D=new a((k+s)/L,(A+l)/L);D.z=E/L,y.push(D);var z=new a(C/I,P/I);z.z=O/I,m.push(z)}i.push(y),o.push(m)}return[i,o]}(n,f,c,l);return function(t,e,r){var n=1/0;xo(r,e)&&(n=al(r,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var l=a[s],u=a[s+1],c=o[s],f=[l,u,o[s+1],c,l];yo(r,f)&&(n=Math.min(n,al(r,f)))}return n!==1/0&&n}(p[0],p[1],h)},e}(Yi);function il(t,e){return t.x*e.x+t.y*e.y}function al(t,e){if(1===t.length){for(var r,n=0,i=e[n++];!r||i.equals(r);)if(!(r=e[n++]))return 1/0;for(;n<e.length;n++){var a=e[n],o=t[0],s=r.sub(i),l=a.sub(i),u=o.sub(i),c=il(s,s),f=il(s,l),h=il(l,l),p=il(u,s),d=il(u,l),v=c*h-f*f,g=(h*p-f*d)/v,y=(c*d-f*p)/v,m=1-g-y,x=i.z*m+r.z*g+a.z*y;if(isFinite(x))return x}return 1/0}for(var b=1/0,_=0,w=e;_<w.length;_+=1){var T=w[_];b=Math.min(b,T.z)}return b}var ol=Ki([{name:\"a_pos_normal\",components:2,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint8\"}],4).members,sl=Js.VectorTileFeature.types,ll=Math.cos(Math.PI/180*37.5),ul=Math.pow(2,14)/.5,cl=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new ra,this.indexArray=new fa,this.programConfigurations=new so(ol,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};cl.prototype.populate=function(t,e,r){this.hasPattern=zs(\"line\",this.layers,e);for(var n=this.layers[0].layout.get(\"line-sort-key\"),i=[],a=0,o=t;a<o.length;a+=1){var s=o[a],l=s.feature,u=s.id,c=s.index,f=s.sourceLayerIndex,h=this.layers[0]._featureFilter.needGeometry,p={type:l.type,id:u,properties:l.properties,geometry:h?po(l):[]};if(this.layers[0]._featureFilter.filter(new Pi(this.zoom),p,r)){h||(p.geometry=po(l));var d=n?n.evaluate(p,{},r):void 0,v={id:u,properties:l.properties,type:l.type,sourceLayerIndex:f,index:c,geometry:p.geometry,patterns:{},sortKey:d};i.push(v)}}n&&i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g=0,y=i;g<y.length;g+=1){var m=y[g],x=m,b=x.geometry,_=x.index,w=x.sourceLayerIndex;if(this.hasPattern){var T=Rs(\"line\",this.layers,m,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(m,b,_,r,{});var k=t[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},cl.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},cl.prototype.addFeatures=function(t,e,r){for(var n=0,i=this.patternFeatures;n<i.length;n+=1){var a=i[n];this.addFeature(a,a.geometry,a.index,e,r)}},cl.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},cl.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},cl.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ol),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},cl.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},cl.prototype.addFeature=function(t,e,r,n,i){for(var a=this.layers[0].layout,o=a.get(\"line-join\").evaluate(t,{}),s=a.get(\"line-cap\"),l=a.get(\"line-miter-limit\"),u=a.get(\"line-round-limit\"),c=0,f=e;c<f.length;c+=1){var h=f[c];this.addLine(h,t,o,s,l,u)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},cl.prototype.addLine=function(t,e,r,n,i,a){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty(\"mapbox_clip_start\")&&e.properties.hasOwnProperty(\"mapbox_clip_end\")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var o=0;o<t.length-1;o++)this.totalDistance+=t[o].dist(t[o+1]);this.updateScaledDistance()}for(var s=\"Polygon\"===sl[e.type],l=t.length;l>=2&&t[l-1].equals(t[l-2]);)l--;for(var u=0;u<l-1&&t[u].equals(t[u+1]);)u++;if(!(l<(s?3:2))){\"bevel\"===r&&(i=1.05);var c,f=this.overscaling<=16?15*co/(512*this.overscaling):0,h=this.segments.prepareSegment(10*l,this.layoutVertexArray,this.indexArray),p=void 0,d=void 0,v=void 0,g=void 0;this.e1=this.e2=-1,s&&(c=t[l-2],g=t[u].sub(c)._unit()._perp());for(var y=u;y<l;y++)if(!(d=y===l-1?s?t[u+1]:void 0:t[y+1])||!t[y].equals(d)){g&&(v=g),c&&(p=c),c=t[y],g=d?d.sub(c)._unit()._perp():v;var m=(v=v||g).add(g);0===m.x&&0===m.y||m._unit();var x=v.x*g.x+v.y*g.y,b=m.x*g.x+m.y*g.y,_=0!==b?1/b:1/0,w=2*Math.sqrt(2-2*b),T=b<ll&&p&&d,k=v.x*g.y-v.y*g.x>0;if(T&&y>u){var A=c.dist(p);if(A>2*f){var M=c.sub(c.sub(p)._mult(f/A)._round());this.updateDistance(p,M),this.addCurrentVertex(M,v,0,0,h),p=M}}var S=p&&d,E=S?r:s?\"butt\":n;if(S&&\"round\"===E&&(_<a?E=\"miter\":_<=2&&(E=\"fakeround\")),\"miter\"===E&&_>i&&(E=\"bevel\"),\"bevel\"===E&&(_>2&&(E=\"flipbevel\"),_<i&&(E=\"miter\")),p&&this.updateDistance(p,c),\"miter\"===E)m._mult(_),this.addCurrentVertex(c,m,0,0,h);else if(\"flipbevel\"===E){if(_>100)m=g.mult(-1);else{var L=_*v.add(g).mag()/v.sub(g).mag();m._perp()._mult(L*(k?-1:1))}this.addCurrentVertex(c,m,0,0,h),this.addCurrentVertex(c,m.mult(-1),0,0,h)}else if(\"bevel\"===E||\"fakeround\"===E){var C=-Math.sqrt(_*_-1),P=k?C:0,O=k?0:C;if(p&&this.addCurrentVertex(c,v,P,O,h),\"fakeround\"===E)for(var I=Math.round(180*w/Math.PI/20),D=1;D<I;D++){var z=D/I;if(.5!==z){var R=z-.5;z+=z*R*(z-1)*((1.0904+x*(x*(3.55645-1.43519*x)-3.2452))*R*R+(.848013+x*(.215638*x-1.06021)))}var F=g.sub(v)._mult(z)._add(v)._unit()._mult(k?-1:1);this.addHalfVertex(c,F.x,F.y,!1,k,0,h)}d&&this.addCurrentVertex(c,g,-P,-O,h)}else if(\"butt\"===E)this.addCurrentVertex(c,m,0,0,h);else if(\"square\"===E){var B=p?1:-1;this.addCurrentVertex(c,m,B,B,h)}else\"round\"===E&&(p&&(this.addCurrentVertex(c,v,0,0,h),this.addCurrentVertex(c,v,1,1,h,!0)),d&&(this.addCurrentVertex(c,g,-1,-1,h,!0),this.addCurrentVertex(c,g,0,0,h)));if(T&&y<l-1){var N=c.dist(d);if(N>2*f){var j=c.add(d.sub(c)._mult(f/N)._round());this.updateDistance(c,j),this.addCurrentVertex(j,g,0,0,h),c=j}}}}},cl.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.x+e.y*r,s=e.y-e.x*r,l=-e.x+e.y*n,u=-e.y-e.x*n;this.addHalfVertex(t,o,s,a,!1,r,i),this.addHalfVertex(t,l,u,a,!0,-n,i),this.distance>ul/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a))},cl.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=t.x,l=t.y,u=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(l<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&u)<<2,u>>6);var c=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,c),o.primitiveLength++),i?this.e2=c:this.e1=c},cl.prototype.updateScaledDistance=function(){this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(ul-1):this.distance},cl.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance()},ni(\"LineBucket\",cl,{omit:[\"layers\",\"patternFeatures\"]});var fl=new Gi({\"line-cap\":new ji(Dt.layout_line[\"line-cap\"]),\"line-join\":new Ui(Dt.layout_line[\"line-join\"]),\"line-miter-limit\":new ji(Dt.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new ji(Dt.layout_line[\"line-round-limit\"]),\"line-sort-key\":new Ui(Dt.layout_line[\"line-sort-key\"])}),hl={paint:new Gi({\"line-opacity\":new Ui(Dt.paint_line[\"line-opacity\"]),\"line-color\":new Ui(Dt.paint_line[\"line-color\"]),\"line-translate\":new ji(Dt.paint_line[\"line-translate\"]),\"line-translate-anchor\":new ji(Dt.paint_line[\"line-translate-anchor\"]),\"line-width\":new Ui(Dt.paint_line[\"line-width\"]),\"line-gap-width\":new Ui(Dt.paint_line[\"line-gap-width\"]),\"line-offset\":new Ui(Dt.paint_line[\"line-offset\"]),\"line-blur\":new Ui(Dt.paint_line[\"line-blur\"]),\"line-dasharray\":new Hi(Dt.paint_line[\"line-dasharray\"]),\"line-pattern\":new Vi(Dt.paint_line[\"line-pattern\"]),\"line-gradient\":new qi(Dt.paint_line[\"line-gradient\"])}),layout:fl},pl=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Pi(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=f({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(Ui),dl=new pl(hl.paint.properties[\"line-width\"].specification);dl.useIntegerZoom=!0;var vl=function(t){function e(e){t.call(this,e,hl)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"line-gradient\"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values[\"line-gradient\"].value.expression;this.gradient=Jo(t,\"lineProgress\"),this.gradientTexture=null},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\"line-floorwidth\"]=dl.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e)},e.prototype.createBucket=function(t){return new cl(t)},e.prototype.queryRadius=function(t){var e=t,r=gl(Eo(\"line-width\",this,e),Eo(\"line-gap-width\",this,e)),n=Eo(\"line-offset\",this,e);return r/2+Math.abs(n)+Lo(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s){var l=Co(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),u=s/2*gl(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),c=this.paint.get(\"line-offset\").evaluate(e,r);return c&&(n=function(t,e){for(var r=[],n=new a(0,0),i=0;i<t.length;i++){for(var o=t[i],s=[],l=0;l<o.length;l++){var u=o[l-1],c=o[l],f=o[l+1],h=0===l?n:c.sub(u)._unit()._perp(),p=l===o.length-1?n:f.sub(c)._unit()._perp(),d=h._add(p)._unit(),v=d.x*p.x+d.y*p.y;d._mult(1/v),s.push(d._mult(e)._add(c))}r.push(s)}return r}(n,c*s)),function(t,e,r){for(var n=0;n<e.length;n++){var i=e[n];if(t.length>=3)for(var a=0;a<i.length;a++)if(Mo(t,i[a]))return!0;if(bo(t,i,r))return!0}return!1}(l,n,u)},e.prototype.isTileClipped=function(){return!0},e}(Yi);function gl(t,e){return e>0?e+2*t:t}var yl=Ki([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),ml=Ki([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),xl=(Ki([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),Ki([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),bl=(Ki([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]),Ki([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),_l=Ki([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);function wl(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get(\"text-transform\").evaluate(r,{});return\"uppercase\"===n?t=t.toLocaleUpperCase():\"lowercase\"===n&&(t=t.toLocaleLowerCase()),Ci.applyArabicShaping&&(t=Ci.applyArabicShaping(t)),t}(t.text,e,r)})),t}Ki([{name:\"triangle\",components:3,type:\"Uint16\"}]),Ki([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),Ki([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"},{type:\"Float32\",name:\"collisionCircleDiameter\"}]),Ki([{type:\"Float32\",name:\"offsetX\"}]),Ki([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);var Tl={\"!\":\"︕\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",\"(\":\"︵\",\")\":\"︶\",\"*\":\"*\",\"+\":\"+\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\"/\":\"/\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\"=\":\"=\",\">\":\"﹀\",\"?\":\"︖\",\"@\":\"@\",\"[\":\"﹇\",\"\\\\\":\"\\",\"]\":\"﹈\",\"^\":\"^\",_:\"︳\",\"`\":\"`\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"~\":\"~\",\"¢\":\"¢\",\"£\":\"£\",\"¥\":\"¥\",\"¦\":\"¦\",\"¬\":\"¬\",\"¯\":\" ̄\",\"–\":\"︲\",\"—\":\"︱\",\"‘\":\"﹃\",\"’\":\"﹄\",\"“\":\"﹁\",\"”\":\"﹂\",\"…\":\"︙\",\"‧\":\"・\",\"₩\":\"₩\",\"、\":\"︑\",\"。\":\"︒\",\"〈\":\"︿\",\"〉\":\"﹀\",\"《\":\"︽\",\"》\":\"︾\",\"「\":\"﹁\",\"」\":\"﹂\",\"『\":\"﹃\",\"』\":\"﹄\",\"【\":\"︻\",\"】\":\"︼\",\"〔\":\"︹\",\"〕\":\"︺\",\"〖\":\"︗\",\"〗\":\"︘\",\"!\":\"︕\",\"(\":\"︵\",\")\":\"︶\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\">\":\"﹀\",\"?\":\"︖\",\"[\":\"﹇\",\"]\":\"﹈\",\"_\":\"︳\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"⦅\":\"︵\",\"⦆\":\"︶\",\"。\":\"︒\",\"「\":\"﹁\",\"」\":\"﹂\"};var kl=24,Al=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},Ml=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,f=c>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*v},Sl=El;function El(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}El.Varint=0,El.Fixed64=1,El.Bytes=2,El.Fixed32=5;var Ll=4294967296,Cl=1/Ll,Pl=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function Ol(t){return t.type===El.Bytes?t.readVarint()+t.pos:t.pos+1}function Il(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Dl(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function zl(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function Rl(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function Fl(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function Bl(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function Nl(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function jl(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function Ul(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function Vl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function Hl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function ql(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function Gl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function Zl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}El.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=ql(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=Zl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=ql(this.buf,this.pos)+ql(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readSFixed64:function(){var t=ql(this.buf,this.pos)+Zl(this.buf,this.pos+4)*Ll;return this.pos+=8,t},readFloat:function(){var t=Al(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Al(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return Il(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return Il(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return Il(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Pl?function(t,e,r){return Pl.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){for(var n=\"\",i=e;i<r;){var a,o,s,l=t[i],u=null,c=l>239?4:l>223?3:l>191?2:1;if(i+c>r)break;1===c?l<128&&(u=l):2===c?128==(192&(a=t[i+1]))&&(u=(31&l)<<6|63&a)<=127&&(u=null):3===c?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((u=(15&l)<<12|(63&a)<<6|63&o)<=2047||u>=55296&&u<=57343)&&(u=null)):4===c&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((u=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||u>=1114112)&&(u=null)),null===u?(u=65533,c=1):u>65535&&(u-=65536,n+=String.fromCharCode(u>>>10&1023|55296),u=56320|1023&u),n+=String.fromCharCode(u),i+=c}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==El.Bytes)return t.push(this.readVarint(e));var r=Ol(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==El.Bytes)return t.push(this.readSVarint());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==El.Bytes)return t.push(this.readBoolean());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==El.Bytes)return t.push(this.readFloat());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==El.Bytes)return t.push(this.readDouble());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed32());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==El.Bytes)return t.push(this.readSFixed64());var e=Ol(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===El.Varint)for(;this.buf[this.pos++]>127;);else if(e===El.Bytes)this.pos=this.readVarint()+this.pos;else if(e===El.Fixed32)this.pos+=4;else{if(e!==El.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),Gl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),Gl(this.buf,-1&t,this.pos),Gl(this.buf,Math.floor(t*Cl),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a<e.length;a++){if((n=e.charCodeAt(a))>55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&Dl(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),Ml(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Ml(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&Dl(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,El.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,zl,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,Rl,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,Nl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,Fl,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,Bl,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,jl,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,Ul,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,Vl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,Hl,e)},writeBytesField:function(t,e){this.writeTag(t,El.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,El.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,El.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,El.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,El.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,El.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,El.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var Yl=3;function Wl(t,e,r){1===t&&r.readMessage(Xl,e)}function Xl(t,e,r){if(3===t){var n=r.readMessage(Jl,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,l=n.left,u=n.top,c=n.advance;e.push({id:i,bitmap:new Yo({width:o+2*Yl,height:s+2*Yl},a),metrics:{width:o,height:s,left:l,top:u,advance:c}})}}function Jl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var Kl=Yl;function $l(t){for(var e=0,r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];e+=a.w*a.h,r=Math.max(r,a.w)}t.sort((function(t,e){return e.h-t.h}));for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,u=0,c=t;u<c.length;u+=1)for(var f=c[u],h=o.length-1;h>=0;h--){var p=o[h];if(!(f.w>p.w||f.h>p.h)){if(f.x=p.x,f.y=p.y,l=Math.max(l,f.y+f.h),s=Math.max(s,f.x+f.w),f.w===p.w&&f.h===p.h){var d=o.pop();h<o.length&&(o[h]=d)}else f.h===p.h?(p.x+=f.w,p.w-=f.w):f.w===p.w?(p.y+=f.h,p.h-=f.h):(o.push({x:p.x+f.w,y:p.y,w:p.w-f.w,h:f.h}),p.y+=f.h,p.h-=f.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Ql=1,tu=function(t,e){var r=e.pixelRatio,n=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=r,this.stretchX=i,this.stretchY=a,this.content=o,this.version=n},eu={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};eu.tl.get=function(){return[this.paddedRect.x+Ql,this.paddedRect.y+Ql]},eu.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-Ql,this.paddedRect.y+this.paddedRect.h-Ql]},eu.tlbr.get=function(){return this.tl.concat(this.br)},eu.displaySize.get=function(){return[(this.paddedRect.w-2*Ql)/this.pixelRatio,(this.paddedRect.h-2*Ql)/this.pixelRatio]},Object.defineProperties(tu.prototype,eu);var ru=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=$l(i),o=a.w,s=a.h,l=new Wo({width:o||1,height:s||1});for(var u in t){var c=t[u],f=r[u].paddedRect;Wo.copy(c.data,l,{x:0,y:0},{x:f.x+Ql,y:f.y+Ql},c.data)}for(var h in e){var p=e[h],d=n[h].paddedRect,v=d.x+Ql,g=d.y+Ql,y=p.data.width,m=p.data.height;Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g},p.data),Wo.copy(p.data,l,{x:0,y:m-1},{x:v,y:g-1},{width:y,height:1}),Wo.copy(p.data,l,{x:0,y:0},{x:v,y:g+m},{width:y,height:1}),Wo.copy(p.data,l,{x:y-1,y:0},{x:v-1,y:g},{width:1,height:m}),Wo.copy(p.data,l,{x:0,y:0},{x:v+y,y:g},{width:1,height:m})}this.image=l,this.iconPositions=r,this.patternPositions=n};ru.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2*Ql,h:i.data.height+2*Ql};r.push(a),e[n]=new tu(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},ru.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},ru.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,i=n[0],a=n[1];r.update(e.data,void 0,{x:i,y:a})}},ni(\"ImagePosition\",tu),ni(\"ImageAtlas\",ru);var nu={horizontal:1,vertical:2,horizontalOnly:3},iu=-17;var au=function(){this.scale=1,this.fontStack=\"\",this.imageName=null};au.forText=function(t,e){var r=new au;return r.scale=t||1,r.fontStack=e,r},au.forImage=function(t){var e=new au;return e.imageName=t,e};var ou=function(){this.text=\"\",this.sectionIndex=[],this.sections=[],this.imageSectionID=null};function su(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=ou.fromFeature(t,i);f===nu.vertical&&y.verticalizePunctuation();var m=Ci.processBidirectionalText,x=Ci.processStyledBidirectionalText;if(m&&1===y.sections.length){g=[];for(var b=0,_=m(y.toString(),vu(y,u,a,e,n,p,d));b<_.length;b+=1){var w=_[b],T=new ou;T.text=w,T.sections=y.sections;for(var k=0;k<w.length;k++)T.sectionIndex.push(0);g.push(T)}}else if(x){g=[];for(var A=0,M=x(y.text,y.sectionIndex,vu(y,u,a,e,n,p,d));A<M.length;A+=1){var S=M[A],E=new ou;E.text=S[0],E.sectionIndex=S[1],E.sections=y.sections,g.push(E)}}else g=function(t,e){for(var r=[],n=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];r.push(t.substring(i,s)),i=s}return i<n.length&&r.push(t.substring(i,n.length)),r}(y,vu(y,u,a,e,n,p,d));var L=[],C={positionedLines:L,text:y.toString(),top:c[1],bottom:c[1],left:c[0],right:c[0],writingMode:f,iconsInText:!1,verticalizable:!1};return function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=0,p=iu,d=0,v=0,g=\"right\"===s?1:\"left\"===s?0:.5,y=0,m=0,x=i;m<x.length;m+=1){var b=x[m];b.trim();var _=b.getMaxScale(),w=(_-1)*kl,T={positionedGlyphs:[],lineOffset:0};t.positionedLines[y]=T;var k=T.positionedGlyphs,A=0;if(b.length()){for(var M=0;M<b.length();M++){var S=b.getSection(M),E=b.getSectionIndex(M),L=b.getCharCode(M),C=0,P=null,O=null,I=null,D=kl,z=!(l===nu.horizontal||!c&&!hi(L)||c&&(lu[L]||di(L)));if(S.imageName){var R=n[S.imageName];if(!R)continue;I=S.imageName,t.iconsInText=t.iconsInText||!0,O=R.paddedRect;var F=R.displaySize;S.scale=S.scale*kl/f,P={width:F[0],height:F[1],left:Ql,top:-Kl,advance:z?F[1]:F[0]},C=w+(kl-F[1]*S.scale),D=P.advance;var B=z?F[0]*S.scale-kl*_:F[1]*S.scale-kl*_;B>0&&B>A&&(A=B)}else{var N=r[S.fontStack],j=N&&N[L];if(j&&j.rect)O=j.rect,P=j.metrics;else{var U=e[S.fontStack],V=U&&U[L];if(!V)continue;P=V.metrics}C=(_-S.scale)*kl}z?(t.verticalizable=!0,k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=D*S.scale+u):(k.push({glyph:L,imageName:I,x:h,y:p+C,vertical:z,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:O}),h+=P.advance*S.scale+u)}if(0!==k.length){var H=h-u;d=Math.max(H,d),yu(k,0,k.length-1,g,A)}h=0;var q=a*_+A;T.lineOffset=Math.max(A,w),p+=q,v=Math.max(q,v),++y}else p+=a,++y}var G=p-iu,Z=gu(o),Y=Z.horizontalAlign,W=Z.verticalAlign;(function(t,e,r,n,i,a,o,s,l){var u=(e-r)*i,c=0;c=a!==o?-s*n-iu:(-n*l+.5)*o;for(var f=0,h=t;f<h.length;f+=1)for(var p=0,d=h[f].positionedGlyphs;p<d.length;p+=1){var v=d[p];v.x+=u,v.y+=c}})(t.positionedLines,g,Y,W,d,v,a,G,i.length),t.top+=-W*G,t.bottom=t.top+G,t.left+=-Y*d,t.right=t.left+d}(C,e,r,n,g,o,s,l,f,u,h,v),!function(t){for(var e=0,r=t;e<r.length;e+=1)if(0!==r[e].positionedGlyphs.length)return!1;return!0}(L)&&C}ou.fromFeature=function(t,e){for(var r=new ou,n=0;n<t.sections.length;n++){var i=t.sections[n];i.image?r.addImageSection(i):r.addTextSection(i,e)}return r},ou.prototype.length=function(){return this.text.length},ou.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},ou.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},ou.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},ou.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e=\"\",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,i=t.charCodeAt(r-1)||null;n&&pi(n)&&!Tl[t[r+1]]||i&&pi(i)&&!Tl[t[r-1]]||!Tl[t[r]]?e+=t[r]:e+=Tl[t[r]]}return e}(this.text)},ou.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&lu[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&lu[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},ou.prototype.substring=function(t,e){var r=new ou;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},ou.prototype.toString=function(){return this.text},ou.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},ou.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(au.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n<t.text.length;++n)this.sectionIndex.push(r)},ou.prototype.addImageSection=function(t){var e=t.image?t.image.name:\"\";if(0!==e.length){var r=this.getNextImageSectionCharCode();r?(this.text+=String.fromCharCode(r),this.sections.push(au.forImage(e)),this.sectionIndex.push(this.sections.length-1)):w(\"Reached maximum number of images 6401\")}else w(\"Can't add FormattedSection with an empty image.\")},ou.prototype.getNextImageSectionCharCode=function(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var lu={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},uu={};function cu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*kl/a+i:0}var s=r[e.fontStack],l=s&&s[t];return l?l.metrics.advance*e.scale+i:0}function fu(t,e,r,n){var i=Math.pow(t-e,2);return n?t<e?i/2:2*i:i+Math.abs(r)*r}function hu(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function pu(t,e,r,n,i,a){for(var o=null,s=fu(e,r,i,a),l=0,u=n;l<u.length;l+=1){var c=u[l],f=fu(e-c.x,r,i,a)+c.badness;f<=s&&(o=c,s=f)}return{index:t,x:e,priorBreak:o,badness:s}}function du(t){return t?du(t.priorBreak).concat(t.index):[]}function vu(t,e,r,n,i,a,o){if(\"point\"!==a)return[];if(!t)return[];for(var s=[],l=function(t,e,r,n,i,a){for(var o=0,s=0;s<t.length();s++){var l=t.getSection(s);o+=cu(t.getCharCode(s),l,n,i,e,a)}return o/Math.max(1,Math.ceil(o/r))}(t,e,r,n,i,o),u=t.text.indexOf(\"​\")>=0,c=0,f=0;f<t.length();f++){var h=t.getSection(f),p=t.getCharCode(f);if(lu[p]||(c+=cu(p,h,n,i,e,o)),f<t.length()-1){var d=!((v=p)<11904||!(ci[\"Bopomofo Extended\"](v)||ci.Bopomofo(v)||ci[\"CJK Compatibility Forms\"](v)||ci[\"CJK Compatibility Ideographs\"](v)||ci[\"CJK Compatibility\"](v)||ci[\"CJK Radicals Supplement\"](v)||ci[\"CJK Strokes\"](v)||ci[\"CJK Symbols and Punctuation\"](v)||ci[\"CJK Unified Ideographs Extension A\"](v)||ci[\"CJK Unified Ideographs\"](v)||ci[\"Enclosed CJK Letters and Months\"](v)||ci[\"Halfwidth and Fullwidth Forms\"](v)||ci.Hiragana(v)||ci[\"Ideographic Description Characters\"](v)||ci[\"Kangxi Radicals\"](v)||ci[\"Katakana Phonetic Extensions\"](v)||ci.Katakana(v)||ci[\"Vertical Forms\"](v)||ci[\"Yi Radicals\"](v)||ci[\"Yi Syllables\"](v)));(uu[p]||d||h.imageName)&&s.push(pu(f+1,c,l,s,hu(p,t.getCharCode(f+1),d&&u),!1))}}var v;return du(pu(t.length(),c,l,s,0,!0))}function gu(t){var e=.5,r=.5;switch(t){case\"right\":case\"top-right\":case\"bottom-right\":e=1;break;case\"left\":case\"top-left\":case\"bottom-left\":e=0}switch(t){case\"bottom\":case\"bottom-right\":case\"bottom-left\":r=1;break;case\"top\":case\"top-right\":case\"top-left\":r=0}return{horizontalAlign:e,verticalAlign:r}}function yu(t,e,r,n,i){if(n||i)for(var a=t[r],o=a.metrics.advance*a.scale,s=(t[r].x+o)*n,l=e;l<=r;l++)t[l].x-=s,t[l].y+=i}function mu(t,e,r,n,i,a){var o,s=t.image;if(s.content){var l=s.content,u=s.pixelRatio||1;o=[l[0]/u,l[1]/u,s.displaySize[0]-l[2]/u,s.displaySize[1]-l[3]/u]}var c,f,h,p,d=e.left*a,v=e.right*a;\"width\"===r||\"both\"===r?(p=i[0]+d-n[3],f=i[0]+v+n[1]):f=(p=i[0]+(d+v-s.displaySize[0])/2)+s.displaySize[0];var g=e.top*a,y=e.bottom*a;return\"height\"===r||\"both\"===r?(c=i[1]+g-n[0],h=i[1]+y+n[2]):h=(c=i[1]+(g+y-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:c,right:f,bottom:h,left:p,collisionPadding:o}}uu[10]=!0,uu[32]=!0,uu[38]=!0,uu[40]=!0,uu[41]=!0,uu[43]=!0,uu[45]=!0,uu[47]=!0,uu[173]=!0,uu[183]=!0,uu[8203]=!0,uu[8208]=!0,uu[8211]=!0,uu[8231]=!0;var xu=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(a);ni(\"Anchor\",xu);var bu=128;function _u(t,e){var r=e.expression;if(\"constant\"===r.kind)return{kind:\"constant\",layoutSize:r.evaluate(new Pi(t+1))};if(\"source\"===r.kind)return{kind:\"source\"};for(var n=r.zoomStops,i=r.interpolationType,a=0;a<n.length&&n[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[a],l=n[o];return\"composite\"===r.kind?{kind:\"composite\",minZoom:s,maxZoom:l,interpolationType:i}:{kind:\"camera\",minZoom:s,maxZoom:l,minSize:r.evaluate(new Pi(s)),maxSize:r.evaluate(new Pi(l)),interpolationType:i}}function wu(t,e,r){var n=e.uSize,i=e.uSizeT,a=r.lowerSize,o=r.upperSize;return\"source\"===t.kind?a/bu:\"composite\"===t.kind?$e(a/bu,o/bu,i):n}function Tu(t,e){var r=0,n=0;if(\"constant\"===t.kind)n=t.layoutSize;else if(\"source\"!==t.kind){var i=t.interpolationType,a=t.minZoom,o=t.maxZoom,s=i?u(xr.interpolationFactor(i,e,a,o),0,1):0;\"camera\"===t.kind?n=$e(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var ku=Object.freeze({__proto__:null,getSizeData:_u,evaluateSizeForFeature:wu,evaluateSizeForZoom:Tu,SIZE_PACK_FACTOR:bu});function Au(t,e,r,n,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],u=0;s<r/2;){var c=t[o-1],f=t[o],h=t[o+1];if(!h)return!1;var p=c.angleTo(f)-f.angleTo(h);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),u+=p;s-l[0].distance>n;)u-=l.shift().angleDelta;if(u>i)return!1;o++,s+=f.dist(h)}return!0}function Mu(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Su(t,e,r){return t?.6*e*r:0}function Eu(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Lu(t,e,r,n,i,a){for(var o=Su(r,i,a),s=Eu(r,n)*a,l=0,u=Mu(t)/2,c=0;c<t.length-1;c++){var f=t[c],h=t[c+1],p=f.dist(h);if(l+p>u){var d=(u-l)/p,v=$e(f.x,h.x,d),g=$e(f.y,h.y,d),y=new xu(v,g,h.angleTo(f),c);return y._round(),!o||Au(t,y,s,o,e)?y:void 0}l+=p}}function Cu(t,e,r,n,i,a,o,s,l){var u=Su(n,a,o),c=Eu(n,i),f=c*o,h=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-f<e/4&&(e=f+e/4),Pu(t,h?e/2*s%e:(c/2+2*a)*o*s%e,e,u,r,f,h,!1,l)}function Pu(t,e,r,n,i,a,o,s,l){for(var u=a/2,c=Mu(t),f=0,h=e-r,p=[],d=0;d<t.length-1;d++){for(var v=t[d],g=t[d+1],y=v.dist(g),m=g.angleTo(v);h+r<f+y;){var x=((h+=r)-f)/y,b=$e(v.x,g.x,x),_=$e(v.y,g.y,x);if(b>=0&&b<l&&_>=0&&_<l&&h-u>=0&&h+u<=c){var w=new xu(b,_,m,d);w._round(),n&&!Au(t,w,a,n,i)||p.push(w)}}f+=y}return s||p.length||o||(p=Pu(t,f/2,r,n,i,a,o,!0,l)),p}function Ou(t,e,r,n,i){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],u=void 0,c=0;c<l.length-1;c++){var f=l[c],h=l[c+1];f.x<e&&h.x<e||(f.x<e?f=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round():h.x<e&&(h=new a(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round()),f.y<r&&h.y<r||(f.y<r?f=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round():h.y<r&&(h=new a(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round()),f.x>=n&&h.x>=n||(f.x>=n?f=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round():h.x>=n&&(h=new a(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round()),f.y>=i&&h.y>=i||(f.y>=i?f=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round():h.y>=i&&(h=new a(f.x+(h.x-f.x)*((i-f.y)/(h.y-f.y)),i)._round()),u&&f.equals(u[u.length-1])||(u=[f],o.push(u)),u.push(h)))))}return o}var Iu=Ql;function Du(t,e,r,n){var i=[],o=t.image,s=o.pixelRatio,l=o.paddedRect.w-2*Iu,u=o.paddedRect.h-2*Iu,c=t.right-t.left,f=t.bottom-t.top,h=o.stretchX||[[0,l]],p=o.stretchY||[[0,u]],d=function(t,e){return t+e[1]-e[0]},v=h.reduce(d,0),g=p.reduce(d,0),y=l-v,m=u-g,x=0,b=v,_=0,w=g,T=0,k=y,A=0,M=m;if(o.content&&n){var S=o.content;x=zu(h,0,S[0]),_=zu(p,0,S[1]),b=zu(h,S[0],S[2]),w=zu(p,S[1],S[3]),T=S[0]-x,A=S[1]-_,k=S[2]-S[0]-b,M=S[3]-S[1]-w}var E=function(n,i,l,u){var h=Fu(n.stretch-x,b,c,t.left),p=Bu(n.fixed-T,k,n.stretch,v),d=Fu(i.stretch-_,w,f,t.top),y=Bu(i.fixed-A,M,i.stretch,g),m=Fu(l.stretch-x,b,c,t.left),S=Bu(l.fixed-T,k,l.stretch,v),E=Fu(u.stretch-_,w,f,t.top),L=Bu(u.fixed-A,M,u.stretch,g),C=new a(h,d),P=new a(m,d),O=new a(m,E),I=new a(h,E),D=new a(p/s,y/s),z=new a(S/s,L/s),R=e*Math.PI/180;if(R){var F=Math.sin(R),B=Math.cos(R),N=[B,-F,F,B];C._matMult(N),P._matMult(N),I._matMult(N),O._matMult(N)}var j=n.stretch+n.fixed,U=l.stretch+l.fixed,V=i.stretch+i.fixed,H=u.stretch+u.fixed;return{tl:C,tr:P,bl:I,br:O,tex:{x:o.paddedRect.x+Iu+j,y:o.paddedRect.y+Iu+V,w:U-j,h:H-V},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:D,pixelOffsetBR:z,minFontScaleX:k/s/c,minFontScaleY:M/s/f,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var L=Ru(h,y,v),C=Ru(p,m,g),P=0;P<L.length-1;P++)for(var O=L[P],I=L[P+1],D=0;D<C.length-1;D++){var z=C[D],R=C[D+1];i.push(E(O,z,I,R))}else i.push(E({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:u+1}));return i}function zu(t,e,r){for(var n=0,i=0,a=t;i<a.length;i+=1){var o=a[i];n+=Math.max(e,Math.min(r,o[1]))-Math.max(e,Math.min(r,o[0]))}return n}function Ru(t,e,r){for(var n=[{fixed:-Iu,stretch:0}],i=0,a=t;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=n[n.length-1];n.push({fixed:s-u.stretch,stretch:u.stretch}),n.push({fixed:s-u.stretch,stretch:u.stretch+(l-s)})}return n.push({fixed:e+Iu,stretch:r}),n}function Fu(t,e,r,n){return t/e*r+n}function Bu(t,e,r,n){return t-e*r/n}var Nu=function(t,e,r,n,i,o,s,l,u,c){if(this.boxStartIndex=t.length,u){var f=o.top,h=o.bottom,p=o.collisionPadding;p&&(f-=p[1],h+=p[3]);var d=h-f;d>0&&(d=Math.max(10,d),this.circleDiameter=d)}else{var v=o.top*s-l,g=o.bottom*s+l,y=o.left*s-l,m=o.right*s+l,x=o.collisionPadding;if(x&&(y-=x[0]*s,v-=x[1]*s,m+=x[2]*s,g+=x[3]*s),c){var b=new a(y,v),_=new a(m,v),w=new a(y,g),T=new a(m,g),k=c*Math.PI/180;b._rotate(k),_._rotate(k),w._rotate(k),T._rotate(k),y=Math.min(b.x,_.x,w.x,T.x),m=Math.max(b.x,_.x,w.x,T.x),v=Math.min(b.y,_.y,w.y,T.y),g=Math.max(b.y,_.y,w.y,T.y)}t.emplaceBack(e.x,e.y,y,v,m,g,r,n,i)}this.boxEndIndex=t.length},ju=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=Uu),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function Uu(t,e){return t<e?-1:t>e?1:0}function Vu(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,i=1/0,o=-1/0,s=-1/0,l=t[0],u=0;u<l.length;u++){var c=l[u];(!u||c.x<n)&&(n=c.x),(!u||c.y<i)&&(i=c.y),(!u||c.x>o)&&(o=c.x),(!u||c.y>s)&&(s=c.y)}var f=o-n,h=s-i,p=Math.min(f,h),d=p/2,v=new ju([],Hu);if(0===p)return new a(n,i);for(var g=n;g<o;g+=p)for(var y=i;y<s;y+=p)v.push(new qu(g+d,y+d,d,t));for(var m=function(t){for(var e=0,r=0,n=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var l=i[a],u=i[s],c=l.x*u.y-u.x*l.y;r+=(l.x+u.x)*c,n+=(l.y+u.y)*c,e+=3*c}return new qu(r/e,n/e,0,t)}(t),x=v.length;v.length;){var b=v.pop();(b.d>m.d||!m.d)&&(m=b,r&&console.log(\"found best %d after %d probes\",Math.round(1e4*b.d)/1e4,x)),b.max-m.d<=e||(d=b.h/2,v.push(new qu(b.p.x-d,b.p.y-d,d,t)),v.push(new qu(b.p.x+d,b.p.y-d,d,t)),v.push(new qu(b.p.x-d,b.p.y+d,d,t)),v.push(new qu(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log(\"num probes: \"+x),console.log(\"best distance: \"+m.d)),m.p}function Hu(t,e){return e.max-t.max}function qu(t,e,r,n){this.p=new a(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,l=s-1;o<s;l=o++){var u=a[o],c=a[l];u.y>t.y!=c.y>t.y&&t.x<(c.x-u.x)*(t.y-u.y)/(c.y-u.y)+u.x&&(r=!r),n=Math.min(n,ko(t,u,c))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}ju.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},ju.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},ju.prototype.peek=function(){return this.data[0]},ju.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i}e[t]=n},ju.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&r(e[s],o)<0&&(a=s,o=e[s]),r(o,i)>=0)break;e[t]=o,t=a}e[t]=i};var Gu=7,Zu=Number.POSITIVE_INFINITY;function Yu(t,e){return e[1]!==Zu?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case\"top-right\":case\"top-left\":case\"top\":i=r-Gu;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i=-r+Gu}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":n=-e;break;case\"top-left\":case\"bottom-left\":case\"left\":n=e}return[n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":n=i-Gu;break;case\"bottom-right\":case\"bottom-left\":n=-i+Gu;break;case\"bottom\":n=-e+Gu;break;case\"top\":n=e-Gu}switch(t){case\"top-right\":case\"bottom-right\":r=-i;break;case\"top-left\":case\"bottom-left\":r=i;break;case\"left\":r=e;break;case\"right\":r=-e}return[r,n]}(t,e[0])}function Wu(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return\"right\";case\"left\":case\"top-left\":case\"bottom-left\":return\"left\"}return\"center\"}var Xu=255,Ju=Xu*bu;function Ku(t,e,r,n,i,o,s,l,u,c,f,h,p,d,v){var g=function(t,e,r,n,i,o,s,l){for(var u=n.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,c=[],f=0,h=e.positionedLines;f<h.length;f+=1)for(var p=h[f],d=0,v=p.positionedGlyphs;d<v.length;d+=1){var g=v[d];if(g.rect){var y=g.rect||{},m=Kl+1,x=!0,b=1,_=0,w=(i||l)&&g.vertical,T=g.metrics.advance*g.scale/2;if(l&&e.verticalizable){var k=(g.scale-1)*kl,A=(kl-g.metrics.width*g.scale)/2;_=p.lineOffset/2-(g.imageName?-A:k)}if(g.imageName){var M=s[g.imageName];x=M.sdf,b=M.pixelRatio,m=Ql/b}var S=i?[g.x+T,g.y]:[0,0],E=i?[0,0]:[g.x+T+r[0],g.y+r[1]-_],L=[0,0];w&&(L=E,E=[0,0]);var C=(g.metrics.left-m)*g.scale-T+E[0],P=(-g.metrics.top-m)*g.scale+E[1],O=C+y.w*g.scale/b,I=P+y.h*g.scale/b,D=new a(C,P),z=new a(O,P),R=new a(C,I),F=new a(O,I);if(w){var B=new a(-T,T-iu),N=-Math.PI/2,j=kl/2-T,U=g.imageName?j:0,V=new a(5-iu-j,-U),H=new(Function.prototype.bind.apply(a,[null].concat(L)));D._rotateAround(N,B)._add(V)._add(H),z._rotateAround(N,B)._add(V)._add(H),R._rotateAround(N,B)._add(V)._add(H),F._rotateAround(N,B)._add(V)._add(H)}if(u){var q=Math.sin(u),G=Math.cos(u),Z=[G,-q,q,G];D._matMult(Z),z._matMult(Z),R._matMult(Z),F._matMult(Z)}var Y=new a(0,0),W=new a(0,0);c.push({tl:D,tr:z,bl:R,br:F,tex:y,writingMode:e.writingMode,glyphOffset:S,sectionIndex:g.sectionIndex,isSDF:x,pixelOffsetTL:Y,pixelOffsetBR:W,minFontScaleX:0,minFontScaleY:0})}}return c}(0,r,l,i,o,s,n,t.allowVerticalPlacement),y=t.textSizeData,m=null;\"source\"===y.kind?(m=[bu*i.layout.get(\"text-size\").evaluate(s,{})])[0]>Ju&&w(t.layerIds[0]+': Value for \"text-size\" is >= '+Xu+'. Reduce your \"text-size\".'):\"composite\"===y.kind&&((m=[bu*d.compositeTextSizes[0].evaluate(s,{},v),bu*d.compositeTextSizes[1].evaluate(s,{},v)])[0]>Ju||m[1]>Ju)&&w(t.layerIds[0]+': Value for \"text-size\" is >= '+Xu+'. Reduce your \"text-size\".'),t.addSymbols(t.text,g,m,l,o,s,c,e,u.lineStartIndex,u.lineLength,p,v);for(var x=0,b=f;x<b.length;x+=1)h[b[x]]=t.text.placedSymbolArray.length-1;return 4*g.length}function $u(t){for(var e in t)return t[e];return null}function Qu(t,e,r,n){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(n.dist(a[o])<r)return!0}else i[e]=[];return i[e].push(n),!1}var tc=Js.VectorTileFeature.types,ec=[{name:\"a_fade_opacity\",components:1,type:\"Uint8\",offset:0}];function rc(t,e,r,n,i,a,o,s,l,u,c,f,h){var p=s?Math.min(Ju,Math.round(s[0])):0,d=s?Math.min(Ju,Math.round(s[1])):0;t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,(p<<1)+(l?1:0),d,16*u,16*c,256*f,256*h)}function nc(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}function ic(t){for(var e=0,r=t.sections;e<r.length;e+=1)if(yi(r[e].text))return!0;return!1}var ac=function(t){this.layoutVertexArray=new ia,this.indexArray=new fa,this.programConfigurations=t,this.segments=new Oa,this.dynamicLayoutVertexArray=new aa,this.opacityVertexArray=new oa,this.placedSymbolArray=new ka};ac.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length&&0===this.indexArray.length&&0===this.dynamicLayoutVertexArray.length&&0===this.opacityVertexArray.length},ac.prototype.upload=function(t,e,r,n){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,yl.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,ml.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,ec,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t))},ac.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},ni(\"SymbolBuffers\",ac);var oc=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Oa,this.collisionVertexArray=new ca};oc.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,xl.members,!0)},oc.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},ni(\"CollisionBuffers\",oc);var sc=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasRTLText=!1,this.sortKeyRanges=[],this.collisionCircleArray=[],this.placementInvProjMatrix=Do([]),this.placementViewportMatrix=Do([]);var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=_u(this.zoom,e[\"text-size\"]),this.iconSizeData=_u(this.zoom,e[\"icon-size\"]);var r=this.layers[0].layout,n=r.get(\"symbol-sort-key\"),i=r.get(\"symbol-z-order\");this.sortFeaturesByKey=\"viewport-y\"!==i&&void 0!==n.constantOr(1);var a=\"viewport-y\"===i||\"auto\"===i&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&(r.get(\"text-allow-overlap\")||r.get(\"icon-allow-overlap\")||r.get(\"text-ignore-placement\")||r.get(\"icon-ignore-placement\")),\"point\"===r.get(\"symbol-placement\")&&(this.writingModes=r.get(\"text-writing-mode\").map((function(t){return nu[t]}))),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID=t.sourceID};sc.prototype.createArrays=function(){this.text=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^text/.test(t)}))),this.icon=new ac(new so(yl.members,this.layers,this.zoom,(function(t){return/^icon/.test(t)}))),this.glyphOffsetArray=new Sa,this.lineVertexArray=new Ea,this.symbolInstances=new Ma},sc.prototype.calculateGlyphDependencies=function(t,e,r,n,i){for(var a=0;a<t.length;a++)if(e[t.charCodeAt(a)]=!0,(r||n)&&i){var o=Tl[t.charAt(a)];o&&(e[o.charCodeAt(0)]=!0)}},sc.prototype.populate=function(t,e,r){var n=this.layers[0],i=n.layout,a=i.get(\"text-font\"),o=i.get(\"text-field\"),s=i.get(\"icon-image\"),l=(\"constant\"!==o.value.kind||o.value.value instanceof ue&&!o.value.value.isEmpty()||o.value.value.toString().length>0)&&(\"constant\"!==a.value.kind||a.value.value.length>0),u=\"constant\"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,c=i.get(\"symbol-sort-key\");if(this.features=[],l||u){for(var f=e.iconDependencies,h=e.glyphDependencies,p=e.availableImages,d=new Pi(this.zoom),v=0,g=t;v<g.length;v+=1){var y=g[v],m=y.feature,x=y.id,b=y.index,_=y.sourceLayerIndex,w=n._featureFilter.needGeometry,T={type:m.type,id:x,properties:m.properties,geometry:w?po(m):[]};if(n._featureFilter.filter(d,T,r)){w||(T.geometry=po(m));var k=void 0;if(l){var A=n.getValueAndResolveTokens(\"text-field\",T,r,p),M=ue.factory(A);ic(M)&&(this.hasRTLText=!0),(!this.hasRTLText||\"unavailable\"===Ei()||this.hasRTLText&&Ci.isParsed())&&(k=wl(M,n,T))}var S=void 0;if(u){var E=n.getValueAndResolveTokens(\"icon-image\",T,r,p);S=E instanceof ce?E:ce.fromString(E)}if(k||S){var L=this.sortFeaturesByKey?c.evaluate(T,{},r):void 0,C={id:x,text:k,icon:S,index:b,sourceLayerIndex:_,geometry:po(m),properties:m.properties,type:tc[m.type],sortKey:L};if(this.features.push(C),S&&(f[S.name]=!0),k){var P=a.evaluate(T,{},r).join(\",\"),O=\"map\"===i.get(\"text-rotation-alignment\")&&\"point\"!==i.get(\"symbol-placement\");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(nu.vertical)>=0;for(var I=0,D=k.sections;I<D.length;I+=1){var z=D[I];if(z.image)f[z.image.name]=!0;else{var R=fi(k.toString()),F=z.fontStack||P,B=h[F]=h[F]||{};this.calculateGlyphDependencies(z.text,B,O,this.allowVerticalPlacement,R)}}}}}}\"line\"===i.get(\"symbol-placement\")&&(this.features=function(t){var e={},r={},n=[],i=0;function a(e){n.push(t[e]),i++}function o(t,e,i){var a=r[t];return delete r[t],r[e]=a,n[a].geometry[0].pop(),n[a].geometry[0]=n[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a=e[r];return delete e[r],e[t]=a,n[a].geometry[0].shift(),n[a].geometry[0]=i[0].concat(n[a].geometry[0]),a}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+\":\"+n.x+\":\"+n.y}for(var u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.text?c.text.toString():null;if(h){var p=l(h,f),d=l(h,f,!0);if(p in r&&d in e&&r[p]!==e[d]){var v=s(p,d,f),g=o(p,d,n[v].geometry);delete e[p],delete r[d],r[l(h,n[g].geometry,!0)]=g,n[v].geometry=null}else p in r?o(p,d,f):d in e?s(p,d,f):(a(u),e[p]=i-1,r[d]=i-1)}else a(u)}return n.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey&&this.features.sort((function(t,e){return t.sortKey-e.sortKey}))}},sc.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},sc.prototype.isEmpty=function(){return 0===this.symbolInstances.length&&!this.hasRTLText},sc.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},sc.prototype.upload=function(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},sc.prototype.destroyDebugData=function(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()},sc.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()},sc.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var u=a[l];this.lineVertexArray.emplaceBack(u.x,u.y,u.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},sc.prototype.addSymbols=function(t,e,r,n,i,a,o,s,l,u,c,f){for(var h=t.indexArray,p=t.layoutVertexArray,d=t.segments.prepareSegment(4*e.length,p,h,a.sortKey),v=this.glyphOffsetArray.length,g=d.vertexLength,y=this.allowVerticalPlacement&&o===nu.vertical?Math.PI/2:0,m=a.text&&a.text.sections,x=0;x<e.length;x++){var b=e[x],_=b.tl,w=b.tr,T=b.bl,k=b.br,A=b.tex,M=b.pixelOffsetTL,S=b.pixelOffsetBR,E=b.minFontScaleX,L=b.minFontScaleY,C=b.glyphOffset,P=b.isSDF,O=b.sectionIndex,I=d.vertexLength,D=C[1];rc(p,s.x,s.y,_.x,D+_.y,A.x,A.y,r,P,M.x,M.y,E,L),rc(p,s.x,s.y,w.x,D+w.y,A.x+A.w,A.y,r,P,S.x,M.y,E,L),rc(p,s.x,s.y,T.x,D+T.y,A.x,A.y+A.h,r,P,M.x,S.y,E,L),rc(p,s.x,s.y,k.x,D+k.y,A.x+A.w,A.y+A.h,r,P,S.x,S.y,E,L),nc(t.dynamicLayoutVertexArray,s,y),h.emplaceBack(I,I+1,I+2),h.emplaceBack(I+1,I+2,I+3),d.vertexLength+=4,d.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(C[0]),x!==e.length-1&&O===e[x+1].sectionIndex||t.programConfigurations.populatePaintArrays(p.length,a,a.index,{},f,m&&m[O])}t.placedSymbolArray.emplaceBack(s.x,s.y,v,this.glyphOffsetArray.length-v,g,l,u,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0,c)},sc.prototype._addCollisionDebugVertex=function(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},sc.prototype.addCollisionDebugVertices=function(t,e,r,n,i,o,s){var l=i.segments.prepareSegment(4,i.layoutVertexArray,i.indexArray),u=l.vertexLength,c=i.layoutVertexArray,f=i.collisionVertexArray,h=s.anchorX,p=s.anchorY;this._addCollisionDebugVertex(c,f,o,h,p,new a(t,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,e)),this._addCollisionDebugVertex(c,f,o,h,p,new a(r,n)),this._addCollisionDebugVertex(c,f,o,h,p,new a(t,n)),l.vertexLength+=4;var d=i.indexArray;d.emplaceBack(u,u+1),d.emplaceBack(u+1,u+2),d.emplaceBack(u+2,u+3),d.emplaceBack(u+3,u),l.primitiveLength+=4},sc.prototype.addDebugCollisionBoxes=function(t,e,r,n){for(var i=t;i<e;i++){var a=this.collisionBoxArray.get(i),o=a.x1,s=a.y1,l=a.x2,u=a.y2;this.addCollisionDebugVertices(o,s,l,u,n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r)}},sc.prototype.generateCollisionDebugBuffers=function(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new oc(la,bl.members,ya),this.iconCollisionBox=new oc(la,bl.members,ya);for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}},sc.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,i,a,o,s,l){for(var u={},c=e;c<r;c++){var f=t.get(c);u.textBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.textFeatureIndex=f.featureIndex;break}for(var h=n;h<i;h++){var p=t.get(h);u.verticalTextBox={x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},u.verticalTextFeatureIndex=p.featureIndex;break}for(var d=a;d<o;d++){var v=t.get(d);u.iconBox={x1:v.x1,y1:v.y1,x2:v.x2,y2:v.y2,anchorPointX:v.anchorPointX,anchorPointY:v.anchorPointY},u.iconFeatureIndex=v.featureIndex;break}for(var g=s;g<l;g++){var y=t.get(g);u.verticalIconBox={x1:y.x1,y1:y.y1,x2:y.x2,y2:y.y2,anchorPointX:y.anchorPointX,anchorPointY:y.anchorPointY},u.verticalIconFeatureIndex=y.featureIndex;break}return u},sc.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex))}},sc.prototype.hasTextData=function(){return this.text.segments.get().length>0},sc.prototype.hasIconData=function(){return this.icon.segments.get().length>0},sc.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},sc.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},sc.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},sc.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i<n;i+=4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3)},sc.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex)}return a.sort((function(t,e){return n[t]-n[e]||i[e]-i[t]})),a},sc.prototype.addToSortKeyRanges=function(t,e){var r=this.sortKeyRanges[this.sortKeyRanges.length-1];r&&r.sortKey===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})},sc.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var i=n[r],a=this.symbolInstances.get(i);this.featureSortOrder.push(a.featureIndex),[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t)})),a.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,a.verticalPlacedTextSymbolIndex),a.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.placedIconSymbolIndex),a.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,a.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},ni(\"SymbolBucket\",sc,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),sc.MAX_GLYPHS=65535,sc.addDynamicAttributes=nc;var lc=new Gi({\"symbol-placement\":new ji(Dt.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new ji(Dt.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new ji(Dt.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new Ui(Dt.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new ji(Dt.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new ji(Dt.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new ji(Dt.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new ji(Dt.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new ji(Dt.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new Ui(Dt.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new ji(Dt.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new ji(Dt.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new Ui(Dt.layout_symbol[\"icon-image\"]),\"icon-rotate\":new Ui(Dt.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new ji(Dt.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new ji(Dt.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new Ui(Dt.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new Ui(Dt.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new ji(Dt.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new ji(Dt.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new ji(Dt.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new Ui(Dt.layout_symbol[\"text-field\"]),\"text-font\":new Ui(Dt.layout_symbol[\"text-font\"]),\"text-size\":new Ui(Dt.layout_symbol[\"text-size\"]),\"text-max-width\":new Ui(Dt.layout_symbol[\"text-max-width\"]),\"text-line-height\":new ji(Dt.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new Ui(Dt.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new Ui(Dt.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new Ui(Dt.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new ji(Dt.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new Ui(Dt.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new ji(Dt.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new ji(Dt.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new Ui(Dt.layout_symbol[\"text-rotate\"]),\"text-padding\":new ji(Dt.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new ji(Dt.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new Ui(Dt.layout_symbol[\"text-transform\"]),\"text-offset\":new Ui(Dt.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new ji(Dt.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new ji(Dt.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new ji(Dt.layout_symbol[\"text-optional\"])}),uc={paint:new Gi({\"icon-opacity\":new Ui(Dt.paint_symbol[\"icon-opacity\"]),\"icon-color\":new Ui(Dt.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new Ui(Dt.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new Ui(Dt.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new Ui(Dt.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new ji(Dt.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new ji(Dt.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new Ui(Dt.paint_symbol[\"text-opacity\"]),\"text-color\":new Ui(Dt.paint_symbol[\"text-color\"],{runtimeType:Zt,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),\"text-halo-color\":new Ui(Dt.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new Ui(Dt.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new Ui(Dt.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new ji(Dt.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new ji(Dt.paint_symbol[\"text-translate-anchor\"])}),layout:lc},cc=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Vt,this.defaultValue=t};cc.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},cc.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},cc.prototype.outputDefined=function(){return!1},cc.prototype.serialize=function(){return null},ni(\"FormatSectionOverride\",cc,{omit:[\"defaultValue\"]});var fc=function(t){function e(e){t.call(this,e,uc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),\"auto\"===this.layout.get(\"icon-rotation-alignment\")&&(\"point\"!==this.layout.get(\"symbol-placement\")?this.layout._values[\"icon-rotation-alignment\"]=\"map\":this.layout._values[\"icon-rotation-alignment\"]=\"viewport\"),\"auto\"===this.layout.get(\"text-rotation-alignment\")&&(\"point\"!==this.layout.get(\"symbol-placement\")?this.layout._values[\"text-rotation-alignment\"]=\"map\":this.layout._values[\"text-rotation-alignment\"]=\"viewport\"),\"auto\"===this.layout.get(\"text-pitch-alignment\")&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")),\"auto\"===this.layout.get(\"icon-pitch-alignment\")&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\")),\"point\"===this.layout.get(\"symbol-placement\")){var n=this.layout.get(\"text-writing-mode\");if(n){for(var i=[],a=0,o=n;a<o.length;a+=1){var s=o[a];i.indexOf(s)<0&&i.push(s)}this.layout._values[\"text-writing-mode\"]=i}else this.layout._values[\"text-writing-mode\"]=[\"horizontal\"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e,r,n){var i=this.layout.get(t).evaluate(e,{},r,n),a=this._unevaluatedLayout._values[t];return a.isDataDriven()||sn(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,r){return r in t?String(t[r]):\"\"}))}(e.properties,i)},e.prototype.createBucket=function(t){return new sc(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,r=uc.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var i,a=this.paint.get(n),o=new cc(a),s=new on(o,a.property.specification);i=\"constant\"===a.value.kind||\"source\"===a.value.kind?new un(\"source\",s):new cn(\"composite\",s,a.value.zoomStops,a.value._interpolationType),this.paint._values[n]=new Bi(a.property,i,a.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get(\"text-field\"),n=uc.paint.properties[e],i=!1,a=function(t){for(var e=0,r=t;e<r.length;e+=1){var a=r[e];if(n.overrides&&n.overrides.hasOverride(a))return void(i=!0)}};if(\"constant\"===r.value.kind&&r.value.value instanceof ue)a(r.value.value.sections);else if(\"source\"===r.value.kind){var o=function(t){if(!i)if(t instanceof ve&&pe(t.value)===Jt){var e=t.value;a(e.sections)}else t instanceof xe?a(t.sections):t.eachChild(o)},s=r.value;s._styleExpression&&o(s._styleExpression.expression)}return i},e}(Yi),hc={paint:new Gi({\"background-color\":new ji(Dt.paint_background[\"background-color\"]),\"background-pattern\":new Hi(Dt.paint_background[\"background-pattern\"]),\"background-opacity\":new ji(Dt.paint_background[\"background-opacity\"])})},pc=function(t){function e(e){t.call(this,e,hc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi),dc={paint:new Gi({\"raster-opacity\":new ji(Dt.paint_raster[\"raster-opacity\"]),\"raster-hue-rotate\":new ji(Dt.paint_raster[\"raster-hue-rotate\"]),\"raster-brightness-min\":new ji(Dt.paint_raster[\"raster-brightness-min\"]),\"raster-brightness-max\":new ji(Dt.paint_raster[\"raster-brightness-max\"]),\"raster-saturation\":new ji(Dt.paint_raster[\"raster-saturation\"]),\"raster-contrast\":new ji(Dt.paint_raster[\"raster-contrast\"]),\"raster-resampling\":new ji(Dt.paint_raster[\"raster-resampling\"]),\"raster-fade-duration\":new ji(Dt.paint_raster[\"raster-fade-duration\"])})},vc=function(t){function e(e){t.call(this,e,dc)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yi);var gc=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return\"3d\"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(Yi),yc={circle:Uo,heatmap:Ko,hillshade:Qo,fill:js,\"fill-extrusion\":nl,line:vl,symbol:fc,background:pc,raster:vc};var mc=self.HTMLImageElement,xc=self.HTMLCanvasElement,bc=self.HTMLVideoElement,_c=self.ImageData,wc=self.ImageBitmap,Tc=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Tc.prototype.update=function(t,e,r){var n=t.width,i=t.height,a=!(this.size&&this.size[0]===n&&this.size[1]===i||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[n,i],t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},u=l.x,c=l.y;t instanceof mc||t instanceof xc||t instanceof bc||t instanceof _c||wc&&t instanceof wc?s.texSubImage2D(s.TEXTURE_2D,0,u,c,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,u,c,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Tc.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Tc.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Tc.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var kc=function(t){var e=this;this._callback=t,this._triggered=!1,\"undefined\"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};kc.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered=!1,t._callback()}),0))},kc.prototype.remove=function(){delete this._channel,this._callback=function(){}};var Ac=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},g([\"receive\",\"process\"],this),this.invoker=new kc(this.process),this.target.addEventListener(\"message\",this.receive,!1),this.globalScope=A()?t:self};function Mc(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}Ac.prototype.send=function(t,e,r,n,i){var a=this;void 0===i&&(i=!1);var o=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[o]=r);var s=E(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!r,targetMapId:n,mustQueue:i,sourceMapId:this.mapId,data:si(e,s)},s),{cancel:function(){r&&delete a.callbacks[o],a.target.postMessage({id:o,type:\"<cancel>\",targetMapId:n,sourceMapId:a.mapId})}}},Ac.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if(\"<cancel>\"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n()}else A()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e)},Ac.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e)}},Ac.prototype.processTask=function(t,e){var r=this;if(\"<response>\"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(li(e.error)):n(null,li(e.data)))}else{var i=!1,a=E(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\"<response>\",sourceMapId:r.mapId,error:e?si(e):null,data:si(n,a)},a)}:function(t){i=!0},s=null,l=li(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,l,o);else if(this.parent.getWorkerSource){var u=e.type.split(\".\");s=this.parent.getWorkerSource(e.sourceMapId,u[0],l.source)[u[1]](l,o)}else o(new Error(\"Could not find function \"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel)}},Ac.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1)};var Sc=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Sc.prototype.setNorthEast=function(t){return this._ne=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.setSouthWest=function(t){return this._sw=t instanceof Lc?new Lc(t.lng,t.lat):Lc.convert(t),this},Sc.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Lc)e=t,r=t;else{if(!(t instanceof Sc)){if(Array.isArray(t)){if(4===t.length||t.every(Array.isArray)){var a=t;return this.extend(Sc.convert(a))}var o=t;return this.extend(Lc.convert(o))}return this}if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Lc(e.lng,e.lat),this._ne=new Lc(r.lng,r.lat)),this},Sc.prototype.getCenter=function(){return new Lc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Sc.prototype.getSouthWest=function(){return this._sw},Sc.prototype.getNorthEast=function(){return this._ne},Sc.prototype.getNorthWest=function(){return new Lc(this.getWest(),this.getNorth())},Sc.prototype.getSouthEast=function(){return new Lc(this.getEast(),this.getSouth())},Sc.prototype.getWest=function(){return this._sw.lng},Sc.prototype.getSouth=function(){return this._sw.lat},Sc.prototype.getEast=function(){return this._ne.lng},Sc.prototype.getNorth=function(){return this._ne.lat},Sc.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Sc.prototype.toString=function(){return\"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Sc.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Sc.prototype.contains=function(t){var e=Lc.convert(t),r=e.lng,n=e.lat,i=this._sw.lat<=n&&n<=this._ne.lat,a=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(a=this._sw.lng>=r&&r>=this._ne.lng),i&&a},Sc.convert=function(t){return!t||t instanceof Sc?t:new Sc(t)};var Ec=6371008.8,Lc=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Lc.prototype.wrap=function(){return new Lc(c(this.lng,-180,180),this.lat)},Lc.prototype.toArray=function(){return[this.lng,this.lat]},Lc.prototype.toString=function(){return\"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Lc.prototype.distanceTo=function(t){var e=Math.PI/180,r=this.lat*e,n=t.lat*e,i=Math.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return Ec*Math.acos(Math.min(i,1))},Lc.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Sc(new Lc(this.lng-r,this.lat-e),new Lc(this.lng+r,this.lat+e))},Lc.convert=function(t){if(t instanceof Lc)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Lc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\"object\"==typeof t&&null!==t)return new Lc(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\")};var Cc=2*Math.PI*Ec;function Pc(t){return Cc*Math.cos(t*Math.PI/180)}function Oc(t){return(180+t)/360}function Ic(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Dc(t,e){return t/Pc(e)}function zc(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var Rc=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};Rc.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Lc.convert(t);return new Rc(Oc(r.lng),Ic(r.lat),Dc(e,r.lat))},Rc.prototype.toLngLat=function(){return new Lc(360*this.x-180,zc(this.y))},Rc.prototype.toAltitude=function(){return t=this.z,e=this.y,t*Pc(zc(e));var t,e},Rc.prototype.meterInMercatorCoordinateUnits=function(){return 1/Cc*(t=zc(this.y),1/Math.cos(t*Math.PI/180));var t};var Fc=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=jc(0,t,t,e,r)};Fc.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Fc.prototype.url=function(t,e){var r,n,i,a,o,s=(r=this.x,n=this.y,i=this.z,a=Mc(256*r,256*(n=Math.pow(2,i)-n-1),i),o=Mc(256*(r+1),256*(n+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),l=function(t,e,r){for(var n,i=\"\",a=t;a>0;a--)i+=(e&(n=1<<a-1)?1:0)+(r&n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\"{prefix}\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\"{z}\",String(this.z)).replace(\"{x}\",String(this.x)).replace(\"{y}\",String(\"tms\"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace(\"{quadkey}\",l).replace(\"{bbox-epsg-3857}\",s)},Fc.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new a((t.x*e-this.x)*co,(t.y*e-this.y)*co)},Fc.prototype.toString=function(){return this.z+\"/\"+this.x+\"/\"+this.y};var Bc=function(t,e){this.wrap=t,this.canonical=e,this.key=jc(t,e.z,e.z,e.x,e.y)},Nc=function(t,e,r,n,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Fc(r,+n,+i),this.key=jc(e,t,r,n,i)};function jc(t,e,r,n,i){(t*=2)<0&&(t=-1*t-1);var a=1<<r;return(a*a*t+a*i+n).toString(36)+r.toString(36)+e.toString(36)}Nc.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Nc.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Nc(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Nc(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Nc.prototype.calculateScaledKey=function(t,e){var r=this.canonical.z-t;return t>this.canonical.z?jc(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):jc(this.wrap*+e,t,t,this.canonical.x>>r,this.canonical.y>>r)},Nc.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Nc.prototype.children=function(t){if(this.overscaledZ>=t)return[new Nc(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Nc(e,this.wrap,e,r,n),new Nc(e,this.wrap,e,r+1,n),new Nc(e,this.wrap,e,r,n+1),new Nc(e,this.wrap,e,r+1,n+1)]},Nc.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Nc.prototype.wrapped=function(){return new Nc(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.unwrapTo=function(t){return new Nc(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Nc.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Nc.prototype.toUnwrapped=function(){return new Bc(this.wrap,this.canonical)},Nc.prototype.toString=function(){return this.overscaledZ+\"/\"+this.canonical.x+\"/\"+this.canonical.y},Nc.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Rc(t.x-this.wrap,t.y))},ni(\"CanonicalTileID\",Fc),ni(\"OverscaledTileID\",Nc,{omit:[\"posMatrix\"]});var Uc=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError(\"DEM tiles must be square\");if(r&&\"mapbox\"!==r&&\"terrarium\"!==r)return w('\"'+r+'\" is not a valid encoding type. Valid types include \"mapbox\" and \"terrarium\".');this.stride=e.height;var n=this.dim=e.height-2;this.data=new Uint32Array(e.data.buffer),this.encoding=r||\"mapbox\";for(var i=0;i<n;i++)this.data[this._idx(-1,i)]=this.data[this._idx(0,i)],this.data[this._idx(n,i)]=this.data[this._idx(n-1,i)],this.data[this._idx(i,-1)]=this.data[this._idx(i,0)],this.data[this._idx(i,n)]=this.data[this._idx(i,n-1)];this.data[this._idx(-1,-1)]=this.data[this._idx(0,0)],this.data[this._idx(n,-1)]=this.data[this._idx(n-1,0)],this.data[this._idx(-1,n)]=this.data[this._idx(0,n-1)],this.data[this._idx(n,n)]=this.data[this._idx(n-1,n-1)]};Uc.prototype.get=function(t,e){var r=new Uint8Array(this.data.buffer),n=4*this._idx(t,e);return(\"terrarium\"===this.encoding?this._unpackTerrarium:this._unpackMapbox)(r[n],r[n+1],r[n+2])},Uc.prototype.getUnpackVector=function(){return\"terrarium\"===this.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},Uc.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return(e+1)*this.stride+(t+1)},Uc.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Uc.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Uc.prototype.getPixels=function(){return new Wo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Uc.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\"dem dimension mismatch\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1}switch(r){case-1:a=o-1;break;case 1:o=a+1}for(var s=-e*this.dim,l=-r*this.dim,u=a;u<o;u++)for(var c=n;c<i;c++)this.data[this._idx(c,u)]=t.data[this._idx(c+s,u+l)]},ni(\"DEMData\",Uc);var Vc=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};Vc.prototype.encode=function(t){return this._stringToNumber[t]},Vc.prototype.decode=function(t){return this._numberToString[t]};var Hc=function(t,e,r,n,i){this.type=\"Feature\",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,this.id=i},qc={geometry:{configurable:!0}};qc.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},qc.geometry.set=function(t){this._geometry=t},Hc.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)\"_geometry\"!==e&&\"_vectorTileFeature\"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Hc.prototype,qc);var Gc=function(){this.state={},this.stateChanges={},this.deletedStates={}};Gc.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},f(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==n&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var a in this.deletedStates[t][n]={},this.state[t][n])r[a]||(this.deletedStates[t][n][a]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},Gc.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},Gc.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},i=this.stateChanges[t]||{},a=f({},n[r],i[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete a[s]}return a},Gc.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Gc.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),f(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var u in this.deletedStates[o]){if(null===this.deletedStates[o][u])this.state[o][u]={};else for(var c=0,h=Object.keys(this.deletedStates[o][u]);c<h.length;c+=1){var p=h[c];delete this.state[o][u][p]}s[u]=this.state[o][u]}r[o]=r[o]||{},f(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Zc=function(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new Kn(co,16,0),this.grid3D=new Kn(co,16,0),this.featureIndexArray=new Ca,this.promoteId=e};function Yc(t,e,r,n,i){return m(t,(function(t,a){var o=e instanceof Ni?e.get(a):null;return o&&o.evaluate?o.evaluate(r,n,i):o}))}function Wc(t){for(var e=1/0,r=1/0,n=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),i=Math.max(i,s.y)}return{minX:e,minY:r,maxX:n,maxY:i}}function Xc(t,e){return e-t}Zc.prototype.insert=function(t,e,r,n,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s=a?this.grid3D:this.grid,l=0;l<e.length;l++){for(var u=e[l],c=[1/0,1/0,-1/0,-1/0],f=0;f<u.length;f++){var h=u[f];c[0]=Math.min(c[0],h.x),c[1]=Math.min(c[1],h.y),c[2]=Math.max(c[2],h.x),c[3]=Math.max(c[3],h.y)}c[0]<co&&c[1]<co&&c[2]>=0&&c[3]>=0&&s.insert(o,c[0],c[1],c[2],c[3])}},Zc.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Js.VectorTile(new Sl(this.rawTileData)).layers,this.sourceLayerCoder=new Vc(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},Zc.prototype.query=function(t,e,r,n){var i=this;this.loadVTLayers();for(var o=t.params||{},s=co/t.tileSize/t.scale,l=wn(o.filter),u=t.queryGeometry,c=t.queryPadding*s,f=Wc(u),h=this.grid.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c),p=Wc(t.cameraQueryGeometry),d=0,v=this.grid3D.query(p.minX-c,p.minY-c,p.maxX+c,p.maxY+c,(function(e,r,n,i){return function(t,e,r,n,i){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&i>=l.y)return!0}var u=[new a(e,r),new a(e,i),new a(n,i),new a(n,r)];if(t.length>2)for(var c=0,f=u;c<f.length;c+=1)if(Mo(t,f[c]))return!0;for(var h=0;h<t.length-1;h++)if(So(t[h],t[h+1],u))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,i+c)}));d<v.length;d+=1){var g=v[d];h.push(g)}h.sort(Xc);for(var y,m={},x=function(a){var c=h[a];if(c!==y){y=c;var f=i.featureIndexArray.get(c),p=null;i.loadMatchingFeature(m,f.bucketIndex,f.sourceLayerIndex,f.featureIndex,l,o.layers,o.availableImages,e,r,n,(function(e,r,n){return p||(p=po(e)),r.queryIntersectsFeature(u,e,n,p,i.z,t.transform,s,t.pixelPosMatrix)}))}},b=0;b<h.length;b++)x(b);return m},Zc.prototype.loadMatchingFeature=function(t,e,r,n,i,a,o,s,l,u,c){var f=this.bucketLayerIDs[e];if(!a||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(a,f)){var h=this.sourceLayerCoder.decode(r),p=this.vtLayers[h].feature(n);if(i.filter(new Pi(this.tileID.overscaledZ),p))for(var d=this.getId(p,h),v=0;v<f.length;v++){var g=f[v];if(!(a&&a.indexOf(g)<0)){var y=s[g];if(y){var m={};void 0!==d&&u&&(m=u.getState(y.sourceLayer||\"_geojsonTileLayer\",d));var x=l[g];x.paint=Yc(x.paint,y.paint,p,m,o),x.layout=Yc(x.layout,y.layout,p,m,o);var b=!c||c(p,y,m);if(b){var _=new Hc(p,this.z,this.x,this.y,d);_.layer=x;var w=t[g];void 0===w&&(w=t[g]=[]),w.push({featureIndex:n,feature:_,intersectionZ:b})}}}}}},Zc.prototype.lookupSymbolFeatures=function(t,e,r,n,i,a,o,s){var l={};this.loadVTLayers();for(var u=wn(i),c=0,f=t;c<f.length;c+=1){var h=f[c];this.loadMatchingFeature(l,r,n,h,u,a,o,s,e)}return l},Zc.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,i=r[e];n<i.length;n+=1)if(t===i[n])return!0;return!1},Zc.prototype.getId=function(t,e){var r=t.id;if(this.promoteId){var n=\"string\"==typeof this.promoteId?this.promoteId:this.promoteId[e];\"boolean\"==typeof(r=t.properties[n])&&(r=Number(r))}return r},ni(\"FeatureIndex\",Zc,{omit:[\"rawTileData\",\"sourceLayerCoder\"]});var Jc=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.expiredRequestCount=0,this.state=\"loading\"};Jc.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<F.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Jc.prototype.wasRequested=function(){return\"errored\"===this.state||\"loaded\"===this.state||\"reloading\"===this.state},Jc.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state=\"loaded\",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=a[i],n=t.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map((function(t){return n.filter((function(e){return e.id===t}))[0]})));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},i=0,a=t;i<a.length;i+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[n];if(i instanceof sc){if(this.hasSymbolBuckets=!0,!r)break;i.justReloaded=!0}}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(var a in this.buckets){var o=this.buckets[a];if(o instanceof sc&&o.hasRTLText){this.hasRTLText=!0,Ci.isLoading()||Ci.isLoaded()||\"deferred\"!==Ei()||Li();break}}for(var s in this.queryPadding=0,this.buckets){var l=this.buckets[s];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(s).queryRadius(l))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new wa},Jc.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state=\"unloaded\"},Jc.prototype.getBucket=function(t){return this.buckets[t.id]},Jc.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Tc(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Tc(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Jc.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Jc.prototype.queryRenderedFeatures=function(t,e,r,n,i,a,o,s,l,u){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:n,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:u,transform:s,params:o,queryPadding:this.queryPadding*l},t,e,r):{}},Jc.prototype.querySourceFeatures=function(t,e){var r=this.latestFeatureIndex;if(r&&r.rawTileData){var n=r.loadVTLayers(),i=e?e.sourceLayer:\"\",a=n._geojsonTileLayer||n[i];if(a)for(var o=wn(e&&e.filter),s=this.tileID.canonical,l=s.z,u=s.x,c=s.y,f={z:l,x:u,y:c},h=0;h<a.length;h++){var p=a.feature(h);if(o.filter(new Pi(this.tileID.overscaledZ),p)){var d=r.getId(p,i),v=new Hc(p,l,u,c,d);v.tile=f,t.push(v)}}}},Jc.prototype.hasData=function(){return\"loaded\"===this.state||\"reloading\"===this.state||\"expired\"===this.state},Jc.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Jc.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=M(t.cacheControl);r[\"max-age\"]&&(this.expirationTime=Date.now()+1e3*r[\"max-age\"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTime<e)i=!0;else{var a=this.expirationTime-e;a?this.expirationTime=n+Math.max(a,3e4):i=!0}else i=!0;i?(this.expiredRequestCount++,this.state=\"expired\"):this.expiredRequestCount=0}},Jc.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Jc.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets)if(e.style.hasLayer(n)){var i=this.buckets[n],a=i.layers[0].sourceLayer||\"_geojsonTileLayer\",o=r[a],s=t[a];if(o&&s&&0!==Object.keys(s).length){i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{});var l=e&&e.style&&e.style.getLayer(n);l&&(this.queryPadding=Math.max(this.queryPadding,l.queryRadius(i)))}}}},Jc.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Jc.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<F.now()},Jc.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Jc.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=F.now()+t},Jc.prototype.setDependencies=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1)r[i[n]]=!0;this.dependencies[t]=r},Jc.prototype.hasDependency=function(t,e){for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=this.dependencies[i];if(a)for(var o=0,s=e;o<s.length;o+=1)if(a[s[o]])return!0}return!1};var Kc=self.performance,$c=function(t){this._marks={start:[t.url,\"start\"].join(\"#\"),end:[t.url,\"end\"].join(\"#\"),measure:t.url.toString()},Kc.mark(this._marks.start)};$c.prototype.finish=function(){Kc.mark(this._marks.end);var t=Kc.getEntriesByName(this._marks.measure);return 0===t.length&&(Kc.measure(this._marks.measure,this._marks.start,this._marks.end),t=Kc.getEntriesByName(this._marks.measure),Kc.clearMarks(this._marks.start),Kc.clearMarks(this._marks.end),Kc.clearMeasures(this._marks.measure)),t},t.Actor=Ac,t.AlphaImage=Yo,t.CanonicalTileID=Fc,t.CollisionBoxArray=wa,t.Color=oe,t.DEMData=Uc,t.DataConstantProperty=ji,t.DictionaryCoder=Vc,t.EXTENT=co,t.ErrorEvent=Ot,t.EvaluationParameters=Pi,t.Event=Pt,t.Evented=It,t.FeatureIndex=Zc,t.FillBucket=Fs,t.FillExtrusionBucket=tl,t.ImageAtlas=ru,t.ImagePosition=tu,t.LineBucket=cl,t.LngLat=Lc,t.LngLatBounds=Sc,t.MercatorCoordinate=Rc,t.ONE_EM=kl,t.OverscaledTileID=Nc,t.Point=a,t.Point$1=a,t.Properties=Gi,t.Protobuf=Sl,t.RGBAImage=Wo,t.RequestManager=q,t.RequestPerformance=$c,t.ResourceType=xt,t.SegmentVector=Oa,t.SourceFeatureState=Gc,t.StructArrayLayout1ui2=ma,t.StructArrayLayout2f1f2i16=ua,t.StructArrayLayout2i4=Qi,t.StructArrayLayout3ui6=fa,t.StructArrayLayout4i8=ta,t.SymbolBucket=sc,t.Texture=Tc,t.Tile=Jc,t.Transitionable=Di,t.Uniform1f=Ya,t.Uniform1i=Za,t.Uniform2f=Wa,t.Uniform3f=Xa,t.Uniform4f=Ja,t.UniformColor=Ka,t.UniformMatrix4f=Qa,t.UnwrappedTileID=Bc,t.ValidationError=zt,t.WritingMode=nu,t.ZoomHistory=ui,t.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t},t.addDynamicAttributes=nc,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach((function(t,o){e(t,(function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)}))}))},t.bezier=s,t.bindAll=g,t.browser=F,t.cacheEntryPossiblyAdded=function(t){++yt>ct&&(t.getActor().send(\"enforceCacheSizeLimit\",ut),yt=0)},t.clamp=u,t.clearTileCache=function(t){var e=self.caches.delete(lt);t&&e.catch(t).then((function(){return t()}))},t.clipLine=Ou,t.clone=function(t){var e=new Io(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.clone$2=function(t){var e=new Io(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=_l,t.config=B,t.create=function(){var t=new Io(16);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new Io(9);return Io!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new Io(4);return Io!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=ln,t.createLayout=Ki,t.createStyleLayer=function(t){return\"custom\"===t.type?new gc(t):new yc[t.type](t)},t.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t},t.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(var n=0;n<e.length;n++)if(!t(e[n],r[n]))return!1;return!0}if(\"object\"==typeof e&&null!==e&&null!==r){if(\"object\"!=typeof r)return!1;if(Object.keys(e).length!==Object.keys(r).length)return!1;for(var i in e)if(!t(e[i],r[i]))return!1;return!0}return e===r},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease=l,t.emitValidationErrors=Jn,t.endsWith=y,t.enforceCacheSizeLimit=function(t){ht(),tt&&tt.then((function(e){e.keys().then((function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])}))}))},t.evaluateSizeForFeature=wu,t.evaluateSizeForZoom=Tu,t.evaluateVariableOffset=Yu,t.evented=Si,t.extend=f,t.featureFilter=wn,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=gu,t.getAnchorJustification=Wu,t.getArrayBuffer=kt,t.getImage=Et,t.getJSON=function(t,e){return Tt(f(t,{type:\"json\"}),e)},t.getRTLTextPluginStatus=Ei,t.getReferrer=_t,t.getVideo=function(t,e){var r,n,i=self.document.createElement(\"video\");i.muted=!0,i.onloadstart=function(){e(null,i)};for(var a=0;a<t.length;a++){var o=self.document.createElement(\"source\");r=t[a],n=void 0,(n=self.document.createElement(\"a\")).href=r,n.protocol===self.document.location.protocol&&n.host===self.document.location.host||(i.crossOrigin=\"Anonymous\"),o.src=t[a],i.appendChild(o)}return{cancel:function(){}}},t.identity=Do,t.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],v=e[13],g=e[14],y=e[15],m=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,T=i*u-a*l,k=c*v-f*d,A=c*g-h*d,M=c*y-p*d,S=f*g-h*v,E=f*y-p*v,L=h*y-p*g,C=m*L-x*E+b*S+_*M-w*A+T*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(v*T-g*w+y*_)*C,t[3]=(h*w-f*T-p*_)*C,t[4]=(l*M-o*L-u*A)*C,t[5]=(r*L-i*M+a*A)*C,t[6]=(g*b-d*T-y*x)*C,t[7]=(c*T-h*b+p*x)*C,t[8]=(o*E-s*M+u*k)*C,t[9]=(n*M-r*E-a*k)*C,t[10]=(d*w-v*b+y*m)*C,t[11]=(f*b-c*w-p*m)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(v*x-d*_-g*m)*C,t[15]=(c*_-f*x+h*m)*C,t):null},t.isChar=ci,t.isMapboxURL=G,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=Tt,t.mapObject=m,t.mercatorXfromLng=Oc,t.mercatorYfromLat=Ic,t.mercatorZfromAltitude=Dc,t.mul=Ro,t.multiply=zo,t.mvt=Js,t.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=$e,t.offscreenCanvasSupported=mt,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t},t.parseGlyphPBF=function(t){return new Sl(t).readFields(Wl,[])},t.pbf=Sl,t.performSymbolLayout=function(t,e,r,n,i,a,o){t.createArrays();var s=512*t.overscaling;t.tilePixelRatio=co/s,t.compareText={},t.iconsNeedLinear=!1;var l=t.layers[0].layout,u=t.layers[0]._unevaluatedLayout._values,c={};if(\"composite\"===t.textSizeData.kind){var f=t.textSizeData,h=f.minZoom,p=f.maxZoom;c.compositeTextSizes=[u[\"text-size\"].possiblyEvaluate(new Pi(h),o),u[\"text-size\"].possiblyEvaluate(new Pi(p),o)]}if(\"composite\"===t.iconSizeData.kind){var d=t.iconSizeData,v=d.minZoom,g=d.maxZoom;c.compositeIconSizes=[u[\"icon-size\"].possiblyEvaluate(new Pi(v),o),u[\"icon-size\"].possiblyEvaluate(new Pi(g),o)]}c.layoutTextSize=u[\"text-size\"].possiblyEvaluate(new Pi(t.zoom+1),o),c.layoutIconSize=u[\"icon-size\"].possiblyEvaluate(new Pi(t.zoom+1),o),c.textMaxSize=u[\"text-size\"].possiblyEvaluate(new Pi(18));for(var y=l.get(\"text-line-height\")*kl,m=\"map\"===l.get(\"text-rotation-alignment\")&&\"point\"!==l.get(\"symbol-placement\"),x=l.get(\"text-keep-upright\"),b=l.get(\"text-size\"),_=function(){var a=k[T],s=l.get(\"text-font\").evaluate(a,{},o).join(\",\"),u=b.evaluate(a,{},o),f=c.layoutTextSize.evaluate(a,{},o),h=c.layoutIconSize.evaluate(a,{},o),p={horizontal:{},vertical:void 0},d=a.text,v=[0,0];if(d){var g=d.toString(),_=l.get(\"text-letter-spacing\").evaluate(a,{},o)*kl,A=function(t){for(var e=0,r=t;e<r.length;e+=1)if(n=r[e].charCodeAt(0),ci.Arabic(n)||ci[\"Arabic Supplement\"](n)||ci[\"Arabic Extended-A\"](n)||ci[\"Arabic Presentation Forms-A\"](n)||ci[\"Arabic Presentation Forms-B\"](n))return!1;var n;return!0}(g)?_:0,M=l.get(\"text-anchor\").evaluate(a,{},o),S=l.get(\"text-variable-anchor\");if(!S){var E=l.get(\"text-radial-offset\").evaluate(a,{},o);v=E?Yu(M,[E*kl,Zu]):l.get(\"text-offset\").evaluate(a,{},o).map((function(t){return t*kl}))}var L=m?\"center\":l.get(\"text-justify\").evaluate(a,{},o),C=l.get(\"symbol-placement\"),P=\"point\"===C?l.get(\"text-max-width\").evaluate(a,{},o)*kl:0,O=function(){t.allowVerticalPlacement&&fi(g)&&(p.vertical=su(d,e,r,i,s,P,y,M,\"left\",A,v,nu.vertical,!0,C,f,u))};if(!m&&S){for(var I=\"auto\"===L?S.map((function(t){return Wu(t)})):[L],D=!1,z=0;z<I.length;z++){var R=I[z];if(!p.horizontal[R])if(D)p.horizontal[R]=p.horizontal[0];else{var F=su(d,e,r,i,s,P,y,\"center\",R,A,v,nu.horizontal,!1,C,f,u);F&&(p.horizontal[R]=F,D=1===F.positionedLines.length)}}O()}else{\"auto\"===L&&(L=Wu(M));var B=su(d,e,r,i,s,P,y,M,L,A,v,nu.horizontal,!1,C,f,u);B&&(p.horizontal[L]=B),O(),fi(g)&&m&&x&&(p.vertical=su(d,e,r,i,s,P,y,M,L,A,v,nu.vertical,!1,C,f,u))}}var N=void 0,j=!1;if(a.icon&&a.icon.name){var U=n[a.icon.name];U&&(N=function(t,e,r){var n=gu(r),i=n.horizontalAlign,a=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*i,u=l+t.displaySize[0],c=s-t.displaySize[1]*a;return{image:t,top:c,bottom:c+t.displaySize[1],left:l,right:u}}(i[a.icon.name],l.get(\"icon-offset\").evaluate(a,{},o),l.get(\"icon-anchor\").evaluate(a,{},o)),j=U.sdf,void 0===t.sdfIcons?t.sdfIcons=U.sdf:t.sdfIcons!==U.sdf&&w(\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\"),(U.pixelRatio!==t.pixelRatio||0!==l.get(\"icon-rotate\").constantOr(1))&&(t.iconsNeedLinear=!0))}var V=$u(p.horizontal)||p.vertical;t.iconsInText=!!V&&V.iconsInText,(V||N)&&function(t,e,r,n,i,a,o,s,l,u,c){var f=a.textMaxSize.evaluate(e,{});void 0===f&&(f=o);var h,p=t.layers[0].layout,d=p.get(\"icon-offset\").evaluate(e,{},c),v=$u(r.horizontal),g=24,y=o/g,m=t.tilePixelRatio*y,x=t.tilePixelRatio*f/g,b=t.tilePixelRatio*s,_=t.tilePixelRatio*p.get(\"symbol-spacing\"),T=p.get(\"text-padding\")*t.tilePixelRatio,k=p.get(\"icon-padding\")*t.tilePixelRatio,A=p.get(\"text-max-angle\")/180*Math.PI,M=\"map\"===p.get(\"text-rotation-alignment\")&&\"point\"!==p.get(\"symbol-placement\"),S=\"map\"===p.get(\"icon-rotation-alignment\")&&\"point\"!==p.get(\"symbol-placement\"),E=p.get(\"symbol-placement\"),L=_/2,C=p.get(\"icon-text-fit\");n&&\"none\"!==C&&(t.allowVerticalPlacement&&r.vertical&&(h=mu(n,r.vertical,C,p.get(\"icon-text-fit-padding\"),d,y)),v&&(n=mu(n,v,C,p.get(\"icon-text-fit-padding\"),d,y)));var P=function(s,f){f.x<0||f.x>=co||f.y<0||f.y>=co||function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v,g,y,m,x,b,_,T,k,A){var M,S,E,L,C,P=t.addToLineVertexArray(e,r),O=0,I=0,D=0,z=0,R=-1,F=-1,B={},N=Fa(\"\"),j=0,U=0;if(void 0===s._unevaluatedLayout.getValue(\"text-radial-offset\")?(j=(M=s.layout.get(\"text-offset\").evaluate(b,{},k).map((function(t){return t*kl})))[0],U=M[1]):(j=s.layout.get(\"text-radial-offset\").evaluate(b,{},k)*kl,U=Zu),t.allowVerticalPlacement&&n.vertical){var V=s.layout.get(\"text-rotate\").evaluate(b,{},k)+90,H=n.vertical;L=new Nu(l,e,u,c,f,H,h,p,d,V),o&&(C=new Nu(l,e,u,c,f,o,g,y,d,V))}if(i){var q=s.layout.get(\"icon-rotate\").evaluate(b,{}),G=\"none\"!==s.layout.get(\"icon-text-fit\"),Z=Du(i,q,T,G),Y=o?Du(o,q,T,G):void 0;E=new Nu(l,e,u,c,f,i,g,y,!1,q),O=4*Z.length;var W=t.iconSizeData,X=null;\"source\"===W.kind?(X=[bu*s.layout.get(\"icon-size\").evaluate(b,{})])[0]>Ju&&w(t.layerIds[0]+': Value for \"icon-size\" is >= '+Xu+'. Reduce your \"icon-size\".'):\"composite\"===W.kind&&((X=[bu*_.compositeIconSizes[0].evaluate(b,{},k),bu*_.compositeIconSizes[1].evaluate(b,{},k)])[0]>Ju||X[1]>Ju)&&w(t.layerIds[0]+': Value for \"icon-size\" is >= '+Xu+'. Reduce your \"icon-size\".'),t.addSymbols(t.icon,Z,X,x,m,b,!1,e,P.lineStartIndex,P.lineLength,-1,k),R=t.icon.placedSymbolArray.length-1,Y&&(I=4*Y.length,t.addSymbols(t.icon,Y,X,x,m,b,nu.vertical,e,P.lineStartIndex,P.lineLength,-1,k),F=t.icon.placedSymbolArray.length-1)}for(var J in n.horizontal){var K=n.horizontal[J];if(!S){N=Fa(K.text);var $=s.layout.get(\"text-rotate\").evaluate(b,{},k);S=new Nu(l,e,u,c,f,K,h,p,d,$)}var Q=1===K.positionedLines.length;if(D+=Ku(t,e,K,a,s,d,b,v,P,n.vertical?nu.horizontal:nu.horizontalOnly,Q?Object.keys(n.horizontal):[J],B,R,_,k),Q)break}n.vertical&&(z+=Ku(t,e,n.vertical,a,s,d,b,v,P,nu.vertical,[\"vertical\"],B,F,_,k));var tt=S?S.boxStartIndex:t.collisionBoxArray.length,et=S?S.boxEndIndex:t.collisionBoxArray.length,rt=L?L.boxStartIndex:t.collisionBoxArray.length,nt=L?L.boxEndIndex:t.collisionBoxArray.length,it=E?E.boxStartIndex:t.collisionBoxArray.length,at=E?E.boxEndIndex:t.collisionBoxArray.length,ot=C?C.boxStartIndex:t.collisionBoxArray.length,st=C?C.boxEndIndex:t.collisionBoxArray.length,lt=-1,ut=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};lt=ut(S,lt),lt=ut(L,lt),lt=ut(E,lt);var ct=(lt=ut(C,lt))>-1?1:0;ct&&(lt*=A/kl),t.glyphOffsetArray.length>=sc.MAX_GLYPHS&&w(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,B.right>=0?B.right:-1,B.center>=0?B.center:-1,B.left>=0?B.left:-1,B.vertical||-1,R,F,N,tt,et,rt,nt,it,at,ot,st,u,D,z,O,I,ct,0,h,j,U,lt)}(t,f,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,m,T,M,l,b,k,S,d,e,a,u,c,o)};if(\"line\"===E)for(var O=0,I=Ou(e.geometry,0,0,co,co);O<I.length;O+=1)for(var D=I[O],z=0,R=Cu(D,_,A,r.vertical||v,n,g,x,t.overscaling,co);z<R.length;z+=1){var F=R[z];v&&Qu(t,v.text,L,F)||P(D,F)}else if(\"line-center\"===E)for(var B=0,N=e.geometry;B<N.length;B+=1){var j=N[B];if(j.length>1){var U=Lu(j,A,r.vertical||v,n,g,x);U&&P(j,U)}}else if(\"Polygon\"===e.type)for(var V=0,H=Is(e.geometry,0);V<H.length;V+=1){var q=H[V],G=Vu(q,16);P(q[0],new xu(G.x,G.y,0))}else if(\"LineString\"===e.type)for(var Z=0,Y=e.geometry;Z<Y.length;Z+=1){var W=Y[Z];P(W,new xu(W[0].x,W[0].y,0))}else if(\"Point\"===e.type)for(var X=0,J=e.geometry;X<J.length;X+=1)for(var K=0,$=J[X];K<$.length;K+=1){var Q=$[K];P([Q],new xu(Q.x,Q.y,0))}}(t,a,p,N,n,c,f,h,v,j,o)},T=0,k=t.features;T<k.length;T+=1)_();a&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,i){var a,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(a=1/(n-i),t[10]=(i+n)*a,t[14]=2*i*n*a):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i])}return r},t.plugin=Ci,t.polygonIntersectsPolygon=yo,t.postMapLoadEvent=st,t.postTurnstileEvent=at,t.potpack=$l,t.refProperties=[\"type\",\"source\",\"source-layer\",\"minzoom\",\"maxzoom\",\"filter\",\"layout\"],t.register=ni,t.registerForPluginStateChange=function(t){return t({pluginStatus:Ti,pluginURL:ki}),Si.on(\"pluginStateChange\",t),t},t.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t},t.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.scale$1=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},t.scale$2=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t},t.setCacheLimits=function(t,e){ut=t,ct=e},t.setRTLTextPlugin=function(t,e,r){if(void 0===r&&(r=!1),Ti===mi||Ti===xi||Ti===bi)throw new Error(\"setRTLTextPlugin cannot be called multiple times.\");ki=F.resolveURL(t),Ti=mi,wi=e,Mi(),r||Li()},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.sqrLen=jo,t.styleSpec=Dt,t.sub=Bo,t.symbolSize=ku,t.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},t.transformMat4=No,t.translate=function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,v=r[0],g=r[1],y=r[2];return e===t?(t[12]=e[0]*v+e[4]*g+e[8]*y+e[12],t[13]=e[1]*v+e[5]*g+e[9]*y+e[13],t[14]=e[2]*v+e[6]*g+e[10]*y+e[14],t[15]=e[3]*v+e[7]*g+e[11]*y+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*v+s*g+f*y+e[12],t[13]=i*v+l*g+h*y+e[13],t[14]=a*v+u*g+p*y+e[14],t[15]=o*v+c*g+d*y+e[15]),t},t.triggerPluginCompletionEvent=Ai,t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:\"layers.\"+r+': missing required property \"id\"'}),void 0===t.render&&e.push({message:\"layers.\"+r+': missing required method \"render\"'}),t.renderingMode&&\"2d\"!==t.renderingMode&&\"3d\"!==t.renderingMode&&e.push({message:\"layers.\"+r+': property \"renderingMode\" must be either \"2d\" or \"3d\"'}),e},t.validateLight=Yn,t.validateStyle=Zn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Js,t.version=r,t.warnOnce=w,t.webpSupported=N,t.window=self,t.wrap=c})),n(0,(function(t){function e(t){var r=typeof t;if(\"number\"===r||\"boolean\"===r||\"string\"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n=\"[\",i=0,a=t;i<a.length;i+=1)n+=e(a[i])+\",\";return n+\"]\"}for(var o=Object.keys(t).sort(),s=\"{\",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+\":\"+e(t[o[l]])+\",\";return s+\"}\"}function r(r){for(var n=\"\",i=0,a=t.refProperties;i<a.length;i+=1)n+=\"/\"+e(r[a[i]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var i=this,a=0,o=e;a<o.length;a+=1){var s=o[a];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var u=0,c=n;u<c.length;u+=1){var f=c[u];delete this.keyCache[f],delete this._layerConfigs[f],delete this._layers[f]}this.familiesBySource={};for(var h=0,p=function(t,e){for(var n={},i=0;i<t.length;i++){var a=e&&e[t[i].id]||r(t[i]);e&&(e[t[i].id]=a);var o=n[a];o||(o=n[a]=[]),o.push(t[i])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);h<p.length;h+=1){var d=p[h].map((function(t){return i._layers[t.id]})),v=d[0];if(\"none\"!==v.visibility){var g=v.source||\"\",y=this.familiesBySource[g];y||(y=this.familiesBySource[g]={});var m=v.sourceLayer||\"_geojsonTileLayer\",x=y[m];x||(x=y[m]=[]),x.push(d)}}};var i=function(e){var r={},n=[];for(var i in e){var a=e[i],o=r[i]={};for(var s in a){var l=a[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var u={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(u),o[s]={rect:u,metrics:l.metrics}}}}var c=t.potpack(n),f=c.w,h=c.h,p=new t.AlphaImage({width:f||1,height:h||1});for(var d in e){var v=e[d];for(var g in v){var y=v[+g];if(y&&0!==y.bitmap.width&&0!==y.bitmap.height){var m=r[d][g].rect;t.AlphaImage.copy(y.bitmap,p,{x:0,y:0},{x:m.x+1,y:m.y+1},y.bitmap)}}}this.image=p,this.positions=r};t.register(\"GlyphAtlas\",i);var a=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies,this.promoteId=e.promoteId};function o(e,r,n){for(var i=new t.EvaluationParameters(r),a=0,o=e;a<o.length;a+=1)o[a].recalculate(i,n)}function s(e,r){var n=t.getArrayBuffer(e.request,(function(e,n,i,a){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:i,expires:a})}));return function(){n.cancel(),r()}}a.prototype.parse=function(e,r,n,a,s){var l=this;this.status=\"parsing\",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var u=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID,this.promoteId);c.bucketLayerIDs=[];var f,h,p,d,v={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:n},y=r.familiesBySource[this.source];for(var m in y){var x=e.layers[m];if(x){1===x.version&&t.warnOnce('Vector tile source \"'+this.source+'\" layer \"'+m+'\" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var b=u.encode(m),_=[],w=0;w<x.length;w++){var T=x.feature(w),k=c.getId(T,m);_.push({feature:T,id:k,index:w,sourceLayerIndex:b})}for(var A=0,M=y[m];A<M.length;A+=1){var S=M[A],E=S[0];E.minzoom&&this.zoom<Math.floor(E.minzoom)||E.maxzoom&&this.zoom>=E.maxzoom||\"none\"!==E.visibility&&(o(S,this.zoom,n),(v[E.id]=E.createBucket({index:c.bucketLayerIDs.length,layers:S,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:b,sourceID:this.source})).populate(_,g,this.tileID.canonical),c.bucketLayerIDs.push(S.map((function(t){return t.id}))))}}}var L=t.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(L).length?a.send(\"getGlyphs\",{uid:this.uid,stacks:L},(function(t,e){f||(f=t,h=e,O.call(l))})):h={};var C=Object.keys(g.iconDependencies);C.length?a.send(\"getImages\",{icons:C,source:this.source,tileID:this.tileID,type:\"icons\"},(function(t,e){f||(f=t,p=e,O.call(l))})):p={};var P=Object.keys(g.patternDependencies);function O(){if(f)return s(f);if(h&&p&&d){var e=new i(h),r=new t.ImageAtlas(p,d);for(var a in v){var l=v[a];l instanceof t.SymbolBucket?(o(l.layers,this.zoom,n),t.performSymbolLayout(l,h,e.positions,p,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof t.LineBucket||l instanceof t.FillBucket||l instanceof t.FillExtrusionBucket)&&(o(l.layers,this.zoom,n),l.addFeatures(g,this.tileID.canonical,r.patternPositions))}this.status=\"done\",s(null,{buckets:t.values(v).filter((function(t){return!t.isEmpty()})),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}P.length?a.send(\"getImages\",{icons:P,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(t,e){f||(f=t,d=e,O.call(l))})):d={},O.call(this)};var l=function(t,e,r,n){this.actor=t,this.layerIndex=e,this.availableImages=r,this.loadVectorData=n||s,this.loading={},this.loaded={}};l.prototype.loadTile=function(e,r){var n=this,i=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new t.RequestPerformance(e.request),s=this.loading[i]=new a(e);s.abort=this.loadVectorData(e,(function(e,a){if(delete n.loading[i],e||!a)return s.status=\"done\",n.loaded[i]=s,r(e);var l=a.rawData,u={};a.expires&&(u.expires=a.expires),a.cacheControl&&(u.cacheControl=a.cacheControl);var c={};if(o){var f=o.finish();f&&(c.resourceTiming=JSON.parse(JSON.stringify(f)))}s.vectorTile=a.vectorTile,s.parse(a.vectorTile,n.layerIndex,n.availableImages,n.actor,(function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,u,c))})),n.loaded=n.loaded||{},n.loaded[i]=s}))},l.prototype.reloadTile=function(t,e){var r=this,n=this.loaded,i=t.uid,a=this;if(n&&n[i]){var o=n[i];o.showCollisionBoxes=t.showCollisionBoxes;var s=function(t,n){var i=o.reloadCallback;i&&(delete o.reloadCallback,o.parse(o.vectorTile,a.layerIndex,r.availableImages,a.actor,i)),e(t,n)};\"parsing\"===o.status?o.reloadCallback=s:\"done\"===o.status&&(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},l.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},l.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var u=t.window.ImageBitmap,c=function(){this.loaded={}};c.prototype.loadTile=function(e,r){var n=e.uid,i=e.encoding,a=e.rawImageData,o=u&&a instanceof u?this.getImageData(a):a,s=new t.DEMData(n,o,i);this.loaded=this.loaded||{},this.loaded[n]=s,r(null,s)},c.prototype.getImageData=function(e){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(e.width,e.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext(\"2d\")),this.offscreenCanvas.width=e.width,this.offscreenCanvas.height=e.height,this.offscreenCanvasContext.drawImage(e,0,0,e.width,e.height);var r=this.offscreenCanvasContext.getImageData(-1,-1,e.width+2,e.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new t.RGBAImage({width:r.width,height:r.height},r.data)},c.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var f=function t(e,r){var n,i=e&&e.type;if(\"FeatureCollection\"===i)for(n=0;n<e.features.length;n++)t(e.features[n],r);else if(\"GeometryCollection\"===i)for(n=0;n<e.geometries.length;n++)t(e.geometries[n],r);else if(\"Feature\"===i)t(e.geometry,r);else if(\"Polygon\"===i)h(e.coordinates,r);else if(\"MultiPolygon\"===i)for(n=0;n<e.coordinates.length;n++)h(e.coordinates[n],r);return e};function h(t,e){if(0!==t.length){p(t[0],e);for(var r=1;r<t.length;r++)p(t[r],!e)}}function p(t,e){for(var r=0,n=0,i=t.length,a=i-1;n<i;a=n++)r+=(t[n][0]-t[a][0])*(t[a][1]+t[n][1]);r>=0!=!!e&&t.reverse()}var d=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,v=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,\"id\"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};v.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var i=n[r];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],u=0,c=s[o];u<c.length;u+=1){var f=c[u];l.push(new t.Point$1(f[0],f[1]))}a.push(l)}return a},v.prototype.toGeoJSON=function(t,e,r){return d.call(this,t,e,r)};var g=function(e){this.layers={_geojsonTileLayer:this},this.name=\"_geojsonTileLayer\",this.extent=t.EXTENT,this.length=e.length,this._features=e};g.prototype.feature=function(t){return new v(this._features[t])};var y=t.vectorTile.VectorTileFeature,m=x;function x(t,e){this.options=e||{},this.features=t,this.length=t.length}function b(t,e){this.id=\"number\"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}x.prototype.feature=function(t){return new b(this.features[t],this.options.extent)},b.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],i=[],a=0;a<n.length;a++)i.push(new t.Point$1(n[a][0],n[a][1]));this.geometry.push(i)}return this.geometry},b.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},b.prototype.toGeoJSON=y.prototype.toGeoJSON;var _=A,w=A,T=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new m(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return A({layers:r})},k=m;function A(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,M,t.layers[r])}(e,r),r.finish()}function M(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\"\"),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,S,n);var i=n.keys;for(r=0;r<i.length;r++)e.writeStringField(3,i[r]);var a=n.values;for(r=0;r<a.length;r++)e.writeMessage(4,O,a[r])}function S(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,E,t),e.writeVarintField(3,r.type),e.writeMessage(4,P,r)}function E(t,e){var r=t.feature,n=t.keys,i=t.values,a=t.keycache,o=t.valuecache;for(var s in r.properties){var l=a[s];void 0===l&&(n.push(s),l=n.length-1,a[s]=l),e.writeVarint(l);var u=r.properties[s],c=typeof u;\"string\"!==c&&\"boolean\"!==c&&\"number\"!==c&&(u=JSON.stringify(u));var f=c+\":\"+u,h=o[f];void 0===h&&(i.push(u),h=i.length-1,o[f]=h),e.writeVarint(h)}}function L(t,e){return(e<<3)+(7&t)}function C(t){return t<<1^t>>31}function P(t,e){for(var r=t.loadGeometry(),n=t.type,i=0,a=0,o=r.length,s=0;s<o;s++){var l=r[s],u=1;1===n&&(u=l.length),e.writeVarint(L(1,u));for(var c=3===n?l.length-1:l.length,f=0;f<c;f++){1===f&&1!==n&&e.writeVarint(L(2,c-1));var h=l[f].x-i,p=l[f].y-a;e.writeVarint(C(h)),e.writeVarint(C(p)),i+=h,a+=p}3===n&&e.writeVarint(L(7,1))}}function O(t,e){var r=typeof t;\"string\"===r?e.writeStringField(1,t):\"boolean\"===r?e.writeBooleanField(7,t):\"number\"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function I(t,e,r,n,i,a){if(!(i-n<=r)){var o=n+i>>1;D(t,e,o,n,i,a%2),I(t,e,r,n,o-1,a+1),I(t,e,r,o+1,i,a+1)}}function D(t,e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,l=Math.log(o),u=.5*Math.exp(2*l/3),c=.5*Math.sqrt(l*u*(o-u)/o)*(s-o/2<0?-1:1);D(t,e,r,Math.max(n,Math.floor(r-s*u/o+c)),Math.min(i,Math.floor(r+(o-s)*u/o+c)),a)}var f=e[2*r+a],h=n,p=i;for(z(t,e,n,r),e[2*i+a]>f&&z(t,e,n,i);h<p;){for(z(t,e,h,p),h++,p--;e[2*h+a]<f;)h++;for(;e[2*p+a]>f;)p--}e[2*n+a]===f?z(t,e,n,p):z(t,e,++p,i),p<=r&&(n=p+1),r<=p&&(i=p-1)}}function z(t,e,r,n){R(t,r,n),R(e,2*r,2*n),R(e,2*r+1,2*n+1)}function R(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function F(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}_.fromVectorTileJs=w,_.fromGeojsonVt=T,_.GeoJSONWrapper=k;var B=function(t){return t[0]},N=function(t){return t[1]},j=function(t,e,r,n,i){void 0===e&&(e=B),void 0===r&&(r=N),void 0===n&&(n=64),void 0===i&&(i=Float64Array),this.nodeSize=n,this.points=t;for(var a=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new a(t.length),s=this.coords=new i(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);I(o,s,n,0,o.length-1,0)};j.prototype.range=function(t,e,r,n){return function(t,e,r,n,i,a,o){for(var s,l,u=[0,t.length-1,0],c=[];u.length;){var f=u.pop(),h=u.pop(),p=u.pop();if(h-p<=o)for(var d=p;d<=h;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[d]);else{var v=Math.floor((p+h)/2);s=e[2*v],l=e[2*v+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[v]);var g=(f+1)%2;(0===f?r<=s:n<=l)&&(u.push(p),u.push(v-1),u.push(g)),(0===f?i>=s:a>=l)&&(u.push(v+1),u.push(h),u.push(g))}}return c}(this.ids,this.coords,t,e,r,n,this.nodeSize)},j.prototype.within=function(t,e,r){return function(t,e,r,n,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var u=o.pop(),c=o.pop(),f=o.pop();if(c-f<=a)for(var h=f;h<=c;h++)F(e[2*h],e[2*h+1],r,n)<=l&&s.push(t[h]);else{var p=Math.floor((f+c)/2),d=e[2*p],v=e[2*p+1];F(d,v,r,n)<=l&&s.push(t[p]);var g=(u+1)%2;(0===u?r-i<=d:n-i<=v)&&(o.push(f),o.push(p-1),o.push(g)),(0===u?r+i>=d:n+i>=v)&&(o.push(p+1),o.push(c),o.push(g))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var U={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},V=function(t){this.options=X(Object.create(U),t),this.trees=new Array(this.options.maxZoom+1)};function H(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:i}}function q(t,e){var r=t.geometry.coordinates,n=r[0],i=r[1];return{x:Y(n),y:W(i),zoom:1/0,index:e,parentId:-1}}function G(t){return{type:\"Feature\",id:t.id,properties:Z(t),geometry:{type:\"Point\",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function Z(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+\"k\":e>=1e3?Math.round(e/100)/10+\"k\":e;return X(X({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function Y(t){return t/360+.5}function W(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function X(t,e){for(var r in e)t[r]=e[r];return t}function J(t){return t.x}function K(t){return t.y}function $(t,e,r,n){for(var i,a=n,o=r-e>>1,s=r-e,l=t[e],u=t[e+1],c=t[r],f=t[r+1],h=e+3;h<r;h+=3){var p=Q(t[h],t[h+1],l,u,c,f);if(p>a)i=h,a=p;else if(p===a){var d=Math.abs(h-o);d<s&&(i=h,s=d)}}a>n&&(i-e>3&&$(t,e,i,n),t[i+2]=a,r-i>3&&$(t,i,r,n))}function Q(t,e,r,n,i,a){var o=i-r,s=a-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=i,n=a):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function tt(t,e,r,n){var i={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if(\"Point\"===r||\"MultiPoint\"===r||\"LineString\"===r)et(t,e);else if(\"Polygon\"===r||\"MultiLineString\"===r)for(var n=0;n<e.length;n++)et(t,e[n]);else if(\"MultiPolygon\"===r)for(n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)et(t,e[n][i])}(i),i}function et(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function rt(t,e,r,n){if(e.geometry){var i=e.geometry.coordinates,a=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),\"Point\"===a)nt(i,s);else if(\"MultiPoint\"===a)for(var u=0;u<i.length;u++)nt(i[u],s);else if(\"LineString\"===a)it(i,s,o,!1);else if(\"MultiLineString\"===a){if(r.lineMetrics){for(u=0;u<i.length;u++)s=[],it(i[u],s,o,!1),t.push(tt(l,\"LineString\",s,e.properties));return}at(i,s,o,!1)}else if(\"Polygon\"===a)at(i,s,o,!0);else{if(\"MultiPolygon\"!==a){if(\"GeometryCollection\"===a){for(u=0;u<e.geometry.geometries.length;u++)rt(t,{id:l,geometry:e.geometry.geometries[u],properties:e.properties},r,n);return}throw new Error(\"Input data is not a valid GeoJSON object.\")}for(u=0;u<i.length;u++){var c=[];at(i[u],c,o,!0),s.push(c)}}t.push(tt(l,a,s,e.properties))}}function nt(t,e){e.push(ot(t[0])),e.push(st(t[1])),e.push(0)}function it(t,e,r,n){for(var i,a,o=0,s=0;s<t.length;s++){var l=ot(t[s][0]),u=st(t[s][1]);e.push(l),e.push(u),e.push(0),s>0&&(o+=n?(i*u-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(u-a,2))),i=l,a=u}var c=e.length-3;e[2]=1,$(e,0,c,r),e[c+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function at(t,e,r,n){for(var i=0;i<t.length;i++){var a=[];it(t[i],a,r,n),e.push(a)}}function ot(t){return t/360+.5}function st(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function lt(t,e,r,n,i,a,o,s){if(n/=e,a>=(r/=e)&&o<n)return t;if(o<r||a>=n)return null;for(var l=[],u=0;u<t.length;u++){var c=t[u],f=c.geometry,h=c.type,p=0===i?c.minX:c.minY,d=0===i?c.maxX:c.maxY;if(p>=r&&d<n)l.push(c);else if(!(d<r||p>=n)){var v=[];if(\"Point\"===h||\"MultiPoint\"===h)ut(f,v,r,n,i);else if(\"LineString\"===h)ct(f,v,r,n,i,!1,s.lineMetrics);else if(\"MultiLineString\"===h)ht(f,v,r,n,i,!1);else if(\"Polygon\"===h)ht(f,v,r,n,i,!0);else if(\"MultiPolygon\"===h)for(var g=0;g<f.length;g++){var y=[];ht(f[g],y,r,n,i,!0),y.length&&v.push(y)}if(v.length){if(s.lineMetrics&&\"LineString\"===h){for(g=0;g<v.length;g++)l.push(tt(c.id,h,v[g],c.tags));continue}\"LineString\"!==h&&\"MultiLineString\"!==h||(1===v.length?(h=\"LineString\",v=v[0]):h=\"MultiLineString\"),\"Point\"!==h&&\"MultiPoint\"!==h||(h=3===v.length?\"Point\":\"MultiPoint\"),l.push(tt(c.id,h,v,c.tags))}}}return l.length?l:null}function ut(t,e,r,n,i){for(var a=0;a<t.length;a+=3){var o=t[a+i];o>=r&&o<=n&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function ct(t,e,r,n,i,a,o){for(var s,l,u=ft(t),c=0===i?dt:vt,f=t.start,h=0;h<t.length-3;h+=3){var p=t[h],d=t[h+1],v=t[h+2],g=t[h+3],y=t[h+4],m=0===i?p:d,x=0===i?g:y,b=!1;o&&(s=Math.sqrt(Math.pow(p-g,2)+Math.pow(d-y,2))),m<r?x>r&&(l=c(u,p,d,g,y,r),o&&(u.start=f+s*l)):m>n?x<n&&(l=c(u,p,d,g,y,n),o&&(u.start=f+s*l)):pt(u,p,d,v),x<r&&m>=r&&(l=c(u,p,d,g,y,r),b=!0),x>n&&m<=n&&(l=c(u,p,d,g,y,n),b=!0),!a&&b&&(o&&(u.end=f+s*l),e.push(u),u=ft(t)),o&&(f+=s)}var _=t.length-3;p=t[_],d=t[_+1],v=t[_+2],(m=0===i?p:d)>=r&&m<=n&&pt(u,p,d,v),_=u.length-3,a&&_>=3&&(u[_]!==u[0]||u[_+1]!==u[1])&&pt(u,u[0],u[1],u[2]),u.length&&e.push(u)}function ft(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function ht(t,e,r,n,i,a){for(var o=0;o<t.length;o++)ct(t[o],e,r,n,i,a,!1)}function pt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function dt(t,e,r,n,i,a){var o=(a-e)/(n-e);return t.push(a),t.push(r+(i-r)*o),t.push(1),o}function vt(t,e,r,n,i,a){var o=(a-r)/(i-r);return t.push(e+(n-e)*o),t.push(a),t.push(1),o}function gt(t,e){for(var r=[],n=0;n<t.length;n++){var i,a=t[n],o=a.type;if(\"Point\"===o||\"MultiPoint\"===o||\"LineString\"===o)i=yt(a.geometry,e);else if(\"MultiLineString\"===o||\"Polygon\"===o){i=[];for(var s=0;s<a.geometry.length;s++)i.push(yt(a.geometry[s],e))}else if(\"MultiPolygon\"===o)for(i=[],s=0;s<a.geometry.length;s++){for(var l=[],u=0;u<a.geometry[s].length;u++)l.push(yt(a.geometry[s][u],e));i.push(l)}r.push(tt(a.id,o,i,a.tags))}return r}function yt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function mt(t,e){if(t.transformed)return t;var r,n,i,a=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],u=l.geometry,c=l.type;if(l.geometry=[],1===c)for(n=0;n<u.length;n+=2)l.geometry.push(xt(u[n],u[n+1],e,a,o,s));else for(n=0;n<u.length;n++){var f=[];for(i=0;i<u[n].length;i+=2)f.push(xt(u[n][i],u[n][i+1],e,a,o,s));l.geometry.push(f)}}return t.transformed=!0,t}function xt(t,e,r,n,i,a){return[Math.round(r*(t*n-i)),Math.round(r*(e*n-a))]}function bt(t,e,r,n,i){for(var a=e===i.maxZoom?0:i.tolerance/((1<<e)*i.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,_t(o,t[s],a,i);var l=t[s].minX,u=t[s].minY,c=t[s].maxX,f=t[s].maxY;l<o.minX&&(o.minX=l),u<o.minY&&(o.minY=u),c>o.maxX&&(o.maxX=c),f>o.maxY&&(o.maxY=f)}return o}function _t(t,e,r,n){var i=e.geometry,a=e.type,o=[];if(\"Point\"===a||\"MultiPoint\"===a)for(var s=0;s<i.length;s+=3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if(\"LineString\"===a)wt(o,i,t,r,!1,!1);else if(\"MultiLineString\"===a||\"Polygon\"===a)for(s=0;s<i.length;s++)wt(o,i[s],t,r,\"Polygon\"===a,0===s);else if(\"MultiPolygon\"===a)for(var l=0;l<i.length;l++){var u=i[l];for(s=0;s<u.length;s++)wt(o,u[s],t,r,!0,0===s)}if(o.length){var c=e.tags||null;if(\"LineString\"===a&&n.lineMetrics){for(var f in c={},e.tags)c[f]=e.tags[f];c.mapbox_clip_start=i.start/i.size,c.mapbox_clip_end=i.end/i.size}var h={geometry:o,type:\"Polygon\"===a||\"MultiPolygon\"===a?3:\"LineString\"===a||\"MultiLineString\"===a?2:1,tags:c};null!==e.id&&(h.id=e.id),t.features.push(h)}}function wt(t,e,r,n,i,a){var o=n*n;if(n>0&&e.size<(i?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i&&function(t,e){for(var r=0,n=0,i=t.length,a=i-2;n<i;a=n,n+=2)r+=(t[n]-t[a])*(t[n+1]+t[a+1]);if(r>0===e)for(n=0,i=t.length;n<i/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[i-2-n],t[n+1]=t[i-1-n],t[i-2-n]=o,t[i-1-n]=s}}(s,a),t.push(s)}}function Tt(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time(\"preprocess data\"),e.maxZoom<0||e.maxZoom>24)throw new Error(\"maxZoom should be in the 0-24 range\");if(e.promoteId&&e.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var n=function(t,e){var r=[];if(\"FeatureCollection\"===t.type)for(var n=0;n<t.features.length;n++)rt(r,t.features[n],e,n);else\"Feature\"===t.type?rt(r,t,e):rt(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd(\"preprocess data\"),console.log(\"index: maxZoom: %d, maxPoints: %d\",e.indexMaxZoom,e.indexMaxPoints),console.time(\"generate tiles\"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,i=lt(t,1,-1-r,r,0,-1,2,e),a=lt(t,1,1-r,2+r,0,-1,2,e);return(i||a)&&(n=lt(t,1,-r,1+r,0,-1,2,e)||[],i&&(n=gt(i,1).concat(n)),a&&(n=n.concat(gt(a,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log(\"features: %d, points: %d\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\"generate tiles\"),console.log(\"tiles generated:\",this.total,JSON.stringify(this.stats)))}function kt(t,e,r){return 32*((1<<t)*r+e)+t}function At(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var i=new g(n.features),a=_(i);0===a.byteOffset&&a.byteLength===a.buffer.byteLength||(a=new Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}V.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,i=e.maxZoom,a=e.nodeSize;r&&console.time(\"total time\");var o=\"prepare \"+t.length+\" points\";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(q(t[l],l));this.trees[i+1]=new j(s,J,K,a,Float32Array),r&&console.timeEnd(o);for(var u=i;u>=n;u--){var c=+Date.now();s=this._cluster(s,u),this.trees[u]=new j(s,J,K,a,Float32Array),r&&console.log(\"z%d: %d clusters in %dms\",u,s.length,+Date.now()-c)}return r&&console.timeEnd(\"total time\"),this},V.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,i=180;else if(r>i){var o=this.getClusters([r,n,180,a],e),s=this.getClusters([-180,n,i,a],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],u=[],c=0,f=l.range(Y(r),W(a),Y(i),W(n));c<f.length;c+=1){var h=f[c],p=l.points[h];u.push(p.numPoints?G(p):this.points[p.index])}return u},V.prototype.getChildren=function(t){var e=this._getOriginId(t),r=this._getOriginZoom(t),n=\"No cluster with the specified id.\",i=this.trees[r];if(!i)throw new Error(n);var a=i.points[e];if(!a)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,u=i.within(a.x,a.y,o);l<u.length;l+=1){var c=u[l],f=i.points[c];f.parentId===t&&s.push(f.numPoints?G(f):this.points[f.index])}if(0===s.length)throw new Error(n);return s},V.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},V.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options,o=a.extent,s=a.radius/o,l=(r-s)/i,u=(r+1+s)/i,c={features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,u),n.points,e,r,i,c),0===e&&this._addTileFeatures(n.range(1-s/i,l,1,u),n.points,i,r,i,c),e===i-1&&this._addTileFeatures(n.range(0,l,s/i,u),n.points,-1,r,i,c),c.features.length?c:null},V.prototype.getClusterExpansionZoom=function(t){for(var e=this._getOriginZoom(t)-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},V.prototype._appendLeaves=function(t,e,r,n,i){for(var a=0,o=this.getChildren(e);a<o.length;a+=1){var s=o[a],l=s.properties;if(l&&l.cluster?i+l.point_count<=n?i+=l.point_count:i=this._appendLeaves(t,l.cluster_id,r,n,i):i<n?i++:t.push(s),t.length===r)break}return i},V.prototype._addTileFeatures=function(t,e,r,n,i,a){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],u=l.numPoints,c={type:1,geometry:[[Math.round(this.options.extent*(l.x*i-r)),Math.round(this.options.extent*(l.y*i-n))]],tags:u?Z(l):this.points[l.index].properties},f=void 0;u?f=l.id:this.options.generateId?f=l.index:this.points[l.index].id&&(f=this.points[l.index].id),void 0!==f&&(c.id=f),a.features.push(c)}},V.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},V.prototype._cluster=function(t,e){for(var r=[],n=this.options,i=n.radius,a=n.extent,o=n.reduce,s=i/(a*Math.pow(2,e)),l=0;l<t.length;l++){var u=t[l];if(!(u.zoom<=e)){u.zoom=e;for(var c=this.trees[e+1],f=c.within(u.x,u.y,s),h=u.numPoints||1,p=u.x*h,d=u.y*h,v=o&&h>1?this._map(u,!0):null,g=(l<<5)+(e+1)+this.points.length,y=0,m=f;y<m.length;y+=1){var x=m[y],b=c.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,h+=_,b.parentId=g,o&&(v||(v=this._map(u,!0)),o(v,this._map(b)))}}1===h?r.push(u):(u.parentId=g,r.push(H(p/h,d/h,g,h,v)))}}return r},V.prototype._getOriginId=function(t){return t-this.points.length>>5},V.prototype._getOriginZoom=function(t){return(t-this.points.length)%32},V.prototype._map=function(t,e){if(t.numPoints)return e?X({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?X({},n):n},Tt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Tt.prototype.splitTile=function(t,e,r,n,i,a,o){for(var s=[t,e,r,n],l=this.options,u=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var c=1<<e,f=kt(e,r,n),h=this.tiles[f];if(!h&&(u>1&&console.time(\"creation\"),h=this.tiles[f]=bt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),u)){u>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",e,r,n,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd(\"creation\"));var p=\"z\"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(h.source=t,i){if(e===l.maxZoom||e===i)continue;var d=1<<i-e;if(r!==Math.floor(a/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||h.numPoints<=l.indexMaxPoints)continue;if(h.source=null,0!==t.length){u>1&&console.time(\"clipping\");var v,g,y,m,x,b,_=.5*l.buffer/l.extent,w=.5-_,T=.5+_,k=1+_;v=g=y=m=null,x=lt(t,c,r-_,r+T,0,h.minX,h.maxX,l),b=lt(t,c,r+w,r+k,0,h.minX,h.maxX,l),t=null,x&&(v=lt(x,c,n-_,n+T,1,h.minY,h.maxY,l),g=lt(x,c,n+w,n+k,1,h.minY,h.maxY,l),x=null),b&&(y=lt(b,c,n-_,n+T,1,h.minY,h.maxY,l),m=lt(b,c,n+w,n+k,1,h.minY,h.maxY,l),b=null),u>1&&console.timeEnd(\"clipping\"),s.push(v||[],e+1,2*r,2*n),s.push(g||[],e+1,2*r,2*n+1),s.push(y||[],e+1,2*r+1,2*n),s.push(m||[],e+1,2*r+1,2*n+1)}}},Tt.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,a=n.debug;if(t<0||t>24)return null;var o=1<<t,s=kt(t,e=(e%o+o)%o,r);if(this.tiles[s])return mt(this.tiles[s],i);a>1&&console.log(\"drilling down to z%d-%d-%d\",t,e,r);for(var l,u=t,c=e,f=r;!l&&u>0;)u--,c=Math.floor(c/2),f=Math.floor(f/2),l=this.tiles[kt(u,c,f)];return l&&l.source?(a>1&&console.log(\"found parent tile z%d-%d-%d\",u,c,f),a>1&&console.time(\"drilling down\"),this.splitTile(l.source,u,c,f,t,e,r),a>1&&console.timeEnd(\"drilling down\"),this.tiles[s]?mt(this.tiles[s],i):null):null};var Mt=function(e){function r(t,r,n,i){e.call(this,t,r,n,At),i&&(this.loadGeoJSON=i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&\"Idle\"!==this._state?this._state=\"NeedsLoadData\":(this._state=\"Coalescing\",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(n&&n.request&&n.request.collectResourceTiming)&&new t.RequestPerformance(n.request);this.loadGeoJSON(n,(function(a,o){if(a||!o)return r(a);if(\"object\"!=typeof o)return r(new Error(\"Input data given to '\"+n.source+\"' is not a valid GeoJSON object.\"));f(o,!0);try{e._geoJSONIndex=n.cluster?new V(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var i={},a={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),u=0,c=l;u<c.length;u+=1){var f=c[u],h=n[f],p=h[0],d=h[1],v=t.createExpression(d),g=t.createExpression(\"string\"==typeof p?[p,[\"accumulated\"],[\"get\",f]]:p);i[f]=v.value,a[f]=g.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var a=n[r];e[a]=i[a].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var i=n[r];o.accumulated=t[i],t[i]=a[i].evaluate(o,s)}},r}(n)).load(o.features):function(t,e){return new Tt(t,e)}(o,n.geojsonVtOptions)}catch(a){return r(a)}e.loaded={};var s={};if(i){var l=i.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)}))}},r.prototype.coalesce=function(){\"Coalescing\"===this._state?this._state=\"Idle\":\"NeedsLoadData\"===this._state&&(this._state=\"Coalescing\",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,i=t.uid;return n&&n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if(\"string\"!=typeof e.data)return r(new Error(\"Input data given to '\"+e.source+\"' is not a valid GeoJSON object.\"));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error(\"Input data given to '\"+e.source+\"' is not a valid GeoJSON object.\"))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){try{e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterChildren=function(t,e){try{e(null,this._geoJSONIndex.getChildren(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterLeaves=function(t,e){try{e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))}catch(t){e(t)}},r}(l);var St=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.availableImages={},this.workerSourceTypes={vector:l,geojson:Mt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name \"'+t+'\" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isParsed())throw new Error(\"RTL text plugin already registered.\");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return St.prototype.setReferrer=function(t,e){this.referrer=e},St.prototype.setImages=function(t,e,r){for(var n in this.availableImages[t]=e,this.workerSources[t]){var i=this.workerSources[t][n];for(var a in i)i[a].availableImages=e}r()},St.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},St.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},St.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},St.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},St.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},St.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},St.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},St.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},St.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},St.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},St.prototype.syncRTLPluginState=function(e,r,n){try{t.plugin.setState(r);var i=t.plugin.getPluginURL();if(t.plugin.isLoaded()&&!t.plugin.isParsed()&&null!=i){this.self.importScripts(i);var a=t.plugin.isParsed();n(a?void 0:new Error(\"RTL Text Plugin failed to import scripts from \"+i),a)}}catch(t){n(t.toString())}},St.prototype.getAvailableImages=function(t){var e=this.availableImages[t];return e||(e=[]),e},St.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},St.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var i={send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](i,this.getLayerIndex(t),this.getAvailableImages(t))}return this.workerSources[t][e][r]},St.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new c),this.demWorkerSources[t][e]},St.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},\"undefined\"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new St(t.window)),St})),n(0,(function(t){var e=t.createCommonjsModule((function(t){function e(t){return!r(t)}function r(t){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document?Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray?Function.prototype&&Function.prototype.bind?Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions?\"JSON\"in window&&\"parse\"in JSON&&\"stringify\"in JSON?function(){if(!(\"Worker\"in window&&\"Blob\"in window&&\"URL\"in window))return!1;var t,e,r=new Blob([\"\"],{type:\"text/javascript\"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()?\"Uint8ClampedArray\"in window?ArrayBuffer.isView?function(){var t=document.createElement(\"canvas\");t.width=t.height=1;var e=t.getContext(\"2d\");if(!e)return!1;var r=e.getImageData(0,0,1,1);return r&&r.width===t.width}()?(r=t&&t.failIfMajorPerformanceCaveat,void 0===n[r]&&(n[r]=function(t){var r=function(t){var r=document.createElement(\"canvas\"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext(\"webgl\",n)||r.probablySupportsContext(\"experimental-webgl\",n):r.supportsContext?r.supportsContext(\"webgl\",n)||r.supportsContext(\"experimental-webgl\",n):r.getContext(\"webgl\",n)||r.getContext(\"experimental-webgl\",n)}(t);if(!r)return!1;var n=r.createShader(r.VERTEX_SHADER);return!(!n||r.isContextLost())&&(r.shaderSource(n,\"void main() {}\"),r.compileShader(n),!0===r.getShaderParameter(n,r.COMPILE_STATUS))}(r)),n[r]?void 0:\"insufficient WebGL support\"):\"insufficient Canvas/getImageData support\":\"insufficient ArrayBuffer support\":\"insufficient Uint8ClampedArray support\":\"insufficient worker support\":\"insufficient JSON support\":\"insufficient Object support\":\"insufficient Function support\":\"insufficent Array support\":\"not a browser\";var r}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e,window.mapboxgl.notSupportedReason=r);var n={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}})),r={create:function(e,r,n){var i=t.window.document.createElement(e);return void 0!==r&&(i.className=r),n&&n.appendChild(i),i},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function i(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var a,o=i([\"userSelect\",\"MozUserSelect\",\"WebkitUserSelect\",\"msUserSelect\"]);r.disableDrag=function(){n&&o&&(a=n[o],n[o]=\"none\")},r.enableDrag=function(){n&&o&&(n[o]=a)};var s=i([\"transform\",\"WebkitTransform\"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var u=Object.defineProperty({},\"passive\",{get:function(){l=!0}});t.window.addEventListener(\"test\",u,u),t.window.removeEventListener(\"test\",u,u)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),\"passive\"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),\"passive\"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var c=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\"click\",c,!0)};function f(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener(\"click\",c,!0),t.window.setTimeout((function(){t.window.removeEventListener(\"click\",c,!0)}),0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect();return new t.Point(r.clientX-n.left-e.clientLeft,r.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),i=[],a=0;a<r.length;a++)i.push(new t.Point(r[a].clientX-n.left-e.clientLeft,r[a].clientY-n.top-e.clientTop));return i},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf(\"MAC\")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var h=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],i=n.ids,a=n.callback;this._notify(i,a)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this._validate(t,e)&&(this.images[t]=e)},r.prototype._validate=function(e,r){var n=!0;return this._validateStretch(r.stretchX,r.data&&r.data.width)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchX\" value'))),n=!1),this._validateStretch(r.stretchY,r.data&&r.data.height)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"stretchY\" value'))),n=!1),this._validateContent(r.content,r)||(this.fire(new t.ErrorEvent(new Error('Image \"'+e+'\" has invalid \"content\" value'))),n=!1),n},r.prototype._validateStretch=function(t,e){if(!t)return!0;for(var r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];if(a[0]<r||a[1]<a[0]||e<a[1])return!1;r=a[1]}return!0},r.prototype._validateContent=function(t,e){return!(t&&(4!==t.length||t[0]<0||e.data.width<t[0]||t[1]<0||e.data.height<t[1]||t[2]<0||e.data.width<t[2]||t[3]<0||e.data.height<t[3]||t[2]<t[0]||t[3]<t[1]))},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,i=t;n<i.length;n+=1){var a=i[n];this.images[a]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i];this.images[o]||this.fire(new t.Event(\"styleimagemissing\",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image \"'+o+'\" could not be loaded. Please make sure you have added the image with map.addImage() or a \"sprite\" property in your style. You can provide missing images by listening for the \"styleimagemissing\" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var i={w:n.data.width+2,h:n.data.height+2,x:0,y:0},a=new t.ImagePosition(i,n);this.patterns[e]={bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),i=n.w,a=n.h,o=this.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,u=l.x+1,c=l.y+1,f=this.images[s].data,h=f.width,p=f.height;t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c},{width:h,height:p}),t.RGBAImage.copy(f,o,{x:0,y:p-1},{x:u,y:c-1},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u,y:c+p},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:h-1,y:0},{x:u-1,y:c},{width:1,height:p}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:u+h,y:c},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var i=this.images[n];f(i)&&this.updateImage(n,i)}}},r}(t.Evented);var p=g,d=g,v=1e20;function g(t,e,r,n,i,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=i||\"sans-serif\",this.fontWeight=a||\"normal\",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement(\"canvas\"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext(\"2d\"),this.ctx.font=this.fontWeight+\" \"+this.fontSize+\"px \"+this.fontFamily,this.ctx.textBaseline=\"middle\",this.ctx.fillStyle=\"black\",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf(\"Gecko/\")>=0?1.2:1))}function y(t,e,r,n,i,a,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(m(n,i,a,o,r),l=0;l<r;l++)t[l*e+s]=i[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(m(n,i,a,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(i[s])}}function m(t,e,r,n,i){r[0]=0,n[0]=-v,n[1]=+v;for(var a=1,o=0;a<i;a++){for(var s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);s<=n[o];)o--,s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);r[++o]=a,n[o]=s,n[o+1]=+v}for(a=0,o=0;a<i;a++){for(;n[o+1]<a;)o++;e[a]=(a-r[o])*(a-r[o])+t[r[o]]}}g.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var i=e.data[4*n+3]/255;this.gridOuter[n]=1===i?0:0===i?v:Math.pow(Math.max(0,.5-i),2),this.gridInner[n]=1===i?v:0===i?0:Math.pow(Math.max(0,i-.5),2)}for(y(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),y(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var a=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(a/this.radius+this.cutoff))))}return r},p.default=d;var x=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};x.prototype.setURL=function(t){this.url=t},x.prototype.getGlyphs=function(e,r){var n=this,i=[];for(var a in e)for(var o=0,s=e[a];o<s.length;o+=1){var l=s[o];i.push({stack:a,id:l})}t.asyncAll(i,(function(t,e){var r=t.stack,i=t.id,a=n.entries[r];a||(a=n.entries[r]={glyphs:{},requests:{},ranges:{}});var o=a.glyphs[i];if(void 0===o){if(o=n._tinySDF(a,r,i))return a.glyphs[i]=o,void e(null,{stack:r,id:i,glyph:o});var s=Math.floor(i/256);if(256*s>65535)e(new Error(\"glyphs > 65535 not supported\"));else if(a.ranges[s])e(null,{stack:r,id:i,glyph:o});else{var l=a.requests[s];l||(l=a.requests[s]=[],x.loadGlyphRange(r,s,n.url,n.requestManager,(function(t,e){if(e){for(var r in e)n._doesCharSupportLocalGlyph(+r)||(a.glyphs[+r]=e[+r]);a.ranges[s]=!0}for(var i=0,o=l;i<o.length;i+=1)(0,o[i])(t,e);delete a.requests[s]}))),l.push((function(t,n){t?e(t):n&&e(null,{stack:r,id:i,glyph:n[i]||null})}))}}else e(null,{stack:r,id:i,glyph:o})}),(function(t,e){if(t)r(t);else if(e){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.stack,l=o.id,u=o.glyph;(n[s]||(n[s]={}))[l]=u&&{id:u.id,bitmap:u.bitmap.clone(),metrics:u.metrics}}r(null,n)}}))},x.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar[\"CJK Unified Ideographs\"](e)||t.isChar[\"Hangul Syllables\"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF=function(e,r,n){var i=this.localIdeographFontFamily;if(i&&this._doesCharSupportLocalGlyph(n)){var a=e.tinySDF;if(!a){var o=\"400\";/bold/i.test(r)?o=\"900\":/medium/i.test(r)?o=\"500\":/light/i.test(r)&&(o=\"200\"),a=e.tinySDF=new x.TinySDF(24,3,8,.25,i,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange=function(e,r,n,i,a){var o=256*r,s=o+255,l=i.transformRequest(i.normalizeGlyphsURL(n).replace(\"{fontstack}\",e).replace(\"{range}\",o+\"-\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,r){if(e)a(e);else if(r){for(var n={},i=0,o=t.parseGlyphPBF(r);i<o.length;i+=1){var s=o[i];n[s.id]=s}a(null,n)}}))},x.TinySDF=p;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=\"-transition\",T=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(_),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var i=e[n];t.endsWith(n,w)?this._transitionable.setTransition(n.slice(0,-11),i):this._transitionable.setValue(n,i)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}};k.prototype.getDash=function(t,e){var r=t.join(\",\")+String(e);return this.dashEntry[r]||(this.dashEntry[r]=this.addDash(t,e)),this.dashEntry[r]},k.prototype.getDashRanges=function(t,e,r){var n=[],i=t.length%2==1?-t[t.length-1]*r:0,a=t[0]*r,o=!0;n.push({left:i,right:a,isDash:o,zeroLength:0===t[0]});for(var s=t[0],l=1;l<t.length;l++){o=!o;var u=t[l];i=s*r,a=(s+=u)*r,n.push({left:i,right:a,isDash:o,zeroLength:0===u})}return n},k.prototype.addRoundDash=function(t,e,r){for(var n=e/2,i=-r;i<=r;i++)for(var a=this.nextRow+r+i,o=this.width*a,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=void 0,d=i/r*(n+1);if(l.isDash){var v=n-Math.abs(d);p=Math.sqrt(h*h+v*v)}else p=n-Math.sqrt(h*h+d*d);this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var r=t[e],n=t[e+1];r.zeroLength?t.splice(e,1):n&&n.isDash===r.isDash&&(n.left=r.left,t.splice(e,1))}var i=t[0],a=t[t.length-1];i.isDash===a.isDash&&(i.left=a.left-this.width,a.right=i.right+this.width);for(var o=this.width*this.nextRow,s=0,l=t[s],u=0;u<this.width;u++){u/l.right>1&&(l=t[++s]);var c=Math.abs(u-l.left),f=Math.abs(u-l.right),h=Math.min(c,f),p=l.isDash?h:-h;this.data[o+u]=Math.max(0,Math.min(255,p+128))}},k.prototype.addDash=function(e,r){var n=r?7:0,i=2*n+1;if(this.nextRow+i>this.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a=0,o=0;o<e.length;o++)a+=e[o];if(0!==a){var s=this.width/a,l=this.getDashRanges(e,this.width,s);r?this.addRoundDash(l,s,n):this.addRegularDash(l)}var u={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:a};return this.nextRow+=i,this.dirty=!0,u},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data))};var A=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var i=this.workerPool.acquire(this.id),a=0;a<i.length;a++){var o=i[a],s=new e.Actor(o,n,this.id);s.name=\"Worker \"+a,this.actors.push(s)}};function M(e,r,n){var i=function(i,a){if(i)return n(i);if(a){var o=t.pick(t.extend(a,e),[\"tiles\",\"minzoom\",\"maxzoom\",\"attribution\",\"mapbox_logo\",\"bounds\",\"scheme\",\"tileSize\",\"encoding\"]);a.vector_layers&&(o.vectorLayers=a.vector_layers,o.vectorLayerIds=o.vectorLayers.map((function(t){return t.id}))),o.tiles=r.canonicalizeTileset(o,e.url),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame((function(){return i(null,e)}))}A.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,(function(t,n){t.send(e,r,n)}),n)},A.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},A.prototype.remove=function(){this.actors.forEach((function(t){t.remove()})),this.actors=[],this.workerPool.release(this.id)},A.Actor=t.Actor;var S=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};S.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},S.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),i=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<a&&e.y>=i&&e.y<o};var E=function(e){function r(r,n,i,a){if(e.call(this),this.id=r,this.dispatcher=i,this.type=\"vector\",this.minzoom=0,this.maxzoom=22,this.scheme=\"xyz\",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(n,[\"url\",\"scheme\",\"tileSize\",\"promoteId\"])),this._options=t.extend({type:\"vector\"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error(\"vector tile sources must have a tileSize of 512\");this.setEventedParent(a)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),i={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(n,i){return delete e.request,e.aborted?r(null):n&&404!==n.status?r(n):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}i.request.collectResourceTiming=this._collectResourceTiming,e.actor&&\"expired\"!==e.state?\"loading\"===e.state?e.reloadCallback=r:e.request=e.actor.send(\"reloadTile\",i,a.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send(\"loadTile\",i,a.bind(this)))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send(\"abortTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.dispatcher=i,this.setEventedParent(a),this.type=\"raster\",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=\"xyz\",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:\"raster\"},n),t.extend(this,t.pick(n,[\"url\",\"scheme\",\"tileSize\"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest=M(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new S(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,i=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),(function(i,a){if(delete e.request,e.aborted)e.state=\"unloaded\",r(null);else if(i)e.state=\"errored\",r(i);else if(a){n.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state=\"loaded\",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}}))},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),C=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),this.type=\"raster-dem\",this.maxzoom=22,this._options=t.extend({type:\"raster-dem\"},n),this.encoding=n.encoding||\"mapbox\"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:\"raster-dem\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function i(t,n){t&&(e.state=\"errored\",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state=\"loaded\",r(null))}e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state=\"unloaded\",r(null);else if(n)e.state=\"errored\",r(n);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=t.window.ImageBitmap&&a instanceof t.window.ImageBitmap&&t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.actor&&\"expired\"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send(\"loadDEMTile\",s,i.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),i=(r.x-1+n)%n,a=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state=\"unloaded\",t.actor&&t.actor.send(\"removeDEMTile\",{uid:t.uid,source:this.id})},r}(L),P=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.type=\"geojson\",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=i.getActor(),this.setEventedParent(a),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution),this.promoteId=n.promoteId;var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1,generateId:n.generateId||!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:\"source\",sourceDataType:\"metadata\"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\"data\",n))}}))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:\"source\",sourceDataType:\"content\"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event(\"data\",n))}})),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren=function(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData=function(e){var r=this;this._loaded=!1;var n=t.extend({},this.workerOptions),i=this._data;\"string\"==typeof i?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(i),this.actor.send(this.type+\".loadData\",n,(function(t,i){r._removed||i&&i.abandoned||(r._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[r.id]&&(r._resourceTiming=i.resourceTiming[r.id].slice(0)),r.actor.send(r.type+\".coalesce\",{source:n.source},null),e(t))}))},r.prototype.loaded=function(){return this._loaded},r.prototype.loadTile=function(e,r){var n=this,i=e.actor?\"reloadTile\":\"loadTile\";e.actor=this.actor;var a={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};e.request=this.actor.send(i,a,(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(a,n.map.painter,\"reloadTile\"===i),r(null))}))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove=function(){this._removed=!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id})},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),O=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2},{name:\"a_texture_pos\",type:\"Int16\",components:2}]),I=function(e){function r(t,r,n,i){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type=\"image\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,a){n._loaded=!0,i?n.fire(new t.ErrorEvent(i)):a&&(n.image=a,e&&(n.coordinates=e),r&&r(),n._finishLoading())}))},r.prototype.loaded=function(){return this._loaded},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null})),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,i=-1/0,a=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.x),a=Math.max(a,l.y)}var u=i-r,c=a-n,f=Math.max(u,c),h=Math.max(0,Math.floor(-Math.log(f)/Math.LN2)),p=Math.pow(2,h);return new t.CanonicalTileID(h,Math.floor((r+i)/2*p),Math.floor((n+a)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var i=n.map((function(t){return r.tileID.getTilePoint(t)._round()}));return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\"loaded\"!==i.state&&(i.state=\"loaded\",i.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state=\"errored\",e(null))},r.prototype.serialize=function(){return{type:\"image\",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented);var D=function(e){function r(t,r,n,i){e.call(this,t,r,n,i),this.roundZoom=!0,this.type=\"video\",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1;var r=this.options;this.urls=[];for(var n=0,i=r.urls;n<i.length;n+=1){var a=i[n];this.urls.push(this.map._requestManager.transformRequest(a,t.ResourceType.Source).url)}t.getVideo(this.urls,(function(r,n){e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener(\"playing\",(function(){e.map.triggerRepaint()})),e.map&&e.video.play(),e._finishLoading())}))},r.prototype.pause=function(){this.video&&this.video.pause()},r.prototype.play=function(){this.video&&this.video.play()},r.prototype.seek=function(e){if(this.video){var r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+r.start(0)+\" and \"+r.end(0)+\"-second mark.\"))):this.video.currentTime=e}},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\"loaded\"!==i.state&&(i.state=\"loaded\",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\"video\",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(I),z=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some((function(t){return!Array.isArray(t)||2!==t.length||t.some((function(t){return\"number\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,'\"coordinates\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,'missing required property \"coordinates\"'))),n.animate&&\"boolean\"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,'optional \"animate\" property must be a boolean value'))),n.canvas?\"string\"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,'\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,'missing required property \"canvas\"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,O.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[i];\"loaded\"!==a.state&&(a.state=\"loaded\",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\"canvas\",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(I),R={vector:E,raster:L,\"raster-dem\":C,geojson:P,video:D,image:I,canvas:z};function F(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function B(t,e,r,n,i,a){var o=function(t,e,r){if(t)for(var n=0,i=t;n<i.length;n+=1){var a=e[i[n]];if(a&&a.source===r&&\"fill-extrusion\"===a.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&\"fill-extrusion\"===s.type)return!0}return!1}(i&&i.layers,e,t.id),s=a.maxPitchScaleFactor(),l=t.tilesIn(n,s,o);l.sort(N);for(var u=[],c=0,f=l;c<f.length;c+=1){var h=f[c];u.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,r,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,i,a,s,F(t.transform,h.tileID))})}var p=function(t){for(var e={},r={},n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.queryResults,s=a.wrappedTileID,l=r[s]=r[s]||{};for(var u in o)for(var c=o[u],f=l[u]=l[u]||{},h=e[u]=e[u]||[],p=0,d=c;p<d.length;p+=1){var v=d[p];f[v.featureIndex]||(f[v.featureIndex]=!0,h.push(v))}}return e}(u);for(var d in p)p[d].forEach((function(e){var r=e.feature,n=t.getFeatureState(r.layer[\"source-layer\"],r.id);r.source=r.layer.source,r.layer[\"source-layer\"]&&(r.sourceLayer=r.layer[\"source-layer\"]),r.state=n}));return p}function N(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var j=function(t,e){this.max=t,this.onRemove=e,this.reset()};j.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},j.prototype.add=function(t,e,r){var n=this,i=t.wrapped().key;void 0===this.data[i]&&(this.data[i]=[]);var a={value:e,timeout:void 0};if(void 0!==r&&(a.timeout=setTimeout((function(){n.remove(t,a)}),r)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},j.prototype.has=function(t){return t.wrapped().key in this.data},j.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},j.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},j.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},j.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},j.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),i=this.data[r][n];return this.data[r].splice(n,1),i.timeout&&clearTimeout(i.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},j.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this},j.prototype.filter=function(t){var e=[];for(var r in this.data)for(var n=0,i=this.data[r];n<i.length;n+=1){var a=i[n];t(a.value)||e.push(a)}for(var o=0,s=e;o<s.length;o+=1){var l=s[o];this.remove(l.value.tileID,l)}};var U=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V={Int8:\"BYTE\",Uint8:\"UNSIGNED_BYTE\",Int16:\"SHORT\",Uint16:\"UNSIGNED_SHORT\",Int32:\"INT\",Uint32:\"UNSIGNED_INT\",Float32:\"FLOAT\"},H=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};H.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},H.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},H.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],i=e.attributes[n.name];void 0!==i&&t.enableVertexAttribArray(i)}},H.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var i=this.attributes[n],a=e.attributes[i.name];void 0!==a&&t.vertexAttribPointer(a,i.components,t[V[i.type]],!1,this.itemSize,i.offset+this.itemSize*(r||0))}},H.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var q=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};q.prototype.get=function(){return this.current},q.prototype.set=function(t){},q.prototype.getDefault=function(){return this.default},q.prototype.setDefault=function(){this.set(this.default)};var G=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(q),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(q),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(q),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(q),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(q),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(q),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(q),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(q),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(q),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(q),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),at=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(q),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(q),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(q),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(q),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(q),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(q),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(q),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(q),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(q),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(q),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(q),mt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(q),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(q),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),wt=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(q),Tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(wt),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(wt),At=function(t,e,r,n){this.context=t,this.width=e,this.height=r;var i=t.gl,a=this.framebuffer=i.createFramebuffer();this.colorAttachment=new Tt(t,a),n&&(this.depthAttachment=new kt(t,a))};At.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();if(e&&t.deleteTexture(e),this.depthAttachment){var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r)}t.deleteFramebuffer(this.framebuffer)};var Mt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Mt.ReadOnly=!1,Mt.ReadWrite=!0,Mt.disabled=new Mt(519,Mt.ReadOnly,[0,1]);var St=7680,Et=function(t,e,r,n,i,a){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=i,this.pass=a};Et.disabled=new Et({func:519,mask:0},0,0,St,St,St);var Lt=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};Lt.Replace=[1,0],Lt.disabled=new Lt(Lt.Replace,t.Color.transparent,[!1,!1,!1,!1]),Lt.unblended=new Lt(Lt.Replace,t.Color.transparent,[!0,!0,!0,!0]),Lt.alphaBlended=new Lt([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Ct=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Ct.disabled=new Ct(!1,1029,2305),Ct.backCCW=new Ct(!0,1029,2305);var Pt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension(\"OES_vertex_array_object\"),this.clearColor=new G(this),this.clearDepth=new Z(this),this.clearStencil=new Y(this),this.colorMask=new W(this),this.depthMask=new X(this),this.stencilMask=new J(this),this.stencilFunc=new K(this),this.stencilOp=new $(this),this.stencilTest=new Q(this),this.depthRange=new tt(this),this.depthTest=new et(this),this.depthFunc=new rt(this),this.blend=new nt(this),this.blendFunc=new it(this),this.blendColor=new at(this),this.blendEquation=new ot(this),this.cullFace=new st(this),this.cullFaceSide=new lt(this),this.frontFace=new ut(this),this.program=new ct(this),this.activeTexture=new ft(this),this.viewport=new ht(this),this.bindFramebuffer=new pt(this),this.bindRenderbuffer=new dt(this),this.bindTexture=new vt(this),this.bindVertexBuffer=new gt(this),this.bindElementBuffer=new yt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new mt(this),this.pixelStoreUnpack=new xt(this),this.pixelStoreUnpackPremultiplyAlpha=new bt(this),this.pixelStoreUnpackFlipY=new _t(this),this.extTextureFilterAnisotropic=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension(\"OES_texture_half_float\"),this.extTextureHalfFloat&&(t.getExtension(\"OES_texture_half_float_linear\"),this.extRenderToTextureHalfFloat=t.getExtension(\"EXT_color_buffer_half_float\")),this.extTimerQuery=t.getExtension(\"EXT_disjoint_timer_query\")};Pt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Pt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Pt.prototype.createIndexBuffer=function(t,e){return new U(this,t,e)},Pt.prototype.createVertexBuffer=function(t,e,r){return new H(this,t,e,r)},Pt.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,i=n.createRenderbuffer();return this.bindRenderbuffer.set(i),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),i},Pt.prototype.createFramebuffer=function(t,e,r){return new At(this,t,e,r)},Pt.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,i=0;e&&(i|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(i|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(i)},Pt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Pt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Pt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Pt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,Lt.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Pt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ot=function(e){function r(r,n,i){var a=this;e.call(this),this.id=r,this.dispatcher=i,this.on(\"data\",(function(t){\"source\"===t.dataType&&\"metadata\"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&\"source\"===t.dataType&&\"content\"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform))})),this.on(\"error\",(function(){a._sourceErrored=!0})),this._source=function(e,r,n,i){var a=new R[r.type](e,r,n,i);if(a.id!==e)throw new Error(\"Expected Source id to be \"+e+\" instead of \"+a.id);return t.bindAll([\"load\",\"abort\",\"unload\",\"serialize\",\"prepare\"],a),a}(r,n,i,this),this._tiles={},this._cache=new j(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._loadedParentTiles={},this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if(\"loaded\"!==e.state&&\"errored\"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var i in this._tiles)this._isIdRenderable(i,e)&&n.push(this._tiles[i]);return e?n.sort((function(e,n){var i=e.tileID,a=n.tileID,o=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x})).map((function(t){return t.tileID.key})):n.map((function(t){return t.tileID})).sort(It).map((function(t){return t.key}))},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)\"errored\"!==this._tiles[t].state&&this._reloadTile(t,\"reloading\")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&(\"loading\"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,i){if(i)return e.state=\"errored\",void(404!==i.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),\"expired\"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),\"raster-dem\"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\"data\",{dataType:\"source\",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var i=this.getTileByID(n);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,i=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+i)?r+=i:1===Math.abs(r-i)&&(r-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var i in this._tiles){var a=this._tiles[i];if(!(n[i]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>r)){for(var o=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var r=this._loadedParentTiles[t.key];return r&&r.tileID.overscaledZ>=e?r:null}for(var n=t.overscaledZ-1;n>=e;n--){var i=t.scaledTo(n),a=this._getLoadedTile(i);if(a)return a}},r.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n=\"number\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var i in this._tiles){var a=this._tiles[i];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]=a}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter((function(t){return n._source.hasTile(t)})))):i=[];var a=e.coveringZoomLevel(this._source),o=Math.max(a-r.maxOverzooming,this._source.minzoom),s=Math.max(a+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(i,a);if(Dt(this._source.type)){for(var u={},c={},f=0,h=Object.keys(l);f<h.length;f+=1){var p=h[f],d=l[p],v=this._tiles[p];if(v&&!(v.fadeEndTime&&v.fadeEndTime<=t.browser.now())){var g=this.findLoadedParent(d,o);g&&(this._addTile(g.tileID),u[g.tileID.key]=g.tileID),c[p]=d}}for(var y in this._retainLoadedChildren(c,a,s,l),u)l[y]||(this._coveredTiles[y]=!0,l[y]=u[y])}for(var m in l)this._tiles[m].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}this._updateLoadedParentTileCache()}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},i={},a=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,u=t;l<u.length;l+=1){var c=u[l],f=this._addTile(c);n[c.key]=c,f.hasData()||e<this._source.maxzoom&&(s[c.key]=c)}this._retainLoadedChildren(s,e,o,n);for(var h=0,p=t;h<p.length;h+=1){var d=p[h],v=this._tiles[d.key];if(!v.hasData()){if(e+1>this._source.maxzoom){var g=d.children(this._source.maxzoom)[0],y=this.getTile(g);if(y&&y.hasData()){n[g.key]=g;continue}}else{var m=d.children(this._source.maxzoom);if(n[m[0].key]&&n[m[1].key]&&n[m[2].key]&&n[m[3].key])continue}for(var x=v.wasRequested(),b=d.overscaledZ-1;b>=a;--b){var _=d.scaledTo(b);if(i[_.key])break;if(i[_.key]=!0,!(v=this.getTile(_))&&x&&(v=this._addTile(_)),v&&(n[_.key]=_,x=v.wasRequested(),v.hasData()))break}}}return n},r.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],r=void 0,n=this._tiles[t].tileID;n.overscaledZ>0;){if(n.key in this._loadedParentTiles){r=this._loadedParentTiles[n.key];break}e.push(n.key);var i=n.scaledTo(n.overscaledZ-1);if(r=this._getLoadedTile(i))break;n=i}for(var a=0,o=e;a<o.length;a+=1){var s=o[a];this._loadedParentTiles[s]=r}}},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event(\"dataloading\",{tile:r,coord:r.tileID,dataType:\"source\"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout((function(){r._reloadTile(t,\"expired\"),delete r._timers[t]}),n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&\"reloading\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var i=this,a=[],o=this.transform;if(!o)return a;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map((function(t){return o.pointCoordinate(t)})),u=s.map((function(t){return o.pointCoordinate(t)})),c=this.getIds(),f=1/0,h=1/0,p=-1/0,d=-1/0,v=0,g=u;v<g.length;v+=1){var y=g[v];f=Math.min(f,y.x),h=Math.min(h,y.y),p=Math.max(p,y.x),d=Math.max(d,y.y)}for(var m=function(e){var n=i._tiles[c[e]];if(!n.holdingForFade()){var s=n.tileID,v=Math.pow(2,o.zoom-n.tileID.overscaledZ),g=r*n.queryPadding*t.EXTENT/n.tileSize/v,y=[s.getTilePoint(new t.MercatorCoordinate(f,h)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(y[0].x-g<t.EXTENT&&y[0].y-g<t.EXTENT&&y[1].x+g>=0&&y[1].y+g>=0){var m=l.map((function(t){return s.getTilePoint(t)})),x=u.map((function(t){return s.getTilePoint(t)}));a.push({tile:n,tileID:s,queryGeometry:m,cameraQueryGeometry:x,scale:v})}}},x=0;x<c.length;x++)m(x);return a},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),n=0,i=r;n<i.length;n+=1){var a=i[n];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Dt(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||\"_geojsonTileLayer\",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||\"_geojsonTileLayer\",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||\"_geojsonTileLayer\",this._state.getState(t,e)},r.prototype.setDependencies=function(t,e,r){var n=this._tiles[t];n&&n.setDependencies(e,r)},r.prototype.reloadTilesForDependencies=function(t,e){for(var r in this._tiles)this._tiles[r].hasDependency(t,e)&&this._reloadTile(r,\"reloading\");this._cache.filter((function(r){return!r.hasDependency(t,e)}))},r}(t.Evented);function It(t,e){var r=Math.abs(2*t.wrap)-+(t.wrap<0),n=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||n-r||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Dt(t){return\"raster\"===t||\"image\"===t||\"video\"===t}function zt(){return new t.window.Worker(na.workerUrl)}Ot.maxOverzooming=10,Ot.maxUnderzooming=3;var Rt=\"mapboxgl_preloaded_worker_pool\",Ft=function(){this.active={}};Ft.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<Ft.workerCount;)this.workers.push(new zt);return this.active[t]=!0,this.workers.slice()},Ft.prototype.release=function(t){delete this.active[t],0===this.numActive()&&(this.workers.forEach((function(t){t.terminate()})),this.workers=null)},Ft.prototype.isPreloaded=function(){return!!this.active[Rt]},Ft.prototype.numActive=function(){return Object.keys(this.active).length};var Bt,Nt=Math.floor(t.browser.hardwareConcurrency/2);function jt(){return Bt||(Bt=new Ft),Bt}function Ut(e,r){var n={};for(var i in e)\"ref\"!==i&&(n[i]=e[i]);return t.refProperties.forEach((function(t){t in r&&(n[t]=r[t])})),n}function Vt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)\"ref\"in t[n]&&(t[n]=Ut(t[n],e[t[n].ref]));return t}Ft.workerCount=Math.max(Math.min(Nt,6),1);var Ht={setStyle:\"setStyle\",addLayer:\"addLayer\",removeLayer:\"removeLayer\",setPaintProperty:\"setPaintProperty\",setLayoutProperty:\"setLayoutProperty\",setFilter:\"setFilter\",addSource:\"addSource\",removeSource:\"removeSource\",setGeoJSONSourceData:\"setGeoJSONSourceData\",setLayerZoomRange:\"setLayerZoomRange\",setLayerProperty:\"setLayerProperty\",setCenter:\"setCenter\",setZoom:\"setZoom\",setBearing:\"setBearing\",setPitch:\"setPitch\",setSprite:\"setSprite\",setGlyphs:\"setGlyphs\",setTransition:\"setTransition\",setLight:\"setLight\"};function qt(t,e,r){r.push({command:Ht.addSource,args:[t,e[t]]})}function Gt(t,e,r){e.push({command:Ht.removeSource,args:[t]}),r[t]=!0}function Zt(t,e,r,n){Gt(t,r,n),qt(t,e,r)}function Yt(e,r,n){var i;for(i in e[n])if(e[n].hasOwnProperty(i)&&\"data\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;for(i in r[n])if(r[n].hasOwnProperty(i)&&\"data\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;return!0}function Wt(e,r,n,i,a,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}))}function Xt(t){return t.id}function Jt(t,e){return t[e.id]=e,t}function Kt(e,r){if(!e)return[{command:Ht.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Ht.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Ht.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Ht.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Ht.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Ht.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Ht.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Ht.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Ht.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Ht.setLight,args:[r.light]});var i={},a=[];!function(e,r,n,i){var a;for(a in r=r||{},e=e||{})e.hasOwnProperty(a)&&(r.hasOwnProperty(a)||Gt(a,n,i));for(a in r)r.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],r[a])||(\"geojson\"===e[a].type&&\"geojson\"===r[a].type&&Yt(e,r,a)?n.push({command:Ht.setGeoJSONSourceData,args:[a,r[a].data]}):Zt(a,r,n,i)):qt(a,r,n))}(e.sources,r.sources,a,i);var o=[];e.layers&&e.layers.forEach((function(t){i[t.source]?n.push({command:Ht.removeLayer,args:[t.id]}):o.push(t)})),n=n.concat(a),function(e,r,n){r=r||[];var i,a,o,s,l,u,c,f=(e=e||[]).map(Xt),h=r.map(Xt),p=e.reduce(Jt,{}),d=r.reduce(Jt,{}),v=f.slice(),g=Object.create(null);for(i=0,a=0;i<f.length;i++)o=f[i],d.hasOwnProperty(o)?a++:(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.indexOf(o,a),1));for(i=0,a=0;i<h.length;i++)o=h[h.length-1-i],v[v.length-1-i]!==o&&(p.hasOwnProperty(o)?(n.push({command:Ht.removeLayer,args:[o]}),v.splice(v.lastIndexOf(o,v.length-a),1)):a++,u=v[v.length-i],n.push({command:Ht.addLayer,args:[d[o],u]}),v.splice(v.length-i,0,o),g[o]=!0);for(i=0;i<h.length;i++)if(s=p[o=h[i]],l=d[o],!g[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s[\"source-layer\"],l[\"source-layer\"])&&t.deepEqual(s.type,l.type)){for(c in Wt(s.layout,l.layout,n,o,null,Ht.setLayoutProperty),Wt(s.paint,l.paint,n,o,null,Ht.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Ht.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Ht.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(c)&&\"layout\"!==c&&\"paint\"!==c&&\"filter\"!==c&&\"metadata\"!==c&&\"minzoom\"!==c&&\"maxzoom\"!==c&&(0===c.indexOf(\"paint.\")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}));for(c in l)l.hasOwnProperty(c)&&!s.hasOwnProperty(c)&&\"layout\"!==c&&\"paint\"!==c&&\"filter\"!==c&&\"metadata\"!==c&&\"minzoom\"!==c&&\"maxzoom\"!==c&&(0===c.indexOf(\"paint.\")?Wt(s[c],l[c],n,o,c.slice(6),Ht.setPaintProperty):t.deepEqual(s[c],l[c])||n.push({command:Ht.setLayerProperty,args:[o,c,l[c]]}))}else n.push({command:Ht.removeLayer,args:[o]}),u=v[v.lastIndexOf(o)+1],n.push({command:Ht.addLayer,args:[l,u]})}(o,r.layers,n)}catch(t){console.warn(\"Unable to compute style diff:\",t),n=[{command:Ht.setStyle,args:[r]}]}return n}var $t=function(t,e){this.reset(t,e)};$t.prototype.reset=function(t,e){this.points=t||[],this._distances=[0];for(var r=1;r<this.points.length;r++)this._distances[r]=this._distances[r-1]+this.points[r].dist(this.points[r-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(e||0,.5*this.length),this.paddedLength=this.length-2*this.padding},$t.prototype.lerp=function(e){if(1===this.points.length)return this.points[0];e=t.clamp(e,0,1);for(var r=1,n=this._distances[r],i=e*this.paddedLength+this.padding;n<i&&r<this._distances.length;)n=this._distances[++r];var a=r-1,o=this._distances[a],s=n-o,l=s>0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[r].mult(l))};var Qt=function(t,e,r){var n=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var a=0;a<this.xCellCount*this.yCellCount;a++)n.push([]),i.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function te(e,r,n,i,a){var o=t.create();return r?(t.scale(o,o,[1/a,1/a,1]),n||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function ee(e,r,n,i,a){if(r){var o=t.clone(e);return t.scale(o,o,[a,a,1]),n||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function re(e,r){var n=[e.x,e.y,0,1];pe(n,n,r);var i=n[3];return{point:new t.Point(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function ne(t,e){return.5+t/e*.5}function ie(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function ae(e,r,n,i,a,o,s,l){var u=i?e.textSizeData:e.iconSizeData,c=t.evaluateSizeForZoom(u,n.transform.zoom),f=[256/n.width*2+1,256/n.height*2+1],h=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,v=n.transform.width/n.transform.height,g=!1,y=0;y<d.length;y++){var m=d.get(y);if(m.hidden||m.writingMode===t.WritingMode.vertical&&!g)he(m.numGlyphs,h);else{g=!1;var x=[m.anchorX,m.anchorY,0,1];if(t.transformMat4(x,x,r),ie(x,f)){var b=x[3],_=ne(n.transform.cameraToCenterDistance,b),w=t.evaluateSizeForFeature(u,c,m),T=s?w/_:w*_,k=new t.Point(m.anchorX,m.anchorY),A=re(k,a).point,M={},S=le(m,T,!1,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v);g=S.useVertical,(S.notEnoughRoom||g||S.needsFlipping&&le(m,T,!0,l,r,a,o,e.glyphOffsetArray,p,h,A,k,M,v).notEnoughRoom)&&he(m.numGlyphs,h)}else he(m.numGlyphs,h)}}i?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function oe(t,e,r,n,i,a,o,s,l,u,c){var f=s.glyphStartIndex+s.numGlyphs,h=s.lineStartIndex,p=s.lineStartIndex+s.lineLength,d=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),g=ce(t*d,r,n,i,a,o,s.segment,h,p,l,u,c);if(!g)return null;var y=ce(t*v,r,n,i,a,o,s.segment,h,p,l,u,c);return y?{first:g,last:y}:null}function se(e,r,n,i){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function le(e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=r/24,y=e.lineOffsetX*g,m=e.lineOffsetY*g;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=oe(g,l,y,m,n,f,h,e,u,o,p);if(!w)return{notEnoughRoom:!0};var T=re(w.first.point,s).point,k=re(w.last.point,s).point;if(i&&!n){var A=se(e.writingMode,T,k,d);if(A)return A}v=[w.first];for(var M=e.glyphStartIndex+1;M<x-1;M++)v.push(ce(g*l.getoffsetX(M),y,m,n,f,h,e.segment,b,_,u,o,p));v.push(w.last)}else{if(i&&!n){var S=re(h,a).point,E=e.lineStartIndex+e.segment+1,L=new t.Point(u.getx(E),u.gety(E)),C=re(L,a),P=C.signedDistanceFromCamera>0?C.point:ue(h,L,S,1,a),O=se(e.writingMode,S,P,d);if(O)return O}var I=ce(g*l.getoffsetX(e.glyphStartIndex),y,m,n,f,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,u,o,p);if(!I)return{notEnoughRoom:!0};v=[I]}for(var D=0,z=v;D<z.length;D+=1){var R=z[D];t.addDynamicAttributes(c,R.point,R.angle)}return{}}function ue(t,e,r,n,i){var a=re(t.add(t.sub(e)._unit()),i).point,o=r.sub(a);return r.add(o._mult(n/o.mag()))}function ce(e,r,n,i,a,o,s,l,u,c,f,h){var p=i?e-r:e+r,d=p>0?1:-1,v=0;i&&(d*=-1,v=Math.PI),d<0&&(v+=Math.PI);for(var g=d>0?l+s:l+s+1,y=a,m=a,x=0,b=0,_=Math.abs(p),w=[];x+b<=_;){if((g+=d)<l||g>=u)return null;if(m=y,w.push(y),void 0===(y=h[g])){var T=new t.Point(c.getx(g),c.gety(g)),k=re(T,f);if(k.signedDistanceFromCamera>0)y=h[g]=k.point;else{var A=g-d;y=ue(0===x?o:new t.Point(c.getx(A),c.gety(A)),T,m,_-x+1,f)}}x+=b,b=m.dist(y)}var M=(_-x)/b,S=y.sub(m),E=S.mult(M)._add(m);E._add(S._unit()._perp()._mult(n*d));var L=v+Math.atan2(y.y-m.y,y.x-m.x);return w.push(E),{point:E,angle:L,path:w}}Qt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Qt.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Qt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Qt.prototype._insertBoxCell=function(t,e,r,n,i,a){this.boxCells[i].push(a)},Qt.prototype._insertCircleCell=function(t,e,r,n,i,a){this.circleCells[i].push(a)},Qt.prototype._query=function(t,e,r,n,i,a){if(r<0||t>this.width||n<0||e>this.height)return!i&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(i)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var u=this.circles[3*l],c=this.circles[3*l+1],f=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:u-f,y1:c-f,x2:u+f,y2:c+f})}return a?o.filter(a):o}var h={hitTest:i,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,h,a),i?o.length>0:o},Qt.prototype._queryCircle=function(t,e,r,n,i){var a=t-r,o=t+r,s=e-r,l=e+r;if(o<0||a>this.width||l<0||s>this.height)return!n&&[];var u=[],c={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,l,this._queryCellCircle,u,c,i),n?u.length>0:u},Qt.prototype.query=function(t,e,r,n,i){return this._query(t,e,r,n,!1,i)},Qt.prototype.hitTest=function(t,e,r,n,i){return this._query(t,e,r,n,!0,i)},Qt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Qt.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=o.seenUids,u=this.boxCells[i];if(null!==u)for(var c=this.bboxes,f=0,h=u;f<h.length;f+=1){var p=h[f];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=c[d+2]&&e<=c[d+3]&&r>=c[d+0]&&n>=c[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[p],x1:c[d],y1:c[d+1],x2:c[d+2],y2:c[d+3]})}}}var v=this.circleCells[i];if(null!==v)for(var g=this.circles,y=0,m=v;y<m.length;y+=1){var x=m[y];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(g[b],g[b+1],g[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return a.push(!0),!0;var _=g[b],w=g[b+1],T=g[b+2];a.push({key:this.circleKeys[x],x1:_-T,y1:w-T,x2:_+T,y2:w+T})}}}},Qt.prototype._queryCellCircle=function(t,e,r,n,i,a,o,s){var l=o.circle,u=o.seenUids,c=this.boxCells[i];if(null!==c)for(var f=this.bboxes,h=0,p=c;h<p.length;h+=1){var d=p[h];if(!u.box[d]){u.box[d]=!0;var v=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,f[v+0],f[v+1],f[v+2],f[v+3])&&(!s||s(this.boxKeys[d])))return a.push(!0),!0}}var g=this.circleCells[i];if(null!==g)for(var y=this.circles,m=0,x=g;m<x.length;m+=1){var b=x[m];if(!u.circle[b]){u.circle[b]=!0;var _=3*b;if(this._circlesCollide(y[_],y[_+1],y[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Qt.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToXCellCoord(t),u=this._convertToYCellCoord(e),c=this._convertToXCellCoord(r),f=this._convertToYCellCoord(n),h=l;h<=c;h++)for(var p=u;p<=f;p++){var d=this.xCellCount*p+h;if(i.call(this,t,e,r,n,d,a,o,s))return}},Qt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Qt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Qt.prototype._circlesCollide=function(t,e,r,n,i,a){var o=n-t,s=i-e,l=r+a;return l*l>o*o+s*s},Qt.prototype._circleAndRectCollide=function(t,e,r,n,i,a,o){var s=(a-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var u=(o-i)/2,c=Math.abs(e-(i+u));if(c>u+r)return!1;if(l<=s||c<=u)return!0;var f=l-s,h=c-u;return f*f+h*h<=r*r};var fe=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function he(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(fe,3*n)}}function pe(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t[3]=r[3]*n+r[7]*i+r[15],t}var de=100,ve=function(t,e,r){void 0===e&&(e=new Qt(t.width+200,t.height+200,25)),void 0===r&&(r=new Qt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+de,this.screenBottomBoundary=t.height+de,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function ge(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}ve.prototype.placeCollisionBox=function(t,e,r,n,i){var a=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*a.perspectiveRatio,s=t.x1*o+a.point.x,l=t.y1*o+a.point.y,u=t.x2*o+a.point.x,c=t.y2*o+a.point.y;return!this.isInsideGrid(s,l,u,c)||!e&&this.grid.hitTest(s,l,u,c,i)?{box:[],offscreen:!1}:{box:[s,l,u,c],offscreen:this.isOffscreen(s,l,u,c)}},ve.prototype.placeCollisionCircles=function(e,r,n,i,a,o,s,l,u,c,f,h,p){var d=[],v=new t.Point(r.anchorX,r.anchorY),g=re(v,o),y=ne(this.transform.cameraToCenterDistance,g.signedDistanceFromCamera),m=(c?a/y:a*y)/t.ONE_EM,x=re(v,s).point,b=oe(m,i,r.lineOffsetX*m,r.lineOffsetY*m,!1,x,v,r,n,s,{}),_=!1,w=!1,T=!0;if(b){for(var k=.5*h*y+p,A=new t.Point(-100,-100),M=new t.Point(this.screenRightBoundary,this.screenBottomBoundary),S=new $t,E=b.first,L=b.last,C=[],P=E.path.length-1;P>=1;P--)C.push(E.path[P]);for(var O=1;O<L.path.length;O++)C.push(L.path[O]);var I=2.5*k;if(l){var D=C.map((function(t){return re(t,l)}));C=D.some((function(t){return t.signedDistanceFromCamera<=0}))?[]:D.map((function(t){return t.point}))}var z=[];if(C.length>0){for(var R=C[0].clone(),F=C[0].clone(),B=1;B<C.length;B++)R.x=Math.min(R.x,C[B].x),R.y=Math.min(R.y,C[B].y),F.x=Math.max(F.x,C[B].x),F.y=Math.max(F.y,C[B].y);z=R.x>=A.x&&F.x<=M.x&&R.y>=A.y&&F.y<=M.y?[C]:F.x<A.x||R.x>M.x||F.y<A.y||R.y>M.y?[]:t.clipLine([C],A.x,A.y,M.x,M.y)}for(var N=0,j=z;N<j.length;N+=1){var U=j[N];S.reset(U,.25*k);var V;V=S.length<=.5*k?1:Math.ceil(S.paddedLength/I)+1;for(var H=0;H<V;H++){var q=H/Math.max(V-1,1),G=S.lerp(q),Z=G.x+de,Y=G.y+de;d.push(Z,Y,k,0);var W=Z-k,X=Y-k,J=Z+k,K=Y+k;if(T=T&&this.isOffscreen(W,X,J,K),w=w||this.isInsideGrid(W,X,J,K),!e&&this.grid.hitTestCircle(Z,Y,k,f)&&(_=!0,!u))return{circles:[],offscreen:!1,collisionDetected:_}}}}return{circles:!u&&_||!w?[]:d,offscreen:T,collisionDetected:_}},ve.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,i=1/0,a=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var u=l[s],c=new t.Point(u.x+de,u.y+de);n=Math.min(n,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),o=Math.max(o,c.y),r.push(c)}for(var f={},h={},p=0,d=this.grid.query(n,i,a,o).concat(this.ignoredGrid.query(n,i,a,o));p<d.length;p+=1){var v=d[p],g=v.key;if(void 0===f[g.bucketInstanceId]&&(f[g.bucketInstanceId]={}),!f[g.bucketInstanceId][g.featureIndex]){var y=[new t.Point(v.x1,v.y1),new t.Point(v.x2,v.y1),new t.Point(v.x2,v.y2),new t.Point(v.x1,v.y2)];t.polygonIntersectsPolygon(r,y)&&(f[g.bucketInstanceId][g.featureIndex]=!0,void 0===h[g.bucketInstanceId]&&(h[g.bucketInstanceId]=[]),h[g.bucketInstanceId].push(g.featureIndex))}}return h},ve.prototype.insertCollisionBox=function(t,e,r,n,i){var a={bucketInstanceId:r,featureIndex:n,collisionGroupID:i};(e?this.ignoredGrid:this.grid).insert(a,t[0],t[1],t[2],t[3])},ve.prototype.insertCollisionCircles=function(t,e,r,n,i){for(var a=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:i},s=0;s<t.length;s+=4)a.insertCircle(o,t[s],t[s+1],t[s+2])},ve.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var i=[r,n,0,1];return pe(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+de,(-i[1]/i[3]+1)/2*this.transform.height+de),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},ve.prototype.isOffscreen=function(t,e,r,n){return r<de||t>=this.screenRightBoundary||n<de||e>this.screenBottomBoundary},ve.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary},ve.prototype.getViewportMatrix=function(){var e=t.identity([]);return t.translate(e,e,[-100,-100,0]),e};var ye=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ye.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var me=function(t,e,r,n,i){this.text=new ye(t?t.text:null,e,r,i),this.icon=new ye(t?t.icon:null,e,n,i)};me.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var xe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},be=function(){this.invProjMatrix=t.create(),this.viewportMatrix=t.create(),this.circles=[]},_e=function(t,e,r,n,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=i},we=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function Te(e,r,n,i,a){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,u=t.evaluateVariableOffset(e,i);return new t.Point(s+u[0]*a,l+u[1]*a)}function ke(e,r,n,i,a,o){var s=e.x1,l=e.x2,u=e.y1,c=e.y2,f=e.anchorPointX,h=e.anchorPointY,p=new t.Point(r,n);return i&&p._rotate(a?o:-o),{x1:s+p.x,y1:u+p.y,x2:l+p.x,y2:c+p.y,anchorPointX:f,anchorPointY:h}}we.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var Ae=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new ve(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new we(r),this.collisionCircleArrays={},this.prevPlacement=n,n&&(n.prevPlacement=void 0),this.placedOrientations={}};function Me(t,e,r,n,i){t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0)}Ae.prototype.getBucketParts=function(e,r,n,i){var a=n.getBucket(r),o=n.latestFeatureIndex;if(a&&o&&r.id===a.layerIds[0]){var s=n.collisionBoxArray,l=a.layers[0].layout,u=Math.pow(2,this.transform.zoom-n.tileID.overscaledZ),c=n.tileSize/t.EXTENT,f=this.transform.calculatePosMatrix(n.tileID.toUnwrapped()),h=\"map\"===l.get(\"text-pitch-alignment\"),p=\"map\"===l.get(\"text-rotation-alignment\"),d=ge(n,1,this.transform.zoom),v=te(f,h,p,this.transform,d),g=null;if(h){var y=ee(f,h,p,this.transform,d);g=t.multiply([],this.transform.labelPlaneMatrix,y)}this.retainedQueryData[a.bucketInstanceId]=new _e(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,n.tileID);var m={bucket:a,layout:l,posMatrix:f,textLabelPlaneMatrix:v,labelToScreenMatrix:g,scale:u,textPixelRatio:c,holdingForFade:n.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(var x=0,b=a.sortKeyRanges;x<b.length;x+=1){var _=b[x],w=_.sortKey,T=_.symbolInstanceStart,k=_.symbolInstanceEnd;e.push({sortKey:w,symbolInstanceStart:T,symbolInstanceEnd:k,parameters:m})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:m})}},Ae.prototype.attemptAnchorPlacement=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d){var v,g=[f.textOffset0,f.textOffset1],y=Te(t,r,n,g,i),m=this.collisionIndex.placeCollisionBox(ke(e,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate);if(!d||0!==this.collisionIndex.placeCollisionBox(ke(d,y.x,y.y,a,o,this.transform.angle),c,s,l,u.predicate).box.length)return m.box.length>0?(this.prevPlacement&&this.prevPlacement.variableOffsets[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID]&&this.prevPlacement.placements[f.crossTileID].text&&(v=this.prevPlacement.variableOffsets[f.crossTileID].anchor),this.variableOffsets[f.crossTileID]={textOffset:g,width:r,height:n,anchor:t,textBoxScale:i,prevAnchor:v},this.markUsedJustification(h,t,f,p),h.allowVerticalPlacement&&(this.markUsedOrientation(h,p,f),this.placedOrientations[f.crossTileID]=p),{shift:y,placedGlyphBoxes:m}):void 0},Ae.prototype.placeLayerBucketPart=function(e,r,n){var i=this,a=e.parameters,o=a.bucket,s=a.layout,l=a.posMatrix,u=a.textLabelPlaneMatrix,c=a.labelToScreenMatrix,f=a.textPixelRatio,h=a.holdingForFade,p=a.collisionBoxArray,d=a.partiallyEvaluatedTextSize,v=a.collisionGroup,g=s.get(\"text-optional\"),y=s.get(\"icon-optional\"),m=s.get(\"text-allow-overlap\"),x=s.get(\"icon-allow-overlap\"),b=\"map\"===s.get(\"text-rotation-alignment\"),_=\"map\"===s.get(\"text-pitch-alignment\"),w=\"none\"!==s.get(\"icon-text-fit\"),T=\"viewport-y\"===s.get(\"symbol-z-order\"),k=m&&(x||!o.hasIconData()||y),A=x&&(m||!o.hasTextData()||g);!o.collisionArrays&&p&&o.deserializeCollisionBoxes(p);var M=function(e,a){if(!r[e.crossTileID])if(h)i.placements[e.crossTileID]=new xe(!1,!1,!1);else{var p,T=!1,M=!1,S=!0,E=null,L={box:null,offscreen:null},C={box:null,offscreen:null},P=null,O=null,I=0,D=0,z=0;a.textFeatureIndex?I=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(I=e.featureIndex),a.verticalTextFeatureIndex&&(D=a.verticalTextFeatureIndex);var R=a.textBox;if(R){var F=function(r){var n=t.WritingMode.horizontal;if(o.allowVerticalPlacement&&!r&&i.prevPlacement){var a=i.prevPlacement.placedOrientations[e.crossTileID];a&&(i.placedOrientations[e.crossTileID]=a,n=a,i.markUsedOrientation(o,n,e))}return n},B=function(r,n){if(o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var i=0,s=o.writingModes;i<s.length&&(s[i]===t.WritingMode.vertical?(L=n(),C=L):L=r(),!(L&&L.box&&L.box.length));i+=1);else L=r()};if(s.get(\"text-variable-anchor\")){var N=s.get(\"text-variable-anchor\");if(i.prevPlacement&&i.prevPlacement.variableOffsets[e.crossTileID]){var j=i.prevPlacement.variableOffsets[e.crossTileID];N.indexOf(j.anchor)>0&&(N=N.filter((function(t){return t!==j.anchor}))).unshift(j.anchor)}var U=function(t,r,n){for(var a=t.x2-t.x1,s=t.y2-t.y1,u=e.textBoxScale,c=w&&!x?r:null,h={box:[],offscreen:!1},p=m?2*N.length:N.length,d=0;d<p;++d){var g=N[d%N.length],y=d>=N.length,k=i.attemptAnchorPlacement(g,t,a,s,u,b,_,f,l,v,y,e,o,n,c);if(k&&(h=k.placedGlyphBoxes)&&h.box&&h.box.length){T=!0,E=k.shift;break}}return h};B((function(){return U(R,a.iconBox,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox,n=L&&L.box&&L.box.length;return o.allowVerticalPlacement&&!n&&e.numVerticalGlyphVertices>0&&r?U(r,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),L&&(T=L.box,S=L.offscreen);var V=F(L&&L.box);if(!T&&i.prevPlacement){var H=i.prevPlacement.variableOffsets[e.crossTileID];H&&(i.variableOffsets[e.crossTileID]=H,i.markUsedJustification(o,H.anchor,e,V))}}else{var q=function(t,r){var n=i.collisionIndex.placeCollisionBox(t,m,f,l,v.predicate);return n&&n.box&&n.box.length&&(i.markUsedOrientation(o,r,e),i.placedOrientations[e.crossTileID]=r),n};B((function(){return q(R,t.WritingMode.horizontal)}),(function(){var r=a.verticalTextBox;return o.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&r?q(r,t.WritingMode.vertical):{box:null,offscreen:null}})),F(L&&L.box&&L.box.length)}}if(T=(p=L)&&p.box&&p.box.length>0,S=p&&p.offscreen,e.useRuntimeCollisionCircles){var G=o.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),Z=t.evaluateSizeForFeature(o.textSizeData,d,G),Y=s.get(\"text-padding\"),W=e.collisionCircleDiameter;P=i.collisionIndex.placeCollisionCircles(m,G,o.lineVertexArray,o.glyphOffsetArray,Z,l,u,c,n,_,v.predicate,W,Y),T=m||P.circles.length>0&&!P.collisionDetected,S=S&&P.offscreen}if(a.iconFeatureIndex&&(z=a.iconFeatureIndex),a.iconBox){var X=function(t){var e=w&&E?ke(t,E.x,E.y,b,_,i.transform.angle):t;return i.collisionIndex.placeCollisionBox(e,x,f,l,v.predicate)};M=C&&C.box&&C.box.length&&a.verticalIconBox?(O=X(a.verticalIconBox)).box.length>0:(O=X(a.iconBox)).box.length>0,S=S&&O.offscreen}var J=g||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,K=y||0===e.numIconVertices;if(J||K?K?J||(M=M&&T):T=M&&T:M=T=M&&T,T&&p&&p.box&&(C&&C.box&&D?i.collisionIndex.insertCollisionBox(p.box,s.get(\"text-ignore-placement\"),o.bucketInstanceId,D,v.ID):i.collisionIndex.insertCollisionBox(p.box,s.get(\"text-ignore-placement\"),o.bucketInstanceId,I,v.ID)),M&&O&&i.collisionIndex.insertCollisionBox(O.box,s.get(\"icon-ignore-placement\"),o.bucketInstanceId,z,v.ID),P&&(T&&i.collisionIndex.insertCollisionCircles(P.circles,s.get(\"text-ignore-placement\"),o.bucketInstanceId,I,v.ID),n)){var $=o.bucketInstanceId,Q=i.collisionCircleArrays[$];void 0===Q&&(Q=i.collisionCircleArrays[$]=new be);for(var tt=0;tt<P.circles.length;tt+=4)Q.circles.push(P.circles[tt+0]),Q.circles.push(P.circles[tt+1]),Q.circles.push(P.circles[tt+2]),Q.circles.push(P.collisionDetected?1:0)}i.placements[e.crossTileID]=new xe(T||k,M||A,S||o.justReloaded),r[e.crossTileID]=!0}};if(T)for(var S=o.getSortedSymbolIndexes(this.transform.angle),E=S.length-1;E>=0;--E){var L=S[E];M(o.symbolInstances.get(L),o.collisionArrays[L])}else for(var C=e.symbolInstanceStart;C<e.symbolInstanceEnd;C++)M(o.symbolInstances.get(C),o.collisionArrays[C]);if(n&&o.bucketInstanceId in this.collisionCircleArrays){var P=this.collisionCircleArrays[o.bucketInstanceId];t.invert(P.invProjMatrix,l),P.viewportMatrix=this.collisionIndex.getViewportMatrix()}o.justReloaded=!1},Ae.prototype.markUsedJustification=function(e,r,n,i){var a,o={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};a=i===t.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s=0,l=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s<l.length;s+=1){var u=l[s];u>=0&&(e.text.placedSymbolArray.get(u).crossTileID=a>=0&&u!==a?0:n.crossTileID)}},Ae.prototype.markUsedOrientation=function(e,r,n){for(var i=r===t.WritingMode.horizontal||r===t.WritingMode.horizontalOnly?r:0,a=r===t.WritingMode.vertical?r:0,o=0,s=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o<s.length;o+=1){var l=s[o];e.text.placedSymbolArray.get(l).placedOrientation=i}n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=a)},Ae.prototype.commit=function(t){this.commitTime=t,this.zoomAtLastRecencyCheck=this.transform.zoom;var e=this.prevPlacement,r=!1;this.prevZoomAdjustment=e?e.zoomAdjustment(this.transform.zoom):0;var n=e?e.symbolFadeChange(t):1,i=e?e.opacities:{},a=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],u=i[s];u?(this.opacities[s]=new me(u,n,l.text,l.icon),r=r||l.text!==u.text.placed||l.icon!==u.icon.placed):(this.opacities[s]=new me(null,n,l.text,l.icon,l.skipFade),r=r||l.text||l.icon)}for(var c in i){var f=i[c];if(!this.opacities[c]){var h=new me(f,n,!1,!1);h.isHidden()||(this.opacities[c]=h,r=r||f.text.placed||f.icon.placed)}}for(var p in a)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]=a[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]=o[d]);r?this.lastPlacementChangeTime=t:\"number\"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},Ae.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1){var a=i[n],o=a.getBucket(t);o&&a.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,a.collisionBoxArray)}},Ae.prototype.updateBucketOpacities=function(e,r,n){var i=this;e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();var a=e.layers[0].layout,o=new me(null,0,!1,!1,!0),s=a.get(\"text-allow-overlap\"),l=a.get(\"icon-allow-overlap\"),u=a.get(\"text-variable-anchor\"),c=\"map\"===a.get(\"text-rotation-alignment\"),f=\"map\"===a.get(\"text-pitch-alignment\"),h=\"none\"!==a.get(\"icon-text-fit\"),p=new me(null,0,s&&(l||!e.hasIconData()||a.get(\"icon-optional\")),l&&(s||!e.hasTextData()||a.get(\"text-optional\")),!0);!e.collisionArrays&&n&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(n);for(var d=function(t,e,r){for(var n=0;n<e/4;n++)t.opacityVertexArray.emplaceBack(r)},v=function(n){var a=e.symbolInstances.get(n),s=a.numHorizontalGlyphVertices,l=a.numVerticalGlyphVertices,v=a.crossTileID,g=r[v],y=i.opacities[v];g?y=o:y||(y=p,i.opacities[v]=y),r[v]=!0;var m=s>0||l>0,x=a.numIconVertices>0,b=i.placedOrientations[a.crossTileID],_=b===t.WritingMode.vertical,w=b===t.WritingMode.horizontal||b===t.WritingMode.horizontalOnly;if(m){var T=De(y.text),k=_?ze:T;d(e.text,s,k);var A=w?ze:T;d(e.text,l,A);var M=y.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=M||_?1:0)})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=M||w?1:0);var S=i.variableOffsets[a.crossTileID];S&&i.markUsedJustification(e,S.anchor,a,b);var E=i.placedOrientations[a.crossTileID];E&&(i.markUsedJustification(e,\"left\",a,E),i.markUsedOrientation(e,E,a))}if(x){var L=De(y.icon),C=!(h&&a.verticalPlacedIconSymbolIndex&&_);if(a.placedIconSymbolIndex>=0){var P=C?L:ze;d(e.icon,a.numIconVertices,P),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=y.icon.isHidden()}if(a.verticalPlacedIconSymbolIndex>=0){var O=C?ze:L;d(e.icon,a.numVerticalIconVertices,O),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=y.icon.isHidden()}}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var I=e.collisionArrays[n];if(I){var D=new t.Point(0,0);if(I.textBox||I.verticalTextBox){var z=!0;if(u){var R=i.variableOffsets[v];R?(D=Te(R.anchor,R.width,R.height,R.textOffset,R.textBoxScale),c&&D._rotate(f?i.transform.angle:-i.transform.angle)):z=!1}I.textBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||_,D.x,D.y),I.verticalTextBox&&Me(e.textCollisionBox.collisionVertexArray,y.text.placed,!z||w,D.x,D.y)}var F=Boolean(!w&&I.verticalIconBox);I.iconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,F,h?D.x:0,h?D.y:0),I.verticalIconBox&&Me(e.iconCollisionBox.collisionVertexArray,y.icon.placed,!F,h?D.x:0,h?D.y:0)}}},g=0;g<e.symbolInstances.length;g++)v(g);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var y=this.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix=y.invProjMatrix,e.placementViewportMatrix=y.viewportMatrix,e.collisionCircleArray=y.circles,delete this.collisionCircleArrays[e.bucketInstanceId]}},Ae.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},Ae.prototype.zoomAdjustment=function(t){return Math.max(0,(this.transform.zoom-t)/1.5)},Ae.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},Ae.prototype.stillRecent=function(t,e){var r=this.zoomAtLastRecencyCheck===e?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck=e,this.commitTime+this.fadeDuration*r>t},Ae.prototype.setStale=function(){this.stale=!0};var Se=Math.pow(2,25),Ee=Math.pow(2,24),Le=Math.pow(2,17),Ce=Math.pow(2,16),Pe=Math.pow(2,9),Oe=Math.pow(2,8),Ie=Math.pow(2,1);function De(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*Se+e*Ee+r*Le+e*Ce+r*Pe+e*Oe+r*Ie+e}var ze=0,Re=function(t){this._sortAcrossTiles=\"viewport-y\"!==t.layout.get(\"symbol-z-order\")&&void 0!==t.layout.get(\"symbol-sort-key\").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]};Re.prototype.continuePlacement=function(t,e,r,n,i){for(var a=this._bucketParts;this._currentTileIndex<t.length;){var o=t[this._currentTileIndex];if(e.getBucketParts(a,n,o,this._sortAcrossTiles),this._currentTileIndex++,i())return!0}for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex<a.length;){var s=a[this._currentPartIndex];if(e.placeLayerBucketPart(s,this._seenCrossTileIDs,r),this._currentPartIndex++,i())return!0}return!1};var Fe=function(t,e,r,n,i,a,o){this.placement=new Ae(t,i,a,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Fe.prototype.isDone=function(){return this._done},Fe.prototype.continuePlacement=function(e,r,n){for(var i=this,a=t.browser.now(),o=function(){var e=t.browser.now()-a;return!i._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\"symbol\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Re(s)),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Fe.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Be=512/t.EXTENT/2,Ne=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var i=e.get(n),a=i.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Ne.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,i=Be/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*i),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*i)}},Ne.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i=0;i<t.length;i++){var a=t.get(i);if(!a.crossTileID){var o=this.indexedSymbolInstances[a.key];if(o)for(var s=this.getScaledCoordinates(a,e),l=0,u=o;l<u.length;l+=1){var c=u[l];if(Math.abs(c.coord.x-s.x)<=n&&Math.abs(c.coord.y-s.y)<=n&&!r[c.crossTileID]){r[c.crossTileID]=!0,a.crossTileID=c.crossTileID;break}}}}};var je=function(){this.maxCrossTileID=0};je.prototype.generate=function(){return++this.maxCrossTileID};var Ue=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Ue.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],i={};for(var a in n){var o=n[a];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]=o}this.indexes[r]=i}this.lng=t},Ue.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var i=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,i)}else{var u=o[t.scaledTo(Number(a)).key];u&&u.findMatches(e.symbolInstances,t,i)}}for(var c=0;c<e.symbolInstances.length;c++){var f=e.symbolInstances.get(c);f.crossTileID||(f.crossTileID=r.generate(),i[f.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Ne(t,e.symbolInstances,e.bucketInstanceId),!0},Ue.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,i=e.indexedSymbolInstances[r];n<i.length;n+=1){var a=i[n];delete this.usedCrossTileIDs[t][a.crossTileID]}},Ue.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var i in n)t[n[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[i]),delete n[i],e=!0)}return e};var Ve=function(){this.layerIndexes={},this.crossTileIDs=new je,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Ve.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Ue);var i=!1,a={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],u=l.getBucket(t);u&&t.id===u.layerIds[0]&&(u.bucketInstanceId||(u.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,u,this.crossTileIDs)&&(i=!0),a[u.bucketInstanceId]=!0)}return n.removeStaleBuckets(a)&&(i=!0),i},Ve.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach((function(t){e[t]=!0})),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var He=function(e,r){return t.emitValidationErrors(e,r&&r.filter((function(t){return\"source.canvas\"!==t.identifier})))},qe=t.pick(Ht,[\"addLayer\",\"removeLayer\",\"setPaintProperty\",\"setLayoutProperty\",\"setFilter\",\"addSource\",\"removeSource\",\"setLayerZoomRange\",\"setLight\",\"setTransition\",\"setGeoJSONSourceData\"]),Ge=t.pick(Ht,[\"setCenter\",\"setZoom\",\"setBearing\",\"setPitch\"]),Ze=function(){var e={},r=t.styleSpec.$version;for(var n in t.styleSpec.$root){var i=t.styleSpec.$root[n];if(i.required){var a;null!=(a=\"version\"===n?r:\"array\"===i.type?[]:{})&&(e[n]=a)}}return e}(),Ye=function(e){function r(n,i){var a=this;void 0===i&&(i={}),e.call(this),this.map=n,this.dispatcher=new A(jt(),this),this.imageManager=new h,this.imageManager.setEventedParent(this),this.glyphManager=new x(n._requestManager,i.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Ve,this._layers={},this._serializedLayers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._availableImages=[],this._resetUpdates(),this.dispatcher.broadcast(\"setReferrer\",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginStateChange((function(e){var r={pluginStatus:e.pluginStatus,pluginURL:e.pluginURL};o.dispatcher.broadcast(\"syncRTLPluginState\",r,(function(e,r){if(t.triggerPluginCompletionEvent(e),r&&r.every((function(t){return t})))for(var n in o.sourceCaches)o.sourceCaches[n].reload()}))})),this.on(\"data\",(function(t){if(\"source\"===t.dataType&&\"metadata\"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in a._layers){var i=a._layers[n];i.source===r.id&&a._validateLayer(i)}}}}))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"}));var i=\"boolean\"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,(function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,i)}))},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._request=t.browser.frame((function(){n._request=null,n._load(e,!1!==r.validate)}))},r.prototype.loadEmpty=function(){this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._load(Ze,!1)},r.prototype._load=function(e,r){if(!r||!He(this,t.validateStyle(e))){for(var n in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(n,e.sources[n],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Vt(this.stylesheet.layers);this._order=i.map((function(t){return t.id})),this._layers={},this._serializedLayers={};for(var a=0,o=i;a<o.length;a+=1){var s=o[a];(s=t.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]=s,this._serializedLayers[s.id]=s.serialize()}this.dispatcher.broadcast(\"setLayers\",this._serializeLayers(this._order)),this.light=new T(this.stylesheet.light),this.fire(new t.Event(\"data\",{dataType:\"style\"})),this.fire(new t.Event(\"style.load\"))}},r.prototype._loadSprite=function(e){var r=this;this._spriteRequest=function(e,r,n){var i,a,o,s=t.browser.devicePixelRatio>1?\"@2x\":\"\",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,o||(o=t,i=e,c())})),u=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){u=null,o||(o=t,a=e,c())}));function c(){if(o)n(o);else if(i&&a){var e=t.browser.getImageData(a),r={};for(var s in i){var l=i[s],u=l.width,c=l.height,f=l.x,h=l.y,p=l.sdf,d=l.pixelRatio,v=l.stretchX,g=l.stretchY,y=l.content,m=new t.RGBAImage({width:u,height:c});t.RGBAImage.copy(e,m,{x:f,y:h},{x:0,y:0},{width:u,height:c}),r[s]={data:m,pixelRatio:d,sdf:p,stretchX:v,stretchY:g,content:y}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),u&&(u.cancel(),u=null)}}}(e,this.map._requestManager,(function(e,n){if(r._spriteRequest=null,e)r.fire(new t.ErrorEvent(e));else if(n)for(var i in n)r.imageManager.addImage(i,n[i]);r.imageManager.setLoaded(!0),r._availableImages=r.imageManager.listImages(),r.dispatcher.broadcast(\"setImages\",r._availableImages),r.fire(new t.Event(\"data\",{dataType:\"style\"}))}))},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var i=r.getSource();(\"geojson\"===i.type||i.vectorLayerIds&&-1===i.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer \"'+n+'\" does not exist on source \"'+i.id+'\" as specified by style layer \"'+e.id+'\"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=this._layers[i];\"custom\"!==a.type&&e.push(a.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error(\"Style is not done loading\")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),i=Object.keys(this._removedLayers);for(var a in(n.length||i.length)&&this._updateWorkerLayers(n,i),this._updatedSources){var o=this._updatedSources[a];\"reload\"===o?this._reloadSource(a):\"clear\"===o&&this._clearSource(a)}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];h.recalculate(e,this._availableImages),!h.isHidden(e.zoom)&&h.source&&(this.sourceCaches[h.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event(\"data\",{dataType:\"style\"}))}},r.prototype._updateTilesForChangedImages=function(){var t=Object.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies([\"icons\",\"patterns\"],t);this._changedImages={}}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast(\"updateLayers\",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),He(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Vt(e.layers);var n=Kt(this.serialize(),e).filter((function(t){return!(t.command in Ge)}));if(0===n.length)return!1;var i=n.filter((function(t){return!(t.command in qe)}));if(i.length>0)throw new Error(\"Unimplemented: \"+i.map((function(t){return t.command})).join(\", \")+\".\");return n.forEach((function(t){\"setTransition\"!==t.command&&r[t.command].apply(r,t.args)})),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,r),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var i=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!r.type)throw new Error(\"The type property must be defined, but the only the following properties were given: \"+Object.keys(r).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,\"sources.\"+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Ot(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source \"'+e+'\" cannot be removed while layer \"'+r+'\" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" already exists on this map')));else{var a;if(\"custom\"===e.type){if(He(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e)}else{if(\"object\"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,\"layers.\"+i,e,{arrayIndex:-1},n))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}}),this._serializedLayers[a.id]=a.serialize()}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id \"'+r+'\" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&\"custom\"!==a.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]=\"clear\":(this._updatedSources[a.source]=\"reload\",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var i=r?this._order.indexOf(r):this._order.length;r&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id \"'+r+'\" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be moved.\")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be removed.\")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.hasLayer=function(t){return t in this._layers},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===r&&i.maxzoom===n||(null!=r&&(i.minzoom=r),null!=n&&(i.maxzoom=n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot have zoom extent.\")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,r))return null==r?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,\"layers.\"+i.id+\".filter\",r,null,n)||(i.filter=t.clone$1(r),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be filtered.\")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(r),n)||(a.setLayoutProperty(r,n,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style.\")))},r.prototype.setPaintProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(r),n)||(a.setPaintProperty(r,n,i)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=e.sourceLayer,a=this.sourceCaches[n];if(void 0!==a){var o=a.getSource().type;\"geojson\"===o&&i?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!==o||i?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),a.setFeatureState(i,e.id,r)):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+n+\"' does not exist in the map's style.\")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=this.sourceCaches[n];if(void 0!==i){var a=i.getSource().type,o=\"vector\"===a?e.sourceLayer:void 0;\"vector\"!==a||o?r&&\"string\"!=typeof e.id&&\"number\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is requred to remove its specific state property.\"))):i.removeFeatureState(o,e.id,r):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+n+\"' does not exist in the map's style.\")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,i=this.sourceCaches[r];if(void 0!==i){if(\"vector\"!==i.getSource().type||n)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),i.getFeatureState(n,e.id);this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+r+\"' does not exist in the map's style.\")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\"raster\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\"reload\",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return\"fill-extrusion\"===e._layers[t].type},n={},i=[],a=this._order.length-1;a>=0;a--){var o=this._order[a];if(r(o)){n[o]=a;for(var s=0,l=t;s<l.length;s+=1){var u=l[s][o];if(u)for(var c=0,f=u;c<f.length;c+=1){var h=f[c];i.push(h)}}}}i.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var p=[],d=this._order.length-1;d>=0;d--){var v=this._order[d];if(r(v))for(var g=i.length-1;g>=0;g--){var y=i[g].feature;if(n[y.layer.id]<d)break;p.push(y),i.pop()}else for(var m=0,x=t;m<x.length;m+=1){var b=x[m][v];if(b)for(var _=0,w=b;_<w.length;_+=1){var T=w[_];p.push(T.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,\"queryRenderedFeatures.filter\",r.filter,null,r);var i={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error(\"parameters.layers must be an Array.\"))),[];for(var a=0,o=r.layers;a<o.length;a+=1){var s=o[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\"The layer '\"+s+\"' does not exist in the map's style and cannot be queried for features.\"))),[];i[l.source]=!0}}var u=[];for(var c in r.availableImages=this._availableImages,this.sourceCaches)r.layers&&!i[c]||u.push(B(this.sourceCaches[c],this._layers,this._serializedLayers,e,r,n));return this.placement&&u.push(function(t,e,r,n,i,a,o){for(var s={},l=a.queryRenderedSymbols(n),u=[],c=0,f=Object.keys(l).map(Number);c<f.length;c+=1){var h=f[c];u.push(o[h])}u.sort(N);for(var p=function(){var r=v[d],n=r.featureIndex.lookupSymbolFeatures(l[r.bucketInstanceId],e,r.bucketIndex,r.sourceLayerIndex,i.filter,i.layers,i.availableImages,t);for(var a in n){var o=s[a]=s[a]||[],u=n[a];u.sort((function(t,e){var n=r.featureSortOrder;if(n){var i=n.indexOf(t.featureIndex);return n.indexOf(e.featureIndex)-i}return e.featureIndex-t.featureIndex}));for(var c=0,f=u;c<f.length;c+=1){var h=f[c];o.push(h)}}},d=0,v=u;d<v.length;d+=1)p();var g=function(e){s[e].forEach((function(n){var i=n.feature,a=t[e],o=r[a.source].getFeatureState(i.layer[\"source-layer\"],i.id);i.source=i.layer.source,i.layer[\"source-layer\"]&&(i.sourceLayer=i.layer[\"source-layer\"]),i.state=o}))};for(var y in s)g(y);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(u)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,\"querySourceFeatures.filter\",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map((function(e){return t.getTileByID(e)})),n=[],i={},a=0;a<r.length;a++){var o=r[a],s=o.tileID.canonical.key;i[s]||(i[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called \"'+t+'\" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\"loadWorkerSource\",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),i=!1;for(var a in e)if(!t.deepEqual(e[a],n[a])){i=!0;break}if(i){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,i,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&He(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},i)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off(\"pluginStateChange\",this._rtlTextPluginCallback),this._layers)this._layers[e].setEventedParent(null);for(var r in this.sourceCaches)this.sourceCaches[r].clearTiles(),this.sourceCaches[r].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,i,a){void 0===a&&(a=!1);for(var o=!1,s=!1,l={},u=0,c=this._order;u<c.length;u+=1){var f=c[u],h=this._layers[f];if(\"symbol\"===h.type){if(!l[h.source]){var p=this.sourceCaches[h.source];l[h.source]=p.getRenderableIds(!0).map((function(t){return p.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}))}var d=this.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);o=o||d}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a=a||this._layerOrderChanged||0===n)||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now(),e.zoom))&&(this.pauseablePlacement=new Fe(e,this._order,a,r,n,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),s=!0),o&&this.pauseablePlacement.placement.setStale()),s||o)for(var v=0,g=this._order;v<g.length;v+=1){var y=g[v],m=this._layers[y];\"symbol\"===m.type&&this.placement.updateLayerOpacities(m,l[m.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r),this._updateTilesForChangedImages();var n=this.sourceCaches[e.source];n&&n.setDependencies(e.tileID.key,e.type,e.icons)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);Ye.getSourceType=function(t){return R[t]},Ye.setSourceType=function(t,e){R[t]=e},Ye.registerForPluginStateChange=t.registerForPluginStateChange;var We=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2}]),Xe=_r(\"#ifdef GL_ES\\nprecision mediump float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\",\"#ifdef GL_ES\\nprecision highp float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\"),Je=_r(\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),Ke=_r(\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\"),$e=_r(\"varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main(void) {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}\"),Qe=_r(\"void main() {gl_FragColor=vec4(1.0);}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\"),tr=_r(\"uniform highp float u_intensity;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main() {\\n#pragma mapbox: initialize highp float weight\\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#pragma mapbox: define mediump float radius\\nconst highp float ZERO=1.0/255.0/16.0;\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main(void) {\\n#pragma mapbox: initialize highp float weight\\n#pragma mapbox: initialize mediump float radius\\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}\"),er=_r(\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(0.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}\"),rr=_r(\"varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\"),nr=_r(\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}\",\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\"),ir=_r(\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}\",\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}\"),ar=_r(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor=color*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\"),or=_r(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),sr=_r(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),lr=_r(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),ur=_r(\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\"),cr=_r(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\"),fr=_r(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\"),hr=_r(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\"),pr=_r(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),dr=_r(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define MAX_LINE_DISTANCE 32767.0\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),vr=_r(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}\"),gr=_r(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\"),yr=_r(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\"),mr=_r(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),xr=_r(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\"),br=_r(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function _r(t,e){var r=/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,n={};return{fragmentSource:t=t.replace(r,(function(t,e,r,i,a){return n[a]=!0,\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nvarying \"+r+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"})),vertexSource:e=e.replace(r,(function(t,e,r,i,a){var o=\"float\"===i?\"vec2\":\"vec4\",s=a.match(/color/)?\"color\":o;return n[a]?\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+r+\" \"+o+\" a_\"+a+\";\\nvarying \"+r+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" = a_\"+a+\";\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+r+\" \"+o+\" a_\"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"===s?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" = a_\"+a+\";\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" = unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" = u_\"+a+\";\\n#endif\\n\"}))}}var wr=Object.freeze({__proto__:null,prelude:Xe,background:Je,backgroundPattern:Ke,circle:$e,clippingMask:Qe,heatmap:tr,heatmapTexture:er,collisionBox:rr,collisionCircle:nr,debug:ir,fill:ar,fillOutline:or,fillOutlinePattern:sr,fillPattern:lr,fillExtrusion:ur,fillExtrusionPattern:cr,hillshadePrepare:fr,hillshade:hr,line:pr,lineGradient:dr,linePattern:vr,lineSDF:gr,raster:yr,symbolIcon:mr,symbolSDF:xr,symbolTextAndIcon:br}),Tr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};Tr.prototype.bind=function(t,e,r,n,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,u=0;!l&&u<n.length;u++)this.boundPaintVertexBuffers[u]!==n[u]&&(l=!0);var c=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==i||this.boundVertexOffset!==a||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||c?this.freshBind(e,r,n,i,a,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),i&&i.dynamicDraw&&i.bind(),s&&s.bind())},Tr.prototype.freshBind=function(t,e,r,n,i,a,o){var s,l=t.numAttributes,u=this.context,c=u.gl;if(u.extVertexArrayObject)this.vao&&this.destroy(),this.vao=u.extVertexArrayObject.createVertexArrayOES(),u.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=i,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=o;else{s=u.currentNumAttributes||0;for(var f=l;f<s;f++)c.disableVertexAttribArray(f)}e.enableAttributes(c,t);for(var h=0,p=r;h<p.length;h+=1)p[h].enableAttributes(c,t);a&&a.enableAttributes(c,t),o&&o.enableAttributes(c,t),e.bind(),e.setVertexAttribPointers(c,t,i);for(var d=0,v=r;d<v.length;d+=1){var g=v[d];g.bind(),g.setVertexAttribPointers(c,t,i)}a&&(a.bind(),a.setVertexAttribPointers(c,t,i)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(c,t,i)),u.currentNumAttributes=l},Tr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var kr=function(t,e,r,n,i){var a=t.gl;this.program=a.createProgram();var o=r?r.defines():[];i&&o.push(\"#define OVERDRAW_INSPECTOR;\");var s=o.concat(Xe.fragmentSource,e.fragmentSource).join(\"\\n\"),l=o.concat(Xe.vertexSource,e.vertexSource).join(\"\\n\"),u=a.createShader(a.FRAGMENT_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(u,s),a.compileShader(u),a.attachShader(this.program,u);var c=a.createShader(a.VERTEX_SHADER);if(a.isContextLost())this.failedToCreate=!0;else{a.shaderSource(c,l),a.compileShader(c),a.attachShader(this.program,c);for(var f=r?r.layoutAttributes:[],h=0;h<f.length;h++)a.bindAttribLocation(this.program,h,f[h].name);a.linkProgram(this.program),a.deleteShader(c),a.deleteShader(u),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var v=a.getActiveAttrib(this.program,d);v&&(this.attributes[v.name]=a.getAttribLocation(this.program,v.name))}for(var g=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),y=0;y<g;y++){var m=a.getActiveUniform(this.program,y);m&&(p[m.name]=a.getUniformLocation(this.program,m.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r?r.getUniforms(t,p):[]}}};function Ar(t,e,r){var n=1/ge(r,1,e.transform.tileZoom),i=Math.pow(2,r.tileID.overscaledZ),a=r.tileSize*Math.pow(2,e.transform.tileZoom)/i,o=a*(r.tileID.canonical.x+r.tileID.wrap*i),s=a*r.tileID.canonical.y;return{u_image:0,u_texsize:r.imageAtlasTexture.size,u_scale:[n,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[o>>16,s>>16],u_pixel_coord_lower:[65535&o,65535&s]}}kr.prototype.draw=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,v){var g,y=t.gl;if(!this.failedToCreate){for(var m in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[m].set(o[m]);p&&p.setUniforms(t,this.binderUniforms,f,{zoom:h});for(var x=(g={},g[y.LINES]=2,g[y.TRIANGLES]=3,g[y.LINE_STRIP]=1,g)[e],b=0,_=c.get();b<_.length;b+=1){var w=_[b],T=w.vaos||(w.vaos={});(T[s]||(T[s]=new Tr)).bind(t,this,l,p?p.getPaintVertexBuffers():[],u,w.vertexOffset,d,v),y.drawElements(e,w.primitiveLength*x,y.UNSIGNED_SHORT,w.primitiveOffset*x*2)}}};var Mr=function(e,r,n,i){var a=r.style.light,o=a.properties.get(\"position\"),s=[o.x,o.y,o.z],l=t.create$1();\"viewport\"===a.properties.get(\"anchor\")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var u=a.properties.get(\"color\");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\"intensity\"),u_lightcolor:[u.r,u.g,u.b],u_vertical_gradient:+n,u_opacity:i}},Sr=function(e,r,n,i,a,o,s){return t.extend(Mr(e,r,n,i),Ar(o,r,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Er=function(t){return{u_matrix:t}},Lr=function(e,r,n,i){return t.extend(Er(e),Ar(n,r,i))},Cr=function(t,e){return{u_matrix:t,u_world:e}},Pr=function(e,r,n,i,a){return t.extend(Lr(e,r,n,i),{u_world:a})},Or=function(e,r,n,i){var a,o,s=e.transform;if(\"map\"===i.paint.get(\"circle-pitch-alignment\")){var l=ge(n,1,s.zoom);a=!0,o=[l,l]}else a=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\"map\"===i.paint.get(\"circle-pitch-scale\")),u_matrix:e.translatePosMatrix(r.posMatrix,n,i.paint.get(\"circle-translate\"),i.paint.get(\"circle-translate-anchor\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},Ir=function(t,e,r){var n=ge(r,1,e.zoom),i=Math.pow(2,e.zoom-r.tileID.overscaledZ),a=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*i),e.pixelsToGLUnits[1]/(n*i)],u_overscale_factor:a}},Dr=function(t,e,r){return{u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:r.cameraToCenterDistance,u_viewport_size:[r.width,r.height]}},zr=function(t,e,r){return void 0===r&&(r=1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:r}},Rr=function(t){return{u_matrix:t}},Fr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:ge(e,1,r),u_intensity:n}},Br=function(e,r,n,i){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:i,u_opacity:r.paint.get(\"heatmap-opacity\")}},Nr=function(e,r,n){var i=n.paint.get(\"hillshade-shadow-color\"),a=n.paint.get(\"hillshade-highlight-color\"),o=n.paint.get(\"hillshade-accent-color\"),s=n.paint.get(\"hillshade-illumination-direction\")*(Math.PI/180);\"viewport\"===n.paint.get(\"hillshade-illumination-anchor\")&&(s-=e.transform.angle);var l,u,c,f=!e.options.moving;return{u_matrix:e.transform.calculatePosMatrix(r.tileID.toUnwrapped(),f),u_image:0,u_latrange:(l=r.tileID,u=Math.pow(2,l.canonical.z),c=l.canonical.y,[new t.MercatorCoordinate(0,c/u).toLngLat().lat,new t.MercatorCoordinate(0,(c+1)/u).toLngLat().lat]),u_light:[n.paint.get(\"hillshade-exaggeration\"),s],u_shadow:i,u_highlight:a,u_accent:o}},jr=function(e,r,n){var i=r.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[i,i],u_zoom:e.overscaledZ,u_maxzoom:n,u_unpack:r.getUnpackVector()}};var Ur=function(e,r,n){var i=e.transform;return{u_matrix:Zr(e,r,n),u_ratio:1/ge(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Vr=function(e,r,n){return t.extend(Ur(e,r,n),{u_image:0})},Hr=function(e,r,n,i){var a=e.transform,o=Gr(r,a);return{u_matrix:Zr(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/ge(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},qr=function(e,r,n,i,a){var o=e.transform,s=e.lineAtlas,l=Gr(r,o),u=\"round\"===n.layout.get(\"line-cap\"),c=s.getDash(i.from,u),f=s.getDash(i.to,u),h=c.width*a.fromScale,p=f.width*a.toScale;return t.extend(Ur(e,r,n),{u_patternscale_a:[l/h,-c.height/2],u_patternscale_b:[l/p,-f.height/2],u_sdfgamma:s.width/(256*Math.min(h,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:c.y,u_tex_y_b:f.y,u_mix:a.t})};function Gr(t,e){return 1/ge(t,1,e.tileZoom)}function Zr(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get(\"line-translate\"),r.paint.get(\"line-translate-anchor\"))}var Yr=function(t,e,r,n,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*i.paint.get(\"raster-opacity\"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get(\"raster-brightness-min\"),u_brightness_high:i.paint.get(\"raster-brightness-max\"),u_saturation_factor:(o=i.paint.get(\"raster-saturation\"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(a=i.paint.get(\"raster-contrast\"),a>0?1/(1-a):1+a),u_spin_weights:Wr(i.paint.get(\"raster-hue-rotate\"))};var a,o};function Wr(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Xr,Jr=function(t,e,r,n,i,a,o,s,l,u){var c=i.transform;return{u_is_size_zoom_constant:+(\"constant\"===t||\"source\"===t),u_is_size_feature_constant:+(\"constant\"===t||\"camera\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:c.cameraToCenterDistance,u_pitch:c.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:c.width/c.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:u,u_texture:0}},Kr=function(e,r,n,i,a,o,s,l,u,c,f){var h=a.transform;return t.extend(Jr(e,r,n,i,a,o,s,l,u,c),{u_gamma_scale:i?Math.cos(h._pitch)*h.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+f})},$r=function(e,r,n,i,a,o,s,l,u,c){return t.extend(Kr(e,r,n,i,a,o,s,l,!0,u,!0),{u_texsize_icon:c,u_texture_icon:1})},Qr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},tn=function(e,r,n,i,a,o){return t.extend(function(t,e,r,n){var i=r.imageManager.getPattern(t.from.toString()),a=r.imageManager.getPattern(t.to.toString()),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,u=Math.pow(2,n.tileID.overscaledZ),c=n.tileSize*Math.pow(2,r.transform.tileZoom)/u,f=c*(n.tileID.canonical.x+n.tileID.wrap*u),h=c*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ge(n,1,r.transform.tileZoom),u_pixel_coord_upper:[f>>16,h>>16],u_pixel_coord_lower:[65535&f,65535&h]}}(i,o,n,a),{u_matrix:e,u_opacity:r})},en={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},collisionCircle:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,r.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,r.u_viewport_size)}},debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_overlay:new t.Uniform1i(e,r.u_overlay),u_overlay_scale:new t.Uniform1f(e,r.u_overlay_scale)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom),u_unpack:new t.Uniform4f(e,r.u_unpack)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},symbolTextAndIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texsize_icon:new t.Uniform2f(e,r.u_texsize_icon),u_texture:new t.Uniform1i(e,r.u_texture),u_texture_icon:new t.Uniform1i(e,r.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function rn(e,r,n,i,a,o,s){for(var l=e.context,u=l.gl,c=e.useProgram(\"collisionBox\"),f=[],h=0,p=0,d=0;d<i.length;d++){var v=i[d],g=r.getTile(v),y=g.getBucket(n);if(y){var m=v.posMatrix;0===a[0]&&0===a[1]||(m=e.translatePosMatrix(v.posMatrix,g,a,o));var x=s?y.textCollisionBox:y.iconCollisionBox,b=y.collisionCircleArray;if(b.length>0){var _=t.create(),w=m;t.mul(_,y.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(_,_,y.placementViewportMatrix),f.push({circleArray:b,circleOffset:p,transform:w,invTransform:_}),p=h+=b.length/4}x&&c.draw(l,u.LINES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Ir(m,e.transform,g),n.id,x.layoutVertexBuffer,x.indexBuffer,x.segments,null,e.transform.zoom,null,null,x.collisionVertexBuffer)}}if(s&&f.length){var T=e.useProgram(\"collisionCircle\"),k=new t.StructArrayLayout2f1f2i16;k.resize(4*h),k._trim();for(var A=0,M=0,S=f;M<S.length;M+=1)for(var E=S[M],L=0;L<E.circleArray.length/4;L++){var C=4*L,P=E.circleArray[C+0],O=E.circleArray[C+1],I=E.circleArray[C+2],D=E.circleArray[C+3];k.emplace(A++,P,O,I,D,0),k.emplace(A++,P,O,I,D,1),k.emplace(A++,P,O,I,D,2),k.emplace(A++,P,O,I,D,3)}(!Xr||Xr.length<2*h)&&(Xr=function(e){var r=2*e,n=new t.StructArrayLayout3ui6;n.resize(r),n._trim();for(var i=0;i<r;i++){var a=6*i;n.uint16[a+0]=4*i+0,n.uint16[a+1]=4*i+1,n.uint16[a+2]=4*i+2,n.uint16[a+3]=4*i+2,n.uint16[a+4]=4*i+3,n.uint16[a+5]=4*i+0}return n}(h));for(var z=l.createIndexBuffer(Xr,!0),R=l.createVertexBuffer(k,t.collisionCircleLayout.members,!0),F=0,B=f;F<B.length;F+=1){var N=B[F],j=Dr(N.transform,N.invTransform,e.transform);T.draw(l,u.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,j,n.id,R,z,t.SegmentVector.simpleSegment(0,2*N.circleOffset,N.circleArray.length,N.circleArray.length/2),null,e.transform.zoom,null,null,null)}R.destroy(),z.destroy()}}var nn=t.identity(new Float32Array(16));function an(e,r,n,i,a,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,u=-(s.verticalAlign-.5)*n,c=t.evaluateVariableOffset(e,i);return new t.Point((l/a+c[0])*o,(u/a+c[1])*o)}function on(e,r,n,i,a,o,s,l,u,c,f){var h=e.text.placedSymbolArray,p=e.text.dynamicLayoutVertexArray,d=e.icon.dynamicLayoutVertexArray,v={};p.clear();for(var g=0;g<h.length;g++){var y=h.get(g),m=e.allowVerticalPlacement&&!y.placedOrientation,x=y.hidden||!y.crossTileID||m?null:i[y.crossTileID];if(x){var b=new t.Point(y.anchorX,y.anchorY),_=re(b,n?l:s),w=ne(o.cameraToCenterDistance,_.signedDistanceFromCamera),T=a.evaluateSizeForFeature(e.textSizeData,c,y)*w/t.ONE_EM;n&&(T*=e.tilePixelRatio/u);for(var k=x.width,A=x.height,M=an(x.anchor,k,A,x.textOffset,x.textBoxScale,T),S=n?re(b.add(M),s).point:_.point.add(r?M.rotate(-o.angle):M),E=e.allowVerticalPlacement&&y.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,L=0;L<y.numGlyphs;L++)t.addDynamicAttributes(p,S,E);f&&y.associatedIconIndex>=0&&(v[y.associatedIconIndex]={shiftedAnchor:S,angle:E})}else he(y.numGlyphs,p)}if(f){d.clear();for(var C=e.icon.placedSymbolArray,P=0;P<C.length;P++){var O=C.get(P);if(O.hidden)he(O.numGlyphs,d);else{var I=v[P];if(I)for(var D=0;D<O.numGlyphs;D++)t.addDynamicAttributes(d,I.shiftedAnchor,I.angle);else he(O.numGlyphs,d)}}e.icon.dynamicLayoutVertexBuffer.updateData(d)}e.text.dynamicLayoutVertexBuffer.updateData(p)}function sn(t,e,r){return r.iconsInText&&e?\"symbolTextAndIcon\":t?\"symbolSDF\":\"symbolIcon\"}function ln(e,r,n,i,a,o,s,l,u,c,f,h){for(var p=e.context,d=p.gl,v=e.transform,g=\"map\"===l,y=\"map\"===u,m=g&&\"point\"!==n.layout.get(\"symbol-placement\"),x=g&&!y&&!m,b=void 0!==n.layout.get(\"symbol-sort-key\").constantOr(1),_=e.depthModeForSublayer(0,Mt.ReadOnly),w=n.layout.get(\"text-variable-anchor\"),T=[],k=0,A=i;k<A.length;k+=1){var M=A[k],S=r.getTile(M),E=S.getBucket(n);if(E){var L=a?E.text:E.icon;if(L&&L.segments.get().length){var C=L.programConfigurations.get(n.id),P=a||E.sdfIcons,O=a?E.textSizeData:E.iconSizeData,I=y||0!==v.pitch,D=e.useProgram(sn(P,a,E),C),z=t.evaluateSizeForZoom(O,v.zoom),R=void 0,F=[0,0],B=void 0,N=void 0,j=null,U=void 0;if(a){if(B=S.glyphAtlasTexture,N=d.LINEAR,R=S.glyphAtlasTexture.size,E.iconsInText){F=S.imageAtlasTexture.size,j=S.imageAtlasTexture;var V=\"composite\"===O.kind||\"camera\"===O.kind;U=I||e.options.rotating||e.options.zooming||V?d.LINEAR:d.NEAREST}}else{var H=1!==n.layout.get(\"icon-size\").constantOr(0)||E.iconsNeedLinear;B=S.imageAtlasTexture,N=P||e.options.rotating||e.options.zooming||H||I?d.LINEAR:d.NEAREST,R=S.imageAtlasTexture.size}var q=ge(S,1,e.transform.zoom),G=te(M.posMatrix,y,g,e.transform,q),Z=ee(M.posMatrix,y,g,e.transform,q),Y=w&&E.hasTextData(),W=\"none\"!==n.layout.get(\"icon-text-fit\")&&Y&&E.hasIconData();m&&ae(E,M.posMatrix,e,a,G,Z,y,c);var X=e.translatePosMatrix(M.posMatrix,S,o,s),J=m||a&&w||W?nn:G,K=e.translatePosMatrix(Z,S,o,s,!0),$=P&&0!==n.paint.get(a?\"text-halo-width\":\"icon-halo-width\").constantOr(1),Q={program:D,buffers:L,uniformValues:P?E.iconsInText?$r(O.kind,z,x,y,e,X,J,K,R,F):Kr(O.kind,z,x,y,e,X,J,K,a,R,!0):Jr(O.kind,z,x,y,e,X,J,K,a,R),atlasTexture:B,atlasTextureIcon:j,atlasInterpolation:N,atlasInterpolationIcon:U,isSDF:P,hasHalo:$};if(b)for(var tt=0,et=L.segments.get();tt<et.length;tt+=1){var rt=et[tt];T.push({segments:new t.SegmentVector([rt]),sortKey:rt.sortKey,state:Q})}else T.push({segments:L.segments,sortKey:0,state:Q})}}}b&&T.sort((function(t,e){return t.sortKey-e.sortKey}));for(var nt=0,it=T;nt<it.length;nt+=1){var at=it[nt],ot=at.state;if(p.activeTexture.set(d.TEXTURE0),ot.atlasTexture.bind(ot.atlasInterpolation,d.CLAMP_TO_EDGE),ot.atlasTextureIcon&&(p.activeTexture.set(d.TEXTURE1),ot.atlasTextureIcon&&ot.atlasTextureIcon.bind(ot.atlasInterpolationIcon,d.CLAMP_TO_EDGE)),ot.isSDF){var st=ot.uniformValues;ot.hasHalo&&(st.u_is_halo=1,un(ot.buffers,at.segments,n,e,ot.program,_,f,h,st)),st.u_is_halo=0}un(ot.buffers,at.segments,n,e,ot.program,_,f,h,ot.uniformValues)}}function un(t,e,r,n,i,a,o,s,l){var u=n.context,c=u.gl;i.draw(u,c.TRIANGLES,a,o,s,Ct.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function cn(t,e,r,n,i,a,o){var s,l,u,c,f,h=t.context.gl,p=r.paint.get(\"fill-pattern\"),d=p&&p.constantOr(1),v=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty(\"fill-outline-color\")?\"fillOutlinePattern\":\"fillOutline\",s=h.LINES):(l=d?\"fillPattern\":\"fill\",s=h.TRIANGLES);for(var g=0,y=n;g<y.length;g+=1){var m=y[g],x=e.getTile(m);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(h.TEXTURE0),x.imageAtlasTexture.bind(h.LINEAR,h.CLAMP_TO_EDGE),_.updatePaintBuffers(v));var T=p.constantOr(null);if(T&&x.imageAtlas){var k=x.imageAtlas,A=k.patternPositions[T.to.toString()],M=k.patternPositions[T.from.toString()];A&&M&&_.setConstantPatternPositions(A,M)}var S=t.translatePosMatrix(m.posMatrix,x,r.paint.get(\"fill-translate\"),r.paint.get(\"fill-translate-anchor\"));if(o){c=b.indexBuffer2,f=b.segments2;var E=[h.drawingBufferWidth,h.drawingBufferHeight];u=\"fillOutlinePattern\"===l&&d?Pr(S,t,v,x,E):Cr(S,E)}else c=b.indexBuffer,f=b.segments,u=d?Lr(S,t,v,x):Er(S);w.draw(t.context,s,i,t.stencilModeForClipping(m),a,Ct.disabled,u,r.id,b.layoutVertexBuffer,c,f,r.paint,t.transform.zoom,_)}}}}function fn(t,e,r,n,i,a,o){for(var s=t.context,l=s.gl,u=r.paint.get(\"fill-extrusion-pattern\"),c=u.constantOr(1),f=r.getCrossfadeParameters(),h=r.paint.get(\"fill-extrusion-opacity\"),p=0,d=n;p<d.length;p+=1){var v=d[p],g=e.getTile(v),y=g.getBucket(r);if(y){var m=y.programConfigurations.get(r.id),x=t.useProgram(c?\"fillExtrusionPattern\":\"fillExtrusion\",m);c&&(t.context.activeTexture.set(l.TEXTURE0),g.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),m.updatePaintBuffers(f));var b=u.constantOr(null);if(b&&g.imageAtlas){var _=g.imageAtlas,w=_.patternPositions[b.to.toString()],T=_.patternPositions[b.from.toString()];w&&T&&m.setConstantPatternPositions(w,T)}var k=t.translatePosMatrix(v.posMatrix,g,r.paint.get(\"fill-extrusion-translate\"),r.paint.get(\"fill-extrusion-translate-anchor\")),A=r.paint.get(\"fill-extrusion-vertical-gradient\"),M=c?Sr(k,t,A,h,v,f,g):Mr(k,t,A,h);x.draw(s,s.gl.TRIANGLES,i,a,o,Ct.backCCW,M,r.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,r.paint,t.transform.zoom,m)}}}function hn(t,e,r,n,i,a){var o=t.context,s=o.gl,l=e.fbo;if(l){var u=t.useProgram(\"hillshade\");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var c=Nr(t,e,r);u.draw(o,s.TRIANGLES,n,i,a,Ct.disabled,c,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function pn(e,r,n,i,a,o,s){var l=e.context,u=l.gl,c=r.dem;if(c&&c.data){var f=c.dim,h=c.stride,p=c.getPixels();if(l.activeTexture.set(u.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var d=r.demTexture;d.update(p,{premultiply:!1}),d.bind(u.NEAREST,u.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,p,u.RGBA,{premultiply:!1}),r.demTexture.bind(u.NEAREST,u.CLAMP_TO_EDGE);l.activeTexture.set(u.TEXTURE0);var v=r.fbo;if(!v){var g=new t.Texture(l,{width:f,height:f,data:null},u.RGBA);g.bind(u.LINEAR,u.CLAMP_TO_EDGE),(v=r.fbo=l.createFramebuffer(f,f,!0)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(v.framebuffer),l.viewport.set([0,0,f,f]),e.useProgram(\"hillshadePrepare\").draw(l,u.TRIANGLES,a,o,s,Ct.disabled,jr(r.tileID,c,i),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function dn(e,r,n,i,a){var o=i.paint.get(\"raster-fade-duration\");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,u=r?(s-r.timeAdded)/o:-1,c=n.getSource(),f=a.coveringZoomLevel({tileSize:c.tileSize,roundZoom:c.roundZoom}),h=!r||Math.abs(r.tileID.overscaledZ-f)>Math.abs(e.tileID.overscaledZ-f),p=h&&e.refreshedUponExpiration?1:t.clamp(h?l:1-u,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}var vn=new t.Color(1,0,0,1),gn=new t.Color(0,1,0,1),yn=new t.Color(0,0,1,1),mn=new t.Color(1,0,1,1),xn=new t.Color(0,1,1,1);function bn(t){var e=t.transform.padding;_n(t,t.transform.height-(e.top||0),3,vn),_n(t,e.bottom||0,3,gn),wn(t,e.left||0,3,yn),wn(t,t.transform.width-(e.right||0),3,mn);var r=t.transform.centerPoint;!function(t,e,r,n){var i=20,a=2;Tn(t,e-a/2,r-i/2,a,i,n),Tn(t,e-i/2,r-a/2,i,a,n)}(t,r.x,t.transform.height-r.y,xn)}function _n(t,e,r,n){Tn(t,0,e+r/2,t.transform.width,r,n)}function wn(t,e,r,n){Tn(t,e-r/2,0,r,t.transform.height,n)}function Tn(e,r,n,i,a,o){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(r*t.browser.devicePixelRatio,n*t.browser.devicePixelRatio,i*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function kn(e,r,n){var i=e.context,a=i.gl,o=n.posMatrix,s=e.useProgram(\"debug\"),l=Mt.disabled,u=Et.disabled,c=e.colorModeForRenderPass(),f=\"$debug\";i.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(i,a.LINE_STRIP,l,u,c,Ct.disabled,zr(o,t.Color.red),f,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=r.getTileByID(n.key).latestRawTileData,p=h&&h.byteLength||0,d=Math.floor(p/1024),v=r.getTile(n).tileSize,g=512/Math.min(v,512)*(n.overscaledZ/e.transform.zoom)*.5,y=n.canonical.toString();n.overscaledZ!==n.canonical.z&&(y+=\" => \"+n.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var r=t.debugOverlayCanvas,n=t.context.gl,i=t.debugOverlayCanvas.getContext(\"2d\");i.clearRect(0,0,r.width,r.height),i.shadowColor=\"white\",i.shadowBlur=2,i.lineWidth=1.5,i.strokeStyle=\"white\",i.textBaseline=\"top\",i.font=\"bold 36px Open Sans, sans-serif\",i.fillText(e,5,5),i.strokeText(e,5,5),t.debugOverlayTexture.update(r),t.debugOverlayTexture.bind(n.LINEAR,n.CLAMP_TO_EDGE)}(e,y+\" \"+d+\"kb\"),s.draw(i,a.TRIANGLES,l,u,Lt.alphaBlended,Ct.disabled,zr(o,t.Color.transparent,g),f,e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments)}var An={symbol:function(e,r,n,i,a){if(\"translucent\"===e.renderPass){var o=Et.disabled,s=e.colorModeForRenderPass();n.layout.get(\"text-variable-anchor\")&&function(e,r,n,i,a,o,s){for(var l=r.transform,u=\"map\"===a,c=\"map\"===o,f=0,h=e;f<h.length;f+=1){var p=h[f],d=i.getTile(p),v=d.getBucket(n);if(v&&v.text&&v.text.segments.get().length){var g=v.textSizeData,y=t.evaluateSizeForZoom(g,l.zoom),m=ge(d,1,r.transform.zoom),x=te(p.posMatrix,c,u,r.transform,m),b=\"none\"!==n.layout.get(\"icon-text-fit\")&&v.hasIconData();if(y){var _=Math.pow(2,l.zoom-d.tileID.overscaledZ);on(v,u,c,s,t.symbolSize,l,x,p.posMatrix,_,y,b)}}}}(i,e,n,r,n.layout.get(\"text-rotation-alignment\"),n.layout.get(\"text-pitch-alignment\"),a),0!==n.paint.get(\"icon-opacity\").constantOr(1)&&ln(e,r,n,i,!1,n.paint.get(\"icon-translate\"),n.paint.get(\"icon-translate-anchor\"),n.layout.get(\"icon-rotation-alignment\"),n.layout.get(\"icon-pitch-alignment\"),n.layout.get(\"icon-keep-upright\"),o,s),0!==n.paint.get(\"text-opacity\").constantOr(1)&&ln(e,r,n,i,!0,n.paint.get(\"text-translate\"),n.paint.get(\"text-translate-anchor\"),n.layout.get(\"text-rotation-alignment\"),n.layout.get(\"text-pitch-alignment\"),n.layout.get(\"text-keep-upright\"),o,s),r.map.showCollisionBoxes&&(rn(e,r,n,i,n.paint.get(\"text-translate\"),n.paint.get(\"text-translate-anchor\"),!0),rn(e,r,n,i,n.paint.get(\"icon-translate\"),n.paint.get(\"icon-translate-anchor\"),!1))}},circle:function(e,r,n,i){if(\"translucent\"===e.renderPass){var a=n.paint.get(\"circle-opacity\"),o=n.paint.get(\"circle-stroke-width\"),s=n.paint.get(\"circle-stroke-opacity\"),l=void 0!==n.layout.get(\"circle-sort-key\").constantOr(1);if(0!==a.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var u=e.context,c=u.gl,f=e.depthModeForSublayer(0,Mt.ReadOnly),h=Et.disabled,p=e.colorModeForRenderPass(),d=[],v=0;v<i.length;v++){var g=i[v],y=r.getTile(g),m=y.getBucket(n);if(m){var x=m.programConfigurations.get(n.id),b={programConfiguration:x,program:e.useProgram(\"circle\",x),layoutVertexBuffer:m.layoutVertexBuffer,indexBuffer:m.indexBuffer,uniformValues:Or(e,g,y,n)};if(l)for(var _=0,w=m.segments.get();_<w.length;_+=1){var T=w[_];d.push({segments:new t.SegmentVector([T]),sortKey:T.sortKey,state:b})}else d.push({segments:m.segments,sortKey:0,state:b})}}l&&d.sort((function(t,e){return t.sortKey-e.sortKey}));for(var k=0,A=d;k<A.length;k+=1){var M=A[k],S=M.state,E=S.programConfiguration,L=S.program,C=S.layoutVertexBuffer,P=S.indexBuffer,O=S.uniformValues,I=M.segments;L.draw(u,c.TRIANGLES,f,h,p,Ct.disabled,O,n.id,C,P,I,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,i){if(0!==n.paint.get(\"heatmap-opacity\"))if(\"offscreen\"===e.renderPass){var a=e.context,o=a.gl,s=Et.disabled,l=new Lt([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);(function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i=r.heatmapFbo;if(i)n.bindTexture(n.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a=n.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,r,n){var i=t.gl,a=t.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,e.width/4,e.height/4,0,i.RGBA,a,null),n.colorAttachment.set(r)}(t,e,a,i)}})(a,e,n),a.clear({color:t.Color.transparent});for(var u=0;u<i.length;u++){var c=i[u];if(!r.hasRenderableParent(c)){var f=r.getTile(c),h=f.getBucket(n);if(h){var p=h.programConfigurations.get(n.id),d=e.useProgram(\"heatmap\",p),v=e.transform.zoom;d.draw(a,o.TRIANGLES,Mt.disabled,s,l,Ct.disabled,Fr(c.posMatrix,f,v,n.paint.get(\"heatmap-intensity\")),n.id,h.layoutVertexBuffer,h.indexBuffer,h.segments,n.paint,e.transform.zoom,p)}}}a.viewport.set([0,0,e.width,e.height])}else\"translucent\"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,i=n.gl,a=r.heatmapFbo;if(a){n.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),n.activeTexture.set(i.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,i.RGBA)),o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram(\"heatmapTexture\").draw(n,i.TRIANGLES,Mt.disabled,Et.disabled,e.colorModeForRenderPass(),Ct.disabled,Br(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,i){if(\"translucent\"===e.renderPass){var a=n.paint.get(\"line-opacity\"),o=n.paint.get(\"line-width\");if(0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Mt.ReadOnly),l=e.colorModeForRenderPass(),u=n.paint.get(\"line-dasharray\"),c=n.paint.get(\"line-pattern\"),f=c.constantOr(1),h=n.paint.get(\"line-gradient\"),p=n.getCrossfadeParameters(),d=f?\"linePattern\":u?\"lineSDF\":h?\"lineGradient\":\"line\",v=e.context,g=v.gl,y=!0;if(h){v.activeTexture.set(g.TEXTURE0);var m=n.gradientTexture;if(!n.gradient)return;m||(m=n.gradientTexture=new t.Texture(v,n.gradient,g.RGBA)),m.bind(g.LINEAR,g.CLAMP_TO_EDGE)}for(var x=0,b=i;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!f||w.patternsLoaded()){var T=w.getBucket(n);if(T){var k=T.programConfigurations.get(n.id),A=e.context.program.get(),M=e.useProgram(d,k),S=y||M.program!==A,E=c.constantOr(null);if(E&&w.imageAtlas){var L=w.imageAtlas,C=L.patternPositions[E.to.toString()],P=L.patternPositions[E.from.toString()];C&&P&&k.setConstantPatternPositions(C,P)}var O=f?Hr(e,w,n,p):u?qr(e,w,n,u,p):h?Vr(e,w,n):Ur(e,w,n);f?(v.activeTexture.set(g.TEXTURE0),w.imageAtlasTexture.bind(g.LINEAR,g.CLAMP_TO_EDGE),k.updatePaintBuffers(p)):u&&(S||e.lineAtlas.dirty)&&(v.activeTexture.set(g.TEXTURE0),e.lineAtlas.bind(v)),M.draw(v,g.TRIANGLES,s,e.stencilModeForClipping(_),l,Ct.disabled,O,n.id,T.layoutVertexBuffer,T.indexBuffer,T.segments,n.paint,e.transform.zoom,k),y=!1}}}}}},fill:function(e,r,n,i){var a=n.paint.get(\"fill-color\"),o=n.paint.get(\"fill-opacity\");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get(\"fill-pattern\"),u=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?\"opaque\":\"translucent\";if(e.renderPass===u){var c=e.depthModeForSublayer(1,\"opaque\"===e.renderPass?Mt.ReadWrite:Mt.ReadOnly);cn(e,r,n,i,c,s,!1)}if(\"translucent\"===e.renderPass&&n.paint.get(\"fill-antialias\")){var f=e.depthModeForSublayer(n.getPaintProperty(\"fill-outline-color\")?2:0,Mt.ReadOnly);cn(e,r,n,i,f,s,!0)}}},\"fill-extrusion\":function(t,e,r,n){var i=r.paint.get(\"fill-extrusion-opacity\");if(0!==i&&\"translucent\"===t.renderPass){var a=new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!==i||r.paint.get(\"fill-extrusion-pattern\").constantOr(1))fn(t,e,r,n,a,Et.disabled,Lt.disabled),fn(t,e,r,n,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();fn(t,e,r,n,a,Et.disabled,o)}}},hillshade:function(t,e,r,n){if(\"offscreen\"===t.renderPass||\"translucent\"===t.renderPass){for(var i=t.context,a=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Mt.ReadOnly),s=t.colorModeForRenderPass(),l=\"translucent\"===t.renderPass?t.stencilConfigForOverlap(n):[{},n],u=l[0],c=0,f=l[1];c<f.length;c+=1){var h=f[c],p=e.getTile(h);p.needsHillshadePrepare&&\"offscreen\"===t.renderPass?pn(t,p,r,a,o,Et.disabled,s):\"translucent\"===t.renderPass&&hn(t,p,r,o,u[h.overscaledZ],s)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if(\"translucent\"===t.renderPass&&0!==r.paint.get(\"raster-opacity\")&&n.length)for(var i=t.context,a=i.gl,o=e.getSource(),s=t.useProgram(\"raster\"),l=t.colorModeForRenderPass(),u=o instanceof I?[{},n]:t.stencilConfigForOverlap(n),c=u[0],f=u[1],h=f[f.length-1].overscaledZ,p=!t.options.moving,d=0,v=f;d<v.length;d+=1){var g=v[d],y=t.depthModeForSublayer(g.overscaledZ-h,1===r.paint.get(\"raster-opacity\")?Mt.ReadWrite:Mt.ReadOnly,a.LESS),m=e.getTile(g),x=t.transform.calculatePosMatrix(g.toUnwrapped(),p);m.registerFadeDuration(r.paint.get(\"raster-fade-duration\"));var b=e.findLoadedParent(g,0),_=dn(m,b,e,r,t.transform),w=void 0,T=void 0,k=\"nearest\"===r.paint.get(\"raster-resampling\")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),b?(b.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w=Math.pow(2,b.tileID.overscaledZ-m.tileID.overscaledZ),T=[m.tileID.canonical.x*w%1,m.tileID.canonical.y*w%1]):m.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var A=Yr(x,T||[0,0],w||1,_,r);o instanceof I?s.draw(i,a.TRIANGLES,y,Et.disabled,l,Ct.disabled,A,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):s.draw(i,a.TRIANGLES,y,c[g.overscaledZ],l,Ct.disabled,A,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get(\"background-color\"),i=r.paint.get(\"background-opacity\");if(0!==i){var a=t.context,o=a.gl,s=t.transform,l=s.tileSize,u=r.paint.get(\"background-pattern\");if(!t.isPatternMissing(u)){var c=!u&&1===n.a&&1===i&&t.opaquePassEnabledForLayer()?\"opaque\":\"translucent\";if(t.renderPass===c){var f=Et.disabled,h=t.depthModeForSublayer(0,\"opaque\"===c?Mt.ReadWrite:Mt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(u?\"backgroundPattern\":\"background\"),v=s.coveringTiles({tileSize:l});u&&(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var g=r.getCrossfadeParameters(),y=0,m=v;y<m.length;y+=1){var x=m[y],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=u?tn(b,i,t,u,{tileID:x,tileSize:l},g):Qr(b,i,n);d.draw(a,o.TRIANGLES,h,f,p,Ct.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)kn(t,e,r[n])},custom:function(t,e,r){var n=t.context,i=r.implementation;if(\"offscreen\"===t.renderPass){var a=i.prerender;a&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),a.call(i,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if(\"translucent\"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(Et.disabled);var o=\"3d\"===i.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),i.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},Mn=function(t,e){this.context=new Pt(t),this.transform=e,this._tileTextures={},this.setup(),this.numSublayers=Ot.maxUnderzooming+Ot.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.crossTileSymbolIndex=new Ve,this.gpuTimers={}};Mn.prototype.resize=function(e,r){if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n=0,i=this.style._order;n<i.length;n+=1){var a=i[n];this.style._layers[a].resize()}},Mn.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,We.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,We.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var i=new t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(i,O.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,We.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s),this.emptyTexture=new t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l=this.context.gl;this.stencilClearMode=new Et({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},Mn.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram(\"clippingMask\").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,Lt.disabled,Ct.disabled,Rr(n),\"$clipping\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},Mn.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(Lt.disabled),r.setDepthMode(Mt.disabled);var i=this.useProgram(\"clippingMask\");this._tileClippingMaskIDs={};for(var a=0,o=e;a<o.length;a+=1){var s=o[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;i.draw(r,n.TRIANGLES,Mt.disabled,new Et({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),Lt.disabled,Ct.disabled,Rr(s.posMatrix),\"$clipping\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},Mn.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Et({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Et({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},Mn.prototype.stencilConfigForOverlap=function(t){var e,r=this.context.gl,n=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),i=n[n.length-1].overscaledZ,a=n[0].overscaledZ-i+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var o={},s=0;s<a;s++)o[s+i]=new Et({func:r.GEQUAL,mask:255},s+this.nextStencilID,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID+=a,[o,n]}return[(e={},e[i]=Et.disabled,e),n]},Mn.prototype.colorModeForRenderPass=function(){var e=this.context.gl;if(this._showOverdrawInspector){var r=1/8;return new Lt([e.CONSTANT_COLOR,e.ONE],new t.Color(r,r,r,0),[!0,!0,!0,!0])}return\"opaque\"===this.renderPass?Lt.unblended:Lt.alphaBlended},Mn.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},Mn.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},Mn.prototype.render=function(e,r){var n=this;this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var i=this.style._order,a=this.style.sourceCaches;for(var o in a){var s=a[o];s.used&&s.prepare(this.context)}var l,u,c={},f={},h={};for(var p in a){var d=a[p];c[p]=d.getVisibleCoordinates(),f[p]=c[p].slice().reverse(),h[p]=d.getVisibleCoordinates(!0).reverse()}this.opaquePassCutoff=1/0;for(var v=0;v<i.length;v++){var g=i[v];if(this.style._layers[g].is3D()){this.opaquePassCutoff=v;break}}this.renderPass=\"offscreen\";for(var y=0,m=i;y<m.length;y+=1){var x=m[y],b=this.style._layers[x];if(b.hasOffscreenPass()&&!b.isHidden(this.transform.zoom)){var _=f[b.source];(\"custom\"===b.type||_.length)&&this.renderLayer(this,a[b.source],b,_)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass=\"opaque\",this.currentLayer=i.length-1;this.currentLayer>=0;this.currentLayer--){var w=this.style._layers[i[this.currentLayer]],T=a[w.source],k=c[w.source];this._renderTileClippingMasks(w,k),this.renderLayer(this,T,w,k)}for(this.renderPass=\"translucent\",this.currentLayer=0;this.currentLayer<i.length;this.currentLayer++){var A=this.style._layers[i[this.currentLayer]],M=a[A.source],S=(\"symbol\"===A.type?h:f)[A.source];this._renderTileClippingMasks(A,c[A.source]),this.renderLayer(this,M,A,S)}this.options.showTileBoundaries&&(t.values(this.style._layers).forEach((function(t){t.source&&!t.isHidden(n.transform.zoom)&&(t.source!==(u&&u.id)&&(u=n.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom<u.getSource().maxzoom)&&(l=u))})),l&&An.debug(this,l,l.getVisibleCoordinates())),this.options.showPadding&&bn(this),this.context.setDefault()},Mn.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||(\"background\"===r.type||\"custom\"===r.type||n.length)&&(this.id=r.id,this.gpuTimingStart(r),An[r.type](t,e,r,n,this.style.placement.variableOffsets),this.gpuTimingEnd())},Mn.prototype.gpuTimingStart=function(t){if(this.options.gpuTiming){var e=this.context.extTimerQuery,r=this.gpuTimers[t.id];r||(r=this.gpuTimers[t.id]={calls:0,cpuTime:0,query:e.createQueryEXT()}),r.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,r.query)}},Mn.prototype.gpuTimingEnd=function(){if(this.options.gpuTiming){var t=this.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT)}},Mn.prototype.collectGpuTimers=function(){var t=this.gpuTimers;return this.gpuTimers={},t},Mn.prototype.queryGpuTimers=function(t){var e={};for(var r in t){var n=t[r],i=this.context.extTimerQuery,a=i.getQueryObjectEXT(n.query,i.QUERY_RESULT_EXT)/1e6;i.deleteQueryEXT(n.query),e[r]=a}return e},Mn.prototype.translatePosMatrix=function(e,r,n,i,a){if(!n[0]&&!n[1])return e;var o=a?\"map\"===i?this.transform.angle:0:\"viewport\"===i?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var u=[a?n[0]:ge(r,n[0],this.transform.zoom),a?n[1]:ge(r,n[1],this.transform.zoom),0],c=new Float32Array(16);return t.translate(c,e,u),c},Mn.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},Mn.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},Mn.prototype.isPatternMissing=function(t){if(!t)return!1;if(!t.from||!t.to)return!0;var e=this.imageManager.getPattern(t.from.toString()),r=this.imageManager.getPattern(t.to.toString());return!e||!r},Mn.prototype.useProgram=function(t,e){this.cache=this.cache||{};var r=\"\"+t+(e?e.cacheKey:\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[r]||(this.cache[r]=new kr(this.context,wr[t],e,en[t],this._showOverdrawInspector)),this.cache[r]},Mn.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},Mn.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)},Mn.prototype.initDebugOverlayCanvas=function(){if(null==this.debugOverlayCanvas){this.debugOverlayCanvas=t.window.document.createElement(\"canvas\"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512;var e=this.context.gl;this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,e.RGBA)}},Mn.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy()};var Sn=function(t,e){this.points=t,this.planes=e};Sn.fromInvProjectionMatrix=function(e,r,n){var i=Math.pow(2,n),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(r){return t.transformMat4([],r,e)})).map((function(e){return t.scale$1([],e,1/e[3]/r*i)})),o=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var r=t.sub([],a[e[0]],a[e[1]]),n=t.sub([],a[e[2]],a[e[1]]),i=t.normalize([],t.cross([],r,n)),o=-t.dot(i,a[e[1]]);return i.concat(o)}));return new Sn(a,o)};var En=function(e,r){this.min=e,this.max=r,this.center=t.scale$2([],t.add([],this.min,this.max),.5)};En.prototype.quadrant=function(e){for(var r=[e%2==0,e<2],n=t.clone$2(this.min),i=t.clone$2(this.max),a=0;a<r.length;a++)n[a]=r[a]?this.min[a]:this.center[a],i[a]=r[a]?this.center[a]:this.max[a];return i[2]=this.max[2],new En(n,i)},En.prototype.distanceX=function(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},En.prototype.distanceY=function(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},En.prototype.intersects=function(e){for(var r=[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],n=!0,i=0;i<e.planes.length;i++){for(var a=e.planes[i],o=0,s=0;s<r.length;s++)o+=t.dot$1(a,r[s])>=0;if(0===o)return 0;o!==r.length&&(n=!1)}if(n)return 2;for(var l=0;l<3;l++){for(var u=Number.MAX_VALUE,c=-Number.MAX_VALUE,f=0;f<e.points.length;f++){var h=e.points[f][l]-this.min[l];u=Math.min(u,h),c=Math.max(c,h)}if(c<0||u>this.max[l]-this.min[l])return 0}return 1};var Ln=function(t,e,r,n){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===r&&(r=0),void 0===n&&(n=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(r)||r<0||isNaN(n)||n<0)throw new Error(\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\");this.top=t,this.bottom=e,this.left=r,this.right=n};Ln.prototype.interpolate=function(e,r,n){return null!=r.top&&null!=e.top&&(this.top=t.number(e.top,r.top,n)),null!=r.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,r.bottom,n)),null!=r.left&&null!=e.left&&(this.left=t.number(e.left,r.left,n)),null!=r.right&&null!=e.right&&(this.right=t.number(e.right,r.right,n)),this},Ln.prototype.getCenter=function(e,r){var n=t.clamp((this.left+e-this.right)/2,0,e),i=t.clamp((this.top+r-this.bottom)/2,0,r);return new t.Point(n,i)},Ln.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},Ln.prototype.clone=function(){return new Ln(this.top,this.bottom,this.left,this.right)},Ln.prototype.toJSON=function(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var Cn=function(e,r,n,i,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=r||22,this._minPitch=null==n?0:n,this._maxPitch=null==i?60:i,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new Ln,this._posMatrixCache={},this._alignedPosMatrixCache={}},Pn={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};Cn.prototype.clone=function(){var t=new Cn(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},Pn.minZoom.get=function(){return this._minZoom},Pn.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},Pn.maxZoom.get=function(){return this._maxZoom},Pn.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},Pn.minPitch.get=function(){return this._minPitch},Pn.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t))},Pn.maxPitch.get=function(){return this._maxPitch},Pn.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t))},Pn.renderWorldCopies.get=function(){return this._renderWorldCopies},Pn.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},Pn.worldSize.get=function(){return this.tileSize*this.scale},Pn.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},Pn.size.get=function(){return new t.Point(this.width,this.height)},Pn.bearing.get=function(){return-this.angle/Math.PI*180},Pn.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},Pn.pitch.get=function(){return this._pitch/Math.PI*180},Pn.pitch.set=function(e){var r=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},Pn.fov.get=function(){return this._fov/Math.PI*180},Pn.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},Pn.zoom.get=function(){return this._zoom},Pn.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},Pn.center.get=function(){return this._center},Pn.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},Pn.padding.get=function(){return this._edgeInsets.toJSON()},Pn.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices())},Pn.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},Cn.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},Cn.prototype.interpolatePadding=function(t,e,r){this._unmodified=!1,this._edgeInsets.interpolate(t,e,r),this._constrain(),this._calcMatrices()},Cn.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},Cn.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,i.x,a.x,o.x)),l=Math.floor(Math.max(n.x,i.x,a.x,o.x)),u=s-1;u<=l+1;u++)0!==u&&r.push(new t.UnwrappedTileID(u,e));return r},Cn.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,r),o=[a*i.x,a*i.y,0],s=Sn.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,r),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=r);var u=function(t){return{aabb:new En([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},c=[],f=[],h=r,p=e.reparseOverscaled?n:r;if(this._renderWorldCopies)for(var d=1;d<=3;d++)c.push(u(-d)),c.push(u(d));for(c.push(u(0));c.length>0;){var v=c.pop(),g=v.x,y=v.y,m=v.fullyVisible;if(!m){var x=v.aabb.intersects(s);if(0===x)continue;m=2===x}var b=v.aabb.distanceX(o),_=v.aabb.distanceY(o),w=Math.max(Math.abs(b),Math.abs(_)),T=3+(1<<h-v.zoom)-2;if(v.zoom===h||w>T&&v.zoom>=l)f.push({tileID:new t.OverscaledTileID(v.zoom===h?p:v.zoom,v.wrap,v.zoom,g,y),distanceSq:t.sqrLen([o[0]-.5-g,o[1]-.5-y])});else for(var k=0;k<4;k++){var A=(g<<1)+k%2,M=(y<<1)+(k>>1);c.push({aabb:v.aabb.quadrant(k),zoom:v.zoom+1,x:A,y:M,wrap:v.wrap,fullyVisible:m})}}return f.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},Cn.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},Pn.unmodified.get=function(){return this._unmodified},Cn.prototype.zoomScale=function(t){return Math.pow(2,t)},Cn.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},Cn.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},Cn.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},Pn.point.get=function(){return this.project(this.center)},Cn.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),i=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),o=new t.MercatorCoordinate(a.x-(n.x-i.x),a.y-(n.y-i.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},Cn.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},Cn.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},Cn.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},Cn.prototype.coordinateLocation=function(t){return t.toLngLat()},Cn.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var i=r[3],a=n[3],o=r[0]/i,s=n[0]/a,l=r[1]/i,u=n[1]/a,c=r[2]/i,f=n[2]/a,h=c===f?0:(0-c)/(f-c);return new t.MercatorCoordinate(t.number(o,s,h)/this.worldSize,t.number(l,u,h)/this.worldSize)},Cn.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},Cn.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},Cn.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},Cn.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},Cn.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,i=r?this._alignedPosMatrixCache:this._posMatrixCache;if(i[n])return i[n];var a=e.canonical,o=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),i[n]=new Float32Array(l),i[n]},Cn.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},Cn.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,i,a=-90,o=90,s=-180,l=180,u=this.size,c=this._unmodified;if(this.latRange){var f=this.latRange;a=t.mercatorYfromLat(f[1])*this.worldSize,e=(o=t.mercatorYfromLat(f[0])*this.worldSize)-a<u.y?u.y/(o-a):0}if(this.lngRange){var h=this.lngRange;s=t.mercatorXfromLng(h[0])*this.worldSize,r=(l=t.mercatorXfromLng(h[1])*this.worldSize)-s<u.x?u.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+a)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=c,void(this._constraining=!1);if(this.latRange){var v=p.y,g=u.y/2;v-g<a&&(i=a+g),v+g>o&&(i=o-g)}if(this.lngRange){var y=p.x,m=u.x/2;y-m<s&&(n=s+m),y+m>l&&(n=l-m)}void 0===n&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==i?i:p.y))),this._unmodified=c,this._constraining=!1}},Cn.prototype._calcMatrices=function(){if(this.height){var e=this._fov/2,r=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(e)*this.height;var n=Math.PI/2+this._pitch,i=this._fov*(.5+r.y/this.height),a=Math.sin(i)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-n-i,.01,Math.PI-.01)),o=this.point,s=o.x,l=o.y,u=1.01*(Math.cos(Math.PI/2-this._pitch)*a+this.cameraToCenterDistance),c=this.height/50,f=new Float64Array(16);t.perspective(f,this._fov,this.width/this.height,c,u),f[8]=2*-r.x/this.width,f[9]=2*r.y/this.height,t.scale(f,f,[1,-1,1]),t.translate(f,f,[0,0,-this.cameraToCenterDistance]),t.rotateX(f,f,this._pitch),t.rotateZ(f,f,this.angle),t.translate(f,f,[-s,-l,0]),this.mercatorMatrix=t.scale([],f,[this.worldSize,this.worldSize,this.worldSize]),t.scale(f,f,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=f,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,p=this.height%2/2,d=Math.cos(this.angle),v=Math.sin(this.angle),g=s-Math.round(s)+d*h+v*p,y=l-Math.round(l)+d*p+v*h,m=new Float64Array(f);if(t.translate(m,m,[g>.5?g-1:g,y>.5?y-1:y,0]),this.alignedProjMatrix=m,f=t.create(),t.scale(f,f,[this.width/2,-this.height/2,1]),t.translate(f,f,[1,-1,0]),this.labelPlaneMatrix=f,f=t.create(),t.scale(f,f,[1,-1,1]),t.translate(f,f,[-1,-1,0]),t.scale(f,f,[2/this.width,2/this.height,1]),this.glCoordMatrix=f,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(f=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse=f,this._posMatrixCache={},this._alignedPosMatrixCache={}}},Cn.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Cn.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},Cn.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,i=r.y,a=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var u=l[s];n=Math.min(n,u.x),i=Math.min(i,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y)}return[new t.Point(n,i),new t.Point(a,i),new t.Point(a,o),new t.Point(n,o),new t.Point(n,i)]},Object.defineProperties(Cn.prototype,Pn);var On=function(e){var r,n,i,a,o;this._hashName=e&&encodeURIComponent(e),t.bindAll([\"_getCurrentHash\",\"_onHashChange\",\"_updateHash\"],this),this._updateHash=(r=this._updateHashUnthrottled.bind(this),n=300,i=!1,a=null,o=function(){a=null,i&&(r(),a=setTimeout(o,n),i=!1)},function(){return i=!0,a||o(),a})};On.prototype.addTo=function(e){return this._map=e,t.window.addEventListener(\"hashchange\",this._onHashChange,!1),this._map.on(\"moveend\",this._updateHash),this},On.prototype.remove=function(){return t.window.removeEventListener(\"hashchange\",this._onHashChange,!1),this._map.off(\"moveend\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},On.prototype.getHashString=function(e){var r=this._map.getCenter(),n=Math.round(100*this._map.getZoom())/100,i=Math.ceil((n*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,i),o=Math.round(r.lng*a)/a,s=Math.round(r.lat*a)/a,l=this._map.getBearing(),u=this._map.getPitch(),c=\"\";if(c+=e?\"/\"+o+\"/\"+s+\"/\"+n:n+\"/\"+s+\"/\"+o,(l||u)&&(c+=\"/\"+Math.round(10*l)/10),u&&(c+=\"/\"+Math.round(u)),this._hashName){var f=this._hashName,h=!1,p=t.window.location.hash.slice(1).split(\"&\").map((function(t){var e=t.split(\"=\")[0];return e===f?(h=!0,e+\"=\"+c):t})).filter((function(t){return t}));return h||p.push(f+\"=\"+c),\"#\"+p.join(\"&\")}return\"#\"+c},On.prototype._getCurrentHash=function(){var e,r=this,n=t.window.location.hash.replace(\"#\",\"\");return this._hashName?(n.split(\"&\").map((function(t){return t.split(\"=\")})).forEach((function(t){t[0]===r._hashName&&(e=t)})),(e&&e[1]||\"\").split(\"/\")):n.split(\"/\")},On.prototype._onHashChange=function(){var t=this._getCurrentHash();if(t.length>=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return!1},On.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,\"\",e)}catch(t){}};var In={linearity:.3,easing:t.bezier(0,0,.3,1)},Dn=t.extend({deceleration:2500,maxSpeed:1400},In),zn=t.extend({deceleration:20,maxSpeed:1400},In),Rn=t.extend({deceleration:1e3,maxSpeed:360},In),Fn=t.extend({deceleration:1e3,maxSpeed:90},In),Bn=function(t){this._map=t,this.clear()};function Nn(t,e){(!t.duration||t.duration<e.duration)&&(t.duration=e.duration,t.easing=e.easing)}function jn(e,r,n){var i=n.maxSpeed,a=n.linearity,o=n.deceleration,s=t.clamp(e*a/(r/1e3),-i,i),l=Math.abs(s)/(o*a);return{easing:n.easing,duration:1e3*l,amount:s*(l/2)}}Bn.prototype.clear=function(){this._inertiaBuffer=[]},Bn.prototype.record=function(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e})},Bn.prototype._drainInertiaBuffer=function(){for(var e=this._inertiaBuffer,r=t.browser.now();e.length>0&&r-e[0].time>160;)e.shift()},Bn.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var r={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},n=0,i=this._inertiaBuffer;n<i.length;n+=1){var a=i[n].settings;r.zoom+=a.zoomDelta||0,r.bearing+=a.bearingDelta||0,r.pitch+=a.pitchDelta||0,a.panDelta&&r.pan._add(a.panDelta),a.around&&(r.around=a.around),a.pinchAround&&(r.pinchAround=a.pinchAround)}var o=this._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s={};if(r.pan.mag()){var l=jn(r.pan.mag(),o,t.extend({},Dn,e||{}));s.offset=r.pan.mult(l.amount/r.pan.mag()),s.center=this._map.transform.center,Nn(s,l)}if(r.zoom){var u=jn(r.zoom,o,zn);s.zoom=this._map.transform.zoom+u.amount,Nn(s,u)}if(r.bearing){var c=jn(r.bearing,o,Rn);s.bearing=this._map.transform.bearing+t.clamp(c.amount,-179,179),Nn(s,c)}if(r.pitch){var f=jn(r.pitch,o,Fn);s.pitch=this._map.transform.pitch+f.amount,Nn(s,f)}if(s.zoom||s.bearing){var h=void 0===r.pinchAround?r.around:r.pinchAround;s.around=h?this._map.unproject(h):this._map.getCenter()}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Un=function(e){function n(n,i,a,o){void 0===o&&(o={});var s=r.mousePos(i.getCanvasContainer(),a),l=i.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented=!1,this.target=i}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Vn=function(e){function n(n,i,a){var o=\"touchend\"===n?a.changedTouches:a.touches,s=r.touchPos(i.getCanvasContainer(),o),l=s.map((function(t){return i.unproject(t)})),u=s.reduce((function(t,e,r,n){return t.add(e.div(n.length))}),new t.Point(0,0)),c=i.unproject(u);e.call(this,n,{points:s,point:u,lngLats:l,lngLat:c,originalEvent:a}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Hn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),qn=function(t,e){this._map=t,this._clickTolerance=e.clickTolerance};qn.prototype.reset=function(){delete this._mousedownPos},qn.prototype.wheel=function(t){return this._firePreventable(new Hn(t.type,this._map,t))},qn.prototype.mousedown=function(t,e){return this._mousedownPos=e,this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseup=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.click=function(t,e){this._mousedownPos&&this._mousedownPos.dist(e)>=this._clickTolerance||this._map.fire(new Un(t.type,this._map,t))},qn.prototype.dblclick=function(t){return this._firePreventable(new Un(t.type,this._map,t))},qn.prototype.mouseover=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.mouseout=function(t){this._map.fire(new Un(t.type,this._map,t))},qn.prototype.touchstart=function(t){return this._firePreventable(new Vn(t.type,this._map,t))},qn.prototype.touchmove=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchend=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype.touchcancel=function(t){this._map.fire(new Vn(t.type,this._map,t))},qn.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return{}},qn.prototype.isEnabled=function(){return!0},qn.prototype.isActive=function(){return!1},qn.prototype.enable=function(){},qn.prototype.disable=function(){};var Gn=function(t){this._map=t};Gn.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent},Gn.prototype.mousemove=function(t){this._map.fire(new Un(t.type,this._map,t))},Gn.prototype.mousedown=function(){this._delayContextMenu=!0},Gn.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Un(\"contextmenu\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)},Gn.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Un(t.type,this._map,t)),this._map.listens(\"contextmenu\")&&t.preventDefault()},Gn.prototype.isEnabled=function(){return!0},Gn.prototype.isActive=function(){return!1},Gn.prototype.enable=function(){},Gn.prototype.disable=function(){};var Zn=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1};function Yn(t,e){for(var r={},n=0;n<t.length;n++)r[t[n].identifier]=e[n];return r}Zn.prototype.isEnabled=function(){return!!this._enabled},Zn.prototype.isActive=function(){return!!this._active},Zn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Zn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Zn.prototype.mousedown=function(t,e){this.isEnabled()&&t.shiftKey&&0===t.button&&(r.disableDrag(),this._startPos=this._lastPos=e,this._active=!0)},Zn.prototype.mousemoveWindow=function(t,e){if(this._active){var n=e;if(!(this._lastPos.equals(n)||!this._box&&n.dist(this._startPos)<this._clickTolerance)){var i=this._startPos;this._lastPos=n,this._box||(this._box=r.create(\"div\",\"mapboxgl-boxzoom\",this._container),this._container.classList.add(\"mapboxgl-crosshair\"),this._fireEvent(\"boxzoomstart\",t));var a=Math.min(i.x,n.x),o=Math.max(i.x,n.x),s=Math.min(i.y,n.y),l=Math.max(i.y,n.y);r.setTransform(this._box,\"translate(\"+a+\"px,\"+s+\"px)\"),this._box.style.width=o-a+\"px\",this._box.style.height=l-s+\"px\"}}},Zn.prototype.mouseupWindow=function(e,n){var i=this;if(this._active&&0===e.button){var a=this._startPos,o=n;if(this.reset(),r.suppressClick(),a.x!==o.x||a.y!==o.y)return this._map.fire(new t.Event(\"boxzoomend\",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,o,i._map.getBearing(),{linear:!0})}};this._fireEvent(\"boxzoomcancel\",e)}},Zn.prototype.keydown=function(t){this._active&&27===t.keyCode&&(this.reset(),this._fireEvent(\"boxzoomcancel\",t))},Zn.prototype.reset=function(){this._active=!1,this._container.classList.remove(\"mapboxgl-crosshair\"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},Zn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var Wn=function(t){this.reset(),this.numTouches=t.numTouches};Wn.prototype.reset=function(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1},Wn.prototype.touchstart=function(e,r,n){(this.centroid||n.length>this.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),n.length===this.numTouches&&(this.centroid=function(e){for(var r=new t.Point(0,0),n=0,i=e;n<i.length;n+=1){var a=i[n];r._add(a)}return r.div(e.length)}(r),this.touches=Yn(n,r)))},Wn.prototype.touchmove=function(t,e,r){if(!this.aborted&&this.centroid){var n=Yn(r,e);for(var i in this.touches){var a=this.touches[i],o=n[i];(!o||o.dist(a)>30)&&(this.aborted=!0)}}},Wn.prototype.touchend=function(t,e,r){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===r.length){var n=!this.aborted&&this.centroid;if(this.reset(),n)return n}};var Xn=function(t){this.singleTap=new Wn(t),this.numTaps=t.numTaps,this.reset()};Xn.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()},Xn.prototype.touchstart=function(t,e,r){this.singleTap.touchstart(t,e,r)},Xn.prototype.touchmove=function(t,e,r){this.singleTap.touchmove(t,e,r)},Xn.prototype.touchend=function(t,e,r){var n=this.singleTap.touchend(t,e,r);if(n){var i=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(n)<30;if(i&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=n,this.count===this.numTaps)return this.reset(),n}};var Jn=function(){this._zoomIn=new Xn({numTouches:1,numTaps:2}),this._zoomOut=new Xn({numTouches:2,numTaps:1}),this.reset()};Jn.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()},Jn.prototype.touchstart=function(t,e,r){this._zoomIn.touchstart(t,e,r),this._zoomOut.touchstart(t,e,r)},Jn.prototype.touchmove=function(t,e,r){this._zoomIn.touchmove(t,e,r),this._zoomOut.touchmove(t,e,r)},Jn.prototype.touchend=function(t,e,r){var n=this,i=this._zoomIn.touchend(t,e,r),a=this._zoomOut.touchend(t,e,r);return i?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(i)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},Jn.prototype.touchcancel=function(){this.reset()},Jn.prototype.enable=function(){this._enabled=!0},Jn.prototype.disable=function(){this._enabled=!1,this.reset()},Jn.prototype.isEnabled=function(){return this._enabled},Jn.prototype.isActive=function(){return this._active};var Kn=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1};Kn.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton},Kn.prototype._correctButton=function(t,e){return!1},Kn.prototype._move=function(t,e){return{}},Kn.prototype.mousedown=function(t,e){if(!this._lastPoint){var n=r.mouseButton(t);this._correctButton(t,n)&&(this._lastPoint=e,this._eventButton=n)}},Kn.prototype.mousemoveWindow=function(t,e){var r=this._lastPoint;if(r&&(t.preventDefault(),this._moved||!(e.dist(r)<this._clickTolerance)))return this._moved=!0,this._lastPoint=e,this._move(r,e)},Kn.prototype.mouseupWindow=function(t){r.mouseButton(t)===this._eventButton&&(this._moved&&r.suppressClick(),this.reset())},Kn.prototype.enable=function(){this._enabled=!0},Kn.prototype.disable=function(){this._enabled=!1,this.reset()},Kn.prototype.isEnabled=function(){return this._enabled},Kn.prototype.isActive=function(){return this._active};var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.mousedown=function(e,r){t.prototype.mousedown.call(this,e,r),this._lastPoint&&(this._active=!0)},e.prototype._correctButton=function(t,e){return 0===e&&!t.ctrlKey},e.prototype._move=function(t,e){return{around:e,panDelta:e.sub(t)}},e}(Kn),Qn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=.8*(e.x-t.x);if(r)return this._active=!0,{bearingDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._correctButton=function(t,e){return 0===e&&t.ctrlKey||2===e},e.prototype._move=function(t,e){var r=-.5*(e.y-t.y);if(r)return this._active=!0,{pitchDelta:r}},e.prototype.contextmenu=function(t){t.preventDefault()},e}(Kn),ei=function(t){this._minTouches=1,this._clickTolerance=t.clickTolerance||1,this.reset()};ei.prototype.reset=function(){this._active=!1,this._touches={},this._sum=new t.Point(0,0)},ei.prototype.touchstart=function(t,e,r){return this._calculateTransform(t,e,r)},ei.prototype.touchmove=function(t,e,r){if(this._active)return t.preventDefault(),this._calculateTransform(t,e,r)},ei.prototype.touchend=function(t,e,r){this._calculateTransform(t,e,r),this._active&&r.length<this._minTouches&&this.reset()},ei.prototype.touchcancel=function(){this.reset()},ei.prototype._calculateTransform=function(e,r,n){n.length>0&&(this._active=!0);var i=Yn(n,r),a=new t.Point(0,0),o=new t.Point(0,0),s=0;for(var l in i){var u=i[l],c=this._touches[l];c&&(a._add(u),o._add(u.sub(c)),s++,i[l]=u)}if(this._touches=i,!(s<this._minTouches)&&o.mag()){var f=o.div(s);if(this._sum._add(f),!(this._sum.mag()<this._clickTolerance))return{around:a.div(s),panDelta:f}}},ei.prototype.enable=function(){this._enabled=!0},ei.prototype.disable=function(){this._enabled=!1,this.reset()},ei.prototype.isEnabled=function(){return this._enabled},ei.prototype.isActive=function(){return this._active};var ri=function(){this.reset()};function ni(t,e,r){for(var n=0;n<t.length;n++)if(t[n].identifier===r)return e[n]}ri.prototype.reset=function(){this._active=!1,delete this._firstTwoTouches},ri.prototype._start=function(t){},ri.prototype._move=function(t,e,r){return{}},ri.prototype.touchstart=function(t,e,r){this._firstTwoTouches||r.length<2||(this._firstTwoTouches=[r[0].identifier,r[1].identifier],this._start([e[0],e[1]]))},ri.prototype.touchmove=function(t,e,r){if(this._firstTwoTouches){t.preventDefault();var n=this._firstTwoTouches,i=n[0],a=n[1],o=ni(r,e,i),s=ni(r,e,a);if(o&&s){var l=this._aroundCenter?null:o.add(s).div(2);return this._move([o,s],l,t)}}},ri.prototype.touchend=function(t,e,n){if(this._firstTwoTouches){var i=this._firstTwoTouches,a=i[0],o=i[1],s=ni(n,e,a),l=ni(n,e,o);s&&l||(this._active&&r.suppressClick(),this.reset())}},ri.prototype.touchcancel=function(){this.reset()},ri.prototype.enable=function(t){this._enabled=!0,this._aroundCenter=!!t&&\"center\"===t.around},ri.prototype.disable=function(){this._enabled=!1,this.reset()},ri.prototype.isEnabled=function(){return this._enabled},ri.prototype.isActive=function(){return this._active};function ii(t,e){return Math.log(t/e)/Math.LN2}var ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance},e.prototype._start=function(t){this._startDistance=this._distance=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._distance;if(this._distance=t[0].dist(t[1]),this._active||!(Math.abs(ii(this._distance,this._startDistance))<.1))return this._active=!0,{zoomDelta:ii(this._distance,r),pinchAround:e}},e}(ri);function oi(t,e){return 180*t.angleWith(e)/Math.PI}var si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector},e.prototype._start=function(t){this._startVector=this._vector=t[0].sub(t[1]),this._minDiameter=t[0].dist(t[1])},e.prototype._move=function(t,e){var r=this._vector;if(this._vector=t[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:oi(this._vector,r),pinchAround:e}},e.prototype._isBelowThreshold=function(t){this._minDiameter=Math.min(this._minDiameter,t.mag());var e=25/(Math.PI*this._minDiameter)*360,r=oi(t,this._startVector);return Math.abs(r)<e},e}(ri);function li(t){return Math.abs(t.y)>Math.abs(t.x)}var ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints},e.prototype._start=function(t){this._lastPoints=t,li(t[0].sub(t[1]))&&(this._valid=!1)},e.prototype._move=function(t,e,r){var n=t[0].sub(this._lastPoints[0]),i=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(n,i,r.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(n.y+i.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,r){if(void 0!==this._valid)return this._valid;var n=t.mag()>=2,i=e.mag()>=2;if(n||i){if(!n||!i)return void 0===this._firstMove&&(this._firstMove=r),r-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return li(t)&&li(e)&&a}},e}(ri),ci={panStep:100,bearingStep:15,pitchStep:10},fi=function(){var t=ci;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep};function hi(t){return t*(2-t)}fi.prototype.reset=function(){this._active=!1},fi.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var r=0,n=0,i=0,a=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:r=1;break;case 189:case 109:case 173:r=-1;break;case 37:t.shiftKey?n=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?n=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?i=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?i=-1:(t.preventDefault(),o=1);break;default:return}return{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:\"keyboardHandler\",easing:hi,zoom:r?Math.round(l)+r*(t.shiftKey?2:1):l,bearing:s.getBearing()+n*e._bearingStep,pitch:s.getPitch()+i*e._pitchStep,offset:[-a*e._panStep,-o*e._panStep],center:s.getCenter()},{originalEvent:t})}}}},fi.prototype.enable=function(){this._enabled=!0},fi.prototype.disable=function(){this._enabled=!1,this.reset()},fi.prototype.isEnabled=function(){return this._enabled},fi.prototype.isActive=function(){return this._active};var pi=4.000244140625,di=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._handler=r,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=.0022222222222222222,t.bindAll([\"_onWheel\",\"_onTimeout\",\"_onScrollFrame\",\"_onScrollFinished\"],this)};di.prototype.setZoomRate=function(t){this._defaultZoomRate=t},di.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},di.prototype.isEnabled=function(){return!!this._enabled},di.prototype.isActive=function(){return!!this._active||void 0!==this._finishTimeout},di.prototype.isZooming=function(){return!!this._zooming},di.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\"center\"===t.around)},di.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},di.prototype.wheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),i=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%pi==0?this._type=\"wheel\":0!==r&&Math.abs(r)<4?this._type=\"trackpad\":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?\"trackpad\":\"wheel\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this._active||this._start(e)),e.preventDefault()}},di.prototype._onTimeout=function(t){this._type=\"wheel\",this._delta-=this._lastValue,this._active||this._start(t)},di.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame())}},di.prototype.renderFrame=function(){return this._onScrollFrame()},di.prototype._onScrollFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var r=this._map.transform;if(0!==this._delta){var n=\"wheel\"===this._type&&Math.abs(this._delta)>pi?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==i&&(i=1/i);var a=\"number\"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(a*i))),\"wheel\"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o,s=\"number\"==typeof this._targetZoom?this._targetZoom:r.zoom,l=this._startZoom,u=this._easing,c=!1;if(\"wheel\"===this._type&&l&&u){var f=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=u(f);o=t.number(l,s,h),f<1?this._frameId||(this._frameId=!0):c=!0}else o=s,c=!0;return this._active=!0,c&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout}),200)),{noInertia:!0,needsRenderFrame:!c,zoomDelta:o-r.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},di.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,i=(t.browser.now()-n.start)/n.duration,a=n.easing(i+.01)-n.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r},di.prototype.reset=function(){this._active=!1};var vi=function(t,e){this._clickZoom=t,this._tapZoom=e};vi.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable()},vi.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable()},vi.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},vi.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var gi=function(){this.reset()};gi.prototype.reset=function(){this._active=!1},gi.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(r){r.easeTo({duration:300,zoom:r.getZoom()+(t.shiftKey?-1:1),around:r.unproject(e)},{originalEvent:t})}}},gi.prototype.enable=function(){this._enabled=!0},gi.prototype.disable=function(){this._enabled=!1,this.reset()},gi.prototype.isEnabled=function(){return this._enabled},gi.prototype.isActive=function(){return this._active};var yi=function(){this._tap=new Xn({numTouches:1,numTaps:1}),this.reset()};yi.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset()},yi.prototype.touchstart=function(t,e,r){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?r.length>0&&(this._swipePoint=e[0],this._swipeTouch=r[0].identifier):this._tap.touchstart(t,e,r))},yi.prototype.touchmove=function(t,e,r){if(this._tapTime){if(this._swipePoint){if(r[0].identifier!==this._swipeTouch)return;var n=e[0],i=n.y-this._swipePoint.y;return this._swipePoint=n,t.preventDefault(),this._active=!0,{zoomDelta:i/128}}}else this._tap.touchmove(t,e,r)},yi.prototype.touchend=function(t,e,r){this._tapTime?this._swipePoint&&0===r.length&&this.reset():this._tap.touchend(t,e,r)&&(this._tapTime=t.timeStamp)},yi.prototype.touchcancel=function(){this.reset()},yi.prototype.enable=function(){this._enabled=!0},yi.prototype.disable=function(){this._enabled=!1,this.reset()},yi.prototype.isEnabled=function(){return this._enabled},yi.prototype.isActive=function(){return this._active};var mi=function(t,e,r){this._el=t,this._mousePan=e,this._touchPan=r};mi.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\"mapboxgl-touch-drag-pan\")},mi.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\"mapboxgl-touch-drag-pan\")},mi.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},mi.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var xi=function(t,e,r){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=r};xi.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable()},xi.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable()},xi.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},xi.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var bi=function(t,e,r,n){this._el=t,this._touchZoom=e,this._touchRotate=r,this._tapDragZoom=n,this._rotationDisabled=!1,this._enabled=!0};bi.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\"mapboxgl-touch-zoom-rotate\")},bi.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\")},bi.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},bi.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},bi.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable()},bi.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()};var _i=function(t){return t.zoom||t.drag||t.pitch||t.rotate},wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(t.Event);function Ti(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var ki=function(e,n){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Bn(e),this._bearingSnap=n.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(n),t.bindAll([\"handleEvent\",\"handleWindowEvent\"],this);var i=this._el;this._listeners=[[i,\"touchstart\",{passive:!1}],[i,\"touchmove\",{passive:!1}],[i,\"touchend\",void 0],[i,\"touchcancel\",void 0],[i,\"mousedown\",void 0],[i,\"mousemove\",void 0],[i,\"mouseup\",void 0],[t.window.document,\"mousemove\",{capture:!0}],[t.window.document,\"mouseup\",void 0],[i,\"mouseover\",void 0],[i,\"mouseout\",void 0],[i,\"dblclick\",void 0],[i,\"click\",void 0],[i,\"keydown\",{capture:!1}],[i,\"keyup\",void 0],[i,\"wheel\",{passive:!1}],[i,\"contextmenu\",void 0],[t.window,\"blur\",void 0]];for(var a=0,o=this._listeners;a<o.length;a+=1){var s=o[a],l=s[0],u=s[1],c=s[2];r.addEventListener(l,u,l===t.window.document?this.handleWindowEvent:this.handleEvent,c)}};ki.prototype.destroy=function(){for(var e=0,n=this._listeners;e<n.length;e+=1){var i=n[e],a=i[0],o=i[1],s=i[2];r.removeEventListener(a,o,a===t.window.document?this.handleWindowEvent:this.handleEvent,s)}},ki.prototype._addDefaultHandlers=function(t){var e=this._map,r=e.getCanvasContainer();this._add(\"mapEvent\",new qn(e,t));var n=e.boxZoom=new Zn(e,t);this._add(\"boxZoom\",n);var i=new Jn,a=new gi;e.doubleClickZoom=new vi(a,i),this._add(\"tapZoom\",i),this._add(\"clickZoom\",a);var o=new yi;this._add(\"tapDragZoom\",o);var s=e.touchPitch=new ui;this._add(\"touchPitch\",s);var l=new Qn(t),u=new ti(t);e.dragRotate=new xi(t,l,u),this._add(\"mouseRotate\",l,[\"mousePitch\"]),this._add(\"mousePitch\",u,[\"mouseRotate\"]);var c=new $n(t),f=new ei(t);e.dragPan=new mi(r,c,f),this._add(\"mousePan\",c),this._add(\"touchPan\",f,[\"touchZoom\",\"touchRotate\"]);var h=new si,p=new ai;e.touchZoomRotate=new bi(r,p,h,o),this._add(\"touchRotate\",h,[\"touchPan\",\"touchZoom\"]),this._add(\"touchZoom\",p,[\"touchPan\",\"touchRotate\"]);var d=e.scrollZoom=new di(e,this);this._add(\"scrollZoom\",d,[\"mousePan\"]);var v=e.keyboard=new fi;this._add(\"keyboard\",v),this._add(\"blockableMapEvent\",new Gn(e));for(var g=0,y=[\"boxZoom\",\"doubleClickZoom\",\"tapDragZoom\",\"touchPitch\",\"dragRotate\",\"dragPan\",\"touchZoomRotate\",\"scrollZoom\",\"keyboard\"];g<y.length;g+=1){var m=y[g];t.interactive&&t[m]&&e[m].enable(t[m])}},ki.prototype._add=function(t,e,r){this._handlers.push({handlerName:t,handler:e,allowed:r}),this._handlersById[t]=e},ki.prototype.stop=function(){if(!this._updatingCamera){for(var t=0,e=this._handlers;t<e.length;t+=1)e[t].handler.reset();this._inertia.clear(),this._fireEvents({},{}),this._changes=[]}},ki.prototype.isActive=function(){for(var t=0,e=this._handlers;t<e.length;t+=1)if(e[t].handler.isActive())return!0;return!1},ki.prototype.isZooming=function(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},ki.prototype.isRotating=function(){return!!this._eventsInProgress.rotate},ki.prototype.isMoving=function(){return Boolean(_i(this._eventsInProgress))||this.isZooming()},ki.prototype._blockedByActive=function(t,e,r){for(var n in t)if(n!==r&&(!e||e.indexOf(n)<0))return!0;return!1},ki.prototype.handleWindowEvent=function(t){this.handleEvent(t,t.type+\"Window\")},ki.prototype._getMapTouches=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.target;this._el.contains(a)&&e.push(i)}return e},ki.prototype.handleEvent=function(t,e){if(\"blur\"!==t.type){this._updatingCamera=!0;for(var n=\"renderFrame\"===t.type?void 0:t,i={needsRenderFrame:!1},a={},o={},s=t.touches?this._getMapTouches(t.touches):void 0,l=s?r.touchPos(this._el,s):r.mousePos(this._el,t),u=0,c=this._handlers;u<c.length;u+=1){var f=c[u],h=f.handlerName,p=f.handler,d=f.allowed;if(p.isEnabled()){var v=void 0;this._blockedByActive(o,d,h)?p.reset():p[e||t.type]&&(v=p[e||t.type](t,l,s),this.mergeHandlerResult(i,a,v,h,n),v&&v.needsRenderFrame&&this._triggerRenderFrame()),(v||p.isActive())&&(o[h]=p)}}var g={};for(var y in this._previousActiveHandlers)o[y]||(g[y]=n);this._previousActiveHandlers=o,(Object.keys(g).length||Ti(i))&&(this._changes.push([i,a,g]),this._triggerRenderFrame()),(Object.keys(o).length||Ti(i))&&this._map._stop(!0),this._updatingCamera=!1;var m=i.cameraAnimation;m&&(this._inertia.clear(),this._fireEvents({},{}),this._changes=[],m(this._map))}else this.stop()},ki.prototype.mergeHandlerResult=function(e,r,n,i,a){if(n){t.extend(e,n);var o={handlerName:i,originalEvent:n.originalEvent||a};void 0!==n.zoomDelta&&(r.zoom=o),void 0!==n.panDelta&&(r.drag=o),void 0!==n.pitchDelta&&(r.pitch=o),void 0!==n.bearingDelta&&(r.rotate=o)}},ki.prototype._applyChanges=function(){for(var e={},r={},n={},i=0,a=this._changes;i<a.length;i+=1){var o=a[i],s=o[0],l=o[1],u=o[2];s.panDelta&&(e.panDelta=(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+s.pitchDelta),void 0!==s.around&&(e.around=s.around),void 0!==s.pinchAround&&(e.pinchAround=s.pinchAround),s.noInertia&&(e.noInertia=s.noInertia),t.extend(r,l),t.extend(n,u)}this._updateMapTransform(e,r,n),this._changes=[]},ki.prototype._updateMapTransform=function(t,e,r){var n=this._map,i=n.transform;if(!Ti(t))return this._fireEvents(e,r);var a=t.panDelta,o=t.zoomDelta,s=t.bearingDelta,l=t.pitchDelta,u=t.around,c=t.pinchAround;void 0!==c&&(u=c),n._stop(!0),u=u||n.transform.centerPoint;var f=i.pointLocation(a?u.sub(a):u);s&&(i.bearing+=s),l&&(i.pitch+=l),o&&(i.zoom+=o),i.setLocationAtPoint(f,u),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,r)},ki.prototype._fireEvents=function(e,r){var n=this,i=_i(this._eventsInProgress),a=_i(e),o={};for(var s in e){var l=e[s].originalEvent;this._eventsInProgress[s]||(o[s+\"start\"]=l),this._eventsInProgress[s]=e[s]}for(var u in!i&&a&&this._fireEvent(\"movestart\",a.originalEvent),o)this._fireEvent(u,o[u]);for(var c in e.rotate&&(this._bearingChanged=!0),a&&this._fireEvent(\"move\",a.originalEvent),e){var f=e[c].originalEvent;this._fireEvent(c,f)}var h,p={};for(var d in this._eventsInProgress){var v=this._eventsInProgress[d],g=v.handlerName,y=v.originalEvent;this._handlersById[g].isActive()||(delete this._eventsInProgress[d],h=r[g]||y,p[d+\"end\"]=h)}for(var m in p)this._fireEvent(m,p[m]);var x=_i(this._eventsInProgress);if((i||a)&&!x){this._updatingCamera=!0;var b=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),_=function(t){return 0!==t&&-n._bearingSnap<t&&t<n._bearingSnap};b?(_(b.bearing||this._map.getBearing())&&(b.bearing=0),this._map.easeTo(b,{originalEvent:h})):(this._map.fire(new t.Event(\"moveend\",{originalEvent:h})),_(this._map.getBearing())&&this._map.resetNorth()),this._bearingChanged=!1,this._updatingCamera=!1}},ki.prototype._fireEvent=function(e,r){this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},ki.prototype._triggerRenderFrame=function(){var t=this;void 0===this._frameId&&(this._frameId=this._map._requestRenderFrame((function(e){delete t._frameId,t.handleEvent(new wi(\"renderFrame\",{timeStamp:e})),t._applyChanges()})))};var Ai=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll([\"_renderFrameCallback\"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.getPadding=function(){return this.transform.padding},r.prototype.setPadding=function(t,e){return this.jumpTo({padding:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch=function(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,i){var a={top:0,bottom:0,right:0,left:0};if(\"number\"==typeof(i=t.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var o=i.padding;i.padding={top:o,bottom:o,right:o,left:o}}i.padding=t.extend(a,i.padding);var s=this.transform,l=s.padding,u=s.project(t.LngLat.convert(e)),c=s.project(t.LngLat.convert(r)),f=u.rotate(-n*Math.PI/180),h=c.rotate(-n*Math.PI/180),p=new t.Point(Math.max(f.x,h.x),Math.max(f.y,h.y)),d=new t.Point(Math.min(f.x,h.x),Math.min(f.y,h.y)),v=p.sub(d),g=(s.width-(l.left+l.right+i.padding.left+i.padding.right))/v.x,y=(s.height-(l.top+l.bottom+i.padding.top+i.padding.bottom))/v.y;if(!(y<0||g<0)){var m=Math.min(s.scaleZoom(s.scale*Math.min(g,y)),i.maxZoom),x=t.Point.convert(i.offset),b=(i.padding.left-i.padding.right)/2,_=(i.padding.top-i.padding.bottom)/2,w=new t.Point(x.x+b,x.y+_).mult(s.scale/s.zoomScale(m));return{center:s.unproject(u.add(c).div(2).sub(w)),zoom:m,bearing:n}}t.warnOnce(\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,i),i,a)},r.prototype._fitInternal=function(e,r,n){return e?(delete(r=t.extend(e,r)).padding,r.linear?this.easeTo(r,n):this.flyTo(r,n)):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,i=!1,a=!1,o=!1;return\"zoom\"in e&&n.zoom!==+e.zoom&&(i=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),\"bearing\"in e&&n.bearing!==+e.bearing&&(a=!0,n.bearing=+e.bearing),\"pitch\"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),null==e.padding||n.isPaddingEqual(e.padding)||(n.padding=e.padding),this.fire(new t.Event(\"movestart\",r)).fire(new t.Event(\"move\",r)),i&&this.fire(new t.Event(\"zoomstart\",r)).fire(new t.Event(\"zoom\",r)).fire(new t.Event(\"zoomend\",r)),a&&this.fire(new t.Event(\"rotatestart\",r)).fire(new t.Event(\"rotate\",r)).fire(new t.Event(\"rotateend\",r)),o&&this.fire(new t.Event(\"pitchstart\",r)).fire(new t.Event(\"pitch\",r)).fire(new t.Event(\"pitchend\",r)),this.fire(new t.Event(\"moveend\",r))},r.prototype.easeTo=function(e,r){var n=this;this._stop(!1,e.easeId),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential&&t.browser.prefersReducedMotion)&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=this.getPadding(),u=\"zoom\"in e?+e.zoom:a,c=\"bearing\"in e?this._normalizeBearing(e.bearing,o):o,f=\"pitch\"in e?+e.pitch:s,h=\"padding\"in e?e.padding:i.padding,p=t.Point.convert(e.offset),d=i.centerPoint.add(p),v=i.pointLocation(d),g=t.LngLat.convert(e.center||v);this._normalizeCenter(g);var y,m,x=i.project(v),b=i.project(g).sub(x),_=i.zoomScale(u-a);e.around&&(y=t.LngLat.convert(e.around),m=i.locationPoint(y));var w={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming=this._zooming||u!==a,this._rotating=this._rotating||o!==c,this._pitching=this._pitching||f!==s,this._padding=!i.isPaddingEqual(h),this._easeId=e.easeId,this._prepareEase(r,e.noMoveStart,w),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(n._zooming&&(i.zoom=t.number(a,u,e)),n._rotating&&(i.bearing=t.number(o,c,e)),n._pitching&&(i.pitch=t.number(s,f,e)),n._padding&&(i.interpolatePadding(l,h,e),d=i.centerPoint.add(p)),y)i.setLocationAtPoint(y,m);else{var v=i.zoomScale(i.zoom-a),g=u>a?Math.min(2,_):Math.max(.5,_),w=Math.pow(g,1-e),T=i.unproject(x.add(b.mult(e*w)).mult(v));i.setLocationAtPoint(i.renderWorldCopies?T.wrap():T,d)}n._fireMoveEvents(r)}),(function(t){n._afterEase(r,t)}),e),this},r.prototype._prepareEase=function(e,r,n){void 0===n&&(n={}),this._moving=!0,r||n.moving||this.fire(new t.Event(\"movestart\",e)),this._zooming&&!n.zooming&&this.fire(new t.Event(\"zoomstart\",e)),this._rotating&&!n.rotating&&this.fire(new t.Event(\"rotatestart\",e)),this._pitching&&!n.pitching&&this.fire(new t.Event(\"pitchstart\",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\"move\",e)),this._zooming&&this.fire(new t.Event(\"zoom\",e)),this._rotating&&this.fire(new t.Event(\"rotate\",e)),this._pitching&&this.fire(new t.Event(\"pitch\",e))},r.prototype._afterEase=function(e,r){if(!this._easeId||!r||this._easeId!==r){delete this._easeId;var n=this._zooming,i=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,n&&this.fire(new t.Event(\"zoomend\",e)),i&&this.fire(new t.Event(\"rotateend\",e)),a&&this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e))}},r.prototype.flyTo=function(e,r){var n=this;if(!e.essential&&t.browser.prefersReducedMotion){var i=t.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(i,r)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),u=this.getPadding(),c=\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):o,f=\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,h=\"pitch\"in e?+e.pitch:l,p=\"padding\"in e?e.padding:a.padding,d=a.zoomScale(c-o),v=t.Point.convert(e.offset),g=a.centerPoint.add(v),y=a.pointLocation(g),m=t.LngLat.convert(e.center||y);this._normalizeCenter(m);var x=a.project(y),b=a.project(m).sub(x),_=e.curve,w=Math.max(a.width,a.height),T=w/d,k=b.mag();if(\"minZoom\"in e){var A=t.clamp(Math.min(e.minZoom,o,c),a.minZoom,a.maxZoom),M=w/a.zoomScale(A-o);_=Math.sqrt(M/k*2)}var S=_*_;function E(t){var e=(T*T-w*w+(t?-1:1)*S*S*k*k)/(2*(t?T:w)*S*k);return Math.log(Math.sqrt(e*e+1)-e)}function L(t){return(Math.exp(t)-Math.exp(-t))/2}function C(t){return(Math.exp(t)+Math.exp(-t))/2}var P=E(0),O=function(t){return C(P)/C(P+_*t)},I=function(t){return w*((C(P)*(L(e=P+_*t)/C(e))-L(P))/S)/k;var e},D=(E(1)-P)/_;if(Math.abs(k)<1e-6||!isFinite(D)){if(Math.abs(w-T)<1e-6)return this.easeTo(e,r);var z=T<w?-1:1;D=Math.abs(Math.log(T/w))/_,I=function(){return 0},O=function(t){return Math.exp(z*_*t)}}if(\"duration\"in e)e.duration=+e.duration;else{var R=\"screenSpeed\"in e?+e.screenSpeed/_:+e.speed;e.duration=1e3*D/R}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==f,this._pitching=h!==l,this._padding=!a.isPaddingEqual(p),this._prepareEase(r,!1),this._ease((function(e){var i=e*D,d=1/O(i);a.zoom=1===e?c:o+a.scaleZoom(d),n._rotating&&(a.bearing=t.number(s,f,e)),n._pitching&&(a.pitch=t.number(l,h,e)),n._padding&&(a.interpolatePadding(u,p,e),g=a.centerPoint.add(v));var y=1===e?m:a.unproject(x.add(b.mult(I(i))).mult(d));a.setLocationAtPoint(a.renderWorldCopies?y.wrap():y,g),n._fireMoveEvents(r)}),(function(){return n._afterEase(r)}),e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){return this._stop()},r.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var r=this._onEaseEnd;delete this._onEaseEnd,r.call(this,e)}if(!t){var n=this.handlers;n&&n.stop()}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Mi=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this)};Mi.prototype.getDefaultPosition=function(){return\"bottom-right\"},Mi.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._innerContainer=r.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),e&&this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0===e&&(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},Mi.prototype.onRemove=function(){r.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map=void 0,this._attribHTML=void 0},Mi.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\".mapbox-improve-map\"));var r=[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n=r.reduce((function(t,e,n){return e.value&&(t+=e.key+\"=\"+e.value+(n<r.length-1?\"&\":\"\")),t}),\"?\");e.href=t.config.FEEDBACK_URL+\"/\"+n+(this._map._hash?this._map._hash.getHashString(!0):\"\"),e.rel=\"noopener nofollow\"}},Mi.prototype._updateData=function(t){!t||\"metadata\"!==t.sourceDataType&&\"style\"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Mi.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map((function(t){return\"string\"!=typeof t?\"\":t}))):\"string\"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var i=r[n];if(i.used){var a=i.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution)}}t.sort((function(t,e){return t.length-e.length}));var o=(t=t.filter((function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0}))).join(\" | \");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink=null)}},Mi.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\")};var Si=function(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this)};Si.prototype.onAdd=function(t){this._map=t,this._container=r.create(\"div\",\"mapboxgl-ctrl\");var e=r.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target=\"_blank\",e.rel=\"noopener nofollow\",e.href=\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display=\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},Si.prototype.onRemove=function(){r.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact)},Si.prototype.getDefaultPosition=function(){return\"bottom-left\"},Si.prototype._updateLogo=function(t){t&&\"metadata\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\"block\":\"none\")},Si.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Si.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\")}};var Ei=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Ei.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Ei.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var i=n[r];if(i.id===t)return void(i.cancelled=!0)}},Ei.prototype.run=function(t){void 0===t&&(t=0);var e=this._currentlyRunning=this._queue;this._queue=[];for(var r=0,n=e;r<n.length;r+=1){var i=n[r];if(!i.cancelled&&(i.callback(t),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Ei.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var Li={\"FullscreenControl.Enter\":\"Enter fullscreen\",\"FullscreenControl.Exit\":\"Exit fullscreen\",\"GeolocateControl.FindMyLocation\":\"Find my location\",\"GeolocateControl.LocationNotAvailable\":\"Location not available\",\"LogoControl.Title\":\"Mapbox logo\",\"NavigationControl.ResetBearing\":\"Reset bearing to north\",\"NavigationControl.ZoomIn\":\"Zoom in\",\"NavigationControl.ZoomOut\":\"Zoom out\",\"ScaleControl.Feet\":\"ft\",\"ScaleControl.Meters\":\"m\",\"ScaleControl.Kilometers\":\"km\",\"ScaleControl.Miles\":\"mi\",\"ScaleControl.NauticalMiles\":\"nm\"},Ci=t.window.HTMLImageElement,Pi=t.window.HTMLElement,Oi=t.window.ImageBitmap,Ii=60,Di={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:Ii,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\"sans-serif\",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},zi=function(n){function i(e){var r=this;if(null!=(e=t.extend({},Di,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!=e.minPitch&&e.minPitch<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(null!=e.maxPitch&&e.maxPitch>Ii)throw new Error(\"maxPitch must be less than or equal to 60\");var i=new Cn(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(n.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Ei,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},Li,e.locale),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\"string\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\"Container '\"+e.container+\"' not found.\")}else{if(!(e.container instanceof Pi))throw new Error(\"Invalid type: 'container' must be a String or HTMLElement.\");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return r._update(!1)})),this.on(\"moveend\",(function(){return r._update(!1)})),this.on(\"zoom\",(function(){return r._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1)),this.handlers=new ki(this,e);var a=\"string\"==typeof e.hash&&e.hash||void 0;this._hash=e.hash&&new On(a).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Mi({customAttribution:e.customAttribution})),this.addControl(new Si,e.logoPosition),this.on(\"style.load\",(function(){r.transform.unmodified&&r.jumpTo(r.style.stylesheet)})),this.on(\"data\",(function(e){r._update(\"style\"===e.dataType),r.fire(new t.Event(e.dataType+\"data\",e))})),this.on(\"dataloading\",(function(e){r.fire(new t.Event(e.dataType+\"dataloading\",e))}))}n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return i.prototype._getMapId=function(){return this._mapId},i.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r=\"top-right\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\")));var n=e.onAdd(this);this._controls.push(e);var i=this._controlPositions[r];return-1!==r.indexOf(\"bottom\")?i.insertBefore(n,i.firstChild):i.appendChild(n),this},i.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},i.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],i=r[1];this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i);var a=!this._moving;return a&&(this.stop(),this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e))),this.fire(new t.Event(\"resize\",e)),a&&this.fire(new t.Event(\"moveend\",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error(\"minZoom must be between -2 and the current maxZoom, inclusive\")},i.prototype.getMinZoom=function(){return this.transform.minZoom},i.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()<t&&this.setPitch(t),this;throw new Error(\"minPitch must be between 0 and the current maxPitch, inclusive\")},i.prototype.getMinPitch=function(){return this.transform.minPitch},i.prototype.setMaxPitch=function(t){if((t=null==t?Ii:t)>Ii)throw new Error(\"maxPitch must be less than or equal to 60\");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},i.prototype.getMaxPitch=function(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},i.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},i.prototype._createDelegatedListener=function(t,e,r){var n,i=this;if(\"mouseenter\"===t||\"mouseover\"===t){var a=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?a||(a=!0,r.call(i,new Un(t,i,n.originalEvent,{features:o}))):a=!1},mouseout:function(){a=!1}}}}if(\"mouseleave\"===t||\"mouseout\"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(i,new Un(t,i,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(i,new Un(t,i,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(i,t),delete t.features)},n)}},i.prototype.on=function(t,e,r){if(void 0===r)return n.prototype.on.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(a,i.delegates[a]);return this},i.prototype.once=function(t,e,r){if(void 0===r)return n.prototype.once.call(this,t,e);var i=this._createDelegatedListener(t,e,r);for(var a in i.delegates)this.once(a,i.delegates[a]);return this},i.prototype.off=function(t,e,r){var i=this;if(void 0===r)return n.prototype.off.call(this,t,e);return this._delegatedListeners&&this._delegatedListeners[t]&&function(n){for(var a=n[t],o=0;o<a.length;o++){var s=a[o];if(s.layer===e&&s.listener===r){for(var l in s.delegates)i.off(l,s.delegates[l]);return a.splice(o,1),i}}}(this._delegatedListeners),this},i.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\"number\"==typeof e[0])n=[t.Point.convert(e)];else{var i=t.Point.convert(e[0]),a=t.Point.convert(e[1]);n=[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(n,r,this.transform)},i.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},i.prototype._getUIString=function(t){var e=this._locale[t];if(null==e)throw new Error(\"Missing UI string '\"+t+\"'\");return e},i.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Ye(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\"string\"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._lazyInitEmptyStyle=function(){this.style||(this.style=new Ye(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())},i.prototype._diffStyle=function(e,r){var n=this;if(\"string\"==typeof e){var i=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,(function(e,i){e?n.fire(new t.ErrorEvent(e)):i&&n._updateDiff(i,r)}))}else\"object\"==typeof e&&this._updateDiff(e,r)},i.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce(\"Unable to perform style diff: \"+(n.message||n.error||n)+\".  Rebuilding the style from scratch.\"),this._updateStyle(e,r)}},i.prototype.getStyle=function(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce(\"There is no style added to the map.\")},i.prototype.addSource=function(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error(\"There is no source with ID '\"+e+\"'\")))},i.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var i=r[n];if(\"loaded\"!==i.state&&\"errored\"!==i.state)return!1}}return!0},i.prototype.addSourceType=function(t,e,r){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,r)},i.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource=function(t){return this.style.getSource(t)},i.prototype.addImage=function(e,r,n){void 0===n&&(n={});var i=n.pixelRatio;void 0===i&&(i=1);var a=n.sdf;void 0===a&&(a=!1);var o=n.stretchX,s=n.stretchY,l=n.content;this._lazyInitEmptyStyle();if(r instanceof Ci||Oi&&r instanceof Oi){var u=t.browser.getImageData(r),c=u.width,f=u.height,h=u.data;this.style.addImage(e,{data:new t.RGBAImage({width:c,height:f},h),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));var p=r.width,d=r.height,v=r.data,g=r;this.style.addImage(e,{data:new t.RGBAImage({width:p,height:d},new Uint8Array(v)),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0,userImage:g}),g.onAdd&&g.onAdd(this,e)}},i.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error(\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\")));var i=r instanceof Ci||Oi&&r instanceof Oi?t.browser.getImageData(r):r,a=i.width,o=i.height,s=i.data;if(void 0===a||void 0===o)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));if(a!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error(\"The width and height of the updated image must be that same as the previous version of the image\")));var l=!(r instanceof Ci||Oi&&r instanceof Oi);n.data.replace(s,l),this.style.updateImage(e,n)},i.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\"Missing required image id\"))),!1)},i.prototype.removeImage=function(t){this.style.removeImage(t)},i.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},i.prototype.listImages=function(){return this.style.listImages()},i.prototype.addLayer=function(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer=function(t){return this.style.getLayer(t)},i.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},i.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},i.prototype.getFilter=function(t){return this.style.getFilter(t)},i.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},i.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},i.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight=function(t,e){return void 0===e&&(e={}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight=function(){return this.style.getLight()},i.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},i.prototype.getContainer=function(){return this._container},i.prototype.getCanvasContainer=function(){return this._canvasContainer},i.prototype.getCanvas=function(){return this._canvas},i.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS=function(){\"rgb(250, 128, 114)\"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\"background-color\")&&t.warnOnce(\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\")},i.prototype._setupContainer=function(){var t=this._container;t.classList.add(\"mapboxgl-map\"),(this._missingCSSCanary=r.create(\"div\",\"mapboxgl-canary\",t)).style.visibility=\"hidden\",this._detectMissingCSS();var e=this._canvasContainer=r.create(\"div\",\"mapboxgl-canvas-container\",t);this._interactive&&e.classList.add(\"mapboxgl-interactive\"),this._canvas=r.create(\"canvas\",\"mapboxgl-canvas\",e),this._canvas.addEventListener(\"webglcontextlost\",this._contextLost,!1),this._canvas.addEventListener(\"webglcontextrestored\",this._contextRestored,!1),this._canvas.setAttribute(\"tabindex\",\"0\"),this._canvas.setAttribute(\"aria-label\",\"Map\");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var i=this._controlContainer=r.create(\"div\",\"mapboxgl-control-container\",t),a=this._controlPositions={};[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"].forEach((function(t){a[t]=r.create(\"div\",\"mapboxgl-ctrl-\"+t,i)}))},i.prototype._resizeCanvas=function(e,r){var n=t.browser.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+\"px\",this._canvas.style.height=r+\"px\"},i.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext(\"webgl\",r)||this._canvas.getContext(\"experimental-webgl\",r);n?(this.painter=new Mn(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error(\"Failed to initialize WebGL\")))},i.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event(\"webglcontextlost\",{originalEvent:e}))},i.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\"webglcontextrestored\",{originalEvent:e}))},i.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},i.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},i.prototype._render=function(e){var r,n=this,i=0,a=this.painter.context.extTimerQuery;if(this.listens(\"gpu-timing-frame\")&&(r=a.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,r),i=t.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var o=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var s=this.transform.zoom,l=t.browser.now();this.style.zoomHistory.update(s,l);var u=new t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),c=u.crossFadingFactor();1===c&&c===this._crossFadingFactor||(o=!0,this._crossFadingFactor=c),this.style.update(u)}if(this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens(\"gpu-timing-layer\")}),this.fire(new t.Event(\"render\")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event(\"load\"))),this.style&&(this.style.hasTransitions()||o)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this.listens(\"gpu-timing-frame\")){var f=t.browser.now()-i;a.endQueryEXT(a.TIME_ELAPSED_EXT,r),setTimeout((function(){var e=a.getQueryObjectEXT(r,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(r),n.fire(new t.Event(\"gpu-timing-frame\",{cpuTime:f,gpuTime:e}))}),50)}if(this.listens(\"gpu-timing-layer\")){var h=this.painter.collectGpuTimers();setTimeout((function(){var e=n.painter.queryGpuTimers(h);n.fire(new t.Event(\"gpu-timing-layer\",{layerTimes:e}))}),50)}return this._sourcesDirty||this._styleDirty||this._placementDirty||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&(this._fullyLoaded||(this._fullyLoaded=!0),this.fire(new t.Event(\"idle\"))),this}},i.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener(\"resize\",this._onWindowResize,!1),t.window.removeEventListener(\"online\",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension(\"WEBGL_lose_context\");n&&n.loseContext(),Ri(this._canvasContainer),Ri(this._controlContainer),Ri(this._missingCSSCanary),this._container.classList.remove(\"mapboxgl-map\"),this._removed=!0,this.fire(new t.Event(\"remove\"))},i.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame((function(t){e._frame=null,e._render(t)})))},i.prototype._onWindowOnline=function(){this._update()},i.prototype._onWindowResize=function(t){this._trackResize&&this.resize({originalEvent:t})._update()},a.showTileBoundaries.get=function(){return!!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},a.showPadding.get=function(){return!!this._showPadding},a.showPadding.set=function(t){this._showPadding!==t&&(this._showPadding=t,this._update())},a.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},a.repaint.get=function(){return!!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},a.vertices.get=function(){return!!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update()},i.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},a.version.get=function(){return t.version},Object.defineProperties(i.prototype,a),i}(Ai);function Ri(t){t.parentNode&&t.parentNode.removeChild(t)}var Fi={showCompass:!0,showZoom:!0,visualizePitch:!1},Bi=function(e){var n=this;this.options=t.extend({},Fi,e),this._container=r.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this.options.showZoom&&(t.bindAll([\"_setButtonTitle\",\"_updateZoomButtons\"],this),this._zoomInButton=this._createButton(\"mapboxgl-ctrl-zoom-in\",(function(t){return n._map.zoomIn({},{originalEvent:t})})),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomInButton).setAttribute(\"aria-hidden\",!0),this._zoomOutButton=this._createButton(\"mapboxgl-ctrl-zoom-out\",(function(t){return n._map.zoomOut({},{originalEvent:t})})),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomOutButton).setAttribute(\"aria-hidden\",!0)),this.options.showCompass&&(t.bindAll([\"_rotateCompassArrow\"],this),this._compass=this._createButton(\"mapboxgl-ctrl-compass\",(function(t){n.options.visualizePitch?n._map.resetNorthPitch({},{originalEvent:t}):n._map.resetNorth({},{originalEvent:t})})),this._compassIcon=r.create(\"span\",\"mapboxgl-ctrl-icon\",this._compass),this._compassIcon.setAttribute(\"aria-hidden\",!0))};Bi.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.disabled=t===this._map.getMaxZoom(),this._zoomOutButton.disabled=t===this._map.getMinZoom()},Bi.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?\"scale(\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\") rotateX(\"+this._map.transform.pitch+\"deg) rotateZ(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\":\"rotate(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\";this._compassIcon.style.transform=t},Bi.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,\"ZoomIn\"),this._setButtonTitle(this._zoomOutButton,\"ZoomOut\"),this._map.on(\"zoom\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,\"ResetBearing\"),this.options.visualizePitch&&this._map.on(\"pitch\",this._rotateCompassArrow),this._map.on(\"rotate\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Ni(this._map,this._compass,this.options.visualizePitch)),this._container},Bi.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off(\"zoom\",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off(\"pitch\",this._rotateCompassArrow),this._map.off(\"rotate\",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map},Bi.prototype._createButton=function(t,e){var n=r.create(\"button\",t,this._container);return n.type=\"button\",n.addEventListener(\"click\",e),n},Bi.prototype._setButtonTitle=function(t,e){var r=this._map._getUIString(\"NavigationControl.\"+e);t.title=r,t.setAttribute(\"aria-label\",r)};var Ni=function(e,n,i){void 0===i&&(i=!1),this._clickTolerance=10,this.element=n,this.mouseRotate=new Qn({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map=e,i&&(this.mousePitch=new ti({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll([\"mousedown\",\"mousemove\",\"mouseup\",\"touchstart\",\"touchmove\",\"touchend\",\"reset\"],this),r.addEventListener(n,\"mousedown\",this.mousedown),r.addEventListener(n,\"touchstart\",this.touchstart,{passive:!1}),r.addEventListener(n,\"touchmove\",this.touchmove),r.addEventListener(n,\"touchend\",this.touchend),r.addEventListener(n,\"touchcancel\",this.reset)};function ji(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var i=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(i).distSqr(r)<o?e=i:n.locationPoint(a).distSqr(r)<o&&(e=a)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Ni.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),r.disableDrag()},Ni.prototype.move=function(t,e){var r=this.map,n=this.mouseRotate.mousemoveWindow(t,e);if(n&&n.bearingDelta&&r.setBearing(r.getBearing()+n.bearingDelta),this.mousePitch){var i=this.mousePitch.mousemoveWindow(t,e);i&&i.pitchDelta&&r.setPitch(r.getPitch()+i.pitchDelta)}},Ni.prototype.off=function(){var t=this.element;r.removeEventListener(t,\"mousedown\",this.mousedown),r.removeEventListener(t,\"touchstart\",this.touchstart,{passive:!1}),r.removeEventListener(t,\"touchmove\",this.touchmove),r.removeEventListener(t,\"touchend\",this.touchend),r.removeEventListener(t,\"touchcancel\",this.reset),this.offTemp()},Ni.prototype.offTemp=function(){r.enableDrag(),r.removeEventListener(t.window,\"mousemove\",this.mousemove),r.removeEventListener(t.window,\"mouseup\",this.mouseup)},Ni.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),r.mousePos(this.element,e)),r.addEventListener(t.window,\"mousemove\",this.mousemove),r.addEventListener(t.window,\"mouseup\",this.mouseup)},Ni.prototype.mousemove=function(t){this.move(t,r.mousePos(this.element,t))},Ni.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp()},Ni.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.down({type:\"mousedown\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos))},Ni.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=r.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos))},Ni.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),this.reset()},Ni.prototype.reset=function(){this.mouseRotate.reset(),this.mousePitch&&this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp()};var Ui={center:\"translate(-50%,-50%)\",top:\"translate(-50%,0)\",\"top-left\":\"translate(0,0)\",\"top-right\":\"translate(-100%,0)\",bottom:\"translate(-50%,-100%)\",\"bottom-left\":\"translate(0,-100%)\",\"bottom-right\":\"translate(-100%,-100%)\",left:\"translate(0,-50%)\",right:\"translate(-100%,-50%)\"};function Vi(t,e,r){var n=t.classList;for(var i in Ui)n.remove(\"mapboxgl-\"+r+\"-anchor-\"+i);n.add(\"mapboxgl-\"+r+\"-anchor-\"+e)}var Hi,qi=function(e){function n(n,i){var a=this;if(e.call(this),(n instanceof t.window.HTMLElement||i)&&(n=t.extend({element:n},i)),t.bindAll([\"_update\",\"_onMove\",\"_onUp\",\"_addDragHandler\",\"_onMapClick\",\"_onKeyPress\"],this),this._anchor=n&&n.anchor||\"center\",this._color=n&&n.color||\"#3FB1CE\",this._draggable=n&&n.draggable||!1,this._state=\"inactive\",this._rotation=n&&n.rotation||0,this._rotationAlignment=n&&n.rotationAlignment||\"auto\",this._pitchAlignment=n&&n.pitchAlignment&&\"auto\"!==n.pitchAlignment?n.pitchAlignment:this._rotationAlignment,n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create(\"div\"),this._element.setAttribute(\"aria-label\",\"Map marker\");var o=r.createNS(\"http://www.w3.org/2000/svg\",\"svg\");o.setAttributeNS(null,\"display\",\"block\"),o.setAttributeNS(null,\"height\",\"41px\"),o.setAttributeNS(null,\"width\",\"27px\"),o.setAttributeNS(null,\"viewBox\",\"0 0 27 41\");var s=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");s.setAttributeNS(null,\"stroke\",\"none\"),s.setAttributeNS(null,\"stroke-width\",\"1\"),s.setAttributeNS(null,\"fill\",\"none\"),s.setAttributeNS(null,\"fill-rule\",\"evenodd\");var l=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");l.setAttributeNS(null,\"fill-rule\",\"nonzero\");var u=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");u.setAttributeNS(null,\"transform\",\"translate(3.0, 29.0)\"),u.setAttributeNS(null,\"fill\",\"#000000\");for(var c=0,f=[{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"9.5\",ry:\"4.77275007\"},{rx:\"8.5\",ry:\"4.29549936\"},{rx:\"7.5\",ry:\"3.81822308\"},{rx:\"6.5\",ry:\"3.34094679\"},{rx:\"5.5\",ry:\"2.86367051\"},{rx:\"4.5\",ry:\"2.38636864\"}];c<f.length;c+=1){var h=f[c],p=r.createNS(\"http://www.w3.org/2000/svg\",\"ellipse\");p.setAttributeNS(null,\"opacity\",\"0.04\"),p.setAttributeNS(null,\"cx\",\"10.5\"),p.setAttributeNS(null,\"cy\",\"5.80029008\"),p.setAttributeNS(null,\"rx\",h.rx),p.setAttributeNS(null,\"ry\",h.ry),u.appendChild(p)}var d=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");d.setAttributeNS(null,\"fill\",this._color);var v=r.createNS(\"http://www.w3.org/2000/svg\",\"path\");v.setAttributeNS(null,\"d\",\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\"),d.appendChild(v);var g=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");g.setAttributeNS(null,\"opacity\",\"0.25\"),g.setAttributeNS(null,\"fill\",\"#000000\");var y=r.createNS(\"http://www.w3.org/2000/svg\",\"path\");y.setAttributeNS(null,\"d\",\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\"),g.appendChild(y);var m=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");m.setAttributeNS(null,\"transform\",\"translate(6.0, 7.0)\"),m.setAttributeNS(null,\"fill\",\"#FFFFFF\");var x=r.createNS(\"http://www.w3.org/2000/svg\",\"g\");x.setAttributeNS(null,\"transform\",\"translate(8.0, 8.0)\");var b=r.createNS(\"http://www.w3.org/2000/svg\",\"circle\");b.setAttributeNS(null,\"fill\",\"#000000\"),b.setAttributeNS(null,\"opacity\",\"0.25\"),b.setAttributeNS(null,\"cx\",\"5.5\"),b.setAttributeNS(null,\"cy\",\"5.5\"),b.setAttributeNS(null,\"r\",\"5.4999962\");var _=r.createNS(\"http://www.w3.org/2000/svg\",\"circle\");_.setAttributeNS(null,\"fill\",\"#FFFFFF\"),_.setAttributeNS(null,\"cx\",\"5.5\"),_.setAttributeNS(null,\"cy\",\"5.5\"),_.setAttributeNS(null,\"r\",\"5.4999962\"),x.appendChild(b),x.appendChild(_),l.appendChild(u),l.appendChild(d),l.appendChild(g),l.appendChild(m),l.appendChild(x),o.appendChild(l),this._element.appendChild(o),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add(\"mapboxgl-marker\"),this._element.addEventListener(\"dragstart\",(function(t){t.preventDefault()})),this._element.addEventListener(\"mousedown\",(function(t){t.preventDefault()})),this._element.addEventListener(\"focus\",(function(){var t=a._map.getContainer();t.scrollTop=0,t.scrollLeft=0})),Vi(this._element,this._anchor,\"marker\"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on(\"move\",this._update),t.on(\"moveend\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\"click\",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off(\"click\",this._onMapClick),this._map.off(\"move\",this._update),this._map.off(\"moveend\",this._update),this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler),this._map.off(\"mouseup\",this._onUp),this._map.off(\"touchend\",this._onUp),this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener(\"keypress\",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute(\"tabindex\")),t){if(!(\"offset\"in t.options)){var e=13.5,r=Math.sqrt(Math.pow(e,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],\"top-left\":[0,0],\"top-right\":[0,0],bottom:[0,-38.1],\"bottom-left\":[r,-1*(24.6+r)],\"bottom-right\":[-r,-1*(24.6+r)],left:[e,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat),this._originalTabIndex=this._element.getAttribute(\"tabindex\"),this._originalTabIndex||this._element.setAttribute(\"tabindex\",\"0\"),this._element.addEventListener(\"keypress\",this._onKeyPress)}return this},n.prototype._onKeyPress=function(t){var e=t.code,r=t.charCode||t.keyCode;\"Space\"!==e&&\"Enter\"!==e&&32!==r&&13!==r||this.togglePopup()},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){if(this._map){this._map.transform.renderWorldCopies&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset);var e=\"\";\"viewport\"===this._rotationAlignment||\"auto\"===this._rotationAlignment?e=\"rotateZ(\"+this._rotation+\"deg)\":\"map\"===this._rotationAlignment&&(e=\"rotateZ(\"+(this._rotation-this._map.getBearing())+\"deg)\");var n=\"\";\"viewport\"===this._pitchAlignment||\"auto\"===this._pitchAlignment?n=\"rotateX(0deg)\":\"map\"===this._pitchAlignment&&(n=\"rotateX(\"+this._map.getPitch()+\"deg)\"),t&&\"moveend\"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,Ui[this._anchor]+\" translate(\"+this._pos.x+\"px, \"+this._pos.y+\"px) \"+n+\" \"+e)}},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\"none\",\"pending\"===this._state&&(this._state=\"active\",this.fire(new t.Event(\"dragstart\"))),this.fire(new t.Event(\"drag\"))},n.prototype._onUp=function(){this._element.style.pointerEvents=\"auto\",this._positionDelta=null,this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),\"active\"===this._state&&this.fire(new t.Event(\"dragend\")),this._state=\"inactive\"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state=\"pending\",this._map.on(\"mousemove\",this._onMove),this._map.on(\"touchmove\",this._onMove),this._map.once(\"mouseup\",this._onUp),this._map.once(\"touchend\",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\"mousedown\",this._addDragHandler),this._map.on(\"touchstart\",this._addDragHandler)):(this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},n.prototype.getRotation=function(){return this._rotation},n.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||\"auto\",this._update(),this},n.prototype.getRotationAlignment=function(){return this._rotationAlignment},n.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&\"auto\"!==t?t:this._rotationAlignment,this._update(),this},n.prototype.getPitchAlignment=function(){return this._pitchAlignment},n}(t.Evented),Gi={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0};var Zi=0,Yi=!1,Wi=function(e){function n(r){e.call(this),this.options=t.extend({},Gi,r),t.bindAll([\"_onSuccess\",\"_onError\",\"_onZoom\",\"_finish\",\"_setupUI\",\"_updateCamera\",\"_updateMarker\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){return this._map=e,this._container=r.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),n=this._setupUI,void 0!==Hi?n(Hi):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\"geolocation\"}).then((function(t){Hi=\"denied\"!==t.state,n(Hi)})):(Hi=!!t.window.navigator.geolocation,n(Hi)),this._container;var n},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),r.remove(this._container),this._map.off(\"zoom\",this._onZoom),this._map=void 0,Zi=0,Yi=!1},n.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),r=t.coords;return e&&(r.longitude<e.getWest()||r.longitude>e.getEast()||r.latitude<e.getSouth()||r.latitude>e.getNorth())},n.prototype._setErrorState=function(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState=\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\")}},n.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState=\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\")}this.options.showUserLocation&&\"OFF\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\"ACTIVE_LOCK\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish()}},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,i=this._map.getBearing(),a=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),a,{geolocateSource:!0})},n.prototype._updateMarker=function(e){if(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(r).addTo(this._map),this._userLocationDotMarker.setLngLat(r).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},n.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),r=this._map.unproject([1,t]),n=e.distanceTo(r),i=Math.ceil(2*this._accuracy/n);this._circleElement.style.width=i+\"px\",this._circleElement.style.height=i+\"px\"},n.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius()},n.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled=!0;var r=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title=r,this._geolocateButton.setAttribute(\"aria-label\",r),void 0!==this._geolocationWatchID&&this._clearWatch()}else{if(3===e.code&&Yi)return;this._setErrorState()}\"OFF\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish()}},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton=r.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type=\"button\",!1===e){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var i=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled=!0,this._geolocateButton.title=i,this._geolocateButton.setAttribute(\"aria-label\",i)}else{var a=this._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\"aria-label\",a)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState=\"OFF\"),this.options.showUserLocation&&(this._dotElement=r.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker=new qi(this._dotElement),this._circleElement=r.create(\"div\",\"mapboxgl-user-location-accuracy-circle\"),this._accuracyCircleMarker=new qi({element:this._circleElement,pitchAlignment:\"map\"}),this.options.trackUserLocation&&(this._watchState=\"OFF\"),this._map.on(\"zoom\",this._onZoom)),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\"movestart\",(function(e){var r=e.originalEvent&&\"resize\"===e.originalEvent.type;e.geolocateSource||\"ACTIVE_LOCK\"!==n._watchState||r||(n._watchState=\"BACKGROUND\",n._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),n._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),n.fire(new t.Event(\"trackuserlocationend\")))}))},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState=\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":Zi--,Yi=!1,this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"))}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\")}if(\"OFF\"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),++Zi>1?(e={maximumAge:6e5,timeout:0},Yi=!0):(e=this.options.positionOptions,Yi=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),Xi={maxWidth:100,unit:\"metric\"},Ji=function(e){this.options=t.extend({},Xi,e),t.bindAll([\"_onMove\",\"setUnit\"],this)};function Ki(t,e,r){var n=r&&r.maxWidth||100,i=t._container.clientHeight/2,a=t.unproject([0,i]),o=t.unproject([n,i]),s=a.distanceTo(o);if(r&&\"imperial\"===r.unit){var l=3.2808*s;l>5280?$i(e,n,l/5280,t._getUIString(\"ScaleControl.Miles\")):$i(e,n,l,t._getUIString(\"ScaleControl.Feet\"))}else r&&\"nautical\"===r.unit?$i(e,n,s/1852,t._getUIString(\"ScaleControl.NauticalMiles\")):s>=1e3?$i(e,n,s/1e3,t._getUIString(\"ScaleControl.Kilometers\")):$i(e,n,s,t._getUIString(\"ScaleControl.Meters\"))}function $i(t,e,r,n){var i,a,o,s=(i=r,(a=Math.pow(10,(\"\"+Math.floor(i)).length-1))*((o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;t.style.width=e*l+\"px\",t.innerHTML=s+\"&nbsp;\"+n}Ji.prototype.getDefaultPosition=function(){return\"bottom-left\"},Ji.prototype._onMove=function(){Ki(this._map,this._container,this.options)},Ji.prototype.onAdd=function(t){return this._map=t,this._container=r.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},Ji.prototype.onRemove=function(){r.remove(this._container),this._map.off(\"move\",this._onMove),this._map=void 0},Ji.prototype.setUnit=function(t){this.options.unit=t,Ki(this._map,this._container,this.options)};var Qi=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\"Full screen control 'container' must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange=\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange=\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange=\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document&&(this._fullscreenchange=\"MSFullscreenChange\")};Qi.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},Qi.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Qi.prototype._setupUI=function(){var e=this._fullscreenButton=r.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);r.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type=\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Qi.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title=t},Qi.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},Qi.prototype._isFullscreen=function(){return this._fullscreen},Qi.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle())},Qi.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var ta={closeButton:!0,closeOnClick:!0,className:\"\",maxWidth:\"240px\"},ea=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(ta),r),t.bindAll([\"_update\",\"_onClose\",\"remove\",\"_onMouseMove\",\"_onMouseUp\",\"_onDrag\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on(\"click\",this._onClose),this.options.closeOnMove&&this._map.on(\"move\",this._onClose),this._map.on(\"remove\",this.remove),this._update(),this._trackPointer?(this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"mouseup\",this._onMouseUp),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off(\"move\",this._update),this._map.off(\"move\",this._onClose),this._map.off(\"click\",this._onClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\",this._onMouseMove),this._map.off(\"mouseup\",this._onMouseUp),this._map.off(\"drag\",this._onDrag),delete this._map),this.fire(new t.Event(\"close\")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\"move\",this._update),this._map.off(\"mousemove\",this._onMouseMove),this._container&&this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},n.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"drag\",this._onDrag),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),i=t.window.document.createElement(\"body\");for(i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype.addClassName=function(t){this._container&&this._container.classList.add(t)},n.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t)},n.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create(\"div\",\"mapboxgl-popup-content\",this._container),this.options.closeButton&&(this._closeButton=r.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type=\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML=\"&#215;\",this._closeButton.addEventListener(\"click\",this._onClose))},n.prototype._onMouseUp=function(t){this._update(t.point)},n.prototype._onMouseMove=function(t){this._update(t.point)},n.prototype._onDrag=function(t){this._update(t.point)},n.prototype._update=function(t){var e=this,n=this._lngLat||this._trackPointer;if(this._map&&n&&this._content&&(this._container||(this._container=r.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip=r.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\" \").forEach((function(t){return e._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=ji(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||t)){var i=this._pos=this._trackPointer&&t?t:this._map.project(this._lngLat),a=this.options.anchor,o=ra(this.options.offset);if(!a){var s,l=this._container.offsetWidth,u=this._container.offsetHeight;s=i.y+o.bottom.y<u?[\"top\"]:i.y>this._map.transform.height-u?[\"bottom\"]:[],i.x<l/2?s.push(\"left\"):i.x>this._map.transform.width-l/2&&s.push(\"right\"),a=0===s.length?\"bottom\":s.join(\"-\")}var c=i.add(o[a]).round();r.setTransform(this._container,Ui[a]+\" translate(\"+c.x+\"px,\"+c.y+\"px)\"),Vi(this._container,a,\"popup\")}},n.prototype._onClose=function(){this.remove()},n}(t.Evented);function ra(e){if(e){if(\"number\"==typeof e){var r=Math.round(Math.sqrt(.5*Math.pow(e,2)));return{center:new t.Point(0,0),top:new t.Point(0,e),\"top-left\":new t.Point(r,r),\"top-right\":new t.Point(-r,r),bottom:new t.Point(0,-e),\"bottom-left\":new t.Point(r,-r),\"bottom-right\":new t.Point(-r,-r),left:new t.Point(e,0),right:new t.Point(-e,0)}}if(e instanceof t.Point||Array.isArray(e)){var n=t.Point.convert(e);return{center:n,top:n,\"top-left\":n,\"top-right\":n,bottom:n,\"bottom-left\":n,\"bottom-right\":n,left:n,right:n}}return{center:t.Point.convert(e.center||[0,0]),top:t.Point.convert(e.top||[0,0]),\"top-left\":t.Point.convert(e[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(e[\"top-right\"]||[0,0]),bottom:t.Point.convert(e.bottom||[0,0]),\"bottom-left\":t.Point.convert(e[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(e[\"bottom-right\"]||[0,0]),left:t.Point.convert(e.left||[0,0]),right:t.Point.convert(e.right||[0,0])}}return ra(new t.Point(0,0))}var na={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:zi,NavigationControl:Bi,GeolocateControl:Wi,AttributionControl:Mi,ScaleControl:Ji,FullscreenControl:Qi,Popup:ea,Marker:qi,Style:Ye,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){jt().acquire(Rt)},clearPrewarmedResources:function(){var t=Bt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Rt),Bt=null):console.warn(\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\"))},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Ft.workerCount},set workerCount(t){Ft.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:\"\"};return na})),r}()},27084:function(t){\"use strict\";t.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},16825:function(t,e,r){\"use strict\";t.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\"altKey\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\"shiftKey\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\"ctrlKey\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\"metaKey\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);\"buttons\"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function v(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener(\"mousemove\",p),t.addEventListener(\"mousedown\",d),t.addEventListener(\"mouseup\",v),t.addEventListener(\"mouseleave\",c),t.addEventListener(\"mouseenter\",c),t.addEventListener(\"mouseout\",c),t.addEventListener(\"mouseover\",c),t.addEventListener(\"blur\",f),t.addEventListener(\"keyup\",h),t.addEventListener(\"keydown\",h),t.addEventListener(\"keypress\",h),t!==window&&(window.addEventListener(\"blur\",f),window.addEventListener(\"keyup\",h),window.addEventListener(\"keydown\",h),window.addEventListener(\"keypress\",h)))}g();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener(\"mousemove\",p),t.removeEventListener(\"mousedown\",d),t.removeEventListener(\"mouseup\",v),t.removeEventListener(\"mouseleave\",c),t.removeEventListener(\"mouseenter\",c),t.removeEventListener(\"mouseout\",c),t.removeEventListener(\"mouseover\",c),t.removeEventListener(\"blur\",f),t.removeEventListener(\"keyup\",h),t.removeEventListener(\"keydown\",h),t.removeEventListener(\"keypress\",h),t!==window&&(window.removeEventListener(\"blur\",f),window.removeEventListener(\"keyup\",h),window.removeEventListener(\"keydown\",h),window.removeEventListener(\"keypress\",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),y};var n=r(74311)},48956:function(t){var e={left:0,top:0};t.exports=function(t,r,n){r=r||t.currentTarget||t.srcElement,Array.isArray(n)||(n=[0,0]);var i,a=t.clientX||0,o=t.clientY||0,s=(i=r)===window||i===document||i===document.body?e:i.getBoundingClientRect();return n[0]=a-s.left,n[1]=o-s.top,n}},74311:function(t,e){\"use strict\";function r(t){return t.target||t.srcElement||window}e.buttons=function(t){if(\"object\"==typeof t){if(\"buttons\"in t)return t.buttons;if(\"which\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\"button\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},e.element=r,e.x=function(t){if(\"object\"==typeof t){if(\"offsetX\"in t)return t.offsetX;var e=r(t).getBoundingClientRect();return t.clientX-e.left}return 0},e.y=function(t){if(\"object\"==typeof t){if(\"offsetY\"in t)return t.offsetY;var e=r(t).getBoundingClientRect();return t.clientY-e.top}return 0}},1195:function(t,e,r){\"use strict\";var n=r(75686);t.exports=function(t,e,r){\"function\"==typeof t&&(r=!!e,e=t,t=window);var i=n(\"ex\",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=1;switch(t.deltaMode){case 1:s=i;break;case 2:s=window.innerHeight}if(a*=s,o*=s,(n*=s)||a||o)return e(n,a,o,t)};return t.addEventListener(\"wheel\",a),a}},7417:function(t,e,r){var n;!function(i,a,o){a[i]=a[i]||function(){\"use strict\";var t,e,r,n=Object.prototype.toString,i=\"undefined\"!=typeof setImmediate?function(t){return setImmediate(t)}:setTimeout;try{Object.defineProperty({},\"x\",{}),t=function(t,e,r,n){return Object.defineProperty(t,e,{value:r,writable:!0,configurable:!1!==n})}}catch(e){t=function(t,e,r){return t[e]=r,t}}function a(t,n){r.add(t,n),e||(e=i(r.drain))}function o(t){var e,r=typeof t;return null==t||\"object\"!=r&&\"function\"!=r||(e=t.then),\"function\"==typeof e&&e}function s(){for(var t=0;t<this.chain.length;t++)l(this,1===this.state?this.chain[t].success:this.chain[t].failure,this.chain[t]);this.chain.length=0}function l(t,e,r){var n,i;try{!1===e?r.reject(t.msg):(n=!0===e?t.msg:e.call(void 0,t.msg))===r.promise?r.reject(TypeError(\"Promise-chain cycle\")):(i=o(n))?i.call(n,r.resolve,r.reject):r.resolve(n)}catch(t){r.reject(t)}}function u(t){var e,r=this;if(!r.triggered){r.triggered=!0,r.def&&(r=r.def);try{(e=o(t))?a((function(){var n=new h(r);try{e.call(t,(function(){u.apply(n,arguments)}),(function(){c.apply(n,arguments)}))}catch(t){c.call(n,t)}})):(r.msg=t,r.state=1,r.chain.length>0&&a(s,r))}catch(t){c.call(new h(r),t)}}}function c(t){var e=this;e.triggered||(e.triggered=!0,e.def&&(e=e.def),e.msg=t,e.state=2,e.chain.length>0&&a(s,e))}function f(t,e,r,n){for(var i=0;i<e.length;i++)!function(i){t.resolve(e[i]).then((function(t){r(i,t)}),n)}(i)}function h(t){this.def=t,this.triggered=!1}function p(t){this.promise=t,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function d(t){if(\"function\"!=typeof t)throw TypeError(\"Not a function\");if(0!==this.__NPO__)throw TypeError(\"Not a promise\");this.__NPO__=1;var e=new p(this);this.then=function(t,r){var n={success:\"function\"!=typeof t||t,failure:\"function\"==typeof r&&r};return n.promise=new this.constructor((function(t,e){if(\"function\"!=typeof t||\"function\"!=typeof e)throw TypeError(\"Not a function\");n.resolve=t,n.reject=e})),e.chain.push(n),0!==e.state&&a(s,e),n.promise},this.catch=function(t){return this.then(void 0,t)};try{t.call(void 0,(function(t){u.call(e,t)}),(function(t){c.call(e,t)}))}catch(t){c.call(e,t)}}r=function(){var t,r,n;function i(t,e){this.fn=t,this.self=e,this.next=void 0}return{add:function(e,a){n=new i(e,a),r?r.next=n:t=n,r=n,n=void 0},drain:function(){var n=t;for(t=r=e=void 0;n;)n.fn.call(n.self),n=n.next}}}();var v=t({},\"constructor\",d,!1);return d.prototype=v,t(v,\"__NPO__\",0,!1),t(d,\"resolve\",(function(t){return t&&\"object\"==typeof t&&1===t.__NPO__?t:new this((function(e,r){if(\"function\"!=typeof e||\"function\"!=typeof r)throw TypeError(\"Not a function\");e(t)}))})),t(d,\"reject\",(function(t){return new this((function(e,r){if(\"function\"!=typeof e||\"function\"!=typeof r)throw TypeError(\"Not a function\");r(t)}))})),t(d,\"all\",(function(t){var e=this;return\"[object Array]\"!=n.call(t)?e.reject(TypeError(\"Not an array\")):0===t.length?e.resolve([]):new e((function(r,n){if(\"function\"!=typeof r||\"function\"!=typeof n)throw TypeError(\"Not a function\");var i=t.length,a=Array(i),o=0;f(e,t,(function(t,e){a[t]=e,++o===i&&r(a)}),n)}))})),t(d,\"race\",(function(t){var e=this;return\"[object Array]\"!=n.call(t)?e.reject(TypeError(\"Not an array\")):new e((function(r,n){if(\"function\"!=typeof r||\"function\"!=typeof n)throw TypeError(\"Not a function\");f(e,t,(function(t,e){r(e)}),n)}))})),d}(),t.exports?t.exports=a[i]:void 0===(n=function(){return a[i]}.call(e,r,e,t))||(t.exports=n)}(\"Promise\",void 0!==r.g?r.g:this)},18625:function(t){var e=Math.PI,r=s(120);function n(t,e,r,n){return[\"C\",t,e,r,n,r,n]}function i(t,e,r,n,i,a){return[\"C\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function a(t,n,i,s,l,u,c,f,h,p){if(p)T=p[0],k=p[1],_=p[2],w=p[3];else{var d=o(t,n,-l);t=d.x,n=d.y;var v=(t-(f=(d=o(f,h,-l)).x))/2,g=(n-(h=d.y))/2,y=v*v/(i*i)+g*g/(s*s);y>1&&(i*=y=Math.sqrt(y),s*=y);var m=i*i,x=s*s,b=(u==c?-1:1)*Math.sqrt(Math.abs((m*x-m*g*g-x*v*v)/(m*g*g+x*v*v)));b==1/0&&(b=1);var _=b*i*g/s+(t+f)/2,w=b*-s*v/i+(n+h)/2,T=Math.asin(((n-w)/s).toFixed(9)),k=Math.asin(((h-w)/s).toFixed(9));(T=t<_?e-T:T)<0&&(T=2*e+T),(k=f<_?e-k:k)<0&&(k=2*e+k),c&&T>k&&(T-=2*e),!c&&k>T&&(k-=2*e)}if(Math.abs(k-T)>r){var A=k,M=f,S=h;k=T+r*(c&&k>T?1:-1);var E=a(f=_+i*Math.cos(k),h=w+s*Math.sin(k),i,s,l,0,c,M,S,[k,A,_,w])}var L=Math.tan((k-T)/4),C=4/3*i*L,P=4/3*s*L,O=[2*t-(t+C*Math.sin(T)),2*n-(n-P*Math.cos(T)),f+C*Math.sin(k),h-P*Math.cos(k),f,h];if(p)return O;E&&(O=O.concat(E));for(var I=0;I<O.length;){var D=o(O[I],O[I+1],l);O[I++]=D.x,O[I++]=D.y}return O}function o(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function s(t){return t*(e/180)}t.exports=function(t){for(var e,r=[],o=0,l=0,u=0,c=0,f=null,h=null,p=0,d=0,v=0,g=t.length;v<g;v++){var y=t[v],m=y[0];switch(m){case\"M\":u=y[1],c=y[2];break;case\"A\":(y=a(p,d,y[1],y[2],s(y[3]),y[4],y[5],y[6],y[7])).unshift(\"C\"),y.length>7&&(r.push(y.splice(0,7)),y.unshift(\"C\"));break;case\"S\":var x=p,b=d;\"C\"!=e&&\"S\"!=e||(x+=x-o,b+=b-l),y=[\"C\",x,b,y[1],y[2],y[3],y[4]];break;case\"T\":\"Q\"==e||\"T\"==e?(f=2*p-f,h=2*d-h):(f=p,h=d),y=i(p,d,f,h,y[1],y[2]);break;case\"Q\":f=y[1],h=y[2],y=i(p,d,y[1],y[2],y[3],y[4]);break;case\"L\":y=n(p,d,y[1],y[2]);break;case\"H\":y=n(p,d,y[1],d);break;case\"V\":y=n(p,d,p,y[1]);break;case\"Z\":y=n(p,d,u,c)}e=m,p=y[y.length-2],d=y[y.length-1],y.length>4?(o=y[y.length-4],l=y[y.length-3]):(o=p,l=d),r.push(y)}return r}},56131:function(t){\"use strict\";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e[\"_\"+String.fromCharCode(r)]=r;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(\"\"))return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(t){n[t]=t})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},n)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,i){for(var a,o,s=function(t){if(null==t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}(t),l=1;l<arguments.length;l++){for(var u in a=Object(arguments[l]))r.call(a,u)&&(s[u]=a[u]);if(e){o=e(a);for(var c=0;c<o.length;c++)n.call(a,o[c])&&(s[o[c]]=a[o[c]])}}return s}},65848:function(t){\"use strict\";var e=function(t){return t!=t};t.exports=function(t,r){return 0===t&&0===r?1/t==1/r:t===r||!(!e(t)||!e(r))}},64003:function(t,e,r){\"use strict\";var n=r(17045),i=r(68222),a=r(65848),o=r(27015),s=r(55572),l=i(o(),Object);n(l,{getPolyfill:o,implementation:a,shim:s}),t.exports=l},27015:function(t,e,r){\"use strict\";var n=r(65848);t.exports=function(){return\"function\"==typeof Object.is?Object.is:n}},55572:function(t,e,r){\"use strict\";var n=r(27015),i=r(17045);t.exports=function(){var t=n();return i(Object,{is:t},{is:function(){return Object.is!==t}}),t}},99019:function(t,e,r){\"use strict\";var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,a=Object.prototype.toString,o=r(64178),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},\"toString\"),u=s.call((function(){}),\"prototype\"),c=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],f=function(t){var e=t.constructor;return e&&e.prototype===t},h={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},p=function(){if(\"undefined\"==typeof window)return!1;for(var t in window)try{if(!h[\"$\"+t]&&i.call(window,t)&&null!==window[t]&&\"object\"==typeof window[t])try{f(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&\"object\"==typeof t,r=\"[object Function]\"===a.call(t),n=o(t),s=e&&\"[object String]\"===a.call(t),h=[];if(!e&&!r&&!n)throw new TypeError(\"Object.keys called on a non-object\");var d=u&&r;if(s&&t.length>0&&!i.call(t,0))for(var v=0;v<t.length;++v)h.push(String(v));if(n&&t.length>0)for(var g=0;g<t.length;++g)h.push(String(g));else for(var y in t)d&&\"prototype\"===y||!i.call(t,y)||h.push(String(y));if(l)for(var m=function(t){if(\"undefined\"==typeof window||!p)return f(t);try{return f(t)}catch(t){return!1}}(t),x=0;x<c.length;++x)m&&\"constructor\"===c[x]||!i.call(t,c[x])||h.push(c[x]);return h}}t.exports=n},8709:function(t,e,r){\"use strict\";var n=Array.prototype.slice,i=r(64178),a=Object.keys,o=a?function(t){return a(t)}:r(99019),s=Object.keys;o.shim=function(){if(Object.keys){var t=function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2);t||(Object.keys=function(t){return i(t)?s(n.call(t)):s(t)})}else Object.keys=o;return Object.keys||o},t.exports=o},64178:function(t){\"use strict\";var e=Object.prototype.toString;t.exports=function(t){var r=e.call(t),n=\"[object Arguments]\"===r;return n||(n=\"[object Array]\"!==r&&null!==t&&\"object\"==typeof t&&\"number\"==typeof t.length&&t.length>=0&&\"[object Function]\"===e.call(t.callee)),n}},88641:function(t){\"use strict\";function e(t,e){if(\"string\"!=typeof t)return[t];var r=[t];\"string\"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:[\"{}\",\"[]\",\"()\"],i=e.escape||\"___\",a=!!e.flat;n.forEach((function(t){var e=new RegExp([\"\\\\\",t[0],\"[^\\\\\",t[0],\"\\\\\",t[1],\"]*\\\\\",t[1]].join(\"\")),n=[];function a(e,a,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s+i}r.forEach((function(t,n){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error(\"References have circular dependency. Please, check them.\");r[n]=t})),n=n.reverse(),r=r.map((function(e){return n.forEach((function(r){e=e.replace(new RegExp(\"(\\\\\"+i+r+\"\\\\\"+i+\")\",\"g\"),t[0]+\"$1\"+t[1])})),e}))}));var o=new RegExp(\"\\\\\"+i+\"([0-9]+)\\\\\"+i);return a?r:function t(e,r,n){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error(\"Circular references in parenthesis\");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function r(t,e){if(e&&e.flat){var r,n=e&&e.escape||\"___\",i=t[0];if(!i)return\"\";for(var a=new RegExp(\"\\\\\"+n+\"([0-9]+)\\\\\"+n),o=0;i!=r;){if(o++>1e4)throw Error(\"Circular references in \"+t);r=i,i=i.replace(a,s)}return i}return t.reduce((function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,\"\")),e+r}),\"\");function s(e,r){if(null==t[r])throw Error(\"Reference \"+r+\"is undefined\");return t[r]}}function n(t,n){return Array.isArray(t)?r(t,n):e(t,n)}n.parse=e,n.stringify=r,t.exports=n},18863:function(t,e,r){\"use strict\";var n=r(71299);t.exports=function(t){var e;return arguments.length>1&&(t=arguments),\"string\"==typeof t?t=t.split(/\\s/).map(parseFloat):\"number\"==typeof t&&(t=[t]),t.length&&\"number\"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(e={x:(t=n(t,{left:\"x l left Left\",top:\"y t top Top\",width:\"w width W Width\",height:\"h height W Width\",bottom:\"b bottom Bottom\",right:\"r right Right\"})).left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height),e}},95616:function(t){t.exports=function(t){var i=[];return t.replace(r,(function(t,r,a){var o=r.toLowerCase();for(a=function(t){var e=t.match(n);return e?e.map(Number):[]}(a),\"m\"==o&&a.length>2&&(i.push([r].concat(a.splice(0,2))),o=\"l\",r=\"m\"==r?\"l\":\"L\");;){if(a.length==e[o])return a.unshift(r),i.push(a);if(a.length<e[o])throw new Error(\"malformed path data\");i.push([r].concat(a.splice(0,e[o])))}})),i};var e={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},r=/([astvzqmhlc])([^astvzqmhlc]*)/gi,n=/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi},25677:function(t){t.exports=function(t,e){e||(e=[0,\"\"]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\\d.\\-\\+]*\\s*(.*)/)[1]||\"\",e}},9748:function(t,e,r){var n=r(90386);(function(){var e,r,i,a,o,s;\"undefined\"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:null!=n&&n.hrtime?(t.exports=function(){return(e()-o)/1e6},r=n.hrtime,a=(e=function(){var t;return 1e9*(t=r())[0]+t[1]})(),s=1e9*n.uptime(),o=a-s):Date.now?(t.exports=function(){return Date.now()-i},i=Date.now()):(t.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(this)},71299:function(t){\"use strict\";t.exports=function(t,e,n){var i,a,o={};if(\"string\"==typeof e&&(e=r(e)),Array.isArray(e)){var s={};for(a=0;a<e.length;a++)s[e[a]]=!0;e=s}for(i in e)e[i]=r(e[i]);var l={};for(i in e){var u=e[i];if(Array.isArray(u))for(a=0;a<u.length;a++){var c=u[a];if(n&&(l[c]=!0),c in t){if(o[i]=t[c],n)for(var f=a;f<u.length;f++)l[u[f]]=!0;break}}else i in t&&(e[i]&&(o[i]=t[i]),n&&(l[i]=!0))}if(n)for(i in t)l[i]||(o[i]=t[i]);return o};var e={};function r(t){return e[t]?e[t]:(\"string\"==typeof t&&(t=e[t]=t.split(/\\s*,\\s*|\\s+/)),t)}},38258:function(t){t.exports=function(t,e,r,n){var i=t[0],a=t[1],o=!1;void 0===r&&(r=0),void 0===n&&(n=e.length);for(var s=n-r,l=0,u=s-1;l<s;u=l++){var c=e[l+r][0],f=e[l+r][1],h=e[u+r][0],p=e[u+r][1];f>a!=p>a&&i<(h-c)*(a-f)/(p-f)+c&&(o=!o)}return o}},52142:function(t,e,r){var n,i=r(69444),a=r(29023),o=r(87263),s=r(11328),l=r(55968),u=r(10670),c=!1,f=a();function h(t,e,r){var i=n.segments(t),a=n.segments(e),o=r(n.combine(i,a));return n.polygon(o)}n={buildLog:function(t){return!0===t?c=i():!1===t&&(c=!1),!1!==c&&c.list},epsilon:function(t){return f.epsilon(t)},segments:function(t){var e=o(!0,f,c);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,f,c).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,c),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,c),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,c),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,c),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,c),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,f,c),inverted:t.inverted}},polygonFromGeoJSON:function(t){return u.toPolygon(n,t)},polygonToGeoJSON:function(t){return u.fromPolygon(n,f,t)},union:function(t,e){return h(t,e,n.selectUnion)},intersect:function(t,e){return h(t,e,n.selectIntersect)},difference:function(t,e){return h(t,e,n.selectDifference)},differenceRev:function(t,e){return h(t,e,n.selectDifferenceRev)},xor:function(t,e){return h(t,e,n.selectXor)}},\"object\"==typeof window&&(window.PolyBool=n),t.exports=n},69444:function(t){t.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n(\"check\",{seg1:t,seg2:e})},segmentChop:function(t,e){return n(\"div_seg\",{seg:t,pt:e}),n(\"chop\",{seg:t,pt:e})},statusRemove:function(t){return n(\"pop_seg\",{seg:t})},segmentUpdate:function(t){return n(\"seg_update\",{seg:t})},segmentNew:function(t,e){return n(\"new_seg\",{seg:t,primary:e})},segmentRemove:function(t){return n(\"rem_seg\",{seg:t})},tempStatus:function(t,e,r){return n(\"temp_status\",{seg:t,above:e,below:r})},rewind:function(t){return n(\"rewind\",{seg:t})},status:function(t,e,r){return n(\"status\",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n(\"vert\",{x:e}))},log:function(t){return\"string\"!=typeof t&&(t=JSON.stringify(t,!1,\"  \")),n(\"log\",{txt:t})},reset:function(){return n(\"reset\")},selected:function(t){return n(\"selected\",{segs:t})},chainStart:function(t){return n(\"chain_start\",{seg:t})},chainRemoveHead:function(t,e){return n(\"chain_rem_head\",{index:t,pt:e})},chainRemoveTail:function(t,e){return n(\"chain_rem_tail\",{index:t,pt:e})},chainNew:function(t,e){return n(\"chain_new\",{pt1:t,pt2:e})},chainMatch:function(t){return n(\"chain_match\",{index:t})},chainClose:function(t){return n(\"chain_close\",{index:t})},chainAddHead:function(t,e){return n(\"chain_add_head\",{index:t,pt:e})},chainAddTail:function(t,e){return n(\"chain_add_tail\",{index:t,pt:e})},chainConnect:function(t,e){return n(\"chain_con\",{index1:t,index2:e})},chainReverse:function(t){return n(\"chain_rev\",{index:t})},chainJoin:function(t,e){return n(\"chain_join\",{index1:t,index2:e})},done:function(){return n(\"done\")}}}},29023:function(t){t.exports=function(t){\"number\"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return\"number\"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var i=r[0],a=r[1],o=n[0],s=n[1],l=e[0];return(o-i)*(e[1]-a)-(s-a)*(l-i)>=-t},pointBetween:function(e,r,n){var i=e[1]-r[1],a=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*a+i*s;return!(l<t||l-(a*a+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var i=e[0]-r[0],a=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(i*s-o*a)<t},linesIntersect:function(e,r,n,i){var a=r[0]-e[0],o=r[1]-e[1],s=i[0]-n[0],l=i[1]-n[1],u=a*l-o*s;if(Math.abs(u)<t)return!1;var c=e[0]-n[0],f=e[1]-n[1],h=(s*f-l*c)/u,p=(a*f-o*c)/u,d={alongA:0,alongB:0,pt:[e[0]+h*a,e[1]+h*o]};return d.alongA=h<=-t?-2:h<t?-1:h-1<=-t?0:h-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],i=e[1],a=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var u=r[l][0],c=r[l][1];c-i>t!=o-i>t&&(a-u)*(i-c)/(o-c)+u-n>t&&(s=!s),a=u,o=c}return s}};return e}},10670:function(t){var e={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),i=1;i<e.length;i++)n=t.selectDifference(t.combine(n,r(e[i])));return n}if(\"Polygon\"===e.type)return t.polygon(r(e.coordinates));if(\"MultiPolygon\"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),i=0;i<e.coordinates.length;i++)n=t.selectUnion(t.combine(n,r(e.coordinates[i])));return t.polygon(n)}throw new Error(\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function i(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var a=i(null);function o(t,e){for(var r=0;r<t.children.length;r++)if(n(e,(s=t.children[r]).region))return void o(s,e);var a=i(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(a.children.push(s),t.children.splice(r,1),r--)}t.children.push(a)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(a,l)}function u(t,e){for(var r=0,n=t[t.length-1][0],i=t[t.length-1][1],a=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];a.push([s,l]),r+=l*n-s*i,n=s,i=l}return r<0!==e&&a.reverse(),a.push([a[0][0],a[0][1]]),a}var c=[];function f(t){var e=[u(t.region,!1)];c.push(e);for(var r=0;r<t.children.length;r++)e.push(h(t.children[r]))}function h(t){for(var e=0;e<t.children.length;e++)f(t.children[e]);return u(t.region,!0)}for(s=0;s<a.children.length;s++)f(a.children[s]);return c.length<=0?{type:\"Polygon\",coordinates:[]}:1==c.length?{type:\"Polygon\",coordinates:c[0]}:{type:\"MultiPolygon\",coordinates:c}}};t.exports=e},87263:function(t,e,r){var n=r(26859);t.exports=function(t,e,r){function i(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var a=n.create();function o(t,r){a.insertBefore(t,(function(n){return i=t.isStart,a=t.pt,o=r,s=n.isStart,l=n.pt,u=n.other.pt,(0!==(c=e.pointsCompare(a,l))?c:e.pointsSame(o,u)?0:i!==s?i?1:-1:e.pointAboveOrOnLine(o,s?l:u,s?u:l)?1:-1)<0;var i,a,o,s,l,u,c}))}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var i=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=i,o(i,t.pt)}(r,t,e),r}function l(t,e){var n=i(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function u(i,o){var s=n.create();function u(t){return s.findTransition((function(r){var n,i,a,o,s,l;return n=t,i=r.ev,a=n.seg.start,o=n.seg.end,s=i.seg.start,l=i.seg.end,(e.pointsCollinear(a,s,l)?e.pointsCollinear(o,s,l)||e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)>0}))}function c(t,n){var i=t.seg,a=n.seg,o=i.start,s=i.end,u=a.start,c=a.end;r&&r.checkIntersection(i,a);var f=e.linesIntersect(o,s,u,c);if(!1===f){if(!e.pointsCollinear(o,s,u))return!1;if(e.pointsSame(o,c)||e.pointsSame(s,u))return!1;var h=e.pointsSame(o,u),p=e.pointsSame(s,c);if(h&&p)return n;var d=!h&&e.pointBetween(o,u,c),v=!p&&e.pointBetween(s,u,c);if(h)return v?l(n,s):l(t,c),n;d&&(p||(v?l(n,s):l(t,c)),l(n,o))}else 0===f.alongA&&(-1===f.alongB?l(t,u):0===f.alongB?l(t,f.pt):1===f.alongB&&l(t,c)),0===f.alongB&&(-1===f.alongA?l(n,o):0===f.alongA?l(n,f.pt):1===f.alongA&&l(n,s));return!1}for(var f=[];!a.isEmpty();){var h=a.getHead();if(r&&r.vert(h.pt[0]),h.isStart){r&&r.segmentNew(h.seg,h.primary);var p=u(h),d=p.before?p.before.ev:null,v=p.after?p.after.ev:null;function g(){if(d){var t=c(h,d);if(t)return t}return!!v&&c(h,v)}r&&r.tempStatus(h.seg,!!d&&d.seg,!!v&&v.seg);var y,m,x=g();if(x)t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=h.seg.myFill,r&&r.segmentUpdate(x.seg),h.other.remove(),h.remove();if(a.getHead()!==h){r&&r.rewind(h.seg);continue}t?(m=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below,h.seg.myFill.below=v?v.seg.myFill.above:i,h.seg.myFill.above=m?!h.seg.myFill.below:h.seg.myFill.below):null===h.seg.otherFill&&(y=v?h.primary===v.primary?v.seg.otherFill.above:v.seg.myFill.above:h.primary?o:i,h.seg.otherFill={above:y,below:y}),r&&r.status(h.seg,!!d&&d.seg,!!v&&v.seg),h.other.status=p.insert(n.node({ev:h}))}else{var b=h.status;if(null===b)throw new Error(\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\");if(s.exists(b.prev)&&s.exists(b.next)&&c(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!h.primary){var _=h.seg.myFill;h.seg.myFill=h.seg.otherFill,h.seg.otherFill=_}f.push(h.seg)}a.getHead().remove()}return r&&r.done(),f}return t?{addRegion:function(t){for(var n,i,a,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var u=e.pointsCompare(n,o);0!==u&&s((i=u<0?n:o,a=u<0?o:n,{id:r?r.segmentId():-1,start:i,end:a,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return u(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach((function(t){s(i(t.start,t.end,t),!0)})),r.forEach((function(t){s(i(t.start,t.end,t),!1)})),u(e,n)}}}},26859:function(t){t.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,i=t.root.next;null!==i;){if(r(i))return e.prev=i.prev,e.next=i,i.prev.next=e,void(i.prev=e);n=i,i=i.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},11328:function(t){t.exports=function(t,e,r){var n=[],i=[];return t.forEach((function(t){var a=t.start,o=t.end;if(e.pointsSame(a,o))console.warn(\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},u=s,c=0;c<n.length;c++){var f=(g=n[c])[0],h=(g[1],g[g.length-1]);if(g[g.length-2],e.pointsSame(f,a)){if(k(c,!0,!0))break}else if(e.pointsSame(f,o)){if(k(c,!0,!1))break}else if(e.pointsSame(h,a)){if(k(c,!1,!0))break}else if(e.pointsSame(h,o)&&k(c,!1,!1))break}if(u===s)return n.push([a,o]),void(r&&r.chainNew(a,o));if(u===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:a,v=s.matches_head,g=n[p],y=v?g[0]:g[g.length-1],m=v?g[1]:g[g.length-2],x=v?g[g.length-1]:g[0],b=v?g[g.length-2]:g[1];return e.pointsCollinear(m,y,d)&&(v?(r&&r.chainRemoveHead(s.index,d),g.shift()):(r&&r.chainRemoveTail(s.index,d),g.pop()),y=m),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,y)&&(v?(r&&r.chainRemoveTail(s.index,y),g.pop()):(r&&r.chainRemoveHead(s.index,y),g.shift())),r&&r.chainClose(s.index),void i.push(g)):void(v?(r&&r.chainAddHead(s.index,d),g.unshift(d)):(r&&r.chainAddTail(s.index,d),g.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var T=n[_].length<n[w].length;s.matches_head?l.matches_head?T?(A(_),M(_,w)):(A(w),M(w,_)):M(w,_):l.matches_head?M(_,w):T?(A(_),M(w,_)):(A(w),M(_,w))}function k(t,e,r){return u.index=t,u.matches_head=e,u.matches_pt1=r,u===s?(u=l,!1):(u=null,!0)}function A(t){r&&r.chainReverse(t),n[t].reverse()}function M(t,i){var a=n[t],o=n[i],s=a[a.length-1],l=a[a.length-2],u=o[0],c=o[1];e.pointsCollinear(l,s,u)&&(r&&r.chainRemoveTail(t,s),a.pop(),s=l),e.pointsCollinear(s,u,c)&&(r&&r.chainRemoveHead(i,u),o.shift()),r&&r.chainJoin(t,i),n[t]=a.concat(o),n.splice(i,1)}})),i}},55968:function(t){function e(t,e,r){var n=[];return t.forEach((function(t){var i=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[i]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[i],below:2===e[i]},otherFill:null})})),r&&r.selected(n),n}var r={union:function(t,r){return e(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],r)},intersect:function(t,r){return e(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],r)},difference:function(t,r){return e(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],r)},differenceRev:function(t,r){return e(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],r)},xor:function(t,r){return e(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],r)}};t.exports=r},14847:function(t,e,r){\"use strict\";var n=r(21630).Transform,i=r(90715);function a(){n.call(this,{readableObjectMode:!0})}function o(t,e,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\"\",this.name=this.constructor.name,this.message=t,e&&(this.code=e),r&&(this.statusCode=r)}a.prototype=Object.create(n.prototype),a.prototype.constructor=a,i(a.prototype),e.OF=function(t,e,r){for(var n=e,i=0;i<r.length;)if(t[n++]!==r[i++])return!1;return!0},e.eG=function(t,e){var r=[],n=0;if(e&&\"hex\"===e)for(;n<t.length;)r.push(parseInt(t.slice(n,n+2),16)),n+=2;else for(;n<t.length;n++)r.push(255&t.charCodeAt(n));return r},e.mP=function(t,e){return t[e]|t[e+1]<<8},e.n8=function(t,e){return t[e+1]|t[e]<<8},e.nm=function(t,e){return t[e]|t[e+1]<<8|t[e+2]<<16|16777216*t[e+3]},e.Ag=function(t,e){return t[e+3]|t[e+2]<<8|t[e+1]<<16|16777216*t[e]},o.prototype=Object.create(Error.prototype),o.prototype.constructor=o},71371:function(t){\"use strict\";function e(t,e){var r=new Error(t);return r.code=e,r}function r(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}function n(t,r,n){this.input=t.subarray(r,n),this.start=r;var i=String.fromCharCode.apply(null,this.input.subarray(0,4));if(\"II*\\0\"!==i&&\"MM\\0*\"!==i)throw e(\"invalid TIFF signature\",\"EBADDATA\");this.big_endian=\"M\"===i[0]}n.prototype.each=function(t){this.aborted=!1;var e=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:e}];this.ifds_to_read.length>0&&!this.aborted;){var r=this.ifds_to_read.shift();r.offset&&this.scan_ifd(r.id,r.offset,t)}},n.prototype.read_uint16=function(t){var r=this.input;if(t+2>r.length)throw e(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?256*r[t]+r[t+1]:r[t]+256*r[t+1]},n.prototype.read_uint32=function(t){var r=this.input;if(t+4>r.length)throw e(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?16777216*r[t]+65536*r[t+1]+256*r[t+2]+r[t+3]:r[t]+256*r[t+1]+65536*r[t+2]+16777216*r[t+3]},n.prototype.is_subifd_link=function(t,e){return 0===t&&34665===e||0===t&&34853===e||34665===t&&40965===e},n.prototype.exif_format_length=function(t){switch(t){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}},n.prototype.exif_format_read=function(t,e){var r;switch(t){case 1:case 2:return this.input[e];case 6:return(r=this.input[e])|33554430*(128&r);case 3:return this.read_uint16(e);case 8:return(r=this.read_uint16(e))|131070*(32768&r);case 4:return this.read_uint32(e);case 9:return 0|this.read_uint32(e);default:return null}},n.prototype.scan_ifd=function(t,n,i){var a=this.read_uint16(n);n+=2;for(var o=0;o<a;o++){var s=this.read_uint16(n),l=this.read_uint16(n+2),u=this.read_uint32(n+4),c=this.exif_format_length(l),f=u*c,h=f<=4?n+8:this.read_uint32(n+8),p=!1;if(h+f>this.input.length)throw e(\"unexpected EOF\",\"EBADDATA\");for(var d=[],v=h,g=0;g<u;g++,v+=c){var y=this.exif_format_read(l,v);if(null===y){d=null;break}d.push(y)}if(Array.isArray(d)&&2===l&&(d=r(String.fromCharCode.apply(null,d)))&&\"\\0\"===d[d.length-1]&&(d=d.slice(0,-1)),this.is_subifd_link(t,s)&&Array.isArray(d)&&Number.isInteger(d[0])&&d[0]>0&&(this.ifds_to_read.push({id:s,offset:d[0]}),p=!0),!1===i({is_big_endian:this.big_endian,ifd:t,tag:s,format:l,count:u,entry_offset:n+this.start,data_length:f,data_offset:h+this.start,value:d,is_subifd_link:p}))return void(this.aborted=!0);n+=12}0===t&&this.ifds_to_read.push({id:1,offset:this.read_uint32(n)})},t.exports.ExifParser=n,t.exports.get_orientation=function(t){var e=0;try{return new n(t,0,t.length).each((function(t){if(0===t.ifd&&274===t.tag&&Array.isArray(t.value))return e=t.value[0],!1})),e}catch(t){return-1}}},76767:function(t,e,r){\"use strict\";var n=r(14847).n8,i=r(14847).Ag;function a(t,e){if(t.length<4+e)return null;var r=i(t,e);return t.length<r+e||r<8?null:{boxtype:String.fromCharCode.apply(null,t.slice(e+4,e+8)),data:t.slice(e+8,e+r),end:e+r}}function o(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;switch(n.boxtype){case\"ispe\":e.sizes.push({width:i(n.data,4),height:i(n.data,8)});break;case\"irot\":e.transforms.push({type:\"irot\",value:3&n.data[0]});break;case\"imir\":e.transforms.push({type:\"imir\",value:1&n.data[0]})}r=n.end}}function s(t,e,r){for(var n=0,i=0;i<r;i++)n=256*n+(t[e+i]||0);return n}function l(t,e){for(var r=t[4]>>4&15,i=15&t[4],a=t[5]>>4&15,o=n(t,6),l=8,u=0;u<o;u++){var c=n(t,l),f=n(t,l+=2),h=s(t,l+=2,a),p=n(t,l+=a);if(l+=2,0===f&&1===p){var d=s(t,l,r),v=s(t,l+r,i);e.item_loc[c]={length:v,offset:d+h}}l+=p*(r+i)}}function u(t,e){for(var r=n(t,4),i=6,o=0;o<r;o++){var s=a(t,i);if(!s)break;if(\"infe\"===s.boxtype){for(var l=n(s.data,4),u=\"\",c=8;c<s.data.length&&s.data[c];c++)u+=String.fromCharCode(s.data[c]);e.item_inf[u]=l}i=s.end}}function c(t,e){for(var r=0;;){var n=a(t,r);if(!n)break;\"ipco\"===n.boxtype&&o(n.data,e),r=n.end}}t.exports.unbox=a,t.exports.readSizeFromMeta=function(t){var e={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(function(t,e){for(var r=4;;){var n=a(t,r);if(!n)break;\"iprp\"===n.boxtype&&c(n.data,e),\"iloc\"===n.boxtype&&l(n.data,e),\"iinf\"===n.boxtype&&u(n.data,e),r=n.end}}(t,e),e.sizes.length){var r,n,i,o=(n=(r=e.sizes).reduce((function(t,e){return t.width>e.width||t.width===e.width&&t.height>e.height?t:e})),i=r.reduce((function(t,e){return t.height>e.height||t.height===e.height&&t.width>e.width?t:e})),n.width>i.height||n.width===i.height&&n.height>i.width?n:i),s=1;e.transforms.forEach((function(t){var e={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},r={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(\"imir\"===t.type&&(s=0===t.value?r[s]:e[s=e[s=r[s]]]),\"irot\"===t.type)for(var n=0;n<t.value;n++)s=e[s]}));var f=null;return e.item_inf.Exif&&(f=e.item_loc[e.item_inf.Exif]),{width:o.width,height:o.height,orientation:e.transforms.length?s:null,variants:e.sizes,exif_location:f}}},t.exports.getMimeType=function(t){var e=String.fromCharCode.apply(null,t.slice(0,4)),r={};r[e]=!0;for(var n=8;n<t.length;n+=4)r[String.fromCharCode.apply(null,t.slice(n,n+4))]=!0;if(r.mif1||r.msf1||r.miaf)return\"avif\"===e||\"avis\"===e||\"avio\"===e?{type:\"avif\",mime:\"image/avif\"}:\"heic\"===e||\"heix\"===e?{type:\"heic\",mime:\"image/heic\"}:\"hevc\"===e||\"hevx\"===e?{type:\"heic\",mime:\"image/heic-sequence\"}:r.avif||r.avis?{type:\"avif\",mime:\"image/avif\"}:r.heic||r.heix||r.hevc||r.hevx||r.heis?r.msf1?{type:\"heif\",mime:\"image/heif-sequence\"}:{type:\"heif\",mime:\"image/heif\"}:{type:\"avif\",mime:\"image/avif\"}}},24461:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=r(76767),s=r(71371),l=n(\"ftyp\");t.exports=function(t){if(i(t,4,l)){var e=o.unbox(t,0);if(e){var r=o.getMimeType(e.data);if(r){for(var n,u=e.end;;){var c=o.unbox(t,u);if(!c)break;if(u=c.end,\"mdat\"===c.boxtype)return;if(\"meta\"===c.boxtype){n=c.data;break}}if(n){var f=o.readSizeFromMeta(n);if(f){var h={width:f.width,height:f.height,type:r.type,mime:r.mime,wUnits:\"px\",hUnits:\"px\"};if(f.variants.length>1&&(h.variants=f.variants),f.orientation&&(h.orientation=f.orientation),f.exif_location&&f.exif_location.offset+f.exif_location.length<=t.length){var p=a(t,f.exif_location.offset),d=t.slice(f.exif_location.offset+p+4,f.exif_location.offset+f.exif_location.length),v=s.get_orientation(d);v>0&&(h.orientation=v)}return h}}}}}}},2504:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n(\"BM\");t.exports=function(t){if(!(t.length<26)&&i(t,0,o))return{width:a(t,18),height:a(t,22),type:\"bmp\",mime:\"image/bmp\",wUnits:\"px\",hUnits:\"px\"}}},47342:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=n(\"GIF87a\"),s=n(\"GIF89a\");t.exports=function(t){if(!(t.length<10)&&(i(t,0,o)||i(t,0,s)))return{width:a(t,6),height:a(t,8),type:\"gif\",mime:\"image/gif\",wUnits:\"px\",hUnits:\"px\"}}},31355:function(t,e,r){\"use strict\";var n=r(14847).mP;t.exports=function(t){var e=n(t,0),r=n(t,2),i=n(t,4);if(0===e&&1===r&&i){for(var a=[],o={width:0,height:0},s=0;s<i;s++){var l=t[6+16*s]||256,u=t[6+16*s+1]||256,c={width:l,height:u};a.push(c),(l>o.width||u>o.height)&&(o=c)}return{width:o.width,height:o.height,variants:a,type:\"ico\",mime:\"image/x-icon\",wUnits:\"px\",hUnits:\"px\"}}}},54261:function(t,e,r){\"use strict\";var n=r(14847).n8,i=r(14847).eG,a=r(14847).OF,o=r(71371),s=i(\"Exif\\0\\0\");t.exports=function(t){if(!(t.length<2)&&255===t[0]&&216===t[1]&&255===t[2])for(var e=2;;){for(;;){if(t.length-e<2)return;if(255===t[e++])break}for(var r,i,l=t[e++];255===l;)l=t[e++];if(208<=l&&l<=217||1===l)r=0;else{if(!(192<=l&&l<=254))return;if(t.length-e<2)return;r=n(t,e)-2,e+=2}if(217===l||218===l)return;if(225===l&&r>=10&&a(t,e,s)&&(i=o.get_orientation(t.slice(e+6,e+r))),r>=5&&192<=l&&l<=207&&196!==l&&200!==l&&204!==l){if(t.length-e<r)return;var u={width:n(t,e+3),height:n(t,e+1),type:\"jpg\",mime:\"image/jpeg\",wUnits:\"px\",hUnits:\"px\"};return i>0&&(u.orientation=i),u}e+=r}}},6303:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n(\"‰PNG\\r\\n\u001a\\n\"),s=n(\"IHDR\");t.exports=function(t){if(!(t.length<24)&&i(t,0,o)&&i(t,12,s))return{width:a(t,16),height:a(t,20),type:\"png\",mime:\"image/png\",wUnits:\"px\",hUnits:\"px\"}}},38689:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).Ag,o=n(\"8BPS\\0\u0001\");t.exports=function(t){if(!(t.length<22)&&i(t,0,o))return{width:a(t,18),height:a(t,14),type:\"psd\",mime:\"image/vnd.adobe.photoshop\",wUnits:\"px\",hUnits:\"px\"}}},6881:function(t){\"use strict\";function e(t){return\"number\"==typeof t&&isFinite(t)&&t>0}var r=/<[-_.:a-zA-Z0-9][^>]*>/,n=/^<([-_.:a-zA-Z0-9]+:)?svg\\s/,i=/[^-]\\bwidth=\"([^%]+?)\"|[^-]\\bwidth='([^%]+?)'/,a=/\\bheight=\"([^%]+?)\"|\\bheight='([^%]+?)'/,o=/\\bview[bB]ox=\"(.+?)\"|\\bview[bB]ox='(.+?)'/,s=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function l(t){return s.test(t)?t.match(s)[0]:\"px\"}t.exports=function(t){if(function(t){var e,r=0,n=t.length;for(239===t[0]&&187===t[1]&&191===t[2]&&(r=3);r<n&&(32===(e=t[r])||9===e||13===e||10===e);)r++;return r!==n&&60===t[r]}(t)){for(var s=\"\",u=0;u<t.length;u++)s+=String.fromCharCode(t[u]);var c=(s.match(r)||[\"\"])[0];if(n.test(c)){var f=function(t){var e=t.match(i),r=t.match(a),n=t.match(o);return{width:e&&(e[1]||e[2]),height:r&&(r[1]||r[2]),viewbox:n&&(n[1]||n[2])}}(c),h=parseFloat(f.width),p=parseFloat(f.height);if(f.width&&f.height){if(!e(h)||!e(p))return;return{width:h,height:p,type:\"svg\",mime:\"image/svg+xml\",wUnits:l(f.width),hUnits:l(f.height)}}var d=(f.viewbox||\"\").split(\" \"),v={width:d[2],height:d[3]},g=parseFloat(v.width),y=parseFloat(v.height);if(e(g)&&e(y)&&l(v.width)===l(v.height)){var m=g/y;if(f.width){if(!e(h))return;return{width:h,height:h/m,type:\"svg\",mime:\"image/svg+xml\",wUnits:l(f.width),hUnits:l(f.width)}}if(f.height){if(!e(p))return;return{width:p*m,height:p,type:\"svg\",mime:\"image/svg+xml\",wUnits:l(f.height),hUnits:l(f.height)}}return{width:g,height:y,type:\"svg\",mime:\"image/svg+xml\",wUnits:l(v.width),hUnits:l(v.height)}}}}}},66278:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).n8,s=r(14847).nm,l=r(14847).Ag,u=n(\"II*\\0\"),c=n(\"MM\\0*\");function f(t,e,r){return r?o(t,e):a(t,e)}function h(t,e,r){return r?l(t,e):s(t,e)}function p(t,e,r){var n=f(t,e+2,r);return 1!==h(t,e+4,r)||3!==n&&4!==n?null:3===n?f(t,e+8,r):h(t,e+8,r)}t.exports=function(t){if(!(t.length<8)&&(i(t,0,u)||i(t,0,c))){var e=77===t[0],r=h(t,4,e)-8;if(!(r<0)){var n=r+8;if(!(t.length-n<2)){var a=12*f(t,n+0,e);if(!(a<=0||(n+=2,t.length-n<a))){var o,s,l,d;for(o=0;o<a;o+=12)256===(d=f(t,n+o,e))?s=p(t,n+o,e):257===d&&(l=p(t,n+o,e));return s&&l?{width:s,height:l,type:\"tiff\",mime:\"image/tiff\",wUnits:\"px\",hUnits:\"px\"}:void 0}}}}}},90784:function(t,e,r){\"use strict\";var n=r(14847).eG,i=r(14847).OF,a=r(14847).mP,o=r(14847).nm,s=r(71371),l=n(\"RIFF\"),u=n(\"WEBP\");function c(t,e){if(157===t[e+3]&&1===t[e+4]&&42===t[e+5])return{width:16383&a(t,e+6),height:16383&a(t,e+8),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}function f(t,e){if(47===t[e]){var r=o(t,e+1);return{width:1+(16383&r),height:1+(r>>14&16383),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}}function h(t,e){return{width:1+(t[e+6]<<16|t[e+5]<<8|t[e+4]),height:1+(t[e+9]<<e|t[e+8]<<8|t[e+7]),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}t.exports=function(t){if(!(t.length<16)&&(i(t,0,l)||i(t,8,u))){var e=12,r=null,n=0,a=o(t,4)+8;if(!(a>t.length)){for(;e+8<a;)if(0!==t[e]){var p=String.fromCharCode.apply(null,t.slice(e,e+4)),d=o(t,e+4);\"VP8 \"===p&&d>=10?r=r||c(t,e+8):\"VP8L\"===p&&d>=9?r=r||f(t,e+8):\"VP8X\"===p&&d>=10?r=r||h(t,e+8):\"EXIF\"===p&&(n=s.get_orientation(t.slice(e+8,e+8+d)),e=1/0),e+=8+d}else e++;if(r)return n>0&&(r.orientation=n),r}}}},91497:function(t,e,r){\"use strict\";t.exports={avif:r(24461),bmp:r(2504),gif:r(47342),ico:r(31355),jpeg:r(54261),png:r(6303),psd:r(38689),svg:r(6881),tiff:r(66278),webp:r(90784)}},33575:function(t,e,r){\"use strict\";var n=r(91497);t.exports=function(t){return function(t){for(var e=Object.keys(n),r=0;r<e.length;r++){var i=n[e[r]](t);if(i)return i}return null}(t)},t.exports.parsers=n},90386:function(t){var e,r,n=t.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function a(){throw new Error(\"clearTimeout has not been defined\")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e=\"function\"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r=\"function\"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var s,l=[],u=!1,c=-1;function f(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&h())}function h(){if(!u){var t=o(f);u=!0;for(var e=l.length;e;){for(s=l,l=[];++c<e;)s&&s[c].run();c=-1,e=l.length}s=null,u=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{return r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function d(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];l.push(new p(t,e)),1!==l.length||u||o(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title=\"browser\",n.browser=!0,n.env={},n.argv=[],n.version=\"\",n.versions={},n.on=d,n.addListener=d,n.once=d,n.off=d,n.removeListener=d,n.removeAllListeners=d,n.emit=d,n.prependListener=d,n.prependOnceListener=d,n.listeners=function(t){return[]},n.binding=function(t){throw new Error(\"process.binding is not supported\")},n.cwd=function(){return\"/\"},n.chdir=function(t){throw new Error(\"process.chdir is not supported\")},n.umask=function(){return 0}},5877:function(t,e,r){for(var n=r(9748),i=\"undefined\"==typeof window?r.g:window,a=[\"moz\",\"webkit\"],o=\"AnimationFrame\",s=i[\"request\"+o],l=i[\"cancel\"+o]||i[\"cancelRequest\"+o],u=0;!s&&u<a.length;u++)s=i[a[u]+\"Request\"+o],l=i[a[u]+\"Cancel\"+o]||i[a[u]+\"CancelRequest\"+o];if(!s||!l){var c=0,f=0,h=[];s=function(t){if(0===h.length){var e=n(),r=Math.max(0,16.666666666666668-(e-c));c=r+e,setTimeout((function(){var t=h.slice(0);h.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(c)}catch(t){setTimeout((function(){throw t}),0)}}),Math.round(r))}return h.push({handle:++f,callback:t,cancelled:!1}),f},l=function(t){for(var e=0;e<h.length;e++)h[e].handle===t&&(h[e].cancelled=!0)}}t.exports=function(t){return s.call(i,t)},t.exports.cancel=function(){l.apply(i,arguments)},t.exports.polyfill=function(t){t||(t=i),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}},3593:function(t,e,r){\"use strict\";var n=r(21527),i=r(25075),a=r(93447),o=r(71299),s=r(56131),l=r(30120),u=r(57060),c=u.float32,f=u.fract32;t.exports=function(t,e){if(\"function\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");var r,u,p,d,v,g,y=t._gl,m={color:\"black\",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array(0)}),u=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),p=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),v=t.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),g=t.buffer({usage:\"static\",type:\"float\",data:h}),T(e),r=t({vert:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tattribute vec2 position, positionFract;\\n\\t\\tattribute vec4 error;\\n\\t\\tattribute vec4 color;\\n\\n\\t\\tattribute vec2 direction, lineOffset, capOffset;\\n\\n\\t\\tuniform vec4 viewport;\\n\\t\\tuniform float lineWidth, capSize;\\n\\t\\tuniform vec2 scale, scaleFract, translate, translateFract;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tfragColor = color / 255.;\\n\\n\\t\\t\\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\\n\\n\\t\\t\\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\\n\\n\\t\\t\\tvec2 position = position + dxy;\\n\\n\\t\\t\\tvec2 pos = (position + translate) * scale\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scale\\n\\t\\t\\t\\t+ (position + translate) * scaleFract\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scaleFract;\\n\\n\\t\\t\\tpos += pixelOffset / viewport.zw;\\n\\n\\t\\t\\tgl_Position = vec4(pos * 2. - 1., 0, 1);\\n\\t\\t}\\n\\t\\t\",frag:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tuniform float opacity;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tgl_FragColor = fragColor;\\n\\t\\t\\tgl_FragColor.a *= opacity;\\n\\t\\t}\\n\\t\\t\",uniforms:{range:t.prop(\"range\"),lineWidth:t.prop(\"lineWidth\"),capSize:t.prop(\"capSize\"),opacity:t.prop(\"opacity\"),scale:t.prop(\"scale\"),translate:t.prop(\"translate\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:u,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:v,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:\"triangles\",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:!1,instances:t.prop(\"count\"),count:h.length}),s(b,{update:T,draw:_,destroy:k,regl:t,gl:y,canvas:y.canvas,groups:x}),b;function b(t){t?T(t):null===t&&k(),_()}function _(e){if(\"number\"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach((function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)}))}function w(t){\"number\"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function T(t){if(t){null!=t.length?\"number\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map((function(t,u){var c=x[u];return t?(\"function\"==typeof t?t={after:t}:\"number\"==typeof t[0]&&(t={positions:t}),t=o(t,{color:\"color colors fill\",capSize:\"capSize cap capsize cap-size\",lineWidth:\"lineWidth line-width width line thickness\",opacity:\"opacity alpha\",range:\"range dataBox\",viewport:\"viewport viewBox\",errors:\"errors error\",positions:\"positions position data points\"}),c||(x[u]=c={id:u,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},m,t)),a(c,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,\"float64\"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t=\"transparent\"),!Array.isArray(t)||\"number\"==typeof t[0]){var n=t;t=Array(r);for(var a=0;a<r;a++)t[a]=n}if(t.length<r)throw Error(\"Not enough colors\");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=i(t[s],\"uint8\");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=f(e.scale),e.translateFract=f(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:y.drawingBufferWidth,height:y.drawingBufferHeight},e}}]),c):c})),e||r){var h=x.reduce((function(t,e,r){return t+(e?e.count:0)}),0),g=new Float64Array(2*h),_=new Uint8Array(4*h),w=new Float32Array(4*h);x.forEach((function(t,e){if(t){var r=t.positions,n=t.count,i=t.offset,a=t.color,o=t.errors;n&&(_.set(a,4*i),w.set(o,4*i),g.set(r,2*i))}}));var T=c(g);u(T);var k=f(g,T);p(k),d(_),v(w)}}}function k(){u.destroy(),p.destroy(),d.destroy(),v.destroy(),g.destroy()}};var h=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},46075:function(t,e,r){\"use strict\";var n=r(25075),i=r(21527),a=r(56131),o=r(56068),s=r(71299),l=r(30120),u=r(11474),c=r(54),f=r(57060),h=f.float32,p=f.fract32,d=r(83522),v=r(18863),g=r(6851);function y(t,e){if(!(this instanceof y))return new y(t,e);if(\"function\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=y.shaders.has(t)?y.shaders.get(t):y.shaders.set(t,y.createShaders(t)).get(t),this.update(e)}t.exports=y,y.dashMult=2,y.maxPatternLength=256,y.precisionThreshold=3e6,y.maxPoints=1e4,y.maxLines=2048,y.shaders=new d,y.createShaders=function(t){var e,r=t.buffer({usage:\"static\",type:\"float\",data:[0,1,0,0,1,1,1,0]}),n={primitive:\"triangle strip\",instances:t.prop(\"count\"),count:4,offset:0,uniforms:{miterMode:function(t,e){return\"round\"===e.join?2:1},miterLimit:t.prop(\"miterLimit\"),scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),thickness:t.prop(\"thickness\"),dashTexture:t.prop(\"dashTexture\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),dashLength:t.prop(\"dashLength\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop(\"depth\")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\")},i=t(a({vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\\nattribute vec4 color;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\\n\\t// the order is important\\n\\treturn position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n}\\n\\nvoid main() {\\n\\tfloat lineStart = 1. - lineEnd;\\n\\tfloat lineOffset = lineTop * 2. - 1.;\\n\\n\\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\\n\\ttangent = normalize(diff * scale * viewport.zw);\\n\\tvec2 normal = vec2(-tangent.y, tangent.x);\\n\\n\\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\\n\\t\\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\\n\\n\\t\\t+ thickness * normal * .5 * lineOffset / viewport.zw;\\n\\n\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor = color / 255.;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform float dashLength, pixelRatio, thickness, opacity, id;\\nuniform sampler2D dashTexture;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvoid main() {\\n\\tfloat alpha = 1.;\\n\\n\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\\n\\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\\n\\n\\tgl_FragColor = fragColor;\\n\\tgl_FragColor.a *= alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:16,divisor:1},color:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1}}},n));try{e=t(a({cull:{enable:!0,face:\"back\"},vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\\nattribute vec4 aColor, bColor;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, translate;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\nuniform float miterLimit, miterMode;\\n\\nvarying vec4 fragColor;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 tangent;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nconst float REVERSE_THRESHOLD = -.875;\\nconst float MIN_DIFF = 1e-6;\\n\\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\\n// TODO: precalculate dot products, normalize things beforehead etc.\\n// TODO: refactor to rectangular algorithm\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff = b - a;\\n\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nbool isNaN( float val ){\\n  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\\n}\\n\\nvoid main() {\\n\\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\\n\\n  vec2 adjustedScale;\\n  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\\n  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\\n\\n  vec2 scaleRatio = adjustedScale * viewport.zw;\\n\\tvec2 normalWidth = thickness / scaleRatio;\\n\\n\\tfloat lineStart = 1. - lineEnd;\\n\\tfloat lineBot = 1. - lineTop;\\n\\n\\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\\n\\n\\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\\n\\n\\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\\n\\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\\n\\n\\tvec2 prevDiff = aCoord - prevCoord;\\n\\tvec2 currDiff = bCoord - aCoord;\\n\\tvec2 nextDiff = nextCoord - bCoord;\\n\\n\\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\\n\\tvec2 currTangent = normalize(currDiff * scaleRatio);\\n\\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\\n\\n\\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\\n\\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\\n\\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\\n\\n\\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\\n\\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\\n\\n\\t// collapsed/unidirectional segment cases\\n\\t// FIXME: there should be more elegant solution\\n\\tvec2 prevTanDiff = abs(prevTangent - currTangent);\\n\\tvec2 nextTanDiff = abs(nextTangent - currTangent);\\n\\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\\n\\t\\tstartJoinDirection = currNormal;\\n\\t}\\n\\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\\n\\t\\tendJoinDirection = currNormal;\\n\\t}\\n\\tif (aCoord == bCoord) {\\n\\t\\tendJoinDirection = startJoinDirection;\\n\\t\\tcurrNormal = prevNormal;\\n\\t\\tcurrTangent = prevTangent;\\n\\t}\\n\\n\\ttangent = currTangent;\\n\\n\\t//calculate join shifts relative to normals\\n\\tfloat startJoinShift = dot(currNormal, startJoinDirection);\\n\\tfloat endJoinShift = dot(currNormal, endJoinDirection);\\n\\n\\tfloat startMiterRatio = abs(1. / startJoinShift);\\n\\tfloat endMiterRatio = abs(1. / endJoinShift);\\n\\n\\tvec2 startJoin = startJoinDirection * startMiterRatio;\\n\\tvec2 endJoin = endJoinDirection * endMiterRatio;\\n\\n\\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\\n\\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\\n\\tstartBotJoin = -startTopJoin;\\n\\n\\tendTopJoin = sign(endJoinShift) * endJoin * .5;\\n\\tendBotJoin = -endTopJoin;\\n\\n\\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\\n\\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\\n\\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\\n\\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\\n\\n\\t//miter anti-clipping\\n\\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\\n\\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\\n\\n\\t//prevent close to reverse direction switch\\n\\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);\\n\\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);\\n\\n\\tif (prevReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\\n\\t\\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\tbTopCoord -= normalWidth * endTopJoin;\\n\\t\\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\\n\\t}\\n\\n\\tif (nextReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\\n\\t\\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\taBotCoord -= normalWidth * startBotJoin;\\n\\t\\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\\n\\t}\\n\\n\\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\\n\\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\\n\\n\\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\\n\\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\\n\\n\\t//position is normalized 0..1 coord on the screen\\n\\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\\n\\n\\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\n\\tgl_Position = vec4(position  * 2.0 - 1.0, depth, 1);\\n\\n\\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\\n\\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\\n\\n\\t//bevel miter cutoffs\\n\\tif (miterMode == 1.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tstartCutoff = vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff += viewport.xyxy;\\n\\t\\t\\tstartCutoff += startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tendCutoff = vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff += viewport.xyxy;\\n\\t\\t\\tendCutoff += endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n\\n\\t//round miter cutoffs\\n\\telse if (miterMode == 2.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\\n\\t\\t\\tstartCutoff = vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff += viewport.xyxy;\\n\\t\\t\\tstartCutoff += startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\\n\\t\\t\\tendCutoff = vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff += viewport.xyxy;\\n\\t\\t\\tendCutoff += endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform float dashLength, pixelRatio, thickness, opacity, id, miterMode;\\nuniform sampler2D dashTexture;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff = b - a;\\n\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nvoid main() {\\n\\tfloat alpha = 1., distToStart, distToEnd;\\n\\tfloat cutoff = thickness * .5;\\n\\n\\t//bevel miter\\n\\tif (miterMode == 1.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart < -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *= min(max(distToStart + 1., 0.), 1.);\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd < -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *= min(max(distToEnd + 1., 0.), 1.);\\n\\t\\t}\\n\\t}\\n\\n\\t// round miter\\n\\telse if (miterMode == 2.) {\\n\\t\\tif (enableStartMiter == 1.) {\\n\\t\\t\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart < 0.) {\\n\\t\\t\\t\\tfloat radius = length(gl_FragCoord.xy - startCoord);\\n\\n\\t\\t\\t\\tif(radius > cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter == 1.) {\\n\\t\\t\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd < 0.) {\\n\\t\\t\\t\\tfloat radius = length(gl_FragCoord.xy - endCoord);\\n\\n\\t\\t\\t\\tif(radius > cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;\\n\\tfloat dash = texture2D(dashTexture, vec2(t, .5)).r;\\n\\n\\tgl_FragColor = fragColor;\\n\\tgl_FragColor.a *= alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=i}return{fill:t({primitive:\"triangle\",elements:function(t,e){return e.triangles},offset:0,vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position, positionFract;\\n\\nuniform vec4 color;\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float pixelRatio, id;\\nuniform vec4 viewport;\\nuniform float opacity;\\n\\nvarying vec4 fragColor;\\n\\nconst float MAX_LINES = 256.;\\n\\nvoid main() {\\n\\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\\n\\n\\tvec2 position = position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n\\n\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor = color / 255.;\\n\\tfragColor.a *= opacity;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n\\tgl_FragColor = fragColor;\\n}\\n\"]),uniforms:{scale:t.prop(\"scale\"),color:t.prop(\"fill\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8},positionFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},y.defaults={dashes:null,join:\"miter\",miterLimit:1,thickness:10,cap:\"square\",color:\"black\",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},y.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},y.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach((function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);\"number\"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>y.precisionThreshold||e.scale[1]*e.viewport.height>y.precisionThreshold||\"rect\"===e.join||!e.join&&(e.thickness<=2||e.count>=y.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))})),this},y.prototype.update=function(t){var e=this;if(t){null!=t.length?\"number\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach((function(t,f){var d=e.passes[f];if(void 0!==t)if(null!==t){if(\"number\"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:\"positions points data coords\",thickness:\"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth\",join:\"lineJoin linejoin join type mode\",miterLimit:\"miterlimit miterLimit\",dashes:\"dash dashes dasharray dash-array dashArray\",color:\"color colour stroke colors colours stroke-color strokeColor\",fill:\"fill fill-color fillColor\",opacity:\"alpha opacity\",overlay:\"overlay crease overlap intersect\",close:\"closed close closed-path closePath\",range:\"range dataBox\",viewport:\"viewport viewBox\",hole:\"holes hole hollow\",splitNull:\"splitNull\"}),d||(e.passes[f]=d={id:f,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:\"linear\",min:\"linear\"}),colorBuffer:r.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array}),positionBuffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array})},t=a({},y.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,f<y.maxLines&&(d.depth=2*(y.maxLines-1-f%y.maxLines)/y.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,\"uint8\"):null),null!=t.viewport&&(d.viewport=v(t.viewport)),d.viewport||(d.viewport=v([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,x;if(t.positions.x&&t.positions.y){var b=t.positions.x,_=t.positions.y;x=d.count=Math.max(b.length,_.length),m=new Float64Array(2*x);for(var w=0;w<x;w++)m[2*w]=b[w],m[2*w+1]=_[w]}else m=l(t.positions,\"float64\"),x=d.count=Math.floor(m.length/2);var T=d.bounds=i(m,2);if(d.fill){for(var k=[],A={},M=0,S=0,E=0,L=d.count;S<L;S++){var C=m[2*S],P=m[2*S+1];isNaN(C)||isNaN(P)||null==C||null==P?(C=m[2*M],P=m[2*M+1],A[S]=M):M=S,k[E++]=C,k[E++]=P}if(t.splitNull){d.count-1 in A||(A[d.count]=d.count-1);var O=Object.keys(A).map(Number).sort((function(t,e){return t-e})),I=[],D=0,z=null!=d.hole?d.hole[0]:null;if(null!=z){var R=g(O,(function(t){return t>=z}));(O=O.slice(0,R)).push(z)}for(var F=function(t){var e=k.slice(2*D,2*O[t]).concat(z?k.slice(2*z):[]),r=(d.hole||[]).map((function(e){return e-z+(O[t]-D)})),n=u(e,r);n=n.map((function(e){return e+D+(e+D<O[t]?0:z-O[t])})),I.push.apply(I,n),D=O[t]+1},B=0;B<O.length;B++)F(B);for(var N=0,j=I.length;N<j;N++)null!=A[I[N]]&&(I[N]=A[I[N]]);d.triangles=I}else{for(var U=u(k,d.hole||[]),V=0,H=U.length;V<H;V++)null!=A[U[V]]&&(U[V]=A[U[V]]);d.triangles=U}}var q=new Float64Array(m);c(q,2,T);var G=new Float64Array(2*x+6);d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[0]=q[2*x-4],G[1]=q[2*x-3]):(G[0]=q[2*x-2],G[1]=q[2*x-1]):(G[0]=q[0],G[1]=q[1]),G.set(q,2),d.close?m[0]===m[2*x-2]&&m[1]===m[2*x-1]?(G[2*x+2]=q[2],G[2*x+3]=q[3],d.count-=1):(G[2*x+2]=q[0],G[2*x+3]=q[1],G[2*x+4]=q[2],G[2*x+5]=q[3]):(G[2*x+2]=q[2*x-2],G[2*x+3]=q[2*x-1],G[2*x+4]=q[2*x-2],G[2*x+5]=q[2*x-1]);var Z=h(G);d.positionBuffer(Z);var Y=p(G,Z);d.positionFractBuffer(Y)}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var W=d.bounds,X=W[2]-W[0],J=W[3]-W[1],K=d.range[2]-d.range[0],$=d.range[3]-d.range[1];d.scale=[X/K,J/$],d.translate=[-d.range[0]/K+W[0]/K||0,-d.range[1]/$+W[1]/$||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var Q,tt=0;if(!t.dashes||t.dashes.length<2)tt=1,Q=new Uint8Array([255,255,255,255,255,255,255,255]);else{tt=0;for(var et=0;et<t.dashes.length;++et)tt+=t.dashes[et];Q=new Uint8Array(tt*y.dashMult);for(var rt=0,nt=255,it=0;it<2;it++)for(var at=0;at<t.dashes.length;++at){for(var ot=0,st=t.dashes[at]*y.dashMult*.5;ot<st;++ot)Q[rt++]=nt;nt^=255}}d.dashLength=tt,d.dashTexture({channels:1,data:Q,width:Q.length,height:1,mag:\"linear\",min:\"linear\"},0,0)}if(t.color){var lt=d.count,ut=t.color;ut||(ut=\"transparent\");var ct=new Uint8Array(4*lt+4);if(Array.isArray(ut)&&\"number\"!=typeof ut[0]){for(var ft=0;ft<lt;ft++){var ht=n(ut[ft],\"uint8\");ct.set(ht,4*ft)}ct.set(n(ut[0],\"uint8\"),4*lt)}else for(var pt=n(ut,\"uint8\"),dt=0;dt<lt+1;dt++)ct.set(pt,4*dt);d.colorBuffer({usage:\"dynamic\",type:\"uint8\",data:ct})}}else e.passes[f]=null})),t.length<this.passes.length){for(var f=t.length;f<this.passes.length;f++){var d=this.passes[f];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],x=0;x<this.passes.length;x++)null!==this.passes[x]&&m.push(this.passes[x]);return this.passes=m,this}},y.prototype.destroy=function(){return this.passes.forEach((function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()})),this.passes.length=0,this}},11870:function(t,e,r){\"use strict\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=r){var n,i,a,o,s=[],l=!0,u=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(s.push(n.value),s.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}(t,e)||i(t,e)||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.\")}()}function i(t,e){if(t){if(\"string\"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(t,e):void 0}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var o=r(25075),s=r(21527),l=r(6475),u=r(88294),c=r(56131),f=r(56068),h=r(71299),p=r(93447),d=r(30120),v=r(62683),g=r(57060),y=r(18863),m=x;function x(t,e){var r=this;if(!(this instanceof x))return new x(t,e);\"function\"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,i=(t=e.regl)._gl,a=[];this.tooManyColors=v,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:\"uint8\",format:\"rgba\",wrapS:\"clamp\",wrapT:\"clamp\",mag:\"nearest\",min:\"nearest\"}),c(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o={uniforms:{constPointSize:!!e.constPointSize,opacity:t.prop(\"opacity\"),paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},pixelRatio:t.context(\"pixelRatio\"),scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translate:t.prop(\"translate\"),translateFract:t.prop(\"translateFract\"),markerTexture:t.prop(\"markerTexture\"),paletteTexture:n},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop(\"elements\"),count:t.prop(\"count\"),offset:t.prop(\"offset\"),primitive:\"points\"},s=c({},o);s.frag=f([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform float opacity;\\nuniform sampler2D markerTexture;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nfloat smoothStep(float x, float y) {\\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\\n}\\n\\nvoid main() {\\n  float dist = texture2D(markerTexture, gl_PointCoord).r, delta = fragWidth;\\n\\n  // max-distance alpha\\n  if (dist < 0.003) discard;\\n\\n  // null-border case\\n  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\\n    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\\n    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\\n  }\\n  else {\\n    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\\n    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\\n\\n    vec4 color = fragBorderColor;\\n    color.a *= borderColorAmt;\\n    color = mix(color, fragColor, colorAmt);\\n    color.a *= opacity;\\n\\n    gl_FragColor = color;\\n  }\\n\\n}\\n\"]),s.vert=f([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform bool constPointSize;\\nuniform float pixelRatio;\\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\\nuniform sampler2D paletteTexture;\\n\\nconst float maxSize = 100.;\\nconst float borderLevel = .5;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect = (paletteSize.x < 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(paletteTexture,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive == 0.) return;\\n\\n  vec2 position = vec2(x, y);\\n  vec2 positionFract = vec2(xFract, yFract);\\n\\n  vec4 color = getColor(colorId);\\n  vec4 borderColor = getColor(borderColorId);\\n\\n  float size = size * maxSize / 255.;\\n  float borderSize = borderSize * maxSize / 255.;\\n\\n  gl_PointSize = 2. * size * pointSizeScale;\\n  fragPointSize = size * pixelRatio;\\n\\n  vec2 pos = (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragColor = color;\\n  fragBorderColor = borderColor;\\n  fragWidth = 1. / gl_PointSize;\\n\\n  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\\n  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\\n}\"]),this.drawMarker=t(s);var l=c({},o);l.frag=f([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragBorderRadius, fragWidth;\\n\\nuniform float opacity;\\n\\nfloat smoothStep(float edge0, float edge1, float x) {\\n\\tfloat t;\\n\\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\treturn t * t * (3.0 - 2.0 * t);\\n}\\n\\nvoid main() {\\n\\tfloat radius, alpha = 1.0, delta = fragWidth;\\n\\n\\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\\n\\n\\tif (radius > 1.0 + delta) {\\n\\t\\tdiscard;\\n\\t}\\n\\n\\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\\n\\n\\tfloat borderRadius = fragBorderRadius;\\n\\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\\n\\tvec4 color = mix(fragColor, fragBorderColor, ratio);\\n\\tcolor.a *= alpha * opacity;\\n\\tgl_FragColor = color;\\n}\\n\"]),l.vert=f([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform bool constPointSize;\\nuniform float pixelRatio;\\nuniform vec2 paletteSize, scale, scaleFract, translate, translateFract;\\nuniform sampler2D paletteTexture;\\n\\nconst float maxSize = 100.;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragBorderRadius, fragWidth;\\n\\nfloat pointSizeScale = (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect = (paletteSize.x < 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(paletteTexture,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive == 0.) return;\\n\\n  vec2 position = vec2(x, y);\\n  vec2 positionFract = vec2(xFract, yFract);\\n\\n  vec4 color = getColor(colorId);\\n  vec4 borderColor = getColor(borderColorId);\\n\\n  float size = size * maxSize / 255.;\\n  float borderSize = borderSize * maxSize / 255.;\\n\\n  gl_PointSize = (size + borderSize) * pointSizeScale;\\n\\n  vec2 pos = (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position = vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\\n  fragColor = color;\\n  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\\n  fragWidth = 1. / gl_PointSize;\\n}\\n\"]),v&&(l.frag=l.frag.replace(\"smoothstep\",\"smoothStep\"),s.frag=s.frag.replace(\"smoothstep\",\"smoothStep\")),this.drawCircle=t(l)}x.defaults={color:\"black\",borderColor:\"transparent\",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},x.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},x.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var i=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var a=0;a<r.length;a++)this.drawItem(a,r[a]);else i.forEach((function(e,r){t.drawItem(r)}));return this},x.prototype.drawItem=function(t,e){var r,n=this.groups,o=n[t];if(\"number\"==typeof e&&(t=e,o=n[e],e=null),o&&o.count&&o.opacity){o.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,o,e));for(var s=[],l=1;l<o.activation.length;l++)o.activation[l]&&(!0===o.activation[l]||o.activation[l].data.length)&&s.push.apply(s,function(t){if(Array.isArray(t))return a(t)}(r=this.getMarkerDrawOptions(l,o,e))||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(r)||i(r)||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.\")}());s.length&&this.drawMarker(s)}},x.prototype.getMarkerDrawOptions=function(t,e,r){var i=e.range,a=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;if(this.regl,!a)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var f=[],h=a.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),v=0;v<r.length;v++){var g=r[v];d[g]=p?p[g]:1}l.subdata(d)}for(var y=h.length;y--;){var m=n(h[y],2),x=m[0],b=m[1];f.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return f},x.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var i=this.groups,a=this.gl,o=this.regl,l=this.maxSize,f=this.maxColors,v=this.palette;this.groups=i=r.map((function(e,r){var n=i[r];if(void 0===e)return n;null===e?e={positions:null}:\"function\"==typeof e?e={ondraw:e}:\"number\"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:\"positions data points\",snap:\"snap cluster lod tree\",size:\"sizes size radius\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",color:\"colors color fill fill-color fillColor\",borderColor:\"borderColors borderColor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range dataBox databox\",viewport:\"viewport viewPort viewBox viewbox\",opacity:\"opacity alpha transparency\",bounds:\"bound bounds boundaries limits\",tooManyColors:\"tooManyColors palette paletteMode optimizePalette enablePalette\"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(i[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:o.buffer({data:new Uint8Array(0),usage:\"stream\",type:\"uint8\"}),sizeBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),colorBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),positionBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"}),positionFractBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"})},e=c({},x.defaults,e)),e.positions&&!(\"marker\"in e)&&(e.marker=n.marker,delete n.marker),e.marker&&!(\"positions\"in e)&&(e.positions=n.positions,delete n.positions);var m=0,b=0;if(p(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=x.defaults.size),m+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=x.defaults.borderSize),m+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=x.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=x.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return\"range\"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,i=e.positionBuffer,a=e.positionFractBuffer,l=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:o.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:o.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=d(t,\"float64\");var c=e.count=Math.floor(t.length/2),f=e.bounds=c?s(t,2):null;if(r.range||e.range||(delete e.range,r.range=f),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||c>n)?e.tree=u(t,{bounds:f}):n&&n.length&&(e.tree=n),e.tree){var h={primitive:\"points\",usage:\"static\",data:e.tree,type:\"uint32\"};e.elements?e.elements(h):e.elements=o.elements(h)}var p=g.float32(t);return i({data:p,usage:\"dynamic\"}),a({data:g.fract32(t,p),usage:\"dynamic\"}),l({data:new Uint8Array(c),type:\"uint8\",usage:\"stream\"}),t}},{marker:function(e,r,n){var i=r.activation;if(i.forEach((function(t){return t&&t.destroy&&t.destroy()})),i.length=0,e&&\"number\"!=typeof e[0]){for(var a=[],s=0,l=Math.min(e.length,r.count);s<l;s++){var u=t.addMarker(e[s]);a[u]||(a[u]=new Uint8Array(r.count)),a[u][s]=1}for(var c=0;c<a.length;c++)if(a[c]){var f={data:a[c],type:\"uint8\",usage:\"static\"};i[c]?i[c](f):i[c]=o.buffer(f),i[c].data=a[c]}}else i[t.addMarker(e)]=!0;return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return y(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),m){var _=n,w=_.count,T=_.size,k=_.borderSize,A=_.sizeBuffer,M=new Uint8Array(2*w);if(T.length||k.length)for(var S=0;S<w;S++)M[2*S]=Math.round(255*(null==T[S]?T:T[S])/l),M[2*S+1]=Math.round(255*(null==k[S]?k:k[S])/l);A({data:M,usage:\"dynamic\"})}if(b){var E,L=n,C=L.count,P=L.color,O=L.borderColor,I=L.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*C);for(var D=0;D<C;D++){var z=P[D];E[8*D]=v[4*z],E[8*D+1]=v[4*z+1],E[8*D+2]=v[4*z+2],E[8*D+3]=v[4*z+3];var R=O[D];E[8*D+4]=v[4*R],E[8*D+5]=v[4*R+1],E[8*D+6]=v[4*R+2],E[8*D+7]=v[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*C+2);for(var F=0;F<C;F++)null!=P[F]&&(E[4*F]=P[F]%f,E[4*F+1]=Math.floor(P[F]/f)),null!=O[F]&&(E[4*F+2]=O[F]%f,E[4*F+3]=Math.floor(O[F]/f))}I({data:E||new Uint8Array(0),type:\"uint8\",usage:\"dynamic\"})}return n}))}},x.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,i=this.markerCache,a=null==t?0:i.indexOf(t);if(a>=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return a=r.length,i.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:\"linear\",min:\"linear\"})),a},x.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var i=[];if(\"number\"==typeof t[0]){var a=[];if(Array.isArray(t))for(var s=0;s<t.length;s+=4)a.push(t.slice(s,s+4));else for(var u=0;u<t.length;u+=4)a.push(t.subarray(u,u+4));t=a}for(var c=0;c<t.length;c++){var f=t[c];f=o(f,\"uint8\");var h=l(f,!1);if(null==e[h]){var p=r.length;e[h]=Math.floor(p/4),r[p]=f[0],r[p+1]=f[1],r[p+2]=f[2],r[p+3]=f[3]}i[c]=e[h]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===i.length?i[0]:i},x.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var i=.25*(t=t.slice()).length%e;i<n*e;i++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},x.prototype.destroy=function(){return this.groups.forEach((function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach((function(t){return t&&t.destroy&&t.destroy()})),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()})),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach((function(t){return t&&t.destroy&&t.destroy()})),this};var b=r(56131);t.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return b(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},60487:function(t,e,r){\"use strict\";var n=r(11870),i=r(71299),a=r(21527),o=r(5877),s=r(57471),l=r(18863),u=r(30120);function c(t,e){if(!(this instanceof c))return new c(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function f(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function h(t,e,r){var n,i,a,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],i=s[3]):s.length?(n=s[0],i=s[1]):(s.x,n=s.y,s.x,s.width,i=s.y+s.height),l.length>2?(a=l[0],o=l[2],l[1],l[3]):l.length?(a=l[0],o=l[1]):(a=l.x,l.y,o=l.x+l.width,l.y,l.height),[a,n,o,i]}function p(t){if(\"number\"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}t.exports=c,c.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o((function(){e.draw(),e.dirty=!0,e.planned=null}))):(this.draw(),this.dirty=!0,o((function(){e.dirty=!1}))),this)},c.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var i=[],a=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,u=0;u<l.length;u++)i.push(this.passes[l[u]]);s.passOffset=a,a+=s.passes.length}return(t=this.scatter).update.apply(t,i),this}},c.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=i(e,{data:\"data items columns rows values dimensions samples x\",snap:\"snap cluster\",size:\"sizes size radius\",color:\"colors color fill fill-color fillColor\",opacity:\"opacity alpha transparency opaque\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",borderColor:\"borderColors borderColor bordercolor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range ranges databox dataBox\",viewport:\"viewport viewBox viewbox\",domain:\"domain domains area areas\",padding:\"pad padding paddings pads margin margins\",transpose:\"transpose transposed\",diagonal:\"diagonal diag showDiagonal\",upper:\"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf\",lower:\"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower\"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),color:\"black\",marker:null,size:12,borderColor:\"transparent\",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(u(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var c=0;c<s.columns;c++)s.bounds[c]=a(o.data[c],1)}o.range&&(s.range=o.range,n=s.range&&\"number\"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&\"number\"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var v=s.columns,g=s.count,y=s.viewport.width,m=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=y/v,w=m/v;s.passes=[];for(var T=0;T<v;T++)for(var k=0;k<v;k++)if((s.diagonal||k!==T)&&(s.upper||!(T>k))&&(s.lower||!(T<k))){var A=f(s.id,T,k),M=this.passes[A]||(this.passes[A]={});if(o.data&&(o.transpose?M.positions={x:{buffer:s.buffer,offset:k,count:g,stride:v},y:{buffer:s.buffer,offset:T,count:g,stride:v}}:M.positions={x:{buffer:s.buffer,offset:k*g,count:g},y:{buffer:s.buffer,offset:T*g,count:g}},M.bounds=h(s.bounds,T,k)),o.domain||o.viewport||o.data){var S=d?h(s.padding,T,k):s.padding;if(s.domain){var E=h(s.domain,T,k),L=E[0],C=E[1],P=E[2],O=E[3];M.viewport=[x+L*y+S[0],b+C*m+S[1],x+P*y-S[2],b+O*m-S[3]]}else M.viewport=[x+k*_+_*S[0],b+T*w+w*S[1],x+(k+1)*_-_*S[2],b+(T+1)*w-w*S[3]]}o.color&&(M.color=s.color),o.size&&(M.size=s.size),o.marker&&(M.marker=s.marker),o.borderSize&&(M.borderSize=s.borderSize),o.borderColor&&(M.borderColor=s.borderColor),o.opacity&&(M.opacity=s.opacity),o.range&&(M.range=n?h(s.range,T,k):s.range||M.bounds),s.passes.push(A)}return this},c.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],i=0;i<e.length;i++)if(\"number\"==typeof e[i]){var a=this.traces[e[i]],o=a.passes,l=a.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[i].length){var u=e[i],c=this.traces[i],f=c.passes,h=c.passOffset;f=f.map((function(t,e){n[h+e]=u}))}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},c.prototype.destroy=function(){return this.traces.forEach((function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()})),this.traces=null,this.passes=null,this.scatter.destroy(),this}},98580:function(t){t.exports=function(){function t(t,e){this.id=Z++,this.type=t,this.data=e}function e(t){if(0===t.length)return[];var r=t.charAt(0),n=t.charAt(t.length-1);if(1<t.length&&r===n&&('\"'===r||\"'\"===r))return['\"'+t.substr(1,t.length-2).replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')+'\"'];if(r=/\\[(false|true|null|\\d+|'[^']*'|\"[^\"]*\")\\]/.exec(t))return e(t.substr(0,r.index)).concat(e(r[1])).concat(e(t.substr(r.index+r[0].length)));if(1===(r=t.split(\".\")).length)return['\"'+t.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"')+'\"'];for(t=[],n=0;n<r.length;++n)t=t.concat(e(r[n]));return t}function r(t){return\"[\"+e(t).join(\"][\")+\"]\"}function n(t){return\"string\"==typeof t?t.split():t}function i(t){return\"string\"==typeof t?document.querySelector(t):t}function a(t){var e,r,a,o,s=t||{};t={};var l=[],u=[],c=\"undefined\"==typeof window?1:window.devicePixelRatio,f=!1,h={},p=function(t){},d=function(){};if(\"string\"==typeof s?e=document.querySelector(s):\"object\"==typeof s&&(\"string\"==typeof s.nodeName&&\"function\"==typeof s.appendChild&&\"function\"==typeof s.getBoundingClientRect?e=s:\"function\"==typeof s.drawArrays||\"function\"==typeof s.drawElements?a=(o=s).canvas:(\"gl\"in s?o=s.gl:\"canvas\"in s?a=i(s.canvas):\"container\"in s&&(r=i(s.container)),\"attributes\"in s&&(t=s.attributes),\"extensions\"in s&&(l=n(s.extensions)),\"optionalExtensions\"in s&&(u=n(s.optionalExtensions)),\"onDone\"in s&&(p=s.onDone),\"profile\"in s&&(f=!!s.profile),\"pixelRatio\"in s&&(c=+s.pixelRatio),\"cachedCode\"in s&&(h=s.cachedCode))),e&&(\"canvas\"===e.nodeName.toLowerCase()?a=e:r=e),!o){if(!a){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=a.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),a.width=r*e,a.height=r*n}var i,a=document.createElement(\"canvas\");return G(a.style,{border:0,margin:0,padding:0,top:0,left:0,width:\"100%\",height:\"100%\"}),t.appendChild(a),t===document.body&&(a.style.position=\"absolute\",G(t.style,{margin:0,padding:0})),t!==document.body&&\"function\"==typeof ResizeObserver?(i=new ResizeObserver((function(){setTimeout(n)}))).observe(t):window.addEventListener(\"resize\",n,!1),n(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener(\"resize\",n),t.removeChild(a)}}}(r||document.body,0,c)))return null;a=e.canvas,d=e.onDestroy}void 0===t.premultipliedAlpha&&(t.premultipliedAlpha=!0),o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r(\"webgl\")||r(\"experimental-webgl\")||r(\"webgl-experimental\")}(a,t)}return o?{gl:o,canvas:a,container:r,extensions:l,optionalExtensions:u,pixelRatio:c,profile:f,cachedCode:h,onDone:p,onDestroy:d}:(d(),p(\"webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org\"),null)}function o(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function s(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function l(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[s(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[s(t.byteLength)>>2].push(t)}var r=o(8,(function(){return[]}));return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function u(t){return!!t&&\"object\"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&\"number\"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||$(t.data))}function c(t,e,r,n,i,a){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var u=s[l],c=0;c<n;++c)i[a++]=u[c]}function f(t,e,r,n,i){for(var a=1,o=r+1;o<e.length;++o)a*=e[o];var s=e[r];if(4==e.length-r){var l=e[r+1],u=e[r+2];for(e=e[r+3],o=0;o<s;++o)c(t[o],l,u,e,n,i),i+=a}else for(o=0;o<s;++o)f(t[o],e,r+1,n,i),i+=a}function h(t){return 0|et[Object.prototype.toString.call(t)]}function p(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function d(t,e,r,n,i,a,o){for(var s=0,l=0;l<r;++l)for(var u=0;u<n;++u)t[s++]=e[i*l+a*u+o]}function v(t,e,r,n){function i(e){this.id=l++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function a(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,i,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){i=at(e);for(var s=n=1;s<i.length;++s)n*=i[s];t.dimension=n,a(t,e=it(e,i,t.dtype),r),o?t.persistentData=e:J.freeType(e)}else\"number\"==typeof e[0]?(t.dimension=i,p(i=J.allocType(t.dtype,e.length),e),a(t,i,r),o?t.persistentData=i:J.freeType(i)):$(e[0])&&(t.dimension=e[0].length,t.dtype=n||h(e[0])||5126,a(t,e=it(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:J.freeType(e))}else if($(e))t.dtype=n||h(e),t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(u(e)){i=e.shape;var l=e.stride,c=(s=e.offset,0),f=0,v=0,g=0;1===i.length?(c=i[0],f=1,v=l[0],g=0):2===i.length&&(c=i[0],f=i[1],v=l[0],g=l[1]),t.dtype=n||h(e.data)||5126,t.dimension=f,d(i=J.allocType(t.dtype,c*f),e.data,c,f,v,g,s),a(t,i,r),o?t.persistentData=i:J.freeType(i)}else e instanceof ArrayBuffer&&(t.dtype=5121,t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e))))}function s(r){e.bufferCount--,n(r),t.deleteBuffer(r.buffer),r.buffer=null,delete c[r.id]}var l=0,c={};i.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy=function(){s(this)};var f=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(n,a,l,f){function v(e){var n=35044,i=null,a=0,s=0,l=1;return Array.isArray(e)||$(e)||u(e)||e instanceof ArrayBuffer?i=e:\"number\"==typeof e?a=0|e:e&&(\"data\"in e&&(i=e.data),\"usage\"in e&&(n=nt[e.usage]),\"type\"in e&&(s=rt[e.type]),\"dimension\"in e&&(l=0|e.dimension),\"length\"in e&&(a=0|e.length)),g.bind(),i?o(g,i,n,s,l,f):(a&&t.bufferData(g.type,a,n),g.dtype=s||5121,g.usage=n,g.dimension=l,g.byteLength=a),r.profile&&(g.stats.size=g.byteLength*ot[g.dtype]),v}e.bufferCount++;var g=new i(a);return c[g.id]=g,l||v(n),v._reglType=\"buffer\",v._buffer=g,v.subdata=function(e,r){var n,i=0|(r||0);if(g.bind(),$(e)||e instanceof ArrayBuffer)t.bufferSubData(g.type,i,e);else if(Array.isArray(e)){if(0<e.length)if(\"number\"==typeof e[0]){var a=J.allocType(g.dtype,e.length);p(a,e),t.bufferSubData(g.type,i,a),J.freeType(a)}else(Array.isArray(e[0])||$(e[0]))&&(n=at(e),a=it(e,n,g.dtype),t.bufferSubData(g.type,i,a),J.freeType(a))}else if(u(e)){n=e.shape;var o=e.stride,s=a=0,l=0,c=0;1===n.length?(a=n[0],s=1,l=o[0],c=0):2===n.length&&(a=n[0],s=n[1],l=o[0],c=o[1]),n=Array.isArray(e.data)?g.dtype:h(e.data),d(n=J.allocType(n,a*s),e.data,a,s,l,c,e.offset),t.bufferSubData(g.type,i,n),J.freeType(n)}return v},r.profile&&(v.stats=g.stats),v.destroy=function(){s(g)},v},createStream:function(t,e){var r=f.pop();return r||(r=new i(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){f.push(t)},clear:function(){Q(c).forEach(s),f.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof i?t._buffer:null},restore:function(){Q(c).forEach((function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)}))},_initBuffer:o}}function g(t,e,r,n){function i(t){this.id=l++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function a(n,i,a,o,s,l,c){var f;if(n.buffer.bind(),i?((f=c)||$(i)&&(!u(i)||$(i.data))||(f=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,i,a,f,3)):(t.bufferData(34963,l,a),n.buffer.dtype=f||5121,n.buffer.usage=a,n.buffer.dimension=3,n.buffer.byteLength=l),f=c,!c){switch(n.buffer.dtype){case 5121:case 5120:f=5121;break;case 5123:case 5122:f=5123;break;case 5125:case 5124:f=5125}n.buffer.dtype=f}n.type=f,0>(i=s)&&(i=n.buffer.byteLength,5123===f?i>>=1:5125===f&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},l=0,c={uint8:5121,uint16:5123};e.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var f=[];return{create:function(t,e){function s(t){if(t)if(\"number\"==typeof t)l(t),f.primType=4,f.vertCount=0|t,f.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,h=0;Array.isArray(t)||$(t)||u(t)?e=t:(\"data\"in t&&(e=t.data),\"usage\"in t&&(r=nt[t.usage]),\"primitive\"in t&&(n=st[t.primitive]),\"count\"in t&&(i=0|t.count),\"type\"in t&&(h=c[t.type]),\"length\"in t?o=0|t.length:(o=i,5123===h||5122===h?o*=2:5125!==h&&5124!==h||(o*=4))),a(f,e,r,n,i,o,h)}else l(),f.primType=4,f.vertCount=0,f.type=5121;return s}var l=r.create(null,34963,!0),f=new i(l._buffer);return n.elementsCount++,s(t),s._reglType=\"elements\",s._elements=f,s.subdata=function(t,e){return l.subdata(t,e),s},s.destroy=function(){o(f)},s},createStream:function(t){var e=f.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return\"function\"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){Q(s).forEach(o)}}}function y(t){for(var e=J.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{lt[0]=t[r];var n=(a=ut[0])>>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15<i?n+31744:n+(i+15<<10)+a}return e}function m(t){return Array.isArray(t)||$(t)}function x(t){return\"[object \"+t+\"]\"}function b(t){return Array.isArray(t)&&(0===t.length||\"number\"==typeof t[0])}function _(t){return!(!Array.isArray(t)||0===t.length||!m(t[0]))}function w(t){return Object.prototype.toString.call(t)}function T(t){if(!t)return!1;var e=w(t);return 0<=xt.indexOf(e)||b(t)||_(t)||u(t)}function k(t,e){36193===t.type?(t.data=y(e),J.freeType(e)):t.data=e}function A(t,e,r,n,i,a){if(t=void 0!==_t[t]?_t[t]:ht[t]*bt[e],a&&(t*=6),i){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function M(t,e,r,n,i,a,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function l(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function c(t,e){if(\"object\"==typeof e&&e){\"premultiplyAlpha\"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),\"flipY\"in e&&(t.flipY=e.flipY),\"alignment\"in e&&(t.unpackAlignment=e.alignment),\"colorSpace\"in e&&(t.colorSpace=V[e.colorSpace]),\"type\"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,i=t.channels,a=!1;\"shape\"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(i=e.shape[2],a=!0)):(\"radius\"in e&&(r=n=e.radius),\"width\"in e&&(r=e.width),\"height\"in e&&(n=e.height),\"channels\"in e&&(i=e.channels,a=!0)),t.width=0|r,t.height=0|n,t.channels=0|i,r=!1,\"format\"in e&&(r=e.format,n=t.internalformat=q[r],t.format=at[n],r in H&&!(\"type\"in e)&&(t.type=H[r]),r in Z&&(t.compressed=!0),r=!0),!a&&r?t.channels=ht[t.format]:a&&!r&&t.channels!==ft[t.format]&&(t.format=t.internalformat=ft[t.channels])}}function f(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function h(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(T(e)?r=e:e&&(c(t,e),\"x\"in e&&(t.xOffset=0|e.x),\"y\"in e&&(t.yOffset=0|e.y),T(e.data)&&(r=e.data)),e.copy){var n=i.viewportWidth,a=i.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||a-t.yOffset,t.needsCopy=!0}else if(r){if($(r))t.channels=t.channels||4,t.data=r,\"type\"in e||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(r)]);else if(b(r)){switch(t.channels=t.channels||4,a=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(a=J.allocType(t.type,a)).set(n),t.data=a;break;case 36193:t.data=y(n)}t.alignment=1,t.needsFree=!0}else if(u(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|et[Object.prototype.toString.call(n)]),a=r.shape;var o,s,l,f,h=r.stride;3===a.length?(l=a[2],f=h[2]):f=l=1,o=a[0],s=a[1],a=h[0],h=h[1],t.alignment=1,t.width=o,t.height=s,t.channels=l,t.format=t.internalformat=ft[l],t.needsFree=!0,o=f,r=r.offset,l=t.width,f=t.height,s=t.channels;for(var p=J.allocType(36193===t.type?5126:t.type,l*f*s),d=0,v=0;v<f;++v)for(var g=0;g<l;++g)for(var x=0;x<s;++x)p[d++]=n[a*g+h*v+o*x+r];k(t,p)}else if(w(r)===pt||w(r)===dt||w(r)===vt)w(r)===pt||w(r)===dt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(w(r)===gt)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(w(r)===yt)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(w(r)===mt)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(_(r)){for(n=t.width||r[0].length,a=t.height||r.length,h=t.channels,h=m(r[0][0])?h||r[0][0].length:h||1,o=tt.shape(r),l=1,f=0;f<o.length;++f)l*=o[f];l=J.allocType(36193===t.type?5126:t.type,l),tt.flatten(r,o,\"\",l),k(t,l),t.alignment=1,t.width=n,t.height=a,t.channels=h,t.format=t.internalformat=ft[h],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,i,a,o){var s=e.element,l=e.data,u=e.internalformat,c=e.format,h=e.type,p=e.width,d=e.height;f(e),s?t.texSubImage2D(r,o,i,a,c,h,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,u,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,i,a,p,d,c,h,l)}function v(){return ot.pop()||new h}function g(t){t.needsFree&&J.freeType(t.data),h.call(t),ot.push(t)}function x(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function M(t,e,r){var n=t.images[0]=v();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(T(e))l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;else if(c(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,i=0;i<n.length;++i)l(r=t.images[i]=v(),t),r.width>>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<<i;else l(r=t.images[0]=v(),t),p(r,e),t.mipmask=1;l(t,t.images[0])}function E(e,r){for(var i=e.images,a=0;a<i.length&&i[a];++a){var o=i[a],s=r,l=a,u=o.element,c=o.data,h=o.internalformat,p=o.format,d=o.type,v=o.width,g=o.height;f(o),u?t.texImage2D(s,l,p,p,d,u):o.compressed?t.compressedTexImage2D(s,l,h,v,g,0,c):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,v,g,0)):t.texImage2D(s,l,p,v,g,0,p,d,c||null)}}function L(){var t=st.pop()||new x;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function C(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&g(e[r]),e[r]=null;st.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){\"min\"in e&&(t.minFilter=U[e.min],0<=ct.indexOf(t.minFilter)&&!(\"faces\"in e)&&(t.genMipmaps=!0)),\"mag\"in e&&(t.magFilter=j[e.mag]);var r=t.wrapS,n=t.wrapT;if(\"wrap\"in e){var i=e.wrap;\"string\"==typeof i?r=n=N[i]:Array.isArray(i)&&(r=N[i[0]],n=N[i[1]])}else\"wrapS\"in e&&(r=N[e.wrapS]),\"wrapT\"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,\"anisotropic\"in e&&(t.anisotropic=e.anisotropic),\"mipmap\"in e){switch(r=!1,typeof e.mipmap){case\"string\":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case\"boolean\":r=t.genMipmaps=e.mipmap;break;case\"object\":t.genMipmaps=!1,r=!0}!r||\"min\"in e||(t.minFilter=9984)}}function I(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function D(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=lt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function z(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=bt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,i=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(i,null),bt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete ut[e.id],a.textureCount--}var B={\"don't care\":4352,\"dont care\":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},j={nearest:9728,linear:9729},U=G({mipmap:9987,\"nearest mipmap nearest\":9984,\"linear mipmap nearest\":9985,\"nearest mipmap linear\":9986,\"linear mipmap linear\":9987},j),V={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,\"rgb5 a1\":32820},q={alpha:6406,luminance:6409,\"luminance alpha\":6410,rgb:6407,rgba:6408,rgba4:32854,\"rgb5 a1\":32855,rgb565:36194},Z={};e.ext_srgb&&(q.srgb=35904,q.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H[\"half float\"]=36193),e.webgl_depth_texture&&(G(q,{depth:6402,\"depth stencil\":34041}),G(H,{uint16:5123,uint32:5125,\"depth stencil\":34042})),e.webgl_compressed_texture_s3tc&&G(Z,{\"rgb s3tc dxt1\":33776,\"rgba s3tc dxt1\":33777,\"rgba s3tc dxt3\":33778,\"rgba s3tc dxt5\":33779}),e.webgl_compressed_texture_atc&&G(Z,{\"rgb atc\":35986,\"rgba atc explicit alpha\":35987,\"rgba atc interpolated alpha\":34798}),e.webgl_compressed_texture_pvrtc&&G(Z,{\"rgb pvrtc 4bppv1\":35840,\"rgb pvrtc 2bppv1\":35841,\"rgba pvrtc 4bppv1\":35842,\"rgba pvrtc 2bppv1\":35843}),e.webgl_compressed_texture_etc1&&(Z[\"rgb etc1\"]=36196);var Y=Array.prototype.slice.call(t.getParameter(34467));Object.keys(Z).forEach((function(t){var e=Z[t];0<=Y.indexOf(e)&&(q[t]=e)}));var W=Object.keys(q);r.textureFormats=W;var X=[];Object.keys(q).forEach((function(t){X[q[t]]=t}));var K=[];Object.keys(H).forEach((function(t){K[H[t]]=t}));var rt=[];Object.keys(j).forEach((function(t){rt[j[t]]=t}));var nt=[];Object.keys(U).forEach((function(t){nt[U[t]]=t}));var it=[];Object.keys(N).forEach((function(t){it[N[t]]=t}));var at=W.reduce((function(t,r){var n=q[r];return 6409===n||6406===n||6409===n||6410===n||6402===n||34041===n||e.ext_srgb&&(35904===n||35906===n)?t[n]=n:32855===n||0<=r.indexOf(\"rgba\")?t[n]=6408:t[n]=6407,t}),{}),ot=[],st=[],lt=0,ut={},xt=r.maxTextureUnits,bt=Array(xt).map((function(){return null}));return G(D.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<xt;++r){var n=bt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}bt[r]=this,e=r;break}o.profile&&a.maxTextureUnits<e+1&&(a.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(ut).forEach((function(e){t+=ut[e].stats.size})),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;P.call(r);var a=L();return\"number\"==typeof t?M(a,0|t,\"number\"==typeof e?0|e:0|t):t?(O(r,t),S(a,t)):M(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,l(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,z(i),E(a,3553),I(r,3553),R(),C(a),o.profile&&(i.stats.size=A(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=X[i.internalformat],n.type=K[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new D(3553);return ut[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=v();return l(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,z(i),d(o,3553,e,r,a),R(),g(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,z(i);for(var l=0;i.mipmask>>l;++l){var u=a>>l,c=s>>l;if(!u||!c)break;t.texImage2D(3553,l,i.format,u,c,0,i.format,i.type,null)}return R(),o.profile&&(i.stats.size=A(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType=\"texture2d\",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,u){function f(t,e,r,n,i,a){var s,u=h.texInfo;for(P.call(u),s=0;6>s;++s)y[s]=L();if(\"number\"!=typeof t&&t){if(\"object\"==typeof t)if(e)S(y[0],t),S(y[1],e),S(y[2],r),S(y[3],n),S(y[4],i),S(y[5],a);else if(O(u,t),c(h,t),\"faces\"in t)for(t=t.faces,s=0;6>s;++s)l(y[s],h),S(y[s],t[s]);else for(s=0;6>s;++s)S(y[s],t)}else for(t=0|t||1,s=0;6>s;++s)M(y[s],t,t);for(l(h,y[0]),h.mipmask=u.genMipmaps?(y[0].width<<1)-1:y[0].mipmask,h.internalformat=y[0].internalformat,f.width=y[0].width,f.height=y[0].height,z(h),s=0;6>s;++s)E(y[s],34069+s);for(I(u,34067),R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,u.genMipmaps,!0)),f.format=X[h.internalformat],f.type=K[h.type],f.mag=rt[u.magFilter],f.min=nt[u.minFilter],f.wrapS=it[u.wrapS],f.wrapT=it[u.wrapT],s=0;6>s;++s)C(y[s]);return f}var h=new D(34067);ut[h.id]=h,a.cubeCount++;var y=Array(6);return f(e,r,n,i,s,u),f.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=v();return l(a,h),a.width=0,a.height=0,p(a,e),a.width=a.width||(h.width>>i)-r,a.height=a.height||(h.height>>i)-n,z(h),d(a,34069+t,r,n,i),R(),g(a),f},f.resize=function(e){if((e|=0)!==h.width){f.width=h.width=e,f.height=h.height=e,z(h);for(var r=0;6>r;++r)for(var n=0;h.mipmask>>n;++n)t.texImage2D(34069+r,n,h.format,e>>n,e>>n,0,h.format,h.type,null);return R(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType=\"textureCube\",f._texture=h,o.profile&&(f.stats=h.stats),f.destroy=function(){h.decRef()},f},clear:function(){for(var e=0;e<xt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),bt[e]=null;Q(ut).forEach(F),a.cubeCount=0,a.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null)}Q(ut).forEach((function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);I(e.texInfo,e.target)}))},refresh:function(){for(var e=0;e<xt;++e){var r=bt[e];r&&(r.bindCount=0,r.unit=-1,bt[e]=null),t.activeTexture(33984+e),t.bindTexture(3553,null),t.bindTexture(34067,null)}}}}function S(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function u(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=3553,r=null,n=null,i=t;return\"object\"==typeof t&&(i=t.data,\"target\"in t&&(e=0|t.target)),\"texture2d\"===(t=i._reglType)||\"textureCube\"===t?r=i:\"renderbuffer\"===t&&(n=i,e=36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function h(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=T++,k[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function v(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete k[e.id]}function y(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;n<i.length;++n)u(36064+n,i[n]);for(n=i.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),u(36096,e.depthAttachment),u(36128,e.stencilAttachment),u(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function m(t,e){function r(t,e){var i,a=0,o=0,s=!0,u=!0;i=null;var p=!0,d=\"rgba\",g=\"uint8\",m=1,x=null,w=null,T=null,k=!1;\"number\"==typeof t?(a=0|t,o=0|e||a):t?(\"shape\"in t?(a=(o=t.shape)[0],o=o[1]):(\"radius\"in t&&(a=o=t.radius),\"width\"in t&&(a=t.width),\"height\"in t&&(o=t.height)),(\"color\"in t||\"colors\"in t)&&(i=t.color||t.colors,Array.isArray(i)),i||(\"colorCount\"in t&&(m=0|t.colorCount),\"colorTexture\"in t&&(p=!!t.colorTexture,d=\"rgba4\"),\"colorType\"in t&&(g=t.colorType,!p)&&(\"half float\"===g||\"float16\"===g?d=\"rgba16f\":\"float\"!==g&&\"float32\"!==g||(d=\"rgba32f\")),\"colorFormat\"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),(\"depthTexture\"in t||\"depthStencilTexture\"in t)&&(k=!(!t.depthTexture&&!t.depthStencilTexture)),\"depth\"in t&&(\"boolean\"==typeof t.depth?s=t.depth:(x=t.depth,u=!1)),\"stencil\"in t&&(\"boolean\"==typeof t.stencil?u=t.stencil:(w=t.stencil,s=!1)),\"depthStencil\"in t&&(\"boolean\"==typeof t.depthStencil?s=u=t.depthStencil:(T=t.depthStencil,u=s=!1))):a=o=1;var A=null,M=null,S=null,E=null;if(Array.isArray(i))A=i.map(c);else if(i)A=[c(i)];else for(A=Array(m),i=0;i<m;++i)A[i]=f(a,o,p,d,g);for(a=a||A[0].width,o=o||A[0].height,x?M=c(x):s&&!u&&(M=f(a,o,k,\"depth\",\"uint32\")),w?S=c(w):u&&!s&&(S=f(a,o,!1,\"stencil\",\"uint8\")),T?E=c(T):!x&&!w&&u&&s&&(E=f(a,o,k,\"depth stencil\",\"depth stencil\")),s=null,i=0;i<A.length;++i)l(A[i]),A[i]&&A[i].texture&&(u=kt[A[i].texture._texture.format]*At[A[i].texture._texture.type],null===s&&(s=u));return l(M),l(S),l(E),v(n),n.width=a,n.height=o,n.colorAttachments=A,n.depthAttachment=M,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=A.map(h),r.depth=h(M),r.stencil=h(S),r.depthStencil=h(E),r.width=n.width,r.height=n.height,y(n),r}var n=new d;return a.framebufferCount++,r(t,e),G(r,{resize:function(t,e){var i=Math.max(0|t,1),a=Math.max(0|e||i,1);if(i===n.width&&a===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],i,a);return p(n.depthAttachment,i,a),p(n.stencilAttachment,i,a),p(n.depthStencilAttachment,i,a),n.width=r.width=i,n.height=r.height=a,y(n),r},_reglType:\"framebuffer\",_framebuffer:n,destroy:function(){g(n),v(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=[\"rgba\"],_=[\"rgba4\",\"rgb565\",\"rgb5 a1\"];e.ext_srgb&&_.push(\"srgba\"),e.ext_color_buffer_half_float&&_.push(\"rgba16f\",\"rgb16f\"),e.webgl_color_buffer_float&&_.push(\"rgba32f\");var w=[\"uint8\"];e.oes_texture_half_float&&w.push(\"half float\",\"float16\"),e.oes_texture_float&&w.push(\"float\",\"float32\");var T=0,k={};return G(x,{getFramebuffer:function(t){return\"function\"==typeof t&&\"framebuffer\"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:m,createCube:function(t){function e(t){var i,a={color:null},o=0,s=null;i=\"rgba\";var l=\"uint8\",u=1;if(\"number\"==typeof t?o=0|t:t?(\"shape\"in t?o=t.shape[0]:(\"radius\"in t&&(o=0|t.radius),\"width\"in t?o=0|t.width:\"height\"in t&&(o=0|t.height)),(\"color\"in t||\"colors\"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||(\"colorCount\"in t&&(u=0|t.colorCount),\"colorType\"in t&&(l=t.colorType),\"colorFormat\"in t&&(i=t.colorFormat)),\"depth\"in t&&(a.depth=t.depth),\"stencil\"in t&&(a.stencil=t.stencil),\"depthStencil\"in t&&(a.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],i=0;i<s.length;++i)t[i]=s[i];else t=[s];else for(t=Array(u),s={radius:o,format:i,type:l},i=0;i<u;++i)t[i]=n.createCube(s);for(a.color=Array(t.length),i=0;i<t.length;++i)u=t[i],o=o||u.width,a.color[i]={target:34069,data:t[i]};for(i=0;6>i;++i){for(u=0;u<t.length;++u)a.color[u].target=34069+i;0<i&&(a.depth=r[0].depth,a.stencil=r[0].stencil,a.depthStencil=r[0].depthStencil),r[i]?r[i](a):r[i]=m(a)}return G(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),G(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var i=e.color;for(t=0;t<i.length;++t)i[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:\"framebufferCube\",destroy:function(){r.forEach((function(t){t.destroy()}))}})},clear:function(){Q(k).forEach(g)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,Q(k).forEach((function(e){e.framebuffer=t.createFramebuffer(),y(e)}))}})}function E(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function L(t,e,r,n,i,a,o){function s(){this.id=++f,this.attributes=[],this.elements=null,this.ownsElements=!1,this.offset=this.count=0,this.instances=-1,this.primitive=4;var t=e.oes_vertex_array_object;this.vao=t?t.createVertexArrayOES():null,h[this.id]=this,this.buffers=[]}var l=r.maxAttributes,c=Array(l);for(r=0;r<l;++r)c[r]=new E;var f=0,h={},p={Record:E,scope:{},state:c,currentVAO:null,targetVAO:null,restore:e.oes_vertex_array_object?function(){e.oes_vertex_array_object&&Q(h).forEach((function(t){t.refresh()}))}:function(){},createVAO:function(t){function e(t){var n;Array.isArray(t)?(n=t,r.elements&&r.ownsElements&&r.elements.destroy(),r.elements=null,r.ownsElements=!1,r.offset=0,r.count=0,r.instances=-1,r.primitive=4):(t.elements?(n=t.elements,r.ownsElements?(\"function\"==typeof n&&\"elements\"===n._reglType?r.elements.destroy():r.elements(n),r.ownsElements=!1):a.getElements(t.elements)?(r.elements=t.elements,r.ownsElements=!1):(r.elements=a.create(t.elements),r.ownsElements=!0)):(r.elements=null,r.ownsElements=!1),n=t.attributes,r.offset=0,r.count=-1,r.instances=-1,r.primitive=4,r.elements&&(r.count=r.elements._elements.vertCount,r.primitive=r.elements._elements.primType),\"offset\"in t&&(r.offset=0|t.offset),\"count\"in t&&(r.count=0|t.count),\"instances\"in t&&(r.instances=0|t.instances),\"primitive\"in t&&(r.primitive=st[t.primitive])),t={};var o=r.attributes;o.length=n.length;for(var s=0;s<n.length;++s){var l,c=n[s],f=o[s]=new E,h=c.data||c;Array.isArray(h)||$(h)||u(h)?(r.buffers[s]&&(l=r.buffers[s],$(h)&&l._buffer.byteLength>=h.byteLength?l.subdata(h):(l.destroy(),r.buffers[s]=null)),r.buffers[s]||(l=r.buffers[s]=i.create(c,34962,!1,!0)),f.buffer=i.getBuffer(l),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1,t[s]=1):i.getBuffer(c)?(f.buffer=i.getBuffer(c),f.size=0|f.buffer.dimension,f.normalized=!1,f.type=f.buffer.dtype,f.offset=0,f.stride=0,f.divisor=0,f.state=1):i.getBuffer(c.buffer)?(f.buffer=i.getBuffer(c.buffer),f.size=0|(+c.size||f.buffer.dimension),f.normalized=!!c.normalized||!1,f.type=\"type\"in c?rt[c.type]:f.buffer.dtype,f.offset=0|(c.offset||0),f.stride=0|(c.stride||0),f.divisor=0|(c.divisor||0),f.state=1):\"x\"in c&&(f.x=+c.x||0,f.y=+c.y||0,f.z=+c.z||0,f.w=+c.w||0,f.state=2)}for(l=0;l<r.buffers.length;++l)!t[l]&&r.buffers[l]&&(r.buffers[l].destroy(),r.buffers[l]=null);return r.refresh(),e}var r=new s;return n.vaoCount+=1,e.destroy=function(){for(var t=0;t<r.buffers.length;++t)r.buffers[t]&&r.buffers[t].destroy();r.buffers.length=0,r.ownsElements&&(r.elements.destroy(),r.elements=null,r.ownsElements=!1),r.destroy()},e._vao=r,e._reglType=\"vao\",e(t)},getVAO:function(t){return\"function\"==typeof t&&t._vao?t._vao:null},destroyBuffer:function(e){for(var r=0;r<c.length;++r){var n=c[r];n.buffer===e&&(t.disableVertexAttribArray(r),n.buffer=null)}},setVAO:e.oes_vertex_array_object?function(t){if(t!==p.currentVAO){var r=e.oes_vertex_array_object;t?r.bindVertexArrayOES(t.vao):r.bindVertexArrayOES(null),p.currentVAO=t}}:function(r){if(r!==p.currentVAO){if(r)r.bindAttrs();else{for(var n=e.angle_instanced_arrays,i=0;i<c.length;++i){var a=c[i];a.buffer?(t.enableVertexAttribArray(i),a.buffer.bind(),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offfset),n&&a.divisor&&n.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}o.elements?t.bindBuffer(34963,o.elements.buffer.buffer):t.bindBuffer(34963,null)}p.currentVAO=r}},clear:e.oes_vertex_array_object?function(){Q(h).forEach((function(t){t.destroy()}))}:function(){}};return s.prototype.bindAttrs=function(){for(var r=e.angle_instanced_arrays,n=this.attributes,i=0;i<n.length;++i){var o=n[i];o.buffer?(t.enableVertexAttribArray(i),t.bindBuffer(34962,o.buffer.buffer),t.vertexAttribPointer(i,o.size,o.type,o.normalized,o.stride,o.offset),r&&o.divisor&&r.vertexAttribDivisorANGLE(i,o.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,o.x,o.y,o.z,o.w))}for(r=n.length;r<l;++r)t.disableVertexAttribArray(r);(r=a.getElements(this.elements))?t.bindBuffer(34963,r.buffer.buffer):t.bindBuffer(34963,null)},s.prototype.refresh=function(){var t=e.oes_vertex_array_object;t&&(t.bindVertexArrayOES(this.vao),this.bindAttrs(),p.currentVAO=null,t.bindVertexArrayOES(null))},s.prototype.destroy=function(){if(this.vao){var t=e.oes_vertex_array_object;this===p.currentVAO&&(p.currentVAO=null,t.bindVertexArrayOES(null)),t.deleteVertexArrayOES(this.vao),this.vao=null}this.ownsElements&&(this.elements.destroy(),this.elements=null,this.ownsElements=!1),h[this.id]&&(delete h[this.id],--n.vaoCount)},p}function C(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,i){if(!(o=(i=35632===r?u:c)[n])){var a=e.str(n),o=t.createShader(r);t.shaderSource(o,a),t.compileShader(o),i[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],this.refCount=1,n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s,l){var u;u=o(35632,r.fragId);var c=o(35633,r.vertId);if(s=r.program=t.createProgram(),t.attachShader(s,u),t.attachShader(s,c),l)for(u=0;u<l.length;++u)c=l[u],t.bindAttribLocation(s,c[0],c[1]);t.linkProgram(s),c=t.getProgramParameter(s,35718),n.profile&&(r.stats.uniformsCount=c);var f=r.uniforms;for(u=0;u<c;++u)if(l=t.getActiveUniform(s,u))if(1<l.size)for(var h=0;h<l.size;++h){var p=l.name.replace(\"[0]\",\"[\"+h+\"]\");a(f,new i(p,e.id(p),t.getUniformLocation(s,p),l))}else a(f,new i(l.name,e.id(l.name),t.getUniformLocation(s,l.name),l));for(c=t.getProgramParameter(s,35721),n.profile&&(r.stats.attributesCount=c),r=r.attributes,u=0;u<c;++u)(l=t.getActiveAttrib(s,u))&&a(r,new i(l.name,e.id(l.name),t.getAttribLocation(s,l.name),l))}var u={},c={},f={},h=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return h.forEach((function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)})),t},r.getMaxAttributesCount=function(){var t=0;return h.forEach((function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)})),t}),{clear:function(){var e=t.deleteShader.bind(t);Q(u).forEach(e),u={},Q(c).forEach(e),c={},h.forEach((function(e){t.deleteProgram(e.program)})),h.length=0,f={},r.shaderCount=0},program:function(e,n,i,a){var o=f[n];o||(o=f[n]={});var p=o[e];if(p&&(p.refCount++,!a))return p;var d=new s(n,e);return r.shaderCount++,l(d,i,a),p||(o[e]=d),h.push(d),G(d,{destroy:function(){if(d.refCount--,0>=d.refCount){t.deleteProgram(d.program);var e=h.indexOf(d);h.splice(e,1),r.shaderCount--}0>=o[d.vertId].refCount&&(t.deleteShader(c[d.vertId]),delete c[d.vertId],delete f[d.fragId][d.vertId]),Object.keys(f[d.fragId]).length||(t.deleteShader(u[d.fragId]),delete u[d.fragId],delete f[d.fragId])}})},restore:function(){u={},c={};for(var t=0;t<h.length;++t)l(h[t],null,h[t].attributes.map((function(t){return[t.location,t.name]})))},shader:o,frag:-1,vert:-1}}function P(t,e,r,n,i,a,o){function s(i){var a;a=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,u=n.framebufferHeight,c=null;return $(i)?c=i:i&&(o=0|i.x,s=0|i.y,l=0|(i.width||n.framebufferWidth-o),u=0|(i.height||n.framebufferHeight-s),c=i.data||null),r(),i=l*u*4,c||(5121===a?c=new Uint8Array(i):5126===a&&(c=c||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,u,6408,a,c),c}return function(t){return t&&\"framebuffer\"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},(function(){r=s(t)})),r}(t):s(t)}}function O(t,e){return t>>>e|t<<32-e}function I(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}function D(t){return Array.prototype.slice.call(t)}function z(t){return D(t).join(\"\")}function R(t){function e(){var t=[],e=[];return G((function(){t.push.apply(t,D(arguments))}),{def:function(){var r=\"v\"+i++;return e.push(r),0<arguments.length&&(t.push(r,\"=\"),t.push.apply(t,D(arguments)),t.push(\";\")),r},toString:function(){return z([0<e.length?\"var \"+e.join(\",\")+\";\":\"\",z(t)])}})}function r(){function t(t,e){n(t,e,\"=\",r.def(t,e),\";\")}var r=e(),n=e(),i=r.toString,a=n.toString;return G((function(){r.apply(r,D(arguments))}),{def:r.def,entry:r,exit:n,save:t,set:function(e,n,i){t(e,n),r(e,n,\"=\",i,\";\")},toString:function(){return i()+a()}})}var n=t&&t.cache,i=0,a=[],o=[],s=[],l=e(),u={};return{global:l,link:function(t,e){var r=e&&e.stable;if(!r)for(var n=0;n<o.length;++n)if(o[n]===t&&!s[n])return a[n];return n=\"g\"+i++,a.push(n),o.push(t),s.push(r),n},block:e,proc:function(t,e){function n(){var t=\"a\"+i.length;return i.push(t),t}var i=[];e=e||0;for(var a=0;a<e;++a)n();var o=(a=r()).toString;return u[t]=G(a,{arg:n,toString:function(){return z([\"function(\",i.join(),\"){\",o(),\"}\"])}})},scope:r,cond:function(){var t=z(arguments),e=r(),n=r(),i=e.toString,a=n.toString;return G(e,{then:function(){return e.apply(e,D(arguments)),this},else:function(){return n.apply(n,D(arguments)),this},toString:function(){var e=a();return e&&(e=\"else{\"+e+\"}\"),z([\"if(\",t,\"){\",i(),\"}\",e])}})},compile:function(){var t=['\"use strict\";',l,\"return {\"];Object.keys(u).forEach((function(e){t.push('\"',e,'\":',u[e].toString(),\",\")})),t.push(\"}\");var e,r=z(t).replace(/;/g,\";\\n\").replace(/}/g,\"}\\n\").replace(/{/g,\"{\\n\");return n&&(e=function(t){for(var e,r=\"\",n=0;n<t.length;n++)e=t.charCodeAt(n),r+=\"0123456789abcdef\".charAt(e>>>4&15)+\"0123456789abcdef\".charAt(15&e);return r}(function(t){for(var e=Array(t.length>>2),r=0;r<e.length;r++)e[r]=0;for(r=0;r<8*t.length;r+=8)e[r>>5]|=(255&t.charCodeAt(r/8))<<24-r%32;var n,i,a,o,s,l,u,c,f,h,p,d=8*t.length;for(t=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],r=Array(64),e[d>>5]|=128<<24-d%32,e[15+(d+64>>9<<4)]=d,c=0;c<e.length;c+=16){for(d=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=t[5],l=t[6],u=t[7],f=0;64>f;f++){var v;16>f?r[f]=e[f+c]:(h=f,p=I(p=O(p=r[f-2],17)^O(p,19)^p>>>10,r[f-7]),v=O(v=r[f-15],7)^O(v,18)^v>>>3,r[h]=I(I(p,v),r[f-16])),h=I(I(I(I(u,h=O(h=o,6)^O(h,11)^O(h,25)),o&s^~o&l),Mt[f]),r[f]),p=I(u=O(u=d,2)^O(u,13)^O(u,22),d&n^d&i^n&i),u=l,l=s,s=o,o=I(a,h),a=i,i=n,n=d,d=I(h,p)}t[0]=I(d,t[0]),t[1]=I(n,t[1]),t[2]=I(i,t[2]),t[3]=I(a,t[3]),t[4]=I(o,t[4]),t[5]=I(s,t[5]),t[6]=I(l,t[6]),t[7]=I(u,t[7])}for(e=\"\",r=0;r<32*t.length;r+=8)e+=String.fromCharCode(t[r>>5]>>>24-r%32&255);return e}(function(t){for(var e,r,n=\"\",i=-1;++i<t.length;)e=t.charCodeAt(i),r=i+1<t.length?t.charCodeAt(i+1):0,55296<=e&&56319>=e&&56320<=r&&57343>=r&&(e=65536+((1023&e)<<10)+(1023&r),i++),127>=e?n+=String.fromCharCode(e):2047>=e?n+=String.fromCharCode(192|e>>>6&31,128|63&e):65535>=e?n+=String.fromCharCode(224|e>>>12&15,128|e>>>6&63,128|63&e):2097151>=e&&(n+=String.fromCharCode(240|e>>>18&7,128|e>>>12&63,128|e>>>6&63,128|63&e));return n}(r))),n[e])?n[e].apply(null,o):(r=Function.apply(null,a.concat(r)),n&&(n[e]=r),r.apply(null,o))}}}function F(t){return Array.isArray(t)||$(t)||u(t)}function B(t){return t.sort((function(t,e){return\"viewport\"===t?-1:\"viewport\"===e?1:t<e?-1:1}))}function N(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function j(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function U(t){return new N(!1,!1,!1,t)}function V(t,e){var r=t.type;if(0===r)return new N(!0,1<=(r=t.data.length),2<=r,e);if(4===r)return new N((r=t.data).thisDep,r.contextDep,r.propDep,e);if(5===r)return new N(!1,!1,!1,e);if(6===r){for(var n=r=!1,i=!1,a=0;a<t.data.length;++a){var o=t.data[a];1===o.type?i=!0:2===o.type?n=!0:3===o.type?r=!0:0===o.type?(r=!0,1<=(o=o.data)&&(n=!0),2<=o&&(i=!0)):4===o.type&&(r=r||o.data.thisDep,n=n||o.data.contextDep,i=i||o.data.propDep)}return new N(r,n,i,e)}return new N(3===r,2===r,1===r,e)}function H(t,e,r,n,i,a,s,l,u,c,f,h,p,d,v,g){function y(t){return t.replace(\".\",\"_\")}function x(t,e,r){var n=y(t);at.push(t),it[n]=nt[n]=!!r,ot[n]=e}function b(t,e,r){var n=y(t);at.push(t),Array.isArray(r)?(nt[n]=r.slice(),it[n]=r.slice()):nt[n]=it[n]=r,lt[n]=e}function _(){var t=R({cache:v}),r=t.link,n=t.global;t.id=ft++,t.batchId=\"0\";var i=r(ut),a=t.shared={props:\"a0\"};Object.keys(ut).forEach((function(t){a[t]=n.def(i,\".\",t)}));var o=t.next={},s=t.current={};Object.keys(lt).forEach((function(t){Array.isArray(nt[t])&&(o[t]=n.def(a.next,\".\",t),s[t]=n.def(a.current,\".\",t))}));var l=t.constants={};Object.keys(ct).forEach((function(t){l[t]=n.def(JSON.stringify(ct[t]))})),t.invoke=function(e,n){switch(n.type){case 0:var i=[\"this\",a.context,a.props,t.batchId];return e.def(r(n.data),\".call(\",i.slice(0,Math.max(n.data.length+1,4)),\")\");case 1:return e.def(a.props,n.data);case 2:return e.def(a.context,n.data);case 3:return e.def(\"this\",n.data);case 4:return n.data.append(t,e),n.data.ref;case 5:return n.data.toString();case 6:return n.data.map((function(r){return t.invoke(e,r)}))}},t.attribCache={};var u={};return t.scopeAttrib=function(t){if((t=e.id(t))in u)return u[t];var n=c.scope[t];return n||(n=c.scope[t]=new K),u[t]=r(n)},t}function w(t,e){var r=t.static,n=t.dynamic;if(\"framebuffer\"in r){var i=r.framebuffer;return i?(i=l.getFramebuffer(i),U((function(t,e){var r=t.link(i),n=t.shared;return e.set(n.framebuffer,\".next\",r),n=n.context,e.set(n,\".framebufferWidth\",r+\".width\"),e.set(n,\".framebufferHeight\",r+\".height\"),r}))):U((function(t,e){var r=t.shared;return e.set(r.framebuffer,\".next\",\"null\"),r=r.context,e.set(r,\".framebufferWidth\",r+\".drawingBufferWidth\"),e.set(r,\".framebufferHeight\",r+\".drawingBufferHeight\"),\"null\"}))}if(\"framebuffer\"in n){var a=n.framebuffer;return V(a,(function(t,e){var r=t.invoke(e,a),n=t.shared,i=n.framebuffer;return r=e.def(i,\".getFramebuffer(\",r,\")\"),e.set(i,\".next\",r),n=n.context,e.set(n,\".framebufferWidth\",r+\"?\"+r+\".width:\"+n+\".drawingBufferWidth\"),e.set(n,\".framebufferHeight\",r+\"?\"+r+\".height:\"+n+\".drawingBufferHeight\"),r}))}return null}function T(t,r,n){function i(t){if(t in a){var r=e.id(a[t]);return(t=U((function(){return r}))).id=r,t}if(t in o){var n=o[t];return V(n,(function(t,e){var r=t.invoke(e,n);return e.def(t.shared.strings,\".id(\",r,\")\")}))}return null}var a=t.static,o=t.dynamic,s=i(\"frag\"),l=i(\"vert\"),u=null;return j(s)&&j(l)?(u=f.program(l.id,s.id,null,n),t=U((function(t,e){return t.link(u)}))):t=new N(s&&s.thisDep||l&&l.thisDep,s&&s.contextDep||l&&l.contextDep,s&&s.propDep||l&&l.propDep,(function(t,e){var r,n,i=t.shared.shader;return r=s?s.append(t,e):e.def(i,\".\",\"frag\"),n=l?l.append(t,e):e.def(i,\".\",\"vert\"),e.def(i+\".program(\"+n+\",\"+r+\")\")})),{frag:s,vert:l,progVar:t,program:u}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return e?o.offset=r:o.instances=r,U((function(t,n){return e&&(t.OFFSET=r),r}))}if(t in i){var a=i[t];return V(a,(function(t,r){var n=t.invoke(r,a);return e&&(t.OFFSET=n),n}))}if(e){if(u)return U((function(t,e){return t.OFFSET=0}));if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\".currentVAO?\"+t.shared.vao+\".currentVAO.offset:0\")}))}else if(s)return new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\".currentVAO?\"+t.shared.vao+\".currentVAO.instances:-1\")}));return null}var n=t.static,i=t.dynamic,o={},s=!1,l=function(){if(\"vao\"in n){var t=n.vao;return null!==t&&null===c.getVAO(t)&&(t=c.createVAO(t)),s=!0,o.vao=t,U((function(e){var r=c.getVAO(t);return r?e.link(r):\"null\"}))}if(\"vao\"in i){s=!0;var e=i.vao;return V(e,(function(t,r){var n=t.invoke(r,e);return r.def(t.shared.vao+\".getVAO(\"+n+\")\")}))}return null}(),u=!1,f=function(){if(\"elements\"in n){var t=n.elements;if(o.elements=t,F(t)){var e=o.elements=a.create(t,!0);t=a.getElements(e),u=!0}else t&&(t=a.getElements(t),u=!0);return e=U((function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null})),e.value=t,e}if(\"elements\"in i){u=!0;var r=i.elements;return V(r,(function(t,e){var n=(i=t.shared).isBufferArgs,i=i.elements,a=t.invoke(e,r),o=e.def(\"null\");return n=e.def(n,\"(\",a,\")\"),a=t.cond(n).then(o,\"=\",i,\".createStream(\",a,\");\").else(o,\"=\",i,\".getElements(\",a,\");\"),e.entry(a),e.exit(t.cond(n).then(i,\".destroyStream(\",o,\");\")),t.ELEMENTS=o}))}return s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\".currentVAO?\"+t.shared.elements+\".getElements(\"+t.shared.vao+\".currentVAO.elements):null\")})):null}(),h=r(\"offset\",!0),p=function(){if(\"primitive\"in n){var t=n.primitive;return o.primitive=t,U((function(e,r){return st[t]}))}if(\"primitive\"in i){var e=i.primitive;return V(e,(function(t,r){var n=t.constants.primTypes,i=t.invoke(r,e);return r.def(n,\"[\",i,\"]\")}))}return u?j(f)?f.value?U((function(t,e){return e.def(t.ELEMENTS,\".primType\")})):U((function(){return 4})):new N(f.thisDep,f.contextDep,f.propDep,(function(t,e){var r=t.ELEMENTS;return e.def(r,\"?\",r,\".primType:\",4)})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao+\".currentVAO?\"+t.shared.vao+\".currentVAO.primitive:4\")})):null}(),d=function(){if(\"count\"in n){var t=0|n.count;return o.count=t,U((function(){return t}))}if(\"count\"in i){var e=i.count;return V(e,(function(t,r){return t.invoke(r,e)}))}return u?j(f)?f?h?new N(h.thisDep,h.contextDep,h.propDep,(function(t,e){return e.def(t.ELEMENTS,\".vertCount-\",t.OFFSET)})):U((function(t,e){return e.def(t.ELEMENTS,\".vertCount\")})):U((function(){return-1})):new N(f.thisDep||h.thisDep,f.contextDep||h.contextDep,f.propDep||h.propDep,(function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,\"?\",r,\".vertCount-\",t.OFFSET,\":-1\"):e.def(r,\"?\",r,\".vertCount:-1\")})):s?new N(l.thisDep,l.contextDep,l.propDep,(function(t,e){return e.def(t.shared.vao,\".currentVAO?\",t.shared.vao,\".currentVAO.count:-1\")})):null}(),v=r(\"instances\",!1);return{elements:f,primitive:p,count:d,instances:v,offset:h,vao:l,vaoActive:s,elementsActive:u,static:o}}function A(t,r){var n=t.static,a=t.dynamic,o={};return Object.keys(n).forEach((function(t){var r=n[t],a=e.id(t),s=new K;if(F(r))s.state=1,s.buffer=i.getBuffer(i.create(r,34962,!1,!0)),s.type=0;else if(u=i.getBuffer(r))s.state=1,s.buffer=u,s.type=0;else if(\"constant\"in r){var l=r.constant;s.buffer=\"null\",s.state=2,\"number\"==typeof l?s.x=l:St.forEach((function(t,e){e<l.length&&(s[t]=l[e])}))}else{var u=F(r.buffer)?i.getBuffer(i.create(r.buffer,34962,!1,!0)):i.getBuffer(r.buffer),c=0|r.offset,f=0|r.stride,h=0|r.size,p=!!r.normalized,d=0;\"type\"in r&&(d=rt[r.type]),r=0|r.divisor,s.buffer=u,s.state=1,s.size=h,s.normalized=p,s.type=d||u.dtype,s.offset=c,s.stride=f,s.divisor=r}o[t]=U((function(t,e){var r=t.attribCache;if(a in r)return r[a];var n={isStream:!1};return Object.keys(s).forEach((function(t){n[t]=s[t]})),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+\".dtype\"),r[a]=n}))})),Object.keys(a).forEach((function(t){var e=a[t];o[t]=V(e,(function(t,r){function n(t){r(l[t],\"=\",i,\".\",t,\"|0;\")}var i=t.invoke(r,e),a=t.shared,o=t.constants,s=a.isBufferArgs,l=(a=a.buffer,{isStream:r.def(!1)}),u=new K;u.state=1,Object.keys(u).forEach((function(t){l[t]=r.def(\"\"+u[t])}));var c=l.buffer,f=l.type;return r(\"if(\",s,\"(\",i,\")){\",l.isStream,\"=true;\",c,\"=\",a,\".createStream(\",34962,\",\",i,\");\",f,\"=\",c,\".dtype;\",\"}else{\",c,\"=\",a,\".getBuffer(\",i,\");\",\"if(\",c,\"){\",f,\"=\",c,\".dtype;\",'}else if(\"constant\" in ',i,\"){\",l.state,\"=\",2,\";\",\"if(typeof \"+i+'.constant === \"number\"){',l[St[0]],\"=\",i,\".constant;\",St.slice(1).map((function(t){return l[t]})).join(\"=\"),\"=0;\",\"}else{\",St.map((function(t,e){return l[t]+\"=\"+i+\".constant.length>\"+e+\"?\"+i+\".constant[\"+e+\"]:0;\"})).join(\"\"),\"}}else{\",\"if(\",s,\"(\",i,\".buffer)){\",c,\"=\",a,\".createStream(\",34962,\",\",i,\".buffer);\",\"}else{\",c,\"=\",a,\".getBuffer(\",i,\".buffer);\",\"}\",f,'=\"type\" in ',i,\"?\",o.glTypes,\"[\",i,\".type]:\",c,\".dtype;\",l.normalized,\"=!!\",i,\".normalized;\"),n(\"size\"),n(\"offset\"),n(\"stride\"),n(\"divisor\"),r(\"}}\"),r.exit(\"if(\",l.isStream,\"){\",a,\".destroyStream(\",c,\");\",\"}\"),l}))})),o}function M(t,e,n,i,a){function s(t){var e=u[t];e&&(h[t]=e)}var l=function(t,e){if(\"string\"==typeof(r=t.static).frag&&\"string\"==typeof r.vert){if(0<Object.keys(e.dynamic).length)return null;var r=e.static,n=Object.keys(r);if(0<n.length&&\"number\"==typeof r[n[0]]){for(var i=[],a=0;a<n.length;++a)i.push([0|r[n[a]],n[a]]);return i}}return null}(t,e),u=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return\"width\"in r?n=0|r.width:t=!1,\"height\"in r?o=0|r.height:t=!1,new N(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,(function(t,e){var i=t.shared.context,a=n;\"width\"in r||(a=e.def(i,\".\",\"framebufferWidth\",\"-\",s));var u=o;return\"height\"in r||(u=e.def(i,\".\",\"framebufferHeight\",\"-\",l)),[s,l,a,u]}))}if(t in a){var u=a[t];return t=V(u,(function(t,e){var r=t.invoke(e,u),n=t.shared.context,i=e.def(r,\".x|0\"),a=e.def(r,\".y|0\");return[i,a,e.def('\"width\" in ',r,\"?\",r,\".width|0:\",\"(\",n,\".\",\"framebufferWidth\",\"-\",i,\")\"),r=e.def('\"height\" in ',r,\"?\",r,\".height|0:\",\"(\",n,\".\",\"framebufferHeight\",\"-\",a,\")\")]})),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new N(e.thisDep,e.contextDep,e.propDep,(function(t,e){var r=t.shared.context;return[0,0,e.def(r,\".\",\"framebufferWidth\"),e.def(r,\".\",\"framebufferHeight\")]})):null}var i=t.static,a=t.dynamic;if(t=n(\"viewport\")){var o=t;t=new N(t.thisDep,t.contextDep,t.propDep,(function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,\".viewportWidth\",r[2]),e.set(n,\".viewportHeight\",r[3]),r}))}return{viewport:t,scissor_box:n(\"scissor.box\")}}(t,d=w(t)),f=k(t),h=function(t,e){var r=t.static,n=t.dynamic,i={};return at.forEach((function(t){function e(e,o){if(t in r){var s=e(r[t]);i[a]=U((function(){return s}))}else if(t in n){var l=n[t];i[a]=V(l,(function(t,e){return o(t,e,t.invoke(e,l))}))}}var a=y(t);switch(t){case\"cull.enable\":case\"blend.enable\":case\"dither\":case\"stencil.enable\":case\"depth.enable\":case\"scissor.enable\":case\"polygonOffset.enable\":case\"sample.alpha\":case\"sample.enable\":case\"depth.mask\":case\"lineWidth\":return e((function(t){return t}),(function(t,e,r){return r}));case\"depth.func\":return e((function(t){return Ct[t]}),(function(t,e,r){return e.def(t.constants.compareFuncs,\"[\",r,\"]\")}));case\"depth.range\":return e((function(t){return t}),(function(t,e,r){return[e.def(\"+\",r,\"[0]\"),e=e.def(\"+\",r,\"[1]\")]}));case\"blend.func\":return e((function(t){return[Lt[\"srcRGB\"in t?t.srcRGB:t.src],Lt[\"dstRGB\"in t?t.dstRGB:t.dst],Lt[\"srcAlpha\"in t?t.srcAlpha:t.src],Lt[\"dstAlpha\"in t?t.dstAlpha:t.dst]]}),(function(t,e,r){function n(t,n){return e.def('\"',t,n,'\" in ',r,\"?\",r,\".\",t,n,\":\",r,\".\",t)}t=t.constants.blendFuncs;var i=n(\"src\",\"RGB\"),a=n(\"dst\",\"RGB\"),o=(i=e.def(t,\"[\",i,\"]\"),e.def(t,\"[\",n(\"src\",\"Alpha\"),\"]\"));return[i,a=e.def(t,\"[\",a,\"]\"),o,t=e.def(t,\"[\",n(\"dst\",\"Alpha\"),\"]\")]}));case\"blend.equation\":return e((function(t){return\"string\"==typeof t?[$[t],$[t]]:\"object\"==typeof t?[$[t.rgb],$[t.alpha]]:void 0}),(function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond(\"typeof \",r,'===\"string\"')).then(i,\"=\",a,\"=\",n,\"[\",r,\"];\"),t.else(i,\"=\",n,\"[\",r,\".rgb];\",a,\"=\",n,\"[\",r,\".alpha];\"),e(t),[i,a]}));case\"blend.color\":return e((function(t){return o(4,(function(e){return+t[e]}))}),(function(t,e,r){return o(4,(function(t){return e.def(\"+\",r,\"[\",t,\"]\")}))}));case\"stencil.mask\":return e((function(t){return 0|t}),(function(t,e,r){return e.def(r,\"|0\")}));case\"stencil.func\":return e((function(t){return[Ct[t.cmp||\"keep\"],t.ref||0,\"mask\"in t?t.mask:-1]}),(function(t,e,r){return[t=e.def('\"cmp\" in ',r,\"?\",t.constants.compareFuncs,\"[\",r,\".cmp]\",\":\",7680),e.def(r,\".ref|0\"),e=e.def('\"mask\" in ',r,\"?\",r,\".mask|0:-1\")]}));case\"stencil.opFront\":case\"stencil.opBack\":return e((function(e){return[\"stencil.opBack\"===t?1029:1028,Pt[e.fail||\"keep\"],Pt[e.zfail||\"keep\"],Pt[e.zpass||\"keep\"]]}),(function(e,r,n){function i(t){return r.def('\"',t,'\" in ',n,\"?\",a,\"[\",n,\".\",t,\"]:\",7680)}var a=e.constants.stencilOps;return[\"stencil.opBack\"===t?1029:1028,i(\"fail\"),i(\"zfail\"),i(\"zpass\")]}));case\"polygonOffset.offset\":return e((function(t){return[0|t.factor,0|t.units]}),(function(t,e,r){return[e.def(r,\".factor|0\"),e=e.def(r,\".units|0\")]}));case\"cull.face\":return e((function(t){var e=0;return\"front\"===t?e=1028:\"back\"===t&&(e=1029),e}),(function(t,e,r){return e.def(r,'===\"front\"?',1028,\":\",1029)}));case\"frontFace\":return e((function(t){return Ot[t]}),(function(t,e,r){return e.def(r+'===\"cw\"?2304:2305')}));case\"colorMask\":return e((function(t){return t.map((function(t){return!!t}))}),(function(t,e,r){return o(4,(function(t){return\"!!\"+r+\"[\"+t+\"]\"}))}));case\"sample.coverage\":return e((function(t){return[\"value\"in t?t.value:1,!!t.invert]}),(function(t,e,r){return[e.def('\"value\" in ',r,\"?+\",r,\".value:1\"),e=e.def(\"!!\",r,\".invert\")]}))}})),i}(t),p=T(t,0,l);s(\"viewport\"),s(y(\"scissor.box\"));var d,v=0<Object.keys(h).length;if((d={framebuffer:d,draw:f,shader:p,state:h,dirty:v,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}}).profile=function(t){var e,r=t.static;if(t=t.dynamic,\"profile\"in r){var n=!!r.profile;(e=U((function(t,e){return n}))).enable=n}else if(\"profile\"in t){var i=t.profile;e=V(i,(function(t,e){return t.invoke(e,i)}))}return e}(t),d.uniforms=function(t,e){var r=t.static,n=t.dynamic,i={};return Object.keys(r).forEach((function(t){var e,n=r[t];if(\"number\"==typeof n||\"boolean\"==typeof n)e=U((function(){return n}));else if(\"function\"==typeof n){var a=n._reglType;\"texture2d\"===a||\"textureCube\"===a?e=U((function(t){return t.link(n)})):\"framebuffer\"!==a&&\"framebufferCube\"!==a||(e=U((function(t){return t.link(n.color[0])})))}else m(n)&&(e=U((function(t){return t.global.def(\"[\",o(n.length,(function(t){return n[t]})),\"]\")})));e.value=n,i[t]=e})),Object.keys(n).forEach((function(t){var e=n[t];i[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),i}(n),d.drawVAO=d.scopeVAO=f.vao,!d.drawVAO&&p.program&&!l&&r.angle_instanced_arrays&&f.static.elements){var g=!0;if(t=p.program.attributes.map((function(t){return t=e.static[t],g=g&&!!t,t})),g&&0<t.length){var x=c.getVAO(c.createVAO({attributes:t,elements:f.static.elements}));d.drawVAO=new N(null,null,null,(function(t,e){return t.link(x)})),d.useVAO=!0}}return l?d.useVAO=!0:d.attributes=A(e),d.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach((function(t){var r=e[t];n[t]=U((function(t,e){return\"number\"==typeof r||\"boolean\"==typeof r?\"\"+r:t.link(r)}))})),Object.keys(r).forEach((function(t){var e=r[t];n[t]=V(e,(function(t,r){return t.invoke(r,e)}))})),n}(i),d}function S(t,e,r){var n=t.shared.context,i=t.scope();Object.keys(r).forEach((function(a){e.save(n,\".\"+a);var o=r[a].append(t,e);Array.isArray(o)?i(n,\".\",a,\"=[\",o.join(),\"];\"):i(n,\".\",a,\"=\",o,\";\")})),e(i)}function E(t,e,r,n){var i,a=(s=t.shared).gl,o=s.framebuffer;tt&&(i=e.def(s.extensions,\".webgl_draw_buffers\"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,\".next\"),n||e(\"if(\",t,\"!==\",o,\".cur){\"),e(\"if(\",t,\"){\",a,\".bindFramebuffer(\",36160,\",\",t,\".framebuffer);\"),tt&&e(i,\".drawBuffersWEBGL(\",s,\"[\",t,\".colorAttachments.length]);\"),e(\"}else{\",a,\".bindFramebuffer(\",36160,\",null);\"),tt&&e(i,\".drawBuffersWEBGL(\",l,\");\"),e(\"}\",o,\".cur=\",t,\";\"),n||e(\"}\")}function L(t,e,r){var n=t.shared,i=n.gl,a=t.current,s=t.next,l=n.current,u=n.next,c=t.cond(l,\".dirty\");at.forEach((function(e){var n,f;if(!((e=y(e))in r.state))if(e in s){n=s[e],f=a[e];var h=o(nt[e].length,(function(t){return c.def(n,\"[\",t,\"]\")}));c(t.cond(h.map((function(t,e){return t+\"!==\"+f+\"[\"+e+\"]\"})).join(\"||\")).then(i,\".\",lt[e],\"(\",h,\");\",h.map((function(t,e){return f+\"[\"+e+\"]=\"+t})).join(\";\"),\";\"))}else n=c.def(u,\".\",e),h=t.cond(n,\"!==\",l,\".\",e),c(h),e in ot?h(t.cond(n).then(i,\".enable(\",ot[e],\");\").else(i,\".disable(\",ot[e],\");\"),l,\".\",e,\"=\",n,\";\"):h(i,\".\",lt[e],\"(\",n,\");\",l,\".\",e,\"=\",n,\";\")})),0===Object.keys(r.state).length&&c(l,\".dirty=false;\"),e(c)}function C(t,e,r,n){var i,a=t.shared,o=t.current,s=a.current,l=a.gl;B(Object.keys(r)).forEach((function(a){var u=r[a];if(!n||n(u)){var c=u.append(t,e);if(ot[a]){var f=ot[a];j(u)?(i=t.link(c,{stable:!0}),e(t.cond(i).then(l,\".enable(\",f,\");\").else(l,\".disable(\",f,\");\")),e(s,\".\",a,\"=\",i,\";\")):(e(t.cond(c).then(l,\".enable(\",f,\");\").else(l,\".disable(\",f,\");\")),e(s,\".\",a,\"=\",c,\";\"))}else if(m(c)){var h=o[a];e(l,\".\",lt[a],\"(\",c,\");\",c.map((function(t,e){return h+\"[\"+e+\"]=\"+t})).join(\";\"),\";\")}else j(u)?(i=t.link(c,{stable:!0}),e(l,\".\",lt[a],\"(\",i,\");\",s,\".\",a,\"=\",i,\";\")):e(l,\".\",lt[a],\"(\",c,\");\",s,\".\",a,\"=\",c,\";\")}}))}function P(t,e){Q&&(t.instancing=e.def(t.shared.extensions,\".angle_instanced_arrays\"))}function O(t,e,r,n,i){function a(){return\"undefined\"==typeof performance?\"Date.now()\":\"performance.now()\"}function o(t){t(u=e.def(),\"=\",a(),\";\"),\"string\"==typeof i?t(h,\".count+=\",i,\";\"):t(h,\".count++;\"),d&&(n?t(c=e.def(),\"=\",v,\".getNumPendingQueries();\"):t(v,\".beginQuery(\",h,\");\"))}function s(t){t(h,\".cpuTime+=\",a(),\"-\",u,\";\"),d&&(n?t(v,\".pushScopeStats(\",c,\",\",v,\".getNumPendingQueries(),\",h,\");\"):t(v,\".endQuery();\"))}function l(t){var r=e.def(p,\".profile\");e(p,\".profile=\",t,\";\"),e.exit(p,\".profile=\",r,\";\")}var u,c,f=t.shared,h=t.stats,p=f.current,v=f.timer;if(r=r.profile){if(j(r))return void(r.enable?(o(e),s(e.exit),l(\"true\")):l(\"false\"));l(r=r.append(t,e))}else r=e.def(p,\".profile\");o(f=t.block()),e(\"if(\",r,\"){\",f,\"}\"),s(t=t.block()),e.exit(\"if(\",r,\"){\",t,\"}\")}function I(t,e,r,n,i){function a(r,n,i){function a(){e(\"if(!\",c,\".buffer){\",l,\".enableVertexAttribArray(\",u,\");}\");var r,a=i.type;r=i.size?e.def(i.size,\"||\",n):n,e(\"if(\",c,\".type!==\",a,\"||\",c,\".size!==\",r,\"||\",p.map((function(t){return c+\".\"+t+\"!==\"+i[t]})).join(\"||\"),\"){\",l,\".bindBuffer(\",34962,\",\",f,\".buffer);\",l,\".vertexAttribPointer(\",[u,r,a,i.normalized,i.stride,i.offset],\");\",c,\".type=\",a,\";\",c,\".size=\",r,\";\",p.map((function(t){return c+\".\"+t+\"=\"+i[t]+\";\"})).join(\"\"),\"}\"),Q&&(a=i.divisor,e(\"if(\",c,\".divisor!==\",a,\"){\",t.instancing,\".vertexAttribDivisorANGLE(\",[u,a],\");\",c,\".divisor=\",a,\";}\"))}function s(){e(\"if(\",c,\".buffer){\",l,\".disableVertexAttribArray(\",u,\");\",c,\".buffer=null;\",\"}if(\",St.map((function(t,e){return c+\".\"+t+\"!==\"+h[e]})).join(\"||\"),\"){\",l,\".vertexAttrib4f(\",u,\",\",h,\");\",St.map((function(t,e){return c+\".\"+t+\"=\"+h[e]+\";\"})).join(\"\"),\"}\")}var l=o.gl,u=e.def(r,\".location\"),c=e.def(o.attributes,\"[\",u,\"]\");r=i.state;var f=i.buffer,h=[i.x,i.y,i.z,i.w],p=[\"buffer\",\"normalized\",\"offset\",\"stride\"];1===r?a():2===r?s():(e(\"if(\",r,\"===\",1,\"){\"),a(),e(\"}else{\"),s(),e(\"}\"))}var o=t.shared;n.forEach((function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!i(l))return;o=l.append(t,e)}else{if(!i(It))return;var u=t.scopeAttrib(s);o={},Object.keys(new K).forEach((function(t){o[t]=e.def(u,\".\",t)}))}a(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)}))}function D(t,r,n,i,a,s){for(var l,u=t.shared,c=u.gl,f=0;f<i.length;++f){var h,p=(g=i[f]).name,d=g.info.type,v=n.uniforms[p],g=t.link(g)+\".location\";if(v){if(!a(v))continue;if(j(v)){if(p=v.value,35678===d||35680===d)r(c,\".uniform1i(\",g,\",\",(d=t.link(p._texture||p.color[0]._texture))+\".bind());\"),r.exit(d,\".unbind();\");else if(35674===d||35675===d||35676===d)v=2,35675===d?v=3:35676===d&&(v=4),r(c,\".uniformMatrix\",v,\"fv(\",g,\",false,\",p=t.global.def(\"new Float32Array([\"+Array.prototype.slice.call(p)+\"])\"),\");\");else{switch(d){case 5126:l=\"1f\";break;case 35664:l=\"2f\";break;case 35665:l=\"3f\";break;case 35666:l=\"4f\";break;case 35670:case 5124:l=\"1i\";break;case 35671:case 35667:l=\"2i\";break;case 35672:case 35668:l=\"3i\";break;case 35673:case 35669:l=\"4i\"}r(c,\".uniform\",l,\"(\",g,\",\",m(p)?Array.prototype.slice.call(p):p,\");\")}continue}h=v.append(t,r)}else{if(!a(It))continue;h=r.def(u.uniforms,\"[\",e.id(p),\"]\")}switch(35678===d?r(\"if(\",h,\"&&\",h,'._reglType===\"framebuffer\"){',h,\"=\",h,\".color[0];\",\"}\"):35680===d&&r(\"if(\",h,\"&&\",h,'._reglType===\"framebufferCube\"){',h,\"=\",h,\".color[0];\",\"}\"),p=1,d){case 35678:case 35680:d=r.def(h,\"._texture\"),r(c,\".uniform1i(\",g,\",\",d,\".bind());\"),r.exit(d,\".unbind();\");continue;case 5124:case 35670:l=\"1i\";break;case 35667:case 35671:l=\"2i\",p=2;break;case 35668:case 35672:l=\"3i\",p=3;break;case 35669:case 35673:l=\"4i\",p=4;break;case 5126:l=\"1f\";break;case 35664:l=\"2f\",p=2;break;case 35665:l=\"3f\",p=3;break;case 35666:l=\"4f\",p=4;break;case 35674:l=\"Matrix2fv\";break;case 35675:l=\"Matrix3fv\";break;case 35676:l=\"Matrix4fv\"}if(\"M\"===l.charAt(0)){r(c,\".uniform\",l,\"(\",g,\",\"),g=Math.pow(d-35674+2,2);var y=t.global.def(\"new Float32Array(\",g,\")\");Array.isArray(h)?r(\"false,(\",o(g,(function(t){return y+\"[\"+t+\"]=\"+h[t]})),\",\",y,\")\"):r(\"false,(Array.isArray(\",h,\")||\",h,\" instanceof Float32Array)?\",h,\":(\",o(g,(function(t){return y+\"[\"+t+\"]=\"+h+\"[\"+t+\"]\"})),\",\",y,\")\"),r(\");\")}else{if(1<p){d=[];var x=[];for(v=0;v<p;++v)Array.isArray(h)?x.push(h[v]):x.push(r.def(h+\"[\"+v+\"]\")),s&&d.push(r.def());s&&r(\"if(!\",t.batchId,\"||\",d.map((function(t,e){return t+\"!==\"+x[e]})).join(\"||\"),\"){\",d.map((function(t,e){return t+\"=\"+x[e]+\";\"})).join(\"\")),r(c,\".uniform\",l,\"(\",g,\",\",x.join(\",\"),\");\")}else s&&(d=r.def(),r(\"if(!\",t.batchId,\"||\",d,\"!==\",h,\"){\",d,\"=\",h,\";\")),r(c,\".uniform\",l,\"(\",g,\",\",h,\");\");s&&r(\"}\")}}}function z(t,e,r,n){function i(i){var a=h[i];return a?a.contextDep&&n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(f,\".\",i)}function a(){function t(){r(l,\".drawElementsInstancedANGLE(\",[d,g,y,v+\"<<((\"+y+\"-5121)>>1)\",s],\");\")}function e(){r(l,\".drawArraysInstancedANGLE(\",[d,v,g,s],\");\")}p&&\"null\"!==p?m?t():(r(\"if(\",p,\"){\"),t(),r(\"}else{\"),e(),r(\"}\")):e()}function o(){function t(){r(c+\".drawElements(\"+[d,g,y,v+\"<<((\"+y+\"-5121)>>1)\"]+\");\")}function e(){r(c+\".drawArrays(\"+[d,v,g]+\");\")}p&&\"null\"!==p?m?t():(r(\"if(\",p,\"){\"),t(),r(\"}else{\"),e(),r(\"}\")):e()}var s,l,u=t.shared,c=u.gl,f=u.draw,h=n.draw,p=function(){var i=h.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a),h.elementsActive&&a(\"if(\"+i+\")\"+c+\".bindBuffer(34963,\"+i+\".buffer.buffer);\")):(i=a.def(),a(i,\"=\",f,\".\",\"elements\",\";\",\"if(\",i,\"){\",c,\".bindBuffer(\",34963,\",\",i,\".buffer.buffer);}\",\"else if(\",u.vao,\".currentVAO){\",i,\"=\",t.shared.elements+\".getElements(\"+u.vao,\".currentVAO.elements);\",et?\"\":\"if(\"+i+\")\"+c+\".bindBuffer(34963,\"+i+\".buffer.buffer);\",\"}\")),i}(),d=i(\"primitive\"),v=i(\"offset\"),g=function(){var i=h.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,\".\",\"count\"),i}();if(\"number\"==typeof g){if(0===g)return}else r(\"if(\",g,\"){\"),r.exit(\"}\");Q&&(s=i(\"instances\"),l=t.instancing);var y=p+\".type\",m=h.elements&&j(h.elements)&&!h.vaoActive;Q&&(\"number\"!=typeof s||0<=s)?\"string\"==typeof s?(r(\"if(\",s,\">0){\"),a(),r(\"}else if(\",s,\"<0){\"),o(),r(\"}\")):a():o()}function H(t,e,r,n,i){return i=(e=_()).proc(\"body\",i),Q&&(e.instancing=i.def(e.shared.extensions,\".angle_instanced_arrays\")),t(e,i,r,n),e.compile().body}function q(t,e,r,n){P(t,e),r.useVAO?r.drawVAO?e(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,e),\");\"):e(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(e(t.shared.vao,\".setVAO(null);\"),I(t,e,r,n.attributes,(function(){return!0}))),D(t,e,r,n.uniforms,(function(){return!0}),!1),z(t,e,e,r)}function Z(t,e,r,n){function i(){return!0}t.batchId=\"a1\",P(t,e),I(t,e,r,n.attributes,i),D(t,e,r,n.uniforms,i,!1),z(t,e,e,r)}function W(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}P(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();e(u.entry,\"for(\",s,\"=0;\",s,\"<\",\"a1\",\";++\",s,\"){\",l,\"=\",\"a0\",\"[\",s,\"];\",c,\"}\",u.exit),r.needsContext&&S(t,c,r.context),r.needsFramebuffer&&E(t,c,r.framebuffer),C(t,c,r.state,i),r.profile&&i(r.profile)&&O(t,c,r,!1,!0),n?(r.useVAO?r.drawVAO?i(r.drawVAO)?c(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,c),\");\"):u(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,u),\");\"):u(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(u(t.shared.vao,\".setVAO(null);\"),I(t,u,r,n.attributes,a),I(t,c,r,n.attributes,i)),D(t,u,r,n.uniforms,a,!1),D(t,c,r,n.uniforms,i,!0),z(t,u,c,r)):(e=t.global.def(\"{}\"),n=r.shader.progVar.append(t,c),l=c.def(n,\".id\"),u=c.def(e,\"[\",l,\"]\"),c(t.shared.gl,\".useProgram(\",n,\".program);\",\"if(!\",u,\"){\",u,\"=\",e,\"[\",l,\"]=\",t.link((function(e){return H(Z,t,r,e,2)})),\"(\",n,\");}\",u,\".call(this,a0[\",s,\"],\",s,\");\"))}function X(t,r){function n(e){var n=r.shader[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.shader,\".\"+e,n):i.set(a.shader,\".\"+e,t.link(n,{stable:!0})))}var i=t.proc(\"scope\",3);t.batchId=\"a2\";var a=t.shared,o=a.current;if(S(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),B(Object.keys(r.state)).forEach((function(e){var n=r.state[e],o=n.append(t,i);m(o)?o.forEach((function(r,n){isNaN(r)?i.set(t.next[e],\"[\"+n+\"]\",r):i.set(t.next[e],\"[\"+n+\"]\",t.link(r,{stable:!0}))})):j(n)?i.set(a.next,\".\"+e,t.link(o,{stable:!0})):i.set(a.next,\".\"+e,o)})),O(t,i,r,!0,!0),[\"elements\",\"offset\",\"count\",\"instances\",\"primitive\"].forEach((function(e){var n=r.draw[e];n&&(n=n.append(t,i),isNaN(n)?i.set(a.draw,\".\"+e,n):i.set(a.draw,\".\"+e,t.link(n),{stable:!0}))})),Object.keys(r.uniforms).forEach((function(n){var o=r.uniforms[n].append(t,i);Array.isArray(o)&&(o=\"[\"+o.map((function(e){return isNaN(e)?e:t.link(e,{stable:!0})}))+\"]\"),i.set(a.uniforms,\"[\"+t.link(e.id(n),{stable:!0})+\"]\",o)})),Object.keys(r.attributes).forEach((function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new K).forEach((function(t){i.set(a,\".\"+t,n[t])}))})),r.scopeVAO){var s=r.scopeVAO.append(t,i);isNaN(s)?i.set(a.vao,\".targetVAO\",s):i.set(a.vao,\".targetVAO\",t.link(s,{stable:!0}))}n(\"vert\"),n(\"frag\"),0<Object.keys(r.state).length&&(i(o,\".dirty=true;\"),i.exit(o,\".dirty=true;\")),i(\"a1(\",t.shared.context,\",a0,\",t.batchId,\");\")}function J(t,e,r){var n=e.static[r];if(n&&function(t){if(\"object\"==typeof t&&!m(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(Y.isDynamic(t[e[r]]))return!0;return!1}}(n)){var i=t.global,a=Object.keys(n),o=!1,s=!1,l=!1,u=t.global.def(\"{}\");a.forEach((function(e){var r=n[e];if(Y.isDynamic(r))\"function\"==typeof r&&(r=n[e]=Y.unbox(r)),e=V(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(i(u,\".\",e,\"=\"),typeof r){case\"number\":i(r);break;case\"string\":i('\"',r,'\"');break;case\"object\":Array.isArray(r)&&i(\"[\",r.join(),\"]\");break;default:i(t.link(r))}i(\";\")}})),e.dynamic[r]=new Y.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:u,append:function(t,e){a.forEach((function(r){var i=n[r];Y.isDynamic(i)&&(i=t.invoke(e,i),e(u,\".\",r,\"=\",i,\";\"))}))}}),delete e.static[r]}}var K=c.Record,$={add:32774,subtract:32778,\"reverse subtract\":32779};r.ext_blend_minmax&&($.min=32775,$.max=32776);var Q=r.angle_instanced_arrays,tt=r.webgl_draw_buffers,et=r.oes_vertex_array_object,nt={dirty:!0,profile:g.profile},it={},at=[],ot={},lt={};x(\"dither\",3024),x(\"blend.enable\",3042),b(\"blend.color\",\"blendColor\",[0,0,0,0]),b(\"blend.equation\",\"blendEquationSeparate\",[32774,32774]),b(\"blend.func\",\"blendFuncSeparate\",[1,0,1,0]),x(\"depth.enable\",2929,!0),b(\"depth.func\",\"depthFunc\",513),b(\"depth.range\",\"depthRange\",[0,1]),b(\"depth.mask\",\"depthMask\",!0),b(\"colorMask\",\"colorMask\",[!0,!0,!0,!0]),x(\"cull.enable\",2884),b(\"cull.face\",\"cullFace\",1029),b(\"frontFace\",\"frontFace\",2305),b(\"lineWidth\",\"lineWidth\",1),x(\"polygonOffset.enable\",32823),b(\"polygonOffset.offset\",\"polygonOffset\",[0,0]),x(\"sample.alpha\",32926),x(\"sample.enable\",32928),b(\"sample.coverage\",\"sampleCoverage\",[1,!1]),x(\"stencil.enable\",2960),b(\"stencil.mask\",\"stencilMask\",-1),b(\"stencil.func\",\"stencilFunc\",[519,0,-1]),b(\"stencil.opFront\",\"stencilOpSeparate\",[1028,7680,7680,7680]),b(\"stencil.opBack\",\"stencilOpSeparate\",[1029,7680,7680,7680]),x(\"scissor.enable\",3089),b(\"scissor.box\",\"scissor\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),b(\"viewport\",\"viewport\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ut={gl:t,context:p,strings:e,next:it,current:nt,draw:h,elements:a,buffer:i,shader:f,attributes:c.state,vao:c,uniforms:u,framebuffer:l,extensions:r,timer:d,isBufferArgs:F},ct={primTypes:st,compareFuncs:Ct,blendFuncs:Lt,blendEquations:$,stencilOps:Pt,glTypes:rt,orientationType:Ot};tt&&(ct.backBuffer=[1029],ct.drawBuffer=o(n.maxDrawbuffers,(function(t){return 0===t?[0]:o(t,(function(t){return 36064+t}))})));var ft=0;return{next:it,current:nt,procs:function(){var t=_(),e=t.proc(\"poll\"),i=t.proc(\"refresh\"),a=t.block();e(a),i(a);var s,l=(f=t.shared).gl,u=f.next,c=f.current;a(c,\".dirty=false;\"),E(t,e),E(t,i,null,!0),Q&&(s=t.link(Q)),r.oes_vertex_array_object&&i(t.link(r.oes_vertex_array_object),\".bindVertexArrayOES(null);\");var f=i.def(f.attributes),h=i.def(0),p=t.cond(h,\".buffer\");p.then(l,\".enableVertexAttribArray(i);\",l,\".bindBuffer(\",34962,\",\",h,\".buffer.buffer);\",l,\".vertexAttribPointer(i,\",h,\".size,\",h,\".type,\",h,\".normalized,\",h,\".stride,\",h,\".offset);\").else(l,\".disableVertexAttribArray(i);\",l,\".vertexAttrib4f(i,\",h,\".x,\",h,\".y,\",h,\".z,\",h,\".w);\",h,\".buffer=null;\");var d=t.link(n.maxAttributes,{stable:!0});return i(\"for(var i=0;i<\",d,\";++i){\",h,\"=\",f,\"[i];\",p,\"}\"),Q&&i(\"for(var i=0;i<\",d,\";++i){\",s,\".vertexAttribDivisorANGLE(i,\",f,\"[i].divisor);\",\"}\"),i(t.shared.vao,\".currentVAO=null;\",t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"),Object.keys(ot).forEach((function(r){var n=ot[r],o=a.def(u,\".\",r),s=t.block();s(\"if(\",o,\"){\",l,\".enable(\",n,\")}else{\",l,\".disable(\",n,\")}\",c,\".\",r,\"=\",o,\";\"),i(s),e(\"if(\",o,\"!==\",c,\".\",r,\"){\",s,\"}\")})),Object.keys(lt).forEach((function(r){var n,s,f=lt[r],h=nt[r],p=t.block();p(l,\".\",f,\"(\"),m(h)?(f=h.length,n=t.global.def(u,\".\",r),s=t.global.def(c,\".\",r),p(o(f,(function(t){return n+\"[\"+t+\"]\"})),\");\",o(f,(function(t){return s+\"[\"+t+\"]=\"+n+\"[\"+t+\"];\"})).join(\"\")),e(\"if(\",o(f,(function(t){return n+\"[\"+t+\"]!==\"+s+\"[\"+t+\"]\"})).join(\"||\"),\"){\",p,\"}\")):(n=a.def(u,\".\",r),s=a.def(c,\".\",r),p(n,\");\",c,\".\",r,\"=\",n,\";\"),e(\"if(\",n,\"!==\",s,\"){\",p,\"}\")),i(p)})),t.compile()}(),compile:function(t,e,r,n,i){var a=_();a.stats=a.link(i),Object.keys(e.static).forEach((function(t){J(a,e,t)})),Et.forEach((function(e){J(a,t,e)}));var o=M(t,e,r,n);return o.shader.program&&(o.shader.program.attributes.sort((function(t,e){return t.name<e.name?-1:1})),o.shader.program.uniforms.sort((function(t,e){return t.name<e.name?-1:1}))),function(t,e){var r=t.proc(\"draw\",1);P(t,r),S(t,r,e.context),E(t,r,e.framebuffer),L(t,r,e),C(t,r,e.state),O(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,\".useProgram(\",n,\".program);\"),e.shader.program)q(t,r,e,e.shader.program);else{r(t.shared.vao,\".setVAO(null);\");var i=t.global.def(\"{}\"),a=r.def(n,\".id\"),o=r.def(i,\"[\",a,\"]\");r(t.cond(o).then(o,\".call(this,a0);\").else(o,\"=\",i,\"[\",a,\"]=\",t.link((function(r){return H(q,t,e,r,1)})),\"(\",n,\");\",o,\".call(this,a0);\"))}0<Object.keys(e.state).length&&r(t.shared.current,\".dirty=true;\"),t.shared.vao&&r(t.shared.vao,\".setVAO(null);\")}(a,o),X(a,o),function(t,e){function r(t){return t.contextDep&&i||t.propDep}var n=t.proc(\"batch\",2);t.batchId=\"0\",P(t,n);var i=!1,a=!0;Object.keys(e.context).forEach((function(t){i=i||e.context[t].propDep})),i||(S(t,n,e.context),a=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?i=o=!0:s.contextDep&&i&&(o=!0),o||E(t,n,s)):E(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),L(t,n,e),C(t,n,e.state,(function(t){return!r(t)})),e.profile&&r(e.profile)||O(t,n,e,!1,\"a1\"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=o,(a=e.shader.progVar).contextDep&&i||a.propDep)W(t,n,e,null);else if(a=a.append(t,n),n(t.shared.gl,\".useProgram(\",a,\".program);\"),e.shader.program)W(t,n,e,e.shader.program);else{n(t.shared.vao,\".setVAO(null);\");var s=t.global.def(\"{}\"),l=(o=n.def(a,\".id\"),n.def(s,\"[\",o,\"]\"));n(t.cond(l).then(l,\".call(this,a0,a1);\").else(l,\"=\",s,\"[\",o,\"]=\",t.link((function(r){return H(W,t,e,r,2)})),\"(\",a,\");\",l,\".call(this,a0,a1);\"))}0<Object.keys(e.state).length&&n(t.shared.current,\".dirty=true;\"),t.shared.vao&&n(t.shared.vao,\".setVAO(null);\")}(a,o),G(a.compile(),{destroy:function(){o.shader.program.destroy()}})}}}function q(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var G=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},Z=0,Y={DynamicVariable:t,define:function(e,n){return new t(e,r(n+\"\"))},isDynamic:function(e){return\"function\"==typeof e&&!e._reglType||e instanceof t},unbox:function e(r,n){return\"function\"==typeof r?new t(0,r):\"number\"==typeof r||\"boolean\"==typeof r?new t(5,r):Array.isArray(r)?new t(6,r.map((function(t,r){return e(t,n+\"[\"+r+\"]\")}))):r instanceof t?r:void 0},accessor:r},W={next:\"function\"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:\"function\"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},X=\"undefined\"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},J=l();J.zero=l();var K=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,i=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),i=t.getParameter(36063));var a=!!e.oes_texture_float;if(a){a=t.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))a=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=J.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a=!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a=1===s[0]),J.freeType(s)}}return s=!0,\"undefined\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=J.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),J.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter((function(t){return!!e[t]})),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},$=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},Q=function(t){return Object.keys(t).map((function(e){return t[e]}))},tt={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;switch(r=n||J.allocType(r,i),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],a=i=0;a<n;++a)for(var o=t[a],s=0;s<e;++s)r[i++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:f(t,e,0,r,0)}return r}},et={\"[object Int8Array]\":5120,\"[object Int16Array]\":5122,\"[object Int32Array]\":5124,\"[object Uint8Array]\":5121,\"[object Uint8ClampedArray]\":5121,\"[object Uint16Array]\":5123,\"[object Uint32Array]\":5125,\"[object Float32Array]\":5126,\"[object Float64Array]\":5121,\"[object ArrayBuffer]\":5121},rt={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},nt={dynamic:35048,stream:35040,static:35044},it=tt.flatten,at=tt.shape,ot=[];ot[5120]=1,ot[5122]=2,ot[5124]=4,ot[5121]=1,ot[5123]=2,ot[5125]=4,ot[5126]=4;var st={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,\"line loop\":2,\"line strip\":3,\"triangle strip\":5,\"triangle fan\":6},lt=new Float32Array(1),ut=new Uint32Array(lt.buffer),ct=[9984,9986,9985,9987],ft=[0,6409,6410,6407,6408],ht={};ht[6409]=ht[6406]=ht[6402]=1,ht[34041]=ht[6410]=2,ht[6407]=ht[35904]=3,ht[6408]=ht[35906]=4;var pt=x(\"HTMLCanvasElement\"),dt=x(\"OffscreenCanvas\"),vt=x(\"CanvasRenderingContext2D\"),gt=x(\"ImageBitmap\"),yt=x(\"HTMLImageElement\"),mt=x(\"HTMLVideoElement\"),xt=Object.keys(et).concat([pt,dt,vt,gt,yt,mt]),bt=[];bt[5121]=1,bt[5126]=4,bt[36193]=2,bt[5123]=2,bt[5125]=4;var _t=[];_t[32854]=2,_t[32855]=2,_t[36194]=2,_t[34041]=4,_t[33776]=.5,_t[33777]=.5,_t[33778]=1,_t[33779]=1,_t[35986]=.5,_t[35987]=1,_t[34798]=1,_t[35840]=.5,_t[35841]=.25,_t[35842]=.5,_t[35843]=.25,_t[36196]=.5;var wt=[];wt[32854]=2,wt[32855]=2,wt[36194]=2,wt[33189]=2,wt[36168]=1,wt[34041]=4,wt[35907]=4,wt[34836]=16,wt[34842]=8,wt[34843]=6;var Tt=function(t,e,r,n,i){function a(t){this.id=u++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,i.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete c[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,\"rgb5 a1\":32855,depth:33189,stencil:36168,\"depth stencil\":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach((function(t){l[s[t]]=t}));var u=0,c={};return a.prototype.decRef=function(){0>=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(c).forEach((function(e){t+=c[e].stats.size})),t}),{create:function(e,r){function o(e,r){var n=0,a=0,c=32854;if(\"object\"==typeof e&&e?(\"shape\"in e?(n=0|(a=e.shape)[0],a=0|a[1]):(\"radius\"in e&&(n=a=0|e.radius),\"width\"in e&&(n=0|e.width),\"height\"in e&&(a=0|e.height)),\"format\"in e&&(c=s[e.format])):\"number\"==typeof e?(n=0|e,a=\"number\"==typeof r?0|r:n):e||(n=a=1),n!==u.width||a!==u.height||c!==u.format)return o.width=u.width=n,o.height=u.height=a,u.format=c,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,c,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height),o.format=l[u.format],o}var u=new a(t.createRenderbuffer());return c[u.id]=u,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===u.width&&a===u.height||(o.width=u.width=n,o.height=u.height=a,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,u.format,n,a),i.profile&&(u.stats.size=wt[u.format]*u.width*u.height)),o},o._reglType=\"renderbuffer\",o._renderbuffer=u,i.profile&&(o.stats=u.stats),o.destroy=function(){u.decRef()},o},clear:function(){Q(c).forEach(o)},restore:function(){Q(c).forEach((function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)})),t.bindRenderbuffer(36161,null)}}},kt=[];kt[6408]=4,kt[6407]=3;var At=[];At[5121]=1,At[5126]=4,At[36193]=2;var Mt=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],St=[\"x\",\"y\",\"z\",\"w\"],Et=\"blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset\".split(\" \"),Lt={0:0,1:1,zero:0,one:1,\"src color\":768,\"one minus src color\":769,\"src alpha\":770,\"one minus src alpha\":771,\"dst color\":774,\"one minus dst color\":775,\"dst alpha\":772,\"one minus dst alpha\":773,\"constant color\":32769,\"one minus constant color\":32770,\"constant alpha\":32771,\"one minus constant alpha\":32772,\"src alpha saturate\":776},Ct={never:512,less:513,\"<\":513,equal:514,\"=\":514,\"==\":514,\"===\":514,lequal:515,\"<=\":515,greater:516,\">\":516,notequal:517,\"!=\":517,\"!==\":517,gequal:518,\">=\":518,always:519},Pt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,\"increment wrap\":34055,\"decrement wrap\":34056,invert:5386},Ot={cw:2304,ccw:2305},It=new N(!1,!1,!1,(function(){}));return function(t){function e(){if(0===J.length)T&&T.update(),et=null;else{et=W.next(e),f();for(var t=J.length-1;0<=t;--t){var r=J[t];r&&r(O,null,0)}d.flush(),T&&T.update()}}function r(){!et&&0<J.length&&(et=W.next(e))}function n(){et&&(W.cancel(e),et=null)}function i(t){t.preventDefault(),n(),$.forEach((function(t){t()}))}function o(t){d.getError(),m.restore(),F.restore(),D.restore(),B.restore(),N.restore(),j.restore(),R.restore(),T&&T.restore(),U.procs.refresh(),r(),Q.forEach((function(t){t()}))}function s(t){function e(t,e){var r={},n={};return Object.keys(t).forEach((function(i){var a=t[i];if(Y.isDynamic(a))n[i]=Y.unbox(a,i);else{if(e&&Array.isArray(a))for(var o=0;o<a.length;++o)if(Y.isDynamic(a[o]))return void(n[i]=Y.unbox(a,i));r[i]=a}})),{dynamic:n,static:r}}var r=e(t.context||{},!0),n=e(t.uniforms||{},!0),i=e(t.attributes||{},!1);t=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach((function(n){r[t+\".\"+n]=e[n]}))}}var r=G({},t);return delete r.uniforms,delete r.attributes,delete r.context,delete r.vao,\"stencil\"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e(\"blend\"),e(\"depth\"),e(\"cull\"),e(\"stencil\"),e(\"polygonOffset\"),e(\"scissor\"),e(\"sample\"),\"vao\"in t&&(r.vao=t.vao),r}(t),!1);var a={gpuTime:0,cpuTime:0,count:0},o=U.compile(t,i,n,r,a),s=o.draw,l=o.batch,u=o.scope,c=[];return G((function(t,e){var r;if(\"function\"==typeof t)return u.call(this,null,t,0);if(\"function\"==typeof e)if(\"number\"==typeof t)for(r=0;r<t;++r)u.call(this,null,e,r);else{if(!Array.isArray(t))return u.call(this,t,e,0);for(r=0;r<t.length;++r)u.call(this,t[r],e,r)}else if(\"number\"==typeof t){if(0<t)return l.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return s.call(this,t);if(t.length)return l.call(this,t,t.length)}}),{stats:a,destroy:function(){o.destroy()}})}function l(t,e){var r=0;U.procs.poll();var n=e.color;n&&(d.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),\"depth\"in e&&(d.clearDepth(+e.depth),r|=256),\"stencil\"in e&&(d.clearStencil(0|e.stencil),r|=1024),d.clear(r)}function u(t){return J.push(t),r(),{cancel:function(){var e=q(J,t);J[e]=function t(){var e=q(J,t);J[e]=J[J.length-1],--J.length,0>=J.length&&n()}}}}function c(){var t=V.viewport,e=V.scissor_box;t[0]=t[1]=e[0]=e[1]=0,O.viewportWidth=O.framebufferWidth=O.drawingBufferWidth=t[2]=e[2]=d.drawingBufferWidth,O.viewportHeight=O.framebufferHeight=O.drawingBufferHeight=t[3]=e[3]=d.drawingBufferHeight}function f(){O.tick+=1,O.time=p(),c(),U.procs.poll()}function h(){B.refresh(),c(),U.procs.refresh(),T&&T.update()}function p(){return(X()-k)/1e3}if(!(t=a(t)))return null;var d=t.gl,y=d.getContextAttributes();d.isContextLost();var m=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!r(a))return e.onDestroy(),e.onDone('\"'+a+'\" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach((function(t){if(n[t]&&!r(t))throw Error(\"(regl): error restoring extension \"+t)}))}}}(d,t);if(!m)return null;var x=function(){var t={\"\":0},e=[\"\"];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=t.cachedCode||{},w=m.extensions,T=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var i=o.pop()||new r;i.startQueryIndex=t,i.endQueryIndex=e,i.sum=0,i.stats=n,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i=[],a=[],o=[],s=[],l=[],u=[];return{beginQuery:function(t){var r=i.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),a.push(r),n(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=a.length)){u.length=Math.max(u.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=u[0]=0;for(r=t=0;r<a.length;++r){var c=a[r];e.ext_disjoint_timer_query.getQueryObjectEXT(c,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(c,34918),i.push(c)):a[t++]=c,l[r+1]=n,u[r+1]=t}for(a.length=t,r=t=0;r<s.length;++r){var f=(n=s[r]).startQueryIndex;c=n.endQueryIndex,n.sum+=l[c]-l[f],f=u[f],(c=u[c])===f?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=f,n.endQueryIndex=c,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t=0;t<i.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length=0,i.length=0},restore:function(){a.length=0,i.length=0}}}(0,w),k=X(),A=d.drawingBufferWidth,E=d.drawingBufferHeight,O={tick:0,time:0,viewportWidth:A,viewportHeight:E,framebufferWidth:A,framebufferHeight:E,drawingBufferWidth:A,drawingBufferHeight:E,pixelRatio:t.pixelRatio},I=(A={elements:null,primitive:4,count:-1,offset:0,instances:-1},K(d,w)),D=v(d,b,t,(function(t){return R.destroyBuffer(t)})),z=g(d,w,D,b),R=L(d,w,I,b,D,z,A),F=C(d,x,b,t),B=M(d,w,I,(function(){U.procs.poll()}),O,b,t),N=Tt(d,w,0,b,t),j=S(d,w,I,B,N,b),U=H(d,x,w,I,D,z,0,j,{},R,F,A,O,T,_,t),V=(x=P(d,j,U.procs.poll,O),U.next),Z=d.canvas,J=[],$=[],Q=[],tt=[t.onDestroy],et=null;Z&&(Z.addEventListener(\"webglcontextlost\",i,!1),Z.addEventListener(\"webglcontextrestored\",o,!1));var rt=j.setFBO=s({framebuffer:Y.define.call(null,1,\"framebuffer\")});return h(),y=G(s,{clear:function(t){if(\"framebuffer\"in t)if(t.framebuffer&&\"framebufferCube\"===t.framebuffer_reglType)for(var e=0;6>e;++e)rt(G({framebuffer:t.framebuffer.faces[e]},t),l);else rt(t,l);else l(0,t)},prop:Y.define.bind(null,1),context:Y.define.bind(null,2),this:Y.define.bind(null,3),draw:s({}),buffer:function(t){return D.create(t,34962,!1,!1)},elements:function(t){return z.create(t,!1)},texture:B.create2D,cube:B.createCube,renderbuffer:N.create,framebuffer:j.create,framebufferCube:j.createCube,vao:R.createVAO,attributes:y,frame:u,on:function(t,e){var r;switch(t){case\"frame\":return u(e);case\"lost\":r=$;break;case\"restore\":r=Q;break;case\"destroy\":r=tt}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:I,hasExtension:function(t){return 0<=I.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){J.length=0,n(),Z&&(Z.removeEventListener(\"webglcontextlost\",i),Z.removeEventListener(\"webglcontextrestored\",o)),F.clear(),j.clear(),N.clear(),R.clear(),B.clear(),z.clear(),D.clear(),T&&T.clear(),tt.forEach((function(t){t()}))},_gl:d,_refresh:h,poll:function(){f(),T&&T.update()},now:p,stats:b,getCachedCode:function(){return _},preloadCachedCode:function(t){Object.entries(t).forEach((function(t){_[t[0]]=t[1]}))}}),t.onDone(null,y),y}}()},71665:function(t,e,r){var n=r(12856),i=n.Buffer;function a(t,e){for(var r in t)e[r]=t[r]}function o(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(a(n,e),e.Buffer=o),o.prototype=Object.create(i.prototype),a(i,o),o.from=function(t,e,r){if(\"number\"==typeof t)throw new TypeError(\"Argument must not be a number\");return i(t,e,r)},o.alloc=function(t,e,r){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");var n=i(t);return void 0!==e?\"string\"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},o.allocUnsafe=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return i(t)},o.allocUnsafeSlow=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(t)}},21630:function(t,e,r){t.exports=i;var n=r(15398).EventEmitter;function i(){n.call(this)}r(42018)(i,n),i.Readable=r(40410),i.Writable=r(37493),i.Duplex=r(37865),i.Transform=r(74308),i.PassThrough=r(66897),i.finished=r(12726),i.pipeline=r(10168),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on(\"data\",i),t.on(\"drain\",a),t._isStdio||e&&!1===e.end||(r.on(\"end\",s),r.on(\"close\",l));var o=!1;function s(){o||(o=!0,t.end())}function l(){o||(o=!0,\"function\"==typeof t.destroy&&t.destroy())}function u(t){if(c(),0===n.listenerCount(this,\"error\"))throw t}function c(){r.removeListener(\"data\",i),t.removeListener(\"drain\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",l),r.removeListener(\"error\",u),t.removeListener(\"error\",u),r.removeListener(\"end\",c),r.removeListener(\"close\",c),t.removeListener(\"close\",c)}return r.on(\"error\",u),t.on(\"error\",u),r.on(\"end\",c),r.on(\"close\",c),t.on(\"close\",c),t.emit(\"pipe\",r),t}},74322:function(t){\"use strict\";var e={};function r(t,r,n){n||(n=Error);var i=function(t){var e,n;function i(e,n,i){return t.call(this,function(t,e,n){return\"string\"==typeof r?r:r(t,e,n)}(e,n,i))||this}return n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,i}(n);i.prototype.name=n.name,i.prototype.code=t,e[t]=i}function n(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map((function(t){return String(t)})),r>2?\"one of \".concat(e,\" \").concat(t.slice(0,r-1).join(\", \"),\", or \")+t[r-1]:2===r?\"one of \".concat(e,\" \").concat(t[0],\" or \").concat(t[1]):\"of \".concat(e,\" \").concat(t[0])}return\"of \".concat(e,\" \").concat(String(t))}r(\"ERR_INVALID_OPT_VALUE\",(function(t,e){return'The value \"'+e+'\" is invalid for option \"'+t+'\"'}),TypeError),r(\"ERR_INVALID_ARG_TYPE\",(function(t,e,r){var i,a,o,s,l;if(\"string\"==typeof e&&(a=\"not \",e.substr(0,4)===a)?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-9,r)===e}(t,\" argument\"))o=\"The \".concat(t,\" \").concat(i,\" \").concat(n(e,\"type\"));else{var u=(\"number\"!=typeof l&&(l=0),l+1>(s=t).length||-1===s.indexOf(\".\",l)?\"argument\":\"property\");o='The \"'.concat(t,'\" ').concat(u,\" \").concat(i,\" \").concat(n(e,\"type\"))}return o+\". Received type \".concat(typeof r)}),TypeError),r(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),r(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(t){return\"The \"+t+\" method is not implemented\"})),r(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),r(\"ERR_STREAM_DESTROYED\",(function(t){return\"Cannot call \"+t+\" after a stream was destroyed\"})),r(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),r(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),r(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),r(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),r(\"ERR_UNKNOWN_ENCODING\",(function(t){return\"Unknown encoding: \"+t}),TypeError),r(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),t.exports.q=e},37865:function(t,e,r){\"use strict\";var n=r(90386),i=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=c;var a=r(40410),o=r(37493);r(42018)(c,a);for(var s=i(o.prototype),l=0;l<s.length;l++){var u=s[l];c.prototype[u]||(c.prototype[u]=o.prototype[u])}function c(t){if(!(this instanceof c))return new c(t);a.call(this,t),o.call(this,t),this.allowHalfOpen=!0,t&&(!1===t.readable&&(this.readable=!1),!1===t.writable&&(this.writable=!1),!1===t.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",f)))}function f(){this._writableState.ended||n.nextTick(h,this)}function h(t){t.end()}Object.defineProperty(c.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(t){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=t,this._writableState.destroyed=t)}})},66897:function(t,e,r){\"use strict\";t.exports=i;var n=r(74308);function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}r(42018)(i,n),i.prototype._transform=function(t,e,r){r(null,t)}},40410:function(t,e,r){\"use strict\";var n,i=r(90386);t.exports=A,A.ReadableState=k,r(15398).EventEmitter;var a,o=function(t,e){return t.listeners(e).length},s=r(71405),l=r(12856).Buffer,u=r.g.Uint8Array||function(){},c=r(40964);a=c&&c.debuglog?c.debuglog(\"stream\"):function(){};var f,h,p,d=r(31125),v=r(65756),g=r(56306).getHighWaterMark,y=r(74322).q,m=y.ERR_INVALID_ARG_TYPE,x=y.ERR_STREAM_PUSH_AFTER_EOF,b=y.ERR_METHOD_NOT_IMPLEMENTED,_=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(42018)(A,s);var w=v.errorOrDestroy,T=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k(t,e,i){n=n||r(37865),t=t||{},\"boolean\"!=typeof i&&(i=e instanceof n),this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=g(this,t,\"readableHighWaterMark\",i),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(f||(f=r(68019).s),this.decoder=new f(t.encoding),this.encoding=t.encoding)}function A(t){if(n=n||r(37865),!(this instanceof A))return new A(t);var e=this instanceof n;this._readableState=new k(t,this,e),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function M(t,e,r,n,i){a(\"readableAddChunk\",e);var o,s=t._readableState;if(null===e)s.reading=!1,function(t,e){if(a(\"onEofChunk\"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?C(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,P(t)))}}(t,s);else if(i||(o=function(t,e){var r,n;return n=e,l.isBuffer(n)||n instanceof u||\"string\"==typeof e||void 0===e||t.objectMode||(r=new m(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),r}(s,e)),o)w(t,o);else if(s.objectMode||e&&e.length>0)if(\"string\"==typeof e||s.objectMode||Object.getPrototypeOf(e)===l.prototype||(e=function(t){return l.from(t)}(e)),n)s.endEmitted?w(t,new _):S(t,s,e,!0);else if(s.ended)w(t,new x);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?S(t,s,e,!1):O(t,s)):S(t,s,e,!1)}else n||(s.reading=!1,O(t,s));return!s.ended&&(s.length<s.highWaterMark||0===s.length)}function S(t,e,r,n){e.flowing&&0===e.length&&!e.sync?(e.awaitDrain=0,t.emit(\"data\",r)):(e.length+=e.objectMode?1:r.length,n?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&C(t)),O(t,e)}Object.defineProperty(A.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(t){this._readableState&&(this._readableState.destroyed=t)}}),A.prototype.destroy=v.destroy,A.prototype._undestroy=v.undestroy,A.prototype._destroy=function(t,e){e(t)},A.prototype.push=function(t,e){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof t&&((e=e||n.defaultEncoding)!==n.encoding&&(t=l.from(t,e),e=\"\"),r=!0),M(this,t,e,!1,r)},A.prototype.unshift=function(t){return M(this,t,null,!0,!1)},A.prototype.isPaused=function(){return!1===this._readableState.flowing},A.prototype.setEncoding=function(t){f||(f=r(68019).s);var e=new f(t);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,i=\"\";null!==n;)i+=e.write(n.data),n=n.next;return this._readableState.buffer.clear(),\"\"!==i&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var E=1073741824;function L(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function C(t){var e=t._readableState;a(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(a(\"emitReadable\",e.flowing),e.emittedReadable=!0,i.nextTick(P,t))}function P(t){var e=t._readableState;a(\"emitReadable_\",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,F(t)}function O(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(I,t,e))}function I(t,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&0===e.length);){var r=e.length;if(a(\"maybeReadMore read 0\"),t.read(0),r===e.length)break}e.readingMore=!1}function D(t){var e=t._readableState;e.readableListening=t.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount(\"data\")>0&&t.resume()}function z(t){a(\"readable nexttick read 0\"),t.read(0)}function R(t,e){a(\"resume\",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit(\"resume\"),F(t),e.flowing&&!e.reading&&t.read(0)}function F(t){var e=t._readableState;for(a(\"flow\",e.flowing);e.flowing&&null!==t.read(););}function B(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(\"\"):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function N(t){var e=t._readableState;a(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,i.nextTick(j,e,t))}function j(t,e){if(a(\"endReadableNT\",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit(\"end\"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function U(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}A.prototype.read=function(t){a(\"read\",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&((0!==e.highWaterMark?e.length>=e.highWaterMark:e.length>0)||e.ended))return a(\"read: emitReadable\",e.length,e.ended),0===e.length&&e.ended?N(this):C(this),null;if(0===(t=L(t,e))&&e.ended)return 0===e.length&&N(this),null;var n,i=e.needReadable;return a(\"need readable\",i),(0===e.length||e.length-t<e.highWaterMark)&&a(\"length less than watermark\",i=!0),e.ended||e.reading?a(\"reading or ended\",i=!1):i&&(a(\"do read\"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=L(r,e))),null===(n=t>0?B(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&N(this)),null!==n&&this.emit(\"data\",n),n},A.prototype._read=function(t){w(this,new b(\"_read()\"))},A.prototype.pipe=function(t,e){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=t;break;case 1:n.pipes=[n.pipes,t];break;default:n.pipes.push(t)}n.pipesCount+=1,a(\"pipe count=%d opts=%j\",n.pipesCount,e);var s=e&&!1===e.end||t===i.stdout||t===i.stderr?v:l;function l(){a(\"onend\"),t.end()}n.endEmitted?i.nextTick(s):r.once(\"end\",s),t.on(\"unpipe\",(function e(i,o){a(\"onunpipe\"),i===r&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,a(\"cleanup\"),t.removeListener(\"close\",p),t.removeListener(\"finish\",d),t.removeListener(\"drain\",u),t.removeListener(\"error\",h),t.removeListener(\"unpipe\",e),r.removeListener(\"end\",l),r.removeListener(\"end\",v),r.removeListener(\"data\",f),c=!0,!n.awaitDrain||t._writableState&&!t._writableState.needDrain||u())}));var u=function(t){return function(){var e=t._readableState;a(\"pipeOnDrain\",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,\"data\")&&(e.flowing=!0,F(t))}}(r);t.on(\"drain\",u);var c=!1;function f(e){a(\"ondata\");var i=t.write(e);a(\"dest.write\",i),!1===i&&((1===n.pipesCount&&n.pipes===t||n.pipesCount>1&&-1!==U(n.pipes,t))&&!c&&(a(\"false write response, pause\",n.awaitDrain),n.awaitDrain++),r.pause())}function h(e){a(\"onerror\",e),v(),t.removeListener(\"error\",h),0===o(t,\"error\")&&w(t,e)}function p(){t.removeListener(\"finish\",d),v()}function d(){a(\"onfinish\"),t.removeListener(\"close\",p),v()}function v(){a(\"unpipe\"),r.unpipe(t)}return r.on(\"data\",f),function(t,e,r){if(\"function\"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,\"error\",h),t.once(\"close\",p),t.once(\"finish\",d),t.emit(\"pipe\",r),n.flowing||(a(\"pipe resume\"),r.resume()),t},A.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes||(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit(\"unpipe\",this,r)),this;if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a<i;a++)n[a].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=U(e.pipes,t);return-1===o||(e.pipes.splice(o,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit(\"unpipe\",this,r)),this},A.prototype.on=function(t,e){var r=s.prototype.on.call(this,t,e),n=this._readableState;return\"data\"===t?(n.readableListening=this.listenerCount(\"readable\")>0,!1!==n.flowing&&this.resume()):\"readable\"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,a(\"on readable\",n.length,n.reading),n.length?C(this):n.reading||i.nextTick(z,this))),r},A.prototype.addListener=A.prototype.on,A.prototype.removeListener=function(t,e){var r=s.prototype.removeListener.call(this,t,e);return\"readable\"===t&&i.nextTick(D,this),r},A.prototype.removeAllListeners=function(t){var e=s.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==t&&void 0!==t||i.nextTick(D,this),e},A.prototype.resume=function(){var t=this._readableState;return t.flowing||(a(\"resume\"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,i.nextTick(R,t,e))}(this,t)),t.paused=!1,this},A.prototype.pause=function(){return a(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(a(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},A.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var i in t.on(\"end\",(function(){if(a(\"wrapped end\"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on(\"data\",(function(i){a(\"wrapped data\"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i||(r.objectMode||i&&i.length)&&(e.push(i)||(n=!0,t.pause()))})),t)void 0===this[i]&&\"function\"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o<T.length;o++)t.on(T[o],this.emit.bind(this,T[o]));return this._read=function(e){a(\"wrapped _read\",e),n&&(n=!1,t.resume())},this},\"function\"==typeof Symbol&&(A.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=r(68221)),h(this)}),Object.defineProperty(A.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(A.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(A.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState&&(this._readableState.flowing=t)}}),A._fromList=B,Object.defineProperty(A.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(A.from=function(t,e){return void 0===p&&(p=r(31748)),p(A,t,e)})},74308:function(t,e,r){\"use strict\";t.exports=c;var n=r(74322).q,i=n.ERR_METHOD_NOT_IMPLEMENTED,a=n.ERR_MULTIPLE_CALLBACK,o=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,l=r(37865);function u(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\"error\",new a);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function c(t){if(!(this instanceof c))return new c(t);l.call(this,t),this._transformState={afterTransform:u.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,t&&(\"function\"==typeof t.transform&&(this._transform=t.transform),\"function\"==typeof t.flush&&(this._flush=t.flush)),this.on(\"prefinish\",f)}function f(){var t=this;\"function\"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(e,r){h(t,e,r)}))}function h(t,e,r){if(e)return t.emit(\"error\",e);if(null!=r&&t.push(r),t._writableState.length)throw new s;if(t._transformState.transforming)throw new o;return t.push(null)}r(42018)(c,l),c.prototype.push=function(t,e){return this._transformState.needTransform=!1,l.prototype.push.call(this,t,e)},c.prototype._transform=function(t,e,r){r(new i(\"_transform()\"))},c.prototype._write=function(t,e,r){var n=this._transformState;if(n.writecb=r,n.writechunk=t,n.writeencoding=e,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},c.prototype._read=function(t){var e=this._transformState;null===e.writechunk||e.transforming?e.needTransform=!0:(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform))},c.prototype._destroy=function(t,e){l.prototype._destroy.call(this,t,(function(t){e(t)}))}},37493:function(t,e,r){\"use strict\";var n,i=r(90386);function a(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;for(t.entry=null;n;){var i=n.callback;e.pendingcb--,i(undefined),n=n.next}e.corkedRequestsFree.next=t}(e,t)}}t.exports=A,A.WritableState=k;var o,s={deprecate:r(20588)},l=r(71405),u=r(12856).Buffer,c=r.g.Uint8Array||function(){},f=r(65756),h=r(56306).getHighWaterMark,p=r(74322).q,d=p.ERR_INVALID_ARG_TYPE,v=p.ERR_METHOD_NOT_IMPLEMENTED,g=p.ERR_MULTIPLE_CALLBACK,y=p.ERR_STREAM_CANNOT_PIPE,m=p.ERR_STREAM_DESTROYED,x=p.ERR_STREAM_NULL_VALUES,b=p.ERR_STREAM_WRITE_AFTER_END,_=p.ERR_UNKNOWN_ENCODING,w=f.errorOrDestroy;function T(){}function k(t,e,o){n=n||r(37865),t=t||{},\"boolean\"!=typeof o&&(o=e instanceof n),this.objectMode=!!t.objectMode,o&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=h(this,t,\"writableHighWaterMark\",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,a=r.writecb;if(\"function\"!=typeof a)throw new g;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,a){--e.pendingcb,r?(i.nextTick(a,n),i.nextTick(P,t,e),t._writableState.errorEmitted=!0,w(t,n)):(a(n),t._writableState.errorEmitted=!0,w(t,n),P(t,e))}(t,r,n,e,a);else{var o=L(r)||t.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||E(t,r),n?i.nextTick(S,t,r,o,a):S(t,r,o,a)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function A(t){var e=this instanceof(n=n||r(37865));if(!e&&!o.call(A,this))return new A(t);this._writableState=new k(t,this,e),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),l.call(this)}function M(t,e,r,n,i,a,o){e.writelen=n,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new m(\"write\")):r?t._writev(i,e.onwrite):t._write(i,a,e.onwrite),e.sync=!1}function S(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit(\"drain\"))}(t,e),e.pendingcb--,n(),P(t,e)}function E(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,M(t,e,!0,e.length,i,\"\",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new a(e),e.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,f=r.callback;if(M(t,e,!1,e.objectMode?1:u.length,u,c,f),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function L(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function C(t,e){t._final((function(r){e.pendingcb--,r&&w(t,r),e.prefinished=!0,t.emit(\"prefinish\"),P(t,e)}))}function P(t,e){var r=L(e);if(r&&(function(t,e){e.prefinished||e.finalCalled||(\"function\"!=typeof t._final||e.destroyed?(e.prefinished=!0,t.emit(\"prefinish\")):(e.pendingcb++,e.finalCalled=!0,i.nextTick(C,t,e)))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit(\"finish\"),e.autoDestroy))){var n=t._readableState;(!n||n.autoDestroy&&n.endEmitted)&&t.destroy()}return r}r(42018)(A,l),k.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(k.prototype,\"buffer\",{get:s.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(t){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(o=Function.prototype[Symbol.hasInstance],Object.defineProperty(A,Symbol.hasInstance,{value:function(t){return!!o.call(this,t)||this===A&&t&&t._writableState instanceof k}})):o=function(t){return t instanceof this},A.prototype.pipe=function(){w(this,new y)},A.prototype.write=function(t,e,r){var n,a=this._writableState,o=!1,s=!a.objectMode&&(n=t,u.isBuffer(n)||n instanceof c);return s&&!u.isBuffer(t)&&(t=function(t){return u.from(t)}(t)),\"function\"==typeof e&&(r=e,e=null),s?e=\"buffer\":e||(e=a.defaultEncoding),\"function\"!=typeof r&&(r=T),a.ending?function(t,e){var r=new b;w(t,r),i.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var a;return null===r?a=new x:\"string\"==typeof r||e.objectMode||(a=new d(\"chunk\",[\"string\",\"Buffer\"],r)),!a||(w(t,a),i.nextTick(n,a),!1)}(this,a,t,r))&&(a.pendingcb++,o=function(t,e,r,n,i,a){if(!r){var o=function(t,e,r){return t.objectMode||!1===t.decodeStrings||\"string\"!=typeof e||(e=u.from(e,r)),e}(e,n,i);n!==o&&(r=!0,i=\"buffer\",n=o)}var s=e.objectMode?1:n.length;e.length+=s;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:n,encoding:i,isBuf:r,callback:a,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else M(t,e,!1,s,n,i,a);return l}(this,a,s,t,e,r)),o},A.prototype.cork=function(){this._writableState.corked++},A.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.bufferProcessing||!t.bufferedRequest||E(this,t))},A.prototype.setDefaultEncoding=function(t){if(\"string\"==typeof t&&(t=t.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((t+\"\").toLowerCase())>-1))throw new _(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(A.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(A.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),A.prototype._write=function(t,e,r){r(new v(\"_write()\"))},A.prototype._writev=null,A.prototype.end=function(t,e,r){var n=this._writableState;return\"function\"==typeof t?(r=t,t=null,e=null):\"function\"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||function(t,e,r){e.ending=!0,P(t,e),r&&(e.finished?i.nextTick(r):t.once(\"finish\",r)),e.ended=!0,t.writable=!1}(this,n,r),this},Object.defineProperty(A.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(A.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),A.prototype.destroy=f.destroy,A.prototype._undestroy=f.undestroy,A.prototype._destroy=function(t,e){e(t)}},68221:function(t,e,r){\"use strict\";var n,i=r(90386);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(12726),s=Symbol(\"lastResolve\"),l=Symbol(\"lastReject\"),u=Symbol(\"error\"),c=Symbol(\"ended\"),f=Symbol(\"lastPromise\"),h=Symbol(\"handlePromise\"),p=Symbol(\"stream\");function d(t,e){return{value:t,done:e}}function v(t){var e=t[s];if(null!==e){var r=t[p].read();null!==r&&(t[f]=null,t[s]=null,t[l]=null,e(d(r,!1)))}}function g(t){i.nextTick(v,t)}var y=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((a(n={get stream(){return this[p]},next:function(){var t=this,e=this[u];if(null!==e)return Promise.reject(e);if(this[c])return Promise.resolve(d(void 0,!0));if(this[p].destroyed)return new Promise((function(e,r){i.nextTick((function(){t[u]?r(t[u]):e(d(void 0,!0))}))}));var r,n=this[f];if(n)r=new Promise(function(t,e){return function(r,n){t.then((function(){e[c]?r(d(void 0,!0)):e[h](r,n)}),n)}}(n,this));else{var a=this[p].read();if(null!==a)return Promise.resolve(d(a,!1));r=new Promise(this[h])}return this[f]=r,r}},Symbol.asyncIterator,(function(){return this})),a(n,\"return\",(function(){var t=this;return new Promise((function(e,r){t[p].destroy(null,(function(t){t?r(t):e(d(void 0,!0))}))}))})),n),y);t.exports=function(t){var e,r=Object.create(m,(a(e={},p,{value:t,writable:!0}),a(e,s,{value:null,writable:!0}),a(e,l,{value:null,writable:!0}),a(e,u,{value:null,writable:!0}),a(e,c,{value:t._readableState.endEmitted,writable:!0}),a(e,h,{value:function(t,e){var n=r[p].read();n?(r[f]=null,r[s]=null,r[l]=null,t(d(n,!1))):(r[s]=t,r[l]=e)},writable:!0}),e));return r[f]=null,o(t,(function(t){if(t&&\"ERR_STREAM_PREMATURE_CLOSE\"!==t.code){var e=r[l];return null!==e&&(r[f]=null,r[s]=null,r[l]=null,e(t)),void(r[u]=t)}var n=r[s];null!==n&&(r[f]=null,r[s]=null,r[l]=null,n(d(void 0,!0))),r[c]=!0})),t.on(\"readable\",g.bind(null,r)),r}},31125:function(t,e,r){\"use strict\";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var o=r(12856).Buffer,s=r(69862).inspect,l=s&&s.custom||\"inspect\";t.exports=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.head=null,this.tail=null,this.length=0}var e,r;return e=t,r=[{key:\"push\",value:function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:\"unshift\",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(0===this.length)return\"\";for(var e=this.head,r=\"\"+e.data;e=e.next;)r+=t+e.data;return r}},{key:\"concat\",value:function(t){if(0===this.length)return o.alloc(0);for(var e,r,n,i=o.allocUnsafe(t>>>0),a=this.head,s=0;a;)e=a.data,r=i,n=s,o.prototype.copy.call(e,r,n),s+=a.data.length,a=a.next;return i}},{key:\"consume\",value:function(t,e){var r;return t<this.head.data.length?(r=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):r=t===this.head.data.length?this.shift():e?this._getString(t):this._getBuffer(t),r}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var e=this.head,r=1,n=e.data;for(t-=n.length;e=e.next;){var i=e.data,a=t>i.length?i.length:t;if(a===i.length?n+=i:n+=i.slice(0,t),0==(t-=a)){a===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(a));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(t){var e=o.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,a=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,a),0==(t-=a)){a===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(a));break}++n}return this.length-=n,e}},{key:l,value:function(t,e){return s(this,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},e,{depth:0,customInspect:!1}))}}],r&&a(e.prototype,r),t}()},65756:function(t,e,r){\"use strict\";var n=r(90386);function i(t,e){o(t,e),a(t)}function a(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit(\"close\")}function o(t,e){t.emit(\"error\",e)}t.exports={destroy:function(t,e){var r=this,s=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return s||l?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(o,this,t)):n.nextTick(o,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!e&&t?r._writableState?r._writableState.errorEmitted?n.nextTick(a,r):(r._writableState.errorEmitted=!0,n.nextTick(i,r,t)):n.nextTick(i,r,t):e?(n.nextTick(a,r),e(t)):n.nextTick(a,r)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(t,e){var r=t._readableState,n=t._writableState;r&&r.autoDestroy||n&&n.autoDestroy?t.destroy(e):t.emit(\"error\",e)}}},12726:function(t,e,r){\"use strict\";var n=r(74322).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,a){if(\"function\"==typeof r)return t(e,null,r);r||(r={}),a=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];t.apply(this,n)}}}(a||i);var o=r.readable||!1!==r.readable&&e.readable,s=r.writable||!1!==r.writable&&e.writable,l=function(){e.writable||c()},u=e._writableState&&e._writableState.finished,c=function(){s=!1,u=!0,o||a.call(e)},f=e._readableState&&e._readableState.endEmitted,h=function(){o=!1,f=!0,s||a.call(e)},p=function(t){a.call(e,t)},d=function(){var t;return o&&!f?(e._readableState&&e._readableState.ended||(t=new n),a.call(e,t)):s&&!u?(e._writableState&&e._writableState.ended||(t=new n),a.call(e,t)):void 0},v=function(){e.req.on(\"finish\",c)};return function(t){return t.setHeader&&\"function\"==typeof t.abort}(e)?(e.on(\"complete\",c),e.on(\"abort\",d),e.req?v():e.on(\"request\",v)):s&&!e._writableState&&(e.on(\"end\",l),e.on(\"close\",l)),e.on(\"end\",h),e.on(\"finish\",c),!1!==r.error&&e.on(\"error\",p),e.on(\"close\",d),function(){e.removeListener(\"complete\",c),e.removeListener(\"abort\",d),e.removeListener(\"request\",v),e.req&&e.req.removeListener(\"finish\",c),e.removeListener(\"end\",l),e.removeListener(\"close\",l),e.removeListener(\"finish\",c),e.removeListener(\"end\",h),e.removeListener(\"error\",p),e.removeListener(\"close\",d)}}},31748:function(t){t.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},10168:function(t,e,r){\"use strict\";var n,i=r(74322).q,a=i.ERR_MISSING_ARGS,o=i.ERR_STREAM_DESTROYED;function s(t){if(t)throw t}function l(t){t()}function u(t,e){return t.pipe(e)}t.exports=function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];var c,f=function(t){return t.length?\"function\"!=typeof t[t.length-1]?s:t.pop():s}(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new a(\"streams\");var h=e.map((function(t,i){var a=i<e.length-1;return function(t,e,i,a){a=function(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}(a);var s=!1;t.on(\"close\",(function(){s=!0})),void 0===n&&(n=r(12726)),n(t,{readable:e,writable:i},(function(t){if(t)return a(t);s=!0,a()}));var l=!1;return function(e){if(!s&&!l)return l=!0,function(t){return t.setHeader&&\"function\"==typeof t.abort}(t)?t.abort():\"function\"==typeof t.destroy?t.destroy():void a(e||new o(\"pipe\"))}}(t,a,i>0,(function(t){c||(c=t),t&&h.forEach(l),a||(h.forEach(l),f(c))}))}));return e.reduce(u)}},56306:function(t,e,r){\"use strict\";var n=r(74322).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(t,e,r,i){var a=function(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!=a){if(!isFinite(a)||Math.floor(a)!==a||a<0)throw new n(i?r:\"highWaterMark\",a);return Math.floor(a)}return t.objectMode?16:16384}}},71405:function(t,e,r){t.exports=r(15398).EventEmitter},68019:function(t,e,r){\"use strict\";var n=r(71665).Buffer,i=n.isEncoding||function(t){switch((t=\"\"+t)&&t.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function a(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return\"utf8\";for(var e;;)switch(t){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return t;default:if(e)return;t=(\"\"+t).toLowerCase(),e=!0}}(t);if(\"string\"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error(\"Unknown encoding: \"+t);return e||t}(t),this.encoding){case\"utf16le\":this.text=l,this.end=u,e=4;break;case\"utf8\":this.fillLast=s,e=4;break;case\"base64\":this.text=c,this.end=f,e=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function o(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,\"�\";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,\"�\";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,\"�\"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function l(t,e){if((t.length-e)%2==0){var r=t.toString(\"utf16le\",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString(\"utf16le\",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString(\"base64\",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString(\"base64\",e,t.length-r))}function f(t){var e=t&&t.length?this.write(t):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):\"\"}e.s=a,a.prototype.write=function(t){if(0===t.length)return\"\";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||\"\"},a.prototype.end=function(t){var e=t&&t.length?this.write(t):\"\";return this.lastNeed?e+\"�\":e},a.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=o(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=o(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString(\"utf8\",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString(\"utf8\",e,n)},a.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},90715:function(t,e,r){var n=r(32791),i=r(41633)(\"stream-parser\");t.exports=function(t){var e=t&&\"function\"==typeof t._transform,r=t&&\"function\"==typeof t._write;if(!e&&!r)throw new Error(\"must pass a Writable or Transform stream in\");i(\"extending Parser into stream\"),t._bytes=c,t._skipBytes=f,e&&(t._passthrough=h),e?t._transform=d:t._write=p};var a=-1,o=0,s=1,l=2;function u(t){i(\"initializing parser stream\"),t._parserBytesLeft=0,t._parserBuffers=[],t._parserBuffered=0,t._parserState=a,t._parserCallback=null,\"function\"==typeof t.push&&(t._parserOutput=t.push.bind(t)),t._parserInit=!0}function c(t,e){n(!this._parserCallback,'there is already a \"callback\" set!'),n(isFinite(t)&&t>0,'can only buffer a finite number of bytes > 0, got \"'+t+'\"'),this._parserInit||u(this),i(\"buffering %o bytes\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=o}function f(t,e){n(!this._parserCallback,'there is already a \"callback\" set!'),n(t>0,'can only skip > 0 bytes, got \"'+t+'\"'),this._parserInit||u(this),i(\"skipping %o bytes\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=s}function h(t,e){n(!this._parserCallback,'There is already a \"callback\" set!'),n(t>0,'can only pass through > 0 bytes, got \"'+t+'\"'),this._parserInit||u(this),i(\"passing through %o bytes\",t),this._parserBytesLeft=t,this._parserCallback=e,this._parserState=l}function p(t,e,r){this._parserInit||u(this),i(\"write(%o bytes)\",t.length),\"function\"==typeof e&&(r=e),g(this,t,null,r)}function d(t,e,r){this._parserInit||u(this),i(\"transform(%o bytes)\",t.length),\"function\"!=typeof e&&(e=this._parserOutput),g(this,t,e,r)}function v(t,e,r,n){if(t._parserBytesLeft-=e.length,i(\"%o bytes left for stream piece\",t._parserBytesLeft),t._parserState===o?(t._parserBuffers.push(e),t._parserBuffered+=e.length):t._parserState===l&&r(e),0!==t._parserBytesLeft)return n;var s=t._parserCallback;if(s&&t._parserState===o&&t._parserBuffers.length>1&&(e=Buffer.concat(t._parserBuffers,t._parserBuffered)),t._parserState!==o&&(e=null),t._parserCallback=null,t._parserBuffered=0,t._parserState=a,t._parserBuffers.splice(0),s){var u=[];e&&u.push(e),r&&u.push(r);var c=s.length>u.length;c&&u.push(y(n));var f=s.apply(t,u);if(!c||n===f)return n}}var g=y((function t(e,r,n,i){return e._parserBytesLeft<=0?i(new Error(\"got data but not currently parsing anything\")):r.length<=e._parserBytesLeft?function(){return v(e,r,n,i)}:function(){var a=r.slice(0,e._parserBytesLeft);return v(e,a,n,(function(o){return o?i(o):r.length>a.length?function(){return t(e,r.slice(a.length),n,i)}:void 0}))}}));function y(t){return function(){for(var e=t.apply(this,arguments);\"function\"==typeof e;)e=e();return e}}},41633:function(t,e,r){var n=r(90386);function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==n&&\"env\"in n&&(t=n.env.DEBUG),t}(e=t.exports=r(74469)).log=function(){return\"object\"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var r=this.useColors;if(t[0]=(r?\"%c\":\"\")+this.namespace+(r?\" %c\":\" \")+t[0]+(r?\"%c \":\" \")+\"+\"+e.humanize(this.diff),r){var n=\"color: \"+this.color;t.splice(1,0,n,\"color: inherit\");var i=0,a=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){\"%%\"!==t&&(i++,\"%c\"===t&&(a=i))})),t.splice(a,0,n)}},e.save=function(t){try{null==t?e.storage.removeItem(\"debug\"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!(\"undefined\"==typeof window||!window.process||\"renderer\"!==window.process.type)||(\"undefined\"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||\"undefined\"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))},e.storage=\"undefined\"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}},e.enable(i())},74469:function(t,e,r){var n;function i(t){function r(){if(r.enabled){var t=r,i=+new Date,a=i-(n||i);t.diff=a,t.prev=n,t.curr=i,n=i;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=e.coerce(o[0]),\"string\"!=typeof o[0]&&o.unshift(\"%O\");var l=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,(function(r,n){if(\"%%\"===r)return r;l++;var i=e.formatters[n];if(\"function\"==typeof i){var a=o[l];r=i.call(t,a),o.splice(l,1),l--}return r})),e.formatArgs.call(t,o),(r.log||e.log||console.log.bind(console)).apply(t,o)}}return r.namespace=t,r.enabled=e.enabled(t),r.useColors=e.useColors(),r.color=function(t){var r,n=0;for(r in t)n=(n<<5)-n+t.charCodeAt(r),n|=0;return e.colors[Math.abs(n)%e.colors.length]}(t),\"function\"==typeof e.init&&e.init(r),r}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable(\"\")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var r=(\"string\"==typeof t?t:\"\").split(/[\\s,]+/),n=r.length,i=0;i<n;i++)r[i]&&(\"-\"===(t=r[i].replace(/\\*/g,\".*?\"))[0]?e.skips.push(new RegExp(\"^\"+t.substr(1)+\"$\")):e.names.push(new RegExp(\"^\"+t+\"$\")))},e.enabled=function(t){var r,n;for(r=0,n=e.skips.length;r<n;r++)if(e.skips[r].test(t))return!1;for(r=0,n=e.names.length;r<n;r++)if(e.names[r].test(t))return!0;return!1},e.humanize=r(11375),e.names=[],e.skips=[],e.formatters={}},11375:function(t){var e=1e3,r=60*e,n=60*r,i=24*n;function a(t,e,r){if(!(t<e))return t<1.5*e?Math.floor(t/e)+\" \"+r:Math.ceil(t/e)+\" \"+r+\"s\"}t.exports=function(t,o){o=o||{};var s,l=typeof t;if(\"string\"===l&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var a=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(a){var o=parseFloat(a[1]);switch((a[2]||\"ms\").toLowerCase()){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return 315576e5*o;case\"days\":case\"day\":case\"d\":return o*i;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return o*n;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return o*r;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return o*e;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return o;default:return}}}}(t);if(\"number\"===l&&!1===isNaN(t))return o.long?a(s=t,i,\"day\")||a(s,n,\"hour\")||a(s,r,\"minute\")||a(s,e,\"second\")||s+\" ms\":function(t){return t>=i?Math.round(t/i)+\"d\":t>=n?Math.round(t/n)+\"h\":t>=r?Math.round(t/r)+\"m\":t>=e?Math.round(t/e)+\"s\":t+\"ms\"}(t);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(t))}},99011:function(t,e,r){\"use strict\";var n=r(88641);t.exports=function(t,e,r){if(null==t)throw Error(\"First argument should be a string\");if(null==e)throw Error(\"Separator should be a string or a RegExp\");r?(\"string\"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=[\"[]\",\"()\",\"{}\",\"<>\",'\"\"',\"''\",\"``\",\"“”\",\"«»\"]:(\"string\"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map((function(t){return 1===t.length&&(t+=t),t})));var i=n.parse(t,{flat:!0,brackets:r.ignore}),a=i[0].split(e);if(r.escape){for(var o=[],s=0;s<a.length;s++){var l=a[s],u=a[s+1];\"\\\\\"===l[l.length-1]&&\"\\\\\"!==l[l.length-2]?(o.push(l+e+u),s++):o.push(l)}a=o}for(s=0;s<a.length;s++)i[0]=a[s],a[s]=n.stringify(i,{flat:!0});return a}},68664:function(t){\"use strict\";t.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];var u,c=0,f=[],h=[];function p(e){var l=[e],u=[e];for(r[e]=n[e]=c,i[e]=!0,c+=1;u.length>0;){e=u[u.length-1];var p=t[e];if(a[e]<p.length){for(var d=a[e];d<p.length;++d){var v=p[d];if(r[v]<0){r[v]=n[v]=c,i[v]=!0,c+=1,l.push(v),u.push(v);break}i[v]&&(n[e]=0|Math.min(n[e],n[v])),o[v]>=0&&s[e].push(o[v])}a[e]=d}else{if(n[e]===r[e]){var g=[],y=[],m=0;for(d=l.length-1;d>=0;--d){var x=l[d];if(i[x]=!1,g.push(x),y.push(s[x]),m+=s[x].length,o[x]=f.length,x===e){l.length=d;break}}f.push(g);var b=new Array(m);for(d=0;d<y.length;d++)for(var _=0;_<y[d].length;_++)b[--m]=y[d][_];h.push(b)}u.pop()}}}for(l=0;l<e;++l)r[l]<0&&p(l);for(l=0;l<h.length;l++){var d=h[l];if(0!==d.length){d.sort((function(t,e){return t-e})),u=[d[0]];for(var v=1;v<d.length;v++)d[v]!==d[v-1]&&u.push(d[v]);h[l]=u}}return{components:f,adjacencyList:h}}},7095:function(t,e,r){\"use strict\";r.r(e);var n=2*Math.PI,i=function(t,e,r,n,i,a,o){var s=t.x,l=t.y;return{x:n*(s*=e)-i*(l*=r)+a,y:i*s+n*l+o}},a=function(t,e){var r=1.5707963267948966===e?.551915024494:-1.5707963267948966===e?-.551915024494:4/3*Math.tan(e/4),n=Math.cos(t),i=Math.sin(t),a=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},o=function(t,e,r,n){var i=t*r+e*n;return i>1&&(i=1),i<-1&&(i=-1),(t*n-e*r<0?-1:1)*Math.acos(i)};e.default=function(t){var e=t.px,r=t.py,s=t.cx,l=t.cy,u=t.rx,c=t.ry,f=t.xAxisRotation,h=void 0===f?0:f,p=t.largeArcFlag,d=void 0===p?0:p,v=t.sweepFlag,g=void 0===v?0:v,y=[];if(0===u||0===c)return[];var m=Math.sin(h*n/360),x=Math.cos(h*n/360),b=x*(e-s)/2+m*(r-l)/2,_=-m*(e-s)/2+x*(r-l)/2;if(0===b&&0===_)return[];u=Math.abs(u),c=Math.abs(c);var w=Math.pow(b,2)/Math.pow(u,2)+Math.pow(_,2)/Math.pow(c,2);w>1&&(u*=Math.sqrt(w),c*=Math.sqrt(w));var T=function(t,e,r,i,a,s,l,u,c,f,h,p){var d=Math.pow(a,2),v=Math.pow(s,2),g=Math.pow(h,2),y=Math.pow(p,2),m=d*v-d*y-v*g;m<0&&(m=0),m/=d*y+v*g;var x=(m=Math.sqrt(m)*(l===u?-1:1))*a/s*p,b=m*-s/a*h,_=f*x-c*b+(t+r)/2,w=c*x+f*b+(e+i)/2,T=(h-x)/a,k=(p-b)/s,A=(-h-x)/a,M=(-p-b)/s,S=o(1,0,T,k),E=o(T,k,A,M);return 0===u&&E>0&&(E-=n),1===u&&E<0&&(E+=n),[_,w,S,E]}(e,r,s,l,u,c,d,g,m,x,b,_),k=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}(T,4),A=k[0],M=k[1],S=k[2],E=k[3],L=Math.abs(E)/(n/4);Math.abs(1-L)<1e-7&&(L=1);var C=Math.max(Math.ceil(L),1);E/=C;for(var P=0;P<C;P++)y.push(a(S,E)),S+=E;return y.map((function(t){var e=i(t[0],u,c,x,m,A,M),r=e.x,n=e.y,a=i(t[1],u,c,x,m,A,M),o=a.x,s=a.y,l=i(t[2],u,c,x,m,A,M);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}}))}},1750:function(t,e,r){\"use strict\";var n=r(95616),i=r(65185),a=r(29988),o=r(89546),s=r(32791);t.exports=function(t){if(Array.isArray(t)&&1===t.length&&\"string\"==typeof t[0]&&(t=t[0]),\"string\"==typeof t&&(s(o(t),\"String is not an SVG path.\"),t=n(t)),s(Array.isArray(t),\"Argument should be a string or an array of path segments.\"),t=i(t),!(t=a(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var u=t[r].slice(1),c=0;c<u.length;c+=2)u[c+0]<e[0]&&(e[0]=u[c+0]),u[c+1]<e[1]&&(e[1]=u[c+1]),u[c+0]>e[2]&&(e[2]=u[c+0]),u[c+1]>e[3]&&(e[3]=u[c+1]);return e}},29988:function(t,e,r){\"use strict\";t.exports=function(t){for(var e,r=[],o=0,s=0,l=0,u=0,c=null,f=null,h=0,p=0,d=0,v=t.length;d<v;d++){var g=t[d],y=g[0];switch(y){case\"M\":l=g[1],u=g[2];break;case\"A\":var m=n({px:h,py:p,cx:g[6],cy:g[7],rx:g[1],ry:g[2],xAxisRotation:g[3],largeArcFlag:g[4],sweepFlag:g[5]});if(!m.length)continue;for(var x,b=0;b<m.length;b++)g=[\"C\",(x=m[b]).x1,x.y1,x.x2,x.y2,x.x,x.y],b<m.length-1&&r.push(g);break;case\"S\":var _=h,w=p;\"C\"!=e&&\"S\"!=e||(_+=_-o,w+=w-s),g=[\"C\",_,w,g[1],g[2],g[3],g[4]];break;case\"T\":\"Q\"==e||\"T\"==e?(c=2*h-c,f=2*p-f):(c=h,f=p),g=a(h,p,c,f,g[1],g[2]);break;case\"Q\":c=g[1],f=g[2],g=a(h,p,g[1],g[2],g[3],g[4]);break;case\"L\":g=i(h,p,g[1],g[2]);break;case\"H\":g=i(h,p,g[1],p);break;case\"V\":g=i(h,p,h,g[1]);break;case\"Z\":g=i(h,p,l,u)}e=y,h=g[g.length-2],p=g[g.length-1],g.length>4?(o=g[g.length-4],s=g[g.length-3]):(o=h,s=p),r.push(g)}return r};var n=r(7095);function i(t,e,r,n){return[\"C\",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return[\"C\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},82019:function(t,e,r){\"use strict\";var n,i=r(1750),a=r(95616),o=r(31457),s=r(89546),l=r(44781),u=document.createElement(\"canvas\"),c=u.getContext(\"2d\");t.exports=function(t,e){if(!s(t))throw Error(\"Argument should be valid svg path string\");var r,f;e||(e={}),e.shape?(r=e.shape[0],f=e.shape[1]):(r=u.width=e.w||e.width||200,f=u.height=e.h||e.height||200);var h=Math.min(r,f),p=e.stroke||0,d=e.viewbox||e.viewBox||i(t),v=[r/(d[2]-d[0]),f/(d[3]-d[1])],g=Math.min(v[0]||0,v[1]||0)/2;if(c.fillStyle=\"black\",c.fillRect(0,0,r,f),c.fillStyle=\"white\",p&&(\"number\"!=typeof p&&(p=1),c.strokeStyle=p>0?\"white\":\"black\",c.lineWidth=Math.abs(p)),c.translate(.5*r,.5*f),c.scale(g,g),function(){if(null!=n)return n;var t=document.createElement(\"canvas\").getContext(\"2d\");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D(\"M0,0h1v1h-1v-1Z\");t.fillStyle=\"black\",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var y=new Path2D(t);c.fill(y),p&&c.stroke(y)}else{var m=a(t);o(c,m),c.fill(),p&&c.stroke()}return c.setTransform(1,0,0,1,0,0),l(c,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*h})}},84267:function(t,e,r){var n;!function(i){var a=/^\\s+/,o=/\\s+$/,s=0,l=i.round,u=i.min,c=i.max,f=i.random;function h(t,e){if(e=e||{},(t=t||\"\")instanceof h)return t;if(!(this instanceof h))return new h(t,e);var r=function(t){var e,r,n,s={r:0,g:0,b:0},l=1,f=null,h=null,p=null,d=!1,v=!1;return\"string\"==typeof t&&(t=function(t){t=t.replace(a,\"\").replace(o,\"\").toLowerCase();var e,r=!1;if(C[t])t=C[t],r=!0;else if(\"transparent\"==t)return{r:0,g:0,b:0,a:0,format:\"name\"};return(e=H.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=H.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=H.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=H.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=H.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=H.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=H.hex8.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),a:N(e[4]),format:r?\"name\":\"hex8\"}:(e=H.hex6.exec(t))?{r:z(e[1]),g:z(e[2]),b:z(e[3]),format:r?\"name\":\"hex\"}:(e=H.hex4.exec(t))?{r:z(e[1]+\"\"+e[1]),g:z(e[2]+\"\"+e[2]),b:z(e[3]+\"\"+e[3]),a:N(e[4]+\"\"+e[4]),format:r?\"name\":\"hex8\"}:!!(e=H.hex3.exec(t))&&{r:z(e[1]+\"\"+e[1]),g:z(e[2]+\"\"+e[2]),b:z(e[3]+\"\"+e[3]),format:r?\"name\":\"hex\"}}(t)),\"object\"==typeof t&&(q(t.r)&&q(t.g)&&q(t.b)?(e=t.r,r=t.g,n=t.b,s={r:255*I(e,255),g:255*I(r,255),b:255*I(n,255)},d=!0,v=\"%\"===String(t.r).substr(-1)?\"prgb\":\"rgb\"):q(t.h)&&q(t.s)&&q(t.v)?(f=F(t.s),h=F(t.v),s=function(t,e,r){t=6*I(t,360),e=I(e,100),r=I(r,100);var n=i.floor(t),a=t-n,o=r*(1-e),s=r*(1-a*e),l=r*(1-(1-a)*e),u=n%6;return{r:255*[r,s,o,o,l,r][u],g:255*[l,r,r,s,o,o][u],b:255*[o,o,l,r,r,s][u]}}(t.h,f,h),d=!0,v=\"hsv\"):q(t.h)&&q(t.s)&&q(t.l)&&(f=F(t.s),p=F(t.l),s=function(t,e,r){var n,i,a;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=I(t,360),e=I(e,100),r=I(r,100),0===e)n=i=a=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(t.h,f,p),d=!0,v=\"hsl\"),t.hasOwnProperty(\"a\")&&(l=t.a)),l=O(l),{ok:d,format:t.format||v,r:u(255,c(s.r,0)),g:u(255,c(s.g,0)),b:u(255,c(s.b,0)),a:l}}(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=l(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=l(this._r)),this._g<1&&(this._g=l(this._g)),this._b<1&&(this._b=l(this._b)),this._ok=r.ok,this._tc_id=s++}function p(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=(a+o)/2;if(a==o)n=i=0;else{var l=a-o;switch(i=s>.5?l/(2-a-o):l/(a+o),a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,l:s}}function d(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var n,i,a=c(t,e,r),o=u(t,e,r),s=a,l=a-o;if(i=0===a?0:l/a,a==o)n=0;else{switch(a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,v:s}}function v(t,e,r,n){var i=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))];return n&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join(\"\")}function g(t,e,r,n){return[R(B(n)),R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16))].join(\"\")}function y(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s-=e/100,r.s=D(r.s),h(r)}function m(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.s+=e/100,r.s=D(r.s),h(r)}function x(t){return h(t).desaturate(100)}function b(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l+=e/100,r.l=D(r.l),h(r)}function _(t,e){e=0===e?0:e||10;var r=h(t).toRgb();return r.r=c(0,u(255,r.r-l(-e/100*255))),r.g=c(0,u(255,r.g-l(-e/100*255))),r.b=c(0,u(255,r.b-l(-e/100*255))),h(r)}function w(t,e){e=0===e?0:e||10;var r=h(t).toHsl();return r.l-=e/100,r.l=D(r.l),h(r)}function T(t,e){var r=h(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,h(r)}function k(t){var e=h(t).toHsl();return e.h=(e.h+180)%360,h(e)}function A(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+120)%360,s:e.s,l:e.l}),h({h:(r+240)%360,s:e.s,l:e.l})]}function M(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+90)%360,s:e.s,l:e.l}),h({h:(r+180)%360,s:e.s,l:e.l}),h({h:(r+270)%360,s:e.s,l:e.l})]}function S(t){var e=h(t).toHsl(),r=e.h;return[h(t),h({h:(r+72)%360,s:e.s,l:e.l}),h({h:(r+216)%360,s:e.s,l:e.l})]}function E(t,e,r){e=e||6,r=r||30;var n=h(t).toHsl(),i=360/r,a=[h(t)];for(n.h=(n.h-(i*e>>1)+720)%360;--e;)n.h=(n.h+i)%360,a.push(h(n));return a}function L(t,e){e=e||6;for(var r=h(t).toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/e;e--;)o.push(h({h:n,s:i,v:a})),a=(a+s)%1;return o}h.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,n=this.toRgb();return t=n.r/255,e=n.g/255,r=n.b/255,.2126*(t<=.03928?t/12.92:i.pow((t+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:i.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:i.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=O(t),this._roundA=l(100*this._a)/100,this},toHsv:function(){var t=d(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=d(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.v);return 1==this._a?\"hsv(\"+e+\", \"+r+\"%, \"+n+\"%)\":\"hsva(\"+e+\", \"+r+\"%, \"+n+\"%, \"+this._roundA+\")\"},toHsl:function(){var t=p(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=p(this._r,this._g,this._b),e=l(360*t.h),r=l(100*t.s),n=l(100*t.l);return 1==this._a?\"hsl(\"+e+\", \"+r+\"%, \"+n+\"%)\":\"hsla(\"+e+\", \"+r+\"%, \"+n+\"%, \"+this._roundA+\")\"},toHex:function(t){return v(this._r,this._g,this._b,t)},toHexString:function(t){return\"#\"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var a=[R(l(t).toString(16)),R(l(e).toString(16)),R(l(r).toString(16)),R(B(n))];return i&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join(\"\")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return\"#\"+this.toHex8(t)},toRgb:function(){return{r:l(this._r),g:l(this._g),b:l(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\"rgb(\"+l(this._r)+\", \"+l(this._g)+\", \"+l(this._b)+\")\":\"rgba(\"+l(this._r)+\", \"+l(this._g)+\", \"+l(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:l(100*I(this._r,255))+\"%\",g:l(100*I(this._g,255))+\"%\",b:l(100*I(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\"rgb(\"+l(100*I(this._r,255))+\"%, \"+l(100*I(this._g,255))+\"%, \"+l(100*I(this._b,255))+\"%)\":\"rgba(\"+l(100*I(this._r,255))+\"%, \"+l(100*I(this._g,255))+\"%, \"+l(100*I(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0===this._a?\"transparent\":!(this._a<1)&&(P[v(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\"#\"+g(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?\"GradientType = 1, \":\"\";if(t){var i=h(t);r=\"#\"+g(i._r,i._g,i._b,i._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+n+\"startColorstr=\"+e+\",endColorstr=\"+r+\")\"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||\"hex\"!==t&&\"hex6\"!==t&&\"hex3\"!==t&&\"hex4\"!==t&&\"hex8\"!==t&&\"name\"!==t?(\"rgb\"===t&&(r=this.toRgbString()),\"prgb\"===t&&(r=this.toPercentageRgbString()),\"hex\"!==t&&\"hex6\"!==t||(r=this.toHexString()),\"hex3\"===t&&(r=this.toHexString(!0)),\"hex4\"===t&&(r=this.toHex8String(!0)),\"hex8\"===t&&(r=this.toHex8String()),\"name\"===t&&(r=this.toName()),\"hsl\"===t&&(r=this.toHslString()),\"hsv\"===t&&(r=this.toHsvString()),r||this.toHexString()):\"name\"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return h(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(_,arguments)},darken:function(){return this._applyModification(w,arguments)},desaturate:function(){return this._applyModification(y,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(x,arguments)},spin:function(){return this._applyModification(T,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(k,arguments)},monochromatic:function(){return this._applyCombination(L,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},h.fromRatio=function(t,e){if(\"object\"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=\"a\"===n?t[n]:F(t[n]));t=r}return h(t,e)},h.equals=function(t,e){return!(!t||!e)&&h(t).toRgbString()==h(e).toRgbString()},h.random=function(){return h.fromRatio({r:f(),g:f(),b:f()})},h.mix=function(t,e,r){r=0===r?0:r||50;var n=h(t).toRgb(),i=h(e).toRgb(),a=r/100;return h({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},h.readability=function(t,e){var r=h(t),n=h(e);return(i.max(r.getLuminance(),n.getLuminance())+.05)/(i.min(r.getLuminance(),n.getLuminance())+.05)},h.isReadable=function(t,e,r){var n,i,a,o,s,l=h.readability(t,e);switch(i=!1,(a=r,\"AA\"!==(o=((a=a||{level:\"AA\",size:\"small\"}).level||\"AA\").toUpperCase())&&\"AAA\"!==o&&(o=\"AA\"),\"small\"!==(s=(a.size||\"small\").toLowerCase())&&\"large\"!==s&&(s=\"small\"),n={level:o,size:s}).level+n.size){case\"AAsmall\":case\"AAAlarge\":i=l>=4.5;break;case\"AAlarge\":i=l>=3;break;case\"AAAsmall\":i=l>=7}return i},h.mostReadable=function(t,e,r){var n,i,a,o,s=null,l=0;i=(r=r||{}).includeFallbackColors,a=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=h.readability(t,e[u]))>l&&(l=n,s=h(e[u]));return h.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors=!1,h.mostReadable(t,[\"#fff\",\"#000\"],r))};var C=h.names={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},P=h.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(C);function O(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function I(t,e){(function(t){return\"string\"==typeof t&&-1!=t.indexOf(\".\")&&1===parseFloat(t)})(t)&&(t=\"100%\");var r=function(t){return\"string\"==typeof t&&-1!=t.indexOf(\"%\")}(t);return t=u(e,c(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),i.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function D(t){return u(1,c(0,t))}function z(t){return parseInt(t,16)}function R(t){return 1==t.length?\"0\"+t:\"\"+t}function F(t){return t<=1&&(t=100*t+\"%\"),t}function B(t){return i.round(255*parseFloat(t)).toString(16)}function N(t){return z(t)/255}var j,U,V,H=(U=\"[\\\\s|\\\\(]+(\"+(j=\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")\\\\s*\\\\)?\",V=\"[\\\\s|\\\\(]+(\"+j+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")[,|\\\\s]+(\"+j+\")\\\\s*\\\\)?\",{CSS_UNIT:new RegExp(j),rgb:new RegExp(\"rgb\"+U),rgba:new RegExp(\"rgba\"+V),hsl:new RegExp(\"hsl\"+U),hsla:new RegExp(\"hsla\"+V),hsv:new RegExp(\"hsv\"+U),hsva:new RegExp(\"hsva\"+V),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function q(t){return!!H.CSS_UNIT.exec(t)}t.exports?t.exports=h:void 0===(n=function(){return h}.call(e,r,e,t))||(t.exports=n)}(Math)},57060:function(t){\"use strict\";t.exports=r,t.exports.float32=t.exports.float=r,t.exports.fract32=t.exports.fract=function(t,e){if(t.length){if(t instanceof Float32Array)return new Float32Array(t.length);e instanceof Float32Array||(e=r(t));for(var n=0,i=e.length;n<i;n++)e[n]=t[n]-e[n];return e}return r(t-r(t))};var e=new Float32Array(1);function r(t){return t.length?t instanceof Float32Array?t:new Float32Array(t):(e[0]=t,e[0])}},75686:function(t,e,r){\"use strict\";var n=r(25677);t.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||\"px\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\"%\":return e.clientHeight/100;case\"ch\":case\"ex\":return function(t,e){var r=document.createElement(\"div\");r.style[\"font-size\"]=\"128\"+t,e.appendChild(r);var n=a(r,\"font-size\")/128;return e.removeChild(r),n}(t,e);case\"em\":return a(e,\"font-size\");case\"rem\":return a(document.body,\"font-size\");case\"vw\":return window.innerWidth/100;case\"vh\":return window.innerHeight/100;case\"vmin\":return Math.min(window.innerWidth,window.innerHeight)/100;case\"vmax\":return Math.max(window.innerWidth,window.innerHeight)/100;case\"in\":return i;case\"cm\":return i/2.54;case\"mm\":return i/25.4;case\"pt\":return i/72;case\"pc\":return i/6}return 1}},96892:function(t,e,r){\"use strict\";function n(t){return t}function i(t,e){return\"string\"==typeof e&&(e=t.objects[e]),\"GeometryCollection\"===e.type?{type:\"FeatureCollection\",features:e.geometries.map((function(e){return a(t,e)}))}:a(t,e)}function a(t,e){var r=e.id,i=e.bbox,a=null==e.properties?{}:e.properties,o=function(t,e){var r=function(t){if(null==t)return n;var e,r,i=t.scale[0],a=t.scale[1],o=t.translate[0],s=t.translate[1];return function(t,n){n||(e=r=0);var l=2,u=t.length,c=new Array(u);for(c[0]=(e+=t[0])*i+o,c[1]=(r+=t[1])*a+s;l<u;)c[l]=t[l],++l;return c}}(t.transform),i=t.arcs;function a(t,e){e.length&&e.pop();for(var n=i[t<0?~t:t],a=0,o=n.length;a<o;++a)e.push(r(n[a],a));t<0&&function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r}(e,o)}function o(t){return r(t)}function s(t){for(var e=[],r=0,n=t.length;r<n;++r)a(t[r],e);return e.length<2&&e.push(e[0]),e}function l(t){for(var e=s(t);e.length<4;)e.push(e[0]);return e}function u(t){return t.map(l)}return function t(e){var r,n=e.type;switch(n){case\"GeometryCollection\":return{type:n,geometries:e.geometries.map(t)};case\"Point\":r=o(e.coordinates);break;case\"MultiPoint\":r=e.coordinates.map(o);break;case\"LineString\":r=s(e.arcs);break;case\"MultiLineString\":r=e.arcs.map(s);break;case\"Polygon\":r=u(e.arcs);break;case\"MultiPolygon\":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}(t,e);return null==r&&null==i?{type:\"Feature\",properties:a,geometry:o}:null==i?{type:\"Feature\",id:r,properties:a,geometry:o}:{type:\"Feature\",id:r,bbox:i,properties:a,geometry:o}}r.d(e,{zL:function(){return i}})},73116:function(t,e,r){\"use strict\";var n=r(24511);t.exports=function(t){if(\"function\"!=typeof t)return!1;if(!hasOwnProperty.call(t,\"length\"))return!1;try{if(\"number\"!=typeof t.length)return!1;if(\"function\"!=typeof t.call)return!1;if(\"function\"!=typeof t.apply)return!1}catch(t){return!1}return!n(t)}},69190:function(t,e,r){\"use strict\";var n=r(24582),i=r(47403),a=r(9234),o=r(6048),s=function(t,e){return t.replace(\"%v\",o(e))};t.exports=function(t,e,r){if(!i(r))throw new TypeError(s(e,t));if(!n(t)){if(\"default\"in r)return r.default;if(r.isOptional)return null}var o=a(r.errorMessage);throw n(o)||(o=e),new TypeError(s(o,t))}},18497:function(t){\"use strict\";t.exports=function(t){try{return t.toString()}catch(e){try{return String(t)}catch(t){return null}}}},6048:function(t,e,r){\"use strict\";var n=r(18497),i=/[\\n\\r\\u2028\\u2029]/g;t.exports=function(t){var e=n(t);return null===e?\"<Non-coercible to string value>\":(e.length>100&&(e=e.slice(0,99)+\"…\"),e=e.replace(i,(function(t){switch(t){case\"\\n\":return\"\\\\n\";case\"\\r\":return\"\\\\r\";case\"\\u2028\":return\"\\\\u2028\";case\"\\u2029\":return\"\\\\u2029\";default:throw new Error(\"Unexpected character\")}})))}},47403:function(t,e,r){\"use strict\";var n=r(24582),i={object:!0,function:!0,undefined:!0};t.exports=function(t){return!!n(t)&&hasOwnProperty.call(i,typeof t)}},82527:function(t,e,r){\"use strict\";var n=r(69190),i=r(84985);t.exports=function(t){return i(t)?t:n(t,\"%v is not a plain function\",arguments[1])}},84985:function(t,e,r){\"use strict\";var n=r(73116),i=/^\\s*class[\\s{/}]/,a=Function.prototype.toString;t.exports=function(t){return!!n(t)&&!i.test(a.call(t))}},24511:function(t,e,r){\"use strict\";var n=r(47403);t.exports=function(t){if(!n(t))return!1;try{return!!t.constructor&&t.constructor.prototype===t}catch(t){return!1}}},9234:function(t,e,r){\"use strict\";var n=r(24582),i=r(47403),a=Object.prototype.toString;t.exports=function(t){if(!n(t))return null;if(i(t)){var e=t.toString;if(\"function\"!=typeof e)return null;if(e===a)return null}try{return\"\"+t}catch(t){return null}}},10424:function(t,e,r){\"use strict\";var n=r(69190),i=r(24582);t.exports=function(t){return i(t)?t:n(t,\"Cannot use %v\",arguments[1])}},24582:function(t){\"use strict\";t.exports=function(t){return null!=t}},58404:function(t,e,r){\"use strict\";var n=r(13547),i=r(12129),a=r(12856).Buffer;r.g.__TYPEDARRAY_POOL||(r.g.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o=\"undefined\"!=typeof Uint8ClampedArray,s=\"undefined\"!=typeof BigUint64Array,l=\"undefined\"!=typeof BigInt64Array,u=r.g.__TYPEDARRAY_POOL;u.UINT8C||(u.UINT8C=i([32,0])),u.BIGUINT64||(u.BIGUINT64=i([32,0])),u.BIGINT64||(u.BIGINT64=i([32,0])),u.BUFFER||(u.BUFFER=i([32,0]));var c=u.DATA,f=u.BUFFER;function h(t){if(t){var e=t.length||t.byteLength,r=n.log2(e);c[r].push(t)}}function p(t){t=n.nextPow2(t);var e=n.log2(t),r=c[e];return r.length>0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function v(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function y(t){return new Int8Array(p(t),0,t)}function m(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function A(t){return new DataView(p(t),0,t)}function M(t){t=n.nextPow2(t);var e=n.log2(t),r=f[e];return r.length>0?r.pop():new a(t)}e.free=function(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if(\"[object ArrayBuffer]\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|n.log2(e);c[r].push(t)}},e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=function(t){h(t.buffer)},e.freeArrayBuffer=h,e.freeBuffer=function(t){f[n.log2(t.length)].push(t)},e.malloc=function(t,e){if(void 0===e||\"arraybuffer\"===e)return p(t);switch(e){case\"uint8\":return d(t);case\"uint16\":return v(t);case\"uint32\":return g(t);case\"int8\":return y(t);case\"int16\":return m(t);case\"int32\":return x(t);case\"float\":case\"float32\":return b(t);case\"double\":case\"float64\":return _(t);case\"uint8_clamped\":return w(t);case\"bigint64\":return k(t);case\"biguint64\":return T(t);case\"buffer\":return M(t);case\"data\":case\"dataview\":return A(t);default:return null}return null},e.mallocArrayBuffer=p,e.mallocUint8=d,e.mallocUint16=v,e.mallocUint32=g,e.mallocInt8=y,e.mallocInt16=m,e.mallocInt32=x,e.mallocFloat32=e.mallocFloat=b,e.mallocFloat64=e.mallocDouble=_,e.mallocUint8Clamped=w,e.mallocBigUint64=T,e.mallocBigInt64=k,e.mallocDataView=A,e.mallocBuffer=M,e.clearCache=function(){for(var t=0;t<32;++t)u.UINT8[t].length=0,u.UINT16[t].length=0,u.UINT32[t].length=0,u.INT8[t].length=0,u.INT16[t].length=0,u.INT32[t].length=0,u.FLOAT[t].length=0,u.DOUBLE[t].length=0,u.BIGUINT64[t].length=0,u.BIGINT64[t].length=0,u.UINT8C[t].length=0,c[t].length=0,f[t].length=0}},90448:function(t){var e=/[\\'\\\"]/;t.exports=function(t){return t?(e.test(t.charAt(0))&&(t=t.substr(1)),e.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):\"\"}},93447:function(t){\"use strict\";t.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,i=r.length;n<i;n++){var a=r[n];for(var o in a)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===a[o])s=e[o];else{if(!1===a[o])continue;if(\"function\"==typeof a[o]&&void 0===(s=a[o](e[o],t,e)))continue}t[o]=s}}return t}},20588:function(t,e,r){function n(t){try{if(!r.g.localStorage)return!1}catch(t){return!1}var e=r.g.localStorage[t];return null!=e&&\"true\"===String(e).toLowerCase()}t.exports=function(t,e){if(n(\"noDeprecation\"))return t;var r=!1;return function(){if(!r){if(n(\"throwDeprecation\"))throw new Error(e);n(\"traceDeprecation\")?console.trace(e):console.warn(e),r=!0}return t.apply(this,arguments)}}},45920:function(t){t.exports=function(t){return t&&\"object\"==typeof t&&\"function\"==typeof t.copy&&\"function\"==typeof t.fill&&\"function\"==typeof t.readUInt8}},4936:function(t,e,r){\"use strict\";var n=r(47216),i=r(65481),a=r(21099),o=r(9187);function s(t){return t.call.bind(t)}var l=\"undefined\"!=typeof BigInt,u=\"undefined\"!=typeof Symbol,c=s(Object.prototype.toString),f=s(Number.prototype.valueOf),h=s(String.prototype.valueOf),p=s(Boolean.prototype.valueOf);if(l)var d=s(BigInt.prototype.valueOf);if(u)var v=s(Symbol.prototype.valueOf);function g(t,e){if(\"object\"!=typeof t)return!1;try{return e(t),!0}catch(t){return!1}}function y(t){return\"[object Map]\"===c(t)}function m(t){return\"[object Set]\"===c(t)}function x(t){return\"[object WeakMap]\"===c(t)}function b(t){return\"[object WeakSet]\"===c(t)}function _(t){return\"[object ArrayBuffer]\"===c(t)}function w(t){return\"undefined\"!=typeof ArrayBuffer&&(_.working?_(t):t instanceof ArrayBuffer)}function T(t){return\"[object DataView]\"===c(t)}function k(t){return\"undefined\"!=typeof DataView&&(T.working?T(t):t instanceof DataView)}e.isArgumentsObject=n,e.isGeneratorFunction=i,e.isTypedArray=o,e.isPromise=function(t){return\"undefined\"!=typeof Promise&&t instanceof Promise||null!==t&&\"object\"==typeof t&&\"function\"==typeof t.then&&\"function\"==typeof t.catch},e.isArrayBufferView=function(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):o(t)||k(t)},e.isUint8Array=function(t){return\"Uint8Array\"===a(t)},e.isUint8ClampedArray=function(t){return\"Uint8ClampedArray\"===a(t)},e.isUint16Array=function(t){return\"Uint16Array\"===a(t)},e.isUint32Array=function(t){return\"Uint32Array\"===a(t)},e.isInt8Array=function(t){return\"Int8Array\"===a(t)},e.isInt16Array=function(t){return\"Int16Array\"===a(t)},e.isInt32Array=function(t){return\"Int32Array\"===a(t)},e.isFloat32Array=function(t){return\"Float32Array\"===a(t)},e.isFloat64Array=function(t){return\"Float64Array\"===a(t)},e.isBigInt64Array=function(t){return\"BigInt64Array\"===a(t)},e.isBigUint64Array=function(t){return\"BigUint64Array\"===a(t)},y.working=\"undefined\"!=typeof Map&&y(new Map),e.isMap=function(t){return\"undefined\"!=typeof Map&&(y.working?y(t):t instanceof Map)},m.working=\"undefined\"!=typeof Set&&m(new Set),e.isSet=function(t){return\"undefined\"!=typeof Set&&(m.working?m(t):t instanceof Set)},x.working=\"undefined\"!=typeof WeakMap&&x(new WeakMap),e.isWeakMap=function(t){return\"undefined\"!=typeof WeakMap&&(x.working?x(t):t instanceof WeakMap)},b.working=\"undefined\"!=typeof WeakSet&&b(new WeakSet),e.isWeakSet=function(t){return b(t)},_.working=\"undefined\"!=typeof ArrayBuffer&&_(new ArrayBuffer),e.isArrayBuffer=w,T.working=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof DataView&&T(new DataView(new ArrayBuffer(1),0,1)),e.isDataView=k;var A=\"undefined\"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function M(t){return\"[object SharedArrayBuffer]\"===c(t)}function S(t){return void 0!==A&&(void 0===M.working&&(M.working=M(new A)),M.working?M(t):t instanceof A)}function E(t){return g(t,f)}function L(t){return g(t,h)}function C(t){return g(t,p)}function P(t){return l&&g(t,d)}function O(t){return u&&g(t,v)}e.isSharedArrayBuffer=S,e.isAsyncFunction=function(t){return\"[object AsyncFunction]\"===c(t)},e.isMapIterator=function(t){return\"[object Map Iterator]\"===c(t)},e.isSetIterator=function(t){return\"[object Set Iterator]\"===c(t)},e.isGeneratorObject=function(t){return\"[object Generator]\"===c(t)},e.isWebAssemblyCompiledModule=function(t){return\"[object WebAssembly.Module]\"===c(t)},e.isNumberObject=E,e.isStringObject=L,e.isBooleanObject=C,e.isBigIntObject=P,e.isSymbolObject=O,e.isBoxedPrimitive=function(t){return E(t)||L(t)||C(t)||P(t)||O(t)},e.isAnyArrayBuffer=function(t){return\"undefined\"!=typeof Uint8Array&&(w(t)||S(t))},[\"isProxy\",\"isExternal\",\"isModuleNamespaceObject\"].forEach((function(t){Object.defineProperty(e,t,{enumerable:!1,value:function(){throw new Error(t+\" is not supported in userland\")}})}))},43827:function(t,e,r){var n=r(90386),i=Object.getOwnPropertyDescriptors||function(t){for(var e=Object.keys(t),r={},n=0;n<e.length;n++)r[e[n]]=Object.getOwnPropertyDescriptor(t,e[n]);return r},a=/%[sdj%]/g;e.format=function(t){if(!x(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(u(arguments[r]));return e.join(\" \")}r=1;for(var n=arguments,i=n.length,o=String(t).replace(a,(function(t){if(\"%%\"===t)return\"%\";if(r>=i)return t;switch(t){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(t){return\"[Circular]\"}default:return t}})),s=n[r];r<i;s=n[++r])y(s)||!w(s)?o+=\" \"+s:o+=\" \"+u(s);return o},e.deprecate=function(t,r){if(void 0!==n&&!0===n.noDeprecation)return t;if(void 0===n)return function(){return e.deprecate(t,r).apply(this,arguments)};var i=!1;return function(){if(!i){if(n.throwDeprecation)throw new Error(r);n.traceDeprecation?console.trace(r):console.error(r),i=!0}return t.apply(this,arguments)}};var o={},s=/^$/;if(n.env.NODE_DEBUG){var l=n.env.NODE_DEBUG;l=l.replace(/[|\\\\{}()[\\]^$+?.]/g,\"\\\\$&\").replace(/\\*/g,\".*\").replace(/,/g,\"$|^\").toUpperCase(),s=new RegExp(\"^\"+l+\"$\",\"i\")}function u(t,r){var n={seen:[],stylize:f};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(r)?n.showHidden=r:r&&e._extend(n,r),b(n.showHidden)&&(n.showHidden=!1),b(n.depth)&&(n.depth=2),b(n.colors)&&(n.colors=!1),b(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=c),h(n,t,n.depth)}function c(t,e){var r=u.styles[e];return r?\"\u001b[\"+u.colors[r][0]+\"m\"+t+\"\u001b[\"+u.colors[r][1]+\"m\":t}function f(t,e){return t}function h(t,r,n){if(t.customInspect&&r&&A(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return x(i)||(i=h(t,i,n)),i}var a=function(t,e){if(b(e))return t.stylize(\"undefined\",\"undefined\");if(x(e)){var r=\"'\"+JSON.stringify(e).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return t.stylize(r,\"string\")}return m(e)?t.stylize(\"\"+e,\"number\"):g(e)?t.stylize(\"\"+e,\"boolean\"):y(e)?t.stylize(\"null\",\"null\"):void 0}(t,r);if(a)return a;var o=Object.keys(r),s=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(r)),k(r)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return p(r);if(0===o.length){if(A(r)){var l=r.name?\": \"+r.name:\"\";return t.stylize(\"[Function\"+l+\"]\",\"special\")}if(_(r))return t.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(T(r))return t.stylize(Date.prototype.toString.call(r),\"date\");if(k(r))return p(r)}var u,c=\"\",f=!1,w=[\"{\",\"}\"];return v(r)&&(f=!0,w=[\"[\",\"]\"]),A(r)&&(c=\" [Function\"+(r.name?\": \"+r.name:\"\")+\"]\"),_(r)&&(c=\" \"+RegExp.prototype.toString.call(r)),T(r)&&(c=\" \"+Date.prototype.toUTCString.call(r)),k(r)&&(c=\" \"+p(r)),0!==o.length||f&&0!=r.length?n<0?_(r)?t.stylize(RegExp.prototype.toString.call(r),\"regexp\"):t.stylize(\"[Object]\",\"special\"):(t.seen.push(r),u=f?function(t,e,r,n,i){for(var a=[],o=0,s=e.length;o<s;++o)L(e,String(o))?a.push(d(t,e,r,n,String(o),!0)):a.push(\"\");return i.forEach((function(i){i.match(/^\\d+$/)||a.push(d(t,e,r,n,i,!0))})),a}(t,r,n,s,o):o.map((function(e){return d(t,r,n,s,e,f)})),t.seen.pop(),function(t,e,r){return t.reduce((function(t,e){return e.indexOf(\"\\n\"),t+e.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60?r[0]+(\"\"===e?\"\":e+\"\\n \")+\" \"+t.join(\",\\n  \")+\" \"+r[1]:r[0]+e+\" \"+t.join(\", \")+\" \"+r[1]}(u,c,w)):w[0]+c+w[1]}function p(t){return\"[\"+Error.prototype.toString.call(t)+\"]\"}function d(t,e,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=l.set?t.stylize(\"[Getter/Setter]\",\"special\"):t.stylize(\"[Getter]\",\"special\"):l.set&&(s=t.stylize(\"[Setter]\",\"special\")),L(n,i)||(o=\"[\"+i+\"]\"),s||(t.seen.indexOf(l.value)<0?(s=y(r)?h(t,l.value,null):h(t,l.value,r-1)).indexOf(\"\\n\")>-1&&(s=a?s.split(\"\\n\").map((function(t){return\"  \"+t})).join(\"\\n\").slice(2):\"\\n\"+s.split(\"\\n\").map((function(t){return\"   \"+t})).join(\"\\n\")):s=t.stylize(\"[Circular]\",\"special\")),b(o)){if(a&&i.match(/^\\d+$/))return s;(o=JSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.slice(1,-1),o=t.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=t.stylize(o,\"string\"))}return o+\": \"+s}function v(t){return Array.isArray(t)}function g(t){return\"boolean\"==typeof t}function y(t){return null===t}function m(t){return\"number\"==typeof t}function x(t){return\"string\"==typeof t}function b(t){return void 0===t}function _(t){return w(t)&&\"[object RegExp]\"===M(t)}function w(t){return\"object\"==typeof t&&null!==t}function T(t){return w(t)&&\"[object Date]\"===M(t)}function k(t){return w(t)&&(\"[object Error]\"===M(t)||t instanceof Error)}function A(t){return\"function\"==typeof t}function M(t){return Object.prototype.toString.call(t)}function S(t){return t<10?\"0\"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(t=t.toUpperCase(),!o[t])if(s.test(t)){var r=n.pid;o[t]=function(){var n=e.format.apply(e,arguments);console.error(\"%s %d: %s\",t,r,n)}}else o[t]=function(){};return o[t]},e.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},e.types=r(4936),e.isArray=v,e.isBoolean=g,e.isNull=y,e.isNullOrUndefined=function(t){return null==t},e.isNumber=m,e.isString=x,e.isSymbol=function(t){return\"symbol\"==typeof t},e.isUndefined=b,e.isRegExp=_,e.types.isRegExp=_,e.isObject=w,e.isDate=T,e.types.isDate=T,e.isError=k,e.types.isNativeError=k,e.isFunction=A,e.isPrimitive=function(t){return null===t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||\"symbol\"==typeof t||void 0===t},e.isBuffer=r(45920);var E=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function L(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){var t,r;console.log(\"%s - %s\",(r=[S((t=new Date).getHours()),S(t.getMinutes()),S(t.getSeconds())].join(\":\"),[t.getDate(),E[t.getMonth()],r].join(\" \")),e.format.apply(e,arguments))},e.inherits=r(42018),e._extend=function(t,e){if(!e||!w(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t};var C=\"undefined\"!=typeof Symbol?Symbol(\"util.promisify.custom\"):void 0;function P(t,e){if(!t){var r=new Error(\"Promise was rejected with a falsy value\");r.reason=t,t=r}return e(t)}e.promisify=function(t){if(\"function\"!=typeof t)throw new TypeError('The \"original\" argument must be of type Function');if(C&&t[C]){var e;if(\"function\"!=typeof(e=t[C]))throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');return Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var e,r,n=new Promise((function(t,n){e=t,r=n})),i=[],a=0;a<arguments.length;a++)i.push(arguments[a]);i.push((function(t,n){t?r(t):e(n)}));try{t.apply(this,i)}catch(t){r(t)}return n}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),C&&Object.defineProperty(e,C,{value:e,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(e,i(t))},e.promisify.custom=C,e.callbackify=function(t){if(\"function\"!=typeof t)throw new TypeError('The \"original\" argument must be of type Function');function e(){for(var e=[],r=0;r<arguments.length;r++)e.push(arguments[r]);var i=e.pop();if(\"function\"!=typeof i)throw new TypeError(\"The last argument must be of type Function\");var a=this,o=function(){return i.apply(a,arguments)};t.apply(this,e).then((function(t){n.nextTick(o.bind(null,null,t))}),(function(t){n.nextTick(P.bind(null,t,o))}))}return Object.setPrototypeOf(e,Object.getPrototypeOf(t)),Object.defineProperties(e,i(t)),e}},40372:function(t,e,r){var n=r(86249);t.exports=function(t){return n(\"webgl\",t)}},21099:function(t,e,r){\"use strict\";var n=r(31353),i=r(72077),a=r(6614),o=r(40383),s=a(\"Object.prototype.toString\"),l=r(84543)(),u=\"undefined\"==typeof globalThis?r.g:globalThis,c=i(),f=a(\"String.prototype.slice\"),h={},p=Object.getPrototypeOf;l&&o&&p&&n(c,(function(t){if(\"function\"==typeof u[t]){var e=new u[t];if(Symbol.toStringTag in e){var r=p(e),n=o(r,Symbol.toStringTag);if(!n){var i=p(r);n=o(i,Symbol.toStringTag)}h[t]=n.get}}}));var d=r(9187);t.exports=function(t){return!!d(t)&&(l&&Symbol.toStringTag in t?function(t){var e=!1;return n(h,(function(r,n){if(!e)try{var i=r.call(t);i===n&&(e=i)}catch(t){}})),e}(t):f(s(t),8,-1))}},3961:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\"Chinese\",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\"\":{name:\"Chinese\",epochs:[\"BEC\",\"EC\"],monthNumbers:function(t,e){if(\"string\"==typeof t){var r=t.match(l);return r?r[0]:\"\"}var n=this._validateYear(t),i=t.month(),a=\"\"+this.toChineseMonth(n,i);return e&&a.length<2&&(a=\"0\"+a),this.isIntercalaryMonth(n,i)&&(a+=\"i\"),a},monthNames:function(t){if(\"string\"==typeof t){var e=t.match(u);return e?e[0]:\"\"}var r=this._validateYear(t),n=t.month(),i=[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\"闰\"+i),i},monthNamesShort:function(t){if(\"string\"==typeof t){var e=t.match(c);return e?e[0]:\"\"}var r=this._validateYear(t),n=t.month(),i=[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\"闰\"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))\"闰\"===e[0]&&(r=!0,e=e.substring(1)),\"月\"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"].indexOf(e);else{var i=e[e.length-1];r=\"i\"===i||\"I\"===i}return this.toMonthIndex(t,n,r)},dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),\"number\"!=typeof t||t<1888||t>2111)throw e.replace(/\\{0\\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i=this.intercalaryMonth(t);if(r&&e!==i||e<1||e>12)throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return i?!r&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),f[t-f[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o=this._validateYear(t,n.local.invalidyear),s=h[o-h[0]],l=s>>9&4095,u=s>>5&15,c=31&s;(i=a.newDate(l,u,c)).add(4-(i.dayOfWeek()||7),\"d\");var f=this.toJD(t,e,r)-i.toJD();return 1+Math.floor(f/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=f[t-f[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),r=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,i){var a,o,s;if(\"object\"==typeof t)o=t,a=e||{};else{var l;if(!(\"number\"==typeof t&&t>=1888&&t<=2111))throw new Error(\"Lunar year outside range 1888-2111\");if(!(\"number\"==typeof e&&e>=1&&e<=12))throw new Error(\"Lunar month outside range 1 - 12\");if(!(\"number\"==typeof r&&r>=1&&r<=30))throw new Error(\"Lunar day outside range 1 - 30\");\"object\"==typeof n?(l=!1,a=n):(l=!!n,a={}),o={year:t,month:e,day:r,isIntercalary:l}}s=o.day-1;var u,c=f[o.year-f[0]],p=c>>13;u=p&&(o.month>p||o.isIntercalary)?o.month:o.month-1;for(var d=0;d<u;d++)s+=c&1<<12-d?30:29;var v=h[o.year-h[0]],g=new Date(v>>9&4095,(v>>5&15)-1,(31&v)+s);return a.year=g.getFullYear(),a.month=1+g.getMonth(),a.day=g.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),r=function(t,e,r,n){var i,a;if(\"object\"==typeof t)i=t,a=e||{};else{if(!(\"number\"==typeof t&&t>=1888&&t<=2111))throw new Error(\"Solar year outside range 1888-2111\");if(!(\"number\"==typeof e&&e>=1&&e<=12))throw new Error(\"Solar month outside range 1 - 12\");if(!(\"number\"==typeof r&&r>=1&&r<=31))throw new Error(\"Solar day outside range 1 - 31\");i={year:t,month:e,day:r},a={}}var o=h[i.year-h[0]],s=i.year<<9|i.month<<5|i.day;a.year=s>=o?i.year:i.year-1,o=h[a.year-h[0]];var l,u=new Date(o>>9&4095,(o>>5&15)-1,31&o),c=new Date(i.year,i.month-1,i.day);l=Math.round((c-u)/864e5);var p,d=f[a.year-f[0]];for(p=0;p<13;p++){var v=d&1<<12-p?30:29;if(l<v)break;l-=v}var g=d>>13;return!g||p<g?(a.isIntercalary=!1,a.month=1+p):p===g?(a.isIntercalary=!0,a.month=p):(a.isIntercalary=!1,a.month=p),a.day=1+l,a}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],i=!!e[3],a=this.toMonthIndex(r,n,i),o=+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var n=t.year(),i=t.month(),a=this.isIntercalaryMonth(n,i),s=this.toChineseMonth(n,i),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if(\"y\"===r){var u=l.year(),c=l.month(),f=this.isIntercalaryMonth(u,s),h=a&&f?this.toMonthIndex(u,s,!0):this.toMonthIndex(u,s,!1);h!==c&&l.month(h)}return l}});var s=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)[-/](\\d?\\d)([iI]?)[-/](\\d?\\d)/m,l=/^\\d?\\d[iI]?/m,u=/^闰?十?[一二三四五六七八九]?月/m,c=/^闰?十?[一二三四五六七八九]?/m;n.calendars.chinese=o;var f=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],h=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},38751:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Coptic\",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Coptic\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Thout\",\"Paopi\",\"Hathor\",\"Koiak\",\"Tobi\",\"Meshir\",\"Paremhat\",\"Paremoude\",\"Pashons\",\"Paoni\",\"Epip\",\"Mesori\",\"Pi Kogi Enavot\"],monthNamesShort:[\"Tho\",\"Pao\",\"Hath\",\"Koi\",\"Tob\",\"Mesh\",\"Pat\",\"Pad\",\"Pash\",\"Pao\",\"Epi\",\"Meso\",\"PiK\"],dayNames:[\"Tkyriaka\",\"Pesnau\",\"Pshoment\",\"Peftoou\",\"Ptiou\",\"Psoou\",\"Psabbaton\"],dayNamesShort:[\"Tky\",\"Pes\",\"Psh\",\"Pef\",\"Pti\",\"Pso\",\"Psa\"],dayNamesMin:[\"Tk\",\"Pes\",\"Psh\",\"Pef\",\"Pt\",\"Pso\",\"Psa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.coptic=a},86825:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Discworld\",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Discworld\",epochs:[\"BUC\",\"UC\"],monthNames:[\"Ick\",\"Offle\",\"February\",\"March\",\"April\",\"May\",\"June\",\"Grune\",\"August\",\"Spune\",\"Sektober\",\"Ember\",\"December\"],monthNamesShort:[\"Ick\",\"Off\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Gru\",\"Aug\",\"Spu\",\"Sek\",\"Emb\",\"Dec\"],dayNames:[\"Sunday\",\"Octeday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Oct\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Oc\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||\"\"}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(r=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:\"Fruitbat\",21:\"Anchovy\"};n.calendars.discworld=a},37715:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Ethiopian\",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Ethiopian\",epochs:[\"BEE\",\"EE\"],monthNames:[\"Meskerem\",\"Tikemet\",\"Hidar\",\"Tahesas\",\"Tir\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehase\",\"Pagume\"],monthNamesShort:[\"Mes\",\"Tik\",\"Hid\",\"Tah\",\"Tir\",\"Yek\",\"Meg\",\"Mia\",\"Gen\",\"Sen\",\"Ham\",\"Neh\",\"Pag\"],dayNames:[\"Ehud\",\"Segno\",\"Maksegno\",\"Irob\",\"Hamus\",\"Arb\",\"Kidame\"],dayNamesShort:[\"Ehu\",\"Seg\",\"Mak\",\"Iro\",\"Ham\",\"Arb\",\"Kid\"],dayNamesMin:[\"Eh\",\"Se\",\"Ma\",\"Ir\",\"Ha\",\"Ar\",\"Ki\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian=a},99384:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Hebrew\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\"\":{name:\"Hebrew\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Nisan\",\"Iyar\",\"Sivan\",\"Tammuz\",\"Av\",\"Elul\",\"Tishrei\",\"Cheshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar\",\"Adar II\"],monthNamesShort:[\"Nis\",\"Iya\",\"Siv\",\"Tam\",\"Av\",\"Elu\",\"Tis\",\"Che\",\"Kis\",\"Tev\",\"She\",\"Ada\",\"Ad2\"],dayNames:[\"Yom Rishon\",\"Yom Sheni\",\"Yom Shlishi\",\"Yom Revi'i\",\"Yom Chamishi\",\"Yom Shishi\",\"Yom Shabbat\"],dayNamesShort:[\"Ris\",\"She\",\"Shl\",\"Rev\",\"Cha\",\"Shi\",\"Sha\"],dayNamesMin:[\"Ri\",\"She\",\"Shl\",\"Re\",\"Ch\",\"Shi\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)||8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?\"embolismic\":\"common\")+\" \"+[\"deficient\",\"regular\",\"complete\"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=a},43805:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Islamic\",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Islamic\",epochs:[\"BH\",\"AH\"],monthNames:[\"Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' al-thani\",\"Jumada al-awwal\",\"Jumada al-thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-ahad\",\"Yawm al-ithnayn\",\"Yawm ath-thulaathaa'\",\"Yawm al-arbi'aa'\",\"Yawm al-khamīs\",\"Yawm al-jum'a\",\"Yawm as-sabt\"],dayNamesShort:[\"Aha\",\"Ith\",\"Thu\",\"Arb\",\"Kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"It\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(r=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=a},88874:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Julian\",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Julian\",epochs:[\"BC\",\"AD\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),r=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),i=Math.floor((e-n)/30.6001),a=i-Math.floor(i<14?1:13),o=r-Math.floor(a>2?4716:4715),s=e-n-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),n.calendars.julian=a},83290:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Mayan\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\"\":{name:\"Mayan\",epochs:[\"\",\"\"],monthNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],monthNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],dayNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesMin:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],digits:null,dateFormat:\"YYYY.m.d\",firstDay:0,isRTL:!1,haabMonths:[\"Pop\",\"Uo\",\"Zip\",\"Zotz\",\"Tzec\",\"Xul\",\"Yaxkin\",\"Mol\",\"Chen\",\"Yax\",\"Zac\",\"Ceh\",\"Mac\",\"Kankin\",\"Muan\",\"Pax\",\"Kayab\",\"Cumku\",\"Uayeb\"],tzolkinMonths:[\"Imix\",\"Ik\",\"Akbal\",\"Kan\",\"Chicchan\",\"Cimi\",\"Manik\",\"Lamat\",\"Muluc\",\"Oc\",\"Chuen\",\"Eb\",\"Ben\",\"Ix\",\"Men\",\"Cib\",\"Caban\",\"Etznab\",\"Cauac\",\"Ahau\"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+\".\"+Math.floor(t/20)+\".\"+t%20},forYear:function(t){if((t=t.split(\".\")).length<3)throw\"Invalid Mayan year\";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw\"Invalid Mayan year\";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o(8+(t-=this.jdEpoch)+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s(20+(t-=this.jdEpoch),20),s(t+4,13)]},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=a},29108:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar;var o=n.instance(\"gregorian\");i(a.prototype,{name:\"Nanakshahi\",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Nanakshahi\",epochs:[\"BN\",\"AN\"],monthNames:[\"Chet\",\"Vaisakh\",\"Jeth\",\"Harh\",\"Sawan\",\"Bhadon\",\"Assu\",\"Katak\",\"Maghar\",\"Poh\",\"Magh\",\"Phagun\"],monthNamesShort:[\"Che\",\"Vai\",\"Jet\",\"Har\",\"Saw\",\"Bha\",\"Ass\",\"Kat\",\"Mgr\",\"Poh\",\"Mgh\",\"Pha\"],dayNames:[\"Somvaar\",\"Mangalvar\",\"Budhvaar\",\"Veervaar\",\"Shukarvaar\",\"Sanicharvaar\",\"Etvaar\"],dayNamesShort:[\"Som\",\"Mangal\",\"Budh\",\"Veer\",\"Shukar\",\"Sanichar\",\"Et\"],dayNamesMin:[\"So\",\"Ma\",\"Bu\",\"Ve\",\"Sh\",\"Sa\",\"Et\"],digits:null,dateFormat:\"dd-mm-yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s<i.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=a},55422:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Nepali\",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\"\":{name:\"Nepali\",epochs:[\"BBS\",\"ABS\"],monthNames:[\"Baisakh\",\"Jestha\",\"Ashadh\",\"Shrawan\",\"Bhadra\",\"Ashwin\",\"Kartik\",\"Mangsir\",\"Paush\",\"Mangh\",\"Falgun\",\"Chaitra\"],monthNamesShort:[\"Bai\",\"Je\",\"As\",\"Shra\",\"Bha\",\"Ash\",\"Kar\",\"Mang\",\"Pau\",\"Ma\",\"Fal\",\"Chai\"],dayNames:[\"Aaitabaar\",\"Sombaar\",\"Manglbaar\",\"Budhabaar\",\"Bihibaar\",\"Shukrabaar\",\"Shanibaar\"],dayNamesShort:[\"Aaita\",\"Som\",\"Mangl\",\"Budha\",\"Bihi\",\"Shukra\",\"Shani\"],dayNamesMin:[\"Aai\",\"So\",\"Man\",\"Bu\",\"Bi\",\"Shu\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),void 0===this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),void 0===this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var u=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(u)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(u,1,1).add(o,\"d\").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),i=e.dayOfYear(),a=r+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][0],l=this.NEPALI_CALENDAR_DATA[a][o]-s+1;i>l;)++o>12&&(o=1,a++),l+=this.NEPALI_CALENDAR_DATA[a][o];var u=this.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,u)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)void 0===this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=a},94320:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"Persian\",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Persian\",epochs:[\"BP\",\"AP\"],monthNames:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Day\",\"Bahman\",\"Esfand\"],monthNamesShort:[\"Far\",\"Ord\",\"Kho\",\"Tir\",\"Mor\",\"Sha\",\"Meh\",\"Aba\",\"Aza\",\"Day\",\"Bah\",\"Esf\"],dayNames:[\"Yekshambe\",\"Doshambe\",\"Seshambe\",\"Chæharshambe\",\"Panjshambe\",\"Jom'e\",\"Shambe\"],dayNamesShort:[\"Yek\",\"Do\",\"Se\",\"Chæ\",\"Panj\",\"Jom\",\"Sha\"],dayNamesMin:[\"Ye\",\"Do\",\"Se\",\"Ch\",\"Pa\",\"Jo\",\"Sh\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t-(t>=0?474:473),s=474+o(a,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),i=2820;if(1029982!==n){var a=Math.floor(n/366),s=o(n,366);i=Math.floor((2134*a+2816*s+2815)/1028522)+a+1}var l=i+2820*r+474;l=l<=0?l-1:l;var u=t-this.toJD(l,1,1)+1,c=u<=186?Math.ceil(u/31):Math.ceil((u-6)/30),f=t-this.toJD(l,c,1)+1;return this.newDate(l,c,f)}}),n.calendars.persian=a,n.calendars.jalali=a},31320:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\"Taiwan\",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Taiwan\",epochs:[\"BROC\",\"ROC\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},51367:function(t,e,r){var n=r(63489),i=r(56131),a=n.instance();function o(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\"Thai\",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Thai\",epochs:[\"BBE\",\"BE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(e.year()),a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return t=this._t2gYear(i.year()),a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=this._t2gYear(i.year()),a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},21457:function(t,e,r){var n=r(63489),i=r(56131);function a(t){this.local=this.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\"UmmAlQura\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Umm al-Qura\",epochs:[\"BH\",\"AH\"],monthNames:[\"Al-Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' Al-Thani\",\"Jumada Al-Awwal\",\"Jumada Al-Thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-Ahad\",\"Yawm al-Ithnain\",\"Yawm al-Thalāthā’\",\"Yawm al-Arba‘ā’\",\"Yawm al-Khamīs\",\"Yawm al-Jum‘a\",\"Yawm al-Sabt\"],dayNamesMin:[\"Ah\",\"Ith\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i=0,a=0;a<o.length;a++){if(o[a]>r)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate),a=12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,u=e-o[r-1]+1;return this.newDate(s,l,u)},isValid:function(t,e,r){var i=n.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,r,i){var a=n.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\\{0\\}/,this.local.name);return a}}),n.calendars.ummalqura=a;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},63489:function(t,e,r){var n=r(56131);function i(){this.regionalOptions=[],this.regionalOptions[\"\"]={invalidCalendar:\"Calendar {0} not found\",invalidDate:\"Invalid {0} date\",invalidMonth:\"Invalid {0} month\",invalidYear:\"Invalid {0} year\",differentCalendars:\"Cannot mix {0} and {1} dates\"},this.local=this.regionalOptions[\"\"],this.calendars={},this._localCals={}}function a(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(u.local.invalidDate||u.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name)}function o(t,e){return\"000000\".substring(0,e-(t=\"\"+t).length)+t}function s(){this.shortYearCutoff=\"+10\"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[\"\"]}n(i.prototype,{instance:function(t,e){t=(t||\"gregorian\").toLowerCase(),e=e||\"\";var r=this._localCals[t+\"-\"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+\"-\"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[\"\"].invalidCalendar).replace(/\\{0\\}/,t);return r},newDate:function(t,e,r,n,i){return(n=(null!=t&&t.year?t.calendar():\"string\"==typeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+\"\").replace(/[0-9]/g,(function(e){return t[e]}))}},substituteChineseDigits:function(t,e){return function(r){for(var n=\"\",i=0;r>0;){var a=r%10;n=(0===a?\"\":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,\"y\")},month:function(t){return 0===arguments.length?this._month:this.set(t,\"m\")},day:function(t){return 0===arguments.length?this._day:this.set(t,\"d\")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(u.local.invalidDate||u.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(u.local.differentCalendars||u.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this._calendar.local.name).replace(/\\{1\\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?\"-\":\"\")+o(Math.abs(this.year()),4)+\"-\"+o(this.month(),2)+\"-\"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate),r=t.day(),e=t.month(),t=t.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\"\"].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\"\"].invalidYear);return(e.year()<0?\"-\":\"\")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\"\"].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[\"\"].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,u.local.invalidMonth||u.regionalOptions[\"\"].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\"\"].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,\"d\"===r||\"w\"===r){var n=t.toJD()+e*(\"w\"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+(\"y\"===r?e:0),o=t.monthOfYear()+(\"m\"===r?e:0);i=t.day(),\"y\"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):\"m\"===r&&(function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||\"y\"!==n&&\"m\"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,\"y\"],m:[1,this.monthsInYear(-1),\"m\"],w:[this.daysInWeek(),this.daysInYear(-1),\"d\"],d:[1,this.daysInYear(-1),\"d\"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate);var n=\"y\"===r?e:t.year(),i=\"m\"===r?e:t.month(),a=\"d\"===r?e:t.day();return\"y\"!==r&&\"m\"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate);return u.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(u.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(u.local.differentCalendars||u.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this.local.name).replace(/\\{1\\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\\{0\\}/,this.local.name);var i=this.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:\"Gregorian\",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Gregorian\",epochs:[\"BCE\",\"CE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[\"\"].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[\"\"].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=1524+(r=e+1+r-Math.floor(r/4)),i=Math.floor((n-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((n-a)/30.6001),s=n-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),u=i-(l>2.5?4716:4715);return u<=0&&u--,this.newDate(u,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[\"\"].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var u=t.exports=new i;u.cdate=a,u.baseCalendar=s,u.calendars.gregorian=l},94338:function(t,e,r){var n=r(56131),i=r(63489);n(i.regionalOptions[\"\"],{invalidArguments:\"Invalid arguments\",invalidFormat:\"Cannot format a date from another calendar\",missingNumberAt:\"Missing number at position {0}\",unknownNameAt:\"Unknown name at position {0}\",unexpectedLiteralAt:\"Unexpected literal at position {0}\",unexpectedText:\"Additional text found at end\"}),i.local=i.regionalOptions[\"\"],n(i.cdate.prototype,{formatDate:function(t,e){return\"string\"!=typeof t&&(e=t,t=\"\"),this._calendar.formatDate(t||\"\",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:\"yyyy-mm-dd\",COOKIE:\"D, dd M yyyy\",FULL:\"DD, MM d, yyyy\",ISO_8601:\"yyyy-mm-dd\",JULIAN:\"J\",RFC_822:\"D, d M yy\",RFC_850:\"DD, dd-M-yy\",RFC_1036:\"D, d M yy\",RFC_1123:\"D, d M yyyy\",RFC_2822:\"D, d M yyyy\",RSS:\"D, d M yy\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yyyy-mm-dd\",formatDate:function(t,e,r){if(\"string\"!=typeof t&&(r=e,e=t,t=\"\"),!e)return\"\";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[\"\"].invalidFormat;t=t||this.local.dateFormat;for(var n,a,o,s=(r=r||{}).dayNamesShort||this.local.dayNamesShort,l=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,h=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;_+n<t.length&&t.charAt(_+n)===e;)n++;return _+=n-1,Math.floor(n/(r||1))>1}),p=function(t,e,r,n){var i=\"\"+e;if(h(t,n))for(;i.length<r;)i=\"0\"+i;return i},d=this,v=function(t){return\"function\"==typeof u?u.call(d,t,h(\"m\")):m(p(\"m\",t.month(),2))},g=function(t,e){return e?\"function\"==typeof f?f.call(d,t):f[t.month()-d.minMonth]:\"function\"==typeof c?c.call(d,t):c[t.month()-d.minMonth]},y=this.local.digits,m=function(t){return r.localNumbers&&y?y(t):t},x=\"\",b=!1,_=0;_<t.length;_++)if(b)\"'\"!==t.charAt(_)||h(\"'\")?x+=t.charAt(_):b=!1;else switch(t.charAt(_)){case\"d\":x+=m(p(\"d\",e.day(),2));break;case\"D\":x+=(\"D\",n=e.dayOfWeek(),a=s,o=l,h(\"D\")?o[n]:a[n]);break;case\"o\":x+=p(\"o\",e.dayOfYear(),3);break;case\"w\":x+=p(\"w\",e.weekOfYear(),2);break;case\"m\":x+=v(e);break;case\"M\":x+=g(e,h(\"M\"));break;case\"y\":x+=h(\"y\",2)?e.year():(e.year()%100<10?\"0\":\"\")+e.year()%100;break;case\"Y\":h(\"Y\",2),x+=e.formatYear();break;case\"J\":x+=e.toJD();break;case\"@\":x+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\"!\":x+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\"'\":h(\"'\")?x+=\"'\":b=!0;break;default:x+=t.charAt(_)}return x},parseDate:function(t,e,r){if(null==e)throw i.local.invalidArguments||i.regionalOptions[\"\"].invalidArguments;if(\"\"===(e=\"object\"==typeof e?e.toString():e+\"\"))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n=\"string\"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var a=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,u=r.monthNamesShort||this.local.monthNamesShort,c=r.monthNames||this.local.monthNames,f=-1,h=-1,p=-1,d=-1,v=-1,g=!1,y=!1,m=function(e,r){for(var n=1;M+n<t.length&&t.charAt(M+n)===e;)n++;return M+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=m(t,r),a=[2,3,n?4:2,n?4:2,10,11,20][\"oyYJ@!\".indexOf(t)+1],o=new RegExp(\"^-?\\\\d{1,\"+a+\"}\"),s=e.substring(A).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[\"\"].missingNumberAt).replace(/\\{0\\}/,A);return A+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if(\"function\"==typeof l){m(\"m\");var t=l.call(b,e.substring(A));return A+=t.length,t}return x(\"m\")},w=function(t,r,n,a){for(var o=m(t,a)?n:r,s=0;s<o.length;s++)if(e.substr(A,o[s].length).toLowerCase()===o[s].toLowerCase())return A+=o[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[\"\"].unknownNameAt).replace(/\\{0\\}/,A)},T=function(){if(\"function\"==typeof c){var t=m(\"M\")?c.call(b,e.substring(A)):u.call(b,e.substring(A));return A+=t.length,t}return w(\"M\",u,c)},k=function(){if(e.charAt(A)!==t.charAt(M))throw(i.local.unexpectedLiteralAt||i.regionalOptions[\"\"].unexpectedLiteralAt).replace(/\\{0\\}/,A);A++},A=0,M=0;M<t.length;M++)if(y)\"'\"!==t.charAt(M)||m(\"'\")?k():y=!1;else switch(t.charAt(M)){case\"d\":d=x(\"d\");break;case\"D\":w(\"D\",a,o);break;case\"o\":v=x(\"o\");break;case\"w\":x(\"w\");break;case\"m\":p=_();break;case\"M\":p=T();break;case\"y\":var S=M;g=!m(\"y\",2),M=S,h=x(\"y\",2);break;case\"Y\":h=x(\"Y\",2);break;case\"J\":f=x(\"J\")+.5,\".\"===e.charAt(A)&&(A++,x(\"J\"));break;case\"@\":f=x(\"@\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\"!\":f=x(\"!\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\"*\":A=e.length;break;case\"'\":m(\"'\")?k():y=!0;break;default:k()}if(A<e.length)throw i.local.unexpectedText||i.regionalOptions[\"\"].unexpectedText;if(-1===h?h=this.today().year():h<100&&g&&(h+=-1===n?1900:this.today().year()-this.today().year()%100-(h<=n?0:100)),\"string\"==typeof p&&(p=s.call(this,h,p)),v>-1){p=1,d=v;for(var E=this.daysInMonth(h,p);d>E;E=this.daysInMonth(h,p))p++,d-=E}return f>-1?this.fromJD(f):this.newDate(h,p,d)},determineDate:function(t,e,r,n,i){r&&\"object\"!=typeof r&&(i=n,n=r,r=null),\"string\"!=typeof n&&(i=n,n=\"\");var a=this;return e=e?e.newDate():null,null==t?e:\"string\"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||\"d\"),s=o.exec(t);return e}(t):\"number\"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,\"d\"):a.newDate(t)}})},69862:function(){},40964:function(){},72077:function(t,e,r){\"use strict\";var n=[\"BigInt64Array\",\"BigUint64Array\",\"Float32Array\",\"Float64Array\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Uint16Array\",\"Uint32Array\",\"Uint8Array\",\"Uint8ClampedArray\"],i=\"undefined\"==typeof globalThis?r.g:globalThis;t.exports=function(){for(var t=[],e=0;e<n.length;e++)\"function\"==typeof i[n[e]]&&(t[t.length]=n[e]);return t}},81684:function(t,e,r){\"use strict\";function n(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function i(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function a(){}r.d(e,{sX:function(){return $},k4:function(){return q}});var o=.7,s=1/o,l=\"\\\\s*([+-]?\\\\d+)\\\\s*\",u=\"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",c=\"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",f=/^#([0-9a-f]{3,8})$/,h=new RegExp(\"^rgb\\\\(\".concat(l,\",\").concat(l,\",\").concat(l,\"\\\\)$\")),p=new RegExp(\"^rgb\\\\(\".concat(c,\",\").concat(c,\",\").concat(c,\"\\\\)$\")),d=new RegExp(\"^rgba\\\\(\".concat(l,\",\").concat(l,\",\").concat(l,\",\").concat(u,\"\\\\)$\")),v=new RegExp(\"^rgba\\\\(\".concat(c,\",\").concat(c,\",\").concat(c,\",\").concat(u,\"\\\\)$\")),g=new RegExp(\"^hsl\\\\(\".concat(u,\",\").concat(c,\",\").concat(c,\"\\\\)$\")),y=new RegExp(\"^hsla\\\\(\".concat(u,\",\").concat(c,\",\").concat(c,\",\").concat(u,\"\\\\)$\")),m={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function x(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function _(t){var e,r;return t=(t+\"\").trim().toLowerCase(),(e=f.exec(t))?(r=e[1].length,e=parseInt(e[1],16),6===r?w(e):3===r?new A(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?T(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?T(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=h.exec(t))?new A(e[1],e[2],e[3],1):(e=p.exec(t))?new A(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?T(e[1],e[2],e[3],e[4]):(e=v.exec(t))?T(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=g.exec(t))?P(e[1],e[2]/100,e[3]/100,1):(e=y.exec(t))?P(e[1],e[2]/100,e[3]/100,e[4]):m.hasOwnProperty(t)?w(m[t]):\"transparent\"===t?new A(NaN,NaN,NaN,0):null}function w(t){return new A(t>>16&255,t>>8&255,255&t,1)}function T(t,e,r,n){return n<=0&&(t=e=r=NaN),new A(t,e,r,n)}function k(t,e,r,n){return 1===arguments.length?((i=t)instanceof a||(i=_(i)),i?new A((i=i.rgb()).r,i.g,i.b,i.opacity):new A):new A(t,e,r,null==n?1:n);var i}function A(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function M(){return\"#\".concat(C(this.r)).concat(C(this.g)).concat(C(this.b))}function S(){var t=E(this.opacity);return\"\".concat(1===t?\"rgb(\":\"rgba(\").concat(L(this.r),\", \").concat(L(this.g),\", \").concat(L(this.b)).concat(1===t?\")\":\", \".concat(t,\")\"))}function E(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function L(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function C(t){return((t=L(t))<16?\"0\":\"\")+t.toString(16)}function P(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new I(t,e,r,n)}function O(t){if(t instanceof I)return new I(t.h,t.s,t.l,t.opacity);if(t instanceof a||(t=_(t)),!t)return new I;if(t instanceof I)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),o=Math.max(e,r,n),s=NaN,l=o-i,u=(o+i)/2;return l?(s=e===o?(r-n)/l+6*(r<n):r===o?(n-e)/l+2:(e-r)/l+4,l/=u<.5?o+i:2-o-i,s*=60):l=u>0&&u<1?0:s,new I(s,l,u,t.opacity)}function I(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function D(t){return(t=(t||0)%360)<0?t+360:t}function z(t){return Math.max(0,Math.min(1,t||0))}function R(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function F(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}n(a,_,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:x,formatHex:x,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return O(this).formatHsl()},formatRgb:b,toString:b}),n(A,k,i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new A(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},clamp:function(){return new A(L(this.r),L(this.g),L(this.b),E(this.opacity))},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:M,formatHex:M,formatHex8:function(){return\"#\".concat(C(this.r)).concat(C(this.g)).concat(C(this.b)).concat(C(255*(isNaN(this.opacity)?1:this.opacity)))},formatRgb:S,toString:S})),n(I,(function(t,e,r,n){return 1===arguments.length?O(t):new I(t,e,r,null==n?1:n)}),i(a,{brighter:function(t){return t=null==t?s:Math.pow(s,t),new I(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new I(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new A(R(t>=240?t-240:t+120,i,n),R(t,i,n),R(t<120?t+240:t-120,i,n),this.opacity)},clamp:function(){return new I(D(this.h),z(this.s),z(this.l),E(this.opacity))},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=E(this.opacity);return\"\".concat(1===t?\"hsl(\":\"hsla(\").concat(D(this.h),\", \").concat(100*z(this.s),\"%, \").concat(100*z(this.l),\"%\").concat(1===t?\")\":\", \".concat(t,\")\"))}}));var B=function(t){return function(){return t}};function N(t,e){var r=e-t;return r?function(t,e){return function(r){return t+r*e}}(t,r):B(isNaN(t)?e:t)}var j=function t(e){var r=function(t){return 1==(t=+t)?N:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):B(isNaN(e)?r:e)}}(e);function n(t,e){var n=r((t=k(t)).r,(e=k(e)).r),i=r(t.g,e.g),a=r(t.b,e.b),o=N(t.opacity,e.opacity);return function(e){return t.r=n(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+\"\"}}return n.gamma=t,n}(1);function U(t){return function(e){var r,n,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(r=0;r<i;++r)n=k(e[r]),a[r]=n.r||0,o[r]=n.g||0,s[r]=n.b||0;return a=t(a),o=t(o),s=t(s),n.opacity=1,function(t){return n.r=a(t),n.g=o(t),n.b=s(t),n+\"\"}}}function V(t,e){var r,n=e?e.length:0,i=t?Math.min(n,t.length):0,a=new Array(i),o=new Array(n);for(r=0;r<i;++r)a[r]=$(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<i;++r)o[r]=a[r](t);return o}}function H(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function q(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function G(t){return G=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},G(t)}function Z(t,e){var r,n={},i={};for(r in null!==t&&\"object\"===G(t)||(t={}),null!==e&&\"object\"===G(e)||(e={}),e)r in t?n[r]=$(t[r],e[r]):i[r]=e[r];return function(t){for(r in n)i[r]=n[r](t);return i}}U((function(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],o=n>0?t[n-1]:2*i-a,s=n<e-1?t[n+2]:2*a-i;return F((r-n/e)*e,o,i,a,s)}})),U((function(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],o=t[(n+1)%e],s=t[(n+2)%e];return F((r-n/e)*e,i,a,o,s)}}));var Y=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,W=new RegExp(Y.source,\"g\");function X(t,e){var r,n,i,a=Y.lastIndex=W.lastIndex=0,o=-1,s=[],l=[];for(t+=\"\",e+=\"\";(r=Y.exec(t))&&(n=W.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:q(r,n)})),a=W.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?function(t){return function(e){return t(e)+\"\"}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\"\")})}function J(t,e){e||(e=[]);var r,n=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(r=0;r<n;++r)i[r]=t[r]*(1-a)+e[r]*a;return i}}function K(t){return K=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},K(t)}function $(t,e){var r,n,i=K(e);return null==e||\"boolean\"===i?B(e):(\"number\"===i?q:\"string\"===i?(r=_(e))?(e=r,j):X:e instanceof _?j:e instanceof Date?H:(n=e,!ArrayBuffer.isView(n)||n instanceof DataView?Array.isArray(e)?V:\"function\"!=typeof e.valueOf&&\"function\"!=typeof e.toString||isNaN(e)?Z:q:J))(t,e)}},40402:function(t){\"use strict\";t.exports=JSON.parse('[\"xx-small\",\"x-small\",\"small\",\"medium\",\"large\",\"x-large\",\"xx-large\",\"larger\",\"smaller\"]')},83794:function(t){\"use strict\";t.exports=JSON.parse('[\"normal\",\"condensed\",\"semi-condensed\",\"extra-condensed\",\"ultra-condensed\",\"expanded\",\"semi-expanded\",\"extra-expanded\",\"ultra-expanded\"]')},96209:function(t){\"use strict\";t.exports=JSON.parse('[\"normal\",\"italic\",\"oblique\"]')},15659:function(t){\"use strict\";t.exports=JSON.parse('[\"normal\",\"bold\",\"bolder\",\"lighter\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"]')},38732:function(t){\"use strict\";t.exports=JSON.parse('[\"inherit\",\"initial\",\"unset\"]')},41901:function(t){\"use strict\";t.exports=JSON.parse('[\"caption\",\"icon\",\"menu\",\"message-box\",\"small-caption\",\"status-bar\"]')}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,r),a.exports}return r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r(27909)}()}));\n",
-       "        });\n",
-       "        require(['plotly'], function(Plotly) {\n",
-       "            window._Plotly = Plotly;\n",
-       "        });\n",
-       "        }\n",
-       "        </script>\n",
-       "        "
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.plotly.v1+json": {
-       "config": {
-        "plotlyServerURL": "https://plot.ly"
-       },
-       "data": [
-        {
-         "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-         "hovertext": [
-          "Afghanistan",
-          "Bahrain",
-          "Bangladesh",
-          "Cambodia",
-          "China",
-          "Hong Kong, China",
-          "India",
-          "Indonesia",
-          "Iran",
-          "Iraq",
-          "Israel",
-          "Japan",
-          "Jordan",
-          "Korea, Dem. Rep.",
-          "Korea, Rep.",
-          "Kuwait",
-          "Lebanon",
-          "Malaysia",
-          "Mongolia",
-          "Myanmar",
-          "Nepal",
-          "Oman",
-          "Pakistan",
-          "Philippines",
-          "Saudi Arabia",
-          "Singapore",
-          "Sri Lanka",
-          "Syria",
-          "Taiwan",
-          "Thailand",
-          "Vietnam",
-          "West Bank and Gaza",
-          "Yemen, Rep."
-         ],
-         "legendgroup": "Asia",
-         "marker": {
-          "color": "#636efa",
-          "size": [
-           8425333,
-           120447,
-           46886859,
-           4693836,
-           556263527,
-           2125900,
-           372000000,
-           82052000,
-           17272000,
-           5441766,
-           1620914,
-           86459025,
-           607914,
-           8865488,
-           20947571,
-           160000,
-           1439529,
-           6748378,
-           800663,
-           20092996,
-           9182536,
-           507833,
-           41346560,
-           22438691,
-           4005677,
-           1127000,
-           7982342,
-           3661549,
-           8550362,
-           21289402,
-           26246839,
-           1030585,
-           4963829
-          ],
-          "sizemode": "area",
-          "sizeref": 269118.99918367347,
-          "symbol": "circle"
-         },
-         "mode": "markers",
-         "name": "Asia",
-         "orientation": "v",
-         "showlegend": true,
-         "type": "scatter",
-         "x": [
-          779.4453145,
-          9867.084765,
-          684.2441716,
-          368.4692856,
-          400.448611,
-          3054.421209,
-          546.5657493,
-          749.6816546,
-          3035.326002,
-          4129.766056,
-          4086.522128,
-          3216.956347,
-          1546.907807,
-          1088.277758,
-          1030.592226,
-          108382.3529,
-          4834.804067,
-          1831.132894,
-          786.5668575,
-          331,
-          545.8657228999998,
-          1828.230307,
-          684.5971437999998,
-          1272.880995,
-          6459.554823,
-          2315.138227,
-          1083.53203,
-          1643.485354,
-          1206.947913,
-          757.7974177,
-          605.0664917,
-          1515.5923289999996,
-          781.7175761
-         ],
-         "xaxis": "x",
-         "y": [
-          28.801,
-          50.93899999999999,
-          37.484,
-          39.417,
-          44,
-          60.96,
-          37.37300000000001,
-          37.468,
-          44.869,
-          45.32,
-          65.39,
-          63.03,
-          43.158,
-          50.056,
-          47.453,
-          55.565,
-          55.928,
-          48.463,
-          42.244,
-          36.319,
-          36.157,
-          37.578,
-          43.43600000000001,
-          47.752,
-          39.875,
-          60.396,
-          57.593,
-          45.883,
-          58.5,
-          50.848,
-          40.412,
-          43.16,
-          32.548
-         ],
-         "yaxis": "y"
-        },
-        {
-         "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-         "hovertext": [
-          "Albania",
-          "Austria",
-          "Belgium",
-          "Bosnia and Herzegovina",
-          "Bulgaria",
-          "Croatia",
-          "Czech Republic",
-          "Denmark",
-          "Finland",
-          "France",
-          "Germany",
-          "Greece",
-          "Hungary",
-          "Iceland",
-          "Ireland",
-          "Italy",
-          "Montenegro",
-          "Netherlands",
-          "Norway",
-          "Poland",
-          "Portugal",
-          "Romania",
-          "Serbia",
-          "Slovak Republic",
-          "Slovenia",
-          "Spain",
-          "Sweden",
-          "Switzerland",
-          "Turkey",
-          "United Kingdom"
-         ],
-         "legendgroup": "Europe",
-         "marker": {
-          "color": "#EF553B",
-          "size": [
-           1282697,
-           6927772,
-           8730405,
-           2791000,
-           7274900,
-           3882229,
-           9125183,
-           4334000,
-           4090500,
-           42459667,
-           69145952,
-           7733250,
-           9504000,
-           147962,
-           2952156,
-           47666000,
-           413834,
-           10381988,
-           3327728,
-           25730551,
-           8526050,
-           16630000,
-           6860147,
-           3558137,
-           1489518,
-           28549870,
-           7124673,
-           4815000,
-           22235677,
-           50430000
-          ],
-          "sizemode": "area",
-          "sizeref": 269118.99918367347,
-          "symbol": "circle"
-         },
-         "mode": "markers",
-         "name": "Europe",
-         "orientation": "v",
-         "showlegend": true,
-         "type": "scatter",
-         "x": [
-          1601.056136,
-          6137.076492,
-          8343.105126999999,
-          973.5331948,
-          2444.286648,
-          3119.23652,
-          6876.14025,
-          9692.385245,
-          6424.519071,
-          7029.809327,
-          7144.114393000002,
-          3530.690067,
-          5263.673816,
-          7267.688428,
-          5210.280328,
-          4931.404154999998,
-          2647.585601,
-          8941.571858,
-          10095.42172,
-          4029.329699,
-          3068.319867,
-          3144.613186,
-          3581.459448,
-          5074.659104,
-          4215.041741,
-          3834.034742,
-          8527.844662000001,
-          14734.23275,
-          1969.10098,
-          9979.508487
-         ],
-         "xaxis": "x",
-         "y": [
-          55.23,
-          66.8,
-          68,
-          53.82,
-          59.6,
-          61.21,
-          66.87,
-          70.78,
-          66.55,
-          67.41,
-          67.5,
-          65.86,
-          64.03,
-          72.49,
-          66.91,
-          65.94,
-          59.164,
-          72.13,
-          72.67,
-          61.31,
-          59.82,
-          61.05,
-          57.996,
-          64.36,
-          65.57,
-          64.94,
-          71.86,
-          69.62,
-          43.585,
-          69.18
-         ],
-         "yaxis": "y"
-        },
-        {
-         "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-         "hovertext": [
-          "Algeria",
-          "Angola",
-          "Benin",
-          "Botswana",
-          "Burkina Faso",
-          "Burundi",
-          "Cameroon",
-          "Central African Republic",
-          "Chad",
-          "Comoros",
-          "Congo, Dem. Rep.",
-          "Congo, Rep.",
-          "Cote d'Ivoire",
-          "Djibouti",
-          "Egypt",
-          "Equatorial Guinea",
-          "Eritrea",
-          "Ethiopia",
-          "Gabon",
-          "Gambia",
-          "Ghana",
-          "Guinea",
-          "Guinea-Bissau",
-          "Kenya",
-          "Lesotho",
-          "Liberia",
-          "Libya",
-          "Madagascar",
-          "Malawi",
-          "Mali",
-          "Mauritania",
-          "Mauritius",
-          "Morocco",
-          "Mozambique",
-          "Namibia",
-          "Niger",
-          "Nigeria",
-          "Reunion",
-          "Rwanda",
-          "Sao Tome and Principe",
-          "Senegal",
-          "Sierra Leone",
-          "Somalia",
-          "South Africa",
-          "Sudan",
-          "Swaziland",
-          "Tanzania",
-          "Togo",
-          "Tunisia",
-          "Uganda",
-          "Zambia",
-          "Zimbabwe"
-         ],
-         "legendgroup": "Africa",
-         "marker": {
-          "color": "#00cc96",
-          "size": [
-           9279525,
-           4232095,
-           1738315,
-           442308,
-           4469979,
-           2445618,
-           5009067,
-           1291695,
-           2682462,
-           153936,
-           14100005,
-           854885,
-           2977019,
-           63149,
-           22223309,
-           216964,
-           1438760,
-           20860941,
-           420702,
-           284320,
-           5581001,
-           2664249,
-           580653,
-           6464046,
-           748747,
-           863308,
-           1019729,
-           4762912,
-           2917802,
-           3838168,
-           1022556,
-           516556,
-           9939217,
-           6446316,
-           485831,
-           3379468,
-           33119096,
-           257700,
-           2534927,
-           60011,
-           2755589,
-           2143249,
-           2526994,
-           14264935,
-           8504667,
-           290243,
-           8322925,
-           1219113,
-           3647735,
-           5824797,
-           2672000,
-           3080907
-          ],
-          "sizemode": "area",
-          "sizeref": 269118.99918367347,
-          "symbol": "circle"
-         },
-         "mode": "markers",
-         "name": "Africa",
-         "orientation": "v",
-         "showlegend": true,
-         "type": "scatter",
-         "x": [
-          2449.008185,
-          3520.610273,
-          1062.7522,
-          851.2411407,
-          543.2552413,
-          339.2964587,
-          1172.667655,
-          1071.310713,
-          1178.665927,
-          1102.990936,
-          780.5423257,
-          2125.621418,
-          1388.594732,
-          2669.529475,
-          1418.822445,
-          375.6431231,
-          328.9405571000001,
-          362.1462796,
-          4293.476475,
-          485.2306591,
-          911.2989371,
-          510.1964923000001,
-          299.850319,
-          853.5409189999998,
-          298.8462121,
-          575.5729961000002,
-          2387.54806,
-          1443.011715,
-          369.1650802,
-          452.3369807,
-          743.1159097,
-          1967.955707,
-          1688.20357,
-          468.5260381,
-          2423.780443,
-          761.879376,
-          1077.281856,
-          2718.885295,
-          493.3238752,
-          879.5835855,
-          1450.356983,
-          879.7877358,
-          1135.749842,
-          4725.295531000002,
-          1615.991129,
-          1148.376626,
-          716.6500721,
-          859.8086567,
-          1468.475631,
-          734.753484,
-          1147.388831,
-          406.8841148
-         ],
-         "xaxis": "x",
-         "y": [
-          43.077,
-          30.015,
-          38.223,
-          47.622,
-          31.975,
-          39.031,
-          38.523,
-          35.463,
-          38.092,
-          40.715,
-          39.143,
-          42.111,
-          40.477,
-          34.812,
-          41.893,
-          34.482,
-          35.92800000000001,
-          34.078,
-          37.003,
-          30,
-          43.149,
-          33.609,
-          32.5,
-          42.27,
-          42.13800000000001,
-          38.48,
-          42.723,
-          36.681,
-          36.256,
-          33.685,
-          40.543,
-          50.986,
-          42.87300000000001,
-          31.286,
-          41.725,
-          37.444,
-          36.324,
-          52.724,
-          40,
-          46.471,
-          37.278,
-          30.331,
-          32.978,
-          45.00899999999999,
-          38.635,
-          41.407,
-          41.215,
-          38.596,
-          44.6,
-          39.978,
-          42.038,
-          48.451
-         ],
-         "yaxis": "y"
-        },
-        {
-         "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-         "hovertext": [
-          "Argentina",
-          "Bolivia",
-          "Brazil",
-          "Canada",
-          "Chile",
-          "Colombia",
-          "Costa Rica",
-          "Cuba",
-          "Dominican Republic",
-          "Ecuador",
-          "El Salvador",
-          "Guatemala",
-          "Haiti",
-          "Honduras",
-          "Jamaica",
-          "Mexico",
-          "Nicaragua",
-          "Panama",
-          "Paraguay",
-          "Peru",
-          "Puerto Rico",
-          "Trinidad and Tobago",
-          "United States",
-          "Uruguay",
-          "Venezuela"
-         ],
-         "legendgroup": "Americas",
-         "marker": {
-          "color": "#ab63fa",
-          "size": [
-           17876956,
-           2883315,
-           56602560,
-           14785584,
-           6377619,
-           12350771,
-           926317,
-           6007797,
-           2491346,
-           3548753,
-           2042865,
-           3146381,
-           3201488,
-           1517453,
-           1426095,
-           30144317,
-           1165790,
-           940080,
-           1555876,
-           8025700,
-           2227000,
-           662850,
-           157553000,
-           2252965,
-           5439568
-          ],
-          "sizemode": "area",
-          "sizeref": 269118.99918367347,
-          "symbol": "circle"
-         },
-         "mode": "markers",
-         "name": "Americas",
-         "orientation": "v",
-         "showlegend": true,
-         "type": "scatter",
-         "x": [
-          5911.315053,
-          2677.326347,
-          2108.944355,
-          11367.16112,
-          3939.978789,
-          2144.115096,
-          2627.0094710000008,
-          5586.53878,
-          1397.717137,
-          3522.110717,
-          3048.3029,
-          2428.2377690000008,
-          1840.366939,
-          2194.926204,
-          2898.530881,
-          3478.125529,
-          3112.363948,
-          2480.380334,
-          1952.308701,
-          3758.523437,
-          3081.959785,
-          3023.271928,
-          13990.482080000002,
-          5716.766744,
-          7689.799761
-         ],
-         "xaxis": "x",
-         "y": [
-          62.485,
-          40.414,
-          50.917,
-          68.75,
-          54.745,
-          50.643,
-          57.206,
-          59.42100000000001,
-          45.928,
-          48.357,
-          45.262,
-          42.023,
-          37.579,
-          41.912,
-          58.53,
-          50.789,
-          42.31399999999999,
-          55.191,
-          62.649,
-          43.902,
-          64.28,
-          59.1,
-          68.44,
-          66.071,
-          55.088
-         ],
-         "yaxis": "y"
-        },
-        {
-         "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-         "hovertext": [
-          "Australia",
-          "New Zealand"
-         ],
-         "legendgroup": "Oceania",
-         "marker": {
-          "color": "#FFA15A",
-          "size": [
-           8691212,
-           1994794
-          ],
-          "sizemode": "area",
-          "sizeref": 269118.99918367347,
-          "symbol": "circle"
-         },
-         "mode": "markers",
-         "name": "Oceania",
-         "orientation": "v",
-         "showlegend": true,
-         "type": "scatter",
-         "x": [
-          10039.59564,
-          10556.57566
-         ],
-         "xaxis": "x",
-         "y": [
-          69.12,
-          69.39
-         ],
-         "yaxis": "y"
-        }
-       ],
-       "frames": [
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             8425333,
-             120447,
-             46886859,
-             4693836,
-             556263527,
-             2125900,
-             372000000,
-             82052000,
-             17272000,
-             5441766,
-             1620914,
-             86459025,
-             607914,
-             8865488,
-             20947571,
-             160000,
-             1439529,
-             6748378,
-             800663,
-             20092996,
-             9182536,
-             507833,
-             41346560,
-             22438691,
-             4005677,
-             1127000,
-             7982342,
-             3661549,
-             8550362,
-             21289402,
-             26246839,
-             1030585,
-             4963829
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            779.4453145,
-            9867.084765,
-            684.2441716,
-            368.4692856,
-            400.448611,
-            3054.421209,
-            546.5657493,
-            749.6816546,
-            3035.326002,
-            4129.766056,
-            4086.522128,
-            3216.956347,
-            1546.907807,
-            1088.277758,
-            1030.592226,
-            108382.3529,
-            4834.804067,
-            1831.132894,
-            786.5668575,
-            331,
-            545.8657228999998,
-            1828.230307,
-            684.5971437999998,
-            1272.880995,
-            6459.554823,
-            2315.138227,
-            1083.53203,
-            1643.485354,
-            1206.947913,
-            757.7974177,
-            605.0664917,
-            1515.5923289999996,
-            781.7175761
-           ],
-           "xaxis": "x",
-           "y": [
-            28.801,
-            50.93899999999999,
-            37.484,
-            39.417,
-            44,
-            60.96,
-            37.37300000000001,
-            37.468,
-            44.869,
-            45.32,
-            65.39,
-            63.03,
-            43.158,
-            50.056,
-            47.453,
-            55.565,
-            55.928,
-            48.463,
-            42.244,
-            36.319,
-            36.157,
-            37.578,
-            43.43600000000001,
-            47.752,
-            39.875,
-            60.396,
-            57.593,
-            45.883,
-            58.5,
-            50.848,
-            40.412,
-            43.16,
-            32.548
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             1282697,
-             6927772,
-             8730405,
-             2791000,
-             7274900,
-             3882229,
-             9125183,
-             4334000,
-             4090500,
-             42459667,
-             69145952,
-             7733250,
-             9504000,
-             147962,
-             2952156,
-             47666000,
-             413834,
-             10381988,
-             3327728,
-             25730551,
-             8526050,
-             16630000,
-             6860147,
-             3558137,
-             1489518,
-             28549870,
-             7124673,
-             4815000,
-             22235677,
-             50430000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            1601.056136,
-            6137.076492,
-            8343.105126999999,
-            973.5331948,
-            2444.286648,
-            3119.23652,
-            6876.14025,
-            9692.385245,
-            6424.519071,
-            7029.809327,
-            7144.114393000002,
-            3530.690067,
-            5263.673816,
-            7267.688428,
-            5210.280328,
-            4931.404154999998,
-            2647.585601,
-            8941.571858,
-            10095.42172,
-            4029.329699,
-            3068.319867,
-            3144.613186,
-            3581.459448,
-            5074.659104,
-            4215.041741,
-            3834.034742,
-            8527.844662000001,
-            14734.23275,
-            1969.10098,
-            9979.508487
-           ],
-           "xaxis": "x",
-           "y": [
-            55.23,
-            66.8,
-            68,
-            53.82,
-            59.6,
-            61.21,
-            66.87,
-            70.78,
-            66.55,
-            67.41,
-            67.5,
-            65.86,
-            64.03,
-            72.49,
-            66.91,
-            65.94,
-            59.164,
-            72.13,
-            72.67,
-            61.31,
-            59.82,
-            61.05,
-            57.996,
-            64.36,
-            65.57,
-            64.94,
-            71.86,
-            69.62,
-            43.585,
-            69.18
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             9279525,
-             4232095,
-             1738315,
-             442308,
-             4469979,
-             2445618,
-             5009067,
-             1291695,
-             2682462,
-             153936,
-             14100005,
-             854885,
-             2977019,
-             63149,
-             22223309,
-             216964,
-             1438760,
-             20860941,
-             420702,
-             284320,
-             5581001,
-             2664249,
-             580653,
-             6464046,
-             748747,
-             863308,
-             1019729,
-             4762912,
-             2917802,
-             3838168,
-             1022556,
-             516556,
-             9939217,
-             6446316,
-             485831,
-             3379468,
-             33119096,
-             257700,
-             2534927,
-             60011,
-             2755589,
-             2143249,
-             2526994,
-             14264935,
-             8504667,
-             290243,
-             8322925,
-             1219113,
-             3647735,
-             5824797,
-             2672000,
-             3080907
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            2449.008185,
-            3520.610273,
-            1062.7522,
-            851.2411407,
-            543.2552413,
-            339.2964587,
-            1172.667655,
-            1071.310713,
-            1178.665927,
-            1102.990936,
-            780.5423257,
-            2125.621418,
-            1388.594732,
-            2669.529475,
-            1418.822445,
-            375.6431231,
-            328.9405571000001,
-            362.1462796,
-            4293.476475,
-            485.2306591,
-            911.2989371,
-            510.1964923000001,
-            299.850319,
-            853.5409189999998,
-            298.8462121,
-            575.5729961000002,
-            2387.54806,
-            1443.011715,
-            369.1650802,
-            452.3369807,
-            743.1159097,
-            1967.955707,
-            1688.20357,
-            468.5260381,
-            2423.780443,
-            761.879376,
-            1077.281856,
-            2718.885295,
-            493.3238752,
-            879.5835855,
-            1450.356983,
-            879.7877358,
-            1135.749842,
-            4725.295531000002,
-            1615.991129,
-            1148.376626,
-            716.6500721,
-            859.8086567,
-            1468.475631,
-            734.753484,
-            1147.388831,
-            406.8841148
-           ],
-           "xaxis": "x",
-           "y": [
-            43.077,
-            30.015,
-            38.223,
-            47.622,
-            31.975,
-            39.031,
-            38.523,
-            35.463,
-            38.092,
-            40.715,
-            39.143,
-            42.111,
-            40.477,
-            34.812,
-            41.893,
-            34.482,
-            35.92800000000001,
-            34.078,
-            37.003,
-            30,
-            43.149,
-            33.609,
-            32.5,
-            42.27,
-            42.13800000000001,
-            38.48,
-            42.723,
-            36.681,
-            36.256,
-            33.685,
-            40.543,
-            50.986,
-            42.87300000000001,
-            31.286,
-            41.725,
-            37.444,
-            36.324,
-            52.724,
-            40,
-            46.471,
-            37.278,
-            30.331,
-            32.978,
-            45.00899999999999,
-            38.635,
-            41.407,
-            41.215,
-            38.596,
-            44.6,
-            39.978,
-            42.038,
-            48.451
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             17876956,
-             2883315,
-             56602560,
-             14785584,
-             6377619,
-             12350771,
-             926317,
-             6007797,
-             2491346,
-             3548753,
-             2042865,
-             3146381,
-             3201488,
-             1517453,
-             1426095,
-             30144317,
-             1165790,
-             940080,
-             1555876,
-             8025700,
-             2227000,
-             662850,
-             157553000,
-             2252965,
-             5439568
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5911.315053,
-            2677.326347,
-            2108.944355,
-            11367.16112,
-            3939.978789,
-            2144.115096,
-            2627.0094710000008,
-            5586.53878,
-            1397.717137,
-            3522.110717,
-            3048.3029,
-            2428.2377690000008,
-            1840.366939,
-            2194.926204,
-            2898.530881,
-            3478.125529,
-            3112.363948,
-            2480.380334,
-            1952.308701,
-            3758.523437,
-            3081.959785,
-            3023.271928,
-            13990.482080000002,
-            5716.766744,
-            7689.799761
-           ],
-           "xaxis": "x",
-           "y": [
-            62.485,
-            40.414,
-            50.917,
-            68.75,
-            54.745,
-            50.643,
-            57.206,
-            59.42100000000001,
-            45.928,
-            48.357,
-            45.262,
-            42.023,
-            37.579,
-            41.912,
-            58.53,
-            50.789,
-            42.31399999999999,
-            55.191,
-            62.649,
-            43.902,
-            64.28,
-            59.1,
-            68.44,
-            66.071,
-            55.088
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1952<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             8691212,
-             1994794
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            10039.59564,
-            10556.57566
-           ],
-           "xaxis": "x",
-           "y": [
-            69.12,
-            69.39
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1952"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1957<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             9240934,
-             138655,
-             51365468,
-             5322536,
-             637408000,
-             2736300,
-             409000000,
-             90124000,
-             19792000,
-             6248643,
-             1944401,
-             91563009,
-             746559,
-             9411381,
-             22611552,
-             212846,
-             1647412,
-             7739235,
-             882134,
-             21731844,
-             9682338,
-             561977,
-             46679944,
-             26072194,
-             4419650,
-             1445929,
-             9128546,
-             4149908,
-             10164215,
-             25041917,
-             28998543,
-             1070439,
-             5498090
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            820.8530296,
-            11635.79945,
-            661.6374577,
-            434.0383364,
-            575.9870009,
-            3629.076457,
-            590.061996,
-            858.9002707000002,
-            3290.257643,
-            6229.333562,
-            5385.278451,
-            4317.694365,
-            1886.080591,
-            1571.134655,
-            1487.593537,
-            113523.1329,
-            6089.786934000002,
-            1810.0669920000007,
-            912.6626085,
-            350,
-            597.9363557999999,
-            2242.746551,
-            747.0835292,
-            1547.944844,
-            8157.5912480000015,
-            2843.104409,
-            1072.546602,
-            2117.234893,
-            1507.86129,
-            793.5774147999998,
-            676.2854477999998,
-            1827.067742,
-            804.8304547
-           ],
-           "xaxis": "x",
-           "y": [
-            30.332,
-            53.832,
-            39.348,
-            41.36600000000001,
-            50.54896,
-            64.75,
-            40.249,
-            39.918,
-            47.181,
-            48.437,
-            67.84,
-            65.5,
-            45.669,
-            54.081,
-            52.681,
-            58.033,
-            59.489,
-            52.102,
-            45.24800000000001,
-            41.905,
-            37.686,
-            40.08,
-            45.557,
-            51.334,
-            42.868,
-            63.179,
-            61.456,
-            48.284,
-            62.4,
-            53.63,
-            42.887,
-            45.67100000000001,
-            33.97
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1957<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             1476505,
-             6965860,
-             8989111,
-             3076000,
-             7651254,
-             3991242,
-             9513758,
-             4487831,
-             4324000,
-             44310863,
-             71019069,
-             8096218,
-             9839000,
-             165110,
-             2878220,
-             49182000,
-             442829,
-             11026383,
-             3491938,
-             28235346,
-             8817650,
-             17829327,
-             7271135,
-             3844277,
-             1533070,
-             29841614,
-             7363802,
-             5126000,
-             25670939,
-             51430000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            1942.284244,
-            8842.59803,
-            9714.960623,
-            1353.989176,
-            3008.670727,
-            4338.231617,
-            8256.343918,
-            11099.65935,
-            7545.415386,
-            8662.834898000001,
-            10187.82665,
-            4916.299889,
-            6040.180011,
-            9244.001412,
-            5599.077872,
-            6248.656232,
-            3682.259903,
-            11276.19344,
-            11653.97304,
-            4734.253019,
-            3774.571743,
-            3943.370225,
-            4981.090891,
-            6093.26298,
-            5862.276629,
-            4564.80241,
-            9911.878226,
-            17909.48973,
-            2218.754257,
-            11283.17795
-           ],
-           "xaxis": "x",
-           "y": [
-            59.28,
-            67.48,
-            69.24,
-            58.45,
-            66.61,
-            64.77,
-            69.03,
-            71.81,
-            67.49,
-            68.93,
-            69.1,
-            67.86,
-            66.41,
-            73.47,
-            68.9,
-            67.81,
-            61.448,
-            72.99,
-            73.44,
-            65.77,
-            61.51,
-            64.1,
-            61.685,
-            67.45,
-            67.85,
-            66.66,
-            72.49,
-            70.56,
-            48.07899999999999,
-            70.42
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1957<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             10270856,
-             4561361,
-             1925173,
-             474639,
-             4713416,
-             2667518,
-             5359923,
-             1392284,
-             2894855,
-             170928,
-             15577932,
-             940458,
-             3300000,
-             71851,
-             25009741,
-             232922,
-             1542611,
-             22815614,
-             434904,
-             323150,
-             6391288,
-             2876726,
-             601095,
-             7454779,
-             813338,
-             975950,
-             1201578,
-             5181679,
-             3221238,
-             4241884,
-             1076852,
-             609816,
-             11406350,
-             7038035,
-             548080,
-             3692184,
-             37173340,
-             308700,
-             2822082,
-             61325,
-             3054547,
-             2295678,
-             2780415,
-             16151549,
-             9753392,
-             326741,
-             9452826,
-             1357445,
-             3950849,
-             6675501,
-             3016000,
-             3646340
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3013.976023,
-            3827.940465,
-            959.6010805,
-            918.2325349,
-            617.1834647999998,
-            379.5646281000001,
-            1313.048099,
-            1190.844328,
-            1308.495577,
-            1211.148548,
-            905.8602303,
-            2315.056572,
-            1500.895925,
-            2864.9690760000008,
-            1458.915272,
-            426.0964081,
-            344.1618859,
-            378.9041632,
-            4976.198099,
-            520.9267111,
-            1043.5615369999996,
-            576.2670245,
-            431.79045660000014,
-            944.4383152,
-            335.9971151000001,
-            620.9699901,
-            3448.284395,
-            1589.20275,
-            416.3698064,
-            490.3821867,
-            846.1202613,
-            2034.037981,
-            1642.002314,
-            495.58683330000014,
-            2621.448058,
-            835.5234025000002,
-            1100.5925630000004,
-            2769.451844,
-            540.2893982999999,
-            860.7369026,
-            1567.653006,
-            1004.484437,
-            1258.147413,
-            5487.104219,
-            1770.3370739999998,
-            1244.708364,
-            698.5356073,
-            925.9083202,
-            1395.232468,
-            774.3710692000002,
-            1311.956766,
-            518.7642681
-           ],
-           "xaxis": "x",
-           "y": [
-            45.685,
-            31.999,
-            40.358,
-            49.618,
-            34.906,
-            40.533,
-            40.428,
-            37.464,
-            39.881,
-            42.46,
-            40.652,
-            45.053,
-            42.469,
-            37.328,
-            44.444,
-            35.98300000000001,
-            38.047,
-            36.667,
-            38.999,
-            32.065,
-            44.779,
-            34.558,
-            33.489000000000004,
-            44.68600000000001,
-            45.047,
-            39.486,
-            45.289,
-            38.865,
-            37.207,
-            35.30699999999999,
-            42.338,
-            58.089,
-            45.423,
-            33.779,
-            45.226000000000006,
-            38.598,
-            37.802,
-            55.09,
-            41.5,
-            48.945,
-            39.329,
-            31.57,
-            34.977,
-            47.985,
-            39.624,
-            43.424,
-            42.974,
-            41.208,
-            47.1,
-            42.57100000000001,
-            44.077,
-            50.469
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1957<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             19610538,
-             3211738,
-             65551171,
-             17010154,
-             7048426,
-             14485993,
-             1112300,
-             6640752,
-             2923186,
-             4058385,
-             2355805,
-             3640876,
-             3507701,
-             1770390,
-             1535090,
-             35015548,
-             1358828,
-             1063506,
-             1770902,
-             9146100,
-             2260000,
-             764900,
-             171984000,
-             2424959,
-             6702668
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            6856.8562120000015,
-            2127.686326,
-            2487.365989,
-            12489.95006,
-            4315.622723,
-            2323.805581,
-            2990.010802,
-            6092.1743590000015,
-            1544.402995,
-            3780.546651,
-            3421.523218,
-            2617.155967,
-            1726.887882,
-            2220.487682,
-            4756.525781,
-            4131.546641,
-            3457.415947,
-            2961.800905,
-            2046.154706,
-            4245.256697999999,
-            3907.156189,
-            4100.3934,
-            14847.12712,
-            6150.772969,
-            9802.466526
-           ],
-           "xaxis": "x",
-           "y": [
-            64.399,
-            41.89,
-            53.285,
-            69.96,
-            56.074,
-            55.118,
-            60.026,
-            62.325,
-            49.828,
-            51.356,
-            48.57,
-            44.142,
-            40.696,
-            44.665,
-            62.61,
-            55.19,
-            45.432,
-            59.201,
-            63.19600000000001,
-            46.26300000000001,
-            68.54,
-            61.8,
-            69.49,
-            67.044,
-            57.907
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1957<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             9712569,
-             2229407
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            10949.64959,
-            12247.39532
-           ],
-           "xaxis": "x",
-           "y": [
-            70.33,
-            70.26
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1957"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1962<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             10267083,
-             171863,
-             56839289,
-             6083619,
-             665770000,
-             3305200,
-             454000000,
-             99028000,
-             22874000,
-             7240260,
-             2310904,
-             95831757,
-             933559,
-             10917494,
-             26420307,
-             358266,
-             1886848,
-             8906385,
-             1010280,
-             23634436,
-             10332057,
-             628164,
-             53100671,
-             30325264,
-             4943029,
-             1750200,
-             10421936,
-             4834621,
-             11918938,
-             29263397,
-             33796140,
-             1133134,
-             6120081
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            853.1007099999998,
-            12753.27514,
-            686.3415537999998,
-            496.9136476,
-            487.6740183,
-            4692.648271999999,
-            658.3471509,
-            849.2897700999998,
-            4187.329802,
-            8341.737815,
-            7105.630706,
-            6576.649461,
-            2348.009158,
-            1621.693598,
-            1536.344387,
-            95458.11176,
-            5714.560611,
-            2036.884944,
-            1056.353958,
-            388,
-            652.3968593,
-            2924.638113,
-            803.3427418,
-            1649.552153,
-            11626.41975,
-            3674.735572,
-            1074.47196,
-            2193.037133,
-            1822.879028,
-            1002.199172,
-            772.0491602000002,
-            2198.9563120000007,
-            825.6232006
-           ],
-           "xaxis": "x",
-           "y": [
-            31.997,
-            56.923,
-            41.216,
-            43.415,
-            44.50136,
-            67.65,
-            43.605,
-            42.518,
-            49.325,
-            51.457,
-            69.39,
-            68.73,
-            48.12600000000001,
-            56.65600000000001,
-            55.292,
-            60.47,
-            62.094,
-            55.737,
-            48.25100000000001,
-            45.108,
-            39.393,
-            43.165,
-            47.67,
-            54.757,
-            45.914,
-            65.798,
-            62.192,
-            50.305,
-            65.2,
-            56.06100000000001,
-            45.363,
-            48.127,
-            35.18
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1962<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             1728137,
-             7129864,
-             9218400,
-             3349000,
-             8012946,
-             4076557,
-             9620282,
-             4646899,
-             4491443,
-             47124000,
-             73739117,
-             8448233,
-             10063000,
-             182053,
-             2830000,
-             50843200,
-             474528,
-             11805689,
-             3638919,
-             30329617,
-             9019800,
-             18680721,
-             7616060,
-             4237384,
-             1582962,
-             31158061,
-             7561588,
-             5666000,
-             29788695,
-             53292000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            2312.888958,
-            10750.72111,
-            10991.20676,
-            1709.683679,
-            4254.337839,
-            5477.890018,
-            10136.86713,
-            13583.31351,
-            9371.842561,
-            10560.48553,
-            12902.46291,
-            6017.190732999999,
-            7550.359877,
-            10350.15906,
-            6631.597314,
-            8243.58234,
-            4649.593785,
-            12790.84956,
-            13450.40151,
-            5338.752143,
-            4727.954889,
-            4734.997586,
-            6289.629157,
-            7481.107598,
-            7402.303395,
-            5693.843879,
-            12329.44192,
-            20431.0927,
-            2322.869908,
-            12477.17707
-           ],
-           "xaxis": "x",
-           "y": [
-            64.82,
-            69.54,
-            70.25,
-            61.93,
-            69.51,
-            67.13,
-            69.9,
-            72.35,
-            68.75,
-            70.51,
-            70.3,
-            69.51,
-            67.96,
-            73.68,
-            70.29,
-            69.24,
-            63.728,
-            73.23,
-            73.47,
-            67.64,
-            64.39,
-            66.8,
-            64.531,
-            70.33,
-            69.15,
-            69.69,
-            73.37,
-            71.32,
-            52.098,
-            70.76
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1962<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             11000948,
-             4826015,
-             2151895,
-             512764,
-             4919632,
-             2961915,
-             5793633,
-             1523478,
-             3150417,
-             191689,
-             17486434,
-             1047924,
-             3832408,
-             89898,
-             28173309,
-             249220,
-             1666618,
-             25145372,
-             455661,
-             374020,
-             7355248,
-             3140003,
-             627820,
-             8678557,
-             893143,
-             1112796,
-             1441863,
-             5703324,
-             3628608,
-             4690372,
-             1146757,
-             701016,
-             13056604,
-             7788944,
-             621392,
-             4076008,
-             41871351,
-             358900,
-             3051242,
-             65345,
-             3430243,
-             2467895,
-             3080153,
-             18356657,
-             11183227,
-             370006,
-             10863958,
-             1528098,
-             4286552,
-             7688797,
-             3421000,
-             4277736
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            2550.81688,
-            4269.276742,
-            949.4990641,
-            983.6539764,
-            722.5120206,
-            355.2032273,
-            1399.607441,
-            1193.068753,
-            1389.817618,
-            1406.648278,
-            896.3146335000001,
-            2464.783157,
-            1728.8694280000002,
-            3020.989263,
-            1693.335853,
-            582.8419713999998,
-            380.9958433000001,
-            419.4564161,
-            6631.459222,
-            599.650276,
-            1190.041118,
-            686.3736739,
-            522.0343725,
-            896.9663732,
-            411.8006266,
-            634.1951625,
-            6757.030816,
-            1643.38711,
-            427.9010856,
-            496.1743428,
-            1055.896036,
-            2529.0674870000007,
-            1566.353493,
-            556.6863539,
-            3173.215595,
-            997.7661127,
-            1150.9274779999996,
-            3173.72334,
-            597.4730727000001,
-            1071.551119,
-            1654.988723,
-            1116.6398769999996,
-            1369.488336,
-            5768.729717,
-            1959.593767,
-            1856.182125,
-            722.0038073,
-            1067.53481,
-            1660.30321,
-            767.2717397999999,
-            1452.725766,
-            527.2721818
-           ],
-           "xaxis": "x",
-           "y": [
-            48.303,
-            34,
-            42.618,
-            51.52,
-            37.814,
-            42.045,
-            42.643,
-            39.475,
-            41.716,
-            44.467,
-            42.122,
-            48.435,
-            44.93,
-            39.69300000000001,
-            46.992,
-            37.485,
-            40.158,
-            40.059,
-            40.489,
-            33.896,
-            46.452,
-            35.753,
-            34.488,
-            47.949,
-            47.747,
-            40.502,
-            47.808,
-            40.848,
-            38.41,
-            36.936,
-            44.24800000000001,
-            60.246,
-            47.924,
-            36.161,
-            48.386,
-            39.487,
-            39.36,
-            57.666,
-            43,
-            51.893,
-            41.45399999999999,
-            32.767,
-            36.981,
-            49.951,
-            40.87,
-            44.992,
-            44.246,
-            43.922,
-            49.57899999999999,
-            45.344,
-            46.023,
-            52.358
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1962<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             21283783,
-             3593918,
-             76039390,
-             18985849,
-             7961258,
-             17009885,
-             1345187,
-             7254373,
-             3453434,
-             4681707,
-             2747687,
-             4208858,
-             3880130,
-             2090162,
-             1665128,
-             41121485,
-             1590597,
-             1215725,
-             2009813,
-             10516500,
-             2448046,
-             887498,
-             186538000,
-             2598466,
-             8143375
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            7133.166023000002,
-            2180.972546,
-            3336.585802,
-            13462.48555,
-            4519.094331,
-            2492.351109,
-            3460.937025,
-            5180.75591,
-            1662.137359,
-            4086.114078,
-            3776.803627,
-            2750.364446,
-            1796.589032,
-            2291.156835,
-            5246.107524,
-            4581.609385,
-            3634.364406,
-            3536.540301,
-            2148.027146,
-            4957.037982,
-            5108.34463,
-            4997.523971000001,
-            16173.14586,
-            5603.357717,
-            8422.974165000001
-           ],
-           "xaxis": "x",
-           "y": [
-            65.142,
-            43.428,
-            55.665,
-            71.3,
-            57.924,
-            57.863,
-            62.842,
-            65.24600000000001,
-            53.459,
-            54.64,
-            52.307,
-            46.95399999999999,
-            43.59,
-            48.041,
-            65.61,
-            58.299,
-            48.632,
-            61.817,
-            64.361,
-            49.096,
-            69.62,
-            64.9,
-            70.21,
-            68.253,
-            60.77
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1962<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             10794968,
-             2488550
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            12217.22686,
-            13175.678
-           ],
-           "xaxis": "x",
-           "y": [
-            70.93,
-            71.24
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1962"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1967<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             11537966,
-             202182,
-             62821884,
-             6960067,
-             754550000,
-             3722800,
-             506000000,
-             109343000,
-             26538000,
-             8519282,
-             2693585,
-             100825279,
-             1255058,
-             12617009,
-             30131000,
-             575003,
-             2186894,
-             10154878,
-             1149500,
-             25870271,
-             11261690,
-             714775,
-             60641899,
-             35356600,
-             5618198,
-             1977600,
-             11737396,
-             5680812,
-             13648692,
-             34024249,
-             39463910,
-             1142636,
-             6740785
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            836.1971382,
-            14804.6727,
-            721.1860862000002,
-            523.4323142,
-            612.7056934,
-            6197.962814,
-            700.7706107000001,
-            762.4317721,
-            5906.731804999999,
-            8931.459811,
-            8393.741404,
-            9847.788607,
-            2741.796252,
-            2143.540609,
-            2029.228142,
-            80894.88326,
-            6006.983042,
-            2277.742396,
-            1226.04113,
-            349,
-            676.4422254,
-            4720.942687,
-            942.4082588,
-            1814.12743,
-            16903.04886,
-            4977.41854,
-            1135.514326,
-            1881.923632,
-            2643.858681,
-            1295.46066,
-            637.1232887,
-            2649.715007,
-            862.4421463
-           ],
-           "xaxis": "x",
-           "y": [
-            34.02,
-            59.923,
-            43.453,
-            45.415,
-            58.38112,
-            70,
-            47.19300000000001,
-            45.964,
-            52.469,
-            54.459,
-            70.75,
-            71.43,
-            51.629,
-            59.942,
-            57.716,
-            64.624,
-            63.87,
-            59.371,
-            51.253,
-            49.379,
-            41.472,
-            46.988,
-            49.8,
-            56.393,
-            49.901,
-            67.946,
-            64.266,
-            53.655,
-            67.5,
-            58.285,
-            47.838,
-            51.631,
-            36.984
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1967<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             1984060,
-             7376998,
-             9556500,
-             3585000,
-             8310226,
-             4174366,
-             9835109,
-             4838800,
-             4605744,
-             49569000,
-             76368453,
-             8716441,
-             10223422,
-             198676,
-             2900100,
-             52667100,
-             501035,
-             12596822,
-             3786019,
-             31785378,
-             9103000,
-             19284814,
-             7971222,
-             4442238,
-             1646912,
-             32850275,
-             7867931,
-             6063000,
-             33411317,
-             54959000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            2760.196931,
-            12834.6024,
-            13149.04119,
-            2172.3524230000007,
-            5577.0028,
-            6960.297861,
-            11399.44489,
-            15937.21123,
-            10921.63626,
-            12999.91766,
-            14745.62561,
-            8513.097016,
-            9326.64467,
-            13319.89568,
-            7655.568963,
-            10022.40131,
-            5907.850937,
-            15363.25136,
-            16361.87647,
-            6557.152776,
-            6361.517993,
-            6470.866545,
-            7991.707066,
-            8412.902397,
-            9405.489397,
-            7993.512294,
-            15258.29697,
-            22966.14432,
-            2826.3563870000007,
-            14142.85089
-           ],
-           "xaxis": "x",
-           "y": [
-            66.22,
-            70.14,
-            70.94,
-            64.79,
-            70.42,
-            68.5,
-            70.38,
-            72.96,
-            69.83,
-            71.55,
-            70.8,
-            71,
-            69.5,
-            73.73,
-            71.08,
-            71.06,
-            67.178,
-            73.82,
-            74.08,
-            69.61,
-            66.6,
-            66.8,
-            66.914,
-            70.98,
-            69.18,
-            71.44,
-            74.16,
-            72.77,
-            54.33600000000001,
-            71.36
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1967<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             12760499,
-             5247469,
-             2427334,
-             553541,
-             5127935,
-             3330989,
-             6335506,
-             1733638,
-             3495967,
-             217378,
-             19941073,
-             1179760,
-             4744870,
-             127617,
-             31681188,
-             259864,
-             1820319,
-             27860297,
-             489004,
-             439593,
-             8490213,
-             3451418,
-             601287,
-             10191512,
-             996380,
-             1279406,
-             1759224,
-             6334556,
-             4147252,
-             5212416,
-             1230542,
-             789309,
-             14770296,
-             8680909,
-             706640,
-             4534062,
-             47287752,
-             414024,
-             3451079,
-             70787,
-             3965841,
-             2662190,
-             3428839,
-             20997321,
-             12716129,
-             420690,
-             12607312,
-             1735550,
-             4786986,
-             8900294,
-             3900000,
-             4995432
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3246.991771,
-            5522.776375,
-            1035.831411,
-            1214.709294,
-            794.8265597,
-            412.97751360000007,
-            1508.453148,
-            1136.056615,
-            1196.810565,
-            1876.029643,
-            861.5932424,
-            2677.9396420000007,
-            2052.050473,
-            3020.050513,
-            1814.880728,
-            915.5960025,
-            468.7949699,
-            516.1186438,
-            8358.761987,
-            734.7829124,
-            1125.69716,
-            708.7595409,
-            715.5806402000002,
-            1056.736457,
-            498.6390265,
-            713.6036482999998,
-            18772.75169,
-            1634.047282,
-            495.5147806,
-            545.0098873,
-            1421.145193,
-            2475.387562,
-            1711.04477,
-            566.6691539,
-            3793.694753,
-            1054.384891,
-            1014.514104,
-            4021.175739,
-            510.9637142,
-            1384.840593,
-            1612.404632,
-            1206.043465,
-            1284.7331800000004,
-            7114.477970999998,
-            1687.997641,
-            2613.101665,
-            848.2186575,
-            1477.59676,
-            1932.3601670000005,
-            908.9185217,
-            1777.077318,
-            569.7950712
-           ],
-           "xaxis": "x",
-           "y": [
-            51.407,
-            35.985,
-            44.885,
-            53.298,
-            40.697,
-            43.548,
-            44.799,
-            41.478,
-            43.601000000000006,
-            46.472,
-            44.056,
-            52.04,
-            47.35,
-            42.074,
-            49.293,
-            38.987,
-            42.18899999999999,
-            42.115,
-            44.598,
-            35.857,
-            48.072,
-            37.197,
-            35.492,
-            50.654,
-            48.492,
-            41.536,
-            50.227,
-            42.881,
-            39.487,
-            38.487,
-            46.289,
-            61.557,
-            50.335,
-            38.113,
-            51.159,
-            40.118,
-            41.04,
-            60.542,
-            44.1,
-            54.425,
-            43.563,
-            34.113,
-            38.977,
-            51.927,
-            42.858,
-            46.633,
-            45.757,
-            46.769,
-            52.053,
-            48.051,
-            47.768,
-            53.995
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1967<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             22934225,
-             4040665,
-             88049823,
-             20819767,
-             8858908,
-             19764027,
-             1588717,
-             8139332,
-             4049146,
-             5432424,
-             3232927,
-             4690773,
-             4318137,
-             2500689,
-             1861096,
-             47995559,
-             1865490,
-             1405486,
-             2287985,
-             12132200,
-             2648961,
-             960155,
-             198712000,
-             2748579,
-             9709552
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            8052.953020999998,
-            2586.886053,
-            3429.864357,
-            16076.58803,
-            5106.654313,
-            2678.729839,
-            4161.727834,
-            5690.268015,
-            1653.7230029999996,
-            4579.074215,
-            4358.595393,
-            3242.531147,
-            1452.057666,
-            2538.269358,
-            6124.703450999999,
-            5754.733883,
-            4643.393534000002,
-            4421.009084,
-            2299.376311,
-            5788.09333,
-            6929.277714,
-            5621.368472,
-            19530.36557,
-            5444.61962,
-            9541.474188
-           ],
-           "xaxis": "x",
-           "y": [
-            65.634,
-            45.032,
-            57.632,
-            72.13,
-            60.523,
-            59.963,
-            65.42399999999999,
-            68.29,
-            56.75100000000001,
-            56.678,
-            55.855,
-            50.01600000000001,
-            46.243,
-            50.924,
-            67.51,
-            60.11,
-            51.88399999999999,
-            64.071,
-            64.95100000000001,
-            51.445,
-            71.1,
-            65.4,
-            70.76,
-            68.468,
-            63.479
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1967<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             11872264,
-             2728150
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            14526.12465,
-            14463.918930000002
-           ],
-           "xaxis": "x",
-           "y": [
-            71.1,
-            71.52
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1967"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1972<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             13079460,
-             230800,
-             70759295,
-             7450606,
-             862030000,
-             4115700,
-             567000000,
-             121282000,
-             30614000,
-             10061506,
-             3095893,
-             107188273,
-             1613551,
-             14781241,
-             33505000,
-             841934,
-             2680018,
-             11441462,
-             1320500,
-             28466390,
-             12412593,
-             829050,
-             69325921,
-             40850141,
-             6472756,
-             2152400,
-             13016733,
-             6701172,
-             15226039,
-             39276153,
-             44655014,
-             1089572,
-             7407075
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            739.9811057999998,
-            18268.65839,
-            630.2336265,
-            421.6240257,
-            676.9000921,
-            8315.928145,
-            724.032527,
-            1111.107907,
-            9613.818607,
-            9576.037596,
-            12786.93223,
-            14778.78636,
-            2110.856309,
-            3701.621503,
-            3030.87665,
-            109347.867,
-            7486.384341,
-            2849.09478,
-            1421.741975,
-            357,
-            674.7881296,
-            10618.03855,
-            1049.938981,
-            1989.37407,
-            24837.42865,
-            8597.756202,
-            1213.39553,
-            2571.423014,
-            4062.523897,
-            1524.358936,
-            699.5016441,
-            3133.409277,
-            1265.047031
-           ],
-           "xaxis": "x",
-           "y": [
-            36.088,
-            63.3,
-            45.252,
-            40.317,
-            63.11888,
-            72,
-            50.651,
-            49.203,
-            55.234,
-            56.95,
-            71.63,
-            73.42,
-            56.528,
-            63.983,
-            62.612,
-            67.712,
-            65.421,
-            63.01,
-            53.754,
-            53.07,
-            43.971,
-            52.143,
-            51.929,
-            58.065,
-            53.886,
-            69.521,
-            65.042,
-            57.29600000000001,
-            69.39,
-            60.405,
-            50.254,
-            56.532,
-            39.848
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1972<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             2263554,
-             7544201,
-             9709100,
-             3819000,
-             8576200,
-             4225310,
-             9862158,
-             4991596,
-             4639657,
-             51732000,
-             78717088,
-             8888628,
-             10394091,
-             209275,
-             3024400,
-             54365564,
-             527678,
-             13329874,
-             3933004,
-             33039545,
-             8970450,
-             20662648,
-             8313288,
-             4593433,
-             1694510,
-             34513161,
-             8122293,
-             6401400,
-             37492953,
-             56079000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3313.422188,
-            16661.6256,
-            16672.14356,
-            2860.16975,
-            6597.494398,
-            9164.090127,
-            13108.4536,
-            18866.20721,
-            14358.8759,
-            16107.19171,
-            18016.18027,
-            12724.82957,
-            10168.65611,
-            15798.06362,
-            9530.772896,
-            12269.27378,
-            7778.414017,
-            18794.74567,
-            18965.05551,
-            8006.506993000001,
-            9022.247417,
-            8011.4144019999985,
-            10522.06749,
-            9674.167626,
-            12383.4862,
-            10638.75131,
-            17832.02464,
-            27195.11304,
-            3450.69638,
-            15895.11641
-           ],
-           "xaxis": "x",
-           "y": [
-            67.69,
-            70.63,
-            71.44,
-            67.45,
-            70.9,
-            69.61,
-            70.29,
-            73.47,
-            70.87,
-            72.38,
-            71,
-            72.34,
-            69.76,
-            74.46,
-            71.28,
-            72.19,
-            70.63600000000002,
-            73.75,
-            74.34,
-            70.85,
-            69.26,
-            69.21,
-            68.7,
-            70.35,
-            69.82,
-            73.06,
-            74.72,
-            73.78,
-            57.005,
-            72.01
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1972<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             14760787,
-             5894858,
-             2761407,
-             619351,
-             5433886,
-             3529983,
-             7021028,
-             1927260,
-             3899068,
-             250027,
-             23007669,
-             1340458,
-             6071696,
-             178848,
-             34807417,
-             277603,
-             2260187,
-             30770372,
-             537977,
-             517101,
-             9354120,
-             3811387,
-             625361,
-             12044785,
-             1116779,
-             1482628,
-             2183877,
-             7082430,
-             4730997,
-             5828158,
-             1332786,
-             851334,
-             16660670,
-             9809596,
-             821782,
-             5060262,
-             53740085,
-             461633,
-             3992121,
-             76595,
-             4588696,
-             2879013,
-             3840161,
-             23935810,
-             14597019,
-             480105,
-             14706593,
-             2056351,
-             5303507,
-             10190285,
-             4506497,
-             5861135
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            4182.663766,
-            5473.288004999999,
-            1085.796879,
-            2263.6111140000007,
-            854.7359763000002,
-            464.0995039,
-            1684.1465280000002,
-            1070.013275,
-            1104.103987,
-            1937.577675,
-            904.8960685,
-            3213.152683,
-            2378.201111,
-            3694.2123520000014,
-            2024.008147,
-            672.4122571,
-            514.3242081999998,
-            566.2439442000001,
-            11401.94841,
-            756.0868363,
-            1178.223708,
-            741.6662307,
-            820.2245876000002,
-            1222.359968,
-            496.5815922000001,
-            803.0054535,
-            21011.49721,
-            1748.562982,
-            584.6219709,
-            581.3688761,
-            1586.851781,
-            2575.484158,
-            1930.194975,
-            724.9178037,
-            3746.080948,
-            954.2092363,
-            1698.388838,
-            5047.658563,
-            590.5806637999998,
-            1532.985254,
-            1597.712056,
-            1353.759762,
-            1254.576127,
-            7765.962636,
-            1659.652775,
-            3364.836625,
-            915.9850592,
-            1649.660188,
-            2753.2859940000008,
-            950.735869,
-            1773.498265,
-            799.3621757999998
-           ],
-           "xaxis": "x",
-           "y": [
-            54.518,
-            37.928,
-            47.014,
-            56.024,
-            43.591,
-            44.057,
-            47.049,
-            43.457,
-            45.569,
-            48.944,
-            45.989,
-            54.907,
-            49.801,
-            44.36600000000001,
-            51.137,
-            40.516,
-            44.142,
-            43.515,
-            48.69,
-            38.308,
-            49.875,
-            38.842,
-            36.486,
-            53.559,
-            49.767,
-            42.614,
-            52.773,
-            44.851000000000006,
-            41.76600000000001,
-            39.977,
-            48.437,
-            62.944,
-            52.862,
-            40.328,
-            53.867,
-            40.546,
-            42.82100000000001,
-            64.274,
-            44.6,
-            56.48,
-            45.815,
-            35.4,
-            40.973,
-            53.69600000000001,
-            45.083,
-            49.552,
-            47.62,
-            49.75899999999999,
-            55.602,
-            51.01600000000001,
-            50.107,
-            55.635
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1972<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             24779799,
-             4565872,
-             100840058,
-             22284500,
-             9717524,
-             22542890,
-             1834796,
-             8831348,
-             4671329,
-             6298651,
-             3790903,
-             5149581,
-             4698301,
-             2965146,
-             1997616,
-             55984294,
-             2182908,
-             1616384,
-             2614104,
-             13954700,
-             2847132,
-             975199,
-             209896000,
-             2829526,
-             11515649
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            9443.038526,
-            2980.331339,
-            4985.711467,
-            18970.57086,
-            5494.024437,
-            3264.660041,
-            5118.146939,
-            5305.445256,
-            2189.874499,
-            5280.99471,
-            4520.246008,
-            4031.408271,
-            1654.456946,
-            2529.842345,
-            7433.889293000001,
-            6809.406690000002,
-            4688.593267,
-            5364.249663000001,
-            2523.337977,
-            5937.827283,
-            9123.041742,
-            6619.551418999999,
-            21806.03594,
-            5703.408898,
-            10505.25966
-           ],
-           "xaxis": "x",
-           "y": [
-            67.065,
-            46.714,
-            59.504,
-            72.88,
-            63.441,
-            61.62300000000001,
-            67.84899999999999,
-            70.723,
-            59.631,
-            58.79600000000001,
-            58.207,
-            53.738,
-            48.042,
-            53.88399999999999,
-            69,
-            62.361,
-            55.151,
-            66.21600000000001,
-            65.815,
-            55.448,
-            72.16,
-            65.9,
-            71.34,
-            68.673,
-            65.712
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1972<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             13177000,
-             2929100
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            16788.62948,
-            16046.03728
-           ],
-           "xaxis": "x",
-           "y": [
-            71.93,
-            71.89
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1972"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1977<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             14880372,
-             297410,
-             80428306,
-             6978607,
-             943455000,
-             4583700,
-             634000000,
-             136725000,
-             35480679,
-             11882916,
-             3495918,
-             113872473,
-             1937652,
-             16325320,
-             36436000,
-             1140357,
-             3115787,
-             12845381,
-             1528000,
-             31528087,
-             13933198,
-             1004533,
-             78152686,
-             46850962,
-             8128505,
-             2325300,
-             14116836,
-             7932503,
-             16785196,
-             44148285,
-             50533506,
-             1261091,
-             8403990
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            786.11336,
-            19340.10196,
-            659.8772322000002,
-            524.9721831999999,
-            741.2374699,
-            11186.14125,
-            813.3373230000002,
-            1382.702056,
-            11888.59508,
-            14688.23507,
-            13306.61921,
-            16610.37701,
-            2852.351568,
-            4106.301249,
-            4657.22102,
-            59265.47714,
-            8659.696836,
-            3827.921571,
-            1647.511665,
-            371,
-            694.1124398,
-            11848.34392,
-            1175.921193,
-            2373.204287,
-            34167.7626,
-            11210.08948,
-            1348.775651,
-            3195.484582,
-            5596.519826,
-            1961.2246350000007,
-            713.5371196000001,
-            3682.831494,
-            1829.765177
-           ],
-           "xaxis": "x",
-           "y": [
-            38.438,
-            65.593,
-            46.923,
-            31.22,
-            63.96736,
-            73.6,
-            54.208,
-            52.702,
-            57.702,
-            60.413,
-            73.06,
-            75.38,
-            61.13399999999999,
-            67.15899999999999,
-            64.766,
-            69.343,
-            66.09899999999999,
-            65.256,
-            55.49100000000001,
-            56.059,
-            46.74800000000001,
-            57.367,
-            54.043,
-            60.06,
-            58.69,
-            70.795,
-            65.949,
-            61.195,
-            70.59,
-            62.494,
-            55.764,
-            60.765,
-            44.175
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1977<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             2509048,
-             7568430,
-             9821800,
-             4086000,
-             8797022,
-             4318673,
-             10161915,
-             5088419,
-             4738902,
-             53165019,
-             78160773,
-             9308479,
-             10637171,
-             221823,
-             3271900,
-             56059245,
-             560073,
-             13852989,
-             4043205,
-             34621254,
-             9662600,
-             21658597,
-             8686367,
-             4827803,
-             1746919,
-             36439000,
-             8251648,
-             6316424,
-             42404033,
-             56179000
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3533.003910000001,
-            19749.4223,
-            19117.97448,
-            3528.481305,
-            7612.240438,
-            11305.38517,
-            14800.16062,
-            20422.9015,
-            15605.42283,
-            18292.63514,
-            20512.92123,
-            14195.52428,
-            11674.83737,
-            19654.96247,
-            11150.98113,
-            14255.98475,
-            9595.929905,
-            21209.0592,
-            23311.34939,
-            9508.141454,
-            10172.48572,
-            9356.39724,
-            12980.66956,
-            10922.66404,
-            15277.030169999998,
-            13236.92117,
-            18855.72521,
-            26982.29052,
-            4269.122326,
-            17428.74846
-           ],
-           "xaxis": "x",
-           "y": [
-            68.93,
-            72.17,
-            72.8,
-            69.86,
-            70.81,
-            70.64,
-            70.71,
-            74.69,
-            72.52,
-            73.83,
-            72.5,
-            73.68,
-            69.95,
-            76.11,
-            72.03,
-            73.48,
-            73.066,
-            75.24,
-            75.37,
-            70.67,
-            70.41,
-            69.46,
-            70.3,
-            70.45,
-            70.97,
-            74.39,
-            75.44,
-            75.39,
-            59.507,
-            72.76
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1977<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             17152804,
-             6162675,
-             3168267,
-             781472,
-             5889574,
-             3834415,
-             7959865,
-             2167533,
-             4388260,
-             304739,
-             26480870,
-             1536769,
-             7459574,
-             228694,
-             38783863,
-             192675,
-             2512642,
-             34617799,
-             706367,
-             608274,
-             10538093,
-             4227026,
-             745228,
-             14500404,
-             1251524,
-             1703617,
-             2721783,
-             8007166,
-             5637246,
-             6491649,
-             1456688,
-             913025,
-             18396941,
-             11127868,
-             977026,
-             5682086,
-             62209173,
-             492095,
-             4657072,
-             86796,
-             5260855,
-             3140897,
-             4353666,
-             27129932,
-             17104986,
-             551425,
-             17129565,
-             2308582,
-             6005061,
-             11457758,
-             5216550,
-             6642107
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            4910.416756000001,
-            3008.647355,
-            1029.161251,
-            3214.857818,
-            743.3870368,
-            556.1032651,
-            1783.432873,
-            1109.374338,
-            1133.98495,
-            1172.603047,
-            795.757282,
-            3259.178978,
-            2517.736547,
-            3081.761022,
-            2785.493582,
-            958.5668124,
-            505.7538077,
-            556.8083834,
-            21745.57328,
-            884.7552507000001,
-            993.2239571,
-            874.6858642999998,
-            764.7259627999998,
-            1267.613204,
-            745.3695408,
-            640.3224382999998,
-            21951.21176,
-            1544.228586,
-            663.2236766,
-            686.3952693,
-            1497.492223,
-            3710.982963,
-            2370.619976,
-            502.3197334,
-            3876.485958,
-            808.8970727999998,
-            1981.951806,
-            4319.804067,
-            670.0806011,
-            1737.561657,
-            1561.769116,
-            1348.285159,
-            1450.992513,
-            8028.651439,
-            2202.988423,
-            3781.410618,
-            962.4922932,
-            1532.776998,
-            3120.876811,
-            843.7331372000001,
-            1588.688299,
-            685.5876821
-           ],
-           "xaxis": "x",
-           "y": [
-            58.014,
-            39.483,
-            49.19,
-            59.319,
-            46.137,
-            45.91,
-            49.355,
-            46.775,
-            47.383,
-            50.93899999999999,
-            47.804,
-            55.625,
-            52.374,
-            46.519,
-            53.319,
-            42.024,
-            44.535,
-            44.51,
-            52.79,
-            41.842,
-            51.756,
-            40.762,
-            37.465,
-            56.155,
-            52.208,
-            43.764,
-            57.442,
-            46.881,
-            43.767,
-            41.714,
-            50.852,
-            64.93,
-            55.73,
-            42.495,
-            56.437,
-            41.291,
-            44.514,
-            67.064,
-            45,
-            58.55,
-            48.879,
-            36.788,
-            41.974,
-            55.527,
-            47.8,
-            52.537,
-            49.919,
-            52.887,
-            59.837,
-            50.35,
-            51.386,
-            57.674
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1977<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             26983828,
-             5079716,
-             114313951,
-             23796400,
-             10599793,
-             25094412,
-             2108457,
-             9537988,
-             5302800,
-             7278866,
-             4282586,
-             5703430,
-             4908554,
-             3055235,
-             2156814,
-             63759976,
-             2554598,
-             1839782,
-             2984494,
-             15990099,
-             3080828,
-             1039009,
-             220239000,
-             2873520,
-             13503563
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            10079.02674,
-            3548.097832,
-            6660.118654,
-            22090.88306,
-            4756.763836,
-            3815.80787,
-            5926.876967,
-            6380.494965999998,
-            2681.9889,
-            6679.62326,
-            5138.922374,
-            4879.992748,
-            1874.298931,
-            3203.208066,
-            6650.195573,
-            7674.929108,
-            5486.371089,
-            5351.912144,
-            3248.373311,
-            6281.290854999998,
-            9770.524921,
-            7899.554209000001,
-            24072.63213,
-            6504.339663000002,
-            13143.95095
-           ],
-           "xaxis": "x",
-           "y": [
-            68.48100000000001,
-            50.023,
-            61.489,
-            74.21,
-            67.05199999999999,
-            63.837,
-            70.75,
-            72.649,
-            61.788,
-            61.31,
-            56.69600000000001,
-            56.029,
-            49.923,
-            57.402,
-            70.11,
-            65.032,
-            57.47,
-            68.681,
-            66.35300000000001,
-            58.447,
-            73.44,
-            68.3,
-            73.38,
-            69.48100000000001,
-            67.456
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1977<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             14074100,
-             3164900
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            18334.19751,
-            16233.7177
-           ],
-           "xaxis": "x",
-           "y": [
-            73.49,
-            72.22
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1977"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1982<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             12881816,
-             377967,
-             93074406,
-             7272485,
-             1000281000,
-             5264500,
-             708000000,
-             153343000,
-             43072751,
-             14173318,
-             3858421,
-             118454974,
-             2347031,
-             17647518,
-             39326000,
-             1497494,
-             3086876,
-             14441916,
-             1756032,
-             34680442,
-             15796314,
-             1301048,
-             91462088,
-             53456774,
-             11254672,
-             2651869,
-             15410151,
-             9410494,
-             18501390,
-             48827160,
-             56142181,
-             1425876,
-             9657618
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            978.0114388,
-            19211.14731,
-            676.9818656,
-            624.4754784,
-            962.4213805,
-            14560.53051,
-            855.7235377000002,
-            1516.872988,
-            7608.334602,
-            14517.90711,
-            15367.0292,
-            19384.10571,
-            4161.415959,
-            4106.525293,
-            5622.942464,
-            31354.03573,
-            7640.519520999998,
-            4920.355951,
-            2000.603139,
-            424,
-            718.3730947,
-            12954.79101,
-            1443.429832,
-            2603.273765,
-            33693.17525,
-            15169.16112,
-            1648.079789,
-            3761.837715,
-            7426.3547739999985,
-            2393.219781,
-            707.2357863,
-            4336.032082,
-            1977.55701
-           ],
-           "xaxis": "x",
-           "y": [
-            39.854,
-            69.05199999999999,
-            50.00899999999999,
-            50.957,
-            65.525,
-            75.45,
-            56.596,
-            56.159,
-            59.62,
-            62.038,
-            74.45,
-            77.11,
-            63.739,
-            69.1,
-            67.123,
-            71.309,
-            66.983,
-            68,
-            57.489,
-            58.056,
-            49.594,
-            62.728,
-            56.158,
-            62.082,
-            63.012,
-            71.76,
-            68.757,
-            64.59,
-            72.16,
-            64.597,
-            58.816,
-            64.406,
-            49.113
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1982<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             2780097,
-             7574613,
-             9856303,
-             4172693,
-             8892098,
-             4413368,
-             10303704,
-             5117810,
-             4826933,
-             54433565,
-             78335266,
-             9786480,
-             10705535,
-             233997,
-             3480000,
-             56535636,
-             562548,
-             14310401,
-             4114787,
-             36227381,
-             9859650,
-             22356726,
-             9032824,
-             5048043,
-             1861252,
-             37983310,
-             8325260,
-             6468126,
-             47328791,
-             56339704
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3630.880722,
-            21597.08362,
-            20979.84589,
-            4126.613157,
-            8224.191647,
-            13221.82184,
-            15377.22855,
-            21688.04048,
-            18533.15761,
-            20293.89746,
-            22031.53274,
-            15268.42089,
-            12545.99066,
-            23269.6075,
-            12618.32141,
-            16537.4835,
-            11222.58762,
-            21399.46046,
-            26298.63531,
-            8451.531004,
-            11753.84291,
-            9605.314053,
-            15181.0927,
-            11348.54585,
-            17866.72175,
-            13926.16997,
-            20667.38125,
-            28397.71512,
-            4241.356344,
-            18232.42452
-           ],
-           "xaxis": "x",
-           "y": [
-            70.42,
-            73.18,
-            73.93,
-            70.69,
-            71.08,
-            70.46,
-            70.96,
-            74.63,
-            74.55,
-            74.89,
-            73.8,
-            75.24,
-            69.39,
-            76.99,
-            73.1,
-            74.98,
-            74.101,
-            76.05,
-            75.97,
-            71.32,
-            72.77,
-            69.66,
-            70.16199999999999,
-            70.8,
-            71.063,
-            76.3,
-            76.42,
-            76.21,
-            61.036,
-            74.04
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1982<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             20033753,
-             7016384,
-             3641603,
-             970347,
-             6634596,
-             4580410,
-             9250831,
-             2476971,
-             4875118,
-             348643,
-             30646495,
-             1774735,
-             9025951,
-             305991,
-             45681811,
-             285483,
-             2637297,
-             38111756,
-             753874,
-             715523,
-             11400338,
-             4710497,
-             825987,
-             17661452,
-             1411807,
-             1956875,
-             3344074,
-             9171477,
-             6502825,
-             6998256,
-             1622136,
-             992040,
-             20198730,
-             12587223,
-             1099010,
-             6437188,
-             73039376,
-             517810,
-             5507565,
-             98593,
-             6147783,
-             3464522,
-             5828892,
-             31140029,
-             20367053,
-             649901,
-             19844382,
-             2644765,
-             6734098,
-             12939400,
-             6100407,
-             7636524
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5745.160213,
-            2756.953672,
-            1277.897616,
-            4551.14215,
-            807.1985855,
-            559.6032309999998,
-            2367.983282,
-            956.7529907,
-            797.9081006,
-            1267.100083,
-            673.7478181,
-            4879.507522,
-            2602.710169,
-            2879.468067,
-            3503.729636,
-            927.8253427,
-            524.8758493,
-            577.8607471,
-            15113.36194,
-            835.8096107999999,
-            876.032569,
-            857.2503577,
-            838.1239671,
-            1348.225791,
-            797.2631074,
-            572.1995694,
-            17364.275380000006,
-            1302.878658,
-            632.8039209,
-            618.0140640999998,
-            1481.150189,
-            3688.037739,
-            2702.620356,
-            462.2114149,
-            4191.100511,
-            909.7221354,
-            1576.97375,
-            5267.219353,
-            881.5706467,
-            1890.218117,
-            1518.479984,
-            1465.010784,
-            1176.807031,
-            8568.266228,
-            1895.544073,
-            3895.384018,
-            874.2426069,
-            1344.577953,
-            3560.2331740000004,
-            682.2662267999998,
-            1408.678565,
-            788.8550411
-           ],
-           "xaxis": "x",
-           "y": [
-            61.368,
-            39.942,
-            50.904,
-            61.484,
-            48.122,
-            47.471,
-            52.96100000000001,
-            48.295,
-            49.517,
-            52.933,
-            47.784,
-            56.695,
-            53.983,
-            48.812,
-            56.006,
-            43.662,
-            43.89,
-            44.916,
-            56.56399999999999,
-            45.58,
-            53.744,
-            42.89100000000001,
-            39.327,
-            58.76600000000001,
-            55.078,
-            44.852,
-            62.155,
-            48.969,
-            45.642,
-            43.916,
-            53.599,
-            66.711,
-            59.65,
-            42.795,
-            58.968,
-            42.598,
-            45.826,
-            69.885,
-            46.218,
-            60.351000000000006,
-            52.379,
-            38.445,
-            42.955,
-            58.161,
-            50.338,
-            55.56100000000001,
-            50.608,
-            55.471,
-            64.048,
-            49.849,
-            51.82100000000001,
-            60.363
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1982<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             29341374,
-             5642224,
-             128962939,
-             25201900,
-             11487112,
-             27764644,
-             2424367,
-             9789224,
-             5968349,
-             8365850,
-             4474873,
-             6395630,
-             5198399,
-             3669448,
-             2298309,
-             71640904,
-             2979423,
-             2036305,
-             3366439,
-             18125129,
-             3279001,
-             1116479,
-             232187835,
-             2953997,
-             15620766
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            8997.897412,
-            3156.510452,
-            7030.835878,
-            22898.79214,
-            5095.6657380000015,
-            4397.575659,
-            5262.734751,
-            7316.918106999998,
-            2861.092386,
-            7213.791267,
-            4098.344175,
-            4820.49479,
-            2011.159549,
-            3121.7607940000007,
-            6068.05135,
-            9611.147541,
-            3470.3381560000007,
-            7009.601598,
-            4258.503604,
-            6434.501797,
-            10330.98915,
-            9119.528607,
-            25009.55914,
-            6920.223051000001,
-            11152.41011
-           ],
-           "xaxis": "x",
-           "y": [
-            69.942,
-            53.859,
-            63.33600000000001,
-            75.76,
-            70.565,
-            66.653,
-            73.45,
-            73.717,
-            63.727,
-            64.342,
-            56.604,
-            58.137,
-            51.46100000000001,
-            60.909,
-            71.21,
-            67.405,
-            59.298,
-            70.472,
-            66.874,
-            61.40600000000001,
-            73.75,
-            68.832,
-            74.65,
-            70.805,
-            68.557
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1982<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             15184200,
-             3210650
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            19477.00928,
-            17632.4104
-           ],
-           "xaxis": "x",
-           "y": [
-            74.74,
-            73.84
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1982"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1987<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             13867957,
-             454612,
-             103764241,
-             8371791,
-             1084035000,
-             5584510,
-             788000000,
-             169276000,
-             51889696,
-             16543189,
-             4203148,
-             122091325,
-             2820042,
-             19067554,
-             41622000,
-             1891487,
-             3089353,
-             16331785,
-             2015133,
-             38028578,
-             17917180,
-             1593882,
-             105186881,
-             60017788,
-             14619745,
-             2794552,
-             16495304,
-             11242847,
-             19757799,
-             52910342,
-             62826491,
-             1691210,
-             11219340
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            852.3959447999998,
-            18524.02406,
-            751.9794035,
-            683.8955732000002,
-            1378.904018,
-            20038.47269,
-            976.5126756,
-            1748.356961,
-            6642.881371,
-            11643.57268,
-            17122.47986,
-            22375.94189,
-            4448.679912,
-            4106.492315,
-            8533.088805,
-            28118.42998,
-            5377.091329,
-            5249.802653,
-            2338.008304,
-            385,
-            775.6324501,
-            18115.22313,
-            1704.686583,
-            2189.634995,
-            21198.26136,
-            18861.53081,
-            1876.766827,
-            3116.774285,
-            11054.56175,
-            2982.653773,
-            820.7994449,
-            5107.197384,
-            1971.741538
-           ],
-           "xaxis": "x",
-           "y": [
-            40.822,
-            70.75,
-            52.819,
-            53.914,
-            67.274,
-            76.2,
-            58.553,
-            60.137,
-            63.04,
-            65.044,
-            75.6,
-            78.67,
-            65.869,
-            70.64699999999998,
-            69.81,
-            74.17399999999998,
-            67.926,
-            69.5,
-            60.222,
-            58.339,
-            52.537,
-            67.734,
-            58.245,
-            64.15100000000001,
-            66.295,
-            73.56,
-            69.01100000000001,
-            66.97399999999999,
-            73.4,
-            66.084,
-            62.82,
-            67.046,
-            52.922
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1987<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             3075321,
-             7578903,
-             9870200,
-             4338977,
-             8971958,
-             4484310,
-             10311597,
-             5127024,
-             4931729,
-             55630100,
-             77718298,
-             9974490,
-             10612740,
-             244676,
-             3539900,
-             56729703,
-             569473,
-             14665278,
-             4186147,
-             37740710,
-             9915289,
-             22686371,
-             9230783,
-             5199318,
-             1945870,
-             38880702,
-             8421403,
-             6649942,
-             52881328,
-             56981620
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3738.932735,
-            23687.82607,
-            22525.56308,
-            4314.114757,
-            8239.854824,
-            13822.58394,
-            16310.4434,
-            25116.17581,
-            21141.01223,
-            22066.44214,
-            24639.18566,
-            16120.52839,
-            12986.47998,
-            26923.20628,
-            13872.86652,
-            19207.23482,
-            11732.51017,
-            23651.32361,
-            31540.9748,
-            9082.351172,
-            13039.30876,
-            9696.273295,
-            15870.87851,
-            12037.26758,
-            18678.53492,
-            15764.98313,
-            23586.92927,
-            30281.70459,
-            5089.043686,
-            21664.78767
-           ],
-           "xaxis": "x",
-           "y": [
-            72,
-            74.94,
-            75.35,
-            71.14,
-            71.34,
-            71.52,
-            71.58,
-            74.8,
-            74.83,
-            76.34,
-            74.847,
-            76.67,
-            69.58,
-            77.23,
-            74.36,
-            76.42,
-            74.865,
-            76.83,
-            75.89,
-            70.98,
-            74.06,
-            69.53,
-            71.218,
-            71.08,
-            72.25,
-            76.9,
-            77.19,
-            77.41,
-            63.108,
-            75.007
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1987<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             23254956,
-             7874230,
-             4243788,
-             1151184,
-             7586551,
-             5126023,
-             10780667,
-             2840009,
-             5498955,
-             395114,
-             35481645,
-             2064095,
-             10761098,
-             311025,
-             52799062,
-             341244,
-             2915959,
-             42999530,
-             880397,
-             848406,
-             14168101,
-             5650262,
-             927524,
-             21198082,
-             1599200,
-             2269414,
-             3799845,
-             10568642,
-             7824747,
-             7634008,
-             1841240,
-             1042663,
-             22987397,
-             12891952,
-             1278184,
-             7332638,
-             81551520,
-             562035,
-             6349365,
-             110812,
-             7171347,
-             3868905,
-             6921858,
-             35933379,
-             24725960,
-             779348,
-             23040630,
-             3154264,
-             7724976,
-             15283050,
-             7272406,
-             9216418
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5681.358539,
-            2430.208311,
-            1225.85601,
-            6205.88385,
-            912.0631417,
-            621.8188188999999,
-            2602.664206,
-            844.8763504000002,
-            952.386129,
-            1315.980812,
-            672.774812,
-            4201.194936999998,
-            2156.9560690000008,
-            2880.102568,
-            3885.46071,
-            966.8968149,
-            521.1341333,
-            573.7413142000001,
-            11864.40844,
-            611.6588611000002,
-            847.0061135,
-            805.5724717999999,
-            736.4153921,
-            1361.936856,
-            773.9932140999998,
-            506.1138573,
-            11770.5898,
-            1155.441948,
-            635.5173633999998,
-            684.1715576,
-            1421.603576,
-            4783.586903,
-            2755.046991,
-            389.8761846,
-            3693.731337,
-            668.3000228,
-            1385.029563,
-            5303.377488,
-            847.991217,
-            1516.525457,
-            1441.72072,
-            1294.4477880000004,
-            1093.244963,
-            7825.823398,
-            1507.819159,
-            3984.839812,
-            831.8220794,
-            1202.201361,
-            3810.419296,
-            617.7244065,
-            1213.315116,
-            706.1573059
-           ],
-           "xaxis": "x",
-           "y": [
-            65.79899999999999,
-            39.906,
-            52.337,
-            63.622,
-            49.557,
-            48.21100000000001,
-            54.985,
-            50.485,
-            51.051,
-            54.926,
-            47.412,
-            57.47,
-            54.655,
-            50.04,
-            59.797,
-            45.664,
-            46.453,
-            46.684,
-            60.19,
-            49.265,
-            55.729,
-            45.552,
-            41.245,
-            59.339,
-            57.18,
-            46.027,
-            66.234,
-            49.35,
-            47.457,
-            46.364,
-            56.145,
-            68.74,
-            62.677,
-            42.861,
-            60.835,
-            44.555,
-            46.886,
-            71.913,
-            44.02,
-            61.728,
-            55.769,
-            40.006,
-            44.50100000000001,
-            60.834,
-            51.744,
-            57.678,
-            51.535,
-            56.941,
-            66.89399999999999,
-            51.50899999999999,
-            50.82100000000001,
-            62.351000000000006
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1987<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             31620918,
-             6156369,
-             142938076,
-             26549700,
-             12463354,
-             30964245,
-             2799811,
-             10239839,
-             6655297,
-             9545158,
-             4842194,
-             7326406,
-             5756203,
-             4372203,
-             2326606,
-             80122492,
-             3344353,
-             2253639,
-             3886512,
-             20195924,
-             3444468,
-             1191336,
-             242803533,
-             3045153,
-             17910182
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            9139.671389,
-            2753.69149,
-            7807.095818000002,
-            26626.51503,
-            5547.063754,
-            4903.2191,
-            5629.915318,
-            7532.924762999999,
-            2899.842175,
-            6481.776993,
-            4140.442097,
-            4246.485974,
-            1823.015995,
-            3023.096699,
-            6351.237495,
-            8688.156003,
-            2955.984375,
-            7034.779161,
-            3998.875695,
-            6360.943444,
-            12281.34191,
-            7388.597823,
-            29884.350410000006,
-            7452.398969,
-            9883.584648
-           ],
-           "xaxis": "x",
-           "y": [
-            70.774,
-            57.25100000000001,
-            65.205,
-            76.86,
-            72.492,
-            67.768,
-            74.752,
-            74.17399999999998,
-            66.046,
-            67.23100000000001,
-            63.154,
-            60.782,
-            53.636,
-            64.492,
-            71.77,
-            69.498,
-            62.008,
-            71.523,
-            67.378,
-            64.134,
-            74.63,
-            69.582,
-            75.02,
-            71.918,
-            70.19
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1987<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             16257249,
-             3317166
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            21888.88903,
-            19007.19129
-           ],
-           "xaxis": "x",
-           "y": [
-            76.32,
-            74.32
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1987"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1992<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             16317921,
-             529491,
-             113704579,
-             10150094,
-             1164970000,
-             5829696,
-             872000000,
-             184816000,
-             60397973,
-             17861905,
-             4936550,
-             124329269,
-             3867409,
-             20711375,
-             43805450,
-             1418095,
-             3219994,
-             18319502,
-             2312802,
-             40546538,
-             20326209,
-             1915208,
-             120065004,
-             67185766,
-             16945857,
-             3235865,
-             17587060,
-             13219062,
-             20686918,
-             56667095,
-             69940728,
-             2104779,
-             13367997
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            649.3413952000002,
-            19035.57917,
-            837.8101642999999,
-            682.3031755,
-            1655.784158,
-            24757.60301,
-            1164.406809,
-            2383.140898,
-            7235.653187999998,
-            3745.640687,
-            18051.52254,
-            26824.89511,
-            3431.593647,
-            3726.063507,
-            12104.27872,
-            34932.91959,
-            6890.806854,
-            7277.912802,
-            1785.402016,
-            347,
-            897.7403604,
-            18616.70691,
-            1971.829464,
-            2279.324017000001,
-            24841.61777,
-            24769.8912,
-            2153.739222,
-            3340.542768,
-            15215.6579,
-            4616.896545000001,
-            989.0231487,
-            6017.654756,
-            1879.496673
-           ],
-           "xaxis": "x",
-           "y": [
-            41.674,
-            72.601,
-            56.018,
-            55.803,
-            68.69,
-            77.601,
-            60.223,
-            62.681,
-            65.742,
-            59.46100000000001,
-            76.93,
-            79.36,
-            68.015,
-            69.97800000000001,
-            72.244,
-            75.19,
-            69.292,
-            70.693,
-            61.271,
-            59.32,
-            55.727,
-            71.197,
-            60.838,
-            66.458,
-            68.768,
-            75.788,
-            70.37899999999998,
-            69.249,
-            74.26,
-            67.298,
-            67.66199999999999,
-            69.718,
-            55.599
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1992<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             3326498,
-             7914969,
-             10045622,
-             4256013,
-             8658506,
-             4494013,
-             10315702,
-             5171393,
-             5041039,
-             57374179,
-             80597764,
-             10325429,
-             10348684,
-             259012,
-             3557761,
-             56840847,
-             621621,
-             15174244,
-             4286357,
-             38370697,
-             9927680,
-             22797027,
-             9826397,
-             5302888,
-             1999210,
-             39549438,
-             8718867,
-             6995447,
-             58179144,
-             57866349
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            2497.437901,
-            27042.01868,
-            25575.57069,
-            2546.781445,
-            6302.623438000001,
-            8447.794873,
-            14297.02122,
-            26406.73985,
-            20647.16499,
-            24703.79615,
-            26505.30317,
-            17541.49634,
-            10535.62855,
-            25144.39201,
-            17558.81555,
-            22013.64486,
-            7003.339037000002,
-            26790.94961,
-            33965.66115,
-            7738.881247,
-            16207.266630000002,
-            6598.409903,
-            9325.068238,
-            9498.467723,
-            14214.71681,
-            18603.06452,
-            23880.01683,
-            31871.5303,
-            5678.348271,
-            22705.09254
-           ],
-           "xaxis": "x",
-           "y": [
-            71.581,
-            76.04,
-            76.46,
-            72.178,
-            71.19,
-            72.527,
-            72.4,
-            75.33,
-            75.7,
-            77.46,
-            76.07,
-            77.03,
-            69.17,
-            78.77,
-            75.467,
-            77.44,
-            75.435,
-            77.42,
-            77.32,
-            70.99,
-            74.86,
-            69.36,
-            71.65899999999998,
-            71.38,
-            73.64,
-            77.57,
-            78.16,
-            78.03,
-            66.146,
-            76.42
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1992<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             26298373,
-             8735988,
-             4981671,
-             1342614,
-             8878303,
-             5809236,
-             12467171,
-             3265124,
-             6429417,
-             454429,
-             41672143,
-             2409073,
-             12772596,
-             384156,
-             59402198,
-             387838,
-             3668440,
-             52088559,
-             985739,
-             1025384,
-             16278738,
-             6990574,
-             1050938,
-             25020539,
-             1803195,
-             1912974,
-             4364501,
-             12210395,
-             10014249,
-             8416215,
-             2119465,
-             1096202,
-             25798239,
-             13160731,
-             1554253,
-             8392818,
-             93364244,
-             622191,
-             7290203,
-             125911,
-             8307920,
-             4260884,
-             6099799,
-             39964159,
-             28227588,
-             962344,
-             26605473,
-             3747553,
-             8523077,
-             18252190,
-             8381163,
-             10704340
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5023.216647,
-            2627.845685,
-            1191.207681,
-            7954.111645,
-            931.7527731,
-            631.6998778,
-            1793.1632780000002,
-            747.9055252,
-            1058.0643,
-            1246.90737,
-            457.7191807,
-            4016.239529,
-            1648.073791,
-            2377.156192000001,
-            3794.755195,
-            1132.055034,
-            582.8585102000002,
-            421.3534653,
-            13522.15752,
-            665.6244126,
-            925.060154,
-            794.3484384,
-            745.5398706,
-            1341.9217210000004,
-            977.4862725,
-            636.6229191000001,
-            9640.138501,
-            1040.67619,
-            563.2000145,
-            739.014375,
-            1361.369784,
-            6058.253846000001,
-            2948.047252,
-            410.8968239,
-            3804.537999,
-            581.182725,
-            1619.848217,
-            6101.255823,
-            737.0685949,
-            1428.777814,
-            1367.899369,
-            1068.696278,
-            926.9602964,
-            7225.069257999998,
-            1492.197043,
-            3553.0224,
-            825.682454,
-            1034.298904,
-            4332.720164,
-            644.1707968999998,
-            1210.884633,
-            693.4207856
-           ],
-           "xaxis": "x",
-           "y": [
-            67.744,
-            40.647,
-            53.919,
-            62.745,
-            50.26,
-            44.736,
-            54.31399999999999,
-            49.396,
-            51.724,
-            57.93899999999999,
-            45.548,
-            56.433,
-            52.044,
-            51.604,
-            63.674,
-            47.545,
-            49.99100000000001,
-            48.091,
-            61.36600000000001,
-            52.644,
-            57.50100000000001,
-            48.576,
-            43.26600000000001,
-            59.285,
-            59.685,
-            40.802,
-            68.755,
-            52.214,
-            49.42,
-            48.38800000000001,
-            58.333,
-            69.745,
-            65.393,
-            44.284,
-            61.999,
-            47.39100000000001,
-            47.472,
-            73.615,
-            23.599,
-            62.742,
-            58.19600000000001,
-            38.333,
-            39.658,
-            61.88800000000001,
-            53.556,
-            58.474,
-            50.44,
-            58.06100000000001,
-            70.001,
-            48.825,
-            46.1,
-            60.377
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1992<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             33958947,
-             6893451,
-             155975974,
-             28523502,
-             13572994,
-             34202721,
-             3173216,
-             10723260,
-             7351181,
-             10748394,
-             5274649,
-             8486949,
-             6326682,
-             5077347,
-             2378618,
-             88111030,
-             4017939,
-             2484997,
-             4483945,
-             22430449,
-             3585176,
-             1183669,
-             256894189,
-             3149262,
-             20265563
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            9308.41871,
-            2961.699694,
-            6950.283020999998,
-            26342.88426,
-            7596.125964,
-            5444.648617,
-            6160.416317,
-            5592.843963,
-            3044.214214,
-            7103.702595000002,
-            4444.2317,
-            4439.45084,
-            1456.309517,
-            3081.694603,
-            7404.923685,
-            9472.384295,
-            2170.151724,
-            6618.74305,
-            4196.411078,
-            4446.380924,
-            14641.58711,
-            7370.990932,
-            32003.93224,
-            8137.004775,
-            10733.92631
-           ],
-           "xaxis": "x",
-           "y": [
-            71.868,
-            59.957,
-            67.057,
-            77.95,
-            74.126,
-            68.421,
-            75.71300000000002,
-            74.414,
-            68.457,
-            69.613,
-            66.798,
-            63.37300000000001,
-            55.089,
-            66.399,
-            71.766,
-            71.455,
-            65.843,
-            72.462,
-            68.225,
-            66.458,
-            73.911,
-            69.862,
-            76.09,
-            72.752,
-            71.15
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1992<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             17481977,
-             3437674
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            23424.76683,
-            18363.32494
-           ],
-           "xaxis": "x",
-           "y": [
-            77.56,
-            76.33
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1992"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=1997<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             22227415,
-             598561,
-             123315288,
-             11782962,
-             1230075000,
-             6495918,
-             959000000,
-             199278000,
-             63327987,
-             20775703,
-             5531387,
-             125956499,
-             4526235,
-             21585105,
-             46173816,
-             1765345,
-             3430388,
-             20476091,
-             2494803,
-             43247867,
-             23001113,
-             2283635,
-             135564834,
-             75012988,
-             21229759,
-             3802309,
-             18698655,
-             15081016,
-             21628605,
-             60216677,
-             76048996,
-             2826046,
-             15826497
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            635.341351,
-            20292.01679,
-            972.7700352,
-            734.28517,
-            2289.234136,
-            28377.63219,
-            1458.817442,
-            3119.335603,
-            8263.590301,
-            3076.239795,
-            20896.60924,
-            28816.58499,
-            3645.379572,
-            1690.756814,
-            15993.52796,
-            40300.61996,
-            8754.96385,
-            10132.90964,
-            1902.2521,
-            415,
-            1010.892138,
-            19702.05581,
-            2049.3505210000008,
-            2536.534925,
-            20586.69019,
-            33519.4766,
-            2664.477257,
-            4014.238972,
-            20206.82098,
-            5852.625497,
-            1385.896769,
-            7110.667619,
-            2117.484526
-           ],
-           "xaxis": "x",
-           "y": [
-            41.76300000000001,
-            73.925,
-            59.412,
-            56.534,
-            70.426,
-            80,
-            61.765,
-            66.041,
-            68.042,
-            58.81100000000001,
-            78.26899999999998,
-            80.69,
-            69.77199999999999,
-            67.727,
-            74.64699999999998,
-            76.156,
-            70.265,
-            71.938,
-            63.625,
-            60.328,
-            59.426,
-            72.499,
-            61.81800000000001,
-            68.564,
-            70.533,
-            77.158,
-            70.457,
-            71.527,
-            75.25,
-            67.521,
-            70.672,
-            71.096,
-            58.02
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=1997<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             3428038,
-             8069876,
-             10199787,
-             3607000,
-             8066057,
-             4444595,
-             10300707,
-             5283663,
-             5134406,
-             58623428,
-             82011073,
-             10502372,
-             10244684,
-             271192,
-             3667233,
-             57479469,
-             692651,
-             15604464,
-             4405672,
-             38654957,
-             10156415,
-             22562458,
-             10336594,
-             5383010,
-             2011612,
-             39855442,
-             8897619,
-             7193761,
-             63047647,
-             58808266
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            3193.054604,
-            29095.920660000003,
-            27561.19663,
-            4766.355904,
-            5970.38876,
-            9875.604515,
-            16048.51424,
-            29804.34567,
-            23723.9502,
-            25889.78487,
-            27788.88416,
-            18747.69814,
-            11712.7768,
-            28061.099660000003,
-            24521.94713,
-            24675.02446,
-            6465.613349,
-            30246.13063,
-            41283.16433,
-            10159.58368,
-            17641.03156,
-            7346.547556999999,
-            7914.320304000002,
-            12126.23065,
-            17161.10735,
-            20445.29896,
-            25266.59499,
-            32135.323010000004,
-            6601.429915,
-            26074.53136
-           ],
-           "xaxis": "x",
-           "y": [
-            72.95,
-            77.51,
-            77.53,
-            73.244,
-            70.32,
-            73.68,
-            74.01,
-            76.11,
-            77.13,
-            78.64,
-            77.34,
-            77.869,
-            71.04,
-            78.95,
-            76.122,
-            78.82,
-            75.445,
-            78.03,
-            78.32,
-            72.75,
-            75.97,
-            69.72,
-            72.232,
-            72.71,
-            75.13,
-            78.77,
-            79.39,
-            79.37,
-            68.835,
-            77.218
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=1997<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             29072015,
-             9875024,
-             6066080,
-             1536536,
-             10352843,
-             6121610,
-             14195809,
-             3696513,
-             7562011,
-             527982,
-             47798986,
-             2800947,
-             14625967,
-             417908,
-             66134291,
-             439971,
-             4058319,
-             59861301,
-             1126189,
-             1235767,
-             18418288,
-             8048834,
-             1193708,
-             28263827,
-             1982823,
-             2200725,
-             4759670,
-             14165114,
-             10419991,
-             9384984,
-             2444741,
-             1149818,
-             28529501,
-             16603334,
-             1774766,
-             9666252,
-             106207839,
-             684810,
-             7212583,
-             145608,
-             9535314,
-             4578212,
-             6633514,
-             42835005,
-             32160729,
-             1054486,
-             30686889,
-             4320890,
-             9231669,
-             21210254,
-             9417789,
-             11404948
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            4797.295051,
-            2277.140884,
-            1232.975292,
-            8647.142313,
-            946.2949618,
-            463.1151478,
-            1694.337469,
-            740.5063317,
-            1004.961353,
-            1173.618235,
-            312.188423,
-            3484.164376,
-            1786.265407,
-            1895.016984,
-            4173.181797,
-            2814.480755,
-            913.47079,
-            515.8894013,
-            14722.841880000002,
-            653.7301704,
-            1005.245812,
-            869.4497667999998,
-            796.6644681,
-            1360.4850210000004,
-            1186.147994,
-            609.1739508,
-            9467.446056,
-            986.2958956,
-            692.2758102999999,
-            790.2579846,
-            1483.136136,
-            7425.705295000002,
-            2982.101858,
-            472.34607710000006,
-            3899.52426,
-            580.3052092,
-            1624.941275,
-            6071.941411,
-            589.9445051,
-            1339.076036,
-            1392.368347,
-            574.6481576,
-            930.5964284,
-            7479.188244,
-            1632.2107640000004,
-            3876.76846,
-            789.1862231,
-            982.2869243,
-            4876.798614,
-            816.559081,
-            1071.353818,
-            792.4499602999998
-           ],
-           "xaxis": "x",
-           "y": [
-            69.152,
-            40.963,
-            54.777,
-            52.556,
-            50.324,
-            45.326,
-            52.199,
-            46.066,
-            51.573,
-            60.66,
-            42.587,
-            52.962,
-            47.99100000000001,
-            53.157,
-            67.217,
-            48.245,
-            53.378,
-            49.402,
-            60.46100000000001,
-            55.861,
-            58.556,
-            51.455,
-            44.87300000000001,
-            54.407,
-            55.558,
-            42.221,
-            71.555,
-            54.978,
-            47.495,
-            49.903,
-            60.43,
-            70.736,
-            67.66,
-            46.344,
-            58.909,
-            51.313,
-            47.464,
-            74.77199999999998,
-            36.087,
-            63.306,
-            60.187,
-            39.897,
-            43.795,
-            60.236,
-            55.37300000000001,
-            54.289,
-            48.466,
-            58.39,
-            71.973,
-            44.578,
-            40.238,
-            46.809
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=1997<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             36203463,
-             7693188,
-             168546719,
-             30305843,
-             14599929,
-             37657830,
-             3518107,
-             10983007,
-             7992357,
-             11911819,
-             5783439,
-             9803875,
-             6913545,
-             5867957,
-             2531311,
-             95895146,
-             4609572,
-             2734531,
-             5154123,
-             24748122,
-             3759430,
-             1138101,
-             272911760,
-             3262838,
-             22374398
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            10967.28195,
-            3326.143191,
-            7957.980823999998,
-            28954.92589,
-            10118.05318,
-            6117.361746000001,
-            6677.045314,
-            5431.990415,
-            3614.101285,
-            7429.4558769999985,
-            5154.825496,
-            4684.313807,
-            1341.726931,
-            3160.454906,
-            7121.924704000001,
-            9767.29753,
-            2253.023004,
-            7113.692252,
-            4247.400261,
-            5838.347657,
-            16999.4333,
-            8792.573126000001,
-            35767.43303,
-            9230.240708,
-            10165.49518
-           ],
-           "xaxis": "x",
-           "y": [
-            73.275,
-            62.05,
-            69.388,
-            78.61,
-            75.816,
-            70.313,
-            77.26,
-            76.15100000000002,
-            69.957,
-            72.312,
-            69.535,
-            66.322,
-            56.67100000000001,
-            67.65899999999999,
-            72.262,
-            73.67,
-            68.426,
-            73.738,
-            69.4,
-            68.38600000000001,
-            74.917,
-            69.465,
-            76.81,
-            74.223,
-            72.146
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=1997<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             18565243,
-             3676187
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            26997.93657,
-            21050.41377
-           ],
-           "xaxis": "x",
-           "y": [
-            78.83,
-            77.55
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "1997"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=2002<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             25268405,
-             656397,
-             135656790,
-             12926707,
-             1280400000,
-             6762476,
-             1034172547,
-             211060000,
-             66907826,
-             24001816,
-             6029529,
-             127065841,
-             5307470,
-             22215365,
-             47969150,
-             2111561,
-             3677780,
-             22662365,
-             2674234,
-             45598081,
-             25873917,
-             2713462,
-             153403524,
-             82995088,
-             24501530,
-             4197776,
-             19576783,
-             17155814,
-             22454239,
-             62806748,
-             80908147,
-             3389578,
-             18701257
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            726.7340548,
-            23403.55927,
-            1136.3904300000004,
-            896.2260152999999,
-            3119.280896,
-            30209.015160000006,
-            1746.769454,
-            2873.91287,
-            9240.761975,
-            4390.717312,
-            21905.59514,
-            28604.5919,
-            3844.917194,
-            1646.758151,
-            19233.98818,
-            35110.10566,
-            9313.93883,
-            10206.97794,
-            2140.739323,
-            611,
-            1057.206311,
-            19774.83687,
-            2092.712441,
-            2650.921068,
-            19014.54118,
-            36023.1054,
-            3015.378833,
-            4090.925331,
-            23235.42329,
-            5913.187529,
-            1764.456677,
-            4515.487575,
-            2234.820827
-           ],
-           "xaxis": "x",
-           "y": [
-            42.129,
-            74.795,
-            62.01300000000001,
-            56.752,
-            72.028,
-            81.495,
-            62.879,
-            68.58800000000001,
-            69.45100000000001,
-            57.04600000000001,
-            79.696,
-            82,
-            71.263,
-            66.66199999999999,
-            77.045,
-            76.904,
-            71.028,
-            73.044,
-            65.033,
-            59.908,
-            61.34,
-            74.193,
-            63.61,
-            70.303,
-            71.626,
-            78.77,
-            70.815,
-            73.053,
-            76.99,
-            68.564,
-            73.017,
-            72.37,
-            60.308
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=2002<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             3508512,
-             8148312,
-             10311970,
-             4165416,
-             7661799,
-             4481020,
-             10256295,
-             5374693,
-             5193039,
-             59925035,
-             82350671,
-             10603863,
-             10083313,
-             288030,
-             3879155,
-             57926999,
-             720230,
-             16122830,
-             4535591,
-             38625976,
-             10433867,
-             22404337,
-             10111559,
-             5410052,
-             2011497,
-             40152517,
-             8954175,
-             7361757,
-             67308928,
-             59912431
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            4604.211737,
-            32417.60769,
-            30485.88375,
-            6018.975239,
-            7696.777725,
-            11628.38895,
-            17596.210219999994,
-            32166.50006,
-            28204.59057,
-            28926.03234,
-            30035.80198,
-            22514.2548,
-            14843.93556,
-            31163.20196,
-            34077.04939,
-            27968.09817,
-            6557.194282,
-            33724.75778,
-            44683.97525,
-            12002.23908,
-            19970.90787,
-            7885.360081,
-            7236.075251,
-            13638.778369999998,
-            20660.01936,
-            24835.47166,
-            29341.630930000007,
-            34480.95771,
-            6508.085718,
-            29478.99919
-           ],
-           "xaxis": "x",
-           "y": [
-            75.65100000000002,
-            78.98,
-            78.32,
-            74.09,
-            72.14,
-            74.876,
-            75.51,
-            77.18,
-            78.37,
-            79.59,
-            78.67,
-            78.256,
-            72.59,
-            80.5,
-            77.783,
-            80.24,
-            73.98100000000002,
-            78.53,
-            79.05,
-            74.67,
-            77.29,
-            71.322,
-            73.21300000000002,
-            73.8,
-            76.66,
-            79.78,
-            80.04,
-            80.62,
-            70.845,
-            78.471
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=2002<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             31287142,
-             10866106,
-             7026113,
-             1630347,
-             12251209,
-             7021078,
-             15929988,
-             4048013,
-             8835739,
-             614382,
-             55379852,
-             3328795,
-             16252726,
-             447416,
-             73312559,
-             495627,
-             4414865,
-             67946797,
-             1299304,
-             1457766,
-             20550751,
-             8807818,
-             1332459,
-             31386842,
-             2046772,
-             2814651,
-             5368585,
-             16473477,
-             11824495,
-             10580176,
-             2828858,
-             1200206,
-             31167783,
-             18473780,
-             1972153,
-             11140655,
-             119901274,
-             743981,
-             7852401,
-             170372,
-             10870037,
-             5359092,
-             7753310,
-             44433622,
-             37090298,
-             1130269,
-             34593779,
-             4977378,
-             9770575,
-             24739869,
-             10595811,
-             11926563
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5288.040382,
-            2773.287312,
-            1372.877931,
-            11003.60508,
-            1037.645221,
-            446.4035126,
-            1934.011449,
-            738.6906068,
-            1156.18186,
-            1075.811558,
-            241.1658765,
-            3484.06197,
-            1648.800823,
-            1908.260867,
-            4754.604414,
-            7703.4959,
-            765.3500015,
-            530.0535319,
-            12521.71392,
-            660.5855997,
-            1111.9845779999996,
-            945.5835837,
-            575.7047176,
-            1287.514732,
-            1275.184575,
-            531.4823679,
-            9534.677467,
-            894.6370822,
-            665.4231186000002,
-            951.4097518,
-            1579.019543,
-            9021.815894,
-            3258.495584,
-            633.6179466,
-            4072.324751,
-            601.0745012,
-            1615.286395,
-            6316.1652,
-            785.6537647999999,
-            1353.09239,
-            1519.635262,
-            699.4897129999998,
-            882.0818218000002,
-            7710.946444,
-            1993.398314,
-            4128.116943,
-            899.0742111,
-            886.2205765000001,
-            5722.895654999998,
-            927.7210018,
-            1071.6139380000004,
-            672.0386227000001
-           ],
-           "xaxis": "x",
-           "y": [
-            70.994,
-            41.003,
-            54.40600000000001,
-            46.63399999999999,
-            50.65,
-            47.36,
-            49.856,
-            43.308,
-            50.525,
-            62.974,
-            44.966,
-            52.97,
-            46.832,
-            53.37300000000001,
-            69.806,
-            49.348,
-            55.24,
-            50.725,
-            56.761,
-            58.041,
-            58.453,
-            53.676,
-            45.504,
-            50.992,
-            44.593,
-            43.753,
-            72.737,
-            57.286,
-            45.00899999999999,
-            51.81800000000001,
-            62.247,
-            71.954,
-            69.615,
-            44.026,
-            51.479,
-            54.496,
-            46.608,
-            75.744,
-            43.413,
-            64.337,
-            61.6,
-            41.012,
-            45.93600000000001,
-            53.365,
-            56.369,
-            43.869,
-            49.651,
-            57.56100000000001,
-            73.042,
-            47.813,
-            39.19300000000001,
-            39.989
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=2002<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             38331121,
-             8445134,
-             179914212,
-             31902268,
-             15497046,
-             41008227,
-             3834934,
-             11226999,
-             8650322,
-             12921234,
-             6353681,
-             11178650,
-             7607651,
-             6677328,
-             2664659,
-             102479927,
-             5146848,
-             2990875,
-             5884491,
-             26769436,
-             3859606,
-             1101832,
-             287675526,
-             3363085,
-             24287670
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            8797.640716,
-            3413.26269,
-            8131.212843000001,
-            33328.96507,
-            10778.78385,
-            5755.259962,
-            7723.447195000002,
-            6340.646683,
-            4563.808154,
-            5773.044512,
-            5351.568665999999,
-            4858.347495,
-            1270.364932,
-            3099.72866,
-            6994.774861,
-            10742.44053,
-            2474.548819,
-            7356.0319340000015,
-            3783.674243,
-            5909.020073,
-            18855.60618,
-            11460.60023,
-            39097.09955,
-            7727.002004000001,
-            8605.047831
-           ],
-           "xaxis": "x",
-           "y": [
-            74.34,
-            63.883,
-            71.006,
-            79.77,
-            77.86,
-            71.682,
-            78.123,
-            77.158,
-            70.847,
-            74.173,
-            70.734,
-            68.97800000000001,
-            58.137,
-            68.565,
-            72.047,
-            74.902,
-            70.836,
-            74.712,
-            70.755,
-            69.906,
-            77.778,
-            68.976,
-            77.31,
-            75.307,
-            72.766
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=2002<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             19546792,
-             3908037
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            30687.75473,
-            23189.80135
-           ],
-           "xaxis": "x",
-           "y": [
-            80.37,
-            79.11
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "2002"
-        },
-        {
-         "data": [
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Asia<br>year=2007<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Afghanistan",
-            "Bahrain",
-            "Bangladesh",
-            "Cambodia",
-            "China",
-            "Hong Kong, China",
-            "India",
-            "Indonesia",
-            "Iran",
-            "Iraq",
-            "Israel",
-            "Japan",
-            "Jordan",
-            "Korea, Dem. Rep.",
-            "Korea, Rep.",
-            "Kuwait",
-            "Lebanon",
-            "Malaysia",
-            "Mongolia",
-            "Myanmar",
-            "Nepal",
-            "Oman",
-            "Pakistan",
-            "Philippines",
-            "Saudi Arabia",
-            "Singapore",
-            "Sri Lanka",
-            "Syria",
-            "Taiwan",
-            "Thailand",
-            "Vietnam",
-            "West Bank and Gaza",
-            "Yemen, Rep."
-           ],
-           "legendgroup": "Asia",
-           "marker": {
-            "color": "#636efa",
-            "size": [
-             31889923,
-             708573,
-             150448339,
-             14131858,
-             1318683096,
-             6980412,
-             1110396331,
-             223547000,
-             69453570,
-             27499638,
-             6426679,
-             127467972,
-             6053193,
-             23301725,
-             49044790,
-             2505559,
-             3921278,
-             24821286,
-             2874127,
-             47761980,
-             28901790,
-             3204897,
-             169270617,
-             91077287,
-             27601038,
-             4553009,
-             20378239,
-             19314747,
-             23174294,
-             65068149,
-             85262356,
-             4018332,
-             22211743
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Asia",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            974.5803384,
-            29796.04834,
-            1391.253792,
-            1713.778686,
-            4959.114854,
-            39724.97867,
-            2452.210407,
-            3540.651564,
-            11605.71449,
-            4471.061906,
-            25523.2771,
-            31656.06806,
-            4519.461171,
-            1593.06548,
-            23348.139730000006,
-            47306.98978,
-            10461.05868,
-            12451.6558,
-            3095.7722710000007,
-            944,
-            1091.359778,
-            22316.19287,
-            2605.94758,
-            3190.481016,
-            21654.83194,
-            47143.17964,
-            3970.095407,
-            4184.548089,
-            28718.27684,
-            7458.396326999998,
-            2441.576404,
-            3025.349798,
-            2280.769906
-           ],
-           "xaxis": "x",
-           "y": [
-            43.828,
-            75.635,
-            64.062,
-            59.723,
-            72.961,
-            82.208,
-            64.69800000000001,
-            70.65,
-            70.964,
-            59.545,
-            80.745,
-            82.603,
-            72.535,
-            67.297,
-            78.623,
-            77.58800000000002,
-            71.993,
-            74.241,
-            66.803,
-            62.069,
-            63.785,
-            75.64,
-            65.483,
-            71.688,
-            72.777,
-            79.972,
-            72.396,
-            74.143,
-            78.4,
-            70.616,
-            74.249,
-            73.422,
-            62.698
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Europe<br>year=2007<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Albania",
-            "Austria",
-            "Belgium",
-            "Bosnia and Herzegovina",
-            "Bulgaria",
-            "Croatia",
-            "Czech Republic",
-            "Denmark",
-            "Finland",
-            "France",
-            "Germany",
-            "Greece",
-            "Hungary",
-            "Iceland",
-            "Ireland",
-            "Italy",
-            "Montenegro",
-            "Netherlands",
-            "Norway",
-            "Poland",
-            "Portugal",
-            "Romania",
-            "Serbia",
-            "Slovak Republic",
-            "Slovenia",
-            "Spain",
-            "Sweden",
-            "Switzerland",
-            "Turkey",
-            "United Kingdom"
-           ],
-           "legendgroup": "Europe",
-           "marker": {
-            "color": "#EF553B",
-            "size": [
-             3600523,
-             8199783,
-             10392226,
-             4552198,
-             7322858,
-             4493312,
-             10228744,
-             5468120,
-             5238460,
-             61083916,
-             82400996,
-             10706290,
-             9956108,
-             301931,
-             4109086,
-             58147733,
-             684736,
-             16570613,
-             4627926,
-             38518241,
-             10642836,
-             22276056,
-             10150265,
-             5447502,
-             2009245,
-             40448191,
-             9031088,
-             7554661,
-             71158647,
-             60776238
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Europe",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            5937.029525999998,
-            36126.4927,
-            33692.60508,
-            7446.298803,
-            10680.79282,
-            14619.222719999998,
-            22833.30851,
-            35278.41874,
-            33207.0844,
-            30470.0167,
-            32170.37442,
-            27538.41188,
-            18008.94444,
-            36180.78919,
-            40675.99635,
-            28569.7197,
-            9253.896111,
-            36797.93332,
-            49357.19017,
-            15389.924680000002,
-            20509.64777,
-            10808.47561,
-            9786.534714,
-            18678.31435,
-            25768.25759,
-            28821.0637,
-            33859.74835,
-            37506.41907,
-            8458.276384,
-            33203.26128
-           ],
-           "xaxis": "x",
-           "y": [
-            76.423,
-            79.829,
-            79.441,
-            74.852,
-            73.005,
-            75.748,
-            76.486,
-            78.332,
-            79.313,
-            80.657,
-            79.406,
-            79.483,
-            73.33800000000002,
-            81.757,
-            78.885,
-            80.546,
-            74.543,
-            79.762,
-            80.196,
-            75.563,
-            78.098,
-            72.476,
-            74.002,
-            74.663,
-            77.926,
-            80.941,
-            80.884,
-            81.70100000000002,
-            71.777,
-            79.425
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Africa<br>year=2007<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Algeria",
-            "Angola",
-            "Benin",
-            "Botswana",
-            "Burkina Faso",
-            "Burundi",
-            "Cameroon",
-            "Central African Republic",
-            "Chad",
-            "Comoros",
-            "Congo, Dem. Rep.",
-            "Congo, Rep.",
-            "Cote d'Ivoire",
-            "Djibouti",
-            "Egypt",
-            "Equatorial Guinea",
-            "Eritrea",
-            "Ethiopia",
-            "Gabon",
-            "Gambia",
-            "Ghana",
-            "Guinea",
-            "Guinea-Bissau",
-            "Kenya",
-            "Lesotho",
-            "Liberia",
-            "Libya",
-            "Madagascar",
-            "Malawi",
-            "Mali",
-            "Mauritania",
-            "Mauritius",
-            "Morocco",
-            "Mozambique",
-            "Namibia",
-            "Niger",
-            "Nigeria",
-            "Reunion",
-            "Rwanda",
-            "Sao Tome and Principe",
-            "Senegal",
-            "Sierra Leone",
-            "Somalia",
-            "South Africa",
-            "Sudan",
-            "Swaziland",
-            "Tanzania",
-            "Togo",
-            "Tunisia",
-            "Uganda",
-            "Zambia",
-            "Zimbabwe"
-           ],
-           "legendgroup": "Africa",
-           "marker": {
-            "color": "#00cc96",
-            "size": [
-             33333216,
-             12420476,
-             8078314,
-             1639131,
-             14326203,
-             8390505,
-             17696293,
-             4369038,
-             10238807,
-             710960,
-             64606759,
-             3800610,
-             18013409,
-             496374,
-             80264543,
-             551201,
-             4906585,
-             76511887,
-             1454867,
-             1688359,
-             22873338,
-             9947814,
-             1472041,
-             35610177,
-             2012649,
-             3193942,
-             6036914,
-             19167654,
-             13327079,
-             12031795,
-             3270065,
-             1250882,
-             33757175,
-             19951656,
-             2055080,
-             12894865,
-             135031164,
-             798094,
-             8860588,
-             199579,
-             12267493,
-             6144562,
-             9118773,
-             43997828,
-             42292929,
-             1133066,
-             38139640,
-             5701579,
-             10276158,
-             29170398,
-             11746035,
-             12311143
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Africa",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            6223.367465,
-            4797.231267,
-            1441.284873,
-            12569.85177,
-            1217.032994,
-            430.0706916,
-            2042.09524,
-            706.016537,
-            1704.063724,
-            986.1478792,
-            277.5518587,
-            3632.557798,
-            1544.750112,
-            2082.4815670000007,
-            5581.180998,
-            12154.08975,
-            641.3695236000002,
-            690.8055759,
-            13206.48452,
-            752.7497265,
-            1327.60891,
-            942.6542111,
-            579.2317429999998,
-            1463.249282,
-            1569.331442,
-            414.5073415,
-            12057.49928,
-            1044.770126,
-            759.3499101,
-            1042.581557,
-            1803.151496,
-            10956.99112,
-            3820.17523,
-            823.6856205,
-            4811.060429,
-            619.6768923999998,
-            2013.977305,
-            7670.122558,
-            863.0884639000002,
-            1598.435089,
-            1712.472136,
-            862.5407561000002,
-            926.1410683,
-            9269.657808,
-            2602.394995,
-            4513.480643,
-            1107.482182,
-            882.9699437999999,
-            7092.923025,
-            1056.380121,
-            1271.211593,
-            469.70929810000007
-           ],
-           "xaxis": "x",
-           "y": [
-            72.301,
-            42.731,
-            56.728,
-            50.728,
-            52.295,
-            49.58,
-            50.43,
-            44.74100000000001,
-            50.651,
-            65.152,
-            46.462,
-            55.322,
-            48.328,
-            54.791,
-            71.33800000000002,
-            51.57899999999999,
-            58.04,
-            52.947,
-            56.735,
-            59.448,
-            60.022,
-            56.007,
-            46.38800000000001,
-            54.11,
-            42.592,
-            45.678,
-            73.952,
-            59.44300000000001,
-            48.303,
-            54.467,
-            64.164,
-            72.801,
-            71.164,
-            42.082,
-            52.90600000000001,
-            56.867,
-            46.859,
-            76.442,
-            46.242,
-            65.528,
-            63.062,
-            42.56800000000001,
-            48.159,
-            49.339,
-            58.556,
-            39.613,
-            52.517,
-            58.42,
-            73.923,
-            51.542,
-            42.38399999999999,
-            43.487
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Americas<br>year=2007<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Argentina",
-            "Bolivia",
-            "Brazil",
-            "Canada",
-            "Chile",
-            "Colombia",
-            "Costa Rica",
-            "Cuba",
-            "Dominican Republic",
-            "Ecuador",
-            "El Salvador",
-            "Guatemala",
-            "Haiti",
-            "Honduras",
-            "Jamaica",
-            "Mexico",
-            "Nicaragua",
-            "Panama",
-            "Paraguay",
-            "Peru",
-            "Puerto Rico",
-            "Trinidad and Tobago",
-            "United States",
-            "Uruguay",
-            "Venezuela"
-           ],
-           "legendgroup": "Americas",
-           "marker": {
-            "color": "#ab63fa",
-            "size": [
-             40301927,
-             9119152,
-             190010647,
-             33390141,
-             16284741,
-             44227550,
-             4133884,
-             11416987,
-             9319622,
-             13755680,
-             6939688,
-             12572928,
-             8502814,
-             7483763,
-             2780132,
-             108700891,
-             5675356,
-             3242173,
-             6667147,
-             28674757,
-             3942491,
-             1056608,
-             301139947,
-             3447496,
-             26084662
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Americas",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            12779.37964,
-            3822.137084,
-            9065.800825,
-            36319.23501,
-            13171.63885,
-            7006.580419,
-            9645.06142,
-            8948.102923,
-            6025.3747520000015,
-            6873.262326000001,
-            5728.353514,
-            5186.050003,
-            1201.637154,
-            3548.3308460000007,
-            7320.8802620000015,
-            11977.57496,
-            2749.320965,
-            9809.185636,
-            4172.838464,
-            7408.905561,
-            19328.70901,
-            18008.50924,
-            42951.65309,
-            10611.46299,
-            11415.80569
-           ],
-           "xaxis": "x",
-           "y": [
-            75.32,
-            65.554,
-            72.39,
-            80.653,
-            78.553,
-            72.889,
-            78.782,
-            78.273,
-            72.235,
-            74.994,
-            71.878,
-            70.259,
-            60.916,
-            70.19800000000001,
-            72.567,
-            76.195,
-            72.899,
-            75.53699999999998,
-            71.752,
-            71.421,
-            78.74600000000002,
-            69.819,
-            78.242,
-            76.384,
-            73.747
-           ],
-           "yaxis": "y"
-          },
-          {
-           "hovertemplate": "<b>%{hovertext}</b><br><br>continent=Oceania<br>year=2007<br>gdpPercap=%{x}<br>lifeExp=%{y}<br>pop=%{marker.size}<extra></extra>",
-           "hovertext": [
-            "Australia",
-            "New Zealand"
-           ],
-           "legendgroup": "Oceania",
-           "marker": {
-            "color": "#FFA15A",
-            "size": [
-             20434176,
-             4115771
-            ],
-            "sizemode": "area",
-            "sizeref": 269118.99918367347,
-            "symbol": "circle"
-           },
-           "mode": "markers",
-           "name": "Oceania",
-           "orientation": "v",
-           "showlegend": true,
-           "type": "scatter",
-           "x": [
-            34435.367439999995,
-            25185.00911
-           ],
-           "xaxis": "x",
-           "y": [
-            81.235,
-            80.204
-           ],
-           "yaxis": "y"
-          }
-         ],
-         "name": "2007"
-        }
-       ],
-       "layout": {
-        "autosize": true,
-        "legend": {
-         "itemsizing": "constant",
-         "title": {
-          "text": "continent"
-         },
-         "tracegroupgap": 0
-        },
-        "margin": {
-         "t": 60
-        },
-        "sliders": [
-         {
-          "active": 0,
-          "currentvalue": {
-           "prefix": "year="
-          },
-          "len": 0.9,
-          "pad": {
-           "b": 10,
-           "t": 60
-          },
-          "steps": [
-           {
-            "args": [
-             [
-              "1952"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1952",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1957"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1957",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1962"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1962",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1967"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1967",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1972"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1972",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1977"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1977",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1982"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1982",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1987"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1987",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1992"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1992",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "1997"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "1997",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "2002"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "2002",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              "2007"
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "2007",
-            "method": "animate"
-           }
-          ],
-          "x": 0.1,
-          "xanchor": "left",
-          "y": 0,
-          "yanchor": "top"
-         }
-        ],
-        "template": {
-         "data": {
-          "bar": [
-           {
-            "error_x": {
-             "color": "#2a3f5f"
-            },
-            "error_y": {
-             "color": "#2a3f5f"
-            },
-            "marker": {
-             "line": {
-              "color": "#E5ECF6",
-              "width": 0.5
-             },
-             "pattern": {
-              "fillmode": "overlay",
-              "size": 10,
-              "solidity": 0.2
-             }
-            },
-            "type": "bar"
-           }
-          ],
-          "barpolar": [
-           {
-            "marker": {
-             "line": {
-              "color": "#E5ECF6",
-              "width": 0.5
-             },
-             "pattern": {
-              "fillmode": "overlay",
-              "size": 10,
-              "solidity": 0.2
-             }
-            },
-            "type": "barpolar"
-           }
-          ],
-          "carpet": [
-           {
-            "aaxis": {
-             "endlinecolor": "#2a3f5f",
-             "gridcolor": "white",
-             "linecolor": "white",
-             "minorgridcolor": "white",
-             "startlinecolor": "#2a3f5f"
-            },
-            "baxis": {
-             "endlinecolor": "#2a3f5f",
-             "gridcolor": "white",
-             "linecolor": "white",
-             "minorgridcolor": "white",
-             "startlinecolor": "#2a3f5f"
-            },
-            "type": "carpet"
-           }
-          ],
-          "choropleth": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "type": "choropleth"
-           }
-          ],
-          "contour": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "contour"
-           }
-          ],
-          "contourcarpet": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "type": "contourcarpet"
-           }
-          ],
-          "heatmap": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "heatmap"
-           }
-          ],
-          "heatmapgl": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "heatmapgl"
-           }
-          ],
-          "histogram": [
-           {
-            "marker": {
-             "pattern": {
-              "fillmode": "overlay",
-              "size": 10,
-              "solidity": 0.2
-             }
-            },
-            "type": "histogram"
-           }
-          ],
-          "histogram2d": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "histogram2d"
-           }
-          ],
-          "histogram2dcontour": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "histogram2dcontour"
-           }
-          ],
-          "mesh3d": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "type": "mesh3d"
-           }
-          ],
-          "parcoords": [
-           {
-            "line": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "parcoords"
-           }
-          ],
-          "pie": [
-           {
-            "automargin": true,
-            "type": "pie"
-           }
-          ],
-          "scatter": [
-           {
-            "fillpattern": {
-             "fillmode": "overlay",
-             "size": 10,
-             "solidity": 0.2
-            },
-            "type": "scatter"
-           }
-          ],
-          "scatter3d": [
-           {
-            "line": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scatter3d"
-           }
-          ],
-          "scattercarpet": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scattercarpet"
-           }
-          ],
-          "scattergeo": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scattergeo"
-           }
-          ],
-          "scattergl": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scattergl"
-           }
-          ],
-          "scattermapbox": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scattermapbox"
-           }
-          ],
-          "scatterpolar": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scatterpolar"
-           }
-          ],
-          "scatterpolargl": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scatterpolargl"
-           }
-          ],
-          "scatterternary": [
-           {
-            "marker": {
-             "colorbar": {
-              "outlinewidth": 0,
-              "ticks": ""
-             }
-            },
-            "type": "scatterternary"
-           }
-          ],
-          "surface": [
-           {
-            "colorbar": {
-             "outlinewidth": 0,
-             "ticks": ""
-            },
-            "colorscale": [
-             [
-              0,
-              "#0d0887"
-             ],
-             [
-              0.1111111111111111,
-              "#46039f"
-             ],
-             [
-              0.2222222222222222,
-              "#7201a8"
-             ],
-             [
-              0.3333333333333333,
-              "#9c179e"
-             ],
-             [
-              0.4444444444444444,
-              "#bd3786"
-             ],
-             [
-              0.5555555555555556,
-              "#d8576b"
-             ],
-             [
-              0.6666666666666666,
-              "#ed7953"
-             ],
-             [
-              0.7777777777777778,
-              "#fb9f3a"
-             ],
-             [
-              0.8888888888888888,
-              "#fdca26"
-             ],
-             [
-              1,
-              "#f0f921"
-             ]
-            ],
-            "type": "surface"
-           }
-          ],
-          "table": [
-           {
-            "cells": {
-             "fill": {
-              "color": "#EBF0F8"
-             },
-             "line": {
-              "color": "white"
-             }
-            },
-            "header": {
-             "fill": {
-              "color": "#C8D4E3"
-             },
-             "line": {
-              "color": "white"
-             }
-            },
-            "type": "table"
-           }
-          ]
-         },
-         "layout": {
-          "annotationdefaults": {
-           "arrowcolor": "#2a3f5f",
-           "arrowhead": 0,
-           "arrowwidth": 1
-          },
-          "autotypenumbers": "strict",
-          "coloraxis": {
-           "colorbar": {
-            "outlinewidth": 0,
-            "ticks": ""
-           }
-          },
-          "colorscale": {
-           "diverging": [
-            [
-             0,
-             "#8e0152"
-            ],
-            [
-             0.1,
-             "#c51b7d"
-            ],
-            [
-             0.2,
-             "#de77ae"
-            ],
-            [
-             0.3,
-             "#f1b6da"
-            ],
-            [
-             0.4,
-             "#fde0ef"
-            ],
-            [
-             0.5,
-             "#f7f7f7"
-            ],
-            [
-             0.6,
-             "#e6f5d0"
-            ],
-            [
-             0.7,
-             "#b8e186"
-            ],
-            [
-             0.8,
-             "#7fbc41"
-            ],
-            [
-             0.9,
-             "#4d9221"
-            ],
-            [
-             1,
-             "#276419"
-            ]
-           ],
-           "sequential": [
-            [
-             0,
-             "#0d0887"
-            ],
-            [
-             0.1111111111111111,
-             "#46039f"
-            ],
-            [
-             0.2222222222222222,
-             "#7201a8"
-            ],
-            [
-             0.3333333333333333,
-             "#9c179e"
-            ],
-            [
-             0.4444444444444444,
-             "#bd3786"
-            ],
-            [
-             0.5555555555555556,
-             "#d8576b"
-            ],
-            [
-             0.6666666666666666,
-             "#ed7953"
-            ],
-            [
-             0.7777777777777778,
-             "#fb9f3a"
-            ],
-            [
-             0.8888888888888888,
-             "#fdca26"
-            ],
-            [
-             1,
-             "#f0f921"
-            ]
-           ],
-           "sequentialminus": [
-            [
-             0,
-             "#0d0887"
-            ],
-            [
-             0.1111111111111111,
-             "#46039f"
-            ],
-            [
-             0.2222222222222222,
-             "#7201a8"
-            ],
-            [
-             0.3333333333333333,
-             "#9c179e"
-            ],
-            [
-             0.4444444444444444,
-             "#bd3786"
-            ],
-            [
-             0.5555555555555556,
-             "#d8576b"
-            ],
-            [
-             0.6666666666666666,
-             "#ed7953"
-            ],
-            [
-             0.7777777777777778,
-             "#fb9f3a"
-            ],
-            [
-             0.8888888888888888,
-             "#fdca26"
-            ],
-            [
-             1,
-             "#f0f921"
-            ]
-           ]
-          },
-          "colorway": [
-           "#636efa",
-           "#EF553B",
-           "#00cc96",
-           "#ab63fa",
-           "#FFA15A",
-           "#19d3f3",
-           "#FF6692",
-           "#B6E880",
-           "#FF97FF",
-           "#FECB52"
-          ],
-          "font": {
-           "color": "#2a3f5f"
-          },
-          "geo": {
-           "bgcolor": "white",
-           "lakecolor": "white",
-           "landcolor": "#E5ECF6",
-           "showlakes": true,
-           "showland": true,
-           "subunitcolor": "white"
-          },
-          "hoverlabel": {
-           "align": "left"
-          },
-          "hovermode": "closest",
-          "mapbox": {
-           "style": "light"
-          },
-          "paper_bgcolor": "white",
-          "plot_bgcolor": "#E5ECF6",
-          "polar": {
-           "angularaxis": {
-            "gridcolor": "white",
-            "linecolor": "white",
-            "ticks": ""
-           },
-           "bgcolor": "#E5ECF6",
-           "radialaxis": {
-            "gridcolor": "white",
-            "linecolor": "white",
-            "ticks": ""
-           }
-          },
-          "scene": {
-           "xaxis": {
-            "backgroundcolor": "#E5ECF6",
-            "gridcolor": "white",
-            "gridwidth": 2,
-            "linecolor": "white",
-            "showbackground": true,
-            "ticks": "",
-            "zerolinecolor": "white"
-           },
-           "yaxis": {
-            "backgroundcolor": "#E5ECF6",
-            "gridcolor": "white",
-            "gridwidth": 2,
-            "linecolor": "white",
-            "showbackground": true,
-            "ticks": "",
-            "zerolinecolor": "white"
-           },
-           "zaxis": {
-            "backgroundcolor": "#E5ECF6",
-            "gridcolor": "white",
-            "gridwidth": 2,
-            "linecolor": "white",
-            "showbackground": true,
-            "ticks": "",
-            "zerolinecolor": "white"
-           }
-          },
-          "shapedefaults": {
-           "line": {
-            "color": "#2a3f5f"
-           }
-          },
-          "ternary": {
-           "aaxis": {
-            "gridcolor": "white",
-            "linecolor": "white",
-            "ticks": ""
-           },
-           "baxis": {
-            "gridcolor": "white",
-            "linecolor": "white",
-            "ticks": ""
-           },
-           "bgcolor": "#E5ECF6",
-           "caxis": {
-            "gridcolor": "white",
-            "linecolor": "white",
-            "ticks": ""
-           }
-          },
-          "title": {
-           "x": 0.05
-          },
-          "xaxis": {
-           "automargin": true,
-           "gridcolor": "white",
-           "linecolor": "white",
-           "ticks": "",
-           "title": {
-            "standoff": 15
-           },
-           "zerolinecolor": "white",
-           "zerolinewidth": 2
-          },
-          "yaxis": {
-           "automargin": true,
-           "gridcolor": "white",
-           "linecolor": "white",
-           "ticks": "",
-           "title": {
-            "standoff": 15
-           },
-           "zerolinecolor": "white",
-           "zerolinewidth": 2
-          }
-         }
-        },
-        "updatemenus": [
-         {
-          "buttons": [
-           {
-            "args": [
-             null,
-             {
-              "frame": {
-               "duration": 500,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 500,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "&#9654;",
-            "method": "animate"
-           },
-           {
-            "args": [
-             [
-              null
-             ],
-             {
-              "frame": {
-               "duration": 0,
-               "redraw": false
-              },
-              "fromcurrent": true,
-              "mode": "immediate",
-              "transition": {
-               "duration": 0,
-               "easing": "linear"
-              }
-             }
-            ],
-            "label": "&#9724;",
-            "method": "animate"
-           }
-          ],
-          "direction": "left",
-          "pad": {
-           "r": 10,
-           "t": 70
-          },
-          "showactive": false,
-          "type": "buttons",
-          "x": 0.1,
-          "xanchor": "right",
-          "y": 0,
-          "yanchor": "top"
-         }
-        ],
-        "xaxis": {
-         "anchor": "y",
-         "autorange": true,
-         "domain": [
-          0,
-          1
-         ],
-         "range": [
-          2.3276906115616005,
-          5.182715718912989
-         ],
-         "title": {
-          "text": "gdpPercap"
-         },
-         "type": "log"
-        },
-        "yaxis": {
-         "anchor": "x",
-         "domain": [
-          0,
-          1
-         ],
-         "range": [
-          1.301029995663981,
-          1.301029995663981
-         ],
-         "title": {
-          "text": "lifeExp"
-         },
-         "type": "log"
-        }
-       }
-      },
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAACAUAAAFoCAYAAAAlsdCQAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qe4FNXhNvB32tZb6L0KiNg7VqKo2HvDFnuL5Z/ERJNookFN0WhiEmOPsUWNXcSIvQUVxYKKIEVQpMOt26f8nzMXLlzu3rszd/buzu6++zx++b6PM+X8ztm5O3PeOUeyLMsCPxSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlJ2AxFBA2bUpK0QBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSwBRgKYEegAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlKkAQwFl2rCsFgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIChAPYBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQJkKMBRQpg3LalGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYCmAfoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCpSpAEMBZdqwrBYFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAoQD2AQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoECZCjAUUKYNy2pRgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGApgH6AABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqUqQBDAWXasKwWBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgKEA9gEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBAmQowFFCmDctqUYACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRgKYB+gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlKkAQwFl2rCsFgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIChAPYBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQJkKMBRQpg3LalGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYCmAfoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCpSpAEMBZdqwrBYFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAoQD2AQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoECZCjAUUKYNy2pRgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGApgH6AABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqUqQBDAWXasKwWBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgKEA9gEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBAmQowFFCmDctqUYACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRgKYB+gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlKkAQwFl2rCsFgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIChAPYBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQJkKMBRQpg3LalGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYCmAfoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCpSpAEMBZdqwrBYFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAoQD2AQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoECZCjAUUKYNy2pRgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGApgH6AABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqUqQBDAWXasKwWBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgKEA9gEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBAmQowFFCmDctqUYACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRgKYB+gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlKkAQwFl2rCsFgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIChAPYBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQJkKMBRQpg3LalGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYCmAfoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCpSpAEMBZdqwrBYFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAoQD2AQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoECZCjAUUKYNy2pRgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGApgH6AABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqUqQBDAWXasKwWBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgKEA9gEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBAmQowFFCmDctqUYACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRgKYB+gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKlKkAQwFl2rCsFgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIChAPYBClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQJkKMBRQpg3LalGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYCmAfoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCpSpAEMBZdqwrBYFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAoQD2AQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoECZCjAU4LBh6xqacPUf7kVA09AUi+OPV1+IPr1qHW7NYhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIHCCzAU4ND8/Y/nwDBM7L3btnj4qVcQCGg46cj9HG7NYhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIHCCzAU4NJcBAN+et3t+MkFJ2LE0AEut2ZxClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQOEEGApwYV3f0IwbbnsIJx65H8bvNM7ectnahIs9sGg+BQb1DtPfA2il+g3sFcaKdQlYHuz8sGlAlVET1bCmIeWH0+n0HCJBBQFNQX1z2jfn6ge/qrAKWZLQGM8UzEVVJPSqDmJVfbJgx+SBKOAnAT9ej/zkUwrnUhvVkDEsxJN6KZyu786xUv2qIxpgWWhKlH6/6dsjhPqmlP098PvH/t1dlxD0vvn0rQ2iPpZBRjeLdk7FuA/rXRNEcyKDVKZ49S4aOA9MAQB+vB6xYZwL8D7WuVW2koosoU9tECvrKus5gCwB/Xq2PAMs9U8p3cdWh1VAktBUwGddudo3HFQQ0hTUFfG5ZDHuw4KajGhYw7pG/z87ztWG/PeNAuJegh8KeBFgKMChXnMsgStvuBO/vOw0DB3Ur3UrhgIcAnZDsWI8TOmGahRtl5Xqx1BA4bucH29eGAqorIcBhe/1PKJfBfx4PfKrlV/PqxgPU/xq0ZXzqlQ/hgK60lu8b+PHQTiGAhgK8N6zuYdSFPDj9agUHYt1zgwFeJNnKIChAG89yN3WDAVk9yrGfRhDAe76bqmUZiigVFrKv+fJUIDDtrnjwecw/Y0PMXRQX3uLifvsjGMP3Zdvqjv0645ilTqonS/LSvVjKCBfPcj5fvw4CMdQAEMBznswS5aTgB+vR+XkW4i6FONhSiHqVahjVKofQwGF6mFtj+PHQTiGAhgKKM63gUcttoAfr0fFNiml4zMU4K21GApgKMBbD3K3NUMBDAW46zEs7VaAoQC3Yiy/uQBDAR77BGcK8AjoYfNKHdT2QNZm00r1YyggXz3I+X78OAjHUABDAc57MEuWk4Afr0fl5FuIulTqoHa+bCvVj6GAfPUgd/vx4yAcQwEMBbjrxSxdLgJ+vB6Vi20h6sFQgDdlhgIYCvDWg9xtzVAAQwHuegxLuxVgKMCtGMszFJDnPsBQQJ5BXeyuUge1XRB1WrRS/RgKyFcPcr4fPw7CMRTAUIDzHsyS5STgx+tROfkWoi6VOqidL9tK9WMoIF89yN1+/DgIx1AAQwHuejFLl4uAH69H5WJbiHowFOBNmaEAhgK89SB3WzMUwFCAux7D0m4FGApwK8byDAXkuQ8wFJBnUBe7q9RBbRdEDAVkEWAoIF89yPl+/DgIx1AAQwHOezBLlpOAH69H5eRbiLpU6qB2vmwr1Y+hgHz1IHf78eMgHEMBDAW468UsXS4CfrwelYttIerBUIA3ZYYCGArw1oPcbc1QAEMB7noMS7sVYCjArRjLMxSQ5z7AUECeQV3sjqEAF1hZilaqH0MB3vpNV7b24yAcQwEMBXSlL3Ob0hfw4/Wo9FULW4NKHdTOl3Kl+jEUkK8e5G4/fhyEYyiAoQB3vZily0XAj9ejcrEtRD0YCvCmzFAAQwHeepC7rRkKYCjAXY9habcCDAW4FWN5hgLy3AcYCsgzqIvdVeqgtguiTotWqh9DAfnqQc7348dBOIYCGApw3oNZspwE/Hg9KiffQtSlUge182VbqX4MBeSrB7nbjx8H4RgKYCjAXS9m6XIR8OP1qFxsC1EPhgK8KTMUwFCAtx7kbmuGAhgKcNdjWNqtAEMBQGNzHHse8SM8e/8NGDNyiFvCii8vWZZlVbyCBwCGAjzgedy0Uge1PbK1bl6pfgwF5KsHOd+PHwfhGApgKMB5D2bJchLw4/WonHwLUZdKHdTOl22l+jEUkK8e5G4/fhyEYyiAoQB3vZily0XAj9ejcrEtRD0YCvCmzFAAQwHeepC7rRkKYCjAXY9habcClRoKWLj4e6xYXYe9d9sWumHg49nzse1WIxEJB90SuiqfSKYx9ZUZOOnI/Vxt5+fCDAV4bB2GAjwCeti8Uge1PZC12bRS/RgKyFcPcr4fPw7CMRTAUIDzHsyS5STgx+tROfkWoi6VOqidL9tK9WMoIF89yN1+/DgIx1AAQwHuejFLl4uAH69H5WJbiHowFOBNmaEAhgK89SB3WzMUwFCAux7D0m4FKjUUcNu9TyGdzuDnP5rslsxT+fc++hK33v0Enrj7Ok/78dPGDAV4bA2GAjwCeti8Uge1PZAxFACAoYB89SDn+/HjIBxDAQwFOO/BLFlOAn68HpWTbyHqUqmD2vmyrVQ/hgLy1YPc7cePg3AMBTAU4K4Xs3S5CPjxelQutoWoB0MB3pQZCmAowFsPcrc1QwEMBbjrMSztVsDvoYB7HnkBjzz9Kppjceyy/Vhc+9MzMWhAH7uajz77mv1vK1evw7DB/XHpOcdi/712sv/tpAuvw5EH7YWZn87F/EVLoes6fnbxZByy/+74+z+fwV0PPw9ZktG3Tw88fd/1bZYP6Gxbse9lK9Zgyp8fxEefzUVVNIIJe2yPK390CqqiYbz13mf43V8fxmXnHIf7Hp2GdfVN2GbsCNx0zUX4/KtFuPgXt0I3TISCGh6/6zqMGj7IbZP5rjxDAR6bhKEAj4AeNmcowAMegEr1YyjAW7/pytZ+HIRjKIChgK70ZW5T+gJ+vB6Vvmpha1Cpg9r5Uq5UP4YC8tWD3O3Hj4NwDAUwFOCuF7N0uQj48XpULraFqAdDAd6UGQpgKMBbD3K3NUMB2b2KcR8W1GREwxrWNabcNSJL+1rAz6GAV97+CFNufQC3/+7HGD5kAH73t4exZOlKPHbHbzD9zQ9x3Z/ux+2//wm222okXv/fJ/jZlH/gsTuutQfhJ188BWvWNeCem3+GkcMG4t/PvIa/3fcUZky9HZIk4bKrb7ODBGKmgMbmeJtQQK5tJ1/0W+ywzWj833knIJVO4xc33o3ePWvwu1+ej3c++ByX//qvOPmo/XHVJacgkUzh6LOvwRnHH4QfnngwHnxiOqa+8h5nCvD1t6LAJ8dQQIHBNzlcpQ5q50u8Uv0YCshXD3K+Hz8OwjEUwFCA8x7MkuUk4MfrUTn5FqIuxXiYUoh6FeoYlerHUECheljb4/hxEI6hAIYCivNt4FGLLeDH61GxTUrp+AwFeGsthgIYCvDWg9xtzVAAQwHuegxLuxXwcyjgoqtuwagRg/Hzi1um+BeD/O/PmoNDJ47Hj375Zzso8KvLT2ut8qk/uh47bTfGLi8G9kVY4Or/O8P+9++WrcIhp16Jt56+DX161eYMBXS07fJV63DGpTfgw//eBU1T7X3PnrMQp192Iz5++R6899EciPP+33N/R4/aKvvff/G7uxEOBe1ZDhgKcNtDK6A8QwHFa+RKHdTOl3il+jEUkK8e5Hw/fhyEYyiAoQDnPZgly0nAj9ejcvItRF0qdVA7X7aV6sdQQL56kLv9+HEQjqEAhgLc9WKWLhcBP16PysW2EPVgKMCbMkMBDAV460HutmYoILtXMe7DOFOAu75bKqX9HAo47PSr7LfrJx89sR2n+LfTj5+EU489oPXfrrrxLiSTadx2/WV2KGDSD3bFOZMPs/99xep1OODEn+Llx/6EwQP65AwFdLTtp18uwJXX35m1ecW+Fy1Zjh//5m+YNf3u1jK/vumfMAzDnkmAoYBS+WYU8DwZCigg9maHqtRB7XyJV6ofQwH56kHO9+PHQTiGAhgKcN6DWbKcBPx4PSon30LUpRgPUwpRr0Ido1L9GAooVA9rexw/DsIxFMBQQHG+DTxqsQX8eD0qtkkpHZ+hAG+txVAAQwHeepC7rRkKyO5VjPswhgLc9d1SKe33UMDmA/8bXEUo4IwTJuGUYzYJBdxwF1LpDP4y5VI7FHDwD3bD2ZMP7VIooKNtxawA193yL3ww7Y6sTSyWD/jJtX/DRy8xFFAq34GinydDAcVrgkod1M6XeKX6MRSQrx7kfD9+HIRjKIChAOc9mCXLScCP16Ny8i1EXYrxMKUQ9SrUMSrVj6GAQvUwhgKcSBfjPqx3TRDNiQxSGYYCnLQRy5SfAEMBpd2mDAV4az+GAhgK8NaD3G3NUABDAe56DEu7FfBzKODCK2/B0EH9cM2PW5YAWFvXiCdfeAvnTD4Ul13zVwwb3L/N8gEnX/hbjN95HH564UndFgqob2jGSRdeh1f/cysG9utln1c8kUIylUavHtVgKMBtD2R5MBRQvE5QjIcpxatt144sSYCmyoAlwzIASBIUGVBVCaqswIQBXQd0w4JltfwnK7D/N2OU5wMjhgK61pe8bOXHQTiGAhgK8NKnuW3pCvjxelS6msU580od1M6XdqX6MRSQrx7kbj9+HITjTAHleY/nrmcWprQsSeL2G4ZpFeaAPEqnAn68HrHJnAswFODcKltJhgIYCvDWg9xtzVBAdq9i3IdxpgB3fbdUSvs5FDD9zQ/xm5v/idumXIYtRw3FrXf9Bwu+WYrH7rwWr7/7Ma7+w72486YrsPWY4Xjx9Q/w65vuw1P3TsGYkUNyhgJ+NuUOZDI6pvz8HEAC9jryEjx7/w2OthXhg/79euL6n58LWZbw+789gpWr63DfrVfmDAX85/k3cMeDz+Hp+65HJBxCMKCVSlfp8DwlS4z+VdBHNwz85Z4ncf9j/8W7z/0NPWurW2t/zyMv4IH/TIcoc9gBe+Dqy0+Hosj49vtV+NXv78FX85fY61dMufIc7LjNaHs7hgKK13kYCshuL37sq2Lk35TsQMDnc0yI8f1YHIjHLft/YwkLRlqBYRmIRoBIRLL/N7r+f/v2AQb2l5FImoBsIrM+NFC81s7fkRkKyJ+l0z35cRCOoQCGApz2X5YrLwE/Xo/KS7j7a1OMhyndX6vCHaFS/RgKKFwf2/RIfhyEYyiAoYDu+Da03INLkA0ZWkCGqgFGBkjFLERqJZgGkEyYgGpBt0w7lM9PYQX8eD0qrEBpH42hAG/tx1AAQwHeepC7rRkKyO5VjPswhgLc9d1SKe3nUIAwvOuhqfj3M6+iOZbALttviWuvOMseUxWffz72Ih568mU0NcexxfBB+OkFJ2GPXba2/y3X8gFvv/8Zfn79nQgFA/YA/YRjL3ccCli6fDVu+MtD+OizuVAUBXvsvDV+/ZMfok+v2pyhgOUr1+KsH/8B9Y3N+Mfvf2LXqdQ/FRcKuOzq27DV6GG486Hn8fYzf20NBbw/aw6uuek+PHDbL1FbHcXFv/gzDjtgvL3GxRmX3Yi9d9sO5556ON5671P87q8PY/qjf4KmKgwFFPEbwFDARnwJQEBV7BBLJg0sWATMX2RixaqOHzaEAgqSaTF9QPaPpgIjh0vYaoyMYUMkpNIWDBhIl/iUkwwFFP5L68dBOIYCGAoo/DeBR/SDgB+vR35wKaVzKMbDlFLyyXWulerHUECuntE9/+7HQTiGAhgKyGdv1xQJiqHYM/GtXWBhzTwLiQYLmVjboyhBIBAFem0ho99WEiQRGpANpE22Rz7bo7N9+fF6VKi6l8NxGArw1ooMBTAU4K0HuduaoYDsXsW4D2MowF3fLZXSfg8FlIpjJZ9nxYUC5i741g4FbDfx7DahgCl/ftBeU+L8046w+8MbMz6xZw245dof4ZBTf473XvgHVEWx/+2E86/FVZecgt123IqhgCJ+exgKaMEPqgoiYRVvzzCw+FsTDY3OGiVXKGDzvQwbLGH7bWUMGgBkTAMZvTQfYDAU4Kx/5LOUHwfhGApgKCCffZz7Kh0BP16PSkfPH2dajIcp/qh5fs6iUv0YCshP/3G7Fz8OwjEUUJr3cG77XneXFwNsQajINFmY/5qJxFp3RxQhgRH7SOi7pYyEbiBdovfW7mpd3NJ+vB4VV6S0js5QgLf2YiiAoQBvPcjd1gwFZPcqxn0YQwHu+m6plGYooFRayr/nWXGhgA1NsXko4NwrbsLkoyfioAm72kW++XY5zv7JH3HrdZdgyq0P2FNRbPiI9SvG7zwOJx6xH0MBRezblR4KEH/YQ5pqLw/w9nvuH+64DQVsaOp+fSRMnCCjqsqCboqpD90fu4jdBgwFFF7fj4NwDAUwFFD4bwKP6AcBP16P/OBSSudQjIcppeST61wr1Y+hgFw9o3v+3Y+DcAwFlNa9W/f0TG971SADcQVLZpho+M7bMgBaBBi6p4zaYUASurcT49adCvjxesQmcy7AUIBzq2wlGQpgKMBbD3K3NUMB2b2KcR/GUIC7vlsqpRkKKJWW8u95MhRQW223zmmX3IALzzgSE/bYwf5/L1uxBseccw3+MuVS3HbPU3j8rmtbW/HqP9yLLUcNxZknHow1DSn/tm6Zn1mf2mBF+osf8wFNxcJFJl5/x4TexWcHAU32tBSAWFJg/30lKIoEs4QeYPSuCWJtY+l/b8VNcTSkoiGW8f03XfwI1VQZzYkudtZuqKEf/MJBBZIExJMdL+OR76orMlAdCaC+OZ3vXWfdn6gfPxTwk0BQU9Zfj/x/7fSTm5/ORfzt000LqU6WQPLT+frtXCrVLxxUAVhIpAr3N7e72r62KoDmeAaG6W0wsrvOb9P99qoOYl1zStD75lMbDaA5qcMoYrC5GPcjNZEAEmm9ZGd780sHUiUZqTUyvnwmv9eSgTvIGDpeQtL0z/2SX8zzdR5+vB7lq27luB9rs78bhb6PLTdTWQbE37+6psI8B/CLn3ge0VP8FimDZ4B+fK7WUTuLID4K/KwrV58TfuLloKYiPpeMhhSIiYEKeR+rqRJCQRVNJfDsOFcb8t83CogxMX4o4EWAoYD1oYDzfnYzjjt0Ag47YLztOW/hd7jwylvw599egmv+eB+mPfSHVufLf/1X7Dt+e3umgFQmvzeDXhqz0rYVD/Yrzt+SUN8ATH3JQPNm6xS6bX9ZlmDm4WHiFiMkHDxR/OArjbdOAqqCjG746dmk26azy8tSSyCjFJZxEEEWSZJ8NauEH/xsF0j2jBuF+oh2EGufFm6KUqYCCtW2PI4zAfFAseV65KMRKmenzlLrBUSoSzwoLoUBUT82WqX6iXqLH38iUFLqH/FAU8zUVQpVEQ9g0xnTV7+7A2rL34Bi+gmXVKZwv/9EnxcPhY0i17vUv3uxvzQJAAAgAElEQVRGSkLjdxa+nt49z4B6DpcwaqICJVL61yk/trUfr0d+dPLPObX9HhT+PtY/Evk4E/HcQfwdKNxzgHyctfd9iKcRmqogrXfPddv7GTrfgx+fq3V09uJcRSrAKOCzrlyS4hm4eA5YzNluVUWGZVkFvY+1n33KEjJFDMPmahv+u3sBMSbGDwW8CDAUsD4UcONtD6FHTRUuOftY2/PF1z7AU9Pewp+uvRgHnnQF/vf83xEKBux/O/yMX+D6K8/BztttyeUDvPQ+j9tW2vIBAUXF8hUS/vtqfn7MdnX5gGzNVhUFfniyinhaL+oPLCddissHOFHKbxk/TtfN5QO4fEB+ezn3VioCfrwelYqdX86zGNMu+qXu+TiPSvXj8gH56D3u97Fhum7xMFIxdWh6GkpAAzJpmIoKPaPDCFXZYY18hJWdnCGXDyhsGMFJm5RCGU3MELBSxrxp3evXc6SEUQfKiOmc0Sjf/YLLB+RbtLD74/IB3ry5fACXD/DWg9xtzeUDsnsV4z6Mywe467ulUprLB5RKS/n3PBkKWB8K+Pjzr3Hl9Xfiwb/+CtFoGBf87E846aj9cfzhE3DuFTdhl+3H4vzTjsD0N2fitnufwn8f+SNURWEooIh9u5JCAWFNw6xPLXw8O38PIfIZCtjQDU47UUEgaPg6gchQQOG/tH4chGMogKGAwn8TeEQ/CPjxeuQHl1I6By8PU8QbIqosIZWSIV4cj0QkxBOAGKNMpiwoKiDJRlnPJOHFr5T6yebnylBAcVpP/O6O19VDSsRhLP0G5qplMFcug9lQB2XwcMj9B0EeOBQIR5GJ9EBCbgnhd+enUkIBYqk4VZah6kkogQA0Mw3dkpEyLBhKAEkuweK4m4nBNDWl4tOH8xPOz3XgIbvK6LOdhRQKc7xc51Mu/85QQGm3JEMB3tqPoQCGArz1IHdbMxTAUIC7HsPSbgUYCnArxvKbC1RUKKC+oRn7nfBj2yCT0aFpYm1J4NXHb0GfXrV44InpuPeRF+ypxY85ZB9cdckp9hSzy1euxVU33oUv5y3G0EH9cOMvzsM2Y0fY2y5bW/o/LEr1a1EpoYDqcMBeLmDpsvxOI9gdoQDRlw6ZKKNPP9O3ywkwFFD4b7wfB+EYCmAooPDfBB7RDwJ+vB75waWUzqGrg9qKpCIWk5BMAMtXWli91sKatZYdCuhZC/TtI9n/Dewvo7oayBi6b3/LeGmvrvp5OWYxthUBEDFx6YZlJhgKKHwrhDNxiOUuGx+5C2b9Onu61M7WEdD2OxTK1rugSQl366wBlRAKqFYMYP4XMNesaA1iaHoKZu/+QL9BkPsOgrbrXmhOWSWxFFnhe2/bI1YHNXz2qIFUQ+HOZOczFaRVvaBTDBeudsU5EkMBxXHP11EZCvAmyVBA6T+7L6X7WIYCsn9fi3EfxpkCvF07/bo1QwF+bZnSOa+KCgV0R7MwFNAdqs72WQmhgJpIAA//R0djkzMTN6W6KxQgzuGg/RUMGWwiY/jv7QaGAtz0kvyU9ePNC0MBDAXkp3dzL6Um4MfrUakZFvt83T5MEYPDiqXiq3kW3p/lbMYlMXPAMYcpUAMWZFUvdpXzeny3fnk9eDfvLCSbCEgm1GAQVioJo7kRSt8BMNMp+43ptKSiKVH67dm3Rwj1TSlkjPwGhvPVPGK91B6pdTC/+Rr6K89Ab26GFAxBCgQASYIp3lS3IxvtP/KAwQhNvgCNScN+m707PuUcChCDZuJBfPLpB2DOn9OGT1Nle4C5dZkGVUXo1Itg9OiHZkPuDuqy2GcwoCC+RMbXLxX2vrbHMAmjJkmIi4AaP3kRYCggL4xF2wlDAd7oGQpgKMBbD3K3NUMB2b2KcR/GUIC7vlsqpRkKKJWW8u95MhTgsW0YCvAI6GHzcg8FhDQNr7xuYsnS7nng152hANGsxx6hoEdPw3dvn+QzFKAoYhpiGYYuQbz8ZA88SEAqDWhay9tpkiSef1qQZMteVkGUy8fHD4PaTuvhx0E4P/hVhVXIkoTGeOHWDOXDFKe9luXKVcCP16Nyte6uerl6mGLJ0GQVU1/SsWad+zPaYVsZe+wqIZ7KdPaCs/sdF3ELV35FPE83hxYPuqs1C/pb/4Wxerk9PT1S68NvkmRPUa/27oPQkZPR2JRGCoqb3fuurJ9DARHVQjTZgMQzD8L48B37d4656Y9fRYFUVQupVx8Yltwye0CWT/iSq9EkR7rlLelihgJkCTAtoDvuY8X3IFq3DKmHb89q2i4UsL5UYOIRMMbuiLgc8l1f98MJVYtl/B4wYKQKfzbbnagAtWJJG2eBtsKfYWkdkaGA0mqvzc+W97He2o+hAIYCvPUgd1szFJDdqxj3YQwFuOu7pVK6nEMBqRTsWR1rqiXUVJdKi5TeeTIU4LHNGArwCOhh8+54mOLhdPK6aUBR8cUcCzM/ztMIcpaz6+5QgDjkuWco0E1/TXvoNRQgbkYtQ0EwICGZlDB/kYlMBognLMTiQCxu2VMTV1VJiEaAaERCNArICrD9OBnJtAlLsmBZpqcHnX4Y1Hba6f04COcHP4YCnPYglqNA/gT8eD3KX+0qY09OH6bIkozmRgVPv+Dt7c6qCHDKCSqSmbSvggEiiKiK/xQZkqFDlxT7d0WuwSOnfqXSm1QzjaiVRurRu2A11HV42ooi3oS2oBzzQxj9hpb0AKhfQwFVejPUxfOA779Batrjdlu0CwVsaCFVgzx4BHRxqyO1f0td6t0XoVMvRr2Z/9kC8hUKEPcEusPZGsQsFuGAAqOxHkqPXggrFpY15Xegt1eVhtjNvwTM7PvtKBQgmiR4zOlIDRmDlNX9gRmxPKMYnBJfSeG3YYkPP15zbLM1Cr58xtvfka7Wrc+WEobvJyMubjb58SzAUIBnwqLugKEAb/wMBTAU4K0HuduaoYDsXsW4D2MowF3fLZXS5RgKEEGAV9407SUeN3yqq4CD9lMwZFD2Wea60l5vzvgUV95wJ37z0zNxxIF75tzFxb/4Mw6bOB5HTtorZ9lSKsBQgMfWYijAI6CHzcs1FKApMlatUjDt5e59+FCIUIB4G+aS8zTUNRfh1YoO+lZXQwGKpACWjOZmYMEiC4uWmGhqdt+BB/aXsMUICWO2kO1pXwPBrs2m4IdBbae19+MgnB/8GApw2oNYjgL5E/Dj9Sh/tauMPTl5mCJm6YkGNdx5f35+S40YKuEH+8gw4I+BmagKKHWrgFQCxrcLgHgMyhZjIfXqBytShSYr0OEb2E78SqUnBTQZ4bXLkHzo7zlPeUMowDAsqBMOgbT9eDRbWs7t/FjAj6GAKrGG/ay3ERowELFbf93K1mEoYH0J0W8zYgw7Sw5a3XN/WLtMQDzP7eQlFCAeR0WMOALRCIwlC6EM2wLpeAJxNdrhdy5qJiHP+wzpmW8CzU32dGLhEVvAOvgkNFjBvHSxalmH8crTMObO7nB/wd697euDaRiwmptgNDW0cY9ccSPqUyK4nJdTyrqTgKxASsuwdKBhqYUewyUoGqCrBtJ6fkMS+ahFWFHx3bsWVs/tRpROTlRWgT0uUlEXS+ejOhW/D4YCSrsLMBTgrf0YCmAowFsPcrc1QwHZvYpxH8ZQgLu+Wyqlyy0UIAIBjz7V8bObwycpGDUiP8GAH//m79hjl63x2jsf454//Sxnkzc2xxEMaPZ/5fRhKMBjazIU4BHQw+blGAoQP9RjzSqefC4/D7E74y1EKEAcv28vCUceJiNt+ONButtQgCorqAor+Pgz016LuIOXb7rUk3vUAhMnqOhRY8GU3E0N6YdBbaeV9uMgnB/8GApw2oNYjgL5E/Dj9Sh/tauMPTl5mCJbGl5/y8TS5fkbyDlwgowBA8VaQd3/G62zluwRsKB/+DYy776StZg8cixCJ56FhoT4zdK+/sJPzESdzrTUQ7yp22Z69xLpRiL40TOiInbTLxyd8aahALFB8LSLkOwzzJcDkbkq5LdQQECREGlYAXzxETIz34S5dHFrFXKFAhAKQx44FLqZ/SFPcPKFiPcbnnMGjFxmm/6701BAWDGhwYRlmhBvt6eUIEKZGPQP34U+eybsqcGiVVB32hPKtruiUYm2O42IYkH58kOkX3u+zb+JderTPfoheOrFaMi0nynBTX2iso7Q8m+QfOp+WJYEQ3w5Nv3qSxKiBxwKRTFgxeshBaOw4nEYSR3JWTNhrp+pQR4+GvIRpyKG/M/OIOqjZGRk1iqY99/219DtT1ZgqAbMgL+CAT0iAcy8Vy/40gGiv4n/xPIa250oAzW6HSbnx5sAQwHe/Iq9NUMB3lqAoQCGArz1IHdbMxSQ3cvJfaw76dylGQrIbVSKJcotFHD/v/VOX7wMBICzT1ER9JinbmiM4ZQfTcG0h/6Ao878Fe679Sr069PD7gL/+/AL3PSPR5FOZ6CpKn528cmYsMcO2HSmgM/nfoMptz6AxqaYHRK4+sdnYPxO40qxC4GhAI/NxlCAR0APm5djKCAc0PD08wbWdjz7qQextpsWKhQgjjppPxlDh1lIrX8AnbdKdGFHTkMBMmSEgyrmL7Tw9gwxYN+FgzncZNAACfvtrUALWjAsZ+EJPwxqO6we/DgI5wc/hgKc9iCWo0D+BPx4Pcpf7SpjT7kepmiKgiVLJLz+Tv4Hly4+R0VzMu3qTVoxsKMpLdNlpw0T4k31rn5EICD19AMwlyzIuYvIj6egQZft9cs3fIKaghozDkuSkfr+W0haAEq/gTBSKSSC1cj48E3djipaLWegv/AozG++zmkhCmweCoAYKL3qj1jXlPsNXHuMtevN5uj8shUSv9VlU4ZltCxDZciGvQxVtlBAUE9CDDSLQUQR+Eip4S4f182GiiKhZ6YBiX/8HuFjTkX8H78DxFIbGwaaJSln6ETq3Q/oO8juq5YYaN/kE5h0DDJjd0bS9DZwvuk+c4UCRDyh2krAmPkWzNXLYdathdx3AAI7jIdaFUXzg/9oRxS56Bdo0KrbBXF6hoD4Lde0Ky/aKpU2EJx8AZL9R3Q5nBLW44jocejvvIz0m9Mg1fYEotUwsHEZgOikIyB//z7kNfPtgIOVjLecz+j9YUq1iH0yqyVEUFOL8Hk/R32WCd7ENPqibzldLmHzCgckBakVCua+qHfYvXY6XYUeynT5GG76rZOy4pqtpVR88nA33gRmOREVJqBn7OVQpOoaDNkrgt67SoinCnseToxKrQxDAaXWYm3Pl6EAb+3HUABDAd56kLutGQrI7pXrPtadsrPSDAU4cyq1UuUUCli6zHK05GM+Zgv49zOvYfXaevzfecfjjgefswf2z5l8mN38R511Na674kzsvN2WmLvgW/z7mVcx5efntAkFnHD+tTjjhEk4+uC9Me219/GPfz1rBwxK8cNQgMdWYyjAI6CHzcstFCCmQF29SsHUlwpzw1/IUICmARf8UEVDPPeDVw9dwtGmTkIBMlQsXw7MmGkitv65maOdeyw0fKiEow9VUN+cyfkA1Q+D2k6r68dBOD/4MRTgtAexHAXyJ+DH61H+alcZe8r1MCWoaLj/EcMeYOzXV8KogTpqa1ps6huAhctUiOnpuvIZs4WEvfcEdNPZb7VopgmB2h4wvvoMxorvoO28NxCOoNHQcv6d3/z8IqoFeVbHMwRsXl4eMBiBky9Ag94yOFgl65CWL4E59RFYeqZtOCEQQPDEc6H36It4N70l3BXvjrYRA9FVyXok777Z8W7bhQIABA44Cpnt90Qy3bY9xW8ExdKhiXXPNRVGcyMkLYikISG1yWCr44O7LChCCNWBAL7/yES8zkLzSgvRvhIivSQM20NGICCjrillvzks3sSvNmOwvl2IzJxPIaka1K22hzR0JBoRzjYrv3024hhhPQFFsmBBRkqLICOmkHDxURUZ1akGSN/MQfLxexE55nTE7mx5KCKFwrBkxT6/XDNRSNW1CJ9wNkxIiL/x3zYJDHWH3SGNn4hmrcrFmXVeNFcooAppmK89224q/uB2O0PKpJGe9zlMq+3MBmKpA2OPSW36khiAiTYsR+rB9stbbAgFqLvuA3Pfw5HYrA86rWyvqArzfy9D/+gdGF9/YW+mjBiDDGR7oF8bORqhviqw+D2IZd2sdMr+/rd+djgR8S/mwahvSaRHrrgB9cmNEw2IflKrZSA1LgOq+kOMS8etkNPTa+kLAMKShlliOZdOLr2hnsC4o2UkpY6DA64O7LGwCEKgScHsx5xd7z0ezt5cFt+CWBOs1Stadzdwn94YfmgN6nQ1H4eo6H0wFFDazc9QgLf2YyiAoQBvPcjd1gwFZPfKdR/rTtlZaYYCnDmVWqlyCgV8+rmJt9/LfR86fhcZ4j8vn5Mv/C1+f/UF2GLYQCxdvhqX/uo2PHv/DfYuz73iJowYMgBnnnQIhg3u13qYTWcKSKbS9iwC4tmCCBcceNIV+Oy1+7ycUtG2ZSjAIz1DAR4BPWxebqGAqpCGhx830FygQehChgJEM+8zXsGWW5pId+cr9w76U65QgAIVCxYB//sg9x8kB4frUpEzT1FhwYCJjh9C+WFQ22nl/DgI5wc/hgKc9iCWo0D+BNxej8Qgihj4EoOQVlqGLAOmYtjTr+uGWZS3h/OnUZp76uxhinjgCUPFA48Z2GlsBgOs7yHP+wjmymV2ZeX+g2GO2x3Lzf749Gv3U2T36Q07vJdysCRSEAaCa75D6vF720ArW+8Ebf/D0QDnA2uyLKGqYSVSD/7VVaMFfnAo0jvtC01PwZr1NvT33oC6/o3fzWcsEIN/2qTjYIzeDnFkXy9P/O30w7rf4uFWcMlcpJ550LHHpqEAKRiCNnwUlBGjYYzbFU36xgHeaiMOad1K4JP/QRs5BpkVy5CaPQuorkXw8JORivRAKrw+ZeL46O0LijYNywpMHTAUC2mj5Tef6MJaWsOcZw2km9tvpwSAXU8JIBVII6WbiOrNwCfvQZ/5VpvC2oSDYYzbBQk1kvUsa5CA8dlM6J/NhDJsC2i7TUA83BMZsYi5w09USkN+dzoUMwNjzidQRo9D6pmHWreWIlFIkpitIkcIRwtA3WZniEk0NgxOb9iJHW457mw0SM6/L7lOP1cooFeVitjNVwObhX8CW20HWbKgz/0c+mahgMDBxyGz9W5tQgGijWsVA/G//KbdKW0IBQQOPwnpMTsilXF/3yH+NoWXzUcg0YTEI3fAalhnH0fMvGDV9LJnLQjttDs0ZS3w7Ud2EESsg9Y6U4AoO/5MxL+aD/377+xtg2f9HxK1/VtnDRH3i+G1X0Ka+3JLHSZchrqkmNY+l/LGfxfX5aApQgG5B/v3vlx1NHuH86N3vaS43qVWKpj7fOFCAeIO0Fz+LZBKtp54rzEKtjxzNOpchna6XvPy3ZKhgNJuW4YCvLUfQwEMBXjrQe62ZigguxdDAe76EUt3LFBOoQCnMwVM2FPGjtt1PRSwcPH3OOacaxAJb7yvjCeSePzOa7H1liOwtq4Rdz74HF59ZxaqoxH84rJTsdeu27aZKeDF1z7Ao8++ioxuwDBMzF2wBJ+/fn9JdlWGAjw2G0MBHgE9bF5OoQBVUbD0OxmvvlW4hw6FDgWIpr7sfBV1zcWdLaCzUEBYC+CtGSa+XuD+wZyHrpx10yMOVtCzpwWrg7dl/DCo7bTObgfhnO7XSzk/+DEU4KUFuS0Fuibg9Hokxk5CigYFEmJrLDQutdC4woIWBqr6SqgZItn/d0u1kBSjej75iAd+YrAm5yCcT863K6eR7WGKGHwLySYCpoKmmIb6uhT0uR/DfOMZMQbW7qMeeCyWhrfGZ99kHzDt7Lwuv8DZoFWN3ozMa8/BXPBVu92FL/8NGs2g43YSf7NCKxYj9fjdrsjUHcdD3fcQWN8tROrZh+1ts4cCJJimBE0F1NMvQ7xHvzZTeNtvC6smjG++hjxiNBoN1dWgoKuTdlA4GlKBt16A/tG7Dkq3FNkQCrCiNQiP3xfGoq9hphIIHXMG6k0NGUmzwz/VmWZk7vxd68Bc9Iob0fTMI8D6QXuv071vOOHasIavp5toWm5hy0kqAv3F0gAGqoMBfP64jkQnS4lFqhXseIaEukQaPQMm4vfdCjTWt7GQ+g5E8OTz0GC1X3hRvAEdWbUYyUc39idly22hHngMGl0MvvcMSzDe+i+shXMgaxrMWBP0D99pPQ8pUmWvi+7keqSMHIus4+KShMhPpqAu1fbNfMcNn6VgZ6EAEcqIxtci/c8/t9tSilYjuv8hSEx9FIbUNjwR/clvUZcR34u2o+XVRgzpB/8GxNsmPFpDAaf9CPHeg7u8rEhPzYC04Ask/nkrkGhJlitbrLe0gNBOu0EzvweWf9kSCrDPzwJ0HVA1YMuDkVi8Gpmli+1tAyecjdTgMa3hHxHAiaz5HNLXr9n/bu17KRrSSrtlEjprD9HfUssUzJuW+z53h1MV6GHd1f699IXOthV1Xz1LwvezXCQgPJ6MWDrAXLUMiMda91Q1VMM2549CvVhHhB9PAgwFeOIr+sYMBXhrAoYCGArw1oPcbc1QQHYvhgLc9SOW7lignEIBDU3AA4/mfqZ2yvEK+vbu+j3hLXf+BzXVEZx/2hGtsA88MR3LVqzBLy87rQ32Ox/MxpXX34n/PX87LvnVX3DYxPHYfadxOOS0K/HkPb/FqOGDsGL1Ohx08hUMBVTqF5WhgOK1fDmFAnpEA7jzX7r9fKZQn2KEAnbZQcb22wEZo4AV3Qw0WyjAfj5maHjlDQOr1hSqBXIf58D9ZDsYEAy1fwjkh0Ht3DVoKeF0EM7p/vJRzg9+5RYKEA99C/rmtCVBllRYpmU/6DYsC7JsdDYzbT66DvdRAgIhWYVkSdBhIGO1HRF2cj3SJBnRsIovnzXQ+H3ngwFDdlUweBcgpuswNl28vcBOISOFoCymL0hDjla1rBFvacjI2d/4LvDp5fVwmz9MqUYKmqnDiqew6C0Dq77vhS32NlFb9ybiM16HrCqIxUw0JzeusS1OSD3pIny8djiWr3QXBDzjJBWylum0vcVAaLXejNSdv89ad3XvA2CNP9DxGtHhoAL5vVegv/e6K0t50DBUnXgWGm+b0rrd5qEA+/ppyli2vOVaOnzLaiinX4pGeWNgIqoC1uvPwPh8FtSd94C5z+FIGF2/IXdViSyFq60k9GcegLm85e1mJ58NoYDArvtAnz2zdWp4ZYfdoZ75U9TrCsRvg/DSedCfuBfmd4vs3YbEmu9ffQ6zvuUtbHnICASOP7t1WYbOji36gZQS0/23hHV0MQeUZMIeJP1ewbwXW37fRfoCY49QYGoGmhdKWPha59edgKZg8O5Aj21NBFPNSP7jxvanIcsIXfwrNErhdgPVoYAM+Y3nYHz6wcbttACCZ/8EjVq1E067TK2UgvXudGDFd4ChQ4KF9NvTW7eXQhFIiuIsFDBqXOvb6W1OQAsg8uPfoi6evwHRzkIBolf3rNIQ++NVWR0iPzgYct8BiH/yPsyF8yCP2RraTntC79EPcS3abpuOlroQoQAcfCIyI7ZGwuz6Gy+BdBy1IQnJf98JY/4cSD16wpIUGFLL9S6w5TYI9rSAb/5nf7/tniX+DzsgAFg7noT4hx/DrFvb0hf/77eoN5Q2oZ9aNQWlYSmsmoFImzJiLpcPsGc6UVV8cFfnbagEgd3PU1Hvg+XmbDsxM8pKBV8VcKYA2TIhZ5Iwl228tvXZcwBGHlyFRjvVwY8XAYYCvOgVf1uGAry1AUMBDAV460HutmYoILsXQwHu+hFLdyxQTqEAUcsPZpn2fx19dtxWwoS92j7PcdM/xFv9B5z0U/zzz1fZSwds+IglBE65eApefOQmnP+zm/GXKZdiQN9e9tICx5/3G7w39R+toYCtxgzDWT/+A9544s9QFAV/vucJ3P/YfzFr+t0IBd3PQunm/LujLGcK8KjKUIBHQA+bl0soQJEUzJ0n44NZ+XvY5YS1GKEAcV6nnajYD9PdTDvppD5Oy2QLBQQUDS+/bmHpMncDA06P6aXcoQfK6NfPgrHZ2yF+GNR2Wi8ng3BO95Wvcn7wK4dQgP140lRRW61gwWIDI4ZKiMUte+kLSe6+N6skU0UiCcydZ2HuAgtDBknYcpSEQQMlMQxctOtLvvon99N1gZCqIrYEWPSOia2PUiHV6G2mO891PZLTMsxGGV9Ndf73IFAFbHeigqRpwBQD8x4/AU2235LUxVzaDj5BI4lQ3Qqk33xx4zT5Q0ciOPEINEd6QpdL7wals2pv+jAlqscgffUJ9I9mQNr+IHw6tRro0RdqYjV2mLQGzQ/cAklVIfUdhGYjjFhi46CKMnwUEhNPxxsfuvM5cIKM4SPMrNN9i99WsilBkWUExNVo9kewls5Det76tb5reyK4wy7QdtwTabGGd20vJHULSbn929ybGkRUC3jjeRizP3TQIzYWkXv2RvVpF6Hh7xsHjdvNFCCJ8UEZ331vQVVgX0+DP7kedUmr9Voq6iWm608+8yBC4k3iIWPaTJPu6qTyUDiqGMAbU6F//pHjvW0IBYT2nIjEo3e1TA0v1gMcOgrS5IsR7z3EDnr0icpIPfg36B+8CXWXvaHuuCfir07deBxFRfC8K9Codj54LkstU6Y3fGti5ZcWIr2AfuNkKFUW0oqOXtUBzLxPRyYGjJmkoHqkab9Vv/wDYNknnV9HRCigx2gTQ/aWoKXqs85IoWyzE5S9JqEp0P48xUB1TbIe8btvbq2XuvOewJ4HIQbn34fagAXjlWegBjToH8+Atu3OSD7xz9Z9StEqSHAwU0AgCHnwcOhm+0FPEcLQjjgFjUr7AXfHjb9ZwVzLB1TpTcg8djfQ0H66BmWr7aH+4LCWPYqbGUVBSg4ihY4fUomBmJogkJn9IYzFC+xQQXTESDTWDMj53XdSR/v35IyXoM94HaYkt/kNJMkKqo4/HXjrL21DARRoGiUAACAASURBVGLHvUbCHLYPYi+/0HKYcASRH12DumT7/id+N4sZH5z+Xdr8vMPQ8OXTBlINHdeo5wgJIw6QfDP7jlieQY4p+OzRwt6jK5YBWdVgNtVDrqpB/21MDNhHRSxZvFC9k35YCmUYCiiFVur4HBkK8NZ+DAUwFOCtB7nbmqGA7F4MBbjrRyzdsUC5hQJETd+eYeDTL9o/A9tiuISD9lMQ7PyRSafd5Z0PPscf/v4Ipj30h3bljjv317j83ONR19CEux9+AYZhIBQK4vJzj8OB++7SZvmAX/7uHnz42VzUVkfx8x9Nxu33PwvTNPHI7deUXHdlKMBjkzEU4BHQw+blEgoIqQG8+IqBZSucPfz3QNZm02KFAg4/WEX/fm0HafJVJyf72TwUoEDF518CH8/2PpDj5PhdKXPGSQokVW/zppUfBrWd1iXXIJzT/WwoJ25oxVt2hi7evJMQCIiHlKardY794FcOoYCAHMDHnxn44ivRBi0tJAaUDpggA0r3vDltT4+ua3jw8fYPR/faXcawIRbUYGEf4LrtwyzffQIhScX8/5poXg7021rCkAlAIrWxP3R2PRIzBIj1g51McZytBrudqyAh5ifwMGOAYmlYvgro2wsIhHRkHAQDaq0k0k/fD3PF921OSwwKyuMnojncMy/g4rvnpW65TkJc18VyDRnT7PQ4Gx6mpDOGPXX6ur/fghWLGjDwpBNRtyiClasGYcSIBegVWITmaU/ATKch3li2+g7G6vqNA3dSKIzgxdfguVdynVnbfxfXmXFbtQ0FiHOPBlQs+9hCbK2J2GoLkq6jOtqEkLkGQ8dLSH74LkJjxiH5ynP2G9UZU4LUsw+CBxyJVN8hnQ4OBjUFgcVfIr1+CQCnZ6xtsyNCe+6P5n/9Ddb66ag6Wj5ADGLLCuy3tUNnXY5E7YA2b25HzCRUy7Rnn0hIxZ2BQvyGVed8iMz0p51StC4fIN7qNud/ac8WgEgVlG13gXrShfYSAuKjqRJq040wvpgFS88g+dEMWJlM63HsNe4nX4iGTOdvd2uGgrq5Er6b2fb35c5nqEgHMrB0oCqiIhO3YMlAEjqClopFr5poXNp5tUQoINDDxJgjZJhIIFy/AqmXnoG1dqW9odRvIIKHnIB4VS97WYRsn6geh5pJIPPhu1BHjoE8bJS9dIAIJDn9hBUL2uI5UNMJpB66HeHJ5yH29xtazkFMTR8IOlo+QKquBXr3h2G1DwWou+4N7DIBMbXzUIAYLHI6YJ0rFCCuddHm1UiJgENz48a2HzoSgaNORwNankitf9neKRdCmgxZT8MKBNGzKoB8PUewlxdZMqd1iZDNT0iORhA97ARI386ElWwAxCv5SgBWn3Fonj4VG9ZYkYcMh3r0GWjCxnU2HVcuR0ExW0BU1jDznuwD20oI2ON8FeuKvMzcptUQ/UCEAmY/Vox7RAmyLJrGwqCdZfTfzSpqECtf/aDY+2EooNgt4O34DAV482MogKEAbz3I3dYMBWT3YijAXT9i6Y4FyjEUIGq79HsLS5ebWLMW6NMbGDJQxpDBnC2rO74LDAV4VM3XzbzH06jIzcshFCBmAawKBXDHPwuf/C9WKGDMFhL23UtCukhLCGwaChCzNKxYKWP6a/4fQLzsAhV1TenW77ofBrWdXnjyGQpQFQXphIwlSy2sXmOhOQYM6CehZ08JI4YBKX3jg/vOzs8PfqUeChAPFtJJDY8+1f76tfvOMkaPAmQ1/9c2U1exYAEwM8ublOJH41GHqEibG78rTvspy5WHgHhgqKVVrJxjYcC2EpJK27WJO7oeib/HNcEA3r/DXZ8NRCWkYy2DaOFeYsYAFU3prvU/MWiSSSl49EkT/fsCBx8gw5Q6Px/xPaxO1SOxyRu/G0ewZIQvv84evHQ+zNe2H4g1lcXQV0hPAOkUmoM13RIMsGdHWKdi+WwDw/YSb95mOpxyXDxMEeEEs1mG1BxHfOp9WPXVUsiqihHHHQJ5xFYw3pkK/d1pMANRpOsbIAVDsPoNbRMKECMu2kW/xgtvO38zWuhMPlZBOGogY7QMFKmWDCWt4PMnDRibNb0qZvmJN8OMNWL7ExRoTd8D7z4Be6L19dN72wO4J57XOtCY7Zso3lgV65wn773F8RdV3novRPbcB031EVRhCdKr6mHMehlyOmFPJ29sHjjZZIQzmCUU4PjABSgovudVsbVI3Hdry9EcjM5umCnA0kKI7HcIzHUrYUGGOvFI1NXHYCgb+0GNlULqvpuBVLJdbbR9J8HYcZ+cU75XKRq+eNpAomXVgdbP0N1l9NkBSK4PaYgwhngD276GBBSs/qR9kGDzkxChgN7jLAwcbyGhGwjqSYTFEvd6xp4ZQ7ytkJCDSKPtuveb78e+XoqQpWG5ClZuup+omUSoYRUS9/4JkWNOQ/z+v7Ssba9psMQcFJvUr6OuIfUdCLOq1l4OaPNP8KhTkdxiW6Qz2QdmFUNBOCAjthboMURCoslCUur8t2CuUIA4B3FtjaSboVZVQV/2LbShI5GJxdAsBfMyG1G+72NrNQPpf98Jc9Xy7MyKgvDYrYFIBGJVHbO+DulFX7cpGzrvCjSHe3XLNd4+kC6hR42GOc/rSNYDqSZAZNai/WWMOUBGQ0LM9NTVv1bdc+GpDQcw6186MvHu2b+Tve54ugIjZNgBaH68CTAU4M2v2FszFOCtBRgKYCjAWw9ytzVDAdm9GApw149YumOBcg0FsM0LJ8BQgEdrhgI8AnrYPN8PUzycSpc3FQ/bly9T8OKrhR+ULlYoQFWBi85SUR/r2qBJl7HXb7ghFCAGX+IxFU88W3j7rtRBDHYePkmxp0YXHz8Mam9eD3n9WqWbP8/LVyjANBSsXSNh+uvZH4oNGyxh4g/E9PFGzoeKfvDrjlCAPV2xGFyzxAN+MfVz24ernT1MEe0nBk3sN/HXTxHb2VvBqqRi9hfZZ9no1QM49ggFKcNZSMPNd0KTNDwzzUB9B1PQnni0gnBV24HgTfcvvvsBRbwtLInxEygqICsmkmkzZ79xc55+LyvWM1YyKSQlzdWboX6vlzg/0YdFX8/oVruB5Y6uR1FVw7wXTDQtzz0gIckSBm0no/cIGXVLTPQYJmPdYhPfzzYwfE8FPbcxkTK69rdFfK/WrpMgvkNihphcb76KMEPPIBC7Jct0ZZEoqi75FRrTwsL9YEIACtJrFSiaherqGMy1y5EcMLLLg4ed9Z2QpdkzNMRXA8P2kNF7h47fihQPU0Qr1S8ErKSJnt8+h9UzPoCmAuGwhODEw6FPexRWrBmZlAG9uRly/8GIW1E0JTa+3S0PHILMERfg1ffcrU136XkaGuIpe2BQDKiKN0k//XdH7S1BNnWI6454p3vrXRdDW/wGMt9+04YjeMYliPUY1OlgXI2sIzP1EZiL5+f8Gqpbj0dzcGt8u3ws0g0ZmEsWoOcWEsYeaCH9wkPZQwGb7DX6sxvbLB+Q84BFKFCLFJJ3/xHIZGCaklgJAKYY7ezgK7whFLAhDKEOGorAoSeiOdq73Ywcor2qE3X2Ou0i1LHho+13KKwtd0BMq8pZY6ehgE13JH6bxL9TMP+lzq8fIhQwZC8LNWMtpDIby9p/v8WqPi7e9s9ZEQcFwkEF0Xgd9P+9Cn3hlzC+mt26Va5QgBStBvoOzDpLgNhJ6IIr0RSozRoSUiEDzQrmv2LYg8zi/zl0Nwl9x8lIdBIMcBIK2FABcY0Vdcj3LCn5vo+1lyiQ0oj/9bcdtpgdABGBqiz9Q9vnIJg77oW41b2zgIj8TgAqgiEZ6WYTWlRCJm0hKabO8OEnrKj4/j3LXgKkGB8xqcP481TUxYtz31yMOnfnMRkK6E7d7t83QwHejBkKYCjAWw9ytzVDAdm9GApw149YumMBhgLYO7wKMBTgUZChAI+AHjbP98MUD6fS5U0Dioq33rWwcHHhHzQUKxQgsE4+VkGkyujSIEWXsddvuCEUENQ0vPaWiW+WFN6+q3U45nAFvXoZ9oCMHwa17Ye1AQWWKSOgSUinLft/LVhIZyx7TXnxsDofoQBVVrBqlWwvtdHZR8wacOQhMhKbTPWbrbwf/PIdChA3+lV6DMaXsyD36gsMHIZGOdKm+h09TAmoCpIJGeLFxfmLTAzsL6NfXwmKIqa4zj7AvmkoQKyDLItXNe2H50BNDXDckVLOdujKd8HLTAGaIvqrgk9mm/ZME2vWWnY9e/WUsPd42Z5mXhfrTJf5JygZCK76FpnZMxE8+ATU6+4GRUuZJ9v1SHwvlLiGT/+de1BC0YCxB6iYO81A4wox+iYG74HqgRLGTpLx9Zs6dj9PRX2i6w/wxVvzYuDS6SBUjRFD5qUn2w0Wa/sfA2yxqz3duxkQkTJ3wYCwrGLRaybUoITh+8rISN33d1sMVqFh/UwBeyr2m74b3p7evL9teJiiJy1EpAzSUx+A+d2ilpfFLQvaltshtXwF1IZVSMbSkENhxJszaIi3fWta2X1/LOy/P+Z947z/96gFTjxaRSLT0r49ogHMvEuHk/yTIvzXrsReZ8XQ9PjGddfFQt/RK/+Adc2dh6jE4GSPsIz4zb/K+RUMHXYavpg5CvFEGLKlw1y8wN5m66NlRL99FfqKpe1nCtiw16pqBM+4rN3fj5wHLXABMXtCTWw16u+8DStXW6iuAkT7dPSmcbtQwL6TYO20L+JG9ukIxd+yqJWy/6aJt6/lfgOhQ0HM6vzt+w0MHS4f8EMVaS3T4fc7omj45g0T6xZ2/Pu0z3AFow6R0NjFWUm6o6nEUgLKnI8QjEYQv+dmIBGzD5MrFKCMGtfh/UDwyMlIDxqNpJp9OvuQpeLbdy2sXdDWao+LVNumo5fO3YQCusNK7LM77mPDsglt+SKknvxX1tPuKBQgbzEWgaNORUPG+bUwHy7imuaziQHaVUuYmesUfPFUcX4b9hsnYejeEuJFmmEvH+3sp30wFOCn1nB/LgwFuDfbdAuGAhgK8NaD3G3NUEB2r3IKBYjfcQFFQ9oQMz256x8s7V2AoQDvhpW+B4YCPPYAhgI8AnrYvDsepng4nS5tKtaTvP1esVZ8lzb3tFExQwE7bitj552A9PqpUz1VxOXG4mHAmoYk0ikVjzxRnAc8Lk+5tbh42H3yMSpi6XTRQwHiLbqQqmHWpy2Dq6vXWkisn2U3GgH69pEweCAwbqxsDyyLh2r1XVgnVNy8igf5qbiKfz9pQBHra67/vrT88LTsgehNBwF221nG9tu2Xe95c/NyDAVUKzqMl56E8fUXdnW1Q46HPm7XNmuQZnuYIlsq5i+U8N6H7b8PfXoBxx+loCGmQ1XbXqhalw940kQ6A9TVWXaoQJKBPXeTsNfuCuRABpLkbiAy1/dDHNfUNTz0ePsB3L12kzFsmAU10L4uht4y08TLb3R8PsceriAUMaCo+T3nXHUq9L9XSxlknrwP1oqlCJx8PhL9R+R8I70Q5ygG38S1Qrwd73RA3O15ZQsFiNk1mhfJWPBq7nbf5nAVH91vwEi1P3KwBtjuBAXVw4AEOh70c3vOucprZgaRZD30j9+DPvczIBiCOnZ7aLsciM+miSnRLYw9SrbXLHfzEYN51QHNvuY2iwG2TjYW11QRWPPyEW0vrlFimvDO2n/ThykB6IjUrUDqgzdgLpxnHz4wcBCM/U5C/OWpqPtqkX1d2vyjjB4HY+JkTJ/hbIB3w/aj1y+BlDF0OxS35lMJ333grN6yZUDOpNCv91IM7fsZUl98Yu9W2Wp7KBMORZNWnZNPbF8bkpF49C5Yq0Uqpf1H7tkb+sRL8cU0BaYs3qW2IKfiMJcvRa/REkaPmofM7Pc7DAUEz/o/JGr7FyW4mRNgswI1ioHMR+/h2yeno2ctUFWNrFPQ287iBwRalk2QevdH8IeXoiGde31Ce5YHCRAzd7uZ2tyeucfU0PidaS9nIqZJFwN8IquXybG0TkTSsPgdE2vnt//W9RwhYdxBGmJIe/7OufXOVT5iJKCtWAJl7QokHr7dLt5hKCAUgTJoKDaZ6KDN7uVRW0GbdFyn4ZSQoeGThw07nLXpZ/QkGdHhZoc+5RoKEAb2UhJ6AonH7gJiG2e5EP+WLRSg/eAQqDvthfrMxllUcrVzpf17TVCEBg2kGgtf853OUJEJFO73ROFrWNgjMhRQWO98H42hAG+iDAUwFOCtB7nbmqGA7F7lFAoQ12RDF/fSBqw8P/Nz19sqszRDAZXZ7vmsNUMBDjXf+WA2br7jcQwf3M/e4tJzjsPYUUPBUIBDwG4oVuqhAE2RsXaNjOdfcvYwOd+Em4cCQkEJ1dWwB3i7+1NbDRxzxMap8Lv7eJvuXzwMqGvUMe1lE8tXdn9d8123Qw9UMGCACUmyUBPVsKYhy8hUvg+62f5MU0YkoODZaQbWbLZW7uaHHjJIwrGHqUjrQCzl7lxlSUEi1rKedV2dhP88q0O8FCcezAcDQCAgIRBo+b+L2eDtaYMBjBwuYb99ZGTMjt+6LMtQAFLIPHYnrLWrbQdl+91g7XcUEpu8Bbn5w5SgquKDjyx88VXn34WLzlYRS7V/6y6oBvDeBxZef9vEhtnShwyWMGEvGbM+M3DC0bK95EW+k8MiyBCPS/jqaxPzFlgYMlCCGKwTxzasTLvBS9He69YqePbF3EGg005QoAb1bhuU7uavp6Pd2+vQWwkYy5fC6j/UXiO5mB97OmHxCj4kfDzbwLbjFISDFmIpA5Lctb+R4m+cpichptk2IGbBMJGWVHvQWfz/bRpSimgqls4AVn7R+bH6jZERXwus+Kzj78uQXWWMnCjBrNILOmAn6hWK1dnrX4tkTqahHqmaPqgJafZAZmOi+wYVLMXCOiWJWjMIVe/+gSX7YYoY6LeAYFBCqjmNsBG3R4Qzq1dAidZg0WILuhyAPOt1WHNmwVo/BbyYqlwatwuMnfbDy++5nyb7jJNUyOvf8o6oKha/aWUduG3zfRIzqax/I1axDPQYmMboHZYj/f50qNvvCnX01miQwo6nfLentpd1GJ/MgFW/DuaqZbASCYjlEKTe/RDcd5I9SPr+3TqM9RNW2LMUNNZh9K7r0LPpXWQWL8gaCtAOPhbGqO2QkESYxD8fMXsGJAspGIhAvJEi/ua0fA+r002w5n8J/a0XYa3/HZDtzDeEAjBqawQOPh4Nllgbvnt/B4o3aKSkjEBQttdx12UThsMZO8RMHYk1EhLrLDQtM1E1QEa4l4RofyBaraC+KdVu2QM/tJh4Wz1iJqDPeBXpqY9BNo22s34EQ5CqaiHV1EI3OwhlhKOIXHQV6tMi0tLxJ6CrWP6hhVVz25ba61IVdZ0sU1bOoQChJf4eVGtA6rWpsFYts68RIh21IRRg1faG3Lc/AhOPRCoQbfM70Q99yG/nYIfeVsj4amrXfo90tT69R0sY/gMJCdNdoK+rx6uE7RgKKO1WZijAW/sxFMBQgLce5G5rhgKye5VTKMB+5ijnf4ktdz2tckszFFC5bZ+vmjMU4FBy2mvvo6k5jslHT2yzBUMBDgG7oViphwLEA85VK2W8ML2wDxg2NMWmoYCx2xsYNlDF3OZGbFfVA6+/aSKZ6r4HpWIg9/wzVDQUYX1E0W/mfK3jhZdzDw52Q7f1vMtgEBCDlpCN1lBAIafftN/clzT882HnD6jENmIN5nXNSUeDw2LwRLI0zF9oYcZME+O2VNDU9P/sXQeYVNXZfs9t03a290LvRaqggIiK2DX2oInEGks00d+YmBiNYow9akw0dkVRk4gtFqzYBUFAQPrSdtned6fe8j/nDttndu60nZndc/6HJ79w6vt999y553vP+2l68DpQMZuBvBxfDnF7ioafny+gxRVYvnsgkgLoMy0d2AHPx2/qB+6mk89Di5TaLbjd9TCFYlBWxuODT4M/C1Qx4LSTKNGiu92tJgEH9nN6YG7LNhVjRnGob9SwdYeCxiYN5/2Eh80eG8lxotEgC68TZGiQTFZVEM7/WnhNwPOvGNtrrWbgnJ9wUIlxHzf6YFPM6fPQCi/sRIKsBL7JaLTPcOvR54zKb0d6uzvc8bu2E4mI1etU/Li98xnPygDOP4tHs6NvSfWe41N808wE7k/ehTs/Fx+qDTjeUgBp+1Zww8dCHDUemsnSjRRgE0Rse1NFa3Xf773hswWUrVPRsKcPWe+xBKOO5WAqVuBwB3+2ooFfvPvQDwNMKrxuDaIae1KAzSThQDmwZp3cQUyz24AhxRwWHMWhqc0DqyTh5f/KGJ7vwdChIrhDgVgVBKX7NWzZFbpM9sypHMaOpukifHtDqiRi46uHcpkHMALRqNoNgbMJMKf6pLIFi4LZv+Dgcjkge7xwSyl9Bj4D2dck8hBULwSiATTwSskvgglOjwIqq169WUN5l/cmTzTMvcwL51P3QnU5u5MCTGaYf3oFvCkZcCB0skSsfJCmphEtwKct5TjgbcVBTxsmWTJxuC0fWZoJ7dw/Kl1v8rTBufxxoJkml+9deKsF5tMWw5s3BC1KaAoRsVpfsH7pO1vQ8xdwILwGWdV0BYecdHPCkgLomvQ0Qt4mCK1N8Lz2LOTmJhBR0v9oOkmAEjn9EwKEKbNhWngaGtwkKGmDvsNIK48D36po2KvBnA4Uz+CQUgy4ucDv8IFOCmj3qxT6m4PS4kwCtLZWCM11QOEwyG4PZFnRyT+xUuUJ5tvJ9u82QcKPr8tw1PbfzGdcQlPp+E/h1X+zGFgjMVJActuTkQIisx8jBTBSQGQeFFprRgrwj9dAIwWE5hWsdjQRYKSAaKI5OPtipACDdn/lzU/w8RffIy3VBovZhJuu/insKdaA+U4NdsuqRYBAsByVEXTdb003/6jh0y+NBaqiPan2QHJ+HoFldCNurvxGH2KWLReXWadg7TehH5iHMsdfXcbrMuP9Xbwegg9WySjdG/nIwUVnIx/DXw9nncbr0vxeL9EDom30gqQNkBXfrflYFlkhWP4fGU3tEpqHbj/SQAf90+5XukqvnuDZN5uiQuCURXzQ+Xm9vnW89Z6Cat+Fd4wdRfRA85rvgxNVcrKB7EyCiy/gISTHmX9UzUVkGZrHBXAcYLb22bfLDZ0QsG+/sSlcfhEPSr7oWqjvfbBKQVkZkJcL1DdQv+ysMWcWhxlT4/Cg91hSfYMWUrqQK34hBPVVY6h11nKpCn501WGHuwk/Ousx3JSKKZYsjDdngt4ITaTS5tB8zzIIbJbYz4z64pPP9w7gnH4Sh6ElofmPWlUG18tPQnM74Z44BTsLcjFc5WH75H19IfzkmfpNamJP71gYDSxueUNBc2XfewwNNu35SkVrReB66UMIxp3CIWcMZ4gEFXt0B9YIVC1m3QYFa6lagx8zmMw+0iFNGdDcqmH5oTRBlIxIS7gp2NPTgbNO5WGzdr75aQqJ9S/LcLcExpj6VlNZ50RTiwhMdmDmxQJ0cYwQi6YAxODPM68DkN3AwY0K0ksIskdyULwA526CxgtQK/aDmK3gsnKhuVwgaRn6bGgqIKr8Ql8j+qskjkIiDaobt5avwV4/IP82fyqmWXNg5zqB1Fqb9DVp9TWQy/ZCa26AMGo8uOwCaIoHXEragHgu+5MMGqKLdq/udYMIIpyvL4Oyc0vfXUkmWM65GCQ1o8MXjYxNfVqm5/yEpg4ilB8Dse+fP4feb52/UY2ME+06/WFD+nva6wEsh97jvvd6fNcdbRz7sz/ZrWH1E/1D9qPkwpyxHBLs52F/wh2TsfrjuYvJxAdtp8G//QctNGzhISLQ5WAqxJasenwQiMXT3/4VF4u+jaIUjznEY0yjeLB64SNAY2KsMAQiQYCRAgyiV13bCEVRUJCXhdff+wIHDlbjukvPRkVd8rMNDUKQcNUKsixJjb9F4rFug09iOx6lXSlgwgTgP+YNWOM4FIEFcF/mfJSuM8dULeDyiwR4FK9hudxoYZSfacH9/3Qn9aHwSccJunT+1u0qDlYqaHX4Du2zswiGlhCMH0PgVqIv2S7xPNZtJNi4iaYvoIoBBC1tviCwx6PB7aHyUVTWn5ITDkn7myhRQNNzys6aCYwbq8Lt9U+EoTe/3S5BTxPQtRTmccjP5fD2+8aelamTCU47iYdHDZyuIBpKAaqgogZO5HM2aIFFCQK6bopF0HGhN6HpTXeR9ykdqDGUM+56wyLFLGLZq4pOKjFSzjyVR0aG0u1mOc3PvmYdwYZN/m1KlQJS7HJcJY5pvvg9ezh8/LlxAtY5Z/BITYtc4YDXONhtImp2K2gY0oxHy7dgr9rUDW6RcPhbyVxYZQnCISllevvRxXnBcxwUWYOghBYYN2LPQHVETsS2HRq271IxZiS9GU2g0hQQ9PanAHgEFW00uEY4WAgPUeWhhXaZv9vQ9Lbzhg0Eazf2tg9NCbFgHoHbX1J4PwvISJHQds/vukU8xCHDIZfvh3YovwXdt8xzjoVn2ny0ab7oqlngcfAbgsoAftw+VMFEHi0VWt/pAw4nGLmQg2Lt3/QBdE+GyUfm2OSowxRbNlRFQx/bYCRuEpe2NO1D2QEOn3xG90maSsbnMyOHcbBbCMqqVdTWaRg+hGDBUUS/CV9+kIT07Ada2GU0r7PW/TcLJfPo6QN2+T9aovu6qwHwdMlDLdmBvCkEIxcROGg000DhVA52q4DmgyoqN2vIHk2QPZpDc4MCRez7vUhvhbVLhtMb5rSkWkVQ6Dw0YghKxPO9d+j7SJMFbPrR9/xnZhBMncQhM1OD1setawNLCKsKZwLuq16Pjc66gO0fLJ6DfC1FV11pL/QZoHsn/T1Cj0polgH67zazqLMXW13RV4EJa4ERNMpOM6OpNTHTB/RcVn6GBa119ZDsdijVlVAq9kOtLIfaVA++eDj4vEJwRcOguFxwmVPh7WLLUCCie6DRdBDZqSY0Oby66kK8Cr2xXFHfv+cImXYT2pxeuOO47njhHY1xms9Q3wAAIABJREFUaeo/pZ7H5teMfY+EO2bBVA4FMwhckfy4CnfwAd6O7kdVjc6kPgcY4Cbqtryen8RMKSAy6zOlgP5950ZmLf+t6dlLzzR4sRgnGn1GqhQQi3Cn2cTD3CONYDTWGkofNAWsV9Hg7MfvEapSbLOIaGgOLZ1rKOtidfsfARoTY4UhEAkCjBRgEL3V67ciOyMVI4cV4aMv1mHT1lJcf8W5YOkDDAIYg2rJnj7ALIr4/CsVO3bHh6fYTgooKeKgjqzDndVrdSuNMqXi5vRZ+PKzWPwM63SEC8/lIZpk/TC6vwo9GPc4JLz0WhgR3P6aZJBxph/Go6wcaGj0BX/8SX8XFRAcdzSnH+IbPSA1sjyLJGLFWwrqG+lVI4LKKk2/jdlXSUslyKAXcglQWKDhuPkcPIf0fqk9nJwMmybA41WRniLh0afonLv3SNUPJk/g8eY7xg5vp0/hMO9IAtGkwGRS/UqjRoMUoFhUVCltyBYs0GTApoj+/dmkgfdyveZBSQE0cFEnO2HhBbzeWIqfpA+HW1Eh0Dy6MXg0uqUP4CU8+1JvvAPZ86gjBIwZI3cjdVhMPBrreazfpKKxWUNjo6YrPbSXJT8VoHKemKzFiM/SOnSv27WbYFUIqiw/OYVHRmbkpIB0i4T1z6lY3VgNKRUYfb6G+2rW+536Y0PmI02mV3IJqrk2vNG0B3vcLTg7YzgmStkQPbEnBtAPxsqDHN79qPNZW3QMh5ISDS2qB/u0Fiyt8L0r2svSwsORp9lgVsNTO6CBUyFASpJTFnHIzaN2CP4wWIkM7b1Xoe7e2qdr0AMxwhFwZ10CV/4IPQBlkng49nPY8V7fB/2iGRh1tIDvngpc78irBZhzNTjh7TdZZhoM80gy/lK5DqVdItAzLNm4NucwcO7Y+47R5zGSeiZewIerNFRUkA5SwJSxPNIJQdUWFYWHE2zar6KmVsO1lwtoaPVAk3k0NfH43wfhBYILcinJjEOLUwHPd38HmSUONes4lK0NQHSjL2kv0Ykk7SUln6BwJpB/pAangfQS9JcYfTeufkIGVSboWqZTooLJG/LvqECylTQdy+7dBN/2WM+VFwtoc/fvPk7l5zkLcMGej/p0mQX2QvwycxK8ruC/D+xWHymgxRmeL0Tiu9Fum+jpA7qut6tcN91/9ZQIrladXKpwAhTBpO/DsfjNEwj3wZI+oOf6s1JNaKWkgADk3Gj76UDsj5I9tWYeW1bEhhiQO4EgbzoHWTRGGhuIGMdyTSx9QCzRjX3fjBQQGcaMFMBIAZF5UGitIyUFhDaasdr07IqSAug3YrwKSx8QL+QH3rgDOX2A5nJCrT4IkpYJ7pCa4cCzYPxXxEgBBm2we2857vjbC0i12/QcfEtvugTZmWmMFGAQv1hUS3ZSgEUU8d6HKsr6kCGOBW7tfbaTAuh/T54tw2xTsdlZjxMzS/DRZzJaWoMHYSKZHw26ZWYpejC4v4pJFLBhA491PyTnQcukcTyqa4H1G1UUFdKb+AQer/9DqeICghMXcnDJ0Vtrhl3Co08qcLuIHnQxWqiMf2E+gcmsggaJG70u0GDpRkcdVjbvxwxrDubbi/HDLjfWrOqUAeZ5n4QxLcNKOFgtHD78tO9DuNxcglOO51HV5saCGSZsbK3FYdYsVLudEL1CB0kiUlKAbFKx3lmDT1vLsM3ViKNTCnFq+jCkyybwPXJqa5IGzktvsHVHjJICKCni3cZ9eKl+Z8c/XpA5GsfbSsDHIAjc9TCF5tx+810FVTXGbNmVyMObCCwij3JPK7Y7m9DsUpHflokiyYYD1Qr27iA4aaGgE39Agj/j9PaVKBA9uBXtHPf01r3byePlEG520VQJbiWyPK40qCV4RLz5fCMaqYY3gNFLVPyrdRPcVN+4R7FxAh4rOVpXT3mmYSs+b63oqPHfEYvgdGi9SD5mkV6FJXB5uvdH7RwO4Yoq2Hy9GtiyrdMnqFLA0XMJfvTW49aKNX4f+78UzMZwktbttq7R/YHWo+oEH3+mYH9ZZyuqOPLLXwhoaDH20Z4uaXA99zdoDfV9Dt1OCiDHngF54iwdO4oXaRHww6vBD/kt6QT5Y3lsov7U5dGhku6TzuRRtUPBpHN5tFDN5hgW+sy036glZg1ftFagwevBBk8Ndro61Shm23JxbdZhA0IxwG6R8NxyGbKX00kBHKdh/gwOm18+dAO+gCBjFsGaTQq67lcc4ZFm4/D2ShV79xvb76jp5s3mMGI41dD3BlRwybRL+OqRwEFmDhwUD+Bu1mBKIRDMwOFXc2h2GQuyi4SHq4xgxwe999HCaRyyJwFeIbQgd6DDKPoc/vctBS090iHMms5h8qTAKj+xcHNKGtytNeGWg6v77L5YtOGewiOhuILPgpECgmMUixqJGIRjpIDgv8ti4QsDpU+J40GcHDYsD/6bIZQ1DzmSQ84kAkcUv91CGX8w1E3E/Wgw4B6tNTJSQGRIMlIAIwVE5kGhtWakAP94MVJAaH7EagdGYCCSApSqg3C/8yrU6s6zUEoKMJ1yHvghIyN2h4efeg1PvPi2rtTbtRw+ZRye+RtVHB1chZECIrQ3UwqIEMAwmusH+gKQazfHnJRBDyXpwbvHQ/TDZ47XdKlJhZ5GR1jozcgVbyto7iMXLZVyjZWUeFdSAF1KehrR89KXHYx8bUagmTObw/g+pOSN9BFqHZGTsOItDU0t0T3ECXUe4dTPyiQoyOGw8pNDwY9UgswM9Cl9SgMaY6OEMX3uNJnKzasoKw/NR3RVaxNBbg5w+RIOogics3sl3DQ5MpUkp7dc3cCVwuHw7krTbwXnD5ch8BpEjkdFOUHZbh4jhvoCx58EkIEvKSaYc5QKzaTglopv0Mg7kZNN43Yaxkjp+GvxbLS1KXpwPhJSAD2QqONduPbAF91MOdachj/kzQBxGbuVS0kBksThnJ0r4TqEBe3QRHi8MuJ4tLSGFugx4lddD1MoSebzLzXsLDVmzyWLeYCXYbZwWFa/A2807OkYktqQ/h8t81PzcX32VDjd3VUFAs3Pw8vQRODFuh04I3040olJV0qIZuE0ES+8Yuy5p8oUPz2bh4LICDX0mUkVJbyzugpl61UMmc2hcVgzlrfsCLi0R0uOQhpvwu/Lv0G5t62j3l8KZ2M4UrsF+nkioK6OvpuA9HQVKg6tT+PhdnKwp6BDlaMvLNvfqQI4XVJc9vB44dVO37vwHAGmVBlP1m3Bxy3lfrs6MXUILs4YD7fLGMY9O6H+YzOJqKlXsXmLhtGjCIYUcWh2yNAQPHhBb5ymmzQ4HrglqNu0kwK0sVPAHXcmWg+lZrByInZ/pKJxX/DnwZ7PIWckDzq1hv0qMoYSPZ915VYVuZMIMscCPH0eCD3c9+gB7GgVPR+uWcM+dwsKBRssigizLOLdr6vhdKjInQms5Evxo7NBH9JCBCwfsTCq+wnFkP6JNoEnGEZ2s4Rnl8tQZB8pgKYPOGmBgB3vKGitAobNIXCkE2za5iMFpNuI7tMOjwyFqOA0AQfKCJqaNdTUaXqqAWeXYHJ6KpCTTZCTRTB8GAEnqNDan6sAk6PvkmBy0nq+P5oahNMw+mQCU54Krxbcr/X3gSqg9CMNzX7eu4IFmHw+DxcJba8KdBhF8fnuew1bd3R32AvO5iGa5aj89g1m4/Z/p+l0DpI2/F/51302oepWd+TPgsxIAUah9VuP530poWLxTCdiEI6RAoztPxE51QBvTM8HODeP8u9U1HQhUoazbGsOUDKLg7UQcAWTYAtnANamA4FE3I+YeYwjwEgBxrHyV5ORAhgpIDIPCq01IwX4x4uRAkLzI1Y7MAIDjRRACQHOZx8KuGDzWUsgjJkYkUtQUkBtfZN+0TvcQi9x9SQVhNtXvNsxUkCEFmCkgAgBDLE5PViVTQpeqt+OqwonobUxvACEkWFNAj08BmrrgMpqDTar77CY5jjmBRXeQ1eYww3cmwUR/1up6n33LJrmk9d0uwGLmQZ+NT3gEM3SkxQQzb6N9EVlofPzNbgD3HQ30kewOjT/tcxrMBFOz3lNg05Pv6DBFcMxg80p3H+fNI7TfXHdBp8fWK0Eudmkww/99TukmOD4BRzcBvMW9zU3evjldor42z/loCkDevZD4yFUEj0zE7jqCmC9XIl7Kzd0VOMJh4oqDdOkHFycPR6NXi/eaNqN1Y5qTDCl45yMUcjVUrB/swSajiArg0NltYrqGqC1jaoQAFYLwfChHNxmJy4r+7Sj74I8wCT5Uh1QUsIbI0/Sbx5HQgrQRBWvt5Tijaa9vSB7augCmD00X3Pw55XmdS5VmnDD/t5BD3rzsVhLiXoQpudhCs3B/o+n5KBByxOO5VFYqKJJcOF35d+giV599VOoqenKRcLhweK5yJTNQdeQmiJicemH8EDRSVCvjlgEj8OX45r6nSD4coNHEqwwiRyqqnn87/3g74yfnsXDbFXCvvVOYXHzClItIvZ4m7GmqQaZihm1xIm3Wvf0SfT6Vc4kHGHNxxpnFR6p3qQjPMaUhjuKZsHT1t2nJF7Aa2+q4AXgjJN4Pd85LSZexEefKZh3BA9BChzI8xAFdouICm8bVjYfwDDJjvmphWhzK8gUzNiyTcWEsRwcLgWyyYvbqtZgv6fVr91HSam4OW8GRA8f7hant6P+KQq8jn2ouZ4zrDwc990cdPx2UgDGTweOOQ1tim/OlFiQZhXwzaN9+whNPUBTKchQUZRjhmQhcLdqcNRrSMkjGH8GB0Ek2LxCBlUPmHiGgEZH9FQDqC+/7ijFK/W7sLRgFibxWdj+lRe7t3jQrHigZHhQdIaMh+t+6MDiX0MWwEb3pSjoc9MgtcBxOhkifyKPxjaPof0uqGEMVKC+/eGnKioqO9MHpNkIjjqSR2MVoIkavtmg6ESA6y4RseMTGQ37NMy4iEeLx6vvTTRFhiITaCqBzcLpv68qazQMLeLh8WpwuTUIEiV/qobXRVw8OA8XNM/0uFN5COkqFDH4PtQOh6jwaNhGcGBN7yBexgiCYUdzcIVIYAp4GKVxOinotbdoyg7fDIaWACce50sf0J9F/21tVnHR3o/7HHZBSiEuy5xgSAmDKQX0hpK+s3mIOlmyvELF+DE8GluNkbGM+kMiBuEYKYCRAoz6b1/16PeNlRf1FGI7P1TQ3EXtyEj/pnRgxDwO9kIOTjX0VDBGxmB1uiOQiPsRs5FxBBgpwDhW/moyUgAjBUTmQaG1ZqQA/3gxUkBofsRqB0ZgoJECHI/9FWqT72KLv0JMZlivuhnEbAnbLYKRAq747f34yYlH4eTjZutjdP3vw0+6Elf87FQ8/fK7+OQ/f0NZRQ1uf+A51De2wCSJ+PXlZ+OYOdOwZfte3HzXEzhy5kT9/29udeCWX/8cs6aNQ5vDhaUPvYCNW3br554XnrUQ559xbNjribQhIwVEiCAjBUQIYIjNKRtHlmQ8VrsFNxdPR3Nj9G/S0ilRCdXPvlRRGuDG4Kkn8LClKDDZFTihII2X0OKSIfaQDe9refRwm+a4lhWCtGxVl1an63M1iDhwUMPW7aov+EqA7EwqvU57i94hTrxJAeefycOaEnnO7kAY08DJFqUe/6jZjCFiCm4umA7VKWD5v2NHCqA3W6niAi11DSrKo5gaYs5MHqu/17D/gC8waDYR5Of1TQqwWoAliwW0OCM/zKd4qrKIO+8L/ZlrJwVIkoYbb9Zwd/la/ODqlPimAfo9hySd/z3laPx5x0b86GzsMG1WJvCvEfNRWqagbrMNDqcvHUFaKgdNpToAPuJOdrGMu51fo1Lu/ODLygDsNoLqWg1ZWcBUcxauz5kKUeGQahNR29QjSbOBPUmQCN5r26fflu9aUnkJlBTg9iPz7q9bqhTg4mXccmA1Sj2dkiE0OLu0cBY0Z3dJIwNTC1ql52EKPRxwtgl4/X+dQaCencw/kkdxsQprqob/K/8KBzxtuiZAMNqDnRPx/Mhj4WhRAwYj9YCEFfjZ3o/hgBdmwuORoqOQo1rh5L2oVZz4X9M+LEorwSRrJlpbacAv2Mj+YdAUHgcrCD79IvA+etqJHOypKrgeucODAtujgt0u4I/lq1FisuOequ9xmCUTgsYHDcqemjoUS9LGoRFu2AURu90toDdhaQ5sSeuunqArEVglnTDW1ObtwIU+b1SJRlaVPm/Zm6wc/lyxBltdnc+a/sM3ezyOtBTAogmQZR85gzcBzzZsxUcBlAJOTh2CJenj4HZH5x3l2zP09N+Gi54+4PmHodXX9tmmI33Awp/AO25mt9zKJpGHt5brM1cwJQU0qC79pncOb+n2Wj7iSgFtXi8Et4D1L/oCv9Mu4uERqPy84aX0WZEGS52SF5+0lOHE1KGwekSUfqzhsx01KJZSUMm3YvhiGY/U/6A/o1mCGX8vnocu22LYE6G3t0mriI2v+N4D9gKCsadwaIsC8czIpOh7qHQPhy+/RodSQHu7FBtB6yHizJAiglMWCqj+UUFTmYYxJ/K6XL+/QpXjeK4zFYORefirQ99jKWYRu1fJcDYBbTUaqBiALYfAmkkwbB4l2MiGFQLax6D+KnlEfL+s97t3zCIOUr4GhTdOMqD99nUYRTQediuPfWUa8nIIFbuArHmDkrvCxa2vdoKZ4OWmnXi7sTcBr73di8MXgriIofkxUkBvtIkqYvtODWu+9+3d1N7XXi6g3mDaFiN2T8QgHCMFROddbcT+g6EO3acFlYfVxqHxgIaqLSpczRo8bUC76BP9HSXZoKeQyRnLIXs0B69Xgyr2byq9wWCPvtaYiPvRYLdJKOtnpIBQ0Opdl5ECGCkgMg8KrTUjBfjHi5ECQvMjVjswAgOJFKDs3w3n8n8FNXekagGRkALmnHYNzjz5KNx45fn6OeUZv/gDrlxyBk457gjs2lOOC65ZipUv34eqmgacfdmtePL+GzFn5iR88uX3uO+xV/HeS/fg7keXo6GpBXf/4Qo0Nbfh3F/+GX+/8zqMGzUk6NpjUYGRAiJElZECIgQwjOb0Y8AjqChOscYkfQC9fbnqSw2le/s+wV98AcHX8n48WbsVBaIVTw5dENIhGlUiqGnSsKJyHyq0Nmxz1SODN2OkKQ0TkQelLAXfr/EFgdpzsisG5WaNwBpvUsAlFwq6PHc0UjH4Xa9Zw+/Lv8VB2SfBfUXOBBxNhuHV12JDCpg3W8C+AxpaWjUIPJCSQpCRDqzfZOyw3mwCxk4GqipUVJb3lk6fPY3H+5+ocDh8q6U+UVxEbzn23f/PzuNBBG9IwTV/eJolAY31HJ5/WUFjZ7pqI66mHzJTdktRIXDhxSrebd6NVxp26211KWyFoLwSGG9Nw+9HT8SSjZ0352nAJjVDxTx7Poq9GRhZPhw/bvetmRIjps5W0Ki6MdRqhWhTcPbW7rcK7TYgLY2AI1SEXNODeP8YMh+KWwubFEA/qB2SF5fvW6XPQyIcLsgZDRsnYqYlF7zDmPQ9JQUonIp9nla83lCKr9oqMdeWj9PSh6EANhA59qQA3Zd4DjYT3fcUNLdCV1VIS4WuRDFxHIeUVA0qL2NFaylWNJbq5CWZ7kW6gEngOVLbHpdWjJ+njekzpYIqqdjsqceyhu043l6MRSlDQIVY1rgq8ETdNizOHgmPpuqEgYWpxSBtXNj+TPddt5vg+42qThSpqwdycwgy0qDfNvaqVCHA2DMbyPmpf1TxDj0FwG+LpuLc3R+gSLIhn7f63e/GWNIw1ZqNIlMKaAqKbM0Cl9N3YK9jrUT/8J6+Ryu5NtxQ1lulgr7P7i06shsphabS2as14eYA+b3vLZ6DEjWlI8e9oY3BTyXqTWZOhMns8yu3S4NL9d3wDlasxAvt07egblnfZ9V2UgB3zmVw5AztZRN665uXeWz6rxyY+dL+iB8yjTUbmHyWgGanFxA0SIqgpw+gz4DCa3DTa4RRLJQYQFOpeGSqpkGAZgEbP3BhR3MLiuZq2FFQjfdb9usj/jF/OsYJmbpaTqTFIvEo+xKo3tJpkWkXcTq5qb+KWRSxfiOwYZOm3+bvWWg6jWsuE3RFGP0GpwJdXj8Ugkm4a9H918SDU3xqEXRMhQZ9iAaXIoc9B5MqwlGloXqrpqe3SMknyBlNkDmSwBFi6gC6NiOHUfSZpwSsmP1GMwiyx6RgecMOfOKHkHR/8ZHIUq3gFWPvSkYK6A56u0rAy68p6CoEcexRHIYNV+HxRufdk4hBOEYKiI5tDT7Gg6YaVRyi72Re43TlI52kKRFd/Yr+L91T3U4NxOxTvwqX5DpoAI3BQhNxP4rBMgdsl4wUEJlpGSmAkQIi86DQWjNSgH+8jHyHhYZ08NqUWG+ziKhvDv1CVPDeWY14ITCQSAHe776A++O3g0IpzTse9E+4hZICnlr+P/B8d4XT225YgjNPOqqbMgAdo6tSwJzTr8Fjd9+AKRNGYn95Nc6+7E9Y8+7juuIoLYuvXorLLzgFhfnZWPLrv2L1O4/pf0/Pl6ccdym+fPPvOP+Xt+P+W6/CYRNG6v9232OvwGYx4+pf/CTcJUXUjpECIoIPMQlKRzilQdOcboDRJmXQm1779/O69HKwMnWOF49bvkKz5rt9dlPeNEwXcgxJXNNNw2uR8eddG/FNVW95FK8HuD5vMmbZc3VZ24p9PJobaA7d6B3ixJsUcNXFPFrdsTuoF0wEyxq3471mX2DkmWHHwlMj4d33SdTTB1BCwA9bVGzd3j10NWMqDYQTrNsY3J+OX0RwV/V3uDhjIup+tKGiqrutZ03n8cMWDbsP5X+n7x1dLr+PVAhpdl9u9DZ35NEgiyhi0xaC9ZtUlO4xEqLrfILaSQGTJxCcdDwPh70FV+79TK+gB9gdQG09cG76CCwZMgLnb16FNrUzyGQ2a3hlwrGor+Tx7eekQ9Z44SKCR+s24pu2KuRIEv46djru3fMjdrQ2dwxO88PTtAFdZbP/VXI00lUT7GEqBdDOnaKMGtWBj1rKkCZKqJNd+Ly1Ao8UzUOuYu2W+z3QXkJJATS41+j2wEtveuoMCRpQ5EEMBjmC7VM9/72vwxQa8FMUX155SfQFo2meelnRQG+VX1/2FSrVNpS6m9GoeDDenAELhD5vv9s4AS8OW4iWtr6DhhaTAAc8MEGA16NCkzTcUfUdMkUzLAKPh6t8Uvr3Fh+B0ywj4I3gRjrFgCO8nj/Z5QbMZgq7Co9M0xeEiqj/+hSvR6s3odiaggcq1+uKAarsU7XoWsZb0jHZloVd7ibkiVZ821qJBfYinJUyAprLWKArnBmLEsHzjdvwfssBv83vK5qDIs3WzY9dvIIqtOJPB7/r1uavRUcgQzHBqonhTKVbG4sgoGkHwe5D7+ARCzikjwGc7VrmQUbIsHJwPHI79Nw7AYp+8/roE+A5bC4cAYg3+q1vi4Af31bQEGS/GzKHR/4kot+W73rAT/2MkqFiQerouTSarkMycaiX3fiytQLLmrZjtDkV52eMRgGxwaZEbpv2/dqsCVj/kgLFDRTOICiYRuBQ+o8UQOeRIpmwe6+K1d8raD4ksmIyAQW5BKedKOgpDbT+YAFE7PHGOxAUXg806XYQiP7up4SqcNYZ7cMoSt6L1t7pDxHODOzztuipTuheOTelQFeAMsmCod/c7X0yUkBvdEVOwLsfaqjqksrswnMEiOboSZknYhCOkQKi9z1pfBdjNRkC8UcgEfej+KOSPDNgpIDIbMVIAYwUEJkHhdaakQL84xXt7zAjVmGkACMoJV+dgUQKMKoUYDruNIiHHxW2sSJSCjj9Grz8z1sxtDgPG7bswo23/xMf/fvBjrlc+bsHsfCoGZg0bjh+9ceH8dGrD3T824wTrsCKp5fqRAJ7irWDlOD1yjjxmFm4+doLw15TJA37nRTQ2NSKNRu2obq2AZIkIj8nA7OmjYeZRm6SsEQ7KJ2EEMRtyrEgBVhNPNZ+T/D9DyokCZg5W9PjdJvWk46D5/YFT5yioWVMOZ6u/xF5vBVPDTOuFCBZOdxeuQY/NDahuq4HhBqQb7Jg8dCh+LS5DLXNCs63jENGdQ5274pSxIreZpN4uDzBg9WxMDAlZV11iYDG1shl7QPNj9qNKjtvdzZilDlND1zu22rC2nWIKilgSDGn33T/dq3/A7Zj5hE0t2m6vH1f5diFBI83/IBz0kahYqMVNXXd648dxcHpAL757tDfE2BYCZU8DmzDUcMJ5s8FPBHefKbzlngRz72k4NRFAp5apsAbAs+A2iIjneD0EzmUVSk4fJ6Cr1oO4sOWcpR6mqG2SJiKfCyyDoPSxmM1vx+vNvqUBGiZYcnG1ZlT8OXHnTfwM9MJsg5rwR+qv+mot3hkkR7kfb2svBvUQ4oA5VCAqESy4YGiuVA9CFspoL1zjac36FWYRQFb3PV4tmYbHiyeC4+DBmqCPzntpIBmRwhgBu+2zxrhHqak2UWcses9PUf6D446UGH6EikFeYIFitI72N11EsuHHw/VhdBuRJlVPFj9A3JNZnzVWqmrKNCyJGss/i9rGuCKEIgYN6c+L5oJmjWvnhbhN/u/8nvr/PK88XiwaiMuz5mAB6o2oFZ2oVi04d7COZjO5/ZJ+olkCXT//8i5H0/UbvXbzb9HLPKbBoMIgCwo8NKUAoTQzAWgwUpEISZMfZP3SFjzvAIzfbZUDaIVmHw+D6fBnOlUWcHubIT7taehNXSmKOm6SPO8hRCnzkKtZg0KoYUTYDJxaKvV0HRQQ0uFBtEC2PMJUvIIBAugEBWuIIotQQeKUgVOJOB4DW2ajBRO1G/6RltxhFd42O08nI0aBCslBNAAfJQWYLAbephCIadKJVQZoKVNgz2FwOlW4e1ngoLBKUet2iHuWET9RfMwiqrdyKKqp+ThZGMqOeFMXt8fOGpvor9z6C3bUAsjBfhBTOPR0sThqzUKGhuBSeMJpk/l4VGi9/s8EYNwjBQQ+vPVceu3AAAgAElEQVQT6vPG6jMEEhGBRNyPEhGnRJ1TuN+xibqe/p4XIwUwUkB/+hwjBfhHO5rfYUbtyUgBRpFKrnoDiRSgNtbD8fjdQQ1gufg34PMKg9YLVCEYKYAG9k9bNEdPCUDLhdfciQvPOh4nHzcbVCnglcduxZCivA6lgNXvPK6fT9Dy0ytvxy8vOh0FuVn4+bV3Yc27j+kqAh6PF9MWXY6v3/oHzr/ydjx0x6/ili6gJy79Sgr4YvUP+M2tj+q3WjIzUqGqKuobmmE2m/Dw0msxe9r4sA0br4aMFBAv5IFYkAIECFj5qYaKSg3HHEvwdPNm7HY34bEh87Hine5RD3owe9Y5BEKKB3ZeBA3sSVp3CRJ/6NCcxe869mJZww49sFpZ3bvW6QVFKEU93m3aj/FSJuyOFNyePgfffh69A9d4kgKopPvic3g0a25dPl3UOP12NL2RHO1CJXCp/C2Vc9yzh8PX3/ZWCkhLJbBagIqq0Mc/bAKH/WXAlq3+2x4+ncBuB7bv6vsAjvKiRkxQ0HBQRGV177qSCCyYK+DZlw6RAKhSwBBOv90cqJx7Bo+UVJorPvLDvxSTiGX/VmCzEowcxuO/bxonlNBnZcliAd+ukzFxHMHkiRoaVDfobdwGzYV0Ryq+3eVAzXYzXC5gyhwZJrOGt5v2YIG9GAWCDV98BjhdnRhTvOYfA1yw78OO5V81bDTaZAUvlJV2/J0oAIUFnbd1F6WW4MLUMTBpfMSkgK64q6KqB6cE2bgfJwspgB7A7EUz/nBwtS6DTe3ZpHiQJvgUErJ4MziVBJR4vzl/Og7js+CVjT9fHl7BXq0FL9Vvx9FphXrgPJ2XQGXqh6tpMQuWR3v/oYcvXl7FWncVHq3Z3K37dMGEBamF+HPFd/jbkLl4qHKjnkrCygl4YehxmESywgp8GVkDtSFnAS7c81Gv6pPNmfh13hRIrsDvM7ouWmjg3rhVg88sVTRh54cqGvb6bkBTefThx3JwyMaJM3RqdlGDvOYzaI11UMv3gdjTwOUVghs2BnzJcEAyGyal0R/yAgfwPKcreBAO+nNA31f03RLOTe3gSCR+DfrxEy/p466HKdQ+1J/jNZfEt1TvGUbzMEqRFKxqO4hj7EXgXNH7jRoLXBkpwD+qmsrDJPA6eVaWNRBejuq+nohBOEYKiPy7IBbPKOuTIRBrBBJxP4r1mgdS/4wUEJk1GSmAkQIi86DQWjNSgH+8ovkdZtQijBRgFKnkqjeQSAEUec+XH+p/AhVx5jyYFp4ekZGCkQJuu/9ZZKan4teXnY395VU485I/YelNl/YiBdAzwDN+8Udc8fPTcOrCI7Ft135ccv09eG/5vaioqsO5V9yG+2+9GicsOBxvf/A1nlz+Dt567i+45x8vw+Vy49YbluiKog/+6996+4ljh0W0rnAb9ysp4JSf/x4XnbMIZ51yNESadJtKMLs8eObld7By1Xd46/m7wl1H3NoxUkDcoI8JKUDiBXz+tYbdezTMPQb4VcUncGoK/llwNLZ8a4LD2T38QYOu9jSad9N4gJTK2j/Z8CNWtZTrQQaah75nWZibD87ixTO12zDGlIFRchauNR+Orz8noDekaalvjCwUE09SwOgRBLMWyFjZvB/vNe3DZEsWzsoYEVB2na5YEKhsfPhrpgHo+joe73/YXSlg/HQZqeka9rhbMMGUiW+/opLixsehpIDyg8DO3RqGlhBU1WhoaOy06JGHE1iswUkBRp6kocUcUu0E73/kC0APGxI4fcDs6TwmTtDgidKtSYkT8fHnqu6vudkcRg7j8Ma7CoLF6lJSgDNP4bFhs4b6RgXnnM4jNU3pCHbS/MsHywje/aj7AWWKDcjP5VDfQNv5t8e4mV4ctNThvw2lmGLNwskpw1BkseDM3Ssh8oDdTkBfNTYbdN8ZIqXgwZI5aGtVdEJCagTpA4zYK1idZCEF8DyBR1Jw8d5P9CXRoCsNCO7ztKBGdiFXMKNEtAfMPf1IyVHIUSy98s3rOat5DRJ8qiU9g6sO0Yt0UcLnrQcxL42yQTUoTg1aAMn3YHjH9d8lDU3w4O/VP6DM0waHJoPuazcUTMGzdduQJ1owzZqDl+t24oTUEpyXMQqCIzjJLJI1eSUFq52VeLNxL6pk3yHJJHMmFmeNQjHsUb9hbmSu9LDPJIuo2qaC4wmyRwNuXg4rrzl9xwmyG0RVQAQBMjh4KAFN4CCJvGFSgJF5D7Y6RAQ04zyNqMMTj8OUqC8ijh1GGz+aesblDS+VQX/CwEgB/Yl251iJGIRjpABGCojP08BGjTcCibgfxRuTZBqfkQIisxYjBTBSQGQeFFprRgrwj1e0v8OMWIWRAoyglHx1BhopgFrA/dGb8K79qpcxhNETYTr1PBCTJSJDUVLAEy++3XG7v70znuex4cOnsGtPOW684zFYLSaMHFaE5pY2HD9/Jk49/shuSgG03Y7SMtz+wHNoaGrR1e9vvOp8zJk5SScIXH/bP3DMnKlY9c0GXS2AEgumTx6NNocLdz60DOs374SsKFhw5FT87lcXdMTII1pcGI37lRRwzDm/waf/fajXNKmUwpGnXYN1K58IYwnxbcJIAfHDPxZKAfRgc8uPBF9/pyKj2IvDJ0po8npRflBD2bbeOXmv/IUAh7d7HuGgiJg13HzwW5R723T55eoawNVDpdPK8/jlyFFY76qBrCq42HIYdnxrQXOLhqlHUM1cYMM3vH6rOtwST1LAWacK8GQ347r9X3ZM/3h7MRanj4Hg6X7TjAYjc00WfNFSgaPtBahyOyF5+JBvMYk8B7eLx4o3O0kB+bkEaRNa8PtKnwT9iaklOMEzDj9sMI5qSSGH/OEKTALB6027cZxtCNxtHD5fKUCWgWPmEzQ2AdW10TmAG1LEgSobfPyZiqIC/+kD5sziMGIYzZ8QvagNTa2xbgPBug2+dVBiwBEzOaz8WEVtvYbm5u6YZaQDBfm0DsHa9aqefsOrqLhiiQCX19ORf5gGmHlIeHZ56Prj9HbokFEKMjIIHB4V5TsEeL0Ep53A4x/utdhQ0YYylwMjLHbMyk3HjcMnoPVQbntGCght80i3izhr9/uQD+mEU+xloqLc04ZiKQW8RgJKiK8YcQLa9JQKneQOin8F58ALtdsw3ZaNo21FgMtHeOpaOEIgClTpwXcrO5kLPchSRA02XsABTytGmOy64sIBuQ1vNJTCpSk4Pr1ED8yLLl6XyI51cQhepEoSyjytGGpKQaPsgVkR4kIIaF8rJZxI9Do+ZQtratRvgNO9jJECwvcseqBITIDq0mKaR76vGcbjMCV8xBKv5WDFj5EC4uOLiRiEY6SA6HyTxMej2KgMgfARSMT9KPzVDL6WjBQQmc0ZKYCRAiLzoNBaM1KAf7zi8R3GSAGh+W6y1B6IpACKvbJvF5T9pVCrD4LLLQQ/ZAT4oaOSxSyHSAGP4r2X7k34OfcrKeCyG+/DbTcsQUlhbjdg1m7cjqeW/w+P3/N/CQ9YzwkyUkB8TCZLKkwWDt5WDZzSO5AU7qxogFJTRCx71Xfz32wiEEWgpbV3cCYvl+Dk4zl41dACr6KF4I7KtdjqatBJAW0OoK6h94xp4Gh+di4WphVB3JOF9Zt8c0pP89WlgeZISjxJAdddIWJ5/Q4sr9/ZsYShkh135M8CcXfaUzNreL1xN95o2ttR74LM0ViYUgLBHZpMrR5o4kW8+LIG1yFlhzEjOXyTuQNvtezR+y8QLLjZNgfrVxvvOzeHYMS8Nly36ys0tfimeVHmWAytKYJNE0FvvG/ZHt3DN0oMmDKJR0uLhoNVCiqrNWRnEeRmExQVEqRR9Yoo57imt7qrKnm8+2F3VYyJY3kUFxBIJoLKKhUmiSArE3A4gAMHNWzbpfjyABNaR8W5P+Eh97himmaV8MTzMryh8wL8PgI0rULRcAWyh4eDcyOTBj0rFRw7S4LT68t/zUgBoZECiBn4U8Vq7PUccnJAl+ymdqV4UtlhfyVTMOGhonm9A/5m4PaKNdjt8bFJ7iqajWFaakxSiESyT8aqLX3XtHMcNEGDxmt6AJwDgUUW+p0AQQ/ZVDWwHWOFQzz6ZaSAeKAe3THjcZgSyQrorxr6DvVEIZVPJPNob5ts+EVjzbQPRgqIFpKh9ZOIQThGCojud0loHsFqMwTih0Ai7kfxQyP5RmakgMhsxkgBjBQQmQeF1pqRAvzjFY/vMEYKCM13k6X2QCUFJAv+geZJlQJ+c+ujeH85IwV0w+jJl/6H5a9/hGPmTseQwlwoqop9ZZX4YvUPOPfUBUhLTemof+FZC5PCDxgpoP/NRD8Gankn/tWwBb/LnAG4ozsHgeNRXc31Cn72HOXqSwS0uLwh5xOWTByWNW3DO0379aAaAYcD5YFvhD6QPw+Vm6yorYvurdF4kQJoAPnE4znwJhVn717ZAeuvcyZjipQDQfYF5OlHi2JScdHej3sZ+LURJ8DhoHLjxm1PsU6zSXjquU5SQIqNYOYcFX+uWo1q2Ylf50xFankWtu8yflg2dpqMd/lt2MRVwuOleaaBXNGC+4rmomw7H3VCQPuKJ4zlsOgYEU0tlJRCcypr4GlgUVZjFlA0CQLWrgc2bu6ND5XpT0sj0FSgsbl7fud2UsAF59Eocm8pcJET8O4HKqpqjNuzr5qTxwvYul3F/jKgqECHByAaFh5NUFyiwiur/UYKkEQOHk6BAALFg24+myzpAyjWNKBVSdpwfVlvKae+bHFb/kxMELLg7pFiRTQD91SvxwZnnd788ZL5sMummPludDyL9TIQEGCkgOS3YjwOU8JFjaodZYgSvm2rxnx7PsodDliV3spT4fYfTrtkwi+c9QVqw0gB0UTTeF+JGIRjpADj3znGLc1qMgQSH4FE3I8SH7XEmSEjBURmC0YKYKSAyDwotNaMFOAfr3h8hzFSQGi+myy1GSkgMS3FSAEB7HLGxX8ETxNhGygrnl5qoFb8qzBSQHxs4OEVZKaa4GiUYyJfq8g8nA4Ob7zT/VY0XS1VCDjrVJqP2KsHYUMtNLi2Ta3H7RVr9ab0x3lFJc153rsnE+HwcO4CrP4s+rml40UKWDCXw8iRGlo0D/IsFrzXtB+zbbmQVQ2iu3Od9IfLyy07uqkEtCP0i6xxOMkytFegsR3PQDLjFknA2+8QVNZ22jUrk2DiYRpkKKis5FC6LTTliTGTFay2lurzNEuAIAIjpVTcmHY4Pnnf2H4Xqg/R+kcdwWHmVB41TVFmxQSZTKpVwtMvynCHMCz18flH8hg+gioY9HZ0Stgw8SKeWtb7eQsZG40gP4fT1Qo+/1qDIEAPNKenEvzmah71Lb6J94dSgEnkUao24uHqH3CELQ/nZIyC2uVbNJlIARQzzgS83boXr9bvMmSWY1IKcWnmeKhd1D/aGwo8B6foxWsNuzE7JQ/FfApET/T3OUMTZZUGFQKMFJD85o7HYUo4qHl5BaVaM/5SsU5vTn9d/HPIfKTJZshK/IJyyYJfOJj31YaRAqKNqLH+EjEIx0gB8dt/jHkNq8UQiA0CibgfxWalA7NXRgqIzK6MFMBIAZF5UGitGSnAP17x+A5jpIDQfDdZajNSQLJYKnHn2a/pA/qCgeYaJjQylGSFkQLiZzC6AcYSfxo0VGQBgIYDZRrS0wmyMny5ran8eSi31HuixEsE/2vbi5frd+ry203N0HOu9ywPFcxD+Q/RVwmg48SLFHDxBTwUInfkiaY408PxnunC6UdLg+DCrw580QuXZcOOA+fmet0q9koKPFCQGuDGsVkSsG0rjy/X9E75QLefcGyamU4waqYbNx38Gi2HUkncmDcF9oos7N0RuyDnZT8TYE8h/U4KoGkYeE3EOx/IqK419vwvmCNg1AgClxKYSeBxcais4vD515EdVHKE9qPh9JN4XQ79y28VpKcRTJlEMH4sB4/af6QAmDQsrVqLnW5fro+7CmdjGDol8pONFEDXQAP5Xzgr8GLdjj6Nf0b6cJyWOgxSF6JPr32QI7oCAU094PFGZndjnshqMQQARgpIfi+Ix2FKOKipJhX3Vq/Hj67OHFEnpw7B4rTR0Dzx++ZJFvzCwbyvNowUEG1EjfWXiEE4Rgpgv7mMeS+rNdAQSMT9aKBhHMv1MFJAZOgyUgAjBUTmQaG1ZqQA/3jF4zuMkQJC891kqc1IAcliqcSdZ7+SAm6552ncdM1ipKZYuyFSur8Ct933DJb9/Y+Ji1SAmcUyKJ10YPTzhGNNCmhfDv3xTG+1UuKKV1HDChz7g8YhevGtswrP12/T80jvL++sZQKHuwvmYv9mCY01sbltHg9SwLASguMWELj93Bb3h5FgBW47+F1HUJXWmWHNxnU5U0BcvQ/UZUmFFzJssqmDdNC1X2pHTpXwzHJPVL01Z4iMGRMkfNdUg6Mz87HxgAO7f4idPHB6KnDB2QIkE0FtPysFUOAogcLMi9i2C/jim8C3+21W4OzTeVgtgCAQNLb2jbvESVj5iYLyitAVOHzzoswOgrJyDUsWCyirUJFmBxQFKK/UcNQcAqtN1ok9/aEUQJ+x77xVuK9yA8aY0nB38ZFobe1USkhGUoD+4EgaWokXy+q2Y4+7BZWyQ//rXMGMkaY0nJU+EoW8DYo7PDtG9eFknTEEeiDASAHJ7xLxOEwJBzXODDxUsxFrHZ25cc7LGIlTU4YD0f0ZEtL0kgW/kBZloDIjBRgAKQZVEjEIx0gBjBQQA1dnXSYBAom4HyUBbAkzRUYKiMwUjBTASAGReVBorRkpwD9e8fgOY6SA0Hw3WWozUkCyWCpx59mvpIBL/+9e7NpTjlt+83McP38mvLKCZ15+F0+8+DbOOHEebr3+osRFKsDMGCkgfibrL1JALFdIpebLNQdcmowPD1bB5LZgvJCNdJixewuPmtrYBdXiQQr4xWIemp+c8oEw9nIq0q0Sdrga8FFzGU5JG4oSkx3uNqos4B8bqrwQ6N/oOHnpFjz6tBvuGBzI52QR1NTFzmbtOM2YymHmNAKLiYsLKaB9HqLAg9M4eLwEtbUa9papSEshKCwgyM4i8Hg1aEQG/REqiTTlRnDQNVnEp1+oOFgZOo7U9g4nwVGzOX0uNXXdDz1nTuMwZbIKt1ftF1IAxUkVVcicCjsvocXphaR1qkckLSngUNoTTdIgchwkjoNHU8CBg0dRwHkJvEro9ovlXsv6Zgi0I8BIAcnvC/E4TAkHNSIA+9GCvxxcB4cm68Spe4qOhOQVoMRxj0wW/MLBvK82jBQQbUSN9ZeIQThGCmCkAGPey2oNNAQScT8aaBjHcj2MFBAZuowUwEgBkXlQaK0ZKYCRAkLzGFY7VAQYKSBUxFj9ngj0KymADv7h52tx7z9fwbiRJSirqIFJEnHrDUswYcywpLQOIwXEz2wDgRRA0WtXIqABwvc+UtDYBNTUqoh1SK2/SQHjRnOYMxvwKL1zygfzInrDX+RpoFHVb3lHUjJTLPjgUw+27Yqsn0jmEGnbn57FIzVVg9XMx5UU0L4O+oHOc5zuy1RRQ1Y1PeDRTs4INQgncgJ270HIqQSoEsWZJwt49U3ZL6ngiiU8nF5f6o/+UApoxydQaopkJgV09eH2zD/hpN+I9Flg7RkCoSIQ6n4Uav+sfuwRSKagtpP3Isdiwca2WoyzZMDtVsEp8UsdQK2TTPhF05sYKSCaaBrvKxGDcIwUwEgBxj2Y1RxICCTifjSQ8I31WhgpIDKEGSmAkQIi86DQWjNSgH+84vEdxpQCQvPdZKnNSAHJYqnEnWe/kwJowOg/b6/CHX97ARazhEeWXocjZ05MXISCzIyRAuJnuoFCCmhHUOR5/LiVw+p1geXYo4l2f5MCrlgiwOX1QI1zLJ4eBlTVKnjh1dDJCdHEP9y+srOAM0/hoWgKUm1iQpACgq0lnCCc18XDnsLhrfcU1DcAch+PBU0RMHsmj7xcXwqBtesV/Li9u6ONHEYw9wgOKvHq0+1PUkAgfAYKKSCY/dm/MwQSCYFw9qNEmj+bS3IGtelBdqSkxmjZPh6HUdGaeyT9MFJAJOiF3zYRg3CMFMBIAeF7NGuZzAgk4n6UzHj299wZKSAyxBkpgJECIvOg0FozUoB/vOLxHcZIAaH5brLUZqSAZLFU4s6zX0kBP+7YizsfWoZWhwt33nQJyipq8de/v4gjZkzA7665ANmZaYmLVICZMVJA/Ew20EgBFMlMuwmPPuntl8B5f5ICpk3mMPUwwKvGPxBPDwMamr347CsNO0vjzFAI4/E55wwB9lQZ9J7hQCYFUGjoDXROE2C3EbS0AlU1GqprgJZWDYX5BDnZQF4uB7db01UkKFGCtjELEpqaVOwoBWQZGDsKyM3m0Or26CoBtDBSgCsM72NNGALJjwAjBSS/DeNxmJL8qHWuYLDix0gB8fHiRAzCMVIAIwXE52lgo8YbgUTcj+KNSTKNz0gBkVmLkQIYKSAyDwqtNSMFMFJAaB7DaoeKwEAmBbQpXpR6mpEnWJArWkOFhtU3iEC/kgKmLbocly0+GVf87DSIoqBPsam5DXc/uhyffPU9Vr/zmMFpJ041RgqIny0GIimASrBv28b3i1pAf5ICLjyHAyfJHQHZ+HkNQA8DqhtdoBL1Ty3rH1WGaK23uIDghIUc3LI3IYLaRtcVjSAc/Yilf1SF00kzkuRLUUDJAP6KnspA5XXyBOGVXjc0GSmAkQKM+i+rN7AQiMZ+NLAQSb7VDNagdrQsNVjxY6SAaHlQaP0kYhCOkQIYKSA0L2a1BwoCibgfDRRs+2MdjBQQGcqMFMBIAZF5UGitGSnAP17x+A5jSgGh+W6y1B6IpIBSdzMeqtqIUk9LhxkoMeA3eYdhsiUraqZZ9fUG3HTn43o6+1MXHtnR747SMvzypvtRkJuF5f/8U7fxNm/fgxtvfwzvL783avOId0f9SgrYtacco4YX+V3zV99txtzDJ8Ubj5DHZ6SAkCGLWoOBSAqg4HAaj+++J9i6I7YHNv1FCrjgbB68pEBDbNdj1LH0w4B6J0RBwLrvgY1bEmNeRub/s3N5CCZZD3AnQlDbyJxpnUQMwiUCfix9gFEPYvUYAtFDIBH3o+itbnD0FI/DlIGE7GDFj5EC4uPFiRiEY6SA5Pn2iY/XslEHKgKJuB8NVKxjsS5GCogMVUYKYKSAyDwotNaMFOAfr3h8hzFSQGi+myy1BxopgBICrjvwZUD4b8mfjiNS8qNint/c+qiuWv/xF9/jyftv7OjzpRUfYs36bXh46bXdxlEUFRo0tLQ6kEHzFw+Q0i+kAMqmGDO8GJIk+oWNgvrSio9w5UWnJx2sjBQQP5MNVFIARdTES3jzPRm1dbHDtz9IAYuO4ZGXTzfPxLmR304KoFfIFY+I5f9NnLn1Ze0hJcCxR3GQNV8KhkQIahv1zkQMwiUCfowUYNSDWD2GQPQQSMT9KHqrGxw9xeMwZSAhO1jxY6SA+HhxIgbhGCmAkQLi8zSwUeONQCLuR/HGJJnGZ6SAyKzFSAGMFBCZB4XWmpEC/OMVj+8wRgoIzXeTpfZAIwVcuvdTVMmB92kbJ+CZocfAxvuPLRu1G1WsX3z1HXhn2d04fckf8PSDv0Nudjq+XrsZN9/1JDweL6ZMHInrLj0bt9zzNEYPL0ZVbQNuvOr8DqWA5lYH/nz/s9i4ZTesFhNuvu5CzJk5CY1Nrfj9XU9gz/4KqJqGJeeegJ+dfbzRqfV7vX4hBUxc8Au899I9GFKUpy/w59fehftuvRL5OZn6f5dX1mLRT2/EllXP9TsAkQ7ISAGRIhh++4FMCqCoZKRIePSp2Enux5oUMHUyh8MmASp8QexEKe2kAJpanoCD183jlRWJTQygRLTzzhTg9Ho6YEyEoLZRmyZiEC4R8GOkAKMexOoxBKKHQCLuR9Fb3eDoKR6HKQMJ2cGKHyMFxMeLEzEIx0gBjBQQn6eBjRpvBBJxP4o3Jsk0PiMFRGYtRgpgpIDIPCi01owU4B+veHyHMVJAaL6bLLUHEilgk7MON5evDgp9NNQClr/+MWrqGvHry87GYy+8CZMk4pKfnqyP/cJ/VmLnnnIsvekS0FQCF1x9B5bedClOOnY2uqYP+MvDy8BxHG6+9kJs2lqKy397Pz5b8TAefvK/oISBO393qR7rPvWim7Fy+X066SARS1xIATNPvAIrnl7aQRJgpIBEdI3En9NAJwUQQsBpIp5/OTZB9ViSAkoKCY4/loNH8SacI3UlBdDJceBRUcHhw1WJSwy45lIBTY5OQgCddyIEtY0aNxGDcImAHyMFGPUgVo8hED0EEnE/it7qBkdP8ThMGUjIDlb8GCkgPl6ciEE4RgpgpID4PA1s1HgjkIj7UbwxSabxGSkgMmsxUgAjBUTmQaG1ZqQARgoIzWNY7VARGEikgDcb9+DJ2q1BIbggczTon0jK+b+8HX/94xUYMaQAZRU1+NUfHsYbz96pd9mVFLBzTxlo3bXvPwGOI91IAcf/9EY8svRajB89VG/X1NKGNLsNsqJAlhWYTZL+9yf/7Hf4y+8vw7RJkc05kvX21ZaRAgwi29DUgj/e/RQkUURLmwP3/PGXyM5MA1MKMAhgDKoNdFIAhczrJeBUES+viD4xIFakgCFFBHOP4MBLiUcIoJj2JAXQvxM4AZu2EKzbkHjEgAvP5cFLMlSVaht0lkQIaht9rBMxCJcI+DFSgFEPYvUYAtFDIBH3o+itbnD0NFiD2tGy7mDFj5ECouVBofWTiEE4RgpgpIDQvJjVHigIJOJ+NFCw7Y91MFJAZCgzUgAjBUTmQaG1ZqQA/3jF4zuMKQWE5rvJUnsgkQKMKgVcnj0eZ6QPD9tEu/eW4yeX3AKrxdzRh8PpwquP34YJY4b1IgVcfuP9WPXaQ3rdrkoBM064Am8+9xcUF+R0m8uW7Xvx92dWoKGxBYQj2LH7AJ564LeYPhzqmN0AACAASURBVHlM2HOOZUNGCjCI7rff/whFUTH38El48bUPIUkizjttASMFGMQvFtUGAymA4sYRDlaTgGWvymhzRA/JWJACZkzhMGUSB4/a/VZ79GYdeU/+SAG0V8XLY9sOgvU/JM5B2blnCDBZZID0nlMiBLWNWiMRg3CJgB8jBRj1IFaPIRA9BBJxP4re6gZHT/E4TBlIyA5W/BgpID5enIhBOEYKSJxvnfh4JRt1sCKQiPvRYLVFOOtmpIBwUOtsw0gBjBQQmQeF1pqRAvzjFY/vMEYKCM13k6X2QCIFVHkduHTfqqDQP1IyDyNMqUHrBarwwOP/RqrdissvPLWjyvP/WYmDlbV6KoCeSgFX/PZ+fPrf3qQAqhTw4G1XY/L4EXo/e/ZXoCg/WyccXLr4FJx9ynz970+84CbcdfNljBTw3kv3dKQLSOb0AZQYcMOf/4HrrzgXw0ry0eKM/g3usL17kDWkPzIGE/484fDuhyr2l3W/MR6u2elHlaxEpy86h5MW8sjP0yCI0esz3LX11Y76TatThr9ZairBnr3Ax5/H97CM54GLLxBAOAUg/ldDP+rojzuHO/HUDXrOWOQJeJ6Dy5M4c00E/CgxgRDA7e0/f+MIYDEJaHOxd1cs9hfWZ+IjkIj7UeKjllgzNIsc6M8Xr9x/e2diIRDZbAYrfvQ3E/3x5x4AfmMzC3C5Zf05SPTS1+/ueM3dZuLh8qpQeqhw9ed84vEdS0lxHq8KOY7r7k+M2VgMgZ4IJOJ+xKxkHAH2HWscK381KX70slHrIDsHoMdptkNngJEhGP/WyfQdaxI4/SyzP8+6glmI4ifwHJxxPJeMx3eYwBGIIgdnEpwdB7Mh+/dOBHTizQAqy+t3gv4JVM5IG4bLcyaEvWIazz3uvBvwzN9+p6cOaC80hcDiq+7Ap689hOUrPsLOPeVYetMloOkDApEClv7tBbg9Xtzx20uwbdc+XHrDvVi14mEcc85v8OR9v8XEscPw9gdfY+lDL+CB267BUbMnhz3vWDbsN6WAR5Zeh7zcDH0tF117F+7701Ud/11T16jncNiy6rlYrjXivhubWnHnw8tw7mkLMHvaeL2/FkdiSqRHvNgk6IDe+Bls+KsKj/UbNXy/KfKD8GiRAuiP7J+fx0OQVPB84p9OplhEtDr7eG41Ds3NBK++EZ8Adl4OcN4ZvH5orWmB8dSD2hIPRxJ81IkCBzrfhCMFxBk/SeRAQOD29p+v0VxIFolnpIAkeMexKcYGgUTcj2Kz0oHbK3330ZQ6jBQQno0HK36SyIOyAmhQNNmLlZICPEqv1FKJuC79d7fLqxMyEqUkAn7x+I6lpFCPrEBJBjZJojgLm8eAQiAR96MBBXCMF8O+YyMDmBACq5lH2yC72EYvYdjMQc4AI4O231on03csPeuirABPP551BTOEIHCgAfJ4nkvG4zuM5wkkgYfTzS4GBfORZPp3XQVvgJUnarbgraZ9vVZ1hC0P1+dNgY0LnwjxxepNuPvRl/DOsrt79X/WpX/CdZeejf3lVYZIAU0tbbjtvmexfvNOpNgs+MN1P9OV5V9+42M8+dL/kGKz6moBNI78xvtfYPk//oSCvKyEs1a/kQKMrDyRSQGtbU7cdOfjupxESWFux3IO1iW/BJER2yRincGSPqAn9pzGQ5Y5fPGNigPl4Z+wRSN9wKzpHMaMJOBEGWofAexE8p9A6QO6zlHgOHg9Ar5Zo6B0X/gYh7ru2TM4HDaRwOkNTjZKBPl7o+tLRLnuRMCPpQ8w6kGsHkMgeggk4n4UvdUNjp7iIbs4kJAdrPix9AHx8eJElOtm6QOSnxgTH29moyY7Aom4HyU7pv05f5Y+IDK0WfqA5D+7T6bvWJY+wP/zGo/vMJY+ILK9M1FbD6T0AV0x3uSowyZnHUo9zRghpWKyJQuTrYkXUE9UvwhlXv1CCqitbzI0p+zMNEP14lHpsRfexMpPv0NJYY4+/LHzpuPMk44CIwXEwxq+MQcrKYCund4u5jQBbQ6Cz7+WUV0buh0iIQUcNpHDUUfyqG9UwIvJxTY0QgqgaFJ5NYET4XICq75WcbAiduSA6YdxmDubQ6tDhVc1hmciBLWNel0ifrwkAn6MFGDUg1g9hkD0EEjE/Sh6qxscPcXjMGUgITtY8WOkgPh4cSIG4RgpgJEC4vM0sFHjjUAi7kfxxiSZxmekgMisxUgBjBQQmQeF1pqRAvzjFY/vMEYKCM13k6X2QCUFJAv+A2Ge/UIK6AmUrCioqmlAUX520mPISAHxM+FgJgW0o07zIQmER02dhk8+U9HSZtwe4ZACxo7icPRcTpeelNX+kzw3vqrgNY2SAtp7oh9PPHg0NgFfrVZRVRN8DCM1BAEYNoTguPm8nmdLUeWQlFUTIahtZJ20TiIG4RIBP0YKMOpBrB5DIHoIJOJ+FL3VDY6e4nGYMpCQHaz4MVJAfLw4EYNwjBTASAHxeRrYqPFGIBH3o3hjkkzjM1JAZNZipABGCojMg0JrzUgB/vGKx3cYIwWE5rvJUpuRApLFUok7z34lBbS0OnDXIy/hnY+/gaKooOkC6htb8Nulj+HeW65EVkZq4iIVYGaMFBA/kzFSQCf2NMCpqTRvO4fSfSq2btNQUd33zXYjpABRBEYN5zB+DEFhPoHTo8Ir01QB8bN7pCOHSgpoH4/m71K8PGwWgj37VOzco2HP/7N3H2BWU2vbx+9pzAxDUQTEghV7xYa9N+zYEQtFUEFRqdI70qt0UBAVFbEXsCt2EY9i7yKI0stQp31X4gufgwOTNQnZayf/fV3nPedl1lrJ+uWZzN5Z905+KzKyqFRR2m/vVB1YK0XVq6ZodW6BlFpYpkcv2LCo7fVY2LgIZ4MfoQCvFUQ7BIITsPF8FNzs4jFSIi6mREk2rn6EAhJTxTYuwhEKIBSQmN8GtppoARvPR4k2SabtEwrwd7QIBRAK8FdBZr0JBRAKMKsYWpsKEAowFaP91gKhhgI695+kJctWqnnDK3RD815uKGDd+o3qOXSKNmzYpGE970y6I0QoIHGHjFDAf+3T0lKUkZaitJQ0OR+aFvxZpC+/KdS69dK6tUVau05bFrG3DgWUKyfllJe76L1bjRQdfGCKdqqUok15zi3tC93/jsKrrKGAzXNPSZGcBeXCwjRVLJ+qBX8VqTC/SKtWF2ntWil33T/Ojp3jWbFiiipWkAoKi1S9qnOXhUIVqUD5Bf6SFTYsanutBxsX4WzwIxTgtYJoh0BwAjaej4KbXTxGiuuidlBHN65+hAKCqiCzcWxchCMUEI3PdGaVSGsEJBvPRxwX7wKEArxbldSSUAChAH8VZNabUAChALOKobWpAKEAUzHaJzQUcMaVd+vZh3pr58oVddiZDd1QgPNanbtOF1zfRh++ODrpjhChgMQdMkIB27dPSUlxF6/TUqXUlFSlpErpqSkqKJQ2bJA2rE9VWnqBsrKkzMwUFRYWqci5RpTyzwK2s3id7zSO2MtvKGBrDufDaWpKipywQGFhilSUovwCKT1NSk0tUlFKkYqKnDBGkQp8BgH+vW0bFrW9loaNi3A2+BEK8FpBtEMgOAEbz0fBzS4eI8V1UTuooxtXP0IBQVWQ2Tg2LsIRCoje5zuzqqR1XAVsPB/F9ViUZd6EAsqi9v/7EAogFOCvgsx6Ewoo2SsRn8N4fIBZ7SZLa0IByXKk7N3PUO8UcOwFzfTecw8oO6tcsVDAylW5Ove6Vpozc7y9UtvYM0IBiTtkhALKZp8iZ7E6RbvunKXFKze4dw5wFq2LnP8Tg1fQoYBEkdmwqO117jYuwtngRyjAawXRDoHgBGw8HwU3u3iMlIiLKVGSjasfoYDEVLGNi3CEAggFJOa3ga0mWsDG81GiTZJp+4QC/B0tQgGEAvxVkFlvQgGEAswqhtamAoQCTMVov7VAqKGA29oN1v577657m12jo8+71b1TwKK/l6nviEfcbySP6Xdv0h0hQgGJO2SEAvzZx9WPUIC/uilLbxsX4QgFbCjLoaQPAkkvYOP5KOlRQ55AXBe1g2KOqx+hgKAqyGwcGxfhCAUQCjCrYlpHRcDG81FUbMOYB6EAf8qEAggF+Ksgs96EAggFmFUMrU0FCAWYitE+oaGABYuWqFX3Ufrh5z+Ul1+gCjnZyl27Xkccsp+GdGuu3WtUTbojRCggcYcsrovaQYnH1Y9QQFAV5H0cGxfhCAUQCvBewbSMkoCN56Mo+YYxl7guagdlG1c/QgFBVZDZODYuwhEKIBRgVsW0joqAjeejqNiGMQ9CAf6UCQUQCvBXQWa9CQUQCjCrGFqbChAKMBWjfeihgPkL/9YeNaopLS1Vv/3xl/apWUPzvvtVzr87z+Hea49dddhB+yTtkSEUkLhDF9dF7aDE4+pHKCCoCvI+jo2LcIQCCAV4r2BaRknAxvNRlHzDmEtcF7WDso2rH6GAoCrIbBwbF+EIBRAKMKtiWkdFwMbzUVRsw5gHoQB/yoQCCAX4qyCz3oQCCAWYVQytTQWiHArI3yitXVKkzEopyqpkKkN7rwI7/PEBtc9vqjenD9HOlSvquAubac7M8V73LSnaEQpI3GGK66J2UOJx9SMUEFQFeR/HxkU4QgGEArxXMC2jJGDj+ShKvmHMJa6L2kHZxtWPUEBQFWQ2jo2LcIQCCAWYVTGtoyJg4/koKrZhzINQgD9lQgGEAvxVkFlvQgGEAswqhtamAlEMBThBgB9eK9TapUVbODIrSgeel6bKe6aYEm2z/dsf/E/teo9V11a36JJzTwps3JIGctbCX5zaTzWqVdmh2ynL4Ds8FHBFo87auGmTau5eXR9+9rVOOvawbe7n+IFtyjKHhPYhFJA4/rguagclHlc/QgFBVZD3cWxchCMUQCjAewXTMkoCNp6PouQbxlziuqgdlG1c/QgFBFVBZuPYuAhHKIBQgFkV0zoqAjaej6JiG8Y8CAX4UyYUQCjAXwWZ9SYUULJXIj6HZWakKic7Q8tXbzQ7iLS2WiBqoQAnEPD5tIJtmh9ycZp22T+YYMA9XR/Qicceqjdmz9WEQTtmLbqwsEipqSlatmK1+0V553/b9trhoYC/lizXzLc+0eo1azXpsZfVuP5F2zS4+9arbPMpdX8IBZRKtMMaxHVROyjQuPoRCgiqgryPY+MiHKEAQgHeK5iWURKw8XwUJd8w5pKIiylhzCusbcTVj1BAWBVWfDs2LsIRCiAUkJjfBraaaAEbz0eJNkmm7RMK8He0CAUQCvBXQWa9CQUQCjCrGFqbCkQtFPDpQ/nauGbbCunlpOMapSs901SqePtVq9eqfvOeemlqP112S0dNGtJe1avu5Da6q/MIHVJrL/ex9z/9tlD16p6mrMwMvfvRl1qybKUGd2uug2vtpbXrNqjXsIf1xdc/KyM9TQ2uPFfXXX62O8bxdW9Xsxsv0aRpL+vN6UN1er27ttwp4NV35mj4xKe0bv0GnVD7EPVq21jlymXouVnva9zU55WfX6Dddt1F/Trdpt2qV9H7n36lAaOnadOmPGWkp6vNHdfp9BOP8gfwr947PBTw7z0dNuEp3dP06sB23oaBCAUk7ijEdVE7KPG4+hEKCKqCvI9j4yIcoQBCAd4rmJZRErDxfBQl3zDmEtdF7aBs4+pHKCCoCjIbx8ZFOEIBhALMqpjWURGw8XwUFdsw5kEowJ8yoQBCAf4qyKw3oYCSvRLxOYw7BZjVbrK0jlIoYNWCIs17ett3Cdh8TIK4W8Bjz7zhLvA7X0wf8/BzyiyXocbX//MFducOAhs2btKYfvfq9wV/67KGHdWjTSM3HDB6ynNasnSFurVuqH4PPKYVq9aoX8dmckIG19zWXSN7t3QDAydf2kL1LjpNbW6/TikpKdr8+IDUlFRd2aSLnhjXzX2UwF2dh6v24Qfo2kvP0plX36PnJ/dx77LffdBkpaTI3c5lDTupe+tbdMwRB+q7n+brsWdeV8+2jQMr0R0eCvjx1wXao0Y1lc/OlPO/t/c6YN89A5tYWAMRCghL+r/bieuidlDicfUjFBBUBXkfx8ZFOEIBhAK8VzAtoyRg4/koSr5hzCURF1PCmFdY24irH6GAsCqs+HZsXIQjFEAoIDG/DWw10QI2no8SbZJM2ycU4O9oEQogFOCvgsx6Ewoo2SsRn8MIBZjVbrK0jlIoYOH/CvXru6V/PtmrTqqc//h5XXdbD93fqZn222s3LVi0RHd2HK5nH+rtDumEApxv8N9Q7xwVFBTqyHMa691nRmiXnSvpxdc+dO+E/0Dfu3X+9W00qOsdOvLQ/d1+A8c8rpzsLDVveIVOvqyFxvRrpaP+72ebQwEfffaNXn/3M7e/81q/YZOcv8vOnQKcOw/klM9y//2lNz7SM6/M1sRBbdWk9QDts2cN3XLthdprj+p+pl1i3x0eCjjszIZ6aOh9OqH2wXL+9/ZeX789OfAJ7ugBCQXsaOFtjx/XRe2gxOPqRyggqAryPo6Ni3CEAggFeK9gWkZJwMbzUZR8w5hLIi6mhDGvsLYRVz9CAWFVWPHt2LgIRyig9ItuiakWtorAjhWw8Xy0Y2ccrdEJBfg7noQCCAX4qyCz3oQCSvZKxOcwQgFmtZssraMUCvB6p4B9T0/VHkeXPRTw828LdUXjziqf/c8CvPNybuX/xNhuOvTAfdxQwBknHeXeGcB5OevYn74y1m3/8hsf64XXPnDvIuAs9FesUF5paWluu7y8fF141gnqcFcDNxQwbXRX7b3nru7PNocCXn7jI/34y0Ld37FpsRIrLCzSqMnP6P1P5rn/vmrNOu2+6y6aNKSdlq1YrbEPP6fXZ3+mijnldd9dN+jk4w4PrER3eChgde469y4B6Wlpcv739l6VKpQPbGJlGWj5yjW6r884/bVkhXvbhs2v+QsXq+P9E/Ttj79rjxpV1bNdYx19WC33x4QCyiIdTJ+4LmoHoyfF1Y9QQFAV5H0cGxfhCAUQCvBewbSMkoCN56Mo+YYxl0RcTAljXmFtI65+hALCqrDi27FxEY5QAKGAxPw2sNVEC9h4Pkq0STJtn1CAv6NFKIBQgL8KMutNKKBkr0R8DiMUYFa7ydI6SqGADaukOVPyS6WvXT9NOdVSSm23rQaDxz6pShXLq2mDS7Y0mTJ9lv78a6m7oO81FHDhDe00rOed7uMCtn45oYDHx3TVXnsUDwU4dwqY+dbHGtu/tdtl1Zq1Wrd+o+bO+0HjH3lBU0d2krMu/sKrH+jZme+5oYB/v2Z//KXa9Rqr958fpdTUshv8e8wdHgoo7ZEB/96ZRD4+wLlVQ/07euqMk47WOx99USwUcNNdfXTK8UeoyQ0X650P/6e+Ix7RrGmDlJGeRiigzL+K/jvGdVHbv9w/I8TVj1BAUBXkfRwbF+EIBRAK8F7BtIySgI3noyj5hjGXRFxMCWNeYW0jrn6EAsKqsOLbsXERjlAAoYDE/Daw1UQL2Hg+SrRJMm2fUIC/o0UogFCAvwoy600ooGSvRHwOIxRgVrvJ0jpKoQDHfP7Hhe5/tvXa/egU7Xf6P9/ML8vLeRzAOde20oND27uPDtj8ch4h4KwHvzVjmNr0GOPpTgH9R03Thg0b1bXVLcovKNSQcU/qknNP0mEH7ePeKaCkUECKUnRZw456bFRn7VNzN7XpOdq9O4FzF4L3P52n0fff6wYFWnUbpbXrN7h33W90bz83fFCjWhX3UQdX3dpVH74wOnlCAaU9MuDfBzKRjw9wbhexdPkq9z/dB0/ZEgpwbtVw4Q1t9eGLo927HTivq5t2U/sW9XX80QcTCijLb2JAfeK6qB0QH6GAoCATNI4Ni9pep27jIpwNfhWy05WakqLV6/K8Uvpux8UU34QMkOQCNp6Pkpw09N1PxMWU0Ce5AzcYVz9CATuwqLYztI2LcIQCCAUk5reBrSZawMbzUaJNkmn7fI71d7QIBRAK8FdBZr0JBZTslYjPYYQCzGo3WVpHLRTguP/yboH+/F/Rfw7BLvul6IDz0pSeWfajM/vjeer3wKN6aWq//wxyZZMuatnkKvcb+l4eH+B8sbz3sKn6/KsflV9QoDNPOlrt77zB/fL4tkIBzsL+zLc+0fCJM9xHFpx47KHq1baxctdtUPMOQ7Vq9VrVqL6z7m16je7qPMJ9hIHzCILxj7yogoICZWVlqmWTK3XuaceWHWGrnjv8TgGlPTLg3/uT6McHOPvi3Lbh36GAufN+VM8hU/TsQ7237GqbnmNU55hDdM0lZxIKCKwUzQciFGBu9u8ecfXjTgH+6qYsvW1chCMUwJ0CylLL9El+ARvPR8mvGu4MEnExJdwZ7titxdWPUMCOrattjW7jIhyhAEIBifltYKuJFrDxfJRok2TaPqEAf0eLUAChAH8VZNabUEDJXon4HEYowKx2k6V1FEMBjv2qBUVataBQa5dKOVWlynumqvKewdwuP1mObVj7ucNDAWFNJKjtbB0K+GDOVxo+YYaeGNdtyyY69ZuoA/evqVuuuUBLV20MatOMYyhQtXIm/oZm/24eV79dKmVq2erk/711PhTnZKVr1drwvmVe1nJz3oRmpKcqd33pzwgq6zZM+9ngl52ZppQUad2GAtPdL3P7tFSpYvlyWpm7qcxjmHR05scLAZsEMjPS/u98ZP+50yY3m/bF+duXX1ikjZvCO3faNH+/+xJXv+zMdElFWr8x+eumcoVyyl2Xp4LC/36Twm99BN2/SsVMLc/d6NBb86qcU065G/Ll3EYyUa9EfB6pVL6c1m/KV15+4uadKG+2i4AjYOP5iCOzbYGirf5uhP05NmrHJjVVcv7+rVgTznUAW/yc6xE7O+9FInAN0Mbrats6zk4QXyFf6yqt5hw/58tBaxJ4XTInK03O27AwP8dmpKcoKzNda5Lg2nFpx5Cf/38BZ02HFwJ+BAgFbKW3dSjAuRVE5/6Tit1eomWXETqtzpHunQI25iX/hSU/BZTIvs6FffzLfgTi6lcuPU15+QU2XZss00F0bjuflpaSFBf2nFR6SkqK+6wdW142+LkuSlF+YXguznHISEvRptAuCJMKsKXm2Y9/BJwLiv+cjyxaoeLgGAk4oS7nQnEyLIgaTSykxnH1c+btvPlzAiXJ/nIuaDrvqZJhKs4F2E15hVa97y6X/s/fgET6OS4b88J7/+fUvHNRuCDB80723z32P7kFbDwfJbfojt774n+vw/8cu6PnF+74znUH5+9AeNcBwp3ftrbmXI1wbum8KT/5r93beF1tW+7OvjqpgIIQr3WVVnGpqSnu4zsTeV0yPS1VRUVFoX6Oda99pqYoz6LrsaUdK35euoCzpsMLAT8ChAK20ts6FLBi1Rqde21rvf/8A8rKLOe2vvim+9SrXWMdc8SBPD7AT/X57BvX29/7ZNvSPa5+PD4gqAryPo6Nt+vm8QE8PsB7BdMySgI2no+i5BvGXBJx28Uw5hXWNuLqx+MDwqqw4tux8XbdPD4g3DBCYiqPrSLwXwEbz0ccJ+8CPD7Au1VJLXl8AI8P8FdBZr15fEDJXon4HMbjA8xqN1laR/XxAcniH4X9JBSw1VHcOhTg/LhJ6wE69siD1LTBJZr19icaPnGGXnm0v9LT0ggFJPC3IK6L2kGRx9WPUEBQFeR9HBsX4QgFEArwXsG0jJKAjeejKPmGMZdEXEwJY15hbSOufoQCwqowQgFepBPxOcx5ZEHu+rzQ71DgxYM2CIQhQCggDOUdtw1CAf5sCQUQCvBXQWa9CQUQCjCrGFqbChAKMBWj/dYChAL+T+T12Z+pTc8xcu5H6txaPCMjXfvWrKFnHuytRX8vU/s+4/T197+p5u7V1ee+W3XYQfu4Pf9clvxvLJL11yIRF1OS1aqk/Y6rH6GA8KvYxkU4QgGEAsL/TWCLNgjYeD6ywSWZ9iGui9pBHaO4+hEKCKqCzMaxcRGOOwVwpwCzKqZ1VARsPB9FxTaMeRAK8KdMKCD5r90n0+dYQgGEAvydsehdmgChgNKE+HlpAoQCShMq5eeEAnwC+uge10VtH2TFusbVj1BAUBXkfRwbP7wQCiAU4L2CaRklARvPR1HyDWMucV3UDso2rn6EAoKqILNxbFyEIxRAKMCsimkdFQEbz0dRsQ1jHoQC/CkTCiAU4K+CzHoTCiAUYFYxtDYVIBRgKkb7rQUIBfisCUIBPgF9dI/rorYPMkIBkggFBFVB3sexcRGOUAChAO8VTMsoCdh4PoqSbxhzieuidlC2cfUjFBBUBZmNY+MiHKEAQgFmVUzrqAjYeD6Kim0Y8yAU4E+ZUAChAH8VZNabUAChALOKobWpAKEAUzHaEwoIuAYIBQQMajAcoQADrBKaxtWPUIC/uilLbxsX4QgFEAooSy3TJ/kFbDwfJb9quDOI66J2UMpx9SMUEFQFmY1j4yIcoQBCAWZVTOuoCNh4PoqKbRjzIBTgT5lQAKEAfxVk1ptQAKEAs4qhtakAoQBTMdoTCgi4BggFBAxqMFxcF7UNiLbbNK5+hAKCqiDv49i4CEcogFCA9wqmZZQEbDwfRck3jLnEdVE7KNu4+hEKCKqCzMaxcRGOUAChALMqpnVUBGw8H0XFNox5EArwp0wogFCAvwoy600ogFCAWcXQ2lQg0qGA/A3SmiVSdiUpq7IpDe09CvD4AI9Q22pGKMAnoI/ucV3U9kFWrGtc/QgFBFVB3sexcRGOUAChAO8VTMsoCdh4PoqSbxhzieuidlC2cfUjFBBUBZmNY+MiHKEAQgFmVUzrqAjYeD6Kim0Y8yAU4E+ZUAChAH8VZNabUAChALOKobWpQCRDAbmLpa9fkZz/3vxyQgGH1pV2rmlKVGL7n35dqGETntKnX3yn/PwC1dpnDzWuf5EuOPP4QMb3OshX3/+qNj3GaOZjA7x2CbwdoQCfpIQCfAL66B7XRW0fZMW6xtWPUEBQFeR9o85UFAAAIABJREFUHBsX4QgFEArwXsG0jJKAjeejKPmGMZe4LmoHZRtXP0IBQVWQ2Tg2LsIRCiAUYFbFtI6KgI3no6jYhjEPQgH+lAkFEArwV0FmvQkFlOyViM9hmRmpysnO0PLVG80OIq2tFohcKMAJAnw8ZdvmR9aTqtXydUz++HOxrmnWXddffrauvfRM5eRk64NPv1KvoQ+rXYv6uuLCU32Nb9I5v6BAa3LXaefKFU26BdqWUIBPTkIBPgF9dI/rorYPsmJd4+pHKCCoCvI+jo2LcIQCCAV4r2BaRknAxvNRlHzDmEsiLqaEMa+wthFXP0IBYVVY8e3YuAhHKIBQQGJ+G9hqogVsPB8l2iSZtk8owN/RIhRAKMBfBZn1JhRQslciPocRCjCr3WRpHblQwPvjpQ2rts2fniWd0lRy/ruMry4DHtS69Rs0uFvzYiO89MZHGjBqmt56aphSU1P06jtzNHziU27bE2ofol5tG6tcuQy98+EXGjp+uvLy81Vz92rq1a6Jqu2yk1auytV9fcfr1/mLVFhUpFuuuUA3XnWeu40TL2muVs2u0avvztGCP5foyotOU7MbL9W/7xSwvf5lnKqnboQCPDFtuxGhAJ+APrrHdVHbB1mxrnH1IxQQVAV5H8fGRThCAYQCvFcwLaMkYOP5KEq+YcwlERdTwphXWNuIqx+hgLAqrPh2bFyEIxRAKCAxvw1sNdECNp6PEm2STNsnFODvaBEKIBTgr4LMehMKKNkrEZ/DCAWY1W6ytI5UKGDFH9Lcx0un93m3gLoN2uneZtfq/DOOK7atvPwCHXP+rXr2wd6qWCFHVzbpoifGdVONalV0V+fhqn34AapX9zRdcnMHTR3ZUQfsu6cmPzFTc7/6QSN6tXQDBatz16l3+yZa+NdSt92sxwaqetWddPJlLXTtpWfpnqZX6+8lK3RB/Tb68MUx+vn3hVseH7C9/qWjlL0FoYCy27k9CQX4BPTRPa6L2j7IinWNqx+hgKAqyPs4Ni7CEQogFOC9gmkZJQEbz0dR8g1jLom4mBLGvMLaRlz9CAWEVWHFt2PjIhyhAEIBifltYKuJFrDxfJRok2TaPqEAf0eLUAChAH8VZNabUEDJXon4HEYowKx2k6V1pEIBf3wm/fBm6fT7niLtd3Lp7bbR4pTL79TI3i11zBEH/qfF6fVaamiPO+U8YuD1dz/TA33vdtus37BJzt/PV976RC+/8ZHGDWjt/rtzFwHnLgCfvzpRRSpSfn6BsjLLuT+76Mb26nPfrW6YwAkFTBrcToccsLf7s5Muaa7pE3po5ercLaEA51EC2+pf5sl66EgowAPS9poQCvAJ6KN7XBe1fZAV6xpXP0IBQVWQ93FsXIQjFEAowHsF0zJKAjaej6LkG8ZcEnExJYx5hbWNuPoRCgirwopvx8ZFOEIBhAIS89vAVhMtYOP5KNEmybR9QgH+jhahAEIB/irIrDehgJK9EvE5jFCAWe0mS+tIhQK83ingwLOlmseW+RBddktH3XHL5ap7dp1iYziL8rXPu1XPTe6rtz/4XD/+slD3d2xarM1Dj7+iUZOf0U6VK27599y16/Xiw/e7dwAY+eDTWrFyjVJSU/TDz39o4uC2bvjACQU8Pqar9tpjV7ff5v/fubNAmx5jNPOxAfr6+9+22b/Mk/XQkVCAB6TtNSEU4BPQR/e4Lmr7ICvWNa5+hAKCqiDv49i4CEcogFCA9wqmZZQEbDwfRck3jLkk4mJKGPMKaxtx9SMUEFaFFd+OjYtwhAIIBSTmt4GtJlrAxvNRok2SafuEAvwdLUIBhAL8VZBZb0IBJXsl4nMYoQCz2k2W1pEKBaxfJX0wvnT6OrdIFaqX3m4bLfoMn6q/Fi/XyD7/3AVg82vmW59o4OjH9fqTg/XcrPc1862PNbb/P3cEWLVmrdat36g5//tOr77z6X/6Om2cOwM0qX+xrrr4dLfPhTe0U98Ot3oOBWyvf5kn66EjoQAPSNtrQijAJ6CP7nFd1PZBVqxrXP0IBQRVQd7HsXERjlAAoQDvFUzLKAnYeD6Kkm8Yc0nExZQw5hXWNuLqRyggrAorvh0bF+EIBRAKSMxvA1tNtICN56NEmyTT9gkF+DtahAIIBfirILPehAJK9krE5zBCAWa1myytIxUKcNB/+UD69f1t8zt3CHDuFODj9deS5bqycRddefHpuumq81UhJ1sffva1egyerI4tb3TvIOB86/+yhh312KjO2qfmbmrTc7QOPXAf1at7mq5o1FmPjuqsvffcVfO++1UvvPq+28/59v+EgW112EH76IVXP1CvYQ9rcLcWOq3OEZ7uFLC9/j6mW2pXQgGlEm2/AaEAn4A+usd1UdsHWbGucfUjFBBUBXkfx8ZFOEIBhAK8VzAtoyRg4/koSr5hzCURF1PCmFdY24irH6GAsCqs+HZsXIQjFEAoIDG/DWw10QI2no8SbZJM2ycU4O9oEQogFOCvgsx6Ewoo2SsRn8MIBZjVbrK0jlwowIH/4Q3pj7n/PQTVakmHXiSlZ/o+PL/98ZeGjH9Sc/73vTbl5emA/WqqaYNLdPYptbeM7dw5YPjEGVq3foNOPPZQ9WrbWOXKZeidD7/Q0PHTtWHjJuWUz1Knu2907wYw7dk3NOHRF1Uhp7x7t4CVq3L17MzZemxUF13VtGupjw/YXv/ddt3F95y3NQChAJ+0hAJ8AvroHtdFbR9kxbrG1Y9QQFAV5H0cGxfhCAUQCvBewbSMkoCN56Mo+YYxl0RcTAljXmFtI65+hALCqrDi27FxEY5QAKGAxPw2sNVEC9h4Pkq0STJtn1CAv6NFKIBQgL8KMutNKKBkr0R8DiMUYFa7ydI6kqEAB3/FfGnFH1Lu4n8eFbBzTWnnvZLlsCTVfhIK8Hm4CAX4BPTRPa6L2j7ICAVIIhQQVAV5H8fGRThCAYQCvFcwLaMkYOP5KEq+YcwlERdTwphXWNuIqx+hgLAqjFCAF+lEfI7dpVKmctfnaWMeoQAvx4g20RMgFJDcx5RQgL/jRyiAUIC/CjLrTSiAUIBZxdDaVCCyoQBTCNqXWYBQQJnp/ulIKMAnoI/uibiY4mN3resaVz9CAeGXoo2LcIQCCAWE/5vAFm0QsPF8ZINLMu1DXBe1gzpGcfUjFBBUBZmNY+MiHHcKIBRgVsW0joqAjeejqNiGMQ9CAf6UCQUQCvBXQWa9CQUQCjCrGFqbChAKMBWj/dYChAI81sTsj7/UwDFPaO89qrs97mx8pQ7avyahAI9+O6JZXBe1g7KMqx+hgKAqyPs4Ni7CEQogFOC9gmkZJQEbz0dR8g1jLnFd1A7KNq5+hAKCqiCzcWxchCMUQCjArIppHRUBG89HUbENYx6EAvwpEwogFOCvgsx6EwogFGBWMbQ2FSAUYCpGe0IBZayBl974SGty1+n6y88uNgJ3CigjaADd4rqoHQCdO0Rc/QgFBFVB3sexcRGOUAChAO8VTMsoCdh4PoqSbxhzieuidlC2cfUjFBBUBZmNY+MiHKEAQgFmVUzrqAjYeD6Kim0Y8yAU4E+ZUAChAH8VZNabUAChALOKobWpAKEAUzHaEwooYw08/tybemP2XFWulKPsrEy1a369KlYor8KiojKOSDe/AqkpKfj7QIyrX4pSJBUpiN9cZyReCCCwPQF+S6gPywRS9M9fgSD+CFg2tbjsTkqK81fc/VPOqwwCcfVz5u2WTQTqxj2GSTIPG/fVht+BRLjYMO8ynLLogkBgAon4vQts52M5UJL8oYvlsUm2Sf9zDZBX8gjsiKO1+crUjhjbq2wi9iER2/TqQbuyCzhrOrwQ8CPA4wM86i1eulIFBQXabddd9Mwrs/XHn4vVsslVWrQs+dOGHgmsa7bbLtn4+zgqcfWrUSVbfy0P5vc2kW8mbfimu9fys/GbuTb4VchOl/NGbvW6PK+UvtuF/Q0L3qf6PmQMELBA+XJpyshI06q1mwIemeHCEqhUPkP5BUVatzE/rE1Gajtx9auQneGupOduSP66qVo5S6tyNyqvIJHvRL39WtTYOVt/r1xvVYihaqVMrVqXp7z8xH1j3vnG8qKAPo94OxJSlYqZWrs+TxsTOG+v+0o7BHaEgI3nox0xz6iMuXX4LezPsVFx3DwP7hQQzDXARNaFjdfVtuXh904BO2K5MyszTVkZaVqZm7jrAJVyMtz37+tD/DxSLiNVOdkZWrF6YyLLl20HLOCs6fBCwI8AoQCPeh9//q2q7lxJ+++zh16f/ZnmffuL7m12jXh8gEfAHdAsrre/D4oyrn48PiCoCvI+jo0fXggF8PgA7xVMyygJ2Hg+ipJvGHOJ6+3vg7KNqx+PDwiqgszGsfF23Tw+IHFhCLPqoTUCwQrYeD4KdobRHo1QgL/jSyiAUIC/CjLr7TcUYLY1b62z/y8UsCKBoYBEfA7L/L9QwHJCAd4KJUla8fiAJDlQFu8moQCPB+fn3xaq59CHValijvLzC9SrXWNVrVKZUIBHvx3RLK6L2kFZxtWPUEBQFeR9HBsX4QgFEArwXsG0jJKAjeejKPmGMZdEXEwJY15hbSOufoQCwqqw4tuxcRGOUAChgMT8NrDVRAvYeD5KtEkybZ9QgL+jRSiAUIC/CjLrTSigZK9EfA4jFGBWu8nSmlBAshwpe/eTUIDPY8OdAnwC+uge10VtH2TFusbVj1BAUBXkfRwbF+EIBRAK8F7BtIySgI3noyj5hjGXRFxMCWNeYW0jrn6EAsKqMEIBXqQT8Tlsl0qZynUeH5BHKMDLMaJN9AQIBST3MSUU4O/4EQogFOCvgsx6EwogFGBWMbQ2FSAUYCpG+60FCAX4rAlCAT4BfXRPxMUUH7trXde4+hEKCL8UbVyEIxRAKCD83wS2aIOAjecjG1ySaR/iuqgd1DGKqx+hgKAqyGwcGxfhuFMAoQCzKqZ1VARsPB9FxTaMeRAK8KdMKIBQgL8KMutNKIBQgFnF0NpUgFCAqRjtCQUEXAOEAgIGNRgurovaBkTbbRpXP0IBQVWQ93FsXIQjFEAowHsF0zJKAjaej6LkG8Zc4rqoHZRtXP0IBQRVQWbj2LgIRyiAUIBZFdM6KgI2no+iYhvGPAgF+FMmFEAowF8FmfUmFEAowKxiaG0qQCjAVIz2hAICrgFCAQGDGgwX10VtAyJCASUIEAoIqoK8j2PjIhyhAEIB3iuYllESsPF8FCXfMOYS10XtoGzj6kcoIKgKMhvHxkU4QgGEAsyqmNZREbDxfBQV2zDmQSjAnzKhAEIB/irIrDehAEIBZhVDa1MBQgGmYrQnFBBwDRAKCBjUYDhCAQZYJTSNqx+hAH91U5beNi7CEQogFFCWWqZP8gvYeD5KftVwZxDXRe2glOPqRyggqAoyG8fGRThCAYQCzKqY1lERsPF8FBXbMOZBKMCfMqEAQgH+KsisN6EAQgFmFUNrUwFCAaZitCcUEHANEAoIGNRguLguahsQbbdpXP0IBQRVQd7HsXERjlAAoQDvFUzLKAnYeD6Kkm8Yc4nronZQtnH1IxQQVAWZjWPjIhyhAEIBZlVM66gI2Hg+ioptGPMgFOBPmVAAoQB/FWTWm1AAoQCziqG1qQChAFMx2hMKCLgGCAUEDGowXFwXtQ2ICAWUIEAoIKgK8j6OjYtwhAIIBXivYFpGScDG81GUfMOYS1wXtYOyjasfoYCgKshsHBsX4QgFEAowq2JaR0XAxvNRVGzDmAehAH/KhAIIBfirILPehAIIBZhVDK1NBQgFmIrRnlBAwDVAKCBgUIPhCAUYYJXQNK5+hAL81U1Zetu4CEcogFBAWWqZPskvYOP5KPlVw51BXBe1g1KOqx+hgKAqyGwcGxfhCAUQCjCrYlpHRcDG81FUbMOYB6EAf8qEAggF+Ksgs96EAggFmFUMrU0FCAWYitGeUEDANUAoIGBQg+HiuqhtQLTdpnH1IxQQVAV5H8fGRThCAYQCvFcwLaMkYOP5KEq+YcwlrovaQdnG1Y9QQFAVZDaOjYtwhAIIBZhVMa2jImDj+SgqtmHMg1CAP2VCAYQC/FWQWW9CAYQCzCqG1qYChAJMxWhPKCDgGiAUEDCowXBxXdQ2ICIUUIIAoYCgKsj7ODYuwhEKIBTgvYJpGSUBG89HUfINYy5xXdQOyjaufoQCgqogs3FsXIQjFEAowKyKaR0VARvPR1GxDWMehAL8KRMKIBTgr4LMehMKIBRgVjG0NhUgFGAqRntCAQHXAKGAgEENhiMUYIBVQtO4+hEK8Fc3Zelt4yIcoQBCAWWpZfokv4CN56PkVw13BnFd1A5KOa5+hAKCqiCzcWxchCMUQCjArIppHRUBG89HUbENYx6EAvwpEwogFOCvgsx6EwogFGBWMbQ2FSAUYCpGe0IBAdcAoYCAQQ2Gi+uitgHRdpvG1Y9QQFAV5H0cGxfhCAUQCvBewbSMkoCN56Mo+YYxl7guagdlG1c/QgFBVZDZODYuwhEKIBRgVsW0joqAjeejqNiGMQ9CAf6UCQUQCvBXQWa9CQUQCjCrGFqbChAKMBWjPaGAgGuAUEDAoAbDxXVR24CIUEAJAoQCgqog7+PYuAhHKIBQgPcKpmWUBGw8H0XJN4y5xHVROyjbuPoRCgiqgszGsXERjlAAoQCzKqZ1VARsPB9FxTaMeRAK8KdMKIBQgL8KMutNKIBQgFnF0NpUgFCAqRjtCQUEXAOEAgIGNRiOUIABVglN4+pHKMBf3ZSlt42LcIQCCAWUpZbpk/wCNp6Pkl813BnEdVE7KOW4+hEKCKqCzMaxcRGOUAChALMqpnVUBGw8H0XFNox5EArwp0wogFCAvwoy600ogFCAWcXQ2lSAUICpGO0JBQRcA4QCAgY1GC6ui9oGRNttGlc/QgFBVZD3cWxchCMUQCjAewXTMkoCNp6PouQbxlziuqgdlG1c/QgFBFVBZuPYuAhHKIBQgFkV0zoqAjaej6JiG8Y8CAX4UyYUQCjAXwWZ9SYUQCjArGJobSpAKMBUjPaEAgKuAUIBAYMaDBfXRW0DIkIBJQgQCgiqgryPY+MiHKEAQgHeK5iWURKw8XwUJd8w5hLXRe2gbOPqRyggqAoyG8fGRThCAYQCzKqY1lERsPF8FBXbMOZBKMCfMqEAQgH+KsisN6EAQgFmFUNrUwFCAaZitCcUEHANEAoIGNRgOEIBBlglNI2rH6EAf3VTlt42LsIRCiAUUJZapk/yC9h4Pkp+1XBnENdF7aCU4+pHKCCoCjIbx8ZFOEIBhALMqpjWURGw8XwUFdsw5kEowJ8yoQBCAf4qyKw3oQBCAWYVQ2tTAUIBpmK0JxQQcA0QCggY1GC4uC5qGxBtt2lc/QgFBFVB3sexcRGOUAChAO8VTMsoCdh4PoqSbxhzieuidlC2cfUjFBBUBZmNY+MiHKEAQgFmVUzrqAjYeD6Kim0Y8yAU4E+ZUAChAH8VZNabUAChALOKobWpAKEAUzHaEwoIuAYIBQQMajBcXBe1DYgIBZQgQCggqAryPo6Ni3CEAggFeK9gWkZJwMbzUZR8w5hLXBe1g7KNqx+hgKAqyGwcGxfhCAUQCjCrYlpHRcDG81FUbMOYB6EAf8qEAggF+Ksgs96EAggFmFUMrU0FCAWYitGeUEDANUAoIGBQg+EIBRhgldA0rn6EAvzVTVl627gIRyiAUEBZapk+yS9g4/ko+VXDnUFcF7WDUo6rH6GAoCrIbBwbF+EIBRAKMKtiWkdFwMbzUVRsw5gHoQB/yoQCCAX4qyCz3oQCCAWYVQytTQUIBZiK0Z5QQMA1QCggYFCD4eK6qG1AtN2mcfUjFBBUBXkfx8ZFOEIBhAK8VzAtoyRg4/koSr5hzCWui9pB2cbVj1BAUBVkNo6Ni3CEAggFmFUxraMiYOP5KCq2YcyDUIA/ZUIBhAL8VZBZb0IBhALMKobWpgKEAkzFaE8oIOAaIBQQMKjBcHFd1DYgIhRQggChgKAqyPs4Ni7CEQogFOC9gmkZJQEbz0dR8g1jLnFd1A7KNq5+hAKCqiCzcWxchCMUQCjArIppHRUBG89HUbENYx6EAvwpEwogFOCvgsx6EwogFGBWMbQ2FSAUYCpGe0IBAdcAoYCAQQ2GIxRggFVC07j6EQrwVzdl6W3jIhyhAEIBZall+iS/gI3no+RXDXcGcV3UDko5rn6EAoKqILNxbFyEIxRAKMCsimkdFQEbz0dRsQ1jHoQC/CkTCiAU4K+CzHoTCiAUYFYxtDYVIBRgKkZ7QgFlrIEVq9aoU7+JKpeRoTVr16l/p9tUtUplEQooI2gA3eK6qB0AnTtEXP0IBQRVQd7HsXERjlAAoQDvFUzLKAnYeD6Kkm8Yc4nronZQtnH1IxQQVAWZjWPjIhyhAEIBZlVM66gI2Hg+ioptGPMgFOBPmVAAoQB/FWTWm1AAoQCziqG1qQChAFMx2hMKKGMNfDT3GxUUFOqU4w/XIzNeU7lyGbr20jMJBZTRM4hucV3UDsKOUMB6FQUFmaBxbFjU9jp1GxfhbPCrkJ2u1JQUrV6X55XSdzsupvgmZIAkF7DxfJTkpKHvflwXtYOCjqsfoYCgKshsHBsX4QgFEAowq2JaR0XAxvNRVGzDmAefY/0pEwogFOCvgsx6Ewoo2SsRn8MyM1KVk52h5as3mh1EWlstQCjA6sOTFDuXUlRUlOxrY6FCO8GAVt1H6d5m12ifmjUIBYSqX3xjhAL84cfVjzsF+KubsvS2cRGOUAB3CihLLdMn+QVsPB8lv2q4M0jExZRwZ7hjtxZXP0IBO7autjW6jYtwhAIIBSTmt4GtJlrAxvNRok2SafuEAvwdLUIBhAL8VZBZb0IBhALMKobWpgKEAkzFaL+1AKEAg5pYuSpXvYdP1TWXnqk6tQ8x6ElTBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEwhcgFODRPHfterXrPVYd7mqgmrtX99iLZggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCROgFCAR/sxDz+nWW99qpq7V3N7nH3qMapX9zSPvWmGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBA+AKEAsI3Z4sIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgiEIkAoIBRmNhKkwO8L/lbvYVOVnV1Oa3LXqVe7Jtpzt3/u4MDLu8A7H36hPsOn6tXHB3nvlMQtZ3/8pQaOeUJ77/HP4z/ubHylDtq/ZlLOaNWateoxeLLy8gtUPitT/To1U0pKipVzGTz2Sf32xyJ33374ZYF6tG2kE485NKH7+ub7n+vZmbNVqUKO8vLy1bt9E2VkpIe6T48984acmiwoKNCNV52n0088KtTtszEE4ijw5Tc/a/ikGe55MycnW33va6rUVDvPnXE8Pl7mPOqhZ/Tlt7+4TY86rJaa33K5l260+ZdAQUGhbrqrj6659MzY3PWsQYveqrJTRVdh/3320D1Nr07amnhu1vt69Z1PtXbdBt1xy+WqU/sQK+fy/Kvv67V35rj7tmTZSp1ywhG6q/GVCd3XTZvy1Kn/RGWWKyfnvfTVF5+hM04K9/3X0uWr1HXgg8rOynT//vRpf6vKlctIqAsbRyDqAitWrVGnfhNVLiNDa9auU/9Ot6lqlcpRn3ak5vfme3P1yIzX3PfvaampGtj1DmWkp0VqjmFMZtDYJ7R8xWr17dA0jM0lfBtcAwz/EDjXKFt1e2DLhud+9aPenD5UmQl+r8M1wPBrgS0igIDdAoQC7D4+7F0JAj/+ukA52VnavUZVjZv6gvaoUVWXnHcSVgYCzoWwXkMf1uKlK/TwiI4GPZO36UtvfOSGSK6//OzkncT/7fmISTN01KG13AuZ//v6Jx1ywN4Jf5NdGqpzMcapucHdmic8wNCu11g1u/FS1dp3D7XsMkJt77heNXf/JywSxssJItzQoremj+/uhhIa3tNPj47qHMam2QYCsRZwwjhnnVJbu1Wv4v7ut2p2rfapWSPWJsk2eSfQ6Pzt27gpT85C71MTeiTbFBK+vxMfe0nOe2knoBeXR6HddFdfTR2Z/O93nfexzrnrwSHttTp3nRb9vUwH19or4TW1vR0oKipS6x5j1Pmem7YEMxK1w06wfNiE6Rra405999N8TX5ypvp1bBbq7jjBpgP3r6nzTj9Ojz79mirklNflF5wS6j6wMQTiJvDR3G/kBOJOOf5wd2HZCeJce+mZcWNI6vl+OOdrHXvkge6xa9pmkHq2a+y+n+flXeDzr37UUy++I+fvclxCAVwD9F4fO6LlJ59/pzlffKfmDa/YEcMbjck1QCMuGiOAQAwECAXE4CBHcYrORbAO909wpzZ+QGu+YWF4kJ1vqNx6w8XqMuBBTRnewbB3cjZ//Lk39cbsuapcKcf9dk675terYoXySTmZJq0H6NTjj3Av6tdwFreaXGX9PHoOfVj1rzhbB+y7Z8L31XFr3X20dtt1F+1WfRd1b9Mw1H1yLkpd06ybHh/TVfkFBarboL1mTRuorMxyoe4HG0MgrgLLV65R215jNLZ/a75llIRF4Cxqz3jpXd3b7Bqdf8ZxSTiDxO2y8/dv+gvv6JAD/llIjkso4NKbO7h3lli5KldX1D1V5552bOIOgo8tz533o6Y+Ncv9huuyFavdgKPtoQDbLsh3G/SQ/vxrmXv3goFdbw/9femkaS+rcsUcXX3JGZr8xEz3OLa+/VofVUFXBBDwKuB8BmvVfZT7/oFQqFc1e9q9+9EXGjbhKZ18/OFqc/t19uxYEuzJ+g2b1L7PWDcQPf6RF2ITCuAaYOKKs7CwSLe3H6yRfe624gtMXANMXC2wZQQQsFOAUICdx4W98ijgfMNiw8Y8Nal/kcceNHvt3Tn6e8kK95blt9x9f2xCAYvI2SYdAAAgAElEQVSXrnRv1e4sBD/zymz98efipFhML6lib27Z1/12+xGH7OfegvTic0+y9vaxzv479j2HTNEDfe+24hfQ+XDS5d5b3LuMOH7O7WOPPHT/UPfNuQXii69/6N7x5KPPvtHjY7sqPY1bIIZ6ENhYLAWcb4eOnvKsOtx1I98wSuIKyF273n0PM210F4KhHo+jE0JzFkPu79DMvf2884pLKGDet7/o0AP3cYN419/eQ4+N7qrsrOQL4n38+bd66PFXNLZ/Ky1avFwd+o7X5GH3eayAxDRzHlUxcXA7Ky4IO4+QefKFt93HRv21ZLm6D5rsWob5ch770H/UY+5ds5xb6ToB5UQ/ViHM+bMtBBIl4ITCeg+f6j46x9bHriTKJpm26yw0tu4xSo2uqxv65/dkctp6XweMmuZeM9qpcgU5d6yJy50CuAaYuKqd9fan7jVX58toNry4BmjDUWAfEEDAJgFCATYdDfbFk4DzDQvnG04nH3e4nDca3/zwm5v25uVNoEPfCdr8+Pn3PpmnhtddqMbXRz9U4VxIrbpzJfdZsq/P/kzOBeJkrZs+w6fqonNOVO3DD9DAMY+7vwvO7RBtfTkJ7XIZ6bryotOt2MUbmvfS+IFtVCEn2/VzbqF8Wp0jQ923tz/4n3sL7NVr1umuzsNj8xiPUJHZGAJbCXz74+9yvmXeu/2tSbkgGPcDum79RrXvM04je7d0Keo17py0i7uJOJbObWPHTHnO/Zb5/IWL3V3oc9+t2nvPXROxO6Ft03lMz7Oz3tM1l5zp3jL32tt6uIHY8tmZoe1DUBtynkffuf8kdyHbeZRA8w7DrH4sws+//6kJj74Y+i36t+XtPFvYCWK2bX69nGBR07aD3GBRmK8Fi5Zo/YaN7h0KnG+8Hn1YLZ158tFh7gLbQiB2As7ve7veY9XhrgahPjIudtA7cMJOqLFb64bunVZ6D5vqnjdPPeGIHbjF6Ay9aVOemrQeqJq7V5PzXtoJSLe/s77OOrl2dCa5jZlwDTBxh7hV99G6t9nV1pxzuQaYuFpgywggYKcAoQA7jwt7tR0B55sx3QY+qPLZWcpdt1692jXh235lrJg43Sng598WyrmFfaWKOcrPL1Cvdo3dC+PJ+HLu9NB72MPKyEh3vyHZp/2tSktLtXYqjnvds07Q8UcfbMU+fjDnKz329BtuUr6wsNB9JmHY39J3bhn73qfzlJqSojsb1eObDlZUBjsRdYHG9/ZXkYpUoXy2O9Xbbr5Mhx+0b9SnHan5OedO5xxeVCSdfNxhanR93UjNL6zJOHdMcl5xuVPA4LFPuiFi573SWafUVv0rzgmLOvDtPDx9lj794nt3Yblpg0us/sbrzLc+0S+//2nFs2SdA+HcKaLrgAfdb+mvXrNWN9Q7Vycdd1jgx2h7AzqPLWjfe5x7h4AqO1dSl3tuVmpqSqj7wMYQiJvAmIef06y3PnUXRZ3X2aceE5u/f1E51h/O+doN9pYvn6XszHK6v2Mzq69/2Oq+8K+lsbpTANcAE1eJVzTqrBkTe1rze8o1wMTVAltGAAE7BQgF2Hlc2CsEEEAAAQSMBZwL3s43z5zbC7/33EjtXLniljGcb+tNeXKWe1HcudNEp5Y3uh/SnG+Mdrx/gpxvUTuPVHBCEs4315yX8626viMecZ+96zyPuX+n25I2TGOMSQcEEEAAAQQQQCAJBcryfvCuTsN1/hnH69LzT07CGbPLCCCAAAIIIIBAPAWcR5P2GDzZvSPiBWceX+o1wA0bN6nbwIf01gefKzsrU3c2rufeVc151bn4Dj03uY9qVKsST0xmjUBMBAgFxORAM00EEEAAgegLOBd0D661l8ZOfV7vPjNiSyjAuV1u5wGT3FsmO7ddvOO+obronDrutyWd5/2ecvwRanLDxXrnw/+5IYBZ0wa530K8sH5bDep2h44/+hANGz9dixYv05DuLaIPyQwRQAABBBBAAIEkFSjL+0FCAUl6sNltBBBAAAEEEIitwOQnZ+qzL753v8jT6PqLtoQCtncNcMSkGfr2x/ka3O0OOXeide4iPGlIO/fxVoQCYltKTDxmAoQCYnbAmS4CCCCAQHQFnGcEOqGAI85uVCwU4DzCYbfqVdxbDTsvJxHs3DVgcLfmuvCGtvrwxdFbHqFwddNuat+ivpatWK2nX35X4we2cfs4zy8+48q79dGLo93HVvBCAAEEEEAAAQQQsE/A9P3g5GH36d+hgNkfz1Of4VP16KjO2mXnSvZNkD1CAAEEEEAAAQQQkPOe76D9a+rW1gN17WVnbQkFbOsaoPOe79KbO6j3fbfqqEP3dwUHjJqmCjnZ7iO//h0KcO5C+sMvf+iBPvfwuCtqDYGICRAKiNgBZToIIIAAAghsHQpo0nqArr/8bJ13+nEuzq/zF6nRvf3db/33HDJFzz7Uewtam55jVOeYQ7R8xRotW7FKHVveuOVnTijg4REdtfeeu4KMAAIIIIAAAgggYLGA1/eDb88YtiUUcPjB+6pp20Ea26+Vau27h8WzY9cQQAABBBBAAAEEHIEmrQYUCwVs6xqg857vqHOauF8iqlwpx8V78vm3NOeL7zWgy+1bQgGfz/tREx97SVNHdlT57CyQEUAgYgKEAiJ2QJkOAggggAACW18EbtCit2676VKdfuJRLs6ffy3VFY07a1jPOzV8wgw9Ma7bFrRO/SbqwP1rasXKNXKeSdvm9uu2/Oy869toRK+7dMgBe4OMAAIIIIAAAgggYLGA1/eDn7w81g0FnHTc4Xr8uTd13531dfJxh1s8M3YNAQQQQAABBBBAYLPA1qGAbV0DfP/5UTr63CaaM3O8srPKud2fnfmeXn/3Mz3Q9243FHB/x2YaOHqaJg/roF2r7QwyAghEUIBQQAQPKlNCAAEEEIi3wNYXgW9tM1BX1j1dF51Tx4X5/uc/dFu7wRrao4U695+kl6b22wLWsssInVbnSDcUsOjvZerWuuGWn510SXM9PrYbdwqId3kxewQQQAABBBBIAgGv7wc33yng0y++V1FRkR59oDN3CUiC48suIoAAAggggAACjsDWoYBtXQPcfKeAN6YPUdUqlV28R2a8pi+/+XnLnQKyMsspp3yWnp7US87/5oUAAtETIBQQvWPKjBBAAAEEYi6w9UVg57mwO1WqoBaN6rkyL7/xsWa89I4GdbtD517bWu8//8CWN/sX33SferVrrKXLV+vRp1/TlOEd3D5Llq3UhTe000cvjlZGRnrMhZk+AggggAACCCBgt4DX94OThrRz7xRwcK29tGu1Knri+bc0bUwXpael2T1B9g4BBBBAAAEEEEDgP6GAbV0DdN7zXd6okzq1vEkn1D7YlesxeLL7/u/2my9z7xQwsvfd7vXCypUqqGPLBugigEAEBQgFRPCgMiUEEEAAgXgLbH0ReO68H9Su11g9PKKjcnKy1azNIPd5Y1ddfLqcZ40de+RBatrgEs16+xMNnzhDrzzaXxs35unCG9qqf+fbdPxRB6vfA48pd9169e90W7xxmT0CCCCAAAIIIJAEAibvB51QwPlnHK9Lzz9ZzdoO0tGH1VLzhlckwSzZRQQQQAABBBBAIN4CW98pYHvXAMdNfUGff/WDhnS/UwsWLVGje/vpkZGdtO9eu7mhgOcm91F2ZqYbHhjQ+fYt4YF4CzN7BKIlQCggWseT2SCAAAIIxFRg5apcnXn1Pe7s8/Lyt3yb//UnBru3BZsyfZYmPvqi8vILdMWFp6p9i/pKSUlxHxHQvs84ff39b6q5e3X1ue9WHXbQPu44H839Rj0GT9GSZSt0nBMM6NhMO1WuEFNhpo0AAggggAACCNgtUNb3g/8OBSxavFxXN+2qCQPb6NAD/3lPyAsBBBBAAAEEEEDALoGrm3bTT78tVH5+gdJSU5WSmqL+nZrpgjNP2OY1QOd6YffBk/Xau3NUPjtL9za7RpdfcIo7sc2hgBrVqujN9z/X/SMf1bMP9nYfJ8ALAQSiI0AoIDrHkpkggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBQTIBQAAWBAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAUIBUT0wDItBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECAVQAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCERUgFBARA8s00IAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIBQADWAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAUIBUT0wDItBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECAVQAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCERUgFBARA8s00IAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIBQADWAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAUIBUT0wDItBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECAVQAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCERUgFBARA8s00IAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIBQADWAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBARAUIBUT0wDItBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEECAVQAwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCERUgFBARA8s00IAAQQQQAABBBBAAAEEEPAv8NSL7+ihJ17RS1P7+R+MERBAAAEEEEAAAQQQQAABBBBAAIEECBAKSAA6m0QAAQQQQAABBBBAAAEEEEgOAZNQwMtvfKy2vcYUm9iu1XbWGScepXuaXaPKFXOSY9LsJQIIIIAAAggggAACCCCAAAIIREqAUECkDieTQQABBBBAAAEEEEAAAQQQCFLANBTQZcAkvfTIP3cVKCwo1K9//KX7Rz6q/fbeTSN6tTTatfyCAqWnpRn1oTECCCCAAAIIIIAAAggggAACCCCwtQChAGoCAQQQQAABBBBAAAEEEEAgNgJLlq1Ux/sn6n9f/6iau1dX69uvU7O2g/T6k0O0W/Uq+vyrH9VzyBTNX7hYRx9eS3VqH6LnZr3vPj5g1tufatDYJ9Sk/kV6dMZrWrk6V6eecKS6tb5FWZnl5NwpoOvASZozc3wxz9dnf6bW3UdrzqzxykhP08eff6sBo6bp1/mL5NxJ4JpLz1TDa+sqNTVF/UdN05rcdVq1Zq0++/J7ffD8KK1bv0G9h02VM44TErjgzOPV4a4GKlcuQytWrVGPwVP08dxvlF9QqNqH11K31g21R42q7s9Ovfwu9e90myY/OVOLl67QPjVrqG+Hptpzt2qxOeZMFAEEEEAAAQQQQAABBBBAAIG4CxAKiHsFMH8EEEAAAQQQQAABBBBAIEYCTgAgP79Ag7o1dxff2/cZp3nf/qJ3nh6uypUq6NxrW+nKi07X7Tdfpu9/mq9W3UcpM7OcGwp4Y/Zcte4xSg2uPE9t7rhOa9auV/07eurc047Vvc2u2WYo4N2PvtCdnYZrzivj3D4X3tBO3ds0dBf3f//jL93WbrBaNKqnenVP0+CxT+qF1z7QrTdcrAvPOkFVq1RW3xGP6JsfftfALreroLBQd3UartPqHKlWt12r9r3HafGyFRrUtbnKZaSrc/9J2pSXrzH97tXq3HU66ZLmOvGYQzWyz91ucKF9n7FasGippo3uEqOjzlQRQAABBBBAAAEEEEAAAQQQiLcAoYB4H39mjwACCCCAAAIIIIAAAgjERmDjpjwdd2EzjenXSqeecIQ7b+cuAB3vn+CGApxv7jdpPUAfvTha5bOz3J87C/Lvf/rVllBAyy4j3LbOYr3zGvvw83rlrY/13EN9SgwF/LVkudr2HKvy2ZkaN6C1Hnz8Zb3z4ReaMrzDFveJj72k2R9/6f7bkHFP6pW3PtFrjw9yf15UVKTjLrxNQ7q30BknHeX+23c/zdeyFat1yvGHK3ftevffKuRku//96jtz1HvYw3r3mRFbQgGDut6humfXcX8+d94Puumuvnr/uQe0U+UKsTn2TBQBBBBAAAEEEEAAAQQQQACBOAsQCojz0WfuCCCAAAIIIIAAAggggECMBBYsWqIL6rfVy4/019577urO/OffFuqyhp3chf6PPvtGA0ZPcxfUN78effo1PfbMG1tCAff1HadPXxm35efPvDLbfRTAhy+OdkMBbXuNUXZWOffnhYVFcoIITgChV7smql51J3UfNFnTX3z7P+q77bqLXn9isBsK+PqH3zRpcDu3jfO4gzOvukfPT+mr/ffe/T/9fvx1gUZMnKEfflmggoICd3vOnQI+fmnMllDAk+O667CD9nH7Lvxrqc6/vo2entRLB+1fM0ZHn6kigAACCCCAAAIIIIAAAgggEF8BQgHxPfbMHAEEEEAAAQQQQAABBBCIlcD8hYtVt0E7vfJof+21xz+hgF/mL9KlN3dwQwHObf6Hjp+u2c+O3OIyZfosPfn8W1tCAc6i/9xXJ2z5+YyX3tWISTPc/k4ooMuASXrmwV7/9/MUNwjg3LZ/86vHkClaumylezv/kl5OKODHXxe6t/93XptDAc6dCGrtu0exLs5dBM67rrVOO/EotW9R393Om+9/rg59xxcLBTw+pquOOGQ/t+9mA+dxCPvUrBGr489kEUAAAQQQQAABBBBAAAEEEIirAKGAuB555o0AAggggAACCCCAAAIIxExg3foNOr7u7Zo0pJ1OPOZQd/Yvvvah2vcZ5y7qf/vjfLXoOLTY4wOcb/Z/+sV3xR4f8NZTw9zFfuc18sGn9d7H8/TEuG4lPj5ga+LJT8zU48+9qZmPDdjyo6XLV6lihfLKLJfh3ing36GAzY8P6NuhqS4483i3z7zvftUPP/+hk48/XOde26pYyMHZn0dmvFYsFNC/82265NyT3L4fzf1GTVoN0KevOI80+OcRCbwQQAABBBBAAAEEEEAAAQQQQCDaAoQCon18mR0CCCCAAAIIIIAAAggggMC/BOo376WdKlXQwC63a8WqNep4/wTNnfejGwrIzsrUWVffoxvqnatbb7hYX33/qzrdP1FZWeW2hALa9Bqjy84/WW3vuF7LV65R41b9dd1lZ6lpg0s8hQKWrVitC+q30W03Xaabr7lATiCgZecROu/043T7zZf9JxTg7HrvYVP12Zffa0j3FkpLS1Or7qN00rGHqUWjK3TSpS3UqeWNuuri0/XGe3M1adrL+vr7X/XB86NUWFSkky5prmOOOFADOt/mBg/a9ByjwsJCjR/YhrpAAAEEEEAAAQQQQAABBBBAAIGYCBAKiMmBZpoIIIAAAggggAACCCCAAALS7wv+dm+v/8Mvf6jWvnuqRcN6ur39YL37zAjtsnMl95v0fYc/oj8WLdExRxygs085Rg9Pn6VZ0wbqjdlz1XXQg2pz+3XuHQLWrd+oc087Vl3vvVnlymV4CgU4x+Cjz77RwDGP6+ff/1Tlijm69PyTdU/Tq5WellZiKGDtug3qNexhd/sZ6Wk6/4zj1aFlA/fOAs+8MlvDJjyljZvydPYptdW2+fVqeE8/rVyVq6cn9dLp9Vqqz323yrlDwYJFi3XYQfuqX8dm2m3XXSgHBBBAAAEEEEAAAQQQQAABBBCIiQChgJgcaKaJAAIIIIAAAggggAACCCAgFRYWKS8/311Qd17OXQIa39tPc1+dqNTUlO0SOYvyXQZOcr+Fnwyv1bnr3DsFPPtQbx2w757JsMvsIwIIIIAAAggggAACCCCAAAII7AABQgE7AJUhEUAAAQQQQAABBBBAAAEE7BRo1X20Vueu1YDOt6uoqEid+k1QRkaGRvZuWeoOEwoolYgGCCCAAAIIIIAAAggggAACCCBgoQChAAsPCruEAAIIIIAAAggggAACCCCwYwSWLl+l7oMm65P/fav09DSdeMyh6tjyRlWtUrnUDRIKKJWIBggggAACCCCAAAIIIIAAAgggYKEAoQALDwq7hAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBAChAKCUGQMBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEELBQgFGDhQWGXEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQCEKAUEAQioyBAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIICAhQKEAiw8KOwSAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACQQgQCghCkTEQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBCwUIBQgIUHhV1CAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgCAFCAUEoMgYCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIWChAKsPCgsEsIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggEIUAoIAhFxkAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQMBCAUIBFh4UdgkBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIEgBAgFBKHIGAgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCFgoQCjAwoPCLiGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIBCEAKGAIBQZAwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQsFCAVYeFDYJQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBIIQIBQQhCJjIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYKEAoQALDwq7hAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBAChAKCUGQMBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEELBQgFGDhQWGXEEBAevH1D9Vj8GT1bn+rLjjz+C0ks97+RMMmzNDS5atUp/Yhur9jU1WsUF6zP56nO+4bovT0tC1t295xvRpcea5+/m2hug+eou9/nq+qVSqrzR3X6+xTasOMAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQOQFCAVE/hAzQQTsEigsLFJqasp2d2rykzP12Rffa8mylWp0/UVbQgELFi1RvcZd9ODQ9jp4/5rqMvBBlc/OUtd7b9bLb3ys1979VEN73PmfsS9v1ElXX3yGGlx5nt7/9Cu16v6A3n1mpLKzytmFw94ggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggELAAoYCAQRkOgagIXNOsu2694eItC/JvffC5HnjwGc2Y2FPvfPiFho6frrz8fNXcvZp6tWuiarvspKKiIvUfNU1vvjdXhUVFOuHog9WzXWOlp6Xp+Lq3q9mNl2jStJf15vShKp+duU2q736ar4P2r6lbWw/UtZedtWUfnp35nma+9YnG9m/l9v1l/iLdeGdvffD8KD35/Fua992v6tWucbFx8wsK9Mwrs1Wv7mnufjivOhffoenje2ivPapH5XAxDwQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRKFCAUQGEggECJAs639efO+0EjerV0f965/yTtveeu7uL6JTd30NSRHXXAvntq8hMzNferf9o5wYGh46Zr+oQecu4FcN3tPdS0waW66Jw6OvnSFqp30Wlqc/t1mr9wsa69rft/tnv2Kce4jwPY/GrSakCxUMDzr77v3hFgcyhg0d/LdO51rfXhi6PdUMBr78zR+o2btHLVGp16whHqdPdNyimfVWw78779RXd3HanXnxhS6h0LKA0EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEkl2AUECyH0H2f7sCb338gxVCZ9U50N0P2/ZneziLl65U3Qbt9PaMYe4t+k+/sqUeH9NVc+f9qJff+EjjBrR2u69bv0EnXtJcn7860V1kX79ho9veeXUfNFm719hFzW68VCdf1kJj+rXSUYfu7/mYbB0K+POvpbq8UWf38QEH7benBo97Uo8+/bq7j59/9aO++OZnNbqurntHgDY9x2ifmru6wYDNL+fxA83aDlKXe27WSccd5nk/aIgAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAsgoQCkjWI8d+exJwFuE3L8h76rADGv17H2zbn9Km2+jefrrs/FO0e42qGjL2ST0xrpseevwVjZr8jHaqXHFL99y16/Xiw/crNTVVg8Y8rl9+/1NKSZGziH9DvXN1+82XuaGAaaO7uncb8PraOhTg9HMeHzDqoWdUJOnmay5QzyFTNGfmOGVllis27Gdf/qDO/SfqlUcHuP/+/c9/6O4uI3XfnTfozJOP9roLtEMAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgqQUIBST14WPnSxOwYRHe2cfN+2Hb/pTm99SL7+jVdz7VPjVraPddq6rhdRfqhVc/cP9tZJ+7/9PduTPAprw89WrXRGlpqeoy4EHtUaPqllCAc6eBvfbYVb8v+LtMjw/YeoNfff+r2vUaq5cf6bra6bUAACAASURBVK+ff/9TFXPKq3rVndxmH3/+rfoMf0TPT+6jP/5crKZtBqlvh6Y65ogDSps2P0cAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgMgKEAiJzKJlISQK2LcLbtj+lVc2qNWt17rWtVT470310wG677qKly1fpikad9eiozu63/ud996teePV9dWx5o+7p+oCOPqyWGx747qf5atl5hC486wS1uu1a904Bm0MBpW1388+3vlOAs+2b7uqjB4fep8oVc3Rvtwd03FEHqWmDSzRswlP65offNKznnSoqklp1H6WD9q/pbrvhPf103WVnqe7ZdbxumnYIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIREKAUEAkDiOT2JaAbYvwtu2Pl8q5s+NwrVi1xg0BbH698+EXGjp+ujZs3KSc8lnqdPeNOuaIA/X5Vz+qQ98JykhP0xGH7KdzTj1WnfpP1P0dm6pTv4meQwFXN+2mn35bqPz8AqWlpiolNUX9OzXTBWeeoCnTZ+nBaS9r06Y81T3nRHVs2UDpaWnuvvQa+rDe/vB/7v9/9qnHqF3z+lq2YpUuqN9WGRnpxaY7qOsdOve0Y70Q0AYBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBpBUgFJC0h44d9yJg2yK8bfvjxdB5JMBBtWqq/hXneGlOGwQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQsEiAUIBFB4NdCV7AtkV42/anNPGffl2oZu0G6fnJfVUhJ7u05vwcAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQsEyAUYNkBYXeCFbBtEd62/dme9pBxT+rZme+pe+uG7q34eSGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQPIJEApIvmPGHhsI2LYIb9v+GFDSFAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEklCAUEASHjR22buAbYvwtu2Pd0laIoAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAMgoQCkjGo8Y+exawbRHetv3xDElDBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBISgFCAUl52NhprwK2LcLbtj9eHWmHAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALJKUAoIDmPG3vtUcB0Ef7Bx1/WdZedrZzyWR634K3Z5v0w3R9n9E2b8lS0jc2kpqQoIyPd2078q1VZ9uPfGykoLFTu2o3KXbfR/eeKOZmqUD5TqampxvtCBwQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ2HEChAJ2nC0jWyBguvh99Hm3qnxWphped6EaXHleYOEAP6GAky9roVWr15aoWXP36pr52ABjaVOXzRtYvGyNFvy1QqvXblSF8uVUPjvT/dHadRu1dv0mVayQpb1q7KRqVSoa7xMdEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgeAFCAcGbMqJFAqaL304oIC8v351B5Uo5anRdXTW48lyVz/Z354AohAK+/nGRnDsE7L3HLsrKzCjxKG/YmKffFi5TelqqDqu1m0WVwK4ggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggEE8BQgHxPO6xmbWfUMBmpCDCAckcCsjPL9R7c3/SAXtXV1WPdwBYsnyNfvptsU49rpYbEOCFAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAKJESAUkBh3thqSQBChgM27ulPlCu6dA5xHC6SnpRnNIJlDAc6+n3DkvkpPN1vc35SXr7lfz9cZxx9gZEVjBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBAIToBQQHCWjGShQJChgJOOO0x3Nqqnow+rZTzTZA0FOI8M2KlStuc7BGwN49wxYPWa9TqURwkY1wwdEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEAhCgFBAEIqMYa1AEKGAE4891A0D1D687N94T8ZQwOJla/TX0tU6aL8avo7vd7/8pd2rVVI1j48e8LUxOiOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQDEBQgEURKQF/IQC6tQ+RHc2rqdjjjjQt1EyhgI++3q+au1dXVmZGb7mv35Dnn75Y4mOObSmr3HojAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC5gKEAszN6JFEAmUJBTiPB3DuDHDcUQcFNlM/oYAmrQZode66EvelRvUqGtm7pfF+luZSUFio2XN+1km19zMeu6QOH8z9OZBxGAQBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiJrAWXX8f0E1aibMJ1gBQgHBejKaZQKlLX5vvbtz5/2oY44o+2MCtjV9P6GAHUFamsuqNev1w++LdeRBeway+S+/W6B9a1ZVxZysQMZjEAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgCgLOFysJBUThSNo9B0IBdh8f9s6nQGmL3z6H99w92UIBC/9eqVW5G7T/XtU8z3F7DX+ev0Q52eVUo1rlQMZjEAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgCgKEAqJwFO2fA6EA+48Re+hDgFBAyXiluRAK8FF0dEUAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEDAQIBhhg0bRMAoQCysRGp2QRKG3xO6x5JNudAlbnrtf3vy7WkQfz+ICwaoTtIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQPwECATE75gnYsaEAhKhzjZDEyAUUDJ1aS6FhYV6d85POqn2/oEcK+cPGi8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIH/CpxV50BYENihAoQCdigvgydaoLTF77D2L9nuFOC4zP3mD+2/VzVlZWb4YtqwMU8/z1+iYw6t6WscOiOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAgLkAoQBzM3okkQChgJIPlheXJcvX6M8lq3XwfjV8HfFvf16kPXfdSVV3ruBrHDojgAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggIC5AKEAczN6JJGAl8XvMKaTjHcKcFy+/mmRKlfMVrUqFcvEtHjZGq1Zu0GH7u8vWFCmjdMJAQQQQAABBP5fe3cCZ1P9/3H8bd9/WkVCorQppFTyK0uoRJS17EvZsjNMjLFvY88eBpWyRYoihURIm5SitP1aZMu+/x/fr8e9jTH3auZ/79xxvq/zePToYebO99zv8/t5nPM553zO94sAAggggAACCCCAAAIIIIAAAggggAACCCAgigIIAk8LUBSQ9PAmx2X1xu901+0FlSlTxmTFyokTp7Tlqx/14D2sg5MsOD6MAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQAgFKAoIISZNpT2B5Dz8Due3v1RnCjAmp0+f0dpPdqhooTz/esYAM0PA9z/v1gN3FVGG9OnDSUvbCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQRICiAMLD0wJpoSgg4XdIa98nOYO/bcdvOnn6jApde6WyZc2U5J8eO35SP/zylzJnysiSAcnB5bMIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIhEmAooAwwdJs2hAwD+HNVr5MZKawT7z/tPZ9kjtKu/ce1M+/79ffh44qR7YsypE9i23i8JHjOnz0uHLnzKYC+S7XVZfnTG7TfB4BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMIgQFFAGFBpMu0J+B7Gp/Y3C1SMkNa+T3Jdzpw5q0NHjung4eP2T3PlyKKc2bMqffp0yW2KzyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBgFKAoIIy5NI4AAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggEEkBigIiqc++EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQCKMARQFhxKVpBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEIilAUUAk9dk3AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACYRSgKCCMuDSNgAsCpUuX1ubNm13oKn0MswCxFGZgx5onnhwb8DB3l3gKM7BDzRNLDg12KnSVeEoFZId2QTw5NNip0FXiKRWQHdkFseTIQKdSN4mnVIJ2ZDfEkyMDnUrdJJ5SCZrdiKIAggABBP5fApyw/l98/HECAWKJcAilAPEUSk3aIp6IgVAJEEuhkqQdI0A8EQehFCCeQqlJW8QTMRAqAWIpVJK0Q+5EDIRagONTqEXdbo94cnv8U7P3FAWkpjb7QsCDApywPDioEeoSsRQheI/ulnjy6MBGqFvEU4TgPbhbYsmDgxrBLhFPEcT34K6JJw8OagS7RDxFEN9juyaWPDagEe4O8RThAfDY7oknjw1ohLtDPEV4ABzaPUUBDg02XUUgHAKcsMKh6mabxJKb4x6uXhNP4ZJ1s13iyc1xD0eviaVwqLrbJvHk7tiHo+fEUzhU3W2TeHJ37EPdc2Ip1KJut0c8uT3+oe498RRqUbfbI57cHv/U7D1FAampzb4Q8KAAJywPDmqEukQsRQjeo7slnjw6sBHqFvEUIXgP7pZY8uCgRrBLxFME8T24a+LJg4MawS4RTxHE99iuiSWPDWiEu0M8RXgAPLZ74sljAxrh7hBPER4Ah3ZPUYBDg01XEQiHACescKi62Sax5Oa4h6vXxFO4ZN1sl3hyc9zD0WtiKRyq7rZJPLk79uHoOfEUDlV32ySe3B37UPecWAq1qNvtEU9uj3+oe088hVrU7faIJ7fHPzV7T1FAamqzLwQ8KMAJy4ODGqEuEUsRgvfoboknjw5shLpFPEUI3oO7JZY8OKgR7BLxFEF8D+6aePLgoEawS8RTBPE9tmtiyWMDGuHuEE8RHgCP7Z548tiARrg7xFOEB8Ch3VMU4NBg01UEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAbcEKApwa7zpLQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIICAQwIUBTg02HQVAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQMAtAYoC3BpveosAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg4JAARQEODTZdRQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBwS4CiALfGm94igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCDgkQFGAQ4NNVxFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE3BKgKMCt8aa3CFxUYO/+g4oaOFm/796nJTMH+j+/fefPio2bqR27flWBa/NocK9WuumG63TixEmVrNxSmTJl9H+2QtmSGtm3rf33xFmLNfeNVTp58pTuv/t29evWVNmzZb3o9+AD3hD4+rsf1SnmRT1wT3G90LGhv1PvfLBRo6cu0F97D6hMyVs0uFdL5cqZXWs//lKto0YqY8YM/s92a11PT9eqpKoNuuv33Xv9Pz9z5ozqVi+v6A7/tOsNNXqRlMCp06c1eup8zZi7TB8uHqfLc+eyHzt79qzGTFugN5Z/qOPHT6hO9fLq1Kq2v4lZ897RtFfessegJx4pp+5t6ildunTauetX9Y2L1/adP+mqK3Kra+t6MscuNjcEAp3rDvx9WLEj47Vhy1fKliWLurWpp6rl77EoJobM795dvUk5c2RThxZPqUaVsnph6EtaunL9P3Bnz6pQgbxaPOOfc6gbqu72MtC5LlDutGjZWhtLCTcTX+sWj7fnv9iRM7Vu41abW9V7ooJaN6rhLq6DPTfHE5NzD+jRQlUeuvuiuVOgY9D4gR30eONe5wmeOnXa5uiVHyztoKx7XU5J7vTNjp/Ub2S8zHkya5bM6vJcHZUrc4fFW/XhFsVNfl279+xXsSIFFNutmW4omM89WEd7nJLcafn7G/XijEU6eeq08ua5QrFdm6rQddeQOzkaQwm7ndzcKdg136HDR8mdHI+p5OZOga75fv7fn+ROjsdSoFzn2PETihk+Q+9/9KmyZc2ids1qqna1h6zWT7/+qV6Dp8oc1/LnvUr9ujdTiduKkjs5Hkum+4GeiQSLmbUff6FBY+fYfPvO24pqaPSz9p4l950IqFAKUBQQSk3aQuASFzh85Jjqt+6nB+8rodUbPvcXBZw5c1aPNYzSM08+rPpPVNT8pR9ozoIVWhI/yD7UrdE02t7ITry9u3qzxr60QNNH9lDOHFnV/oWxuuuOYmrTmJvbl3io/Kuv/+nW7zRg9GwVLZxfuXJk9xcF/PLbbtVs1lvTR/XQzUUKqPfw6bZQpE+nRnr7vY+1Ys0mjYptd9F9NHp+kNo3q6W7S9x80c/ygUtfoH30GN1ctKAmzV6iNYvG+osC3nz3I02Z86ZmjI5S+vTp1bTTEPsAzTzI3bBlm2Lj4jVjdA9lyZxJ7aPHqke7Bip+c2F73HrqsQf1dK2HtW7TVnXuO15rFo1TtqyZL30sehBUINC5zvxR72HTdfTYcQ3u2VLffv+LmncZpkXTByhfnis0fvoiWxhniuLM/2OGT9crE3rbhyYJt3HTFypDhgyc6xyJw0DnumC5U2Iac6yaPHuJZoyK0sAxs+3DuIFRLbR339+q36a/4mLaqPSdxRwRdbubM19frk8+325vAjWt96i/KCBY7pRYLNAxaP+BQ6rfpp/mTopR7lw53IZ2pPcpyZ2qN4nWcw2r69GKZWQKBEy+/cGC0Tp46KiqN+mlycO66I5bisjE2WdffWePW2zeF0hJ7pQhfXobM/Om9LUvFZj7ByvWbFb8mJ4XgJE7eT+GEvYwJblTsGs+cie34idxb1OSOwW75kvYPrmTW7H1x+59AXMdc2/76+9+UlxMa5nPNe4wWC+N7K4bC1+nhu0HquzdxdW8wWNavf4z+0D3nVdH2Gs5cie3Yihhb4M9EwkUM+ZeVNX63TQiprXuLnGLRk+Zp9/+3ON/8ZL7Tu7GU6h7TlFAqEVpD4FLWODI0WP2Ib/5z7xB65sp4H+//2UfoG18e5J9w9ZsD9bqoGlx3ZQxQwa1jhql5a8Mu6DnW7f/YN+sLHn7jfZ38fPe0bZvd9kqNzbvC/z06x+2mnHWvHdtTPlmCjBvdJu3RiYN7WwRvv/pNz3TboA+WvKiXl/yvr785gf1794sKJCZacC08W+KB7wv7UYPzY1pUxRQvELT84oCoodMU5Hrr1Wzeo9aiNcWr9L6T7ZpdL92iho0RaWK36Q6j5+r4PZt5s0586ZuzUfK2WOY2co81lrzpsSqYP48boA63MtA5zpD8nC9rvaCyxSOmK1L7AQbQ2a2koq1O9sL/+sL5A2o99ufe9WiyzAtmNbvgmIBh8k93fVA57pguZO5eeTbTPFA7VYxGtSzpX3zdtW6T+3/zVsmZmvXa4zKly2pJx/7r6cd6dw5AXOuM+PfostwO/ONb6aAYLlTQrtgx6D+o2apyPX51aBmRbgdEUhu7jQqtq3uqNjsvDzr/uptNXtctHJmz6Yvvt6ph/97bpYJ8zZc216jtWreKEc03e5mSnIncyzrN2qW/57Cdz/8omadhmrtG+POwyR3ci+2UpI7zXxtecBrPnIn92IoYY9TkjsFu+ZL2Da5k1uxZR72B8p1Hm/UUwOiWujOW4tYlGEvvmpnD6xbo4KqNuim9Usn+O8tPdUyRj3a1lfB/NeQO7kVQuf1NtAzke5t6geMmT37/tbCt9doyvCutq2Dh47Y5y8blk5Q5syZ/O2TOzkcWCHqOkUBIYKkGQS8JLDly2/PKwowJ5vHG0Vp07LJ/qKAyvW6qkfbBrr6ytx2BoDCBfPJXOgXu6GA+nRunORDk+d6jFTFcqX8Uyx5yYy+BBaYNGvJeUUBS95dZ2cE8BUF/PbHHlWq28Um0aYoYMXqzTp6/IT2Hzholx0wywPkyP7PkhPmAUq1RlEaP6gjU5Y6GHiJiwLMFFo3FMrnLwpY/M46xb++XAtf6q9azXvrkQplbAGJmVbSTPXepskTF6h9+fX36tBnnFa+NlLp058rfGLzvkDic53pcRVbld3GXxRg4sscf9o2ran/1nxeXZ+rq5cXrlCWzJn1fPNaqvBAqfOgTJFKiduLcp7zfvhc0MPE57pguZPJhXybedj70aatGtb7uQvaNMetao162mKUIoWudVDV3S437zzsvKKAYLnTf3Jm90MFOgaZ6XBbdh2hN2cNVqYESzS5K+xWz5OTO5nYe/jB0qpXo4LMeTJq4BS9NWfoBXHz0qtva/uOn5I8drml61Zvk5M7mRndzGyDZnYJU9g7efabdvmuxOc7cie3Yihhb5OTO5kpuwNd8yVsk9zJ3XhKTu5Uu2VMktd8Pds/7Qckd3I3lnw9T5jr3FmxuS2azP2fc7NtmXuXmz/frnpPVLTLLr0xY4AfrGu/iSpT6pYL7gmQO7kdU75nIkUK5Q8YM3v3HdSefQfU6/ln/FimKGDW2F52+SXfRu7kdiyFovcUBYRCkTYQ8JhA4ot9s36bWZPULB1gbhAt/2CjogdP1aCerVSsyHWaNf9dNahZSYUL5NXEWUv0/rpPz0uIDM+EmW/oky++1dQR3Xjo5rF4uVh3El/sn3t78gW7fECxG66za5O+vHClnZrUTCX4+badalr3EVtla5Lp6wtcYwsDfNt7a7do4bI1enFQx4vtmt97UCDxje233tugSfGLNXNMT3ts6dB7nEx17Vuzh9hik1tvKqSh0c/p8JGjdoq3Tq1qq1K5u/wyZkrmVt1GqHfHRrqv9G0eFKNLgQSSurHdd8RMHTpy1C4fsPPH/+nZ7nGqULakWjxdzVZzmxvcLRpU05fffG/j5s34wcpz1WV2F2ZGFPNWwIrX4njo5mDYJT7XBcudzLTcvs0ULw3o0Vy33nT9eWpm3cqOfcbZabqTKmZykNipLie+sR0sdzKzMl3sGDR43MvKd82ValKnqlOOdPacQHJyp+07f7ZLMZnZ4Y4cPa4RvVvbou6E24cbv5R5e9LMIOA7B2LthkBycqeYLk1kCpp6D52uHDmy2hmUZo6Osm9O+jZyJzfiJlAvk5M7ndXZgNd8vvbJndyOp+TkTmZZuKSu+cxxy7eRO7kdTwlzncsvy6USlZpr8/Ip/uUmTWH3yjWfqEGtihozdYFemxzjBzMPbG8qUkCNa1fx/4zcye14SvhMZMOWrwLGzL79B2VmNjUvo/g2M7PJ2P7tdcuNhS56zee2Mr1PjgBFAcnR4rMIOCKQ1MW+uUFkbv78vnuvfaBmHty2afyEypUpfp6KOXmVrtLKrp90zdWXy9wUN8n0j7/8Yad6z54tiyOKdNMnkPhi3/zcvLn94oxFOiupUe0qtkpy8/LJF0y3bQpJXhg6Tcte/md5CvOQ7rFK96p65bIgOyiQ+Ma2mTnCrO+2bNXHujx3TpUvW0rmTZK5E/vYmQLaNatlH+qaLXEsmuOaKSKIatdAD91fwkFNt7uc1LnuwN+HFTsyXl9s26FiRQvaJVDM2tumKOC+am308VsT7TSBZkt842naK29p18+/2we8bO4JJHWuu1ju9MW2neo+YPIFSzD9feiI2vYcpXtK3mILUdjcE0h8fPk3uVOgY9DJU6f1QI12emP6AFsYwOaewL/Nncxa72Z2kpjOje1sXWaJr6Ydh2j2uF7+B7lLV67XxPjFmjik03kPd91TdbPHycmdHq14r51R0BQCmCVxzPJvo6cu0NJZg5UhQ3oLSO7kZhwFu08QKHcqe/ftAa/5THvkTm7HUlLXZsFyp+PHTyZ5zdf52ToWktzJ7XhKKtcxMwW8N2+kvT9gtjkLVshcy9WvWVFmdkHzUopve773WJUrc4d/pgByJ3fjKalnIuZluEAxY4oCzGy6CQuUzH2ouZNi/DMFkDu5G0+h7DlFAaHUpC0EPCKQ1MV+wq6dPHnKrmnzxoyBSpdOMg9RihbOfy55PnlKd1VtpdULx+jy3LnsOkt//LVPQ6Kf5c1Jj8RHcruR1IOShG2YdZa695+kt+cMtW/m5sqR3f/W0ceffq2BY+b416I8fuKkvbFt1i/NlWC63OR+Jz5/6QokvrGduCcz5i6zRUh9uzaRuRgrf39J1XyknP3YxFmL7fHKFAH4pgM063iXKn7jpQvCN0+xwMXOdabh1lGjVO3h+/RYxXttUcC8qbG6Lt/Vdp9mXdxnnnzYv4RAk45D7Fu4FJikeEgu6T+82LkuYe7ke7PWvDFw+MgxdWtTz993c54zD4Srlr/HxhebmwJJFQUEyp18Pw90DNr02TcaNmGu5k3p6yYmvb5gpoBAuVPdGuVlpjY113G+rUXX4ape+X5bjLvqwy0a+9JCTYvr5r8pDq9bAsnJncwsAFu/+V7De7f2I5k3LZe9Mlz58lxhf0bu5Fb8JO5tSnInXxsJr/nIndyOI1/vU5I7+f424TWf+Rm5k7sxFSjXqdE0WtHPN9Q9JW+2OLFxM3XN1VfI5E6V6nTRuiXj/S85maVz+ndvplLFbyJ3cjeUbM+Teiay78DBgDHz196/7XKVplDXbLv37FfVBt21YekEZcqUkdzJ8XgKZfcpCgilJm0h4BGBpC7267fprzaNa+j+0rdr0qzFdqaAKcO76qPNW22F0GQZFQAAB85JREFUm5k+Mu/VV9g3Rz7c9KV9S9ck0uaB7vxpsXYqeDY3BRJf7JsbRA3bD9T0UVH2DdxOMeNV+s5iavl0NY2eOl/bvt2l0f3a6exZqXPfF1WsSAH5KrbN2u89Bk62BQRsbgokLgowF21zF6/SuIEdbMLcpMNguz5giduKasWazfaYNGNUlE6eOqWG7QepR9v69qGtuQlZt3p5PVLhn2m83RR1t9dJnetGTHrNnq86tHhS6zZtlZn6zxxvcmTPqkFj59iplE3Bybbtu9Sqe5x92833tkCpyi31zqvDdfWV55YTYHNLIKkb24FyJ5/Mcz3i9HjlsrboxLeZQoHdew/YN3XZ3BVIfGM7WO7kUwp0DDLrl/7865/22MXmpsC/zZ1uKHStKtbupJfiuuuOW4vYvKpms96aOqKrrs17lWo2e8GuaeorjnNT0+1eJyd3+uyrHYoZMcMWJJmXBdZv/kpd+k2wazL77g2QO7kdT8nJnYJd85E7uR1Hvt4nJ3cKds1n2iN3cjOmDhw8HDDXmTz7TX269VuN7NtOZglKs9TSnHHRKlwwn5p3Gaa77jh3T9PMijNm2gIte3moLf4md3Izlkyvgz0TCRQzZhYTs2zl0Bee1d133qwh41+xS50MjX7WD0nu5G5MhbLnFAWEUpO2ELjEBVau/cSu4W6exprpskwVWuECebVo+gBt+GSb+o2Kt2t1F7/lBrvesu/Bh6nSnr3gXR07dsL+rk/nxnaKwJ6Dpmrpyo+UIUFBQNHr82v+1NhLXIqv/28ETPJiHtaeOXPGLiNh4qB2tQcV3aGh4ue9o+mvvq0TJ07qkYr3qtfzT9ubQ2YdQLNMxQfrP7P/rvBAKXVvU9+/btd7a7do5uvL7TSmbO4I7D9wSA891dF22Lxt66uQXflanHL/J6f6DJuu1Rs+U6aMGdW2aU3VefwhP86oKfM0/63V9ncm/szvzUVclfrd/O34PjyiT2u7PAqbtwWCnevMEjldYydqx65flefKyxTbralK3n5uJomDh46o15Bp2vjp17risv+oW+u6/lkCzJSlZiaBL96b7p8S19uK9M4nEOxcFyx3Mn9vljjp3ra+7i11qx+0Up3O2r3ngNKlT+f/Wb0aFewMJ2zeF3iqZYw9/pw6dVoZ0qe3cTA0upWqPHRPwNzJqAQ7BpllvMyyJyxF4f34SdjDlOZOq9d/rjHT5tsiODPFe8OnKsscgxYtW2sLwX05mG9fH8wfrcty53QL18HepjR3mvryUi18e40t9jazvJniXFMMfrHjloPETnU5JbmTuT8V6JqP3Mmp8LmgsynJnYJd85kdkDu5GVPBch3zkkDfuJn2xZPs2bKqU6vaqlHl3JKmZrp38/LSV9t3qcC1eTQwqoVuK3Y9uZObYeTvdbBnIoFixvzxhi3bFBsXr9179qm0KQzo1cqfa3PfyfGgCmH3KQoIISZNIYAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkJYEKApIS6PBd0EAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCEAhQFhBCTphBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEhLAhQFpKXR4LsggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQQgGKAkKISVMIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgikJQGKAtLSaPBdEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQCKEARQEhxKQpBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE0pIARQFpaTT4LggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCIRQgKKAEGLSFAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAmlJgKKAtDQafBcEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRCKEBRQAgxaQoBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIG0JEBRQFoaDb4LAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACIRSgKCCEmDSFAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAWhKgKCAtjQbfBQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgRAKUBQQQkyaQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIC0JUBSQlkaD74IAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAIBSgKCCEmTSGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIJCWBCgKSEujwXdBAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAghAIUBYQQk6YQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBISwIUBaSl0eC7IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggEEKB/wNjojxX+5708QAAAABJRU5ErkJggg==",
-      "text/html": [
-       "<div>                            <div id=\"2d19d45f-a639-42e1-b87b-be66e506a3c7\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>            <script type=\"text/javascript\">                require([\"plotly\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\"2d19d45f-a639-42e1-b87b-be66e506a3c7\")) {                    Plotly.newPlot(                        \"2d19d45f-a639-42e1-b87b-be66e506a3c7\",                        [{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[8425333,120447,46886859,4693836,556263527,2125900,372000000,82052000,17272000,5441766,1620914,86459025,607914,8865488,20947571,160000,1439529,6748378,800663,20092996,9182536,507833,41346560,22438691,4005677,1127000,7982342,3661549,8550362,21289402,26246839,1030585,4963829],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[779.4453145,9867.084765,684.2441716,368.4692856,400.448611,3054.421209,546.5657493,749.6816546,3035.326002,4129.766056,4086.522128,3216.956347,1546.907807,1088.277758,1030.592226,108382.3529,4834.804067,1831.132894,786.5668575,331.0,545.8657228999998,1828.230307,684.5971437999998,1272.880995,6459.554823,2315.138227,1083.53203,1643.485354,1206.947913,757.7974177,605.0664917,1515.5923289999996,781.7175761],\"xaxis\":\"x\",\"y\":[28.801,50.93899999999999,37.484,39.417,44.0,60.96,37.37300000000001,37.468,44.869,45.32,65.39,63.03,43.158,50.056,47.453,55.565,55.928,48.463,42.244,36.319,36.157,37.578,43.43600000000001,47.752,39.875,60.396,57.593,45.883,58.5,50.848,40.412,43.16,32.548],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[1282697,6927772,8730405,2791000,7274900,3882229,9125183,4334000,4090500,42459667,69145952,7733250,9504000,147962,2952156,47666000,413834,10381988,3327728,25730551,8526050,16630000,6860147,3558137,1489518,28549870,7124673,4815000,22235677,50430000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[1601.056136,6137.076492,8343.105126999999,973.5331948,2444.286648,3119.23652,6876.14025,9692.385245,6424.519071,7029.809327,7144.114393000002,3530.690067,5263.673816,7267.688428,5210.280328,4931.404154999998,2647.585601,8941.571858,10095.42172,4029.329699,3068.319867,3144.613186,3581.459448,5074.659104,4215.041741,3834.034742,8527.844662000001,14734.23275,1969.10098,9979.508487],\"xaxis\":\"x\",\"y\":[55.23,66.8,68.0,53.82,59.6,61.21,66.87,70.78,66.55,67.41,67.5,65.86,64.03,72.49,66.91,65.94,59.164,72.13,72.67,61.31,59.82,61.05,57.996,64.36,65.57,64.94,71.86,69.62,43.585,69.18],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[9279525,4232095,1738315,442308,4469979,2445618,5009067,1291695,2682462,153936,14100005,854885,2977019,63149,22223309,216964,1438760,20860941,420702,284320,5581001,2664249,580653,6464046,748747,863308,1019729,4762912,2917802,3838168,1022556,516556,9939217,6446316,485831,3379468,33119096,257700,2534927,60011,2755589,2143249,2526994,14264935,8504667,290243,8322925,1219113,3647735,5824797,2672000,3080907],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2449.008185,3520.610273,1062.7522,851.2411407,543.2552413,339.2964587,1172.667655,1071.310713,1178.665927,1102.990936,780.5423257,2125.621418,1388.594732,2669.529475,1418.822445,375.6431231,328.9405571000001,362.1462796,4293.476475,485.2306591,911.2989371,510.1964923000001,299.850319,853.5409189999998,298.8462121,575.5729961000002,2387.54806,1443.011715,369.1650802,452.3369807,743.1159097,1967.955707,1688.20357,468.5260381,2423.780443,761.879376,1077.281856,2718.885295,493.3238752,879.5835855,1450.356983,879.7877358,1135.749842,4725.295531000002,1615.991129,1148.376626,716.6500721,859.8086567,1468.475631,734.753484,1147.388831,406.8841148],\"xaxis\":\"x\",\"y\":[43.077,30.015,38.223,47.622,31.975,39.031,38.523,35.463,38.092,40.715,39.143,42.111,40.477,34.812,41.893,34.482,35.92800000000001,34.078,37.003,30.0,43.149,33.609,32.5,42.27,42.13800000000001,38.48,42.723,36.681,36.256,33.685,40.543,50.986,42.87300000000001,31.286,41.725,37.444,36.324,52.724,40.0,46.471,37.278,30.331,32.978,45.00899999999999,38.635,41.407,41.215,38.596,44.6,39.978,42.038,48.451],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[17876956,2883315,56602560,14785584,6377619,12350771,926317,6007797,2491346,3548753,2042865,3146381,3201488,1517453,1426095,30144317,1165790,940080,1555876,8025700,2227000,662850,157553000,2252965,5439568],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5911.315053,2677.326347,2108.944355,11367.16112,3939.978789,2144.115096,2627.0094710000008,5586.53878,1397.717137,3522.110717,3048.3029,2428.2377690000008,1840.366939,2194.926204,2898.530881,3478.125529,3112.363948,2480.380334,1952.308701,3758.523437,3081.959785,3023.271928,13990.482080000002,5716.766744,7689.799761],\"xaxis\":\"x\",\"y\":[62.485,40.414,50.917,68.75,54.745,50.643,57.206,59.42100000000001,45.928,48.357,45.262,42.023,37.579,41.912,58.53,50.789,42.31399999999999,55.191,62.649,43.902,64.28,59.1,68.44,66.071,55.088],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[8691212,1994794],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[10039.59564,10556.57566],\"xaxis\":\"x\",\"y\":[69.12,69.39],\"yaxis\":\"y\",\"type\":\"scatter\"}],                        {\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"gdpPercap\"},\"type\":\"log\"},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"lifeExp\"},\"type\":\"log\",\"range\":[1.301029995663981,1.301029995663981]},\"legend\":{\"title\":{\"text\":\"continent\"},\"tracegroupgap\":0,\"itemsizing\":\"constant\"},\"margin\":{\"t\":60},\"updatemenus\":[{\"buttons\":[{\"args\":[null,{\"frame\":{\"duration\":500,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":500,\"easing\":\"linear\"}}],\"label\":\"&#9654;\",\"method\":\"animate\"},{\"args\":[[null],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"&#9724;\",\"method\":\"animate\"}],\"direction\":\"left\",\"pad\":{\"r\":10,\"t\":70},\"showactive\":false,\"type\":\"buttons\",\"x\":0.1,\"xanchor\":\"right\",\"y\":0,\"yanchor\":\"top\"}],\"sliders\":[{\"active\":0,\"currentvalue\":{\"prefix\":\"year=\"},\"len\":0.9,\"pad\":{\"b\":10,\"t\":60},\"steps\":[{\"args\":[[\"1952\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1952\",\"method\":\"animate\"},{\"args\":[[\"1957\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1957\",\"method\":\"animate\"},{\"args\":[[\"1962\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1962\",\"method\":\"animate\"},{\"args\":[[\"1967\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1967\",\"method\":\"animate\"},{\"args\":[[\"1972\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1972\",\"method\":\"animate\"},{\"args\":[[\"1977\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1977\",\"method\":\"animate\"},{\"args\":[[\"1982\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1982\",\"method\":\"animate\"},{\"args\":[[\"1987\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1987\",\"method\":\"animate\"},{\"args\":[[\"1992\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1992\",\"method\":\"animate\"},{\"args\":[[\"1997\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"1997\",\"method\":\"animate\"},{\"args\":[[\"2002\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"2002\",\"method\":\"animate\"},{\"args\":[[\"2007\"],{\"frame\":{\"duration\":0,\"redraw\":false},\"mode\":\"immediate\",\"fromcurrent\":true,\"transition\":{\"duration\":0,\"easing\":\"linear\"}}],\"label\":\"2007\",\"method\":\"animate\"}],\"x\":0.1,\"xanchor\":\"left\",\"y\":0,\"yanchor\":\"top\"}]},                        {\"responsive\": true}                    ).then(function(){\n",
-       "                            Plotly.addFrames('2d19d45f-a639-42e1-b87b-be66e506a3c7', [{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[8425333,120447,46886859,4693836,556263527,2125900,372000000,82052000,17272000,5441766,1620914,86459025,607914,8865488,20947571,160000,1439529,6748378,800663,20092996,9182536,507833,41346560,22438691,4005677,1127000,7982342,3661549,8550362,21289402,26246839,1030585,4963829],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[779.4453145,9867.084765,684.2441716,368.4692856,400.448611,3054.421209,546.5657493,749.6816546,3035.326002,4129.766056,4086.522128,3216.956347,1546.907807,1088.277758,1030.592226,108382.3529,4834.804067,1831.132894,786.5668575,331.0,545.8657228999998,1828.230307,684.5971437999998,1272.880995,6459.554823,2315.138227,1083.53203,1643.485354,1206.947913,757.7974177,605.0664917,1515.5923289999996,781.7175761],\"xaxis\":\"x\",\"y\":[28.801,50.93899999999999,37.484,39.417,44.0,60.96,37.37300000000001,37.468,44.869,45.32,65.39,63.03,43.158,50.056,47.453,55.565,55.928,48.463,42.244,36.319,36.157,37.578,43.43600000000001,47.752,39.875,60.396,57.593,45.883,58.5,50.848,40.412,43.16,32.548],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[1282697,6927772,8730405,2791000,7274900,3882229,9125183,4334000,4090500,42459667,69145952,7733250,9504000,147962,2952156,47666000,413834,10381988,3327728,25730551,8526050,16630000,6860147,3558137,1489518,28549870,7124673,4815000,22235677,50430000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[1601.056136,6137.076492,8343.105126999999,973.5331948,2444.286648,3119.23652,6876.14025,9692.385245,6424.519071,7029.809327,7144.114393000002,3530.690067,5263.673816,7267.688428,5210.280328,4931.404154999998,2647.585601,8941.571858,10095.42172,4029.329699,3068.319867,3144.613186,3581.459448,5074.659104,4215.041741,3834.034742,8527.844662000001,14734.23275,1969.10098,9979.508487],\"xaxis\":\"x\",\"y\":[55.23,66.8,68.0,53.82,59.6,61.21,66.87,70.78,66.55,67.41,67.5,65.86,64.03,72.49,66.91,65.94,59.164,72.13,72.67,61.31,59.82,61.05,57.996,64.36,65.57,64.94,71.86,69.62,43.585,69.18],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[9279525,4232095,1738315,442308,4469979,2445618,5009067,1291695,2682462,153936,14100005,854885,2977019,63149,22223309,216964,1438760,20860941,420702,284320,5581001,2664249,580653,6464046,748747,863308,1019729,4762912,2917802,3838168,1022556,516556,9939217,6446316,485831,3379468,33119096,257700,2534927,60011,2755589,2143249,2526994,14264935,8504667,290243,8322925,1219113,3647735,5824797,2672000,3080907],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2449.008185,3520.610273,1062.7522,851.2411407,543.2552413,339.2964587,1172.667655,1071.310713,1178.665927,1102.990936,780.5423257,2125.621418,1388.594732,2669.529475,1418.822445,375.6431231,328.9405571000001,362.1462796,4293.476475,485.2306591,911.2989371,510.1964923000001,299.850319,853.5409189999998,298.8462121,575.5729961000002,2387.54806,1443.011715,369.1650802,452.3369807,743.1159097,1967.955707,1688.20357,468.5260381,2423.780443,761.879376,1077.281856,2718.885295,493.3238752,879.5835855,1450.356983,879.7877358,1135.749842,4725.295531000002,1615.991129,1148.376626,716.6500721,859.8086567,1468.475631,734.753484,1147.388831,406.8841148],\"xaxis\":\"x\",\"y\":[43.077,30.015,38.223,47.622,31.975,39.031,38.523,35.463,38.092,40.715,39.143,42.111,40.477,34.812,41.893,34.482,35.92800000000001,34.078,37.003,30.0,43.149,33.609,32.5,42.27,42.13800000000001,38.48,42.723,36.681,36.256,33.685,40.543,50.986,42.87300000000001,31.286,41.725,37.444,36.324,52.724,40.0,46.471,37.278,30.331,32.978,45.00899999999999,38.635,41.407,41.215,38.596,44.6,39.978,42.038,48.451],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[17876956,2883315,56602560,14785584,6377619,12350771,926317,6007797,2491346,3548753,2042865,3146381,3201488,1517453,1426095,30144317,1165790,940080,1555876,8025700,2227000,662850,157553000,2252965,5439568],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5911.315053,2677.326347,2108.944355,11367.16112,3939.978789,2144.115096,2627.0094710000008,5586.53878,1397.717137,3522.110717,3048.3029,2428.2377690000008,1840.366939,2194.926204,2898.530881,3478.125529,3112.363948,2480.380334,1952.308701,3758.523437,3081.959785,3023.271928,13990.482080000002,5716.766744,7689.799761],\"xaxis\":\"x\",\"y\":[62.485,40.414,50.917,68.75,54.745,50.643,57.206,59.42100000000001,45.928,48.357,45.262,42.023,37.579,41.912,58.53,50.789,42.31399999999999,55.191,62.649,43.902,64.28,59.1,68.44,66.071,55.088],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1952\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[8691212,1994794],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[10039.59564,10556.57566],\"xaxis\":\"x\",\"y\":[69.12,69.39],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1952\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1957\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[9240934,138655,51365468,5322536,637408000,2736300,409000000,90124000,19792000,6248643,1944401,91563009,746559,9411381,22611552,212846,1647412,7739235,882134,21731844,9682338,561977,46679944,26072194,4419650,1445929,9128546,4149908,10164215,25041917,28998543,1070439,5498090],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[820.8530296,11635.79945,661.6374577,434.0383364,575.9870009,3629.076457,590.061996,858.9002707000002,3290.257643,6229.333562,5385.278451,4317.694365,1886.080591,1571.134655,1487.593537,113523.1329,6089.786934000002,1810.0669920000007,912.6626085,350.0,597.9363557999999,2242.746551,747.0835292,1547.944844,8157.5912480000015,2843.104409,1072.546602,2117.234893,1507.86129,793.5774147999998,676.2854477999998,1827.067742,804.8304547],\"xaxis\":\"x\",\"y\":[30.332,53.832,39.348,41.36600000000001,50.54896,64.75,40.249,39.918,47.181,48.437,67.84,65.5,45.669,54.081,52.681,58.033,59.489,52.102,45.24800000000001,41.905,37.686,40.08,45.557,51.334,42.868,63.179,61.456,48.284,62.4,53.63,42.887,45.67100000000001,33.97],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1957\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[1476505,6965860,8989111,3076000,7651254,3991242,9513758,4487831,4324000,44310863,71019069,8096218,9839000,165110,2878220,49182000,442829,11026383,3491938,28235346,8817650,17829327,7271135,3844277,1533070,29841614,7363802,5126000,25670939,51430000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[1942.284244,8842.59803,9714.960623,1353.989176,3008.670727,4338.231617,8256.343918,11099.65935,7545.415386,8662.834898000001,10187.82665,4916.299889,6040.180011,9244.001412,5599.077872,6248.656232,3682.259903,11276.19344,11653.97304,4734.253019,3774.571743,3943.370225,4981.090891,6093.26298,5862.276629,4564.80241,9911.878226,17909.48973,2218.754257,11283.17795],\"xaxis\":\"x\",\"y\":[59.28,67.48,69.24,58.45,66.61,64.77,69.03,71.81,67.49,68.93,69.1,67.86,66.41,73.47,68.9,67.81,61.448,72.99,73.44,65.77,61.51,64.1,61.685,67.45,67.85,66.66,72.49,70.56,48.07899999999999,70.42],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1957\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[10270856,4561361,1925173,474639,4713416,2667518,5359923,1392284,2894855,170928,15577932,940458,3300000,71851,25009741,232922,1542611,22815614,434904,323150,6391288,2876726,601095,7454779,813338,975950,1201578,5181679,3221238,4241884,1076852,609816,11406350,7038035,548080,3692184,37173340,308700,2822082,61325,3054547,2295678,2780415,16151549,9753392,326741,9452826,1357445,3950849,6675501,3016000,3646340],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3013.976023,3827.940465,959.6010805,918.2325349,617.1834647999998,379.5646281000001,1313.048099,1190.844328,1308.495577,1211.148548,905.8602303,2315.056572,1500.895925,2864.9690760000008,1458.915272,426.0964081,344.1618859,378.9041632,4976.198099,520.9267111,1043.5615369999996,576.2670245,431.79045660000014,944.4383152,335.9971151000001,620.9699901,3448.284395,1589.20275,416.3698064,490.3821867,846.1202613,2034.037981,1642.002314,495.58683330000014,2621.448058,835.5234025000002,1100.5925630000004,2769.451844,540.2893982999999,860.7369026,1567.653006,1004.484437,1258.147413,5487.104219,1770.3370739999998,1244.708364,698.5356073,925.9083202,1395.232468,774.3710692000002,1311.956766,518.7642681],\"xaxis\":\"x\",\"y\":[45.685,31.999,40.358,49.618,34.906,40.533,40.428,37.464,39.881,42.46,40.652,45.053,42.469,37.328,44.444,35.98300000000001,38.047,36.667,38.999,32.065,44.779,34.558,33.489000000000004,44.68600000000001,45.047,39.486,45.289,38.865,37.207,35.30699999999999,42.338,58.089,45.423,33.779,45.226000000000006,38.598,37.802,55.09,41.5,48.945,39.329,31.57,34.977,47.985,39.624,43.424,42.974,41.208,47.1,42.57100000000001,44.077,50.469],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1957\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[19610538,3211738,65551171,17010154,7048426,14485993,1112300,6640752,2923186,4058385,2355805,3640876,3507701,1770390,1535090,35015548,1358828,1063506,1770902,9146100,2260000,764900,171984000,2424959,6702668],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[6856.8562120000015,2127.686326,2487.365989,12489.95006,4315.622723,2323.805581,2990.010802,6092.1743590000015,1544.402995,3780.546651,3421.523218,2617.155967,1726.887882,2220.487682,4756.525781,4131.546641,3457.415947,2961.800905,2046.154706,4245.256697999999,3907.156189,4100.3934,14847.12712,6150.772969,9802.466526],\"xaxis\":\"x\",\"y\":[64.399,41.89,53.285,69.96,56.074,55.118,60.026,62.325,49.828,51.356,48.57,44.142,40.696,44.665,62.61,55.19,45.432,59.201,63.19600000000001,46.26300000000001,68.54,61.8,69.49,67.044,57.907],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1957\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[9712569,2229407],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[10949.64959,12247.39532],\"xaxis\":\"x\",\"y\":[70.33,70.26],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1957\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1962\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[10267083,171863,56839289,6083619,665770000,3305200,454000000,99028000,22874000,7240260,2310904,95831757,933559,10917494,26420307,358266,1886848,8906385,1010280,23634436,10332057,628164,53100671,30325264,4943029,1750200,10421936,4834621,11918938,29263397,33796140,1133134,6120081],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[853.1007099999998,12753.27514,686.3415537999998,496.9136476,487.6740183,4692.648271999999,658.3471509,849.2897700999998,4187.329802,8341.737815,7105.630706,6576.649461,2348.009158,1621.693598,1536.344387,95458.11176,5714.560611,2036.884944,1056.353958,388.0,652.3968593,2924.638113,803.3427418,1649.552153,11626.41975,3674.735572,1074.47196,2193.037133,1822.879028,1002.199172,772.0491602000002,2198.9563120000007,825.6232006],\"xaxis\":\"x\",\"y\":[31.997,56.923,41.216,43.415,44.50136,67.65,43.605,42.518,49.325,51.457,69.39,68.73,48.12600000000001,56.65600000000001,55.292,60.47,62.094,55.737,48.25100000000001,45.108,39.393,43.165,47.67,54.757,45.914,65.798,62.192,50.305,65.2,56.06100000000001,45.363,48.127,35.18],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1962\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[1728137,7129864,9218400,3349000,8012946,4076557,9620282,4646899,4491443,47124000,73739117,8448233,10063000,182053,2830000,50843200,474528,11805689,3638919,30329617,9019800,18680721,7616060,4237384,1582962,31158061,7561588,5666000,29788695,53292000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2312.888958,10750.72111,10991.20676,1709.683679,4254.337839,5477.890018,10136.86713,13583.31351,9371.842561,10560.48553,12902.46291,6017.190732999999,7550.359877,10350.15906,6631.597314,8243.58234,4649.593785,12790.84956,13450.40151,5338.752143,4727.954889,4734.997586,6289.629157,7481.107598,7402.303395,5693.843879,12329.44192,20431.0927,2322.869908,12477.17707],\"xaxis\":\"x\",\"y\":[64.82,69.54,70.25,61.93,69.51,67.13,69.9,72.35,68.75,70.51,70.3,69.51,67.96,73.68,70.29,69.24,63.728,73.23,73.47,67.64,64.39,66.8,64.531,70.33,69.15,69.69,73.37,71.32,52.098,70.76],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1962\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[11000948,4826015,2151895,512764,4919632,2961915,5793633,1523478,3150417,191689,17486434,1047924,3832408,89898,28173309,249220,1666618,25145372,455661,374020,7355248,3140003,627820,8678557,893143,1112796,1441863,5703324,3628608,4690372,1146757,701016,13056604,7788944,621392,4076008,41871351,358900,3051242,65345,3430243,2467895,3080153,18356657,11183227,370006,10863958,1528098,4286552,7688797,3421000,4277736],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2550.81688,4269.276742,949.4990641,983.6539764,722.5120206,355.2032273,1399.607441,1193.068753,1389.817618,1406.648278,896.3146335000001,2464.783157,1728.8694280000002,3020.989263,1693.335853,582.8419713999998,380.9958433000001,419.4564161,6631.459222,599.650276,1190.041118,686.3736739,522.0343725,896.9663732,411.8006266,634.1951625,6757.030816,1643.38711,427.9010856,496.1743428,1055.896036,2529.0674870000007,1566.353493,556.6863539,3173.215595,997.7661127,1150.9274779999996,3173.72334,597.4730727000001,1071.551119,1654.988723,1116.6398769999996,1369.488336,5768.729717,1959.593767,1856.182125,722.0038073,1067.53481,1660.30321,767.2717397999999,1452.725766,527.2721818],\"xaxis\":\"x\",\"y\":[48.303,34.0,42.618,51.52,37.814,42.045,42.643,39.475,41.716,44.467,42.122,48.435,44.93,39.69300000000001,46.992,37.485,40.158,40.059,40.489,33.896,46.452,35.753,34.488,47.949,47.747,40.502,47.808,40.848,38.41,36.936,44.24800000000001,60.246,47.924,36.161,48.386,39.487,39.36,57.666,43.0,51.893,41.45399999999999,32.767,36.981,49.951,40.87,44.992,44.246,43.922,49.57899999999999,45.344,46.023,52.358],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1962\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[21283783,3593918,76039390,18985849,7961258,17009885,1345187,7254373,3453434,4681707,2747687,4208858,3880130,2090162,1665128,41121485,1590597,1215725,2009813,10516500,2448046,887498,186538000,2598466,8143375],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[7133.166023000002,2180.972546,3336.585802,13462.48555,4519.094331,2492.351109,3460.937025,5180.75591,1662.137359,4086.114078,3776.803627,2750.364446,1796.589032,2291.156835,5246.107524,4581.609385,3634.364406,3536.540301,2148.027146,4957.037982,5108.34463,4997.523971000001,16173.14586,5603.357717,8422.974165000001],\"xaxis\":\"x\",\"y\":[65.142,43.428,55.665,71.3,57.924,57.863,62.842,65.24600000000001,53.459,54.64,52.307,46.95399999999999,43.59,48.041,65.61,58.299,48.632,61.817,64.361,49.096,69.62,64.9,70.21,68.253,60.77],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1962\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[10794968,2488550],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[12217.22686,13175.678],\"xaxis\":\"x\",\"y\":[70.93,71.24],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1962\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1967\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[11537966,202182,62821884,6960067,754550000,3722800,506000000,109343000,26538000,8519282,2693585,100825279,1255058,12617009,30131000,575003,2186894,10154878,1149500,25870271,11261690,714775,60641899,35356600,5618198,1977600,11737396,5680812,13648692,34024249,39463910,1142636,6740785],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[836.1971382,14804.6727,721.1860862000002,523.4323142,612.7056934,6197.962814,700.7706107000001,762.4317721,5906.731804999999,8931.459811,8393.741404,9847.788607,2741.796252,2143.540609,2029.228142,80894.88326,6006.983042,2277.742396,1226.04113,349.0,676.4422254,4720.942687,942.4082588,1814.12743,16903.04886,4977.41854,1135.514326,1881.923632,2643.858681,1295.46066,637.1232887,2649.715007,862.4421463],\"xaxis\":\"x\",\"y\":[34.02,59.923,43.453,45.415,58.38112,70.0,47.19300000000001,45.964,52.469,54.459,70.75,71.43,51.629,59.942,57.716,64.624,63.87,59.371,51.253,49.379,41.472,46.988,49.8,56.393,49.901,67.946,64.266,53.655,67.5,58.285,47.838,51.631,36.984],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1967\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[1984060,7376998,9556500,3585000,8310226,4174366,9835109,4838800,4605744,49569000,76368453,8716441,10223422,198676,2900100,52667100,501035,12596822,3786019,31785378,9103000,19284814,7971222,4442238,1646912,32850275,7867931,6063000,33411317,54959000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2760.196931,12834.6024,13149.04119,2172.3524230000007,5577.0028,6960.297861,11399.44489,15937.21123,10921.63626,12999.91766,14745.62561,8513.097016,9326.64467,13319.89568,7655.568963,10022.40131,5907.850937,15363.25136,16361.87647,6557.152776,6361.517993,6470.866545,7991.707066,8412.902397,9405.489397,7993.512294,15258.29697,22966.14432,2826.3563870000007,14142.85089],\"xaxis\":\"x\",\"y\":[66.22,70.14,70.94,64.79,70.42,68.5,70.38,72.96,69.83,71.55,70.8,71.0,69.5,73.73,71.08,71.06,67.178,73.82,74.08,69.61,66.6,66.8,66.914,70.98,69.18,71.44,74.16,72.77,54.33600000000001,71.36],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1967\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[12760499,5247469,2427334,553541,5127935,3330989,6335506,1733638,3495967,217378,19941073,1179760,4744870,127617,31681188,259864,1820319,27860297,489004,439593,8490213,3451418,601287,10191512,996380,1279406,1759224,6334556,4147252,5212416,1230542,789309,14770296,8680909,706640,4534062,47287752,414024,3451079,70787,3965841,2662190,3428839,20997321,12716129,420690,12607312,1735550,4786986,8900294,3900000,4995432],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3246.991771,5522.776375,1035.831411,1214.709294,794.8265597,412.97751360000007,1508.453148,1136.056615,1196.810565,1876.029643,861.5932424,2677.9396420000007,2052.050473,3020.050513,1814.880728,915.5960025,468.7949699,516.1186438,8358.761987,734.7829124,1125.69716,708.7595409,715.5806402000002,1056.736457,498.6390265,713.6036482999998,18772.75169,1634.047282,495.5147806,545.0098873,1421.145193,2475.387562,1711.04477,566.6691539,3793.694753,1054.384891,1014.514104,4021.175739,510.9637142,1384.840593,1612.404632,1206.043465,1284.7331800000004,7114.477970999998,1687.997641,2613.101665,848.2186575,1477.59676,1932.3601670000005,908.9185217,1777.077318,569.7950712],\"xaxis\":\"x\",\"y\":[51.407,35.985,44.885,53.298,40.697,43.548,44.799,41.478,43.601000000000006,46.472,44.056,52.04,47.35,42.074,49.293,38.987,42.18899999999999,42.115,44.598,35.857,48.072,37.197,35.492,50.654,48.492,41.536,50.227,42.881,39.487,38.487,46.289,61.557,50.335,38.113,51.159,40.118,41.04,60.542,44.1,54.425,43.563,34.113,38.977,51.927,42.858,46.633,45.757,46.769,52.053,48.051,47.768,53.995],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1967\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[22934225,4040665,88049823,20819767,8858908,19764027,1588717,8139332,4049146,5432424,3232927,4690773,4318137,2500689,1861096,47995559,1865490,1405486,2287985,12132200,2648961,960155,198712000,2748579,9709552],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[8052.953020999998,2586.886053,3429.864357,16076.58803,5106.654313,2678.729839,4161.727834,5690.268015,1653.7230029999996,4579.074215,4358.595393,3242.531147,1452.057666,2538.269358,6124.703450999999,5754.733883,4643.393534000002,4421.009084,2299.376311,5788.09333,6929.277714,5621.368472,19530.36557,5444.61962,9541.474188],\"xaxis\":\"x\",\"y\":[65.634,45.032,57.632,72.13,60.523,59.963,65.42399999999999,68.29,56.75100000000001,56.678,55.855,50.01600000000001,46.243,50.924,67.51,60.11,51.88399999999999,64.071,64.95100000000001,51.445,71.1,65.4,70.76,68.468,63.479],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1967\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[11872264,2728150],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[14526.12465,14463.918930000002],\"xaxis\":\"x\",\"y\":[71.1,71.52],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1967\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1972\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[13079460,230800,70759295,7450606,862030000,4115700,567000000,121282000,30614000,10061506,3095893,107188273,1613551,14781241,33505000,841934,2680018,11441462,1320500,28466390,12412593,829050,69325921,40850141,6472756,2152400,13016733,6701172,15226039,39276153,44655014,1089572,7407075],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[739.9811057999998,18268.65839,630.2336265,421.6240257,676.9000921,8315.928145,724.032527,1111.107907,9613.818607,9576.037596,12786.93223,14778.78636,2110.856309,3701.621503,3030.87665,109347.867,7486.384341,2849.09478,1421.741975,357.0,674.7881296,10618.03855,1049.938981,1989.37407,24837.42865,8597.756202,1213.39553,2571.423014,4062.523897,1524.358936,699.5016441,3133.409277,1265.047031],\"xaxis\":\"x\",\"y\":[36.088,63.3,45.252,40.317,63.11888,72.0,50.651,49.203,55.234,56.95,71.63,73.42,56.528,63.983,62.612,67.712,65.421,63.01,53.754,53.07,43.971,52.143,51.929,58.065,53.886,69.521,65.042,57.29600000000001,69.39,60.405,50.254,56.532,39.848],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1972\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[2263554,7544201,9709100,3819000,8576200,4225310,9862158,4991596,4639657,51732000,78717088,8888628,10394091,209275,3024400,54365564,527678,13329874,3933004,33039545,8970450,20662648,8313288,4593433,1694510,34513161,8122293,6401400,37492953,56079000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3313.422188,16661.6256,16672.14356,2860.16975,6597.494398,9164.090127,13108.4536,18866.20721,14358.8759,16107.19171,18016.18027,12724.82957,10168.65611,15798.06362,9530.772896,12269.27378,7778.414017,18794.74567,18965.05551,8006.506993000001,9022.247417,8011.4144019999985,10522.06749,9674.167626,12383.4862,10638.75131,17832.02464,27195.11304,3450.69638,15895.11641],\"xaxis\":\"x\",\"y\":[67.69,70.63,71.44,67.45,70.9,69.61,70.29,73.47,70.87,72.38,71.0,72.34,69.76,74.46,71.28,72.19,70.63600000000002,73.75,74.34,70.85,69.26,69.21,68.7,70.35,69.82,73.06,74.72,73.78,57.005,72.01],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1972\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[14760787,5894858,2761407,619351,5433886,3529983,7021028,1927260,3899068,250027,23007669,1340458,6071696,178848,34807417,277603,2260187,30770372,537977,517101,9354120,3811387,625361,12044785,1116779,1482628,2183877,7082430,4730997,5828158,1332786,851334,16660670,9809596,821782,5060262,53740085,461633,3992121,76595,4588696,2879013,3840161,23935810,14597019,480105,14706593,2056351,5303507,10190285,4506497,5861135],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[4182.663766,5473.288004999999,1085.796879,2263.6111140000007,854.7359763000002,464.0995039,1684.1465280000002,1070.013275,1104.103987,1937.577675,904.8960685,3213.152683,2378.201111,3694.2123520000014,2024.008147,672.4122571,514.3242081999998,566.2439442000001,11401.94841,756.0868363,1178.223708,741.6662307,820.2245876000002,1222.359968,496.5815922000001,803.0054535,21011.49721,1748.562982,584.6219709,581.3688761,1586.851781,2575.484158,1930.194975,724.9178037,3746.080948,954.2092363,1698.388838,5047.658563,590.5806637999998,1532.985254,1597.712056,1353.759762,1254.576127,7765.962636,1659.652775,3364.836625,915.9850592,1649.660188,2753.2859940000008,950.735869,1773.498265,799.3621757999998],\"xaxis\":\"x\",\"y\":[54.518,37.928,47.014,56.024,43.591,44.057,47.049,43.457,45.569,48.944,45.989,54.907,49.801,44.36600000000001,51.137,40.516,44.142,43.515,48.69,38.308,49.875,38.842,36.486,53.559,49.767,42.614,52.773,44.851000000000006,41.76600000000001,39.977,48.437,62.944,52.862,40.328,53.867,40.546,42.82100000000001,64.274,44.6,56.48,45.815,35.4,40.973,53.69600000000001,45.083,49.552,47.62,49.75899999999999,55.602,51.01600000000001,50.107,55.635],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1972\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[24779799,4565872,100840058,22284500,9717524,22542890,1834796,8831348,4671329,6298651,3790903,5149581,4698301,2965146,1997616,55984294,2182908,1616384,2614104,13954700,2847132,975199,209896000,2829526,11515649],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[9443.038526,2980.331339,4985.711467,18970.57086,5494.024437,3264.660041,5118.146939,5305.445256,2189.874499,5280.99471,4520.246008,4031.408271,1654.456946,2529.842345,7433.889293000001,6809.406690000002,4688.593267,5364.249663000001,2523.337977,5937.827283,9123.041742,6619.551418999999,21806.03594,5703.408898,10505.25966],\"xaxis\":\"x\",\"y\":[67.065,46.714,59.504,72.88,63.441,61.62300000000001,67.84899999999999,70.723,59.631,58.79600000000001,58.207,53.738,48.042,53.88399999999999,69.0,62.361,55.151,66.21600000000001,65.815,55.448,72.16,65.9,71.34,68.673,65.712],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1972\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[13177000,2929100],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[16788.62948,16046.03728],\"xaxis\":\"x\",\"y\":[71.93,71.89],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1972\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1977\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[14880372,297410,80428306,6978607,943455000,4583700,634000000,136725000,35480679,11882916,3495918,113872473,1937652,16325320,36436000,1140357,3115787,12845381,1528000,31528087,13933198,1004533,78152686,46850962,8128505,2325300,14116836,7932503,16785196,44148285,50533506,1261091,8403990],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[786.11336,19340.10196,659.8772322000002,524.9721831999999,741.2374699,11186.14125,813.3373230000002,1382.702056,11888.59508,14688.23507,13306.61921,16610.37701,2852.351568,4106.301249,4657.22102,59265.47714,8659.696836,3827.921571,1647.511665,371.0,694.1124398,11848.34392,1175.921193,2373.204287,34167.7626,11210.08948,1348.775651,3195.484582,5596.519826,1961.2246350000007,713.5371196000001,3682.831494,1829.765177],\"xaxis\":\"x\",\"y\":[38.438,65.593,46.923,31.22,63.96736,73.6,54.208,52.702,57.702,60.413,73.06,75.38,61.13399999999999,67.15899999999999,64.766,69.343,66.09899999999999,65.256,55.49100000000001,56.059,46.74800000000001,57.367,54.043,60.06,58.69,70.795,65.949,61.195,70.59,62.494,55.764,60.765,44.175],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1977\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[2509048,7568430,9821800,4086000,8797022,4318673,10161915,5088419,4738902,53165019,78160773,9308479,10637171,221823,3271900,56059245,560073,13852989,4043205,34621254,9662600,21658597,8686367,4827803,1746919,36439000,8251648,6316424,42404033,56179000],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3533.003910000001,19749.4223,19117.97448,3528.481305,7612.240438,11305.38517,14800.16062,20422.9015,15605.42283,18292.63514,20512.92123,14195.52428,11674.83737,19654.96247,11150.98113,14255.98475,9595.929905,21209.0592,23311.34939,9508.141454,10172.48572,9356.39724,12980.66956,10922.66404,15277.030169999998,13236.92117,18855.72521,26982.29052,4269.122326,17428.74846],\"xaxis\":\"x\",\"y\":[68.93,72.17,72.8,69.86,70.81,70.64,70.71,74.69,72.52,73.83,72.5,73.68,69.95,76.11,72.03,73.48,73.066,75.24,75.37,70.67,70.41,69.46,70.3,70.45,70.97,74.39,75.44,75.39,59.507,72.76],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1977\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[17152804,6162675,3168267,781472,5889574,3834415,7959865,2167533,4388260,304739,26480870,1536769,7459574,228694,38783863,192675,2512642,34617799,706367,608274,10538093,4227026,745228,14500404,1251524,1703617,2721783,8007166,5637246,6491649,1456688,913025,18396941,11127868,977026,5682086,62209173,492095,4657072,86796,5260855,3140897,4353666,27129932,17104986,551425,17129565,2308582,6005061,11457758,5216550,6642107],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[4910.416756000001,3008.647355,1029.161251,3214.857818,743.3870368,556.1032651,1783.432873,1109.374338,1133.98495,1172.603047,795.757282,3259.178978,2517.736547,3081.761022,2785.493582,958.5668124,505.7538077,556.8083834,21745.57328,884.7552507000001,993.2239571,874.6858642999998,764.7259627999998,1267.613204,745.3695408,640.3224382999998,21951.21176,1544.228586,663.2236766,686.3952693,1497.492223,3710.982963,2370.619976,502.3197334,3876.485958,808.8970727999998,1981.951806,4319.804067,670.0806011,1737.561657,1561.769116,1348.285159,1450.992513,8028.651439,2202.988423,3781.410618,962.4922932,1532.776998,3120.876811,843.7331372000001,1588.688299,685.5876821],\"xaxis\":\"x\",\"y\":[58.014,39.483,49.19,59.319,46.137,45.91,49.355,46.775,47.383,50.93899999999999,47.804,55.625,52.374,46.519,53.319,42.024,44.535,44.51,52.79,41.842,51.756,40.762,37.465,56.155,52.208,43.764,57.442,46.881,43.767,41.714,50.852,64.93,55.73,42.495,56.437,41.291,44.514,67.064,45.0,58.55,48.879,36.788,41.974,55.527,47.8,52.537,49.919,52.887,59.837,50.35,51.386,57.674],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1977\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[26983828,5079716,114313951,23796400,10599793,25094412,2108457,9537988,5302800,7278866,4282586,5703430,4908554,3055235,2156814,63759976,2554598,1839782,2984494,15990099,3080828,1039009,220239000,2873520,13503563],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[10079.02674,3548.097832,6660.118654,22090.88306,4756.763836,3815.80787,5926.876967,6380.494965999998,2681.9889,6679.62326,5138.922374,4879.992748,1874.298931,3203.208066,6650.195573,7674.929108,5486.371089,5351.912144,3248.373311,6281.290854999998,9770.524921,7899.554209000001,24072.63213,6504.339663000002,13143.95095],\"xaxis\":\"x\",\"y\":[68.48100000000001,50.023,61.489,74.21,67.05199999999999,63.837,70.75,72.649,61.788,61.31,56.69600000000001,56.029,49.923,57.402,70.11,65.032,57.47,68.681,66.35300000000001,58.447,73.44,68.3,73.38,69.48100000000001,67.456],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1977\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[14074100,3164900],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[18334.19751,16233.7177],\"xaxis\":\"x\",\"y\":[73.49,72.22],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1977\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1982\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[12881816,377967,93074406,7272485,1000281000,5264500,708000000,153343000,43072751,14173318,3858421,118454974,2347031,17647518,39326000,1497494,3086876,14441916,1756032,34680442,15796314,1301048,91462088,53456774,11254672,2651869,15410151,9410494,18501390,48827160,56142181,1425876,9657618],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[978.0114388,19211.14731,676.9818656,624.4754784,962.4213805,14560.53051,855.7235377000002,1516.872988,7608.334602,14517.90711,15367.0292,19384.10571,4161.415959,4106.525293,5622.942464,31354.03573,7640.519520999998,4920.355951,2000.603139,424.0,718.3730947,12954.79101,1443.429832,2603.273765,33693.17525,15169.16112,1648.079789,3761.837715,7426.3547739999985,2393.219781,707.2357863,4336.032082,1977.55701],\"xaxis\":\"x\",\"y\":[39.854,69.05199999999999,50.00899999999999,50.957,65.525,75.45,56.596,56.159,59.62,62.038,74.45,77.11,63.739,69.1,67.123,71.309,66.983,68.0,57.489,58.056,49.594,62.728,56.158,62.082,63.012,71.76,68.757,64.59,72.16,64.597,58.816,64.406,49.113],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1982\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[2780097,7574613,9856303,4172693,8892098,4413368,10303704,5117810,4826933,54433565,78335266,9786480,10705535,233997,3480000,56535636,562548,14310401,4114787,36227381,9859650,22356726,9032824,5048043,1861252,37983310,8325260,6468126,47328791,56339704],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3630.880722,21597.08362,20979.84589,4126.613157,8224.191647,13221.82184,15377.22855,21688.04048,18533.15761,20293.89746,22031.53274,15268.42089,12545.99066,23269.6075,12618.32141,16537.4835,11222.58762,21399.46046,26298.63531,8451.531004,11753.84291,9605.314053,15181.0927,11348.54585,17866.72175,13926.16997,20667.38125,28397.71512,4241.356344,18232.42452],\"xaxis\":\"x\",\"y\":[70.42,73.18,73.93,70.69,71.08,70.46,70.96,74.63,74.55,74.89,73.8,75.24,69.39,76.99,73.1,74.98,74.101,76.05,75.97,71.32,72.77,69.66,70.16199999999999,70.8,71.063,76.3,76.42,76.21,61.036,74.04],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1982\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[20033753,7016384,3641603,970347,6634596,4580410,9250831,2476971,4875118,348643,30646495,1774735,9025951,305991,45681811,285483,2637297,38111756,753874,715523,11400338,4710497,825987,17661452,1411807,1956875,3344074,9171477,6502825,6998256,1622136,992040,20198730,12587223,1099010,6437188,73039376,517810,5507565,98593,6147783,3464522,5828892,31140029,20367053,649901,19844382,2644765,6734098,12939400,6100407,7636524],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5745.160213,2756.953672,1277.897616,4551.14215,807.1985855,559.6032309999998,2367.983282,956.7529907,797.9081006,1267.100083,673.7478181,4879.507522,2602.710169,2879.468067,3503.729636,927.8253427,524.8758493,577.8607471,15113.36194,835.8096107999999,876.032569,857.2503577,838.1239671,1348.225791,797.2631074,572.1995694,17364.275380000006,1302.878658,632.8039209,618.0140640999998,1481.150189,3688.037739,2702.620356,462.2114149,4191.100511,909.7221354,1576.97375,5267.219353,881.5706467,1890.218117,1518.479984,1465.010784,1176.807031,8568.266228,1895.544073,3895.384018,874.2426069,1344.577953,3560.2331740000004,682.2662267999998,1408.678565,788.8550411],\"xaxis\":\"x\",\"y\":[61.368,39.942,50.904,61.484,48.122,47.471,52.96100000000001,48.295,49.517,52.933,47.784,56.695,53.983,48.812,56.006,43.662,43.89,44.916,56.56399999999999,45.58,53.744,42.89100000000001,39.327,58.76600000000001,55.078,44.852,62.155,48.969,45.642,43.916,53.599,66.711,59.65,42.795,58.968,42.598,45.826,69.885,46.218,60.351000000000006,52.379,38.445,42.955,58.161,50.338,55.56100000000001,50.608,55.471,64.048,49.849,51.82100000000001,60.363],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1982\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[29341374,5642224,128962939,25201900,11487112,27764644,2424367,9789224,5968349,8365850,4474873,6395630,5198399,3669448,2298309,71640904,2979423,2036305,3366439,18125129,3279001,1116479,232187835,2953997,15620766],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[8997.897412,3156.510452,7030.835878,22898.79214,5095.6657380000015,4397.575659,5262.734751,7316.918106999998,2861.092386,7213.791267,4098.344175,4820.49479,2011.159549,3121.7607940000007,6068.05135,9611.147541,3470.3381560000007,7009.601598,4258.503604,6434.501797,10330.98915,9119.528607,25009.55914,6920.223051000001,11152.41011],\"xaxis\":\"x\",\"y\":[69.942,53.859,63.33600000000001,75.76,70.565,66.653,73.45,73.717,63.727,64.342,56.604,58.137,51.46100000000001,60.909,71.21,67.405,59.298,70.472,66.874,61.40600000000001,73.75,68.832,74.65,70.805,68.557],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1982\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[15184200,3210650],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[19477.00928,17632.4104],\"xaxis\":\"x\",\"y\":[74.74,73.84],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1982\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1987\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[13867957,454612,103764241,8371791,1084035000,5584510,788000000,169276000,51889696,16543189,4203148,122091325,2820042,19067554,41622000,1891487,3089353,16331785,2015133,38028578,17917180,1593882,105186881,60017788,14619745,2794552,16495304,11242847,19757799,52910342,62826491,1691210,11219340],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[852.3959447999998,18524.02406,751.9794035,683.8955732000002,1378.904018,20038.47269,976.5126756,1748.356961,6642.881371,11643.57268,17122.47986,22375.94189,4448.679912,4106.492315,8533.088805,28118.42998,5377.091329,5249.802653,2338.008304,385.0,775.6324501,18115.22313,1704.686583,2189.634995,21198.26136,18861.53081,1876.766827,3116.774285,11054.56175,2982.653773,820.7994449,5107.197384,1971.741538],\"xaxis\":\"x\",\"y\":[40.822,70.75,52.819,53.914,67.274,76.2,58.553,60.137,63.04,65.044,75.6,78.67,65.869,70.64699999999998,69.81,74.17399999999998,67.926,69.5,60.222,58.339,52.537,67.734,58.245,64.15100000000001,66.295,73.56,69.01100000000001,66.97399999999999,73.4,66.084,62.82,67.046,52.922],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1987\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[3075321,7578903,9870200,4338977,8971958,4484310,10311597,5127024,4931729,55630100,77718298,9974490,10612740,244676,3539900,56729703,569473,14665278,4186147,37740710,9915289,22686371,9230783,5199318,1945870,38880702,8421403,6649942,52881328,56981620],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3738.932735,23687.82607,22525.56308,4314.114757,8239.854824,13822.58394,16310.4434,25116.17581,21141.01223,22066.44214,24639.18566,16120.52839,12986.47998,26923.20628,13872.86652,19207.23482,11732.51017,23651.32361,31540.9748,9082.351172,13039.30876,9696.273295,15870.87851,12037.26758,18678.53492,15764.98313,23586.92927,30281.70459,5089.043686,21664.78767],\"xaxis\":\"x\",\"y\":[72.0,74.94,75.35,71.14,71.34,71.52,71.58,74.8,74.83,76.34,74.847,76.67,69.58,77.23,74.36,76.42,74.865,76.83,75.89,70.98,74.06,69.53,71.218,71.08,72.25,76.9,77.19,77.41,63.108,75.007],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1987\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[23254956,7874230,4243788,1151184,7586551,5126023,10780667,2840009,5498955,395114,35481645,2064095,10761098,311025,52799062,341244,2915959,42999530,880397,848406,14168101,5650262,927524,21198082,1599200,2269414,3799845,10568642,7824747,7634008,1841240,1042663,22987397,12891952,1278184,7332638,81551520,562035,6349365,110812,7171347,3868905,6921858,35933379,24725960,779348,23040630,3154264,7724976,15283050,7272406,9216418],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5681.358539,2430.208311,1225.85601,6205.88385,912.0631417,621.8188188999999,2602.664206,844.8763504000002,952.386129,1315.980812,672.774812,4201.194936999998,2156.9560690000008,2880.102568,3885.46071,966.8968149,521.1341333,573.7413142000001,11864.40844,611.6588611000002,847.0061135,805.5724717999999,736.4153921,1361.936856,773.9932140999998,506.1138573,11770.5898,1155.441948,635.5173633999998,684.1715576,1421.603576,4783.586903,2755.046991,389.8761846,3693.731337,668.3000228,1385.029563,5303.377488,847.991217,1516.525457,1441.72072,1294.4477880000004,1093.244963,7825.823398,1507.819159,3984.839812,831.8220794,1202.201361,3810.419296,617.7244065,1213.315116,706.1573059],\"xaxis\":\"x\",\"y\":[65.79899999999999,39.906,52.337,63.622,49.557,48.21100000000001,54.985,50.485,51.051,54.926,47.412,57.47,54.655,50.04,59.797,45.664,46.453,46.684,60.19,49.265,55.729,45.552,41.245,59.339,57.18,46.027,66.234,49.35,47.457,46.364,56.145,68.74,62.677,42.861,60.835,44.555,46.886,71.913,44.02,61.728,55.769,40.006,44.50100000000001,60.834,51.744,57.678,51.535,56.941,66.89399999999999,51.50899999999999,50.82100000000001,62.351000000000006],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1987\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[31620918,6156369,142938076,26549700,12463354,30964245,2799811,10239839,6655297,9545158,4842194,7326406,5756203,4372203,2326606,80122492,3344353,2253639,3886512,20195924,3444468,1191336,242803533,3045153,17910182],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[9139.671389,2753.69149,7807.095818000002,26626.51503,5547.063754,4903.2191,5629.915318,7532.924762999999,2899.842175,6481.776993,4140.442097,4246.485974,1823.015995,3023.096699,6351.237495,8688.156003,2955.984375,7034.779161,3998.875695,6360.943444,12281.34191,7388.597823,29884.350410000006,7452.398969,9883.584648],\"xaxis\":\"x\",\"y\":[70.774,57.25100000000001,65.205,76.86,72.492,67.768,74.752,74.17399999999998,66.046,67.23100000000001,63.154,60.782,53.636,64.492,71.77,69.498,62.008,71.523,67.378,64.134,74.63,69.582,75.02,71.918,70.19],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1987\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[16257249,3317166],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[21888.88903,19007.19129],\"xaxis\":\"x\",\"y\":[76.32,74.32],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1987\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1992\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[16317921,529491,113704579,10150094,1164970000,5829696,872000000,184816000,60397973,17861905,4936550,124329269,3867409,20711375,43805450,1418095,3219994,18319502,2312802,40546538,20326209,1915208,120065004,67185766,16945857,3235865,17587060,13219062,20686918,56667095,69940728,2104779,13367997],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[649.3413952000002,19035.57917,837.8101642999999,682.3031755,1655.784158,24757.60301,1164.406809,2383.140898,7235.653187999998,3745.640687,18051.52254,26824.89511,3431.593647,3726.063507,12104.27872,34932.91959,6890.806854,7277.912802,1785.402016,347.0,897.7403604,18616.70691,1971.829464,2279.324017000001,24841.61777,24769.8912,2153.739222,3340.542768,15215.6579,4616.896545000001,989.0231487,6017.654756,1879.496673],\"xaxis\":\"x\",\"y\":[41.674,72.601,56.018,55.803,68.69,77.601,60.223,62.681,65.742,59.46100000000001,76.93,79.36,68.015,69.97800000000001,72.244,75.19,69.292,70.693,61.271,59.32,55.727,71.197,60.838,66.458,68.768,75.788,70.37899999999998,69.249,74.26,67.298,67.66199999999999,69.718,55.599],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1992\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[3326498,7914969,10045622,4256013,8658506,4494013,10315702,5171393,5041039,57374179,80597764,10325429,10348684,259012,3557761,56840847,621621,15174244,4286357,38370697,9927680,22797027,9826397,5302888,1999210,39549438,8718867,6995447,58179144,57866349],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[2497.437901,27042.01868,25575.57069,2546.781445,6302.623438000001,8447.794873,14297.02122,26406.73985,20647.16499,24703.79615,26505.30317,17541.49634,10535.62855,25144.39201,17558.81555,22013.64486,7003.339037000002,26790.94961,33965.66115,7738.881247,16207.266630000002,6598.409903,9325.068238,9498.467723,14214.71681,18603.06452,23880.01683,31871.5303,5678.348271,22705.09254],\"xaxis\":\"x\",\"y\":[71.581,76.04,76.46,72.178,71.19,72.527,72.4,75.33,75.7,77.46,76.07,77.03,69.17,78.77,75.467,77.44,75.435,77.42,77.32,70.99,74.86,69.36,71.65899999999998,71.38,73.64,77.57,78.16,78.03,66.146,76.42],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1992\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[26298373,8735988,4981671,1342614,8878303,5809236,12467171,3265124,6429417,454429,41672143,2409073,12772596,384156,59402198,387838,3668440,52088559,985739,1025384,16278738,6990574,1050938,25020539,1803195,1912974,4364501,12210395,10014249,8416215,2119465,1096202,25798239,13160731,1554253,8392818,93364244,622191,7290203,125911,8307920,4260884,6099799,39964159,28227588,962344,26605473,3747553,8523077,18252190,8381163,10704340],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5023.216647,2627.845685,1191.207681,7954.111645,931.7527731,631.6998778,1793.1632780000002,747.9055252,1058.0643,1246.90737,457.7191807,4016.239529,1648.073791,2377.156192000001,3794.755195,1132.055034,582.8585102000002,421.3534653,13522.15752,665.6244126,925.060154,794.3484384,745.5398706,1341.9217210000004,977.4862725,636.6229191000001,9640.138501,1040.67619,563.2000145,739.014375,1361.369784,6058.253846000001,2948.047252,410.8968239,3804.537999,581.182725,1619.848217,6101.255823,737.0685949,1428.777814,1367.899369,1068.696278,926.9602964,7225.069257999998,1492.197043,3553.0224,825.682454,1034.298904,4332.720164,644.1707968999998,1210.884633,693.4207856],\"xaxis\":\"x\",\"y\":[67.744,40.647,53.919,62.745,50.26,44.736,54.31399999999999,49.396,51.724,57.93899999999999,45.548,56.433,52.044,51.604,63.674,47.545,49.99100000000001,48.091,61.36600000000001,52.644,57.50100000000001,48.576,43.26600000000001,59.285,59.685,40.802,68.755,52.214,49.42,48.38800000000001,58.333,69.745,65.393,44.284,61.999,47.39100000000001,47.472,73.615,23.599,62.742,58.19600000000001,38.333,39.658,61.88800000000001,53.556,58.474,50.44,58.06100000000001,70.001,48.825,46.1,60.377],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1992\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[33958947,6893451,155975974,28523502,13572994,34202721,3173216,10723260,7351181,10748394,5274649,8486949,6326682,5077347,2378618,88111030,4017939,2484997,4483945,22430449,3585176,1183669,256894189,3149262,20265563],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[9308.41871,2961.699694,6950.283020999998,26342.88426,7596.125964,5444.648617,6160.416317,5592.843963,3044.214214,7103.702595000002,4444.2317,4439.45084,1456.309517,3081.694603,7404.923685,9472.384295,2170.151724,6618.74305,4196.411078,4446.380924,14641.58711,7370.990932,32003.93224,8137.004775,10733.92631],\"xaxis\":\"x\",\"y\":[71.868,59.957,67.057,77.95,74.126,68.421,75.71300000000002,74.414,68.457,69.613,66.798,63.37300000000001,55.089,66.399,71.766,71.455,65.843,72.462,68.225,66.458,73.911,69.862,76.09,72.752,71.15],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1992\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[17481977,3437674],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[23424.76683,18363.32494],\"xaxis\":\"x\",\"y\":[77.56,76.33],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1992\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=1997\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[22227415,598561,123315288,11782962,1230075000,6495918,959000000,199278000,63327987,20775703,5531387,125956499,4526235,21585105,46173816,1765345,3430388,20476091,2494803,43247867,23001113,2283635,135564834,75012988,21229759,3802309,18698655,15081016,21628605,60216677,76048996,2826046,15826497],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[635.341351,20292.01679,972.7700352,734.28517,2289.234136,28377.63219,1458.817442,3119.335603,8263.590301,3076.239795,20896.60924,28816.58499,3645.379572,1690.756814,15993.52796,40300.61996,8754.96385,10132.90964,1902.2521,415.0,1010.892138,19702.05581,2049.3505210000008,2536.534925,20586.69019,33519.4766,2664.477257,4014.238972,20206.82098,5852.625497,1385.896769,7110.667619,2117.484526],\"xaxis\":\"x\",\"y\":[41.76300000000001,73.925,59.412,56.534,70.426,80.0,61.765,66.041,68.042,58.81100000000001,78.26899999999998,80.69,69.77199999999999,67.727,74.64699999999998,76.156,70.265,71.938,63.625,60.328,59.426,72.499,61.81800000000001,68.564,70.533,77.158,70.457,71.527,75.25,67.521,70.672,71.096,58.02],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=1997\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[3428038,8069876,10199787,3607000,8066057,4444595,10300707,5283663,5134406,58623428,82011073,10502372,10244684,271192,3667233,57479469,692651,15604464,4405672,38654957,10156415,22562458,10336594,5383010,2011612,39855442,8897619,7193761,63047647,58808266],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[3193.054604,29095.920660000003,27561.19663,4766.355904,5970.38876,9875.604515,16048.51424,29804.34567,23723.9502,25889.78487,27788.88416,18747.69814,11712.7768,28061.099660000003,24521.94713,24675.02446,6465.613349,30246.13063,41283.16433,10159.58368,17641.03156,7346.547556999999,7914.320304000002,12126.23065,17161.10735,20445.29896,25266.59499,32135.323010000004,6601.429915,26074.53136],\"xaxis\":\"x\",\"y\":[72.95,77.51,77.53,73.244,70.32,73.68,74.01,76.11,77.13,78.64,77.34,77.869,71.04,78.95,76.122,78.82,75.445,78.03,78.32,72.75,75.97,69.72,72.232,72.71,75.13,78.77,79.39,79.37,68.835,77.218],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=1997\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[29072015,9875024,6066080,1536536,10352843,6121610,14195809,3696513,7562011,527982,47798986,2800947,14625967,417908,66134291,439971,4058319,59861301,1126189,1235767,18418288,8048834,1193708,28263827,1982823,2200725,4759670,14165114,10419991,9384984,2444741,1149818,28529501,16603334,1774766,9666252,106207839,684810,7212583,145608,9535314,4578212,6633514,42835005,32160729,1054486,30686889,4320890,9231669,21210254,9417789,11404948],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[4797.295051,2277.140884,1232.975292,8647.142313,946.2949618,463.1151478,1694.337469,740.5063317,1004.961353,1173.618235,312.188423,3484.164376,1786.265407,1895.016984,4173.181797,2814.480755,913.47079,515.8894013,14722.841880000002,653.7301704,1005.245812,869.4497667999998,796.6644681,1360.4850210000004,1186.147994,609.1739508,9467.446056,986.2958956,692.2758102999999,790.2579846,1483.136136,7425.705295000002,2982.101858,472.34607710000006,3899.52426,580.3052092,1624.941275,6071.941411,589.9445051,1339.076036,1392.368347,574.6481576,930.5964284,7479.188244,1632.2107640000004,3876.76846,789.1862231,982.2869243,4876.798614,816.559081,1071.353818,792.4499602999998],\"xaxis\":\"x\",\"y\":[69.152,40.963,54.777,52.556,50.324,45.326,52.199,46.066,51.573,60.66,42.587,52.962,47.99100000000001,53.157,67.217,48.245,53.378,49.402,60.46100000000001,55.861,58.556,51.455,44.87300000000001,54.407,55.558,42.221,71.555,54.978,47.495,49.903,60.43,70.736,67.66,46.344,58.909,51.313,47.464,74.77199999999998,36.087,63.306,60.187,39.897,43.795,60.236,55.37300000000001,54.289,48.466,58.39,71.973,44.578,40.238,46.809],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=1997\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[36203463,7693188,168546719,30305843,14599929,37657830,3518107,10983007,7992357,11911819,5783439,9803875,6913545,5867957,2531311,95895146,4609572,2734531,5154123,24748122,3759430,1138101,272911760,3262838,22374398],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[10967.28195,3326.143191,7957.980823999998,28954.92589,10118.05318,6117.361746000001,6677.045314,5431.990415,3614.101285,7429.4558769999985,5154.825496,4684.313807,1341.726931,3160.454906,7121.924704000001,9767.29753,2253.023004,7113.692252,4247.400261,5838.347657,16999.4333,8792.573126000001,35767.43303,9230.240708,10165.49518],\"xaxis\":\"x\",\"y\":[73.275,62.05,69.388,78.61,75.816,70.313,77.26,76.15100000000002,69.957,72.312,69.535,66.322,56.67100000000001,67.65899999999999,72.262,73.67,68.426,73.738,69.4,68.38600000000001,74.917,69.465,76.81,74.223,72.146],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=1997\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[18565243,3676187],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[26997.93657,21050.41377],\"xaxis\":\"x\",\"y\":[78.83,77.55],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"1997\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=2002\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[25268405,656397,135656790,12926707,1280400000,6762476,1034172547,211060000,66907826,24001816,6029529,127065841,5307470,22215365,47969150,2111561,3677780,22662365,2674234,45598081,25873917,2713462,153403524,82995088,24501530,4197776,19576783,17155814,22454239,62806748,80908147,3389578,18701257],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[726.7340548,23403.55927,1136.3904300000004,896.2260152999999,3119.280896,30209.015160000006,1746.769454,2873.91287,9240.761975,4390.717312,21905.59514,28604.5919,3844.917194,1646.758151,19233.98818,35110.10566,9313.93883,10206.97794,2140.739323,611.0,1057.206311,19774.83687,2092.712441,2650.921068,19014.54118,36023.1054,3015.378833,4090.925331,23235.42329,5913.187529,1764.456677,4515.487575,2234.820827],\"xaxis\":\"x\",\"y\":[42.129,74.795,62.01300000000001,56.752,72.028,81.495,62.879,68.58800000000001,69.45100000000001,57.04600000000001,79.696,82.0,71.263,66.66199999999999,77.045,76.904,71.028,73.044,65.033,59.908,61.34,74.193,63.61,70.303,71.626,78.77,70.815,73.053,76.99,68.564,73.017,72.37,60.308],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=2002\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[3508512,8148312,10311970,4165416,7661799,4481020,10256295,5374693,5193039,59925035,82350671,10603863,10083313,288030,3879155,57926999,720230,16122830,4535591,38625976,10433867,22404337,10111559,5410052,2011497,40152517,8954175,7361757,67308928,59912431],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[4604.211737,32417.60769,30485.88375,6018.975239,7696.777725,11628.38895,17596.210219999994,32166.50006,28204.59057,28926.03234,30035.80198,22514.2548,14843.93556,31163.20196,34077.04939,27968.09817,6557.194282,33724.75778,44683.97525,12002.23908,19970.90787,7885.360081,7236.075251,13638.778369999998,20660.01936,24835.47166,29341.630930000007,34480.95771,6508.085718,29478.99919],\"xaxis\":\"x\",\"y\":[75.65100000000002,78.98,78.32,74.09,72.14,74.876,75.51,77.18,78.37,79.59,78.67,78.256,72.59,80.5,77.783,80.24,73.98100000000002,78.53,79.05,74.67,77.29,71.322,73.21300000000002,73.8,76.66,79.78,80.04,80.62,70.845,78.471],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=2002\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[31287142,10866106,7026113,1630347,12251209,7021078,15929988,4048013,8835739,614382,55379852,3328795,16252726,447416,73312559,495627,4414865,67946797,1299304,1457766,20550751,8807818,1332459,31386842,2046772,2814651,5368585,16473477,11824495,10580176,2828858,1200206,31167783,18473780,1972153,11140655,119901274,743981,7852401,170372,10870037,5359092,7753310,44433622,37090298,1130269,34593779,4977378,9770575,24739869,10595811,11926563],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5288.040382,2773.287312,1372.877931,11003.60508,1037.645221,446.4035126,1934.011449,738.6906068,1156.18186,1075.811558,241.1658765,3484.06197,1648.800823,1908.260867,4754.604414,7703.4959,765.3500015,530.0535319,12521.71392,660.5855997,1111.9845779999996,945.5835837,575.7047176,1287.514732,1275.184575,531.4823679,9534.677467,894.6370822,665.4231186000002,951.4097518,1579.019543,9021.815894,3258.495584,633.6179466,4072.324751,601.0745012,1615.286395,6316.1652,785.6537647999999,1353.09239,1519.635262,699.4897129999998,882.0818218000002,7710.946444,1993.398314,4128.116943,899.0742111,886.2205765000001,5722.895654999998,927.7210018,1071.6139380000004,672.0386227000001],\"xaxis\":\"x\",\"y\":[70.994,41.003,54.40600000000001,46.63399999999999,50.65,47.36,49.856,43.308,50.525,62.974,44.966,52.97,46.832,53.37300000000001,69.806,49.348,55.24,50.725,56.761,58.041,58.453,53.676,45.504,50.992,44.593,43.753,72.737,57.286,45.00899999999999,51.81800000000001,62.247,71.954,69.615,44.026,51.479,54.496,46.608,75.744,43.413,64.337,61.6,41.012,45.93600000000001,53.365,56.369,43.869,49.651,57.56100000000001,73.042,47.813,39.19300000000001,39.989],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=2002\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[38331121,8445134,179914212,31902268,15497046,41008227,3834934,11226999,8650322,12921234,6353681,11178650,7607651,6677328,2664659,102479927,5146848,2990875,5884491,26769436,3859606,1101832,287675526,3363085,24287670],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[8797.640716,3413.26269,8131.212843000001,33328.96507,10778.78385,5755.259962,7723.447195000002,6340.646683,4563.808154,5773.044512,5351.568665999999,4858.347495,1270.364932,3099.72866,6994.774861,10742.44053,2474.548819,7356.0319340000015,3783.674243,5909.020073,18855.60618,11460.60023,39097.09955,7727.002004000001,8605.047831],\"xaxis\":\"x\",\"y\":[74.34,63.883,71.006,79.77,77.86,71.682,78.123,77.158,70.847,74.173,70.734,68.97800000000001,58.137,68.565,72.047,74.902,70.836,74.712,70.755,69.906,77.778,68.976,77.31,75.307,72.766],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=2002\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[19546792,3908037],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[30687.75473,23189.80135],\"xaxis\":\"x\",\"y\":[80.37,79.11],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"2002\"},{\"data\":[{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Asia\\u003cbr\\u003eyear=2007\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Afghanistan\",\"Bahrain\",\"Bangladesh\",\"Cambodia\",\"China\",\"Hong Kong, China\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Israel\",\"Japan\",\"Jordan\",\"Korea, Dem. Rep.\",\"Korea, Rep.\",\"Kuwait\",\"Lebanon\",\"Malaysia\",\"Mongolia\",\"Myanmar\",\"Nepal\",\"Oman\",\"Pakistan\",\"Philippines\",\"Saudi Arabia\",\"Singapore\",\"Sri Lanka\",\"Syria\",\"Taiwan\",\"Thailand\",\"Vietnam\",\"West Bank and Gaza\",\"Yemen, Rep.\"],\"legendgroup\":\"Asia\",\"marker\":{\"color\":\"#636efa\",\"size\":[31889923,708573,150448339,14131858,1318683096,6980412,1110396331,223547000,69453570,27499638,6426679,127467972,6053193,23301725,49044790,2505559,3921278,24821286,2874127,47761980,28901790,3204897,169270617,91077287,27601038,4553009,20378239,19314747,23174294,65068149,85262356,4018332,22211743],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Asia\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[974.5803384,29796.04834,1391.253792,1713.778686,4959.114854,39724.97867,2452.210407,3540.651564,11605.71449,4471.061906,25523.2771,31656.06806,4519.461171,1593.06548,23348.139730000006,47306.98978,10461.05868,12451.6558,3095.7722710000007,944.0,1091.359778,22316.19287,2605.94758,3190.481016,21654.83194,47143.17964,3970.095407,4184.548089,28718.27684,7458.396326999998,2441.576404,3025.349798,2280.769906],\"xaxis\":\"x\",\"y\":[43.828,75.635,64.062,59.723,72.961,82.208,64.69800000000001,70.65,70.964,59.545,80.745,82.603,72.535,67.297,78.623,77.58800000000002,71.993,74.241,66.803,62.069,63.785,75.64,65.483,71.688,72.777,79.972,72.396,74.143,78.4,70.616,74.249,73.422,62.698],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Europe\\u003cbr\\u003eyear=2007\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Albania\",\"Austria\",\"Belgium\",\"Bosnia and Herzegovina\",\"Bulgaria\",\"Croatia\",\"Czech Republic\",\"Denmark\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Montenegro\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Serbia\",\"Slovak Republic\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"Turkey\",\"United Kingdom\"],\"legendgroup\":\"Europe\",\"marker\":{\"color\":\"#EF553B\",\"size\":[3600523,8199783,10392226,4552198,7322858,4493312,10228744,5468120,5238460,61083916,82400996,10706290,9956108,301931,4109086,58147733,684736,16570613,4627926,38518241,10642836,22276056,10150265,5447502,2009245,40448191,9031088,7554661,71158647,60776238],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Europe\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[5937.029525999998,36126.4927,33692.60508,7446.298803,10680.79282,14619.222719999998,22833.30851,35278.41874,33207.0844,30470.0167,32170.37442,27538.41188,18008.94444,36180.78919,40675.99635,28569.7197,9253.896111,36797.93332,49357.19017,15389.924680000002,20509.64777,10808.47561,9786.534714,18678.31435,25768.25759,28821.0637,33859.74835,37506.41907,8458.276384,33203.26128],\"xaxis\":\"x\",\"y\":[76.423,79.829,79.441,74.852,73.005,75.748,76.486,78.332,79.313,80.657,79.406,79.483,73.33800000000002,81.757,78.885,80.546,74.543,79.762,80.196,75.563,78.098,72.476,74.002,74.663,77.926,80.941,80.884,81.70100000000002,71.777,79.425],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Africa\\u003cbr\\u003eyear=2007\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Algeria\",\"Angola\",\"Benin\",\"Botswana\",\"Burkina Faso\",\"Burundi\",\"Cameroon\",\"Central African Republic\",\"Chad\",\"Comoros\",\"Congo, Dem. Rep.\",\"Congo, Rep.\",\"Cote d'Ivoire\",\"Djibouti\",\"Egypt\",\"Equatorial Guinea\",\"Eritrea\",\"Ethiopia\",\"Gabon\",\"Gambia\",\"Ghana\",\"Guinea\",\"Guinea-Bissau\",\"Kenya\",\"Lesotho\",\"Liberia\",\"Libya\",\"Madagascar\",\"Malawi\",\"Mali\",\"Mauritania\",\"Mauritius\",\"Morocco\",\"Mozambique\",\"Namibia\",\"Niger\",\"Nigeria\",\"Reunion\",\"Rwanda\",\"Sao Tome and Principe\",\"Senegal\",\"Sierra Leone\",\"Somalia\",\"South Africa\",\"Sudan\",\"Swaziland\",\"Tanzania\",\"Togo\",\"Tunisia\",\"Uganda\",\"Zambia\",\"Zimbabwe\"],\"legendgroup\":\"Africa\",\"marker\":{\"color\":\"#00cc96\",\"size\":[33333216,12420476,8078314,1639131,14326203,8390505,17696293,4369038,10238807,710960,64606759,3800610,18013409,496374,80264543,551201,4906585,76511887,1454867,1688359,22873338,9947814,1472041,35610177,2012649,3193942,6036914,19167654,13327079,12031795,3270065,1250882,33757175,19951656,2055080,12894865,135031164,798094,8860588,199579,12267493,6144562,9118773,43997828,42292929,1133066,38139640,5701579,10276158,29170398,11746035,12311143],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Africa\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[6223.367465,4797.231267,1441.284873,12569.85177,1217.032994,430.0706916,2042.09524,706.016537,1704.063724,986.1478792,277.5518587,3632.557798,1544.750112,2082.4815670000007,5581.180998,12154.08975,641.3695236000002,690.8055759,13206.48452,752.7497265,1327.60891,942.6542111,579.2317429999998,1463.249282,1569.331442,414.5073415,12057.49928,1044.770126,759.3499101,1042.581557,1803.151496,10956.99112,3820.17523,823.6856205,4811.060429,619.6768923999998,2013.977305,7670.122558,863.0884639000002,1598.435089,1712.472136,862.5407561000002,926.1410683,9269.657808,2602.394995,4513.480643,1107.482182,882.9699437999999,7092.923025,1056.380121,1271.211593,469.70929810000007],\"xaxis\":\"x\",\"y\":[72.301,42.731,56.728,50.728,52.295,49.58,50.43,44.74100000000001,50.651,65.152,46.462,55.322,48.328,54.791,71.33800000000002,51.57899999999999,58.04,52.947,56.735,59.448,60.022,56.007,46.38800000000001,54.11,42.592,45.678,73.952,59.44300000000001,48.303,54.467,64.164,72.801,71.164,42.082,52.90600000000001,56.867,46.859,76.442,46.242,65.528,63.062,42.56800000000001,48.159,49.339,58.556,39.613,52.517,58.42,73.923,51.542,42.38399999999999,43.487],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Americas\\u003cbr\\u003eyear=2007\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Argentina\",\"Bolivia\",\"Brazil\",\"Canada\",\"Chile\",\"Colombia\",\"Costa Rica\",\"Cuba\",\"Dominican Republic\",\"Ecuador\",\"El Salvador\",\"Guatemala\",\"Haiti\",\"Honduras\",\"Jamaica\",\"Mexico\",\"Nicaragua\",\"Panama\",\"Paraguay\",\"Peru\",\"Puerto Rico\",\"Trinidad and Tobago\",\"United States\",\"Uruguay\",\"Venezuela\"],\"legendgroup\":\"Americas\",\"marker\":{\"color\":\"#ab63fa\",\"size\":[40301927,9119152,190010647,33390141,16284741,44227550,4133884,11416987,9319622,13755680,6939688,12572928,8502814,7483763,2780132,108700891,5675356,3242173,6667147,28674757,3942491,1056608,301139947,3447496,26084662],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Americas\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[12779.37964,3822.137084,9065.800825,36319.23501,13171.63885,7006.580419,9645.06142,8948.102923,6025.3747520000015,6873.262326000001,5728.353514,5186.050003,1201.637154,3548.3308460000007,7320.8802620000015,11977.57496,2749.320965,9809.185636,4172.838464,7408.905561,19328.70901,18008.50924,42951.65309,10611.46299,11415.80569],\"xaxis\":\"x\",\"y\":[75.32,65.554,72.39,80.653,78.553,72.889,78.782,78.273,72.235,74.994,71.878,70.259,60.916,70.19800000000001,72.567,76.195,72.899,75.53699999999998,71.752,71.421,78.74600000000002,69.819,78.242,76.384,73.747],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003econtinent=Oceania\\u003cbr\\u003eyear=2007\\u003cbr\\u003egdpPercap=%{x}\\u003cbr\\u003elifeExp=%{y}\\u003cbr\\u003epop=%{marker.size}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Australia\",\"New Zealand\"],\"legendgroup\":\"Oceania\",\"marker\":{\"color\":\"#FFA15A\",\"size\":[20434176,4115771],\"sizemode\":\"area\",\"sizeref\":269118.99918367347,\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"Oceania\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[34435.367439999995,25185.00911],\"xaxis\":\"x\",\"y\":[81.235,80.204],\"yaxis\":\"y\",\"type\":\"scatter\"}],\"name\":\"2007\"}]);\n",
-       "                        }).then(function(){\n",
-       "                            \n",
-       "var gd = document.getElementById('2d19d45f-a639-42e1-b87b-be66e506a3c7');\n",
-       "var x = new MutationObserver(function (mutations, observer) {{\n",
-       "        var display = window.getComputedStyle(gd).display;\n",
-       "        if (!display || display === 'none') {{\n",
-       "            console.log([gd, 'removed!']);\n",
-       "            Plotly.purge(gd);\n",
-       "            observer.disconnect();\n",
-       "        }}\n",
-       "}});\n",
-       "\n",
-       "// Listen for the removal of the full notebook cells\n",
-       "var notebookContainer = gd.closest('#notebook-container');\n",
-       "if (notebookContainer) {{\n",
-       "    x.observe(notebookContainer, {childList: true});\n",
-       "}}\n",
-       "\n",
-       "// Listen for the clearing of the current output cell\n",
-       "var outputEl = gd.closest('.output');\n",
-       "if (outputEl) {{\n",
-       "    x.observe(outputEl, {childList: true});\n",
-       "}}\n",
-       "\n",
-       "                        })                };                });            </script>        </div>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "import plotly.express as px\n",
-    "gapminder = px.data.gapminder()\n",
-    "fig = px.scatter(\n",
-    "    gapminder, x=\"gdpPercap\", y=\"lifeExp\", size=\"pop\", color=\"continent\",\n",
-    "    hover_name=\"country\", log_x=True, log_y=True, size_max=70,\n",
-    "    range_y=[20,20], animation_frame='year'\n",
-    ")\n",
-    "fig.show()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "15110f9b-0f79-4c91-a068-0ec0444d6f60",
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "TypeError",
-     "evalue": "'NoneType' object cannot be interpreted as an integer",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
-      "Cell \u001b[0;32mIn[3], line 10\u001b[0m\n\u001b[1;32m      5\u001b[0m app \u001b[38;5;241m=\u001b[39m JupyterDash(\u001b[38;5;18m__name__\u001b[39m)\n\u001b[1;32m      6\u001b[0m app\u001b[38;5;241m.\u001b[39mlayout \u001b[38;5;241m=\u001b[39m html\u001b[38;5;241m.\u001b[39mDiv([\n\u001b[1;32m      7\u001b[0m     html\u001b[38;5;241m.\u001b[39mH1(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHELLO!!\u001b[39m\u001b[38;5;124m'\u001b[39m, style\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtextAlign\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m'\u001b[39m}),\n\u001b[1;32m      8\u001b[0m     dcc\u001b[38;5;241m.\u001b[39mGraph(figure\u001b[38;5;241m=\u001b[39mfig)\n\u001b[1;32m      9\u001b[0m ])\n\u001b[0;32m---> 10\u001b[0m \u001b[43mapp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_server\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43minline\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhost\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m0.0.0.0\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n",
-      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/jupyter_dash/jupyter_app.py:222\u001b[0m, in \u001b[0;36mJupyterDash.run_server\u001b[0;34m(self, mode, width, height, inline_exceptions, **kwargs)\u001b[0m\n\u001b[1;32m    220\u001b[0m old_server \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_server_threads\u001b[38;5;241m.\u001b[39mget((host, port))\n\u001b[1;32m    221\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m old_server:\n\u001b[0;32m--> 222\u001b[0m     \u001b[43mold_server\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkill\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    223\u001b[0m     old_server\u001b[38;5;241m.\u001b[39mjoin()\n\u001b[1;32m    224\u001b[0m     \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_server_threads[(host, port)]\n",
-      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/jupyter_dash/_stoppable_thread.py:16\u001b[0m, in \u001b[0;36mStoppableThread.kill\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mkill\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m     14\u001b[0m     thread_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_id()\n\u001b[1;32m     15\u001b[0m     res \u001b[38;5;241m=\u001b[39m ctypes\u001b[38;5;241m.\u001b[39mpythonapi\u001b[38;5;241m.\u001b[39mPyThreadState_SetAsyncExc(\n\u001b[0;32m---> 16\u001b[0m         \u001b[43mctypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mc_long\u001b[49m\u001b[43m(\u001b[49m\u001b[43mthread_id\u001b[49m\u001b[43m)\u001b[49m, ctypes\u001b[38;5;241m.\u001b[39mpy_object(\u001b[38;5;167;01mSystemExit\u001b[39;00m)\n\u001b[1;32m     17\u001b[0m     )\n\u001b[1;32m     18\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m     19\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid thread id: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mthread_id\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
-      "\u001b[0;31mTypeError\u001b[0m: 'NoneType' object cannot be interpreted as an integer"
-     ]
-    }
-   ],
-   "source": [
-    "from jupyter_dash import JupyterDash\n",
-    "from dash import dcc\n",
-    "import dash_html_components as html\n",
-    "\n",
-    "app = JupyterDash(__name__)\n",
-    "app.layout = html.Div([\n",
-    "    html.H1('HELLO!!', style={'textAlign': 'center'}),\n",
-    "    dcc.Graph(figure=fig)\n",
-    "])\n",
-    "app.run_server(mode='inline', host='0.0.0.0')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "858c30c1-b087-4c42-81e1-e55139a2d56a",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "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.10.6"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/python-matplotlib-checkpoint.ipynb b/examples/.ipynb_checkpoints/python-matplotlib-checkpoint.ipynb
deleted file mode 100644
index b33ffc789f03ebf73cbc7591af34868ef556a12e..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/python-matplotlib-checkpoint.ipynb
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "bef78a5a-8320-4183-a2af-5e06d5f81287",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAHGCAYAAABjORGMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABOAUlEQVR4nO3deViVdeL//+c5rMouKqDgQi4QKGJlueboVJamaVFpY9NQnza3NJ3KFrNmstVGxZqmprRGLbU0M7NRU1yabBFw33cRFFEOshzgnPv3Rz/5RoqCAjcHXo/rOtcl93mfc17c3nBe3O/73LfFMAwDERERERdmNTuAiIiIyJVSoRERERGXp0IjIiIiLk+FRkRERFyeCo2IiIi4PBUaERERcXkqNCIiIuLyVGhERETE5anQiIiIiMtToRGRGmGxWBg7dqzZMThx4gQtWrTgpZdeuuTYQ4cOYbFYmDZtWg0kE5EroUIjIpdt9uzZWCyW0puPjw9t2rTh4YcfZufOnVX2OsuWLWP27NkXHfPbHOXdADw8PAgMDMTPz6/M41955RXS0tKqLLOI1Cx3swOIiOv76KOPaNOmDWfPnmX37t1Mnz6dxYsX8+OPP9KqVasrfv558+Zx9OhR/vznP5c7Zv369aX/Xrt2LRMnTmTGjBnEx8eXGRcUFMTmzZvLLCspKeG5556jefPmxMXFXXFeEal5KjQicsXi4+NLi0C/fv24/fbbiYyMZM6cOTz77LNX/PynTp265Jju3buX/jsrKwuADh06lFlenuzsbHSdXhHXpiknEalyrVu3pnHjxuzateui4woKCnjmmWeIjo4mICCAHj168PXXX5fef+4Ylm+++YY1a9aUTh0lJydfUb7fHs8zefJkQkJCAHjggQewWCy0bt36oo/PyclhxIgRREZG0qRJEwYNGsShQ4euKJOIXBkVGhGpcidOnODUqVO0a9eu3DEOh4M//OEPvPfeezz22GPMmTOH9u3bM2DAAGbOnAlAaGgo69evp02bNsTHx7N+/XrWr19/3jTSlUhMTOSjjz4CYOLEiaxfv54FCxaUOz4vL4/rrruOFStW8OKLL/LBBx9QUFDA9ddfz9mzZ6ssl4hUjqacROSKlZSU4HA4yM3NZevWrTz11FMEBAQwdOjQch/zzjvvsHHjRtavX186LTRgwAAsFgtPPfUUd911FyEhIXTv3h1fX18CAgIqNH1UWREREaUFqV27dpd8jZdeeomTJ0+yfft2wsLCALj55puJjIzkX//6F+PGjavyjCJyadpDIyJX7Nprr8Xd3Z2goCB69uyJu7s7y5cv56qrrir3MStXruTqq68+r0A8/PDD5OXl8cMPP1R37Mvy7bffcvvtt9O0aVMcDgcOhwNPT0+6dOlCamqq2fFE6i3toRGRK3ZuuqhBgwa0aNECX1/fSz5m3759REREnLf83LK9e/dWec6qsHfvXtLS0vjkk0/Ou+/mm282IZGIgAqNiFSBmJiYSn/cOTIykv3795+3/OjRo6X310aRkZE0b96cv/3tb+fdFxAQYEIiEQEVGhExSd++ffnqq6/44YcfuOGGG0qXf/DBBzRs2JCuXbuWLvPx8eH48ePVlsXHxwegQq/Rt29fPvvsM1q3bk2jRo2qLZOIVI6OoRGRGtGiRQu2bNnCyZMnARgxYgTXXXcdAwYMICkpia+//pqHH36Yf/3rX7z66quEhoaWPrZLly7s2rWLN954g1WrVpXuxakqLVu2pGnTpsyaNYtFixaVfnS8adOmeHl58dNPP2Gz2YBfP+bt7e1N165dee+991i5ciX/+c9/GDZsWLWWLhG5OBUaEakRjzzyCP/73/9YuHAhAO7u7iQnJ/PQQw+RlJTE0KFD2bZtG0uWLGHUqFFlHvvss89yxx138Pe//52HHnqIH3/8sUqzeXh4MGfOHNzd3Rk+fDiTJk0iLy+PBg0a8Je//IUvvviCdevWAeDv709KSgr9+vXj7bff5o477uDNN98kKiqqdE+PiNQ8i6HTY4qIiIiL0x4aERERcXkqNCIiIuLyVGhERETE5anQiIiIiMtToRERERGXp0IjIiIiLq/enCnY6XSSnp6On58fFovF7DgiIiJSAYZhkJubS7NmzbBay98PU28KTXp6+gUvhCciIiK135EjRwgPDy/3/npTaPz8/IBfV4i/v7/JaURERKQibDYbERERpe/j5ak3hebcNJO/v78KjYiIiIu51OEiOihYREREXJ4KjYiIiLg8FRoRERFxeSo0IiIi4vJUaERERMTlqdCIiIiIy1OhEREREZenQiMiIiIuT4VGREREXF6tKDTFxcVERUXRunXrcsfs3buX3r17ExQUxIABAzh58mQNJhQREZHarFYUmpkzZ3Ls2LFy7y8uLqZv3760adOGtWvXYrVaGThwYA0mFBERkdrM9EKTlZXF5MmTGTVqVLljli5dSnZ2NjNnzqRDhw7885//5IcffiAtLa0Gk4qIiEhtZXqheeGFF4iPj+fmm28ud8yaNWvo3r07Xl5eADRr1ozo6GhWr15dUzFFRESkHDkFxWzcf8rUDKZebXvr1q3MmjWLTZs2kZmZWe64jIwMQkNDyywLCwu76GPsdjt2u730a5vNduWBRUREpIy0I2cYOW8T2WeLWDq6J60b+5iSw9Q9NE888QRPPvkkUVFRFx13+vRp/Pz8yizz8/MjOzu73MdMmTKFgICA0ltERESVZBYREREwDIN/rz/AXf/8niPZBQT5eJJnLzEtj2mF5ssvv+TAgQNMnDjxkmODg4PJzc0ts8xmsxEcHFzuY5555hlycnJKb0eOHLnizCIiIgJn8ov4v49/4eWl2yl2GPSLCeXr0T2JbR5gWibTppxmzpxJeno6LVq0AH79JFNubi5NmjThyy+/pFu3bqVjQ0ND2b59e5nHp6ennzcN9VteXl6lx9yIiIhI1fjl0GlGz0vh2JkCPN2sPDcgmuE3tMRisZiay7RCM3fu3DLHuMyfP5+pU6fyww8/0KRJkzJj+/bty/vvv4/dbsfLy4tjx46xa9cu+vTpU9OxRURE6iWn0+D9dft549tdlDgNWgY3ZOawzqbulfkt06acGjduTPPmzUtvjRo1wt3dnebNm2Oz2YiIiGDWrFkA9OvXj5CQEB5//HG2bNnCo48+So8ePYiNjTUrvoiISL2RnVfEg7N/Yso3OylxGgzoGMbSUT1qTZmBWvCx7QsxDAOr1YphGAC4u7uzYsUK9u/fT69evTAMg0WLFpmcUkREpO778UA2t01bx+pdJ/F0t/LK4A7MGBqPn7eH2dHKsBjnWkMdZ7PZCAgIICcnB39/f7PjiIiI1GpOp8G7yfuYumI3DqdBZGMfZt7Xmeiwmn0Prej7t6nnoREREZHaJ+usnbGfpbJuTxYAg+Ob87c7YvHxqr21ofYmExERkRr3/b4sxnyayslcO94eVl4aFEvCNeGmf4rpUlRoREREBIfTYMZ3e5i+ag9OA9o29WXmfZ1pF+J36QfXAio0IiIi9dwJWyFPfJbK9/t+vR5TwjXhTB4UQ0NP16kJrpNUREREqty6PScZ+1kqWWeLaOjpxt/uiGVI53CzY1WaCo2IiEg9VOJw8o+Ve5i5Zi+GAVGhfiQN60ybpr5mR7ssKjQiIiL1zPGcAsbMS+XHg79e5HlolxZMuv1qvD3cTE52+VRoRERE6pHVu04w7rNUTucX4+PpxpQ7OzIwrpnZsa6YCo2IiEg9UOxw8uZ/d/Fe8n4AYpr5kzSsM60b+5icrGqo0IiIiNRxx84UMGruJjYdPgPA/V1bMvG2aJeeYvo9FRoREZE6bMX2TMYvSCOnoBg/b3dev7Mjt3YIMztWlVOhERERqYOKSpy8tnwn/15/AIC48ABmDO1Mi+CGJierHio0IiIidcyR7HxGzksh7cgZABK7t+bpW6PwdLeaG6waqdCIiIjUIcu3HmfCws3kFpbg7+3Omwlx3BwTanasaqdCIyIiUgfYSxy88vUOZv/vEADxLQKZMTSe8KC6OcX0eyo0IiIiLu5gVh4j521i6zEbAI/0imT8Le3xcKu7U0y/p0IjIiLiwr5KS+eZL7Zw1l5CUEMP3ro7jj5RIWbHqnEqNCIiIi6osNjBS0u3M3fjYQCuaxXE9KHxhAU0MDmZOVRoREREXMy+k2cZMWcTOzNysVjg8d5XMfaP7XCvR1NMv6dCIyIi4kIWpRzl2UVbyS9yEOzjydv3dKJXuyZmxzKdCo2IiIgLKChyMGnJVub/fBSAGyIbMf3eeJr6e5ucrHZQoREREanl9mTmMmLuJnZnnsVigdF92jK6b1vcrBazo9UaKjQiIiK12IKfj/D8l1spLHbSxM+Lafd0olubxmbHqnVUaERERGqhPHsJz3+5lS82HQOgR5vGvH1PJ5r4eZmcrHZSoREREalldhy3MXLuJvadzMNqgXE3tePx3m2waoqpXCo0IiIitYRhGMz78QiTv9qGvcRJiL8X0++N5/rIYLOj1XoqNCIiIrVAbmExExdt5au0dAB6t2/CWwlxBPtqiqkiVGhERERMtvVYDiPnbuLgqXzcrBYm3NKeh3tGaoqpElRoRERETGIYBv/54RAvL91BkcNJswBvZgyL55qWjcyO5nJUaERERExgKyzm6c83s2xLBgB/jG7KmwlxBDb0NDmZa1KhERERqWFpR84wct4mjmQX4OFm4al+UTzYozUWi6aYLpcKjYiISA0xDIOPNhxkyjc7KHYYhAc1IGlYZzpFBJodzeWp0IiIiNSAM/lFTFi4mRXbMwHoFxPKa3d1JKCBh8nJ6gYVGhERkWq26fBpRs1N4diZAjzdrDzbP5r7u7bUFFMVUqERERGpJk6nwQfr9/P68l2UOA1aBjckaWhnOoQHmB2tzlGhERERqQbZeUWMX5DGdztPADCgYxhThnTAz1tTTNVBhUZERKSK/XQwm1FzU8iwFeLpbmXS7VczrEsLTTFVIxUaERGRKuJ0GrybvI+pK3bjcBpENvYhaVhnrm7mb3a0Ok+FRkREpApknbUz9rNU1u3JAmBwfHP+dkcsPl56q60JWssiIiJX6H/7TjHm0xRO5Nrx9rDy0sBYEq4N1xRTDVKhERERuUwOp0HSd3uZtmo3TgPaNPXlnfs60y7Ez+xo9Y4KjYiIyGU4kVvIE5+m8v2+UwAkXBPO5EExNPTUW6sZtNZFREQqaf2eLJ74LIWss0U08HDj74NjGdI53OxY9ZoKjYiISAWVOJxMW7WHpNV7MQyICvUjaVhn2jT1NTtavWc188VXrlxJnz59CAgIIDo6mrlz55Y71tfXF4vFUuaWk5NTg2lFRKQ+y8gpZNgHG5nx3a9lZmiXFiwe0V1lppYwrdCcOXOGBx54gISEBDZs2MCQIUMYPnw4GzduPG+sw+EgLy+P5ORkMjIySm/+/vpcv4iIVL81u05w2/R1/HggGx9PN6YPjWfKkA54e7iZHU3+fxbDMAyzXrywsBBvb2/g10uqt2zZkoceeogXXnihzLjs7GyCg4M5fvw4oaGhl/VaNpuNgIAAcnJyVIRERKRCih1O3vrvbv6ZvA+Aq8P8mXlfZ1o39jE5Wf1R0fdvU4+hOVdmznF3d8fX9/xdd+emlho1alQjuURERI6dKWD0vBR+OXQagPu7tmTibdHaK1NLmXoMzTkZGRmMHTsWi8XCn/70p/Puz8nJwc3NjeHDh9O8eXNuvPFGNmzYcNHntNvt2Gy2MjcREZGKWLk9k/7T1/HLodP4ebnzzn2deWlQrMpMLWZ6oXnyyScJCwtj9uzZrFq1iqZNm543JiwsjMTERB566CEWLVpESEgI/fr14+jRo+U+75QpUwgICCi9RUREVOe3ISIidUBRiZO/Ld3OQx//zJn8YjqGB/D16J7c1iHM7GhyCaYeQwO/7p3ZvXs333zzDbNmzWLevHn07t37oo8pLCwkPDycl19+mccee+yCY+x2O3a7vfRrm81GRESEjqEREZELOpKdz8h5KaQdOQNAYvfWPHVre7zctVfGTC5xDA1AaGgooaGh9OrVi7y8PCZNmkRycvJFH+Pt7U1kZCTp6enljvHy8sLLy6uq44qISB20fGsGExamkVtYgr+3O28mxHFzzOV9CEXMYdqUU0lJCYWFhWWWBQQEUFBQcN7Y3x//kpeXx549e4iKiqrWjCIiUrfZSxy8uGQbj/7nF3ILS4hvEciyMT1VZlyQaYXm448/pmvXrixcuJAdO3bwzjvvkJSUREJCAllZWURERDBr1iwA+vTpw5gxY/j+++/ZsmUL9913H8HBwQwePNis+CIi4uIOncrjrnf/x6zvDwLwSK9I5j/SlfCghuYGk8ti2pRTYmIieXl5TJ8+ndTUVJo0acLTTz/N+PHjycrKwmq1cu7wniVLlvDCCy+QmJhIZmYmvXv3ZuXKlTRsqI1OREQqb+nmdJ7+fAtn7SUENfTgrbvj6BMVYnYsuQKmHxRcU3RiPRERKSx28PLS7czZeBiA61oFMX1oPGEBDUxOJuVxmYOCRUREasK+k2cZMWcTOzNyAXi891WMu6kd7m6mn8FEqoAKjYiI1HmLU44xcdEW8oscBPt4MvWeTtzYronZsaQKqdCIiEidVVD066eYPvv5CAA3RDZi2r3xhPh7X+KR4mpUaEREpE7ak5nLiLmb2J15FosFRvVpy5i+bXGzWsyOJtVAhUZEROqcBT8f4YUvt1FQ7KCJnxfT7ulEtzaNzY4l1UiFRkRE6ow8ewnPf7mVLzYdA6BHm8a8fU8nmvjpzPF1nQqNiIjUCTszbIyYs4l9J/OwWmDcTe14rHcbTTHVEyo0IiLi0gzD4LOfjjBpyTbsJU5C/L2Yfm8810cGmx1NapAKjYiIuKyz9hImfrGFJWm/Xqz4xnZNmHp3HMG+mmKqb1RoRETEJW09lsPIuZs4eCofN6uF8Te355FekVg1xVQvqdCIiIhLMQyD//xwiJe/3kFRiZNmAd7MGBbPNS0bmR1NTKRCIyIiLsNWWMzTn29m2ZYMAP4Y3ZQ37oojyMfT5GRiNhUaERFxCZuPnmHk3BQOZ+fjbrXw9K1RPNijNRaLpphEhUZERGo5wzD4aMNBpnyzg2KHQXhQA5KGdaZTRKDZ0aQWUaEREZFaKye/mAkL0/jv9kwAbokJ4fW74gho4GFyMqltVGhERKRWSjl8mpFzUzh2pgBPNyvP9o/m/q4tNcUkF6RCIyIitYrTafDv9Qd4bflOSpwGLYMbkjS0Mx3CA8yOJrWYCo2IiNQap/OKeHJBGt/tPAFA/45hTBnSAX9vTTHJxanQiIhIrfDzwWxGzUvheE4hnu5WXhhwNfdd30JTTFIhKjQiImIqp9Pg3eR9TF2xG4fTILKxD0nDOnN1M3+zo4kLUaERERHTZJ21M25+Gmt3nwTgjk7N+NvgDvh66e1JKkdbjIiImOKH/acYPS+FE7l2vD2sTB4Yw93XRmiKSS6LCo2IiNQoh9Mg6bu9TFu1G6cBbZr6MnNYZ9qH+pkdTVyYCo2IiNSYE7mFjP0slQ17TwFw1zXhvDQohoaeejuSK6MtSEREasSGvVmM+TSVrLN2Gni48bc7YrnzmnCzY0kdoUIjIiLVqsThZPqqPcxYvRfDgPYhfsy8rzNtmvqaHU3qEBUaERGpNpm2QkbNS+HHA9kADO0SwaTbY/D2cDM5mdQ1KjQiIlIt1uw6wbj5aWTnFeHj6cYrQzowqFNzs2NJHaVCIyIiVarY4WTqit28u2YfAFeH+ZM0LJ7IJppikuqjQiMiIlUm/UwBo+al8Muh0wAMv6Elz/aP1hSTVDsVGhERqRKrdmTy5II0zuQX4+flzmt3deS2DmFmx5J6QoVGRESuSFGJk9eX7+SD9QcA6BgeQNLQzrQIbmhyMqlPVGhEROSyHcnOZ9S8FFKPnAHgL91b8fStUXi5a4pJapYKjYiIXJZvt2UwYUEatsIS/L3deSMhjltiQs2OJfWUCo2IiFSKvcTBlGU7mfX9QQA6RQSSNCye8CBNMYl5VGhERKTCDp3KY+TcFLYcywHg4V6RTLilPR5uVpOTSX2nQiMiIhXy9ebjPP35ZnLtJQQ29GDq3XH0iQoxO5YIoEIjIiKXUFjs4G9fb+c/PxwG4NqWQUwfGk+zwAYmJxP5f1RoRESkXPtPnmXE3BR2HLcB8Hjvqxh3UzvcNcUktYwKjYiIXNCXqceY+MUW8oocBPt4MvWeTtzYronZsUQuSIVGRETKKChyMPmrbXz60xEAbohsxLR74wnx9zY5mUj5VGhERKTU3hO5jJiTwq7MXCwWGNWnLWP6tsXNajE7mshFqdCIiAgAC385yvOLt1JQ7KCxrxfT7u1E9zaNzY4lUiEqNCIi9Vx+UQnPL97G55uOAtC9TTBv39OJpn6aYhLXYeph6itXrqRPnz4EBAQQHR3N3Llzyx27d+9eevfuTVBQEAMGDODkyZM1mFREpG7alZHL7TPW8/mmo1gt8ORN7fg48XqVGXE5phWaM2fO8MADD5CQkMCGDRsYMmQIw4cPZ+PGjeeNLS4upm/fvrRp04a1a9ditVoZOHCgCalFROoGwzD49MfDDExaz76TeYT4ezH3/25glI6XERdlMQzDMOvFCwsL8fb+9a8AwzBo2bIlDz30EC+88EKZcYsWLeL+++8nKysLLy8v0tPTad68OampqcTFxVXotWw2GwEBAeTk5ODv71/l34uIiKs4ay/h2UVb+DI1HYAb2zVh6t1xBPt6mZxM5HwVff829Riac2XmHHd3d3x9fc8bt2bNGrp3746X168/bM2aNSM6OprVq1dXuNCIiAhsS89h1NwU9mfl4Wa1MP7m9jzSKxKr9sqIi6sVBwVnZGTw6quvYrFY+NOf/nTB+0NDy16SPiwsjMzMzHKf0263Y7fbS7+22WxVF1hExMUYhsF/Nh7m5aXbKSpxEhbgzYyh8VzbqpHZ0USqhOmF5sknn2Tq1KkEBgaSkpJC06ZNzxtz+vTp85b7+fmRnZ1d7vNOmTKFyZMnV3leERFXYyss5pnPt/D1luMA9I1qypsJcQT5eJqcTKTqmH4xjgkTJpCcnMyjjz5K165dWbNmzXljgoODyc3NLbPMZrMRHBxc7vM+88wz5OTklN6OHDlS1dFFRGq9zUfPMGD6er7echx3q4Xn+kfzwZ+vVZmROsf0PTShoaGEhobSq1cv8vLymDRpEsnJyeeN2b59e5ll6enp501D/ZaXl1fpMTciIvWNYRjM+v4gryzbQbHDoHlgA5KGxRPfIsjsaCLVwrRCU1JSQklJSZkDgwMCAigoKDhvbN++fXn//fex2+14eXlx7Ngxdu3aRZ8+fWoysoiIS8jJL+avn6fx7bZfjzO8+eoQ3rgrjoCGHiYnE6k+pk05ffzxx3Tt2pWFCxeyY8cO3nnnHZKSkkhISCArK4uIiAhmzZoFQL9+/QgJCeHxxx9ny5YtPProo/To0YPY2Fiz4ouI1Eoph09z2/R1fLstE083Ky/efjXvDb9GZUbqPNP20CQmJpKXl8f06dNJTU2lSZMmPP3004wfP56srCysVivnTpHj7u7OihUrePDBB+nVqxfdu3dn0aJFZkUXEal1DMPgg3UHeG35TkqcBi0aNWTmsM50CA8wO5pIjTD1xHo1SSfWE5G66nReEeMXpLFq5wkA+ncIY8qdHfD31l4ZcX0ucWI9ERG5Mj8fzGb0vBTScwrxdLfywoCrue/6FlgsOlGe1C8qNCIiLsjpNPjn2n289d/dOJwGrRv7kDQsnphmmmKS+kmFRkTExZw6a2fc/DSSd58EYFCnZvx9cAd8vfQrXeovbf0iIi7kh/2nGPNpCpk2O17uVl4aFMPd10ZoiknqPRUaEREX4HAazFy9l3+s3I3TgDZNfZk5rDPtQ/3MjiZSK6jQiIjUcidyCxn7WSob9p4C4M7O4bx8RwwNPfUrXOQc/TSIiNRiG/ZmMebTVLLO2mng4cbLd8Ry1zXhZscSqXVUaEREaiGH02Daqj3M+G4PhgHtQ/yYeV88bZpqiknkQlRoRERqmUxbIaPnpbDxQDYA914XwaTbY2jg6WZyMpHaS4VGRKQWSd59knGfpXIqrwgfTzdeGdKBQZ2amx1LpNZToRERqQVKHE7eWrGbd9fsAyA6zJ+Zw+KJbOJrcjIR16BCIyJisvQzBYyel8LPh04DMPyGljzbPxpvD00xiVSUCo2IiIm+25nJuPlpnMkvxs/LnVfv7Ej/jmFmxxJxOSo0IiImKHY4eX35Tt5fdwCADs0DSBoWT8tgH5OTibgmFRoRkRp2JDufUfNSSD1yBoAHurXimdui8HLXFJPI5VKhERGpQd9uy2DCgjRshSX4e7vzRkIct8SEmh1LxOWp0IiI1AB7iYNXv9nJRxsOAtApIpAZQ+OJaNTQ3GAidYQKjYhINTt8Kp8Rczex5VgOAP/XszUTbonC091qcjKRukOFRkSkGi3bcpynFm4m115CYEMP3kqIo290iNmxROocFRoRkWpQWOzg71/v4JMfDgFwbcsgpg+Np1lgA5OTidRNKjQiIlXsQFYeI+ZsYvtxGwCP9b6KcTe1w8NNU0wi1UWFRkSkCn2ZeoyJX2whr8hBIx9Ppt4dR+/2Tc2OJVLnqdCIiFSBwmIHLy7Zxqc/HQGgS+tGTL83ntAAb5OTidQPKjQiIldo74lcRsxJYVdmLhYLjPpDG0b3bYu7pphEaowKjYjIFfj8l6M8t3grBcUOGvt68Y97OtGjbWOzY4nUOxX68+EPf/gDy5Ytq+4sIiIuI7+ohPEL0nhyQRoFxQ66twlm2ZgeKjMiJqlQoenUqRP33XcfV199NR9++CFFRUXVnUtEpNbalZHLwKQNLPzlKFYLjLupHR8nXk9TPx0vI2IWi2EYRkUG5ufnM3v2bGbOnMmpU6cYOXIkjz32GI0aNarujFXCZrMREBBATk4O/v7+ZscRERdkGAbzfz7CpCXbKCx20tTPi+lD47khMtjsaCJ1VkXfvytcaH7ru+++49FHH+Xw4cP4+JS91P2pU6cqn7YGqNCIyJU4ay/huUVbWJyaDkCvdk2YenccjX29TE4mUrdV9P27UgcF5+fn88knnzBz5kxyc3OZOHEirVq1utKsIiK12vZ0GyPnbmJ/Vh5uVgtP3tyOR3tdhdVqMTuaiPz/KlRodu3axTvvvMPHH39Ms2bNGDduHMOHD8fT07O684mImMYwDOZsPMxLS7dTVOIkLMCb6UPjua6Va0y1i9QnFSo00dHR3HjjjXzyyScMGDCgujOJiJjOVljMM19s4evNxwHoE9WUtxLiCPLRH3IitVGFCs3GjRu57rrrqjuLiEitsOVoDiPnbeLQqXzcrRae6hfFgz1aa4pJpBarUKFRmRGR+sAwDGZ/f5BXlu2kyOGkeWADZgyLp3OLILOjicgl6EzBIiJATn4xf/08jW+3ZQJw89UhvHFXHAENPUxOJiIVoUIjIvVe6pEzjJy7iaOnC/BwszDxtmge6NYKi0VTTCKuotJXTlu7di2LFy8u/fqtt96iSZMmXHvttezcubMqs4mIVCvDMPhg3X7uevd7jp4uoEWjhnz+WDf+0r21yoyIi6l0oXnuuefIyckBYPfu3fz973/n7bffJjw8nBEjRlR5QBGR6nAmv4j/+/hn/vb1DkqcBrd1CGXp6B50DA80O5qIXIZKTzmlpqbStWtXAKZMmcLIkSP505/+RMeOHenZs2eVBxQRqWq/HMpm1NwU0nMK8XS38vyAq/nT9S20V0bEhVW60LRu3Zr33nuPrl278vXXX7N7924AsrOzCQ8Pr/KAIiJVxek0eG/tft787y4cToPWjX1IGhZPTLMAs6OJyBWqdKF54403SEhIYMaMGcyYMYPAwEAApk6dyl133VXV+UREqsSps3bGzU8jefdJAAbGNeOVIR3w9dJnI0Tqgsu6OGVxcTFFRUVlLkyZnJzMDTfcgJdX7bxQmy5OKVJ/bdx/itGfppBps+PlbmXywBjuuS5CU0wiLqBaLk55joeHBx4eZc/NcOONN17OU4mIVBuH0+Cd1Xt5e+VunAZc1cSHmfd1JipUf9SI1DUVKjTdu3cnJiaGf/3rX/Tp0+eif9WsWrWqysKJiFyuk7l2xn6Wyvq9WQAM6dyclwfF4qMpJpE6qUI/2b169aJly5YAXHvttVX24mvXrmXKlCn873//o2XLlkyZMoXbbrvtgmN9fX3Jy8srs+zMmTMEBOhgPhEp6/u9WYz+NJWss3YaeLjx0qAYEq6NMDuWiFSjyzqGpips3ryZPn368Oqrr9KzZ09mz57NW2+9xbZt22jTpk2ZsQ6HA3d3d5KTk2nfvn3p8qZNm1Z4DlzH0IjUfQ6nwbRVe5jx3R4MA9qF+DJzWGfahviZHU1ELlNF379NKzQABw8epFWrVgAUFRXRuHFjXnzxRcaNG1dmXHZ2NsHBwRw/fpzQ0NDLei0VGpG6LdNWyJhPU/hhfzYA914XwaTbY2jg6WZyMhG5EtV6UHBVOVdmADw9PYmMjMRms5037tyZiRs1alRT0UTEhazdfZKxn6VyKq8IH083XhnSgUGdmpsdS0RqUKUvfVBdCgsL2blzJ7Gxsefdl5OTg5ubG8OHD6d58+bceOONbNiw4aLPZ7fbsdlsZW4iUreUOJy8vnwn93/4I6fyiogO8+erUT1UZkTqoUoXmoKCAoqKikq/PnHiBDNnzuSrr766oiDvvvsugYGB9O/f/7z7wsLCSExM5KGHHmLRokWEhITQr18/jh49Wu7zTZkyhYCAgNJbRIQOCBSpS47nFDD0/R94Z80+AO67vgWLHu9GZBNfk5OJiBkqfQzN+PHjcXd359VXX6WkpITY2FicTieHDh1i0qRJTJw4sdIh0tPTiYuLY9KkSYwcOfKS4wsLCwkPD+fll1/mscceu+AYu92O3W4v/dpmsxEREaFjaETqgO92ZvLk/DRO5xfj6+XOq3d2YEDHZmbHEpFqUNFjaCq9h2bhwoXcc889AMyaNYumTZuya9cu5syZwz//+c9KBy0uLiYhIYEuXbpU+Grd3t7eREZGkp6eXu4YLy8v/P39y9xExLUVO5y8smwHibN+5nR+MbHN/fl6dA+VGRGp/EHBZ8+e5ezZszidTqZOncqMGTOwWCzExsaed56YS3E6nSQmJnL69GmWLFlS7kewbTZbmUKSl5fHnj17GDNmTGXji4iLOno6n1HzUkg5fAaAB7q14pnbovBy16eYROQyCs3AgQMZOnQowcHBNG7cmL59+wKwYsUKunTpUuHnOVdm1qxZw7fffktJSQmZmZkAuLm5ER8fz8svv8wDDzxAnz596N69O/fccw9+fn48//zzBAcHM3jw4MrGFxEX9N9tGYxfkIatsAQ/b3feuKsj/WLDzI4lIrVIpQvNu+++y9tvv01OTg5jx44tXZ6cnMzkyZMr/Dzz589n9uzZAMTExJS578SJE1itVs4d3rNkyRJeeOEFEhMTyczMpHfv3qxcuZKGDRtWNr6IuJCiEidTvtnBRxsOAhAXEUjS0HgiGulnX0TKMvXEejVJJ9YTcS2HT+Uzct4mNh/99TxUD/VozV/7ReHpXmvONiEiNaBKT6y3dOlSmjRpwvXXX8+6desuOrZnz56VSyoi8jvLthznqYWbybWXENDAg7cS4vjj1SFmxxKRWqxCe2giIiKIiopixYoVWK3l/3VksVhwOBxVGrCqaA+NSO1XWOzg71/v4JMfDgFwTcsgpg+Np3lgA5OTiYhZqnQPzcaNG0uPVzl79mzVJBQR+Y0DWXmMmLOJ7cd/Pav3ozdexZM3t8PDTVNMInJpFSo0zZr9v3M86EBcEalqX6YeY+IXW8grctDIx5Opd8fRu31Ts2OJiAu5rItTLl26lE2bNpVeNPK33nrrrSsOJSL1Q2Gxg8lfbWPej0cA6NK6EdPvjSc0wNvkZCLiaipdaB555BE++OADYmNjadSoUZmT4ZV3YjwRkd/be+IsI+duYmdGLhYLjPxDG8b0bYu7pphE5DJUutAsWLCAL774gkGDBlVHHhGpBz7/5SjPLd5KQbGDxr6e/OOeeHq0bWx2LBFxYZUuNO3atdOVq0XksuQXlfDCl9tY+MtRALpdFcw/7ulEU39NMYnIlan0vt1nnnmGV155pTqyiEgdtjszl0FJG1j4y1GsFhj7x3Z88uD1KjMiUiUqtIemW7duZY6PSU1NJSoqCh8fn/PG/vLLL1WXTkRcnmEYLPj5KC8s2UphsZOmfl5MuzeerlcFmx1NROqQChWaW265pUyhueWWW6otkIjUHXn2Ep5dtIXFqekA9GzbmLfv6URjXy+Tk4lIXaNrOYlItdiebmPk3E3sz8rDzWph3E3teOzGq7Ba9WlIEam4Kj1T8FVXXcVPP/1Eo0aNqiygiNRNhmEw98fDTP5qO0UlTkL9vZkxLJ7rWun3h4hUnwoVmgMHDtTaazSJSO2RW1jM019s4evNxwHoE9WUNxPiaOTjaXIyEanrKvyxbZ00T0QuZuuxHEbM3cShU/m4Wy38tV97HuoRqSkmEakRFS40gwcPxtPz0n9lrVq16ooCiYhrMQyDj/93iL9/vYMih5PmgQ2YMSyezi2CzI4mIvVIhQtNx44dL/gxbRGpv3IKinlq4WaWb8sA4KarQ3jjro4ENtQUk4jUrAoVGovFwosvvkiTJk2qO4+IuIjUI2cYOXcTR08X4OFm4Zlbo/lL91aanhYRU1So0NSTT3aLSAUYhsG/1x/gteU7KXYYRDRqQNLQzsRFBJodTUTqsQoVmgceeIAGDRpUdxYRqeXO5BcxfkEaK3ecAODW2FBevbMjAQ08TE4mIvVdhQrNhx9+WN05RKSW++VQNqPmppCeU4inm5XnB0TzpxtaaopJRGqFSl9tW0TqF6fT4F/r9vPGt7twOA1aBTckaVhnYpsHmB1NRKSUCo2IlOvUWTtPLkhjza6TANwe14xXBsfi560pJhGpXVRoROSCNu4/xehPU8i02fFyt/LiwBjuvS5CU0wiUiup0IhIGU6nwTtr9jJ1xW6cBkQ28WHmsM5Eh+miriJSe6nQiEipk7l2xs1PZd2eLACGxDfn5Tti8fHSrwoRqd30W0pEAPh+bxZjPkvlZK4dbw8rLw+KJeHaCLNjiYhUiAqNSD3ncBpMX7WH6d/twTCgXYgvM4d1pm2In9nRREQqTIVGpB47YStk9Kcp/LA/G4C7rw1n8sBYGni6mZxMRKRyVGhE6qm1u08y9rNUTuUV0dDTjb8PjmVwfLjZsURELosKjUg9U+Jw8vbK3byzZh+GAVGhfsy8rzNXNfE1O5qIyGVToRGpR47nFDB6Xgo/HTwNwLDrW/DCgKvx9tAUk4i4NhUakXpi9c4TjJufyun8Yny93JkypAO3xzUzO5aISJVQoRGp44odTt78dhfvrd0PQGxzf5KGdqZVYx+Tk4mIVB0VGpE67OjpfEbNSyHl8BkAHujWimdui8LLXVNMIlK3qNCI1FH/3ZbBhIWbySkoxs/bnTfu6ki/2DCzY4mIVAsVGpE6pqjEyavf7OTDDQcAiAsPIGlYZyIaNTQ5mYhI9VGhEalDjmTnM3LuJtKO5gDwYI/WPNUvCk93q8nJRESqlwqNSB3xzZbj/PXzzeQWlhDQwIM3E+K46eoQs2OJiNQIFRoRF1dY7OCVZTv4+H+HAOjcIpAZwzrTPLCByclERGqOCo2ICzuQlcfIuZvYlm4D4JEbIxl/c3s83DTFJCL1iwqNiItakpbOxC+2cNZeQlBDD6be3Yk/RDU1O5aIiClUaERcTGGxg8lfbWfej4cB6NKqEdOGdiIsQFNMIlJ/qdCIuJC9J84ycu4mdmbkYrHAiN5teOKPbXHXFJOI1HOm/hZcu3Ytt956K4GBgcTFxbFs2bJyx+7du5fevXsTFBTEgAEDOHnyZA0mFTHfF5uOMjBpPTszcmns68nHiV0Yf0t7lRkREUwsNJs3b2bIkCHceeedbNy4kf79+zN48GD27t173tji4mL69u1LmzZtWLt2LVarlYEDB5qQWqTm5ReVMGFBGuPmp5Ff5KBrZDDLRvekZ9smZkcTEak1LIZhGGa9+MGDB2nVqhUARUVFNG7cmBdffJFx48aVGbdo0SLuv/9+srKy8PLyIj09nebNm5OamkpcXFyFXstmsxEQEEBOTg7+/v5V/a2IVIvdmbmMmLOJPSfOYrHAmL5tGdWnLW5Wi9nRRERqREXfv009huZcmQHw9PQkMjISm8123rg1a9bQvXt3vLy8AGjWrBnR0dGsXr26woVGxJUYhsGCX47ywpdbKSx20sTPi2n3dqLbVY3NjiYiUivVmoOCCwsL2blzJ7Gxsefdl5GRQWhoaJllYWFhZGZmlvt8drsdu91e+vWFipJIbZRnL+G5xVtZlHIMgJ5tG/P2PZ1o7OtlcjIRkdqr1hxN+O677xIYGEj//v3Pu+/06dP4+fmVWebn50d2dna5zzdlyhQCAgJKbxEREVWeWaSq7Thu4/YZ61mUcgyrBSbc0p7Zf+miMiMicgm1otCkp6fzyiuv8Nxzz9Ggwfnn0ggODiY3N7fMMpvNRnBwcLnP+cwzz5CTk1N6O3LkSJXnFqkqhmEwZ+MhBs3cwP6sPEL9vfn04a6M+EMbrDpeRkTkkkyfciouLiYhIYEuXbowYsSIC44JDQ1l+/btZZalp6efNw31W15eXqXH3IjUZrmFxTzzxRaWbj4OQO/2TZh6dyca+XianExExHWYWmicTieJiYmcPn2aJUuWYLFc+C/Rvn378v7772O32/Hy8uLYsWPs2rWLPn361HBikaq19VgOI+du4uCpfNysFv56S3v+r2ek9sqIiFSSaVNO58rMmjVrWLhwISUlJWRmZpKZmUlWVhYRERHMmjULgH79+hESEsLjjz/Oli1bePTRR+nRo8cFDyAWcQWGYTD7+4MMeed7Dp7Kp3lgA+Y/0pVHbrxKZUZE5DKYtodm/vz5zJ49G4CYmJgy9504cQKr1cq5U+S4u7uzYsUKHnzwQXr16kX37t1ZtGhRjWcWqQo5BcU8/flmvtmaAcAfo0N4M6EjgQ01xSQicrlMPbFeTdKJ9aQ2SDtyhpHzNnEkuwAPNwtP3xpNYvdW5U63iojUdy5xYj2R+sIwDD7ccJBXv9lBscMgolEDkoZ2Ji4i0OxoIiJ1ggqNSDU7k1/E+AWbWbnj1xNB3hobyqt3diSggYfJyURE6g4VGpFq9Muh04yel8KxMwV4ull5bkA0w29oqSkmEZEqpkIjUg2cToP31+3njW93UeI0aBnckJnDOhPbPMDsaCIidZIKjUgVy84r4sn5qazedRKAAR3DmDKkA37emmISEakuKjQiVejHA9mMnpdChq0QT3crL94ew9AuEZpiEhGpZio0IlXA6TR4Z81epq7YjdOAyCY+zBzWmegwnSJARKQmqNCIXKGTuXbGzU9l3Z4sAIbEN+flO2Lx8dKPl4hITdFvXJEr8P2+LMZ8msrJXDveHlZeGhRLwjXhmmISEalhKjQil8HhNJjx3R6mr9qD04C2TX2ZeV9n2oX4mR1NRKReUqERqaQTtkLGfJrK//afAuDua8OZPDCWBp5uJicTEam/VGhEKmHdnpOM/SyVrLNFNPR04293xDKkc7jZsURE6j0VGpEKKHE4+cfKPcxcsxfDgKhQP5KGdaZNU1+zo4mICCo0Ipd0PKeAMfNS+fFgNgDDrm/BCwOuxttDU0wiIrWFCo3IRazedYJxn6VyOr8YXy93XhnSgYFxzcyOJSIiv6NCI3IBxQ4nb/53F+8l7wcgppk/ScM607qxj8nJRETkQlRoRH7n2JkCRs3dxKbDZwD4c9eWPHNbtKaYRERqMRUakd9YsT2T8QvSyCkoxs/bndfv7MitHcLMjiUiIpegQiMCFJU4eW35Tv69/gAAceEBzBjamRbBDU1OJiIiFaFCI/Xekex8Rs7dRNrRHAASu7fm6Vuj8HS3mpxMREQqSoVG6rXlW48zYeFmcgtLCGjgwZsJcdx0dYjZsUREpJJUaKRespc4eOXrHcz+3yEA4lsEMmNoPOFBmmISEXFFKjRS7xzMymPkvE1sPWYD4JEbIxl/c3s83DTFJCLiqlRopF75Ki2dZ77Ywll7CUENPZh6dyf+ENXU7FgiInKFVGikXigsdvDS0u3M3XgYgOtaBTF9aDxhAQ1MTiYiIlVBhUbqvH0nzzJiziZ2ZuRiscCI3m144o9tcdcUk4hInaFCI3XaopSjPLtoK/lFDoJ9PPnHvZ3o2baJ2bFERKSKqdBInVRQ5GDSkq3M//koAF0jg5l2byea+nubnExERKqDCo3UOXsycxkxdxO7M89iscDoPm0Z3bctblaL2dFERKSaqNBInbLg5yM8/+VWCoudNPHzYto9nejWprHZsUREpJqp0EidkGcv4fkvt/LFpmMA9GzbmKl3d6KJn5fJyUREpCao0IjL23Hcxsi5m9h3Mg+rBcbd1I7He7fBqikmEZF6Q4VGXJZhGMz78QiTv9qGvcRJqL8304fG06V1I7OjiYhIDVOhEZeUW1jMxEVb+SotHYDe7Zsw9e5ONPLxNDmZiIiYQYVGXM7WYzmMnLuJg6fycbNa+Ost7fm/npGaYhIRqcdUaMRlGIbBf344xMtLd1DkcNIswJsZwzpzTcsgs6OJiIjJVGjEJdgKi3n6880s25IBwB+jQ3gzoSOBDTXFJCIiKjTiAtKOnGHkvE0cyS7Aw83CU/2ieLBHaywWTTGJiMivVGik1jIMg482HGTKNzsodhiEBzUgaVhnOkUEmh1NRERqGRUaqZXO5BcxYeFmVmzPBKBfTCiv3dWRgAYeJicTEZHaSIVGap1Nh08zam4Kx84U4Olm5dn+0dzftaWmmEREpFwqNFJrOJ0GH6zfz+vLd1HiNGgZ3JCZwzoT2zzA7GgiIlLLqdBIrZCdV8T4BWl8t/MEAAM6hjFlSAf8vDXFJCIil6ZCI6b76WA2o+elcDynEE93Ky/eHsPQLhGaYhIRkQqzmvni2dnZJCUlERMTQ3x8/EXH+vr6YrFYytxycnJqKKlUB6fTYObqvdz7rx84nlNIZGMfvhzRnWHXt1CZERGRSjF1D82BAwdITk6+5DiHw0FeXh7Jycm0b9++dLm/v391xpNqlHXWztjPUlm3JwuAwfHN+dsdsfh4aaehiIhUnql7aK655hoWLFjA3XfffdFx5/bEtGvXjpCQkNKb/op3Tf/bd4rbpq1j3Z4svD2svH5nR6beHacyIyIil80l3kHOFZpGjRqZnESuhMNpkPTdXqat2o3TgLZNfZl5X2fahfiZHU1ERFycqXtoKionJwc3NzeGDx9O8+bNufHGG9mwYcNFH2O327HZbGVuYp4TuYUM//dG3l75a5lJuCacL0d2V5kREZEq4RKFJiwsjMTERB566CEWLVpESEgI/fr14+jRo+U+ZsqUKQQEBJTeIiIiajCx/Nb6PVncNm0d3+87RUNPN6beHccbCXE09HSJHYQiIuICLIZhGGaHmDx5MosXLyYlJaVC4wsLCwkPD+fll1/mscceu+AYu92O3W4v/dpmsxEREUFOTo4OJq4hJQ4n01btIWn1XgwDokL9SBrWmTZNfc2OJiIiLsJmsxEQEHDJ92+X/BPZ29ubyMhI0tPTyx3j5eWFl5dXDaaS38rIKWT0pyn8eCAbgKFdWjDp9qvx9nAzOZmIiNRFLjHl9PvjX/Ly8tizZw9RUVEmJZKLWbPrBLdNX8ePB7Lx8XRj+tB4pgzpoDIjIiLVxtRCc/r0aTIzMzl79izFxcVkZmaSlZVFVlYWERERzJo1C4A+ffowZswYvv/+e7Zs2cJ9991HcHAwgwcPNjO+/E6xw8mr3+zkgY9+IjuviJhm/iwd3ZOBcc3MjiYiInWcqVNOQ4YMYc2aNaVfh4aG0qpVK3788UesVivnDu9ZsmQJL7zwAomJiWRmZtK7d29WrlxJw4YNTUouv5d+poBR81L45dBpAO7v2pKJt0Vrr4yIiNSIWnFQcE2o6EFFUnkrt2cyfmEaZ/KL8fNy57W7OnJbhzCzY4mISB1Qpw8KltqhqMTJ68t38sH6AwB0DA8gaWhnWgRrz5mIiNQsFRq5LEey8xk5L4W0I2cASOzemqdvjcLT3SWOMxcRkTpGhUYqbfnWDCYsTCO3sAR/b3feTIjj5phQs2OJiEg9pkIjFWYvcTBl2U5mfX8QgPgWgcwYGk94kKaYRETEXCo0UiGHTuUxcm4KW479eqHQR3pFMv6W9ni4aYpJRETMp0Ijl7R0czpPf76Fs/YSghp68NbdcfSJCjE7loiISCkVGilXYbGDl5duZ87GwwBc1yqI6UPjCQtoYHIyERGRslRo5IL2nzzLiLkp7Dhuw2KBx3tfxdg/tsNdU0wiIlILqdDIeRanHGPioi3kFzkI9vHk7Xs60atdE7NjiYiIlEuFRkoVFDl4cck2Pvv5CAA3RDZi2r3xhPh7m5xMRETk4lRoBIC9J3IZMSeFXZm5WCwwuk9bRvdti5vVYnY0ERGRS1KhERb+cpTnF2+loNhBEz8vpt3TiW5tGpsdS0REpMJUaOqx/KISnlu8lS82HQOgR5vGvH1PJ5r4eZmcTEREpHJUaOqpnRk2RszZxL6TeVgtMO6mdjzeuw1WTTGJiIgLUqGpZwzD4LOfjjBpyTbsJU5C/L2Yfm8810cGmx1NRETksqnQ1CNn7SVM/GILS9LSAbixXROm3h1HsK+mmERExLWp0NQT29JzGDk3hQNZebhZLUy4pT0P94zUFJOIiNQJKjR1nGEY/GfjYV5eup2iEifNAryZMSyea1o2MjuaiIhIlVGhqcNshcU88/kWvt5yHIA/RjfljbviCPLxNDmZiIhI1VKhqaM2Hz3DyLkpHM7Ox8PNwlP9oniwR2ssFk0xiYhI3aNCU8cYhsGs7w/yyrIdFDsMwoMakDSsM50iAs2OJiIiUm1UaOqQnPxiJixM47/bMwHoFxPKa3d1JKCBh8nJREREqpcKTR2Rcvg0I+emcOxMAZ5uVp7tH839XVtqiklEROoFFRoXZxgGH6w7wGvLd1LiNGgZ3JCkoZ3pEB5gdjQREZEao0Ljwk7nFTF+QRqrdp4AoH/HMF4d0gE/b00xiYhI/aJC46J+PpjNqHkpHM8pxNPdyqTbr2ZYlxaaYhIRkXpJhcbFOJ0G/1y7j7f+uxuH0yCysQ9JwzpzdTN/s6OJiIiYRoXGhZw6a2fc/DSSd58E4I5Ozfjb4A74eum/UURE6je9E7qIH/afYsynKWTa7Hh7WHlpYCwJ14ZriklERAQVmlrP4TSYuXov/1i5G6cBbZr68s59nWkX4md2NBERkVpDhaYWO5FbyNjPUtmw9xQACdeEM3lQDA099d8mIiLyW3pnrKU27M1izKepZJ2108DDjb8PjmVI53CzY4mIiNRKKjS1jMNpMG3lbmas3othQFSoH0nDOtOmqa/Z0URERGotFZpaJNNWyOh5KWw8kA3A0C4RTLo9Bm8PN5OTiYiI1G4qNLVE8u6TjP0sley8Inw83XhlSAcGdWpudiwRERGXoEJjshKHk7dW7ObdNfsAuDrMn5n3daZ1Yx+Tk4mIiLgOFRoTpZ8pYPS8FH4+dBqA4Te05Nn+0ZpiEhERqSQVGpN8tzOTcfPTOJNfjJ+XO6/d1ZHbOoSZHUtERMQlqdDUsGKHk9eX7+T9dQcA6BgeQNLQzrQIbmhyMhEREdelQlODjmTnM2peCqlHzgCQ2L01T93aHi93TTGJiIhcCRWaGvLttgwmLEjDVliCv7c7bybEcXNMqNmxRERE6gQVmmpmL3Hw6jc7+WjDQQDiWwQyY2g84UGaYhIREakqKjTV6NCpPEbOTWHLsRwAHu4VyYRb2uPhZjU5mYiISN2iQlNNvt58nKc/30yuvYSghh68dXccfaJCzI4lIiJSJ5m6qyA7O5ukpCRiYmKIj4+/6Ni9e/fSu3dvgoKCGDBgACdPnqyhlJVTWOzgucVbGDF3E7n2Eq5rFcSyMT1VZkRERKqRqYXmwIEDJCcnX3JccXExffv2pU2bNqxduxar1crAgQNrIGHlHMjKY8g73/OfHw4D8Hjvq5j3fzcQFtDA5GQiIiJ1m8UwDMPsEJMnT2bx4sWkpKRc8P5FixZx//33k5WVhZeXF+np6TRv3pzU1FTi4uIq9Bo2m42AgABycnLw9/evyvgAfJl6jIlfbCGvyEGwjydT7+nEje2aVPnriIiI1CcVff92iWNo1qxZQ/fu3fHy8gKgWbNmREdHs3r16goXmupSWOzgxSXb+PSnIwDcENmIaffGE+LvbWouERGR+sQlCk1GRgahoWXP2RIWFkZmZma5j7Hb7djt9tKvbTZblec6k1/EPe/9wK7MXCwWGNWnLWP6tsXNaqny1xIREZHyucTnh0+fPo2fn1+ZZX5+fmRnZ5f7mClTphAQEFB6i4iIqPJcAQ08iGziQ2NfL+Y8eD3jbmqnMiMiImIClyg0wcHB5Obmlllms9kIDg4u9zHPPPMMOTk5pbcjR45UeS6LxcKrd3Zk2ZgedGvTuMqfX0RERCrGJaacQkND2b59e5ll6enp501D/ZaXl1fpMTfVKaCBB+BR7a8jIiIi5XOJPTR9+/Zlw4YNpcfEHDt2jF27dtGnTx+Tk4mIiEhtYGqhOX36NJmZmZw9e5bi4mIyMzPJysoiKyuLiIgIZs2aBUC/fv0ICQnh8ccfZ8uWLTz66KP06NGD2NhYM+OLiIhILWFqoRkyZAihoaG8+eabbNu2jdDQUK677joMw8BqtXLuFDnu7u6sWLGC/fv306tXLwzDYNGiRWZGFxERkVqkVpxYryZU94n1REREpOpV9P3bJY6hEREREbkYFRoRERFxeSo0IiIi4vJUaERERMTlqdCIiIiIy1OhEREREZenQiMiIiIuT4VGREREXJ4KjYiIiLg8l7jadlU4d0Jkm81mchIRERGpqHPv25e6sEG9KTS5ubkAREREmJxEREREKis3N5eAgIBy768313JyOp2kp6fj5+eHxWKpsue12WxERERw5MgRXSPqErSuKkfrq+K0ripO66ritK4qrjrXlWEY5Obm0qxZM6zW8o+UqTd7aKxWK+Hh4dX2/P7+/trgK0jrqnK0vipO66ritK4qTuuq4qprXV1sz8w5OihYREREXJ4KjYiIiLg8FZor5OXlxaRJk/Dy8jI7Sq2ndVU5Wl8Vp3VVcVpXFad1VXG1YV3Vm4OCRUREpO7SHhoRERFxeSo0IiIi4vJUaERERMTlqdBUgMPhYMyYMYSGhtKxY0eWLFlS7ti9e/fSu3dvgoKCGDBgACdPnqzBpOarzLry9fXFYrGUueXk5NRgWnNlZ2eTlJRETEwM8fHxFx1b37eryqyr+r5dAaxdu5Zbb72VwMBA4uLiWLZsWblj6/u2VZl1Vd+3rZUrV9KnTx8CAgKIjo5m7ty55Y41Y7tSoamA559/nq+++oolS5YwYsQIEhIS2Lp163njiouL6du3L23atGHt2rVYrVYGDhxoQmLzVHRdORwO8vLySE5OJiMjo/RWn05edeDAAZKTky85TttVxdeVtivYvHkzQ4YM4c4772Tjxo3079+fwYMHs3fv3vPG1vdtqzLrqr5vW2fOnOGBBx4gISGBDRs2MGTIEIYPH87GjRvPG2vadmXIRRUVFRmNGzc25syZU7rs5ptvNp544onzxn7xxReGr6+vUVhYaBiGYRw7dswAjNTU1BrLa6bKrKtTp04ZgHH8+PGajFgrvfjii0anTp3Kvb++b1e/dal1pe3qVwcOHCj9t91uN/z8/Iy33nrrvHHatiq+rrRtGUZBQUHpv51OpxEREWFMnjz5vHFmbVfaQ3MJW7duJSsriz59+pQu69u3L6tXrz5v7Jo1a+jevXvp5/CbNWtGdHT0BcfWRZVZV+d20zZq1KjG8rmq+r5dVYa2q1+1atWq9N+enp5ERkaWXrH4t7RtVXxdadsCb2/vMl+7u7vj6+t73jiztisVmkvIyMjAYrHQtGnT0mVhYWFkZmZecGxoaGiZZeWNrYsqs65ycnJwc3Nj+PDhNG/enBtvvJENGzbUZFyXUd+3q8rQdnW+wsJCdu7cSWxs7Hn3adsq62LrStvW/5ORkcHYsWOxWCz86U9/uuD9ZmxXKjSXcPr0aXx8fMpc4dPPz4/s7OwLjvXz8yuzrLyxdVFl1lVYWBiJiYk89NBDLFq0iJCQEPr168fRo0drMrJLqO/bVWVouzrfu+++S2BgIP379z/vPm1bZV1sXWnb+tWTTz5JWFgYs2fPZtWqVWX+gD3HrO1KheYSgoODycvLw+l0li6z2WwEBwdfcGxubm6ZZeWNrYsqs65CQkL417/+xU033USXLl34+OOP8fLy4quvvqrJyC6hvm9XlaHtqqz09HReeeUVnnvuORo0aHDe/dq2/p9LrSttW7+aMGECycnJPProo3Tt2pU1a9acN8as7UqF5hJCQ0MxDKPMrrL09PTzdqedG3v8+PEyy8obWxdVZl39nre3N5GRkaSnp1dnRJdU37erK1Gft6vi4mISEhLo0qULI0aMuOAYbVu/qsi6+r36um2FhobSq1cvpkyZQkJCApMmTbrgGDO2KxWaS4iJiSEkJIRVq1aVLvvuu+/o27fveWP79u3Lhg0bsNvtABw7doxdu3aVOUi2LqvMuvr9QXd5eXns2bOHqKioas/paur7dlUZ2q5+5XQ6SUxM5PTp03z88cdYLJYLjtO2VfF1Vd+3rZKSEgoLC8ssCwgIoKCg4Lyxpm1X1foZqjri+eefN1q1amVs3LjRePfddw0vLy9j27ZtxsmTJ43w8HDjo48+MgzDMIqLi43IyEgjMTHR2Lx5szFgwACjR48e5oavYRVdV9dcc40xevRoY8OGDcbmzZuNQYMGGVdddZWRl5dn7jdQg7Kzs42MjAxj/PjxRkxMjJGRkWGcPHlS29UFVHRdabsyDIfDYfz5z382wsPDjW3bthkZGRmlN21bZVVmXdX3bevf//630alTJ2PBggXG9u3bjZkzZxqBgYHG66+/Xmu2KxWaCnA4HMYTTzxhhISEGLGxscaSJUsMwzCMEydOGC1atDA+/PDD0rH79u0zevfubQQGBhr9+/c3Tp48aVZsU1R0XR07dsx48MEHjfbt2xuBgYHGHXfcUeZ8EPVB7969DaDMrVWrVtquLqCi60rblWHMmzfvvHV17qZtq6zKrCttW4Yxffp0o2fPnoafn58RGRlpvPrqq4bT6aw125XFMAyjevcBiYiIiFQvHUMjIiIiLk+FRkRERFyeCo2IiIi4PBUaERERcXkqNCIiIuLyVGhERETE5anQiIiIiMtToRGRavWXv/wFi8VywVvr1q0BmDx5Ml27di33OY4dO0Z4eDhLliyp1Gs//fTTdOvWrVKPufPOO8+72vL06dNp3bo1xcXFlXouEak5KjQiUq2mTZtGRkYGGRkZPPbYY3Tr1q30659++qlCz9GwYUPat29PkyZNKvXaLVq0IDo6ulKPeemll1i+fDk///wzAEVFRbz55ptMmjQJDw+PSj2XiNQcd7MDiEjd5u/vj7+/PwA+Pj54enoSEhJSqecICgoqc9HTinr88ccr/ZiYmBiGDRvGSy+9xJIlS/jkk09o0KABw4cPr/RziUjN0R4aEak1Fi9ezPXXX09QUBAPP/wwTqcT+PXKxhaLheTkZAAKCwtJTEwkODiYFi1aMG7cOPLy8s57vgkTJvCHP/yh9Ov//ve/dOzYET8/P3r06MGaNWsumOPFF19k+fLl/Pjjj7z++utMnjwZNze3qv+GRaTKqNCISK2QlpbGxx9/zMyZM/nwww/54IMPWLp06QXH/uMf/2D58uV8/vnnLFq0CHd390sWjqKiIu666y769OnDTz/9xIMPPkh2dvYFx1511VUkJiYyZMgQPD09ufvuu6/4+xOR6qUpJxGpFcLDw1m4cCFWq5Vrr72W2NhYNm3axMCBA88be+bMGYKDg+nZsydubm5cc801l3z+oqIi8vPz6datG1FRUURFRV10/M0338x7771HYmIiVqv+9hOp7fRTKiK1go+PT5ni0KhRI3Jyci44duzYsQQGBhITE8P7779foU8f+fr6kpSUxIgRI/jzn//Mrl27Ljr+tdde4/bbb+e9997j7NmzlftmRKTGqdCISK1ksVjKvS8kJIR169YxY8YMPv74Y2JiYsjIyLjkcz766KPs2rWLFi1acMMNN/DGG29ccNzixYs5fPgw8+fPJyQkhLfffvuyvw8RqRkqNCLism666SaSk5MxDIMFCxZU6DGNGjXi5ZdfZvr06bz66qvn3e90Onn++ecZP3483t7eTJo0iTfffJNTp05VdXwRqUIqNCLicu68806mT5/Ojh07+OKLLzh48CAtWrS46GPWrFnD7bffzurVq9m8eTMLFy684GPmzZvHiRMneOyxxwAYMmQIrVq1YsqUKdXyvYhI1VChERGXM2HCBJYtW0a3bt144okneOGFFxg0aNBFH3PDDTfQqVMnRowYQffu3bHZbMyZM6fMmJKSEiZNmsRf//pXGjZsCPw69TV58mRmzpzJ0aNHq+17EpErYzEMwzA7hIiIiMiV0B4aERERcXkqNCIiIuLyVGhERETE5anQiIiIiMtToRERERGXp0IjIiIiLk+FRkRERFyeCo2IiIi4PBUaERERcXkqNCIiIuLyVGhERETE5anQiIiIiMv7/wCfUKLrfBgdxgAAAABJRU5ErkJggg==",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "\n",
-    "plt.plot([1,2,3,4])\n",
-    "plt.title('Plot Title')\n",
-    "plt.xlabel('This is X')\n",
-    "plt.ylabel('This is Y')\n",
-    "plt.show()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d9f7dbbb-1ab6-4352-837d-b6a8d7f968c6",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "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.10.6"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/r-checkpoint.ipynb b/examples/.ipynb_checkpoints/r-checkpoint.ipynb
deleted file mode 100644
index 0ea5c90dd9ee0815fc2abcfeee0bc8c7c2faf09c..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/r-checkpoint.ipynb
+++ /dev/null
@@ -1,800 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "28cf491b-ac70-48c4-8c48-9ef8af164964",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "R version 4.3.2 (2023-10-31)\n",
-       "Platform: x86_64-conda-linux-gnu (64-bit)\n",
-       "Running under: Debian GNU/Linux 11 (bullseye)\n",
-       "\n",
-       "Matrix products: default\n",
-       "BLAS/LAPACK: /opt/conda/lib/libopenblasp-r0.3.24.so;  LAPACK version 3.11.0\n",
-       "\n",
-       "locale:\n",
-       " [1] LC_CTYPE=ja_JP.UTF-8       LC_NUMERIC=C              \n",
-       " [3] LC_TIME=ja_JP.UTF-8        LC_COLLATE=ja_JP.UTF-8    \n",
-       " [5] LC_MONETARY=ja_JP.UTF-8    LC_MESSAGES=ja_JP.UTF-8   \n",
-       " [7] LC_PAPER=ja_JP.UTF-8       LC_NAME=C                 \n",
-       " [9] LC_ADDRESS=C               LC_TELEPHONE=C            \n",
-       "[11] LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C       \n",
-       "\n",
-       "time zone: Etc/UTC\n",
-       "tzcode source: system (glibc)\n",
-       "\n",
-       "attached base packages:\n",
-       "[1] stats     graphics  grDevices utils     datasets  methods   base     \n",
-       "\n",
-       "loaded via a namespace (and not attached):\n",
-       " [1] digest_0.6.33   IRdisplay_1.1   utf8_1.2.4      base64enc_0.1-3\n",
-       " [5] fastmap_1.1.1   glue_1.6.2      htmltools_0.5.7 repr_1.1.6     \n",
-       " [9] lifecycle_1.0.3 cli_3.6.1       fansi_1.0.5     vctrs_0.6.4    \n",
-       "[13] pbdZMQ_0.3-10   compiler_4.3.2  tools_4.3.2     evaluate_0.23  \n",
-       "[17] pillar_1.9.0    crayon_1.5.2    rlang_1.1.2     jsonlite_1.8.7 \n",
-       "[21] IRkernel_1.3.2  uuid_1.1-1     "
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "sessionInfo()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "38776ffe-39a1-48db-b578-bde9b76a780b",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[1] \"Hello world\"\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(\"Hello world\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "ace8562d-0ae5-47d8-b90e-2807cfba5f83",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      " 要求されたパッケージ ggplot2 をロード中です \n",
-      "\n",
-      "\n",
-      " 次のパッケージを付け加えます: ‘plotly’ \n",
-      "\n",
-      "\n",
-      " 以下のオブジェクトは ‘package:ggplot2’ からマスクされています:\n",
-      "\n",
-      "    last_plot\n",
-      "\n",
-      "\n",
-      " 以下のオブジェクトは ‘package:stats’ からマスクされています:\n",
-      "\n",
-      "    filter\n",
-      "\n",
-      "\n",
-      " 以下のオブジェクトは ‘package:graphics’ からマスクされています:\n",
-      "\n",
-      "    layout\n",
-      "\n",
-      "\n"
-     ]
-    },
-    {
-     "data": {
-      "application/vnd.plotly.v1+json": {
-       "attrs": {
-        "520455f19fe": {
-         "alpha_stroke": 1,
-         "color": {},
-         "sizes": [
-          10,
-          100
-         ],
-         "spans": [
-          1,
-          20
-         ],
-         "type": "box",
-         "x": {}
-        }
-       },
-       "base_url": "https://plot.ly",
-       "config": {
-        "modeBarButtonsToAdd": [
-         "hoverclosest",
-         "hovercompare"
-        ],
-        "showSendToCloud": false
-       },
-       "cur_data": "520455f19fe",
-       "data": [
-        {
-         "fillcolor": "rgba(102,194,165,0.5)",
-         "line": {
-          "color": "rgba(102,194,165,1)"
-         },
-         "marker": {
-          "color": "rgba(102,194,165,1)",
-          "line": {
-           "color": "rgba(102,194,165,1)"
-          }
-         },
-         "name": "IL",
-         "orientation": "h",
-         "type": "box",
-         "x": [
-          19.6314,
-          11.2433,
-          17.0338,
-          17.279,
-          14.476,
-          18.9046,
-          11.9174,
-          16.1971,
-          14.1076,
-          41.2958,
-          13.5672,
-          15.1109,
-          13.683,
-          15.3875,
-          25.175,
-          28.0181,
-          16.9858,
-          14.5979,
-          32.8359,
-          16.196,
-          16.8685,
-          42.7689,
-          16.8399,
-          16.9356,
-          20.2752,
-          13.603,
-          17.8274,
-          14.7057,
-          15.5322,
-          11.3675,
-          13.0495,
-          18.3779,
-          14.0468,
-          20.6605,
-          14.3184,
-          13.7736,
-          18.7236,
-          15.1667,
-          36.6437,
-          15.0256,
-          18.3699,
-          14.7583,
-          16.4134,
-          14.3524,
-          27.5939,
-          17.641,
-          24.8893,
-          19.3436,
-          37.8341,
-          16.8995,
-          14.5388,
-          18.4767,
-          14.5031,
-          17.9492,
-          27.928,
-          28.0541,
-          33.8186,
-          19.8619,
-          14.0084,
-          19.6995,
-          16.4494,
-          17.5349,
-          13.5055,
-          14.0346,
-          18.5115,
-          16.4744,
-          19.9206,
-          11.7237,
-          20.7244,
-          15.7186,
-          18.7794,
-          25.8384,
-          13.5622,
-          22.0119,
-          12.1743,
-          14.2503,
-          14.3688,
-          16.5213,
-          12.7413,
-          21.5077,
-          21.3007,
-          21.1843,
-          15.4883,
-          28.9882,
-          14.6365,
-          13.0761,
-          15.9512,
-          16.879,
-          19.8796,
-          20.0448,
-          17.8796,
-          17.0572,
-          24.73,
-          20.4583,
-          15.96,
-          15.6807,
-          15.9287,
-          16.553,
-          24.7569,
-          21.0596,
-          22.6524,
-          22.8052
-         ],
-         "xaxis": "x",
-         "yaxis": "y"
-        },
-        {
-         "fillcolor": "rgba(252,141,98,0.5)",
-         "line": {
-          "color": "rgba(252,141,98,1)"
-         },
-         "marker": {
-          "color": "rgba(252,141,98,1)",
-          "line": {
-           "color": "rgba(252,141,98,1)"
-          }
-         },
-         "name": "IN",
-         "orientation": "h",
-         "type": "box",
-         "x": [
-          16.1157,
-          27.3598,
-          22.8468,
-          13.4644,
-          12.982,
-          27.8306,
-          19.8002,
-          15.4563,
-          13.215,
-          16.8124,
-          14.1137,
-          16.0453,
-          8.5438,
-          13.2391,
-          15.5743,
-          13.9214,
-          15.5819,
-          21.197,
-          17.1677,
-          18.3723,
-          11.425,
-          20.5499,
-          11.1453,
-          12.9936,
-          13.9299,
-          15.5043,
-          15.5382,
-          14.9523,
-          42.1311,
-          20.4899,
-          13.1074,
-          24.22,
-          13.2577,
-          20.2298,
-          16.9731,
-          13.1423,
-          14.8558,
-          12.7718,
-          17.5461,
-          10.1459,
-          22.3081,
-          19.9757,
-          19.2629,
-          11.1118,
-          17.6686,
-          17.1793,
-          13.1477,
-          16.402,
-          26.7447,
-          17.7775,
-          13.5396,
-          14.4076,
-          37.7423,
-          16.9252,
-          14.6798,
-          12.1746,
-          12.6388,
-          10.7029,
-          9.7883,
-          11.1649,
-          14.6129,
-          11.0423,
-          13.8429,
-          24.4559,
-          17.2107,
-          14.1711,
-          15.7347,
-          12.6201,
-          13.5281,
-          12.8464,
-          24.6117,
-          10.5896,
-          14.7,
-          14.1338,
-          10.014,
-          18.608,
-          15.4817,
-          9.4716,
-          36.2454,
-          15.4219,
-          12.645,
-          21.7585,
-          12.2727,
-          22.723,
-          16.0805,
-          13.4,
-          23.8156,
-          10.8146,
-          15.5891,
-          18.5655,
-          16.5838,
-          15.8098
-         ],
-         "xaxis": "x",
-         "yaxis": "y"
-        },
-        {
-         "fillcolor": "rgba(141,160,203,0.5)",
-         "line": {
-          "color": "rgba(141,160,203,1)"
-         },
-         "marker": {
-          "color": "rgba(141,160,203,1)",
-          "line": {
-           "color": "rgba(141,160,203,1)"
-          }
-         },
-         "name": "MI",
-         "orientation": "h",
-         "type": "box",
-         "x": [
-          14.1151,
-          16.2756,
-          18.066,
-          18.9338,
-          19.0398,
-          11.8278,
-          14.5761,
-          17.252,
-          18.2258,
-          21.4209,
-          23.742,
-          16.0667,
-          21.4885,
-          15.8444,
-          22.6527,
-          14.6477,
-          16.9398,
-          12.0419,
-          22.8647,
-          18.7787,
-          18.9124,
-          20.4207,
-          26.9788,
-          26.8726,
-          20.1454,
-          11.4331,
-          21.1731,
-          30.9753,
-          16.4441,
-          16.4685,
-          24.7651,
-          14.3083,
-          36.7601,
-          15.1168,
-          16.2342,
-          15.4576,
-          27.2497,
-          21.2058,
-          34.5572,
-          11.4555,
-          28.6384,
-          14.4522,
-          11.3134,
-          16.1542,
-          32.5964,
-          18.7881,
-          27.5866,
-          14.4057,
-          15.2879,
-          20.6867,
-          16.2528,
-          26.7636,
-          18.5401,
-          25.046,
-          15.0842,
-          35.6088,
-          13.28,
-          17.4296,
-          14.16,
-          13.4576,
-          19.0433,
-          15.6947,
-          36.9635,
-          16.9024,
-          11.6568,
-          15.9568,
-          13.6658,
-          12.921,
-          20.0211,
-          26.9657,
-          13.8934,
-          13.3634,
-          19.7081,
-          17.6412,
-          17.0117,
-          13.797,
-          14.5667,
-          17.2912,
-          14.1243,
-          17.8047,
-          48.0785,
-          19.4104,
-          18.2322
-         ],
-         "xaxis": "x",
-         "yaxis": "y"
-        },
-        {
-         "fillcolor": "rgba(231,138,195,0.5)",
-         "line": {
-          "color": "rgba(231,138,195,1)"
-         },
-         "marker": {
-          "color": "rgba(231,138,195,1)",
-          "line": {
-           "color": "rgba(231,138,195,1)"
-          }
-         },
-         "name": "OH",
-         "orientation": "h",
-         "type": "box",
-         "x": [
-          8.7417,
-          17.3661,
-          17.2669,
-          13.2435,
-          29.1494,
-          16.1765,
-          14.1577,
-          11.4337,
-          24.2252,
-          11.3233,
-          13.9122,
-          17.785,
-          19.6893,
-          15.7631,
-          13.0906,
-          11.6793,
-          14.258,
-          25.0854,
-          13.4751,
-          18.1882,
-          31.5941,
-          18.738,
-          21.0774,
-          11.8741,
-          32.2046,
-          16.4766,
-          14.9341,
-          31.628,
-          31.9567,
-          13.5144,
-          29.7883,
-          24.4505,
-          16.031,
-          10.5538,
-          15.259,
-          12.3113,
-          12.8544,
-          9.3307,
-          13.4498,
-          10.9845,
-          13.8432,
-          16.7711,
-          23.6828,
-          12.2084,
-          18.1794,
-          13.3234,
-          18.8617,
-          23.5504,
-          13.3788,
-          18.1758,
-          15.027,
-          23.7026,
-          11.6775,
-          14.1001,
-          19.2777,
-          10.5139,
-          26.5505,
-          11.3808,
-          12.1051,
-          15.3235,
-          8.8459,
-          19.3383,
-          11.4884,
-          10.1077,
-          13.0943,
-          12.4445,
-          21.8819,
-          11.2333,
-          15.708,
-          16.7976,
-          14.1157,
-          16.2824,
-          13.7773,
-          15.6221,
-          17.3762,
-          18.9896,
-          24.7331,
-          15.5998,
-          13.0834,
-          16.9825,
-          15.11,
-          7.9133,
-          24.4194,
-          19.0097,
-          18.4454,
-          14.4987,
-          29.0951,
-          13.7107
-         ],
-         "xaxis": "x",
-         "yaxis": "y"
-        },
-        {
-         "fillcolor": "rgba(166,216,84,0.5)",
-         "line": {
-          "color": "rgba(166,216,84,1)"
-         },
-         "marker": {
-          "color": "rgba(166,216,84,1)",
-          "line": {
-           "color": "rgba(166,216,84,1)"
-          }
-         },
-         "name": "WI",
-         "orientation": "h",
-         "type": "box",
-         "x": [
-          12.4275,
-          18.32,
-          19.4251,
-          25.8229,
-          26.2932,
-          17.9412,
-          13.6761,
-          19.7803,
-          18.1533,
-          13.8463,
-          20.8523,
-          16.5995,
-          43.6265,
-          15.9255,
-          22.4883,
-          20.9941,
-          26.287,
-          29.8545,
-          15.6035,
-          20.8319,
-          13.5699,
-          21.6804,
-          19.8752,
-          17.3051,
-          20.4833,
-          18.7317,
-          15.3241,
-          22.1656,
-          14.3913,
-          20.3282,
-          14.391,
-          30.4885,
-          16.462,
-          13.6318,
-          17.4418,
-          19.0711,
-          21.8774,
-          15.4275,
-          14.0016,
-          7.3361,
-          25.3558,
-          17.3724,
-          13.4312,
-          21.9338,
-          24.8578,
-          37.4198,
-          15.7492,
-          24.4644,
-          18.592,
-          24.6343,
-          15.5272,
-          22.9065,
-          17.4993,
-          19.9064,
-          16.756,
-          28.5881,
-          19.8339,
-          17.9479,
-          14.8078,
-          20.8372,
-          15.0651,
-          17.5517,
-          18.9421,
-          19.2119,
-          23.1569,
-          19.0169,
-          23.3909,
-          35.3968,
-          16.5499,
-          15.0646,
-          24.9955,
-          21.6664
-         ],
-         "xaxis": "x",
-         "yaxis": "y"
-        }
-       ],
-       "highlight": {
-        "debounce": 0,
-        "dynamic": false,
-        "on": "plotly_click",
-        "opacityDim": 0.2,
-        "persistent": false,
-        "selected": {
-         "opacity": 1
-        },
-        "selectize": false
-       },
-       "layout": {
-        "autosize": true,
-        "hovermode": "closest",
-        "margin": {
-         "b": 40,
-         "l": 60,
-         "r": 10,
-         "t": 25
-        },
-        "showlegend": true,
-        "xaxis": {
-         "automargin": true,
-         "autorange": true,
-         "domain": [
-          0,
-          1
-         ],
-         "range": [
-          5.072633333333334,
-          50.341966666666664
-         ],
-         "title": {
-          "text": "percollege"
-         },
-         "type": "linear"
-        },
-        "yaxis": {
-         "automargin": true,
-         "autorange": true,
-         "domain": [
-          0,
-          1
-         ],
-         "range": [
-          -0.5,
-          4.5
-         ],
-         "type": "category"
-        }
-       },
-       "shinyEvents": [
-        "plotly_hover",
-        "plotly_click",
-        "plotly_selected",
-        "plotly_relayout",
-        "plotly_brushed",
-        "plotly_brushing",
-        "plotly_clickannotation",
-        "plotly_doubleclick",
-        "plotly_deselect",
-        "plotly_afterplot",
-        "plotly_sunburstclick"
-       ],
-       "source": "A",
-       "visdat": {
-        "520455f19fe": [
-         "function () ",
-         "plotlyVisDat"
-        ]
-       }
-      },
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB40AAAFoCAYAAABDm22jAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qu4XmV55/9nZ2cnJJsEOQhREhA52BYqaivV0bFlcEbbWrW2eHmoh6KtRTuWolY7g4O9/jqOWjtApR17EKW1RbRVO9a/+K866rRqVaq1Fg9BLQSUQDgHct7/693PDhJC3O+733c9z73W+uzr6jVzkbWe+76/v3uFyDfrfafm5ubmkh8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgV4SmCKNe5m7oRFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIF5AqSxRUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQR6TIA07nH4RkcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRIYzuAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII9JgAadzj8I2OAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkMZ2AAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEOgxAdK4x+EbHQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEECCN7QACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCDQYwKkcY/DNzoCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAGtsBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoMcESOMeh290BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgDS2AwgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggECPCZDGPQ7f6AgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggABpbAcQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBHhMgjXscvtERQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAAB0tgOIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAj0mQBr3OHyjI4AAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAqSxHUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQR6TIA07nH4RkcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRIYzuAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII9JgAadzj8I2OAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkMZ2AAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEOgxAdK4x+EbHQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEECCN7QACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCDQYwKkcY/DN3q/CGzfvj3t2rUrzc7O9mtw0yJwHwLbtm1Lc3NzadWqVdgg0GsCnoVex2/4exG466670vT0dFq5ciUuCPSawNatW9PMzExasWJFrzkYHoE777xz/t8Jg+fBDwJ9JnDHHXfM/+/m5cuX9xmD2RFIt99+e1q9erVnwS70nsBtt92W1qxZk5YtW9Z7Fl0GQBp3OV2zIXAvAqSxdUAgEyDKbAICngU7gMC9CZDG9gGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgESON+bAJp3I+cTYlAIo0tAQKZAGlsExDwLNgBBO5NgDS2DwhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgRIYzuAwAIB0tgqIJAJeBZsAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxnYAgQUCRJlVQCAT8CzYBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAadyPTSCN+5GzKREgje0AAgsEiDKrgEAm4FmwCQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGtsEBDIB0rgfm0Aa9yNnUyJAGtsBBBYIEGVWAYFMwLNgExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpHE/NoE07kfOpkSANLYDCCwQIMqsAgKZgGfBJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgE+iqN/+GGb6Wbt28deQ0ee9RD0+ErZ0e+r/YNpHHtBNRHoBCB7du3p127dqXZ2fb9RlUIkTI9IUCU9SRoYy5KwLOwKCIX9IQAadyToI25KAHSeFFELugJAdK4J0Ebc1ECpPGiiFzQEwKkcU+CNuaiBPoqjX/3n/8uffO2zYvyue8F5z78jPSwQ44a+b7aN5DGtRNQH4FCBEjjQqCVCU+AKAsfkQYLEfAsFAKtTHgCpHH4iDRYiABpXAi0MuEJkMbhI9JgIQKkcSHQyoQnQBqHj0iDhQj0XRqvn31AWjW9YlHam7beku7evTORxouicgECCNQkQBrXpK92JAJEWaQ09FKTgGehJn21IxEgjSOloZeaBEjjmvTVjkSANI6Uhl5qEiCNa9JXOxIB0jhSGnqpSaDv0njYj5ve+3HWS5XGb3zjG9MxxxyTnvvc56Yrr7wyXXDBBenSSy8tFr03jYuhVgiBugRI47r8VY9DgCiLk4VO6hLwLNTlr3ocAqRxnCx0UpcAaVyXv+pxCJDGcbLQSV0CpHFd/qrHIUAax8lCJ3UJkMbDfUcxaVx3T1VHAIEhCZDGQ4JyWecJEGWdj9iAQxLwLAwJymWdJ0Aadz5iAw5JgDQeEpTLOk+ANO58xAYckgBpPCQol3WeAGnc+YgNOCQB0pg0HnJVXIYAAm0gQBq3ISU9liBAlJWgrEYbCHgW2pCSHksQII1LUFajDQRI4zakpMcSBEjjEpTVaAMB0rgNKemxBAHSuARlNdpAgDQmjduwp3pEAIEhCZDGQ4JyWecJ1BZl1935hfSp697Uec4GRACBfQmsW/3wdPqG18ISkABpHDAULVUhQBpXwa5oQAKkccBQtFSFAGlcBbuiAQmQxgFD0VIVAqQxaVxl8RRFAIFmCJDGzXB1avsIkMbty0zHCHSBAGkcN0XSOG42OitLgDQuy1u1uARI47jZ6KwsAdK4LG/V4hIgjeNmo7OyBEhj0rjsxqmGAAKNEiCNG8Xr8BYRiCKN18w8KB279vEtIqfVpRK4c8f30nfu+HQ6eOao9JC1T1jqMRO/b9euXWlubi7NzMxM/GwHfp/A3vxJ47hbQRrHzUZnZQmQxmV5qxaXAGkcNxudlSVAGpflrVpcAqRx3Gx0VpYAaUwal9041RBAoFECpHGjeB3eIgKkcYvC6kirpHFHglziGKTxEsEVvI00LghbqdAESOPQ8WiuIAHSuCBspUITII1Dx6O5ggRI44KwlQpNgDQmjUMvqOYQQGA0AqTxaLxc3V0CpHF3s406GWkcNZkyfZHGZTiPU4U0Hoeee7tEgDTuUppmGYcAaTwOPfd2iQBp3KU0zTIOAdJ4HHru7RIB0riONH71q1+dli1bts8qfehDH2rskwOn5gafS+gHAQQ6T4A07nzEBhySAGk8JCiXTYwAaTwxlK08iDSOHxtpHD8jHZYhQBqX4axKfAKkcfyMdFiGAGlchrMq8QmQxvEz0mEZAn2XxutnD02zMysWhX3NHTenu3fvTOc+/Iz0sEOOWvT6aBeQxtES0Q8CDREgjRsC69jWESCNWxdZ6xsmjVsf4VgDkMZj4StyM2lcBLMiLSBAGrcgJC0WIUAaF8GsSAsIkMYtCEmLRQiQxkUwK9ICAn2XxqNGRBqPSsz1CCBQlABpXBS3YoEJkMaBw+loa6RxR4MdcizSeEhQFS8jjSvCVzoUAdI4VByaqUiANK4IX+lQBEjjUHFopiIB0rgifKVDEeirNP6HG76VtmzbOnIW/27dcB9nPfLBDd/gTeOGAffp+Cs3X5Ju2fad9KijfjkduvIhfRq9FbOSxq2ISZMFCNSXxl9Mn7ruf6Q1Kx6Ujl3z+AITK1GbwJ27vpe+c9un0+zyo9Jxhzyhdjv31N+1a1cafEvJzMxMmJ662Mje/NetPjWdvuG8Lo7Y+plI49ZHaIAJEZiUNN61Z1v65KY3puXLDko/uf63J9SdYxAoR4A0LsdapdgESOPY+eiuHAHSuBxrlWIT6Ks0jp3K5LsjjSfPtLcnfuya89Pmu/81nbHhdenI1Sf3lkPUwUnjqMnoqzSB+tL4C+lT170prZl5UDp2LWlcOv8a9bxpXIN6nJreNI6TxYE6IY3jZ6TDMgQmJY137tma3vfNF6aZZavTL574rjLNq4LABAmQxhOE6ahWEyCNWx2f5idIgDSeIExHtZoAadzq+IZunjQeGpULFyNAGi9GqO6vk8Z1+asehwBpHCeLvnRCGvcl6fufkzSOnz9pHD8jHZYhQBqX4axKfAKkcfyMdFiGAGlchrMq8QmQxvEz0mEZAqRxGc61q7ROGl988cVp586d6ZxzzrmH3Stf+cq0fv36ff7Zueeem574xCemU089NZ111lnpiiuuqM268/VJ49gRk8ax89FdOQKkcTnWKmUCpHG/N4E0jp8/aRw/Ix2WIUAal+GsSnwCpHH8jHRYhgBpXIazKvEJkMbxM9JhGQKkcRnOtau0Thp/9rOfTX/4h3+Y3vWu/DFXA4H8/Oc/P61atSq94x3vmP9nAzn29Kc/PV1yySVp9+7dpHGhLSONC4FeYhnSeIng3NY5AqRx5yINPxBpHD6iRhskjRvFO5HDSeOJYHRIBwiQxh0I0QgTIbBUaTz4aPZNd34+bd15Y3rAyoek9Qc/eiL99OGQrTs3z7PbueeudPTBj06HrnxIH8YOPyNpHD6iUA12+TkmjUOtmmYqEuirNJ776t+ndPuWkclPnfzvUlp7xMj31b6hddL47rvvTj//8z+fLr300nTkkUemL33pS+n9739/2rRpU3rzm9+cDj/88HTllVemCy+8cF4sX3fddaRxoS0jjQuBXmIZ0niJ4NzWOQKkceciDT8QaRw+okYbJI0bxTuRw0njiWB0SAcIkMYdCNEIEyGwFGk8kCX/73deNS899/4cd8hPpcese9lEeuryIZvv+mr61HVv3ofdww79mfSoI3+5y2O3YjbSuBUxhWiy688xaRxizTQRgEBfpfHuy9+U0qZvjJzAsjNflaY2/NDI99W+oXXSeADsN3/zN9OTn/zk9KQnPSm9853vTLOzs+naa6+d/yjqM844Y/6N48Ef8l/+8peTxgU3bK80Pm7tT6bZmSMLVlZqGAK7du1Ke/bsSStWrBjmctcg0FkCg2dhbm4uzczMVJnxjh3Xp3+74+/TmhUPSseueXyVHhQtS2DrzhvSt2//VDp4+VHpIYc8oWzxH1Ct9rMQBkTDjezNf/Bno8GfkfzEIzD45KKpqam0fPnyeM3pCIGCBHbs2JGmp6fn/2+cn91zO9JVN38wzSxbnX7xxPwJYX4QaBOBpUjjr9x0efqXLe/db8wnP+Qt3ppdJPyBML7uzs/vd9WzH7Y/zzbtURd6JY27kGKZGbr+HJPGZfZIlfgEei+Nj1if0kGrFw9q87Up7bg7kcaLo5rYFe9+97vnJfFrXvOa+e8xfulLX5quueaa9OUvfzm94hWvmJfFz3zmM9PjH/940nhi1Bc/aK80XvxKVyCAAAIIrJl5UDp2LWnch03wpnEfUj7wjHvz7zcF0yOAQB8JkMZ9TL0bMy9FGh/ov4ecseF16cjVJ3cDTENTHIjdUx96sRcSGmI+7LGk8bCkXNf155g0tuMIZAJ9l8bDftz0nq/+3zR1+81LlsZvfOMb0zHHHJOe+9znzn+q8qtf/ep0/vnnz/vOvT9/8Ad/kNatW5ee8YxnTHw9W/mm8VVXXZV+53d+Z/4t4wG49773venmm29O5557bnr729+efuEXfiFdfvnl6eCDDyaNJ74yBz7Qm8YFYS+hlDeNlwDNLZ0kUPvtSm8ad3KtfuBQ3jTuX+b3ntibxvHz96Zx/Ix0WIaAN43LcFYlPoGlSGNvGi89166/obh0MvXvJI3rZ9CWDrr+HJPGbdlEfTZNgDQe7juKJy2Nf/d3f3f+06AGn7C895MzSeP7bPvgI3YHYvjXfu3X0qc//en0+te/fv6KF7zgBfMS+UMf+lC66KKL5v+Z7zRu+reK75/vO43LsV5KJd9pvBRq7ukiAd9p3MVUY8/kTePY+TTdne80bprw+Of7TuPxGTqhGwR8p3E3cjTF+ASWIo3v9zuN1/5kesyDfn38hjp+Qte/C7XN8ZHGbU6vbO9df45J47L7pFpcAqRxHWk8eGl28ILscccdl57znOfMLwhpfD/PyeBN4+uvvz498YlPTGeeeeb8FW9961vTN7/5zfSYxzwmvfCFL5z/Z6Rxud9kSONyrJdSiTReCjX3dJEAadzFVGPPRBrHzqfp7kjjpgmPfz5pPD5DJ3SDAGncjRxNMT6BpUjjQdWde7ama+/4x7R1543p0IMektYffNr4zfTkhIF033Tn59OO3VvT+jWn+R7oILmTxkGCaEkbXX6OSeOWLKE2GydAGteRxpdddll65StfOf81vYNPWj788MNJ4/vb9sHbxBdeeGG6+OKL00knnTR/yd/93d+lN73pTfPy+OEPfzhp3PhvE/sWII0LAx+xHGk8IjCXd5YAadzZaMMORhqHjaZIY6RxEcxjFSGNx8Ln5g4RII07FKZRxiKwVGk8VlE3IxCQAGkcMBQtVSFAGlfBrmhAAqRxPWn85je/OV166aXpu9/97vx3HHvTOOADoqX9CZDGsbeCNI6dj+7KESCNy7FWKRMgjfu9CaRx/PxJ4/gZ6bAMAdK4DGdV4hMgjeNnpMMyBEjjMpxViU+ANI6fkQ7LECCN60rjwX/TftGLXpTOO++89IlPfCKtW7cuPeMZz5h4+FNzc3NzEz/Vgb0kQBrHjp00jp2P7soRII3LsVaJNLYD3/9LA+tWPzydvuG1kAQkQBoHDEVLVQiQxlWwKxqQAGkcMBQtVSFAGlfBrmhAAqRxwFC0VIUAaVxXGg9C//jHP57++q//Op188snpqKOOIo2rPAmKDk3gys2XpFu2fSc96qhf9v0zQ1MrdyFpXI61SrEJ1JfGX0yfuu5/pDUrHpSOXfP42LB0NxECd+76XvrObZ9Os8uPSscd8oSJnDmJQ3bt2pUGf3dwZmZmEsc54wAE9ua/bvWp6fQN5+EUkABpHDAULVUhMClpvGvPtvTJTW9My5cdlH5y/W9XmUVRBMYhQBqPQ8+9XSJAGncpTbOMQ4A0Hoeee7tEgDSuL40H+3TOOeekm2++OT396U8njbv0gJkFgdIESOPSxNWLSqC+NP5C+tR1b0prZh6Ujl1LGkfdk0n25eOpJ0mzfWf5eOr4mZHG8TPSYRkCk5LGZbpVBYHmCJDGzbF1crsIkMbtyku3zREgjZtj6+R2ESCNY0jjb3zjG+llL3tZOvvss0njdj1CukUgFgHSOFYeuqlHgDSux76vlUnjviaf5yaN4+dPGsfPSIdlCJDGZTirEp8AaRw/Ix2WIUAal+GsSnwCpHH8jHRYhkDfpXF64IY0ddDsorDnNv9bStvvTsvOfFWa2vBDi14f7QLfaRwtEf0g0BAB0rghsI5tHQHSuHWRtb5h0rj1EY41AGk8Fr4iN5PGRTAr0gICpHELQtJiEQKkcRHMirSAAGncgpC0WIQAaVwEsyItINB7aTxiRqTxiMBcjgACZQmQxmV5qxaXAGkcN5uudkYadzXZ4eYijYfjVPMq0rgmfbUjESCNI6Whl5oESOOa9NWORIA0jpSGXmoSII1r0lc7EoG+SuO5r/59mrv9ppGjWHby41Jae8TI99W+wZvGtRNQH4FCBEjjQqCVCU+ANA4fUecaJI07F+lIA5HGI+GqcjFpXAW7ogEJkMYBQ9FSFQKkcRXsigYkQBoHDEVLVQiQxlWwKxqQQF+lccAoGm2JNG4Ur8MRiEOANI6ThU7qEiCN6/LvY3XSuI+pf39m0jh+/qRx/Ix0WIYAaVyGsyrxCZDG8TPSYRkCpHEZzqrEJ0Aax89Ih2UIkMZlONeuQhrXTkB9BAoRII0LgVYmPIEo0jg8KA0igMBECaxb/fB0+obXTvRMh02GAGk8GY5OaT8B0rj9GZpgMgRI48lwdEr7CZDG7c/QBJMhQBpPhqNT2k+ANG5/hsNMQBoPQ8k1CHSAAGncgRCNMBECpPFEMDoEAQRGJEAajwis4OWkcUHYSoUmQBqHjkdzBQmQxgVhKxWaAGkcOh7NFSRAGheErVRoAqRx6Hgm1hxpPDGUDkIgNgHSOHY+uitHoLY0LjepSgj8YAKeBRuCQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqSxTUAgE+irNP7qxpvS7Vt3jLwGJx9/RFp78IqR76t9A2lcOwH1EShEgDQuBFqZ8ASIsvARabAQAc9CIdDKhCdAGoePSIOFCJDGhUArE54AaRw+Ig0WIkAaFwKtTHgCpHH4iDRYiEBfpfHlH/l62nTDHSNTPvNJD0sb1q0Z+b7aN5DGtRNQH4FCBEjjQqCVCU+AKAsfkQYLEfAsFAKtTHgCpHH4iDRYiABpXAi0MuEJkMbhI9JgIQKkcSHQyoQnQBqHj0iDhQj0XRofceiqdNCK5YvS3nzzXWnHzt2JNF4UlQsQQKAmAdK4Jn21IxEgyiKloZeaBDwLNemrHYkAaRwpDb3UJEAa16SvdiQCpHGkNPRSkwBpXJO+2pEIkMaR0tBLTQJ9l8bDftz03o+zXqo0Puecc9JNN92U/uzP/ixNTU3dE/nHP/7x9MY3vjG96U1vSo961KPm///HHHNMeu5znzvRtfCm8URxOgyBuARI47jZ6KwsAaKsLG/V4hLwLMTNRmdlCZDGZXmrFpcAaRw3G52VJUAal+WtWlwCpHHcbHRWlgBpXJa3anEJkMbDfUfxJKTx5s2b03/5L/8lnXLKKfcsxH/7b/8tfeMb30i/9Vu/RRrHfUx0hkB7CJDG7clKp80SIMqa5ev09hDwLLQnK502S4A0bpav09tDgDRuT1Y6bZYAadwsX6e3hwBp3J6sdNosAdK4Wb5Obw8B0ricNN6wYUOamZlJL3/5y+cXZPDn05e85CXpwQ9+cHr2s59NGrfnsdEpAnEJkMZxs9FZWQJEWVneqsUl4FmIm43OyhIgjcvyVi0uAdI4bjY6K0uANC7LW7W4BEjjuNnorCwB0rgsb9XiEiCNy0njZz7zmenCCy9Mf/EXf5Gmp6fTRz7ykXT11Venb33rW/MfR+3jqeM+JzpDoDUESOPWRKXRhgkQZQ0DdnxrCHgWWhOVRhsmQBo3DNjxrSFAGrcmKo02TIA0bhiw41tDgDRuTVQabZgAadwwYMe3hgBpXE4av/jFL05/+Zd/mZ761Kemn/iJn5j/SOoXvvCF6U//9E9J49Y8MRpFIDgB0jh4QNorRoAoK4ZaoeAEPAvBA9JeMQKkcTHUCgUnQBoHD0h7xQiQxsVQKxScAGkcPCDtFSNAGhdDrVBwAqRxWWl8ww03pH/8x39MZ599dvqN3/iN9K53vSu94hWvII2DPyfaQ6A1BEjj1kSl0YYJEGUNA3Z8awh4FloTlUYbJkAaNwzY8a0hQBq3JiqNNkyANG4YsONbQ4A0bk1UGm2YAGncMGDHt4YAaVxWGp9wwgnpec97XnrOc56Tbr755vSiF72ING7N06JRBFpAgDRuQUhaLEKAKCuCWZEWEPAstCAkLRYhQBoXwaxICwiQxi0ISYtFCJDGRTAr0gICpHELQtJiEQKkcRHMirSAAGlcVhqfcsop6Q1veEP6yle+kt74xjem4447jjRuwXOiRQRaQ4A0bk1UGm2YAFHWMGDHt4aAZ6E1UWm0YQKkccOAHd8aAqRxa6LSaMMESOOGATu+NQRI49ZEpdGGCZDGDQN2fGsIkMblpfFnPvOZ+e8x/pM/+ZP5PfHx1K15XDSKQHwCpHH8jHRYhgBRVoazKvEJeBbiZ6TDMgRI4zKcVYlPgDSOn5EOyxAgjctwViU+AdI4fkY6LEOANC7DWZX4BPoujR942Kp00Irliwa1+ea70vYdu9OZT3pY2rBuzaLXR7tgam5ubi5aU/pBAIHJEyCNJ8/Uie0kQJS1MzddT56AZ2HyTJ3YTgKkcTtz0/XkCZDGk2fqxHYSII3bmZuuJ0+ANJ48Uye2kwBp3M7cdD15An2XxqMSJY1HJeZ6BBAoSoA0LopbscAEiLLA4WitKAHPQlHcigUmQBoHDkdrRQmQxkVxKxaYAGkcOBytFSVAGhfFrVhgAqRx4HC0VpRAX6XxVzfelG6/c8fIrE8+YbiPsx754IZv8KZxw4Adj0AUAqRxlCT0UZsAUVY7AfWjEPAsRElCH7UJkMa1E1A/CgHSOEoS+qhNgDSunYD6UQiQxlGS0EdtAqRx7QTUj0Kgr9I4Cv9SfZDGpUirg0BlAqRx5QCUD0OAKAsThUYqE/AsVA5A+TAESOMwUWikMgHSuHIAyochQBqHiUIjlQmQxpUDUD4MAdI4TBQaqUyANK4cQKHypHEh0MogUJsAaVw7AfWjECDKoiShj9oEPAu1E1A/CgHSOEoS+qhNgDSunYD6UQiQxlGS0EdtAqRx7QTUj0KANI6ShD5qEyCNaydQpj5pXIazKghUJ0AaV49AA0EIEGVBgtBGdQKeheoRaCAIAdI4SBDaqE6ANK4egQaCECCNgwShjeoESOPqEWggCAHSOEgQ2qhOgDSuHkGRBkjjIpgVQaA+AdK4fgbbhH1CAAAgAElEQVQ6iEGAKIuRgy7qE/As1M9ABzEIkMYxctBFfQKkcf0MdBCDAGkcIwdd1CdAGtfPQAcxCJDGMXLQRX0CfZXGd//LDWn37dtHDmDVyUel6UNWjnxf7RtI49oJqI9AIQKkcSHQyoQnQJSFj0iDhQh4FgqBViY8AdI4fEQaLESANC4EWpnwBEjj8BFpsBAB0rgQaGXCEyCNw0ekwUIE+iqNb77sK2nHtbeNTPmwZ/1oWrHhkJHvq30DaVw7AfURKESANC4EWpnwBIiy8BFpsBABz0Ih0MqEJ0Aah49Ig4UIkMaFQCsTngBpHD4iDRYiQBoXAq1MeAKkcfiINFiIQN+l8fIHrk7LVs4sSnvnjXemue27E2m8KCoXIIBATQKkcU36akciQJRFSkMvNQl4FmrSVzsSAdI4Uhp6qUmANK5JX+1IBEjjSGnopSYB0rgmfbUjESCNI6Whl5oE+i6NV51yVJpeu/jHTe/9OOtxpPFnPvOZ9Jd/+Zdp48aNaeXKlelHfuRH0llnnZWOP/74+RW48sor0wUXXJAuvfTSfVbi/PPPT6eeemp6xjOeseRV8abxktG5EYF2ESCN25WXbpsjQJQ1x9bJ7SLgWWhXXrptjgBp3BxbJ7eLAGncrrx02xwB0rg5tk5uFwHSuF156bY5AqRxc2yd3C4CpHEZafypT30q/d7v/V46++yz02Mf+9g08Dof/ehH03ve8570tre9LR1zzDGkcbseHd0iEJMAaRwzF12VJ0CUlWeuYkwCnoWYueiqPAHSuDxzFWMSII1j5qKr8gRI4/LMVYxJgDSOmYuuyhMgjcszVzEmAdK4jDR+wQtekH7xF38x/dzP/dw+i/A//+f/TIP/zXbeeeeRxjEfEV0h0C4CpHG78tJtcwSIsubYOrldBDwL7cpLt80RII2bY+vkdhEgjduVl26bI0AaN8fWye0iQBq3Ky/dNkeANG6OrZPbRYA0bl4a33TTTenZz352+qu/+qu0du3afRbkS1/6Unr961+f3ve+95HG7Xp0dItATAKkccxcdFWeAFFWnrmKMQl4FmLmoqvyBEjj8sxVjEmANI6Zi67KEyCNyzNXMSYB0jhmLroqT4A0Ls9cxZgESOPmpfF3vvOd9JKXvCRdccUV+y3BNddck37lV35l/tcG32n827/92/uJ5cH/pnvxi1/sO41jPkK6QiAWAdI4Vh66qUeAKKvHXuVYBDwLsfLQTT0CpHE99irHIkAax8pDN/UIkMb12KsciwBpHCsP3dQjQBrXY69yLAKkcfPS+NZbb01nnnlmuvzyy9Ohhx66zwIM3jR+wxvekN773vfOS+PB9x5fdNFF+1zzlre8JT360Y8mjWM9OrpBICYB0jhmLpPq6o5Pfidt/cdNkzrOOQggMGEC6171+AmfOP5xpPH4DJ3QDQKkcTdyNMX4BEjj8Rk6oRsESONu5GiK8QmQxuMzdEI3CJDG3cjRFOMTII2bl8aDlAZvE//0T//0fuJ3IIgH//3iNa95jY+nHn+dnYAAAqRxt3eANO52vqZrPwHSuP0ZmqC7BEjj7mZrstEIkMaj8XJ1dwmQxt3N1mSjESCNR+Pl6u4SII27m63JRiNAGpeRxp/73Ofm3yh+2ctelh73uMelnTt3po9+9KPpPe95T3rb296WHvzgB5PGo62uqxFA4P4IkMbd3ou90njlsQ9IM0ev7fawY063a9euNDc3l2ZmZsY6aevnNqW53XvS7Gnr09TyZWOd5ebuErjzH66ZH4407m7GJms/AdK4/RmaYDIESOPJcHRK+wmQxu3P0ASTIUAaT4ajU9pPgDRuf4YmmAwB0riMNB6k9fnPfz69+93vTldffXWanp5OD3/4w9NZZ52VHvKQh8yHOfh46gsuuCBdeuml+4R7/vnnp1NPPdXHU09m5Z2CQLcJkMbdzpc0Hj5f0nh4Vq4cnwBpPD5DJyDQNAHSuGnCzm8LAdK4LUnps2kCpHHThJ3fFgKkcVuS0mfTBEjjpgk7vy0E+i6Nlx+5Oi07aPGXkHbecGea2747HfasH00rNhzSlnjv6XNqbvC6lR8EEOg8AdK42xGTxsPnSxoPz8qV4xMgjcdn6AQEmiZAGjdN2PltIUAatyUpfTZNgDRumrDz20KANG5LUvpsmgBp3DRh57eFQN+l8ag5kcajEnM9AggUJUAaF8VdvBhpPDxy0nh4Vq4cnwBpPD5DJyDQNAHSuGnCzm8LAdK4LUnps2kCpHHThJ3fFgKkcVuS0mfTBEjjpgk7vy0E+iqN7/6XG9Lu27aPHNOqU45K04esHPm+2jd407h2AuojUIgAaVwIdKUypPHw4Enj4Vm5cnwCpPH4DJ2AQNMESOOmCTu/LQRI47Ykpc+mCZDGTRN2flsIkMZtSUqfTRMgjZsm7Py2EOirNG5LPpPqkzSeFEnnIBCcAGkcPKAx2yONhwdIGg/PypXjEyCNx2foBASaJkAaN03Y+W0hQBq3JSl9Nk2ANG6asPPbQoA0bktS+myaAGncNGHnt4UAadyWpMbrkzQej5+7CxDYtXlruv3j30rLj5xNa//DQwtU7GYJ0ribue6d6vvS+NA0c/Sabg875nSTksZ3fvbalPbMpYN/YkNK01NjduX2rhIgjbuarLm6RKBv0njr569L26++Oc0++ui08vjDuhSlWcYkQBqPCdDtnSFAGncmSoOMSYA0HhOg2ztDgDTuTJQGGZMAaTwmwJbcThq3JKg+t7nj2tvSzZd9Ja3YcEgafHm4n6URII2Xxq0td3nTePikJiWNt35uU5rbvSfNnrY+TS1fNnwDruwVAdK4V3EbtqUE+iaNb7tiY7r7n7+X1v6nE9LqU9e1NDVtN0GANG6CqjPbSIA0bmNqem6CAGncBFVntpEAadzG1PTcBAHSuAmq8c4kjeNloqP7ECCNJ7MSpPFkOEY9hTQePhnSeHhWrhyfAGk8PkMnINA0AdK4acLObwsB0rgtSemzaQKkcdOEnd8WAqRxW5LSZ9MESOOmCTu/LQT6Ko2/ddsn0l27bho5puPW/mSanTly5Ptq39Aaabxnz570vve9L334wx9ON9xwQ1qzZk167GMfm84666x0yCGHzHM855xz0lOe8pT0xCc+8R6uV199dXrFK16RPvCBD9Rmrf4SCZDGSwR3n9tI48lwjHoKaTx8MqTx8KxcOT4B0nh8hk5AoGkCpHHThJ3fFgKkcVuS0mfTBEjjpgk7vy0ESOO2JKXPpgmQxk0Tdn5bCPRVGn/smvPT5rv/deSYztjwunTk6pNHvq/2Da2Rxm9729vSF7/4xfQbv/Eb6aSTTkpbtmxJ73znO9N3vvOd9Id/+IdpxYoVpHHtbWqoPmk8GbCk8WQ4Rj2FNB4+GdJ4eFauHJ8AaTw+Qycg0DQB0rhpws4/EIHt39ySdt64Nc3dvSulmWVp+WGr00EnHpamVi6fOLS9tabXHnTAGn2Uxrtv2562fW1z2nH9nWn64Jm08rhD08oTDl+U/+C+7Ru3pD3bd6WDTjg8LT9y9n7v2bV5a9q2cUtatnL5/LnTh6xc9GwX1CdAGtfPQAcxCJDGMXLQRX0CpHH9DHQQg0DfpfEDVhybZqbv/8/9907olm3fTrvm7k6kcYN7u3nz5vT85z8/vf3tb0/HHnvsPZUGbx//yq/8Snr605+efu7nfo40bjCDmkeTxpOhTxpPhmPUU0jj4ZMhjYdn5crxCZDG4zN0AgJNEyCNmybs/PsjcPNlX0mD/52T5lJKU9+/YmrldDriBY+aqFy8p9ZCmUGNI1/y6P3kdN+k8UCk3/KBvW8MfD+EFRsOSYc960cPuLiD3G55/7+mue2777lm9Y89OK39Dw/d557bP/6tdNcXr9/nnw3OHZzvJzYB0jh2ProrR4A0LsdapdgESOPY+eiuHIG+S+OHrv2ptHrmgYsC//Zt/ydt3XXjkqTxxRdfnHbu3DnvOvf+vPKVr0zr16/f55+de+6585+4fOqpp85/GvMVV1yxaF/DXtCKN40/9rGPpcsuuyz98R//8X5zvetd70rXXHNNeu1rX0saD5t6y67bK42n165Mq045qmXdx2l3IMoGf9Fi8Fa+n+4R2P5vt6ad192eVh57aJo5ek33BpzgRJOSxnd+9tqU9sylg39iQ0rT9/qvvRPs1VHtJ7BXGh/8744JN8yknoVwg2kIgREJDP4H2dTUVFq+fPJvd47YSpHLt129Je26YWta+59OSKtPXVekpiL7Etj7v2/uK4z3XnV/AnKpDO+pdZ8DBv9eOvhx+/67qW/S+L4y/d6IfpDcHQjj7Rtv3i+Sda96/D7/7Htv+b/7XbPyhMPSoT//I0uN032FCJDGhUArE54AaRw+Ig0WIkAaFwKtTHgCpHHz0vizn/3s/CcrD7zn4Gfw3ysGL9SuWrUqveMd75j/Z4OXAwcv0l5yySVp9+7d/ZTGH/zgB9Pf//3fpze/+c37PTj/+3//7/SpT30qveUtb5mXxoOPq56ZmbnnugG0gSjzncbhf885YIMH+g8d7Z1I5wg0R2DlsQ9IM0evba5AB06elCjb+rlNaW73njR72vo0tXxZB8gYoQkCe6VxE2c7EwEEEBiHAGk8Dr3x7l3sf98s9qbrKNVJ4wPTuj+pu/fqHySNDySbH/irj77nDfHBx1ff+Eef36/4JLMdZQ9cOxoB0ng0Xq7uLgHSuLvZmmw0AqTxaLxc3V0CpHHz0vjuu+9OP//zP58uvfTSdOSRR6YvfelL6f3vf3/atGnTvB89/PDD05VXXpkuvPDCebF83XXX9VMaf/KTn5wHsNek3/uxG/zza6+9Np133nnz0vj0009P//7f//t7Lvm3f/u39Du/8zukcYt/r/Km8WTC86bxZDhGPcWbxsMnMylp7E3j4Zn3+UpvGvc5fbO3hYA3jduSVHf69KZxjCy9aRwjh4hdkMYRU9FTDQKkcQ3qakYkQBpHTEVPNQiQxs1L40Guv/mbv5me/OQnpyc96Unpne98Z5qdnZ13oIOPoj7jjDPmPengz6svf/nL+yuNb7nllvSsZz0rDT7P+4QTTrjneRi8Qfyrv/qr6Rd+4RfST//0T/t46hq/UxSo6TuNJwPZdxpPhmPUU3yn8fDJTEoae9N4eOZ9vtJ3Gvc5fbO3hYDvNG5LUt3q84DfabxiOh3xwoa/03jFdDry13yn8T3faTw3tc/3Si/2NvD8dxr/9b+muR2+07hbT+X3pyGNu5qsuUYlQBqPSsz1XSVAGnc1WXONSoA0LiON3/3ud89L4te85jXzzvOlL33p/Ff0fvnLX06veMUr5mXxM5/5zPT4xz++v9J4sLyD7zMefAz1AMoP//APpy1btsy/fTx4k/j3f//35z+SegDwKU95yvwXQO/9ufrqq+fv8fHUo/4WEOd60ngyWZDGk+EY9RTSePhkSOPhWblyfAKk8fgMnYBA0wRI46YJO/9ABAbScufmrWlu2840NTOdpg9blQ468fA0tXLy36+9t9b0ISsPWKNv32k8yGXwMdJ3X7U57fzuHWl6dmVaedwD0soTD190aQf3bfvmljS3fdc8z+VHzt7vPbs2b52/bpDp4LoBfz/xCZDG8TPSYRkCpHEZzqrEJ0Aax89Ih2UIkMZlpPFVV101/+nJg7eMn/vc56b3vve96eabb07nnntuevvb3z7/Eu3ll1+eDj744H5L47m5ufnP7v7bv/3b9N3vfjetWbMmPe5xj5v/vO4BnMEPaVzmN4fSVUjjyRAnjSfDMeoppPHwyZDGw7Ny5fgESOPxGToBgaYJkMZNE3Z+Wwj0URq3JRt9liVAGpflrVpcAqRx3Gx0VpYAaVyWt2pxCZDGZaTx4BOWB2L4137t19KnP/3p9PrXv35+KV7wghfMS+QPfehD6aKLLpr/Z739TuO4j4nOShAgjSdDmTSeDMeop5DGwydDGg/PypXjEyCNx2foBASaJkAaN03Y+W0hQBq3JSl9Nk2ANG6asPPbQoA0bktS+myaAGncNGHnt4UAaVxGGg/2YfCm8fXXXz//qcpnnnnm/Iq89a1vTd/85jfTYx7zmPTCF75w/p+Rxm15evQ5UQKk8WRwksaT4Rj1FNJ4+GRI4+FZuXJ8AqTx+AydgEDTBEjjpgk7vy0ESOO2JKXPpgmQxk0Tdn5bCJDGbUlKn00TII2bJuz8thAgjctJ48HbxBdeeGG6+OKL00knnTS/In/3d3+X3vSmN83L44c//OHz/4w0bsvTo8+JEhh8D9TtH//W/PdErf0PD53o2X06jDTudtrfl8aHppmj13R72DGnm5Q0vvOz16a0Zy4d/BMbUpqeGrMrt3eVAGnc1WTN1SUCfZPGWz9/Xdp+9c1p9tFHp5XHH9alKM0yJgHSeEyAbu8MAdK4M1EaZEwCpPGYAN3eGQKkcWeiNMiYBPoujR+w8ti0cjp/Ve4P+rl527fTzj13pTM2vC4dufrkxS4P9+tTc4MvC/aDAAKdJ0AadztibxoPn++kpPHWz21Kc7v3pNnT1qep5cuGb8CVvSJAGvcqbsO2lEDfpHFLY9J2AQKkcQHISrSCAGncipg0WYAAaVwAshKtIEAatyImTRYg0HdpPCpi0nhUYq5HAIGiBEjjoriLFyONh0dOGg/PypXjEyCNx2foBASaJkAaN03Y+W0hQBq3JSl9Nk2ANG6asPPbQoA0bktS+myaAGncNGHnt4VAX6Xxt277RNq688aRY3roIT+VZmeOHPm+2jd407h2AuojUIgAaVwIdKUypPHw4Enj4Vm5cnwCpPH4DJ2AQNMESOOmCTu/LQRI47Ykpc+mCZDGTRN2flsIkMZtSUqfTRMgjZsm7Py2EOirNG5LPpPqkzSeFEnnIBCcAGkcPKAx2yONhwdIGg/PypXjEyCNx2foBASaJkAaN03Y+W0hQBq3JSl9Nk2ANG6asPPbQoA0bktS+myaAGncNGHnt4UAadyWpMbrkzQej5+7EWgNAdK4NVEtqVHSeHhspPHwrFw5PgHSeHyGTkCgaQKkcdOEnd8WAqRxW5LSZ9MESOOmCTu/LQRI47Ykpc+mCZDGTRN2flsIkMZtSWq8Pknj8fi5G4HWECCNWxPVkholjYfHRhoPz8qV4xMgjcdn6AQEmiZAGjdN2PltIUAatyUpfTZNgDRumrDz20KANG5LUvpsmgBp3DRh57eFAGnclqTG65M0Ho+fuxFoDQHSuDVRLanRvdJ4STe7CQEEGiew7lWPb7zGqAW2bduW5ubm0qpVq0a91fUIdIoAadypOA0zBgHSeAx4bu0UAdK4U3EaZgwCpPEY8NzaKQKkcafiNMwYBEjjMeC16FbSuEVhaRWBcQiQxuPQi38vaRw/Ix32mwBp3O/8TR+bAGkcOx/dlSNAGpdjrVJsAqRx7Hx0V44AaVyOtUqxCZDGsfPRXTkCpHE51jUrkcY16auNQEECpHFB2EqFJuDtytDxaK4gAc9CQdhKhSZAGoeOR3MFCZDGBWErFZoAaRw6Hs0VJEAaF4StVGgCpHHoeDRXkABpXBB2xVKkcUX4SiNQkgBpXJK2WpEJEGWR09FbSQKehZK01YpMgDSOnI7eShIgjUvSVisyAdI4cjp6K0mANC5JW63IBEjjyOnorSQB0rgk7Xq1SON67FVGoCgB0rgobsUCEyDKAoejtaIEPAtFcSsWmABpHDgcrRUlQBoXxa1YYAKkceBwtFaUAGlcFLdigQmQxoHD0VpRAqRxUdzVipHG1dArjEBZAqRxWd6qxSVAlMXNRmdlCXgWyvJWLS4B0jhuNjorS4A0LstbtbgESOO42eisLAHSuCxv1eISII3jZqOzsgRI47K8a1UjjWuRVxeBwgRI48LAlQtLgCgLG43GChPwLBQGrlxYAqRx2Gg0VpgAaVwYuHJhCZDGYaPRWGECpHFh4MqFJUAah41GY4UJkMaFgVcqRxpXAq8sAqUJkMaliasXlQBRFjUZfZUm4FkoTVy9qARI46jJ6Ks0AdK4NHH1ohIgjaMmo6/SBEjj0sTVi0qANI6ajL5KEyCNSxOvU480rsNdVQSKEyCNiyNXMCgBoixoMNoqTsCzUBy5gkEJkMZBg9FWcQKkcXHkCgYlQBoHDUZbxQmQxsWRKxiUAGkcNBhtFSdAGhdHXqUgaVwFu6IIlCdAGpdnrmJMAkRZzFx0VZ6AZ6E8cxVjEiCNY+aiq/IESOPyzFWMSYA0jpmLrsoTII3LM1cxJgHSOGYuuipPgDQuz7xGRdK4BnU1EahAgDSuAF3JkASIspCxaKoCAc9CBehKhiRAGoeMRVMVCJDGFaArGZIAaRwyFk1VIEAaV4CuZEgCpHHIWDRVgQBpXAF6hZKkcQXoSiJQgwBpXIO6mhEJEGURU9FTDQKehRrU1YxIgDSOmIqeahAgjWtQVzMiAdI4Yip6qkGANK5BXc2IBEjjiKnoqQYB0rgG9fI1SePyzFVEoAoB0rgKdkUDEiDKAoaipSoEPAtVsCsakABpHDAULVUhQBpXwa5oQAKkccBQtFSFAGlcBbuiAQmQxgFD0VIVAqRxFezFi5LGxZEriEAdAqRxHe6qxiNAlMXLREd1CHgW6nBXNR4B0jheJjqqQ4A0rsNd1XgESON4meioDgHSuA53VeMRII3jZaKjOgRI4zrcS1cljUsTVw+BSgRI40rglQ1HgCgLF4mGKhHwLFQCr2w4AqRxuEg0VIkAaVwJvLLhCJDG4SLRUCUCpHEl8MqGI0Aah4tEQ5UIkMaVwBcuSxoXBq4cArUIkMa1yKsbjQBRFi0R/dQi4FmoRV7daARI42iJ6KcWAdK4Fnl1oxEgjaMlop9aBEjjWuTVjUaANI6WiH5qESCNa5EvW5c0LstbNQSqESCNq6FXOBgBoixYINqpRsCzUA29wsEIkMbBAtFONQKkcTX0CgcjQBoHC0Q71QiQxtXQKxyMAGkcLBDtVCNAGldDX7QwaVwUt2II1CNAGtdjr3IsAkRZrDx0U4+AZ6Eee5VjESCNY+Whm3oESON67FWORYA0jpWHbuoRII3rsVc5FgHSOFYeuqlHgDSux75kZdK4JG21EKhIgDSuCF/pUASIslBxaKYiAc9CRfhKhyJAGoeKQzMVCZDGFeErHYoAaRwqDs1UJEAaV4SvdCgCpHGoODRTkQBpXBF+wdKkcUHYSiFQkwBpXJO+2pEIEGWR0tBLTQKehZr01Y5EgDSOlIZeahIgjWvSVzsSAdI4Uhp6qUmANK5JX+1IBEjjSGnopSYB0rgm/XK1SeNyrFVCoCoB0rgqfsUDESDKAoWhlaoEPAtV8SseiABpHCgMrVQlQBpXxa94IAKkcaAwtFKVAGlcFb/igQiQxoHC0EpVAqRxVfzFipPGxVArhEBdAqRxXf6qxyFAlMXJQid1CXgW6vJXPQ4B0jhOFjqpS4A0rstf9TgESOM4WeikLgHSuC5/1eMQII3jZKGTugRI47r8S1UnjUuRVgeBygRI48oBKB+GAFEWJgqNVCbgWagcgPJhCJDGYaLQSGUCpHHlAJQPQ4A0DhOFRioTII0rB6B8GAKkcZgoNFKZAGlcOYBC5UnjQqCVQaA2AdK4dgLqRyFAlEVJQh+1CXgWaiegfhQCpHGUJPRRmwBpXDsB9aMQII2jJKGP2gRI49oJqB+FAGkcJQl91CZAGtdOoEx90rgMZ1UQqE6ANK4egQaCECDKggShjeoEPAvVI9BAEAKkcZAgtFGdAGlcPQINBCFAGgcJQhvVCZDG1SPQQBACpHGQILRRnQBpXD2CIg2QxkUwK4JAfQKkcf0MdBCDAFEWIwdd1CfgWaifgQ5iECCNY+Sgi/oESOP6GeggBgHSOEYOuqhPgDSun4EOYhAgjWPkoIv6BEjj+hmU6IA0LkFZDQQCECCNA4SghRAEiLIQMWgiAAHPQoAQtBCCAGkcIgZNBCBAGgcIQQshCJDGIWLQRAACpHGAELQQggBpHCIGTQQgQBoHCKFAC6RxAchKIBCBAGkcIQU9RCBAlEVIQQ8RCHgWIqSghwgESOMIKeghAgHSOEIKeohAgDSOkIIeIhAgjSOkoIcIBEjjCCnoIQIB0jhCCs33QBo3z1gFBEIQII1DxKCJAASIsgAhaCEEAc9CiBg0EYAAaRwgBC2EIEAah4hBEwEIkMYBQtBCCAKkcYgYNBGAAGkcIAQthCBAGoeIofEmSOPGESuAQAwCpHGMHHRRnwBRVj8DHcQg4FmIkYMu6hMgjetnoIMYBEjjGDnooj4B0rh+BjqIQYA0jpGDLuoTII3rZ6CDGARI4xg5NN0Fadw0YecjEIQAaRwkCG2MTeAvP3xV+u6NW8c+xwEIINBdAk8/48T00PWHdHdAk02UAGk8UZwOazEB0rjF4Wl9ogRI44nidFiLCZDGLQ5P6xMlQBpPFKfDWkyANG5xeCO0ThqPAMulCLSZAGnc5vT0fm8CpLF9QACBxQiQxosR8uv3JkAa2wcEMgHS2CYgkAmQxjYBgUyANLYJCGQCpLFNQCATII37sQmkcT9yNiUCiTS2BF0hsFcan3LCEWnN7IqRx9q1a1eam5tLMzMzI9/rhqUTuH3rjvTVjTelNbMz6ZQTHrj0g9w5MQJdfBau+vaWdOvt2xNpPLE16cVBpHEvYjbkEARI4yEguaQXBEjjXsRsyCEIkMZDQHJJLwiQxr2I2ZBDECCNh4DUgUtI4w6EaAQEhiFAGg9DyTVtIEAatyGl/XskjePlRhrHy0RHdQiQxnW4qxqPAGkcLxMd1SFAGtfhrmo8AqRxvEx0VIcAaVyHu6rxCJDG8TJpoiPSuAmqzkQgIAHSOGAoWloSAdJ4Sdiq30QaV49gvwZI43iZ6KgOAdK4DndV4xEgjeNloqM6BEjjOtxVjUeANI6XiY7qECCN63BXNR4B0jheJk10RBo3QdWZCAQkQBoHDEVLS+xFtxwAACAASURBVCJAGi8JW/WbSOPqEZDG8SLQURACpHGQILRRnQBpXD0CDQQhQBoHCUIb1QmQxtUj0EAQAqRxkCC0UZ0AaVw9giINkMZFMCuCQH0CpHH9DHQwGQKk8WQ4lj6FNC5NfPF63jRenJEr+kGANO5HzqZcnABpvDgjV/SDAGncj5xNuTgB0nhxRq7oBwHSuB85m3JxAqTx4oy6cAVp3IUUzYDAEARI4yEguaQVBEjjVsS0X5OkcbzcSON4meioDgHSuA53VeMRII3jZaKjOgRI4zrcVY1HgDSOl4mO6hAgjetwVzUeAdI4XiZNdEQaN0HVmQgEJNAlafwP/3Rd2nTDnelxjzo6HX3kwQFpa6lJApd9+Gvp+hvvTKeceERas3rFyKW6KMpGhlDhhjvv2pm+8s0b5zMbZOenPoEuPgtXfXtLuvX27enpZ5yYHrr+kPqQddAKAqRxK2LSZAECEaXx9p270wc/tjGtXDmdnnb6CQUoKIFASqSxLUAgEyCNbQICmQBpbBMQyARI435sAmncj5xNiUDqkjT+4Cc2pquvuTU99fQT0gnHPEC6PSPgTeN2Bu5N43i5kcbxMtFRHQKkcR3uqsYjEFEa371tV/rD93wpHbRyeXrpsx4RD5qOOkmANO5krIZaAgHSeAnQ3NJJAqRxJ2M11BIIkMZLgNbCW0jjFoamZQSWQoA0Xgo190QkQBpHTGXxnkjjxRmVvoI0Lk1cvagESOOoyeirNAHSuDRx9aISII2jJqOv0gRI49LE1YtKgDSOmoy+ShMgjUsTr1OvtdL4yiuvTK9+9avTK1/5yvSkJz1pH3q//Mu/nA455JB0wQUXpOuuuy6dddZZ6YorrqhDWFUEghAgjYMEoY2xCZDGYyOscgBpXAX7DyxKGsfLREd1CJDGdbirGo8AaRwvEx3VIUAa1+GuajwCpHG8THRUhwBpXIe7qvEIkMbxMmmio1ZL49/93d9N69evT29+85vvYbNx48Z03nnnpXXr1pHGTWyMM1tLgDRubXQavw8B0ridK0Eax8uNNI6XiY7qECCN63BXNR4B0jhWJrffuSNtvPaWtH3H7nT8hgekIw9bHavBgN1svObWdOMtd6W1B69MJ2x4QFq5YnpJXTYpjSfV45IGW8JNg/3beO2t6fY7t8/v4GAX7/2z2K8voaRbAhEgjQOFoZWqBEjjqvgbLb755rvS1dfeOv9nhpOPP2LJf3ZotMlAh5PGgcJosJVWS+PLL788bdq0KV100UXpsMMOm8f0R3/0R2nLli3phhtuII0bXBxHt48Aady+zHR8/wRI43ZuBmkcLzfSOF4mOqpDgDSuw13VeARI4ziZXPu9O9J7r/j6Pg099tQHp8c+4sFxmgzWyZ/9zVfTjbfcfU9Xaw9ekZ73cycv6T/+NiWNJ9ljCfwDIXz5FV9LN978fa4PPGzVPNfBz+DX/+Sv/nn+/937s37dmvTMJz2sRHtqFCBAGheArEQrCJDGrYhp5CY/8n+/nf716i333DcQx4N/xw3+DOHn/gmQxv3YjFZL48suuywdd9xx6aijjkrPeMYz0tzcXHr+85+fXvziF6f3v//9pHE/dtiUQxLokjT+m09sTIO/of2whxyWDjvkoCEJuKwrBL7yzRvTnXftTKeccERaMzv6H+S6KMrakO0gs0F2B6+eST964gPb0HLne+zis3DVt7ekW2/fnh523GHpsLX+/dD5JZ7QgDt37kxTU1Np+fLlEzrRMQi0k8COHTvS9PT0/P9F+dm5a0/6wle/l1atXJ7OftYjorTVeB+Xf+TradMNd+xX59wX/HjjtdtY4P4k+2COn3r0hvSoHzlq5JGakMaT7nHkoZZww5X/ekP6P5+/dr87z3zSw9KGdWvSZ750ffrMl68/4K8voaRbghEgjYMFop1qBEjjaugbKzz4RJfBX3y6788jf/jIdPppxzRWt+0Hk8ZtT3C4/lsvjV/0ohfNv2l88cUXp3/5l39Jf/7nf56e/exnp0suuYQ0Hm4HXNUTAl2Sxh/8xMZ09TW39iQ5Yx6IAGncrt3wpnG8vLosjePR1hECCCCAwDgEDlq5PL2UNE6k8f1v0YHk5VLfzm5CGk+6x3Gep2HvXaxn0nhYku29jjRub3Y6nywB0niyPCOcdqC/zLX+qDXpmU/2iRkHyog0jrC9zffQemk8+D7jF77whekNb3jD/NvFJ5100vybx6Rx88ujQrsIdEkae9O4Xbs36W69aTxpomXO86ZxGc6jVOmyNPam8Sib4FpvGtsBBDIBbxrH2QRvGo+WxaTf4m1CGk+6x9EILe1qbxovjVuX7iKNu5SmWcYhQBqPQy/mvd40XloupPHSuLXtrk5I43e9611pZmYmffjDH05vf/vb08aNG0njtm2ifhsn0CVpvPdN46eefkI64ZgHNM5OgVgEfKdxrDyG7cabxsOSKnddl6Xx0884MT10/SHlYKrUagK+07jV8Wl+ggR8p/EEYY55lO80Hh3gfb8vePA1Ns9/auzvNB6nx9EJjX7H/Hcaf+Rr+3xX9AMPXZWe99Tvf6fxH7/vn9OOnff6TmNvaI0OOvAdpHHgcLRWlABpXBR3sWL3/U7jFTPT83928J3GB46ANC62nlULdUIaX3vttelVr3pV+uEf/uF0/vnnpy9/+cukcdW1UjwiAdI4Yip6WgoB0ngp1OrfQxrXz+C+HZDG8TLRUR0CpHEd7qrGI0Aax8pk8AbMxmtuSQNxd/wxD0hHHrY6VoMBu9l4za3pxpvvmv+PvSccc2hauWJp38/dxJvGe3FNqsdS+Af7N9jDwT4+8LDV+/2l7cV+vVSf6jRDgDRuhqtT20eANG5fZsN2PPiLepu+d8f8nxlOPuGIJf/ZYdh6bb+ONG57gsP13wlpPBj17LPPnv8u4yc84Qmk8XDZu6pnBEjjngXe4XFJ43aGSxrHy400jpeJjuoQII3rcFc1HgHSOF4mOqpDoElpXGciVRFYGgHSeGnc3NU9AqRx9zI10dIIkMZL49a2u1orjdsGWr8I1CZAGtdOQP1JESCNJ0Wy7DmkcVnew1QjjYeh5Jo+ECCN+5CyGYchQBoPQ8k1fSBAGvchZTMOQ4A0HoaSa/pAgDTuQ8pmHIYAaTwMpfZfQxq3P0MTIDAUAdJ4KEwuagEB0rgFId1Pi6RxvNxI43iZ6KgOAdK4DndV4xEgjeNloqM6BEjjOtxVjUeANI6XiY7qECCN63BXNR4B0jheJk10RBo3QdWZCAQk0CVp/A//dF3adMOd6XGPOjodfeTBAWlrqUkCl334a+n6G+9Mp5x4RFqzesXIpbooykaGUOGGO+/amb7yzRvnMxtk56c+gS4+C1d9e0u69fbt6elnnJgeuv6Q+pB10AoCpHErYtJkAQIRpfH2nbvTBz+2Ma1cOZ2edvoJBSgogUBKpLEtQCATII1tAgKZAGlsExDIBEjjfmwCadyPnE2JQOqSNBZnvwl407id+XvTOF5upHG8THRUhwBpXIe7qvEIRJTG8SjpqA8ESOM+pGzGYQiQxsNQck0fCJDGfUjZjMMQII2HodT+a0jj9mdoAgSGIkAaD4XJRS0gQBq3IKT7aZE0jpcbaRwvEx3VIUAa1+GuajwCpHG8THRUhwBpXIe7qvEIkMbxMtFRHQKkcR3uqsYjQBrHy6SJjkjjJqg6E4GABEjjgKFoaUkESOMlYat+E2lcPYL9GiCN42WiozoESOM63FWNR4A0jpeJjuoQII3rcFc1HgHSOF4mOqpDgDSuw13VeARI43iZNNERadwEVWciEJAAaRwwFC0tiQBpvCRs1W8ijatHQBrHi0BHQQiQxkGC0EZ1AqRx9Qg0EIQAaRwkCG1UJ0AaV49AA0EIkMZBgtBGdQKkcfUIijRAGhfBrAgC9QmQxvUz0MFkCJDGk+FY+hTSuDTxxet503hxRq7oBwHSuB85m3JxAqTx4oxc0Q8CpHE/cjbl4gRI48UZuaIfBEjjfuRsysUJkMaLM+rCFaRxF1I0AwJDECCNh4DkklYQII1bEdN+TZLG8XIjjeNloqM6BEjjOtxVjUeANI6XiY7qECCN63BXNR4B0jheJjqqQ4A0rsNd1XgESON4mTTREWncBFVnIhCQAGkcMBQtLYnAXmm8pJvdhAACvSDw9DNOTA9df0gvZjXk+ARI4/EZOqEbBEjjbuRoivEJkMbjM3RCNwiQxt3I0RTjEyCNx2fohG4QII27keNiU5DGixHy6wh0hABp3JEgjZFIY0uAAAKLESCNFyPk1+9NgDS2DwhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgQSaWwJEMgEtm3blubm5tKqVasgQaDXBDwLvY7f8PciQBpbBwQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjfuxCaRxP3I2JQKksR1AYIEAUWYVEMgEPAs2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgRIYzuAwAIBoswqIJAJeBZsAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxnYAgQUCRJlVQCAT8CzYBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAadyPTSCN+5GzKREgje0AAgsEiDKrgEAm4FmwCQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGtsEBDIB0rgfm0Aa9yNnUyJAGtsBBBYIEGVWAYFMwLNgExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpHE/NoE07kfOpkSANLYDCCwQIMqsAgKZgGfBJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgESON+bAJp3I+cTYkAaWwHEFggQJRZBQQyAc+CTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMb92ATSuB85mxIB0tgOILBAgCizCghkAp4Fm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpLFNQCATII37sQmkcT9yNiUCpLEdQGCBAFFmFRDIBDwLNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgESGObgEAmQBr3YxNI437kbEoESGM7gMACAaLMKiCQCXgWbAICmQBpbBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDTuxyaQxv3I2ZQIkMZ2AIEFAkSZVUAgE/As2AQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpLFNQCATII1tAgKZAGncj00gjfuRsykRII3tAAILBIgyq4BAJuBZsAkIZAKksU1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdK4H5tAGvcjZ1MiQBrbAQQWCBBlVgGBTMCzYBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqRxPzaBNO5HzqZEgDS2AwgsECDKrAICmYBnwSYgkAmQxjYBgUyANLYJCGQCpLFNQCATII1tAgKZAGlsExDIBEjjfmwCadyPnE2JAGlsBxBYIECUWQUEMgHPgk1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdLYJiCQCZDG/dgE0rgfOZsSAdLYDiCwQIAoswoIZAKeBZuAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqSxHUBggQBRZhUQyAQ8CzYBgUyANLYJCGQCpLFNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa92MTSON+5GxKBEhjO4DAAgGizCogkAl4FmwCApkAaWwTEMgESGObgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA07scmkMb9yNmUCJDGdgCBBQJEmVVAIBPwLNgEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBp3I9NII37kbMpESCN7QACCwSIMquAQCbgWbAJCGQCpLFNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHSuB+bQBr3I2dTIkAa2wEEFggQZVYBgUzAs2ATEMgESGObgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKkcT82gTTuR86mRIA0tgMILBAgyqwCApmAZ8EmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBpbBMQyARI435sAmncj5xNiQBpbAcQWCBAlFkFBDIBz4JNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxv3YBNK4HzmbEgHS2A4gsECAKLMKCGQCngWbgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjfuxCaRxP3I2JQKksR1AYIEAUWYVEMgEPAs2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgRIYzuAwAIBoswqIJAJeBZsAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxnYAgQUCRJlVQCAT8CzYBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAadyPTSCN+5GzKREgjfuwAzu2pd1ve1kfJjUjAo0SWPa0X09Txz+y0RoRDieNI6SghwgESOMIKeghAgHSOEIKeohAgDSOkIIeIhAgjSOkoIcIBEjjCCnoIQIB0jhCCs33QBo3z1gFBEIQ2L59e9q1a1eanZ0N0Y8mGiBAGjcA1ZF9JEAa9zF1M/eZAGnc5/TNfm8CpLF9QCATII1tAgKZAGlsExDIBEhjm4BAJkAa92MTSON+5GxKBLxp3Icd2CuNp6fT1Gk/24eJlzTj4C9PzM3NpZmZmSXdv/emuW98IaUt16epE38spSOOHussNwch8PV/THM3fy+RxkHy0AYChQiQxoVAKxOeAGkcPiINFiJAGhcCrUx4AqRx+Ig0WIgAaVwItDLhCZDG4SOaSIOk8UQwOgSB+AS8aRw/o7E7JI2HQkgaD4WpnxeRxv3M3dS9J0Aa934FAFggQBpbBQQyAdLYJiCQCZDGNgGBTIA0tgkIZAKkcT82gTTuR86mRMCbxn3YAdJ4qJRJ46Ew9fMi0rifuZu69wRI496vAAALBEhjq4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxn3YAdJ4qJRJ46Ew9fMi0rifuZu69wRI496vAAALBEhjq4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxn3YAdJ4qJRJ46Ew9fMi0rifuZu69wRI496vAAALBEhjq4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxn3YAdJ4qJRJ46Ew9fMi0rifuZu69wRI496vAAALBEhjq4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlIsQmPvM36Q9116Vlj32aWlqww91ktf27dvTQJbNzs52cj5DpZR2bku7f/9lKU0vT1On/QwkByAwcWl80o+ndPiD8e4AgbmvfS6lW25Iy572n9PU8Y/owEQ/eIRt27alubm5tGrVqs7PasCOE7h1c9r90UvS1KHr0rL/+IKRhyWNR0bmho4SII07GqyxRiZAGo+MzA0dJUAadzRYY41MgDQeGZkbOkqANO5osPcZizTuR86mXITAng/9rzT3jc+nZT/7kjT1sNM6yYs07mSs+w7lTeOhQp64ND7xx1I64uiharsoOAFvGgcPSHsIHIDA5mvS7j//nZQeuCFNP+91I2MijUdG5oaOEiCNOxqssUYmQBqPjMwNHSVAGnc0WGONTIA0HhmZGzpKgDTuaLCkcT+CNeVoBEjj0Xi5OigB0nioYEjjoTD18yLSuJ+5m7r9BEjj9mdoghAESOMQMWgiAAHSOEAIWghBgDQOEYMmAhAgjQOEoIUQBEjjEDE03kTr3zR+1rOelc4777x0yimnpHPOOScNPmrxD/7gD9KyZcvm4Q3+sP9Lv/RL6QMf+EDjMBVoLwHSuL3Z6fxeBEjjodaBNB4KUz8vIo37mbup20+ANG5/hiYIQYA0DhGDJgIQII0DhKCFEARI4xAxaCIAAdI4QAhaCEGANA4RQ+NNdE4a33jjjek5z3lO+tmf/VnSuPH16U4B0rg7WfZ6EtJ4qPhJ46Ew9fMi0rifuZu6/QRI48lluPmaNHf1l1JauSpNnfDIlNYeMbmzBydN6vztd6W5jf+U0u1bUjpyQ5o6/pGT7bOnp5HGPQ3e2PsRaLU07tPvj/f+d8rJj0tp5WrbPGECpPGEgE7qzz8TascxoxMgjUdn5o5uEiCNu5nrfafqnDR+8pOfnC655JL0jne8I83OznrTuB97PPaUpPHYCB0QgQBpPFQKpPFQmPp5EWncz9xN3X4CpPFEMpz76t+nPVe8Y5+zlj3117M8nsDP3JX/X9rzfy4b//zbb0q7/+x1KW2/+56zBtJ42dN+fQJd9vsI0rjf+Zv++wRaK42335V2/8lv7fv74/qHpWXP/K3OxbvnI3+a5v71H74/18pVafp5r5v8X3bqHLnRBiKNR+N1f1fv+cwH09xn/mbfP/+c+ao0teGHxj/cCcUIkMbFUCsUnABpHDygCbXXOWn84he/OH3iE59Iy5cvT2effTZpPKFF6foxe/72f6W5r38+TZ34YykdcXQnxx2Isj179qQVK1Z0cj5DpZR270pz//jhlJYtT1M/8TOQHIDA5KXxj6d0xIPx7gCBua99LqVbbkhTDzstpcPWdWCiHzzCpJ6FzoMyYHwCW29Lc//8yZSOPCZN/9L5I/d71113penp6bRy5cqR7+3SDbv/+LdSumPLviM9cEP+j/AT+Nn9tl9Pacf3Re/8ketPStPPfPVIp9/ff3wdHDCf/ZHHjHSWi/clQBrbCAQygbZK4wP9/risa4Jq8JeH/mT/f3dMPfKJadnpz7bGEyRAGo8Pc/fvvWj/Q5bw55/xO3HCOARI43HoubdLBEjjLqV54Fk6KY2PPfbYdNZZZ6W3vvWt6bDDDvOdxv3Y5bGm3Pum8ViHuBmBKASmp9PUafkj+v3sT2BSomzuG19Iacv1nf7LJr3bn4U3jXs3t4ER6AqBJQpO0jgvwP3+R82BjD33TyeyIZM6f/flb0pp0zf266lzUmQi1Ec7hDQejZeru0uANI6d7dy1X0t73vuW/Zsk4iYeHGk8PlLSeHyGEU4gjSOkoIcIBEjjCCk030MnpfEpp5ySPvCBD6TPfe5z6b/+1/9KGje/R62v4E3j1kdogPn/2utN42EWYfLS2JvGw3BvwzXeNG5DSnpE4H4IeNN4ImvhTeOJYGz1IaRxq+PT/AQJkMYThNnEUd40boLq/Z5JGo+PmjQen2GEE0jjCCnoIQIB0jhCCs330FlpvHv37vSrv/qr6XnPe1664IIL5iWyHwQORMB3GtuNThDwncZDxTh5adzdj7UfCmiXLvKdxl1K0yx9IuA7jSeSdqu+0/jS1+3zUddTxz8iLXvaf54Ihz4fQhr3OX2z35tAW6VxGnyn8eCrBu79VQAdfft2v+80XrEqTT/fdxpP+kkmjccn6juNx2cY4QTSOEIKeohAgDSOkELzPXRWGg/QfeELX0gXXXRRGvzGTho3v0xtrkAatzk9vd9DgDQeahlI46Ew9fMi0rifuZu6/QRI48lluPmatOfqf0pTK1enqRMemdLaIyZ39uCkSZ2//a40t/Gf0tztN6WpBx6Te/UzNgHSeGyEDugIgdZK4wH/Hv3+OPiY6rlNX8//zjr5cSmtXN2RDYwzBmk8oSwm9eefCbXjmNEJkMajM3NHNwmQxt3M9b5TdVoaD4Z97Wtfm77yla+Qxv3Y5yVPSRovGZ0bIxEgjYdKgzQeClM/LyKN+5m7qdtPgDRuf4YmCEGANA4RgyYCEGi1NA7ATwvdIUAadydLk4xHgDQej5+7u0OANO5Olj9oktZL437EZMqmCZDGTRN2fhECpPFQmEnjoTD18yLSuJ+5m7r9BEjj9mdoghAESOMQMWgiAAHSOEAIWghBgDQOEYMmAhAgjQOEoIUQBEjjEDE03gRp3DhiBdpAgDRuQ0p6XJQAabwoosEFpPFQmPp5EWncz9xN3X4CpHH7MzRBCAKkcYgYNBGAAGkcIAQthCBAGoeIQRMBCJDGAULQQggCpHGIGBpvgjRuHLECbSAw95m/SXuuvSote+zT0tSGH2pDyyP3uH379nlZNjs7O/K9bmgJgZ3b0u7ff1lK08vT1Gk/05Kmy7c5cWl80o+ndPiDyw+i4sQJzH3tcyndckNa9rT/nKaOf8TEz4924LZt29Lc3FxatWpVtNb0g8BoBG7dnHZ/9JI0dei6tOw/vmC0e1NKd911V5qenk4rV64c+V43INAlAqRxl9I0yzgESONx6Lm3SwRI4y6laZZxCJDG49Bzb5cIkMZdSvPAs5DG/cjZlAgk0rgHS+BN46FCnrg0PvHHUjri6KFquyg4AW8aBw9Iewg0Q4A0boarU9tHgDRuX2Y6boYAadwMV6e2jwBp3L7MdNwMAdK4Ga5ObR8B0rh9mS2lY9J4KdTcg0ALCZDGLQxt1JZJ46GIkcZDYernRaRxP3M3de8JkMa9XwEAFgiQxlYBgUyANLYJCGQCpLFNQCATII1tAgKZAGncj00gjfuRsykR8KZxH3aANB4qZdJ4KEz9vIg07mfupu49AdK49ysAwAIB0tgqIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqRxH3aANB4qZdJ4KEz9vIg07mfuSUK/igAAIABJREFUpu49AdK49ysAwAIB0tgqIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqRxH3aANB4qZdJ4KEz9vIg07mfupu49AdK49ysAwAIB0tgqIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqRxH3aANB4qZdJ4KEz9vIg07mfupu49AdK49ysAwAIB0tgqIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqRxH3ZgrzTuw6xmRKBBAsue9utp6vhHNlghxtHbtm1Lc3NzadWqVTEa0gUClQiQxpXAKxuOAGkcLhINVSJAGlcCr2w4AqRxuEg0VIkAaVwJvLLhCJDG4SJppCHSuBGsDkUgHoHt27enwRuWs7Oz8ZrT0WQIkMaT4eiU3hMgjXu/AgD0jABp3LPAjXtAAqSx5UAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgS8aWwHEFgg4O1Kq4BAJuBZsAkIZAKksU1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdK4H5tAGvcjZ1MiQBrbAQQWCBBlVgGBTMCzYBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqRxPzaBNO5HzqZEgDS2AwgsECDKrAICmYBnwSYgkAmQxjYBgUyANLYJCGQCpLFNQCATII1tAgKZAGlsExDIBEjjfmwCadyPnE2JAGlsBxBYIECUWQUEMgHPgk1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdLYJiCQCZDG/dgE0rgfOZsSAdLYDiCwQIAoswoIZAKeBZuAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCN+7EJpHE/cjYlAqSxHUBggQBRZhUQyAQ8CzYBgUyANLYJCGQCpLFNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa92MTSON+5GxKBEhjO4DAAgGizCogkAl4FmwCApkAaWwTEMgESGObgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA07scmkMb9yNmUCJDGdgCBBQJEmVVAIBPwLNgEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBp3I9NII37kbMpESCN7QACCwSIMquAQCbgWbAJCGQCpLFNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHSuB+bQBr3I2dTIkAa2wEEFggQZVYBgUzAs2ATEMgESGObgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKkcT82gTTuR86mRIA0tgMILBAgyqwCApmAZ8EmIJAJkMY2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBpbBMQyARI435sAmncj5xNiQBpbAcQWCBAlFkFBDIBz4JNQCATII1tAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxv3YBNK4HzmbEgHS2A4gsECAKLMKCGQCngWbgEAmQBrbBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjfuxCaRxP3I2JQKksR1AYIEAUWYVEMgEPAs2AYFMgDS2CQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGvdjE0jjfuRsSgRIYzuAwAIBoswqIJAJeBZsAgKZAGlsExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANO7HJpDG/cjZlAiQxnYAgQUCRJlVQCAT8CzYBAQyAdLYJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAadyPTSCN+5GzKREgje0AAgsEiDKrgEAm4FmwCQhkAqSxTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGtsEBDIB0rgfm0Aa9yNnUyJAGtsBBBYIEGVWAYFMwLNgExDIBEhjm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpHE/NoE07kfOpkSANLYDCCwQIMqsAgKZgGfBJiCQCZDGNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgESON+bAJp3I+cTYkAaWwHEFggQJRZBQQyAc+CTUAgEyCNbQICmQBpbBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMb92ATSuB85mxIB0tgOILBAgCizCghkAp4Fm4BAJkAa2wQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpLFNQCATII37sQmkcT9yNiUCpLEdQGCBAFFmFRDIBDwLNgGBTIA0tgkIZAKksU1AIBMgjW0CApkAaWwTEMgESGObgEAmQBr3YxNI437kbEoESGM7gMACAaLMKiCQCXgWbAICmQBpbBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDTuxyaQxv3I2ZQIkMZ2AIEFAkSZVUAgE/As2AQEMgHS2CYgkAmQxjYBgUyANLYJCGQCpLFNQCATII1tAgKZAGncj00gjfuRsykRII3tAAILBIgyq4BAJuBZsAkIZAKksU1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdK4H5tAGvcjZ1MiQBrbAQQWCBBlVgGBTMCzYBMQyARIY5uAQCZAGtsEBDIB0tgmIJAJkMY2AYFMgDS2CQhkAqRxPzaBNO5HzqZEgDS2AwgsECDKrAICmYBnwSYgkAmQxjYBgUyANLYJCGQCpLFNQCATII1tAgKZAGlsExDIBEjjfmwCadyPnE2JAGlsBxBYIECUWQUEMgHPgk1AIBMgjW0CApkAaWwTEMgESGObgEAmQBrbBAQyAdLYJiCQCZDG/dgE0rgfOZsSAdLYDnSGwDu/8dn0mRu+1Zl5DIJAFwgcvnI2/ffTntaFUczQQwKkcQ9DN/L9EiCNLQYCmQBpbBMQyARIY5uAQCZAGtsEBDIB0rgfm0Aa9yNnUyJAGtuBzhAgjTsTpUE6RIA07lCYPRyFNO5h6Ea+XwKkscVAIBMgjW0CApkAaWwTEMgESGObgEAmQBr3YxNI437kbEoESGM70BkCe6XxqYevTxtmDx15rl27dqW5ubk0MzMz8r19uuH2HXenT31vY1qz4qD0k+tO7NPovZl1Es/C1l070ieu/3oijXuzNp0clDTuZKyGWgIB0ngJ0NzSSQKkcSdjNdQSCJDGS4Dmlk4SII07GauhlkCANF4CtBbeQhq3MDQtI7AUAtu3b08DQTA7O7uU292DQBgCpHGZKEjjMpxrViGNa9JXOxIB0jhSGnqpSYA0rklf7UgESONIaeilJgHSuCZ9tSMRII0jpaGXmgRI45r0y9UmjcuxVgmBqgRI46r4FZ8gAdJ4gjB/wFGkcRnONauQxjXpqx2JAGkcKQ291CRAGtekr3YkAqRxpDT0UpMAaVyTvtqRCJDGkdLQS00CpHFN+uVqk8blWKuEQFUCpHFV/IpPkABpPEGYpHEZmEGrkMZBg9FWcQKkcXHkCgYlQBoHDUZbxQmQxsWRKxiUAGkcNBhtFSdAGhdHrmBQAqRx0GAm3BZpPGGgjkMgKgHSOGoy+hqVAGk8KrGlXe9N46Vxa9NdpHGb0tJrkwRI4ybpOrtNBEjjNqWl1yYJkMZN0nV2mwiQxm1KS69NEiCNm6Tr7DYRII3blNbSeyWNl87OnQi0igBp3Kq4NPsDCJDGZdaDNC7DuWYV0rgmfbUjESCNI6Whl5oESOOa9NWORIA0jpSGXmoSII1r0lc7EgHSOFIaeqlJgDSuSb9cbdK4HGuVEKhKoO3S+MtbNqX/77qvpUcevj6dcfQPVWWpeF0C7/rGZ9M/3PCtdOrh69OG2UNHbmYSomzkoi284Y6d29Inv/vNtHbmoPSEB53Ywgm0vBiBSTwLd+3akT5+/dfTEQcdnN7w6KcuVtKvIxCSAGkcMpZONvWJ67+RvnjTNen0B5+UfuyIY8LNSBqHi0RDlQiQxpXAKxuOAGkcLhINVSJAGlcCr2w4AqRxuEgaaYg0bgSrQxGIR6Dt0nggr/5i4+fTEx50QnruCafFA6yjYgS8aVwGtTeNy3CuWWUS0njrrh3pE9d/PR2+cjb999OeVnMctRFYMgHSeMno3Dgigfdc/cX5v2jzzIc+KuRfgiSNRwzU5Z0lQBp3NlqDjUiANB4RmMs7S4A07my0BhuRAGk8IrCWXk4atzQ4bSMwKgHSeFRiro9KgDQukwxpXIZzzSqkcU36akciQBpHSqPbvZDG3c7XdN0hQBp3J0uTjEeANB6Pn7u7Q4A07k6WJhmPAGk8Hr+23N0ZafysZz0rnXfeeemUU05J55xzTnrKU56SnvjEJ7YlB30i0DgB0rhxxAoUIkAalwFNGpfhXLMKaVyTvtqRCJDGkdLodi+kcbfzNV13CJDG3cnSJOMRII3H4+fu7hAgjbuTpUnGI0Aaj8evLXeTxm1JSp8IjEmANB4ToNvDECCNy0RBGpfhXLMKaVyTvtqRCJDGkdLodi+kcbfzrTHdXbt2pC9v2ZS2bN+a1s8emh5x+PoabdxvzWu33jLf26rpFekRR6yf/yqLtvz0WRq3NbfIz0Jb9v7++uyCNO7Lbnxpy6a0aest87/Xnnr4+rR6+Yo2r1643knjcJFoqBIB0rgS+MJlSePCwJVDoBYB0rgWeXUnTYA0njTR+z+PNC7DuWYV0rgmfbUjESCNI6XR7V5I427nW3q6gQh56z9/bF4S7P0ZiOPXPuqnS7eyX729u773F1ZNz6RXnPrEtGH20Oq9DdNAX6Xxx677Wrr8W1fug+jsH3lCqL+McH/5Df7SxP/zxQ+nu3fvvOeXB3+BYtD7/9/enUDrVP1/HP8aLnINmQv5KaJaNGcoq0ISydBAIc0pCZUKUZnLPDaqlUTqJkqD6uevVEjJPKVlSBQlU9cylf/a+7/u/XPd+7ie5zn77H32+1nrt37Vfc7Z3/36nuN47ufZ5/BKTMD10Di7Y6NuubPkzmp1EoOxbOs3fpov87dtyKxK/Znb55KmTn1ZxzLS48ohNLa9Q9RnSoDQ2JR0uOMQGofrz+gIGBOISmj8nyIlpWbJCsbcGMg+gYxv0Kpvz8bzi6dkBGX2qSS/oj2H9svc39ZJsZRCcuXpZyd/APYYukAyzoX0wwdlzta1on4x0bDCOaHPiQIQiEfg0KFDkidPHsmfP388m7MNArkWWLlzq2zYu0Nan3WxlX9mpqenS0pKihQowOqkXDc1xDdmF/Cpch49v6FUL14utMpUmP3I/PeOG79uuTPlzmp1Q6vrZAb2NTTuNi/tmOBVmZ1dvKx0P9/uR7/N3LRcPvpl+XEt7n1xk7g+L57MsRL197oeGvtwbKhgvNfCD447FBuUry5tqlwS9UPU2PwIjY1RM5DlAoTGljcoSeURGicJkt0gYLtAVEJj252pz5wAoXGw1qw0DtbXhr0nMzS2YT7UgAACCLgiQGjsSqfsrjOnMKRZpZpyw39qhlb82t3bZMSy2ceN70L4mFG0r6Fxx6+nHNe3kgVTZXCtFqEdT7kZOOsqy4xtwv4CRW5qt/09rofGw5b9V9bt3n4cc5SOjSj8mWv7eaDqIzR2oUvUaEKA0NiEcvhjEBqH3wMqQMCIQFRCY1YaGzlcrB6ElcZm2sNKYzPOYY6SzNCYlcZhdpKxExVgpXGigmyfWwFWGudWivflRoCVxrlRiu89vobGrDSO73iJ8lauh8asNGalcbLOT0LjZEmyH9cFCI1d72Du6ic0zp0T70LAeYGohMZXnl5V2lWt5Xw/mED8AjzTOH67k9mSlcYno+Xme5MZGpcqmCqDLF+F4maXqNqEAM80NqHMGEqAZxpzHCRT4P+eafxf+TV9V+ZuK6aeKn0ubprMYeLaF880jost9I2i9ExjdVeqTjzTOOFjyvXQOPtnGrtzq/zcNpBnGudWKv73ERrHb8eW0RIgNI5WP3OaDaGxH31mlggIoTEHQVQECI3NdJLQ2IxzmKMQGoepz9g2CRAa29SNaNdCaBzt/oYxOxUcq7vw7NifLmcUKSEXlqoYRhnZjrk5facs+fNXKZw/RS4sfYaoL5i58vJ1pbHqj6t9s/lccOW4z65O10NjNSdfjg11Ldj8904pVShVXwsK5y/g8qFnXe2Exta1hIJCEiA0Dgne8LCRDY1XrVolefLkyeRs06aN3H333YZ5GQ4BewQIje3pBZUkJkBonJhfbrcmNM6tlLvvIzR2t3dUnlwBQuPkerK3nAUIjTk6EHBDwOfQ2I0OUaUpgSiExqasGCfaAoTG0e4vs8u9AKFx7q1cfmdkQmOXm0DtCJgQIDQ2ocwYJgQIjU0oixAam3EOcxRC4zD1GdsmAUJjm7oR7VoIjaPdX2YXHQFC4+j0kpkkJkBonJgfW0dHgNA4Or1kJokJEBon5ufK1oTGrnSKOhFIUIDQOEFANrdGgNDYTCsIjc04hzkKoXGY+oxtkwChsU3diHYthMbR7i+zi44AoXF0eslMEhMgNE7Mj62jI0BoHJ1eMpPEBAiNE/NzZWtCY1c6RZ0IJCjgemi8dMev8sWWNXJRqYrSsMI5CWqwucsCE39aIPO2rZcLSlWUM1JLnPRUkhGUnfSgDm6w99B++eq3dVIspZBcefrZDs6Akk8kkIxzQT0j7H+2rpXShYrIwMuan2hIfo6AlQKExla2JZJFzdn6kyz68xepX76aXFK6knVzTE9Pl5SUFClQgOcgWtccCjIqQGhslJvBLBYgNLa4OZRmVIDQ2Cg3g1ksQGhscXOSWBqhcRIx2RUCNgu4HhrbbEttZgVYaWzGm5XGZpzDHCUZoXH64YMyZ+taKVUwVQbVahHmdBgbgbgFCI3jpmPDiAkQGkesoUwnbgFC47jp2DBiAoTGEWso04lbgNA4bjo2jJgAoXHEGprDdAiN/egzs0RACI05CKIiQGhsppOExmacwxyF0DhMfca2SYDQ2KZuUEuYAoTGYeoztk0ChMY2dYNawhQgNA5Tn7FtEiA0tqkb1BKmAKFxmPrmxiY0NmfNSAiEKkBoHCo/gydRgNA4iZgxdkVobMY5zFEIjcPUZ2ybBAiNbeoGtYQpQGgcpj5j2yRAaGxTN6glTAFC4zD1GdsmAUJjm7pBLWEKEBqHqW9ubEJjc9aMhECoAoTGofIzeBIFCI2TiElobAbT0lEIjS1tDGUZFyA0Nk7OgJYKEBpb2hjKMi5AaGycnAEtFSA0trQxlGVcgNDYODkDWipAaGxpY5JcFqFxkkHZHQK2ChAa29oZ6jpZAULjkxWL7/2sNI7PzaWtCI1d6ha1BilAaBykLvt2SYDQ2KVuUWuQAoTGQeqyb5cECI1d6ha1BilAaBykLvt2SYDQ2KVuxV8roXH8dmyJgFMChMZOtYtiYwgQGps5PAiNzTiHOQqhcZj6jG2TAKGxTd2gljAFCI3D1GdsmwQIjW3qBrWEKUBoHKY+Y9skQGhsUzeoJUwBQuMw9c2NTWhszpqREAhVgNA4VH4GT6JARmicxF2yKwQQSFCgVMFUGVSrRYJ7YXMEwhEgNA7HnVHtEyA0tq8nVBSOAKFxOO6Map8AobF9PaGicAQIjcNxZ1T7BAiN7etJEBURGgehyj4RsFCA0NjCplBSXAKExnGxsRECgQoQGgfKy84DFiA0DhiY3TsjQGjsTKsoNGABQuOAgdm9MwKExs60ikIDFiA0DhiY3TsjQGjsTKsSKpTQOCE+NkbAHQFCY3d6RaXBCuzfv1+OHDkip5xySrADsXcELBfgXLC8QZRnTIDQ2Bg1A1kuQGhseYMoz5gAobExagayXIDQ2PIGUZ4xAUJjY9QMZLkAobHlDUpSeYTGSYJkNwjYLkBobHuHqM+UAEGZKWnGsV2Ac8H2DlGfKQFCY1PSjGO7AKGx7R2iPlMChMampBnHdgFCY9s7RH2mBAiNTUkzju0ChMa2dyg59REaJ8eRvSBgvQChsfUtokBDAgRlhqAZxnoBzgXrW0SBhgQIjQ1BM4z1AoTG1reIAg0JEBobgmYY6wUIja1vEQUaEiA0NgTNMNYLEBpb36KkFEhonBRGdoKA/QKExvb3iArNCBCUmXFmFPsFOBfs7xEVmhEgNDbjzCj2CxAa298jKjQjQGhsxplR7BcgNLa/R1RoRoDQ2Iwzo9gvQGhsf4+SUSGhcTIU2QcCDggQGjvQJEo0IkBQZoSZQRwQ4FxwoEmUaESA0NgIM4M4IEBo7ECTKNGIAKGxEWYGcUCA0NiBJlGiEQFCYyPMDOKAAKGxA01KQomExklAZBcIuCBAaOxCl6jRhABBmQllxnBBgHPBhS5RowkBQmMTyozhggChsQtdokYTAoTGJpQZwwUBQmMXukSNJgQIjU0oM4YLAoTGLnQp8RoJjRM3ZA8IOCFAaOxEmyjSgABBmQFkhnBCgHPBiTZRpAEBQmMDyAzhhAChsRNtokgDAoTGBpAZwgkBQmMn2kSRBgQIjQ0gM4QTAoTGTrQp4SIJjRMmZAcIuCFAaOxGn6gyeAGCsuCNGcENAc4FN/pElcELEBoHb8wIbggQGrvRJ6oMXoDQOHhjRnBDgNDYjT5RZfAChMbBGzOCGwKExm70KdEqCY0TFWR7BBwRIDR2pFGUGbgAQVngxAzgiADngiONoszABQiNAydmAEcECI0daRRlBi5AaBw4MQM4IkBo7EijKDNwAULjwIkZwBEBQmNHGpVgmYTGCQKyOQKuCBAau9Ip6gxagKAsaGH274oA54IrnaLOoAUIjYMWZv+uCBAau9Ip6gxagNA4aGH274oAobErnaLOoAUIjYMWZv+uCBAau9KpxOokNE7Mj60RcEaA0NiZVlFowAIEZQEDs3tnBDgXnGkVhQYsQGgcMDC7d0aA0NiZVlFowAKExgEDs3tnBAiNnWkVhQYsQGgcMDC7d0aA0NiZViVUKKFxQnxsjIA7AoTG7vSKSoMVICgL1pe9uyPAueBOr6g0WAFC42B92bs7AoTG7vSKSoMVIDQO1pe9uyNAaOxOr6g0WAFC42B92bs7AoTG7vQqkUoJjRPRY1sEHBIgNHaoWZQaqABBWaC87NwhAc4Fh5pFqYEKEBoHysvOHRIgNHaoWZQaqAChcaC87NwhAUJjh5pFqYEKEBoHysvOHRIgNHaoWQmUSmicAB6bIuCSAKGxS92i1iAFCMqC1GXfLglwLrjULWoNUoDQOEhd9u2SAKGxS92i1iAFCI2D1GXfLgkQGrvULWoNUoDQOEhd9u2SAKGxS92Kv1ZC4/jt2BIBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBwXoDQ2PkWMgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgfgFC4/jt2BIBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBwXoDQ2PkWMgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgfgFC4/jt2BIBqwV+/vln6devn1x22WXy8MMPZ9a6cOFCGT9+vPz1119y7rnnSs+ePaVEiRJWz4XiEEhEILtz4dChQ9K0aVNJSUnJ3HXdunWlT58+iQzFtghYK7Bp0yYZNWqUrF+/Xv+Zf//998vll1+u6+W6YG3bKCwAgZzOBa4LAWCzS6sF1q5dK2PGjJHNmzdLmTJl5L777pM6depwXbC6axQXhEBO58L3338vTz31lOTPnz9zWPX3p5YtWwZRBvtEwBqBpUuXSvfu3eW1116TSpUq6brefvttmTZtmhw+fFgaNGggnTt3lrx581pTM4UgEIRA1nOB60IQyuzTVoETfT7mumBr55JTF6FxchzZCwJWCaxcuVLGjh0rlStXltTU1MzQ+O+//5YOHTroD78XXHCB/hCwfft2gjKrukcxyRTI6VxQX5pQvxxVH3x5IeCDgDremzRpon/RuWjRIv2lorS0NP2LH64LPhwBzDFDIKdzYd++fVwXOEy8EThy5Ii0bdtW7rnnHmnYsKEsWLBABg0apP9edPDgQa4L3hwJTDTWufDtt9/K119/LU8//TRQCHgjoEICtehgx44dMnz4cB0aL168WIYNG6b/vWjRotK7d2+pX7++NG/e3BsXJuqfQHbnwpw5c7gu+HcoeDvjWL835boQ/cOC0Dj6PWaGHgps2bJFSpYsKe+//75eUZyx0virr76SWbNmyeDBg7VKenq6tG7dWmbMmHHMiksPyZhyRAVyOhfUqhr15Yk333wzojNnWgj8v8A///wjn332mTRu3Fjy5cunf6DC4xdeeEHWrVvHdYGDxRuBWOeC+hnXBW8OBe8neuDAAZk7d640atQo0+L666/XXyhVqy75vOD9IeINQKxz4YcfftDnw2OPPeaNBxNFQH0+Vl+myPjChAqN1V0pypYtK7feeqsGmj9/vv6SkQqSeSEQVYHszoWPPvqI60JUG868jhOI9XtTrgvRP2AIjaPfY2boscDkyZOPCY3Vv+/atUseeuihTBUVGo8cOVIqVKjgsRRTj7pA1nNh9erV8uyzz8oZZ5whGzZskLPOOku6du0qFStWjDoF80NA1qxZI3379hV1XqhbCnFd4KDwVeDoc0EFA1wXfD0S/J63WkmjQuKZM2fKSy+9xHXB78PB69lnPRfeffddHZypYHn37t36sU/qlryFCxf22onJR1fg119/1XcjUo8ze/DBB/UqexUaP/HEE3pVcb169fTkVZDw+OOPy9SpU6OLwcy8FsjpXFDHPNcFrw8NryYf6/emXBeifygQGke/x8zQY4GsQdnrr7+ub0WqnsWU8Wrfvr3+JWnVqlU9lmLqURfIei6oZ1qqlfgtWrTQwfFbb72lvzH9yiuvRJ2C+Xku8Pvvv0uPHj2kS5cucvHFFwvXBc8PCI+nn/Vc4Lrg8cHg8dTV332eeeYZKV26tP7/6tVZguSzAAANcElEQVSrc13w+HjweerZnQvffPONrFq1St+ZS92pZeDAgfoLpio45oVAFAVUENyuXTu58MIL5d57780MjdWXq9UjDWrXrq2nvW3bNv07pQ8++CCKDMwJAf2liOzOBa4LHBw+CcT6fMx1IfpHAqFx9HvMDD0WyBqUTZkyRT/DuFu3bpkqrVq1knHjxrHS2OPjxIepZz0Xss5Z3Za0WbNmMmnSJP2LU14IRFFg/fr1+ktCnTp1kjp16ugpcl2IYqeZ04kEsjsXuC6cSI2fR1VA/R1o6dKl+vE16jPB7Nmz+bwQ1WYzr5gCWc+FcuXKHfP+5cuX69vxTpw4EUkEIifw+eefy7Jly6R79+56bkeHxk8++aRcd911+jnG6qX+HtWrVy9WGkfuKGBCSiDWuZBViOsCx4xPAkf/3nTo0KFcFyLefELjiDeY6fktkDUoU7dRUc8vHj58uIbZsWOH3HHHHTJ9+nSeaez3oRL52Wc9F9Sxv3fvXqlcubKeu7odnQqN1W3oihcvHnkPJuifwG+//SbqFz7qNkI1atTIBOC64N+x4PuMczoXuC74fmT4NX/1WIJFixZJw4YNMyeuggL1XOP8+fPzecGvw8Hr2cY6F6pUqSKpqalSqlQpbbRkyRL9xYoJEyZ4bcbkoymg7jaxYsUKyZs3r57gnj17pEiRInrFpXq+d7FixaRDhw76Z3PmzJFPP/1UhgwZEk0MZuW1QKxzoXz58lwXvD46/Jp8rM/HasEN14VoHw+ExtHuL7PzXCBrULZv3z4dEqtbk55//vny4osvivpv6t95IRBlgazngvpFqVopoJ7nXbZsWb3CWH0YHjt2bJQZmJvHAioMUF+MuPrqq49R4Lrg8UHh6dRzOhe4Lnh6QHg6bfXFOXWr0T59+kitWrX0qrFHH31U/71Ira7k84KnB4aH0451LqhgbN26dfoWvUeOHJH+/fuLCpLVCkxeCERd4OiVxipMVnejGDFihH6mt/r9kfpc0aRJk6gzMD8Ejll1rx7txHWBg8IXgVifj7kuRP8oIDSOfo+ZoYcCKgyeOXOmqFtHqJd6BlPTpk3185cWL14so0eP1quMVXCsVp6pbwfxQiCKArHOhbS0NP1c4wMHDuhn+Klncpx22mlRZGBOnguoZ7fefvvtx91RQt1Wrl69elwXPD8+fJr+ic4Frgs+HQ3MdeHChXrFpHp0TdGiRXWInBEA8HmB48MngZzOBfUZYcyYMbJgwQL9efqKK66Qjh07SqFChXziYa6eChwdGiuCadOm6dtRqzt0NW7cWB544AHJkyePpzpM2yeBo88Frgs+dZ65KoFYn4+5LkT7GCE0jnZ/mR0CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQU4DQmAMEAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ8FiA0Njj5jN1BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgNCYYwABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDwWIDQ2OPmM3UEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECA0JhjAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEPBYgNDY4+YzdQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIDQmGMAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ8FiA0Njj5jN1BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAgNCYYwABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDwWIDQ2OPmM3UEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECA0JhjAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEPBYgNDY4+YzdQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIDQmGMAAQQQQAABBBBAAAEEEEDAKYGOHTtKkyZNpGXLlnL0Pzs1CYpFAAEEEEAAAQQQQAABBBBAwCIBQmOLmkEpCCCAAAIIIIAAAggggAACJxYgND6xEe9AAAEEEEAAAQQQQAABBBBA4GQECI1PRov3IoAAAggggAACCCCAAAIIJCRw5MgRUf/Lmzdv3PshNI6bjg0RQAABBBBAAAEEEEAAAQQQyFaA0JgDAwEEEEAAAQQQQAABBBBA4IQC9957r1xzzTWyZMkS2bhxoxQuXFg6deokl156qd5227ZtMmbMGFm2bJmkpqZKrVq19K2j1T/PmzdPXn75ZWnatKlMnDhRxo4dK1WqVJGpU6fKjBkzJD09XWrUqCHdunWTcuXK6f19+OGH+md//PGHVKhQQe644w6pW7eu/lms0Fhtk5aWJnv27NHb3XXXXVK7dm293Y4dO2To0KGycuVKKV++vNx3333Ss2dPmTx5spQtWzbmHE4IxBsQQAABBBBAAAEEEEAAAQQQcFiA0Njh5lE6AggggAACCCCAAAIIIGBKQAW1u3fvlhEjRujAdebMmfLKK6/IlClTpGjRotK5c2c577zz5O6775YDBw7Ic889JyVKlJAnnnhCFi5cKIMGDZKrrrpK2rVrp//7d999J6NHj5Z+/fpJxYoVZfz48bJlyxYdKM+dO1dGjhwp/fv3l+rVq8v8+fNl4MCB+mfVqlXLMTRW+xw+fLgMGDBAh9JqXLWPV199VQfIKiA+fPiwPPXUUzqoVjWuWbNG3nnnHSlZsmTMOZhyZhwEEEAAAQQQQAABBBBAAAEEwhAgNA5DnTERQAABBBBAAAEEEEAAAccEVGisQuGuXbvqylX42qJFC+nRo4depatWCavVwSkpKfrnq1ev1v/tk08+kR9//FF69eolb731VuZKYvXvlStXlvvvv1+//6+//pLFixdL/fr1dairguSHHnooU6lLly56NbJ6f04rjdV2KmTu0KFD5nYqKD733HPl1ltvlRtuuEGHzxmro7/44gsZMmSIDo3ViuZYc8iXL59jHaNcBBBAAAEEEEAAAQQQQAABBHIvQGiceyveiQACCCCAAAIIIIAAAgh4K6CCWnV76ltuuSXTQK0avvnmm6V48eIyePDgbG0mTZokmzdvlj59+sisWbMy33PnnXfKTTfdpIPcrC/1s1atWulQOuOlVgWrFczPPPNMjqGx2k6tVs76atSokQ6Sb7/9dnnjjTf0qmP12rRpk6jbbqvQWN12O9YcTjvtNG97z8QRQAABBBBAAAEEEEAAAQSiL0BoHP0eM0MEEEAAAQQQQAABBBBAIGEBFRo3aNBA2rRpk7mv2267Tdq3b6+fWzxq1Cj9DOLsXt9//72+DbW6pXXGK7tg+Oif3XjjjdK8efPM96tA9+DBgzFDY3Vr7GbNmonaNutr69at+rnIR4fGv/zyi9xzzz06NFbPYo41h4QB2QECCCCAAAIIIIAAAggggAACFgsQGlvcHEpDAAEEEEAAAQQQQAABBGwRUKHxOeecI4888oguSa36bdmypTz77LP6GcXqVtKTJ0/Wt6pWr/379+v/nXrqqZJdaKxuG62ejfzwww/r9+/atUs+/vhjad26td6n+tnRt6dW/3zRRRfplcE53Z66d+/eerzu3btnsm3fvl1Kly6t61UhtLodtdqPes2ePVs/11iFxn/++WfMOdjSB+pAAAEEEEAAAQQQQAABBBBAIAgBQuMgVNknAggggAACCCCAAAIIIBAxARXU7tmzRz9vWD03eOrUqTJt2jQduBYsWFAHrmXKlJHHHntM8ubNK+PHj9dBrAppswuN586dKyNGjNArh88880yZMGGCbNy4UcaNGyfz5s2ToUOHyqBBg6Rq1ary5ZdfyrBhw+Sll17S780pNP7uu++kf//+ep+XXHKJrFy5Ut8We8CAAfp5yOq5yMWKFRMVWKu5qNpWrFih51CyZMmYc4hYO5kOAggggAACCCCAAAIIIIAAAscIEBpzQCCAAAIIIIAAAggggAACCJxQQAW19erVk1WrVsny5culXLly0rlz58xVu7///ruMHTtW3+Y5X758+r+rkFatQs4uNFYDqpXJH374oaSnp0vNmjWla9eukvHs4HfffVfef/99/bNKlSrpFcYZK4RzCo3VPqdPny7vvfee7Ny5U696btu2rVx77bV6fup5x88//7xs2LBBKleurJ9z3KtXL0lLS9MrlGPN4YRAvAEBBBBAAAEEEEAAAQQQQAABhwUIjR1uHqUjgAACCCCAAAIIIIAAAqYEjg5qTY2Z7HH+/fdfOXz4sBQoUEDvWq0yfvzxx/VtsdXqaF4IIIAAAggggAACCCCAAAII+CpAaOxr55k3AggggAACCCCAAAIIIHASAlEIjdVtqvfu3atvT61e6vbUKSkp0rdv35OQ4K0IIIAAAggggAACCCCAAAIIRE+A0Dh6PWVGCCCAAAIIIIAAAggggEDSBaIQGqtbVo8cOVKWLl2aeQtt9Sxm9TxjXggggAACCCCAAAIIIIAAAgj4LPC/EbkMee8cD8YAAAAASUVORK5CYII=",
-      "text/html": [
-       "<!doctype html>\n",
-       "<html>\n",
-       "\t<head>\n",
-       "\t\t<meta charset=\"utf-8\">\n",
-       "\t\t<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpIHsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGV2YWwoY29kZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsKICAgIHZhciBzaXppbmcgPSBzaXppbmdQb2xpY3koZWwpOwogICAgaWYgKCFzaXppbmcpCiAgICAgIHJldHVybjsKCiAgICB2YXIgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWx3aWRnZXRfY29udGFpbmVyIik7CiAgICBpZiAoIWNlbCkKICAgICAgcmV0dXJuOwoKICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICIwIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ1RvQ3NzKHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpKTsKICAgIH0KCiAgICBpZiAoc2l6aW5nLmZpbGwpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICB2YXIgcGFkID0gdW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZyk7CiAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgY2VsLnN0eWxlLmJvdHRvbSA9IHBhZC5ib3R0b20gKyAicHgiOwogICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OyB9CiAgICAgIH07CiAgICB9CiAgfQoKICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgbWV0aG9kcwogIHZhciBkZWZhdWx0cyA9IHsKICAgIGZpbmQ6IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCAiLiIgKyB0aGlzLm5hbWUpOwogICAgfSwKICAgIHJlbmRlckVycm9yOiBmdW5jdGlvbihlbCwgZXJyKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKCiAgICAgIHRoaXMuY2xlYXJFcnJvcihlbCk7CgogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMKICAgICAgdmFyIGVyckNsYXNzID0gInNoaW55LW91dHB1dC1lcnJvciI7CiAgICAgIGlmIChlcnIudHlwZSAhPT0gbnVsbCkgewogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcwogICAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiICIgKyAkLm1hcChhc0FycmF5KGVyci50eXBlKSwgZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgcmV0dXJuIGVyckNsYXNzICsgIi0iICsgdHlwZTsKICAgICAgICB9KS5qb2luKCIgIik7CiAgICAgIH0KICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgaHRtbHdpZGdldHMtZXJyb3IiOwoKICAgICAgLy8gSXMgZWwgaW5saW5lIG9yIGJsb2NrPyBJZiBpbmxpbmUgb3IgaW5saW5lLWJsb2NrLCBqdXN0IGRpc3BsYXk6bm9uZSBpdAogICAgICAvLyBhbmQgYWRkIGFuIGlubGluZSBlcnJvci4KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIGRpc3BsYXkpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgJGVsLmhpZGUoKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOwogICAgICAgICAgZXJyb3JTcGFuLnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yU3Bhbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpIHsKICAgICAgICAvLyBJZiBibG9jaywgYWRkIGFuIGVycm9yIGp1c3QgYWZ0ZXIgdGhlIGVsLCBzZXQgdmlzaWJpbGl0eTpub25lIG9uIHRoZQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuCiAgICAgICAgLy8gTWFyayBpdCB3aXRoIGEgdW5pcXVlIElEIGFuZCBDU1MgY2xhc3Mgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlci4KICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvckRpdiA9ICQoIjxkaXY+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKQogICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAvLyBzZXR0aW5nIHdpZHRoIGNhbiBwdXNoIG91dCB0aGUgcGFnZSBzaXplLCBmb3JjaW5nIG90aGVyd2lzZQogICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXJzIHRvIGFwcGVhciBhbmQgbWFraW5nIGl0IGltcG9zc2libGUgZm9yCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkCiAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvckRpdik7CgogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aAogICAgICAgICAgLy8gdGhlIHBhcmVudCBlbGVtZW50IGFzIHRoZSB3aW5kb3cgaXMgcmVzaXplZCBvciB3aGF0ZXZlci4KICAgICAgICAgIHZhciBpbnRJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludElkKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3JEaXYKICAgICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgfSwgNTAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckVycm9yOiBmdW5jdGlvbihlbCkgewogICAgICB2YXIgJGVsID0gJChlbCk7CiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIG51bGwpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgaWYgKGRpc3BsYXkpCiAgICAgICAgICAkZWwuY3NzKCJkaXNwbGF5IiwgZGlzcGxheSk7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKXsKICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9CiAgICB9LAogICAgc2l6aW5nOiB7fQogIH07CgogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uCiAgLy8gb2JqZWN0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAvLyAtIG5hbWUgKHJlcXVpcmVkKSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJpbmRpbmcgbmFtZSwgd2hpY2ggd2lsbCBiZQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLgogIC8vIC0gaW5pdGlhbGl6ZSAob3B0aW9uYWwpIC0gQSBmdW5jdGlvbihlbCkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgd2lkZ2V0IGVsZW1lbnQ7IGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSB0aGlyZAogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuCiAgLy8gLSByZW5kZXJWYWx1ZSAocmVxdWlyZWQpIC0gQSBmdW5jdGlvbihlbCwgZGF0YSwgaW5pdFZhbHVlKSB0aGF0IHdpbGwgYmUKICAvLyAgIGNhbGxlZCB3aXRoIGRhdGEuIFN0YXRpYyBjb250ZXh0cyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyCiAgLy8gICBlbGVtZW50LCBhcyB0aGUgZGF0YSBjaGFuZ2VzLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXQgPSBmdW5jdGlvbihkZWZpbml0aW9uKSB7CiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICB9CiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSB0eXBlIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzCiAgICBpZiAoZGVmaW5pdGlvbi50eXBlICE9PSAib3V0cHV0IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB3aWRnZXQgdHlwZSAnIiArIGRlZmluaXRpb24udHlwZSArICInIik7CiAgICB9CiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCAubmFtZSBpcyBhIHZhbGlkIENTUyBjbGFzc25hbWUKCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kCiAgICAvLyBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQgIm9iamVjdCIgcGVyIHdpZGdldCBwZXIgdHlwZS9jbGFzcyBvZgogICAgLy8gd2lkZ2V0OyB0aGUgcmVuZGVyVmFsdWUgYW5kIHJlc2l6ZSBtZXRob2RzIG9uIHN1Y2ggd2lkZ2V0IG9iamVjdHMKICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndAogICAgLy8gc3RvcmUgdGhlbS4gTmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldAogICAgLy8gb2JqZWN0IHBlciB3aWRnZXQgaW5zdGFuY2U7IHRoZSBkZWZpbml0aW9uIHRoYXQncyBwYXNzZWQgaW4gZG9lc24ndAogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QKICAgIC8vICAgZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkKICAgIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGFzIHJlbmRlclZhbHVlKHgpIGFuZCByZXNpemUodywgaCkuCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0CiAgICAvLyBhdXRob3IsIHdobyBjYW4gc3RvcmUgcGVyLWluc3RhbmNlIHN0YXRlIHVzaW5nIGVpdGhlciBPTy1zdHlsZQogICAgLy8gaW5zdGFuY2UgZmllbGRzIG9yIGZ1bmN0aW9uYWwtc3R5bGUgY2xvc3VyZSB2YXJpYWJsZXMgKEkgZ3Vlc3MgdGhpcwogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMKICAgIC8vIHdoYXQgd2UgcmVxdWlyZWQgYmVmb3JlKS4KICAgIGlmIChkZWZpbml0aW9uLmZhY3RvcnkpIHsKICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOwogICAgfQoKICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSByZW5kZXJWYWx1ZSBmdW5jdGlvbiIpOwogICAgfQoKICAgIC8vIEZvciBzdGF0aWMgcmVuZGVyaW5nIChub24tU2hpbnkpLCB1c2UgYSBzaW1wbGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbgogICAgLy8gc2NoZW1lLiBXZSBhbHNvIHVzZSB0aGlzIHNjaGVtZSBmb3IgU2hpbnkgYXBwcy9kb2N1bWVudHMgdGhhdCBhbHNvCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLgogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIC8vIE1lcmdlIGRlZmF1bHRzIGludG8gdGhlIGRlZmluaXRpb247IGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CiAgICBvdmVycmlkZU1ldGhvZChzdGF0aWNCaW5kaW5nLCAiZmluZCIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CiAgICAgICAgLy8gRmlsdGVyIG91dCBTaGlueSBvdXRwdXRzLCB3ZSBvbmx5IHdhbnQgdGhlIHN0YXRpYyBraW5kCiAgICAgICAgcmV0dXJuIGZpbHRlckJ5Q2xhc3MocmVzdWx0cywgImh0bWwtd2lkZ2V0LW91dHB1dCIsIGZhbHNlKTsKICAgICAgfTsKICAgIH0pOwogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMucHVzaChzdGF0aWNCaW5kaW5nKTsKCiAgICBpZiAoc2hpbnlNb2RlKSB7CiAgICAgIC8vIFNoaW55IGlzIHJ1bm5pbmcuIFJlZ2lzdGVyIHRoZSBkZWZpbml0aW9uIHdpdGggYW4gb3V0cHV0IGJpbmRpbmcuCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQKICAgICAgLy8gd2Ugd2lsbCBtYWtlIGFuIG91dHB1dCBiaW5kaW5nIG9iamVjdCB0aGF0IGRlbGVnYXRlcyB0byB0aGUKICAgICAgLy8gZGVmaW5pdGlvbi4gVGhpcyBpcyBiZWNhdXNlIHdlIGZvb2xpc2hseSB1c2VkIHRoZSBzYW1lIG1ldGhvZAogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzCiAgICAgIC8vIGJ1dCB0aGV5IGFjdHVhbGx5IGhhdmUgcXVpdGUgZGlmZmVyZW50IHNlbWFudGljcyAodGhlIFNoaW55CiAgICAgIC8vIGJpbmRpbmdzIHJlY2VpdmUgZGF0YSB0aGF0IGluY2x1ZGVzIGxvdHMgb2YgbWV0YWRhdGEgdGhhdCBpdAogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QKICAgICAgLy8ganVzdCBpZ25vcmUgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBpbiBzb21lIHdpZGdldHMgaXQncyBoZWxwZnVsCiAgICAgIC8vIHRvIGNhbGwgdGhpcy5yZW5kZXJWYWx1ZSgpIGZyb20gaW5zaWRlIG9mIHJlc2l6ZSgpLCBhbmQgaWYKICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55CiAgICAgIC8vIHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgaHRtbHdpZGdldHMgdmVyc2lvbi4KCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCiAgICAgIHZhciBiaW5kaW5nRGVmID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IG5ldyBTaGlueS5PdXRwdXRCaW5kaW5nKCk7CgogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzCiAgICAgIC8vIHZlcnNpb24gb2YgbWV0aG9kcyBpZiB0aGV5IGFyZSBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KICAgICAgLy8gU2hpbnkncyBkZWZhdWx0cy4gTk9URTogSWYgU2hpbnkncyBvdXRwdXQgYmluZGluZ3MgZ2FpbiBhZGRpdGlvbmFsCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkKICAgICAgLy8gSFRNTFdpZGdldCBiaW5kaW5nIGRlZmluaXRpb25zLCB0aGVuIHdlJ2xsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhpcwogICAgICAvLyBsaXN0LgogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlQ2hhbmdlIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJjbGVhckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInNob3dQcm9ncmVzcyIpOwoKICAgICAgLy8gVGhlIGZpbmQsIHJlbmRlclZhbHVlLCBhbmQgcmVzaXplIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHdlCiAgICAgIC8vIHdhbnQgdG8gYWN0dWFsbHkgZGVjb3JhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5kaW5nRGVmIG1ldGhvZHMuCgogICAgICBzaGlueUJpbmRpbmcuZmluZCA9IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBiaW5kaW5nRGVmLmZpbmQoc2NvcGUpOwoKICAgICAgICAvLyBPbmx5IHJldHVybiBlbGVtZW50cyB0aGF0IGFyZSBTaGlueSBvdXRwdXRzLCBub3Qgc3RhdGljIG9uZXMKICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2hhdGV2ZXIgY2F1c2VkIFNoaW55IHRvIHRoaW5rIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgLy8gbmV3IGR5bmFtaWMgb3V0cHV0cywgYWxzbyBjYXVzZWQgdGhlcmUgdG8gYmUgbmV3IHN0YXRpYyBvdXRwdXRzLgogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgIC8vIHNjaGVkdWxlIGV4ZWN1dGlvbiBmb3IgbGF0ZXItLW5vIG5lZWQgdG8gc3RhdGljUmVuZGVyIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlcigpOwoKICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7CiAgICAgIH07CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgIGlmIChkYXRhLnggPT09IG51bGwpIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImluaGVyaXQiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIsIHRydWUpOwogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgewogICAgICAgICAgICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmluZGluZ0RlZi5pbml0aWFsaXplKGVsLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgdmFyIGdldFNpemUgPSBmdW5jdGlvbihlbCkgewogICAgICAgICAgaWYgKHNpemVPYmopIHsKICAgICAgICAgICAgcmV0dXJuIHt3OiBzaXplT2JqLmdldFdpZHRoKCksIGg6IHNpemVPYmouZ2V0SGVpZ2h0KCl9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICByZXR1cm4ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fQogICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSArICIgaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIjsKCiAgICAgICAgdmFyIGluaXRSZXN1bHQ7CiAgICAgICAgaWYgKGJpbmRpbmcuaW5pdGlhbGl6ZSkgewogICAgICAgICAgdmFyIHNpemUgPSBnZXRTaXplKGVsKTsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsIHNpemUudywgc2l6ZS5oKTsKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCBpbml0UmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChiaW5kaW5nLnJlc2l6ZSkgewogICAgICAgICAgdmFyIGxhc3RTaXplID0gZ2V0U2l6ZShlbCk7CiAgICAgICAgICB2YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIHNpemUgPSBnZXRTaXplKGVsKTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cg==\"></script>\n",
-       "<script title=\"plotly-binding\" src=\"data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvLyBQbG90bHkucmVsYXlvdXQoKSBtdXRhdGVzIHRoZSBwbG90IGlucHV0IG9iamVjdCwgc28gbWFrZSBzdXJlIHRvIAogICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdXNlci1zdXBwbGllZCB3aWR0aC9oZWlnaHQgKmJlZm9yZSoKICAgIC8vIHdlIGNhbGwgUGxvdGx5LnBsb3QoKTsKICAgIHZhciBsYXkgPSB4LmxheW91dCB8fCB7fTsKICAgIGluc3RhbmNlLndpZHRoID0gbGF5LndpZHRoOwogICAgaW5zdGFuY2UuaGVpZ2h0ID0gbGF5LmhlaWdodDsKICAgIGluc3RhbmNlLmF1dG9zaXplID0gbGF5LmF1dG9zaXplIHx8IHRydWU7CiAgICAKICAgIC8qIAogICAgLyAnaW5mb3JtIHRoZSB3b3JsZCcgYWJvdXQgaGlnaGxpZ2h0aW5nIG9wdGlvbnMgdGhpcyBpcyBzbyBvdGhlcgogICAgLyBjcm9zc3RhbGsgbGlicmFyaWVzIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byBzcGVjaWFsIHNldHRpbmdzIAogICAgLyBzdWNoIGFzIHBlcnNpc3RlbnQgc2VsZWN0aW9uLiAKICAgIC8gQUZBSUssIGxlYWZsZXQgaXMgdGhlIG9ubHkgbGlicmFyeSB3aXRoIHN1Y2ggaW50ZXJncmF0aW9uCiAgICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8zNDYvZmlsZXMjZGlmZi1hZDBjMmQ1MWNlNWZkZjhjOTBjNzM5NWIxMDJmNDI2NVIxNTQKICAgICovCiAgICB2YXIgY3RDb25maWcgPSBjcm9zc3RhbGsudmFyKCdwbG90bHlDcm9zc3RhbGtPcHRzJykuc2V0KHguaGlnaGxpZ2h0KTsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgICAKICAgICAgLy8gRW5hYmxlIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdoZW4gc2hpZnQga2V5IGlzIGRvd24KICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyODYxMy9jaGVjay1pZi1hLWtleS1pcy1kb3duCiAgICAgIHZhciBwZXJzaXN0T25TaGlmdCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWUpIHdpbmRvdy5ldmVudDsKICAgICAgICBpZiAoZS5zaGlmdEtleSkgeyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSB0cnVlOyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSBmYWxzZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIAogICAgICAvLyBPbmx5IHJlbGV2YW50IGlmIHdlIGhhdmVuJ3QgZm9yY2VkIHBlcnNpc3RlbnQgbW9kZSBhdCBjb21tYW5kIGxpbmUKICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gcGVyc2lzdE9uU2hpZnQ7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZ3JhcGhEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAKICAgIC8vIFRPRE86IG1vdmUgdGhlIGNvbnRyb2wgcGFuZWwgaW5qZWN0aW9uIHN0cmF0ZWd5IGluc2lkZSBoZXJlLi4uCiAgICBIVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlcihmdW5jdGlvbigpIHsKICAgICAgCiAgICAgIC8vIGxvd2VyIHRoZSB6LWluZGV4IG9mIHRoZSBtb2RlYmFyIHRvIHByZXZlbnQgaXQgZnJvbSBoaWdoamFja2luZyBob3ZlcgogICAgICAvLyAoVE9ETzogZG8gdGhpcyB2aWEgQ1NTPykKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvOTU2CiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvcHJvcF9zdHlsZV96aW5kZXguYXNwCiAgICAgIHZhciBtb2RlYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tb2RlYmFyIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWJhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtb2RlYmFyc1tpXS5zdHlsZS56SW5kZXggPSAxOwogICAgICB9CiAgICB9KTsKICAgICAgCiAgICAgIC8vIGluamVjdCBhICJjb250cm9sIHBhbmVsIiBob2xkaW5nIHNlbGVjdGl6ZS9keW5hbWljIGNvbG9yIHdpZGdldChzKQogICAgaWYgKCh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljKSAmJiAhaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIHZhciBmbGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZsZXguY2xhc3MgPSAicGxvdGx5LWNyb3NzdGFsay1jb250cm9sLXBhbmVsIjsKICAgICAgZmxleC5zdHlsZSA9ICJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXAiOwogICAgICAKICAgICAgLy8gaW5qZWN0IHRoZSBjb2xvdXJwaWNrZXIgSFRNTCBjb250YWluZXIgaW50byB0aGUgZmxleGJveAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIHBpY2tlcklucHV0LmlkID0gZWwuaWQgKyAiLWNvbG91cnBpY2tlciI7CiAgICAgICAgcGlja2VySW5wdXQucGxhY2Vob2xkZXIgPSAiYXNkYXNkIjsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgIHBpY2tlckxhYmVsLmZvciA9IHBpY2tlcklucHV0LmlkOwogICAgICAgIHBpY2tlckxhYmVsLmlubmVySFRNTCA9ICJCcnVzaCBjb2xvciZuYnNwOyZuYnNwOyI7CiAgICAgICAgCiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlckxhYmVsKTsKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VySW5wdXQpOwogICAgICAgIGZsZXguYXBwZW5kQ2hpbGQocGlja2VyRGl2KTsKICAgICAgfQogICAgICAKICAgICAgLy8gaW5qZWN0IHNlbGVjdGl6ZSBIVE1MIGNvbnRhaW5lcnMgKG9uZSBmb3IgZXZlcnkgY3Jvc3N0YWxrIGdyb3VwKQogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBjb250YWluZXIuaWQgPSBpZHNbaV07CiAgICAgICAgICBjb250YWluZXIuc3R5bGUgPSAid2lkdGg6IDgwJTsgaGVpZ2h0OiAxMCUiOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzID0gImZvcm0tZ3JvdXAgY3Jvc3N0YWxrLWlucHV0LXBsb3RseS1oaWdobGlnaHQiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgbGFiZWwuZm9yID0gaWRzW2ldOwogICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0geC5zZWxlY3RpemVbaWRzW2ldXS5ncm91cDsKICAgICAgICAgIGxhYmVsLmNsYXNzID0gImNvbnRyb2wtbGFiZWwiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgc2VsZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CiAgICAgICAgICBzZWxlY3QubXVsdGlwbGUgPSB0cnVlOwogICAgICAgICAgCiAgICAgICAgICBzZWxlY3REaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RGl2KTsKICAgICAgICAgIGZsZXguYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGZpbmFsbHksIGluc2VydCB0aGUgZmxleGJveCBpbnNpZGUgdGhlIGh0bWx3aWRnZXQgY29udGFpbmVyLAogICAgICAvLyBidXQgYmVmb3JlIHRoZSBwbG90bHkgZ3JhcGggZGl2CiAgICAgIGdyYXBoRGl2LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZsZXgsIGdyYXBoRGl2KTsKICAgICAgCiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlciA9ICQoIiMiICsgcGlja2VySW5wdXQuaWQpOwogICAgICAgIHZhciBjb2xvcnMgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgICAgICAvLyBUT0RPOiBsZXQgdXNlcnMgc3BlY2lmeSBvcHRpb25zPwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgdmFsdWU6IGNvbG9yc1swXSwKICAgICAgICAgIHNob3dDb2xvdXI6ICJib3RoIiwKICAgICAgICAgIHBhbGV0dGU6ICJsaW1pdGVkIiwKICAgICAgICAgIGFsbG93ZWRDb2xzOiBjb2xvcnMuam9pbigiICIpLAogICAgICAgICAgd2lkdGg6ICIyMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAlIgogICAgICAgIH07CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcih7Y2hhbmdlRGVsYXk6IDB9KTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJzZXR0aW5ncyIsIG9wdHMpOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInZhbHVlIiwgb3B0cy52YWx1ZSk7CiAgICAgICAgLy8gaW5mb3JtIGNyb3NzdGFsayBhYm91dCBhIGNoYW5nZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29sb3VyCiAgICAgICAgdmFyIGdycHMgPSB4LmhpZ2hsaWdodC5jdEdyb3VwcyB8fCBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgfQogICAgICAgIHBpY2tlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIGlmIG5vIHBsb3QgZXhpc3RzIHlldCwgY3JlYXRlIG9uZSB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uCiAgICBpZiAoIWluc3RhbmNlLnBsb3RseSkgewogICAgICAKICAgICAgdmFyIHBsb3QgPSBQbG90bHkubmV3UGxvdChncmFwaERpdiwgeCk7CiAgICAgIGluc3RhbmNlLnBsb3RseSA9IHRydWU7CiAgICAgIAogICAgfSBlbHNlIGlmICh4LmxheW91dC50cmFuc2l0aW9uKSB7CiAgICAgIAogICAgICB2YXIgcGxvdCA9IFBsb3RseS5yZWFjdChncmFwaERpdiwgeCk7CiAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgoKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5uZXdQbG90KGdyYXBoRGl2LCB4KTsKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhpcyBpc24ndCBhbiBvZmZpY2lhbCBwbG90bHkuanMgbWV0aG9kLCBidXQgaXQncyB0aGUgb25seSBjdXJyZW50IHdheSB0byAKICAgICAgICAgIC8vIGNoYW5nZSBqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGxvdCAKICAgICAgICAgIC8vIGh0dHBzOi8vY29tbXVuaXR5LnBsb3QubHkvdC91cGRhdGUtY29uZmlnLWZ1bmN0aW9uLzkwNTcKICAgICAgICAgIGlmIChtc2cubWV0aG9kID09ICJyZWNvbmZpZyIpIHsKICAgICAgICAgICAgUGxvdGx5LnJlYWN0KGdkLCBnZC5kYXRhLCBnZC5sYXlvdXQsIG1zZy5hcmdzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIElmICd6JyBpcyByZXBvcnRlZCB3aXRoIHRoZSBldmVudCBkYXRhLCB0aGVuIHVzZSBpdCEKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoInoiKSkgewogICAgICAgICAgb2JqLnogPSBwdC56OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoImN1c3RvbWRhdGEiKSkgewogICAgICAgICAgb2JqLmN1c3RvbWRhdGEgPSBwdC5jdXN0b21kYXRhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gW107CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gYXR0cltwdC5wb2ludE51bWJlcl07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcikpIHsKICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcnMpKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gcHQucG9pbnROdW1iZXJzLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIGF0dHJbaWR4XTsgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIGxlZ2VuZEV2ZW50RGF0YSA9IGZ1bmN0aW9uKGQpIHsKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgaXMgbm90IHJlbGV2YW50IGp1c3QgcmV0dXJuIHRoZSB0cmFjZQogICAgICB2YXIgdHJhY2UgPSBkLmRhdGFbZC5jdXJ2ZU51bWJlcl07CiAgICAgIGlmICghdHJhY2UubGVnZW5kZ3JvdXApIHJldHVybiB0cmFjZTsKICAgICAgCiAgICAgIC8vIGlmIGxlZ2VuZGdyb3VwIHdhcyBzcGVjaWZpZWQsIHJldHVybiBhbGwgdHJhY2VzIHRoYXQgbWF0Y2ggdGhlIGdyb3VwCiAgICAgIHZhciBsZWdlbmRncnBzID0gZC5kYXRhLm1hcChmdW5jdGlvbih0cmFjZSl7IHJldHVybiB0cmFjZS5sZWdlbmRncm91cDsgfSk7CiAgICAgIHZhciB0cmFjZXMgPSBbXTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlZ2VuZGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGVnZW5kZ3Jwc1tpXSA9PSB0cmFjZS5sZWdlbmRncm91cCkgewogICAgICAgICAgdHJhY2VzLnB1c2goZC5kYXRhW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB0cmFjZXM7CiAgICB9OwoKICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgU2hpbnkuc2V0SW5wdXRWYWx1ZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X3N1bmJ1cnN0Y2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBvcHRpb25zID0geC5zZWxlY3RpemVbc2VsZWN0aXplSURdOwogICAgICAgIHZhciBmaXJzdCA9IFt7dmFsdWU6ICIiLCBsYWJlbDogIihBbGwpIn1dOwogICAgICAgIHZhciBvcHRzID0gJC5leHRlbmQoewogICAgICAgICAgICBvcHRpb25zOiBmaXJzdC5jb25jYXQob3B0aW9ucy5pdGVtcyksCiAgICAgICAgICAgIHNlYXJjaEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgICB2YWx1ZUZpZWxkOiAidmFsdWUiLAogICAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgICBtYXhJdGVtczogNTAKICAgICAgICAgIH0sIAogICAgICAgICAgb3B0aW9ucwogICAgICAgICk7CiAgICAgICAgdmFyIHNlbGVjdCA9ICQoIiMiICsgc2VsZWN0aXplSUQpLmZpbmQoInNlbGVjdCIpWzBdOwogICAgICAgIHZhciBzZWxlY3RpemUgPSAkKHNlbGVjdCkuc2VsZWN0aXplKG9wdHMpWzBdLnNlbGVjdGl6ZTsKICAgICAgICAvLyBOT1RFOiB0aGlzIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuICpkaXJlY3RseSogYWx0ZXJpbmcgCiAgICAgICAgLy8gZHJvcGRvd24gaXRlbXMKICAgICAgICBzZWxlY3RpemUub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGN1cnJlbnRJdGVtcyA9IHRyYWNlTWFuYWdlci5ncm91cFNlbGVjdGlvbnNbc2V0XSB8fCBbXTsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgICByZW1vdmVCcnVzaChlbCk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudEl0ZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgc2VsZWN0aXplLnJlbW92ZUl0ZW0oY3VycmVudEl0ZW1zW2ldLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIG5ld0l0ZW1zID0gc2VsZWN0aXplLml0ZW1zLmZpbHRlcihmdW5jdGlvbihpZHgpIHsgCiAgICAgICAgICAgIHJldHVybiBjdXJyZW50SXRlbXMuaW5kZXhPZihpZHgpIDwgMDsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG5ld0l0ZW1zKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEl0ZW0gaGFzIGJlZW4gcmVtb3ZlZC4uLgogICAgICAgICAgICAvLyBUT0RPOiB0aGlzIGxvZ2ljIHdvbid0IHdvcmsgZm9yIGR5bmFtaWNhbGx5IGNoYW5naW5nIHBhbGV0dGUgCiAgICAgICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVTZWxlY3Rpb24oc2V0LCBudWxsKTsKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIHNlbGVjdGl6ZS5pdGVtcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gLy8gZW5kIG9mIHNlbGVjdGlvbkNoYW5nZQogICAgCiAgfSAvLyBlbmQgb2YgcmVuZGVyVmFsdWUKfSk7IC8vIGVuZCBvZiB3aWRnZXQgZGVmaW5pdGlvbgoKLyoqCiAqIEBwYXJhbSBncmFwaERpdiBUaGUgUGxvdGx5IGdyYXBoIGRpdgogKiBAcGFyYW0gaGlnaGxpZ2h0IEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHNlbGVjdGlvbihzKQogKi8KZnVuY3Rpb24gVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCBoaWdobGlnaHQpIHsKICAvLyBUaGUgUGxvdGx5IGdyYXBoIGRpdgogIHRoaXMuZ2QgPSBncmFwaERpdjsKCiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGRhdGEuCiAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvcHVsbC8xMTM2IAogIHRoaXMub3JpZ0RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyYXBoRGl2LmRhdGEpKTsKICAKICAvLyBhdm9pZCBkb2luZyB0aGlzIG92ZXIgYW5kIG92ZXIKICB0aGlzLm9yaWdPcGFjaXR5ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICB0aGlzLm9yaWdPcGFjaXR5W2ldID0gdGhpcy5vcmlnRGF0YVtpXS5vcGFjaXR5ID09PSAwID8gMCA6ICh0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgfHwgMSk7CiAgfQoKICAvLyBrZXk6IGdyb3VwIG5hbWUsIHZhbHVlOiBudWxsIG9yIGFycmF5IG9mIGtleXMgcmVwcmVzZW50aW5nIHRoZQogIC8vIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IGdyb3VwLgogIHRoaXMuZ3JvdXBTZWxlY3Rpb25zID0ge307CiAgCiAgLy8gc2VsZWN0aW9uIHBhcmFtZXRlcnMgKGUuZy4sIHRyYW5zaWVudCB2ZXJzdXMgcGVyc2lzdGVudCBzZWxlY3Rpb24pCiAgdGhpcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7Cn0KClRyYWNlTWFuYWdlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKICAvLyBUT0RPOiBVbmhvb2sgYWxsIGV2ZW50IGhhbmRsZXJzCn07CgpUcmFjZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUZpbHRlciA9IGZ1bmN0aW9uKGdyb3VwLCBrZXlzKSB7CgogIGlmICh0eXBlb2Yoa2V5cykgPT09ICJ1bmRlZmluZWQiIHx8IGtleXMgPT09IG51bGwpIHsKICAgIAogICAgdGhpcy5nZC5kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdEYXRhKSk7CiAgICAKICB9IGVsc2UgewogIAogICAgdmFyIHRyYWNlcyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB0cmFjZSA9IHRoaXMub3JpZ0RhdGFbaV07CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKHRyYWNlKTsKICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaEZ1bmModHJhY2Uua2V5LCBrZXlzKTsKICAgICAgCiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgLy8gc3Vic2V0QXJyYXlBdHRycyBkb2Vzbid0IG11dGF0ZSB0cmFjZSAoaXQgbWFrZXMgYSBtb2RpZmllZCBjbG9uZSkKICAgICAgICAgIHRyYWNlID0gc3Vic2V0QXJyYXlBdHRycyh0cmFjZSwgbWF0Y2hlcyk7CiAgICAgICAgfQogICAgICAgIHRyYWNlcy5wdXNoKHRyYWNlKTsKICAgICAgfQogICAgfQogICAgdGhpcy5nZC5kYXRhID0gdHJhY2VzOwogIH0KICAKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo=\"></script>\n",
-       "<script title=\"typedarray\" src=\"data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw==\"></script>\n",
-       "<script title=\"jquery\" src=\"data:application/javascript;base64,LyohIGpRdWVyeSB2My41LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLHM9dC5zbGljZSxnPXQuZmxhdD9mdW5jdGlvbihlKXtyZXR1cm4gdC5mbGF0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbmNhdC5hcHBseShbXSxlKX0sdT10LnB1c2gsaT10LmluZGV4T2Ysbj17fSxvPW4udG9TdHJpbmcsdj1uLmhhc093blByb3BlcnR5LGE9di50b1N0cmluZyxsPWEuY2FsbChPYmplY3QpLHk9e30sbT1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LEU9Qy5kb2N1bWVudCxjPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gYihlLHQsbil7dmFyIHIsaSxvPShuPW58fEUpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLHQpZm9yKHIgaW4gYykoaT10W3JdfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUocikpJiZvLnNldEF0dHJpYnV0ZShyLGkpO24uaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP25bby5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGY9IjMuNS4xIixTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBTLmZuLmluaXQoZSx0KX07ZnVuY3Rpb24gcChlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYmZS5sZW5ndGgsbj13KGUpO3JldHVybiFtKGUpJiYheChlKSYmKCJhcnJheSI9PT1ufHwwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiYwPHQmJnQtMSBpbiBlKX1TLmZuPVMucHJvdG90eXBlPXtqcXVlcnk6Zixjb25zdHJ1Y3RvcjpTLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/cy5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1TLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUy5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5tYXAodGhpcyxmdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0LGUpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGV2ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsxKSUyfSkpfSxvZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCUyfSkpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0sUy5leHRlbmQ9Uy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKFMuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxTLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09Uy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LFMuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0LG4pe2IoZSx7bm9uY2U6dCYmdC5ub25jZX0sbil9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYocChlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihwKE9iamVjdChlKSk/Uy5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6dS5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmkuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxhPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PWEmJnIucHVzaChlW2ldKTtyZXR1cm4gcn0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89MCxhPVtdO2lmKHAoZSkpZm9yKHI9ZS5sZW5ndGg7bzxyO28rKyludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtlbHNlIGZvcihvIGluIGUpbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7cmV0dXJuIGcoYSl9LGd1aWQ6MSxzdXBwb3J0Onl9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUy5mbltTeW1ib2wuaXRlcmF0b3JdPXRbU3ltYm9sLml0ZXJhdG9yXSksUy5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGQ9ZnVuY3Rpb24obil7dmFyIGUsZCxiLG8saSxoLGYsZyx3LHUsbCxULEMsYSxFLHYscyxjLHksUz0ic2l6emxlIisxKm5ldyBEYXRlLHA9bi5kb2N1bWVudCxrPTAscj0wLG09dWUoKSx4PXVlKCksQT11ZSgpLE49dWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYobD0hMCksMH0saj17fS5oYXNPd25Qcm9wZXJ0eSx0PVtdLHE9dC5wb3AsTD10LnB1c2gsSD10LnB1c2gsTz10LnNsaWNlLFA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFI9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixJPSIoPzpcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcW15cXHJcXG5cXGZdfFtcXHctXXxbXlwwLVxceDdmXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsRj0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsQj1uZXcgUmVnRXhwKE0rIisiLCJnIiksJD1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKEYpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0YpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcKFteXFxyXFxuXFxmXSkiLCJnIiksbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iMHgiK2Uuc2xpY2UoMSktNjU1MzY7cmV0dXJuIHR8fChuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LDEwMjMmbnw1NjMyMCkpfSxyZT0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxpZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PyJcMCI9PT1lPyJcdWZmZmQiOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LG9lPWZ1bmN0aW9uKCl7VCgpfSxhZT1iZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJiJmaWVsZHNldCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9LHtkaXI6InBhcmVudE5vZGUiLG5leHQ6ImxlZ2VuZCJ9KTt0cnl7SC5hcHBseSh0PU8uY2FsbChwLmNoaWxkTm9kZXMpLHAuY2hpbGROb2RlcyksdFtwLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlKXtIPXthcHBseTp0Lmxlbmd0aD9mdW5jdGlvbihlLHQpe0wuYXBwbHkoZSxPLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBzZSh0LGUsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmPWUmJmUub3duZXJEb2N1bWVudCxwPWU/ZS5ub2RlVHlwZTo5O2lmKG49bnx8W10sInN0cmluZyIhPXR5cGVvZiB0fHwhdHx8MSE9PXAmJjkhPT1wJiYxMSE9PXApcmV0dXJuIG47aWYoIXImJihUKGUpLGU9ZXx8QyxFKSl7aWYoMTEhPT1wJiYodT1aLmV4ZWModCkpKWlmKGk9dVsxXSl7aWYoOT09PXApe2lmKCEoYT1lLmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbjtpZihhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihmJiYoYT1mLmdldEVsZW1lbnRCeUlkKGkpKSYmeShlLGEpJiZhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZih1WzJdKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KSksbjtpZigoaT11WzNdKSYmZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoZC5xc2EmJiFOW3QrIiAiXSYmKCF2fHwhdi50ZXN0KHQpKSYmKDEhPT1wfHwib2JqZWN0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKGM9dCxmPWUsMT09PXAmJihVLnRlc3QodCl8fHoudGVzdCh0KSkpeyhmPWVlLnRlc3QodCkmJnllKGUucGFyZW50Tm9kZSl8fGUpPT09ZSYmZC5zY29wZXx8KChzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPVMpKSxvPShsPWgodCkpLmxlbmd0aDt3aGlsZShvLS0pbFtvXT0ocz8iIyIrczoiOnNjb3BlIikrIiAiK3hlKGxbb10pO2M9bC5qb2luKCIsIil9dHJ5e3JldHVybiBILmFwcGx5KG4sZi5xdWVyeVNlbGVjdG9yQWxsKGMpKSxufWNhdGNoKGUpe04odCwhMCl9ZmluYWxseXtzPT09UyYmZS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gZyh0LnJlcGxhY2UoJCwiJDEiKSxlLG4scil9ZnVuY3Rpb24gdWUoKXt2YXIgcj1bXTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe3JldHVybiByLnB1c2godCsiICIpPmIuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Iuc2hpZnQoKV0sZVt0KyIgIl09bn19ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGVbU109ITAsZX1mdW5jdGlvbiBjZShlKXt2YXIgdD1DLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1uLmxlbmd0aDt3aGlsZShyLS0pYi5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gcGUoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnR5cGU9PT10fX1mdW5jdGlvbiBoZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09dHx8ImJ1dHRvbiI9PT10KSYmZS50eXBlPT09bn19ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtImluIGU/ZS5wYXJlbnROb2RlJiYhMT09PWUuZGlzYWJsZWQ/ImxhYmVsImluIGU/ImxhYmVsImluIGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT10OmUuZGlzYWJsZWQ9PT10OmUuaXNEaXNhYmxlZD09PXR8fGUuaXNEaXNhYmxlZCE9PSF0JiZhZShlKT09PXQ6ZS5kaXNhYmxlZD09PXQ6ImxhYmVsImluIGUmJmUuZGlzYWJsZWQ9PT10fX1mdW5jdGlvbiB2ZShhKXtyZXR1cm4gbGUoZnVuY3Rpb24obyl7cmV0dXJuIG89K28sbGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoW10sZS5sZW5ndGgsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPXJbaV1dJiYoZVtuXT0hKHRbbl09ZVtuXSkpfSl9KX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZvcihlIGluIGQ9c2Uuc3VwcG9ydD17fSxpPXNlLmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZXNwYWNlVVJJLG49KGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiFZLnRlc3QodHx8biYmbi5ub2RlTmFtZXx8IkhUTUwiKX0sVD1zZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6cDtyZXR1cm4gciE9QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxwIT1DJiYobj1DLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixvZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLG9lKSksZC5zY29wZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCYmIWUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlIGZpZWxkc2V0IGRpdiIpLmxlbmd0aH0pLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1TLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShTKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe3ZhciB0O2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitTKyInPjwvYT48c2VsZWN0IGlkPSciK1MrIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitTKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLCh0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJuYW1lIiwiIiksZS5hcHBlbmRDaGlsZCh0KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPScnXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIipuYW1lIitNKyIqPSIrTSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8di5wdXNoKCI6Y2hlY2tlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK1MrIisqIikubGVuZ3RofHx2LnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJcXFxmIiksdi5wdXNoKCJbXFxyXFxuXFxmXSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLEYpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxKXx8IWQuc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT1DfHxlLm93bmVyRG9jdW1lbnQ9PXAmJnkocCxlKT8tMTp0PT1DfHx0Lm93bmVyRG9jdW1lbnQ9PXAmJnkocCx0KT8xOnU/UCh1LGUpLVAodSx0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PUM/LTE6dD09Qz8xOmk/LTE6bz8xOnU/UCh1LGUpLVAodSx0KTowO2lmKGk9PT1vKXJldHVybiBwZShlLHQpO249ZTt3aGlsZShuPW4ucGFyZW50Tm9kZSlhLnVuc2hpZnQobik7bj10O3doaWxlKG49bi5wYXJlbnROb2RlKXMudW5zaGlmdChuKTt3aGlsZShhW3JdPT09c1tyXSlyKys7cmV0dXJuIHI/cGUoYVtyXSxzW3JdKTphW3JdPT1wPy0xOnNbcl09PXA/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoVChlKSxkLm1hdGNoZXNTZWxlY3RvciYmRSYmIU5bdCsiICJdJiYoIXN8fCFzLnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgbj1jLmNhbGwoZSx0KTtpZihufHxkLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goZSl7Tih0LCEwKX1yZXR1cm4gMDxzZSh0LEMsbnVsbCxbZV0pLmxlbmd0aH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKTt2YXIgbj1iLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4mJmouY2FsbChiLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9uKGUsdCwhRSk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1yP3I6ZC5hdHRyaWJ1dGVzfHwhRT9lLmdldEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9LHNlLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZShyZSxpZSl9LHNlLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sc2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYobD0hZC5kZXRlY3REdXBsaWNhdGVzLHU9IWQuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksbCl7d2hpbGUodD1lW2krK10pdD09PWVbaV0mJihyPW4ucHVzaChpKSk7d2hpbGUoci0tKWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIHU9bnVsbCxlfSxvPXNlLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9byh0KTtyZXR1cm4gbn0sKGI9c2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86bGUsbWF0Y2g6RyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHRlLG5lKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh0ZSxuZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHNlLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJnNlLmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBHLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJlgudGVzdChuKSYmKHQ9aChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PW1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmbShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXNlLmF0dHIoZSxuKTtyZXR1cm4gbnVsbD09dD8iIT0iPT09cjohcnx8KHQrPSIiLCI9Ij09PXI/dD09PWk6IiE9Ij09PXI/dCE9PWk6Il49Ij09PXI/aSYmMD09PXQuaW5kZXhPZihpKToiKj0iPT09cj9pJiYtMTx0LmluZGV4T2YoaSk6IiQ9Ij09PXI/aSYmdC5zbGljZSgtaS5sZW5ndGgpPT09aToifj0iPT09cj8tMTwoIiAiK3QucmVwbGFjZShCLCIgIikrIiAiKS5pbmRleE9mKGkpOiJ8PSI9PT1yJiYodD09PWl8fHQuc2xpY2UoMCxpLmxlbmd0aCsxKT09PWkrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihoLGUsdCxnLHYpe3ZhciB5PSJudGgiIT09aC5zbGljZSgwLDMpLG09Imxhc3QiIT09aC5zbGljZSgtNCkseD0ib2YtdHlwZSI9PT1lO3JldHVybiAxPT09ZyYmMD09PXY/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD15IT09bT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLGM9ZS5wYXJlbnROb2RlLGY9eCYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHA9IW4mJiF4LGQ9ITE7aWYoYyl7aWYoeSl7d2hpbGUobCl7YT1lO3doaWxlKGE9YVtsXSlpZih4P2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWY6MT09PWEubm9kZVR5cGUpcmV0dXJuITE7dT1sPSJvbmx5Ij09PWgmJiF1JiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKHU9W20/Yy5maXJzdENoaWxkOmMubGFzdENoaWxkXSxtJiZwKXtkPShzPShyPShpPShvPShhPWMpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSYmclsyXSxhPXMmJmMuY2hpbGROb2Rlc1tzXTt3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigxPT09YS5ub2RlVHlwZSYmKytkJiZhPT09ZSl7aVtoXT1bayxzLGRdO2JyZWFrfX1lbHNlIGlmKHAmJihkPXM9KHI9KGk9KG89KGE9ZSlbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF18fFtdKVswXT09PWsmJnJbMV0pLCExPT09ZCl3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKSYmKytkJiYocCYmKChpPShvPWFbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF09W2ssZF0pLGE9PT1lKSlicmVhaztyZXR1cm4oZC09dik9PT1nfHxkJWc9PTAmJjA8PWQvZ319fSxQU0VVRE86ZnVuY3Rpb24oZSxvKXt2YXIgdCxhPWIucHNldWRvc1tlXXx8Yi5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGFbU10/YShvKToxPGEubGVuZ3RoPyh0PVtlLGUsIiIsb10sYi5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/bGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoZSxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249UChlLHJbaV0pXT0hKHRbbl09cltpXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gYShlLDAsdCl9KTphfX0scHNldWRvczp7bm90OmxlKGZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9W10scz1mKGUucmVwbGFjZSgkLCIkMSIpKTtyZXR1cm4gc1tTXT9sZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXMoZSxudWxsLHIsW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShpPW9bYV0pJiYoZVthXT0hKHRbYV09aSkpfSk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByWzBdPWUscyhyLG51bGwsbixpKSxyWzBdPW51bGwsIWkucG9wKCl9fSksaGFzOmxlKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMDxzZSh0LGUpLmxlbmd0aH19KSxjb250YWluczpsZShmdW5jdGlvbih0KXtyZXR1cm4gdD10LnJlcGxhY2UodGUsbmUpLGZ1bmN0aW9uKGUpe3JldHVybi0xPChlLnRleHRDb250ZW50fHxvKGUpKS5pbmRleE9mKHQpfX0pLGxhbmc6bGUoZnVuY3Rpb24obil7cmV0dXJuIFYudGVzdChufHwiIil8fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGUpe3ZhciB0O2Rve2lmKHQ9RT9lLmxhbmc6ZS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGUuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuKHQ9dC50b0xvd2VyQ2FzZSgpKT09PW58fDA9PT10LmluZGV4T2YobisiLSIpfXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJjE9PT1lLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5sb2NhdGlvbiYmbi5sb2NhdGlvbi5oYXNoO3JldHVybiB0JiZ0LnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWF9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Qy5hY3RpdmVFbGVtZW50JiYoIUMuaGFzRm9jdXN8fEMuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6Z2UoITEpLGRpc2FibGVkOmdlKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hYi5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEoudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp2ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0OnQ8bj90Om47MDw9LS1yOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp2ZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9Yi5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSliLnBzZXVkb3NbZV09ZGUoZSk7Zm9yKGUgaW57c3VibWl0OiEwLHJlc2V0OiEwfSliLnBzZXVkb3NbZV09aGUoZSk7ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24geGUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBiZShzLGUsdCl7dmFyIHU9ZS5kaXIsbD1lLm5leHQsYz1sfHx1LGY9dCYmInBhcmVudE5vZGUiPT09YyxwPXIrKztyZXR1cm4gZS5maXJzdD9mdW5jdGlvbihlLHQsbil7d2hpbGUoZT1lW3VdKWlmKDE9PT1lLm5vZGVUeXBlfHxmKXJldHVybiBzKGUsdCxuKTtyZXR1cm4hMX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtrLHBdO2lmKG4pe3doaWxlKGU9ZVt1XSlpZigoMT09PWUubm9kZVR5cGV8fGYpJiZzKGUsdCxuKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilpZihpPShvPWVbU118fChlW1NdPXt9KSlbZS51bmlxdWVJRF18fChvW2UudW5pcXVlSURdPXt9KSxsJiZsPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWU9ZVt1XXx8ZTtlbHNle2lmKChyPWlbY10pJiZyWzBdPT09ayYmclsxXT09PXApcmV0dXJuIGFbMl09clsyXTtpZigoaVtjXT1hKVsyXT1zKGUsdCxuKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gd2UoaSl7cmV0dXJuIDE8aS5sZW5ndGg/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkubGVuZ3RoO3doaWxlKHItLSlpZighaVtyXShlLHQsbikpcmV0dXJuITE7cmV0dXJuITB9OmlbMF19ZnVuY3Rpb24gVGUoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBDZShkLGgsZyx2LHksZSl7cmV0dXJuIHYmJiF2W1NdJiYodj1DZSh2KSkseSYmIXlbU10mJih5PUNlKHksZSkpLGxlKGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVtdLHU9W10sbD10Lmxlbmd0aCxjPWV8fGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspc2UoZSx0W3JdLG4pO3JldHVybiBufShofHwiKiIsbi5ub2RlVHlwZT9bbl06bixbXSksZj0hZHx8IWUmJmg/YzpUZShjLHMsZCxuLHIpLHA9Zz95fHwoZT9kOmx8fHYpP1tdOnQ6ZjtpZihnJiZnKGYscCxuLHIpLHYpe2k9VGUocCx1KSx2KGksW10sbixyKSxvPWkubGVuZ3RoO3doaWxlKG8tLSkoYT1pW29dKSYmKHBbdVtvXV09IShmW3Vbb11dPWEpKX1pZihlKXtpZih5fHxkKXtpZih5KXtpPVtdLG89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiZpLnB1c2goZltvXT1hKTt5KG51bGwscD1bXSxpLHIpfW89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiYtMTwoaT15P1AoZSxhKTpzW29dKSYmKGVbaV09ISh0W2ldPWEpKX19ZWxzZSBwPVRlKHA9PT10P3Auc3BsaWNlKGwscC5sZW5ndGgpOnApLHk/eShudWxsLHQscCxyKTpILmFwcGx5KHQscCl9KX1mdW5jdGlvbiBFZShlKXtmb3IodmFyIGksdCxuLHI9ZS5sZW5ndGgsbz1iLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1vfHxiLnJlbGF0aXZlWyIgIl0scz1vPzE6MCx1PWJlKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sYSwhMCksbD1iZShmdW5jdGlvbihlKXtyZXR1cm4tMTxQKGksZSl9LGEsITApLGM9W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0hbyYmKG58fHQhPT13KXx8KChpPXQpLm5vZGVUeXBlP3UoZSx0LG4pOmwoZSx0LG4pKTtyZXR1cm4gaT1udWxsLHJ9XTtzPHI7cysrKWlmKHQ9Yi5yZWxhdGl2ZVtlW3NdLnR5cGVdKWM9W2JlKHdlKGMpLHQpXTtlbHNle2lmKCh0PWIuZmlsdGVyW2Vbc10udHlwZV0uYXBwbHkobnVsbCxlW3NdLm1hdGNoZXMpKVtTXSl7Zm9yKG49KytzO248cjtuKyspaWYoYi5yZWxhdGl2ZVtlW25dLnR5cGVdKWJyZWFrO3JldHVybiBDZSgxPHMmJndlKGMpLDE8cyYmeGUoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSgkLCIkMSIpLHQsczxuJiZFZShlLnNsaWNlKHMsbikpLG48ciYmRWUoZT1lLnNsaWNlKG4pKSxuPHImJnhlKGUpKX1jLnB1c2godCl9cmV0dXJuIHdlKGMpfXJldHVybiBtZS5wcm90b3R5cGU9Yi5maWx0ZXJzPWIucHNldWRvcyxiLnNldEZpbHRlcnM9bmV3IG1lLGg9c2UudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdSxsPXhbZSsiICJdO2lmKGwpcmV0dXJuIHQ/MDpsLnNsaWNlKDApO2E9ZSxzPVtdLHU9Yi5wcmVGaWx0ZXI7d2hpbGUoYSl7Zm9yKG8gaW4gbiYmIShyPV8uZXhlYyhhKSl8fChyJiYoYT1hLnNsaWNlKHJbMF0ubGVuZ3RoKXx8YSkscy5wdXNoKGk9W10pKSxuPSExLChyPXouZXhlYyhhKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoJCwiICIpfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSksYi5maWx0ZXIpIShyPUdbb10uZXhlYyhhKSl8fHVbb10mJiEocj11W29dKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOm8sbWF0Y2hlczpyfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/YS5sZW5ndGg6YT9zZS5lcnJvcihlKTp4KGUscykuc2xpY2UoMCl9LGY9c2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHYseSxtLHgscixpPVtdLG89W10sYT1BW2UrIiAiXTtpZighYSl7dHx8KHQ9aChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pKGE9RWUodFtuXSkpW1NdP2kucHVzaChhKTpvLnB1c2goYSk7KGE9QShlLCh2PW8sbT0wPCh5PWkpLmxlbmd0aCx4PTA8di5sZW5ndGgscj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1PTAsbD0iMCIsYz1lJiZbXSxmPVtdLHA9dyxkPWV8fHgmJmIuZmluZC5UQUcoIioiLGkpLGg9ays9bnVsbD09cD8xOk1hdGgucmFuZG9tKCl8fC4xLGc9ZC5sZW5ndGg7Zm9yKGkmJih3PXQ9PUN8fHR8fGkpO2whPT1nJiZudWxsIT0obz1kW2xdKTtsKyspe2lmKHgmJm8pe2E9MCx0fHxvLm93bmVyRG9jdW1lbnQ9PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKGs9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihrPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPVMuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1TLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtTLmZpbmQ9ZCxTLmV4cHI9ZC5zZWxlY3RvcnMsUy5leHByWyI6Il09Uy5leHByLnBzZXVkb3MsUy51bmlxdWVTb3J0PVMudW5pcXVlPWQudW5pcXVlU29ydCxTLnRleHQ9ZC5nZXRUZXh0LFMuaXNYTUxEb2M9ZC5pc1hNTCxTLmNvbnRhaW5zPWQuY29udGFpbnMsUy5lc2NhcGVTZWxlY3Rvcj1kLmVzY2FwZTt2YXIgaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmUyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LGs9Uy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgTj0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBEKGUsbixyKXtyZXR1cm4gbShuKT9TLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/Uy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6Uy5maWx0ZXIobixlLHIpfVMuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP1MuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106Uy5maW5kLm1hdGNoZXMoZSxTLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LFMuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhTKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihTLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKVMuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9TLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFEKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZrLnRlc3QoZSk/UyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBqLHE9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoUy5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8aiwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOnEuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgUz90WzBdOnQsUy5tZXJnZSh0aGlzLFMucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLE4udGVzdChyWzFdKSYmUy5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoUyk6Uy5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1TLmZuLGo9UyhFKTt2YXIgTD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxIPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIE8oZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihTLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJlMoZSk7aWYoIWsudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/Uy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKFMoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhTLnVuaXF1ZVNvcnQoUy5tZXJnZSh0aGlzLmdldCgpLFMoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksUy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBPKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBUKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gVChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5jb250ZW50RG9jdW1lbnQmJnIoZS5jb250ZW50RG9jdW1lbnQpP2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksUy5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7Uy5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPVMubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49Uy5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKEhbcl18fFMudW5pcXVlU29ydChuKSxMLnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUD0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIFIoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTShlKXt0aHJvdyBlfWZ1bmN0aW9uIEkoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fVMuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LFMuZWFjaChlLm1hdGNoKFApfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTpTLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7Uy5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPVMuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPFMuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0sUy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixTLkNhbGxiYWNrcygibWVtb3J5IiksUy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKHIpe1MuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLFIscyksbCh1LG8sTSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scyksbCh1LG8sUixvLm5vdGlmeVdpdGgpKSk6KGEhPT1SJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJlMuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PU0mJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KFMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPVMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpSLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpSKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOk0pKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9TLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1TLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoSShlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlJKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciBXPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1MuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJlcudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0sUy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPVMuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLFMucmVhZHkoKX1TLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7Uy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LFMuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1TLnJlYWR5V2FpdDpTLmlzUmVhZHkpfHwoUy5pc1JlYWR5PSEwKSE9PWUmJjA8LS1TLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtTXSl9fSksUy5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoUy5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyICQ9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKSQoZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChTKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LF89L14tbXMtLyx6PS8tKFthLXpdKS9nO2Z1bmN0aW9uIFUoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUucmVwbGFjZShfLCJtcy0iKS5yZXBsYWNlKHosVSl9dmFyIFY9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBHKCl7dGhpcy5leHBhbmRvPVMuZXhwYW5kbytHLnVpZCsrfUcudWlkPTEsRy5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sVihlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbWCh0KV09bjtlbHNlIGZvcihyIGluIHQpaVtYKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1godCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFgpOih0PVgodCkpaW4gcj9bdF06dC5tYXRjaChQKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fFMuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIVMuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBZPW5ldyBHLFE9bmV3IEcsSj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLEs9L1tBLVpdL2c7ZnVuY3Rpb24gWihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKEssIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249InRydWUiPT09KGk9bil8fCJmYWxzZSIhPT1pJiYoIm51bGwiPT09aT9udWxsOmk9PT0raSsiIj8raTpKLnRlc3QoaSk/SlNPTi5wYXJzZShpKTppKX1jYXRjaChlKXt9US5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59Uy5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIFEuaGFzRGF0YShlKXx8WS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7US5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7WS5yZW1vdmUoZSx0KX19KSxTLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihuLGUpe3ZhciB0LHIsaSxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09bil7aWYodGhpcy5sZW5ndGgmJihpPVEuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhWS5nZXQobywiaGFzRGF0YUF0dHJzIikpKXt0PWEubGVuZ3RoO3doaWxlKHQtLSlhW3RdJiYwPT09KHI9YVt0XS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYocj1YKHIuc2xpY2UoNSkpLFoobyxyLGlbcl0pKTtZLnNldChvLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuKX0pOiQodGhpcyxmdW5jdGlvbihlKXt2YXIgdDtpZihvJiZ2b2lkIDA9PT1lKXJldHVybiB2b2lkIDAhPT0odD1RLmdldChvLG4pKT90OnZvaWQgMCE9PSh0PVoobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1EucmVtb3ZlKHRoaXMsZSl9KX19KSxTLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1ZLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVkuYWNjZXNzKGUsdCxTLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1TLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPVMuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtTLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gWS5nZXQoZSxuKXx8WS5hY2Nlc3MoZSxuLHtlbXB0eTpTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtZLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxTLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/Uy5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TLnF1ZXVlKHRoaXMsdCxuKTtTLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJlMuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1TLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1ZLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciBlZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSx0ZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrZWUrIikoW2EteiVdKikkIiwiaSIpLG5lPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0scmU9RS5kb2N1bWVudEVsZW1lbnQsaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxvZT17Y29tcG9zZWQ6ITB9O3JlLmdldFJvb3ROb2RlJiYoaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKG9lKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBhZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZpZShlKSYmIm5vbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIpfTtmdW5jdGlvbiBzZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIFMuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KFMuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9ZS5ub2RlVHlwZSYmKFMuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZ0ZS5leGVjKFMuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSlTLnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsUy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciB1ZT17fTtmdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgbixyLGksbyxhLHMsdSxsPVtdLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspKHI9ZVtjXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYobFtjXT1ZLmdldChyLCJkaXNwbGF5Iil8fG51bGwsbFtjXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGxbY109KHU9YT1vPXZvaWQgMCxhPShpPXIpLm93bmVyRG9jdW1lbnQscz1pLm5vZGVOYW1lLCh1PXVlW3NdKXx8KG89YS5ib2R5LmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudChzKSksdT1TLmNzcyhvLCJkaXNwbGF5Iiksby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCJub25lIj09PXUmJih1PSJibG9jayIpLHVlW3NdPXUpKSkpOiJub25lIiE9PW4mJihsW2NdPSJub25lIixZLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihjPTA7YzxmO2MrKyludWxsIT1sW2NdJiYoZVtjXS5zdHlsZS5kaXNwbGF5PWxbY10pO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP1ModGhpcykuc2hvdygpOlModGhpcykuaGlkZSgpfSl9fSk7dmFyIGNlLGZlLHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKS9pLGhlPS9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaTtjZT1FLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoZmU9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxmZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksY2UuYXBwZW5kQ2hpbGQoZmUpLHkuY2hlY2tDbG9uZT1jZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsY2UuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+Iix5Lm5vQ2xvbmVDaGVja2VkPSEhY2UuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGNlLmlubmVySFRNTD0iPG9wdGlvbj48L29wdGlvbj4iLHkub3B0aW9uPSEhY2UubGFzdENoaWxkO3ZhciBnZT17dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2Z1bmN0aW9uIHZlKGUsdCl7dmFyIG47cmV0dXJuIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZBKGUsdCk/Uy5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5ZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylZLnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8WS5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX1nZS50Ym9keT1nZS50Zm9vdD1nZS5jb2xncm91cD1nZS5jYXB0aW9uPWdlLnRoZWFkLGdlLnRoPWdlLnRkLHkub3B0aW9ufHwoZ2Uub3B0Z3JvdXA9Z2Uub3B0aW9uPVsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0pO3ZhciBtZT0vPHwmIz9cdys7LztmdW5jdGlvbiB4ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsdSxsLGMsZj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGQ9MCxoPWUubGVuZ3RoO2Q8aDtkKyspaWYoKG89ZVtkXSl8fDA9PT1vKWlmKCJvYmplY3QiPT09dyhvKSlTLm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0oZGUuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK1MuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDtTLm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PSIifWVsc2UgcC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO2YudGV4dENvbnRlbnQ9IiIsZD0wO3doaWxlKG89cFtkKytdKWlmKHImJi0xPFMuaW5BcnJheShvLHIpKWkmJmkucHVzaChvKTtlbHNlIGlmKGw9aWUobyksYT12ZShmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZ5ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBmfXZhciBiZT0vXmtleS8sd2U9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFRlPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBDZSgpe3JldHVybiEwfWZ1bmN0aW9uIEVlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gZT09PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBFLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX0oKT09KCJmb2N1cyI9PT10KX1mdW5jdGlvbiBrZShlLHQsbixyLGksbyl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihzIGluInN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKSx0KWtlKGUscyxuLHIsdFtzXSxvKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXZvaWQgMCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPUVlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiBTKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Uy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9ZnVuY3Rpb24gQWUoZSxpLG8pe28/KFkuc2V0KGUsaSwhMSksUy5ldmVudC5hZGQoZSxpLHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdCxuLHI9WS5nZXQodGhpcyxpKTtpZigxJmUuaXNUcmlnZ2VyJiZ0aGlzW2ldKXtpZihyLmxlbmd0aCkoUy5ldmVudC5zcGVjaWFsW2ldfHx7fSkuZGVsZWdhdGVUeXBlJiZlLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYocj1zLmNhbGwoYXJndW1lbnRzKSxZLnNldCh0aGlzLGksciksdD1vKHRoaXMsaSksdGhpc1tpXSgpLHIhPT0obj1ZLmdldCh0aGlzLGkpKXx8dD9ZLnNldCh0aGlzLGksITEpOm49e30sciE9PW4pcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG4udmFsdWV9ZWxzZSByLmxlbmd0aCYmKFkuc2V0KHRoaXMsaSx7dmFsdWU6Uy5ldmVudC50cmlnZ2VyKFMuZXh0ZW5kKHJbMF0sUy5FdmVudC5wcm90b3R5cGUpLHIuc2xpY2UoMSksdGhpcyl9KSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19KSk6dm9pZCAwPT09WS5nZXQoZSxpKSYmUy5ldmVudC5hZGQoZSxpLENlKX1TLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuZ2V0KHQpO2lmKFYodCkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJlMuZmluZC5tYXRjaGVzU2VsZWN0b3IocmUsaSksbi5ndWlkfHwobi5ndWlkPVMuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkpLChhPXYuaGFuZGxlKXx8KGE9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBTJiZTLmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9TLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSxsPShlPShlfHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0pZD1nPShzPVRlLmV4ZWMoZVtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPVMuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJlMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVbZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKHQscixoLGEpfHx0LmFkZEV2ZW50TGlzdGVuZXImJnQuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwodCxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksUy5ldmVudC5nbG9iYWxbZF09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuaGFzRGF0YShlKSYmWS5nZXQoZSk7aWYodiYmKHU9di5ldmVudHMpKXtsPSh0PSh0fHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0paWYoZD1nPShzPVRlLmV4ZWModFtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCl7Zj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2FsbChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChlLGgsdi5oYW5kbGUpfHxTLnJlbW92ZUV2ZW50KGUsZCx2LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVsc2UgZm9yKGQgaW4gdSlTLmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO1MuaXNFbXB0eU9iamVjdCh1KSYmWS5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHU9Uy5ldmVudC5maXgoZSksbD0oWS5nZXQodGhpcywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW3UudHlwZV18fFtdLGM9Uy5ldmVudC5zcGVjaWFsW3UudHlwZV18fHt9O2ZvcihzWzBdPXUsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspc1t0XT1hcmd1bWVudHNbdF07aWYodS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHUpKXthPVMuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHUsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiF1LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3UuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiF1LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpdS5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhdS5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwodS5oYW5kbGVPYmo9byx1LmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoUy5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxzKSkmJiExPT09KHUucmVzdWx0PXIpJiYodS5wcmV2ZW50RGVmYXVsdCgpLHUuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyx1KSx1LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPFMoaSx0aGlzKS5pbmRleChsKTpTLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUy5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW1MuZXhwYW5kb10/ZTpuZXcgUy5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siLENlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZZLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxTLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxTLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUy5FdmVudCkpcmV0dXJuIG5ldyBTLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/Q2U6RWUsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmUy5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW1MuZXhwYW5kb109ITB9LFMuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpFZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LFMuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmYmUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJndlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIEFlKHRoaXMsZSxTZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQWUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGtlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4ga2UodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49RWUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLERlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGplPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBxZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gSGUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIE9lKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gUGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZEZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksUGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksTGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLEhlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShqZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gUmUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylPZShvW3JdLGFbcl0pO2Vsc2UgT2UoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFJlKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fHFlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cWUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIU5lLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgTWU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksSWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxXZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sRmU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBCZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fEllKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmTWUudGVzdChhKSYmRmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gJGUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4Iix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPTM8cGFyc2VJbnQoci5oZWlnaHQpLHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgX2U9WyJXZWJraXQiLCJNb3oiLCJtcyJdLHplPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsVWU9e307ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8VWVbZV07cmV0dXJuIHR8fChlIGluIHplP2U6VWVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1fZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPV9lW25dK3QpaW4gemUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVmU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLEdlPS9eLS0vLFllPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxRZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gSmUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gS2UoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBaZShlLHQsbil7dmFyIHI9SWUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9QmUoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoTWUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStLZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBldChlLHQsbixyLGkpe3JldHVybiBuZXcgZXQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUJlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PUdlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PVhlKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIEdlLnRlc3QodCl8fCh0PVhlKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1CZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBRZSYmKGk9UWVbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVZlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9aZShlLHUsbik6V2UoZSxZZSxmdW5jdGlvbigpe3JldHVybiBaZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPUllKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/S2UoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktS2UoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxKZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD0kZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoQmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVdlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PUplKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPUllKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49ZXQpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZXQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9ZXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmV0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWV0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6ZXQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPWV0LnByb3RvdHlwZSwoZXQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtYZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPWV0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1ldC5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIHR0LG50LHJ0LGl0LG90PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxhdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIHN0KCl7bnQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShzdCk6Qy5zZXRUaW1lb3V0KHN0LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiB1dCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0dD12b2lkIDB9KSx0dD1EYXRlLm5vdygpfWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBjdChlLHQsbil7Zm9yKHZhciByLGk9KGZ0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGZ0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGZ0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWZ0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9dHR8fHV0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOnR0fHx1dCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWZ0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsY3QsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChmdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sZnQudHdlZW5lcnNbbl09ZnQudHdlZW5lcnNbbl18fFtdLGZ0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0sb3QudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PWN0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9mdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6ZnQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9ZnQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZhdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobHQociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOmx0KCJzaG93Iiksc2xpZGVVcDpsdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmx0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IodHQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSx0dD12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe250fHwobnQ9ITAsc3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe250PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHJ0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpdD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHJ0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT1ydC52YWx1ZSx5Lm9wdFNlbGVjdGVkPWl0LnNlbGVjdGVkLChydD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixydC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXJ0LnZhbHVlO3ZhciBwdCxkdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP3B0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkscHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWR0W3RdfHxTLmZpbmQuYXR0cjtkdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZHRbb10sZHRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxkdFtvXT1pKSxyfX0pO3ZhciBodD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGd0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6aHQudGVzdChlLm5vZGVOYW1lKXx8Z3QudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUseXQodGhpcykpKX0pO2lmKChlPW10KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT15dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSx5dCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT1tdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUseXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9bXQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9eXQodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK3Z0KHl0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHh0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh4dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDp2dChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBidD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sd3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLGJ0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHd0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx3dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgVHQ9Qy5sb2NhdGlvbixDdD17Z3VpZDpEYXRlLm5vdygpfSxFdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dD0obmV3IEMuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChlKXt0PXZvaWQgMH1yZXR1cm4gdCYmIXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fTt2YXIgU3Q9L1xbXF0kLyxrdD0vXHI/XG4vZyxBdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksTnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIER0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxTdC50ZXN0KG4pP2kobix0KTpEdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUR0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpRHQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmTnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUF0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShrdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uoa3QsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIganQ9LyUyMC9nLHF0PS8jLiokLyxMdD0vKFs/Jl0pXz1bXiZdKi8sSHQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxPdD0vXig/OkdFVHxIRUFEKSQvLFB0PS9eXC9cLy8sUnQ9e30sTXQ9e30sSXQ9IiovIi5jb25jYXQoIioiKSxXdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBGdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIEJ0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PU10O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gJHQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfVd0LmhyZWY9VHQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VHQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChUdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpJdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/JHQoJHQoZSxTLmFqYXhTZXR0aW5ncyksdCk6JHQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6RnQoUnQpLGFqYXhUcmFuc3BvcnQ6RnQoTXQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1IdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShQdCxUdC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49V3QucHJvdG9jb2wrIi8vIitXdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLEJ0KFJ0LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IU90LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UocXQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKGp0LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oRXQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoTHQsIiQxIiksbz0oRXQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0N0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK0l0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9QnQoTXQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIF90PXswOjIwMCwxMjIzOjIwNH0senQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhenQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4genQseS5hamF4PXp0PSEhenQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHx6dCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChfdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVXQsWHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WHQucG9wKCl8fFMuZXhwYW5kbysiXyIrQ3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVnQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVnQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEV0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxYdC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoVXQ9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1VdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPXZ0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOigibnVtYmVyIj09dHlwZW9mIGYudG9wJiYoZi50b3ArPSJweCIpLCJudW1iZXIiPT10eXBlb2YgZi5sZWZ0JiYoZi5sZWZ0Kz0icHgiKSxjLmNzcyhmKSl9fSxTLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLG4scj10aGlzWzBdO3JldHVybiByP3IuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGU9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOmUudG9wK24ucGFnZVlPZmZzZXQsbGVmdDplLmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9OnZvaWQgMH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoImZpeGVkIj09PVMuY3NzKHIsInBvc2l0aW9uIikpdD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2V7dD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O3doaWxlKGUmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLnBhcmVudE5vZGU7ZSYmZSE9PXImJjE9PT1lLm5vZGVUeXBlJiYoKGk9UyhlKS5vZmZzZXQoKSkudG9wKz1TLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLGkubGVmdCs9Uy5jc3MoZSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3AtUy5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtaS5sZWZ0LVMuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShlJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8cmV9KX19KSxTLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxpKXt2YXIgbz0icGFnZVlPZmZzZXQiPT09aTtTLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHgoZSk/cj1lOjk9PT1lLm5vZGVUeXBlJiYocj1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1uKXJldHVybiByP3JbaV06ZVt0XTtyP3Iuc2Nyb2xsVG8obz9yLnBhZ2VYT2Zmc2V0Om4sbz9uOnIucGFnZVlPZmZzZXQpOmVbdF09bn0sdCxlLGFyZ3VtZW50cy5sZW5ndGgpfX0pLFMuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe1MuY3NzSG9va3Nbbl09JGUoeS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdD1CZShlLG4pLE1lLnRlc3QodCk/UyhlKS5wb3NpdGlvbigpW25dKyJweCI6dH0pfSksUy5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxzKXtTLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6cywiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKHIsbyl7Uy5mbltvXT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBlKSxpPXJ8fCghMD09PWV8fCEwPT09dD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHgoZSk/MD09PW8uaW5kZXhPZigib3V0ZXIiKT9lWyJpbm5lciIrYV06ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWUubm9kZVR5cGU/KHI9ZS5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoZS5ib2R5WyJzY3JvbGwiK2FdLHJbInNjcm9sbCIrYV0sZS5ib2R5WyJvZmZzZXQiK2FdLHJbIm9mZnNldCIrYV0sclsiY2xpZW50IithXSkpOnZvaWQgMD09PW4/Uy5jc3MoZSx0LGkpOlMuc3R5bGUoZSx0LG4saSl9LHMsbj9lOnZvaWQgMCxuKX19KX0pLFMuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLFMuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX0saG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksUy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7Uy5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSk7dmFyIEd0PS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztTLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fFMuZ3VpZCsrLGl9LFMuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Uy5yZWFkeVdhaXQrKzpTLnJlYWR5KCEwKX0sUy5pc0FycmF5PUFycmF5LmlzQXJyYXksUy5wYXJzZUpTT049SlNPTi5wYXJzZSxTLm5vZGVOYW1lPUEsUy5pc0Z1bmN0aW9uPW0sUy5pc1dpbmRvdz14LFMuY2FtZWxDYXNlPVgsUy50eXBlPXcsUy5ub3c9RGF0ZS5ub3csUy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Uy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxTLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoR3QsIiIpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciBZdD1DLmpRdWVyeSxRdD1DLiQ7cmV0dXJuIFMubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09UyYmKEMuJD1RdCksZSYmQy5qUXVlcnk9PT1TJiYoQy5qUXVlcnk9WXQpLFN9LCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKEMualF1ZXJ5PUMuJD1TKSxTfSk7Cg==\"></script>\n",
-       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA==\"></script>\n",
-       "<link href=\"data:text/css;charset-utf-8;base64,LmNvbnRhaW5lci1mbHVpZC5jcm9zc3RhbGstYnNjb2xze21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweDt3aGl0ZS1zcGFjZTpub3JtYWx9Ym9keT4uY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHN7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30uY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDoxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTpibG9jaztwYWRkaW5nLXJpZ2h0OmluaGVyaXR9fS5jcm9zc3RhbGstaW5wdXR7bWFyZ2luLWJvdHRvbToxNXB4fS5jcm9zc3RhbGstaW5wdXQgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY3Jvc3N0YWxrLWlucHV0IGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHg7bGluZS1oZWlnaHQ6bm9ybWFsfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveD5sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9ImNoZWNrYm94Il17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3grLmNoZWNrYm94e21hcmdpbi10b3A6LTVweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveC1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lKy5jaGVja2JveC1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9Cg==\" rel=\"stylesheet\" />\n",
-       "<link href=\"data:text/css;charset-utf-8;base64,LyoKanVzdCBoZXJlIHNvIHRoYXQgcGxvdGx5IHdvcmtzCmNvcnJlY3RseSB3aXRoIGlvc2xpZGVzLgpzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvNDYzCiovCgpzbGlkZTpub3QoLmN1cnJlbnQpIC5wbG90bHkuaHRtbC13aWRnZXR7CiAgZGlzcGxheTogbm9uZTsKfQo=\" rel=\"stylesheet\" />\n",
-       "<script title=\"plotly-main\" src=\"data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYyLjExLjEKKiBDb3B5cmlnaHQgMjAxMi0yMDIyLCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7ZnVuY3Rpb24gaShvLHMpe2lmKCFyW29dKXtpZighZVtvXSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIXMmJmwpcmV0dXJuIGwobywhMCk7aWYoYSlyZXR1cm4gYShvLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciB1PXJbb109e2V4cG9ydHM6e319O2Vbb11bMF0uY2FsbCh1LmV4cG9ydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBpKGVbb11bMV1bdF18fHQpfSksdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxpPXsiWCxYIGRpdiI6J2RpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsnLCJYIGlucHV0LFggYnV0dG9uIjonZm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmOycsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3MgZWFzZSAwczsiLCJYIC5tb2RlYmFyLS1ob3Zlcj46bm90KC53YXRlcm1hcmspIjoib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZSAwczsiLCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciAubW9kZWJhci1ncm91cCI6Im9wYWNpdHk6MTsiLCJYIC5tb2RlYmFyLWdyb3VwIjoiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwOyIsIlggLm1vZGViYXItYnRuIjoicG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE2cHg7cGFkZGluZzozcHggNHB4O2hlaWdodDoyMnB4O2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiwiWCAubW9kZWJhci1idG4gc3ZnIjoicG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIjoiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZsZXgtZW5kO21heC1oZWlnaHQ6MTAwJTsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIHN2ZyI6InRvcDotMXB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAiOiJkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7cGFkZGluZy1sZWZ0OjBweDtwYWRkaW5nLWJvdHRvbTo4cHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCAubW9kZWJhci1idG4iOiJkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlciI6InBvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTtkaXNwbGF5Om5vbmU7b3BhY2l0eTowO3otaW5kZXg6MTAwMTtwb2ludGVyLWV2ZW50czpub25lO3RvcDoxMTAlO3JpZ2h0OjUwJTsiLCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXIiOiJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUiOidjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7JywiWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJjb250ZW50OmF0dHIoZGF0YS10aXRsZSk7YmFja2dyb3VuZDojNjk3MzhhO2NvbG9yOiNmZmY7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7IiwiWCAudmVydGljYWwgW2RhdGEtdGl0bGVdOmJlZm9yZSxYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJ0b3A6MCU7cmlnaHQ6MjAwJTsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlIjoiYm9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojNjk3MzhhO21hcmdpbi10b3A6OHB4O21hcmdpbi1yaWdodDotMzBweDsiLCJYIC5zZWxlY3Qtb3V0bGluZSI6ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC5zZWxlY3Qtb3V0bGluZS0xIjoic3Ryb2tlOiNmZmY7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTojMDAwO3N0cm9rZS1kYXNoYXJyYXk6MnB4IDJweDsiLFk6J2ZvbnQtZmFtaWx5OiJPcGVuIFNhbnMiLHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjtwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OycsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwuOSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3dvcmQtd3JhcDpicmVhay13b3JkOy1tcy1oeXBoZW5zOmF1dG87LXdlYmtpdC1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvOyIsIlkgLm5vdGlmaWVyLWNsb3NlIjoiY29sb3I6I2ZmZjtvcGFjaXR5Oi44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0seyIuLi9zcmMvbGliIjo0OTh9XSwyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjExMTN9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo2NTF9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXJwb2xhciI6NjY0fV0sNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6Njc0fV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjozNTl9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6NjgzfV0sODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6NzAyfV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIjo3MTZ9XSwxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94Ijo3MjN9XSwxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb25lIil9LHsiLi4vc3JjL3RyYWNlcy9jb25lIjo3Mjl9XSwxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyIjo3NDR9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Ijo3NTV9XSwxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvcmUiKX0seyIuLi9zcmMvY29yZSI6NDc2fV0sMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZGVuc2l0eW1hcGJveCIpfSx7Ii4uL3NyYy90cmFjZXMvZGVuc2l0eW1hcGJveCI6NzYzfV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlciIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlciI6MTExNH1dLDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Z1bm5lbCIpfSx7Ii4uL3NyYy90cmFjZXMvZnVubmVsIjo3NzN9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIjo3ODJ9XSwxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjExMTV9XSwyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo3OTV9XSwyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6ODA2fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjgxOH1dLDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6ODI0fV0sMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjgyOH1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ljaWNsZSIpfSx7Ii4uL3NyYy90cmFjZXMvaWNpY2xlIjo4MzR9XSwyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pbWFnZSIpfSx7Ii4uL3NyYy90cmFjZXMvaW1hZ2UiOjg0N31dLDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3Zpb2xpbiIpLHQoIi4vZnVubmVsIiksdCgiLi93YXRlcmZhbGwiKSx0KCIuL2ltYWdlIiksdCgiLi9waWUiKSx0KCIuL3N1bmJ1cnN0IiksdCgiLi90cmVlbWFwIiksdCgiLi9pY2ljbGUiKSx0KCIuL2Z1bm5lbGFyZWEiKSx0KCIuL3NjYXR0ZXIzZCIpLHQoIi4vc3VyZmFjZSIpLHQoIi4vaXNvc3VyZmFjZSIpLHQoIi4vdm9sdW1lIiksdCgiLi9tZXNoM2QiKSx0KCIuL2NvbmUiKSx0KCIuL3N0cmVhbXR1YmUiKSx0KCIuL3NjYXR0ZXJnZW8iKSx0KCIuL2Nob3JvcGxldGgiKSx0KCIuL3NjYXR0ZXJnbCIpLHQoIi4vc3Bsb20iKSx0KCIuL3BvaW50Y2xvdWQiKSx0KCIuL2hlYXRtYXBnbCIpLHQoIi4vcGFyY29vcmRzIiksdCgiLi9wYXJjYXRzIiksdCgiLi9zY2F0dGVybWFwYm94IiksdCgiLi9jaG9yb3BsZXRobWFwYm94IiksdCgiLi9kZW5zaXR5bWFwYm94IiksdCgiLi9zYW5rZXkiKSx0KCIuL2luZGljYXRvciIpLHQoIi4vdGFibGUiKSx0KCIuL2NhcnBldCIpLHQoIi4vc2NhdHRlcmNhcnBldCIpLHQoIi4vY29udG91cmNhcnBldCIpLHQoIi4vb2hsYyIpLHQoIi4vY2FuZGxlc3RpY2siKSx0KCIuL3NjYXR0ZXJwb2xhciIpLHQoIi4vc2NhdHRlcnBvbGFyZ2wiKSx0KCIuL2JhcnBvbGFyIiksdCgiLi9zY2F0dGVyc21pdGgiKSx0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IiksdCgiLi9jYWxlbmRhcnMiKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYWdncmVnYXRlIjoyLCIuL2JhciI6MywiLi9iYXJwb2xhciI6NCwiLi9ib3giOjUsIi4vY2FsZW5kYXJzIjo2LCIuL2NhbmRsZXN0aWNrIjo3LCIuL2NhcnBldCI6OCwiLi9jaG9yb3BsZXRoIjo5LCIuL2Nob3JvcGxldGhtYXBib3giOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2RlbnNpdHltYXBib3giOjE1LCIuL2ZpbHRlciI6MTYsIi4vZnVubmVsIjoxNywiLi9mdW5uZWxhcmVhIjoxOCwiLi9ncm91cGJ5IjoxOSwiLi9oZWF0bWFwIjoyMCwiLi9oZWF0bWFwZ2wiOjIxLCIuL2hpc3RvZ3JhbSI6MjIsIi4vaGlzdG9ncmFtMmQiOjIzLCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MjQsIi4vaWNpY2xlIjoyNSwiLi9pbWFnZSI6MjYsIi4vaW5kaWNhdG9yIjoyOCwiLi9pc29zdXJmYWNlIjoyOSwiLi9tZXNoM2QiOjMwLCIuL29obGMiOjMxLCIuL3BhcmNhdHMiOjMyLCIuL3BhcmNvb3JkcyI6MzMsIi4vcGllIjozNCwiLi9wb2ludGNsb3VkIjozNSwiLi9zYW5rZXkiOjM2LCIuL3NjYXR0ZXIzZCI6MzcsIi4vc2NhdHRlcmNhcnBldCI6MzgsIi4vc2NhdHRlcmdlbyI6MzksIi4vc2NhdHRlcmdsIjo0MCwiLi9zY2F0dGVybWFwYm94Ijo0MSwiLi9zY2F0dGVycG9sYXIiOjQyLCIuL3NjYXR0ZXJwb2xhcmdsIjo0MywiLi9zY2F0dGVyc21pdGgiOjQ0LCIuL3NjYXR0ZXJ0ZXJuYXJ5Ijo0NSwiLi9zb3J0Ijo0NiwiLi9zcGxvbSI6NDcsIi4vc3RyZWFtdHViZSI6NDgsIi4vc3VuYnVyc3QiOjQ5LCIuL3N1cmZhY2UiOjUwLCIuL3RhYmxlIjo1MSwiLi90cmVlbWFwIjo1MiwiLi92aW9saW4iOjUzLCIuL3ZvbHVtZSI6NTQsIi4vd2F0ZXJmYWxsIjo1NX1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2luZGljYXRvciIpfSx7Ii4uL3NyYy90cmFjZXMvaW5kaWNhdG9yIjo4NTV9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIjo4NjF9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9tZXNoM2QiKX0seyIuLi9zcmMvdHJhY2VzL21lc2gzZCI6ODY2fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvb2hsYyIpfSx7Ii4uL3NyYy90cmFjZXMvb2hsYyI6ODcxfV0sMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY2F0cyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY2F0cyI6ODgwfV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiOjg5MX1dLDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BpZSIpfSx7Ii4uL3NyYy90cmFjZXMvcGllIjo5MDJ9XSwzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIil9LHsiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIjo5MTF9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6OTE3fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjk1NX1dLDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiOjk2Mn1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjk3MH1dLDQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIjo5ODR9XSw0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Ijo5OTR9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciI6MTAwMn1dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJnbCI6MTAxMH1dLDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJzbWl0aCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnNtaXRoIjoxMDE3fV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5IjoxMDI1fV0sNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjoxMTE3fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3Bsb20iKX0seyIuLi9zcmMvdHJhY2VzL3NwbG9tIjoxMDM1fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSI6MTA0M31dLDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0Iil9LHsiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCI6MTA1MX1dLDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiOjEwNjB9XSw1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90YWJsZSIpfSx7Ii4uL3NyYy90cmFjZXMvdGFibGUiOjEwNjh9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90cmVlbWFwIil9LHsiLi4vc3JjL3RyYWNlcy90cmVlbWFwIjoxMDc5fV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdmlvbGluIil9LHsiLi4vc3JjL3RyYWNlcy92aW9saW4iOjEwOTJ9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92b2x1bWUiKX0seyIuLi9zcmMvdHJhY2VzL3ZvbHVtZSI6MTEwMH1dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCIpfSx7Ii4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIjoxMTA4fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIiksdCgiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbnVsbCl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aT1pJiZpLmhhc093blByb3BlcnR5KCJkZWZhdWx0Iik/aS5kZWZhdWx0Omk7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9O2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gZih0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGYodC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnBhcnRPZkN5Y2xlPT09ZS5wYXJ0T2ZDeWNsZT90LnkwLWUueTA6InRvcCI9PT10LmNpcmN1bGFyTGlua1R5cGV8fCJib3R0b20iPT09ZS5jaXJjdWxhckxpbmtUeXBlPy0xOjF9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LnNvdXJjZSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gcCh0LnRhcmdldCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49MDtpZihudWxsPT09cil7Zm9yKHZhciBhPVtdLG89MDtvPHQubGlua3MubGVuZ3RoO28rKyl7dmFyIHM9dC5saW5rc1tvXSxsPXMuc291cmNlLmluZGV4LGM9cy50YXJnZXQuaW5kZXg7YVtsXXx8KGFbbF09W10pLGFbY118fChhW2NdPVtdKSwtMT09PWFbbF0uaW5kZXhPZihjKSYmYVtsXS5wdXNoKGMpfXZhciB1PWkoYSk7dS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH0pKTt2YXIgZj17fTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXt2YXIgaD11W29dLnNsaWNlKC0yKTtmW2hbMF1dfHwoZltoWzBdXT17fSksZltoWzBdXVtoWzFdXT0hMH10LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0LmluZGV4LHI9dC5zb3VyY2UuaW5kZXg7ZT09PXJ8fGZbcl0mJmZbcl1bZV0/KHQuY2lyY3VsYXI9ITAsdC5jaXJjdWxhckxpbmtJRD1uLG4rPTEpOnQuY2lyY3VsYXI9ITF9KSl9ZWxzZSB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlW3JdPHQudGFyZ2V0W3JdP3QuY2lyY3VsYXI9ITE6KHQuY2lyY3VsYXI9ITAsdC5jaXJjdWxhckxpbmtJRD1uLG4rPTEpfSkpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj0wLG49MDt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGkpe2kuY2lyY3VsYXImJihpLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlfHxpLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlP2kuY2lyY3VsYXJMaW5rVHlwZT1pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlP2kuc291cmNlLmNpcmN1bGFyTGlua1R5cGU6aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZTppLmNpcmN1bGFyTGlua1R5cGU9cjxuPyJ0b3AiOiJib3R0b20iLCJ0b3AiPT1pLmNpcmN1bGFyTGlua1R5cGU/cis9MTpuKz0xLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LGUpIT1iKGkuc291cmNlLGUpJiZiKHQsZSkhPWIoaS50YXJnZXQsZSl8fCh0LmNpcmN1bGFyTGlua1R5cGU9aS5jaXJjdWxhckxpbmtUeXBlKX0pKSl9KSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT09dC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSxxKHQsZSkmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkpfSkpfWZ1bmN0aW9uIFQodCl7dmFyIGU9TWF0aC5hYnModC55MS10LnkwKSxyPU1hdGguYWJzKHQudGFyZ2V0LngwLXQuc291cmNlLngxKTtyZXR1cm4gTWF0aC5hdGFuKHIvZSl9ZnVuY3Rpb24gayh0LGUpe3ZhciByPTA7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXImJiFxKHQsZSk/cisxOnJ9KSk7dmFyIG49MDtyZXR1cm4gdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuPXQuY2lyY3VsYXImJiFxKHQsZSk/bisxOm59KSkscitufWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5zb3VyY2Uuc291cmNlTGlua3Mscj0wO2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyP3IrMTpyfSkpO3ZhciBuPXQudGFyZ2V0LnRhcmdldExpbmtzLGk9MDtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXtpPXQuY2lyY3VsYXI/aSsxOml9KSksIShyPjF8fGk+MSl9ZnVuY3Rpb24gTSh0LGUscil7cmV0dXJuIHQuc29ydChFKSx0LmZvckVhY2goKGZ1bmN0aW9uKG4saSl7dmFyIGEsbyxzPTA7aWYocShuLHIpJiZBKG4pKW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMjtlbHNle2Zvcih2YXIgbD0wO2w8aTtsKyspaWYoYT10W2ldLG89dFtsXSwhKGEuc291cmNlLmNvbHVtbjxvLnRhcmdldC5jb2x1bW58fGEudGFyZ2V0LmNvbHVtbj5vLnNvdXJjZS5jb2x1bW4pKXt2YXIgYz10W2xdLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIrdFtsXS53aWR0aC8yK2U7cz1jPnM/YzpzfW4uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcj1zK24ud2lkdGgvMn19KSksdH1mdW5jdGlvbiBTKHQscixpLGEpe3ZhciBvPWUubWluKHQubGlua3MsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS55MH0pKTt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyUGF0aERhdGE9e30pfSkpLE0odC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGV9KSkscixhKSxNKHQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlfSkpLHIsYSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmNpcmN1bGFyKXtpZihlLmNpcmN1bGFyUGF0aERhdGEuYXJjUmFkaXVzPWUud2lkdGgrMTAsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyPTUsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VXaWR0aD1lLnNvdXJjZS54MS1lLnNvdXJjZS54MCxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWD1lLnNvdXJjZS54MCtlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGgsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFg9ZS50YXJnZXQueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVk9ZS55MCxlLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WT1lLnkxLHEoZSxhKSYmQShlKSllLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTErMjUrZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MC0yNS1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpO2Vsc2V7dmFyIHM9ZS5zb3VyY2UuY29sdW1uLGw9ZS5jaXJjdWxhckxpbmtUeXBlLGM9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pKTsiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChDKTpjLnNvcnQoTCk7dmFyIHU9MDtjLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7dC5jaXJjdWxhckxpbmtJRD09ZS5jaXJjdWxhckxpbmtJRCYmKGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIrbipyK3UpLHUrPXQud2lkdGh9KSkscz1lLnRhcmdldC5jb2x1bW4sYz10LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSkpLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KEkpOmMuc29ydChQKSx1PTAsYy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIrbipyK3UpLHUrPXQud2lkdGh9KSksImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1NYXRoLm1heChpLGUuc291cmNlLnkxLGUudGFyZ2V0LnkxKSsyNStlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PW8tMjUtZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKX1lLmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXJ9aWYoZS5jaXJjdWxhcillLnBhdGg9ZnVuY3Rpb24odCl7dmFyIGU9IiI7ZT0idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPyJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZLXQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFktdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk6Ik0iK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSt0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WTtyZXR1cm4gZX0oZSk7ZWxzZXt2YXIgZj1uLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKChmdW5jdGlvbih0KXtyZXR1cm5bdC5zb3VyY2UueDArKHQuc291cmNlLngxLXQuc291cmNlLngwKSx0LnkwXX0pKS50YXJnZXQoKGZ1bmN0aW9uKHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX0pKTtlLnBhdGg9ZihlKX19KSl9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiBPKHQpPT1PKGUpPyJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/Qyh0LGUpOkwodCxlKTpPKGUpLU8odCl9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBlLnkwLXQueTB9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiB0LnkxLWUueTF9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBlLnkxLXQueTF9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uLXQuc291cmNlLmNvbHVtbn1mdW5jdGlvbiB6KHQpe3JldHVybiB0LnRhcmdldC54MC10LnNvdXJjZS54MX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9VCh0KSxuPXooZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09SCh0KT90LnkxK246dC55MS1ufWZ1bmN0aW9uIFIodCxlKXt2YXIgcj1UKHQpLG49eihlKS9NYXRoLnRhbihyKTtyZXR1cm4idXAiPT1IKHQpP3QueTEtbjp0LnkxK259ZnVuY3Rpb24gRih0LGUscixuKXt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKCFpLmNpcmN1bGFyJiZpLnRhcmdldC5jb2x1bW4taS5zb3VyY2UuY29sdW1uPjEpe3ZhciBhPWkuc291cmNlLmNvbHVtbisxLG89aS50YXJnZXQuY29sdW1uLTEscz0xLGw9by1hKzE7Zm9yKHM9MTthPD1vO2ErKyxzKyspdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihvKXtpZihvLmNvbHVtbj09YSl7dmFyIGMsdT1zLyhsKzEpLGY9TWF0aC5wb3coMS11LDMpLGg9Myp1Kk1hdGgucG93KDEtdSwyKSxwPTMqTWF0aC5wb3codSwyKSooMS11KSxkPU1hdGgucG93KHUsMyksbT1mKmkueTAraCppLnkwK3AqaS55MStkKmkueTEsZz1tLWkud2lkdGgvMix2PW0raS53aWR0aC8yO2c+by55MCYmZzxvLnkxPyhjPW8ueTEtZysxMCxjPSJib3R0b20iPT1vLmNpcmN1bGFyTGlua1R5cGU/YzotYyxvPU4obyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZCKG8sdCkmJk4odCxjLGUscil9KSkpOih2Pm8ueTAmJnY8by55MXx8ZzxvLnkwJiZ2Pm8ueTEpJiYoYz12LW8ueTArMTAsbz1OKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJk4odCxjLGUscil9KSkpfX0pKX19KSl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiB0LnkwPmUueTAmJnQueTA8ZS55MXx8KHQueTE+ZS55MCYmdC55MTxlLnkxfHx0LnkwPGUueTAmJnQueTE+ZS55MSl9ZnVuY3Rpb24gTih0LGUscixuKXtyZXR1cm4gdC55MCtlPj1yJiZ0LnkxK2U8PW4mJih0LnkwPXQueTArZSx0LnkxPXQueTErZSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9dC55MStlfSkpLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD10LnkwK2V9KSkpLHR9ZnVuY3Rpb24gaih0LGUscixuKXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKGkpe24mJmkueSsoaS55MS1pLnkwKT5lJiYoaS55PWkueS0oaS55KyhpLnkxLWkueTApLWUpKTt2YXIgYT10LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGIodC5zb3VyY2Uscik9PWIoaSxyKX0pKSxvPWEubGVuZ3RoO28+MSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe2lmKCF0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcil7aWYodC50YXJnZXQuY29sdW1uPT1lLnRhcmdldC5jb2x1bW4pcmV0dXJuIHQueTEtZS55MTtpZighVih0LGUpKXJldHVybiB0LnkxLWUueTE7aWYodC50YXJnZXQuY29sdW1uPmUudGFyZ2V0LmNvbHVtbil7dmFyIHI9UihlLHQpO3JldHVybiB0LnkxLXJ9aWYoZS50YXJnZXQuY29sdW1uPnQudGFyZ2V0LmNvbHVtbilyZXR1cm4gUih0LGUpLWUueTF9cmV0dXJuIHQuY2lyY3VsYXImJiFlLmNpcmN1bGFyPyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj8idG9wIj09ZS5jaXJjdWxhckxpbmtUeXBlPzE6LTE6dC5jaXJjdWxhciYmZS5jaXJjdWxhcj90LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/dC50YXJnZXQuY29sdW1uPT09ZS50YXJnZXQuY29sdW1uP3QudGFyZ2V0LnkxLWUudGFyZ2V0LnkxOmUudGFyZ2V0LmNvbHVtbi10LnRhcmdldC5jb2x1bW46dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj9lLnRhcmdldC55MS10LnRhcmdldC55MTp0LnRhcmdldC5jb2x1bW4tZS50YXJnZXQuY29sdW1uOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTp2b2lkIDB9KSk7dmFyIHM9aS55MDthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9cyt0LndpZHRoLzIscys9dC53aWR0aH0pKSxhLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aWYoImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciByPWUrMSxuPTA7cjxvO3IrKyluKz1hW3JdLndpZHRoO3QueTA9aS55MS1uLXQud2lkdGgvMn19KSl9KSl9ZnVuY3Rpb24gVSh0LGUscil7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGIodC50YXJnZXQscik9PWIoZSxyKX0pKSxpPW4ubGVuZ3RoO2k+MSYmbi5zb3J0KChmdW5jdGlvbih0LGUpe2lmKCF0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcil7aWYodC5zb3VyY2UuY29sdW1uPT1lLnNvdXJjZS5jb2x1bW4pcmV0dXJuIHQueTAtZS55MDtpZighVih0LGUpKXJldHVybiB0LnkwLWUueTA7aWYoZS5zb3VyY2UuY29sdW1uPHQuc291cmNlLmNvbHVtbil7dmFyIHI9RChlLHQpO3JldHVybiB0LnkwLXJ9aWYodC5zb3VyY2UuY29sdW1uPGUuc291cmNlLmNvbHVtbilyZXR1cm4gRCh0LGUpLWUueTB9cmV0dXJuIHQuY2lyY3VsYXImJiFlLmNpcmN1bGFyPyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj8idG9wIj09ZS5jaXJjdWxhckxpbmtUeXBlPzE6LTE6dC5jaXJjdWxhciYmZS5jaXJjdWxhcj90LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOnQuc291cmNlLmNvbHVtbi1lLnNvdXJjZS5jb2x1bW46dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTplLnNvdXJjZS5jb2x1bW4tdC5zb3VyY2UuY29sdW1uOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTp2b2lkIDB9KSk7dmFyIGE9ZS55MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9YSt0LndpZHRoLzIsYSs9dC53aWR0aH0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKHQscil7aWYoImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciBhPXIrMSxvPTA7YTxpO2ErKylvKz1uW2FdLndpZHRoO3QueTE9ZS55MS1vLXQud2lkdGgvMn19KSl9KSl9ZnVuY3Rpb24gVih0LGUpe3JldHVybiBIKHQpPT1IKGUpfWZ1bmN0aW9uIEgodCl7cmV0dXJuIHQueTAtdC55MT4wPyJ1cCI6ImRvd24ifWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gYih0LnNvdXJjZSxlKT09Yih0LnRhcmdldCxlKX1mdW5jdGlvbiBHKHQscixuKXt2YXIgaT10Lm5vZGVzLGE9dC5saW5rcyxvPSExLHM9ITE7aWYoYS5mb3JFYWNoKChmdW5jdGlvbih0KXsidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP289ITA6ImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSYmKHM9ITApfSkpLDA9PW98fDA9PXMpe3ZhciBsPWUubWluKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkwfSkpLGM9KG4tcikvKGUubWF4KGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxfSkpLWwpO2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KHQueTEtdC55MCkqYzt0LnkwPSh0LnkwLWwpKmMsdC55MT10LnkwK2V9KSksYS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPSh0LnkwLWwpKmMsdC55MT0odC55MS1sKSpjLHQud2lkdGg9dC53aWR0aCpjfSkpfX10LnNhbmtleUNpcmN1bGFyPWZ1bmN0aW9uKCl7dmFyIHQsbixpPTAsYT0wLGI9MSxUPTEsQT0yNCxNPWcsRT1vLEw9dixDPXksUD0zMixJPTIsTz1udWxsO2Z1bmN0aW9uIHooKXt2YXIgdD17bm9kZXM6TC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6Qy5hcHBseShudWxsLGFyZ3VtZW50cyl9O0QodCksXyh0LE0sTyksUih0KSxCKHQpLHcodCxNKSxOKHQsUCxNKSxWKHQpO2Zvcih2YXIgZT00LHI9MDtyPGU7cisrKWoodCxULE0pLFUodCxULE0pLEYodCxhLFQsTSksaih0LFQsTSksVSh0LFQsTSk7cmV0dXJuIEcodCxhLFQpLFModCxJLFQsTSksdH1mdW5jdGlvbiBEKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LmluZGV4PWUsdC5zb3VyY2VMaW5rcz1bXSx0LnRhcmdldExpbmtzPVtdfSkpO3ZhciBlPXIubWFwKHQubm9kZXMsTSk7cmV0dXJuIHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt0LmluZGV4PXI7dmFyIG49dC5zb3VyY2UsaT10LnRhcmdldDsib2JqZWN0IiE9PSh2b2lkIDA9PT1uPyJ1bmRlZmluZWQiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLCJvYmplY3QiIT09KHZvaWQgMD09PWk/InVuZGVmaW5lZCI6bChpKSkmJihpPXQudGFyZ2V0PXgoZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pKSx0fWZ1bmN0aW9uIFIodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnBhcnRPZkN5Y2xlPSExLHQudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxoKSxlLnN1bSh0LnRhcmdldExpbmtzLGgpKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSkpLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSl9KSl9ZnVuY3Rpb24gQih0KXt2YXIgZSxyLG47Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlcHRoPW4sdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyLmluZGV4T2YodC50YXJnZXQpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC50YXJnZXQpfSkpfSkpO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5oZWlnaHQ9bix0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnNvdXJjZSk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnNvdXJjZSl9KSl9KSk7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNvbHVtbj1NYXRoLmZsb29yKEUuY2FsbChudWxsLHQsbikpfSkpfWZ1bmN0aW9uIE4obyxzLGwpe3ZhciBjPXIubmVzdCgpLmtleSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSkpLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKG8ubm9kZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSkpOyFmdW5jdGlvbihyKXtpZihuKXt2YXIgcz0xLzA7Yy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1UKm4vKHQubGVuZ3RoKzEpO3M9ZTxzP2U6c30pKSx0PXN9dmFyIGw9ZS5taW4oYywoZnVuY3Rpb24ocil7cmV0dXJuKFQtYS0oci5sZW5ndGgtMSkqdCkvZS5zdW0ocixoKX0pKTtsKj0uMyxvLmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpsfSkpO3ZhciB1PWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz1lLm1heCh0Lm5vZGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSk7cmV0dXJuIHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKCJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/cis9dC53aWR0aDpuKz10LndpZHRoLDA9PXQudGFyZ2V0LmNvbHVtbiYmKGErPXQud2lkdGgpLHQuc291cmNlLmNvbHVtbj09byYmKGkrPXQud2lkdGgpKX0pKSx7dG9wOnI9cj4wP3IrMjUrMTA6cixib3R0b206bj1uPjA/bisyNSsxMDpuLGxlZnQ6YT1hPjA/YSsyNSsxMDphLHJpZ2h0Omk9aT4wP2krMjUrMTA6aX19KG8pLGY9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLm1heCh0Lm5vZGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSksbz1iLWkscz1ULWEsbD1vLyhvK3IucmlnaHQrci5sZWZ0KSxjPXMvKHMrci50b3Arci5ib3R0b20pO3JldHVybiBpPWkqbCtyLmxlZnQsYj0wPT1yLnJpZ2h0P2I6YipsLGE9YSpjK3IudG9wLFQqPWMsdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LngwPWkrdC5jb2x1bW4qKChiLWktQSkvbiksdC54MT10LngwK0F9KSksY30obyx1KTtsKj1mLG8ubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKmx9KSksYy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7dC5kZXB0aD09Yy5sZW5ndGgtMSYmMT09ZXx8MD09dC5kZXB0aCYmMT09ZT8odC55MD1ULzItdC52YWx1ZSpsLHQueTE9dC55MCt0LnZhbHVlKmwpOnQucGFydE9mQ3ljbGU/MD09ayh0LHIpPyh0LnkwPVQvMituLHQueTE9dC55MCt0LnZhbHVlKmwpOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/KHQueTA9YStuLHQueTE9dC55MCt0LnZhbHVlKmwpOih0LnkwPVQtdC52YWx1ZSpsLW4sdC55MT10LnkwK3QudmFsdWUqbCk6MD09dS50b3B8fDA9PXUuYm90dG9tPyh0LnkwPShULWEpL2Uqbix0LnkxPXQueTArdC52YWx1ZSpsKToodC55MD0oVC1hKS8yLWUvMituLHQueTE9dC55MCt0LnZhbHVlKmwpfSkpfSkpfShsKSx5KCk7Zm9yKHZhciB1PTEsZz1zO2c+MDstLWcpdih1Kj0uOTksbCkseSgpO2Z1bmN0aW9uIHYodCxyKXt2YXIgbj1jLmxlbmd0aDtjLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPWkubGVuZ3RoLG89aVswXS5kZXB0aDtpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBzO2lmKGkuc291cmNlTGlua3MubGVuZ3RofHxpLnRhcmdldExpbmtzLmxlbmd0aClpZihpLnBhcnRPZkN5Y2xlJiZrKGkscik+MCk7ZWxzZSBpZigwPT1vJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9VC8yLXMvMixpLnkxPVQvMitzLzI7ZWxzZSBpZihvPT1uLTEmJjE9PWEpcz1pLnkxLWkueTAsaS55MD1ULzItcy8yLGkueTE9VC8yK3MvMjtlbHNle3ZhciBsPWUubWVhbihpLnNvdXJjZUxpbmtzLG0pLGM9ZS5tZWFuKGkudGFyZ2V0TGlua3MsZCksdT0oKGwmJmM/KGwrYykvMjpsfHxjKS1wKGkpKSp0O2kueTArPXUsaS55MSs9dX19KSl9KSl9ZnVuY3Rpb24geSgpe2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsbixpLG89YSxzPWUubGVuZ3RoO2ZvcihlLnNvcnQoZiksaT0wO2k8czsrK2kpKG49by0ocj1lW2ldKS55MCk+MCYmKHIueTArPW4sci55MSs9biksbz1yLnkxK3Q7aWYoKG49by10LVQpPjApZm9yKG89ci55MC09bixyLnkxLT1uLGk9cy0yO2k+PTA7LS1pKShuPShyPWVbaV0pLnkxK3Qtbyk+MCYmKHIueTAtPW4sci55MS09biksbz1yLnkwfSkpfX1mdW5jdGlvbiBWKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KHUpLHQudGFyZ2V0TGlua3Muc29ydChjKX0pKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lLG49dC55MSxpPW47dC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkwPW4tdC53aWR0aC8yLG4tPXQud2lkdGgpOih0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGgpfSkpLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MT1pLXQud2lkdGgvMixpLT10LndpZHRoKToodC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRoKX0pKX0pKX1yZXR1cm4gei5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLHopOk19LHoubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpFfSx6Lm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0rdCx6KTpBfSx6Lm5vZGVQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLHopOnR9LHoubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLHopOkx9LHoubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLHopOkN9LHouc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1hPTAsYj0rdFswXSxUPSt0WzFdLHopOltiLWksVC1hXX0sei5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sYj0rdFsxXVswXSxhPSt0WzBdWzFdLFQ9K3RbMV1bMV0seik6W1tpLGFdLFtiLFRdXX0sei5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPSt0LHopOlB9LHouY2lyY3VsYXJMaW5rR2FwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPSt0LHopOkl9LHoubm9kZVBhZGRpbmdSYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCx6KTpufSx6LnNvcnROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz10LHopOk99LHoudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB3KHQsTSksVih0KSx0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyTGlua1R5cGU9dC55MCt0LnkxPFQ/InRvcCI6ImJvdHRvbSIsdC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUsdC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUpfSkpLGoodCxULE0sITEpLFUodCxULE0pLFModCxJLFQsTSksdH0sen0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxhKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1hcnJheSI6MTAyLCJkMy1jb2xsZWN0aW9uIjoxMDMsImQzLXNoYXBlIjoxMTQsImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiOjEyNH1dLDU3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUscixuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvdXJjZUxpbmtzLmxlbmd0aD90LmRlcHRoOmUtMX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBjKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gZih0KXtyZXR1cm4odC55MCt0LnkxKS8yfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGYodC5zb3VyY2UpKnQudmFsdWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZih0LnRhcmdldCkqdC52YWx1ZX1mdW5jdGlvbiBkKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiByfWZ1bmN0aW9uIHkodCl7cmV0dXJuW3Quc291cmNlLngxLHQueTBdfWZ1bmN0aW9uIHgodCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfXQuc2Fua2V5PWZ1bmN0aW9uKCl7dmFyIHQ9MCxuPTAsaT0xLHk9MSx4PTI0LGI9OCxfPWQsdz1hLFQ9bSxrPWcsQT0zMjtmdW5jdGlvbiBNKCl7dmFyIHQ9e25vZGVzOlQuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOmsuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gUyh0KSxFKHQpLEwodCksQyh0KSxQKHQpLHR9ZnVuY3Rpb24gUyh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pKTt2YXIgZT1yLm1hcCh0Lm5vZGVzLF8pO3QubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt0LmluZGV4PXI7dmFyIG49dC5zb3VyY2UsaT10LnRhcmdldDsib2JqZWN0IiE9dHlwZW9mIG4mJihuPXQuc291cmNlPXYoZSxuKSksIm9iamVjdCIhPXR5cGVvZiBpJiYoaT10LnRhcmdldD12KGUsaSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxpLnRhcmdldExpbmtzLnB1c2godCl9KSl9ZnVuY3Rpb24gRSh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyx1KSxlLnN1bSh0LnRhcmdldExpbmtzLHUpKX0pKX1mdW5jdGlvbiBMKGUpe3ZhciByLG4sYTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVwdGg9YSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe24uaW5kZXhPZih0LnRhcmdldCk8MCYmbi5wdXNoKHQudGFyZ2V0KX0pKX0pKTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PWEsdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLmluZGV4T2YodC5zb3VyY2UpPDAmJm4ucHVzaCh0LnNvdXJjZSl9KSl9KSk7dmFyIG89KGktdC14KS8oYS0xKTtlLm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UueDE9KGUueDA9dCtNYXRoLm1heCgwLE1hdGgubWluKGEtMSxNYXRoLmZsb29yKHcuY2FsbChudWxsLGUsYSkpKSkqbykreH0pKX1mdW5jdGlvbiBDKHQpe3ZhciBpPXIubmVzdCgpLmtleSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueDB9KSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXModC5ub2RlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KSk7IWZ1bmN0aW9uKCl7dmFyIHI9ZS5tYXgoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSkpLGE9Mi8zKih5LW4pLyhyLTEpO2I+YSYmKGI9YSk7dmFyIG89ZS5taW4oaSwoZnVuY3Rpb24odCl7cmV0dXJuKHktbi0odC5sZW5ndGgtMSkqYikvZS5zdW0odCx1KX0pKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnkxPSh0LnkwPWUpK3QudmFsdWUqb30pKX0pKSx0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpvfSkpfSgpLGQoKTtmb3IodmFyIGE9MSxvPUE7bz4wOy0tbylsKGEqPS45OSksZCgpLHMoYSksZCgpO2Z1bmN0aW9uIHModCl7aS5mb3JFYWNoKChmdW5jdGlvbihyKXtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKHIudGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci50YXJnZXRMaW5rcyxoKS9lLnN1bShyLnRhcmdldExpbmtzLHUpLWYocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pKX0pKX1mdW5jdGlvbiBsKHQpe2kuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnNvdXJjZUxpbmtzLmxlbmd0aCl7dmFyIG49KGUuc3VtKHIuc291cmNlTGlua3MscCkvZS5zdW0oci5zb3VyY2VMaW5rcyx1KS1mKHIpKSp0O3IueTArPW4sci55MSs9bn19KSl9KSl9ZnVuY3Rpb24gZCgpe2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpLGE9bixvPXQubGVuZ3RoO2Zvcih0LnNvcnQoYyksaT0wO2k8bzsrK2kpKHI9YS0oZT10W2ldKS55MCk+MCYmKGUueTArPXIsZS55MSs9ciksYT1lLnkxK2I7aWYoKHI9YS1iLXkpPjApZm9yKGE9ZS55MC09cixlLnkxLT1yLGk9by0yO2k+PTA7LS1pKShyPShlPXRbaV0pLnkxK2ItYSk+MCYmKGUueTAtPXIsZS55MS09ciksYT1lLnkwfSkpfX1mdW5jdGlvbiBQKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KGwpLHQudGFyZ2V0TGlua3Muc29ydChzKX0pKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD1lK3Qud2lkdGgvMixlKz10LndpZHRofSkpLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRofSkpfSkpfXJldHVybiBNLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gUCh0KSx0fSxNLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksTSk6X30sTS5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOnd9LE0ubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0LE0pOnh9LE0ubm9kZVBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K3QsTSk6Yn0sTS5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksTSk6VH0sTS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksTSk6a30sTS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW49MCxpPStlWzBdLHk9K2VbMV0sTSk6W2ktdCx5LW5dfSxNLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXVswXSxpPStlWzFdWzBdLG49K2VbMF1bMV0seT0rZVsxXVsxXSxNKTpbW3Qsbl0sW2kseV1dfSxNLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K3QsTSk6QX0sTX0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxpKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1hLHQuc2Fua2V5TGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSh5KS50YXJnZXQoeCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1hcnJheSI6MTAyLCJkMy1jb2xsZWN0aW9uIjoxMDMsImQzLXNoYXBlIjoxMTR9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjguMCJ9LHI9W10uc2xpY2Usbj1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpfSxpPXNlbGYuZG9jdW1lbnQ7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudHx8dC5kb2N1bWVudHx8dCkuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlldyl9aWYoaSl0cnl7bihpLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaCh0KXtuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtlXTtyZXR1cm4gcn19aWYoRGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0pLGkpdHJ5e2kuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKHQpe3ZhciBzPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsbD1zLnNldEF0dHJpYnV0ZSxjPXMuc2V0QXR0cmlidXRlTlMsdT10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLGY9dS5zZXRQcm9wZXJ0eTtzLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe2wuY2FsbCh0aGlzLHQsZSsiIil9LHMuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLHIpe2MuY2FsbCh0aGlzLHQsZSxyKyIiKX0sdS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7Zi5jYWxsKHRoaXMsdCxlKyIiLHIpfX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBkKHQpe3JldHVybiFpc05hTih0KX1mdW5jdGlvbiBtKHQpe3JldHVybntsZWZ0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fXQuYXNjZW5kaW5nPWgsdC5kZXNjZW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSx0Lm1pbj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZyPm4mJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmcj5uJiYocj1uKX1yZXR1cm4gcn0sdC5tYXg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmbj5yJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+ciYmKHI9bil9cmV0dXJuIHJ9LHQuZXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPXRbYV0pJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1lbHNle2Zvcig7KythPG87KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9cmV0dXJuW3IsaV19LHQuc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9K3RbYV0pJiYobis9cik7ZWxzZSBmb3IoOysrYTxpOylkKHI9K2UuY2FsbCh0LHRbYV0sYSkpJiYobis9cik7cmV0dXJuIG59LHQubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTEsbz1pO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KWQocj1wKHRbYV0pKT9uKz1yOi0tbztlbHNlIGZvcig7KythPGk7KWQocj1wKGUuY2FsbCh0LHRbYV0sYSkpKT9uKz1yOi0tbztpZihvKXJldHVybiBuL299LHQucXVhbnRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj0odC5sZW5ndGgtMSkqZSsxLG49TWF0aC5mbG9vcihyKSxpPSt0W24tMV0sYT1yLW47cmV0dXJuIGE/aSthKih0W25dLWkpOml9LHQubWVkaWFuPWZ1bmN0aW9uKGUscil7dmFyIG4saT1bXSxhPWUubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288YTspZChuPXAoZVtvXSkpJiZpLnB1c2gobik7ZWxzZSBmb3IoOysrbzxhOylkKG49cChyLmNhbGwoZSxlW29dLG8pKSkmJmkucHVzaChuKTtpZihpLmxlbmd0aClyZXR1cm4gdC5xdWFudGlsZShpLnNvcnQoaCksLjUpfSx0LnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPTAscz0tMSxsPTA7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3M8aTspZChyPXAodFtzXSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7ZWxzZSBmb3IoOysrczxpOylkKHI9cChlLmNhbGwodCx0W3NdLHMpKSkmJihvKz0obj1yLWEpKihyLShhKz1uLysrbCkpKTtpZihsPjEpcmV0dXJuIG8vKGwtMSl9LHQuZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC52YXJpYW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGU/TWF0aC5zcXJ0KGUpOmV9O3ZhciBnPW0oaCk7ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3RMZWZ0PWcubGVmdCx0LmJpc2VjdD10LmJpc2VjdFJpZ2h0PWcucmlnaHQsdC5iaXNlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gbSgxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaCh0KGUpLHIpfTp0KX0sdC5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXsoYT1hcmd1bWVudHMubGVuZ3RoKTwzJiYocj10Lmxlbmd0aCxhPDImJihlPTApKTtmb3IodmFyIG4saSxhPXItZTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnBhaXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPXRbMF0saT1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylpW2VdPVtuLG49dFsrK2VdXTtyZXR1cm4gaX0sdC50cmFuc3Bvc2U9ZnVuY3Rpb24oZSl7aWYoIShhPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHI9LTEsbj10Lm1pbihlLHYpLGk9bmV3IEFycmF5KG4pOysrcjxuOylmb3IodmFyIGEsbz0tMSxzPWlbcl09bmV3IEFycmF5KGEpOysrbzxhOylzW29dPWVbb11bcl07cmV0dXJuIGl9LHQuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIHQudHJhbnNwb3NlKGFyZ3VtZW50cyl9LHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSx0Lm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKGU9KG49dFtpXSkubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9O3ZhciB5PU1hdGguYWJzO2Z1bmN0aW9uIHgodCl7Zm9yKHZhciBlPTE7dCplJTE7KWUqPTEwO3JldHVybiBlfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHIgaW4gZSlPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUscix7dmFsdWU6ZVtyXSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gXygpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfXQucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MSxhcmd1bWVudHMubGVuZ3RoPDImJihlPXQsdD0wKSksKGUtdCkvcj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixpPVtdLGE9eCh5KHIpKSxvPS0xO2lmKHQqPWEsZSo9YSwocio9YSk8MClmb3IoOyhuPXQrciorK28pPmU7KWkucHVzaChuL2EpO2Vsc2UgZm9yKDsobj10K3IqKytvKTxlOylpLnB1c2gobi9hKTtyZXR1cm4gaX0sdC5tYXA9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgXztpZih0IGluc3RhbmNlb2YgXyl0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5zZXQodCxlKX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07ZnVuY3Rpb24gdyh0KXtyZXR1cm4iX19wcm90b19fIj09KHQrPSIiKXx8IlwwIj09PXRbMF0/IlwwIit0OnR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iXDAiPT09KHQrPSIiKVswXT90LnNsaWNlKDEpOnR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdyh0KWluIHRoaXMuX31mdW5jdGlvbiBBKHQpe3JldHVybih0PXcodCkpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW3RdfWZ1bmN0aW9uIE0oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaChUKGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBTKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcy5fKSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBFKCl7Zm9yKHZhciB0IGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBMKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdH1mdW5jdGlvbiBQKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dDpufX1mdW5jdGlvbiBJKHQsZSl7aWYoZSBpbiB0KXJldHVybiBlO2U9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO2Zvcih2YXIgcj0wLG49Ty5sZW5ndGg7cjxuOysrcil7dmFyIGk9T1tyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19YihfLHtoYXM6ayxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1t3KHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1t3KHQpXT1lfSxyZW1vdmU6QSxrZXlzOk0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6VChlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpTLGVtcHR5OkUsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLFQoZSksdGhpcy5fW2VdKX19KSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCxhLHMpe2lmKHM+PWkubGVuZ3RoKXJldHVybiByP3IuY2FsbChuLGEpOmU/YS5zb3J0KGUpOmE7Zm9yKHZhciBsLGMsdSxmLGg9LTEscD1hLmxlbmd0aCxkPWlbcysrXSxtPW5ldyBfOysraDxwOykoZj1tLmdldChsPWQoYz1hW2hdKSkpP2YucHVzaChjKTptLnNldChsLFtjXSk7cmV0dXJuIHQ/KGM9dCgpLHU9ZnVuY3Rpb24oZSxyKXtjLnNldChlLG8odCxyLHMpKX0pOihjPXt9LHU9ZnVuY3Rpb24oZSxyKXtjW2VdPW8odCxyLHMpfSksbS5mb3JFYWNoKHUpLGN9cmV0dXJuIG4ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8oZSx0LDApfSxuLmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1bXSxvPWFbcisrXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSkpLG8/bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBvKHQua2V5LGUua2V5KX0pKTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LGIoTCx7aGFzOmssYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bdyh0Kz0iIildPSEwLHR9LHJlbW92ZTpBLHZhbHVlczpNLHNpemU6UyxlbXB0eTpFLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXRbcj1hcmd1bWVudHNbbl1dPVAodCxlLGVbcl0pO3JldHVybiB0fTt2YXIgTz1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiB6KCl7fWZ1bmN0aW9uIEQoKXt9ZnVuY3Rpb24gUih0KXt2YXIgZT1bXSxyPW5ldyBfO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKHI9bltpXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4saSl7dmFyIGEsbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsYT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGErMSkpLHIucmVtb3ZlKG4pKSxpJiZlLnB1c2goci5zZXQobix7b246aX0pKSx0KX0sbn1mdW5jdGlvbiBGKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIEIoKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIE4oZSl7Zm9yKHZhciByPW5ldyBELG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXJbYXJndW1lbnRzW25dXT1SKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RyeXt2YXIgbz1hLnNvdXJjZUV2ZW50PXQuZXZlbnQ7YS50YXJnZXQ9ZSx0LmV2ZW50PWEsclthLnR5cGVdLmFwcGx5KG4saSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBELGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Uih0KTtyZXR1cm4gdH0sRC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKGosIlxcJCYiKX07dmFyIGo9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIFYodCl7cmV0dXJuIFUodCxZKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0scT1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LEc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKEc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoSD1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0scT1TaXp6bGUsRz1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChpLmRvY3VtZW50RWxlbWVudCl9O3ZhciBZPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBXKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gcSh0LHRoaXMpfX1ZLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9Vyh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGkmJihyLl9fZGF0YV9fPWkuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIFYoYSl9LFkuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1bXTt0PVgodCk7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KWZvcih2YXIgcz10aGlzW2FdLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihpLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxhKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gVihpKX07dmFyIFo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOloseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gJChlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrdC5yZXF1b3RlKGUpKyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIHR0KHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgcj0odD10dCh0KS5tYXAocnQpKS5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248cjspdFtuXSh0aGlzLGkpfTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248cjspdFtuXSh0aGlzLGUpfX1mdW5jdGlvbiBydCh0KXt2YXIgZT0kKHQpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKGk9ci5jbGFzc0xpc3QpcmV0dXJuIG4/aS5hZGQodCk6aS5yZW1vdmUodCk7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO24/KGUubGFzdEluZGV4PTAsZS50ZXN0KGkpfHxyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLFEoaSsiICIrdCkpKTpyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLFEoaS5yZXBsYWNlKGUsIiAiKSkpfX1mdW5jdGlvbiBudCh0LGUscil7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX06ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gaXQodCxlKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1yfTpmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gYXQoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTooZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PVomJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG90KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gc3QodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIGx0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHKHRoaXMsdCl9fWZ1bmN0aW9uIGN0KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1oKSxmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gVSh0LGh0KSx0fXQubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxZLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goSyhyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEsoZSxyKSl9LFkuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PXR0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighJCh0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKGV0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goZXQodCxlKSl9LFkuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5lYWNoKG50KHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYobjwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbyhpKS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1yPSIifXJldHVybiB0aGlzLmVhY2gobnQodCxlLHIpKX0sWS5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChpdChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSkpfSxZLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxZLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sWS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9YXQodCksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxZLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PWF0KHQpLGU9VyhlKSx0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxZLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gob3QpfSxZLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8YTspKG49cltpXSkmJih0W2ldPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixpLGEsbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGY9TWF0aC5taW4obyx1KSxoPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgbSxnPW5ldyBfLHY9bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoaT10W25dKSYmKGcuaGFzKG09ZS5jYWxsKGksaS5fX2RhdGFfXyxuKSk/ZFtuXT1pOmcuc2V0KG0saSksdltuXT1tKTtmb3Iobj0tMTsrK248dTspKGk9Zy5nZXQobT1lLmNhbGwocixhPXJbbl0sbikpKT8hMCE9PWkmJihoW25dPWksaS5fX2RhdGFfXz1hKTpwW25dPXN0KGEpLGcuc2V0KG0sITApO2ZvcihuPS0xOysrbjxvOyluIGluIHYmJiEwIT09Zy5nZXQodltuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGhbbl09aSk6cFtuXT1zdChhKTtmb3IoO248dTsrK24pcFtuXT1zdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWgscC5wYXJlbnROb2RlPWgucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goaCksYy5wdXNoKGQpfXZhciBzPWZ0KFtdKSxsPVYoW10pLGM9VihbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxZLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxZLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bHQodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIFYoaSl9LFkub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFkuc29ydD1mdW5jdGlvbih0KXt0PWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFkuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcywoZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pKX0sWS5jYWxsPWZ1bmN0aW9uKHQpe3ZhciBlPW4oYXJndW1lbnRzKTtyZXR1cm4gdC5hcHBseShlWzBdPXRoaXMsZSksdGhpc30sWS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sWS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLmxlbmd0aDt0PGU7dCsrKWZvcih2YXIgcj10aGlzW3RdLG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sWS5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdXQodGhpcywoZnVuY3Rpb24oKXsrK3R9KSksdH07dmFyIGh0PVtdO2Z1bmN0aW9uIHB0KHQpe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgbyxzPXRbYV0udXBkYXRlLGw9cy5sZW5ndGg7Zm9yKGEhPXImJihyPWEsZT0wKSxpPj1lJiYoZT1pKzEpOyEobz1zW2VdKSYmKytlPGw7KTtyZXR1cm4gb319ZnVuY3Rpb24gZHQoZSxyLGkpe3ZhciBhPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1ndDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9bXQuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbYV0pfXJldHVybiBsJiYoZT1sLHM9dnQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2FdPXQsdC4kPWkpLHQuXz1yfTpjOnI/ejpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9ZnQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWh0LGh0LmFwcGVuZD1ZLmFwcGVuZCxodC5lbXB0eT1ZLmVtcHR5LGh0Lm5vZGU9WS5ub2RlLGh0LmNhbGw9WS5jYWxsLGh0LnNpemU9WS5zaXplLGh0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIFYobyl9LGh0Lmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPXB0KHRoaXMpKSxZLmluc2VydC5jYWxsKHRoaXMsdCxlKX0sdC5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhlPVtIKHQsaSldKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPVt0XSkucGFyZW50Tm9kZT1hKHQpLFYoW2VdKX0sdC5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhlPW4ocSh0LGkpKSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1uKHQpKS5wYXJlbnROb2RlPW51bGwsVihbZV0pfSxZLm9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSExKSx0KXRoaXMuZWFjaChkdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVsiX19vbiIrdF0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKGR0KHQsZSxyKSl9O3ZhciBtdD10Lm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTtmdW5jdGlvbiBndChlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10LmV2ZW50O3QuZXZlbnQ9bixyWzBdPXRoaXMuX19kYXRhX187dHJ5e2UuYXBwbHkodGhpcyxyKX1maW5hbGx5e3QuZXZlbnQ9aX19fWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9Z3QodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ci5jYWxsKHRoaXMsdCl9fWkmJm10LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBpJiZtdC5yZW1vdmUodCl9KSk7dmFyIHl0LHh0PTA7ZnVuY3Rpb24gYnQoZSl7dmFyIHI9Ii5kcmFnc3VwcHJlc3MtIisgKyt4dCxuPSJjbGljayIrcixpPXQuc2VsZWN0KG8oZSkpLm9uKCJ0b3VjaG1vdmUiK3IsRikub24oImRyYWdzdGFydCIrcixGKS5vbigic2VsZWN0c3RhcnQiK3IsRik7aWYobnVsbD09eXQmJih5dD0hKCJvbnNlbGVjdHN0YXJ0ImluIGUpJiZJKGUuc3R5bGUsInVzZXJTZWxlY3QiKSkseXQpe3ZhciBzPWEoZSkuc3R5bGUsbD1zW3l0XTtzW3l0XT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKGkub24ocixudWxsKSx5dCYmKHNbeXRdPWwpLHQpe3ZhciBlPWZ1bmN0aW9uKCl7aS5vbihuLG51bGwpfTtpLm9uKG4sKGZ1bmN0aW9uKCl7RigpLGUoKX0pLCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiB3dCh0LEIoKSl9O3ZhciBfdD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gd3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoX3Q8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtfdD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gX3Q/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiBUdCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9QigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3dCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1OKGEsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyh6LHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9cyhUdCx0LnRvdWNoLEMsInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10aGlzLHU9dC5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fHQuZXZlbnQudGFyZ2V0LGY9Yy5wYXJlbnROb2RlLGg9ZS5vZihjLGFyZ3VtZW50cykscD0wLGQ9bigpLG09Ii5kcmFnIisobnVsbD09ZD8iIjoiLSIrZCksZz10LnNlbGVjdChhKHUpKS5vbihvK20seCkub24ocyttLGIpLHY9YnQodSkseT1pKGYsZCk7ZnVuY3Rpb24geCgpe3ZhciB0LGUscj1pKGYsZCk7ciYmKHQ9clswXS15WzBdLGU9clsxXS15WzFdLHB8PXR8ZSx5PXIsaCh7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSkpfWZ1bmN0aW9uIGIoKXtpKGYsZCkmJihnLm9uKG8rbSxudWxsKS5vbihzK20sbnVsbCksdihwKSxoKHt0eXBlOiJkcmFnZW5kIn0pKX1sPXI/WyhsPXIuYXBwbHkoYyxhcmd1bWVudHMpKS54LXlbMF0sbC55LXlbMV1dOlswLDBdLGgoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1CKCkudG91Y2hlcyksZT9uKGUpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9d3QodCxlKTtyZXR1cm4gci5pZGVudGlmaWVyPWUuaWRlbnRpZmllcixyfSkpOltdfTt2YXIga3Q9MWUtNixBdD1NYXRoLlBJLE10PTIqQXQsU3Q9TXQta3QsRXQ9QXQvMixMdD1BdC8xODAsQ3Q9MTgwL0F0O2Z1bmN0aW9uIFB0KHQpe3JldHVybiB0PjE/RXQ6dDwtMT8tRXQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEl0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfXZhciBPdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDwxZS0xMiluPU1hdGgubG9nKGMvbykvT3Qscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cChPdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0oYypjLW8qbys0KmgpLygyKm8qMipwKSxtPShjKmMtbypvLTQqaCkvKDIqYyoyKnApLGc9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx2PU1hdGgubG9nKE1hdGguc3FydChtKm0rMSktbSk7bj0odi1nKS9PdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9SXQoZyksbD1vLygyKnApKihzKihlPU90KnIrZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krbCp1LGErbCpmLG8qcy9JdChPdCpyK2cpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxmLGg9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPVJ0LG09MjUwLGc9MCx2PSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPU4odywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24odixQKS5vbihEdCsiLnpvb20iLE8pLm9uKCJkYmxjbGljay56b29tIix6KS5vbihiLEkpfWZ1bmN0aW9uIFQodCl7cmV0dXJuWyh0WzBdLWgueCkvaC5rLCh0WzFdLWgueSkvaC5rXX1mdW5jdGlvbiBrKHQpe2guaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIEEodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmguaytoLngsdFsxXSpoLmsraC55XX0oZSksaC54Kz10WzBdLWVbMF0saC55Kz10WzFdLWVbMV19ZnVuY3Rpb24gTShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpoLngseTpoLnksazpoLmt9LGsoTWF0aC5wb3coMixhKSksQShyPW4saSksZT10LnNlbGVjdChlKSxtPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKG0pKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWgueCkvaC5rfSkpLm1hcChsLmludmVydCkpLGYmJmYuZG9tYWluKHUucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWgueSkvaC5rfSkpLm1hcCh1LmludmVydCkpfWZ1bmN0aW9uIEUodCl7ZysrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gTCh0KXtTKCksdCh7dHlwZToiem9vbSIsc2NhbGU6aC5rLHRyYW5zbGF0ZTpbaC54LGgueV19KX1mdW5jdGlvbiBDKHQpey0tZ3x8KHQoe3R5cGU6Inpvb21lbmQifSkscj1udWxsKX1mdW5jdGlvbiBQKCl7dmFyIGU9dGhpcyxyPV8ub2YoZSxhcmd1bWVudHMpLG49MCxpPXQuc2VsZWN0KG8oZSkpLm9uKHksbCkub24oeCxjKSxhPVQodC5tb3VzZShlKSkscz1idChlKTtmdW5jdGlvbiBsKCl7bj0xLEEodC5tb3VzZShlKSxhKSxMKHIpfWZ1bmN0aW9uIGMoKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEMocil9RGkuY2FsbChlKSxFKHIpfWZ1bmN0aW9uIEkoKXt2YXIgZSxyPXRoaXMsbj1fLm9mKHIsYXJndW1lbnRzKSxpPXt9LGE9MCxvPSIuem9vbS0iK3QuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcixsPSJ0b3VjaG1vdmUiK28sYz0idG91Y2hlbmQiK28sdT1bXSxmPXQuc2VsZWN0KHIpLHA9YnQocik7ZnVuY3Rpb24gZCgpe3ZhciBuPXQudG91Y2hlcyhyKTtyZXR1cm4gZT1oLmssbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkZW50aWZpZXIgaW4gaSYmKGlbdC5pZGVudGlmaWVyXT1UKHQpKX0pKSxufWZ1bmN0aW9uIG0oKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLGcpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxmPW4ubGVuZ3RoO288ZjsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLG09RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKG0tczw1MDApe3ZhciB2PXBbMF07TShyLHYsaVt2LmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coaC5rKS9NYXRoLkxOMikrMSksRigpfXM9bX1lbHNlIGlmKHAubGVuZ3RoPjEpe3Y9cFswXTt2YXIgeD1wWzFdLGI9dlswXS14WzBdLF89dlsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gZygpe3ZhciBvLGwsYyx1LGY9dC50b3VjaGVzKHIpO0RpLmNhbGwocik7Zm9yKHZhciBoPTAscD1mLmxlbmd0aDtoPHA7KytoLHU9bnVsbClpZihjPWZbaF0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLG09YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLGsobSplKX1zPW51bGwsQShvLGwpLEwobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxmLm9uKHYsUCkub24oYixJKSxwKCksQyhuKX1tKCksRShuKSxmLm9uKHYsbnVsbCkub24oYixtKX1mdW5jdGlvbiBPKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KERpLmNhbGwodGhpcyksZT1UKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2E9bnVsbCxDKGkpfSksNTApLEYoKSxrKE1hdGgucG93KDIsLjAwMip6dCgpKSpoLmspLEEocixlKSxMKGkpfWZ1bmN0aW9uIHooKXt2YXIgZT10Lm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coaC5rKS9NYXRoLkxOMjtNKHRoaXMsZSxUKGUpLHQuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX1yZXR1cm4gRHR8fChEdD0ib253aGVlbCJpbiBpPyh6dD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRlbHRhWSoodC5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSwid2hlZWwiKToib25tb3VzZXdoZWVsImluIGk/KHp0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooenQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZXRhaWx9LCJNb3pNb3VzZVBpeGVsU2Nyb2xsIikpLHcuZXZlbnQ9ZnVuY3Rpb24oZSl7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49aDtCaT90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7aD10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxFKGUpfSkpLnR3ZWVuKCJ6b29tOnpvb20iLChmdW5jdGlvbigpe3ZhciBpPXBbMF0sYT1wWzFdLG89cj9yWzBdOmkvMixzPXI/clsxXTphLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8taC54KS9oLmssKHMtaC55KS9oLmssaS9oLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxpL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49aS9yWzJdO3RoaXMuX19jaGFydF9fPWg9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEwoZSl9fSkpLmVhY2goImludGVycnVwdC56b29tIiwoZnVuY3Rpb24oKXtDKGUpfSkpLmVhY2goImVuZC56b29tIiwoZnVuY3Rpb24oKXtDKGUpfSkpOih0aGlzLl9fY2hhcnRfXz1oLEUoZSksTChlKSxDKGUpKX0pKX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9e3g6K3RbMF0seTordFsxXSxrOmgua30sUygpLHcpOltoLngsaC55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD17eDpoLngseTpoLnksazpudWxsfSxrKCt0KSxTKCksdyk6aC5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/UnQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3Qsdyk6bX0sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsdT10LmNvcHkoKSxoPXt4OjAseTowLGs6MX0sdyk6Zn0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgenQsRHQsUnQ9WzAsMS8wXTtmdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBCdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBCdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgQnQ/bmV3IEJ0KHQuaCx0LnMsdC5sKTpuZSgiIit0LGllLEJ0KTpuZXcgQnQodCxlLHIpfXQuY29sb3I9RnQsRnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPUJ0O3ZhciBOdD1CdC5wcm90b3R5cGU9bmV3IEZ0O2Z1bmN0aW9uIGp0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKXx8ZTwwPzA6ZT4xPzE6ZSxuPTIqKHI9cjwwPzA6cj4xPzE6ciktKGk9cjw9LjU/ciooMStlKTpyK2UtciplKSxuZXcgUXQoYSh0KzEyMCksYSh0KSxhKHQtMTIwKSl9ZnVuY3Rpb24gVXQoZSxyLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVXQ/KHRoaXMuaD0rZSx0aGlzLmM9K3Isdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIFV0P25ldyBVdChlLmgsZS5jLGUubCk6WHQoZSBpbnN0YW5jZW9mIHF0P2UubDooZT1hZSgoZT10LnJnYihlKSkucixlLmcsZS5iKSkubCxlLmEsZS5iKTpuZXcgVXQoZSxyLG4pfU50LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgQnQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LE50LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IEJ0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxOdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4ganQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx0LmhjbD1VdDt2YXIgVnQ9VXQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiBIdCh0LGUscil7cmV0dXJuIGlzTmFOKHQpJiYodD0wKSxpc05hTihlKSYmKGU9MCksbmV3IHF0KHIsTWF0aC5jb3ModCo9THQpKmUsTWF0aC5zaW4odCkqZSl9ZnVuY3Rpb24gcXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgcXQ/KHRoaXMubD0rdCx0aGlzLmE9K2Usdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIHF0P25ldyBxdCh0LmwsdC5hLHQuYik6dCBpbnN0YW5jZW9mIFV0P0h0KHQuaCx0LmMsdC5sKTphZSgodD1RdCh0KSkucix0LmcsdC5iKTpuZXcgcXQodCxlLHIpfVZ0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVXQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK0d0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sVnQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVXQodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1HdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFZ0LnJnYj1mdW5jdGlvbigpe3JldHVybiBIdCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LHQubGFiPXF0O3ZhciBHdD0xOCxZdD1xdC5wcm90b3R5cGU9bmV3IEZ0O2Z1bmN0aW9uIFd0KHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBRdChLdCgzLjI0MDQ1NDIqKGk9Ljk1MDQ3Klp0KGkpKS0xLjUzNzEzODUqKG49MSpadChuKSktLjQ5ODUzMTQqKGE9MS4wODg4MypadChhKSkpLEt0KC0uOTY5MjY2KmkrMS44NzYwMTA4Km4rLjA0MTU1NiphKSxLdCguMDU1NjQzNCppLS4yMDQwMjU5Km4rMS4wNTcyMjUyKmEpKX1mdW5jdGlvbiBYdCh0LGUscil7cmV0dXJuIHQ+MD9uZXcgVXQoTWF0aC5hdGFuMihyLGUpKkN0LE1hdGguc3FydChlKmUrcipyKSx0KTpuZXcgVXQoTmFOLE5hTix0KX1mdW5jdGlvbiBadCh0KXtyZXR1cm4gdD4uMjA2ODkzMDM0P3QqdCp0Oih0LTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIEp0KHQpe3JldHVybiB0Pi4wMDg4NTY/TWF0aC5wb3codCwxLzMpOjcuNzg3MDM3KnQrNC8yOX1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKHQ8PS4wMDMwND8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBRdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBRdD8odGhpcy5yPX5+dCx0aGlzLmc9fn5lLHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgUXQ/bmV3IFF0KHQucix0LmcsdC5iKTpuZSgiIit0LFF0LGp0KTpuZXcgUXQodCxlLHIpfWZ1bmN0aW9uICR0KHQpe3JldHVybiBuZXcgUXQodD4+MTYsdD4+OCYyNTUsMjU1JnQpfWZ1bmN0aW9uIHRlKHQpe3JldHVybiAkdCh0KSsiIn1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHF0KE1hdGgubWluKDEwMCx0aGlzLmwrR3QqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHF0KE1hdGgubWF4KDAsdGhpcy5sLUd0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSx0LnJnYj1RdDt2YXIgZWU9UXQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiByZSh0KXtyZXR1cm4gdDwxNj8iMCIrTWF0aC5tYXgoMCx0KS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LHQpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBuZSh0LGUscil7dmFyIG4saSxhLG89MCxzPTAsbD0wO2lmKG49LyhbYS16XSspXCgoLiopXCkvLmV4ZWModD10LnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPW5bMl0uc3BsaXQoIiwiKSxuWzFdKXtjYXNlImhzbCI6cmV0dXJuIHIocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiBlKHNlKGlbMF0pLHNlKGlbMV0pLHNlKGlbMl0pKX1yZXR1cm4oYT1sZS5nZXQodCkpP2UoYS5yLGEuZyxhLmIpOihudWxsPT10fHwiIyIhPT10LmNoYXJBdCgwKXx8aXNOYU4oYT1wYXJzZUludCh0LnNsaWNlKDEpLDE2KSl8fCg0PT09dC5sZW5ndGg/KG89KDM4NDAmYSk+PjQsb3w9bz4+NCxzPTI0MCZhLHN8PXM+PjQsbD0xNSZhLGx8PWw8PDQpOjc9PT10Lmxlbmd0aCYmKG89KDE2NzExNjgwJmEpPj4xNixzPSg2NTI4MCZhKT4+OCxsPTI1NSZhKSksZShvLHMsbCkpfWZ1bmN0aW9uIGllKHQsZSxyKXt2YXIgbixpLGE9TWF0aC5taW4odC89MjU1LGUvPTI1NSxyLz0yNTUpLG89TWF0aC5tYXgodCxlLHIpLHM9by1hLGw9KG8rYSkvMjtyZXR1cm4gcz8oaT1sPC41P3MvKG8rYSk6cy8oMi1vLWEpLG49dD09bz8oZS1yKS9zKyhlPHI/NjowKTplPT1vPyhyLXQpL3MrMjoodC1lKS9zKzQsbio9NjApOihuPU5hTixpPWw+MCYmbDwxPzA6biksbmV3IEJ0KG4saSxsKX1mdW5jdGlvbiBhZSh0LGUscil7dmFyIG49SnQoKC40MTI0NTY0Kih0PW9lKHQpKSsuMzU3NTc2MSooZT1vZShlKSkrLjE4MDQzNzUqKHI9b2UocikpKS8uOTUwNDcpLGk9SnQoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpLzEpO3JldHVybiBxdCgxMTYqaS0xNiw1MDAqKG4taSksMjAwKihpLUp0KCguMDE5MzMzOSp0Ky4xMTkxOTIqZSsuOTUwMzA0MSpyKS8xLjA4ODgzKSkpfWZ1bmN0aW9uIG9lKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHNlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIiUiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/TWF0aC5yb3VuZCgyLjU1KmUpOmV9ZWUuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7dD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSk7dmFyIGU9dGhpcy5yLHI9dGhpcy5nLG49dGhpcy5iLGk9MzA7cmV0dXJuIGV8fHJ8fG4/KGUmJmU8aSYmKGU9aSksciYmcjxpJiYocj1pKSxuJiZuPGkmJihuPWkpLG5ldyBRdChNYXRoLm1pbigyNTUsZS90KSxNYXRoLm1pbigyNTUsci90KSxNYXRoLm1pbigyNTUsbi90KSkpOm5ldyBRdChpLGksaSl9LGVlLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFF0KCh0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkqdGhpcy5yLHQqdGhpcy5nLHQqdGhpcy5iKX0sZWUuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIGllKHRoaXMucix0aGlzLmcsdGhpcy5iKX0sZWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrcmUodGhpcy5yKStyZSh0aGlzLmcpK3JlKHRoaXMuYil9O3ZhciBsZT10Lm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZnVuY3Rpb24gY2UodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiB1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxmZShlLHIsdCxuKX19ZnVuY3Rpb24gZmUoZSxyLGksYSl7dmFyIG89e30scz10LmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxsPXt9LGM9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtmdW5jdGlvbiBmKCl7dmFyIHQsZT1jLnN0YXR1cztpZighZSYmZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZVR5cGU7cmV0dXJuIGUmJiJ0ZXh0IiE9PWU/dC5yZXNwb25zZTp0LnJlc3BvbnNlVGV4dH0oYyl8fGU+PTIwMCYmZTwzMDB8fDMwND09PWUpe3RyeXt0PWkuY2FsbChvLGMpfWNhdGNoKHQpe3JldHVybiB2b2lkIHMuZXJyb3IuY2FsbChvLHQpfXMubG9hZC5jYWxsKG8sdCl9ZWxzZSBzLmVycm9yLmNhbGwobyxjKX1yZXR1cm4gc2VsZi5YRG9tYWluUmVxdWVzdCYmISgid2l0aENyZWRlbnRpYWxzImluIGMpJiYvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSkmJihjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1mOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmYoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe29bdF09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW3RdLmNvbmNhdChuKGFyZ3VtZW50cykpKX19KSksby5zZW5kPWZ1bmN0aW9uKHQsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSxjLm9wZW4odCxlLCEwKSxudWxsPT1yfHwiYWNjZXB0ImluIGx8fChsLmFjY2VwdD1yKyIsKi8qIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYSBpbiBsKWMuc2V0UmVxdWVzdEhlYWRlcihhLGxbYV0pO3JldHVybiBudWxsIT1yJiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVNaW1lVHlwZShyKSxudWxsIT11JiYoYy5yZXNwb25zZVR5cGU9dSksbnVsbCE9aSYmby5vbigiZXJyb3IiLGkpLm9uKCJsb2FkIiwoZnVuY3Rpb24odCl7aShudWxsLHQpfSkpLHMuYmVmb3Jlc2VuZC5jYWxsKG8sYyksYy5zZW5kKG51bGw9PW4/bnVsbDpuKSxvfSxvLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxvfSx0LnJlYmluZChvLHMsIm9uIiksbnVsbD09YT9vOm8uZ2V0KGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH0oYSkpfWxlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7bGUuc2V0KHQsJHQoZSkpfSkpLHQuZnVuY3Rvcj1jZSx0Lnhocj11ZShDKSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT1mZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsKGZ1bmN0aW9uKHQsbil7aWYocilyZXR1cm4gcih0LG4tMSk7dmFyIGk9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPXt9LG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpclt0W2ldXT1lW2ldO3JldHVybiByfTtyPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSkpfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGYoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWYoKSkhPT1vOyl7Zm9yKHZhciBoPVtdO3IhPT1hJiZyIT09bzspaC5wdXNoKHIpLHI9ZigpO2UmJm51bGw9PShoPWUoaCx1KyspKXx8cy5wdXNoKGgpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClyLmhhcyhlKXx8bi5wdXNoKHIuYWRkKGUpKX0pKSxbbi5tYXAobCkuam9pbih0KV0uY29uY2F0KGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBsKGVbdF0pfSkpLmpvaW4odCl9KSkpLmpvaW4oIlxuIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0saX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgaGUscGUsZGUsbWUsZ2U9dGhpc1tJKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gdmUodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXIrZSxhPXtjOnQsdDppLG46bnVsbH07cmV0dXJuIHBlP3BlLm49YTpoZT1hLHBlPWEsZGV8fChtZT1jbGVhclRpbWVvdXQobWUpLGRlPTEsZ2UoeWUpKSxhfWZ1bmN0aW9uIHllKCl7dmFyIHQ9eGUoKSxlPWJlKCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dChtZSksbWU9c2V0VGltZW91dCh5ZSxlKSksZGU9MCk6KGRlPTEsZ2UoeWUpKX1mdW5jdGlvbiB4ZSgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9aGU7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIGJlKCl7Zm9yKHZhciB0LGU9aGUscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOmhlPWUubjtyZXR1cm4gcGU9dCxyfWZ1bmN0aW9uIF9lKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHdlKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFRlKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPVswLDFdLG89MixzPTI7czxpO3MrKyl7Zm9yKDtvPjEmJihlPXRbYVtvLTJdXSxyPXRbYVtvLTFdXSxuPXRbc10sKHJbMF0tZVswXSkqKG5bMV0tZVsxXSktKHJbMV0tZVsxXSkqKG5bMF0tZVswXSk8PTApOyktLW87YVtvKytdPXN9cmV0dXJuIGEuc2xpY2UoMCxvKX1mdW5jdGlvbiBrZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX10LnRpbWVyPWZ1bmN0aW9uKCl7dmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7eGUoKSxiZSgpfSx0LnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9X2Uscj13ZTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPWNlKGUpLGE9Y2Uociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoa2UpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPVRlKHMpLHU9VGUobCksZj11WzBdPT09Y1swXSxoPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2Y7bjx1Lmxlbmd0aC1oOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsQWUpLHR9O3ZhciBBZT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gTWUodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIFNlKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsZj1uWzFdLWMsaD0ocyoobC1jKS1mKihpLWEpKS8oZipvLXMqdSk7cmV0dXJuW2kraCpvLGwraCp1XX1mdW5jdGlvbiBFZSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1BZS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxBZS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxBZS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1FZSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtRWUodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KU1lKG89ZVtyXSx1LGkpPyhNZShhLHUsaSl8fHQucHVzaChTZShhLG8sdSxpKSksdC5wdXNoKG8pKTpNZShhLHUsaSkmJnQucHVzaChTZShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBMZSxDZSxQZSxJZSxPZSx6ZT1bXSxEZT1bXTtmdW5jdGlvbiBSZSgpe2VyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBGZSh0KXt2YXIgZT16ZS5wb3AoKXx8bmV3IFJlO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIEJlKHQpe1dlKHQpLFBlLnJlbW92ZSh0KSx6ZS5wdXNoKHQpLGVyKHQpfWZ1bmN0aW9uIE5lKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTtCZSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCksQmUobCksbD1hO3MudW5zaGlmdChsKSxXZShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYyksQmUoYyksYz1vO3MucHVzaChjKSxXZShjKTt2YXIgdSxmPXMubGVuZ3RoO2Zvcih1PTE7dTxmOysrdSljPXNbdV0sbD1zW3UtMV0sUWUoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbZi0xXSkuZWRnZT1KZShsLnNpdGUsYy5zaXRlLG51bGwsaSksWWUobCksWWUoYyl9ZnVuY3Rpb24gamUodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9UGUuXztzOylpZigobj1VZShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLVZlKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPUZlKHQpO2lmKFBlLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBXZShlKSxyPUZlKGUuc2l0ZSksUGUuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1KZShlLnNpdGUsbC5zaXRlKSxZZShlKSx2b2lkIFllKHIpO2lmKHIpe1dlKGUpLFdlKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxmPWMueSxoPXQueC11LHA9dC55LWYsZD1yLnNpdGUsbT1kLngtdSxnPWQueS1mLHY9MiooaCpnLXAqbSkseT1oKmgrcCpwLHg9bSptK2cqZyxiPXt4OihnKnktcCp4KS92K3UseTooaCp4LW0qeSkvditmfTtRZShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1KZShjLHQsbnVsbCxiKSxyLmVkZ2U9SmUodCxkLG51bGwsYiksWWUoZSksWWUocil9ZWxzZSBsLmVkZ2U9SmUoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIFVlKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4sZj0xL2EtMS9jLGg9dS9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9mK246KG4rcykvMn1mdW5jdGlvbiBWZSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBVZShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIEhlKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIEdlKCl7ZXIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFllKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxmPTIqKGwqKGc9YS55LXMpLWMqdSk7aWYoIShmPj0tMWUtMTIpKXt2YXIgaD1sKmwrYypjLHA9dSp1K2cqZyxkPShnKmgtYypwKS9mLG09KGwqcC11KmgpL2YsZz1tK3Msdj1EZS5wb3AoKXx8bmV3IEdlO3YuYXJjPXQsdi5zaXRlPWksdi54PWQrbyx2Lnk9ZytNYXRoLnNxcnQoZCpkK20qbSksdi5jeT1nLHQuY2lyY2xlPXY7Zm9yKHZhciB5PW51bGwseD1PZS5fO3g7KWlmKHYueTx4Lnl8fHYueT09PXgueSYmdi54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfU9lLmluc2VydCh5LHYpLHl8fChJZT12KX19fX1mdW5jdGlvbiBXZSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoSWU9ZS5OKSxPZS5yZW1vdmUoZSksRGUucHVzaChlKSxlcihlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBYZSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGY9dC5yLGg9dS54LHA9dS55LGQ9Zi54LG09Zi55LGc9KGgrZCkvMix2PShwK20pLzI7aWYobT09PXApe2lmKGc8b3x8Zz49cylyZXR1cm47aWYoaD5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDpnLHk6bH07cj17eDpnLHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OmcseTpjfTtyPXt4OmcseTpsfX19ZWxzZSBpZihpPXYtKG49KGgtZCkvKG0tcCkpKmcsbjwtMXx8bj4xKWlmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPG0pe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gWmUodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gSmUodCxlLHIsbil7dmFyIGk9bmV3IFplKHQsZSk7cmV0dXJuIExlLnB1c2goaSksciYmUWUoaSx0LGUsciksbiYmUWUoaSxlLHQsbiksQ2VbdC5pXS5lZGdlcy5wdXNoKG5ldyAkZShpLHQsZSkpLENlW2UuaV0uZWRnZXMucHVzaChuZXcgJGUoaSxlLHQpKSxpfWZ1bmN0aW9uIEtlKHQsZSxyKXt2YXIgbj1uZXcgWmUodCxudWxsKTtyZXR1cm4gbi5hPWUsbi5iPXIsTGUucHVzaChuKSxufWZ1bmN0aW9uIFFlKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiAkZSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIHRyKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gZXIodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBycih0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gbnIodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIGlyKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBhcih0LGUpe3ZhciByLG4saSxhPXQuc29ydChvcikucG9wKCk7Zm9yKExlPVtdLENlPW5ldyBBcnJheSh0Lmxlbmd0aCksUGU9bmV3IHRyLE9lPW5ldyB0cjs7KWlmKGk9SWUsYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fChDZVthLmldPW5ldyBIZShhKSxqZShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7TmUoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPUxlLHM9KHI9dFswXVswXSxuPXRbMF1bMV0saT10WzFdWzBdLGE9dFsxXVsxXSxmdW5jdGlvbih0KXt2YXIgZSxvPXQuYSxzPXQuYixsPW8ueCxjPW8ueSx1PTAsZj0xLGg9cy54LWwscD1zLnktYztpZihlPXItbCxofHwhKGU+MCkpe2lmKGUvPWgsaDwwKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9ZWxzZSBpZihoPjApe2lmKGU+ZilyZXR1cm47ZT51JiYodT1lKX1pZihlPWktbCxofHwhKGU8MCkpe2lmKGUvPWgsaDwwKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9ZWxzZSBpZihoPjApe2lmKGU8dSlyZXR1cm47ZTxmJiYoZj1lKX1pZihlPW4tYyxwfHwhKGU+MCkpe2lmKGUvPXAscDwwKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9ZWxzZSBpZihwPjApe2lmKGU+ZilyZXR1cm47ZT51JiYodT1lKX1pZihlPWEtYyxwfHwhKGU8MCkpe2lmKGUvPXAscDwwKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9ZWxzZSBpZihwPjApe2lmKGU8dSlyZXR1cm47ZTxmJiYoZj1lKX1yZXR1cm4gdT4wJiYodC5hPXt4OmwrdSpoLHk6Yyt1KnB9KSxmPDEmJih0LmI9e3g6bCtmKmgseTpjK2YqcH0pLHR9fX19fSksbD1vLmxlbmd0aDtsLS07KSghWGUoZT1vW2xdLHQpfHwhcyhlKXx8eShlLmEueC1lLmIueCk8a3QmJnkoZS5hLnktZS5iLnkpPGt0KSYmKGUuYT1lLmI9bnVsbCxvLnNwbGljZShsLDEpKX0oZSksZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGY9dFswXVswXSxoPXRbMV1bMF0scD10WzBdWzFdLGQ9dFsxXVsxXSxtPUNlLGc9bS5sZW5ndGg7Zy0tOylpZigoYT1tW2ddKSYmYS5wcmVwYXJlKCkpZm9yKGw9KHM9YS5lZGdlcykubGVuZ3RoLG89MDtvPGw7KW49KHU9c1tvXS5lbmQoKSkueCxpPXUueSxlPShjPXNbKytvJWxdLnN0YXJ0KCkpLngscj1jLnksKHkobi1lKT5rdHx8eShpLXIpPmt0KSYmKHMuc3BsaWNlKG8sMCxuZXcgJGUoS2UoYS5zaXRlLHUseShuLWYpPGt0JiZkLWk+a3Q/e3g6Zix5OnkoZS1mKTxrdD9yOmR9OnkoaS1kKTxrdCYmaC1uPmt0P3t4Onkoci1kKTxrdD9lOmgseTpkfTp5KG4taCk8a3QmJmktcD5rdD97eDpoLHk6eShlLWgpPGt0P3I6cH06eShpLXApPGt0JiZuLWY+a3Q/e3g6eShyLXApPGt0P2U6Zix5OnB9Om51bGwpLGEuc2l0ZSxudWxsKSksKytsKX0oZSkpO3ZhciBvPXtjZWxsczpDZSxlZGdlczpMZX07cmV0dXJuIFBlPU9lPUxlPUNlPW51bGwsb31mdW5jdGlvbiBvcih0LGUpe3JldHVybiBlLnktdC55fHxlLngtdC54fUhlLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcy5lZGdlcyxyPWUubGVuZ3RoO3ItLTspKHQ9ZVtyXS5lZGdlKS5iJiZ0LmF8fGUuc3BsaWNlKHIsMSk7cmV0dXJuIGUuc29ydChxZSksZS5sZW5ndGh9LCRlLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LHRyLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO3I9dH1lbHNlIHRoaXMuXz8odD1pcih0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxyPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUscj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1yLGUuQz0hMCx0PWU7ciYmci5DOylyPT09KG49ci5VKS5MPyhpPW4uUikmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuUiYmKHJyKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLG5yKHRoaXMsbikpOihpPW4uTCkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuTCYmKG5yKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLHJyKHRoaXMsbikpLHI9dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxyLG4saT10LlUsYT10Lkwsbz10LlI7aWYocj1hP28/aXIobyk6YTpvLGk/aS5MPT09dD9pLkw9cjppLlI9cjp0aGlzLl89cixhJiZvPyhuPXIuQyxyLkM9dC5DLHIuTD1hLGEuVT1yLHIhPT1vPyhpPXIuVSxyLlU9dC5VLHQ9ci5SLGkuTD10LHIuUj1vLG8uVT1yKTooci5VPWksaT1yLHQ9ci5SKSk6KG49dC5DLHQ9ciksdCYmKHQuVT1pKSwhbilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLHJyKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsbnIodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEscnIodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLG5yKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAscnIodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsbnIodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19LHQuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe3ZhciBlPV9lLHI9d2Usbj1lLGk9cixhPXNyO2lmKHQpcmV0dXJuIG8odCk7ZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9YVswXVswXSxuPWFbMF1bMV0saT1hWzFdWzBdLG89YVsxXVsxXTtyZXR1cm4gYXIocyh0KSxhKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihhLHMpe3ZhciBsPWEuZWRnZXMsYz1hLnNpdGU7KGVbc109bC5sZW5ndGg/bC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KSk6Yy54Pj1yJiZjLng8PWkmJmMueT49biYmYy55PD1vP1tbcixvXSxbaSxvXSxbaSxuXSxbcixuXV06W10pLnBvaW50PXRbc119KSksZX1mdW5jdGlvbiBzKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pKX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXIocyh0KSkuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sJiZ0LnJ9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KSl9LG8udHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBhcihzKHQpKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChxZSksdT0tMSxmPWMubGVuZ3RoLGg9Y1tmLTFdLmVkZ2UscD1oLmw9PT1sP2gucjpoLmw7Kyt1PGY7KWgsaT1wLHA9KGg9Y1t1XS5lZGdlKS5sPT09bD9oLnI6aC5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pKSxlfSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Y2UoZT10KSxvKTplfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Y2Uocj10KSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9zcjp0LG8pOmE9PT1zcj9udWxsOmF9LG8uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQodCYmW1swLDBdLHRdKTphPT09c3I/bnVsbDphJiZhWzFdfSxvfTt2YXIgc3I9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gbHIodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBjcih0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIHVyKHQsZSxyLG4saSxhKXtpZighdChlLHIsbixpLGEpKXt2YXIgbz0uNSoocitpKSxzPS41KihuK2EpLGw9ZS5ub2RlcztsWzBdJiZ1cih0LGxbMF0scixuLG8scyksbFsxXSYmdXIodCxsWzFdLG8sbixpLHMpLGxbMl0mJnVyKHQsbFsyXSxyLHMsbyxhKSxsWzNdJiZ1cih0LGxbM10sbyxzLGksYSl9fWZ1bmN0aW9uIGZyKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9MS8wO3JldHVybiBmdW5jdGlvbiB0KGMsdSxmLGgscCl7aWYoISh1PmF8fGY+b3x8aDxufHxwPGkpKXtpZihkPWMucG9pbnQpe3ZhciBkLG09ZS1jLngsZz1yLWMueSx2PW0qbStnKmc7aWYodjxsKXt2YXIgeT1NYXRoLnNxcnQobD12KTtuPWUteSxpPXIteSxhPWUreSxvPXIreSxzPWR9fWZvcih2YXIgeD1jLm5vZGVzLGI9LjUqKHUraCksXz0uNSooZitwKSx3PShyPj1fKTw8MXxlPj1iLFQ9dys0O3c8VDsrK3cpaWYoYz14WzMmd10pc3dpdGNoKDMmdyl7Y2FzZSAwOnQoYyx1LGYsYixfKTticmVhaztjYXNlIDE6dChjLGIsZixoLF8pO2JyZWFrO2Nhc2UgMjp0KGMsdSxfLGIscCk7YnJlYWs7Y2FzZSAzOnQoYyxiLF8saCxwKX19fSh0LG4saSxhLG8pLHN9ZnVuY3Rpb24gaHIoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iIyIrcmUoTWF0aC5yb3VuZChuK28qdCkpK3JlKE1hdGgucm91bmQoaStzKnQpKStyZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIHByKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09eXIodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gZHIodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gbXIodCxlKXt2YXIgcixuLGksYT1nci5sYXN0SW5kZXg9dnIubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPWdyLmV4ZWModCkpJiYobj12ci5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6ZHIocixuKX0pKSxhPXZyLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX10Lmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKGUpfSx0Lmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPV9lLHM9d2U7aWYoYT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPWxyLHM9Y3IsMz09PWEmJihpPXIsbj1lLHI9ZT0wKSxsKHQpO2Z1bmN0aW9uIGwodCl7dmFyIGwsYyx1LGYsaCxwLGQsbSxnLHY9Y2UobykseD1jZShzKTtpZihudWxsIT1lKXA9ZSxkPXIsbT1uLGc9aTtlbHNlIGlmKG09Zz0tKHA9ZD0xLzApLGM9W10sdT1bXSxoPXQubGVuZ3RoLGEpZm9yKGY9MDtmPGg7KytmKShsPXRbZl0pLng8cCYmKHA9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+bSYmKG09bC54KSxsLnk+ZyYmKGc9bC55KSxjLnB1c2gobC54KSx1LnB1c2gobC55KTtlbHNlIGZvcihmPTA7ZjxoOysrZil7dmFyIGI9K3YobD10W2ZdLGYpLF89K3gobCxmKTtiPHAmJihwPWIpLF88ZCYmKGQ9XyksYj5tJiYobT1iKSxfPmcmJihnPV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9bS1wLFQ9Zy1kO2Z1bmN0aW9uIGsodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHkobC1yKSt5KGMtbik8LjAxKUEodCxlLHIsbixpLGEsbyxzKTtlbHNle3ZhciB1PXQucG9pbnQ7dC54PXQueT10LnBvaW50PW51bGwsQSh0LHUsbCxjLGksYSxvLHMpLEEodCxlLHIsbixpLGEsbyxzKX1lbHNlIHQueD1yLHQueT1uLHQucG9pbnQ9ZX1lbHNlIEEodCxlLHIsbixpLGEsbyxzKX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9LjUqKGkrbyksYz0uNSooYStzKSx1PXI+PWwsZj1uPj1jLGg9Zjw8MXx1O3QubGVhZj0hMSx1P2k9bDpvPWwsZj9hPWM6cz1jLGsodD10Lm5vZGVzW2hdfHwodC5ub2Rlc1toXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGx9KSxlLHIsbixpLGEsbyxzKX13PlQ/Zz1kK3c6bT1wK1Q7dmFyIE09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbih0KXtrKE0sdCwrdih0LCsrZiksK3godCxmKSxwLGQsbSxnKX0sdmlzaXQ6ZnVuY3Rpb24odCl7dXIodCxNLHAsZCxtLGcpfSxmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBmcihNLHRbMF0sdFsxXSxwLGQsbSxnKX19O2lmKGY9LTEsbnVsbD09ZSl7Zm9yKDsrK2Y8aDspayhNLHRbZl0sY1tmXSx1W2ZdLHAsZCxtLGcpOy0tZn1lbHNlIHQuZm9yRWFjaChNLmFkZCk7cmV0dXJuIGM9dT10PWw9bnVsbCxNfXJldHVybiBsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxsKTpvfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxsKTpzfSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9K3RbMF1bMF0scj0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGwpOm51bGw9PWU/bnVsbDpbW2Uscl0sW24saV1dfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPXI9MCxuPSt0WzBdLGk9K3RbMV0pLGwpOm51bGw9PWU/bnVsbDpbbi1lLGktcl19LGx9LHQuaW50ZXJwb2xhdGVSZ2I9aHIsdC5pbnRlcnBvbGF0ZU9iamVjdD1wcix0LmludGVycG9sYXRlTnVtYmVyPWRyLHQuaW50ZXJwb2xhdGVTdHJpbmc9bXI7dmFyIGdyPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2cj1uZXcgUmVnRXhwKGdyLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHlyKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiB4cih0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaCh5cih0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9eXIsdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybigic3RyaW5nIj09PXI/bGUuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdChlKT9ocjptcjplIGluc3RhbmNlb2YgRnQ/aHI6QXJyYXkuaXNBcnJheShlKT94cjoib2JqZWN0Ij09PXImJmlzTmFOKGUpP3ByOmRyKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PXhyO3ZhciBicj1mdW5jdGlvbigpe3JldHVybiBDfSxfcj10Lm1hcCh7bGluZWFyOmJyLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiBNcn0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gU3J9LHNpbjpmdW5jdGlvbigpe3JldHVybiBMcn0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIENyfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gUHJ9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvTXQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTXQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIElyfX0pLHdyPXQubWFwKHtpbjpDLG91dDprciwiaW4tb3V0IjpBciwib3V0LWluIjpmdW5jdGlvbih0KXtyZXR1cm4gQXIoa3IodCkpfX0pO2Z1bmN0aW9uIFRyKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTw9MD8wOmU+PTE/MTp0KGUpfX1mdW5jdGlvbiBrcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDEtdCgxLWUpfX1mdW5jdGlvbiBBcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLjUqKGU8LjU/dCgyKmUpOjItdCgyLTIqZSkpfX1mdW5jdGlvbiBNcih0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIFNyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBFcih0KXtpZih0PD0wKXJldHVybiAwO2lmKHQ+PTEpcmV0dXJuIDE7dmFyIGU9dCp0LHI9ZSp0O3JldHVybiA0Kih0PC41P3I6MyoodC1lKStyLS43NSl9ZnVuY3Rpb24gTHIodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpFdCl9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIFByKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gSXIodCl7cmV0dXJuIHQ8MS8yLjc1PzcuNTYyNSp0KnQ6dDwyLzIuNzU/Ny41NjI1Kih0LT0xLjUvMi43NSkqdCsuNzU6dDwyLjUvMi43NT83LjU2MjUqKHQtPTIuMjUvMi43NSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NX1mdW5jdGlvbiBPcih0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24genIodCl7dmFyIGUscixuLGk9W3QuYSx0LmJdLGE9W3QuYyx0LmRdLG89UnIoaSkscz1EcihpLGEpLGw9UnIoKChlPWEpWzBdKz0obj0tcykqKHI9aSlbMF0sZVsxXSs9bipyWzFdLGUpKXx8MDtpWzBdKmFbMV08YVswXSppWzFdJiYoaVswXSo9LTEsaVsxXSo9LTEsbyo9LTEscyo9LTEpLHRoaXMucm90YXRlPShvP01hdGguYXRhbjIoaVsxXSxpWzBdKTpNYXRoLmF0YW4yKC1hWzBdLGFbMV0pKSpDdCx0aGlzLnRyYW5zbGF0ZT1bdC5lLHQuZl0sdGhpcy5zY2FsZT1bbyxsXSx0aGlzLnNrZXc9bD9NYXRoLmF0YW4yKHMsbCkqQ3Q6MH1mdW5jdGlvbiBEcih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPU1hdGguc3FydChEcih0LHQpKTtyZXR1cm4gZSYmKHRbMF0vPWUsdFsxXS89ZSksZX10LmVhc2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCItIiksbj1lPj0wP3Quc2xpY2UoMCxlKTp0LGk9ZT49MD90LnNsaWNlKGUrMSk6ImluIjtyZXR1cm4gbj1fci5nZXQobil8fGJyLFRyKChpPXdyLmdldChpKXx8Qykobi5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSl9LHQuaW50ZXJwb2xhdGVIY2w9ZnVuY3Rpb24oZSxyKXtlPXQuaGNsKGUpLHI9dC5oY2wocik7dmFyIG49ZS5oLGk9ZS5jLGE9ZS5sLG89ci5oLW4scz1yLmMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5jOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlSHNsPWZ1bmN0aW9uKGUscil7ZT10LmhzbChlKSxyPXQuaHNsKHIpO3ZhciBuPWUuaCxpPWUucyxhPWUubCxvPXIuaC1uLHM9ci5zLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuczppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4ganQobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbihlLHIpe2U9dC5sYWIoZSkscj10LmxhYihyKTt2YXIgbj1lLmwsaT1lLmEsYT1lLmIsbz1yLmwtbixzPXIuYS1pLGw9ci5iLWE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBXdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlUm91bmQ9T3IsdC50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHI9aS5jcmVhdGVFbGVtZW50TlModC5ucy5wcmVmaXguc3ZnLCJnIik7cmV0dXJuKHQudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpO3ZhciBlPXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IHpyKGU/ZS5tYXRyaXg6RnIpfSkoZSl9LHpyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgRnI9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtmdW5jdGlvbiBCcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiLCI6IiJ9ZnVuY3Rpb24gTnIoZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiBlPXQudHJhbnNmb3JtKGUpLHI9dC50cmFuc2Zvcm0ociksZnVuY3Rpb24odCxlLHIsbil7aWYodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdKXt2YXIgaT1yLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6aS00LHg6ZHIodFswXSxlWzBdKX0se2k6aS0yLHg6ZHIodFsxXSxlWzFdKX0pfWVsc2UoZVswXXx8ZVsxXSkmJnIucHVzaCgidHJhbnNsYXRlKCIrZSsiKSIpfShlLnRyYW5zbGF0ZSxyLnRyYW5zbGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxuLnB1c2goe2k6ci5wdXNoKEJyKHIpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OmRyKHQsZSl9KSk6ZSYmci5wdXNoKEJyKHIpKyJyb3RhdGUoIitlKyIpIil9KGUucm90YXRlLHIucm90YXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/bi5wdXNoKHtpOnIucHVzaChCcihyKSsic2tld1goIixudWxsLCIpIiktMix4OmRyKHQsZSl9KTplJiZyLnB1c2goQnIocikrInNrZXdYKCIrZSsiKSIpfShlLnNrZXcsci5za2V3LG4saSksZnVuY3Rpb24odCxlLHIsbil7aWYodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdKXt2YXIgaT1yLnB1c2goQnIocikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpkcih0WzBdLGVbMF0pfSx7aTppLTIseDpkcih0WzFdLGVbMV0pfSl9ZWxzZSAxPT09ZVswXSYmMT09PWVbMV18fHIucHVzaChCcihyKSsic2NhbGUoIitlKyIpIil9KGUuc2NhbGUsci5zY2FsZSxuLGkpLGU9cj1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLGE9aS5sZW5ndGg7KytyPGE7KW5bKGU9aVtyXSkuaV09ZS54KHQpO3JldHVybiBuLmpvaW4oIiIpfX1mdW5jdGlvbiBqcih0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybihyLXQpL2V9fWZ1bmN0aW9uIFVyKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci10KS9lKSl9fWZ1bmN0aW9uIFZyKHQpe2Zvcih2YXIgZT10LnNvdXJjZSxyPXQudGFyZ2V0LG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgcj1Icih0KSxuPUhyKGUpLGk9ci5wb3AoKSxhPW4ucG9wKCksbz1udWxsO2Zvcig7aT09PWE7KW89aSxpPXIucG9wKCksYT1uLnBvcCgpO3JldHVybiBvfShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uIEhyKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gcXIodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiBHcih0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiBZcih0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIFdyKHQpe3QuZml4ZWQmPS01fXQuaW50ZXJwb2xhdGVUcmFuc2Zvcm09TnIsdC5sYXlvdXQ9e30sdC5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPS0xLG49dC5sZW5ndGg7KytyPG47KWUucHVzaChWcih0W3JdKSk7cmV0dXJuIGV9fSx0LmxheW91dC5jaG9yZD1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGw9e30sYz0wO2Z1bmN0aW9uIHUoKXt2YXIgbCx1LGgscCxkLG09e30sZz1bXSx2PXQucmFuZ2UoaSkseT1bXTtmb3IoZT1bXSxyPVtdLGw9MCxwPS0xOysrcDxpOyl7Zm9yKHU9MCxkPS0xOysrZDxpOyl1Kz1uW3BdW2RdO2cucHVzaCh1KSx5LnB1c2godC5yYW5nZShpKSksbCs9dX1mb3IoYSYmdi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBhKGdbdF0sZ1tlXSl9KSksbyYmeS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbyhuW2VdW3RdLG5bZV1bcl0pfSkpfSkpLGw9KE10LWMqaSkvbCx1PTAscD0tMTsrK3A8aTspe2ZvcihoPXUsZD0tMTsrK2Q8aTspe3ZhciB4PXZbcF0sYj15W3hdW2RdLF89blt4XVtiXSx3PXUsVD11Kz1fKmw7bVt4KyItIitiXT17aW5kZXg6eCxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpULHZhbHVlOl99fXJbeF09e2luZGV4Ongsc3RhcnRBbmdsZTpoLGVuZEFuZ2xlOnUsdmFsdWU6Z1t4XX0sdSs9Y31mb3IocD0tMTsrK3A8aTspZm9yKGQ9cC0xOysrZDxpOyl7dmFyIGs9bVtwKyItIitkXSxBPW1bZCsiLSIrcF07KGsudmFsdWV8fEEudmFsdWUpJiZlLnB1c2goay52YWx1ZTxBLnZhbHVlP3tzb3VyY2U6QSx0YXJnZXQ6a306e3NvdXJjZTprLHRhcmdldDpBfSl9cyYmZigpfWZ1bmN0aW9uIGYoKXtlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KSl9cmV0dXJuIGwubWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShuPXQpJiZuLmxlbmd0aCxlPXI9bnVsbCxsKTpufSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxlPXI9bnVsbCxsKTpjfSxsLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlPXI9bnVsbCxsKTphfSxsLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlPW51bGwsbCk6b30sbC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZSYmZigpLGwpOnN9LGwuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fHUoKSxlfSxsLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sbH0sdC5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scz17fSxsPXQuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxmPVhyLGg9WnIscD0tMzAsZD1KcixtPS4xLGc9LjY0LHY9W10seT1bXTtmdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL2c8bCl7aWYobDxkKXt2YXIgYz1lLmNoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxkKXtjPWUucG9pbnRDaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfX1yZXR1cm4hZS5jaGFyZ2V9fWZ1bmN0aW9uIGIoZSl7ZS5weD10LmV2ZW50LngsZS5weT10LmV2ZW50Lnkscy5yZXN1bWUoKX1yZXR1cm4gcy50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsZixoLGQsZyxiLF8sdyxUPXYubGVuZ3RoLGs9eS5sZW5ndGg7Zm9yKHM9MDtzPGs7KytzKWg9KGY9eVtzXSkuc291cmNlLChnPShfPShkPWYudGFyZ2V0KS54LWgueCkqXysodz1kLnktaC55KSp3KSYmKF8qPWc9biphW3NdKigoZz1NYXRoLnNxcnQoZykpLWlbc10pL2csdyo9ZyxkLngtPV8qKGI9aC53ZWlnaHQrZC53ZWlnaHQ/aC53ZWlnaHQvKGgud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsaC54Kz1fKihiPTEtYiksaC55Kz13KmIpO2lmKChiPW4qbSkmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPFQ7KShmPXZbc10pLngrPShfLWYueCkqYixmLnkrPSh3LWYueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7aWYoZS5jaGFyZ2U9MCwhZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZSxlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKHYpLG4sbykscz0tMTsrK3M8VDspKGY9dltzXSkuZml4ZWR8fHIudmlzaXQoeChmKSk7Zm9yKHM9LTE7KytzPFQ7KShmPXZbc10pLmZpeGVkPyhmLng9Zi5weCxmLnk9Zi5weSk6KGYueC09KGYucHgtKGYucHg9Zi54KSkqdSxmLnktPShmLnB5LShmLnB5PWYueSkpKnUpO2wudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQscyk6dn0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6Zn0scy5kaXN0YW5jZT1zLmxpbmtEaXN0YW5jZSxzLmxpbmtTdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmh9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rdCxzKTptfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXQqdCxzKTpNYXRoLnNxcnQoZyl9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6dD4wJiYobC5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49dH0pLGU9dmUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXYubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9dlt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdCkibnVtYmVyIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9dltyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD12W3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKHQ9MDt0PG47Kyt0KXI9dlt0XSxpc05hTihyLngpJiYoci54PW0oIngiLHUpKSxpc05hTihyLnkpJiYoci55PW0oInkiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClpW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWlbdF09ZjtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBoKWZvcih0PTA7dDxsOysrdClhW3RdPStoLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09aDtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyx2W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBtKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKEMpLm9uKCJkcmFnc3RhcnQuZm9yY2UiLHFyKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLEdyKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixZcikub24oIm1vdXNlb3V0LmZvcmNlIixXcikuY2FsbChyKX0sdC5yZWJpbmQocyxsLCJvbiIpfTt2YXIgWHI9MjAsWnI9MSxKcj0xLzA7ZnVuY3Rpb24gS3IoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLGUubm9kZXM9ZSxlLmxpbmtzPW5uLGV9ZnVuY3Rpb24gUXIodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gJHIodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIHRuKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIGVuKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIHJuKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBubihlKXtyZXR1cm4gdC5tZXJnZShlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuY2hpbGRyZW58fFtdKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KSl9KSkpfXQubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe3ZhciB0PXJuLGU9dG4scj1lbjtmdW5jdGlvbiBuKGkpe3ZhciBhLG89W2ldLHM9W107Zm9yKGkuZGVwdGg9MDtudWxsIT0oYT1vLnBvcCgpKTspaWYocy5wdXNoKGEpLChjPWUuY2FsbChuLGEsYS5kZXB0aCkpJiYobD1jLmxlbmd0aCkpe2Zvcih2YXIgbCxjLHU7LS1sPj0wOylvLnB1c2godT1jW2xdKSx1LnBhcmVudD1hLHUuZGVwdGg9YS5kZXB0aCsxO3ImJihhLnZhbHVlPTApLGEuY2hpbGRyZW49Y31lbHNlIHImJihhLnZhbHVlPStyLmNhbGwobixhLGEuZGVwdGgpfHwwKSxkZWxldGUgYS5jaGlsZHJlbjtyZXR1cm4gJHIoaSwoZnVuY3Rpb24oZSl7dmFyIG4saTt0JiYobj1lLmNoaWxkcmVuKSYmbi5zb3J0KHQpLHImJihpPWUucGFyZW50KSYmKGkudmFsdWUrPWUudmFsdWUpfSkpLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoUXIodCwoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmKHQudmFsdWU9MCl9KSksJHIodCwoZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpKSx0fSxufSx0LmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKSxyPVsxLDFdO2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4pO3JldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47aWYoZS54PXIsZS55PWUuZGVwdGgqaSxlLmR4PW4sZS5keT1pLGEmJihvPWEubGVuZ3RoKSl7dmFyIG8scyxsLGM9LTE7Zm9yKG49ZS52YWx1ZT9uL2UudmFsdWU6MDsrK2M8bzspdChzPWFbY10scixsPXMudmFsdWUqbixpKSxyKz1sfX0oaVswXSwwLHJbMF0sclsxXS9mdW5jdGlvbiB0KGUpe3ZhciByPWUuY2hpbGRyZW4sbj0wO2lmKHImJihpPXIubGVuZ3RoKSlmb3IodmFyIGksYT0tMTsrK2E8aTspbj1NYXRoLm1heChuLHQoclthXSkpO3JldHVybiAxK259KGlbMF0pKSxpfXJldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxLcihuLGUpfSx0LmxheW91dC5waWU9ZnVuY3Rpb24oKXt2YXIgZT1OdW1iZXIscj1hbixuPTAsaT1NdCxhPTA7ZnVuY3Rpb24gbyhzKXt2YXIgbCxjPXMubGVuZ3RoLHU9cy5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuK2UuY2FsbChvLHQscil9KSksZj0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGg9KCJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWYscD1NYXRoLm1pbihNYXRoLmFicyhoKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooaDwwPy0xOjEpLG09dC5zdW0odSksZz1tPyhoLWMqZCkvbTowLHY9dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PWFuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksdi5mb3JFYWNoKChmdW5jdGlvbih0KXt5W3RdPXtkYXRhOnNbdF0sdmFsdWU6bD11W3RdLHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpmKz1sKmcrZCxwYWRBbmdsZTpwfX0pKSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvKTphfSxvfTt2YXIgYW49e307ZnVuY3Rpb24gb24odCl7cmV0dXJuIHQueH1mdW5jdGlvbiBzbih0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIGxuKHQsZSxyKXt0LnkwPWUsdC55PXJ9dC5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgZT1DLHI9Zm4sbj1obixpPWxuLGE9b24sbz1zbjtmdW5jdGlvbiBzKGwsYyl7aWYoIShwPWwubGVuZ3RoKSlyZXR1cm4gbDt2YXIgdT1sLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pKSxmPXUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KSl9KSksaD1yLmNhbGwocyxmLGMpO3U9dC5wZXJtdXRlKHUsaCksZj10LnBlcm11dGUoZixoKTt2YXIgcCxkLG0sZyx2PW4uY2FsbChzLGYsYykseT11WzBdLmxlbmd0aDtmb3IobT0wO208eTsrK20pZm9yKGkuY2FsbChzLHVbMF1bbV0sZz12W21dLGZbMF1bbV1bMV0pLGQ9MTtkPHA7KytkKWkuY2FsbChzLHVbZF1bbV0sZys9ZltkLTFdW21dWzFdLGZbZF1bbV1bMV0pO3JldHVybiBsfXJldHVybiBzLnZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjbi5nZXQodCl8fGZuLHMpOnJ9LHMub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dW4uZ2V0KHQpfHxobixzKTpufSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxzKTphfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxzKTpvfSxzLm91dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHMpOml9LHN9O3ZhciBjbj10Lm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKGUpe3ZhciByLG4saT1lLmxlbmd0aCxhPWUubWFwKHBuKSxvPWUubWFwKGRuKSxzPXQucmFuZ2UoaSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSkpLGw9MCxjPTAsdT1bXSxmPVtdO2ZvcihyPTA7cjxpOysrciluPXNbcl0sbDxjPyhsKz1vW25dLHUucHVzaChuKSk6KGMrPW9bbl0sZi5wdXNoKG4pKTtyZXR1cm4gZi5yZXZlcnNlKCkuY29uY2F0KHUpfSxyZXZlcnNlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6Zm59KSx1bj10Lm1hcCh7c2lsaG91ZXR0ZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89W10scz0wLGw9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07bj5zJiYocz1uKSxvLnB1c2gobil9Zm9yKHI9MDtyPGE7KytyKWxbcl09KHMtb1tyXSkvMjtyZXR1cm4gbH0sd2lnZ2xlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1PXQubGVuZ3RoLGY9dFswXSxoPWYubGVuZ3RoLHA9W107Zm9yKHBbMF09bD1jPTAscj0xO3I8aDsrK3Ipe2ZvcihlPTAsaT0wO2U8dTsrK2UpaSs9dFtlXVtyXVsxXTtmb3IoZT0wLGE9MCxzPWZbcl1bMF0tZltyLTFdWzBdO2U8dTsrK2Upe2ZvcihuPTAsbz0odFtlXVtyXVsxXS10W2VdW3ItMV1bMV0pLygyKnMpO248ZTsrK24pbys9KHRbbl1bcl1bMV0tdFtuXVtyLTFdWzFdKS9zO2ErPW8qdFtlXVtyXVsxXX1wW3JdPWwtPWk/YS9pKnM6MCxsPGMmJihjPWwpfWZvcihyPTA7cjxoOysrcilwW3JdLT1jO3JldHVybiBwfSxleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPTEvaSxzPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO2lmKG4pZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV0vPW47ZWxzZSBmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXT1vfWZvcihyPTA7cjxhOysrcilzW3JdPTA7cmV0dXJuIHN9LHplcm86aG59KTtmdW5jdGlvbiBmbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCl9ZnVuY3Rpb24gaG4odCl7Zm9yKHZhciBlPS0xLHI9dFswXS5sZW5ndGgsbj1bXTsrK2U8cjspbltlXT0wO3JldHVybiBufWZ1bmN0aW9uIHBuKHQpe2Zvcih2YXIgZSxyPTEsbj0wLGk9dFswXVsxXSxhPXQubGVuZ3RoO3I8YTsrK3IpKGU9dFtyXVsxXSk+aSYmKG49cixpPWUpO3JldHVybiBufWZ1bmN0aW9uIGRuKHQpe3JldHVybiB0LnJlZHVjZShtbiwwKX1mdW5jdGlvbiBtbih0LGUpe3JldHVybiB0K2VbMV19ZnVuY3Rpb24gZ24odCxlKXtyZXR1cm4gdm4odCxNYXRoLmNlaWwoTWF0aC5sb2coZS5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiB2bih0LGUpe2Zvcih2YXIgcj0tMSxuPSt0WzBdLGk9KHRbMV0tbikvZSxhPVtdOysrcjw9ZTspYVtyXT1pKnIrbjtyZXR1cm4gYX1mdW5jdGlvbiB5bihlKXtyZXR1cm5bdC5taW4oZSksdC5tYXgoZSldfWZ1bmN0aW9uIHhuKHQsZSl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBibih0LGUpe3ZhciByPXQuX3BhY2tfbmV4dDt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dCxlLl9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9ZX1mdW5jdGlvbiBfbih0LGUpe3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIHduKHQsZSl7dmFyIHI9ZS54LXQueCxuPWUueS10LnksaT10LnIrZS5yO3JldHVybi45OTkqaSppPnIqcituKm59ZnVuY3Rpb24gVG4odCl7aWYoKGU9dC5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUscixuLGksYSxvLHMsbCxjPTEvMCx1PS0xLzAsZj0xLzAsaD0tMS8wO2lmKGUuZm9yRWFjaChrbiksKHI9ZVswXSkueD0tci5yLHIueT0wLHgociksbD4xJiYoKG49ZVsxXSkueD1uLnIsbi55PTAseChuKSxsPjIpKWZvcihNbihyLG4saT1lWzJdKSx4KGkpLGJuKHIsaSksci5fcGFja19wcmV2PWksYm4oaSxuKSxuPXIuX3BhY2tfbmV4dCxhPTM7YTxsO2ErKyl7TW4ocixuLGk9ZVthXSk7dmFyIHA9MCxkPTEsbT0xO2ZvcihvPW4uX3BhY2tfbmV4dDtvIT09bjtvPW8uX3BhY2tfbmV4dCxkKyspaWYod24obyxpKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKHM9ci5fcGFja19wcmV2O3MhPT1vLl9wYWNrX3ByZXYmJiF3bihzLGkpO3M9cy5fcGFja19wcmV2LG0rKyk7cD8oZDxtfHxkPT1tJiZuLnI8ci5yP19uKHIsbj1vKTpfbihyPXMsbiksYS0tKTooYm4ocixpKSxuPWkseChpKSl9dmFyIGc9KGMrdSkvMix2PShmK2gpLzIseT0wO2ZvcihhPTA7YTxsO2ErKykoaT1lW2FdKS54LT1nLGkueS09dix5PU1hdGgubWF4KHksaS5yK01hdGguc3FydChpLngqaS54K2kueSppLnkpKTt0LnI9eSxlLmZvckVhY2goQW4pfWZ1bmN0aW9uIHgodCl7Yz1NYXRoLm1pbih0LngtdC5yLGMpLHU9TWF0aC5tYXgodC54K3Qucix1KSxmPU1hdGgubWluKHQueS10LnIsZiksaD1NYXRoLm1heCh0LnkrdC5yLGgpfX1mdW5jdGlvbiBrbih0KXt0Ll9wYWNrX25leHQ9dC5fcGFja19wcmV2PXR9ZnVuY3Rpb24gQW4odCl7ZGVsZXRlIHQuX3BhY2tfbmV4dCxkZWxldGUgdC5fcGFja19wcmV2fWZ1bmN0aW9uIE1uKHQsZSxyKXt2YXIgbj10LnIrci5yLGk9ZS54LXQueCxhPWUueS10Lnk7aWYobiYmKGl8fGEpKXt2YXIgbz1lLnIrci5yLHM9aSppK2EqYSxsPS41Kygobio9biktKG8qPW8pKS8oMipzKSxjPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoobitzKS0obi09cykqbi1vKm8pKS8oMipzKTtyLng9dC54K2wqaStjKmEsci55PXQueStsKmEtYyppfWVsc2Ugci54PXQueCtuLHIueT10Lnl9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBFbih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlLmxlbmd0aD9lWzBdOnQudH1mdW5jdGlvbiBMbih0KXt2YXIgZSxyPXQuY2hpbGRyZW47cmV0dXJuKGU9ci5sZW5ndGgpP3JbZS0xXTp0LnR9ZnVuY3Rpb24gQ24odCxlLHIpe3ZhciBuPXIvKGUuaS10LmkpO2UuYy09bixlLnMrPXIsdC5jKz1uLGUueis9cixlLm0rPXJ9ZnVuY3Rpb24gUG4odCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gSW4odCl7cmV0dXJue3g6dC54LHk6dC55LGR4OnQuZHgsZHk6dC5keX19ZnVuY3Rpb24gT24odCxlKXt2YXIgcj10LngrZVszXSxuPXQueStlWzBdLGk9dC5keC1lWzFdLWVbM10sYT10LmR5LWVbMF0tZVsyXTtyZXR1cm4gaTwwJiYocis9aS8yLGk9MCksYTwwJiYobis9YS8yLGE9MCkse3g6cix5Om4sZHg6aSxkeTphfX1mdW5jdGlvbiB6bih0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gZTxyP1tlLHJdOltyLGVdfWZ1bmN0aW9uIERuKHQpe3JldHVybiB0LnJhbmdlRXh0ZW50P3QucmFuZ2VFeHRlbnQoKTp6bih0LnJhbmdlKCkpfWZ1bmN0aW9uIFJuKHQsZSxyLG4pe3ZhciBpPXIodFswXSx0WzFdKSxhPW4oZVswXSxlWzFdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIEZuKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgtMSxhPXRbbl0sbz10W2ldO3JldHVybiBvPGEmJihyPW4sbj1pLGk9cixyPWEsYT1vLG89ciksdFtuXT1lLmZsb29yKGEpLHRbaV09ZS5jZWlsKG8pLHR9ZnVuY3Rpb24gQm4odCl7cmV0dXJuIHQ/e2Zsb29yOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdCkqdH0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5jZWlsKGUvdCkqdH19Ok5ufXQubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciBlPSEwLHI9TnVtYmVyLG49eW4saT1nbjtmdW5jdGlvbiBhKGEsbyl7Zm9yKHZhciBzLGwsYz1bXSx1PWEubWFwKHIsdGhpcyksZj1uLmNhbGwodGhpcyx1LG8pLGg9aS5jYWxsKHRoaXMsZix1LG8pLHA9KG89LTEsdS5sZW5ndGgpLGQ9aC5sZW5ndGgtMSxtPWU/MToxL3A7KytvPGQ7KShzPWNbb109W10pLmR4PWhbbysxXS0ocy54PWhbb10pLHMueT0wO2lmKGQ+MClmb3Iobz0tMTsrK288cDspKGw9dVtvXSk+PWZbMF0mJmw8PWZbMV0mJigocz1jW3QuYmlzZWN0KGgsbCwxLGQpLTFdKS55Kz1tLHMucHVzaChhW29dKSk7cmV0dXJuIGN9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWNlKHQpLGEpOm59LGEuYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKGUsdCl9OmNlKHQpLGEpOml9LGEuZnJlcXVlbmN5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxhKTplfSxhfSx0LmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KHhuKSxuPTAsaT1bMSwxXTtmdW5jdGlvbiBhKHQsYSl7dmFyIG89ci5jYWxsKHRoaXMsdCxhKSxzPW9bMF0sbD1pWzBdLGM9aVsxXSx1PW51bGw9PWU/TWF0aC5zcXJ0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07aWYocy54PXMueT0wLCRyKHMsKGZ1bmN0aW9uKHQpe3Qucj0rdSh0LnZhbHVlKX0pKSwkcihzLFRuKSxuKXt2YXIgZj1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjskcihzLChmdW5jdGlvbih0KXt0LnIrPWZ9KSksJHIocyxUbiksJHIocywoZnVuY3Rpb24odCl7dC5yLT1mfSkpfXJldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47aWYoZS54PXIrPWkqZS54LGUueT1uKz1pKmUueSxlLnIqPWksYSlmb3IodmFyIG89LTEscz1hLmxlbmd0aDsrK288czspdChhW29dLHIsbixpKX0ocyxsLzIsYy8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLG99cmV0dXJuIGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGEpOml9LGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3QsYSk6ZX0sYS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGEpOm59LEtyKGEscil9LHQubGF5b3V0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9U24sbj1bMSwxXSxpPW51bGw7ZnVuY3Rpb24gYSh0LGEpe3ZhciBjPWUuY2FsbCh0aGlzLHQsYSksdT1jWzBdLGY9ZnVuY3Rpb24odCl7dmFyIGUscj17QTpudWxsLGNoaWxkcmVuOlt0XX0sbj1bcl07Zm9yKDtudWxsIT0oZT1uLnBvcCgpKTspZm9yKHZhciBpLGE9ZS5jaGlsZHJlbixvPTAscz1hLmxlbmd0aDtvPHM7KytvKW4ucHVzaCgoYVtvXT1pPXtfOmFbb10scGFyZW50OmUsY2hpbGRyZW46KGk9YVtvXS5jaGlsZHJlbikmJmkuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9aSk7cmV0dXJuIHIuY2hpbGRyZW5bMF19KHUpO2lmKCRyKGYsbyksZi5wYXJlbnQubT0tZi56LFFyKGYscyksaSlRcih1LGwpO2Vsc2V7dmFyIGg9dSxwPXUsZD11O1FyKHUsKGZ1bmN0aW9uKHQpe3QueDxoLngmJihoPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KSk7dmFyIG09cihoLHApLzItaC54LGc9blswXS8ocC54K3IocCxoKS8yK20pLHY9blsxXS8oZC5kZXB0aHx8MSk7UXIodSwoZnVuY3Rpb24odCl7dC54PSh0LngrbSkqZyx0Lnk9dC5kZXB0aCp2fSkpfXJldHVybiBjfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5jaGlsZHJlbixuPXQucGFyZW50LmNoaWxkcmVuLGk9dC5pP25bdC5pLTFdOm51bGw7aWYoZS5sZW5ndGgpeyFmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoO2Zvcig7LS1hPj0wOykoZT1pW2FdKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KHQpO3ZhciBhPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KHQuej1pLnorcih0Ll8saS5fKSx0Lm09dC56LWEpOnQuej1hfWVsc2UgaSYmKHQuej1pLnorcih0Ll8saS5fKSk7dC5wYXJlbnQuQT1mdW5jdGlvbih0LGUsbil7aWYoZSl7Zm9yKHZhciBpLGE9dCxvPXQscz1lLGw9YS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1hLm0sdT1vLm0sZj1zLm0saD1sLm07cz1MbihzKSxhPUVuKGEpLHMmJmE7KWw9RW4obCksKG89TG4obykpLmE9dCwoaT1zLnorZi1hLnotYytyKHMuXyxhLl8pKT4wJiYoQ24oUG4ocyx0LG4pLHQsaSksYys9aSx1Kz1pKSxmKz1zLm0sYys9YS5tLGgrPWwubSx1Kz1vLm07cyYmIUxuKG8pJiYoby50PXMsby5tKz1mLXUpLGEmJiFFbihsKSYmKGwudD1hLGwubSs9Yy1oLG49dCl9cmV0dXJuIG59KHQsaSx0LnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBzKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBsKHQpe3QueCo9blswXSx0Lnk9dC5kZXB0aCpuWzFdfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCk/bDpudWxsLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP251bGw6bCxhKTppP246bnVsbH0sS3IoYSxlKX0sdC5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1TbixuPVsxLDFdLGk9ITE7ZnVuY3Rpb24gYShhLG8pe3ZhciBzLGw9ZS5jYWxsKHRoaXMsYSxvKSxjPWxbMF0sdT0wOyRyKGMsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS54fSksMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbihlKXtyZXR1cm4gMSt0Lm1heChlLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpfShuKSk6KGUueD1zP3UrPXIoZSxzKTowLGUueT0wLHM9ZSl9KSk7dmFyIGY9ZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD90KHJbMF0pOmV9KGMpLGg9ZnVuY3Rpb24gdChlKXt2YXIgcixuPWUuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT90KG5bci0xXSk6ZX0oYykscD1mLngtcihmLGgpLzIsZD1oLngrcihoLGYpLzI7cmV0dXJuICRyKGMsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1jLngpKm5bMF0sdC55PShjLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1wKS8oZC1wKSpuWzBdLHQueT0oMS0oYy55P3QueS9jLnk6MSkpKm5bMV19KSxsfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCksYSk6aT9udWxsOm59LGEubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49dCksYSk6aT9uOm51bGx9LEtyKGEsZSl9LHQubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxpPVsxLDFdLGE9bnVsbCxvPUluLHM9ITEsbD0ic3F1YXJpZnkiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOyluPShyPXRbaV0pLnZhbHVlKihlPDA/MDplKSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbixpLGE9byh0KSxzPVtdLGM9ZS5zbGljZSgpLGg9MS8wLG09InNsaWNlIj09PWw/YS5keDoiZGljZSI9PT1sP2EuZHk6InNsaWNlLWRpY2UiPT09bD8xJnQuZGVwdGg/YS5keTphLmR4Ok1hdGgubWluKGEuZHgsYS5keSk7Zm9yKHUoYyxhLmR4KmEuZHkvdC52YWx1ZSkscy5hcmVhPTA7KGk9Yy5sZW5ndGgpPjA7KXMucHVzaChyPWNbaS0xXSkscy5hcmVhKz1yLmFyZWEsInNxdWFyaWZ5IiE9PWx8fChuPXAocyxtKSk8PWg/KGMucG9wKCksaD1uKToocy5hcmVhLT1zLnBvcCgpLmFyZWEsZChzLG0sYSwhMSksbT1NYXRoLm1pbihhLmR4LGEuZHkpLHMubGVuZ3RoPXMuYXJlYT0wLGg9MS8wKTtzLmxlbmd0aCYmKGQocyxtLGEsITApLHMubGVuZ3RoPXMuYXJlYT0wKSxlLmZvckVhY2goZil9fWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbj1vKHQpLGk9ZS5zbGljZSgpLGE9W107Zm9yKHUoaSxuLmR4Km4uZHkvdC52YWx1ZSksYS5hcmVhPTA7cj1pLnBvcCgpOylhLnB1c2gociksYS5hcmVhKz1yLmFyZWEsbnVsbCE9ci56JiYoZChhLHIuej9uLmR4Om4uZHksbiwhaS5sZW5ndGgpLGEubGVuZ3RoPWEuYXJlYT0wKTtlLmZvckVhY2goaCl9fWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHIsbj10LmFyZWEsaT0wLGE9MS8wLG89LTEscz10Lmxlbmd0aDsrK288czspKHI9dFtvXS5hcmVhKSYmKHI8YSYmKGE9cikscj5pJiYoaT1yKSk7cmV0dXJuIGUqPWUsKG4qPW4pP01hdGgubWF4KGUqaSpjL24sbi8oZSphKmMpKToxLzB9ZnVuY3Rpb24gZCh0LGUscixpKXt2YXIgYSxvPS0xLHM9dC5sZW5ndGgsbD1yLngsYz1yLnksdT1lP24odC5hcmVhL2UpOjA7aWYoZT09ci5keCl7Zm9yKChpfHx1PnIuZHkpJiYodT1yLmR5KTsrK288czspKGE9dFtvXSkueD1sLGEueT1jLGEuZHk9dSxsKz1hLmR4PU1hdGgubWluKHIueCtyLmR4LWwsdT9uKGEuYXJlYS91KTowKTthLno9ITAsYS5keCs9ci54K3IuZHgtbCxyLnkrPXUsci5keS09dX1lbHNle2ZvcigoaXx8dT5yLmR4KSYmKHU9ci5keCk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR4PXUsYys9YS5keT1NYXRoLm1pbihyLnkrci5keS1jLHU/bihhLmFyZWEvdSk6MCk7YS56PSExLGEuZHkrPXIueStyLmR5LWMsci54Kz11LHIuZHgtPXV9fWZ1bmN0aW9uIG0odCl7dmFyIG49ZXx8cih0KSxhPW5bMF07cmV0dXJuIGEueD1hLnk9MCxhLnZhbHVlPyhhLmR4PWlbMF0sYS5keT1pWzFdKTphLmR4PWEuZHk9MCxlJiZyLnJldmFsdWUoYSksdShbYV0sYS5keCphLmR5L2EudmFsdWUpLChlP2g6ZikoYSkscyYmKGU9biksbn1yZXR1cm4gbS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbSk6aX0sbS5wYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhO2Z1bmN0aW9uIGUoZSl7dmFyIHI9dC5jYWxsKG0sZSxlLmRlcHRoKTtyZXR1cm4gbnVsbD09cj9JbihlKTpPbihlLCJudW1iZXIiPT10eXBlb2Ygcj9bcixyLHIscl06cil9ZnVuY3Rpb24gcihlKXtyZXR1cm4gT24oZSx0KX12YXIgbjtyZXR1cm4gbz1udWxsPT0oYT10KT9JbjoiZnVuY3Rpb24iPT0obj10eXBlb2YgdCk/ZToibnVtYmVyIj09PW4/KHQ9W3QsdCx0LHRdLHIpOnIsbX0sbS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10P01hdGgucm91bmQ6TnVtYmVyLG0pOm4hPU51bWJlcn0sbS5zdGlja3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlPW51bGwsbSk6c30sbS5yYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG0pOmN9LG0ubW9kZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KyIiLG0pOmx9LEtyKG0scil9LHQucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG97aT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIGU9dC5yYW5kb20ubm9ybWFsLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoZSgpKX19LGJhdGVzOmZ1bmN0aW9uKGUpe3ZhciByPXQucmFuZG9tLmlyd2luSGFsbChlKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2V9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx0LnNjYWxlPXt9O3ZhciBObj17Zmxvb3I6QyxjZWlsOkN9O2Z1bmN0aW9uIGpuKGUscixuLGkpe3ZhciBhPVtdLG89W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKGVbbF08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrczw9bDspYS5wdXNoKG4oZVtzLTFdLGVbc10pKSxvLnB1c2goaShyW3MtMV0scltzXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10LmJpc2VjdChlLHIsMSxsKS0xO3JldHVybiBvW25dKGFbbl0ocikpfX1mdW5jdGlvbiBVbihlLHIpe3JldHVybiB0LnJlYmluZChlLHIsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiBWbih0LGUpe3JldHVybiBGbih0LEJuKEhuKHQsZSlbMl0pKSxGbih0LEJuKEhuKHQsZSlbMl0pKSx0fWZ1bmN0aW9uIEhuKHQsZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByPXpuKHQpLG49clsxXS1yWzBdLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL2UpL01hdGguTE4xMCkpLGE9ZS9uKmk7cmV0dXJuIGE8PS4xNT9pKj0xMDphPD0uMzU/aSo9NTphPD0uNzUmJihpKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2kpKmksclsxXT1NYXRoLmZsb29yKHJbMV0vaSkqaSsuNSppLHJbMl09aSxyfWZ1bmN0aW9uIHFuKGUscil7cmV0dXJuIHQucmFuZ2UuYXBwbHkodCxIbihlLHIpKX10LnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhLG87ZnVuY3Rpb24gcygpe3ZhciB0PU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKT4yP2puOlJuLHM9aT9VcjpqcjtyZXR1cm4gYT10KGUscixzLG4pLG89dChyLGUscyx5ciksbH1mdW5jdGlvbiBsKHQpe3JldHVybiBhKHQpfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9LGwucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9LGwucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShPcil9LGwuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9LGwuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59LGwudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIHFuKGUsdCl9LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGUsdCxyKX0sbC5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBWbihlLHQpLHMoKX0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLG4saSl9LHMoKX0oWzAsMV0sWzAsMV0seXIsITEpfTt0LnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe2Z1bmN0aW9uIGEodCl7cmV0dXJuKG4/TWF0aC5sb2codDwwPzA6dCk6LU1hdGgubG9nKHQ+MD8wOi10KSkvTWF0aC5sb2cocil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbj9NYXRoLnBvdyhyLHQpOi1NYXRoLnBvdyhyLC10KX1mdW5jdGlvbiBzKHQpe3JldHVybiBlKGEodCkpfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyhlLmludmVydCh0KSl9LHMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXRbMF0+PTAsZS5kb21haW4oKGk9dC5tYXAoTnVtYmVyKSkubWFwKGEpKSxzKTppfSxzLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZS5kb21haW4oaS5tYXAoYSkpLHMpOnJ9LHMubmljZT1mdW5jdGlvbigpe3ZhciB0PUZuKGkubWFwKGEpLG4/TWF0aDpHbik7cmV0dXJuIGUuZG9tYWluKHQpLGk9dC5tYXAobyksc30scy50aWNrcz1mdW5jdGlvbigpe3ZhciB0PXpuKGkpLGU9W10scz10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IoYShzKSksdT1NYXRoLmNlaWwoYShsKSksZj1yJTE/MjpyO2lmKGlzRmluaXRlKHUtYykpe2lmKG4pe2Zvcig7Yzx1O2MrKylmb3IodmFyIGg9MTtoPGY7aCsrKWUucHVzaChvKGMpKmgpO2UucHVzaChvKGMpKX1lbHNlIGZvcihlLnB1c2gobyhjKSk7YysrPHU7KWZvcihoPWYtMTtoPjA7aC0tKWUucHVzaChvKGMpKmgpO2ZvcihjPTA7ZVtjXTxzO2MrKyk7Zm9yKHU9ZS5sZW5ndGg7ZVt1LTFdPmw7dS0tKTtlPWUuc2xpY2UoYyx1KX1yZXR1cm4gZX0scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5jb3B5KCkscixuLGkpfSxVbihzLGUpfSh0LnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIEduPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTtmdW5jdGlvbiBZbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19dC5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9WW4ociksYT1ZbigxL3IpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGUoaSh0KSl9cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBhKGUuaW52ZXJ0KHQpKX0sby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKChuPXQubWFwKE51bWJlcikpLm1hcChpKSksbyk6bn0sby50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gcW4obix0KX0sby50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQobix0LGUpfSxvLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZG9tYWluKFZuKG4sdCkpfSxvLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVluKHI9dCksYT1ZbigxL3IpLGUuZG9tYWluKG4ubWFwKGkpKSxvKTpyfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLmNvcHkoKSxyLG4pfSxVbihvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KCJyYW5nZSI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUrbip0fSkpfXJldHVybiBzLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IF87Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfSxzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30scyk6YX0scy5yYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPShpK2MpLzIsMCk6KGMtaSkvKHIubGVuZ3RoLTErZSk7cmV0dXJuIGE9bChpK3UqZS8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0sZj10WzEtY10saD0oZi11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStoKmksaCksYyYmYS5yZXZlcnNlKCksbz1oKigxLWUpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxmPXRbMS1jXSxoPU1hdGguZmxvb3IoKGYtdSkvKHIubGVuZ3RoLWUrMippKSk7cmV0dXJuIGE9bCh1K01hdGgucm91bmQoKGYtdS0oci5sZW5ndGgtZSkqaCkvMiksaCksYyYmYS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGgqKDEtZSkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHMucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gem4obi5hWzBdKX0scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0scy5kb21haW4ocil9KFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHQuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShXbil9LHQuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShYbil9LHQuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoWm4pfSx0LnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKEpuKX07dmFyIFduPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKHRlKSxYbj1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcCh0ZSksWm49WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKHRlKSxKbj1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKHRlKTtmdW5jdGlvbiBLbigpe3JldHVybiAwfXQuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpO2Z1bmN0aW9uIGEoKXt2YXIgZT0wLGE9bi5sZW5ndGg7Zm9yKGk9W107KytlPGE7KWlbZS0xXT10LnF1YW50aWxlKHIsZS9hKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gblt0LmJpc2VjdChpLGUpXX1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoaCksYSgpKTpyfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxhKCl9KFtdLFtdKX0sdC5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaSxhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihhLE1hdGguZmxvb3IoaSoodC1lKSkpKV19ZnVuY3Rpb24gcygpe3JldHVybiBpPW4ubGVuZ3RoLyhyLWUpLGE9bi5sZW5ndGgtMSxvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9LHMoKX0oMCwxLFswLDFdKX0sdC5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2Z1bmN0aW9uIGkoZSl7aWYoZTw9ZSlyZXR1cm4gblt0LmJpc2VjdChyLGUpXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LGl9KFsuNV0sWzAsMV0pfSx0LnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4rdH1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9LHIudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIHFuKGUsdCl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGUsdCxyKX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9LHJ9KFswLDFdKX0sdC5zdmc9e30sdC5zdmcuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9JG4sZT10aSxyPUtuLG49UW4saT1laSxhPXJpLG89bmk7ZnVuY3Rpb24gcygpe3ZhciBzPU1hdGgubWF4KDAsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPU1hdGgubWF4KDAsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsaD1NYXRoLmFicyhmLXUpLHA9dT5mPzA6MTtpZihjPHMmJihkPWMsYz1zLHM9ZCksaD49U3QpcmV0dXJuIGwoYyxwKSsocz9sKHMsMS1wKToiIikrIloiO3ZhciBkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNPTAsUz0wLEU9W107aWYoKHY9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihnPW49PT1Rbj9NYXRoLnNxcnQocypzK2MqYyk6K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChTKj0tMSksYyYmKFM9UHQoZy9jKk1hdGguc2luKHYpKSkscyYmKE09UHQoZy9zKk1hdGguc2luKHYpKSkpLGMpe3k9YypNYXRoLmNvcyh1K1MpLHg9YypNYXRoLnNpbih1K1MpLGI9YypNYXRoLmNvcyhmLVMpLF89YypNYXRoLnNpbihmLVMpO3ZhciBMPU1hdGguYWJzKGYtdS0yKlMpPD1BdD8wOjE7aWYoUyYmaWkoeSx4LGIsXyk9PT1wXkwpe3ZhciBDPSh1K2YpLzI7eT1jKk1hdGguY29zKEMpLHg9YypNYXRoLnNpbihDKSxiPV89bnVsbH19ZWxzZSB5PXg9MDtpZihzKXt3PXMqTWF0aC5jb3MoZi1NKSxUPXMqTWF0aC5zaW4oZi1NKSxrPXMqTWF0aC5jb3ModStNKSxBPXMqTWF0aC5zaW4odStNKTt2YXIgUD1NYXRoLmFicyh1LWYrMipNKTw9QXQ/MDoxO2lmKE0mJmlpKHcsVCxrLEEpPT09MS1wXlApe3ZhciBJPSh1K2YpLzI7dz1zKk1hdGguY29zKEkpLFQ9cypNYXRoLnNpbihJKSxrPUE9bnVsbH19ZWxzZSB3PVQ9MDtpZihoPmt0JiYoZD1NYXRoLm1pbihNYXRoLmFicyhjLXMpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7bT1zPGNecD8wOjE7dmFyIE89ZCx6PWQ7aWYoaDxBdCl7dmFyIEQ9bnVsbD09az9bdyxUXTpudWxsPT1iP1t5LHhdOlNlKFt5LHhdLFtrLEFdLFtiLF9dLFt3LFRdKSxSPXktRFswXSxGPXgtRFsxXSxCPWItRFswXSxOPV8tRFsxXSxqPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKkIrRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChCKkIrTipOKSkpLzIpLFU9TWF0aC5zcXJ0KERbMF0qRFswXStEWzFdKkRbMV0pO3o9TWF0aC5taW4oZCwocy1VKS8oai0xKSksTz1NYXRoLm1pbihkLChjLVUpLyhqKzEpKX1pZihudWxsIT1iKXt2YXIgVj1haShudWxsPT1rP1t3LFRdOltrLEFdLFt5LHhdLGMsTyxwKSxIPWFpKFtiLF9dLFt3LFRdLGMsTyxwKTtkPT09Tz9FLnB1c2goIk0iLFZbMF0sIkEiLE8sIiwiLE8sIiAwIDAsIixtLCIgIixWWzFdLCJBIixjLCIsIixjLCIgMCAiLDEtcF5paShWWzFdWzBdLFZbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSwiLCIscCwiICIsSFsxXSwiQSIsTywiLCIsTywiIDAgMCwiLG0sIiAiLEhbMF0pOkUucHVzaCgiTSIsVlswXSwiQSIsTywiLCIsTywiIDAgMSwiLG0sIiAiLEhbMF0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIix4KTtpZihudWxsIT1rKXt2YXIgcT1haShbeSx4XSxbayxBXSxzLC16LHApLEc9YWkoW3csVF0sbnVsbD09Yj9beSx4XTpbYixfXSxzLC16LHApO2Q9PT16P0UucHVzaCgiTCIsR1swXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLEdbMV0sIkEiLHMsIiwiLHMsIiAwICIscF5paShHWzFdWzBdLEdbMV1bMV0scVsxXVswXSxxWzFdWzFdKSwiLCIsMS1wLCIgIixxWzFdLCJBIix6LCIsIix6LCIgMCAwLCIsbSwiICIscVswXSk6RS5wdXNoKCJMIixHWzBdLCJBIix6LCIsIix6LCIgMCAwLCIsbSwiICIscVswXSl9ZWxzZSBFLnB1c2goIkwiLHcsIiwiLFQpfWVsc2UgRS5wdXNoKCJNIix5LCIsIix4KSxudWxsIT1iJiZFLnB1c2goIkEiLGMsIiwiLGMsIiAwICIsTCwiLCIscCwiICIsYiwiLCIsXyksRS5wdXNoKCJMIix3LCIsIixUKSxudWxsIT1rJiZFLnB1c2goIkEiLHMsIiwiLHMsIiAwICIsUCwiLCIsMS1wLCIgIixrLCIsIixBKTtyZXR1cm4gRS5wdXNoKCJaIiksRS5qb2luKCIiKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiK3R9cmV0dXJuIHMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y2UoZSkscyk6dH0scy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jZSh0KSxzKTplfSxzLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1jZSh0KSxzKTpyfSxzLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10PT1Rbj9RbjpjZSh0KSxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Y2UodCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1jZSh0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWNlKHQpLHMpOm99LHMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgcj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsbj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItRXQ7cmV0dXJuW01hdGguY29zKG4pKnIsTWF0aC5zaW4obikqcl19LHN9O3ZhciBRbj0iYXV0byI7ZnVuY3Rpb24gJG4odCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gdGkodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZWkodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiByaSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBuaSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBpaSh0LGUscixuKXtyZXR1cm4odC1yKSplLShlLW4pKnQ+MD8wOjF9ZnVuY3Rpb24gYWkodCxlLHIsbixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz0oaT9uOi1uKS9NYXRoLnNxcnQoYSphK28qbyksbD1zKm8sYz0tcyphLHU9dFswXStsLGY9dFsxXStjLGg9ZVswXStsLHA9ZVsxXStjLGQ9KHUraCkvMixtPShmK3ApLzIsZz1oLXUsdj1wLWYseT1nKmcrdip2LHg9ci1uLGI9dSpwLWgqZixfPSh2PDA/LTE6MSkqTWF0aC5zcXJ0KE1hdGgubWF4KDAseCp4KnktYipiKSksdz0oYip2LWcqXykveSxUPSgtYipnLXYqXykveSxrPShiKnYrZypfKS95LEE9KC1iKmcrdipfKS95LE09dy1kLFM9VC1tLEU9ay1kLEw9QS1tO3JldHVybiBNKk0rUypTPkUqRStMKkwmJih3PWssVD1BKSxbW3ctbCxULWNdLFt3KnIveCxUKnIveF1dfWZ1bmN0aW9uIG9pKCl7cmV0dXJuITB9ZnVuY3Rpb24gc2kodCl7dmFyIGU9X2Uscj13ZSxuPW9pLGk9Y2ksYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsZj1hLmxlbmd0aCxoPWNlKGUpLHA9Y2Uocik7ZnVuY3Rpb24gZCgpe2wucHVzaCgiTSIsaSh0KGMpLG8pKX1mb3IoOysrdTxmOyluLmNhbGwodGhpcyxzPWFbdV0sdSk/Yy5wdXNoKFsraC5jYWxsKHRoaXMscyx1KSwrcC5jYWxsKHRoaXMscyx1KV0pOmMubGVuZ3RoJiYoZCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmZCgpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD9pPXQ6KGk9bGkuZ2V0KHQpfHxjaSkua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBzaShDKX07dmFyIGxpPXQubWFwKHtsaW5lYXI6Y2ksImxpbmVhci1jbG9zZWQiOnVpLHN0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goIkgiLChuWzBdKyhuPXRbZV0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmkucHVzaCgiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6ZmksInN0ZXAtYWZ0ZXIiOmhpLGJhc2lzOm1pLCJiYXNpcy1vcGVuIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBjaSh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goZ2koeGksYSkrIiwiK2dpKHhpLG8pKSwtLW47Zm9yKDsrK248aTspZT10W25dLGEuc2hpZnQoKSxhLnB1c2goZVswXSksby5zaGlmdCgpLG8ucHVzaChlWzFdKSxiaShyLGEsbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W2dpKHhpLG8pLCIsIixnaSh4aSxzKV0sLS1uO2Zvcig7KytuPGE7KXI9dFtuJWldLG8uc2hpZnQoKSxvLnB1c2goclswXSkscy5zaGlmdCgpLHMucHVzaChyWzFdKSxiaShlLG8scyk7cmV0dXJuIGUuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBtaSh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9jaSh0KTp0WzBdK3BpKHQsZGkodCxlKSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P2NpKHQpOnRbMV0rcGkodC5zbGljZSgxLC0xKSxkaSh0LGUpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz91aSh0KTp0WzBdK3BpKCh0LnB1c2godFswXSksdCksZGkoW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfSxtb25vdG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg8Mz9jaSh0KTp0WzBdK3BpKHQsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aC0xLG49W10saT10WzBdLGE9dFsxXSxvPW5bMF09X2koaSxhKTtmb3IoOysrZTxyOyluW2VdPShvKyhvPV9pKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn0odCkscz0tMSxsPXQubGVuZ3RoLTE7Zm9yKDsrK3M8bDspZT1faSh0W3NdLHRbcysxXSkseShlKTxrdD9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO3M9LTE7Zm9yKDsrK3M8PWw7KWk9KHRbTWF0aC5taW4obCxzKzEpXVswXS10W01hdGgubWF4KDAscy0xKV1bMF0pLyg2KigxK29bc10qb1tzXSkpLGEucHVzaChbaXx8MCxvW3NdKml8fDBdKTtyZXR1cm4gYX0odCkpfX0pO2Z1bmN0aW9uIGNpKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIHVpKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gZmkodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiViIsKG49dFtlXSlbMV0sIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIGhpKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIkgiLChuPXRbZV0pWzBdLCJWIixuWzFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBwaSh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIGNpKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgdT10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBkaSh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIG1pKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIGNpKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsZ2koeGksbyksIiwiLGdpKHhpLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLGJpKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gZ2kodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfWxpLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ZS5rZXk9dCxlLmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QodCl9KSk7dmFyIHZpPVswLDIvMywxLzMsMF0seWk9WzAsMS8zLDIvMywwXSx4aT1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gYmkodCxlLHIpe3QucHVzaCgiQyIsZ2kodmksZSksIiwiLGdpKHZpLHIpLCIsIixnaSh5aSxlKSwiLCIsZ2koeWksciksIiwiLGdpKHhpLGUpLCIsIixnaSh4aSxyKSl9ZnVuY3Rpb24gX2kodCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiB3aSh0KXtmb3IodmFyIGUscixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspcj0oZT10W2ldKVswXSxuPWVbMV0tRXQsZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBUaSh0KXt2YXIgZT1fZSxyPV9lLG49MCxpPXdlLGE9b2ksbz1jaSxzPW8ua2V5LGw9byxjPSJMIix1PS43O2Z1bmN0aW9uIGYocyl7dmFyIGYsaCxwLGQ9W10sbT1bXSxnPVtdLHY9LTEseT1zLmxlbmd0aCx4PWNlKGUpLGI9Y2UobiksXz1lPT09cj9mdW5jdGlvbigpe3JldHVybiBofTpjZShyKSx3PW49PT1pP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OmNlKGkpO2Z1bmN0aW9uIFQoKXtkLnB1c2goIk0iLG8odChnKSx1KSxjLGwodChtLnJldmVyc2UoKSksdSksIloiKX1mb3IoOysrdjx5OylhLmNhbGwodGhpcyxmPXNbdl0sdik/KG0ucHVzaChbaD0reC5jYWxsKHRoaXMsZix2KSxwPStiLmNhbGwodGhpcyxmLHYpXSksZy5wdXNoKFsrXy5jYWxsKHRoaXMsZix2KSwrdy5jYWxsKHRoaXMsZix2KV0pKTptLmxlbmd0aCYmKFQoKSxtPVtdLGc9W10pO3JldHVybiBtLmxlbmd0aCYmVCgpLGQubGVuZ3RoP2Quam9pbigiIik6bnVsbH1yZXR1cm4gZi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9dCxmKTpyfSxmLngwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZik6ZX0sZi54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGYpOnJ9LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1pPXQsZik6aX0sZi55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGYpOm59LGYueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxmKTppfSxmLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxmKTphfSxmLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P289dDoobz1saS5nZXQodCl8fGNpKS5rZXksbD1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD8iTSI6IkwiLGYpOnN9LGYudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGYpOnV9LGZ9ZnVuY3Rpb24ga2kodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEFpKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBNaSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gU2kodCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIEVpKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tRXQ7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fWZ1bmN0aW9uIExpKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIENpKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gUGkodCl7dmFyIGU9TWF0aC5zcXJ0KHQvQXQpO3JldHVybiJNMCwiK2UrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrZSsiWiJ9dC5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1zaSh3aSk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdH0sZmkucmV2ZXJzZT1oaSxoaS5yZXZlcnNlPWZpLHQuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gVGkoQyl9LHQuc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9VGkod2kpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmlubmVyUmFkaXVzPXQueDAsZGVsZXRlIHQueDAsdC5vdXRlclJhZGl1cz10LngxLGRlbGV0ZSB0LngxLHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdC5zdGFydEFuZ2xlPXQueTAsZGVsZXRlIHQueTAsdC5lbmRBbmdsZT10LnkxLGRlbGV0ZSB0LnkxLHR9LHQuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7dmFyIHQ9a2ksZT1BaSxyPU1pLG49ZWksaT1yaTtmdW5jdGlvbiBhKHIsbil7dmFyIGksYSxjPW8odGhpcyx0LHIsbiksdT1vKHRoaXMsZSxyLG4pO3JldHVybiJNIitjLnAwK3MoYy5yLGMucDEsYy5hMS1jLmEwKSsoYT11LCgoaT1jKS5hMD09YS5hMCYmaS5hMT09YS5hMT9sKGMucixjLnAxLGMucixjLnAwKTpsKGMucixjLnAxLHUucix1LnAwKStzKHUucix1LnAxLHUuYTEtdS5hMCkrbCh1LnIsdS5wMSxjLnIsYy5wMCkpKyJaIil9ZnVuY3Rpb24gbyh0LGUsYSxvKXt2YXIgcz1lLmNhbGwodCxhLG8pLGw9ci5jYWxsKHQscyxvKSxjPW4uY2FsbCh0LHMsbyktRXQsdT1pLmNhbGwodCxzLG8pLUV0O3JldHVybntyOmwsYTA6YyxhMTp1LHAwOltsKk1hdGguY29zKGMpLGwqTWF0aC5zaW4oYyldLHAxOltsKk1hdGguY29zKHUpLGwqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4iQSIrdCsiLCIrdCsiIDAgIisgKyhyPkF0KSsiLDEgIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Y2UodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y2UoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWNlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Y2UodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1raSxlPUFpLHI9U2k7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4iTSIrKGw9bC5tYXAocikpWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jZShlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jZSh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0LnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT10LnN2Zy5kaWFnb25hbCgpLHI9U2ksbj1lLnByb2plY3Rpb247cmV0dXJuIGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKEVpKHI9dCkpOnJ9LGV9LHQuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PUNpLGU9TGk7ZnVuY3Rpb24gcihyLG4pe3JldHVybihJaS5nZXQodC5jYWxsKHRoaXMscixuKSl8fFBpKShlLmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jZSh0KSxyKTplfSxyfTt2YXIgSWk9dC5tYXAoe2NpcmNsZTpQaSxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKnppKSkscj1lKnppO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvT2kpLHI9ZSpPaS8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L09pKSxyPWUqT2kvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO3Quc3ZnLnN5bWJvbFR5cGVzPUlpLmtleXMoKTt2YXIgT2k9TWF0aC5zcXJ0KDMpLHppPU1hdGgudGFuKDMwKkx0KTtZLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj1CaXx8KytVaSxpPXFpKHQpLGE9W10sbz1OaXx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOkVyLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxmPWMubGVuZ3RoOysrdTxmOykocj1jW3VdKSYmR2kocix1LGksbixvKSxlLnB1c2gocil9cmV0dXJuIEZpKGEsaSxuKX0sWS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P0RpOlJpKHFpKHQpKSl9O3ZhciBEaT1SaShxaSgpKTtmdW5jdGlvbiBSaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyLG47KGU9dGhpc1t0XSkmJihuPWVbcj1lLmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLWUuY291bnQ/ZGVsZXRlIGVbcl06ZGVsZXRlIHRoaXNbdF0sZS5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24gRmkodCxlLHIpe3JldHVybiBVKHQsamkpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9dmFyIEJpLE5pLGppPVtdLFVpPTA7ZnVuY3Rpb24gVmkodCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiB1dCh0LCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKHQsbyxzKXt0W2FdW2ldLnR3ZWVuLnNldChlLG4oci5jYWxsKHQsdC5fX2RhdGFfXyxvLHMpKSl9OihyPW4ociksZnVuY3Rpb24odCl7dFthXVtpXS50d2Vlbi5zZXQoZSxyKX0pKX1mdW5jdGlvbiBIaSh0KXtyZXR1cm4gbnVsbD09dCYmKHQ9IiIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBxaSh0KXtyZXR1cm4gbnVsbD09dD8iX190cmFuc2l0aW9uX18iOiJfX3RyYW5zaXRpb25fIit0KyJfXyJ9ZnVuY3Rpb24gR2kodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLHU9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxmPXVbbl07ZnVuY3Rpb24gaChyKXt2YXIgaT11LmFjdGl2ZSxoPXVbaV07Zm9yKHZhciBkIGluIGgmJihoLnRpbWVyLmM9bnVsbCxoLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtpXSxoLmV2ZW50JiZoLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxoLmluZGV4KSksdSlpZigrZDxuKXt2YXIgbT11W2RdO20udGltZXIuYz1udWxsLG0udGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2RdfW8uYz1wLHZlKChmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSksMCxhKSx1LmFjdGl2ZT1uLGYuZXZlbnQmJmYuZXZlbnQuc3RhcnQuY2FsbCh0LHQuX19kYXRhX18sZSksYz1bXSxmLnR3ZWVuLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKHQsdC5fX2RhdGFfXyxlKSkmJmMucHVzaChuKX0pKSxsPWYuZWFzZSxzPWYuZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxoPWMubGVuZ3RoO2g+MDspY1stLWhdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBmLmV2ZW50JiZmLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1mfHwoYT1pLnRpbWUsbz12ZSgoZnVuY3Rpb24odCl7dmFyIGU9Zi5kZWxheTtpZihvLnQ9ZSthLGU8PXQpcmV0dXJuIGgodC1lKTtvLmM9aH0pLDAsYSksZj11W25dPXt0d2VlbjpuZXcgXyx0aW1lOmEsdGltZXI6byxkZWxheTppLmRlbGF5LGR1cmF0aW9uOmkuZHVyYXRpb24sZWFzZTppLmVhc2UsaW5kZXg6ZX0saT1udWxsLCsrdS5jb3VudCl9amkuY2FsbD1ZLmNhbGwsamkuZW1wdHk9WS5lbXB0eSxqaS5ub2RlPVkubm9kZSxqaS5zaXplPVkuc2l6ZSx0LnRyYW5zaXRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP0JpP2UudHJhbnNpdGlvbihyKTplOnQuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihlKX0sdC50cmFuc2l0aW9uLnByb3RvdHlwZT1qaSxqaS5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLG89W107dD1XKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KCJfX2RhdGFfXyJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxHaShyLHUsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBGaShvLGEsaSl9LGppLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1YKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGY9dGhpc1tjXSxoPS0xLHA9Zi5sZW5ndGg7KytoPHA7KWlmKG49ZltoXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxoLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIGQ9LTEsbT1yLmxlbmd0aDsrK2Q8bTspKGk9cltkXSkmJkdpKGksZCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBGaShsLHMsbyl9LGppLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG49W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx0KHQpKTtmb3IodmFyIGk9MCxhPXRoaXMubGVuZ3RoO2k8YTtpKyspe24ucHVzaChlPVtdKTtmb3IodmFyIG8scz0wLGw9KG89dGhpc1tpXSkubGVuZ3RoO3M8bDtzKyspKHI9b1tzXSkmJnQuY2FsbChyLHIuX19kYXRhX18scyxpKSYmZS5wdXNoKHIpfXJldHVybiBGaShuLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpfSxqaS50d2Vlbj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpW25dW3JdLnR3ZWVuLmdldCh0KTp1dCh0aGlzLG51bGw9PWU/ZnVuY3Rpb24oZSl7ZVtuXVtyXS50d2Vlbi5yZW1vdmUodCl9OmZ1bmN0aW9uKGkpe2lbbl1bcl0udHdlZW4uc2V0KHQsZSl9KX0samkuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHIgaW4gZSl0aGlzLmF0dHIocixlW3JdKTtyZXR1cm4gdGhpc312YXIgbj0idHJhbnNmb3JtIj09ZT9Ocjp5cixpPXQubnMucXVhbGlmeShlKTtmdW5jdGlvbiBhKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX1mdW5jdGlvbiBzKHQpe3JldHVybiBudWxsPT10P2E6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZShpKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShpLGUodCkpfSl9KX1mdW5jdGlvbiBsKHQpe3JldHVybiBudWxsPT10P286KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsZSh0KSl9KX0pfXJldHVybiBWaSh0aGlzLCJhdHRyLiIrZSxyLGkubG9jYWw/bDpzKX0samkuYXR0clR3ZWVuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrZSxuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGkodCkpfX06ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGkodCkpfX0pfSxqaS5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0iIiksdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPSIifWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj15cihpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX1yZXR1cm4gVmkodGhpcywic3R5bGUuIit0LGUsYSl9LGppLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4obixpKXt2YXIgYT1lLmNhbGwodGhpcyxuLGksbyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIGEmJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxhKGUpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LG4pfSxqaS50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBWaSh0aGlzLCJ0ZXh0Iix0LEhpKX0samkucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLChmdW5jdGlvbigpe3ZhciBlO3RoaXNbdF0uY291bnQ8MiYmKGU9dGhpcy5wYXJlbnROb2RlKSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pKX0samkuZWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVtyXS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9dC5lYXNlLmFwcGx5KHQsYXJndW1lbnRzKSksdXQodGhpcywoZnVuY3Rpb24odCl7dFtuXVtyXS5lYXNlPWV9KSkpfSxqaS5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0samkuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxhKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSxqaS5lYWNoPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9Tmksbz1CaTt0cnl7Qmk9bix1dCh0aGlzLChmdW5jdGlvbih0LHIsYSl7Tmk9dFtpXVtuXSxlLmNhbGwodCx0Ll9fZGF0YV9fLHIsYSl9KSl9ZmluYWxseXtOaT1hLEJpPW99fWVsc2UgdXQodGhpcywoZnVuY3Rpb24oYSl7dmFyIG89YVtpXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9dC5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKGUscil9KSk7cmV0dXJuIHRoaXN9LGppLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG49dGhpcy5pZCxpPSsrVWksYT10aGlzLm5hbWVzcGFjZSxvPVtdLHM9MCxsPXRoaXMubGVuZ3RoO3M8bDtzKyspe28ucHVzaCh0PVtdKTtmb3IodmFyIGMsdT0wLGY9KGM9dGhpc1tzXSkubGVuZ3RoO3U8Zjt1KyspKGU9Y1t1XSkmJkdpKGUsdSxhLGkse3RpbWU6KHI9ZVthXVtuXSkudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pLHQucHVzaChlKX1yZXR1cm4gRmkobyxhLGkpfSx0LnN2Zy5heGlzPWZ1bmN0aW9uKCl7dmFyIGUscj10LnNjYWxlLmxpbmVhcigpLGk9WWksYT02LG89NixzPTMsbD1bMTBdLGM9bnVsbDtmdW5jdGlvbiB1KG4pe24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbix1PXQuc2VsZWN0KHRoaXMpLGY9dGhpcy5fX2NoYXJ0X198fHIsaD10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/aC50aWNrcz9oLnRpY2tzLmFwcGx5KGgsbCk6aC5kb21haW4oKTpjLGQ9bnVsbD09ZT9oLnRpY2tGb3JtYXQ/aC50aWNrRm9ybWF0LmFwcGx5KGgsbCk6QzplLG09dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLGgpLGc9bS5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsa3QpLHY9dC50cmFuc2l0aW9uKG0uZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsa3QpLnJlbW92ZSgpLHk9dC50cmFuc2l0aW9uKG0ub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLHg9TWF0aC5tYXgoYSwwKStzLGI9RG4oaCksXz11LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSx0LnRyYW5zaXRpb24oXykpO2cuYXBwZW5kKCJsaW5lIiksZy5hcHBlbmQoInRleHQiKTt2YXIgVCxrLEEsTSxTPWcuc2VsZWN0KCJsaW5lIiksRT15LnNlbGVjdCgibGluZSIpLEw9bS5zZWxlY3QoInRleHQiKS50ZXh0KGQpLFA9Zy5zZWxlY3QoInRleHQiKSxJPXkuc2VsZWN0KCJ0ZXh0IiksTz0idG9wIj09PWl8fCJsZWZ0Ij09PWk/LTE6MTtpZigiYm90dG9tIj09PWl8fCJ0b3AiPT09aT8obj1YaSxUPSJ4IixBPSJ5IixrPSJ4MiIsTT0ieTIiLEwuYXR0cigiZHkiLE88MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIitPKm8rIlYwSCIrYlsxXSsiViIrTypvKSk6KG49WmksVD0ieSIsQT0ieCIsaz0ieTIiLE09IngyIixMLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLE88MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIitPKm8rIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIrTypvKSksUy5hdHRyKE0sTyphKSxQLmF0dHIoQSxPKngpLEUuYXR0cihrLDApLmF0dHIoTSxPKmEpLEkuYXR0cihULDApLmF0dHIoQSxPKngpLGgucmFuZ2VCYW5kKXt2YXIgej1oLEQ9ei5yYW5nZUJhbmQoKS8yO2Y9aD1mdW5jdGlvbih0KXtyZXR1cm4geih0KStEfX1lbHNlIGYucmFuZ2VCYW5kP2Y9aDp2LmNhbGwobixoLGYpO2cuY2FsbChuLGYsaCkseS5jYWxsKG4saCxoKX0pKX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQgaW4gV2k/dCsiIjpZaSx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciBZaT0iYm90dG9tIixXaT17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIFhpKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIsMCkifSkpfWZ1bmN0aW9uIFppKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSkpfXQuc3ZnLmJydXNoPWZ1bmN0aW9uKCl7dmFyIGUscixuPU4oaCwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxpPW51bGwsYT1udWxsLHM9WzAsMF0sbD1bMCwwXSxjPSEwLHU9ITAsZj1LaVswXTtmdW5jdGlvbiBoKGUpe2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLGcpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixnKSxyPWUuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksZS5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIG49ZS5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKGYsQyk7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInJlc2l6ZSAiK3R9KSkuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBKaVt0XX0pKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi9eW25zXS8udGVzdCh0KT8tMzpudWxsfSkpLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksbi5zdHlsZSgiZGlzcGxheSIsaC5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbyxzPXQudHJhbnNpdGlvbihlKSxsPXQudHJhbnNpdGlvbihyKTtpJiYobz1EbihpKSxsLmF0dHIoIngiLG9bMF0pLmF0dHIoIndpZHRoIixvWzFdLW9bMF0pLGQocykpLGEmJihvPURuKGEpLGwuYXR0cigieSIsb1swXSkuYXR0cigiaGVpZ2h0IixvWzFdLW9bMF0pLG0ocykpLHAocyl9KSl9ZnVuY3Rpb24gcCh0KXt0LnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitzWysvZSQvLnRlc3QodCldKyIsIitsWysvXnMvLnRlc3QodCldKyIpIn0pKX1mdW5jdGlvbiBkKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsc1swXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gbSh0KXt0LnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGxbMF0pLHQuc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsbFsxXS1sWzBdKX1mdW5jdGlvbiBnKCl7dmFyIGYsZyx2PXRoaXMseT10LnNlbGVjdCh0LmV2ZW50LnRhcmdldCkseD1uLm9mKHYsYXJndW1lbnRzKSxiPXQuc2VsZWN0KHYpLF89eS5kYXR1bSgpLHc9IS9eKG58cykkLy50ZXN0KF8pJiZpLFQ9IS9eKGV8dykkLy50ZXN0KF8pJiZhLGs9eS5jbGFzc2VkKCJleHRlbnQiKSxBPWJ0KHYpLE09dC5tb3VzZSh2KSxTPXQuc2VsZWN0KG8odikpLm9uKCJrZXlkb3duLmJydXNoIixDKS5vbigia2V5dXAuYnJ1c2giLFApO2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXM/Uy5vbigidG91Y2htb3ZlLmJydXNoIixJKS5vbigidG91Y2hlbmQuYnJ1c2giLHopOlMub24oIm1vdXNlbW92ZS5icnVzaCIsSSkub24oIm1vdXNldXAuYnJ1c2giLHopLGIuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksaylNWzBdPXNbMF0tTVswXSxNWzFdPWxbMF0tTVsxXTtlbHNlIGlmKF8pe3ZhciBFPSsvdyQvLnRlc3QoXyksTD0rL15uLy50ZXN0KF8pO2c9W3NbMS1FXS1NWzBdLGxbMS1MXS1NWzFdXSxNWzBdPXNbRV0sTVsxXT1sW0xdfWVsc2UgdC5ldmVudC5hbHRLZXkmJihmPU0uc2xpY2UoKSk7ZnVuY3Rpb24gQygpezMyPT10LmV2ZW50LmtleUNvZGUmJihrfHwoZj1udWxsLE1bMF0tPXNbMV0sTVsxXS09bFsxXSxrPTIpLEYoKSl9ZnVuY3Rpb24gUCgpezMyPT10LmV2ZW50LmtleUNvZGUmJjI9PWsmJihNWzBdKz1zWzFdLE1bMV0rPWxbMV0saz0wLEYoKSl9ZnVuY3Rpb24gSSgpe3ZhciBlPXQubW91c2Uodikscj0hMTtnJiYoZVswXSs9Z1swXSxlWzFdKz1nWzFdKSxrfHwodC5ldmVudC5hbHRLZXk/KGZ8fChmPVsoc1swXStzWzFdKS8yLChsWzBdK2xbMV0pLzJdKSxNWzBdPXNbKyhlWzBdPGZbMF0pXSxNWzFdPWxbKyhlWzFdPGZbMV0pXSk6Zj1udWxsKSx3JiZPKGUsaSwwKSYmKGQoYikscj0hMCksVCYmTyhlLGEsMSkmJihtKGIpLHI9ITApLHImJihwKGIpLHgoe3R5cGU6ImJydXNoIixtb2RlOms/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIE8odCxuLGkpe3ZhciBhLG8saD1EbihuKSxwPWhbMF0sZD1oWzFdLG09TVtpXSxnPWk/bDpzLHY9Z1sxXS1nWzBdO2lmKGsmJihwLT1tLGQtPXYrbSksYT0oaT91OmMpP01hdGgubWF4KHAsTWF0aC5taW4oZCx0W2ldKSk6dFtpXSxrP289KGErPW0pK3Y6KGYmJihtPU1hdGgubWF4KHAsTWF0aC5taW4oZCwyKmZbaV0tYSkpKSxtPGE/KG89YSxhPW0pOm89bSksZ1swXSE9YXx8Z1sxXSE9bylyZXR1cm4gaT9yPW51bGw6ZT1udWxsLGdbMF09YSxnWzFdPW8sITB9ZnVuY3Rpb24geigpe0koKSxiLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixoLmVtcHR5KCk/Im5vbmUiOm51bGwpLHQuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCksUy5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSxBKCkseCh7dHlwZToiYnJ1c2hlbmQifSl9Yi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLHQuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIseS5zdHlsZSgiY3Vyc29yIikpLHgoe3R5cGU6ImJydXNoc3RhcnQifSksSSgpfXJldHVybiBoLmV2ZW50PWZ1bmN0aW9uKGkpe2kuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1uLm9mKHRoaXMsYXJndW1lbnRzKSxhPXt4OnMseTpsLGk6ZSxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGE7dGhpcy5fX2NoYXJ0X189YSxCaT90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe2U9by5pLHI9by5qLHM9by54LGw9by55LGkoe3R5cGU6ImJydXNoc3RhcnQifSl9KSkudHdlZW4oImJydXNoOmJydXNoIiwoZnVuY3Rpb24oKXt2YXIgdD14cihzLGEueCksbj14cihsLGEueSk7cmV0dXJuIGU9cj1udWxsLGZ1bmN0aW9uKGUpe3M9YS54PXQoZSksbD1hLnk9bihlKSxpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pKS5lYWNoKCJlbmQuYnJ1c2giLChmdW5jdGlvbigpe2U9YS5pLHI9YS5qLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSl9KSk6KGkoe3R5cGU6ImJydXNoc3RhcnQifSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KSl9KSl9LGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1LaVshKGk9dCk8PDF8IWFdLGgpOml9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1LaVshaTw8MXwhKGE9dCldLGgpOmF9LGguY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJmE/KGM9ISF0WzBdLHU9ISF0WzFdKTppP2M9ISF0OmEmJih1PSEhdCksaCk6aSYmYT9bYyx1XTppP2M6YT91Om51bGx9LGguZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLG8sYyx1LGY7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJihuPXRbMF0sbz10WzFdLGEmJihuPW5bMF0sbz1vWzBdKSxlPVtuLG9dLGkuaW52ZXJ0JiYobj1pKG4pLG89aShvKSksbzxuJiYoZj1uLG49byxvPWYpLG49PXNbMF0mJm89PXNbMV18fChzPVtuLG9dKSksYSYmKGM9dFswXSx1PXRbMV0saSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0sYS5pbnZlcnQmJihjPWEoYyksdT1hKHUpKSx1PGMmJihmPWMsYz11LHU9ZiksYz09bFswXSYmdT09bFsxXXx8KGw9W2MsdV0pKSxoKTooaSYmKGU/KG49ZVswXSxvPWVbMV0pOihuPXNbMF0sbz1zWzFdLGkuaW52ZXJ0JiYobj1pLmludmVydChuKSxvPWkuaW52ZXJ0KG8pKSxvPG4mJihmPW4sbj1vLG89ZikpKSxhJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9bFswXSx1PWxbMV0sYS5pbnZlcnQmJihjPWEuaW52ZXJ0KGMpLHU9YS5pbnZlcnQodSkpLHU8YyYmKGY9YyxjPXUsdT1mKSkpLGkmJmE/W1tuLGNdLFtvLHVdXTppP1tuLG9dOmEmJltjLHVdKX0saC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBoLmVtcHR5KCl8fChzPVswLDBdLGw9WzAsMF0sZT1yPW51bGwpLGh9LGguZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWkmJnNbMF09PXNbMV18fCEhYSYmbFswXT09bFsxXX0sdC5yZWJpbmQoaCxuLCJvbiIpfTt2YXIgSmk9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sS2k9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV07ZnVuY3Rpb24gUWkodCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uICRpKHQpe3ZhciBlPWkuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gZS5zZWxlY3ROb2RlKGkuYm9keSksZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfXQudGV4dD11ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSkpLHQuanNvbj1mdW5jdGlvbih0LGUpe3JldHVybiBmZSh0LCJhcHBsaWNhdGlvbi9qc29uIixRaSxlKX0sdC5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZlKHQsInRleHQvaHRtbCIsJGksZSl9LHQueG1sPXVlKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pKSwib2JqZWN0Ij09dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9dDp0aGlzLmQzPXR9KS5hcHBseShzZWxmKX0se31dLDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL3F1YWQiKX0seyIuL3F1YWQiOjYwfV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImNsYW1wIiksYT10KCJwYXJzZS1yZWN0Iiksbz10KCJhcnJheS1ib3VuZHMiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImRlZmluZWQiKSxjPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSx1PXQoImlzLW9iaiIpLGY9dCgiZHR5cGUiKSxoPXQoIm1hdGgtbG9nMiIpO2Z1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0sYT0xLyhlWzJdLXIpLG89MS8oZVszXS1uKSxzPW5ldyBBcnJheSh0Lmxlbmd0aCksbD0wLGM9dC5sZW5ndGgvMjtsPGM7bCsrKXNbMipsXT1pKCh0WzIqbF0tcikqYSwwLDEpLHNbMipsKzFdPWkoKHRbMipsKzFdLW4pKm8sMCwxKTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSksdD1jKHQsImZsb2F0NjQiKSxlPXMoZSx7Ym91bmRzOiJyYW5nZSBib3VuZHMgZGF0YUJveCBkYXRhYm94IixtYXhEZXB0aDoiZGVwdGggbWF4RGVwdGggbWF4ZGVwdGggbGV2ZWwgbWF4TGV2ZWwgbWF4bGV2ZWwgbGV2ZWxzIixkdHlwZToidHlwZSBkdHlwZSBmb3JtYXQgb3V0IGRzdCBvdXRwdXQgZGVzdGluYXRpb24ifSk7dmFyIHI9bChlLm1heERlcHRoLDI1NSksaT1sKGUuYm91bmRzLG8odCwyKSk7aVswXT09PWlbMl0mJmlbMl0rKyxpWzFdPT09aVszXSYmaVszXSsrO3ZhciBkLG09cCh0LGkpLGc9dC5sZW5ndGg+Pj4xO2UuZHR5cGV8fChlLmR0eXBlPSJhcnJheSIpLCJzdHJpbmciPT10eXBlb2YgZS5kdHlwZT9kPW5ldyhmKGUuZHR5cGUpKShnKTplLmR0eXBlJiYoZD1lLmR0eXBlLEFycmF5LmlzQXJyYXkoZCkmJihkLmxlbmd0aD1nKSk7Zm9yKHZhciB2PTA7djxnOysrdilkW3ZdPXY7dmFyIHk9W10seD1bXSxiPVtdLF89W107IWZ1bmN0aW9uIHQoZSxuLGksYSxvLHMpe2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbD15W29dfHwoeVtvXT1bXSksYz1iW29dfHwoYltvXT1bXSksdT14W29dfHwoeFtvXT1bXSksZj1sLmxlbmd0aDtpZigrK28+cnx8cz4xMDczNzQxODI0KXtmb3IodmFyIGg9MDtoPGEubGVuZ3RoO2grKylsLnB1c2goYVtoXSksYy5wdXNoKHMpLHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKTtyZXR1cm4gZn1pZihsLnB1c2goYVswXSksYy5wdXNoKHMpLGEubGVuZ3RoPD0xKXJldHVybiB1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCksZjtmb3IodmFyIHA9LjUqaSxkPWUrcCxnPW4rcCx2PVtdLF89W10sdz1bXSxUPVtdLGs9MSxBPWEubGVuZ3RoO2s8QTtrKyspe3ZhciBNPWFba10sUz1tWzIqTV0sRT1tWzIqTSsxXTtTPGQ/RTxnP3YucHVzaChNKTpfLnB1c2goTSk6RTxnP3cucHVzaChNKTpULnB1c2goTSl9cmV0dXJuIHM8PD0yLHUucHVzaCh0KGUsbixwLHYsbyxzKSx0KGUsZyxwLF8sbyxzKzEpLHQoZCxuLHAsdyxvLHMrMiksdChkLGcscCxULG8scyszKSksZn0oMCwwLDEsZCwwLDEpO2Zvcih2YXIgdz0wLFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIGs9eVtUXTtpZihkLnNldClkLnNldChrLHcpO2Vsc2UgZm9yKHZhciBBPTAsTT1rLmxlbmd0aDtBPE07QSsrKWRbQSt3XT1rW0FdO3ZhciBTPXcreVtUXS5sZW5ndGg7X1tUXT1bdyxTXSx3PVN9cmV0dXJuIGQucmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZSxyPVtdLG49YXJndW1lbnRzLmxlbmd0aDtmb3IoO24tLTspcltuXT1hcmd1bWVudHNbbl07aWYodShyW3IubGVuZ3RoLTFdKSl7dmFyIG89ci5wb3AoKTtyLmxlbmd0aHx8bnVsbD09by54JiZudWxsPT1vLmwmJm51bGw9PW8ubGVmdHx8KHI9W29dLGU9e30pLGU9cyhvLHtsZXZlbDoibGV2ZWwgbWF4TGV2ZWwiLGQ6ImQgZGlhbSBkaWFtZXRlciByIHJhZGl1cyBweCBweFNpemUgcGl4ZWwgcGl4ZWxTaXplIG1heEQgc2l6ZSBtaW5TaXplIixsb2Q6ImxvZCBkZXRhaWxzIHJhbmdlcyBvZmZzZXRzIn0pfWVsc2UgZT17fTtyLmxlbmd0aHx8KHI9aSk7dmFyIGM9YS5hcHBseSh2b2lkIDAsciksZj1bTWF0aC5taW4oYy54LGMueCtjLndpZHRoKSxNYXRoLm1pbihjLnksYy55K2MuaGVpZ2h0KSxNYXRoLm1heChjLngsYy54K2Mud2lkdGgpLE1hdGgubWF4KGMueSxjLnkrYy5oZWlnaHQpXSxkPWZbMF0sbT1mWzFdLGc9ZlsyXSx2PWZbM10sYj1wKFtkLG0sZyx2XSxpKSxfPWJbMF0sdz1iWzFdLFQ9YlsyXSxrPWJbM10sQT1sKGUubGV2ZWwseS5sZW5ndGgpO2lmKG51bGwhPWUuZCl7dmFyIE07Im51bWJlciI9PXR5cGVvZiBlLmQ/TT1bZS5kLGUuZF06ZS5kLmxlbmd0aCYmKE09ZS5kKSxBPU1hdGgubWluKE1hdGgubWF4KE1hdGguY2VpbCgtaChNYXRoLmFicyhNWzBdKS8oaVsyXS1pWzBdKSkpLE1hdGguY2VpbCgtaChNYXRoLmFicyhNWzFdKS8oaVszXS1pWzFdKSkpKSxBKX1pZihBPU1hdGgubWluKEEseS5sZW5ndGgpLGUubG9kKXJldHVybiBFKF8sdyxULGssQSk7dmFyIFM9W107ZnVuY3Rpb24gTChlLHIsbixpLGEsbyl7aWYobnVsbCE9PWEmJm51bGwhPT1vJiYhKF8+ZStufHx3PnIrbnx8VDxlfHxrPHJ8fGk+PUF8fGE9PT1vKSl7dmFyIHM9eVtpXTt2b2lkIDA9PT1vJiYobz1zLmxlbmd0aCk7Zm9yKHZhciBsPWE7bDxvO2wrKyl7dmFyIGM9c1tsXSx1PXRbMipjXSxmPXRbMipjKzFdO3U+PWQmJnU8PWcmJmY+PW0mJmY8PXYmJlMucHVzaChjKX12YXIgaD14W2ldLHA9aFs0KmErMF0sYj1oWzQqYSsxXSxNPWhbNCphKzJdLEU9aFs0KmErM10sUD1DKGgsYSsxKSxJPS41Km4sTz1pKzE7TChlLHIsSSxPLHAsYnx8TXx8RXx8UCksTChlLHIrSSxJLE8sYixNfHxFfHxQKSxMKGUrSSxyLEksTyxNLEV8fFApLEwoZStJLHIrSSxJLE8sRSxQKX19ZnVuY3Rpb24gQyh0LGUpe2Zvcih2YXIgcj1udWxsLG49MDtudWxsPT09cjspaWYocj10WzQqZStuXSwrK24+dC5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIHJ9cmV0dXJuIEwoMCwwLDEsMCwwLDEpLFN9LGQ7ZnVuY3Rpb24gRSh0LGUscixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxhO3MrKyl7dmFyIGw9YltzXSxjPV9bc11bMF0sdT1MKHQsZSxzKSxmPUwocixpLHMpLGg9bi5nZShsLHUpLHA9bi5ndChsLGYsaCxsLmxlbmd0aC0xKTtvW3NdPVtoK2MscCtjXX1yZXR1cm4gb31mdW5jdGlvbiBMKHQsZSxyKXtmb3IodmFyIG49MSxpPS41LGE9LjUsbz0uNSxzPTA7czxyO3MrKyluPDw9MixuKz10PGk/ZTxhPzA6MTplPGE/MjozLG8qPS41LGkrPXQ8aT8tbzpvLGErPWU8YT8tbzpvO3JldHVybiBufX19LHsiYXJyYXktYm91bmRzIjo2NywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjc2LGNsYW1wOjgxLGRlZmluZWQ6MTE4LGR0eXBlOjEyMSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTg2LCJpcy1vYmoiOjIzMCwibWF0aC1sb2cyIjoyMzUsInBhcnNlLXJlY3QiOjI0NCwicGljay1ieS1hbGlhcyI6MjQ4fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLG4saSxhLHMsbD0wLGM9dC5sZW5ndGg7aWYoYz4yKXtmb3Iocz0wO3M8YztzKyspcz09PWMtMj8obj1jLTIsaT1jLTEsYT0wKTpzPT09Yy0xPyhuPWMtMSxpPTAsYT0xKToobj1zLGk9cysxLGE9cysyKSxlPXRbbl0scj10W2ldLGwrPShvKHRbYV1bMF0pLW8oZVswXSkpKk1hdGguc2luKG8oclsxXSkpO2w9NjM3ODEzNypsKjYzNzgxMzcvMn1yZXR1cm4gbH1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXIuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gbi5nZW9tUmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZnVuY3Rpb24odCl7dmFyIGUscj0wO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGkodC5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihlPTA7ZTx0LmNvb3JkaW5hdGVzLmxlbmd0aDtlKyspcis9aSh0LmNvb3JkaW5hdGVzW2VdKTtyZXR1cm4gcjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwfXJldHVybiAwfShlKX0pLDApfX0seyJAdHVyZi9tZXRhIjo2NX1dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1bMS8wLDEvMCwtMS8wLC0xLzBdO3JldHVybiBuLmNvb3JkRWFjaCh0LChmdW5jdGlvbih0KXtlWzBdPnRbMF0mJihlWzBdPXRbMF0pLGVbMV0+dFsxXSYmKGVbMV09dFsxXSksZVsyXTx0WzBdJiYoZVsyXT10WzBdKSxlWzNdPHRbMV0mJihlWzNdPXRbMV0pfSkpLGV9aS5kZWZhdWx0PWksci5kZWZhdWx0PWl9LHsiQHR1cmYvbWV0YSI6NjV9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpLGk9dCgiQHR1cmYvaGVscGVycyIpO3IuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj0wLGE9MCxvPTA7cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe3IrPXRbMF0sYSs9dFsxXSxvKyt9KSwhMCksaS5wb2ludChbci9vLGEvb10sZS5wcm9wZXJ0aWVzKX19LHsiQHR1cmYvaGVscGVycyI6NjQsIkB0dXJmL21ldGEiOjY1fV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSwhdCl0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Iik7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmciKTtpZighZCh0WzBdKXx8IWQodFsxXSkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycyIpO3JldHVybiBuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBhKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6MS4wOTM2KnIuZWFydGhSYWRpdXN9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLjA5MzYxMzN9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGhlY3RhcmVzOjFlLTQsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6Mzg2ZS05LG1pbGxpbWV0ZXJzOjFlNixtaWxsaW1ldHJlczoxZTYseWFyZHM6MS4xOTU5OTAwNDZ9LHIuZmVhdHVyZT1uLHIuZ2VvbWV0cnk9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh2b2lkIDA9PT1yJiYocj17fSksdCl7Y2FzZSJQb2ludCI6cmV0dXJuIGkoZSkuZ2VvbWV0cnk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gbyhlKS5nZW9tZXRyeTtjYXNlIlBvbHlnb24iOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGMoZSkuZ2VvbWV0cnk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBsKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gdShlKS5nZW9tZXRyeTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcih0KyIgaXMgaW52YWxpZCIpfX0sci5wb2ludD1pLHIucG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSkscil9LHIucG9seWdvbj1hLHIucG9seWdvbnM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfSkpLHIpfSxyLmZlYXR1cmVDb2xsZWN0aW9uPXMsci5tdWx0aUxpbmVTdHJpbmc9bCxyLm11bHRpUG9pbnQ9YyxyLm11bHRpUG9seWdvbj11LHIuZ2VvbWV0cnlDb2xsZWN0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0fSxlLHIpfSxyLnJvdW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksZSYmIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIHI9TWF0aC5wb3coMTAsZXx8MCk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSxyLnJhZGlhbnNUb0xlbmd0aD1mLHIubGVuZ3RoVG9SYWRpYW5zPWgsci5sZW5ndGhUb0RlZ3JlZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcChoKHQsZSkpfSxyLmJlYXJpbmdUb0F6aW11dGg9ZnVuY3Rpb24odCl7dmFyIGU9dCUzNjA7cmV0dXJuIGU8MCYmKGUrPTM2MCksZX0sci5yYWRpYW5zVG9EZWdyZWVzPXAsci5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MCpNYXRoLlBJLzE4MH0sci5jb252ZXJ0TGVuZ3RoPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpLHZvaWQgMD09PXImJihyPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGYoaCh0LGUpLHIpfSxyLmNvbnZlcnRBcmVhPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0ibWV0ZXJzIiksdm9pZCAwPT09biYmKG49ImtpbG9tZXRlcnMiKSwhKHQ+PTApKXRocm93IG5ldyBFcnJvcigiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3JpZ2luYWwgdW5pdHMiKTt2YXIgYT1yLmFyZWFGYWN0b3JzW25dO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaW5hbCB1bml0cyIpO3JldHVybiB0L2kqYX0sci5pc051bWJlcj1kLHIuaXNPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fSxyLnZhbGlkYXRlQkJveD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImJib3ggaXMgcmVxdWlyZWQiKTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSIpO2lmKDQhPT10Lmxlbmd0aCYmNiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzIik7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSkpfSxyLnZhbGlkYXRlSWQ9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpZCBpcyByZXF1aXJlZCIpO2lmKC0xPT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiB0KSl0aHJvdyBuZXcgRXJyb3IoImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmciKX19LHt9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvaGVscGVycyIpO2Z1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT10KWZvcih2YXIgbixhLG8scyxsLGMsdSxmLGg9MCxwPTAsZD10LnR5cGUsbT0iRmVhdHVyZUNvbGxlY3Rpb24iPT09ZCxnPSJGZWF0dXJlIj09PWQsdj1tP3QuZmVhdHVyZXMubGVuZ3RoOjEseT0wO3k8djt5Kyspe2w9KGY9ISEodT1tP3QuZmVhdHVyZXNbeV0uZ2VvbWV0cnk6Zz90Lmdlb21ldHJ5OnQpJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXUudHlwZSk/dS5nZW9tZXRyaWVzLmxlbmd0aDoxO2Zvcih2YXIgeD0wO3g8bDt4Kyspe3ZhciBiPTAsXz0wO2lmKG51bGwhPT0ocz1mP3UuZ2VvbWV0cmllc1t4XTp1KSl7Yz1zLmNvb3JkaW5hdGVzO3ZhciB3PXMudHlwZTtzd2l0Y2goaD0hcnx8IlBvbHlnb24iIT09dyYmIk11bHRpUG9seWdvbiIhPT13PzA6MSx3KXtjYXNlIG51bGw6YnJlYWs7Y2FzZSJQb2ludCI6aWYoITE9PT1lKGMscCx5LGIsXykpcmV0dXJuITE7cCsrLGIrKzticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7aWYoITE9PT1lKGNbbl0scCx5LGIsXykpcmV0dXJuITE7cCsrLCJNdWx0aVBvaW50Ij09PXcmJmIrK30iTGluZVN0cmluZyI9PT13JiZiKys7YnJlYWs7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKGE9MDthPGNbbl0ubGVuZ3RoLWg7YSsrKXtpZighMT09PWUoY1tuXVthXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9Ik11bHRpTGluZVN0cmluZyI9PT13JiZiKyssIlBvbHlnb24iPT09dyYmXysrfSJQb2x5Z29uIj09PXcmJmIrKzticmVhaztjYXNlIk11bHRpUG9seWdvbiI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKF89MCxhPTA7YTxjW25dLmxlbmd0aDthKyspe2ZvcihvPTA7bzxjW25dW2FdLmxlbmd0aC1oO28rKyl7aWYoITE9PT1lKGNbbl1bYV1bb10scCx5LGIsXykpcmV0dXJuITE7cCsrfV8rK31iKyt9YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxzLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWkocy5nZW9tZXRyaWVzW25dLGUscikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfX19fX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLHIpO3IrKyk7YnJlYWs7Y2FzZSJGZWF0dXJlIjplKHQucHJvcGVydGllcywwKX19ZnVuY3Rpb24gbyh0LGUpe2lmKCJGZWF0dXJlIj09PXQudHlwZSllKHQsMCk7ZWxzZSBpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgcj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLHIpO3IrKyk7fWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoPTAscD0iRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlLGQ9IkZlYXR1cmUiPT09dC50eXBlLG09cD90LmZlYXR1cmVzLmxlbmd0aDoxO2ZvcihyPTA7cjxtO3IrKyl7Zm9yKHM9cD90LmZlYXR1cmVzW3JdLmdlb21ldHJ5OmQ/dC5nZW9tZXRyeTp0LGM9cD90LmZlYXR1cmVzW3JdLnByb3BlcnRpZXM6ZD90LnByb3BlcnRpZXM6e30sdT1wP3QuZmVhdHVyZXNbcl0uYmJveDpkP3QuYmJveDp2b2lkIDAsZj1wP3QuZmVhdHVyZXNbcl0uaWQ6ZD90LmlkOnZvaWQgMCxvPShsPSEhcyYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1zLnR5cGUpP3MuZ2VvbWV0cmllcy5sZW5ndGg6MSxpPTA7aTxvO2krKylpZihudWxsIT09KGE9bD9zLmdlb21ldHJpZXNbaV06cykpc3dpdGNoKGEudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjppZighMT09PWUoYSxoLGMsdSxmKSlyZXR1cm4hMTticmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPGEuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09ZShhLmdlb21ldHJpZXNbbl0saCxjLHUsZikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfWVsc2UgaWYoITE9PT1lKG51bGwsaCxjLHUsZikpcmV0dXJuITE7aCsrfX1mdW5jdGlvbiBsKHQsZSl7cyh0LChmdW5jdGlvbih0LHIsaSxhLG8pe3ZhciBzLGw9bnVsbD09PXQ/bnVsbDp0LnR5cGU7c3dpdGNoKGwpe2Nhc2UgbnVsbDpjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6cmV0dXJuITEhPT1lKG4uZmVhdHVyZSh0LGkse2Jib3g6YSxpZDpvfSksciwwKSYmdm9pZCAwfXN3aXRjaChsKXtjYXNlIk11bHRpUG9pbnQiOnM9IlBvaW50IjticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6cz0iTGluZVN0cmluZyI7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOnM9IlBvbHlnb24ifWZvcih2YXIgYz0wO2M8dC5jb29yZGluYXRlcy5sZW5ndGg7YysrKXt2YXIgdT17dHlwZTpzLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXNbY119O2lmKCExPT09ZShuLmZlYXR1cmUodSxpKSxyLGMpKXJldHVybiExfX0pKX1mdW5jdGlvbiBjKHQsZSl7bCh0LChmdW5jdGlvbih0LHIsYSl7dmFyIG89MDtpZih0Lmdlb21ldHJ5KXt2YXIgcz10Lmdlb21ldHJ5LnR5cGU7aWYoIlBvaW50IiE9PXMmJiJNdWx0aVBvaW50IiE9PXMpe3ZhciBsLGM9MCx1PTAsZj0wO3JldHVybiExIT09aSh0LChmdW5jdGlvbihpLHMsaCxwLGQpe2lmKHZvaWQgMD09PWx8fHI+Y3x8cD51fHxkPmYpcmV0dXJuIGw9aSxjPXIsdT1wLGY9ZCx2b2lkKG89MCk7dmFyIG09bi5saW5lU3RyaW5nKFtsLGldLHQucHJvcGVydGllcyk7aWYoITE9PT1lKG0scixhLGQsbykpcmV0dXJuITE7bysrLGw9aX0pKSYmdm9pZCAwfX19KSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyByZXF1aXJlZCIpO2wodCwoZnVuY3Rpb24odCxyLGkpe2lmKG51bGwhPT10Lmdlb21ldHJ5KXt2YXIgYT10Lmdlb21ldHJ5LnR5cGUsbz10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3N3aXRjaChhKXtjYXNlIkxpbmVTdHJpbmciOmlmKCExPT09ZSh0LHIsaSwwLDApKXJldHVybiExO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaWYoITE9PT1lKG4ubGluZVN0cmluZyhvW3NdLHQucHJvcGVydGllcykscixpLHMpKXJldHVybiExfX19KSl9ci5jb29yZEFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gaSh0LChmdW5jdGlvbih0KXtlLnB1c2godCl9KSksZX0sci5jb29yZEVhY2g9aSxyLmNvb3JkUmVkdWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXI7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxuLGksbyxzKXthPTA9PT1uJiZ2b2lkIDA9PT1yP3Q6ZShhLHQsbixpLG8scyl9KSxuKSxhfSxyLmZlYXR1cmVFYWNoPW8sci5mZWF0dXJlUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsaSl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGkpfSkpLG59LHIuZmluZFBvaW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5jb29yZEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBuLnBvaW50KGMsbCxlKTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG4ucG9pbnQoY1thXSxsLGUpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcyksbi5wb2ludChjW3NdLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MpLG4ucG9pbnQoY1tvXVtzXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MpLG4ucG9pbnQoY1thXVtzXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcyksbi5wb2ludChjW2FdW29dW3NdLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5maW5kU2VnbWVudD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixpPWUuZmVhdHVyZUluZGV4fHwwLGE9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuc2VnbWVudEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gczwwJiYocz1jLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tzXSxjW3MrMV1dLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW29dW3NdLGNbb11bcysxXV0sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksczwwJiYocz1jW2FdLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1thXVtzXSxjW2FdW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG88MCYmKG89Y1thXS5sZW5ndGgrbyksczwwJiYocz1jW2FdW29dLmxlbmd0aC1zLTEpLG4ubGluZVN0cmluZyhbY1thXVtvXVtzXSxjW2FdW29dW3MrMV1dLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5mbGF0dGVuRWFjaD1sLHIuZmxhdHRlblJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbCh0LChmdW5jdGlvbih0LGksYSl7bj0wPT09aSYmMD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEpfSkpLG59LHIuZ2VvbUVhY2g9cyxyLmdlb21SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIHModCwoZnVuY3Rpb24odCxpLGEsbyxzKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8scyl9KSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LChmdW5jdGlvbih0LGksYSxvKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8pfSkpLG59LHIucHJvcEVhY2g9YSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGEodCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5zZWdtZW50RWFjaD1jLHIuc2VnbWVudFJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cixpPSExO3JldHVybiBjKHQsKGZ1bmN0aW9uKHQsYSxvLHMsbCl7bj0hMT09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxhLG8scyxsKSxpPSEwfSkpLG59fSx7IkB0dXJmL2hlbHBlcnMiOjY0fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTAsbj0wLGk9MDtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KSl9fSx7fV0sNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpcmV0dXJuIHQuZmluZEluZGV4KGUscik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigicHJlZGljYXRlIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBuPU9iamVjdCh0KSxpPW4ubGVuZ3RoO2lmKDA9PT1pKXJldHVybi0xO2Zvcih2YXIgYT0wO2E8aTthKyspaWYoZS5jYWxsKHIsblthXSxhLG4pKXJldHVybiBhO3JldHVybi0xfX0se31dLDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSlpc05hTih0W3NdKXx8KHRbc109MD09PWM/LjU6KHRbc10tbykvYyl9fXJldHVybiB0fX0seyJhcnJheS1ib3VuZHMiOjY3fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibnVtYmVyIj09dHlwZW9mIHQsbj0ibnVtYmVyIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7Zm9yKHZhciBhPW5ldyBBcnJheShpKSxvPTAscz10O288aTtvKysscysrKWFbb109cztyZXR1cm4gYX19LHt9XSw3MTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpOwovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqL2Z1bmN0aW9uIGkodCxlKXtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHIuQnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5CdWZmZXIuaXNCdWZmZXI/ci5CdWZmZXIuaXNCdWZmZXIodCk6IShudWxsPT10fHwhdC5faXNCdWZmZXIpfXZhciBvPXQoInV0aWwvIikscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLGM9ImZvbyI9PT1mdW5jdGlvbigpe30ubmFtZTtmdW5jdGlvbiB1KHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4hYSh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLkFycmF5QnVmZmVyJiYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcodCk6ISF0JiYodCBpbnN0YW5jZW9mIERhdGFWaWV3fHwhISh0LmJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9dmFyIGg9ZS5leHBvcnRzPXkscD0vXHMqZnVuY3Rpb25ccysoW15cKFxzXSopXHMqLztmdW5jdGlvbiBkKHQpe2lmKG8uaXNGdW5jdGlvbih0KSl7aWYoYylyZXR1cm4gdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKS5tYXRjaChwKTtyZXR1cm4gZSYmZVsxXX19ZnVuY3Rpb24gbSh0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90Lmxlbmd0aDxlP3Q6dC5zbGljZSgwLGUpOnR9ZnVuY3Rpb24gZyh0KXtpZihjfHwhby5pc0Z1bmN0aW9uKHQpKXJldHVybiBvLmluc3BlY3QodCk7dmFyIGU9ZCh0KTtyZXR1cm4iW0Z1bmN0aW9uIisoZT8iOiAiK2U6IiIpKyJdIn1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dGhyb3cgbmV3IGguQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6dCxleHBlY3RlZDplLG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiB5KHQsZSl7dHx8dih0LCEwLGUsIj09IixoLm9rKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2lmKHQ9PT1lKXJldHVybiEwO2lmKGEodCkmJmEoZSkpcmV0dXJuIDA9PT1pKHQsZSk7aWYoby5pc0RhdGUodCkmJm8uaXNEYXRlKGUpKXJldHVybiB0LmdldFRpbWUoKT09PWUuZ2V0VGltZSgpO2lmKG8uaXNSZWdFeHAodCkmJm8uaXNSZWdFeHAoZSkpcmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZ2xvYmFsPT09ZS5nbG9iYWwmJnQubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmUmJnQubGFzdEluZGV4PT09ZS5sYXN0SW5kZXgmJnQuaWdub3JlQ2FzZT09PWUuaWdub3JlQ2FzZTtpZihudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihmKHQpJiZmKGUpJiZ1KHQpPT09dShlKSYmISh0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PWkobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSk7aWYoYSh0KSE9PWEoZSkpcmV0dXJuITE7dmFyIHM9KG49bnx8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX0pLmFjdHVhbC5pbmRleE9mKHQpO3JldHVybi0xIT09cyYmcz09PW4uZXhwZWN0ZWQuaW5kZXhPZihlKXx8KG4uYWN0dWFsLnB1c2godCksbi5leHBlY3RlZC5wdXNoKGUpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuITE7aWYoby5pc1ByaW1pdGl2ZSh0KXx8by5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPWIodCksYT1iKGUpO2lmKGkmJiFhfHwhaSYmYSlyZXR1cm4hMTtpZihpKXJldHVybiB0PWwuY2FsbCh0KSxlPWwuY2FsbChlKSx4KHQsZSxyKTt2YXIgcyxjLHU9VCh0KSxmPVQoZSk7aWYodS5sZW5ndGghPT1mLmxlbmd0aClyZXR1cm4hMTtmb3IodS5zb3J0KCksZi5zb3J0KCksYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHVbY10hPT1mW2NdKXJldHVybiExO2ZvcihjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYocz11W2NdLCF4KHRbc10sZVtzXSxyLG4pKXJldHVybiExO3JldHVybiEwfSh0LGUscixuKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBiKHQpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0LGUpe2lmKCF0fHwhZSlyZXR1cm4hMTtpZigiW29iamVjdCBSZWdFeHBdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBlLnRlc3QodCk7dHJ5e2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiEwfWNhdGNoKHQpe31yZXR1cm4hRXJyb3IuaXNQcm90b3R5cGVPZihlKSYmITA9PT1lLmNhbGwoe30sdCl9ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYmxvY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpOyJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPW51bGwpLGk9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3QoKX1jYXRjaCh0KXtlPXR9cmV0dXJuIGV9KGUpLG49KHImJnIubmFtZT8iICgiK3IubmFtZSsiKS4iOiIuIikrKG4/IiAiK246Ii4iKSx0JiYhaSYmdihpLHIsIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uIituKTt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIG4scz0hdCYmaSYmIXI7aWYoKCF0JiZvLmlzRXJyb3IoaSkmJmEmJl8oaSxyKXx8cykmJnYoaSxyLCJHb3QgdW53YW50ZWQgZXhjZXB0aW9uIituKSx0JiZpJiZyJiYhXyhpLHIpfHwhdCYmaSl0aHJvdyBpfWguQXNzZXJ0aW9uRXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPSJBc3NlcnRpb25FcnJvciIsdGhpcy5hY3R1YWw9dC5hY3R1YWwsdGhpcy5leHBlY3RlZD10LmV4cGVjdGVkLHRoaXMub3BlcmF0b3I9dC5vcGVyYXRvcix0Lm1lc3NhZ2U/KHRoaXMubWVzc2FnZT10Lm1lc3NhZ2UsdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSExKToodGhpcy5tZXNzYWdlPWZ1bmN0aW9uKHQpe3JldHVybiBtKGcodC5hY3R1YWwpLDEyOCkrIiAiK3Qub3BlcmF0b3IrIiAiK20oZyh0LmV4cGVjdGVkKSwxMjgpfSh0aGlzKSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciBlPXQuc3RhY2tTdGFydEZ1bmN0aW9ufHx2O2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZSk7ZWxzZXt2YXIgcj1uZXcgRXJyb3I7aWYoci5zdGFjayl7dmFyIG49ci5zdGFjayxpPWQoZSksYT1uLmluZGV4T2YoIlxuIitpKTtpZihhPj0wKXt2YXIgbz1uLmluZGV4T2YoIlxuIixhKzEpO249bi5zdWJzdHJpbmcobysxKX10aGlzLnN0YWNrPW59fX0sby5pbmhlcml0cyhoLkFzc2VydGlvbkVycm9yLEVycm9yKSxoLmZhaWw9dixoLm9rPXksaC5lcXVhbD1mdW5jdGlvbih0LGUscil7dCE9ZSYmdih0LGUsciwiPT0iLGguZXF1YWwpfSxoLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZ2KHQsZSxyLCIhPSIsaC5ub3RFcXVhbCl9LGguZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMSl8fHYodCxlLHIsImRlZXBFcXVhbCIsaC5kZWVwRXF1YWwpfSxoLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITApfHx2KHQsZSxyLCJkZWVwU3RyaWN0RXF1YWwiLGguZGVlcFN0cmljdEVxdWFsKX0saC5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCExKSYmdih0LGUsciwibm90RGVlcEVxdWFsIixoLm5vdERlZXBFcXVhbCl9LGgubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIHQoZSxyLG4pe3goZSxyLCEwKSYmdihlLHIsbiwibm90RGVlcFN0cmljdEVxdWFsIix0KX0saC5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJnYodCxlLHIsIj09PSIsaC5zdHJpY3RFcXVhbCl9LGgubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZ2KHQsZSxyLCIhPT0iLGgubm90U3RyaWN0RXF1YWwpfSxoLnRocm93cz1mdW5jdGlvbih0LGUscil7dyghMCx0LGUscil9LGguZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXt3KCExLHQsZSxyKX0saC5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH0saC5zdHJpY3Q9bigoZnVuY3Rpb24gdChlLHIpe2V8fHYoZSwhMCxyLCI9PSIsdCl9KSxoLHtlcXVhbDpoLnN0cmljdEVxdWFsLGRlZXBFcXVhbDpoLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDpoLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDpoLm5vdERlZXBTdHJpY3RFcXVhbH0pLGguc3RyaWN0LnN0cmljdD1oLnN0cmljdDt2YXIgVD1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpcy5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Im9iamVjdC1hc3NpZ24iOjI0MiwidXRpbC8iOjc0fV0sNzI6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0se31dLDczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRVSW50OH19LHt9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4peyhmdW5jdGlvbigpe3ZhciBpPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIXYodCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2gocyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKCIgIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsYT1uLmxlbmd0aCxvPVN0cmluZyh0KS5yZXBsYWNlKGksKGZ1bmN0aW9uKHQpe2lmKCIlJSI9PT10KXJldHVybiIlIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gdH19KSksbD1uW3JdO3I8YTtsPW5bKytyXSltKGwpfHwhYihsKT9vKz0iICIrbDpvKz0iICIrcyhsKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtpZih5KG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gdDt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYSl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGEsbz17fTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49e3NlZW46W10sc3R5bGl6ZTpjfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxkKGUpP24uc2hvd0hpZGRlbj1lOmUmJnIuX2V4dGVuZChuLGUpLHkobi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSkseShuLmRlcHRoKSYmKG4uZGVwdGg9MikseShuLmNvbG9ycykmJihuLmNvbG9ycz0hMSkseShuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1sKSx1KG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9cy5zdHlsZXNbZV07cmV0dXJuIHI/Ilx4MWJbIitzLmNvbG9yc1tyXVswXSsibSIrdCsiXHgxYlsiK3MuY29sb3JzW3JdWzFdKyJtIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJlQoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiB2KGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYodihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1pZihnKGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwibnVtYmVyIik7aWYoZChlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsImJvb2xlYW4iKTtpZihtKGUpKXJldHVybiB0LnN0eWxpemUoIm51bGwiLCJudWxsIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pKSxlfShvKTtpZih0LnNob3dIaWRkZW4mJihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSx3KGUpJiYoby5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG8uaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGYoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihUKGUpKXt2YXIgbD1lLm5hbWU/IjogIitlLm5hbWU6IiI7cmV0dXJuIHQuc3R5bGl6ZSgiW0Z1bmN0aW9uIitsKyJdIiwic3BlY2lhbCIpfWlmKHgoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpO2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJkYXRlIik7aWYodyhlKSlyZXR1cm4gZihlKX12YXIgYyxiPSIiLGs9ITEsQT1bInsiLCJ9Il07KHAoZSkmJihrPSEwLEE9WyJbIiwiXSJdKSxUKGUpKSYmKGI9IiBbRnVuY3Rpb24iKyhlLm5hbWU/IjogIitlLm5hbWU6IiIpKyJdIik7cmV0dXJuIHgoZSkmJihiPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpLF8oZSkmJihiPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKGUpKSx3KGUpJiYoYj0iICIrZihlKSksMCE9PW8ubGVuZ3RofHxrJiYwIT1lLmxlbmd0aD9uPDA/eChlKT90LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTp0LnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOih0LnNlZW4ucHVzaChlKSxjPWs/ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9ZS5sZW5ndGg7bzxzOysrbylFKGUsU3RyaW5nKG8pKT9hLnB1c2goaCh0LGUscixuLFN0cmluZyhvKSwhMCkpOmEucHVzaCgiIik7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8YS5wdXNoKGgodCxlLHIsbixpLCEwKSl9KSksYX0odCxlLG4scyxvKTpvLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGgodCxlLG4scyxyLGspfSkpLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaW5kZXhPZigiXG4iKT49MCYmMCx0K2UucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9KSwwKT42MClyZXR1cm4gclswXSsoIiI9PT1lPyIiOmUrIlxuICIpKyIgIit0LmpvaW4oIixcbiAgIikrIiAiK3JbMV07cmV0dXJuIHJbMF0rZSsiICIrdC5qb2luKCIsICIpKyIgIityWzFdfShjLGIsQSkpOkFbMF0rYitBWzFdfWZ1bmN0aW9uIGYodCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6bC5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEUobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YobC52YWx1ZSk8MD8ocz1tKHIpP3UodCxsLnZhbHVlLG51bGwpOnUodCxsLnZhbHVlLHItMSkpLmluZGV4T2YoIlxuIik+LTEmJihzPWE/cy5zcGxpdCgiXG4iKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pKS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK3Muc3BsaXQoIlxuIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkpLmpvaW4oIlxuIikpOnM9dC5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSx5KG8pKXtpZihhJiZpLm1hdGNoKC9eXGQrJC8pKXJldHVybiBzOyhvPUpTT04uc3RyaW5naWZ5KCIiK2kpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhvPW8uc3Vic3RyKDEsby5sZW5ndGgtMiksbz10LnN0eWxpemUobywibmFtZSIpKToobz1vLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxvPXQuc3R5bGl6ZShvLCJzdHJpbmciKSl9cmV0dXJuIG8rIjogIitzfWZ1bmN0aW9uIHAodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIG0odCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIGcodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gYih0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1rKHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBEYXRlXSI9PT1rKHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIGIodCkmJigiW29iamVjdCBFcnJvcl0iPT09ayh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBUKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBBKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1yLmRlYnVnbG9nPWZ1bmN0aW9uKHQpe2lmKHkoYSkmJihhPWUuZW52Lk5PREVfREVCVUd8fCIiKSx0PXQudG9VcHBlckNhc2UoKSwhb1t0XSlpZihuZXcgUmVnRXhwKCJcXGIiK3QrIlxcYiIsImkiKS50ZXN0KGEpKXt2YXIgbj1lLnBpZDtvW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsdCxuLGUpfX1lbHNlIG9bdF09ZnVuY3Rpb24oKXt9O3JldHVybiBvW3RdfSxyLmluc3BlY3Q9cyxzLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0scy5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxyLmlzQXJyYXk9cCxyLmlzQm9vbGVhbj1kLHIuaXNOdWxsPW0sci5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sci5pc051bWJlcj1nLHIuaXNTdHJpbmc9dixyLmlzU3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH0sci5pc1VuZGVmaW5lZD15LHIuaXNSZWdFeHA9eCxyLmlzT2JqZWN0PWIsci5pc0RhdGU9XyxyLmlzRXJyb3I9dyxyLmlzRnVuY3Rpb249VCxyLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fCJzeW1ib2wiPT10eXBlb2YgdHx8dm9pZCAwPT09dH0sci5pc0J1ZmZlcj10KCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgTT1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIFMoKXt2YXIgdD1uZXcgRGF0ZSxlPVtBKHQuZ2V0SG91cnMoKSksQSh0LmdldE1pbnV0ZXMoKSksQSh0LmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bdC5nZXREYXRlKCksTVt0LmdldE1vbnRoKCldLGVdLmpvaW4oIiAiKX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXIubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLFMoKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFiKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3N1cHBvcnQvaXNCdWZmZXIiOjczLF9wcm9jZXNzOjI3Mixpbmhlcml0czo3Mn1dLDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1jKHQpLG89blswXSxzPW5bMV0sbD1uZXcgYShmdW5jdGlvbih0LGUscil7cmV0dXJuIDMqKGUrcikvNC1yfSgwLG8scykpLHU9MCxmPXM+MD9vLTQ6bztmb3Iocj0wO3I8ZjtyKz00KWU9aVt0LmNoYXJDb2RlQXQocildPDwxOHxpW3QuY2hhckNvZGVBdChyKzEpXTw8MTJ8aVt0LmNoYXJDb2RlQXQocisyKV08PDZ8aVt0LmNoYXJDb2RlQXQociszKV0sbFt1KytdPWU+PjE2JjI1NSxsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlOzI9PT1zJiYoZT1pW3QuY2hhckNvZGVBdChyKV08PDJ8aVt0LmNoYXJDb2RlQXQocisxKV0+PjQsbFt1KytdPTI1NSZlKTsxPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwxMHxpW3QuY2hhckNvZGVBdChyKzEpXTw8NHxpW3QuY2hhckNvZGVBdChyKzIpXT4+MixsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlKTtyZXR1cm4gbH0sci5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLGk9ciUzLGE9W10sbz0wLHM9ci1pO288cztvKz0xNjM4MylhLnB1c2godSh0LG8sbysxNjM4Mz5zP3M6bysxNjM4MykpOzE9PT1pPyhlPXRbci0xXSxhLnB1c2gobltlPj4yXStuW2U8PDQmNjNdKyI9PSIpKToyPT09aSYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGEucHVzaChuW2U+PjEwXStuW2U+PjQmNjNdK25bZTw8MiY2M10rIj0iKSk7cmV0dXJuIGEuam9pbigiIil9O2Zvcih2YXIgbj1bXSxpPVtdLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgcj10LmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXImJihyPWUpLFtyLHI9PT1lPzA6NC1yJTRdfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oIiIpfWlbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGlbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe2Zvcih2YXIgYT1pKzE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPj0wPyhhPW8saT1vLTEpOm49bysxfXJldHVybiBhfWZ1bmN0aW9uIGkodCxlLHIsbixpKXtmb3IodmFyIGE9aSsxO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKT4wPyhhPW8saT1vLTEpOm49bysxfXJldHVybiBhfWZ1bmN0aW9uIGEodCxlLHIsbixpKXtmb3IodmFyIGE9bi0xO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKTwwPyhhPW8sbj1vKzEpOmk9by0xfXJldHVybiBhfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIGE9bi0xO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKTw9MD8oYT1vLG49bysxKTppPW8tMX1yZXR1cm4gYX1mdW5jdGlvbiBzKHQsZSxyLG4saSl7Zm9yKDtuPD1pOyl7dmFyIGE9bitpPj4+MSxvPXRbYV0scz12b2lkIDAhPT1yP3IobyxlKTpvLWU7aWYoMD09PXMpcmV0dXJuIGE7czw9MD9uPWErMTppPWEtMX1yZXR1cm4tMX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcj9hKHQsZSxyLHZvaWQgMD09PW4/MDowfG4sdm9pZCAwPT09aT90Lmxlbmd0aC0xOjB8aSk6YSh0LGUsdm9pZCAwLHZvaWQgMD09PXI/MDowfHIsdm9pZCAwPT09bj90Lmxlbmd0aC0xOjB8bil9ZS5leHBvcnRzPXtnZTpmdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBsKHQsZSxyLGksYSxuKX0sZ3Q6ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gbCh0LGUscixuLGEsaSl9LGx0OmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLGEpfSxsZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxvKX0sZXE6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGkscyl9fX0se31dLDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSk7dmFyIHIsbyxzLGwsYyx1LGYsaCxwLGQsbSxnPW51bGw9PWUuY3V0b2ZmPy4yNTplLmN1dG9mZix2PW51bGw9PWUucmFkaXVzPzg6ZS5yYWRpdXMseT1lLmNoYW5uZWx8fDA7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxBcnJheS5pc0FycmF5KHQpKXtpZighZS53aWR0aHx8IWUuaGVpZ2h0KXRocm93IEVycm9yKCJGb3IgcmF3IGRhdGEgd2lkdGggYW5kIGhlaWdodCBzaG91bGQgYmUgcHJvdmlkZWQgYnkgb3B0aW9ucyIpO3I9ZS53aWR0aCxvPWUuaGVpZ2h0LGw9dCx1PWUuc3RyaWRlP2Uuc3RyaWRlOk1hdGguZmxvb3IodC5sZW5ndGgvci9vKX1lbHNlIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD8oZj0oaD10KS5nZXRDb250ZXh0KCIyZCIpLHI9aC53aWR0aCxvPWguaGVpZ2h0LHA9Zi5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiZ0IGluc3RhbmNlb2Ygd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD8oaD10LmNhbnZhcyxmPXQscj1oLndpZHRoLG89aC5oZWlnaHQscD1mLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5JbWFnZURhdGEmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSW1hZ2VEYXRhJiYocD10LHI9dC53aWR0aCxvPXQuaGVpZ2h0LGw9cC5kYXRhLHU9NCk7aWYocz1NYXRoLm1heChyLG8pLHdpbmRvdy5VaW50OENsYW1wZWRBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OENsYW1wZWRBcnJheXx8d2luZG93LlVpbnQ4QXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhBcnJheSlmb3IoYz1sLGw9QXJyYXkocipvKSxkPTAsbT1jLmxlbmd0aDtkPG07ZCsrKWxbZF09Y1tkKnUreV0vMjU1O2Vsc2UgaWYoMSE9PXUpdGhyb3cgRXJyb3IoIlJhdyBkYXRhIGNhbiBoYXZlIG9ubHkgMSB2YWx1ZSBwZXIgcGl4ZWwiKTt2YXIgeD1BcnJheShyKm8pLGI9QXJyYXkocipvKSxfPUFycmF5KHMpLHc9QXJyYXkocyksVD1BcnJheShzKzEpLGs9QXJyYXkocyk7Zm9yKGQ9MCxtPXIqbztkPG07ZCsrKXt2YXIgQT1sW2RdO3hbZF09MT09PUE/MDowPT09QT9pOk1hdGgucG93KE1hdGgubWF4KDAsLjUtQSksMiksYltkXT0xPT09QT9pOjA9PT1BPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxBLS41KSwyKX1hKHgscixvLF8sdyxrLFQpLGEoYixyLG8sXyx3LGssVCk7dmFyIE09d2luZG93LkZsb2F0MzJBcnJheT9uZXcgRmxvYXQzMkFycmF5KHIqbyk6bmV3IEFycmF5KHIqbyk7Zm9yKGQ9MCxtPXIqbztkPG07ZCsrKU1bZF09bigxLSgoeFtkXS1iW2RdKS92K2cpLDAsMSk7cmV0dXJuIE19O3ZhciBpPTFlMjA7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzKXtmb3IodmFyIGw9MDtsPGU7bCsrKXtmb3IodmFyIGM9MDtjPHI7YysrKW5bY109dFtjKmUrbF07Zm9yKG8obixpLGEscyxyKSxjPTA7YzxyO2MrKyl0W2MqZStsXT1pW2NdfWZvcihjPTA7YzxyO2MrKyl7Zm9yKGw9MDtsPGU7bCsrKW5bbF09dFtjKmUrbF07Zm9yKG8obixpLGEscyxlKSxsPTA7bDxlO2wrKyl0W2MqZStsXT1NYXRoLnNxcnQoaVtsXSl9fWZ1bmN0aW9uIG8odCxlLHIsbixhKXtyWzBdPTAsblswXT0taSxuWzFdPStpO2Zvcih2YXIgbz0xLHM9MDtvPGE7bysrKXtmb3IodmFyIGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtsPD1uW3NdOylzLS0sbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO3JbKytzXT1vLG5bc109bCxuW3MrMV09K2l9Zm9yKG89MCxzPTA7bzxhO28rKyl7Zm9yKDtuW3MrMV08bzspcysrO2Vbb109KG8tcltzXSkqKG8tcltzXSkrdFtyW3NdXX19fSx7Y2xhbXA6ODF9XSw3OTpbZnVuY3Rpb24odCxlLHIpe30se31dLDgwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpewovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCiJ1c2Ugc3RyaWN0Ijt2YXIgZT10KCJiYXNlNjQtanMiKSxuPXQoImllZWU3NTQiKTtyLkJ1ZmZlcj1hLHIuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIGEuYWxsb2MoK3QpfSxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2Z1bmN0aW9uIGkodCl7aWYodD4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGUuX19wcm90b19fPWEucHJvdG90eXBlLGV9ZnVuY3Rpb24gYSh0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGwodCl9cmV0dXJuIG8odCxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZXx8KGU9InV0ZjgiKTtpZighYS5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7dmFyIHI9MHxmKHQsZSksbj1pKHIpLG89bi53cml0ZSh0LGUpO28hPT1yJiYobj1uLnNsaWNlKDAsbykpO3JldHVybiBufSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gYyh0KTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCk7aWYoQih0LEFycmF5QnVmZmVyKXx8dCYmQih0LmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlPDB8fHQuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSh0LGUscik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBuPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYobnVsbCE9biYmbiE9PXQpcmV0dXJuIGEuZnJvbShuLGUscik7dmFyIG89ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSl7dmFyIGU9MHx1KHQubGVuZ3RoKSxyPWkoZSk7cmV0dXJuIDA9PT1yLmxlbmd0aHx8dC5jb3B5KHIsMCwwLGUpLHJ9aWYodm9pZCAwIT09dC5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8Tih0Lmxlbmd0aCk/aSgwKTpjKHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZBcnJheS5pc0FycmF5KHQuZGF0YSkpcmV0dXJuIGModC5kYXRhKX0odCk7aWYobylyZXR1cm4gbztpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgdFtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBhLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxlLHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIHModCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcyh0KSxpKHQ8MD8wOjB8dSh0KSl9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8dSh0Lmxlbmd0aCkscj1pKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIHUodCl7aWYodD49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrMjE0NzQ4MzY0Ny4udG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIGYodCxlKXtpZihhLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEIodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLG49YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighbiYmMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRCh0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFIodCkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gbj8tMTpEKHQpLmxlbmd0aDtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gTSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGsodGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdyh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBkKHQsZSxyLG4saSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksTihyPStyKSYmKHI9aT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1hLmZyb20oZSxuKSksYS5pc0J1ZmZlcihlKSlyZXR1cm4gMD09PWUubGVuZ3RoPy0xOm0odCxlLHIsbixpKTtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6bSh0LFtlXSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbSh0LGUscixuLGkpe3ZhciBhLG89MSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKGE9cjthPHM7YSsrKWlmKGModCxhKT09PWMoZSwtMT09PXU/MDphLXUpKXtpZigtMT09PXUmJih1PWEpLGEtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihhLT1hLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksYT1yO2E+PTA7YS0tKXtmb3IodmFyIGY9ITAsaD0wO2g8bDtoKyspaWYoYyh0LGEraCkhPT1jKGUsaCkpe2Y9ITE7YnJlYWt9aWYoZilyZXR1cm4gYX1yZXR1cm4tMX1mdW5jdGlvbiBnKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgYT1lLmxlbmd0aDtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKE4ocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24gdih0LGUscixuKXtyZXR1cm4gRihEKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIEYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiB5KHQsZSxyLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIEYoUihlKSx0LHIsbil9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHcodCxyLG4pe3JldHVybiAwPT09ciYmbj09PXQubGVuZ3RoP2UuZnJvbUJ5dGVBcnJheSh0KTplLmZyb21CeXRlQXJyYXkodC5zbGljZShyLG4pKX1mdW5jdGlvbiBUKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIGEsbyxzLGwsYz10W2ldLHU9bnVsbCxmPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStmPD1yKXN3aXRjaChmKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGE9dFtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZhKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzphPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmYSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6YT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxmPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9Zn1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9IiIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9MjE0NzQ4MzY0NyxhLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpfWNhdGNoKHQpe3JldHVybiExfX0oKSxhLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoYS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmYVtTeW1ib2wuc3BlY2llc109PT1hJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLGEucG9vbFNpemU9ODE5MixhLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBvKHQsZSxyKX0sYS5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGEuX19wcm90b19fPVVpbnQ4QXJyYXksYS5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcyh0KSx0PD0wP2kodCk6dm9pZCAwIT09ZT8ic3RyaW5nIj09dHlwZW9mIHI/aSh0KS5maWxsKGUscik6aSh0KS5maWxsKGUpOmkodCl9KHQsZSxyKX0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGEuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiEwPT09dC5faXNCdWZmZXImJnQhPT1hLnByb3RvdHlwZX0sYS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSxCKGUsVWludDhBcnJheSkmJihlPWEuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLCFhLmlzQnVmZmVyKHQpfHwhYS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxhLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGEuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gYS5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPWEuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBvPXRbcl07aWYoQihvLFVpbnQ4QXJyYXkpJiYobz1hLmZyb20obykpLCFhLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sYS5ieXRlTGVuZ3RoPWYsYS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGEucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilwKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpcCh0aGlzLGUsZSszKSxwKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClwKHRoaXMsZSxlKzcpLHAodGhpcyxlKzEsZSs2KSxwKHRoaXMsZSsyLGUrNSkscCh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9UKHRoaXMsMCx0KTpoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9YS5wcm90b3R5cGUudG9TdHJpbmcsYS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1hLmNvbXBhcmUodGhpcyx0KX0sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKCJoZXgiLDAsZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIiksIjxCdWZmZXIgIit0KyI+In0sYS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKEIodCxVaW50OEFycmF5KSYmKHQ9YS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLShlPj4+PTApLGw9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PXQuc2xpY2UoZSxyKSxmPTA7ZjxsOysrZilpZihjW2ZdIT09dVtmXSl7bz1jW2ZdLHM9dVtmXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGEucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LGEucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkKHRoaXMsdCxlLHIsITApfSxhLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMSl9LGEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gZyh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB2KHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB5KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHgodGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsYT1lO2E8cjsrK2EpaSs9eih0W2FdKTtyZXR1cm4gaX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9IiIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gRSh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gTCh0LGUscixuLGksbyl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEModCxlLHIsbixpLGEpe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsNCksbi53cml0ZSh0LGUscixpLDIzLDQpLHIrNH1mdW5jdGlvbiBJKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsOCksbi53cml0ZSh0LGUscixpLDUyLDgpLHIrOH1hLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSxhLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LGEucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LGEucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxhLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LGEucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LGEucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LGEucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sYS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sYS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sYS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDUyLDgpfSxhLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITEscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCEwLHIpfSxhLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGk9bi1yO2lmKHRoaXM9PT10JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgbz1pLTE7bz49MDstLW8pdFtvK2VdPXRoaXNbbytyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxhLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWEuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1uJiZpPDEyOHx8ImxhdGluMSI9PT1uKSYmKHQ9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9ZSlyZXR1cm4gdGhpczt2YXIgbztpZihlPj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLHR8fCh0PTApLCJudW1iZXIiPT10eXBlb2YgdClmb3Iobz1lO288cjsrK28pdGhpc1tvXT10O2Vsc2V7dmFyIHM9YS5pc0J1ZmZlcih0KT90OmEuZnJvbSh0LG4pLGw9cy5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihvPTA7bzxyLWU7KytvKXRoaXNbbytlXT1zW28lbF19cmV0dXJuIHRoaXN9O3ZhciBPPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24geih0KXtyZXR1cm4gdDwxNj8iMCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gRCh0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO2EucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGF9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZS50b0J5dGVBcnJheShmdW5jdGlvbih0KXtpZigodD0odD10LnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKE8sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO3QubGVuZ3RoJTQhPTA7KXQrPSI9IjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIEYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5uYW1lJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT1lLm5hbWV9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdCE9dH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYmFzZTY0LWpzIjo3NSxidWZmZXI6ODAsaWVlZTc1NDoyMjV9XSw4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU8cj90PGU/ZTp0PnI/cjp0OnQ8cj9yOnQ+ZT9lOnR9fSx7fV0sODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtmdW5jdGlvbiBpKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsaSo9MjU1LGEqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGk9MjU1Jm4oaSwwLDI1NSkpPDwxNikrKChhPTI1NSZuKGEsMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy50bz1pLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19fSx7Y2xhbXA6ODF9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1yZ2JhIiksaT10KCJjbGFtcCIpLGE9dCgiZHR5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZmxvYXQiIT09ZSYmZXx8KGU9ImFycmF5IiksInVpbnQiPT09ZSYmKGU9InVpbnQ4IiksInVpbnRfY2xhbXBlZCI9PT1lJiYoZT0idWludDhfY2xhbXBlZCIpO3ZhciByPW5ldyhhKGUpKSg0KSxvPSJ1aW50OCIhPT1lJiYidWludDhfY2xhbXBlZCIhPT1lO3JldHVybiB0Lmxlbmd0aCYmInN0cmluZyIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09aShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1pKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWkoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjgxLCJjb2xvci1yZ2JhIjo4NixkdHlwZToxMjF9XSw4NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItbmFtZSIpLGk9dCgiaXMtcGxhaW4tb2JqIiksYT10KCJkZWZpbmVkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHMsbD1bXSxjPTE7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz0icmdiIjtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PT10KWM9MCxzPSJyZ2IiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PShwPXQuc2xpY2UoMSkpLmxlbmd0aDtjPTEsdTw9ND8obD1bcGFyc2VJbnQocFswXStwWzBdLDE2KSxwYXJzZUludChwWzFdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFsyXSwxNildLDQ9PT11JiYoYz1wYXJzZUludChwWzNdK3BbM10sMTYpLzI1NSkpOihsPVtwYXJzZUludChwWzBdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFszXSwxNikscGFyc2VJbnQocFs0XStwWzVdLDE2KV0sOD09PXUmJihjPXBhcnNlSW50KHBbNl0rcFs3XSwxNikvMjU1KSksbFswXXx8KGxbMF09MCksbFsxXXx8KGxbMV09MCksbFsyXXx8KGxbMl09MCkscz0icmdiIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXHMqXCgoW15cKV0qKVwpLy5leGVjKHQpKXt2YXIgZj1lWzFdLGg9InJnYiI9PT1mLHA9Zi5yZXBsYWNlKC9hJC8sIiIpO3M9cDt1PSJjbXlrIj09PXA/NDoiZ3JheSI9PT1wPzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PXU/cGFyc2VGbG9hdCh0KS8xMDA6InJnYiI9PT1wPzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKCJoIj09PXBbZV0pe2lmKC9kZWckLy50ZXN0KHQpKXJldHVybiBwYXJzZUZsb2F0KHQpO2lmKHZvaWQgMCE9PW9bdF0pcmV0dXJuIG9bdF19cmV0dXJuIHBhcnNlRmxvYXQodCl9KSksZj09PXAmJmwucHVzaCgxKSxjPWh8fHZvaWQgMD09PWxbdV0/MTpsW3VdLGw9bC5zbGljZSgwLHUpfWVsc2UgdC5sZW5ndGg+MTAmJi9bMC05XSg/OlxzfFwvKS8udGVzdCh0KSYmKGw9dC5tYXRjaCgvKFswLTldKykvZykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKSxzPXQubWF0Y2goLyhbYS16XSkvZ2kpLmpvaW4oIiIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoaXNOYU4odCkpaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPSJyZ2IiLGw9W2QsYSh0LmcsdC5ncmVlbix0LkcpLGEodC5iLHQuYmx1ZSx0LkIpXSk6KHM9ImhzbCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz0icmdiIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO2Vsc2Ugcz0icmdiIixsPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF07cmV0dXJue3NwYWNlOnMsdmFsdWVzOmwsYWxwaGE6Y319O3ZhciBvPXtyZWQ6MCxvcmFuZ2U6NjAseWVsbG93OjEyMCxncmVlbjoxODAsYmx1ZToyNDAscHVycGxlOjMwMH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImNvbG9yLW5hbWUiOjgzLGRlZmluZWQ6MTE4LCJpcy1wbGFpbi1vYmoiOjIzMX1dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDo4MSwiY29sb3ItcGFyc2UiOjg1LCJjb2xvci1zcGFjZS9oc2wiOjg3fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7Ii4vcmdiIjo4OH1dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSw4OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLENQVjoidmVyZGUiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkoPyEuKlxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkW1xcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDU0s6ImN6ZWNob3Nsb3Zha2lhIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRbXFwuXT9yfFxcYmRbXFwuXT9yLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKSIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcikiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTURHOiJtYWRhZ2FzY2FyfG1hbGFnYXN5IixNV0k6Im1hbGF3aXxueWFzYSIsTVlTOiJtYWxheXNpYSIsTURWOiJtYWxkaXZlIixNTEk6IlxcYm1hbGlcXGIiLE1MVDoiXFxibWFsdGEiLE1ITDoibWFyc2hhbGwiLE1UUToibWFydGluaXF1ZSIsTVJUOiJtYXVyaXRhbmlhIixNVVM6Im1hdXJpdGl1cyIsTVlUOiJcXGJtYXlvdHRlIixNRVg6IlxcYm1leGljIixGU006ImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWQiLE1DTzoibW9uYWNvIixNTkc6Im1vbmdvbGlhIixNTkU6Il4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm8iLE1TUjoibW9udHNlcnJhdCIsTUFSOiJtb3JvY2NvfFxcYm1hcm9jIixNT1o6Im1vemFtYmlxdWUiLE1NUjoibXlhbm1hcnxidXJtYSIsTkFNOiJuYW1pYmlhIixOUlU6Im5hdXJ1IixOUEw6Im5lcGFsIixOTEQ6Il4oPyEuKlxcYmFudCkoPyEuKlxcYmNhcmliKS4qbmV0aGVybGFuZHMiLEFOVDoiXig/PS4qXFxiYW50KS4qKG5ldGhlcnxkdXRjaCkiLE5DTDoibmV3Lj9jYWxlZG9uaWEiLE5aTDoibmV3Lj96ZWFsYW5kIixOSUM6Im5pY2FyYWd1YSIsTkVSOiJcXGJuaWdlcig/IWlhKSIsTkdBOiJuaWdlcmlhIixOSVU6Im5pdWUiLE5GSzoibm9yZm9sayIsTU5QOiJtYXJpYW5hIixOT1I6Im5vcndheSIsT01OOiJcXGJvbWFufHRydWNpYWwiLFBBSzoiXig/IS4qZWFzdCkuKnBha2k/c3RhbiIsUExXOiJwYWxhdSIsUFNFOiJwYWxlc3RpbnxcXGJnYXphfHdlc3QuP2JhbmsiLFBBTjoicGFuYW1hIixQTkc6InBhcHVhfG5ldy4/Z3VpbmVhIixQUlk6InBhcmFndWF5IixQRVI6InBlcnUiLFBITDoicGhpbGlwcGluZXMiLFBDTjoicGl0Y2Fpcm4iLFBPTDoicG9sYW5kIixQUlQ6InBvcnR1Z2FsIixQUkk6InB1ZXJ0by4/cmljbyIsUUFUOiJxYXRhciIsS09SOiJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcYmtvcmVhKD8hLipkLipwLipyKSIsTURBOiJtb2xkb3Z8YihhfGUpc3NhcmFiaWEiLFJFVToicihlfFx4ZTkpdW5pb24iLFJPVToicihvfHV8b3UpbWFuaWEiLFJVUzoiXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcLj9zXFwuP3NcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljcyIsUldBOiJyd2FuZGEiLEJMTToiYmFydGgoZXxceGU5KWxlbXkiLFNITjoiaGVsZW5hIixLTkE6ImtpdHRzfFxcYm5ldmlzIixMQ0E6IlxcYmx1Y2lhIixNQUY6Il4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKSIsU1BNOiJtaXF1ZWxvbiIsVkNUOiJ2aW5jZW50IixXU006Il4oPyEuKmFtZXIpLipzYW1vYSIsU01SOiJzYW4uP21hcmlubyIsU1RQOiJcXGJzKGF8XHhlMylvLj90b20oZXxceGU5KSIsU0FVOiJcXGJzYVxcdyouP2FyYWJpYSIsU0VOOiJzZW5lZ2FsIixTUkI6Il4oPyEuKm1vbnRlKS4qc2VyYmlhIixTWUM6InNleWNoZWxsIixTTEU6InNpZXJyYSIsU0dQOiJzaW5nYXBvcmUiLFNYTToiXig/IS4qbWFydGluKSg/IS4qc2FiYSkuKm1hYXJ0ZW4iLFNWSzoiXig/IS4qY3plKS4qc2xvdmFrIixTVk46InNsb3ZlbmlhIixTTEI6InNvbG9tb24iLFNPTToic29tYWxpIixaQUY6InNvdXRoLmFmcmljYXxzXFxcXC4uP2FmcmljYSIsU0dTOiJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaCIsU1NEOiJcXGJzXFx3Ki4/c3VkYW4iLEVTUDoic3BhaW4iLExLQToic3JpLj9sYW5rYXxjZXlsb24iLFNETjoiXig/IS4qXFxicyg/IXUpKS4qc3VkYW4iLFNVUjoic3VyaW5hbXxkdXRjaC4/Z3VpYW5hIixTSk06InN2YWxiYXJkIixTV1o6InN3YXppbGFuZCIsU1dFOiJzd2VkZW4iLENIRToic3dpdHp8c3dpc3MiLFNZUjoic3lyaWEiLFRXTjoidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hIixUSks6InRhamlrIixUSEE6InRoYWlsYW5kfFxcYnNpYW0iLE1LRDoibWFjZWRvbmlhfGZ5cm9tIixUTFM6Il4oPz0uKmxlc3RlKS4qdGltb3J8Xig/PS4qZWFzdCkuKnRpbW9yIixUR086InRvZ28iLFRLTDoidG9rZWxhdSIsVE9OOiJ0b25nYSIsVFRPOiJ0cmluaWRhZHx0b2JhZ28iLFRVTjoidHVuaXNpYSIsVFVSOiJ0dXJrZXkiLFRLTToidHVya21lbiIsVENBOiJ0dXJrcyIsVFVWOiJ0dXZhbHUiLFVHQToidWdhbmRhIixVS1I6InVrcmFpbiIsQVJFOiJlbWlyYXRlc3xedVxcLj9hXFwuP2VcXC4/JHx1bml0ZWQuP2FyYWIuP2VtIixHQlI6InVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFwuP2tcXC4/JCIsVFpBOiJ0YW56YW5pYSIsVVNBOiJ1bml0ZWQuP3N0YXRlc1xcYig/IS4qaXNsYW5kcyl8XFxidVxcLj9zXFwuP2FcXC4/XFxifF5cXHMqdVxcLj9zXFwuP1xcYig/IS4qaXNsYW5kcykiLFVNSToibWlub3IuP291dGx5aW5nLj9pcyIsVVJZOiJ1cnVndWF5IixVWkI6InV6YmVrIixWVVQ6InZhbnVhdHV8bmV3Lj9oZWJyaWRlcyIsVkVOOiJ2ZW5lenVlbGEiLFZOTToiXig/IS4qcmVwdWJsaWMpLip2aWV0Lj9uYW18Xig/PS4qc29jaWFsaXN0KS4qdmlldC4/bmFtIixWR0I6Il4oPz0uKlxcYnVcXC4/XFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luIixWSVI6Il4oPz0uKlxcYnVcXC4/XFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luIixXTEY6ImZ1dHVuYXx3YWxsaXMiLEVTSDoid2VzdGVybi5zYWhhcmEiLFlFTToiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlNRDoiXig/PS4qcGVvKS4qeWVtZW58Xig/IS4qcmVwKSg/PS4qZGVtKS4qeWVtZW58Xig/PS4qc291dGgpLip5ZW1lbnxeKD89LiphZGVuKS4qeWVtZW58Xig/PS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWVVHOiJ5dWdvc2xhdmlhIixaTUI6InphbWJpYXxub3J0aGVybi4/cmhvZGVzaWEiLEVBWjoiemFuemliYXIiLFpXRToiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYSJ9fSx7fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJ4eC1zbWFsbCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsInh4LWxhcmdlIiwibGFyZ2VyIiwic21hbGxlciJdfSx7fV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiaXRhbGljIiwib2JsaXF1ZSJdfSx7fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCJdfSx7fV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjk2LCIuL3N0cmluZ2lmeSI6OTd9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6OTB9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bnF1b3RlIiksaT10KCJjc3MtZ2xvYmFsLWtleXdvcmRzIiksYT10KCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiKSxvPXQoImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyIpLHM9dCgiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiKSxsPXQoImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiKSxjPXQoInN0cmluZy1zcGxpdC1ieSIpLHU9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZTtlLmV4cG9ydHM9aDt2YXIgZj1oLmNhY2hlPXt9O2Z1bmN0aW9uIGgodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiRm9udCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpO2lmKGZbdF0pcmV0dXJuIGZbdF07aWYoIiI9PT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIGFuIGVtcHR5IHN0cmluZy4iKTtpZigtMSE9PWEuaW5kZXhPZih0KSlyZXR1cm4gZlt0XT17c3lzdGVtOnR9O2Zvcih2YXIgZSxyPXtzdHlsZToibm9ybWFsIix2YXJpYW50OiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzdHJldGNoOiJub3JtYWwiLGxpbmVIZWlnaHQ6Im5vcm1hbCIsc2l6ZToiMXJlbSIsZmFtaWx5Olsic2VyaWYiXX0saD1jKHQsL1xzKy8pO2U9aC5zaGlmdCgpOyl7aWYoLTEhPT1pLmluZGV4T2YoZSkpcmV0dXJuWyJzdHlsZSIsInZhcmlhbnQiLCJ3ZWlnaHQiLCJzdHJldGNoIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT1lfSkpLGZbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWhbMF0mJihoLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoaC5zaGlmdCgpKSksIWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhoLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxmW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjo5NSwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyI6OTEsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjo5MiwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjo5MywiY3NzLWdsb2JhbC1rZXl3b3JkcyI6OTgsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6OTksInN0cmluZy1zcGxpdC1ieSI6Mjk5LHVucXVvdGU6MzIzfV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpLGk9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZSxhPW0odCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpKSxvPW0odCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIikpLHM9bSh0KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSksbD1tKHQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIikpLGM9bSh0KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIikpLHU9e25vcm1hbDoxLCJzbWFsbC1jYXBzIjoxfSxmPXtzZXJpZjoxLCJzYW5zLXNlcmlmIjoxLG1vbm9zcGFjZToxLGN1cnNpdmU6MSxmYW50YXN5OjEsInN5c3RlbS11aSI6MX0saD0iMXJlbSIscD0ic2VyaWYiO2Z1bmN0aW9uIGQodCxlKXtpZih0JiYhZVt0XSYmIWFbdF0pdGhyb3cgRXJyb3IoIlVua25vd24ga2V5d29yZCBgIit0KyJgIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09MTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoKHQ9bih0LHtzdHlsZToic3R5bGUgZm9udHN0eWxlIGZvbnRTdHlsZSBmb250LXN0eWxlIHNsb3BlIGRpc3RpbmN0aW9uIix2YXJpYW50OiJ2YXJpYW50IGZvbnQtdmFyaWFudCBmb250VmFyaWFudCBmb250dmFyaWFudCB2YXIgY2FwaXRhbGl6YXRpb24iLHdlaWdodDoid2VpZ2h0IHcgZm9udC13ZWlnaHQgZm9udFdlaWdodCBmb250d2VpZ2h0IixzdHJldGNoOiJzdHJldGNoIGZvbnQtc3RyZXRjaCBmb250U3RyZXRjaCBmb250c3RyZXRjaCB3aWR0aCIsc2l6ZToic2l6ZSBzIGZvbnQtc2l6ZSBmb250U2l6ZSBmb250c2l6ZSBoZWlnaHQgZW0gZW1TaXplIixsaW5lSGVpZ2h0OiJsaCBsaW5lLWhlaWdodCBsaW5lSGVpZ2h0IGxpbmVoZWlnaHQgbGVhZGluZyIsZmFtaWx5OiJmb250IGZhbWlseSBmb250RmFtaWx5IGZvbnQtZmFtaWx5IGZvbnRmYW1pbHkgdHlwZSB0eXBlZmFjZSBmYWNlIixzeXN0ZW06InN5c3RlbSByZXNlcnZlZCBkZWZhdWx0IGdsb2JhbCJ9KSkuc3lzdGVtKXJldHVybiB0LnN5c3RlbSYmZCh0LnN5c3RlbSxvKSx0LnN5c3RlbTtpZihkKHQuc3R5bGUsbCksZCh0LnZhcmlhbnQsdSksZCh0LndlaWdodCxzKSxkKHQuc3RyZXRjaCxjKSxudWxsPT10LnNpemUmJih0LnNpemU9aCksIm51bWJlciI9PXR5cGVvZiB0LnNpemUmJih0LnNpemUrPSJweCIpLCFpKXRocm93IEVycm9yKCJCYWQgc2l6ZSB2YWx1ZSBgIit0LnNpemUrImAiKTt0LmZhbWlseXx8KHQuZmFtaWx5PXApLEFycmF5LmlzQXJyYXkodC5mYW1pbHkpJiYodC5mYW1pbHkubGVuZ3RofHwodC5mYW1pbHk9W3BdKSx0LmZhbWlseT10LmZhbWlseS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmW3RdP3Q6JyInK3QrJyInfSkpLmpvaW4oIiwgIikpO3ZhciBlPVtdO3JldHVybiBlLnB1c2godC5zdHlsZSksdC52YXJpYW50IT09dC5zdHlsZSYmZS5wdXNoKHQudmFyaWFudCksdC53ZWlnaHQhPT10LnZhcmlhbnQmJnQud2VpZ2h0IT09dC5zdHlsZSYmZS5wdXNoKHQud2VpZ2h0KSx0LnN0cmV0Y2ghPT10LndlaWdodCYmdC5zdHJldGNoIT09dC52YXJpYW50JiZ0LnN0cmV0Y2ghPT10LnN0eWxlJiZlLnB1c2godC5zdHJldGNoKSxlLnB1c2godC5zaXplKyhudWxsPT10LmxpbmVIZWlnaHR8fCJub3JtYWwiPT09dC5saW5lSGVpZ2h0fHx0LmxpbmVIZWlnaHQrIiI9PSIxIj8iIjoiLyIrdC5saW5lSGVpZ2h0KSksZS5wdXNoKHQuZmFtaWx5KSxlLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9fSx7Ii4vbGliL3V0aWwiOjk1LCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjo5MSwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjkyLCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjkzLCJjc3MtZ2xvYmFsLWtleXdvcmRzIjo5OCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjo5OSwicGljay1ieS1hbGlhcyI6MjQ4fV0sOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSw5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiXX0se31dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoInR5cGUvdmFsdWUvaXMiKSxhPXQoInR5cGUvdmFsdWUvZW5zdXJlIiksbz10KCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2Vuc3VyZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvY29weSIpLGw9dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxjPXQoImVzNS1leHQvb2JqZWN0L21hcCIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O249ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9YShlKSYmbyhlLnZhbHVlKTtyZXR1cm4gZGVsZXRlKG49cyhlKSkud3JpdGFibGUsZGVsZXRlIG4udmFsdWUsbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hci5vdmVyd3JpdGVEZWZpbml0aW9uJiZoLmNhbGwodGhpcyx0KT9pOihlLnZhbHVlPXUuY2FsbChpLHIucmVzb2x2ZUNvbnRleHQ/ci5yZXNvbHZlQ29udGV4dCh0aGlzKTp0aGlzKSxmKHRoaXMsdCxlKSx0aGlzW3RdKX0sbn0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwoYXJndW1lbnRzWzFdKTtyZXR1cm4gaShlLnJlc29sdmVDb250ZXh0KSYmbyhlLnJlc29sdmVDb250ZXh0KSxjKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4ocix0LGUpfSkpfX0seyJlczUtZXh0L29iamVjdC9jb3B5IjoxNDEsImVzNS1leHQvb2JqZWN0L21hcCI6MTQ5LCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyI6MTUwLCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2Vuc3VyZSI6MzE2LCJ0eXBlL3ZhbHVlL2Vuc3VyZSI6MzIwLCJ0eXBlL3ZhbHVlL2lzIjozMjF9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZS92YWx1ZS9pcyIpLGk9dCgidHlwZS9wbGFpbi1mdW5jdGlvbi9pcyIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLHM9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGwsYyx1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDJ8fCJzdHJpbmciIT10eXBlb2YgdD8oYz1lLGU9dCx0PW51bGwpOmM9YXJndW1lbnRzWzJdLG4odCk/KHI9cy5jYWxsKHQsImMiKSxpPXMuY2FsbCh0LCJlIiksbD1zLmNhbGwodCwidyIpKToocj1sPSEwLGk9ITEpLHU9e3ZhbHVlOmUsY29uZmlndXJhYmxlOnIsZW51bWVyYWJsZTppLHdyaXRhYmxlOmx9LGM/YShvKGMpLHUpOnV9KS5ncz1mdW5jdGlvbih0LGUscil7dmFyIGwsYyx1LGY7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0Pyh1PXIscj1lLGU9dCx0PW51bGwpOnU9YXJndW1lbnRzWzNdLG4oZSk/aShlKT9uKHIpP2kocil8fCh1PXIscj12b2lkIDApOnI9dm9pZCAwOih1PWUsZT1yPXZvaWQgMCk6ZT12b2lkIDAsbih0KT8obD1zLmNhbGwodCwiYyIpLGM9cy5jYWxsKHQsImUiKSk6KGw9ITAsYz0hMSksZj17Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOmwsZW51bWVyYWJsZTpjfSx1P2Eobyh1KSxmKTpmfX0seyJlczUtZXh0L29iamVjdC9hc3NpZ24iOjEzOCwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjE1MCwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyI6MTU3LCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2lzIjozMTcsInR5cGUvdmFsdWUvaXMiOjMyMX1dLDEwMjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4pe24oIm9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP3I6dC5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIHIodCl7dmFyIHI7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHI9dCx0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUocih0KSxuKX0pLHtsZWZ0OmZ1bmN0aW9uKGUscixuLGkpe2ZvcihudWxsPT1uJiYobj0wKSxudWxsPT1pJiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik8MD9uPWErMTppPWF9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2ZvcihudWxsPT1uJiYobj0wKSxudWxsPT1pJiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX12YXIgbj1yKGUpLGk9bi5yaWdodCxhPW4ubGVmdDtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89LTEsbD0wLGM9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9cyh0W29dKSl8fChjKz0obj1yLWwpKihyLShsKz1uLysrYSkpKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9cyhlKHRbb10sbyx0KSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7aWYoYT4xKXJldHVybiBjLyhhLTEpfWZ1bmN0aW9uIGModCxlKXt2YXIgcj1sKHQsZSk7cmV0dXJuIHI/TWF0aC5zcXJ0KHIpOnJ9ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG4saSxhPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288YTspaWYobnVsbCE9KHI9dFtvXSkmJnI+PXIpZm9yKG49aT1yOysrbzxhOyludWxsIT0ocj10W29dKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSl9ZWxzZSBmb3IoOysrbzxhOylpZihudWxsIT0ocj1lKHRbb10sbyx0KSkmJnI+PXIpZm9yKG49aT1yOysrbzxhOyludWxsIT0ocj1lKHRbb10sbyx0KSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpO3JldHVybltuLGldfXZhciBmPUFycmF5LnByb3RvdHlwZSxoPWYuc2xpY2UscD1mLm1hcDtmdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBtKHQpe3JldHVybiB0fWZ1bmN0aW9uIGcodCxlLHIpe3Q9K3QsZT0rZSxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9yKSksYT1uZXcgQXJyYXkoaSk7KytuPGk7KWFbbl09dCtuKnI7cmV0dXJuIGF9dmFyIHY9TWF0aC5zcXJ0KDUwKSx5PU1hdGguc3FydCgxMCkseD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gYih0LGUscil7dmFyIG49KGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxhPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KGE+PXY/MTA6YT49eT81OmE+PXg/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSl9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxhPW4vaTtyZXR1cm4gYT49dj9pKj0xMDphPj15P2kqPTU6YT49eCYmKGkqPTIpLGU8dD8taTppfWZ1bmN0aW9uIHcodCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24gVCh0LGUscil7aWYobnVsbD09ciYmKHI9cyksbj10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxuPDIpcmV0dXJuK3IodFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK3IodFtuLTFdLG4tMSx0KTt2YXIgbixpPShuLTEpKmUsYT1NYXRoLmZsb29yKGkpLG89K3IodFthXSxhLHQpO3JldHVybiBvKygrcih0W2ErMV0sYSsxLHQpLW8pKihpLWEpfX1mdW5jdGlvbiBrKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJm4+ciYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZuPnImJihuPXIpO3JldHVybiBufWZ1bmN0aW9uIEEodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEscj1rKHQsTSksbj1uZXcgQXJyYXkocik7KytlPHI7KWZvcih2YXIgaSxhPS0xLG89bltlXT1uZXcgQXJyYXkoaSk7KythPGk7KW9bYV09dFthXVtlXTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQpe3JldHVybiB0Lmxlbmd0aH10LmJpc2VjdD1pLHQuYmlzZWN0UmlnaHQ9aSx0LmJpc2VjdExlZnQ9YSx0LmFzY2VuZGluZz1lLHQuYmlzZWN0b3I9cix0LmNyb3NzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscyxsPXQubGVuZ3RoLGM9ZS5sZW5ndGgsdT1uZXcgQXJyYXkobCpjKTtmb3IobnVsbD09ciYmKHI9byksbj1hPTA7bjxsOysrbilmb3Iocz10W25dLGk9MDtpPGM7KytpLCsrYSl1W2FdPXIocyxlW2ldKTtyZXR1cm4gdX0sdC5kZXNjZW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSx0LmRldmlhdGlvbj1jLHQuZXh0ZW50PXUsdC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgdD1tLGU9dSxyPXc7ZnVuY3Rpb24gbihuKXt2YXIgYSxvLHM9bi5sZW5ndGgsbD1uZXcgQXJyYXkocyk7Zm9yKGE9MDthPHM7KythKWxbYV09dChuW2FdLGEsbik7dmFyIGM9ZShsKSx1PWNbMF0sZj1jWzFdLGg9cihsLHUsZik7QXJyYXkuaXNBcnJheShoKXx8KGg9Xyh1LGYsaCksaD1nKE1hdGguY2VpbCh1L2gpKmgsZixoKSk7Zm9yKHZhciBwPWgubGVuZ3RoO2hbMF08PXU7KWguc2hpZnQoKSwtLXA7Zm9yKDtoW3AtMV0+ZjspaC5wb3AoKSwtLXA7dmFyIGQsbT1uZXcgQXJyYXkocCsxKTtmb3IoYT0wO2E8PXA7KythKShkPW1bYV09W10pLngwPWE+MD9oW2EtMV06dSxkLngxPWE8cD9oW2FdOmY7Zm9yKGE9MDthPHM7KythKXU8PShvPWxbYV0pJiZvPD1mJiZtW2koaCxvLDAscCldLnB1c2goblthXSk7cmV0dXJuIG19cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpkKGUpLG4pOnR9LG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZChbdFswXSx0WzFdXSksbik6ZX0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9kKGguY2FsbCh0KSk6ZCh0KSxuKTpyfSxufSx0LnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0PXAuY2FsbCh0LHMpLnNvcnQoZSksTWF0aC5jZWlsKChuLXIpLygyKihUKHQsLjc1KS1UKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdC50aHJlc2hvbGRTY290dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguY2VpbCgoci1lKS8oMy41KmModCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdC50aHJlc2hvbGRTdHVyZ2VzPXcsdC5tYXg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmcj5uJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+biYmKG49cik7cmV0dXJuIG59LHQubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT1uLGE9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK2E8bjspaXNOYU4ocj1zKHRbYV0pKT8tLWk6bys9cjtlbHNlIGZvcig7KythPG47KWlzTmFOKHI9cyhlKHRbYV0sYSx0KSkpPy0taTpvKz1yO2lmKGkpcmV0dXJuIG8vaX0sdC5tZWRpYW49ZnVuY3Rpb24odCxyKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1yKWZvcig7KythPGk7KWlzTmFOKG49cyh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49cyhyKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIFQoby5zb3J0KGUpLC41KX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfSx0Lm1pbj1rLHQucGFpcnM9ZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT1vKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT1lKGksaT10Wysrcl0pO3JldHVybiBhfSx0LnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LHQucXVhbnRpbGU9VCx0LnJhbmdlPWcsdC5zY2FuPWZ1bmN0aW9uKHQscil7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ciYmKHI9ZSk7KythPG47KShyKGk9dFthXSxzKTwwfHwwIT09cihzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09cihzLHMpP286dm9pZCAwfX0sdC5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPShudWxsPT1yP3QubGVuZ3RoOnIpLShlPW51bGw9PWU/MDorZSk7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQuc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPG47KShyPSt0W2ldKSYmKGErPXIpO2Vsc2UgZm9yKDsrK2k8bjspKHI9K2UodFtpXSxpLHQpKSYmKGErPXIpO3JldHVybiBhfSx0LnRpY2tzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzPS0xO2lmKHI9K3IsKHQ9K3QpPT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylhW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylhW3NdPSh0LXMpL287cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1BLHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBBKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDEwMzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4pe24oIm9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP3I6dC5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLGE9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1yKWZvcig7KythPG87KW4uc2V0KGEsdFthXSk7ZWxzZSBmb3IoOysrYTxvOyluLnNldChyKGk9dFthXSxhLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIHMgaW4gdCluLnNldChzLHRbc10pO3JldHVybiBufWZ1bmN0aW9uIG4oKXtyZXR1cm57fX1mdW5jdGlvbiBpKHQsZSxyKXt0W2VdPXJ9ZnVuY3Rpb24gYSgpe3JldHVybiByKCl9ZnVuY3Rpb24gbyh0LGUscil7dC5zZXQoZSxyKX1mdW5jdGlvbiBzKCl7fWUucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBsPXIucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1uZXcgcztpZih0IGluc3RhbmNlb2Ygcyl0LmVhY2goKGZ1bmN0aW9uKHQpe3IuYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwucmVtb3ZlLGNsZWFyOmwuY2xlYXIsdmFsdWVzOmwua2V5cyxzaXplOmwuc2l6ZSxlbXB0eTpsLmVtcHR5LGVhY2g6bC5lYWNofSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxlLHMsbD1bXSxjPVtdO2Z1bmN0aW9uIHUobixpLGEsbyl7aWYoaT49bC5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHMsYyxmLGg9LTEscD1uLmxlbmd0aCxkPWxbaSsrXSxtPXIoKSxnPWEoKTsrK2g8cDspKGY9bS5nZXQocz1kKGM9bltoXSkrIiIpKT9mLnB1c2goYyk6bS5zZXQocyxbY10pO3JldHVybiBtLmVhY2goKGZ1bmN0aW9uKHQsZSl7byhnLGUsdSh0LGksYSxvKSl9KSksZ31yZXR1cm4gcz17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxuLGkpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHUodCwwLGEsbyl9LGVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQocixuKXtpZigrK24+bC5sZW5ndGgpcmV0dXJuIHI7dmFyIGksYT1jW24tMV07cmV0dXJuIG51bGwhPWUmJm4+PWwubGVuZ3RoP2k9ci5lbnRyaWVzKCk6KGk9W10sci5lYWNoKChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpKSxudWxsIT1hP2kuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LmtleSxlLmtleSl9KSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDEwNDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG89IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHM9L14jKFswLTlhLWZdezMsOH0pJC8sbD1uZXcgUmVnRXhwKCJecmdiXFwoIitbaSxpLGldKyJcXCkkIiksYz1uZXcgUmVnRXhwKCJecmdiXFwoIitbbyxvLG9dKyJcXCkkIiksdT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2ksaSxpLGFdKyJcXCkkIiksZj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW28sbyxvLGFdKyJcXCkkIiksaD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbYSxvLG9dKyJcXCkkIikscD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2EsbyxvLGFdKyJcXCkkIiksZD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBtKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZygpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHYodCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cy5leGVjKHQpKT8ocj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1yP3koZSk6Mz09PXI/bmV3IHcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1yP3goZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PXI/eChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPWwuZXhlYyh0KSk/bmV3IHcoZVsxXSxlWzJdLGVbM10sMSk6KGU9Yy5leGVjKHQpKT9uZXcgdygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT11LmV4ZWModCkpP3goZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9Zi5leGVjKHQpKT94KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWguZXhlYyh0KSk/TShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPXAuZXhlYyh0KSk/TShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmQuaGFzT3duUHJvcGVydHkodCk/eShkW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyB3KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgdyh0LGUscixuKX1mdW5jdGlvbiBiKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgdygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgd31mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9iKHQpOm5ldyB3KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiB3KHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBUKCl7cmV0dXJuIiMiK0EodGhpcy5yKStBKHRoaXMuZykrQSh0aGlzLmIpfWZ1bmN0aW9uIGsoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBBKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gTSh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEwodCxlLHIsbil9ZnVuY3Rpb24gUyh0KXtpZih0IGluc3RhbmNlb2YgTClyZXR1cm4gbmV3IEwodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksIXQpcmV0dXJuIG5ldyBMO2lmKHQgaW5zdGFuY2VvZiBMKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUsYT1NYXRoLm1pbihlLHIsaSksbz1NYXRoLm1heChlLHIsaSkscz1OYU4sbD1vLWEsYz0obythKS8yO3JldHVybiBsPyhzPWU9PT1vPyhyLWkpL2wrNioocjxpKTpyPT09bz8oaS1lKS9sKzI6KGUtcikvbCs0LGwvPWM8LjU/bythOjItby1hLHMqPTYwKTpsPWM+MCYmYzwxPzA6cyxuZXcgTChzLGwsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ModCk6bmV3IEwodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEwodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEModCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWUobix2LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4Om0sZm9ybWF0SGV4Om0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpnLHRvU3RyaW5nOmd9KSxlKHcsXyxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyB3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6VCxmb3JtYXRIZXg6VCxmb3JtYXRSZ2I6ayx0b1N0cmluZzprfSkpLGUoTCxFLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgTCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IHcoQyh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxDKHQsaSxuKSxDKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIFA9TWF0aC5QSS8xODAsST0xODAvTWF0aC5QSSxPPTYvMjksej0zKk8qTztmdW5jdGlvbiBEKHQpe2lmKHQgaW5zdGFuY2VvZiBGKXJldHVybiBuZXcgRih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBxKXJldHVybiBHKHQpO3QgaW5zdGFuY2VvZiB3fHwodD1iKHQpKTt2YXIgZSxyLG49VSh0LnIpLGk9VSh0LmcpLGE9VSh0LmIpLG89QigoLjIyMjUwNDUqbisuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiBuPT09aSYmaT09PWE/ZT1yPW86KGU9QigoLjQzNjA3NDcqbisuMzg1MDY0OSppKy4xNDMwODA0KmEpLy45NjQyMikscj1CKCguMDEzOTMyMipuKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IEYoMTE2Km8tMTYsNTAwKihlLW8pLDIwMCooby1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFIodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0QodCk6bmV3IEYodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEYodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC96KzQvMjl9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdD5PP3QqdCp0OnoqKHQtNC8yOSl9ZnVuY3Rpb24gaih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gVih0KXtpZih0IGluc3RhbmNlb2YgcSlyZXR1cm4gbmV3IHEodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRnx8KHQ9RCh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IHEoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqSTtyZXR1cm4gbmV3IHEoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gSCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Vih0KTpuZXcgcSh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gcSh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gRyh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgRih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKlA7cmV0dXJuIG5ldyBGKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9ZShGLFIscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEYodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyB3KGooMy4xMzM4NTYxKihlPS45NjQyMipOKGUpKS0xLjYxNjg2NjcqKHQ9MSpOKHQpKS0uNDkwNjE0Nioocj0uODI1MjEqTihyKSkpLGooLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSxqKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSksZShxLEgscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIEcodGhpcykucmdiKCl9fSkpO3ZhciBZPS0uMTQ4NjEsVz0xLjc4Mjc3LFg9LS4yOTIyNyxaPS0uOTA2NDksSj0xLjk3Mjk0LEs9SipaLFE9SipXLCQ9VypYLVoqWTtmdW5jdGlvbiB0dCh0KXtpZih0IGluc3RhbmNlb2YgcnQpcmV0dXJuIG5ldyBydCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiB3fHwodD1iKHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0oJCpuK0sqZS1RKnIpLygkK0stUSksYT1uLWksbz0oSiooci1pKS1YKmEpL1oscz1NYXRoLnNxcnQobypvK2EqYSkvKEoqaSooMS1pKSksbD1zP01hdGguYXRhbjIobyxhKSpJLTEyMDpOYU47cmV0dXJuIG5ldyBydChsPDA/bCszNjA6bCxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBldCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dHQodCk6bmV3IHJ0KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBydCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShydCxldCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUCxlPSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgdygyNTUqKGUrciooWSpuK1cqaSkpLDI1NSooZStyKihYKm4rWippKSksMjU1KihlK3IqKEoqbikpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9dix0LmN1YmVoZWxpeD1ldCx0LmdyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEYodCwwLDAsbnVsbD09ZT8xOmUpfSx0LmhjbD1ILHQuaHNsPUUsdC5sYWI9Uix0LmxjaD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Vih0KTpuZXcgcShyLGUsdCxudWxsPT1uPzE6bil9LHQucmdiPV8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTA1OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByKCl7Zm9yKHZhciB0LGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPHI7KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBpfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IG4oaSl9ZnVuY3Rpb24gbih0KXt0aGlzLl89dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtpZihuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHQmJiFlLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpyfX0pKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByLG49MCxpPXQubGVuZ3RoO248aTsrK24paWYoKHI9dFtuXSkubmFtZT09PWUpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gbyh0LHIsbil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGE7KytpKWlmKHRbaV0ubmFtZT09PXIpe3RbaV09ZSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOnIsdmFsdWU6bn0pLHR9bi5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4sb246ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuXyxzPWkodCsiIixuKSxsPS0xLGM9cy5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2w8YzspaWYocj0odD1zW2xdKS50eXBlKW5bcl09byhuW3JdLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKHIgaW4gbiluW3JdPW8obltyXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2w8YzspaWYoKHI9KHQ9c1tsXSkudHlwZSkmJihyPWEobltyXSx0Lm5hbWUpKSlyZXR1cm4gcn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXS5zbGljZSgpO3JldHVybiBuZXcgbih0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbixpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxyPShuPXRoaXMuX1t0XSkubGVuZ3RoO2E8cjsrK2EpblthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIG49dGhpcy5fW3RdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbltpXS52YWx1ZS5hcHBseShlLHIpfX0sdC5kaXNwYXRjaD1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiByfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBoKHQpe3JldHVybiB0Lnl9dmFyIHA9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4saSxhPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGE7KytuKW8rPShpPXJbbl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUsbj0wO248YTsrK24pKGk9cltuXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixpPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsYSx1LGgscCxkLG0sZz1yLmxlbmd0aCx2PTA7djxjOysrdilmb3IoYT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGYpLHQ9MDt0PGc7Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sbT1kKmQsaD11LngrdS52eCxwPXUueSt1LnZ5LGEudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGEpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5oK2N8fG48aC1jfHxyPnArY3x8YTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgZj1oLXMueC1zLnZ4LGc9cC1zLnktcy52eSx2PWYqZitnKmc7djxjKmMmJigwPT09ZiYmKHYrPShmPW8oKSkqZiksMD09PWcmJih2Kz0oZz1vKCkpKmcpLHY9KGMtKHY9TWF0aC5zcXJ0KHYpKSkvdippLHUudngrPShmKj12KSooYz0obCo9bCkvKG0rbCkpLHUudnkrPShnKj12KSpjLHMudngtPWYqKGM9MS1jKSxzLnZ5LT1nKmMpfX19ZnVuY3Rpb24gZih0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGgoKXtpZihyKXt2YXIgZSxpLGE9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKWk9cltlXSxuW2kuaW5kZXhdPSt0KGksZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksaCgpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsZj1jLGg9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBtKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGYsaCxwLG0sZz0wO2c8YTsrK2cpYz0ocz10W2ddKS5zb3VyY2UsZj0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksaD11LnkrdS52eS1jLnktYy52eXx8bygpLGYqPXA9KChwPU1hdGguc3FydChmKmYraCpoKSktbltnXSkvcCpyKmVbZ10saCo9cCx1LnZ4LT1mKihtPWxbZ10pLHUudnktPWgqbSxjLnZ4Kz1mKihtPTEtbSksYy52eSs9aCptfWZ1bmN0aW9uIGcoKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsaD10Lmxlbmd0aCxwPXIubWFwKGksZik7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGg7KythKShvPXRbYV0pLmluZGV4PWEsIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoaCk7YTxoOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGgpLHYoKSxuPW5ldyBBcnJheShoKSx5KCl9fWZ1bmN0aW9uIHYoKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStoKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxtLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LGcoKX0sbS5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGcoKSxtKTp0fSxtLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXQsbSk6Zn0sbS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LG0pOmR9LG0uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx2KCksbSk6aH0sbS5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHkoKSxtKTpwfSxtfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4saSxzPWEoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChpKXt2YXIgYSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGYsaCkudmlzaXRBZnRlcihtKTtmb3Iobj1pLGE9MDthPG87KythKXI9dFthXSxzLnZpc2l0KGcpfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxpW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gbSh0KXt2YXIgZSxyLG4sYSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxhKz1yKmUueSk7dC54PW4vbCx0Lnk9YS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gZyh0LGUsYSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgZj10Lngtci54LGg9dC55LXIueSxwPXMtZSxkPWYqZitoKmg7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWYmJihkKz0oZj1vKCkpKmYpLDA9PT1oJiYoZCs9KGg9bygpKSpoKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1mKnQudmFsdWUqbi9kLHIudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWlbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9ZipwLHIudnkrPWgqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGY9TWF0aC5zcXJ0KGMqYyt1KnUpLGg9KG9bYV0tZikqaVthXSp0L2Y7bC52eCs9YypoLGwudnkrPXUqaH19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksZj1pLnRpbWVyKGQpLGg9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGQoKXttKCksaC5jYWxsKCJ0aWNrIixlKSxhPG8mJihmLnN0b3AoKSxoLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIG0ocil7dmFyIG4saSxvPXQubGVuZ3RoO3ZvaWQgMD09PXImJihyPTEpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpZm9yKGErPShsLWEpKnMsdS5lYWNoKChmdW5jdGlvbih0KXt0KGEpfSkpLG49MDtuPG87KytuKW51bGw9PShpPXRbbl0pLmZ4P2kueCs9aS52eCo9YzooaS54PWkuZngsaS52eD0wKSxudWxsPT1pLmZ5P2kueSs9aS52eSo9YzooaS55PWkuZnksaS52eT0wKTtyZXR1cm4gZX1mdW5jdGlvbiBnKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKChlPXRbcl0pLmluZGV4PXIsbnVsbCE9ZS5meCYmKGUueD1lLmZ4KSxudWxsIT1lLmZ5JiYoZS55PWUuZnkpLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPTEwKk1hdGguc3FydChyKSxhPXIqcDtlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGcoKSxlPXt0aWNrOm0scmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBmLnJlc3RhcnQoZCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBmLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yLGcoKSx1LmVhY2godiksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxlKTorc30sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsZSk6bH0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0xLXQsZSk6MS1jfSxmb3JjZTpmdW5jdGlvbih0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PXI/dS5yZW1vdmUodCk6dS5zZXQodCx2KHIpKSxlKTp1LmdldCh0KX0sZmluZDpmdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHMsbCxjPTAsdT10Lmxlbmd0aDtmb3IobnVsbD09bj9uPTEvMDpuKj1uLGM9MDtjPHU7KytjKShvPShpPWUtKHM9dFtjXSkueCkqaSsoYT1yLXMueSkqYSk8biYmKGw9cyxuPW8pO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGgub24odCxyKSxlKTpoLm9uKHQpfX19LHQuZm9yY2VYPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPWEoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudngrPShuW2FdLWkueCkqclthXSp0fWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKSxuPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSlyW2FdPWlzTmFOKG5bYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSkscygpLG8pOnR9LG99LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPWEoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShuW2FdLWkueSkqclthXSp0fWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKSxuPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSlyW2FdPWlzTmFOKG5bYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSkscygpLG8pOnR9LG99LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1jb2xsZWN0aW9uIjoxMDMsImQzLWRpc3BhdGNoIjoxMDUsImQzLXF1YWR0cmVlIjoxMTMsImQzLXRpbWVyIjoxMTd9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtpZigocj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj10LnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK3Quc2xpY2UocisxKV19ZnVuY3Rpb24gcih0KXtyZXR1cm4odD1lKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIG4saT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBhKHQpe2lmKCEoZT1pLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyBvKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIG8odCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9ZnVuY3Rpb24gcyh0LHIpe3ZhciBuPWUodCxyKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLGE9blsxXTtyZXR1cm4gYTwwPyIwLiIrbmV3IEFycmF5KC1hKS5qb2luKCIwIikraTppLmxlbmd0aD5hKzE/aS5zbGljZSgwLGErMSkrIi4iK2kuc2xpY2UoYSsxKTppK25ldyBBcnJheShhLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1hLnByb3RvdHlwZT1vLnByb3RvdHlwZSxvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBsPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQ9TWF0aC5yb3VuZCh0KSk+PTFlMjE/dC50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOnQudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBzKDEwMCp0LGUpfSxyOnMsczpmdW5jdGlvbih0LHIpe3ZhciBpPWUodCxyKTtpZighaSlyZXR1cm4gdCsiIjt2YXIgYT1pWzBdLG89aVsxXSxzPW8tKG49MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioby8zKSkpKSsxLGw9YS5sZW5ndGg7cmV0dXJuIHM9PT1sP2E6cz5sP2ErbmV3IEFycmF5KHMtbCsxKS5qb2luKCIwIik6cz4wP2Euc2xpY2UoMCxzKSsiLiIrYS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStlKHQsTWF0aC5tYXgoMCxyK3MtMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIGModCl7cmV0dXJuIHR9dmFyIHUsZj1BcnJheS5wcm90b3R5cGUubWFwLGg9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gcCh0KXt2YXIgZSxpLG89dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/YzooZT1mLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLGk9dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIG49dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGw9MDtuPjAmJnM+MCYmKGwrcysxPnImJihzPU1hdGgubWF4KDEsci1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKG4tPXMsbitzKSksISgobCs9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihpKX0pLHM9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLHU9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLHA9dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIsZD12b2lkIDA9PT10Lm51bWVyYWxzP2M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KGYuY2FsbCh0Lm51bWVyYWxzLFN0cmluZykpLG09dm9pZCAwPT09dC5wZXJjZW50PyIlIjp0LnBlcmNlbnQrIiIsZz12b2lkIDA9PT10Lm1pbnVzPyItIjp0Lm1pbnVzKyIiLHY9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24geSh0KXt2YXIgZT0odD1hKHQpKS5maWxsLHI9dC5hbGlnbixpPXQuc2lnbixjPXQuc3ltYm9sLGY9dC56ZXJvLHk9dC53aWR0aCx4PXQuY29tbWEsYj10LnByZWNpc2lvbixfPXQudHJpbSx3PXQudHlwZTsibiI9PT13Pyh4PSEwLHc9ImciKTpsW3ddfHwodm9pZCAwPT09YiYmKGI9MTIpLF89ITAsdz0iZyIpLChmfHwiMCI9PT1lJiYiPSI9PT1yKSYmKGY9ITAsZT0iMCIscj0iPSIpO3ZhciBUPSIkIj09PWM/czoiIyI9PT1jJiYvW2JveFhdLy50ZXN0KHcpPyIwIit3LnRvTG93ZXJDYXNlKCk6IiIsaz0iJCI9PT1jP3U6L1slcF0vLnRlc3Qodyk/bToiIixBPWxbd10sTT0vW2RlZmdwcnMlXS8udGVzdCh3KTtmdW5jdGlvbiBTKHQpe3ZhciBhLHMsbCxjPVQsdT1rO2lmKCJjIj09PXcpdT1BKHQpK3UsdD0iIjtlbHNle3ZhciBtPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3Y6QShNYXRoLmFicyh0KSxiKSxfJiYodD1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxyPXQubGVuZ3RoLG49MSxpPS0xO248cjsrK24pc3dpdGNoKHRbbl0pe2Nhc2UiLiI6aT1lPW47YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9biksZT1uO2JyZWFrO2RlZmF1bHQ6aWYoISt0W25dKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0odCkpLG0mJjA9PSt0JiYiKyIhPT1pJiYobT0hMSksYz0obT8iKCI9PT1pP2k6ZzoiLSI9PT1pfHwiKCI9PT1pPyIiOmkpK2MsdT0oInMiPT09dz9oWzgrbi8zXToiIikrdSsobSYmIigiPT09aT8iKSI6IiIpLE0pZm9yKGE9LTEscz10Lmxlbmd0aDsrK2E8czspaWYoNDg+KGw9dC5jaGFyQ29kZUF0KGEpKXx8bD41Nyl7dT0oNDY9PT1sP3ArdC5zbGljZShhKzEpOnQuc2xpY2UoYSkpK3UsdD10LnNsaWNlKDAsYSk7YnJlYWt9fXgmJiFmJiYodD1vKHQsMS8wKSk7dmFyIFM9Yy5sZW5ndGgrdC5sZW5ndGgrdS5sZW5ndGgsRT1TPHk/bmV3IEFycmF5KHktUysxKS5qb2luKGUpOiIiO3N3aXRjaCh4JiZmJiYodD1vKEUrdCxFLmxlbmd0aD95LXUubGVuZ3RoOjEvMCksRT0iIikscil7Y2FzZSI8Ijp0PWMrdCt1K0U7YnJlYWs7Y2FzZSI9Ijp0PWMrRSt0K3U7YnJlYWs7Y2FzZSJeIjp0PUUuc2xpY2UoMCxTPUUubGVuZ3RoPj4xKStjK3QrdStFLnNsaWNlKFMpO2JyZWFrO2RlZmF1bHQ6dD1FK2MrdCt1fXJldHVybiBkKHQpfXJldHVybiBiPXZvaWQgMD09PWI/NjovW2dwcnNdLy50ZXN0KHcpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpLFMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sU31yZXR1cm57Zm9ybWF0OnksZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49eSgoKHQ9YSh0KSkudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IocihlKS8zKSkpLG89TWF0aC5wb3coMTAsLWkpLHM9aFs4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKG8qdCkrc319fX1mdW5jdGlvbiBkKGUpe3JldHVybiB1PXAoZSksdC5mb3JtYXQ9dS5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9dS5mb3JtYXRQcmVmaXgsdX1kKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSx0LkZvcm1hdFNwZWNpZmllcj1vLHQuZm9ybWF0RGVmYXVsdExvY2FsZT1kLHQuZm9ybWF0TG9jYWxlPXAsdC5mb3JtYXRTcGVjaWZpZXI9YSx0LnByZWNpc2lvbkZpeGVkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1yKE1hdGguYWJzKHQpKSl9LHQucHJlY2lzaW9uUHJlZml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IocihlKS8zKSkpLXIoTWF0aC5hYnModCkpKX0sdC5wcmVjaXNpb25Sb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLHIoZSktcih0KSkrMX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTA4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1nZW8iKSx0KCJkMy1hcnJheSIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1NYXRoLmFicyxpPU1hdGguYXRhbixhPU1hdGguYXRhbjIsbz1NYXRoLmNvcyxzPU1hdGguZXhwLGw9TWF0aC5mbG9vcixjPU1hdGgubG9nLHU9TWF0aC5tYXgsZj1NYXRoLm1pbixoPU1hdGgucG93LHA9TWF0aC5yb3VuZCxkPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxtPU1hdGguc2luLGc9TWF0aC50YW4sdj0xZS02LHk9TWF0aC5QSSx4PXkvMixiPXkvNCxfPU1hdGguU1FSVDFfMix3PUwoMiksVD1MKHkpLGs9Mip5LEE9MTgwL3ksTT15LzE4MDtmdW5jdGlvbiBTKHQpe3JldHVybiB0PjE/eDp0PC0xPy14Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBFKHQpe3JldHVybiB0PjE/MDp0PC0xP3k6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIEwodCl7cmV0dXJuIHQ+MD9NYXRoLnNxcnQodCk6MH1mdW5jdGlvbiBDKHQpe3JldHVybihzKHQpLXMoLXQpKS8yfWZ1bmN0aW9uIFAodCl7cmV0dXJuKHModCkrcygtdCkpLzJ9ZnVuY3Rpb24gSSh0KXt2YXIgZT1nKHQvMikscj0yKmMobyh0LzIpKS8oZSplKTtmdW5jdGlvbiBpKHQsZSl7dmFyIG49byh0KSxpPW8oZSksYT1tKGUpLHM9aSpuLGw9LSgoMS1zP2MoKDErcykvMikvKDEtcyk6LS41KStyLygxK3MpKTtyZXR1cm5bbCppKm0odCksbCphXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24oZSxpKXt2YXIgcyxsPUwoZSplK2kqaSksdT0tdC8yLGY9NTA7aWYoIWwpcmV0dXJuWzAsMF07ZG97dmFyIGg9dS8yLHA9byhoKSxkPW0oaCksZz1kL3AseT0tYyhuKHApKTt1LT1zPSgyL2cqeS1yKmctbCkvKC15LyhkKmQpKzEtci8oMipwKnApKSoocDwwPy43OjEpfXdoaWxlKG4ocyk+diYmLS1mPjApO3ZhciB4PW0odSk7cmV0dXJuW2EoZSp4LGwqbyh1KSksUyhpKngvbCldfSxpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcj1vKGUpLG49ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC9NYXRoLnNpbih0KToxfShFKHIqbyh0Lz0yKSkpO3JldHVyblsyKnIqbSh0KSpuLG0oZSkqbl19ZnVuY3Rpb24geih0KXt2YXIgZT1tKHQpLHI9byh0KSxpPXQ+PTA/MTotMSxzPWcoaSp0KSxsPSgxK2UtcikvMjtmdW5jdGlvbiBjKHQsbil7dmFyIGM9byhuKSx1PW8odC89Mik7cmV0dXJuWygxK2MpKm0odCksKGkqbj4tYSh1LHMpLS4wMDE/MDoxMCotaSkrbCttKG4pKnItKDErYykqZSp1XX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCxjKXt2YXIgdT0wLGY9MCxoPTUwO2Rve3ZhciBwPW8odSksZD1tKHUpLGc9byhmKSx5PW0oZikseD0xK2csYj14KmQtdCxfPWwreSpyLXgqZSpwLWMsdz14KnAvMixUPS1kKnksaz1lKngqZC8yLEE9cipnK2UqcCp5LE09VCprLUEqdyxTPShfKlQtYipBKS9NLzIsRT0oYiprLV8qdykvTTtuKEUpPjImJihFLz0yKSx1LT1TLGYtPUV9d2hpbGUoKG4oUyk+dnx8bihFKT52KSYmLS1oPjApO3JldHVybiBpKmY+LWEobyh1KSxzKS0uMDAxP1syKnUsZl06bnVsbH0sY31mdW5jdGlvbiBEKHQsZSl7dmFyIHI9ZyhlLzIpLG49TCgxLXIqciksaT0xK24qbyh0Lz0yKSxhPW0odCkqbi9pLHM9ci9pLGw9YSphLGM9cypzO3JldHVybls0LzMqYSooMytsLTMqYyksNC8zKnMqKDMrMypsLWMpXX1PLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPnkqeSt2KSl7dmFyIHI9dCxpPWUsYT0yNTtkb3t2YXIgcyxsPW0ociksYz1tKHIvMiksdT1vKHIvMiksZj1tKGkpLGg9byhpKSxwPW0oMippKSxkPWYqZixnPWgqaCx4PWMqYyxiPTEtZyp1KnUsXz1iP0UoaCp1KSpMKHM9MS9iKTpzPTAsdz0yKl8qaCpjLXQsVD1fKmYtZSxrPXMqKGcqeCtfKmgqdSpkKSxBPXMqKC41KmwqcC0yKl8qZipjKSxNPS4yNSpzKihwKmMtXypmKmcqbCksUz1zKihkKnUrXyp4KmgpLEM9QSpNLVMqaztpZighQylicmVhazt2YXIgUD0oVCpBLXcqUykvQyxJPSh3Kk0tVCprKS9DO3ItPVAsaS09SX13aGlsZSgobihQKT52fHxuKEkpPnYpJiYtLWE+MCk7cmV0dXJuW3IsaV19fSxELmludmVydD1mdW5jdGlvbih0LGUpe2lmKGUqPTMvOCwhKHQqPTMvOCkmJm4oZSk+MSlyZXR1cm4gbnVsbDt2YXIgcj0xK3QqdCtlKmUsaT1MKChyLUwocipyLTQqZSplKSkvMikscz1TKGkpLzMsbD1pP2Z1bmN0aW9uKHQpe3JldHVybiBjKHQrTCh0KnQtMSkpfShuKGUvaSkpLzM6ZnVuY3Rpb24odCl7cmV0dXJuIGModCtMKHQqdCsxKSl9KG4odCkpLzMsdT1vKHMpLGY9UChsKSxoPWYqZi11KnU7cmV0dXJuWzIqZCh0KSphKEMobCkqdSwuMjUtaCksMipkKGUpKmEoZiptKHMpLC4yNStoKV19O3ZhciBSPUwoOCksRj1jKDErdyk7ZnVuY3Rpb24gQih0LGUpe3ZhciByPW4oZSk7cmV0dXJuIHI8Yj9bdCxjKGcoYitlLzIpKV06W3QqbyhyKSooMip3LTEvbShyKSksZChlKSooMip3KihyLWIpLWMoZyhyLzIpKSldfWZ1bmN0aW9uIE4odCl7dmFyIHI9Mip5L3Q7ZnVuY3Rpb24gcyh0LGkpe3ZhciBzPWUuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXcodCxpKTtpZihuKHQpPngpe3ZhciBsPWEoc1sxXSxzWzBdKSxjPUwoc1swXSpzWzBdK3NbMV0qc1sxXSksdT1yKnAoKGwteCkvcikreCxmPWEobShsLT11KSwyLW8obCkpO2w9dStTKHkvYyptKGYpKS1mLHNbMF09YypvKGwpLHNbMV09YyptKGwpfXJldHVybiBzfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBzPUwodCp0K24qbik7aWYocz54KXt2YXIgbD1hKG4sdCksYz1yKnAoKGwteCkvcikreCx1PWw+Yz8tMToxLGY9cypvKGMtbCksaD0xL2codSpFKChmLXkpL0woeSooeS0yKmYpK3MqcykpKTtsPWMrMippKChoK3UqTChoKmgtMykpLzMpLHQ9cypvKGwpLG49cyptKGwpfXJldHVybiBlLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3LmludmVydCh0LG4pfSxzfWZ1bmN0aW9uIGoodCxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDImJihyPXQpLDE9PT1yKXJldHVybiBlLmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdztpZihyPT09MS8wKXJldHVybiBVO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1lLmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdyhuL3IsaSk7cmV0dXJuIGFbMF0qPXQsYX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obixpKXt2YXIgYT1lLmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdy5pbnZlcnQobi90LGkpO3JldHVybiBhWzBdKj1yLGF9LG59ZnVuY3Rpb24gVSh0LGUpe3JldHVyblt0Km8oZSkvbyhlLz0yKSwyKm0oZSldfWZ1bmN0aW9uIFYodCxlLHIpe3ZhciBpLGEsbyxzPTEwMDtyPXZvaWQgMD09PXI/MDorcixlPStlO2RveyhhPXQocikpPT09KG89dChyK3YpKSYmKG89YSt2KSxyLT1pPS0xKnYqKGEtZSkvKGEtbyl9d2hpbGUocy0tID4wJiZuKGkpPnYpO3JldHVybiBzPDA/TmFOOnJ9ZnVuY3Rpb24gSCh0LGUscil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTQwKSx2b2lkIDA9PT1yJiYocj0xZS0xMiksZnVuY3Rpb24oaSxhLG8scyl7dmFyIGwsYyx1O289dm9pZCAwPT09bz8wOitvLHM9dm9pZCAwPT09cz8wOitzO2Zvcih2YXIgZj0wO2Y8ZTtmKyspe3ZhciBoPXQobyxzKSxwPWhbMF0taSxkPWhbMV0tYTtpZihuKHApPHImJm4oZCk8cilicmVhazt2YXIgbT1wKnArZCpkO2lmKG0+bClvLT1jLz0yLHMtPXUvPTI7ZWxzZXtsPW07dmFyIGc9KG8+MD8tMToxKSpyLHY9KHM+MD8tMToxKSpyLHk9dChvK2cscykseD10KG8scyt2KSxiPSh5WzBdLWhbMF0pL2csXz0oeVsxXS1oWzFdKS9nLHc9KHhbMF0taFswXSkvdixUPSh4WzFdLWhbMV0pL3Ysaz1UKmItXyp3LEE9KG4oayk8LjU/LjU6MSkvaztpZihvKz1jPShkKnctcCpUKSpBLHMrPXU9KHAqXy1kKmIpKkEsbihjKTxyJiZuKHUpPHIpYnJlYWt9fXJldHVybltvLHNdfX1mdW5jdGlvbiBxKCl7dmFyIHQ9aigxLjY4LDIpO2Z1bmN0aW9uIGUoZSxyKXtpZihlK3I8LTEuNCl7dmFyIG49KGUtcisxLjYpKihlK3IrMS40KS84O2UrPW4sci09LjgqbiptKHIreS8yKX12YXIgaT10KGUsciksYT0oMS1vKGUqcikpLzEyO3JldHVybiBpWzFdPDAmJihpWzBdKj0xK2EpLGlbMV0+MCYmKGlbMV0qPTErYS8xLjUqaVswXSppWzBdKSxpfXJldHVybiBlLmludmVydD1IKGUpLGV9ZnVuY3Rpb24gRyh0LGUpe3ZhciByLGk9dCptKGUpLGE9MzA7ZG97ZS09cj0oZSttKGUpLWkpLygxK28oZSkpfXdoaWxlKG4ocik+diYmLS1hPjApO3JldHVybiBlLzJ9ZnVuY3Rpb24gWSh0LGUscil7ZnVuY3Rpb24gbihuLGkpe3JldHVyblt0Km4qbyhpPUcocixpKSksZSptKGkpXX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm4gaT1TKGkvZSksW24vKHQqbyhpKSksUygoMippK20oMippKSkvcildfSxufUIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoKGE9bihlKSk8RilyZXR1cm5bdCwyKmkocyhlKSkteF07dmFyIHIsYSxsPWIsdT0yNTtkb3t2YXIgZj1vKGwvMiksaD1nKGwvMik7bC09cj0oUioobC1iKS1jKGgpLWEpLyhSLWYqZi8oMipoKSl9d2hpbGUobihyKT4xZS0xMiYmLS11PjApO3JldHVyblt0LyhvKGwpKihSLTEvbShsKSkpLGQoZSkqbF19LFUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MipTKGUvMik7cmV0dXJuW3QqbyhyLzIpL28ocikscl19O3ZhciBXPVkody94LHcseSk7dmFyIFg9Mi4wMDI3NixaPTEuMTEwNzI7ZnVuY3Rpb24gSih0LGUpe3ZhciByPUcoeSxlKTtyZXR1cm5bWCp0LygxL28oZSkrWi9vKHIpKSwoZSt3Km0ocikpL1hdfWZ1bmN0aW9uIEsodCl7dmFyIHI9MCxuPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IodCksaT1uKHIpO3JldHVybiBpLnBhcmFsbGVsPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ocj10Kk0pOnIqQX0saX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuW3QqbyhlKSxlXX1mdW5jdGlvbiAkKHQpe2lmKCF0KXJldHVybiBRO3ZhciBlPTEvZyh0KTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ZSt0LW4sYT1pP3IqbyhuKS9pOmk7cmV0dXJuW2kqbShhKSxlLWkqbyhhKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9TChyKnIrKG49ZS1uKSpuKSxzPWUrdC1pO3JldHVybltpL28ocykqYShyLG4pLHNdfSxyfWZ1bmN0aW9uIHR0KHQpe2Z1bmN0aW9uIGUoZSxyKXt2YXIgbj14LXIsaT1uP2UqdCptKG4pL246bjtyZXR1cm5bbiptKGkpL3QseC1uKm8oaSldfXJldHVybiBlLmludmVydD1mdW5jdGlvbihlLHIpe3ZhciBuPWUqdCxpPXgtcixvPUwobipuK2kqaSkscz1hKG4saSk7cmV0dXJuWyhvP28vbShvKToxKSpzL3QseC1vXX0sZX1KLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLGksYT1YKmUscz1lPDA/LWI6YixsPTI1O2Rve2k9YS13Km0ocykscy09cj0obSgyKnMpKzIqcy15Km0oaSkpLygyKm8oMipzKSsyK3kqbyhpKSp3Km8ocykpfXdoaWxlKG4ocik+diYmLS1sPjApO3JldHVybiBpPWEtdyptKHMpLFt0KigxL28oaSkrWi9vKHMpKS9YLGldfSxRLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L28oZSksZV19O3ZhciBldD1ZKDEsNC95LHkpO2Z1bmN0aW9uIHJ0KHQsZSxyLGkscyxsKXt2YXIgYyx1PW8obCk7aWYobih0KT4xfHxuKGwpPjEpYz1FKHIqcytlKmkqdSk7ZWxzZXt2YXIgZj1tKHQvMiksaD1tKGwvMik7Yz0yKlMoTChmKmYrZSppKmgqaCkpfXJldHVybiBuKGMpPnY/W2MsYShpKm0obCksZSpzLXIqaSp1KV06WzAsMF19ZnVuY3Rpb24gbnQodCxlLHIpe3JldHVybiBFKCh0KnQrZSplLXIqcikvKDIqdCplKSl9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQtMip5KmwoKHQreSkvKDIqeSkpfWZ1bmN0aW9uIGF0KHQsZSxyKXtmb3IodmFyIG4saT1bW3RbMF0sdFsxXSxtKHRbMV0pLG8odFsxXSldLFtlWzBdLGVbMV0sbShlWzFdKSxvKGVbMV0pXSxbclswXSxyWzFdLG0oclsxXSksbyhyWzFdKV1dLGE9aVsyXSxzPTA7czwzOysrcyxhPW4pbj1pW3NdLGEudj1ydChuWzFdLWFbMV0sYVszXSxhWzJdLG5bM10sblsyXSxuWzBdLWFbMF0pLGEucG9pbnQ9WzAsMF07dmFyIGw9bnQoaVswXS52WzBdLGlbMl0udlswXSxpWzFdLnZbMF0pLGM9bnQoaVswXS52WzBdLGlbMV0udlswXSxpWzJdLnZbMF0pLHU9eS1sO2lbMl0ucG9pbnRbMV09MCxpWzBdLnBvaW50WzBdPS0oaVsxXS5wb2ludFswXT1pWzBdLnZbMF0vMik7dmFyIGY9W2lbMl0ucG9pbnRbMF09aVswXS5wb2ludFswXStpWzJdLnZbMF0qbyhsKSwyKihpWzBdLnBvaW50WzFdPWlbMV0ucG9pbnRbMV09aVsyXS52WzBdKm0obCkpXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPW0oZSksYT1vKGUpLHM9bmV3IEFycmF5KDMpO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9aVtyXTtpZihzW3JdPXJ0KGUtbFsxXSxsWzNdLGxbMl0sYSxuLHQtbFswXSksIXNbcl1bMF0pcmV0dXJuIGwucG9pbnQ7c1tyXVsxXT1pdChzW3JdWzFdLWwudlsxXSl9dmFyIGg9Zi5zbGljZSgpO2ZvcihyPTA7cjwzOysrcil7dmFyIHA9Mj09cj8wOnIrMSxkPW50KGlbcl0udlswXSxzW3JdWzBdLHNbcF1bMF0pO3Nbcl1bMV08MCYmKGQ9LWQpLHI/MT09cj8oZD1jLWQsaFswXS09c1tyXVswXSpvKGQpLGhbMV0tPXNbcl1bMF0qbShkKSk6KGQ9dS1kLGhbMF0rPXNbcl1bMF0qbyhkKSxoWzFdKz1zW3JdWzBdKm0oZCkpOihoWzBdKz1zW3JdWzBdKm8oZCksaFsxXS09c1tyXVswXSptKGQpKX1yZXR1cm4gaFswXS89MyxoWzFdLz0zLGh9fWZ1bmN0aW9uIG90KHQpe3JldHVybiB0WzBdKj1NLHRbMV0qPU0sdH1mdW5jdGlvbiBzdCh0LHIsbil7dmFyIGk9ZS5nZW9DZW50cm9pZCh7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6W3QscixuXX0pLGE9Wy1pWzBdLC1pWzFdXSxvPWUuZ2VvUm90YXRpb24oYSkscz1hdChvdChvKHQpKSxvdChvKHIpKSxvdChvKG4pKSk7cy5pbnZlcnQ9SChzKTt2YXIgbD1lLmdlb1Byb2plY3Rpb24ocykucm90YXRlKGEpLGM9bC5jZW50ZXI7cmV0dXJuIGRlbGV0ZSBsLnJvdGF0ZSxsLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9jKG8odCkpOm8uaW52ZXJ0KGMoKSl9LGwuY2xpcEFuZ2xlKDkwKX1mdW5jdGlvbiBsdCh0LGUpe3ZhciByPUwoMS1tKGUpKTtyZXR1cm5bMi9UKnQqcixUKigxLXIpXX1mdW5jdGlvbiBjdCh0KXt2YXIgZT1nKHQpO2Z1bmN0aW9uIHIodCxyKXtyZXR1cm5bdCwodD90L20odCk6MSkqKG0ocikqbyh0KS1lKm8ocikpXX1yZXR1cm4gci5pbnZlcnQ9ZT9mdW5jdGlvbih0LHIpe3QmJihyKj1tKHQpL3QpO3ZhciBuPW8odCk7cmV0dXJuW3QsMiphKEwobipuK2UqZS1yKnIpLW4sZS1yKV19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsUyh0P2UqZyh0KS90OmUpXX0scn1sdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0ocj1lL1QtMSkqcjtyZXR1cm5bcj4wP3QqTCh5L3IpLzI6MCxTKDEtcildfTt2YXIgdXQ9TCgzKTtmdW5jdGlvbiBmdCh0LGUpe3JldHVyblt1dCp0KigyKm8oMiplLzMpLTEpL1QsdXQqVCptKGUvMyldfWZ1bmN0aW9uIGh0KHQpe3ZhciBlPW8odCk7ZnVuY3Rpb24gcih0LHIpe3JldHVyblt0KmUsbShyKS9lXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxyKXtyZXR1cm5bdC9lLFMociplKV19LHJ9ZnVuY3Rpb24gcHQodCl7dmFyIGU9byh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QqZSwoMStlKSpnKHIvMildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3JldHVyblt0L2UsMippKHIvKDErZSkpXX0scn1mdW5jdGlvbiBkdCh0LGUpe3ZhciByPUwoOC8oMyp5KSk7cmV0dXJuW3IqdCooMS1uKGUpL3kpLHIqZV19ZnVuY3Rpb24gbXQodCxlKXt2YXIgcj1MKDQtMyptKG4oZSkpKTtyZXR1cm5bMi9MKDYqeSkqdCpyLGQoZSkqTCgyKnkvMykqKDItcildfWZ1bmN0aW9uIGd0KHQsZSl7dmFyIHI9TCh5Kig0K3kpKTtyZXR1cm5bMi9yKnQqKDErTCgxLTQqZSplLyh5KnkpKSksNC9yKmVdfWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9KDIreCkqbShlKTtlLz0yO2Zvcih2YXIgaT0wLGE9MS8wO2k8MTAmJm4oYSk+djtpKyspe3ZhciBzPW8oZSk7ZS09YT0oZSttKGUpKihzKzIpLXIpLygyKnMqKDErcykpfXJldHVyblsyL0woeSooNCt5KSkqdCooMStvKGUpKSwyKkwoeS8oNCt5KSkqbShlKV19ZnVuY3Rpb24geXQodCxlKXtyZXR1cm5bdCooMStvKGUpKS9MKDIreSksMiplL0woMit5KV19ZnVuY3Rpb24geHQodCxlKXtmb3IodmFyIHI9KDEreCkqbShlKSxpPTAsYT0xLzA7aTwxMCYmbihhKT52O2krKyllLT1hPShlK20oZSktcikvKDErbyhlKSk7cmV0dXJuIHI9TCgyK3kpLFt0KigxK28oZSkpL3IsMiplL3JdfWZ0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTMqUyhlLyh1dCpUKSk7cmV0dXJuW1QqdC8odXQqKDIqbygyKnIvMyktMSkpLHJdfSxkdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1MKDgvKDMqeSkpLGk9ZS9yO3JldHVyblt0LyhyKigxLW4oaSkveSkpLGldfSxtdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0yLW4oZSkvTCgyKnkvMyk7cmV0dXJuW3QqTCg2KnkpLygyKnIpLGQoZSkqUygoNC1yKnIpLzMpXX0sZ3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCh5Kig0K3kpKS8yO3JldHVyblt0KnIvKDErTCgxLWUqZSooNCt5KS8oNCp5KSkpLGUqci8yXX0sdnQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpMKCg0K3kpL3kpLzIsbj1TKHIpLGk9byhuKTtyZXR1cm5bdC8oMi9MKHkqKDQreSkpKigxK2kpKSxTKChuK3IqKGkrMikpLygyK3gpKV19LHl0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPUwoMit5KSxuPWUqci8yO3JldHVybltyKnQvKDErbyhuKSksbl19LHh0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTEreCxuPUwoci8yKTtyZXR1cm5bMip0Km4vKDErbyhlKj1uKSksUygoZSttKGUpKS9yKV19O3ZhciBidD0zKzIqdztmdW5jdGlvbiBfdCh0LGUpe3ZhciByPW0odC89Miksbj1vKHQpLGE9TChvKGUpKSxzPW8oZS89MiksbD1tKGUpLyhzK3cqbiphKSx1PUwoMi8oMStsKmwpKSxmPUwoKHcqcysobityKSphKS8odypzKyhuLXIpKmEpKTtyZXR1cm5bYnQqKHUqKGYtMS9mKS0yKmMoZikpLGJ0Kih1KmwqKGYrMS9mKS0yKmkobCkpXX1fdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHI9RC5pbnZlcnQodC8xLjIsMS4wNjUqZSkpKXJldHVybiBudWxsO3ZhciByLGE9clswXSxzPXJbMV0sbD0yMDt0Lz1idCxlLz1idDtkb3t2YXIgaD1hLzIscD1zLzIsZD1tKGgpLGc9byhoKSx5PW0ocCksYj1vKHApLFQ9byhzKSxrPUwoVCksQT15LyhiK3cqZyprKSxNPUEqQSxTPUwoMi8oMStNKSksRT0odypiKyhnK2QpKmspLyh3KmIrKGctZCkqayksQz1MKEUpLFA9Qy0xL0MsST1DKzEvQyxPPVMqUC0yKmMoQyktdCx6PVMqQSpJLTIqaShBKS1lLFI9eSYmXyprKmQqTS95LEY9KHcqZypiK2spLygyKihiK3cqZyprKSooYit3KmcqaykqayksQj0tLjUqQSpTKlMqUyxOPUIqUixqPUIqRixVPShVPTIqYit3KmsqKGctZCkpKlUqQyxWPSh3KmcqYiprK1QpL1UsSD0tdypkKnkvKGsqVSkscT1QKk4tMipWL0MrUyooVitWL0UpLEc9UCpqLTIqSC9DK1MqKEgrSC9FKSxZPUEqSSpOLTIqUi8oMStNKStTKkkqUitTKkEqKFYtVi9FKSxXPUEqSSpqLTIqRi8oMStNKStTKkkqRitTKkEqKEgtSC9FKSxYPUcqWS1XKnE7aWYoIVgpYnJlYWs7dmFyIFo9KHoqRy1PKlcpL1gsSj0oTypZLXoqcSkvWDthLT1aLHM9dSgteCxmKHgscy1KKSl9d2hpbGUoKG4oWik+dnx8bihKKT52KSYmLS1sPjApO3JldHVybiBuKG4ocykteCk8dj9bMCxzXTpsJiZbYSxzXX07dmFyIHd0PW8oMzUqTSk7ZnVuY3Rpb24gVHQodCxlKXt2YXIgcj1nKGUvMik7cmV0dXJuW3Qqd3QqTCgxLXIqciksKDErd3QpKnJdfWZ1bmN0aW9uIGt0KHQsZSl7dmFyIHI9ZS8yLG49byhyKTtyZXR1cm5bMip0L1QqbyhlKSpuKm4sVCpnKHIpXX1mdW5jdGlvbiBBdCh0KXt2YXIgZT0xLXQscj1pKHksMClbMF0taSgteSwwKVswXSxuPUwoMiooaSgwLHgpWzFdLWkoMCwteClbMV0pL3IpO2Z1bmN0aW9uIGkocixuKXt2YXIgaT1vKG4pLGE9bShuKTtyZXR1cm5baS8oZSt0KmkpKnIsZSpuK3QqYV19ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkodCxlKTtyZXR1cm5bclswXSpuLHJbMV0vbl19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYSgwLHQpWzFdfXJldHVybiBhLmludmVydD1mdW5jdGlvbihyLGkpe3ZhciBhPVYocyxpKTtyZXR1cm5bci9uKih0K2UvbyhhKSksYV19LGF9ZnVuY3Rpb24gTXQodCl7cmV0dXJuW3RbMF0vMixTKGcodFsxXS8yKk0pKSpBXX1mdW5jdGlvbiBTdCh0KXtyZXR1cm5bMip0WzBdLDIqaShtKHRbMV0qTSkpKkFdfWZ1bmN0aW9uIEV0KHQscil7dmFyIGk9Mip5L3Iscz10KnQ7ZnVuY3Rpb24gbChyLGwpe3ZhciBjPWUuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXcocixsKSx1PWNbMF0sZj1jWzFdLGg9dSp1K2YqZjtpZihoPnMpe3ZhciBkPUwoaCksZz1hKGYsdSksYj1pKnAoZy9pKSxfPWctYix3PXQqbyhfKSxUPSh0Km0oXyktXyptKHcpKS8oeC13KSxrPUx0KF8sVCksQT0oeS10KS9DdChrLHcseSk7dT1kO3ZhciBNLFM9NTA7ZG97dS09TT0odCtDdChrLHcsdSkqQS1kKS8oayh1KSpBKX13aGlsZShuKE0pPnYmJi0tUz4wKTtmPV8qbSh1KSx1PHgmJihmLT1UKih1LXgpKTt2YXIgRT1tKGIpLEM9byhiKTtjWzBdPXUqQy1mKkUsY1sxXT11KkUrZipDfXJldHVybiBjfXJldHVybiBsLmludmVydD1mdW5jdGlvbihyLGwpe3ZhciBjPXIqcitsKmw7aWYoYz5zKXt2YXIgdT1MKGMpLGY9YShsLHIpLGg9aSpwKGYvaSksZD1mLWg7cj11Km8oZCksbD11Km0oZCk7Zm9yKHZhciBnPXIteCx2PW0ociksYj1sL3YsXz1yPHg/MS8wOjAsdz0xMDs7KXt2YXIgVD10Km0oYiksaz10Km8oYiksQT1tKGspLE09eC1rLFM9KFQtYipBKS9NLEU9THQoYixTKTtpZihuKF8pPDFlLTEyfHwhLS13KWJyZWFrO2ItPV89KGIqdi1TKmctbCkvKHYtMipnKihNKihrK2IqVCpvKGspLUEpLVQqKFQtYipBKSkvKE0qTSkpfXI9KHU9dCtDdChFLGsscikqKHktdCkvQ3QoRSxrLHkpKSpvKGY9aCtiKSxsPXUqbShmKX1yZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQocixsKX0sbH1mdW5jdGlvbiBMdCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10Km8ocik7cmV0dXJuIHI8eCYmKG4tPWUpLEwoMStuKm4pfX1mdW5jdGlvbiBDdCh0LGUscil7Zm9yKHZhciBuPShyLWUpLzUwLGk9dChlKSt0KHIpLGE9MSxvPWU7YTw1MDsrK2EpaSs9Mip0KG8rPW4pO3JldHVybi41Kmkqbn1mdW5jdGlvbiBQdCh0LGUscixpLGEscyxsLGMpe2Z1bmN0aW9uIHUobix1KXtpZighdSlyZXR1cm5bdCpuL3ksMF07dmFyIGY9dSp1LGg9dCtmKihlK2YqKHIrZippKSkscD11KihhLTErZioocy1jK2YqbCkpLGQ9KGgqaCtwKnApLygyKnApLGc9bipTKGgvZCkveTtyZXR1cm5bZCptKGcpLHUqKDErZipjKStkKigxLW8oZykpXX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDw4JiYoYz0wKSx1LmludmVydD1mdW5jdGlvbih1LGYpe3ZhciBoLHAsZD15KnUvdCxnPWYseD01MDtkb3t2YXIgYj1nKmcsXz10K2IqKGUrYioocitiKmkpKSx3PWcqKGEtMStiKihzLWMrYipsKSksVD1fKl8rdyp3LGs9Mip3LEE9VC9rLE09QSpBLEU9UyhfL0EpL3ksQz1kKkUsUD1fKl8sST0oMiplK2IqKDQqcis2KmIqaSkpKmcsTz1hK2IqKDMqcys1KmIqbCksej0oMiooXypJK3cqKE8tMSkpKmstVCooMiooTy0xKSkpLyhrKmspLEQ9byhDKSxSPW0oQyksRj1BKkQsQj1BKlIsTj1kL3kqKDEvTCgxLVAvTSkpKihJKkEtXyp6KS9NLGo9Qi11LFU9ZyooMStiKmMpK0EtRi1mLFY9eipSK0YqTixIPUYqRSxxPTErei0oeipELUIqTiksRz1CKkUsWT1WKkctcSpIO2lmKCFZKWJyZWFrO2QtPWg9KFUqVi1qKnEpL1ksZy09cD0oaipHLVUqSCkvWX13aGlsZSgobihoKT52fHxuKHApPnYpJiYtLXg+MCk7cmV0dXJuW2QsZ119LHV9VHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS8oMSt3dCk7cmV0dXJuW3QmJnQvKHd0KkwoMS1yKnIpKSwyKmkocildfSxrdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUvVCksbj1vKHIpLGE9MipyO3JldHVyblt0KlQvMi8obyhhKSpuKm4pLGFdfTt2YXIgSXQ9UHQoMi44Mjg0LC0xLjY5ODgsLjc1NDMyLC0uMTgwNzEsMS43NjAwMywtLjM4OTE0LC4wNDI1NTUpO3ZhciBPdD1QdCgyLjU4MzgxOSwtLjgzNTgyNywuMTcwMzU0LC0uMDM4MDk0LDEuNTQzMzEzLC0uNDExNDM1LC4wODI3NDIpO3ZhciB6dD1QdCg1LzYqeSwtLjYyNjM2LC0uMDM0NCwwLDEuMzQ5MywtLjA1NTI0LDAsLjA0NSk7ZnVuY3Rpb24gRHQodCxlKXt2YXIgcj10KnQsbj1lKmU7cmV0dXJuW3QqKDEtLjE2MjM4OCpuKSooLjg3LTk1MjQyNmUtOSpyKnIpLGUqKDErbi8xMildfUR0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLGk9dCxhPWUsbz01MDtkb3t2YXIgcz1hKmE7YS09cj0oYSooMStzLzEyKS1lKS8oMStzLzQpfXdoaWxlKG4ocik+diYmLS1vPjApO289NTAsdC89MS0uMTYyMzg4KnM7ZG97dmFyIGw9KGw9aSppKSpsO2ktPXI9KGkqKC44Ny05NTI0MjZlLTkqbCktdCkvKC44Ny0uMDA0NzYyMTMqbCl9d2hpbGUobihyKT52JiYtLW8+MCk7cmV0dXJuW2ksYV19O3ZhciBSdD1QdCgyLjY1MTYsLS43NjUzNCwuMTkxMjMsLS4wNDcwOTQsMS4zNjI4OSwtLjEzOTY1LC4wMzE3NjIpO2Z1bmN0aW9uIEZ0KHQpe3ZhciBlPXQoeCwwKVswXS10KC14LDApWzBdO2Z1bmN0aW9uIHIocixuKXt2YXIgaT1yPjA/LS41Oi41LGE9dChyK2kqeSxuKTtyZXR1cm4gYVswXS09aSplLGF9cmV0dXJuIHQuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1yPjA/LS41Oi41LGE9dC5pbnZlcnQocitpKmUsbiksbz1hWzBdLWkqeTtyZXR1cm4gbzwteT9vKz0yKnk6bz55JiYoby09Mip5KSxhWzBdPW8sYX0pLHJ9ZnVuY3Rpb24gQnQodCxlKXt2YXIgcj1kKHQpLGk9ZChlKSxzPW8oZSksbD1vKHQpKnMsYz1tKHQpKnMsdT1tKGkqZSk7dD1uKGEoYyx1KSksZT1TKGwpLG4odC14KT52JiYodCU9eCk7dmFyIGY9ZnVuY3Rpb24odCxlKXtpZihlPT09eClyZXR1cm5bMCwwXTt2YXIgcixpLGE9bShlKSxzPWEqYSxsPXMqcyxjPTErbCx1PTErMypsLGY9MS1sLGg9UygxL0woYykpLHA9ZitzKmMqaCxkPSgxLWEpL3AsZz1MKGQpLGI9ZCpjLF89TChiKSx3PWcqZjtpZigwPT09dClyZXR1cm5bMCwtKHcrcypfKV07dmFyIFQsaz1vKGUpLEE9MS9rLE09MiphKmssRT0oLXAqay0oLTMqcytoKnUpKk0qKDEtYSkpLyhwKnApLEM9LUEqTSxQPS1BKihzKmMqRStkKnUqTSksST0tMipBKihmKiguNSpFL2cpLTIqcypnKk0pLE89NCp0L3k7aWYodD4uMjIyKnl8fGU8eS80JiZ0Pi4xNzUqeSl7aWYocj0odytzKkwoYiooMStsKS13KncpKS8oMStsKSx0PnkvNClyZXR1cm5bcixyXTt2YXIgej1yLEQ9LjUqcjtyPS41KihEK3opLGk9NTA7ZG97dmFyIFI9TChiLXIqciksRj1yKihJK0MqUikrUCpTKHIvXyktTztpZighRilicmVhaztGPDA/RD1yOno9cixyPS41KihEK3opfXdoaWxlKG4oei1EKT52JiYtLWk+MCl9ZWxzZXtyPXYsaT0yNTtkb3t2YXIgQj1yKnIsTj1MKGItQiksaj1JK0MqTixVPXIqaitQKlMoci9fKS1PLFY9aisoUC1DKkIpL047ci09VD1OP1UvVjowfXdoaWxlKG4oVCk+diYmLS1pPjApfXJldHVybltyLC13LXMqTChiLXIqcildfSh0PnkvND94LXQ6dCxlKTtyZXR1cm4gdD55LzQmJih1PWZbMF0sZlswXT0tZlsxXSxmWzFdPS11KSxmWzBdKj1yLGZbMV0qPS1pLGZ9ZnVuY3Rpb24gTnQodCxlKXt2YXIgcixhLGwsYyx1LGY7aWYoZTx2KXJldHVyblsoYz1tKHQpKS0ocj1lKih0LWMqKGE9byh0KSkpLzQpKmEsYStyKmMsMS1lKmMqYy8yLHQtcl07aWYoZT49MS12KXJldHVybiByPSgxLWUpLzQsbD0xLyhhPVAodCkpLFsoYz0oKGY9cygyKihmPXQpKSktMSkvKGYrMSkpK3IqKCh1PWEqQyh0KSktdCkvKGEqYSksbC1yKmMqbCoodS10KSxsK3IqYypsKih1K3QpLDIqaShzKHQpKS14K3IqKHUtdCkvYV07dmFyIGg9WzEsMCwwLDAsMCwwLDAsMCwwXSxwPVtMKGUpLDAsMCwwLDAsMCwwLDAsMF0sZD0wO2ZvcihhPUwoMS1lKSx1PTE7bihwW2RdL2hbZF0pPnYmJmQ8ODspcj1oW2QrK10scFtkXT0oci1hKS8yLGhbZF09KHIrYSkvMixhPUwociphKSx1Kj0yO2w9dSpoW2RdKnQ7ZG97bD0oUyhjPXBbZF0qbShhPWwpL2hbZF0pK2wpLzJ9d2hpbGUoLS1kKTtyZXR1cm5bbShsKSxjPW8obCksYy9vKGwtYSksbF19ZnVuY3Rpb24ganQodCxlKXtpZighZSlyZXR1cm4gdDtpZigxPT09ZSlyZXR1cm4gYyhnKHQvMitiKSk7Zm9yKHZhciByPTEsYT1MKDEtZSksbz1MKGUpLHM9MDtuKG8pPnY7cysrKXtpZih0JXkpe3ZhciBsPWkoYSpnKHQpL3IpO2w8MCYmKGwrPXkpLHQrPWwrfn4odC95KSp5fWVsc2UgdCs9dDtvPShyK2EpLzIsYT1MKHIqYSksbz0oKHI9byktYSkvMn1yZXR1cm4gdC8oaCgyLHMpKnIpfWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9KHctMSkvKHcrMSksbD1MKDEtcipyKSx1PWp0KHgsbCpsKSxmPWMoZyh5LzQrbihlKS8yKSksaD1zKC0xKmYpL0wocikscD1mdW5jdGlvbih0LGUpe3ZhciByPXQqdCxuPWUrMSxpPTEtci1lKmU7cmV0dXJuWy41KigodD49MD94Oi14KS1hKGksMip0KSksLS4yNSpjKGkqaSs0KnIpKy41KmMobipuK3IpXX0oaCpvKC0xKnQpLGgqbSgtMSp0KSksdj1mdW5jdGlvbih0LGUscil7dmFyIGE9bih0KSxvPUMobihlKSk7aWYoYSl7dmFyIHM9MS9tKGEpLGw9MS8oZyhhKSpnKGEpKSxjPS0obCtyKihvKm8qcypzKS0xK3IpLHU9KC1jK0woYypjLTQqKChyLTEpKmwpKSkvMjtyZXR1cm5banQoaSgxL0wodSkpLHIpKmQodCksanQoaShMKCh1L2wtMSkvcikpLDEtcikqZChlKV19cmV0dXJuWzAsanQoaShvKSwxLXIpKmQoZSldfShwWzBdLHBbMV0sbCpsKTtyZXR1cm5bLXZbMV0sKGU+PTA/MTotMSkqKC41KnUtdlswXSldfWZ1bmN0aW9uIFZ0KHQpe3ZhciBlPW0odCkscj1vKHQpLGk9SHQodCk7ZnVuY3Rpb24gcyh0LGEpe3ZhciBzPWkodCxhKTt0PXNbMF0sYT1zWzFdO3ZhciBsPW0oYSksYz1vKGEpLHU9byh0KSxmPUUoZSpsK3IqYyp1KSxoPW0oZikscD1uKGgpPnY/Zi9oOjE7cmV0dXJuW3AqciptKHQpLChuKHQpPng/cDotcCkqKGUqYy1yKmwqdSldfXJldHVybiBpLmludmVydD1IdCgtdCkscy5pbnZlcnQ9ZnVuY3Rpb24odCxyKXt2YXIgbj1MKHQqdCtyKnIpLHM9LW0obiksbD1vKG4pLGM9bipsLHU9LXIqcyxmPW4qZSxoPUwoYypjK3UqdS1mKmYpLHA9YShjKmYrdSpoLHUqZi1jKmgpLGQ9KG4+eD8tMToxKSphKHQqcyxuKm8ocCkqbCtyKm0ocCkqcyk7cmV0dXJuIGkuaW52ZXJ0KGQscCl9LHN9ZnVuY3Rpb24gSHQodCl7dmFyIGU9bSh0KSxyPW8odCk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIGk9byhuKSxzPW8odCkqaSxsPW0odCkqaSxjPW0obik7cmV0dXJuW2EobCxzKnItYyplKSxTKGMqcitzKmUpXX19QnQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7bih0KT4xJiYodD0yKmQodCktdCksbihlKT4xJiYoZT0yKmQoZSktZSk7dmFyIHI9ZCh0KSxpPWQoZSkscz0tcip0LGw9LWkqZSxjPWwvczwxLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0wLGk9MSxhPS41LHM9NTA7Zm9yKDs7KXt2YXIgbD1hKmEsYz1MKGEpLHU9UygxL0woMStsKSksZj0xLWwrYSooMStsKSp1LGg9KDEtYykvZixwPUwoaCksZD1oKigxK2wpLG09cCooMS1sKSxnPUwoZC10KnQpLHY9ZSttK2EqZztpZihuKGktcik8MWUtMTJ8fDA9PS0tc3x8MD09PXYpYnJlYWs7dj4wP3I9YTppPWEsYT0uNSoocitpKX1pZighcylyZXR1cm4gbnVsbDt2YXIgeD1TKGMpLGI9byh4KSxfPTEvYix3PTIqYypiLFQ9KC1mKmItKC0zKmErdSooMSszKmwpKSp3KigxLWMpKS8oZipmKTtyZXR1cm5beS80Kih0KigtMipfKiguNSpUL3AqKDEtbCktMiphKnAqdykrLV8qdypnKSstXyooYSooMStsKSpUK2gqKDErMypsKSp3KSpTKHQvTChkKSkpLHhdfShjP2w6cyxjP3M6bCksZj11WzBdLGg9dVsxXSxwPW8oaCk7cmV0dXJuIGMmJihmPS14LWYpLFtyKihhKG0oZikqcCwtbShoKSkreSksaSpTKG8oZikqcCldfSxVdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLG8sbCx1LGYsaD0ody0xKS8odysxKSxwPUwoMS1oKmgpLGQ9anQoeCxwKnApLG09KG49LXQsbz1wKnAsKHI9LjUqZC1lKT8obD1OdChyLG8pLG4/KGY9KHU9TnQobiwxLW8pKVsxXSp1WzFdK28qbFswXSpsWzBdKnVbMF0qdVswXSxbW2xbMF0qdVsyXS9mLGxbMV0qbFsyXSp1WzBdKnVbMV0vZl0sW2xbMV0qdVsxXS9mLC1sWzBdKmxbMl0qdVswXSp1WzJdL2ZdLFtsWzJdKnVbMV0qdVsyXS9mLC1vKmxbMF0qbFsxXSp1WzBdL2ZdXSk6W1tsWzBdLDBdLFtsWzFdLDBdLFtsWzJdLDBdXSk6W1swLCh1PU50KG4sMS1vKSlbMF0vdVsxXV0sWzEvdVsxXSwwXSxbdVsyXS91WzFdLDBdXSksZz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVswXStlWzFdKmVbMV07cmV0dXJuWyh0WzBdKmVbMF0rdFsxXSplWzFdKS9yLCh0WzFdKmVbMF0tdFswXSplWzFdKS9yXX0obVswXSxtWzFdKTtyZXR1cm5bYShnWzFdLGdbMF0pLy0xLDIqaShzKC0uNSpjKGgqZ1swXSpnWzBdK2gqZ1sxXSpnWzFdKSkpLXhdfTt2YXIgcXQ9UygxLTEvMykqQSxHdD1odCgwKTtmdW5jdGlvbiBZdCh0KXt2YXIgZT1xdCpNLHI9bHQoeSxlKVswXS1sdCgteSxlKVswXSxpPUd0KDAsZSlbMV0sYT1sdCgwLGUpWzFdLG89VC1hLHM9ay90LGM9NC9rLGg9aStvKm8qNC9rO2Z1bmN0aW9uIHAocCxkKXt2YXIgbSxnPW4oZCk7aWYoZz5lKXt2YXIgdj1mKHQtMSx1KDAsbCgocCt5KS9zKSkpOyhtPWx0KHArPXkqKHQtMSkvdC12KnMsZykpWzBdPW1bMF0qay9yLWsqKHQtMSkvKDIqdCkrdiprL3QsbVsxXT1pKzQqKG1bMV0tYSkqby9rLGQ8MCYmKG1bMV09LW1bMV0pfWVsc2UgbT1HdChwLGQpO3JldHVybiBtWzBdKj1jLG1bMV0vPWgsbX1yZXR1cm4gcC5pbnZlcnQ9ZnVuY3Rpb24oZSxwKXtlLz1jO3ZhciBkPW4ocCo9aCk7aWYoZD5pKXt2YXIgbT1mKHQtMSx1KDAsbCgoZSt5KS9zKSkpO2U9KGUreSoodC0xKS90LW0qcykqci9rO3ZhciBnPWx0LmludmVydChlLC4yNSooZC1pKSprL28rYSk7cmV0dXJuIGdbMF0tPXkqKHQtMSkvdC1tKnMscDwwJiYoZ1sxXT0tZ1sxXSksZ31yZXR1cm4gR3QuaW52ZXJ0KGUscCl9LHB9ZnVuY3Rpb24gV3QodCxlKXtyZXR1cm5bdCwxJmU/OTAtdjpxdF19ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm5bdCwxJmU/LTkwK3Y6LXF0XX1mdW5jdGlvbiBadCh0KXtyZXR1cm5bdFswXSooMS12KSx0WzFdXX1mdW5jdGlvbiBKdCh0KXt2YXIgZSxyPTErdCxpPVMobSgxL3IpKSxzPTIqTCh5LyhlPXkrNCppKnIpKSxsPS41KnMqKHIrTCh0KigyK3QpKSksYz10KnQsdT1yKnI7ZnVuY3Rpb24gZihmLGgpe3ZhciBwLGQsZz0xLW0oaCk7aWYoZyYmZzwyKXt2YXIgdixiPXgtaCxfPTI1O2Rve3ZhciB3PW0oYiksVD1vKGIpLGs9aSthKHcsci1UKSxBPTErdS0yKnIqVDtiLT12PShiLWMqaS1yKncrQSprLS41KmcqZSkvKDIqcip3KmspfXdoaWxlKG4odik+MWUtMTImJi0tXz4wKTtwPXMqTChBKSxkPWYqay95fWVsc2UgcD1zKih0K2cpLGQ9ZippL3k7cmV0dXJuW3AqbShkKSxsLXAqbyhkKV19cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIG89dCp0KyhuLT1sKSpuLGY9KDErdS1vLyhzKnMpKS8oMipyKSxoPUUoZikscD1tKGgpLGQ9aSthKHAsci1mKTtyZXR1cm5bUyh0L0wobykpKnkvZCxTKDEtMiooaC1jKmktcipwKygxK3UtMipyKmYpKmQpL2UpXX0sZn1mdW5jdGlvbiBLdCh0LGUpe3JldHVybiBlPi0uNzEwOTg4OTU5NjIwNzU2Nz8oKHQ9Vyh0LGUpKVsxXSs9LjA1MjgwMzUyNzQ1NDIsdCk6USh0LGUpfWZ1bmN0aW9uIFF0KHQsZSl7cmV0dXJuIG4oZSk+LjcxMDk4ODk1OTYyMDc1Njc/KCh0PVcodCxlKSlbMV0tPWU+MD8uMDUyODAzNTI3NDU0MjotLjA1MjgwMzUyNzQ1NDIsdCk6USh0LGUpfWZ1bmN0aW9uICR0KHQsZSxyLG4pe3ZhciBpPUwoNCp5LygyKnIrKDErdC1lLzIpKm0oMipyKSsodCtlKS8yKm0oNCpyKStlLzIqbSg2KnIpKSksYT1MKG4qbShyKSpMKCgxK3QqbygyKnIpK2Uqbyg0KnIpKS8oMSt0K2UpKSkscz1yKmMoMSk7ZnVuY3Rpb24gbChyKXtyZXR1cm4gTCgxK3QqbygyKnIpK2Uqbyg0KnIpKX1mdW5jdGlvbiBjKG4pe3ZhciBpPW4qcjtyZXR1cm4oMippKygxK3QtZS8yKSptKDIqaSkrKHQrZSkvMiptKDQqaSkrZS8yKm0oNippKSkvcn1mdW5jdGlvbiB1KHQpe3JldHVybiBsKHQpKm0odCl9dmFyIGY9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKlYoYyxzKm0oZSkvcixlL3kpO2lzTmFOKG4pJiYobj1yKmQoZSkpO3ZhciB1PWkqbChuKTtyZXR1cm5bdSphKnQveSpvKG4pLHUvYSptKG4pXX07cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Vih1LGUqYS9pKTtyZXR1cm5bdCp5LyhvKG4pKmkqYSpsKG4pKSxTKHIqYyhuL3IpL3MpXX0sMD09PXImJihpPUwobi95KSwoZj1mdW5jdGlvbih0LGUpe3JldHVyblt0KmksbShlKS9pXX0pLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L2ksUyhlKmkpXX0pLGZ9ZnVuY3Rpb24gdGUodCxlLHIsbixpKXt2b2lkIDA9PT1uJiYobj0xZS04KSx2b2lkIDA9PT1pJiYoaT0yMCk7dmFyIGE9dChlKSxvPXQoLjUqKGUrcikpLHM9dChyKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzLGwsYyx1LGYpe2lmKGYubmFuRW5jb3VudGVyZWQpcmV0dXJuIE5hTjt2YXIgaCxwLGQsbSxnLHYseSx4LGIsXztpZihwPWUocisuMjUqKGg9bi1yKSksZD1lKG4tLjI1KmgpLGlzTmFOKHApKWYubmFuRW5jb3VudGVyZWQ9ITA7ZWxzZXtpZighaXNOYU4oZCkpcmV0dXJuIF89KCh2PShtPWgqKGkrNCpwK2EpLzEyKSsoZz1oKihhKzQqZCtvKS8xMikpLXMpLzE1LHU+Yz8oZi5tYXhEZXB0aENvdW50KyssditfKTpNYXRoLmFicyhfKTxsP3YrXzooeD10KGUscix5PXIrLjUqaCxpLHAsYSxtLC41KmwsYyx1KzEsZiksaXNOYU4oeCk/KGYubmFuRW5jb3VudGVyZWQ9ITAsTmFOKTooYj10KGUseSxuLGEsZCxvLGcsLjUqbCxjLHUrMSxmKSxpc05hTihiKT8oZi5uYW5FbmNvdW50ZXJlZD0hMCxOYU4pOngrYikpO2YubmFuRW5jb3VudGVyZWQ9ITB9fSh0LGUscixhLG8scywoYSs0Km8rcykqKHItZSkvNixuLGksMSx7bWF4RGVwdGhDb3VudDowLG5hbkVuY291bnRlcmVkOiExfSl9ZnVuY3Rpb24gZWUodCxlLHIpe2Z1bmN0aW9uIGkocil7cmV0dXJuIHQrKDEtdCkqaCgxLWgocixlKSwxL2UpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHRlKGksMCx0LDFlLTQpfWZvcih2YXIgbz0xL2EoMSkscz0xZTMsbD0oMSsxZS04KSpvLGM9W10sdT0wO3U8PXM7dSsrKWMucHVzaChhKHUvcykqbCk7ZnVuY3Rpb24gZih0KXt2YXIgZT0wLHI9cyxuPTUwMDtkb3tjW25dPnQ/cj1uOmU9bixuPWUrcj4+MX13aGlsZShuPmUpO3ZhciBpPWNbbisxXS1jW25dO3JldHVybiBpJiYoaT0odC1jW24rMV0pL2kpLChuKzEraSkvc312YXIgcD0yKmYoMSkveSpvL3IsZz1mdW5jdGlvbih0LGUpe3ZhciByPWYobihtKGUpKSksYT1pKHIpKnQ7cmV0dXJuIHIvPXAsW2EsZT49MD9yOi1yXX07cmV0dXJuIGcuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIG4oZSo9cCk8MSYmKHI9ZChlKSpTKGEobihlKSkqbykpLFt0L2kobihlKSkscl19LGd9ZnVuY3Rpb24gcmUodCxlKXtyZXR1cm4gbih0WzBdLWVbMF0pPHYmJm4odFsxXS1lWzFdKTx2fWZ1bmN0aW9uIG5lKHQsZSl7Zm9yKHZhciByLG4saSxhPS0xLG89dC5sZW5ndGgscz10WzBdLGw9W107KythPG87KXtuPSgocj10W2FdKVswXS1zWzBdKS9lLGk9KHJbMV0tc1sxXSkvZTtmb3IodmFyIGM9MDtjPGU7KytjKWwucHVzaChbc1swXStjKm4sc1sxXStjKmldKTtzPXJ9cmV0dXJuIGwucHVzaChyKSxsfWZ1bmN0aW9uIGllKHQpe3ZhciBlLG4saSxhLG8scyxsLGM9W10sdT10WzBdLmxlbmd0aDtmb3IobD0wO2w8dTsrK2wpbj0oZT10WzBdW2xdKVswXVswXSxpPWVbMF1bMV0sYT1lWzFdWzFdLG89ZVsyXVswXSxzPWVbMl1bMV0sYy5wdXNoKG5lKFtbbit2LGkrdl0sW24rdixhLXZdLFtvLXYsYS12XSxbby12LHMrdl1dLDMwKSk7Zm9yKGw9dFsxXS5sZW5ndGgtMTtsPj0wOy0tbCluPShlPXRbMV1bbF0pWzBdWzBdLGk9ZVswXVsxXSxhPWVbMV1bMV0sbz1lWzJdWzBdLHM9ZVsyXVsxXSxjLnB1c2gobmUoW1tvLXYscy12XSxbby12LGErdl0sW24rdixhK3ZdLFtuK3YsaS12XV0sMzApKTtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3IubWVyZ2UoYyldfX1mdW5jdGlvbiBhZSh0LHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKGUsbil7Zm9yKHZhciBpPW48MD8tMToxLGE9clsrKG48MCldLG89MCxzPWEubGVuZ3RoLTE7bzxzJiZlPmFbb11bMl1bMF07KytvKTt2YXIgbD10KGUtYVtvXVsxXVswXSxuKTtyZXR1cm4gbFswXSs9dChhW29dWzFdWzBdLGkqbj5pKmFbb11bMF1bMV0/YVtvXVswXVsxXTpuKVswXSxsfW4/by5pbnZlcnQ9bihvKTp0LmludmVydCYmKG8uaW52ZXJ0PWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPWFbKyhuPDApXSxzPXJbKyhuPDApXSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1pW2xdO2lmKHVbMF1bMF08PWUmJmU8dVsxXVswXSYmdVswXVsxXTw9biYmbjx1WzFdWzFdKXt2YXIgZj10LmludmVydChlLXQoc1tsXVsxXVswXSwwKVswXSxuKTtyZXR1cm4gZlswXSs9c1tsXVsxXVswXSxyZShvKGZbMF0sZlsxXSksW2Usbl0pP2Y6bnVsbH19fSk7dmFyIHM9ZS5nZW9Qcm9qZWN0aW9uKG8pLGw9cy5zdHJlYW07cmV0dXJuIHMuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciByPXMucm90YXRlKCksbj1sKHQpLGE9KHMucm90YXRlKFswLDBdKSxsKHQpKTtyZXR1cm4gcy5yb3RhdGUociksbi5zcGhlcmU9ZnVuY3Rpb24oKXtlLmdlb1N0cmVhbShpLGEpfSxufSxzLmxvYmVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWllKGUpLHI9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKk0sdFswXVsxXSpNXSxbdFsxXVswXSpNLHRbMV1bMV0qTV0sW3RbMl1bMF0qTSx0WzJdWzFdKk1dXX0pKX0pKSxhPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByLG49dChlWzBdWzBdLGVbMF1bMV0pWzBdLGk9dChlWzJdWzBdLGVbMl1bMV0pWzBdLGE9dChlWzFdWzBdLGVbMF1bMV0pWzFdLG89dChlWzFdWzBdLGVbMV1bMV0pWzFdO3JldHVybiBhPm8mJihyPWEsYT1vLG89ciksW1tuLGFdLFtpLG9dXX0pKX0pKSxzKTpyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bW3RbMF1bMF0qQSx0WzBdWzFdKkFdLFt0WzFdWzBdKkEsdFsxXVsxXSpBXSxbdFsyXVswXSpBLHRbMl1bMV0qQV1dfSkpfSkpfSxudWxsIT1yJiZzLmxvYmVzKHIpLHN9S3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU+LS43MTA5ODg5NTk2MjA3NTY3P1cuaW52ZXJ0KHQsZS0uMDUyODAzNTI3NDU0Mik6US5pbnZlcnQodCxlKX0sUXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSk+LjcxMDk4ODk1OTYyMDc1Njc/Vy5pbnZlcnQodCxlKyhlPjA/LjA1MjgwMzUyNzQ1NDI6LS4wNTI4MDM1Mjc0NTQyKSk6US5pbnZlcnQodCxlKX07dmFyIG9lPVtbW1stMTgwLDBdLFstMTAwLDkwXSxbLTQwLDBdXSxbWy00MCwwXSxbMzAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstMTYwLC05MF0sWy0xMDAsMF1dLFtbLTEwMCwwXSxbLTYwLC05MF0sWy0yMCwwXV0sW1stMjAsMF0sWzIwLC05MF0sWzgwLDBdXSxbWzgwLDBdLFsxNDAsLTkwXSxbMTgwLDBdXV1dO3ZhciBzZT1bW1tbLTE4MCwwXSxbLTEwMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzMwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTE2MCwtOTBdLFstMTAwLDBdXSxbWy0xMDAsMF0sWy02MCwtOTBdLFstMjAsMF1dLFtbLTIwLDBdLFsyMCwtOTBdLFs4MCwwXV0sW1s4MCwwXSxbMTQwLC05MF0sWzE4MCwwXV1dXTt2YXIgbGU9W1tbWy0xODAsMF0sWy0xMDAsOTBdLFstNDAsMF1dLFtbLTQwLDBdLFszMCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy0xNjAsLTkwXSxbLTEwMCwwXV0sW1stMTAwLDBdLFstNjAsLTkwXSxbLTIwLDBdXSxbWy0yMCwwXSxbMjAsLTkwXSxbODAsMF1dLFtbODAsMF0sWzE0MCwtOTBdLFsxODAsMF1dXV07dmFyIGNlPVtbW1stMTgwLDBdLFstOTAsOTBdLFswLDBdXSxbWzAsMF0sWzkwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTkwLC05MF0sWzAsMF1dLFtbMCwwXSxbOTAsLTkwXSxbMTgwLDBdXV1dO3ZhciB1ZT1bW1tbLTE4MCwzNV0sWy0zMCw5MF0sWzAsMzVdXSxbWzAsMzVdLFszMCw5MF0sWzE4MCwzNV1dXSxbW1stMTgwLC0xMF0sWy0xMDIsLTkwXSxbLTY1LC0xMF1dLFtbLTY1LC0xMF0sWzUsLTkwXSxbNzcsLTEwXV0sW1s3NywtMTBdLFsxMDMsLTkwXSxbMTgwLC0xMF1dXV07dmFyIGZlPVtbW1stMTgwLDBdLFstMTEwLDkwXSxbLTQwLDBdXSxbWy00MCwwXSxbMCw5MF0sWzQwLDBdXSxbWzQwLDBdLFsxMTAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstMTEwLC05MF0sWy00MCwwXV0sW1stNDAsMF0sWzAsLTkwXSxbNDAsMF1dLFtbNDAsMF0sWzExMCwtOTBdLFsxODAsMF1dXV07ZnVuY3Rpb24gaGUodCxlKXtyZXR1cm5bMy9rKnQqTCh5KnkvMy1lKmUpLGVdfWZ1bmN0aW9uIHBlKHQpe2Z1bmN0aW9uIGUoZSxyKXtpZihuKG4ocikteCk8dilyZXR1cm5bMCxyPDA/LTI6Ml07dmFyIGk9bShyKSxhPWgoKDEraSkvKDEtaSksdC8yKSxzPS41KihhKzEvYSkrbyhlKj10KTtyZXR1cm5bMiptKGUpL3MsKGEtMS9hKS9zXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXt2YXIgaT1uKHIpO2lmKG4oaS0yKTx2KXJldHVybiBlP251bGw6WzAsZChyKSp4XTtpZihpPjIpcmV0dXJuIG51bGw7dmFyIG89KGUvPTIpKmUscz0oci89MikqcixsPTIqci8oMStvK3MpO3JldHVybiBsPWgoKDErbCkvKDEtbCksMS90KSxbYSgyKmUsMS1vLXMpL3QsUygobC0xKS8obCsxKSldfSxlfWhlLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybltrLzMqdC9MKHkqeS8zLWUqZSksZV19O3ZhciBkZT15L3c7ZnVuY3Rpb24gbWUodCxlKXtyZXR1cm5bdCooMStMKG8oZSkpKS8yLGUvKG8oZS8yKSpvKHQvNikpXX1mdW5jdGlvbiBnZSh0LGUpe3ZhciByPXQqdCxuPWUqZTtyZXR1cm5bdCooLjk3NTUzNCtuKigtLjAxNDMwNTkqci0uMTE5MTYxKy0uMDU0NzAwOSpuKSksZSooMS4wMDM4NCtyKiguMDgwMjg5NCstLjAyODU1Km4rMTk5MDI1ZS05KnIpK24qKC4wOTk4OTA5Ky0uMDQ5MTAzMipuKSldfWZ1bmN0aW9uIHZlKHQsZSl7cmV0dXJuW20odCkvbyhlKSxnKGUpKm8odCldfWZ1bmN0aW9uIHllKHQpe3ZhciBlPW8odCkscj1nKGIrdC8yKTtmdW5jdGlvbiBpKGksYSl7dmFyIG89YS10LHM9bihvKTx2P2kqZTpuKHM9YithLzIpPHZ8fG4obihzKS14KTx2PzA6aSpvL2MoZyhzKS9yKTtyZXR1cm5bcyxvXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24oaSxhKXt2YXIgbyxzPWErdDtyZXR1cm5bbihhKTx2P2kvZTpuKG89YitzLzIpPHZ8fG4obihvKS14KTx2PzA6aSpjKGcobykvcikvYSxzXX0saX1mdW5jdGlvbiB4ZSh0LGUpe3JldHVyblt0LDEuMjUqYyhnKGIrLjQqZSkpXX1mdW5jdGlvbiBiZSh0KXt2YXIgZT10Lmxlbmd0aC0xO2Z1bmN0aW9uIHIocixuKXtmb3IodmFyIGksYT1vKG4pLHM9Mi8oMSthKm8ocikpLGw9cyphKm0ociksYz1zKm0obiksdT1lLGY9dFt1XSxoPWZbMF0scD1mWzFdOy0tdT49MDspaD0oZj10W3VdKVswXStsKihpPWgpLWMqcCxwPWZbMV0rbCpwK2MqaTtyZXR1cm5baD1sKihpPWgpLWMqcCxwPWwqcCtjKmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLHMpe3ZhciBsPTIwLGM9cix1PXM7ZG97Zm9yKHZhciBmLGg9ZSxwPXRbaF0sZD1wWzBdLGc9cFsxXSx2PTAseT0wOy0taD49MDspdj1kK2MqKGY9diktdSp5LHk9ZytjKnkrdSpmLGQ9KHA9dFtoXSlbMF0rYyooZj1kKS11KmcsZz1wWzFdK2MqZyt1KmY7dmFyIHgsYixfPSh2PWQrYyooZj12KS11KnkpKnYrKHk9ZytjKnkrdSpmKSp5O2MtPXg9KChkPWMqKGY9ZCktdSpnLXIpKnYrKGc9YypnK3UqZi1zKSp5KS9fLHUtPWI9KGcqdi1kKnkpL199d2hpbGUobih4KStuKGIpPjFlLTEyJiYtLWw+MCk7aWYobCl7dmFyIHc9TChjKmMrdSp1KSxUPTIqaSguNSp3KSxrPW0oVCk7cmV0dXJuW2EoYyprLHcqbyhUKSksdz9TKHUqay93KTowXX19LHJ9bWUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KSxpPW4oZSksYT12LHM9eDtpPGRlP3MqPWkvZGU6YSs9NipFKGRlL2kpO2Zvcih2YXIgbD0wO2w8MjU7bCsrKXt2YXIgYz1tKHMpLHU9TChvKHMpKSxmPW0ocy8yKSxoPW8ocy8yKSxwPW0oYS82KSxkPW8oYS82KSxnPS41KmEqKDErdSktcix5PXMvKGgqZCktaSxiPXU/LS4yNSphKmMvdTowLF89LjUqKDErdSksdz0oMSsuNSpzKmYvaCkvKGgqZCksVD1zL2gqKHAvNikvKGQqZCksaz1iKlQtdypfLEE9KGcqVC15Kl8pL2ssTT0oeSpiLWcqdykvaztpZihzLT1BLGEtPU0sbihBKTx2JiZuKE0pPHYpYnJlYWt9cmV0dXJuW3Q8MD8tYTphLGU8MD8tczpzXX0sZ2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZCh0KSp5LGk9ZS8yLGE9NTA7ZG97dmFyIG89cipyLHM9aSppLGw9cippLGM9ciooLjk3NTUzNCtzKigtLjAxNDMwNTkqby0uMTE5MTYxKy0uMDU0NzAwOSpzKSktdCx1PWkqKDEuMDAzODQrbyooLjA4MDI4OTQrLS4wMjg1NSpzKzE5OTAyNWUtOSpvKStzKiguMDk5ODkwOSstLjA0OTEwMzIqcykpLWUsZj0uOTc1NTM0LXMqKC4xMTkxNjErMypvKi4wMTQzMDU5Ky4wNTQ3MDA5KnMpLGg9LWwqKC4yMzgzMjIrLjIxODgwMzYqcysuMDI4NjExOCpvKSxwPWwqKC4xNjA1Nzg4Kzc5NjFlLTcqbystLjA1NzEqcyksbT0xLjAwMzg0K28qKC4wODAyODk0KzE5OTAyNWUtOSpvKStzKigzKiguMDk5ODkwOS0uMDI4NTUqbyktLjI0NTUxNipzKSxnPWgqcC1tKmYseD0odSpoLWMqbSkvZyxiPShjKnAtdSpmKS9nO3ItPXgsaS09Yn13aGlsZSgobih4KT52fHxuKGIpPnYpJiYtLWE+MCk7cmV0dXJuIGEmJltyLGldfSx2ZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10KnQsbj1lKmUrMSxpPXIrbixhPXQ/XypMKChpLUwoaSppLTQqcikpL3IpOjEvTChuKTtyZXR1cm5bUyh0KmEpLGQoZSkqRShhKV19LHhlLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSppKHMoLjgqZSkpLS42MjUqeV19O3ZhciBfZT1bWy45OTcyNTIzLDBdLFsuMDA1MjUxMywtLjAwNDExNzVdLFsuMDA3NDYwNiwuMDA0ODEyNV0sWy0uMDE1Mzc4MywtLjE5NjgyNTNdLFsuMDYzNjg3MSwtLjE0MDgwMjddLFsuMzY2MDk3NiwtLjI5MzczODJdXSx3ZT1bWy45ODg3OSwwXSxbMCwwXSxbLS4wNTA5MDksMF0sWzAsMF0sWy4wNzU1MjgsMF1dLFRlPVtbLjk4NDI5OSwwXSxbLjAyMTE2NDIsLjAwMzc2MDhdLFstLjEwMzYwMTgsLS4wNTc1MTAyXSxbLS4wMzI5MDk1LC0uMDMyMDExOV0sWy4wNDk5NDcxLC4xMjIzMzM1XSxbLjAyNjA0NiwuMDg5OTgwNV0sWzczODhlLTcsLS4xNDM1NzkyXSxbLjAwNzU4NDgsLS4xMzM0MTA4XSxbLS4wMjE2NDczLC4wNzc2NjQ1XSxbLS4wMjI1MTYxLC4wODUzNjczXV0sa2U9W1suOTI0NSwwXSxbMCwwXSxbLjAxOTQzLDBdXSxBZT1bWy43MjEzMTYsMF0sWzAsMF0sWy0uMDA4ODE2MjUsLS4wMDYxNzMyNV1dO2Z1bmN0aW9uIE1lKHQscil7dmFyIG49ZS5nZW9Qcm9qZWN0aW9uKGJlKHQpKS5yb3RhdGUocikuY2xpcEFuZ2xlKDkwKSxpPWUuZ2VvUm90YXRpb24ociksYT1uLmNlbnRlcjtyZXR1cm4gZGVsZXRlIG4ucm90YXRlLG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EoaSh0KSk6aS5pbnZlcnQoYSgpKX0sbn12YXIgU2U9TCg2KSxFZT1MKDcpO2Z1bmN0aW9uIExlKHQsZSl7dmFyIHI9Uyg3Km0oZSkvKDMqU2UpKTtyZXR1cm5bU2UqdCooMipvKDIqci8zKS0xKS9FZSw5Km0oci8zKS9FZV19ZnVuY3Rpb24gQ2UodCxlKXtmb3IodmFyIHIsaT0oMStfKSptKGUpLGE9ZSxzPTA7czwyNSYmKGEtPXI9KG0oYS8yKSttKGEpLWkpLyguNSpvKGEvMikrbyhhKSksIShuKHIpPHYpKTtzKyspO3JldHVyblt0KigxKzIqbyhhKS9vKGEvMikpLygzKncpLDIqTCgzKSptKGEvMikvTCgyK3cpXX1mdW5jdGlvbiBQZSh0LGUpe2Zvcih2YXIgcixpPUwoNi8oNCt5KSksYT0oMSt5LzQpKm0oZSkscz1lLzIsbD0wO2w8MjUmJihzLT1yPShzLzIrbShzKS1hKS8oLjUrbyhzKSksIShuKHIpPHYpKTtsKyspO3JldHVybltpKiguNStvKHMpKSp0LzEuNSxpKnNdfWZ1bmN0aW9uIEllKHQsZSl7dmFyIHI9ZSplLG49cipyLGk9cipuO3JldHVyblt0KiguODQ3MTktLjEzMDYzKnIraSppKiguMDU0OTQqci0uMDQ1MTUtLjAyMzI2Km4rLjAwMzMxKmkpKSxlKigxLjAxMTgzK24qbiooLjAxOTI2KnItLjAyNjI1LS4wMDM5NipuKSldfWZ1bmN0aW9uIE9lKHQsZSl7cmV0dXJuW3QqKDErbyhlKSkvMiwyKihlLWcoZS8yKSldfUxlLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTMqUyhlKkVlLzkpO3JldHVyblt0KkVlLyhTZSooMipvKDIqci8zKS0xKSksUygzKm0ocikqU2UvNyldfSxDZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lKkwoMit3KS8oMipMKDMpKSxuPTIqUyhyKTtyZXR1cm5bMyp3KnQvKDErMipvKG4pL28obi8yKSksUygocittKG4pKS8oMStfKSldfSxQZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1MKDYvKDQreSkpLGk9ZS9yO3JldHVybiBuKG4oaSkteCk8diYmKGk9aTwwPy14OngpLFsxLjUqdC8ociooLjUrbyhpKSkpLFMoKGkvMittKGkpKS8oMSt5LzQpKV19LEllLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9ZSxsPTI1O2Rve3MtPXI9KHMqKDEuMDExODMrKGE9KGk9cypzKSppKSphKiguMDE5MjYqaS0uMDI2MjUtLjAwMzk2KmEpKS1lKS8oMS4wMTE4MythKmEqKC4yMTE4NippLS4yMzYyNSstLjA1MTQ4KmEpKX13aGlsZShuKHIpPjFlLTEyJiYtLWw+MCk7cmV0dXJuW3QvKC44NDcxOS0uMTMwNjMqKGk9cypzKSsobz1pKihhPWkqaSkpKm8qKC4wNTQ5NCppLS4wNDUxNS0uMDIzMjYqYSsuMDAzMzEqbykpLHNdfSxPZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS8yLGk9MCxhPTEvMDtpPDEwJiZuKGEpPnY7KytpKXt2YXIgcz1vKGUvMik7ZS09YT0oZS1nKGUvMiktcikvKDEtLjUvKHMqcykpfXJldHVyblsyKnQvKDErbyhlKSksZV19O3ZhciB6ZT1bW1tbLTE4MCwwXSxbLTkwLDkwXSxbMCwwXV0sW1swLDBdLFs5MCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy05MCwtOTBdLFswLDBdXSxbWzAsMF0sWzkwLC05MF0sWzE4MCwwXV1dXTtmdW5jdGlvbiBEZSh0LGUpe3ZhciByPW0oZSksaT1vKGUpLGE9ZCh0KTtpZigwPT09dHx8bihlKT09PXgpcmV0dXJuWzAsZV07aWYoMD09PWUpcmV0dXJuW3QsMF07aWYobih0KT09PXgpcmV0dXJuW3QqaSx4KnJdO3ZhciBzPXkvKDIqdCktMip0L3ksbD0yKmUveSxjPSgxLWwqbCkvKHItbCksdT1zKnMsZj1jKmMsaD0xK3UvZixwPTErZi91LGc9KHMqci9jLXMvMikvaCx2PShmKnIvdStjLzIpL3AsYj12KnYtKGYqcipyL3UrYypyLTEpL3A7cmV0dXJuW3gqKGcrTChnKmcraSppL2gpKmEpLHgqKHYrTChiPDA/MDpiKSpkKC1lKnMpKmEpXX1EZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0odC89eCkqdCxuPXIrKGUvPXgpKmUsaT15Knk7cmV0dXJuW3Q/KG4tMStMKCgxLW4pKigxLW4pKzQqcikpLygyKnQpKng6MCxWKChmdW5jdGlvbih0KXtyZXR1cm4gbiooeSptKHQpLTIqdCkqeSs0KnQqdCooZS1tKHQpKSsyKnkqdC1pKmV9KSwwKV19O2Z1bmN0aW9uIFJlKHQsZSl7dmFyIHI9ZSplO3JldHVyblt0LGUqKDEuMDE0OCtyKnIqKC4yMzE4NStyKiguMDI0MDYqci0uMTQ0OTkpKSldfWZ1bmN0aW9uIEZlKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO3ZhciByPWcoZSksaT10Km0oZSk7cmV0dXJuW20oaSkvcixlKygxLW8oaSkpL3JdfWZ1bmN0aW9uIEJlKHQsZSl7dmFyIHI9amUodFsxXSx0WzBdKSxuPWplKGVbMV0sZVswXSksaT1mdW5jdGlvbih0LGUpe3JldHVybiBhKHRbMF0qZVsxXS10WzFdKmVbMF0sdFswXSplWzBdK3RbMV0qZVsxXSl9KHIsbikscz1VZShyKS9VZShuKTtyZXR1cm4gTmUoWzEsMCx0WzBdWzBdLDAsMSx0WzBdWzFdXSxOZShbcywwLDAsMCxzLDBdLE5lKFtvKGkpLG0oaSksMCwtbShpKSxvKGkpLDBdLFsxLDAsLWVbMF1bMF0sMCwxLC1lWzBdWzFdXSkpKX1mdW5jdGlvbiBOZSh0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsxXSplWzNdLHRbMF0qZVsxXSt0WzFdKmVbNF0sdFswXSplWzJdK3RbMV0qZVs1XSt0WzJdLHRbM10qZVswXSt0WzRdKmVbM10sdFszXSplWzFdK3RbNF0qZVs0XSx0WzNdKmVbMl0rdFs0XSplWzVdK3RbNV1dfWZ1bmN0aW9uIGplKHQsZSl7cmV0dXJuW3RbMF0tZVswXSx0WzFdLWVbMV1dfWZ1bmN0aW9uIFVlKHQpe3JldHVybiBMKHRbMF0qdFswXSt0WzFdKnRbMV0pfWZ1bmN0aW9uIFZlKHQscixpKXtmdW5jdGlvbiBhKHQsZSl7dmFyIG4saT1yKHQsZSksYT1pLnByb2plY3QoW3QqQSxlKkFdKTtyZXR1cm4obj1pLnRyYW5zZm9ybSk/W25bMF0qYVswXStuWzFdKmFbMV0rblsyXSwtKG5bM10qYVswXStuWzRdKmFbMV0rbls1XSldOihhWzFdPS1hWzFdLGEpfSFmdW5jdGlvbiB0KGUscil7aWYoZS5lZGdlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxuPXRbZS0xXSxpPTA7aTxlOysraSlyLnB1c2goW24sbj10W2ldXSk7cmV0dXJuIHJ9KGUuZmFjZSksci5mYWNlKXt2YXIgbj1lLnNoYXJlZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC5sZW5ndGgsYT1udWxsLG89MDtvPGk7KytvKXtyPXRbb107Zm9yKHZhciBzPWUubGVuZ3RoOy0tcz49MDspaWYobj1lW3NdLHJbMF09PT1uWzBdJiZyWzFdPT09blsxXSl7aWYoYSlyZXR1cm5bYSxyXTthPXJ9fX0oZS5mYWNlLHIuZmFjZSksaT1CZShuLm1hcChyLnByb2plY3QpLG4ubWFwKGUucHJvamVjdCkpO2UudHJhbnNmb3JtPXIudHJhbnNmb3JtP05lKHIudHJhbnNmb3JtLGkpOmk7Zm9yKHZhciBhPXIuZWRnZXMsbz0wLHM9YS5sZW5ndGg7bzxzOysrbylIZShuWzBdLGFbb11bMV0pJiZIZShuWzFdLGFbb11bMF0pJiYoYVtvXT1lKSxIZShuWzBdLGFbb11bMF0pJiZIZShuWzFdLGFbb11bMV0pJiYoYVtvXT1lKTtmb3IoYT1lLmVkZ2VzLG89MCxzPWEubGVuZ3RoO288czsrK28pSGUoblswXSxhW29dWzBdKSYmSGUoblsxXSxhW29dWzFdKSYmKGFbb109ciksSGUoblswXSxhW29dWzFdKSYmSGUoblsxXSxhW29dWzBdKSYmKGFbb109cil9ZWxzZSBlLnRyYW5zZm9ybT1yLnRyYW5zZm9ybTtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHIpe3QocixlKX0pKTtyZXR1cm4gZX0odCx7dHJhbnNmb3JtOm51bGx9KSxxZSh0KSYmKGEuaW52ZXJ0PWZ1bmN0aW9uKGUsbil7dmFyIGk9ZnVuY3Rpb24gdChlLG4pe3ZhciBpPWUucHJvamVjdC5pbnZlcnQsYT1lLnRyYW5zZm9ybSxvPW47YSYmKGE9ZnVuY3Rpb24odCl7dmFyIGU9MS8odFswXSp0WzRdLXRbMV0qdFszXSk7cmV0dXJuW2UqdFs0XSwtZSp0WzFdLGUqKHRbMV0qdFs1XS10WzJdKnRbNF0pLC1lKnRbM10sZSp0WzBdLGUqKHRbMl0qdFszXS10WzBdKnRbNV0pXX0oYSksbz1bYVswXSpvWzBdK2FbMV0qb1sxXSthWzJdLGFbM10qb1swXSthWzRdKm9bMV0rYVs1XV0pO2lmKGkmJmU9PT1mdW5jdGlvbih0KXtyZXR1cm4gcih0WzBdKk0sdFsxXSpNKX0ocz1pKG8pKSlyZXR1cm4gcztmb3IodmFyIHMsbD1lLmNoaWxkcmVuLGM9MCx1PWwmJmwubGVuZ3RoO2M8dTsrK2MpaWYocz10KGxbY10sbikpcmV0dXJuIHN9KHQsW2UsLW5dKTtyZXR1cm4gaSYmKGlbMF0qPU0saVsxXSo9TSxpKX0pO3ZhciBvPWUuZ2VvUHJvamVjdGlvbihhKSxzPW8uc3RyZWFtO3JldHVybiBvLnN0cmVhbT1mdW5jdGlvbihyKXt2YXIgaT1vLnJvdGF0ZSgpLGE9cyhyKSxsPShvLnJvdGF0ZShbMCwwXSkscyhyKSk7cmV0dXJuIG8ucm90YXRlKGkpLGEuc3BoZXJlPWZ1bmN0aW9uKCl7bC5wb2x5Z29uU3RhcnQoKSxsLmxpbmVTdGFydCgpLGZ1bmN0aW9uIHQocixpLGEpe3ZhciBvLHMsbD1pLmVkZ2VzLGM9bC5sZW5ndGgsdT17dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6aS5mYWNlfSxmPWkuZmFjZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiA5MCE9PW4odFsxXSl9KSksaD1lLmdlb0JvdW5kcyh7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6Zn0pLHA9ITEsZD0tMSxtPWhbMV1bMF0taFswXVswXSxnPTE4MD09PW18fDM2MD09PW0/WyhoWzBdWzBdK2hbMV1bMF0pLzIsKGhbMF1bMV0raFsxXVsxXSkvMl06ZS5nZW9DZW50cm9pZCh1KTtpZihhKWZvcig7KytkPGMmJmxbZF0hPT1hOyk7KytkO2Zvcih2YXIgeT0wO3k8YzsrK3kpcz1sWyh5K2QpJWNdLEFycmF5LmlzQXJyYXkocyk/KHB8fChyLnBvaW50KChvPWUuZ2VvSW50ZXJwb2xhdGUoc1swXSxnKSh2KSlbMF0sb1sxXSkscD0hMCksci5wb2ludCgobz1lLmdlb0ludGVycG9sYXRlKHNbMV0sZykodikpWzBdLG9bMV0pKToocD0hMSxzIT09YSYmdChyLHMsaSkpfShsLHQpLGwubGluZUVuZCgpLGwucG9seWdvbkVuZCgpfSxhfSxvLmFuZ2xlKG51bGw9PWk/LTMwOmkqQSl9ZnVuY3Rpb24gSGUodCxlKXtyZXR1cm4gdCYmZSYmdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfWZ1bmN0aW9uIHFlKHQpe3JldHVybiB0LnByb2plY3QuaW52ZXJ0fHx0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLnNvbWUocWUpfVJlLmludmVydD1mdW5jdGlvbih0LGUpe2U+MS43OTA4NTcxODM/ZT0xLjc5MDg1NzE4MzplPC0xLjc5MDg1NzE4MyYmKGU9LTEuNzkwODU3MTgzKTt2YXIgcixpPWU7ZG97dmFyIGE9aSppO2ktPXI9KGkqKDEuMDE0OCthKmEqKC4yMzE4NSthKiguMDI0MDYqYS0uMTQ0OTkpKSktZSkvKDEuMDE0OCthKmEqKDUqLjIzMTg1K2EqKC4yMTY1NCphLTEuMDE0OTMpKSl9d2hpbGUobihyKT52KTtyZXR1cm5bdCxpXX0sRmUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO3ZhciByLGk9dCp0K2UqZSxhPS41KmUscz0xMDtkb3t2YXIgbD1nKGEpLGM9MS9vKGEpLHU9aS0yKmUqYSthKmE7YS09cj0obCp1KzIqKGEtZSkpLygyK3UqYypjKzIqKGEtZSkqbCl9d2hpbGUobihyKT52JiYtLXM+MCk7cmV0dXJuIGw9ZyhhKSxbKG4oZSk8bihhKzEvbCk/Uyh0KmwpOmQoZSkqZCh0KSooRShuKHQqbCkpK3gpKS9tKGEpLGFdfTt2YXIgR2U9W1swLDkwXSxbLTkwLDBdLFswLDBdLFs5MCwwXSxbMTgwLDBdLFswLC05MF1dLFllPVtbMCwyLDFdLFswLDMsMl0sWzUsMSwyXSxbNSwyLDNdLFswLDEsNF0sWzAsNCwzXSxbNSw0LDFdLFs1LDMsNF1dLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gR2VbdF19KSl9KSk7dmFyIFdlPTIvTCgzKTtmdW5jdGlvbiBYZSh0LGUpe3ZhciByPWx0KHQsZSk7cmV0dXJuW3JbMF0qV2UsclsxXV19ZnVuY3Rpb24gWmUodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtyPG47KytyKWkrPXRbcl0qZVtyXTtyZXR1cm4gaX1mdW5jdGlvbiBKZSh0KXtyZXR1cm5bYSh0WzFdLHRbMF0pKkEsUyh1KC0xLGYoMSx0WzJdKSkpKkFdfWZ1bmN0aW9uIEtlKHQpe3ZhciBlPXRbMF0qTSxyPXRbMV0qTSxuPW8ocik7cmV0dXJuW24qbyhlKSxuKm0oZSksbShyKV19ZnVuY3Rpb24gUWUoKXt9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdHIodCxlKX0pKX19ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm57dHlwZToiRmVhdHVyZSIsaWQ6dC5pZCxwcm9wZXJ0aWVzOnQucHJvcGVydGllcyxnZW9tZXRyeTplcih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiBlcih0LHIpe2lmKCF0KXJldHVybiBudWxsO2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09dC50eXBlKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dC5nZW9tZXRyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVyKHQsZSl9KSl9fSh0LHIpO3ZhciBuO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6bj1pcjticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpuPWFyO2JyZWFrO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOmNhc2UiU3BoZXJlIjpuPW9yO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIGUuZ2VvU3RyZWFtKHQscihuKSksbi5yZXN1bHQoKX1YZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbHQuaW52ZXJ0KHQvV2UsZSl9O3ZhciBycj1bXSxucj1bXSxpcj17cG9pbnQ6ZnVuY3Rpb24odCxlKXtyci5wdXNoKFt0LGVdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9cnIubGVuZ3RoP3JyLmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6cnJbMF19Ont0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczpycn06bnVsbDtyZXR1cm4gcnI9W10sdH19LGFyPXtsaW5lU3RhcnQ6UWUscG9pbnQ6ZnVuY3Rpb24odCxlKXtyci5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3JyLmxlbmd0aCYmKG5yLnB1c2gocnIpLHJyPVtdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9bnIubGVuZ3RoP25yLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpuclswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bnJ9Om51bGw7cmV0dXJuIG5yPVtdLHR9fSxvcj17cG9seWdvblN0YXJ0OlFlLGxpbmVTdGFydDpRZSxwb2ludDpmdW5jdGlvbih0LGUpe3JyLnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9cnIubGVuZ3RoO2lmKHQpe2Rve3JyLnB1c2gocnJbMF0uc2xpY2UoKSl9d2hpbGUoKyt0PDQpO25yLnB1c2gocnIpLHJyPVtdfX0scG9seWdvbkVuZDpRZSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZighbnIubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIG5yLmZvckVhY2goKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8NClyZXR1cm4hMTtmb3IodmFyIGUscj0wLG49dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07KytyPGU7KW4rPXRbci0xXVsxXSp0W3JdWzBdLXRbci0xXVswXSp0W3JdWzFdO3JldHVybiBuPD0wfShyKT9lLnB1c2gocik6dC5wdXNoKFtyXSl9KSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZSgoZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0saT0hMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBsPXRbYV0sYz1sWzBdLHU9bFsxXSxmPXRbc10saD1mWzBdLHA9ZlsxXTt1Pm5ecD5uJiZyPChoLWMpKihuLXUpLyhwLXUpK2MmJihpPSFpKX1yZXR1cm4gaX0odFswXSxyKSlyZXR1cm4gdC5wdXNoKGUpLCEwfSkpfHx0LnB1c2goW2VdKX0pKSxucj1bXSx0Lmxlbmd0aD90Lmxlbmd0aD4xP3t0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9Ont0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0WzBdfTpudWxsfX07ZnVuY3Rpb24gc3IodCl7dmFyIHI9dCh4LDApWzBdLXQoLXgsMClbMF07ZnVuY3Rpb24gaShlLGkpe3ZhciBhPW4oZSk8eCxvPXQoYT9lOmU+MD9lLXk6ZSt5LGkpLHM9KG9bMF0tb1sxXSkqXyxsPShvWzBdK29bMV0pKl87aWYoYSlyZXR1cm5bcyxsXTt2YXIgYz1yKl8sdT1zPjBebD4wPy0xOjE7cmV0dXJuW3Uqcy1kKGwpKmMsdSpsLWQocykqY119cmV0dXJuIHQuaW52ZXJ0JiYoaS5pbnZlcnQ9ZnVuY3Rpb24oZSxpKXt2YXIgYT0oZStpKSpfLG89KGktZSkqXyxzPW4oYSk8LjUqciYmbihvKTwuNSpyO2lmKCFzKXt2YXIgbD1yKl8sYz1hPjBebz4wPy0xOjEsdT0tYyplKyhvPjA/MTotMSkqbCxmPS1jKmkrKGE+MD8xOi0xKSpsO2E9KC11LWYpKl8sbz0odS1mKSpffXZhciBoPXQuaW52ZXJ0KGEsbyk7cmV0dXJuIHN8fChoWzBdKz1hPjA/eToteSksaH0pLGUuZ2VvUHJvamVjdGlvbihpKS5yb3RhdGUoWy05MCwtOTAsNDVdKS5jbGlwQW5nbGUoMTc5Ljk5OSl9ZnVuY3Rpb24gbHIoKXtyZXR1cm4gc3IoVXQpLnNjYWxlKDExMS40OCl9ZnVuY3Rpb24gY3IodCl7dmFyIGU9bSh0KTtmdW5jdGlvbiByKHIsbil7dmFyIGE9ZT9nKHIqZS8yKS9lOnIvMjtpZighbilyZXR1cm5bMiphLC10XTt2YXIgcz0yKmkoYSptKG4pKSxsPTEvZyhuKTtyZXR1cm5bbShzKSpsLG4rKDEtbyhzKSkqbC10XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixhKXtpZihuKGErPXQpPHYpcmV0dXJuW2U/MippKGUqci8yKS9lOnIsMF07dmFyIHMsbD1yKnIrYSphLGM9MCx1PTEwO2Rve3ZhciBmPWcoYyksaD0xL28oYykscD1sLTIqYSpjK2MqYztjLT1zPShmKnArMiooYy1hKSkvKDIrcCpoKmgrMiooYy1hKSpmKX13aGlsZShuKHMpPnYmJi0tdT4wKTt2YXIgZD1yKihmPWcoYykpLHg9ZyhuKGEpPG4oYysxL2YpPy41KlMoZCk6LjUqRShkKSt5LzQpL20oYyk7cmV0dXJuW2U/MippKGUqeCkvZToyKngsY119LHJ9dmFyIHVyPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtmdW5jdGlvbiBmcih0LGUpe3ZhciByLGk9ZigxOCwzNipuKGUpL3kpLGE9bChpKSxvPWktYSxzPShyPXVyW2FdKVswXSxjPXJbMV0sdT0ocj11clsrK2FdKVswXSxoPXJbMV0scD0ocj11cltmKDE5LCsrYSldKVswXSxkPXJbMV07cmV0dXJuW3QqKHUrbyoocC1zKS8yK28qbyoocC0yKnUrcykvMiksKGU+MD94Oi14KSooaCtvKihkLWMpLzIrbypvKihkLTIqaCtjKS8yKV19ZnVuY3Rpb24gaHIodCxlKXt2YXIgcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49byhyKSxpPSh0LTEpLyh0LW4qbyhlKSk7cmV0dXJuW2kqbiptKGUpLGkqbShyKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7dmFyIG49ZSplK3IqcixpPUwobiksbz0odC1MKDEtbioodCsxKS8odC0xKSkpLygodC0xKS9pK2kvKHQtMSkpO3JldHVyblthKGUqbyxpKkwoMS1vKm8pKSxpP1MocipvL2kpOjBdfSxlfSh0KTtpZighZSlyZXR1cm4gcjt2YXIgbj1vKGUpLGk9bShlKTtmdW5jdGlvbiBzKGUsYSl7dmFyIG89cihlLGEpLHM9b1sxXSxsPXMqaS8odC0xKStuO3JldHVybltvWzBdKm4vbCxzL2xdfXJldHVybiBzLmludmVydD1mdW5jdGlvbihlLGEpe3ZhciBvPSh0LTEpLyh0LTEtYSppKTtyZXR1cm4gci5pbnZlcnQobyplLG8qYSpuKX0sc311ci5mb3JFYWNoKChmdW5jdGlvbih0KXt0WzFdKj0xLjAxNDR9KSksZnIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS94LGk9OTAqcixhPWYoMTgsbihpLzUpKSxvPXUoMCxsKGEpKTtkb3t2YXIgcz11cltvXVsxXSxjPXVyW28rMV1bMV0saD11cltmKDE5LG8rMildWzFdLHA9aC1zLGQ9aC0yKmMrcyxtPTIqKG4ociktYykvcCxnPWQvcCx2PW0qKDEtZyptKigxLTIqZyptKSk7aWYodj49MHx8MT09PW8pe2k9KGU+PTA/NTotNSkqKHYrYSk7dmFyIHksYj01MDtkb3t2PShhPWYoMTgsbihpKS81KSktKG89bChhKSkscz11cltvXVsxXSxjPXVyW28rMV1bMV0saD11cltmKDE5LG8rMildWzFdLGktPSh5PShlPj0wP3g6LXgpKihjK3YqKGgtcykvMit2KnYqKGgtMipjK3MpLzIpLWUpKkF9d2hpbGUobih5KT4xZS0xMiYmLS1iPjApO2JyZWFrfX13aGlsZSgtLW8+PTApO3ZhciBfPXVyW29dWzBdLHc9dXJbbysxXVswXSxUPXVyW2YoMTksbysyKV1bMF07cmV0dXJuW3QvKHcrdiooVC1fKS8yK3YqdiooVC0yKncrXykvMiksaSpNXX07dmFyIHByPS0xNzkuOTk5OSxkcj0xNzkuOTk5OSxtcj0tODkuOTk5OTtmdW5jdGlvbiBncih0KXtyZXR1cm4gdC5sZW5ndGg+MH1mdW5jdGlvbiB2cih0KXtyZXR1cm4tOTA9PT10fHw5MD09PXQ/WzAsdF06Wy0xODAsKGU9dCxNYXRoLmZsb29yKDFlNCplKS8xZTQpXTt2YXIgZX1mdW5jdGlvbiB5cih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPSExO3JldHVybiBlPD1wcj8oZT0tMTgwLG49ITApOmU+PWRyJiYoZT0xODAsbj0hMCkscjw9bXI/KHI9LTkwLG49ITApOnI+PTg5Ljk5OTkmJihyPTkwLG49ITApLG4/W2Uscl06dH1mdW5jdGlvbiB4cih0KXtyZXR1cm4gdC5tYXAoeXIpfWZ1bmN0aW9uIGJyKHQsZSxyKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pe3ZhciBhPXRbbl0uc2xpY2UoKTtyLnB1c2goe2luZGV4Oi0xLHBvbHlnb246ZSxyaW5nOmF9KTtmb3IodmFyIG89MCxzPWEubGVuZ3RoO288czsrK28pe3ZhciBsPWFbb10sYz1sWzBdLHU9bFsxXTtpZihjPD1wcnx8Yz49ZHJ8fHU8PW1yfHx1Pj04OS45OTk5KXthW29dPXlyKGwpO2Zvcih2YXIgZj1vKzE7ZjxzOysrZil7dmFyIGg9YVtmXSxwPWhbMF0sZD1oWzFdO2lmKHA+cHImJnA8ZHImJmQ+bXImJmQ8ODkuOTk5OSlicmVha31pZihmPT09bysxKWNvbnRpbnVlO2lmKG8pe3ZhciBtPXtpbmRleDotMSxwb2x5Z29uOmUscmluZzphLnNsaWNlKDAsbysxKX07bS5yaW5nW20ucmluZy5sZW5ndGgtMV09dnIodSkscltyLmxlbmd0aC0xXT1tfWVsc2Ugci5wb3AoKTtpZihmPj1zKWJyZWFrO3IucHVzaCh7aW5kZXg6LTEscG9seWdvbjplLHJpbmc6YT1hLnNsaWNlKGYtMSl9KSxhWzBdPXZyKGFbMF1bMV0pLG89LTEscz1hLmxlbmd0aH19fX1mdW5jdGlvbiBfcih0KXt2YXIgZSxyLG4saSxhLG8scz10Lmxlbmd0aCxsPXt9LGM9e307Zm9yKGU9MDtlPHM7KytlKW49KHI9dFtlXSkucmluZ1swXSxhPXIucmluZ1tyLnJpbmcubGVuZ3RoLTFdLG5bMF0hPT1hWzBdfHxuWzFdIT09YVsxXT8oci5pbmRleD1lLGxbbl09Y1thXT1yKTooci5wb2x5Z29uLnB1c2goci5yaW5nKSx0W2VdPW51bGwpO2ZvcihlPTA7ZTxzOysrZSlpZihyPXRbZV0pe2lmKG49ci5yaW5nWzBdLGE9ci5yaW5nW3IucmluZy5sZW5ndGgtMV0saT1jW25dLG89bFthXSxkZWxldGUgbFtuXSxkZWxldGUgY1thXSxuWzBdPT09YVswXSYmblsxXT09PWFbMV0pe3IucG9seWdvbi5wdXNoKHIucmluZyk7Y29udGludWV9aT8oZGVsZXRlIGNbbl0sZGVsZXRlIGxbaS5yaW5nWzBdXSxpLnJpbmcucG9wKCksdFtpLmluZGV4XT1udWxsLHI9e2luZGV4Oi0xLHBvbHlnb246aS5wb2x5Z29uLHJpbmc6aS5yaW5nLmNvbmNhdChyLnJpbmcpfSxpPT09bz9yLnBvbHlnb24ucHVzaChyLnJpbmcpOihyLmluZGV4PXMrKyx0LnB1c2gobFtyLnJpbmdbMF1dPWNbci5yaW5nW3IucmluZy5sZW5ndGgtMV1dPXIpKSk6bz8oZGVsZXRlIGxbYV0sZGVsZXRlIGNbby5yaW5nW28ucmluZy5sZW5ndGgtMV1dLHIucmluZy5wb3AoKSxyPXtpbmRleDpzKysscG9seWdvbjpvLnBvbHlnb24scmluZzpyLnJpbmcuY29uY2F0KG8ucmluZyl9LHRbby5pbmRleF09bnVsbCx0LnB1c2gobFtyLnJpbmdbMF1dPWNbci5yaW5nW3IucmluZy5sZW5ndGgtMV1dPXIpKTooci5yaW5nLnB1c2goci5yaW5nWzBdKSxyLnBvbHlnb24ucHVzaChyLnJpbmcpKX19ZnVuY3Rpb24gd3IodCl7dmFyIGU9e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5OlRyKHQuZ2VvbWV0cnkpfTtyZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksbnVsbCE9dC5wcm9wZXJ0aWVzJiYoZS5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyksZX1mdW5jdGlvbiBUcih0KXtpZihudWxsPT10KXJldHVybiB0O3ZhciBlLHIsbixpO3N3aXRjaCh0LnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplPXt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dC5nZW9tZXRyaWVzLm1hcChUcil9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczp5cih0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmU9e3R5cGU6dC50eXBlLGNvb3JkaW5hdGVzOnhyKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6ZT17dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcCh4cil9O2JyZWFrO2Nhc2UiUG9seWdvbiI6dmFyIGE9W107YnIodC5jb29yZGluYXRlcyxhLHI9W10pLF9yKHIpLGU9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOmF9O2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpyPVtdLG49LTEsaT10LmNvb3JkaW5hdGVzLmxlbmd0aDtmb3IodmFyIG89bmV3IEFycmF5KGkpOysrbjxpOylicih0LmNvb3JkaW5hdGVzW25dLG9bbl09W10scik7X3IociksZT17dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczpvLmZpbHRlcihncil9O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9cmV0dXJuIG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9ZnVuY3Rpb24ga3IodCxlKXt2YXIgcj1nKGUvMiksbj1tKGIqcik7cmV0dXJuW3QqKC43NDQ4Mi0uMzQ1ODgqbipuKSwxLjcwNzExKnJdfWZ1bmN0aW9uIEFyKHQscixuKXt2YXIgaT1lLmdlb0ludGVycG9sYXRlKHIsbiksYT1pKC41KSxvPWUuZ2VvUm90YXRpb24oWy1hWzBdLC1hWzFdXSkocikscz1pLmRpc3RhbmNlLzIsbD0tUyhtKG9bMV0qTSkvbShzKSksYz1bLWFbMF0sLWFbMV0sLShvWzBdPjA/eS1sOmwpKkFdLHU9ZS5nZW9Qcm9qZWN0aW9uKHQocykpLnJvdGF0ZShjKSxmPWUuZ2VvUm90YXRpb24oYyksaD11LmNlbnRlcjtyZXR1cm4gZGVsZXRlIHUucm90YXRlLHUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goZih0KSk6Zi5pbnZlcnQoaCgpKX0sdS5jbGlwQW5nbGUoOTApfWZ1bmN0aW9uIE1yKHQpe3ZhciByPW8odCk7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuZ2VvR25vbW9uaWNSYXcodCxuKTtyZXR1cm4gaVswXSo9cixpfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVybiBlLmdlb0dub21vbmljUmF3LmludmVydCh0L3Isbil9LG59ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gQXIoTXIsdCxlKX1mdW5jdGlvbiBFcih0KXtpZighKHQqPTIpKXJldHVybiBlLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3O3ZhciByPS10LzIsbj0tcixpPXQqdCxzPWcobiksbD0uNS9tKG4pO2Z1bmN0aW9uIGMoZSxhKXt2YXIgcz1FKG8oYSkqbyhlLXIpKSxsPUUobyhhKSpvKGUtbikpO3JldHVyblsoKHMqPXMpLShsKj1sKSkvKDIqdCksKGE8MD8tMToxKSpMKDQqaSpsLShpLXMrbCkqKGktcytsKSkvKDIqdCldfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBpLGMsdT1lKmUsZj1vKEwodSsoaT10K3IpKmkpKSxoPW8oTCh1KyhpPXQrbikqaSkpO3JldHVyblthKGM9Zi1oLGk9KGYraCkqcyksKGU8MD8tMToxKSpFKEwoaSppK2MqYykqbCldfSxjfWZ1bmN0aW9uIExyKHQsZSl7cmV0dXJuIEFyKEVyLHQsZSl9ZnVuY3Rpb24gQ3IodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9bihlL3gpLGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLGQoZSkqeSpnKGkvMildO3ZhciBhPW8oaSkscz1uKHkvdC10L3kpLzIsbD1zKnMsYz1hLyhyK2EtMSksdT1jKigyL3ItMSksZj11KnUsaD1mK2wscD1jLWYsbT1sK2M7cmV0dXJuW2QodCkqeSoocypwK0wobCpwKnAtaCooYypjLWYpKSkvaCxkKGUpKnkqKHUqbS1zKkwoKGwrMSkqaC1tKm0pKS9oXX1mdW5jdGlvbiBQcih0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcj1uKGUveCksaT1TKHIpO2lmKG4odCk8dnx8bihuKGUpLXgpPHYpcmV0dXJuWzAsZChlKSp5KmcoaS8yKV07dmFyIGE9byhpKSxzPW4oeS90LXQveSkvMixsPXMqcyxjPWEqKEwoMStsKS1zKmEpLygxK2wqcipyKTtyZXR1cm5bZCh0KSp5KmMsZChlKSp5KkwoMS1jKigyKnMrYykpXX1mdW5jdGlvbiBJcih0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcj1lL3gsaT1TKHIpO2lmKG4odCk8dnx8bihuKGUpLXgpPHYpcmV0dXJuWzAseSpnKGkvMildO3ZhciBhPSh5L3QtdC95KS8yLHM9ci8oMStvKGkpKTtyZXR1cm5beSooZCh0KSpMKGEqYSsxLXMqcyktYSkseSpzXX1mdW5jdGlvbiBPcih0LGUpe2lmKCFlKXJldHVyblt0LDBdO3ZhciByPW4oZSk7aWYoIXR8fHI9PT14KXJldHVyblswLGVdO3ZhciBpPXIveCxhPWkqaSxvPSg4KmktYSooYSsyKS01KS8oMiphKihpLTEpKSxzPW8qbyxsPWkqbyxjPWErcysyKmwsdT1pKzMqbyxmPXQveCxoPWYrMS9mLHA9ZChuKHQpLXgpKkwoaCpoLTQpLG09cCpwLGc9KHAqKGMrcy0xKSsyKkwoYyooYStzKm0tMSkrKDEtYSkqKGEqKHUqdSs0KnMpKzEyKmwqcys0KnMqcykpKS8oNCpjK20pO3JldHVybltkKHQpKngqZyxkKGUpKngqTCgxK3AqbihnKS1nKmcpXX1mdW5jdGlvbiB6cih0LGUscixuKXt2YXIgaT15LzM7dD11KHQsdiksZT11KGUsdiksdD1mKHQseCksZT1mKGUseS12KSxyPXUociwwKSxyPWYociwxMDAtdik7dmFyIHM9KG49dShuLHYpKS8xMDAsbD1FKChyLzEwMCsxKSpvKGkpKS9pLGM9bSh0KS9tKGwqeCksaD1lL3kscD1MKHMqbSh0LzIpL20oZS8yKSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gcyhhLHMpe3ZhciBsPXIqbShuKnMpLGM9TCgxLWwqbCksdT1MKDIvKDErYypvKGEqPWkpKSk7cmV0dXJuW3QqYyp1Km0oYSksZSpsKnVdfXJldHVybiBzLmludmVydD1mdW5jdGlvbihvLHMpe3ZhciBsPW8vdCxjPXMvZSx1PUwobCpsK2MqYyksZj0yKlModS8yKTtyZXR1cm5bYShvKmcoZiksdCp1KS9pLHUmJlMocyptKGYpLyhlKnIqdSkpL25dfSxzfShwL0woaCpjKmwpLDEvKHAqTChoKmMqbCkpLGMsbCxoKX1mdW5jdGlvbiBEcigpe3ZhciB0PTY1Kk0scj02MCpNLG49MjAsaT0yMDAsYT1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHpyKSxvPWEodCxyLG4saSk7cmV0dXJuIG8ucG9sZWxpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0PStlKk0scixuLGkpOnQqQX0sby5wYXJhbGxlbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHI9K2UqTSxuLGkpOnIqQX0sby5pbmZsYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHIsbj0rZSxpKTpufSxvLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG4saT0rZSk6aX0sby5zY2FsZSgxNjMuNzc1KX1rci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLzEuNzA3MTEsbj1tKGIqcik7cmV0dXJuW3QvKC43NDQ4Mi0uMzQ1ODgqbipuKSwyKmkocildfSxDci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07aWYobih0KTx2KXJldHVyblswLHgqbSgyKmkoZS95KSldO3ZhciByPSh0Lz15KSp0LGE9KGUvPXkpKmUscz1yK2EsbD1zKnMsYz0tbihlKSooMStzKSx1PWMtMiphK3IsZj0tMipjKzErMiphK2wsaD1hL2YrKDIqdSp1KnUvKGYqZipmKS05KmMqdS8oZipmKSkvMjcscD0oYy11KnUvKDMqZikpL2YsZz0yKkwoLXAvMyksYj1FKDMqaC8ocCpnKSkvMztyZXR1cm5beSoocy0xK0woMSsyKihyLWEpK2wpKS8oMip0KSxkKGUpKnkqKC1nKm8oYit5LzMpLXUvKDMqZikpXX0sUHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuWzAseCptKDIqaShlL3kpKV07dmFyIHI9bih0L3kpLG89KDEtcipyLShlLz15KSplKS8oMipyKSxzPUwobypvKzEpO3JldHVybltkKHQpKnkqKHMtbyksZChlKSp4Km0oMiphKEwoKDEtMipvKnIpKihvK3MpLXIpLEwocytvK3IpKSldfSxJci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm5bdCwwXTt2YXIgcj1lL3ksbj0oeSp5KigxLXIqciktdCp0KS8oMip5KnQpO3JldHVyblt0P3kqKGQodCkqTChuKm4rMSktbik6MCx4Km0oMippKHIpKV19LE9yLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCF0fHwhZSlyZXR1cm5bdCxlXTtlLz15O3ZhciBpPWQodCkqdC94LGE9KGkqaS0xKzQqZSplKS9uKGkpLG89YSphLHM9MiplLGw9NTA7ZG97dmFyIGM9cypzLHU9KDgqcy1jKihjKzIpLTUpLygyKmMqKHMtMSkpLGY9KDMqcy1jKnMtMTApLygyKmMqcyksaD11KnUscD1zKnUsbT1zK3UsZz1tKm0sYj1zKzMqdSxfPS0yKm0qKDQqcCpoKygxLTQqYyszKmMqYykqKDErZikraCooMTQqYy02LW8rKDgqYy04LTIqbykqZikrcCooMTIqYy04KygxMCpjLTEwLW8pKmYpKSx3PUwoZyooYytoKm8tMSkrKDEtYykqKGMqKGIqYis0KmgpK2gqKDEyKnArNCpoKSkpO3MtPXI9KGEqKGcraC0xKSsyKnctaSooNCpnK28pKS8oYSooMip1KmYrMiptKigxK2YpKStfL3ctOCptKihhKigtMStoK2cpKzIqdykqKDErZikvKG8rNCpnKSl9d2hpbGUocj52JiYtLWw+MCk7cmV0dXJuW2QodCkqKEwoYSphKzQpK2EpKnkvNCx4KnNdfTt2YXIgUnI9NCp5KzMqTCgzKSxGcj0yKkwoMip5KkwoMykvUnIpLEJyPVkoRnIqTCgzKS95LEZyLFJyLzYpO2Z1bmN0aW9uIE5yKHQsZSl7cmV0dXJuW3QqTCgxLTMqZSplLyh5KnkpKSxlXX1mdW5jdGlvbiBqcih0LGUpe3ZhciByPW8oZSksbj1vKHQpKnIsaT0xLW4scz1vKHQ9YShtKHQpKnIsLW0oZSkpKSxsPW0odCk7cmV0dXJuW2wqKHI9TCgxLW4qbikpLXMqaSwtcypyLWwqaV19ZnVuY3Rpb24gVXIodCxlKXt2YXIgcj1PKHQsZSk7cmV0dXJuWyhyWzBdK3QveCkvMiwoclsxXStlKS8yXX1Oci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9MKDEtMyplKmUvKHkqeSkpLGVdfSxqci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0odCp0K2UqZSkvLTIsbj1MKC1yKigyK3IpKSxpPWUqcit0Km4sbz10KnItZSpuLHM9TChvKm8raSppKTtyZXR1cm5bYShuKmkscyooMStyKSkscz8tUyhuKm8vcyk6MF19LFVyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPXQsaT1lLGE9MjU7ZG97dmFyIHMsbD1vKGkpLGM9bShpKSx1PW0oMippKSxmPWMqYyxoPWwqbCxwPW0ociksZD1vKHIvMiksZz1tKHIvMikseT1nKmcsYj0xLWgqZCpkLF89Yj9FKGwqZCkqTChzPTEvYik6cz0wLHc9LjUqKDIqXypsKmcrci94KS10LFQ9LjUqKF8qYytpKS1lLGs9LjUqcyooaCp5K18qbCpkKmYpKy41L3gsQT1zKihwKnUvNC1fKmMqZyksTT0uMTI1KnMqKHUqZy1fKmMqaCpwKSxTPS41KnMqKGYqZCtfKnkqbCkrLjUsQz1BKk0tUyprLFA9KFQqQS13KlMpL0MsST0odypNLVQqaykvQztyLT1QLGktPUl9d2hpbGUoKG4oUCk+dnx8bihJKT52KSYmLS1hPjApO3JldHVybltyLGldfSx0Lmdlb05hdHVyYWxFYXJ0aD1lLmdlb05hdHVyYWxFYXJ0aDEsdC5nZW9OYXR1cmFsRWFydGhSYXc9ZS5nZW9OYXR1cmFsRWFydGgxUmF3LHQuZ2VvQWlyeT1mdW5jdGlvbigpe3ZhciB0PXgscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEkpLG49cih0KTtyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PWUqTSk6dCpBfSxuLnNjYWxlKDE3OS45NzYpLmNsaXBBbmdsZSgxNDcpfSx0Lmdlb0FpcnlSYXc9SSx0Lmdlb0FpdG9mZj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oTykuc2NhbGUoMTUyLjYzKX0sdC5nZW9BaXRvZmZSYXc9Tyx0Lmdlb0FybWFkaWxsbz1mdW5jdGlvbigpe3ZhciB0PTIwKk0scj10Pj0wPzE6LTEsbj1nKHIqdCksaT1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHopLHM9aSh0KSxsPXMuc3RyZWFtO3JldHVybiBzLnBhcmFsbGVsPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWcoKHI9KHQ9ZSpNKT49MD8xOi0xKSp0KSxpKHQpKTp0KkF9LHMuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciBpPXMucm90YXRlKCksYz1sKGUpLHU9KHMucm90YXRlKFswLDBdKSxsKGUpKSxmPXMucHJlY2lzaW9uKCk7cmV0dXJuIHMucm90YXRlKGkpLGMuc3BoZXJlPWZ1bmN0aW9uKCl7dS5wb2x5Z29uU3RhcnQoKSx1LmxpbmVTdGFydCgpO2Zvcih2YXIgZT0tMTgwKnI7ciplPDE4MDtlKz05MCpyKXUucG9pbnQoZSw5MCpyKTtpZih0KWZvcig7ciooZS09MypyKmYpPj0tMTgwOyl1LnBvaW50KGUsciotYShvKGUqTS8yKSxuKSpBKTt1LmxpbmVFbmQoKSx1LnBvbHlnb25FbmQoKX0sY30scy5zY2FsZSgyMTguNjk1KS5jZW50ZXIoWzAsMjguMDk3NF0pfSx0Lmdlb0FybWFkaWxsb1Jhdz16LHQuZ2VvQXVndXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihEKS5zY2FsZSg2Ni4xNjAzKX0sdC5nZW9BdWd1c3RSYXc9RCx0Lmdlb0Jha2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihCKS5zY2FsZSgxMTIuMzE0KX0sdC5nZW9CYWtlclJhdz1CLHQuZ2VvQmVyZ2hhdXM9ZnVuY3Rpb24oKXt2YXIgdD01LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihOKSxuPXIodCksaT1uLnN0cmVhbSxzPS1vKC4wMSpNKSxsPW0oLjAxKk0pO3JldHVybiBuLmxvYmVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD0rZSk6dH0sbi5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9bi5yb3RhdGUoKSxjPWkoZSksdT0obi5yb3RhdGUoWzAsMF0pLGkoZSkpO3JldHVybiBuLnJvdGF0ZShyKSxjLnNwaGVyZT1mdW5jdGlvbigpe3UucG9seWdvblN0YXJ0KCksdS5saW5lU3RhcnQoKTtmb3IodmFyIGU9MCxyPTM2MC90LG49Mip5L3QsaT05MC0xODAvdCxjPXg7ZTx0OysrZSxpLT1yLGMtPW4pdS5wb2ludChhKGwqbyhjKSxzKSpBLFMobCptKGMpKSpBKSxpPC05MD8odS5wb2ludCgtOTAsLTE4MC1pLS4wMSksdS5wb2ludCgtOTAsLTE4MC1pKy4wMSkpOih1LnBvaW50KDkwLGkrLjAxKSx1LnBvaW50KDkwLGktLjAxKSk7dS5saW5lRW5kKCksdS5wb2x5Z29uRW5kKCl9LGN9LG4uc2NhbGUoODcuODA3NikuY2VudGVyKFswLDE3LjE4NzVdKS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQmVyZ2hhdXNSYXc9Tix0Lmdlb0JlcnRpbjE5NTM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHEoKSkucm90YXRlKFstMTYuNSwtNDJdKS5zY2FsZSgxNzYuNTcpLmNlbnRlcihbNy45MywuMDldKX0sdC5nZW9CZXJ0aW4xOTUzUmF3PXEsdC5nZW9Cb2dncz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSikuc2NhbGUoMTYwLjg1Nyl9LHQuZ2VvQm9nZ3NSYXc9Six0Lmdlb0Jvbm5lPWZ1bmN0aW9uKCl7cmV0dXJuIEsoJCkuc2NhbGUoMTIzLjA4MikuY2VudGVyKFswLDI2LjE0NDFdKS5wYXJhbGxlbCg0NSl9LHQuZ2VvQm9ubmVSYXc9JCx0Lmdlb0JvdHRvbWxleT1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih0dCksbj1yKHQpO3JldHVybiBuLmZyYWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD0rZSk6dH0sbi5zY2FsZSgxNTguODM3KX0sdC5nZW9Cb3R0b21sZXlSYXc9dHQsdC5nZW9Ccm9tbGV5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihldCkuc2NhbGUoMTUyLjYzKX0sdC5nZW9Ccm9tbGV5UmF3PWV0LHQuZ2VvQ2hhbWJlcmxpbj1zdCx0Lmdlb0NoYW1iZXJsaW5SYXc9YXQsdC5nZW9DaGFtYmVybGluQWZyaWNhPWZ1bmN0aW9uKCl7cmV0dXJuIHN0KFswLDIyXSxbNDUsMjJdLFsyMi41LC0yMl0pLnNjYWxlKDM4MCkuY2VudGVyKFsyMi41LDJdKX0sdC5nZW9Db2xsaWdub249ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGx0KS5zY2FsZSg5NS42NDY0KS5jZW50ZXIoWzAsMzBdKX0sdC5nZW9Db2xsaWdub25SYXc9bHQsdC5nZW9DcmFpZz1mdW5jdGlvbigpe3JldHVybiBLKGN0KS5zY2FsZSgyNDkuODI4KS5jbGlwQW5nbGUoOTApfSx0Lmdlb0NyYWlnUmF3PWN0LHQuZ2VvQ3Jhc3Rlcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZnQpLnNjYWxlKDE1Ni4xOSl9LHQuZ2VvQ3Jhc3RlclJhdz1mdCx0Lmdlb0N5bGluZHJpY2FsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEsoaHQpLnBhcmFsbGVsKDM4LjU4KS5zY2FsZSgxOTUuMDQ0KX0sdC5nZW9DeWxpbmRyaWNhbEVxdWFsQXJlYVJhdz1odCx0Lmdlb0N5bGluZHJpY2FsU3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBLKHB0KS5zY2FsZSgxMjQuNzUpfSx0Lmdlb0N5bGluZHJpY2FsU3RlcmVvZ3JhcGhpY1Jhdz1wdCx0Lmdlb0Vja2VydDE9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGR0KS5zY2FsZSgxNjUuNjY0KX0sdC5nZW9FY2tlcnQxUmF3PWR0LHQuZ2VvRWNrZXJ0Mj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24obXQpLnNjYWxlKDE2NS42NjQpfSx0Lmdlb0Vja2VydDJSYXc9bXQsdC5nZW9FY2tlcnQzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihndCkuc2NhbGUoMTgwLjczOSl9LHQuZ2VvRWNrZXJ0M1Jhdz1ndCx0Lmdlb0Vja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHZ0KS5zY2FsZSgxODAuNzM5KX0sdC5nZW9FY2tlcnQ0UmF3PXZ0LHQuZ2VvRWNrZXJ0NT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oeXQpLnNjYWxlKDE3My4wNDQpfSx0Lmdlb0Vja2VydDVSYXc9eXQsdC5nZW9FY2tlcnQ2PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih4dCkuc2NhbGUoMTczLjA0NCl9LHQuZ2VvRWNrZXJ0NlJhdz14dCx0Lmdlb0Vpc2VubG9ocj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oX3QpLnNjYWxlKDYyLjUyNzEpfSx0Lmdlb0Vpc2VubG9oclJhdz1fdCx0Lmdlb0ZhaGV5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihUdCkuc2NhbGUoMTM3LjE1Mil9LHQuZ2VvRmFoZXlSYXc9VHQsdC5nZW9Gb3VjYXV0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihrdCkuc2NhbGUoMTM1LjI2NCl9LHQuZ2VvRm91Y2F1dFJhdz1rdCx0Lmdlb0ZvdWNhdXRTaW51c29pZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9LjUscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEF0KSxuPXIodCk7cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2OC43MjUpfSx0Lmdlb0ZvdWNhdXRTaW51c29pZGFsUmF3PUF0LHQuZ2VvR2lsYmVydD1mdW5jdGlvbih0KXtudWxsPT10JiYodD1lLmdlb09ydGhvZ3JhcGhpYyk7dmFyIHI9dCgpLG49ZS5nZW9FcXVpcmVjdGFuZ3VsYXIoKS5zY2FsZShBKS5wcmVjaXNpb24oMCkuY2xpcEFuZ2xlKG51bGwpLnRyYW5zbGF0ZShbMCwwXSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gcihNdCh0KSl9ZnVuY3Rpb24gYSh0KXtpW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJbdF0uYXBwbHkocixhcmd1bWVudHMpLGkpOnJbdF0oKX19cmV0dXJuIHIuaW52ZXJ0JiYoaS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0KHIuaW52ZXJ0KHQpKX0pLGkuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPXIuc3RyZWFtKHQpLGk9bi5zdHJlYW0oe3BvaW50OmZ1bmN0aW9uKHQscil7ZS5wb2ludCh0LzIsUyhnKC1yLzIqTSkpKkEpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKX19KTtyZXR1cm4gaS5zcGhlcmU9ZS5zcGhlcmUsaX0saS5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4ucm90YXRlKHQpLGkpOm4ucm90YXRlKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLmNlbnRlcihNdCh0KSksaSk6U3Qoci5jZW50ZXIoKSl9LGEoImFuZ2xlIiksYSgiY2xpcEFuZ2xlIiksYSgiY2xpcEV4dGVudCIpLGEoImZpdEV4dGVudCIpLGEoImZpdEhlaWdodCIpLGEoImZpdFNpemUiKSxhKCJmaXRXaWR0aCIpLGEoInNjYWxlIiksYSgidHJhbnNsYXRlIiksYSgicHJlY2lzaW9uIiksaS5zY2FsZSgyNDkuNSl9LHQuZ2VvR2luZ2VyeT1mdW5jdGlvbigpe3ZhciB0PTYscj0zMCpNLG49byhyKSxpPW0ocikscz1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEV0KSxsPXMocix0KSxjPWwuc3RyZWFtLHU9LW8oLjAxKk0pLGY9bSguMDEqTSk7cmV0dXJuIGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8ocj1lKk0pLGk9bShyKSxzKHIsdCkpOnIqQX0sbC5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zKHIsdD0rZSk6dH0sbC5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9bC5yb3RhdGUoKSxzPWMoZSksaD0obC5yb3RhdGUoWzAsMF0pLGMoZSkpO3JldHVybiBsLnJvdGF0ZShyKSxzLnNwaGVyZT1mdW5jdGlvbigpe2gucG9seWdvblN0YXJ0KCksaC5saW5lU3RhcnQoKTtmb3IodmFyIGU9MCxyPTIqeS90LHM9MDtlPHQ7KytlLHMtPXIpaC5wb2ludChhKGYqbyhzKSx1KSpBLFMoZiptKHMpKSpBKSxoLnBvaW50KGEoaSpvKHMtci8yKSxuKSpBLFMoaSptKHMtci8yKSkqQSk7aC5saW5lRW5kKCksaC5wb2x5Z29uRW5kKCl9LHN9LGwucm90YXRlKFs5MCwtNDBdKS5zY2FsZSg5MS43MDk1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvR2luZ2VyeVJhdz1FdCx0Lmdlb0dpbnpidXJnND1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSXQpLnNjYWxlKDE0OS45OTUpfSx0Lmdlb0dpbnpidXJnNFJhdz1JdCx0Lmdlb0dpbnpidXJnNT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oT3QpLnNjYWxlKDE1My45Myl9LHQuZ2VvR2luemJ1cmc1UmF3PU90LHQuZ2VvR2luemJ1cmc2PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih6dCkuc2NhbGUoMTMwLjk0NSl9LHQuZ2VvR2luemJ1cmc2UmF3PXp0LHQuZ2VvR2luemJ1cmc4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihEdCkuc2NhbGUoMTMxLjc0Nyl9LHQuZ2VvR2luemJ1cmc4UmF3PUR0LHQuZ2VvR2luemJ1cmc5PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihSdCkuc2NhbGUoMTMxLjA4Nyl9LHQuZ2VvR2luemJ1cmc5UmF3PVJ0LHQuZ2VvR3JpbmdvcnRlbj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRnQoQnQpKS5zY2FsZSgyMzkuNzUpfSx0Lmdlb0dyaW5nb3J0ZW5SYXc9QnQsdC5nZW9HdXlvdT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRnQoVXQpKS5zY2FsZSgxNTEuNDk2KX0sdC5nZW9HdXlvdVJhdz1VdCx0Lmdlb0hhbW1lcj1mdW5jdGlvbigpe3ZhciB0PTIscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKGopLG49cih0KTtyZXR1cm4gbi5jb2VmZmljaWVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTY5LjUyOSl9LHQuZ2VvSGFtbWVyUmF3PWosdC5nZW9IYW1tZXJSZXRyb2F6aW11dGhhbD1mdW5jdGlvbigpe3ZhciB0PTAscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKFZ0KSxuPXIodCksaT1uLnJvdGF0ZSxhPW4uc3RyZWFtLG89ZS5nZW9DaXJjbGUoKTtyZXR1cm4gbi5wYXJhbGxlbD1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdCpBO3ZhciBpPW4ucm90YXRlKCk7cmV0dXJuIHIodD1lKk0pLnJvdGF0ZShpKX0sbi5yb3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkuY2FsbChuLFtlWzBdLGVbMV0tdCpBXSksby5jZW50ZXIoWy1lWzBdLC1lWzFdXSksbik6KChlPWkuY2FsbChuKSlbMV0rPXQqQSxlKX0sbi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuKHQ9YSh0KSkuc3BoZXJlPWZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKTt2YXIgZSxyPW8ucmFkaXVzKDg5Ljk5KSgpLmNvb3JkaW5hdGVzWzBdLG49ci5sZW5ndGgtMSxpPS0xO2Zvcih0LmxpbmVTdGFydCgpOysraTxuOyl0LnBvaW50KChlPXJbaV0pWzBdLGVbMV0pO2Zvcih0LmxpbmVFbmQoKSxuPShyPW8ucmFkaXVzKDkwLjAxKSgpLmNvb3JkaW5hdGVzWzBdKS5sZW5ndGgtMSx0LmxpbmVTdGFydCgpOy0taT49MDspdC5wb2ludCgoZT1yW2ldKVswXSxlWzFdKTt0LmxpbmVFbmQoKSx0LnBvbHlnb25FbmQoKX0sdH0sbi5zY2FsZSg3OS40MTg3KS5wYXJhbGxlbCg0NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0hhbW1lclJldHJvYXppbXV0aGFsUmF3PVZ0LHQuZ2VvSGVhbHBpeD1mdW5jdGlvbigpe3ZhciB0PTQsbj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKFl0KSxpPW4odCksYT1pLnN0cmVhbTtyZXR1cm4gaS5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9K2UpOnR9LGkuc3RyZWFtPWZ1bmN0aW9uKG4pe3ZhciBvPWkucm90YXRlKCkscz1hKG4pLGw9KGkucm90YXRlKFswLDBdKSxhKG4pKTtyZXR1cm4gaS5yb3RhdGUobykscy5zcGhlcmU9ZnVuY3Rpb24oKXt2YXIgbixpO2UuZ2VvU3RyZWFtKChuPTE4MC90LGk9W10uY29uY2F0KHIucmFuZ2UoLTE4MCwxODArbi8yLG4pLm1hcChXdCksci5yYW5nZSgxODAsLTE4MC1uLzIsLW4pLm1hcChYdCkpLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbMTgwPT09bj9pLm1hcChadCk6aV19KSxsKX0sc30saS5zY2FsZSgyMzkuNzUpfSx0Lmdlb0hlYWxwaXhSYXc9WXQsdC5nZW9IaWxsPWZ1bmN0aW9uKCl7dmFyIHQ9MSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoSnQpLG49cih0KTtyZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTY3Ljc3NCkuY2VudGVyKFswLDE4LjY3XSl9LHQuZ2VvSGlsbFJhdz1KdCx0Lmdlb0hvbW9sb3NpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFF0KS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0hvbW9sb3NpbmVSYXc9UXQsdC5nZW9IdWZuYWdlbD1mdW5jdGlvbigpe3ZhciB0PTEscj0wLG49NDUqTSxpPTIsYT1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKCR0KSxvPWEodCxyLG4saSk7cmV0dXJuIG8uYT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQ9K2UscixuLGkpOnR9LG8uYj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscj0rZSxuLGkpOnJ9LG8ucHNpTWF4PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG49K2UqTSxpKTpuKkF9LG8ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHIsbixpPStlKTppfSxvLnNjYWxlKDE4MC43MzkpfSx0Lmdlb0h1Zm5hZ2VsUmF3PSR0LHQuZ2VvSHlwZXJlbGxpcHRpY2FsPWZ1bmN0aW9uKCl7dmFyIHQ9MCxyPTIuNSxuPTEuMTgzMTM2LGk9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihlZSksYT1pKHQscixuKTtyZXR1cm4gYS5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pKHQ9K2UscixuKTp0fSxhLms9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0LHI9K2Usbik6cn0sYS5nYW1tYT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pKHQscixuPStlKTpufSxhLnNjYWxlKDE1Mi42Myl9LHQuZ2VvSHlwZXJlbGxpcHRpY2FsUmF3PWVlLHQuZ2VvSW50ZXJydXB0PWFlLHQuZ2VvSW50ZXJydXB0ZWRCb2dncz1mdW5jdGlvbigpe3JldHVybiBhZShKLG9lKS5zY2FsZSgxNjAuODU3KX0sdC5nZW9JbnRlcnJ1cHRlZEhvbW9sb3NpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoUXQsc2UpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvSW50ZXJydXB0ZWRNb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoVyxsZSkuc2NhbGUoMTY5LjUyOSl9LHQuZ2VvSW50ZXJydXB0ZWRNb2xsd2VpZGVIZW1pc3BoZXJlcz1mdW5jdGlvbigpe3JldHVybiBhZShXLGNlKS5zY2FsZSgxNjkuNTI5KS5yb3RhdGUoWzIwLDBdKX0sdC5nZW9JbnRlcnJ1cHRlZFNpbnVNb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoS3QsdWUsSCkucm90YXRlKFstMjAsLTU1XSkuc2NhbGUoMTY0LjI2MykuY2VudGVyKFswLC01LjQwMzZdKX0sdC5nZW9JbnRlcnJ1cHRlZFNpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoUSxmZSkuc2NhbGUoMTUyLjYzKS5yb3RhdGUoWy0yMCwwXSl9LHQuZ2VvS2F2cmF5c2tpeTc9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGhlKS5zY2FsZSgxNTguODM3KX0sdC5nZW9LYXZyYXlza2l5N1Jhdz1oZSx0Lmdlb0xhZ3JhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9LjUscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHBlKSxuPXIodCk7cmV0dXJuIG4uc3BhY2luZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTI0Ljc1KX0sdC5nZW9MYWdyYW5nZVJhdz1wZSx0Lmdlb0xhcnJpdmVlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihtZSkuc2NhbGUoOTcuMjY3Mil9LHQuZ2VvTGFycml2ZWVSYXc9bWUsdC5nZW9MYXNrb3dza2k9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGdlKS5zY2FsZSgxMzkuOTgpfSx0Lmdlb0xhc2tvd3NraVJhdz1nZSx0Lmdlb0xpdHRyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHZlKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoODkuOTk5KX0sdC5nZW9MaXR0cm93UmF3PXZlLHQuZ2VvTG94aW11dGhhbD1mdW5jdGlvbigpe3JldHVybiBLKHllKS5wYXJhbGxlbCg0MCkuc2NhbGUoMTU4LjgzNyl9LHQuZ2VvTG94aW11dGhhbFJhdz15ZSx0Lmdlb01pbGxlcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oeGUpLnNjYWxlKDEwOC4zMTgpfSx0Lmdlb01pbGxlclJhdz14ZSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpYz1NZSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY1Jhdz1iZSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY0FsYXNrYT1mdW5jdGlvbigpe3JldHVybiBNZShfZSxbMTUyLC02NF0pLnNjYWxlKDE0MDApLmNlbnRlcihbLTE2MC45MDgsNjIuNDg2NF0pLmNsaXBBbmdsZSgzMCkuYW5nbGUoNy44KX0sdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNHczQ4PWZ1bmN0aW9uKCl7cmV0dXJuIE1lKHdlLFs5NSwtMzhdKS5zY2FsZSgxZTMpLmNsaXBBbmdsZSg1NSkuY2VudGVyKFstOTYuNTU2MywzOC44Njc1XSl9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljR3M1MD1mdW5jdGlvbigpe3JldHVybiBNZShUZSxbMTIwLC00NV0pLnNjYWxlKDM1OS41MTMpLmNsaXBBbmdsZSg1NSkuY2VudGVyKFstMTE3LjQ3NCw1My4wNjI4XSl9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljTWlsbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIE1lKGtlLFstMjAsLTE4XSkuc2NhbGUoMjA5LjA5MSkuY2VudGVyKFsyMCwxNi43MjE0XSkuY2xpcEFuZ2xlKDgyKX0sdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNMZWU9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoQWUsWzE2NSwxMF0pLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDEzMCkuY2VudGVyKFstMTY1LC0xMF0pfSx0Lmdlb01vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVykuc2NhbGUoMTY5LjUyOSl9LHQuZ2VvTW9sbHdlaWRlUmF3PVcsdC5nZW9NdEZsYXRQb2xhclBhcmFib2xpYz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oTGUpLnNjYWxlKDE2NC44NTkpfSx0Lmdlb010RmxhdFBvbGFyUGFyYWJvbGljUmF3PUxlLHQuZ2VvTXRGbGF0UG9sYXJRdWFydGljPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihDZSkuc2NhbGUoMTg4LjIwOSl9LHQuZ2VvTXRGbGF0UG9sYXJRdWFydGljUmF3PUNlLHQuZ2VvTXRGbGF0UG9sYXJTaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihQZSkuc2NhbGUoMTY2LjUxOCl9LHQuZ2VvTXRGbGF0UG9sYXJTaW51c29pZGFsUmF3PVBlLHQuZ2VvTmF0dXJhbEVhcnRoMj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSWUpLnNjYWxlKDE3NS4yOTUpfSx0Lmdlb05hdHVyYWxFYXJ0aDJSYXc9SWUsdC5nZW9OZWxsSGFtbWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihPZSkuc2NhbGUoMTUyLjYzKX0sdC5nZW9OZWxsSGFtbWVyUmF3PU9lLHQuZ2VvSW50ZXJydXB0ZWRRdWFydGljQXV0aGFsaWM9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoaigxLzApLHplKS5yb3RhdGUoWzIwLDBdKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb05pY29sb3NpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihEZSkuc2NhbGUoMTI3LjI2Nyl9LHQuZ2VvTmljb2xvc2lSYXc9RGUsdC5nZW9QYXR0ZXJzb249ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFJlKS5zY2FsZSgxMzkuMzE5KX0sdC5nZW9QYXR0ZXJzb25SYXc9UmUsdC5nZW9Qb2x5Y29uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZlKS5zY2FsZSgxMDMuNzQpfSx0Lmdlb1BvbHljb25pY1Jhdz1GZSx0Lmdlb1BvbHloZWRyYWw9VmUsdC5nZW9Qb2x5aGVkcmFsQnV0dGVyZmx5PWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24odCl7dmFyIHI9ZS5nZW9DZW50cm9pZCh7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6dH0pO3JldHVybiBlLmdlb0dub21vbmljKCkuc2NhbGUoMSkudHJhbnNsYXRlKFswLDBdKS5yb3RhdGUoWy1yWzBdLC1yWzFdXSl9O3ZhciByPVllLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue2ZhY2U6ZSxwcm9qZWN0OnQoZSl9fSkpO3JldHVyblstMSwwLDAsMSwwLDEsNCw1XS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBuPXJbdF07biYmKG4uY2hpbGRyZW58fChuLmNoaWxkcmVuPVtdKSkucHVzaChyW2VdKX0pKSxWZShyWzBdLChmdW5jdGlvbih0LGUpe3JldHVybiByW3Q8LXkvMj9lPDA/Njo0OnQ8MD9lPDA/MjowOnQ8eS8yP2U8MD8zOjE6ZTwwPzc6NV19KSkuYW5nbGUoLTMwKS5zY2FsZSgxMDEuODU4KS5jZW50ZXIoWzAsNDVdKX0sdC5nZW9Qb2x5aGVkcmFsQ29sbGlnbm9uPWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24odCl7dmFyIHI9ZS5nZW9DZW50cm9pZCh7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6dH0pO3JldHVybiBlLmdlb1Byb2plY3Rpb24oWGUpLnRyYW5zbGF0ZShbMCwwXSkuc2NhbGUoMSkucm90YXRlKHJbMV0+MD9bLXJbMF0sMF06WzE4MC1yWzBdLDE4MF0pfTt2YXIgcj1ZZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntmYWNlOmUscHJvamVjdDp0KGUpfX0pKTtyZXR1cm5bLTEsMCwwLDEsMCwxLDQsNV0uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW3RdO24mJihuLmNoaWxkcmVufHwobi5jaGlsZHJlbj1bXSkpLnB1c2gocltlXSl9KSksVmUoclswXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gclt0PC15LzI/ZTwwPzY6NDp0PDA/ZTwwPzI6MDp0PHkvMj9lPDA/MzoxOmU8MD83OjVdfSkpLmFuZ2xlKC0zMCkuc2NhbGUoMTIxLjkwNikuY2VudGVyKFswLDQ4LjU5MDRdKX0sdC5nZW9Qb2x5aGVkcmFsV2F0ZXJtYW49ZnVuY3Rpb24odCl7dD10fHxmdW5jdGlvbih0KXt2YXIgcj02PT09dC5sZW5ndGg/ZS5nZW9DZW50cm9pZCh7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6dH0pOnRbMF07cmV0dXJuIGUuZ2VvR25vbW9uaWMoKS5zY2FsZSgxKS50cmFuc2xhdGUoWzAsMF0pLnJvdGF0ZShbLXJbMF0sLXJbMV1dKX07dmFyIHI9WWUubWFwKChmdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lm1hcChLZSksbj1yLmxlbmd0aCxpPXJbbi0xXSxhPVtdLG89MDtvPG47KytvKWU9cltvXSxhLnB1c2goSmUoWy45NDg2ODMyOTgwNTA1MTM4KmlbMF0rLjMxNjIyNzc2NjAxNjgzNzk0KmVbMF0sLjk0ODY4MzI5ODA1MDUxMzgqaVsxXSsuMzE2MjI3NzY2MDE2ODM3OTQqZVsxXSwuOTQ4NjgzMjk4MDUwNTEzOCppWzJdKy4zMTYyMjc3NjYwMTY4Mzc5NCplWzJdXSksSmUoWy45NDg2ODMyOTgwNTA1MTM4KmVbMF0rLjMxNjIyNzc2NjAxNjgzNzk0KmlbMF0sLjk0ODY4MzI5ODA1MDUxMzgqZVsxXSsuMzE2MjI3NzY2MDE2ODM3OTQqaVsxXSwuOTQ4NjgzMjk4MDUwNTEzOCplWzJdKy4zMTYyMjc3NjYwMTY4Mzc5NCppWzJdXSkpLGk9ZTtyZXR1cm4gYX0pKSxuPVtdLGk9Wy0xLDAsMCwxLDAsMSw0LDVdO3IuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtmb3IodmFyIGEsbyxzPVllW2VdLGw9cy5sZW5ndGgsYz1uW2VdPVtdLHU9MDt1PGw7Kyt1KXIucHVzaChbc1t1XSx0WygyKnUrMiklKDIqbCldLHRbKDIqdSsxKSUoMipsKV1dKSxpLnB1c2goZSksYy5wdXNoKChhPUtlKHRbKDIqdSsyKSUoMipsKV0pLG89S2UodFsoMip1KzEpJSgyKmwpXSksW2FbMV0qb1syXS1hWzJdKm9bMV0sYVsyXSpvWzBdLWFbMF0qb1syXSxhWzBdKm9bMV0tYVsxXSpvWzBdXSkpfSkpO3ZhciBhPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm57cHJvamVjdDp0KGUpLGZhY2U6ZX19KSk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj1hW3RdO3ImJihyLmNoaWxkcmVufHwoci5jaGlsZHJlbj1bXSkpLnB1c2goYVtlXSl9KSksVmUoYVswXSwoZnVuY3Rpb24odCxlKXt2YXIgcj1vKGUpLGk9W3Iqbyh0KSxyKm0odCksbShlKV0scz10PC15LzI/ZTwwPzY6NDp0PDA/ZTwwPzI6MDp0PHkvMj9lPDA/MzoxOmU8MD83OjUsbD1uW3NdO3JldHVybiBhW1plKGxbMF0saSk8MD84KzMqczpaZShsWzFdLGkpPDA/OCszKnMrMTpaZShsWzJdLGkpPDA/OCszKnMrMjpzXX0pKS5hbmdsZSgtMzApLnNjYWxlKDExMC42MjUpLmNlbnRlcihbMCw0NV0pfSx0Lmdlb1Byb2plY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUuc3RyZWFtO2lmKCFuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwcm9qZWN0aW9uIik7c3dpdGNoKHQmJnQudHlwZSl7Y2FzZSJGZWF0dXJlIjpyPXRyO2JyZWFrO2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnI9JGU7YnJlYWs7ZGVmYXVsdDpyPWVyfXJldHVybiByKHQsbil9LHQuZ2VvR3JpbmdvcnRlblF1aW5jdW5jaWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEJ0KS5zY2FsZSgxNzYuNDIzKX0sdC5nZW9QZWlyY2VRdWluY3VuY2lhbD1scix0Lmdlb1BpZXJjZVF1aW5jdW5jaWFsPWxyLHQuZ2VvUXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKDA8PShlPStlKSYmZTw9MjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBkaWdpdHMiKTtmdW5jdGlvbiByKHQpe3ZhciByPXQubGVuZ3RoLG49MixpPW5ldyBBcnJheShyKTtmb3IoaVswXT0rdFswXS50b0ZpeGVkKGUpLGlbMV09K3RbMV0udG9GaXhlZChlKTtuPHI7KWlbbl09dFtuXSwrK247cmV0dXJuIGl9ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5tYXAocil9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9cih0WzBdKSxuPVtlXSxpPTE7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXIodFtpXSk7KGEubGVuZ3RoPjJ8fGFbMF0hPWVbMF18fGFbMV0hPWVbMV0pJiYobi5wdXNoKGEpLGU9YSl9cmV0dXJuIDE9PT1uLmxlbmd0aCYmdC5sZW5ndGg+MSYmbi5wdXNoKHIodFt0Lmxlbmd0aC0xXSkpLG59ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5tYXAoaSl9ZnVuY3Rpb24gbyh0KXtpZihudWxsPT10KXJldHVybiB0O3ZhciBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplPXt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dC5nZW9tZXRyaWVzLm1hcChvKX07YnJlYWs7Y2FzZSJQb2ludCI6ZT17dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnIodC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6bih0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjplPXt0eXBlOnQudHlwZSxjb29yZGluYXRlczppKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjplPXt0eXBlOnQudHlwZSxjb29yZGluYXRlczphKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZT17dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcChhKX07YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH1yZXR1cm4gbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksZX1mdW5jdGlvbiBzKHQpe3ZhciBlPXt0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnQucHJvcGVydGllcyxnZW9tZXRyeTpvKHQuZ2VvbWV0cnkpfTtyZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksZX1pZihudWxsIT10KXN3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZSI6cmV0dXJuIHModCk7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGw9e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcChzKX07cmV0dXJuIG51bGwhPXQuYmJveCYmKGwuYmJveD10LmJib3gpLGw7ZGVmYXVsdDpyZXR1cm4gbyh0KX1yZXR1cm4gdH0sdC5nZW9RdWluY3VuY2lhbD1zcix0Lmdlb1JlY3Rhbmd1bGFyUG9seWNvbmljPWZ1bmN0aW9uKCl7cmV0dXJuIEsoY3IpLnNjYWxlKDEzMS4yMTUpfSx0Lmdlb1JlY3Rhbmd1bGFyUG9seWNvbmljUmF3PWNyLHQuZ2VvUm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGZyKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb1JvYmluc29uUmF3PWZyLHQuZ2VvU2F0ZWxsaXRlPWZ1bmN0aW9uKCl7dmFyIHQ9MixyPTAsbj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKGhyKSxpPW4odCxyKTtyZXR1cm4gaS5kaXN0YW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9K2Uscik6dH0saS50aWx0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24odCxyPWUqTSk6cipBfSxpLnNjYWxlKDQzMi4xNDcpLmNsaXBBbmdsZShFKDEvdCkqQS0xZS02KX0sdC5nZW9TYXRlbGxpdGVSYXc9aHIsdC5nZW9TaW51TW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihLdCkucm90YXRlKFstMjAsLTU1XSkuc2NhbGUoMTY0LjI2MykuY2VudGVyKFswLC01LjQwMzZdKX0sdC5nZW9TaW51TW9sbHdlaWRlUmF3PUt0LHQuZ2VvU2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUSkuc2NhbGUoMTUyLjYzKX0sdC5nZW9TaW51c29pZGFsUmF3PVEsdC5nZW9TdGl0Y2g9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdDtzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmUiOnJldHVybiB3cih0KTtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjp2YXIgZT17dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKHdyKX07cmV0dXJuIG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGU7ZGVmYXVsdDpyZXR1cm4gVHIodCl9fSx0Lmdlb1RpbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihrcikuc2NhbGUoMTQ2LjE1Myl9LHQuZ2VvVGltZXNSYXc9a3IsdC5nZW9Ud29Qb2ludEF6aW11dGhhbD1Tcix0Lmdlb1R3b1BvaW50QXppbXV0aGFsUmF3PU1yLHQuZ2VvVHdvUG9pbnRBemltdXRoYWxVc2E9ZnVuY3Rpb24oKXtyZXR1cm4gU3IoWy0xNTgsMjEuNV0sWy03NywzOV0pLmNsaXBBbmdsZSg2MCkuc2NhbGUoNDAwKX0sdC5nZW9Ud29Qb2ludEVxdWlkaXN0YW50PUxyLHQuZ2VvVHdvUG9pbnRFcXVpZGlzdGFudFJhdz1Fcix0Lmdlb1R3b1BvaW50RXF1aWRpc3RhbnRVc2E9ZnVuY3Rpb24oKXtyZXR1cm4gTHIoWy0xNTgsMjEuNV0sWy03NywzOV0pLmNsaXBBbmdsZSgxMzApLnNjYWxlKDEyMi41NzEpfSx0Lmdlb1ZhbkRlckdyaW50ZW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKENyKS5zY2FsZSg3OS40MTgzKX0sdC5nZW9WYW5EZXJHcmludGVuUmF3PUNyLHQuZ2VvVmFuRGVyR3JpbnRlbjI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFByKS5zY2FsZSg3OS40MTgzKX0sdC5nZW9WYW5EZXJHcmludGVuMlJhdz1Qcix0Lmdlb1ZhbkRlckdyaW50ZW4zPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihJcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlbjNSYXc9SXIsdC5nZW9WYW5EZXJHcmludGVuND1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oT3IpLnNjYWxlKDEyNy4xNil9LHQuZ2VvVmFuRGVyR3JpbnRlbjRSYXc9T3IsdC5nZW9XYWduZXI9RHIsdC5nZW9XYWduZXI3PWZ1bmN0aW9uKCl7cmV0dXJuIERyKCkucG9sZWxpbmUoNjUpLnBhcmFsbGVscyg2MCkuaW5mbGF0aW9uKDApLnJhdGlvKDIwMCkuc2NhbGUoMTcyLjYzMyl9LHQuZ2VvV2FnbmVyUmF3PXpyLHQuZ2VvV2FnbmVyND1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQnIpLnNjYWxlKDE3Ni44NCl9LHQuZ2VvV2FnbmVyNFJhdz1Ccix0Lmdlb1dhZ25lcjY9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE5yKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb1dhZ25lcjZSYXc9TnIsdC5nZW9XaWVjaGVsPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihqcikucm90YXRlKFswLC05MCw0NV0pLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb1dpZWNoZWxSYXc9anIsdC5nZW9XaW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihVcikuc2NhbGUoMTU4LjgzNyl9LHQuZ2VvV2lua2VsM1Jhdz1VcixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjEwMiwiZDMtZ2VvIjoxMDl9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLWFycmF5IikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IG59ZnVuY3Rpb24gbigpe3RoaXMucmVzZXQoKX1uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2EoaSx0LHRoaXMudCksYSh0aGlzLGkucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPWkudDp0aGlzLnM9aS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBpPW5ldyBuO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQucz1lK3IsaT1uLWUsYT1uLWk7dC50PWUtYSsoci1pKX12YXIgbz0xZS02LHM9TWF0aC5QSSxsPXMvMixjPXMvNCx1PTIqcyxmPTE4MC9zLGg9cy8xODAscD1NYXRoLmFicyxkPU1hdGguYXRhbixtPU1hdGguYXRhbjIsZz1NYXRoLmNvcyx2PU1hdGguY2VpbCx5PU1hdGguZXhwLHg9TWF0aC5sb2csYj1NYXRoLnBvdyxfPU1hdGguc2luLHc9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LFQ9TWF0aC5zcXJ0LGs9TWF0aC50YW47ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9zOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBNKHQpe3JldHVybiB0PjE/bDp0PC0xPy1sOk1hdGguYXNpbih0KX1mdW5jdGlvbiBTKHQpe3JldHVybih0PV8odC8yKSkqdH1mdW5jdGlvbiBFKCl7fWZ1bmN0aW9uIEwodCxlKXt0JiZQLmhhc093blByb3BlcnR5KHQudHlwZSkmJlBbdC50eXBlXSh0LGUpfXZhciBDPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7TCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspTChyW25dLmdlb21ldHJ5LGUpfX0sUD17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXt0PXQuY29vcmRpbmF0ZXMsZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXQ9cltuXSxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe0kodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUkocltuXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Tyh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KU8ocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUwocltuXSxlKX19O2Z1bmN0aW9uIEkodCxlLHIpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxhOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gTyh0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytyPG47KUkodFtyXSxlLDEpO2UucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHoodCxlKXt0JiZDLmhhc093blByb3BlcnR5KHQudHlwZSk/Q1t0LnR5cGVdKHQsZSk6TCh0LGUpfXZhciBELFIsRixCLE4saj1yKCksVT1yKCksVj17cG9pbnQ6RSxsaW5lU3RhcnQ6RSxsaW5lRW5kOkUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ai5yZXNldCgpLFYubGluZVN0YXJ0PUgsVi5saW5lRW5kPXF9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rajtVLmFkZCh0PDA/dSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUV9LHNwaGVyZTpmdW5jdGlvbigpe1UuYWRkKHUpfX07ZnVuY3Rpb24gSCgpe1YucG9pbnQ9R31mdW5jdGlvbiBxKCl7WShELFIpfWZ1bmN0aW9uIEcodCxlKXtWLnBvaW50PVksRD10LFI9ZSxGPXQqPWgsQj1nKGU9KGUqPWgpLzIrYyksTj1fKGUpfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj0odCo9aCktRixuPXI+PTA/MTotMSxpPW4qcixhPWcoZT0oZSo9aCkvMitjKSxvPV8oZSkscz1OKm8sbD1CKmErcypnKGkpLHU9cypuKl8oaSk7ai5hZGQobSh1LGwpKSxGPXQsQj1hLE49b31mdW5jdGlvbiBXKHQpe3JldHVyblttKHRbMV0sdFswXSksTSh0WzJdKV19ZnVuY3Rpb24gWCh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWcocik7cmV0dXJuW24qZyhlKSxuKl8oZSksXyhyKV19ZnVuY3Rpb24gWih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBKKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBLKHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gUSh0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gJCh0KXt2YXIgZT1UKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsbHQsY3QsdXQsZnQsaHQscHQsZHQsbXQsZ3QsdnQseXQseHQsYnQsX3Qsd3QsVHQsa3QsQXQsTXQ9cigpLFN0PXtwb2ludDpFdCxsaW5lU3RhcnQ6Q3QsbGluZUVuZDpQdCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtTdC5wb2ludD1JdCxTdC5saW5lU3RhcnQ9T3QsU3QubGluZUVuZD16dCxNdC5yZXNldCgpLFYucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtWLnBvbHlnb25FbmQoKSxTdC5wb2ludD1FdCxTdC5saW5lU3RhcnQ9Q3QsU3QubGluZUVuZD1QdCxqPDA/KHR0PS0ocnQ9MTgwKSxldD0tKG50PTkwKSk6TXQ+bz9udD05MDpNdDwtbyYmKGV0PS05MCksY3RbMF09dHQsY3RbMV09cnR9LHNwaGVyZTpmdW5jdGlvbigpe3R0PS0ocnQ9MTgwKSxldD0tKG50PTkwKX19O2Z1bmN0aW9uIEV0KHQsZSl7bHQucHVzaChjdD1bdHQ9dCxydD10XSksZTxldCYmKGV0PWUpLGU+bnQmJihudD1lKX1mdW5jdGlvbiBMdCh0LGUpe3ZhciByPVgoW3QqaCxlKmhdKTtpZihzdCl7dmFyIG49SihzdCxyKSxpPUooW25bMV0sLW5bMF0sMF0sbik7JChpKSxpPVcoaSk7dmFyIGEsbz10LWl0LHM9bz4wPzE6LTEsbD1pWzBdKmYqcyxjPXAobyk+MTgwO2NeKHMqaXQ8bCYmbDxzKnQpPyhhPWlbMV0qZik+bnQmJihudD1hKTpjXihzKml0PChsPShsKzM2MCklMzYwLTE4MCkmJmw8cyp0KT8oYT0taVsxXSpmKTxldCYmKGV0PWEpOihlPGV0JiYoZXQ9ZSksZT5udCYmKG50PWUpKSxjP3Q8aXQ/RHQodHQsdCk+RHQodHQscnQpJiYocnQ9dCk6RHQodCxydCk+RHQodHQscnQpJiYodHQ9dCk6cnQ+PXR0Pyh0PHR0JiYodHQ9dCksdD5ydCYmKHJ0PXQpKTp0Pml0P0R0KHR0LHQpPkR0KHR0LHJ0KSYmKHJ0PXQpOkR0KHQscnQpPkR0KHR0LHJ0KSYmKHR0PXQpfWVsc2UgbHQucHVzaChjdD1bdHQ9dCxydD10XSk7ZTxldCYmKGV0PWUpLGU+bnQmJihudD1lKSxzdD1yLGl0PXR9ZnVuY3Rpb24gQ3QoKXtTdC5wb2ludD1MdH1mdW5jdGlvbiBQdCgpe2N0WzBdPXR0LGN0WzFdPXJ0LFN0LnBvaW50PUV0LHN0PW51bGx9ZnVuY3Rpb24gSXQodCxlKXtpZihzdCl7dmFyIHI9dC1pdDtNdC5hZGQocChyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIGF0PXQsb3Q9ZTtWLnBvaW50KHQsZSksTHQodCxlKX1mdW5jdGlvbiBPdCgpe1YubGluZVN0YXJ0KCl9ZnVuY3Rpb24genQoKXtJdChhdCxvdCksVi5saW5lRW5kKCkscChNdCk+byYmKHR0PS0ocnQ9MTgwKSksY3RbMF09dHQsY3RbMV09cnQsc3Q9bnVsbH1mdW5jdGlvbiBEdCh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gUnQodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgQnQ9e3NwaGVyZTpFLHBvaW50Ok50LGxpbmVTdGFydDpVdCxsaW5lRW5kOnF0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0J0LmxpbmVTdGFydD1HdCxCdC5saW5lRW5kPVl0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7QnQubGluZVN0YXJ0PVV0LEJ0LmxpbmVFbmQ9cXR9fTtmdW5jdGlvbiBOdCh0LGUpe3QqPWg7dmFyIHI9ZyhlKj1oKTtqdChyKmcodCkscipfKHQpLF8oZSkpfWZ1bmN0aW9uIGp0KHQsZSxyKXsrK3V0LGh0Kz0odC1odCkvdXQscHQrPShlLXB0KS91dCxkdCs9KHItZHQpL3V0fWZ1bmN0aW9uIFV0KCl7QnQucG9pbnQ9VnR9ZnVuY3Rpb24gVnQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCk7VHQ9cipnKHQpLGt0PXIqXyh0KSxBdD1fKGUpLEJ0LnBvaW50PUh0LGp0KFR0LGt0LEF0KX1mdW5jdGlvbiBIdCh0LGUpe3QqPWg7dmFyIHI9ZyhlKj1oKSxuPXIqZyh0KSxpPXIqXyh0KSxhPV8oZSksbz1tKFQoKG89a3QqYS1BdCppKSpvKyhvPUF0Km4tVHQqYSkqbysobz1UdCppLWt0Km4pKm8pLFR0Km4ra3QqaStBdCphKTtmdCs9byxtdCs9byooVHQrKFR0PW4pKSxndCs9byooa3QrKGt0PWkpKSx2dCs9byooQXQrKEF0PWEpKSxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gcXQoKXtCdC5wb2ludD1OdH1mdW5jdGlvbiBHdCgpe0J0LnBvaW50PVd0fWZ1bmN0aW9uIFl0KCl7WHQoX3Qsd3QpLEJ0LnBvaW50PU50fWZ1bmN0aW9uIFd0KHQsZSl7X3Q9dCx3dD1lLHQqPWgsZSo9aCxCdC5wb2ludD1YdDt2YXIgcj1nKGUpO1R0PXIqZyh0KSxrdD1yKl8odCksQXQ9XyhlKSxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gWHQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCksbj1yKmcodCksaT1yKl8odCksYT1fKGUpLG89a3QqYS1BdCppLHM9QXQqbi1UdCphLGw9VHQqaS1rdCpuLGM9VChvKm8rcypzK2wqbCksdT1NKGMpLGY9YyYmLXUvYzt5dCs9ZipvLHh0Kz1mKnMsYnQrPWYqbCxmdCs9dSxtdCs9dSooVHQrKFR0PW4pKSxndCs9dSooa3QrKGt0PWkpKSx2dCs9dSooQXQrKEF0PWEpKSxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gWnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEp0KHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuW3AodCk+cz90K01hdGgucm91bmQoLXQvdSkqdTp0LGVdfWZ1bmN0aW9uIFF0KHQsZSxyKXtyZXR1cm4odCU9dSk/ZXx8cj9KdCh0ZSh0KSxlZShlLHIpKTp0ZSh0KTplfHxyP2VlKGUscik6S3R9ZnVuY3Rpb24gJHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuWyhlKz10KT5zP2UtdTplPC1zP2UrdTplLHJdfX1mdW5jdGlvbiB0ZSh0KXt2YXIgZT0kdCh0KTtyZXR1cm4gZS5pbnZlcnQ9JHQoLXQpLGV9ZnVuY3Rpb24gZWUodCxlKXt2YXIgcj1nKHQpLG49Xyh0KSxpPWcoZSksYT1fKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1nKGUpLHM9Zyh0KSpvLGw9Xyh0KSpvLGM9XyhlKSx1PWMqcitzKm47cmV0dXJuW20obCppLXUqYSxzKnItYypuKSxNKHUqaStsKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1nKGUpLHM9Zyh0KSpvLGw9Xyh0KSpvLGM9XyhlKSx1PWMqaS1sKmE7cmV0dXJuW20obCppK2MqYSxzKnIrdSpuKSxNKHUqci1zKm4pXX0sb31mdW5jdGlvbiByZSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpoLGVbMV0qaCkpWzBdKj1mLGVbMV0qPWYsZX1yZXR1cm4gdD1RdCh0WzBdKmgsdFsxXSpoLHQubGVuZ3RoPjI/dFsyXSpoOjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qaCxlWzFdKmgpKVswXSo9ZixlWzFdKj1mLGV9LGV9ZnVuY3Rpb24gbmUodCxlLHIsbixpLGEpe2lmKHIpe3ZhciBvPWcoZSkscz1fKGUpLGw9bipyO251bGw9PWk/KGk9ZStuKnUsYT1lLWwvMik6KGk9aWUobyxpKSxhPWllKG8sYSksKG4+MD9pPGE6aT5hKSYmKGkrPW4qdSkpO2Zvcih2YXIgYyxmPWk7bj4wP2Y+YTpmPGE7Zi09bCljPVcoW28sLXMqZyhmKSwtcypfKGYpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBpZSh0LGUpeyhlPVgoZSkpWzBdLT10LCQoZSk7dmFyIHI9QSgtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1yOnIpK3UtbykldX1mdW5jdGlvbiBhZSgpe3ZhciB0LGU9W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUscixuKXt0LnB1c2goW2UscixuXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpFLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fWZ1bmN0aW9uIG9lKHQsZSl7cmV0dXJuIHAodFswXS1lWzBdKTxvJiZwKHRbMV0tZVsxXSk8b31mdW5jdGlvbiBzZSh0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIGxlKHQsZSxyLG4saSl7dmFyIGEscyxsPVtdLGM9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscixuPXRbMF0scz10W2VdO2lmKG9lKG4scykpe2lmKCFuWzJdJiYhc1syXSl7Zm9yKGkubGluZVN0YXJ0KCksYT0wO2E8ZTsrK2EpaS5wb2ludCgobj10W2FdKVswXSxuWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX1zWzBdKz0yKm99bC5wdXNoKHI9bmV3IHNlKG4sdCxudWxsLCEwKSksYy5wdXNoKHIubz1uZXcgc2UobixudWxsLHIsITEpKSxsLnB1c2gocj1uZXcgc2Uocyx0LG51bGwsITEpKSxjLnB1c2goci5vPW5ldyBzZShzLG51bGwsciwhMCkpfX0pKSxsLmxlbmd0aCl7Zm9yKGMuc29ydChlKSxjZShsKSxjZShjKSxhPTAscz1jLmxlbmd0aDthPHM7KythKWNbYV0uZT1yPSFyO2Zvcih2YXIgdSxmLGg9bFswXTs7KXtmb3IodmFyIHA9aCxkPSEwO3AudjspaWYoKHA9cC5uKT09PWgpcmV0dXJuO3U9cC56LGkubGluZVN0YXJ0KCk7ZG97aWYocC52PXAuby52PSEwLHAuZSl7aWYoZClmb3IoYT0wLHM9dS5sZW5ndGg7YTxzOysrYSlpLnBvaW50KChmPXVbYV0pWzBdLGZbMV0pO2Vsc2UgbihwLngscC5uLngsMSxpKTtwPXAubn1lbHNle2lmKGQpZm9yKHU9cC5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGY9dVthXSlbMF0sZlsxXSk7ZWxzZSBuKHAueCxwLnAueCwtMSxpKTtwPXAucH11PShwPXAubykueixkPSFkfXdoaWxlKCFwLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gY2UodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLHIsbj0wLGk9dFswXTsrK248ZTspaS5uPXI9dFtuXSxyLnA9aSxpPXI7aS5uPXI9dFswXSxyLnA9aX19S3QuaW52ZXJ0PUt0O3ZhciB1ZT1yKCk7ZnVuY3Rpb24gZmUodCl7cmV0dXJuIHAodFswXSk8PXM/dFswXTp3KHRbMF0pKigocCh0WzBdKStzKSV1LXMpfWZ1bmN0aW9uIGhlKHQsZSl7dmFyIHI9ZmUoZSksbj1lWzFdLGk9XyhuKSxhPVtfKHIpLC1nKHIpLDBdLGY9MCxoPTA7dWUucmVzZXQoKSwxPT09aT9uPWwrbzotMT09PWkmJihuPS1sLW8pO2Zvcih2YXIgcD0wLGQ9dC5sZW5ndGg7cDxkOysrcClpZih5PSh2PXRbcF0pLmxlbmd0aClmb3IodmFyIHYseSx4PXZbeS0xXSxiPWZlKHgpLHc9eFsxXS8yK2MsVD1fKHcpLGs9Zyh3KSxBPTA7QTx5OysrQSxiPUUsVD1DLGs9UCx4PVMpe3ZhciBTPXZbQV0sRT1mZShTKSxMPVNbMV0vMitjLEM9XyhMKSxQPWcoTCksST1FLWIsTz1JPj0wPzE6LTEsej1PKkksRD16PnMsUj1UKkM7aWYodWUuYWRkKG0oUipPKl8oeiksaypQK1IqZyh6KSkpLGYrPUQ/SStPKnU6SSxEXmI+PXJeRT49cil7dmFyIEY9SihYKHgpLFgoUykpOyQoRik7dmFyIEI9SihhLEYpOyQoQik7dmFyIE49KEReST49MD8tMToxKSpNKEJbMl0pOyhuPk58fG49PT1OJiYoRlswXXx8RlsxXSkpJiYoaCs9RF5JPj0wPzE6LTEpfX1yZXR1cm4oZjwtb3x8ZjxvJiZ1ZTwtbyleMSZofWZ1bmN0aW9uIHBlKHQscixuLGkpe3JldHVybiBmdW5jdGlvbihhKXt2YXIgbyxzLGwsYz1yKGEpLHU9YWUoKSxmPXIodSksaD0hMSxwPXtwb2ludDpkLGxpbmVTdGFydDpnLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtwLnBvaW50PXkscC5saW5lU3RhcnQ9eCxwLmxpbmVFbmQ9YixzPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwLnBvaW50PWQscC5saW5lU3RhcnQ9ZyxwLmxpbmVFbmQ9dixzPWUubWVyZ2Uocyk7dmFyIHQ9aGUobyxpKTtzLmxlbmd0aD8oaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksbGUocyxtZSx0LG4sYSkpOnQmJihofHwoYS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxhLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGgmJihhLnBvbHlnb25FbmQoKSxoPSExKSxzPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7YS5wb2x5Z29uU3RhcnQoKSxhLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCksYS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUscil7dChlLHIpJiZhLnBvaW50KGUscil9ZnVuY3Rpb24gbSh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiBnKCl7cC5wb2ludD1tLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gdigpe3AucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiB5KHQsZSl7bC5wdXNoKFt0LGVdKSxmLnBvaW50KHQsZSl9ZnVuY3Rpb24geCgpe2YubGluZVN0YXJ0KCksbD1bXX1mdW5jdGlvbiBiKCl7eShsWzBdWzBdLGxbMF1bMV0pLGYubGluZUVuZCgpO3ZhciB0LGUscixuLGk9Zi5jbGVhbigpLGM9dS5yZXN1bHQoKSxwPWMubGVuZ3RoO2lmKGwucG9wKCksby5wdXNoKGwpLGw9bnVsbCxwKWlmKDEmaSl7aWYoKGU9KHI9Y1swXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoYS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxhLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWEucG9pbnQoKG49clt0XSlbMF0sblsxXSk7YS5saW5lRW5kKCl9fWVsc2UgcD4xJiYyJmkmJmMucHVzaChjLnBvcCgpLmNvbmNhdChjLnNoaWZ0KCkpKSxzLnB1c2goYy5maWx0ZXIoZGUpKX1yZXR1cm4gcH19ZnVuY3Rpb24gZGUodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gbWUodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tbC1vOmwtdFsxXSktKChlPWUueClbMF08MD9lWzFdLWwtbzpsLWVbMV0pfXZhciBnZT1wZSgoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLChmdW5jdGlvbih0KXt2YXIgZSxyPU5hTixuPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKGEsYyl7dmFyIHU9YT4wP3M6LXMsZj1wKGEtcik7cChmLXMpPG8/KHQucG9pbnQocixuPShuK2MpLzI+MD9sOi1sKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXUmJmY+PXMmJihwKHItaSk8byYmKHItPWkqbykscChhLXUpPG8mJihhLT11Km8pLG49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxzPV8odC1yKTtyZXR1cm4gcChzKT5vP2QoKF8oZSkqKGE9ZyhuKSkqXyhyKS1fKG4pKihpPWcoZSkpKl8odCkpLyhpKmEqcykpOihlK24pLzJ9KHIsbixhLGMpLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxuKSxlPTApLHQucG9pbnQocj1hLG49YyksaT11fSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqbCxuLnBvaW50KC1zLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KHMsaSksbi5wb2ludChzLDApLG4ucG9pbnQocywtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1zLC1pKSxuLnBvaW50KC1zLDApLG4ucG9pbnQoLXMsaSk7ZWxzZSBpZihwKHRbMF0tZVswXSk+byl7dmFyIGE9dFswXTxlWzBdP3M6LXM7aT1yKmEvMixuLnBvaW50KC1hLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KGEsaSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9KSxbLXMsLWxdKTtmdW5jdGlvbiB2ZSh0KXt2YXIgZT1nKHQpLHI9NipoLG49ZT4wLGk9cChlKT5vO2Z1bmN0aW9uIGEodCxyKXtyZXR1cm4gZyh0KSpnKHIpPmV9ZnVuY3Rpb24gbCh0LHIsbil7dmFyIGk9WzEsMCwwXSxhPUooWCh0KSxYKHIpKSxsPVooYSxhKSxjPWFbMF0sdT1sLWMqYztpZighdSlyZXR1cm4hbiYmdDt2YXIgZj1lKmwvdSxoPS1lKmMvdSxkPUooaSxhKSxtPVEoaSxmKTtLKG0sUShhLGgpKTt2YXIgZz1kLHY9WihtLGcpLHk9WihnLGcpLHg9dip2LXkqKFoobSxtKS0xKTtpZighKHg8MCkpe3ZhciBiPVQoeCksXz1RKGcsKC12LWIpL3kpO2lmKEsoXyxtKSxfPVcoXyksIW4pcmV0dXJuIF87dmFyIHcsaz10WzBdLEE9clswXSxNPXRbMV0sUz1yWzFdO0E8ayYmKHc9ayxrPUEsQT13KTt2YXIgRT1BLWssTD1wKEUtcyk8bztpZighTCYmUzxNJiYodz1NLE09UyxTPXcpLEx8fEU8bz9MP00rUz4wXl9bMV08KHAoX1swXS1rKTxvP006Uyk6TTw9X1sxXSYmX1sxXTw9UzpFPnNeKGs8PV9bMF0mJl9bMF08PUEpKXt2YXIgQz1RKGcsKC12K2IpL3kpO3JldHVybiBLKEMsbSksW18sVyhDKV19fX1mdW5jdGlvbiBjKGUscil7dmFyIGk9bj90OnMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxyPC1pP2F8PTQ6cj5pJiYoYXw9OCksYX1yZXR1cm4gcGUoYSwoZnVuY3Rpb24odCl7dmFyIGUscixvLHUsZjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1vPSExLGY9MX0scG9pbnQ6ZnVuY3Rpb24oaCxwKXt2YXIgZCxtPVtoLHBdLGc9YShoLHApLHY9bj9nPzA6YyhoLHApOmc/YyhoKyhoPDA/czotcykscCk6MDtpZighZSYmKHU9bz1nKSYmdC5saW5lU3RhcnQoKSxnIT09byYmKCEoZD1sKGUsbSkpfHxvZShlLGQpfHxvZShtLGQpKSYmKG1bMl09MSksZyE9PW8pZj0wLGc/KHQubGluZVN0YXJ0KCksZD1sKG0sZSksdC5wb2ludChkWzBdLGRbMV0pKTooZD1sKGUsbSksdC5wb2ludChkWzBdLGRbMV0sMiksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJm5eZyl7dmFyIHk7diZyfHwhKHk9bChtLGUsITApKXx8KGY9MCxuPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSwzKSkpfSFnfHxlJiZvZShlLG0pfHx0LnBvaW50KG1bMF0sbVsxXSksZT1tLG89ZyxyPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtvJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ8KHUmJm8pPDwxfX19KSwoZnVuY3Rpb24oZSxuLGksYSl7bmUoYSx0LHIsaSxlLG4pfSksbj9bMCwtdF06Wy1zLHQtc10pfWZ1bmN0aW9uIHllKHQscixuLGkpe2Z1bmN0aW9uIGEoZSxhKXtyZXR1cm4gdDw9ZSYmZTw9biYmcjw9YSYmYTw9aX1mdW5jdGlvbiBzKGUsYSxvLHMpe3ZhciBjPTAsZj0wO2lmKG51bGw9PWV8fChjPWwoZSxvKSkhPT0oZj1sKGEsbykpfHx1KGUsYSk8MF5vPjApZG97cy5wb2ludCgwPT09Y3x8Mz09PWM/dDpuLGM+MT9pOnIpfXdoaWxlKChjPShjK28rNCklNCkhPT1mKTtlbHNlIHMucG9pbnQoYVswXSxhWzFdKX1mdW5jdGlvbiBsKGUsaSl7cmV0dXJuIHAoZVswXS10KTxvP2k+MD8wOjM6cChlWzBdLW4pPG8/aT4wPzI6MTpwKGVbMV0tcik8bz9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB1KHQueCxlLngpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1sKHQsMSksbj1sKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBsLHUsZixoLHAsZCxtLGcsdix5LHgsYj1vLF89YWUoKSx3PXtwb2ludDpULGxpbmVTdGFydDpmdW5jdGlvbigpe3cucG9pbnQ9ayx1JiZ1LnB1c2goZj1bXSk7eT0hMCx2PSExLG09Zz1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiYoayhoLHApLGQmJnYmJl8ucmVqb2luKCksbC5wdXNoKF8ucmVzdWx0KCkpKTt3LnBvaW50PVQsdiYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9XyxsPVtdLHU9W10seD0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciByPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wLG49dS5sZW5ndGg7cjxuOysrcilmb3IodmFyIGEsbyxzPXVbcl0sbD0xLGM9cy5sZW5ndGgsZj1zWzBdLGg9ZlswXSxwPWZbMV07bDxjOysrbClhPWgsbz1wLGY9c1tsXSxoPWZbMF0scD1mWzFdLG88PWk/cD5pJiYoaC1hKSooaS1vKT4ocC1vKSoodC1hKSYmKytlOnA8PWkmJihoLWEpKihpLW8pPChwLW8pKih0LWEpJiYtLWU7cmV0dXJuIGV9KCksbj14JiZyLGE9KGw9ZS5tZXJnZShsKSkubGVuZ3RoOyhufHxhKSYmKG8ucG9seWdvblN0YXJ0KCksbiYmKG8ubGluZVN0YXJ0KCkscyhudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSksYSYmbGUobCxjLHIscyxvKSxvLnBvbHlnb25FbmQoKSk7Yj1vLGw9dT1mPW51bGx9fTtmdW5jdGlvbiBUKHQsZSl7YSh0LGUpJiZiLnBvaW50KHQsZSl9ZnVuY3Rpb24gayhlLG8pe3ZhciBzPWEoZSxvKTtpZih1JiZmLnB1c2goW2Usb10pLHkpaD1lLHA9byxkPXMseT0hMSxzJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGUsbykpO2Vsc2UgaWYocyYmdiliLnBvaW50KGUsbyk7ZWxzZXt2YXIgbD1bbT1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxtKSksZz1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxnKSldLGM9W2U9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZSkpLG89TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksbykpXTshZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHM9dFswXSxsPXRbMV0sYz0wLHU9MSxmPWVbMF0tcyxoPWVbMV0tbDtpZihvPXItcyxmfHwhKG8+MCkpe2lmKG8vPWYsZjwwKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9ZWxzZSBpZihmPjApe2lmKG8+dSlyZXR1cm47bz5jJiYoYz1vKX1pZihvPWktcyxmfHwhKG88MCkpe2lmKG8vPWYsZjwwKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihmPjApe2lmKG88YylyZXR1cm47bzx1JiYodT1vKX1pZihvPW4tbCxofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9ZWxzZSBpZihoPjApe2lmKG8+dSlyZXR1cm47bz5jJiYoYz1vKX1pZihvPWEtbCxofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihoPjApe2lmKG88YylyZXR1cm47bzx1JiYodT1vKX1yZXR1cm4gYz4wJiYodFswXT1zK2MqZix0WzFdPWwrYypoKSx1PDEmJihlWzBdPXMrdSpmLGVbMV09bCt1KmgpLCEwfX19fX0obCxjLHQscixuLGkpP3MmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoZSxvKSx4PSExKToodnx8KGIubGluZVN0YXJ0KCksYi5wb2ludChsWzBdLGxbMV0pKSxiLnBvaW50KGNbMF0sY1sxXSksc3x8Yi5saW5lRW5kKCkseD0hMSl9bT1lLGc9byx2PXN9cmV0dXJuIHd9fXZhciB4ZSxiZSxfZSx3ZT1yKCksVGU9e3NwaGVyZTpFLHBvaW50OkUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7VGUucG9pbnQ9QWUsVGUubGluZUVuZD1rZX0sbGluZUVuZDpFLHBvbHlnb25TdGFydDpFLHBvbHlnb25FbmQ6RX07ZnVuY3Rpb24ga2UoKXtUZS5wb2ludD1UZS5saW5lRW5kPUV9ZnVuY3Rpb24gQWUodCxlKXt4ZT10Kj1oLGJlPV8oZSo9aCksX2U9ZyhlKSxUZS5wb2ludD1NZX1mdW5jdGlvbiBNZSh0LGUpe3QqPWg7dmFyIHI9XyhlKj1oKSxuPWcoZSksaT1wKHQteGUpLGE9ZyhpKSxvPW4qXyhpKSxzPV9lKnItYmUqbiphLGw9YmUqcitfZSpuKmE7d2UuYWRkKG0oVChvKm8rcypzKSxsKSkseGU9dCxiZT1yLF9lPW59ZnVuY3Rpb24gU2UodCl7cmV0dXJuIHdlLnJlc2V0KCkseih0LFRlKSwrd2V9dmFyIEVlPVtudWxsLG51bGxdLExlPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpFZX07ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gRWVbMF09dCxFZVsxXT1lLFNlKExlKX12YXIgUGU9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2UodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE9lKHJbbl0uZ2VvbWV0cnksZSkpcmV0dXJuITA7cmV0dXJuITF9fSxJZT17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHplKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKHplKHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGUodC5jb29yZGluYXRlcyxlKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihEZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFJlKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoUmUocltuXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE9lKHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBPZSh0LGUpe3JldHVybiEoIXR8fCFJZS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmSWVbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIHplKHQsZSl7cmV0dXJuIDA9PT1DZSh0LGUpfWZ1bmN0aW9uIERlKHQsZSl7Zm9yKHZhciByLG4saSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXtpZigwPT09KG49Q2UodFthXSxlKSkpcmV0dXJuITA7aWYoYT4wJiYoaT1DZSh0W2FdLHRbYS0xXSkpPjAmJnI8PWkmJm48PWkmJihyK24taSkqKDEtTWF0aC5wb3coKHItbikvaSwyKSk8MWUtMTIqaSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gUmUodCxlKXtyZXR1cm4hIWhlKHQubWFwKEZlKSxCZShlKSl9ZnVuY3Rpb24gRmUodCl7cmV0dXJuKHQ9dC5tYXAoQmUpKS5wb3AoKSx0fWZ1bmN0aW9uIEJlKHQpe3JldHVyblt0WzBdKmgsdFsxXSpoXX1mdW5jdGlvbiBOZSh0LHIsbil7dmFyIGk9ZS5yYW5nZSh0LHItbyxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KSl9fWZ1bmN0aW9uIGplKHQscixuKXt2YXIgaT1lLnJhbmdlKHQsci1vLG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gVWUoKXt2YXIgdCxyLG4saSxhLHMsbCxjLHUsZixoLGQsbT0xMCxnPW0seT05MCx4PTM2MCxiPTIuNTtmdW5jdGlvbiBfKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dygpfX1mdW5jdGlvbiB3KCl7cmV0dXJuIGUucmFuZ2UodihpL3kpKnksbix5KS5tYXAoaCkuY29uY2F0KGUucmFuZ2UodihjL3gpKngsbCx4KS5tYXAoZCkpLmNvbmNhdChlLnJhbmdlKHYoci9tKSptLHQsbSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gcCh0JXkpPm99KSkubWFwKHUpKS5jb25jYXQoZS5yYW5nZSh2KHMvZykqZyxhLGcpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHAodCV4KT5vfSkpLm1hcChmKSl9cmV0dXJuIF8ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2goaSkuY29uY2F0KGQobCkuc2xpY2UoMSksaChuKS5yZXZlcnNlKCkuc2xpY2UoMSksZChjKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLG49K3RbMV1bMF0sYz0rdFswXVsxXSxsPSt0WzFdWzFdLGk+biYmKHQ9aSxpPW4sbj10KSxjPmwmJih0PWMsYz1sLGw9dCksXy5wcmVjaXNpb24oYikpOltbaSxjXSxbbixsXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2VbMF1bMF0sdD0rZVsxXVswXSxzPStlWzBdWzFdLGE9K2VbMV1bMV0scj50JiYoZT1yLHI9dCx0PWUpLHM+YSYmKGU9cyxzPWEsYT1lKSxfLnByZWNpc2lvbihiKSk6W1tyLHNdLFt0LGFdXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdFswXSx4PSt0WzFdLF8pOlt5LHhdfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rdFswXSxnPSt0WzFdLF8pOlttLGddfSxfLnByZWNpc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rZSx1PU5lKHMsYSw5MCksZj1qZShyLHQsYiksaD1OZShjLGwsOTApLGQ9amUoaSxuLGIpLF8pOmJ9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC05MCtvXSxbMTgwLDkwLW9dXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1vXSxbMTgwLDgwK29dXSl9ZnVuY3Rpb24gVmUodCl7cmV0dXJuIHR9dmFyIEhlLHFlLEdlLFllLFdlPXIoKSxYZT1yKCksWmU9e3BvaW50OkUsbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1plLmxpbmVTdGFydD1KZSxaZS5saW5lRW5kPSRlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WmUubGluZVN0YXJ0PVplLmxpbmVFbmQ9WmUucG9pbnQ9RSxXZS5hZGQocChYZSkpLFhlLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVdlLzI7cmV0dXJuIFdlLnJlc2V0KCksdH19O2Z1bmN0aW9uIEplKCl7WmUucG9pbnQ9S2V9ZnVuY3Rpb24gS2UodCxlKXtaZS5wb2ludD1RZSxIZT1HZT10LHFlPVllPWV9ZnVuY3Rpb24gUWUodCxlKXtYZS5hZGQoWWUqdC1HZSplKSxHZT10LFllPWV9ZnVuY3Rpb24gJGUoKXtRZShIZSxxZSl9dmFyIHRyPTEvMCxlcj10cixycj0tdHIsbnI9cnIsaXI9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDx0ciYmKHRyPXQpO3Q+cnImJihycj10KTtlPGVyJiYoZXI9ZSk7ZT5uciYmKG5yPWUpfSxsaW5lU3RhcnQ6RSxsaW5lRW5kOkUscG9seWdvblN0YXJ0OkUscG9seWdvbkVuZDpFLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbdHIsZXJdLFtycixucl1dO3JldHVybiBycj1ucj0tKGVyPXRyPTEvMCksdH19O3ZhciBhcixvcixzcixscixjcj0wLHVyPTAsZnI9MCxocj0wLHByPTAsZHI9MCxtcj0wLGdyPTAsdnI9MCx5cj17cG9pbnQ6eHIsbGluZVN0YXJ0OmJyLGxpbmVFbmQ6VHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eXIubGluZVN0YXJ0PWtyLHlyLmxpbmVFbmQ9QXJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5ci5wb2ludD14cix5ci5saW5lU3RhcnQ9YnIseXIubGluZUVuZD1Ucn0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9dnI/W21yL3ZyLGdyL3ZyXTpkcj9baHIvZHIscHIvZHJdOmZyP1tjci9mcix1ci9mcl06W05hTixOYU5dO3JldHVybiBjcj11cj1mcj1ocj1wcj1kcj1tcj1ncj12cj0wLHR9fTtmdW5jdGlvbiB4cih0LGUpe2NyKz10LHVyKz1lLCsrZnJ9ZnVuY3Rpb24gYnIoKXt5ci5wb2ludD1fcn1mdW5jdGlvbiBfcih0LGUpe3lyLnBvaW50PXdyLHhyKHNyPXQsbHI9ZSl9ZnVuY3Rpb24gd3IodCxlKXt2YXIgcj10LXNyLG49ZS1scixpPVQocipyK24qbik7aHIrPWkqKHNyK3QpLzIscHIrPWkqKGxyK2UpLzIsZHIrPWkseHIoc3I9dCxscj1lKX1mdW5jdGlvbiBUcigpe3lyLnBvaW50PXhyfWZ1bmN0aW9uIGtyKCl7eXIucG9pbnQ9TXJ9ZnVuY3Rpb24gQXIoKXtTcihhcixvcil9ZnVuY3Rpb24gTXIodCxlKXt5ci5wb2ludD1Tcix4cihhcj1zcj10LG9yPWxyPWUpfWZ1bmN0aW9uIFNyKHQsZSl7dmFyIHI9dC1zcixuPWUtbHIsaT1UKHIqcituKm4pO2hyKz1pKihzcit0KS8yLHByKz1pKihscitlKS8yLGRyKz1pLG1yKz0oaT1scip0LXNyKmUpKihzcit0KSxncis9aSoobHIrZSksdnIrPTMqaSx4cihzcj10LGxyPWUpfWZ1bmN0aW9uIEVyKHQpe3RoaXMuX2NvbnRleHQ9dH1Fci5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxlKSx0aGlzLl9jb250ZXh0LmFyYyh0LGUsdGhpcy5fcmFkaXVzLDAsdSl9fSxyZXN1bHQ6RX07dmFyIExyLENyLFByLElyLE9yLHpyPXIoKSxEcj17cG9pbnQ6RSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtEci5wb2ludD1Scn0sbGluZUVuZDpmdW5jdGlvbigpe0xyJiZGcihDcixQciksRHIucG9pbnQ9RX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7THI9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtMcj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0renI7cmV0dXJuIHpyLnJlc2V0KCksdH19O2Z1bmN0aW9uIFJyKHQsZSl7RHIucG9pbnQ9RnIsQ3I9SXI9dCxQcj1Pcj1lfWZ1bmN0aW9uIEZyKHQsZSl7SXItPXQsT3ItPWUsenIuYWRkKFQoSXIqSXIrT3IqT3IpKSxJcj10LE9yPWV9ZnVuY3Rpb24gQnIoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gTnIodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24ganIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBVcjtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHIuc3RyZWFtPWUscn19ZnVuY3Rpb24gVXIoKXt9ZnVuY3Rpb24gVnIodCxlLHIpe3ZhciBuPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7cmV0dXJuIHQuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPW4mJnQuY2xpcEV4dGVudChudWxsKSx6KHIsdC5zdHJlYW0oaXIpKSxlKGlyLnJlc3VsdCgpKSxudWxsIT1uJiZ0LmNsaXBFeHRlbnQobiksdH1mdW5jdGlvbiBIcih0LGUscil7cmV0dXJuIFZyKHQsKGZ1bmN0aW9uKHIpe3ZhciBuPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKG4vKHJbMV1bMF0tclswXVswXSksaS8oclsxXVsxXS1yWzBdWzFdKSksbz0rZVswXVswXSsobi1hKihyWzFdWzBdK3JbMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooclsxXVsxXStyWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSkscil9ZnVuY3Rpb24gcXIodCxlLHIpe3JldHVybiBIcih0LFtbMCwwXSxlXSxyKX1mdW5jdGlvbiBHcih0LGUscil7cmV0dXJuIFZyKHQsKGZ1bmN0aW9uKHIpe3ZhciBuPStlLGk9bi8oclsxXVswXS1yWzBdWzBdKSxhPShuLWkqKHJbMV1bMF0rclswXVswXSkpLzIsbz0taSpyWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxyKX1mdW5jdGlvbiBZcih0LGUscil7cmV0dXJuIFZyKHQsKGZ1bmN0aW9uKHIpe3ZhciBuPStlLGk9bi8oclsxXVsxXS1yWzBdWzFdKSxhPS1pKnJbMF1bMF0sbz0obi1pKihyWzFdWzFdK3JbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxyKX1Cci5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6TnIoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1Ocih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LFVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXIscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIFdyPWcoMzAqaCk7ZnVuY3Rpb24gWHIodCxlKXtyZXR1cm4rZT9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIobixpLGEscyxsLGMsdSxmLGgsZCxnLHYseSx4KXt2YXIgYj11LW4sXz1mLWksdz1iKmIrXypfO2lmKHc+NCplJiZ5LS0pe3ZhciBrPXMrZCxBPWwrZyxTPWMrdixFPVQoayprK0EqQStTKlMpLEw9TShTLz1FKSxDPXAocChTKS0xKTxvfHxwKGEtaCk8bz8oYStoKS8yOm0oQSxrKSxQPXQoQyxMKSxJPVBbMF0sTz1QWzFdLHo9SS1uLEQ9Ty1pLFI9Xyp6LWIqRDsoUipSL3c+ZXx8cCgoYip6K18qRCkvdy0uNSk+LjN8fHMqZCtsKmcrYyp2PFdyKSYmKHIobixpLGEscyxsLGMsSSxPLEMsay89RSxBLz1FLFMseSx4KSx4LnBvaW50KEksTykscihJLE8sQyxrLEEsUyx1LGYsaCxkLGcsdix5LHgpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtPXtwb2ludDpnLGxpbmVTdGFydDp2LGxpbmVFbmQ6eCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLG0ubGluZVN0YXJ0PWJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxtLmxpbmVTdGFydD12fX07ZnVuY3Rpb24gZyhyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiB2KCl7dT1OYU4sbS5wb2ludD15LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geShuLGkpe3ZhciBhPVgoW24saV0pLG89dChuLGkpO3IodSxmLGMsaCxwLGQsdT1vWzBdLGY9b1sxXSxjPW4saD1hWzBdLHA9YVsxXSxkPWFbMl0sMTYsZSksZS5wb2ludCh1LGYpfWZ1bmN0aW9uIHgoKXttLnBvaW50PWcsZS5saW5lRW5kKCl9ZnVuY3Rpb24gYigpe3YoKSxtLnBvaW50PV8sbS5saW5lRW5kPXd9ZnVuY3Rpb24gXyh0LGUpe3kobj10LGUpLGk9dSxhPWYsbz1oLHM9cCxsPWQsbS5wb2ludD15fWZ1bmN0aW9uIHcoKXtyKHUsZixjLGgscCxkLGksYSxuLG8scyxsLDE2LGUpLG0ubGluZUVuZD14LHgoKX1yZXR1cm4gbX19KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIGpyKHtwb2ludDpmdW5jdGlvbihlLHIpe2U9dChlLHIpLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfXZhciBacj1qcih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KmgsZSpoKX19KTtmdW5jdGlvbiBKcih0LGUscixuLGkpe2Z1bmN0aW9uIGEoYSxvKXtyZXR1cm5bZSt0KihhKj1uKSxyLXQqKG8qPWkpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24oYSxvKXtyZXR1cm5bKGEtZSkvdCpuLChyLW8pL3QqaV19LGF9ZnVuY3Rpb24gS3IodCxlLHIsbixpLGEpe3ZhciBvPWcoYSkscz1fKGEpLGw9byp0LGM9cyp0LHU9by90LGY9cy90LGg9KHMqci1vKmUpL3QscD0ocyplK28qcikvdDtmdW5jdGlvbiBkKHQsYSl7cmV0dXJuW2wqKHQqPW4pLWMqKGEqPWkpK2Usci1jKnQtbCphXX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bbioodSp0LWYqZStoKSxpKihwLWYqdC11KmUpXX0sZH1mdW5jdGlvbiBRcih0KXtyZXR1cm4gJHIoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiAkcih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxwPTE1MCxkPTQ4MCxtPTI1MCxnPTAsdj0wLHk9MCx4PTAsYj0wLF89MCx3PTEsaz0xLEE9bnVsbCxNPWdlLFM9bnVsbCxFPVZlLEw9LjU7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbCh0WzBdKmgsdFsxXSpoKX1mdW5jdGlvbiBQKHQpe3JldHVybih0PWwuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpmLHRbMV0qZl19ZnVuY3Rpb24gSSgpe3ZhciB0PUtyKHAsMCwwLHcsayxfKS5hcHBseShudWxsLGUoZyx2KSksbj0oXz9LcjpKcikocCxkLXRbMF0sbS10WzFdLHcsayxfKTtyZXR1cm4gcj1RdCh5LHgsYikscz1KdChlLG4pLGw9SnQocixzKSxvPVhyKHMsTCksTygpfWZ1bmN0aW9uIE8oKXtyZXR1cm4gYz11PW51bGwsQ31yZXR1cm4gQy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGMmJnU9PT10P2M6Yz1acihmdW5jdGlvbih0KXtyZXR1cm4ganIoe3BvaW50OmZ1bmN0aW9uKGUscil7dmFyIG49dChlLHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfShyKShNKG8oRSh1PXQpKSkpKX0sQy5wcmVjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPXQsQT12b2lkIDAsTygpKTpNfSxDLnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPXQsUz1uPWk9YT1udWxsLE8oKSk6RX0sQy5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09K3Q/dmUoQT10KmgpOihBPW51bGwsZ2UpLE8oKSk6QSpmfSxDLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9bnVsbD09dD8oUz1uPWk9YT1udWxsLFZlKTp5ZShTPSt0WzBdWzBdLG49K3RbMF1bMV0saT0rdFsxXVswXSxhPSt0WzFdWzFdKSxPKCkpOm51bGw9PVM/bnVsbDpbW1Msbl0sW2ksYV1dfSxDLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LEkoKSk6cH0sQy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0rdFsxXSxJKCkpOltkLG1dfSxDLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpoLHY9dFsxXSUzNjAqaCxJKCkpOltnKmYsdipmXX0sQy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dFswXSUzNjAqaCx4PXRbMV0lMzYwKmgsYj10Lmxlbmd0aD4yP3RbMl0lMzYwKmg6MCxJKCkpOlt5KmYseCpmLGIqZl19LEMuYW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCUzNjAqaCxJKCkpOl8qZn0sQy5yZWZsZWN0WD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz10Py0xOjEsSSgpKTp3PDB9LEMucmVmbGVjdFk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dD8tMToxLEkoKSk6azwwfSxDLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1YcihzLEw9dCp0KSxPKCkpOlQoTCl9LEMuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKEMsdCxlKX0sQy5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKEMsdCxlKX0sQy5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihDLHQsZSl9LEMuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKEMsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxDLmludmVydD1lLmludmVydCYmUCxJKCl9fWZ1bmN0aW9uIHRuKHQpe3ZhciBlPTAscj1zLzMsbj0kcih0KSxpPW4oZSxyKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qaCxyPXRbMV0qaCk6W2UqZixyKmZdfSxpfWZ1bmN0aW9uIGVuKHQsZSl7dmFyIHI9Xyh0KSxuPShyK18oZSkpLzI7aWYocChuKTxvKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1nKHQpO2Z1bmN0aW9uIHIodCxyKXtyZXR1cm5bdCplLF8ocikvZV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7cmV0dXJuW3QvZSxNKHIqZSldfSxyfSh0KTt2YXIgaT0xK3IqKDIqbi1yKSxhPVQoaSkvbjtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9VChpLTIqbipfKGUpKS9uO3JldHVybltyKl8odCo9biksYS1yKmcodCldfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZSxvPW0odCxwKHIpKSp3KHIpO3JldHVybiByKm48MCYmKG8tPXMqdyh0KSp3KHIpKSxbby9uLE0oKGktKHQqdCtyKnIpKm4qbikvKDIqbikpXX0sbH1mdW5jdGlvbiBybigpe3JldHVybiB0bihlbikuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBubigpe3JldHVybiBybigpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIGFuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPWcoZSksaT1nKHIpLGE9dChuKmkpO3JldHVyblthKmkqXyhlKSxhKl8ocildfX1mdW5jdGlvbiBvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1UKGUqZStyKnIpLGk9dChuKSxhPV8oaSksbz1nKGkpO3JldHVyblttKGUqYSxuKm8pLE0obiYmciphL24pXX19dmFyIHNuPWFuKChmdW5jdGlvbih0KXtyZXR1cm4gVCgyLygxK3QpKX0pKTtzbi5pbnZlcnQ9b24oKGZ1bmN0aW9uKHQpe3JldHVybiAyKk0odC8yKX0pKTt2YXIgbG49YW4oKGZ1bmN0aW9uKHQpe3JldHVybih0PUEodCkpJiZ0L18odCl9KSk7ZnVuY3Rpb24gY24odCxlKXtyZXR1cm5bdCx4KGsoKGwrZSkvMikpXX1mdW5jdGlvbiB1bih0KXt2YXIgZSxyLG4saT1Rcih0KSxhPWkuY2VudGVyLG89aS5zY2FsZSxsPWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LHU9bnVsbDtmdW5jdGlvbiBmKCl7dmFyIGE9cypvKCksbD1pKHJlKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBjKG51bGw9PXU/W1tsWzBdLWEsbFsxXS1hXSxbbFswXSthLGxbMV0rYV1dOnQ9PT1jbj9bW01hdGgubWF4KGxbMF0tYSx1KSxlXSxbTWF0aC5taW4obFswXSthLHIpLG5dXTpbW3UsTWF0aC5tYXgobFsxXS1hLGUpXSxbcixNYXRoLm1pbihsWzFdK2EsbildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksZigpKTpvKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsKHQpLGYoKSk6bCgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxmKCkpOmEoKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3U9ZT1yPW49bnVsbDoodT0rdFswXVswXSxlPSt0WzBdWzFdLHI9K3RbMV1bMF0sbj0rdFsxXVsxXSksZigpKTpudWxsPT11P251bGw6W1t1LGVdLFtyLG5dXX0sZigpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiBrKChsK3QpLzIpfWZ1bmN0aW9uIGhuKHQsZSl7dmFyIHI9Zyh0KSxuPXQ9PT1lP18odCk6eChyL2coZSkpL3goZm4oZSkvZm4odCkpLGk9cipiKGZuKHQpLG4pL247aWYoIW4pcmV0dXJuIGNuO2Z1bmN0aW9uIGEodCxlKXtpPjA/ZTwtbCtvJiYoZT0tbCtvKTplPmwtbyYmKGU9bC1vKTt2YXIgcj1pL2IoZm4oZSksbik7cmV0dXJuW3IqXyhuKnQpLGktcipnKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZSxhPXcobikqVCh0KnQrcipyKSxvPW0odCxwKHIpKSp3KHIpO3JldHVybiByKm48MCYmKG8tPXMqdyh0KSp3KHIpKSxbby9uLDIqZChiKGkvYSwxL24pKS1sXX0sYX1mdW5jdGlvbiBwbih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIGRuKHQsZSl7dmFyIHI9Zyh0KSxuPXQ9PT1lP18odCk6KHItZyhlKSkvKGUtdCksaT1yL24rdDtpZihwKG4pPG8pcmV0dXJuIHBuO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pLWUsYT1uKnQ7cmV0dXJuW3IqXyhhKSxpLXIqZyhhKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS1lLGE9bSh0LHAocikpKncocik7cmV0dXJuIHIqbjwwJiYoYS09cyp3KHQpKncocikpLFthL24saS13KG4pKlQodCp0K3IqcildfSxhfWxuLmludmVydD1vbigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSksY24uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipkKHkoZSkpLWxdfSxwbi5pbnZlcnQ9cG47dmFyIG1uPTEuMzQwMjY0LGduPS0uMDgxMTA2LHZuPTg5M2UtNix5bj0uMDAzNzk2LHhuPVQoMykvMjtmdW5jdGlvbiBibih0LGUpe3ZhciByPU0oeG4qXyhlKSksbj1yKnIsaT1uKm4qbjtyZXR1cm5bdCpnKHIpLyh4bioobW4rMypnbipuK2kqKDcqdm4rOSp5bipuKSkpLHIqKG1uK2duKm4raSoodm4reW4qbikpXX1mdW5jdGlvbiBfbih0LGUpe3ZhciByPWcoZSksbj1nKHQpKnI7cmV0dXJuW3IqXyh0KS9uLF8oZSkvbl19ZnVuY3Rpb24gd24odCxlKXt2YXIgcj1lKmUsbj1yKnI7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqcituKihuKiguMDAzOTcxKnItLjAwMTUyOSpuKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrciooLjAxNTA4NStuKiguMDI4ODc0KnItLjA0NDQ3NS0uMDA1OTE2Km4pKSldfWZ1bmN0aW9uIFRuKHQsZSl7cmV0dXJuW2coZSkqXyh0KSxfKGUpXX1mdW5jdGlvbiBrbih0LGUpe3ZhciByPWcoZSksbj0xK2codCkqcjtyZXR1cm5bcipfKHQpL24sXyhlKS9uXX1mdW5jdGlvbiBBbih0LGUpe3JldHVyblt4KGsoKGwrZSkvMikpLC10XX1ibi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj1lLGk9bipuLGE9aSppKmksbz0wO288MTImJihhPShpPShuLT1yPShuKihtbitnbippK2EqKHZuK3luKmkpKS1lKS8obW4rMypnbippK2EqKDcqdm4rOSp5bippKSkpKm4pKmkqaSwhKHAocik8MWUtMTIpKTsrK28pO3JldHVyblt4bip0KihtbiszKmduKmkrYSooNyp2bis5KnluKmkpKS9nKG4pLE0oXyhuKS94bildfSxfbi5pbnZlcnQ9b24oZCksd24uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLHM9YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrcyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipzKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K3MqKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqcykpKX13aGlsZShwKHIpPm8mJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9bipuKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LFRuLmludmVydD1vbihNKSxrbi5pbnZlcnQ9b24oKGZ1bmN0aW9uKHQpe3JldHVybiAyKmQodCl9KSksQW4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqZCh5KHQpKS1sXX0sdC5nZW9BbGJlcnM9bm4sdC5nZW9BbGJlcnNVc2E9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEscz1ubigpLGw9cm4oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9cm4oKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gZih0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLHIucG9pbnQoZSxvKSxhfHwobi5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsZn1yZXR1cm4gZi5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9cy5zY2FsZSgpLHI9cy50cmFuc2xhdGUoKSxuPSh0WzBdLXJbMF0pL2UsaT0odFsxXS1yWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmbj49LS40MjUmJm48LS4yMTQ/bDppPj0uMTY2JiZpPC4yMzQmJm4+PS0uMjE0JiZuPC0uMTE1P2M6cykuaW52ZXJ0KHQpfSxmLnN0cmVhbT1mdW5jdGlvbihyKXtyZXR1cm4gdCYmZT09PXI/dDoobj1bcy5zdHJlYW0oZT1yKSxsLnN0cmVhbShyKSxjLnN0cmVhbShyKV0saT1uLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMTsrK3I8aTspbltyXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspblt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspblt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspblt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspblt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIG4saX0sZi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMucHJlY2lzaW9uKHQpLGwucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6cy5wcmVjaXNpb24oKX0sZi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocy5zY2FsZSh0KSxsLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGYudHJhbnNsYXRlKHMudHJhbnNsYXRlKCkpKTpzLnNjYWxlKCl9LGYudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzLnRyYW5zbGF0ZSgpO3ZhciBlPXMuc2NhbGUoKSxhPSt0WzBdLGY9K3RbMV07cmV0dXJuIHI9cy50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGYtLjIzOCplXSxbYSsuNDU1KmUsZisuMjM4KmVdXSkuc3RyZWFtKHUpLG49bC50cmFuc2xhdGUoW2EtLjMwNyplLGYrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplK28sZisuMTIqZStvXSxbYS0uMjE0KmUtbyxmKy4yMzQqZS1vXV0pLnN0cmVhbSh1KSxpPWMudHJhbnNsYXRlKFthLS4yMDUqZSxmKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1thLS4yMTQqZStvLGYrLjE2NiplK29dLFthLS4xMTUqZS1vLGYrLjIzNCplLW9dXSkuc3RyZWFtKHUpLGgoKX0sZi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHIoZix0LGUpfSxmLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcXIoZix0LGUpfSxmLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdyKGYsdCxlKX0sZi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWXIoZix0LGUpfSxmLnNjYWxlKDEwNzApfSx0Lmdlb0FyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIFUucmVzZXQoKSx6KHQsViksMipVfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBRcihzbikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3PXNuLHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gUXIobG4pLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdz1sbix0Lmdlb0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZihudD1ydD0tKHR0PWV0PTEvMCksbHQ9W10seih0LFN0KSxyPWx0Lmxlbmd0aCl7Zm9yKGx0LnNvcnQoUnQpLGU9MSxhPVtuPWx0WzBdXTtlPHI7KytlKUZ0KG4sKGk9bHRbZV0pWzBdKXx8RnQobixpWzFdKT8oRHQoblswXSxpWzFdKT5EdChuWzBdLG5bMV0pJiYoblsxXT1pWzFdKSxEdChpWzBdLG5bMV0pPkR0KG5bMF0sblsxXSkmJihuWzBdPWlbMF0pKTphLnB1c2gobj1pKTtmb3Iobz0tMS8wLGU9MCxuPWFbcj1hLmxlbmd0aC0xXTtlPD1yO249aSwrK2UpaT1hW2VdLChzPUR0KG5bMV0saVswXSkpPm8mJihvPXMsdHQ9aVswXSxydD1uWzFdKX1yZXR1cm4gbHQ9Y3Q9bnVsbCx0dD09PTEvMHx8ZXQ9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbdHQsZXRdLFtydCxudF1dfSx0Lmdlb0NlbnRyb2lkPWZ1bmN0aW9uKHQpe3V0PWZ0PWh0PXB0PWR0PW10PWd0PXZ0PXl0PXh0PWJ0PTAseih0LEJ0KTt2YXIgZT15dCxyPXh0LG49YnQsaT1lKmUrcipyK24qbjtyZXR1cm4gaTwxZS0xMiYmKGU9bXQscj1ndCxuPXZ0LGZ0PG8mJihlPWh0LHI9cHQsbj1kdCksKGk9ZSplK3IqcituKm4pPDFlLTEyKT9bTmFOLE5hTl06W20ocixlKSpmLE0obi9UKGkpKSpmXX0sdC5nZW9DaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WnQoWzAsMF0pLG49WnQoOTApLGk9WnQoNiksYT17cG9pbnQ6ZnVuY3Rpb24ocixuKXt0LnB1c2gocj1lKHIsbikpLHJbMF0qPWYsclsxXSo9Zn19O2Z1bmN0aW9uIG8oKXt2YXIgbz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpKmgsbD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpoO3JldHVybiB0PVtdLGU9UXQoLW9bMF0qaCwtb1sxXSpoLDApLmludmVydCxuZShhLHMsbCwxKSxvPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLG99cmV0dXJuIG8uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoWyt0WzBdLCt0WzFdXSksbyk6cn0sby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpadCgrdCksbyk6bn0sby5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpadCgrdCksbyk6aX0sb30sdC5nZW9DbGlwQW50aW1lcmlkaWFuPWdlLHQuZ2VvQ2xpcENpcmNsZT12ZSx0Lmdlb0NsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gcj17c3RyZWFtOmZ1bmN0aW9uKHIpe3JldHVybiB0JiZlPT09cj90OnQ9eWUobixpLGEsbykoZT1yKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLHIpOltbbixpXSxbYSxvXV19fX0sdC5nZW9DbGlwUmVjdGFuZ2xlPXllLHQuZ2VvQ29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdG4oaG4pLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9LHQuZ2VvQ29uaWNDb25mb3JtYWxSYXc9aG4sdC5nZW9Db25pY0VxdWFsQXJlYT1ybix0Lmdlb0NvbmljRXF1YWxBcmVhUmF3PWVuLHQuZ2VvQ29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiB0bihkbikuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX0sdC5nZW9Db25pY0VxdWlkaXN0YW50UmF3PWRuLHQuZ2VvQ29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odCYmUGUuaGFzT3duUHJvcGVydHkodC50eXBlKT9QZVt0LnR5cGVdOk9lKSh0LGUpfSx0Lmdlb0Rpc3RhbmNlPUNlLHQuZ2VvRXF1YWxFYXJ0aD1mdW5jdGlvbigpe3JldHVybiBRcihibikuc2NhbGUoMTc3LjE1OCl9LHQuZ2VvRXF1YWxFYXJ0aFJhdz1ibix0Lmdlb0VxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBRcihwbikuc2NhbGUoMTUyLjYzKX0sdC5nZW9FcXVpcmVjdGFuZ3VsYXJSYXc9cG4sdC5nZW9Hbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBRcihfbikuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX0sdC5nZW9Hbm9tb25pY1Jhdz1fbix0Lmdlb0dyYXRpY3VsZT1VZSx0Lmdlb0dyYXRpY3VsZTEwPWZ1bmN0aW9uKCl7cmV0dXJuIFVlKCkoKX0sdC5nZW9JZGVudGl0eT1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvLHM9MSxsPTAsYz0wLHU9MSxwPTEsZD0wLG09bnVsbCx2PTEseT0xLHg9anIoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9VChbdCxlXSk7dGhpcy5zdHJlYW0ucG9pbnQoclswXSxyWzFdKX19KSxiPVZlO2Z1bmN0aW9uIHcoKXtyZXR1cm4gdj1zKnUseT1zKnAsYT1vPW51bGwsVH1mdW5jdGlvbiBUKHIpe3ZhciBuPXJbMF0qdixpPXJbMV0qeTtpZihkKXt2YXIgYT1pKnQtbiplO249bip0K2kqZSxpPWF9cmV0dXJuW24rbCxpK2NdfXJldHVybiBULmludmVydD1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLWwsaT1yWzFdLWM7aWYoZCl7dmFyIGE9aSp0K24qZTtuPW4qdC1pKmUsaT1hfXJldHVybltuL3YsaS95XX0sVC5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGEmJm89PT10P2E6YT14KGIobz10KSl9LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCxtPXI9bj1pPW51bGwsdygpKTpifSxULmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9bnVsbD09dD8obT1yPW49aT1udWxsLFZlKTp5ZShtPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSx3KCkpOm51bGw9PW0/bnVsbDpbW20scl0sW24saV1dfSxULnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHcoKSk6c30sVC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3RbMF0sYz0rdFsxXSx3KCkpOltsLGNdfSxULmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPV8oZD1yJTM2MCpoKSx0PWcoZCksdygpKTpkKmZ9LFQucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dD8tMToxLHcoKSk6dTwwfSxULnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQ/LTE6MSx3KCkpOnA8MH0sVC5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSHIoVCx0LGUpfSxULmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcXIoVCx0LGUpfSxULmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdyKFQsdCxlKX0sVC5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWXIoVCx0LGUpfSxUfSx0Lmdlb0ludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSpoLG49dFsxXSpoLGk9ZVswXSpoLGE9ZVsxXSpoLG89ZyhuKSxzPV8obiksbD1nKGEpLGM9XyhhKSx1PW8qZyhyKSxwPW8qXyhyKSxkPWwqZyhpKSx2PWwqXyhpKSx5PTIqTShUKFMoYS1uKStvKmwqUyhpLXIpKSkseD1fKHkpLGI9eT9mdW5jdGlvbih0KXt2YXIgZT1fKHQqPXkpL3gscj1fKHktdCkveCxuPXIqdStlKmQsaT1yKnArZSp2LGE9cipzK2UqYztyZXR1cm5bbShpLG4pKmYsbShhLFQobipuK2kqaSkpKmZdfTpmdW5jdGlvbigpe3JldHVybltyKmYsbipmXX07cmV0dXJuIGIuZGlzdGFuY2U9eSxifSx0Lmdlb0xlbmd0aD1TZSx0Lmdlb01lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHVuKGNuKS5zY2FsZSg5NjEvdSl9LHQuZ2VvTWVyY2F0b3JSYXc9Y24sdC5nZW9OYXR1cmFsRWFydGgxPWZ1bmN0aW9uKCl7cmV0dXJuIFFyKHduKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgxUmF3PXduLHQuZ2VvT3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIFFyKFRuKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK28pfSx0Lmdlb09ydGhvZ3JhcGhpY1Jhdz1Ubix0Lmdlb1BhdGg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9NC41O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmbi5wb2ludFJhZGl1cygraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHoodCxyKG4pKSksbi5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscihaZSkpLFplLnJlc3VsdCgpfSxhLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCxyKERyKSksRHIucmVzdWx0KCl9LGEuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscihpcikpLGlyLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscih5cikpLHlyLnJlc3VsdCgpfSxhLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09ZT8odD1udWxsLFZlKToodD1lKS5zdHJlYW0sYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/KGU9bnVsbCxuZXcgQnIpOm5ldyBFcihlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiZuLnBvaW50UmFkaXVzKGkpLGEpOmV9LGEucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDoobi5wb2ludFJhZGl1cygrdCksK3QpLGEpOml9LGEucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSx0Lmdlb1Byb2plY3Rpb249UXIsdC5nZW9Qcm9qZWN0aW9uTXV0YXRvcj0kcix0Lmdlb1JvdGF0aW9uPXJlLHQuZ2VvU3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBRcihrbikuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX0sdC5nZW9TdGVyZW9ncmFwaGljUmF3PWtuLHQuZ2VvU3RyZWFtPXosdC5nZW9UcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpqcih0KX19LHQuZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dW4oQW4pLGU9dC5jZW50ZXIscj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1yKCkpWzBdLHRbMV0sdFsyXS05MF19LHIoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdz1BbixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjEwMn1dLDExMDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfWZ1bmN0aW9uIGkodCl7dmFyIGU9MCxyPXQuY2hpbGRyZW4sbj1yJiZyLmxlbmd0aDtpZihuKWZvcig7LS1uPj0wOyllKz1yW25dLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsbixpLGEscyx1PW5ldyBjKHQpLGY9K3QudmFsdWUmJih1LnZhbHVlPXQudmFsdWUpLGg9W3VdO2ZvcihudWxsPT1lJiYoZT1vKTtyPWgucG9wKCk7KWlmKGYmJihyLnZhbHVlPStyLmRhdGEudmFsdWUpLChpPWUoci5kYXRhKSkmJihzPWkubGVuZ3RoKSlmb3Ioci5jaGlsZHJlbj1uZXcgQXJyYXkocyksYT1zLTE7YT49MDstLWEpaC5wdXNoKG49ci5jaGlsZHJlblthXT1uZXcgYyhpW2FdKSksbi5wYXJlbnQ9cixuLmRlcHRoPXIuZGVwdGgrMTtyZXR1cm4gdS5lYWNoQmVmb3JlKGwpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gcyh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbCh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIGModCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9Yy5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmMsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoaSl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLHI9YS5jaGlsZHJlbilmb3Iobj0wLGk9ci5sZW5ndGg7bjxpOysrbilvLnB1c2gocltuXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpYS5wdXNoKGVbcl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dGhpcyxpPVtuXTtuPWkucG9wKCk7KWlmKHQobiksZT1uLmNoaWxkcmVuKWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaS5wdXNoKGVbcl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIHI9K3QoZS5kYXRhKXx8MCxuPWUuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7ZS52YWx1ZT1yfSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9ci5wb3AoKSxlPW4ucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKHIpe3IhPT10JiZlLnB1c2goe3NvdXJjZTpyLnBhcmVudCx0YXJnZXQ6cn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9ZyhhPWgoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7dmFyIHIsbjtpZihtKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZtKHYodFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAodih0W3JdLHRbbl0pLGUpJiZwKHYodFtyXSxlKSx0W25dKSYmcCh2KHRbbl0sZSksdFtyXSkmJm0oeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZyh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIHYodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksZj1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2YqdSkvMix5OihuK28rYy9mKnUpLzIscjooZitpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxmPXIucixoPW4tbyxwPW4tYyxkPWktcyxtPWktdSxnPWwtYSx2PWYtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStmKmYsXz1wKmQtaCptLHc9KGQqYi1tKngpLygyKl8pLW4sVD0obSpnLWQqdikvXyxrPShwKngtaCpiKS8oMipfKS1pLEE9KGgqdi1wKmcpL18sTT1UKlQrQSpBLTEsUz0yKihhK3cqVCtrKkEpLEU9dyp3K2sqay1hKmEsTD0tKE0/KFMrTWF0aC5zcXJ0KFMqUy00Kk0qRSkpLygyKk0pOkUvUyk7cmV0dXJue3g6bit3K1QqTCx5OmkraytBKkwscjpMfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGg9ZS5fLnI7ZG97aWYodTw9aCl7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWYoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbnVsbD09dD9udWxsOkEodCl9ZnVuY3Rpb24gQSh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gTSgpe3JldHVybiAwfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihuPXIuY2hpbGRyZW4pe3ZhciBuLGksYSxvPW4ubGVuZ3RoLHM9dChyKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKW5baV0ucis9cztpZihhPVQobikscylmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1zO3Iucj1hK3N9fX1mdW5jdGlvbiBQKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLnBhcmVudDtlLnIqPXQsciYmKGUueD1yLngrdCplLngsZS55PXIueSt0KmUueSl9fWZ1bmN0aW9uIEkodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIE8odCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihuLWUpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLnkwPXIsYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqY312YXIgej17ZGVwdGg6LTF9LEQ9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFYodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gSCh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIHEodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31ILnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsZixoLHAsZCxtLGcsdj1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoZj1oPXUsZz11KnUqKG09TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoaC9nLGcvZik7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSxnPXUqdSptLChwPU1hdGgubWF4KGgvZyxnL2YpKT5kKXt1LT1zO2JyZWFrfWQ9cH12LnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixpLHc/bis9Yyp1L3c6YSk6cShvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIHZ9dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxmPS0xLGg9by5sZW5ndGgscD10LnZhbHVlOysrZjxoOyl7Zm9yKGw9KHM9b1tmXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP08ocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOnEocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7dmFyIGk9ZS5jaGlsZHJlbjtpPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKHIsMCkvdC5sZW5ndGh9KGkpLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShuLDApfShpKSk6KGUueD1zP2wrPXQoZSxzKTowLGUueT0wLHM9ZSl9KSk7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShlKSx1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oZSksZj1jLngtdChjLHUpLzIsaD11LngrdCh1LGMpLzI7cmV0dXJuIGUuZWFjaEFmdGVyKG8/ZnVuY3Rpb24odCl7dC54PSh0LngtZS54KSppLHQueT0oZS55LXQueSkqYX06ZnVuY3Rpb24odCl7dC54PSh0LngtZikvKGgtZikqaSx0Lnk9KDEtKGUueT90LnkvZS55OjEpKSphfSl9cmV0dXJuIHMuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHMpOnR9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMSxpPSt0WzBdLGE9K3RbMV0scyk6bz9udWxsOltpLGFdfSxzLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEwLGk9K3RbMF0sYT0rdFsxXSxzKTpvP1tpLGFdOm51bGx9LHN9LHQuaGllcmFyY2h5PWEsdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEscj0xLG49TTtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9ZS8yLGkueT1yLzIsdD9pLmVhY2hCZWZvcmUoTCh0KSkuZWFjaEFmdGVyKEMobiwuNSkpLmVhY2hCZWZvcmUoUCgxKSk6aS5lYWNoQmVmb3JlKEwoRSkpLmVhY2hBZnRlcihDKE0sMSkpLmVhY2hBZnRlcihDKG4saS5yL01hdGgubWluKGUscikpKS5lYWNoQmVmb3JlKFAoTWF0aC5taW4oZSxyKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ayhlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksaSk6bn0saX0sdC5wYWNrRW5jbG9zZT1mLHQucGFja1NpYmxpbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBUKHQpLHR9LHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJk8obixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoSSksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsZixoPXIubGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9e307Zm9yKGk9MDtpPGg7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9IiIpJiYoZFtmPSIkIisocy5pZD11KV09ZiBpbiBkP0Q6cyk7Zm9yKGk9MDtpPGg7KytpKWlmKHM9cFtpXSxudWxsIT0odT1lKHJbaV0saSxyKSkmJih1Kz0iIikpe2lmKCEobz1kWyIkIit1XSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3UpO2lmKG89PT1EKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK3UpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9eixhLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWh9KSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGg+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSxyKTp0fSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUEodCkscik6ZX0scn0sdC50cmVlPWZ1bmN0aW9uKCl7dmFyIHQ9QixlPTEscj0xLG49bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89bmV3IEgodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKG49ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPW4ubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gocj1lLmNoaWxkcmVuW2ldPW5ldyBIKG5baV0saSkpLHIucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBIKG51bGwsMCkpLmNoaWxkcmVuPVtvXSxvfShpKTtpZihsLmVhY2hBZnRlcihhKSxsLnBhcmVudC5tPS1sLnosbC5lYWNoQmVmb3JlKG8pLG4paS5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGM9aSx1PWksZj1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PnUueCYmKHU9dCksdC5kZXB0aD5mLmRlcHRoJiYoZj10KX0pKTt2YXIgaD1jPT09dT8xOnQoYyx1KS8yLHA9aC1jLngsZD1lLyh1LngraCtwKSxtPXIvKGYuZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCptfSkpfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP25bZS5pLTFdOm51bGw7aWYocil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfShlKTt2YXIgYT0oclswXS56K3Jbci5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxyLG4pe2lmKHIpe2Zvcih2YXIgaSxhPWUsbz1lLHM9cixsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9aihzKSxhPU4oYSkscyYmYTspbD1OKGwpLChvPWoobykpLmE9ZSwoaT1zLnorZi1hLnotYyt0KHMuXyxhLl8pKT4wJiYoVShWKHMsZSxuKSxlLGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFqKG8pJiYoby50PXMsby5tKz1mLXUpLGEmJiFOKGwpJiYobC50PWEsbC5tKz1jLWgsbj1lKX1yZXR1cm4gbn0oZSxpLGUucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSxlPSt0WzBdLHI9K3RbMV0saSk6bj9udWxsOltlLHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLGU9K3RbMF0scj0rdFsxXSxpKTpuP1tlLHJdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PVcsZT0hMSxyPTEsbj0xLGk9WzBdLGE9TSxvPU0scz1NLGw9TSxjPU07ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1yLHQueTE9bix0LmVhY2hCZWZvcmUoZiksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKEkpLHR9ZnVuY3Rpb24gZihlKXt2YXIgcj1pW2UuZGVwdGhdLG49ZS54MCtyLHU9ZS55MCtyLGY9ZS54MS1yLGg9ZS55MS1yO2Y8biYmKG49Zj0obitmKS8yKSxoPHUmJih1PWg9KHUraCkvMiksZS54MD1uLGUueTA9dSxlLngxPWYsZS55MT1oLGUuY2hpbGRyZW4mJihyPWlbZS5kZXB0aCsxXT1hKGUpLzIsbis9YyhlKS1yLHUrPW8oZSktciwoZi09cyhlKS1yKTxuJiYobj1mPShuK2YpLzIpLChoLT1sKGUpLXIpPHUmJih1PWg9KHUraCkvMiksdChlLG4sdSxmLGgpKX1yZXR1cm4gdS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsdSk6ZX0sdS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdLG49K3RbMV0sdSk6W3Isbl19LHUudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTphfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOm99LHUucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmN9LHV9LHQudHJlZW1hcEJpbmFyeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz10LmNoaWxkcmVuLGw9cy5sZW5ndGgsYz1uZXcgQXJyYXkobCsxKTtmb3IoY1swXT1vPWE9MDthPGw7KythKWNbYSsxXT1vKz1zW2FdLnZhbHVlOyFmdW5jdGlvbiB0KGUscixuLGksYSxvLGwpe2lmKGU+PXItMSl7dmFyIHU9c1tlXTtyZXR1cm4gdS54MD1pLHUueTA9YSx1LngxPW8sdm9pZCh1LnkxPWwpfXZhciBmPWNbZV0saD1uLzIrZixwPWUrMSxkPXItMTtmb3IoO3A8ZDspe3ZhciBtPXArZD4+PjE7Y1ttXTxoP3A9bSsxOmQ9bX1oLWNbcC0xXTxjW3BdLWgmJmUrMTxwJiYtLXA7dmFyIGc9Y1twXS1mLHY9bi1nO2lmKG8taT5sLWEpe3ZhciB5PShpKnYrbypnKS9uO3QoZSxwLGcsaSxhLHksbCksdChwLHIsdix5LGEsbyxsKX1lbHNle3ZhciB4PShhKnYrbCpnKS9uO3QoZSxwLGcsaSxhLG8seCksdChwLHIsdixpLHgsbyxsKX19KDAsbCx0LnZhbHVlLGUscixuLGkpfSx0LnRyZWVtYXBEaWNlPU8sdC50cmVlbWFwUmVzcXVhcmlmeT1YLHQudHJlZW1hcFNsaWNlPXEsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9xOk8pKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTExOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1jb2xvciIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksYT10W2ldLG89dFtpKzFdLHM9aT4wP3RbaS0xXToyKmEtbyxsPWk8ZS0xP3RbaSsyXToyKm8tYTtyZXR1cm4gcigobi1pL2UpKmUscyxhLG8sbCl9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6YShpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIDE9PSh0PSt0KT9jOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fShlLHIsdCk6YShpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyKTphKGlzTmFOKHQpP2U6dCl9dmFyIHU9ZnVuY3Rpb24gdChyKXt2YXIgbj1sKHIpO2Z1bmN0aW9uIGkodCxyKXt2YXIgaT1uKCh0PWUucmdiKHQpKS5yLChyPWUucmdiKHIpKS5yKSxhPW4odC5nLHIuZyksbz1uKHQuYixyLmIpLHM9Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1hKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1zKGUpLHQrIiJ9fXJldHVybiBpLmdhbW1hPXQsaX0oMSk7ZnVuY3Rpb24gZih0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhPXIubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpO2ZvcihuPTA7bjxhOysrbilpPWUucmdiKHJbbl0pLG9bbl09aS5yfHwwLHNbbl09aS5nfHwwLGxbbl09aS5ifHwwO3JldHVybiBvPXQobykscz10KHMpLGw9dChsKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPXModCksaS5iPWwodCksaSsiIn19fXZhciBoPWYobikscD1mKGkpO2Z1bmN0aW9uIGQodCxlKXtlfHwoZT1bXSk7dmFyIHIsbj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLGk9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3Iocj0wO3I8bjsrK3IpaVtyXT10W3JdKigxLWEpK2Vbcl0qYTtyZXR1cm4gaX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gZyh0LGUpe3ZhciByLG49ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihuLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KG4pO2ZvcihyPTA7cjxpOysrcilhW3JdPVQodFtyXSxlW3JdKTtmb3IoO3I8bjsrK3Ipb1tyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8aTsrK3Ipb1tyXT1hW3JdKHQpO3JldHVybiBvfX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQqKDEtbikrZSpuKSxyfX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHgodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKXIgaW4gdD9uW3JdPVQodFtyXSxlW3JdKTppW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX12YXIgYj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csXz1uZXcgUmVnRXhwKGIuc291cmNlLCJnIik7ZnVuY3Rpb24gdyh0LGUpe3ZhciByLG4saSxhPWIubGFzdEluZGV4PV8ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPWIuZXhlYyh0KSkmJihuPV8uZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OnkocixuKX0pKSxhPV8ubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBUKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8ImJvb2xlYW4iPT09aT9hKHIpOigibnVtYmVyIj09PWk/eToic3RyaW5nIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bix1KTp3OnIgaW5zdGFuY2VvZiBlLmNvbG9yP3U6ciBpbnN0YW5jZW9mIERhdGU/djptKHIpP2Q6QXJyYXkuaXNBcnJheShyKT9nOiJmdW5jdGlvbiIhPXR5cGVvZiByLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT94OnkpKHQscil9dmFyIGssQSxNLFMsRT0xODAvTWF0aC5QSSxMPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEModCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqRSxza2V3WDpNYXRoLmF0YW4obCkqRSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gUCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnkodCxpKX0se2k6bC0yLHg6eShuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDp5KHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OnkodCxyKX0se2k6cy0yLHg6eShlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBJPVAoKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/TDooa3x8KGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksQT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTT1kb2N1bWVudC5kZWZhdWx0Vmlldyksay5zdHlsZS50cmFuc2Zvcm09dCx0PU0uZ2V0Q29tcHV0ZWRTdHlsZShBLmFwcGVuZENoaWxkKGspLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLEEucmVtb3ZlQ2hpbGQoayksQygrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSksInB4LCAiLCJweCkiLCJkZWcpIiksTz1QKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9MOihTfHwoUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxTLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1TLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0MoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6TCl9KSwiLCAiLCIpIiwiKSIpLHo9TWF0aC5TUVJUMjtmdW5jdGlvbiBEKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIFIodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1jKHIucyxuLnMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIEY9UihzKSxCPVIoYyk7ZnVuY3Rpb24gTih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrIiJ9fX12YXIgaj1OKHMpLFU9TihjKTtmdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgSD1WKHMpLHE9VihjKTt0LmludGVycG9sYXRlPVQsdC5pbnRlcnBvbGF0ZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG0oZSk/ZDpnKSh0LGUpfSx0LmludGVycG9sYXRlQmFzaXM9bix0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9aSx0LmludGVycG9sYXRlQ3ViZWhlbGl4PUgsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9cSx0LmludGVycG9sYXRlRGF0ZT12LHQuaW50ZXJwb2xhdGVEaXNjcmV0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihyKmUpKSldfX0sdC5pbnRlcnBvbGF0ZUhjbD1qLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUhzbD1GLHQuaW50ZXJwb2xhdGVIc2xMb25nPUIsdC5pbnRlcnBvbGF0ZUh1ZT1mdW5jdGlvbih0LGUpe3ZhciByPXMoK3QsK2UpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1yKHQpO3JldHVybiBlLTM2MCpNYXRoLmZsb29yKGUvMzYwKX19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPWModC5hLHIuYSksYT1jKHQuYixyLmIpLG89Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fSx0LmludGVycG9sYXRlTnVtYmVyPXksdC5pbnRlcnBvbGF0ZU51bWJlckFycmF5PWQsdC5pbnRlcnBvbGF0ZU9iamVjdD14LHQuaW50ZXJwb2xhdGVSZ2I9dSx0LmludGVycG9sYXRlUmdiQmFzaXM9aCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9cCx0LmludGVycG9sYXRlUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtcikrZSpyKX19LHQuaW50ZXJwb2xhdGVTdHJpbmc9dyx0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUksdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1PLHQuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxmPWwtYSxoPXUqdStmKmY7aWYoaDwxZS0xMiluPU1hdGgubG9nKGMvbykveixyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqZixvKk1hdGguZXhwKHoqdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGgpLGQ9KGMqYy1vKm8rNCpoKS8oMipvKjIqcCksbT0oYypjLW8qby00KmgpLygyKmMqMipwKSxnPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO249KHYtZykveixyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9RChnKSxsPW8vKDIqcCkqKHMqKGU9eipyK2csKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0oZykpO3JldHVybltpK2wqdSxhK2wqZixvKnMvRCh6KnIrZyldfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LnBpZWNld2lzZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylhW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IodCo9bikpKTtyZXR1cm4gYVtlXSh0LWUpfX0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10KG4vKGUtMSkpO3JldHVybiByfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sb3IiOjEwNH1dLDExMjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9TWF0aC5QSSxyPTIqZSxuPXItMWUtNjtmdW5jdGlvbiBpKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gYSgpe3JldHVybiBuZXcgaX1pLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxyLG4saSxhKXt0PSt0LHI9K3Isbj0rbixpPStpLGE9K2E7dmFyIG89dGhpcy5feDEscz10aGlzLl95MSxsPW4tdCxjPWktcix1PW8tdCxmPXMtcixoPXUqdStmKmY7aWYoYTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2EpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlIGlmKGg+MWUtNilpZihNYXRoLmFicyhmKmwtYyp1KT4xZS02JiZhKXt2YXIgcD1uLW8sZD1pLXMsbT1sKmwrYypjLGc9cCpwK2QqZCx2PU1hdGguc3FydChtKSx5PU1hdGguc3FydChoKSx4PWEqTWF0aC50YW4oKGUtTWF0aC5hY29zKChtK2gtZykvKDIqdip5KSkpLzIpLGI9eC95LF89eC92O01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqdSkrIiwiKyhyK2IqZikpLHRoaXMuXys9IkEiK2ErIiwiK2ErIiwwLDAsIisgKyhmKnA+dSpkKSsiLCIrKHRoaXMuX3gxPXQrXypsKSsiLCIrKHRoaXMuX3kxPXIrXypjKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPXIpO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxpLGEsbyxzLGwpe3Q9K3QsaT0raSxsPSEhbDt2YXIgYz0oYT0rYSkqTWF0aC5jb3MobyksdT1hKk1hdGguc2luKG8pLGY9dCtjLGg9aSt1LHA9MV5sLGQ9bD9vLXM6cy1vO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrZisiLCIraDooTWF0aC5hYnModGhpcy5feDEtZik+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtaCk+MWUtNikmJih0aGlzLl8rPSJMIitmKyIsIitoKSxhJiYoZDwwJiYoZD1kJXIrciksZD5uP3RoaXMuXys9IkEiK2ErIiwiK2ErIiwwLDEsIitwKyIsIisodC1jKSsiLCIrKGktdSkrIkEiK2ErIiwiK2ErIiwwLDEsIitwKyIsIisodGhpcy5feDE9ZikrIiwiKyh0aGlzLl95MT1oKTpkPjFlLTYmJih0aGlzLl8rPSJBIithKyIsIithKyIsMCwiKyArKGQ+PWUpKyIsIitwKyIsIisodGhpcy5feDE9dCthKk1hdGguY29zKHMpKSsiLCIrKHRoaXMuX3kxPWkrYSpNYXRoLnNpbihzKSkpKX0scmVjdDpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSx0LnBhdGg9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxMTM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlLHIsbil7aWYoaXNOYU4oZSl8fGlzTmFOKHIpKXJldHVybiB0O3ZhciBpLGEsbyxzLGwsYyx1LGYsaCxwPXQuX3Jvb3QsZD17ZGF0YTpufSxtPXQuX3gwLGc9dC5feTAsdj10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0oYT0obSt2KS8yKSk/bT1hOnY9YSwodT1yPj0obz0oZyt5KS8yKSk/Zz1vOnk9byxpPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gaVtmXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZyPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2ZdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShhPShtK3YpLzIpKT9tPWE6dj1hLCh1PXI+PShvPShnK3kpLzIpKT9nPW86eT1vfXdoaWxlKChmPXU8PDF8Yyk9PShoPShsPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbaF09cCxpW2ZdPWQsdH1mdW5jdGlvbiByKHQsZSxyLG4saSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9cix0aGlzLngxPW4sdGhpcy55MT1pfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgYT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2k6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2E6YS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWEucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPW4uc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2ldPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxmPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1pLGxbbl09YSxpPGMmJihjPWkpLGk+ZiYmKGY9aSksYTx1JiYodT1hKSxhPmgmJihoPWEpKTtpZihjPmZ8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGYsaCksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc30sbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7Zm9yKHZhciBvLHMsbD1pLXIsYz10aGlzLl9yb290O3I+dHx8dD49aXx8bj5lfHxlPj1hOylzd2l0Y2gocz0oZTxuKTw8MXx0PHIsKG89bmV3IEFycmF5KDQpKVtzXT1jLGM9byxsKj0yLHMpe2Nhc2UgMDppPXIrbCxhPW4rbDticmVhaztjYXNlIDE6cj1pLWwsYT1uK2w7YnJlYWs7Y2FzZSAyOmk9citsLG49YS1sO2JyZWFrO2Nhc2UgMzpyPWktbCxuPWEtbH10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30sbC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHMsbCxjLHUsZj10aGlzLl94MCxoPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxtPVtdLGc9dGhpcy5fcm9vdDtmb3IoZyYmbS5wdXNoKG5ldyByKGcsZixoLHAsZCkpLG51bGw9PW4/bj0xLzA6KGY9dC1uLGg9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9bS5wb3AoKTspaWYoISghKGc9Yy5ub2RlKXx8KGE9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8Znx8KGw9Yy55MSk8aCkpaWYoZy5sZW5ndGgpe3ZhciB2PShhK3MpLzIseT0obytsKS8yO20ucHVzaChuZXcgcihnWzNdLHYseSxzLGwpLG5ldyByKGdbMl0sYSx5LHYsbCksbmV3IHIoZ1sxXSx2LG8scyx5KSxuZXcgcihnWzBdLGEsbyx2LHkpKSwodT0oZT49eSk8PDF8dD49dikmJihjPW1bbS5sZW5ndGgtMV0sbVttLmxlbmd0aC0xXT1tW20ubGVuZ3RoLTEtdV0sbVttLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsZy5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLGcuZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Zj10LXcsaD1lLXcscD10K3csZD1lK3csaT1nLmRhdGF9fXJldHVybiBpfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscD10aGlzLl9yb290LGQ9dGhpcy5feDAsbT10aGlzLl95MCxnPXRoaXMuX3gxLHY9dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1hPj0ocz0oZCtnKS8yKSk/ZD1zOmc9cywodT1vPj0obD0obSt2KS8yKSk/bT1sOnY9bCxlPXAsIShwPXBbZj11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYocj1lLGg9Zil9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhpP24ubmV4dD1pOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltoXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSksdH0sbC52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLGksYSxvLHMsbD1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJmwucHVzaChuZXcgcihjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1sLnBvcCgpOylpZighdChjPWUubm9kZSxpPWUueDAsYT1lLnkwLG89ZS54MSxzPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KGkrbykvMixmPShhK3MpLzI7KG49Y1szXSkmJmwucHVzaChuZXcgcihuLHUsZixvLHMpKSwobj1jWzJdKSYmbC5wdXNoKG5ldyByKG4saSxmLHUscykpLChuPWNbMV0pJiZsLnB1c2gobmV3IHIobix1LGEsbyxmKSksKG49Y1swXSkmJmwucHVzaChuZXcgcihuLGksYSx1LGYpKX1yZXR1cm4gdGhpc30sbC52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyByKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgYT1lLm5vZGU7aWYoYS5sZW5ndGgpe3ZhciBvLHM9ZS54MCxsPWUueTAsYz1lLngxLHU9ZS55MSxmPShzK2MpLzIsaD0obCt1KS8yOyhvPWFbMF0pJiZuLnB1c2gobmV3IHIobyxzLGwsZixoKSksKG89YVsxXSkmJm4ucHVzaChuZXcgcihvLGYsbCxjLGgpKSwobz1hWzJdKSYmbi5wdXNoKG5ldyByKG8scyxoLGYsdSkpLChvPWFbM10pJiZuLnB1c2gobmV3IHIobyxmLGgsYyx1KSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdC5xdWFkdHJlZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDExNDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtcGF0aCIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgbj1NYXRoLmFicyxpPU1hdGguYXRhbjIsYT1NYXRoLmNvcyxvPU1hdGgubWF4LHM9TWF0aC5taW4sbD1NYXRoLnNpbixjPU1hdGguc3FydCx1PU1hdGguUEksZj11LzIsaD0yKnU7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdD4xPzA6dDwtMT91Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiB0Pj0xP2Y6dDw9LTE/LWY6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiB4KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsdT1vLWksZj1zLWEsaD1mKmwtdSpjO2lmKCEoaCpoPDFlLTEyKSlyZXR1cm5bdCsoaD0odSooZS1hKS1mKih0LWkpKS9oKSpsLGUraCpjXX1mdW5jdGlvbiBfKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixmPShzP2E6LWEpL2MobCpsK3UqdSksaD1mKnUscD0tZipsLGQ9dCtoLG09ZStwLGc9citoLHY9bitwLHk9KGQrZykvMix4PShtK3YpLzIsYj1nLWQsXz12LW0sdz1iKmIrXypfLFQ9aS1hLGs9ZCp2LWcqbSxBPShfPDA/LTE6MSkqYyhvKDAsVCpUKnctayprKSksTT0oaypfLWIqQSkvdyxTPSgtaypiLV8qQSkvdyxFPShrKl8rYipBKS93LEw9KC1rKmIrXypBKS93LEM9TS15LFA9Uy14LEk9RS15LE89TC14O3JldHVybiBDKkMrUCpQPkkqSStPKk8mJihNPUUsUz1MKSx7Y3g6TSxjeTpTLHgwMTotaCx5MDE6LXAseDExOk0qKGkvVC0xKSx5MTE6UyooaS9ULTEpfX1mdW5jdGlvbiB3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBUKHQpe3JldHVybiBuZXcgdyh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTSgpe3ZhciB0PWssbj1BLGk9cighMCksYT1udWxsLG89VCxzPW51bGw7ZnVuY3Rpb24gbChyKXt2YXIgbCxjLHUsZj1yLmxlbmd0aCxoPSExO2ZvcihudWxsPT1hJiYocz1vKHU9ZS5wYXRoKCkpKSxsPTA7bDw9ZjsrK2wpIShsPGYmJmkoYz1yW2xdLGwscikpPT09aCYmKChoPSFoKT9zLmxpbmVTdGFydCgpOnMubGluZUVuZCgpKSxoJiZzLnBvaW50KCt0KGMsbCxyKSwrbihjLGwscikpO2lmKHUpcmV0dXJuIHM9bnVsbCx1KyIifHxudWxsfXJldHVybiBsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxsKTp0fSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpufSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGwpOm99LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxsKTphfSxsfWZ1bmN0aW9uIFMoKXt2YXIgdD1rLG49bnVsbCxpPXIoMCksYT1BLG89cighMCkscz1udWxsLGw9VCxjPW51bGw7ZnVuY3Rpb24gdShyKXt2YXIgdSxmLGgscCxkLG09ci5sZW5ndGgsZz0hMSx2PW5ldyBBcnJheShtKSx5PW5ldyBBcnJheShtKTtmb3IobnVsbD09cyYmKGM9bChkPWUucGF0aCgpKSksdT0wO3U8PW07Kyt1KXtpZighKHU8bSYmbyhwPXJbdV0sdSxyKSk9PT1nKWlmKGc9IWcpZj11LGMuYXJlYVN0YXJ0KCksYy5saW5lU3RhcnQoKTtlbHNle2ZvcihjLmxpbmVFbmQoKSxjLmxpbmVTdGFydCgpLGg9dS0xO2g+PWY7LS1oKWMucG9pbnQodltoXSx5W2hdKTtjLmxpbmVFbmQoKSxjLmFyZWFFbmQoKX1nJiYodlt1XT0rdChwLHUscikseVt1XT0raShwLHUsciksYy5wb2ludChuPytuKHAsdSxyKTp2W3VdLGE/K2EocCx1LHIpOnlbdV0pKX1pZihkKXJldHVybiBjPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiBmKCl7cmV0dXJuIE0oKS5kZWZpbmVkKG8pLmN1cnZlKGwpLmNvbnRleHQocyl9cmV0dXJuIHUueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLG49bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksdSk6dH0sdS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTpufSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhPW51bGwsdSk6aX0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOml9LHUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6YX0sdS5saW5lWDA9dS5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngodCkueShpKX0sdS5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngodCkueShhKX0sdS5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngobikueShpKX0sdS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLHUpOm99LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxudWxsIT1zJiYoYz1sKHMpKSx1KTpsfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cz1jPW51bGw6Yz1sKHM9dCksdSk6c30sdX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEwodCl7cmV0dXJuIHR9dy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgQz1JKFQpO2Z1bmN0aW9uIFAodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBJKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBQKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShJKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIHooKXtyZXR1cm4gTyhNKCkuY3VydmUoQykpfWZ1bmN0aW9uIEQoKXt2YXIgdD1TKCkuY3VydmUoQyksZT10LmN1cnZlLHI9dC5saW5lWDAsbj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKG4oKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoSSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfVAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgRj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gQih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gaih0KXt2YXIgbj1CLGk9TixhPWssbz1BLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIHIsbD1GLmNhbGwoYXJndW1lbnRzKSxjPW4uYXBwbHkodGhpcyxsKSx1PWkuYXBwbHkodGhpcyxsKTtpZihzfHwocz1yPWUucGF0aCgpKSx0KHMsK2EuYXBwbHkodGhpcywobFswXT1jLGwpKSwrby5hcHBseSh0aGlzLGwpLCthLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK28uYXBwbHkodGhpcyxsKSkscilyZXR1cm4gcz1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGwuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxsKTppfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTphfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZT0oZStuKS8yLHIsZSxpLG4saSl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGUscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIEgodCxlLHIsbixpKXt2YXIgYT1SKGUsciksbz1SKGUscj0ocitpKS8yKSxzPVIobixyKSxsPVIobixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIHE9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS91KTt0Lm1vdmVUbyhyLDApLHQuYXJjKDAsMCxyLDAsaCl9fSxHPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypyLC1yKSx0LmxpbmVUbygtciwtciksdC5saW5lVG8oLXIsLTMqciksdC5saW5lVG8ociwtMypyKSx0LmxpbmVUbyhyLC1yKSx0LmxpbmVUbygzKnIsLXIpLHQubGluZVRvKDMqcixyKSx0LmxpbmVUbyhyLHIpLHQubGluZVRvKHIsMypyKSx0LmxpbmVUbygtciwzKnIpLHQubGluZVRvKC1yLHIpLHQubGluZVRvKC0zKnIsciksdC5jbG9zZVBhdGgoKX19LFk9TWF0aC5zcXJ0KDEvMyksVz0yKlksWD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL1cpLG49cipZO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4sMCksdC5saW5lVG8oMCxyKSx0LmxpbmVUbygtbiwwKSx0LmNsb3NlUGF0aCgpfX0sWj1NYXRoLnNpbih1LzEwKS9NYXRoLnNpbig3KnUvMTApLEo9TWF0aC5zaW4oaC8xMCkqWixLPS1NYXRoLmNvcyhoLzEwKSpaLFE9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSksbj1KKnIsaT1LKnI7dC5tb3ZlVG8oMCwtciksdC5saW5lVG8obixpKTtmb3IodmFyIGE9MTthPDU7KythKXt2YXIgbz1oKmEvNSxzPU1hdGguY29zKG8pLGw9TWF0aC5zaW4obyk7dC5saW5lVG8obCpyLC1zKnIpLHQubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9dC5jbG9zZVBhdGgoKX19LCQ9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZSksbj0tci8yO3QucmVjdChuLG4scixyKX19LHR0PU1hdGguc3FydCgzKSxldD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMyp0dCkpO3QubW92ZVRvKDAsMipyKSx0LmxpbmVUbygtdHQqciwtciksdC5saW5lVG8odHQqciwtciksdC5jbG9zZVBhdGgoKX19LHJ0PS0uNSxudD1NYXRoLnNxcnQoMykvMixpdD0xL01hdGguc3FydCgxMiksYXQ9MyooaXQvMisxKSxvdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2F0KSxuPXIvMixpPXIqaXQsYT1uLG89cippdCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKHJ0Km4tbnQqaSxudCpuK3J0KmkpLHQubGluZVRvKHJ0KmEtbnQqbyxudCphK3J0Km8pLHQubGluZVRvKHJ0KnMtbnQqbCxudCpzK3J0KmwpLHQubGluZVRvKHJ0Km4rbnQqaSxydCppLW50Km4pLHQubGluZVRvKHJ0KmErbnQqbyxydCpvLW50KmEpLHQubGluZVRvKHJ0KnMrbnQqbCxydCpsLW50KnMpLHQuY2xvc2VQYXRoKCl9fSxzdD1bcSxHLFgsJCxRLGV0LG90XTtmdW5jdGlvbiBsdCgpe31mdW5jdGlvbiBjdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gdXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGZ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBodCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gcHQodCxlKXt0aGlzLl9iYXNpcz1uZXcgdXQodCksdGhpcy5fYmV0YT1lfXV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6Y3QodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6Y3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxwdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGR0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IHV0KHQpOm5ldyBwdCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIG10KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzptdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6bXQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiB5dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eXQucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Om10KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gYnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Om10KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgX3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgYnQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gd3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtuPShuKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT4xZS0xMil7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxvPShvKmMrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBUdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIga3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBUdCh0LGUpOm5ldyBndCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEF0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9QXQucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDp3dCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBNdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IEF0KHQsZSk6bmV3IHl0KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gU3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBTdCh0LGUpOm5ldyBidCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEx0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBDdCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gUHQodCxlLHIpe3ZhciBuPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKG58fGk8MCYmLTApLG89KHItdC5feTEpLyhpfHxuPDAmJi0wKSxzPShhKmkrbypuKS8obitpKTtyZXR1cm4oQ3QoYSkrQ3QobykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBJdCh0LGUpe3ZhciByPXQuX3gxLXQuX3gwO3JldHVybiByPygzKih0Ll95MS10Ll95MCkvci1lKS8yOmV9ZnVuY3Rpb24gT3QodCxlLHIpe3ZhciBuPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtbikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyplLGEtcyxvLXMqcixhLG8pfWZ1bmN0aW9uIHp0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLl9jb250ZXh0PW5ldyBSdCh0KX1mdW5jdGlvbiBSdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEJ0KHQpe3ZhciBlLHIsbj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpWzBdPTAsYVswXT0yLG9bMF09dFswXSsyKnRbMV0sZT0xO2U8bi0xOysrZSlpW2VdPTEsYVtlXT00LG9bZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW24tMV09MixhW24tMV09NyxvW24tMV09OCp0W24tMV0rdFtuXSxlPTE7ZTxuOysrZSlyPWlbZV0vYVtlLTFdLGFbZV0tPXIsb1tlXS09cipvW2UtMV07Zm9yKGlbbi0xXT1vW24tMV0vYVtuLTFdLGU9bi0yO2U+PTA7LS1lKWlbZV09KG9bZV0taVtlKzFdKS9hW2VdO2ZvcihhW24tMV09KHRbbl0raVtuLTFdKS8yLGU9MDtlPG4tMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gTnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIGp0KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhPTEsbz10W2VbMF1dLHM9by5sZW5ndGg7YTxpOysrYSlmb3Iobj1vLG89dFtlW2FdXSxyPTA7cjxzOysrcilvW3JdWzFdKz1vW3JdWzBdPWlzTmFOKG5bcl1bMV0pP25bcl1bMF06bltyXVsxXX1mdW5jdGlvbiBVdCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7LS1lPj0wOylyW2VdPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChxdCk7cmV0dXJuIFV0KHQpLnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pKX1mdW5jdGlvbiBxdCh0KXtmb3IodmFyIGUscj0tMSxuPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytyPGk7KShlPSt0W3JdWzFdKT5hJiYoYT1lLG49cik7cmV0dXJuIG59ZnVuY3Rpb24gR3QodCl7dmFyIGU9dC5tYXAoWXQpO3JldHVybiBVdCh0KS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KSl9ZnVuY3Rpb24gWXQodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUx0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0senQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsSXQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsSXQodGhpcyxyPVB0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9UHQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoenQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXt6dC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUJ0KHQpLGk9QnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LE50LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9bSxvPWcsdz1yKDApLFQ9bnVsbCxrPXYsQT15LE09eCxTPW51bGw7ZnVuY3Rpb24gRSgpe3ZhciByLG0sZz0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj0rby5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mLHg9QS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZixFPW4oeC15KSxMPXg+eTtpZihTfHwoUz1yPWUucGF0aCgpKSx2PGcmJihtPXYsdj1nLGc9bSksdj4xZS0xMilpZihFPmgtMWUtMTIpUy5tb3ZlVG8odiphKHkpLHYqbCh5KSksUy5hcmMoMCwwLHYseSx4LCFMKSxnPjFlLTEyJiYoUy5tb3ZlVG8oZyphKHgpLGcqbCh4KSksUy5hcmMoMCwwLGcseCx5LEwpKTtlbHNle3ZhciBDLFAsST15LE89eCx6PXksRD14LFI9RSxGPUUsQj1NLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE49Qj4xZS0xMiYmKFQ/K1QuYXBwbHkodGhpcyxhcmd1bWVudHMpOmMoZypnK3YqdikpLGo9cyhuKHYtZykvMiwrdy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFU9aixWPWo7aWYoTj4xZS0xMil7dmFyIEg9ZChOL2cqbChCKSkscT1kKE4vdipsKEIpKTsoUi09MipIKT4xZS0xMj8oeis9SCo9TD8xOi0xLEQtPUgpOihSPTAsej1EPSh5K3gpLzIpLChGLT0yKnEpPjFlLTEyPyhJKz1xKj1MPzE6LTEsTy09cSk6KEY9MCxJPU89KHkreCkvMil9dmFyIEc9diphKEkpLFk9dipsKEkpLFc9ZyphKEQpLFg9ZypsKEQpO2lmKGo+MWUtMTIpe3ZhciBaLEo9diphKE8pLEs9dipsKE8pLFE9ZyphKHopLCQ9ZypsKHopO2lmKEU8dSYmKFo9YihHLFksUSwkLEosSyxXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9Si1aWzBdLG50PUstWlsxXSxpdD0xL2wocCgodHQqcnQrZXQqbnQpLyhjKHR0KnR0K2V0KmV0KSpjKHJ0KnJ0K250Km50KSkpLzIpLGF0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7VT1zKGosKGctYXQpLyhpdC0xKSksVj1zKGosKHYtYXQpLyhpdCsxKSl9fUY+MWUtMTI/Vj4xZS0xMj8oQz1fKFEsJCxHLFksdixWLEwpLFA9XyhKLEssVyxYLHYsVixMKSxTLm1vdmVUbyhDLmN4K0MueDAxLEMuY3krQy55MDEpLFY8aj9TLmFyYyhDLmN4LEMuY3ksVixpKEMueTAxLEMueDAxKSxpKFAueTAxLFAueDAxKSwhTCk6KFMuYXJjKEMuY3gsQy5jeSxWLGkoQy55MDEsQy54MDEpLGkoQy55MTEsQy54MTEpLCFMKSxTLmFyYygwLDAsdixpKEMuY3krQy55MTEsQy5jeCtDLngxMSksaShQLmN5K1AueTExLFAuY3grUC54MTEpLCFMKSxTLmFyYyhQLmN4LFAuY3ksVixpKFAueTExLFAueDExKSxpKFAueTAxLFAueDAxKSwhTCkpKTooUy5tb3ZlVG8oRyxZKSxTLmFyYygwLDAsdixJLE8sIUwpKTpTLm1vdmVUbyhHLFkpLGc+MWUtMTImJlI+MWUtMTI/VT4xZS0xMj8oQz1fKFcsWCxKLEssZywtVSxMKSxQPV8oRyxZLFEsJCxnLC1VLEwpLFMubGluZVRvKEMuY3grQy54MDEsQy5jeStDLnkwMSksVTxqP1MuYXJjKEMuY3gsQy5jeSxVLGkoQy55MDEsQy54MDEpLGkoUC55MDEsUC54MDEpLCFMKTooUy5hcmMoQy5jeCxDLmN5LFUsaShDLnkwMSxDLngwMSksaShDLnkxMSxDLngxMSksIUwpLFMuYXJjKDAsMCxnLGkoQy5jeStDLnkxMSxDLmN4K0MueDExKSxpKFAuY3krUC55MTEsUC5jeCtQLngxMSksTCksUy5hcmMoUC5jeCxQLmN5LFUsaShQLnkxMSxQLngxMSksaShQLnkwMSxQLngwMSksIUwpKSk6Uy5hcmMoMCwwLGcsRCx6LEwpOlMubGluZVRvKFcsWCl9ZWxzZSBTLm1vdmVUbygwLDApO2lmKFMuY2xvc2VQYXRoKCkscilyZXR1cm4gUz1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIEUuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgZT0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2suYXBwbHkodGhpcyxhcmd1bWVudHMpKyArQS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItdS8yO3JldHVyblthKHIpKmUsbChyKSplXX0sRS5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLEUpOnR9LEUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpvfSxFLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOnd9LEUucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOlR9LEUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOmt9LEUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpBfSxFLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6TX0sRS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPW51bGw9PXQ/bnVsbDp0LEUpOlN9LEV9LHQuYXJlYT1TLHQuYXJlYVJhZGlhbD1ELHQuY3VydmVCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHV0KHQpfSx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHQpfSx0LmN1cnZlQnVuZGxlPWR0LHQuY3VydmVDYXJkaW5hbD12dCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9eHQsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1fdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlQ2F0bXVsbFJvbUNsb3NlZD1NdCx0LmN1cnZlQ2F0bXVsbFJvbU9wZW49RXQsdC5jdXJ2ZUxpbmVhcj1ULHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBMdCh0KX0sdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHp0KHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHQodCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRnQodCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsMCl9LHQubGluZT1NLHQubGluZVJhZGlhbD16LHQubGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gaihVKX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9aihIKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBqKFYpfSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUwsZT1FLG49bnVsbCxpPXIoMCksYT1yKGgpLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGYscD1yLmxlbmd0aCxkPTAsbT1uZXcgQXJyYXkocCksZz1uZXcgQXJyYXkocCksdj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihoLE1hdGgubWF4KC1oLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLXYpKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL3Asby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxwOysrcykoZj1nW21bc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9Zik7Zm9yKG51bGwhPWU/bS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlKGdbdF0sZ1tyXSl9KSk6bnVsbCE9biYmbS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSkscz0wLGM9ZD8oeS1wKmIpL2Q6MDtzPHA7KytzLHY9dSlsPW1bc10sdT12KygoZj1nW2xdKT4wP2YqYzowKStiLGdbbF09e2RhdGE6cltsXSxpbmRleDpzLHZhbHVlOmYsc3RhcnRBbmdsZTp2LGVuZEFuZ2xlOnUscGFkQW5nbGU6eH07cmV0dXJuIGd9cmV0dXJuIHMudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxzKTp0fSxzLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwscyk6ZX0scy5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6b30sc30sdC5wb2ludFJhZGlhbD1SLHQucmFkaWFsQXJlYT1ELHQucmFkaWFsTGluZT16LHQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1yKFtdKSxlPVV0LG49anQsaT1WdDtmdW5jdGlvbiBhKHIpe3ZhciBhLG8scz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPXIubGVuZ3RoLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKGE9MDthPGM7KythKXtmb3IodmFyIGYsaD1zW2FdLHA9dVthXT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpcFtkXT1mPVswLCtpKHJbZF0saCxkLHIpXSxmLmRhdGE9cltkXTtwLmtleT1ofWZvcihhPTAsbz1lKHUpO2E8YzsrK2EpdVtvW2FdXS5pbmRleD1hO3JldHVybiBuKHUsbyksdX1yZXR1cm4gYS5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cihGLmNhbGwoZSkpLGEpOnR9LGEudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTppfSxhLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/VXQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKEYuY2FsbCh0KSksYSk6ZX0sYS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9qdDp0LGEpOm59LGF9LHQuc3RhY2tPZmZzZXREaXZlcmdpbmc9ZnVuY3Rpb24odCxlKXtpZigocz10Lmxlbmd0aCk+MClmb3IodmFyIHIsbixpLGEsbyxzLGw9MCxjPXRbZVswXV0ubGVuZ3RoO2w8YzsrK2wpZm9yKGE9bz0wLHI9MDtyPHM7KytyKShpPShuPXRbZVtyXV1bbF0pWzFdLW5bMF0pPjA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6KG5bMF09MCxuWzFdPWkpfSx0LnN0YWNrT2Zmc2V0RXhwYW5kPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9cj0wO3I8bjsrK3IpaSs9dFtyXVthXVsxXXx8MDtpZihpKWZvcihyPTA7cjxuOysrcil0W3JdW2FdWzFdLz1pfWp0KHQsZSl9fSx0LnN0YWNrT2Zmc2V0Tm9uZT1qdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfWp0KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0sZj11W29dWzFdfHwwLGg9KGYtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07aCs9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWYsYys9aCpmfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxqdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1IdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9R3QsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gR3QodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoWXQpLGE9SHQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9VXQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gVXQodCkucmV2ZXJzZSgpfSx0LnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PXIocSksbj1yKDY0KSxpPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciByO2lmKGl8fChpPXI9ZS5wYXRoKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcoaSwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIGk9bnVsbCxyKyIifHxudWxsfXJldHVybiBhLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKGUpLGEpOnR9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGEpOm59LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCxhKTppfSxhfSx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9Ryx0LnN5bWJvbERpYW1vbmQ9WCx0LnN5bWJvbFNxdWFyZT0kLHQuc3ltYm9sU3Rhcj1RLHQuc3ltYm9sVHJpYW5nbGU9ZXQsdC5zeW1ib2xXeWU9b3QsdC5zeW1ib2xzPXN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1wYXRoIjoxMTJ9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXRpbWUiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gbih0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm57eTp0LG06ZSxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBhKHQpe3ZhciBhPXQuZGF0ZVRpbWUsbz10LmRhdGUsbD10LnRpbWUsYz10LnBlcmlvZHMsdT10LmRheXMsZj10LnNob3J0RGF5cyxoPXQubW9udGhzLFk9dC5zaG9ydE1vbnRocyxodD1wKGMpLGt0PWQoYyksQXQ9cCh1KSxNdD1kKHUpLFN0PXAoZiksRXQ9ZChmKSxMdD1wKGgpLEN0PWQoaCksUHQ9cChZKSxJdD1kKFkpLE90PXthOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBZW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6RCxlOkQsZjpqLGc6SyxHOiQsSDpSLEk6RixqOkIsTDpOLG06VSxNOlYscDpmdW5jdGlvbih0KXtyZXR1cm4gY1srKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6d3QsczpUdCxTOkgsdTpxLFU6RyxWOlcsdzpYLFc6Wix4Om51bGwsWDpudWxsLHk6SixZOlEsWjp0dCwiJSI6X3R9LHp0PXthOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBZW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6ZXQsZTpldCxmOm90LGc6dnQsRzp4dCxIOnJ0LEk6bnQsajppdCxMOmF0LG06c3QsTTpsdCxwOmZ1bmN0aW9uKHQpe3JldHVybiBjWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTp3dCxzOlR0LFM6Y3QsdTp1dCxVOmZ0LFY6cHQsdzpkdCxXOm10LHg6bnVsbCxYOm51bGwseTpndCxZOnl0LFo6YnQsIiUiOl90fSxEdD17YTpmdW5jdGlvbih0LGUscil7dmFyIG49U3QuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PUV0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUF0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1NdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1QdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09SXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUscil7dmFyIG49THQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPUN0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBCdCh0LGEsZSxyKX0sZDpBLGU6QSxmOlAsZzpfLEc6YixIOlMsSTpTLGo6TSxMOkMsbTprLE06RSxwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1odC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnA9a3RbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0scTpULFE6TyxzOnosUzpMLHU6ZyxVOnYsVjp5LHc6bSxXOngseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIEJ0KHQsbyxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQnQodCxsLGUscil9LHk6XyxZOmIsWjp3LCIlIjpJfTtmdW5jdGlvbiBSdCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGEsbz1bXSxsPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihyIGluc3RhbmNlb2YgRGF0ZXx8KHI9bmV3IERhdGUoK3IpKTsrK2w8dTspMzc9PT10LmNoYXJDb2RlQXQobCkmJihvLnB1c2godC5zbGljZShjLGwpKSxudWxsIT0oaT1zW249dC5jaGFyQXQoKytsKV0pP249dC5jaGFyQXQoKytsKTppPSJlIj09PW4/IiAiOiIwIiwoYT1lW25dKSYmKG49YShyLGkpKSxvLnB1c2gobiksYz1sKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLGwpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBGdCh0LGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcyxsLGM9aSgxOTAwLHZvaWQgMCwxKTtpZihCdChjLHQsbys9IiIsMCkhPW8ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGMpcmV0dXJuIG5ldyBEYXRlKGMuUSk7aWYoInMiaW4gYylyZXR1cm4gbmV3IERhdGUoMWUzKmMucysoIkwiaW4gYz9jLkw6MCkpO2lmKGEmJiEoIloiaW4gYykmJihjLlo9MCksInAiaW4gYyYmKGMuSD1jLkglMTIrMTIqYy5wKSx2b2lkIDA9PT1jLm0mJihjLm09InEiaW4gYz9jLnE6MCksIlYiaW4gYyl7aWYoYy5WPDF8fGMuVj41MylyZXR1cm4gbnVsbDsidyJpbiBjfHwoYy53PTEpLCJaImluIGM/KGw9KHM9bihpKGMueSwwLDEpKSkuZ2V0VVRDRGF5KCkscz1sPjR8fDA9PT1sP2UudXRjTW9uZGF5LmNlaWwocyk6ZS51dGNNb25kYXkocykscz1lLnV0Y0RheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldFVUQ0Z1bGxZZWFyKCksYy5tPXMuZ2V0VVRDTW9udGgoKSxjLmQ9cy5nZXRVVENEYXRlKCkrKGMudys2KSU3KToobD0ocz1yKGkoYy55LDAsMSkpKS5nZXREYXkoKSxzPWw+NHx8MD09PWw/ZS50aW1lTW9uZGF5LmNlaWwocyk6ZS50aW1lTW9uZGF5KHMpLHM9ZS50aW1lRGF5Lm9mZnNldChzLDcqKGMuVi0xKSksYy55PXMuZ2V0RnVsbFllYXIoKSxjLm09cy5nZXRNb250aCgpLGMuZD1zLmdldERhdGUoKSsoYy53KzYpJTcpfWVsc2UoIlciaW4gY3x8IlUiaW4gYykmJigidyJpbiBjfHwoYy53PSJ1ImluIGM/Yy51JTc6IlciaW4gYz8xOjApLGw9IloiaW4gYz9uKGkoYy55LDAsMSkpLmdldFVUQ0RheSgpOnIoaShjLnksMCwxKSkuZ2V0RGF5KCksYy5tPTAsYy5kPSJXImluIGM/KGMudys2KSU3KzcqYy5XLShsKzUpJTc6Yy53KzcqYy5VLShsKzYpJTcpO3JldHVybiJaImluIGM/KGMuSCs9Yy5aLzEwMHwwLGMuTSs9Yy5aJTEwMCxuKGMpKTpyKGMpfX1mdW5jdGlvbiBCdCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO288bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9RHRbaSBpbiBzP2UuY2hhckF0KG8rKyk6aV0pfHwobj1hKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufXJldHVybiBPdC54PVJ0KG8sT3QpLE90Llg9UnQobCxPdCksT3QuYz1SdChhLE90KSx6dC54PVJ0KG8senQpLHp0Llg9UnQobCx6dCksenQuYz1SdChhLHp0KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPVJ0KHQrPSIiLE90KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1GdCh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPVJ0KHQrPSIiLHp0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1GdCh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fXZhciBvLHM9eyItIjoiIixfOiIgIiwwOiIwIn0sbD0vXlxzKlxkKy8sYz0vXiUvLHU9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5yZXBsYWNlKHUsIlxcJCYiKX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChoKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9e30scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllW3Rbcl0udG9Mb3dlckNhc2UoKV09cjtyZXR1cm4gZX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC5xPTMqblswXS0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPWMuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBPKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGYodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIGYodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gRih0LGUpe3JldHVybiBmKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBCKHQscil7cmV0dXJuIGYoMStlLnRpbWVEYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSxyLDMpfWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gZih0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBOKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBmKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVih0LGUpe3JldHVybiBmKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBmKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gcSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRyh0LHIpe3JldHVybiBmKGUudGltZVN1bmRheS5jb3VudChlLnRpbWVZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBZKHQpe3ZhciByPXQuZ2V0RGF5KCk7cmV0dXJuIHI+PTR8fDA9PT1yP2UudGltZVRodXJzZGF5KHQpOmUudGltZVRodXJzZGF5LmNlaWwodCl9ZnVuY3Rpb24gVyh0LHIpe3JldHVybiB0PVkodCksZihlLnRpbWVUaHVyc2RheS5jb3VudChlLnRpbWVZZWFyKHQpLHQpKyg0PT09ZS50aW1lWWVhcih0KS5nZXREYXkoKSksciwyKX1mdW5jdGlvbiBYKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIFoodCxyKXtyZXR1cm4gZihlLnRpbWVNb25kYXkuY291bnQoZS50aW1lWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBmKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIGYoKHQ9WSh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIGYodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uICQodCxyKXt2YXIgbj10LmdldERheSgpO3JldHVybiBmKCh0PW4+PTR8fDA9PT1uP2UudGltZVRodXJzZGF5KHQpOmUudGltZVRodXJzZGF5LmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LHIsNCl9ZnVuY3Rpb24gdHQodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStmKGUvNjB8MCwiMCIsMikrZihlJTYwLCIwIiwyKX1mdW5jdGlvbiBldCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gcnQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBudCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBpdCh0LHIpe3JldHVybiBmKDErZS51dGNEYXkuY291bnQoZS51dGNZZWFyKHQpLHQpLHIsMyl9ZnVuY3Rpb24gYXQodCxlKXtyZXR1cm4gZih0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gb3QodCxlKXtyZXR1cm4gYXQodCxlKSsiMDAwIn1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gbHQodCxlKXtyZXR1cm4gZih0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIGN0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiB1dCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gZnQodCxyKXtyZXR1cm4gZihlLnV0Y1N1bmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGh0KHQpe3ZhciByPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHI+PTR8fDA9PT1yP2UudXRjVGh1cnNkYXkodCk6ZS51dGNUaHVyc2RheS5jZWlsKHQpfWZ1bmN0aW9uIHB0KHQscil7cmV0dXJuIHQ9aHQodCksZihlLnV0Y1RodXJzZGF5LmNvdW50KGUudXRjWWVhcih0KSx0KSsoND09PWUudXRjWWVhcih0KS5nZXRVVENEYXkoKSksciwyKX1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBtdCh0LHIpe3JldHVybiBmKGUudXRjTW9uZGF5LmNvdW50KGUudXRjWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gZ3QodCxlKXtyZXR1cm4gZih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gdnQodCxlKXtyZXR1cm4gZigodD1odCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB5dCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB4dCh0LHIpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGYoKHQ9bj49NHx8MD09PW4/ZS51dGNUaHVyc2RheSh0KTplLnV0Y1RodXJzZGF5LmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHIsNCl9ZnVuY3Rpb24gYnQoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIF90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIHd0KHQpe3JldHVybit0fWZ1bmN0aW9uIFR0KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIG89YShlKSx0LnRpbWVGb3JtYXQ9by5mb3JtYXQsdC50aW1lUGFyc2U9by5wYXJzZSx0LnV0Y0Zvcm1hdD1vLnV0Y0Zvcm1hdCx0LnV0Y1BhcnNlPW8udXRjUGFyc2Usb31rdCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBBdD1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTp0LnV0Y0Zvcm1hdCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIE10PStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06dC51dGNQYXJzZSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dC5pc29Gb3JtYXQ9QXQsdC5pc29QYXJzZT1NdCx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPWt0LHQudGltZUZvcm1hdExvY2FsZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy10aW1lIjoxMTZ9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPW5ldyBEYXRlLHI9bmV3IERhdGU7ZnVuY3Rpb24gbih0LGksYSxvKXtmdW5jdGlvbiBzKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBzLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxzLmNlaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZShlLTEpKSxpKGUsMSksdChlKSxlfSxzLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXModCkscj1zLmNlaWwodCk7cmV0dXJuIHQtZTxyLXQ/ZTpyfSxzLm9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiBpKHQ9bmV3IERhdGUoK3QpLG51bGw9PWU/MTpNYXRoLmZsb29yKGUpKSx0fSxzLnJhbmdlPWZ1bmN0aW9uKGUscixuKXt2YXIgYSxvPVtdO2lmKGU9cy5jZWlsKGUpLG49bnVsbD09bj8xOk1hdGguZmxvb3IobiksIShlPHImJm4+MCkpcmV0dXJuIG87ZG97by5wdXNoKGE9bmV3IERhdGUoK2UpKSxpKGUsbiksdChlKX13aGlsZShhPGUmJmU8cik7cmV0dXJuIG99LHMuZmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiBuKChmdW5jdGlvbihyKXtpZihyPj1yKWZvcig7dChyKSwhZShyKTspci5zZXRUaW1lKHItMSl9KSwoZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtpKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtpKHQsMSksIWUodCk7KTt9KSl9LGEmJihzLmNvdW50PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGUuc2V0VGltZSgrbiksci5zZXRUaW1lKCtpKSx0KGUpLHQociksTWF0aC5mbG9vcihhKGUscikpfSxzLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/cy5maWx0ZXIobz9mdW5jdGlvbihlKXtyZXR1cm4gbyhlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gcy5jb3VudCgwLGUpJXQ9PTB9KTpzOm51bGx9KSxzfXZhciBpPW4oKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pKTtpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/bigoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VGltZSgrZStyKnQpfSksKGZ1bmN0aW9uKGUscil7cmV0dXJuKHItZSkvdH0pKTppOm51bGx9O3ZhciBhPWkucmFuZ2Usbz1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLHM9by5yYW5nZSxsPW4oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLGM9bC5yYW5nZSx1PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpLTZlNCp0LmdldE1pbnV0ZXMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pKSxmPXUucmFuZ2UsaD1uKChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxwPWgucmFuZ2U7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbigoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIG09ZCgwKSxnPWQoMSksdj1kKDIpLHk9ZCgzKSx4PWQoNCksYj1kKDUpLF89ZCg2KSx3PW0ucmFuZ2UsVD1nLnJhbmdlLGs9di5yYW5nZSxBPXkucmFuZ2UsTT14LnJhbmdlLFM9Yi5yYW5nZSxFPV8ucmFuZ2UsTD1uKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksQz1MLnJhbmdlLFA9bigoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7UC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP24oKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStyKnQpfSkpOm51bGx9O3ZhciBJPVAucmFuZ2UsTz1uKChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSkpLHo9Ty5yYW5nZSxEPW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxSPUQucmFuZ2UsRj1uKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSksQj1GLnJhbmdlO2Z1bmN0aW9uIE4odCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzYwNDhlNX0pKX12YXIgaj1OKDApLFU9TigxKSxWPU4oMiksSD1OKDMpLHE9Tig0KSxHPU4oNSksWT1OKDYpLFc9ai5yYW5nZSxYPVUucmFuZ2UsWj1WLnJhbmdlLEo9SC5yYW5nZSxLPXEucmFuZ2UsUT1HLnJhbmdlLCQ9WS5yYW5nZSx0dD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksZXQ9dHQucmFuZ2UscnQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7cnQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgbnQ9cnQucmFuZ2U7dC50aW1lRGF5PWgsdC50aW1lRGF5cz1wLHQudGltZUZyaWRheT1iLHQudGltZUZyaWRheXM9Uyx0LnRpbWVIb3VyPXUsdC50aW1lSG91cnM9Zix0LnRpbWVJbnRlcnZhbD1uLHQudGltZU1pbGxpc2Vjb25kPWksdC50aW1lTWlsbGlzZWNvbmRzPWEsdC50aW1lTWludXRlPWwsdC50aW1lTWludXRlcz1jLHQudGltZU1vbmRheT1nLHQudGltZU1vbmRheXM9VCx0LnRpbWVNb250aD1MLHQudGltZU1vbnRocz1DLHQudGltZVNhdHVyZGF5PV8sdC50aW1lU2F0dXJkYXlzPUUsdC50aW1lU2Vjb25kPW8sdC50aW1lU2Vjb25kcz1zLHQudGltZVN1bmRheT1tLHQudGltZVN1bmRheXM9dyx0LnRpbWVUaHVyc2RheT14LHQudGltZVRodXJzZGF5cz1NLHQudGltZVR1ZXNkYXk9dix0LnRpbWVUdWVzZGF5cz1rLHQudGltZVdlZG5lc2RheT15LHQudGltZVdlZG5lc2RheXM9QSx0LnRpbWVXZWVrPW0sdC50aW1lV2Vla3M9dyx0LnRpbWVZZWFyPVAsdC50aW1lWWVhcnM9SSx0LnV0Y0RheT1GLHQudXRjRGF5cz1CLHQudXRjRnJpZGF5PUcsdC51dGNGcmlkYXlzPVEsdC51dGNIb3VyPUQsdC51dGNIb3Vycz1SLHQudXRjTWlsbGlzZWNvbmQ9aSx0LnV0Y01pbGxpc2Vjb25kcz1hLHQudXRjTWludXRlPU8sdC51dGNNaW51dGVzPXosdC51dGNNb25kYXk9VSx0LnV0Y01vbmRheXM9WCx0LnV0Y01vbnRoPXR0LHQudXRjTW9udGhzPWV0LHQudXRjU2F0dXJkYXk9WSx0LnV0Y1NhdHVyZGF5cz0kLHQudXRjU2Vjb25kPW8sdC51dGNTZWNvbmRzPXMsdC51dGNTdW5kYXk9aix0LnV0Y1N1bmRheXM9Vyx0LnV0Y1RodXJzZGF5PXEsdC51dGNUaHVyc2RheXM9Syx0LnV0Y1R1ZXNkYXk9Vix0LnV0Y1R1ZXNkYXlzPVosdC51dGNXZWRuZXNkYXk9SCx0LnV0Y1dlZG5lc2RheXM9Six0LnV0Y1dlZWs9aix0LnV0Y1dlZWtzPVcsdC51dGNZZWFyPXJ0LHQudXRjWWVhcnM9bnQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTE3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxyLG49MCxpPTAsYT0wLG89MCxzPTAsbD0wLGM9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsdT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBmKCl7cmV0dXJuIHN8fCh1KGgpLHM9Yy5ub3coKStsKX1mdW5jdGlvbiBoKCl7cz0wfWZ1bmN0aW9uIHAoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPW5ldyBwO3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gbSgpe2YoKSwrK247Zm9yKHZhciB0LHI9ZTtyOykodD1zLXIuX3RpbWUpPj0wJiZyLl9jYWxsLmNhbGwobnVsbCx0KSxyPXIuX25leHQ7LS1ufWZ1bmN0aW9uIGcoKXtzPShvPWMubm93KCkpK2wsbj1pPTA7dHJ5e20oKX1maW5hbGx5e249MCxmdW5jdGlvbigpe3ZhciB0LG4saT1lLGE9MS8wO2Zvcig7aTspaS5fY2FsbD8oYT5pLl90aW1lJiYoYT1pLl90aW1lKSx0PWksaT1pLl9uZXh0KToobj1pLl9uZXh0LGkuX25leHQ9bnVsbCxpPXQ/dC5fbmV4dD1uOmU9bik7cj10LHkoYSl9KCkscz0wfX1mdW5jdGlvbiB2KCl7dmFyIHQ9Yy5ub3coKSxlPXQtbztlPjFlMyYmKGwtPWUsbz10KX1mdW5jdGlvbiB5KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtcz4yND8odDwxLzAmJihpPXNldFRpbWVvdXQoZyx0LWMubm93KCktbCkpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KG89Yy5ub3coKSxhPXNldEludGVydmFsKHYsMWUzKSksbj0xLHUoZykpKX1wLnByb3RvdHlwZT1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCxyZXN0YXJ0OmZ1bmN0aW9uKHQsbixpKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2k9KG51bGw9PWk/ZigpOitpKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHxyPT09dGhpc3x8KHI/ci5fbmV4dD10aGlzOmU9dGhpcyxyPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWkseSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx5KCkpfX0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHAsaT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9mKCk6K3Isbi5yZXN0YXJ0KChmdW5jdGlvbiBhKG8pe28rPWksbi5yZXN0YXJ0KGEsaSs9ZSxyKSx0KG8pfSksZSxyKSxuKX0sdC5ub3c9Zix0LnRpbWVvdXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBwO3JldHVybiBlPW51bGw9PWU/MDorZSxuLnJlc3RhcnQoKGZ1bmN0aW9uKHIpe24uc3RvcCgpLHQocitlKX0pLGUsciksbn0sdC50aW1lcj1kLHQudGltZXJGbHVzaD1tLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDExODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuZ2V0Q29udGV4dCgiMmQiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oIiwgIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGVbMF0/cj1vKGUpOkFycmF5LmlzQXJyYXkoZSk/cj1lOihlLm8/cj1vKGUubyk6ZS5wYWlycyYmKHI9ZS5wYWlycyksZS5mb250U2l6ZSYmKHM9ZS5mb250U2l6ZSksbnVsbCE9ZS50aHJlc2hvbGQmJihsPWUudGhyZXNob2xkKSkpLHJ8fChyPWkpLG4uZm9udD1zKyJweCAiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10sZj1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsaD1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGYtaCk+cypsKXt2YXIgcD0oaC1mKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTIwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSkpLHQuY2xvc2VQYXRoKCl9fSx7ImFicy1zdmctcGF0aCI6NjYsIm5vcm1hbGl6ZS1zdmctcGF0aCI6MjQxfV0sMTIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImludDgiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZSJpbnQxNiI6cmV0dXJuIEludDE2QXJyYXk7Y2FzZSJpbnQzMiI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSJ1aW50OCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZSJ1aW50MTYiOnJldHVybiBVaW50MTZBcnJheTtjYXNlInVpbnQzMiI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2UiZmxvYXQzMiI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlImZsb2F0NjQiOnJldHVybiBGbG9hdDY0QXJyYXk7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5O2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGQsZz1lJiZlLmxlbmd0aCx2PWc/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsdixyLCEwKSx4PVtdO2lmKCF5fHx5Lm5leHQ9PT15LnByZXYpcmV0dXJuIHg7aWYoZyYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9aSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChtKHUpKTtmb3IocC5zb3J0KGYpLG89MDtvPHAubGVuZ3RoO28rKylyPWEocj1oKHBbb10sciksci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8djtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2Q9MCE9PShkPU1hdGgubWF4KGwtbixjLXMpKT8xL2Q6MH1yZXR1cm4gbyh5LHgscixuLHMsZCkseH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09RSh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1BKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89QShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ4KG8sby5uZXh0KSYmKE0obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXgobixuLm5leHQpJiYwIT09eShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGYsaCl7aWYodCl7IWgmJmYmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1kKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxmKTtmb3IodmFyIHAsbSxnPXQ7dC5wcmV2IT09dC5uZXh0OylpZihwPXQucHJldixtPXQubmV4dCxmP2wodCxuLGksZik6cyh0KSllLnB1c2gocC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKG0uaS9yKSxNKHQpLHQ9bS5uZXh0LGc9bS5uZXh0O2Vsc2UgaWYoKHQ9bSk9PT1nKXtoPzE9PT1oP28odD1jKGEodCksZSxyKSxlLHIsbixpLGYsMik6Mj09PWgmJnUodCxlLHIsbixpLGYpOm8oYSh0KSxlLHIsbixpLGYsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoeShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihnKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZ5KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKHkoaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksZj1kKHMsbCxlLHIsbiksaD1kKGMsdSxlLHIsbikscD10LnByZXZaLG09dC5uZXh0WjtwJiZwLno+PWYmJm0mJm0uejw9aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosbSE9PXQucHJldiYmbSE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxtLngsbS55KSYmeShtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1mb3IoO3AmJnAuej49Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWg7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LG0ueCxtLnkpJiZ5KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IXgoaSxvKSYmYihpLG4sbi5uZXh0LG8pJiZUKGksbykmJlQobyxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goby5pL3IpLE0obiksTShuLm5leHQpLG49dD1vKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIGEobil9ZnVuY3Rpb24gdSh0LGUscixuLGkscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmdihsLGMpKXt2YXIgdT1rKGwsYyk7cmV0dXJuIGw9YShsLGwubmV4dCksdT1hKHUsdS5uZXh0KSxvKGwsZSxyLG4saSxzKSx2b2lkIG8odSxlLHIsbixpLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcjt2YXIgbCxjPXIsdT1yLngsZj1yLnksaD0xLzA7bj1yO2Rve2k+PW4ueCYmbi54Pj11JiZpIT09bi54JiZnKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxUKG4sdCkmJihsPGh8fGw9PT1oJiYobi54PnIueHx8bi54PT09ci54JiZwKHIsbikpKSYmKHI9bixoPWwpKSxuPW4ubmV4dH13aGlsZShuIT09Yyk7cmV0dXJuIHJ9KHQsZSk7aWYoIXIpcmV0dXJuIGU7dmFyIG49ayhyLHQpLGk9YShyLHIubmV4dCk7cmV0dXJuIGEobixuLm5leHQpLGU9PT1yP2k6ZX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsZS5wcmV2KTwwJiZ5KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBkKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LHI9dDtkb3soZS54PHIueHx8ZS54PT09ci54JiZlLnk8ci55KSYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJmIocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJihUKHQsZSkmJlQoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKSYmKHkodC5wcmV2LHQsZS5wcmV2KXx8eSh0LGUucHJldixlKSl8fHgodCxlKSYmeSh0LnByZXYsdCx0Lm5leHQpPjAmJnkoZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXcoeSh0LGUscikpLGE9dyh5KHQsZSxuKSksbz13KHkocixuLHQpKSxzPXcoeShyLG4sZSkpO3JldHVybiBpIT09YSYmbyE9PXN8fCghKDAhPT1pfHwhXyh0LHIsZSkpfHwoISgwIT09YXx8IV8odCxuLGUpKXx8KCEoMCE9PW98fCFfKHIsdCxuKSl8fCEoMCE9PXN8fCFfKHIsZSxuKSkpKSl9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LHIueCkmJmUueD49TWF0aC5taW4odC54LHIueCkmJmUueTw9TWF0aC5tYXgodC55LHIueSkmJmUueT49TWF0aC5taW4odC55LHIueSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB5KHQucHJldix0LHQubmV4dCk8MD95KHQsZSx0Lm5leHQpPj0wJiZ5KHQsdC5wcmV2LGUpPj0wOnkodCxlLHQucHJldik8MHx8eSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1uZXcgUyh0LmksdC54LHQueSksbj1uZXcgUyhlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gQSh0LGUscixuKXt2YXIgaT1uZXcgUyh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIE0odCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBTKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEUodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhFKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXSxvPVtdLHM9e30sbD1bXTtmdW5jdGlvbiBjKHQpe3ZhciBlLG4saT0hMTtmb3IoYS5wdXNoKHQpLG9bdF09ITAsZT0wO2U8bFt0XS5sZW5ndGg7ZSsrKShuPWxbdF1bZV0pPT09cj8odShyLGEpLGk9ITApOm9bbl18fChpPWMobikpO2lmKGkpIWZ1bmN0aW9uIHQoZSl7b1tlXT0hMSxzLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhzW2VdKS5mb3JFYWNoKChmdW5jdGlvbihyKXtkZWxldGUgc1tlXVtyXSxvW3JdJiZ0KHIpfSkpfSh0KTtlbHNlIGZvcihlPTA7ZTxsW3RdLmxlbmd0aDtlKyspe249bFt0XVtlXTt2YXIgZj1zW25dO2Z8fChmPXt9LHNbbl09ZiksZltuXT0hMH1yZXR1cm4gYS5wb3AoKSxpfWZ1bmN0aW9uIHUodCxyKXt2YXIgbj1bXS5jb25jYXQocikuY29uY2F0KHQpO2U/ZShuKTppLnB1c2gobil9ZnVuY3Rpb24gZihlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspKHI8ZXx8IXRbcl0pJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PWV9KSl9KGUpO2Zvcih2YXIgcixpPW4odCkuY29tcG9uZW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpLGE9MS8wLG89MDtvPGkubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzPGlbb10ubGVuZ3RoO3MrKylpW29dW3NdPGEmJihhPWlbb11bc10scj1vKTt2YXIgbD1pW3JdO3JldHVybiEhbCYme2xlYXN0VmVydGV4OmEsYWRqTGlzdDp0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4tMT09PWwuaW5kZXhPZihlKT9bXTp0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KSl9KSl9fXI9MDtmb3IodmFyIGg9dC5sZW5ndGg7cjxoOyl7dmFyIHA9ZihyKTtpZihyPXAubGVhc3RWZXJ0ZXgsbD1wLmFkakxpc3Qpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7ZCsrKWZvcih2YXIgbT0wO208bFtkXS5sZW5ndGg7bSsrKXt2YXIgZz1sW2RdW21dO29bK2ddPSExLHNbZ109e319YyhyKSxyKz0xfWVsc2Ugcj1ofXJldHVybiBlP3ZvaWQgMDppfX0seyJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6MzAxfV0sMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMpLmxlbmd0aD0wLHRoaXN9fSx7Ii4uLy4uL29iamVjdC92YWxpZC12YWx1ZSI6MTU2fV0sMTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9BcnJheS5mcm9tOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjEyNywiLi9zaGltIjoxMjh9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPUFycmF5LmZyb207cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHImJihlPXIodD1bInJheiIsImR3YSJdKSxCb29sZWFuKGUmJmUhPT10JiYiZHdhIj09PWVbMV0pKX19LHt9XSwxMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yLGk9dCgiLi4vLi4vZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksYT10KCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiIpLG89dCgiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyIikscz10KCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGUiKSxsPXQoIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZSIpLGM9dCgiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIiksdT10KCIuLi8uLi9zdHJpbmcvaXMtc3RyaW5nIiksZj1BcnJheS5pc0FycmF5LGg9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0sZD1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbSxnLHYseSx4LGIsXyx3LFQ9YXJndW1lbnRzWzFdLGs9YXJndW1lbnRzWzJdO2lmKHQ9T2JqZWN0KGwodCkpLGMoVCkmJnMoVCksdGhpcyYmdGhpcyE9PUFycmF5JiZhKHRoaXMpKWU9dGhpcztlbHNle2lmKCFUKXtpZihpKHQpKXJldHVybiAxIT09KHY9dC5sZW5ndGgpP0FycmF5LmFwcGx5KG51bGwsdCk6KChnPW5ldyBBcnJheSgxKSlbMF09dFswXSxnKTtpZihmKHQpKXtmb3IoZz1uZXcgQXJyYXkodj10Lmxlbmd0aCkscj0wO3I8djsrK3IpZ1tyXT10W3JdO3JldHVybiBnfX1nPVtdfWlmKCFmKHQpKWlmKHZvaWQgMCE9PShfPXRbbl0pKXtmb3IoeD1zKF8pLmNhbGwodCksZSYmKGc9bmV3IGUpLGI9eC5uZXh0KCkscj0wOyFiLmRvbmU7KXc9VD9oLmNhbGwoVCxrLGIudmFsdWUscik6Yi52YWx1ZSxlPyhwLnZhbHVlPXcsZChnLHIscCkpOmdbcl09dyxiPXgubmV4dCgpLCsrcjt2PXJ9ZWxzZSBpZih1KHQpKXtmb3Iodj10Lmxlbmd0aCxlJiYoZz1uZXcgZSkscj0wLG09MDtyPHY7KytyKXc9dFtyXSxyKzE8diYmKHk9dy5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnk8PTU2MzE5JiYodys9dFsrK3JdKSx3PVQ/aC5jYWxsKFQsayx3LG0pOncsZT8ocC52YWx1ZT13LGQoZyxtLHApKTpnW21dPXcsKyttO3Y9bX1pZih2b2lkIDA9PT12KWZvcih2PW8odC5sZW5ndGgpLGUmJihnPW5ldyBlKHYpKSxyPTA7cjx2Oysrcil3PVQ/aC5jYWxsKFQsayx0W3JdLHIpOnRbcl0sZT8ocC52YWx1ZT13LGQoZyxyLHApKTpnW3JdPXc7cmV0dXJuIGUmJihwLnZhbHVlPW51bGwsZy5sZW5ndGg9diksZ319LHsiLi4vLi4vZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxMjksIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uIjoxMzAsIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciI6MTM2LCIuLi8uLi9vYmplY3QvaXMtdmFsdWUiOjE0NSwiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoxNTQsIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZSI6MTU2LCIuLi8uLi9zdHJpbmcvaXMtc3RyaW5nIjoxNjAsImVzNi1zeW1ib2wiOjE2OX1dLDEyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCk9PT1pfX0se31dLDEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9UmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL15bb2JqZWN0IFtBLVphLXowLTldKkZ1bmN0aW9uXSQvKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJmkobi5jYWxsKHQpKX19LHt9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/TWF0aC5zaWduOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjEzMywiLi9zaGltIjoxMzR9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5zaWduO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYoMT09PXQoMTApJiYtMT09PXQoLTIwKSl9fSx7fV0sMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD1OdW1iZXIodCksaXNOYU4odCl8fDA9PT10P3Q6dD4wPzE6LTF9fSx7fV0sMTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL21hdGgvc2lnbiIpLGk9TWF0aC5hYnMsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCk/MDowIT09KHQ9TnVtYmVyKHQpKSYmaXNGaW5pdGUodCk/bih0KSphKGkodCkpOnR9fSx7Ii4uL21hdGgvc2lnbiI6MTMyfV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdG8taW50ZWdlciIpLGk9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKDAsbih0KSl9fSx7Ii4vdG8taW50ZWdlciI6MTM1fV0sMTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxpPXQoIi4vdmFsaWQtdmFsdWUiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLG89RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscz1PYmplY3Qua2V5cyxsPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsYyl7dmFyIHUsZj1hcmd1bWVudHNbMl0saD1hcmd1bWVudHNbM107cmV0dXJuIHI9T2JqZWN0KGkocikpLG4oYyksdT1zKHIpLGgmJnUuc29ydCgiZnVuY3Rpb24iPT10eXBlb2YgaD9hLmNhbGwoaCxyKTp2b2lkIDApLCJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD11W3RdKSxvLmNhbGwodCx1LChmdW5jdGlvbih0LG4pe3JldHVybiBsLmNhbGwocix0KT9vLmNhbGwoYyxmLHJbdF0sdCxyLG4pOmV9KSl9fX0seyIuL3ZhbGlkLWNhbGxhYmxlIjoxNTQsIi4vdmFsaWQtdmFsdWUiOjE1Nn1dLDEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmFzc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxMzksIi4vc2hpbSI6MTQwfV0sMTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGUodD17Zm9vOiJyYXoifSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSx0LmZvbyt0LmJhcit0LnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0se31dLDE0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9rZXlzIiksaT10KCIuLi92YWxpZC12YWx1ZSIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyluKGU9YXJndW1lbnRzW29dKS5mb3JFYWNoKHMpO2lmKHZvaWQgMCE9PXIpdGhyb3cgcjtyZXR1cm4gdH19LHsiLi4va2V5cyI6MTQ2LCIuLi92YWxpZC12YWx1ZSI6MTU2fV0sMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2FycmF5L2Zyb20iKSxpPXQoIi4vYXNzaWduIiksYT10KCIuL3ZhbGlkLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChhKHQpKSxyPWFyZ3VtZW50c1sxXSxvPU9iamVjdChhcmd1bWVudHNbMl0pO2lmKGUhPT10JiYhcilyZXR1cm4gZTt2YXIgcz17fTtyZXR1cm4gcj9uKHIsKGZ1bmN0aW9uKGUpeyhvLmVuc3VyZXx8ZSBpbiB0KSYmKHNbZV09dFtlXSl9KSk6aShzLHQpLHN9fSx7Ii4uL2FycmF5L2Zyb20iOjEyNiwiLi9hc3NpZ24iOjEzOCwiLi92YWxpZC12YWx1ZSI6MTU2fV0sMTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiKSgpfHwobj10KCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPSJfX3Byb3RvX18iIT09dD9vOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9fSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIm51bGxQb2x5ZmlsbCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOml9KSxmdW5jdGlvbih0LGUpe3JldHVybiBzKG51bGw9PT10P2k6dCxlKX0pOnN9LHsiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkIjoxNTIsIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltIjoxNTN9XSwxNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vX2l0ZXJhdGUiKSgiZm9yRWFjaCIpfSx7Ii4vX2l0ZXJhdGUiOjEzN31dLDE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHsiLi9pcy12YWx1ZSI6MTQ1fV0sMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL25vb3AiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0seyIuLi9mdW5jdGlvbi9ub29wIjoxMzF9XSwxNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5rZXlzOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE0NywiLi9zaGltIjoxNDh9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cygicHJpbWl0aXZlIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9pcy12YWx1ZSIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0seyIuLi9pcy12YWx1ZSI6MTQ1fV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxpPXQoIi4vZm9yLWVhY2giKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG89YXJndW1lbnRzWzJdO3JldHVybiBuKGUpLGkodCwoZnVuY3Rpb24odCxuLGkscyl7cltuXT1hLmNhbGwoZSxvLHQsbixpLHMpfSkpLHJ9fSx7Ii4vZm9yLWVhY2giOjE0MywiLi92YWxpZC1jYWxsYWJsZSI6MTU0fV0sMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKSxpPUFycmF5LnByb3RvdHlwZS5mb3JFYWNoLGE9T2JqZWN0LmNyZWF0ZSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI7Zm9yKHIgaW4gdCllW3JdPXRbcl19O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hKG51bGwpO3JldHVybiBpLmNhbGwoYXJndW1lbnRzLChmdW5jdGlvbih0KXtuKHQpJiZvKE9iamVjdCh0KSxlKX0pKSxlfX0seyIuL2lzLXZhbHVlIjoxNDV9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5zZXRQcm90b3R5cGVPZjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNTIsIi4vc2hpbSI6MTUzfV0sMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUsaT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2YsZT1hcmd1bWVudHNbMF18fG47cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJmkodChlKG51bGwpLGEpKT09PWF9fSx7fV0sMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiLi4vaXMtb2JqZWN0IiksYT10KCIuLi92YWxpZC12YWx1ZSIpLG89T2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLHM9T2JqZWN0LmRlZmluZVByb3BlcnR5LGw9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH07bj1mdW5jdGlvbih0LGUpe2lmKGEodCksbnVsbD09PWV8fGkoZSkpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdG90eXBlIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3QiKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIHQ/KDI9PT10LmxldmVsP3Quc2V0PyhyPXQuc2V0LGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKG4odCxlKSxlKSx0fSk6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSkuX19wcm90b19fPWUsdH06ZT1mdW5jdGlvbiB0KGUscil7dmFyIGk7cmV0dXJuIG4oZSxyKSwoaT1vLmNhbGwodC5udWxsUG9seWZpbGwsZSkpJiZkZWxldGUgdC5udWxsUG9seWZpbGwuX19wcm90b19fLG51bGw9PT1yJiYocj10Lm51bGxQb2x5ZmlsbCksZS5fX3Byb3RvX189cixpJiZzKHQubnVsbFBvbHlmaWxsLCJfX3Byb3RvX18iLGwpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsZXZlbCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOnQubGV2ZWx9KSk6bnVsbH0oZnVuY3Rpb24oKXt2YXIgdCxlPU9iamVjdC5jcmVhdGUobnVsbCkscj17fSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIik7aWYobil7dHJ5eyh0PW4uc2V0KS5jYWxsKGUscil9Y2F0Y2godCl7fWlmKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXIpcmV0dXJue3NldDp0LGxldmVsOjJ9fXJldHVybiBlLl9fcHJvdG9fXz1yLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXI/e2xldmVsOjJ9OigoZT17fSkuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09ciYme2xldmVsOjF9KX0oKSksdCgiLi4vY3JlYXRlIil9LHsiLi4vY3JlYXRlIjoxNDIsIi4uL2lzLW9iamVjdCI6MTQ0LCIuLi92YWxpZC12YWx1ZSI6MTU2fV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiB0fX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLW9iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYW4gT2JqZWN0Iik7cmV0dXJuIHR9fSx7Ii4vaXMtb2JqZWN0IjoxNDR9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9fSx7Ii4vaXMtdmFsdWUiOjE0NX1dLDE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/U3RyaW5nLnByb3RvdHlwZS5jb250YWluczp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNTgsIi4vc2hpbSI6MTU5fV0sMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPSJyYXpkd2F0cnp5IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5jb250YWlucyYmKCEwPT09bi5jb250YWlucygiZHdhIikmJiExPT09bi5jb250YWlucygiZm9vIikpfX0se31dLDE1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1TdHJpbmcucHJvdG90eXBlLmluZGV4T2Y7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodGhpcyx0LGFyZ3VtZW50c1sxXSk+LTF9fSx7fV0sMTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoIiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQgaW5zdGFuY2VvZiBTdHJpbmd8fG4uY2FsbCh0KT09PWkpfHwhMX19LHt9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPU1hdGgucmFuZG9tO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0O2Rve3Q9aSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX13aGlsZShuW3RdKTtyZXR1cm4gdH19LHt9XSwxNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIiksYT10KCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zIiksbz10KCJkIikscz10KCJlczYtc3ltYm9sIiksbD10KCIuLyIpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTtsLmNhbGwodGhpcyx0KSxlPWU/YS5jYWxsKGUsImtleSt2YWx1ZSIpPyJrZXkrdmFsdWUiOmEuY2FsbChlLCJrZXkiKT8ia2V5IjoidmFsdWUiOiJ2YWx1ZSIsYyh0aGlzLCJfX2tpbmRfXyIsbygiIixlKSl9LGkmJmkobixsKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSx7X3Jlc29sdmU6bygoZnVuY3Rpb24odCl7cmV0dXJuInZhbHVlIj09PXRoaXMuX19raW5kX18/dGhpcy5fX2xpc3RfX1t0XToia2V5K3ZhbHVlIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pKX0pLGMobi5wcm90b3R5cGUscy50b1N0cmluZ1RhZyxvKCJjIiwiQXJyYXkgSXRlcmF0b3IiKSl9LHsiLi8iOjE2NSxkOjEwMSwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MTUxLCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zIjoxNTcsImVzNi1zeW1ib2wiOjE2OX1dLDE2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiKSxhPXQoImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyIpLG89dCgiLi9nZXQiKSxzPUFycmF5LmlzQXJyYXksbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxjPUFycmF5LnByb3RvdHlwZS5zb21lO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxtLGcsdj1hcmd1bWVudHNbMl07aWYocyh0KXx8bih0KT9yPSJhcnJheSI6YSh0KT9yPSJzdHJpbmciOnQ9byh0KSxpKGUpLGY9ZnVuY3Rpb24oKXtoPSEwfSwiYXJyYXkiIT09cilpZigic3RyaW5nIiE9PXIpZm9yKHU9dC5uZXh0KCk7IXUuZG9uZTspe2lmKGwuY2FsbChlLHYsdS52YWx1ZSxmKSxoKXJldHVybjt1PXQubmV4dCgpfWVsc2UgZm9yKGQ9dC5sZW5ndGgscD0wO3A8ZCYmKG09dFtwXSxwKzE8ZCYmKGc9bS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmc8PTU2MzE5JiYobSs9dFsrK3BdKSxsLmNhbGwoZSx2LG0sZiksIWgpOysrcCk7ZWxzZSBjLmNhbGwodCwoZnVuY3Rpb24odCl7cmV0dXJuIGwuY2FsbChlLHYsdCxmKSxofSkpfX0seyIuL2dldCI6MTY0LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTI5LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTU0LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjE2MH1dLDE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksYT10KCIuL2FycmF5Iiksbz10KCIuL3N0cmluZyIpLHM9dCgiLi92YWxpZC1pdGVyYWJsZSIpLGw9dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0seyIuL2FycmF5IjoxNjIsIi4vc3RyaW5nIjoxNjcsIi4vdmFsaWQtaXRlcmFibGUiOjE2OCwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjEyOSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoxNjAsImVzNi1zeW1ib2wiOjE2OX1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvYXJyYXkvIy9jbGVhciIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImQiKSxjPXQoImQvYXV0by1iaW5kIiksdT10KCJlczYtc3ltYm9sIiksZj1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QuZGVmaW5lUHJvcGVydGllcztlLmV4cG9ydHM9bj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7aCh0aGlzLHtfX2xpc3RfXzpsKCJ3IixzKHQpKSxfX2NvbnRleHRfXzpsKCJ3IixlKSxfX25leHRJbmRleF9fOmwoInciLDApfSksZSYmKG8oZS5vbiksZS5vbigiX2FkZCIsdGhpcy5fb25BZGQpLGUub24oIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSxlLm9uKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGgobi5wcm90b3R5cGUsYSh7X25leHQ6bCgoZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fcmVkb19fJiZ2b2lkIDAhPT0odD10aGlzLl9fcmVkb19fLnNoaWZ0KCkpP3Q6dGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19saXN0X18ubGVuZ3RoP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSksbmV4dDpsKChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pKSxfY3JlYXRlUmVzdWx0OmwoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3tkb25lOiEwLHZhbHVlOnZvaWQgMH06e2RvbmU6ITEsdmFsdWU6dGhpcy5fcmVzb2x2ZSh0KX19KSksX3Jlc29sdmU6bCgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19saXN0X19bdF19KSksX3VuQmluZDpsKChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoIl9hZGQiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSksdG9TdHJpbmc6bCgoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiKyh0aGlzW3UudG9TdHJpbmdUYWddfHwiT2JqZWN0IikrIl0ifSkpfSxjKHtfb25BZGQ6bCgoZnVuY3Rpb24odCl7dD49dGhpcy5fX25leHRJbmRleF9ffHwoKyt0aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXz8odGhpcy5fX3JlZG9fXy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2U+PXQmJih0aGlzLl9fcmVkb19fW3JdPSsrZSl9KSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmYodGhpcywiX19yZWRvX18iLGwoImMiLFt0XSkpKX0pKSxfb25EZWxldGU6bCgoZnVuY3Rpb24odCl7dmFyIGU7dD49dGhpcy5fX25leHRJbmRleF9ffHwoLS10aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXyYmKC0xIT09KGU9dGhpcy5fX3JlZG9fXy5pbmRleE9mKHQpKSYmdGhpcy5fX3JlZG9fXy5zcGxpY2UoZSwxKSx0aGlzLl9fcmVkb19fLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZT50JiYodGhpcy5fX3JlZG9fX1tyXT0tLWUpfSksdGhpcykpKX0pKSxfb25DbGVhcjpsKChmdW5jdGlvbigpe3RoaXMuX19yZWRvX18mJmkuY2FsbCh0aGlzLl9fcmVkb19fKSx0aGlzLl9fbmV4dEluZGV4X189MH0pKX0pKSksZihuLnByb3RvdHlwZSx1Lml0ZXJhdG9yLGwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkpfSx7ZDoxMDEsImQvYXV0by1iaW5kIjoxMDAsImVzNS1leHQvYXJyYXkvIy9jbGVhciI6MTI1LCJlczUtZXh0L29iamVjdC9hc3NpZ24iOjEzOCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE1NCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjE1NiwiZXM2LXN5bWJvbCI6MTY5fV0sMTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCJlczYtc3ltYm9sIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0W29dKSkpfX0seyJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTI5LCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTQ1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjE2MCwiZXM2LXN5bWJvbCI6MTY5fV0sMTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZCIpLG89dCgiZXM2LXN5bWJvbCIpLHM9dCgiLi8iKSxsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcywiX19sZW5ndGhfXyIsYSgiIix0Lmxlbmd0aCkpfSxpJiZpKG4scyksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUse19uZXh0OmEoKGZ1bmN0aW9uKCl7aWYodGhpcy5fX2xpc3RfXylyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19sZW5ndGhfXz90aGlzLl9fbmV4dEluZGV4X18rKzp2b2lkIHRoaXMuX3VuQmluZCgpfSkpLF9yZXNvbHZlOmEoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fX2xpc3RfX1t0XTtyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPT09dGhpcy5fX2xlbmd0aF9fP3I6KGU9ci5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmU8PTU2MzE5P3IrdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK106cn0pKX0pLGwobi5wcm90b3R5cGUsby50b1N0cmluZ1RhZyxhKCJjIiwiU3RyaW5nIEl0ZXJhdG9yIikpfSx7Ii4vIjoxNjUsZDoxMDEsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjE1MSwiZXM2LXN5bWJvbCI6MTY5fV0sMTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtaXRlcmFibGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIHR9fSx7Ii4vaXMtaXRlcmFibGUiOjE2Nn1dLDE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNzAsIi4vcG9seWZpbGwiOjE3NSwiZXh0L2dsb2JhbC10aGlzIjoxODN9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXh0L2dsb2JhbC10aGlzIiksaT17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1uLlN5bWJvbDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4hMTt0PWUoInRlc3Qgc3ltYm9sIik7dHJ5e1N0cmluZyh0KX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hIWlbdHlwZW9mIGUuaXRlcmF0b3JdJiYoISFpW3R5cGVvZiBlLnRvUHJpbWl0aXZlXSYmISFpW3R5cGVvZiBlLnRvU3RyaW5nVGFnXSl9fSx7ImV4dC9nbG9iYWwtdGhpcyI6MTgzfV0sMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIXQmJigic3ltYm9sIj09dHlwZW9mIHR8fCEhdC5jb25zdHJ1Y3RvciYmKCJTeW1ib2wiPT09dC5jb25zdHJ1Y3Rvci5uYW1lJiYiU3ltYm9sIj09PXRbdC5jb25zdHJ1Y3Rvci50b1N0cmluZ1RhZ10pKX19LHt9XSwxNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9T2JqZWN0LmNyZWF0ZSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvPU9iamVjdC5wcm90b3R5cGUscz1pKG51bGwpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPTA7c1t0KyhpfHwiIildOykrK2k7cmV0dXJuIHNbdCs9aXx8IiJdPSEwLGEobyxlPSJAQCIrdCxuLmdzKG51bGwsKGZ1bmN0aW9uKHQpe3J8fChyPSEwLGEodGhpcyxlLG4odCkpLHI9ITEpfSkpKSxlfX0se2Q6MTAxfV0sMTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPXQoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse2hhc0luc3RhbmNlOm4oIiIsaSYmaS5oYXNJbnN0YW5jZXx8dCgiaGFzSW5zdGFuY2UiKSksaXNDb25jYXRTcHJlYWRhYmxlOm4oIiIsaSYmaS5pc0NvbmNhdFNwcmVhZGFibGV8fHQoImlzQ29uY2F0U3ByZWFkYWJsZSIpKSxpdGVyYXRvcjpuKCIiLGkmJmkuaXRlcmF0b3J8fHQoIml0ZXJhdG9yIikpLG1hdGNoOm4oIiIsaSYmaS5tYXRjaHx8dCgibWF0Y2giKSkscmVwbGFjZTpuKCIiLGkmJmkucmVwbGFjZXx8dCgicmVwbGFjZSIpKSxzZWFyY2g6bigiIixpJiZpLnNlYXJjaHx8dCgic2VhcmNoIikpLHNwZWNpZXM6bigiIixpJiZpLnNwZWNpZXN8fHQoInNwZWNpZXMiKSksc3BsaXQ6bigiIixpJiZpLnNwbGl0fHx0KCJzcGxpdCIpKSx0b1ByaW1pdGl2ZTpuKCIiLGkmJmkudG9QcmltaXRpdmV8fHQoInRvUHJpbWl0aXZlIikpLHRvU3RyaW5nVGFnOm4oIiIsaSYmaS50b1N0cmluZ1RhZ3x8dCgidG9TdHJpbmdUYWciKSksdW5zY29wYWJsZXM6bigiIixpJiZpLnVuc2NvcGFibGVzfHx0KCJ1bnNjb3BhYmxlcyIpKX0pfX0se2Q6MTAxLCJleHQvZ2xvYmFsLXRoaXMiOjE4M31dLDE3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT10KCIuLi8uLi8uLi92YWxpZGF0ZS1zeW1ib2wiKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LHtmb3I6bigoZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV0/YVtlXTphW2VdPXQoU3RyaW5nKGUpKX0pKSxrZXlGb3I6bigoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gaSh0KSxhKWlmKGFbZV09PT10KXJldHVybiBlfSkpfSl9fSx7Ii4uLy4uLy4uL3ZhbGlkYXRlLXN5bWJvbCI6MTc2LGQ6MTAxfV0sMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvPXQoImQiKSxzPXQoIi4vdmFsaWRhdGUtc3ltYm9sIiksbD10KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2wsYz10KCIuL2xpYi9wcml2YXRlL2dlbmVyYXRlLW5hbWUiKSx1PXQoIi4vbGliL3ByaXZhdGUvc2V0dXAvc3RhbmRhcmQtc3ltYm9scyIpLGY9dCgiLi9saWIvcHJpdmF0ZS9zZXR1cC9zeW1ib2wtcmVnaXN0cnkiKSxoPU9iamVjdC5jcmVhdGUscD1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7U3RyaW5nKGwoKSksYT0hMH1jYXRjaCh0KXt9ZWxzZSBsPW51bGw7aT1mdW5jdGlvbih0KXtpZih0aGlzIGluc3RhbmNlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTtyZXR1cm4gbih0KX0sZS5leHBvcnRzPW49ZnVuY3Rpb24gdChlKXt2YXIgcjtpZih0aGlzIGluc3RhbmNlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTtyZXR1cm4gYT9sKGUpOihyPWgoaS5wcm90b3R5cGUpLGU9dm9pZCAwPT09ZT8iIjpTdHJpbmcoZSkscChyLHtfX2Rlc2NyaXB0aW9uX186bygiIixlKSxfX25hbWVfXzpvKCIiLGMoZSkpfSkpfSx1KG4pLGYobikscChpLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6byhuKSx0b1N0cmluZzpvKCIiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbmFtZV9ffSkpfSkscChuLnByb3RvdHlwZSx7dG9TdHJpbmc6bygoZnVuY3Rpb24oKXtyZXR1cm4iU3ltYm9sICgiK3ModGhpcykuX19kZXNjcmlwdGlvbl9fKyIpIn0pKSx2YWx1ZU9mOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyl9KSl9KSxkKG4ucHJvdG90eXBlLG4udG9QcmltaXRpdmUsbygiIiwoZnVuY3Rpb24oKXt2YXIgdD1zKHRoaXMpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQudG9TdHJpbmcoKX0pKSksZChuLnByb3RvdHlwZSxuLnRvU3RyaW5nVGFnLG8oImMiLCJTeW1ib2wiKSksZChpLnByb3RvdHlwZSxuLnRvU3RyaW5nVGFnLG8oImMiLG4ucHJvdG90eXBlW24udG9TdHJpbmdUYWddKSksZChpLnByb3RvdHlwZSxuLnRvUHJpbWl0aXZlLG8oImMiLG4ucHJvdG90eXBlW24udG9QcmltaXRpdmVdKSl9LHsiLi9saWIvcHJpdmF0ZS9nZW5lcmF0ZS1uYW1lIjoxNzIsIi4vbGliL3ByaXZhdGUvc2V0dXAvc3RhbmRhcmQtc3ltYm9scyI6MTczLCIuL2xpYi9wcml2YXRlL3NldHVwL3N5bWJvbC1yZWdpc3RyeSI6MTc0LCIuL3ZhbGlkYXRlLXN5bWJvbCI6MTc2LGQ6MTAxLCJleHQvZ2xvYmFsLXRoaXMiOjE4M31dLDE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXN5bWJvbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBzeW1ib2wiKTtyZXR1cm4gdH19LHsiLi9pcy1zeW1ib2wiOjE3MX1dLDE3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/V2Vha01hcDp0KCIuL3BvbHlmaWxsIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTc4LCIuL3BvbHlmaWxsIjoxODB9XSwxNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgV2Vha01hcClyZXR1cm4hMTt0cnl7dD1uZXcgV2Vha01hcChbW2U9e30sIm9uZSJdLFt7fSwidHdvIl0sW3t9LCJ0aHJlZSJdXSl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09U3RyaW5nKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0JiYodC5zZXQoe30sMSk9PT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVsZXRlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHQuaGFzJiYib25lIj09PXQuZ2V0KGUpKSkpKX19LHt9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrTWFwJiYiW29iamVjdCBXZWFrTWFwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFdlYWtNYXApfSx7fV0sMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiKSxhPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxvPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIiksYz10KCJkIiksdT10KCJlczYtaXRlcmF0b3IvZ2V0IiksZj10KCJlczYtaXRlcmF0b3IvZm9yLW9mIiksaD10KCJlczYtc3ltYm9sIikudG9TdHJpbmdUYWcscD10KCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCIpLGQ9QXJyYXkuaXNBcnJheSxtPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7ZS5leHBvcnRzPW49ZnVuY3Rpb24oKXt2YXIgdCxlPWFyZ3VtZW50c1swXTtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3JldHVybiB0PXAmJmEmJldlYWtNYXAhPT1uP2EobmV3IFdlYWtNYXAsdih0aGlzKSk6dGhpcyxpKGUpJiYoZChlKXx8KGU9dShlKSkpLG0odCwiX193ZWFrTWFwRGF0YV9fIixjKCJjIiwiJHdlYWtNYXAkIitsKCkpKSxlPyhmKGUsKGZ1bmN0aW9uKGUpe3MoZSksdC5zZXQoZVswXSxlWzFdKX0pKSx0KTp0fSxwJiYoYSYmYShuLFdlYWtNYXApLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2Vha01hcC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOmMobil9KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUse2RlbGV0ZTpjKChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSksZ2V0OmMoKGZ1bmN0aW9uKHQpe2lmKGcuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSlyZXR1cm4gdFt0aGlzLl9fd2Vha01hcERhdGFfX119KSksaGFzOmMoKGZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwobyh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyl9KSksc2V0OmMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0obyh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxjKCJjIixlKSksdGhpc30pKSx0b1N0cmluZzpjKChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIn0pKX0pLG0obi5wcm90b3R5cGUsaCxjKCJjIiwiV2Vha01hcCIpKX0seyIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCI6MTc5LGQ6MTAxLCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTQ1LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxNTEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCI6MTU1LCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MTU2LCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcSI6MTYxLCJlczYtaXRlcmF0b3IvZm9yLW9mIjoxNjMsImVzNi1pdGVyYXRvci9nZXQiOjE2NCwiZXM2LXN5bWJvbCI6MTY5fV0sMTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmFwcGx5P2kuYXBwbHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0LGUscil9O249aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkub3duS2V5cz9pLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkpfTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCl9O3ZhciBvPU51bWJlci5pc05hTnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9O2Z1bmN0aW9uIHMoKXtzLmluaXQuY2FsbCh0aGlzKX1lLmV4cG9ydHM9cyxlLmV4cG9ydHMub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtmdW5jdGlvbiBpKHIpe3QucmVtb3ZlTGlzdGVuZXIoZSxhKSxuKHIpfWZ1bmN0aW9uIGEoKXsiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVMaXN0ZW5lciYmdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGkpLHIoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX12KHQsZSxhLHtvbmNlOiEwfSksImVycm9yIiE9PWUmJmZ1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmdih0LCJlcnJvciIsZSxyKX0odCxpLHtvbmNlOiEwfSl9KSl9LHMuRXZlbnRFbWl0dGVyPXMscy5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAscy5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAscy5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIGw9MTA7ZnVuY3Rpb24gYyh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dC5fbWF4TGlzdGVuZXJzP3MuZGVmYXVsdE1heExpc3RlbmVyczp0Ll9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaSxhLG8scztpZihjKHIpLHZvaWQgMD09PShhPXQuX2V2ZW50cyk/KGE9dC5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdC5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PWEubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxhPXQuX2V2ZW50cyksbz1hW2VdKSx2b2lkIDA9PT1vKW89YVtlXT1yLCsrdC5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vPWFbZV09bj9bcixvXTpbbyxyXTpuP28udW5zaGlmdChyKTpvLnB1c2gociksKGk9dSh0KSk+MCYmby5sZW5ndGg+aSYmIW8ud2FybmVkKXtvLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitvLmxlbmd0aCsiICIrU3RyaW5nKGUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PW8ubGVuZ3RoLHM9bCxjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihzKX1yZXR1cm4gdH1mdW5jdGlvbiBoKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1oLmJpbmQobik7cmV0dXJuIGkubGlzdGVuZXI9cixuLndyYXBGbj1pLGl9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49dC5fZXZlbnRzO2lmKHZvaWQgMD09PW4pcmV0dXJuW107dmFyIGk9bltlXTtyZXR1cm4gdm9pZCAwPT09aT9bXToiZnVuY3Rpb24iPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTpnKGksaS5sZW5ndGgpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYodm9pZCAwIT09cilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQub24pbi5vbmNlP3Qub25jZShlLHIpOnQub24oZSxyKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3QuYWRkRXZlbnRMaXN0ZW5lcihlLChmdW5jdGlvbiBpKGEpe24ub25jZSYmdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSkscihhKX0pKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fG8odCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0KyIuIik7bD10fX0pLHMuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LHMucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8byh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3QrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30scy5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyl9LHMucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChhcmd1bWVudHNbcl0pO3ZhciBuPSJlcnJvciI9PT10LGk9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWkpbj1uJiZ2b2lkIDA9PT1pLmVycm9yO2Vsc2UgaWYoIW4pcmV0dXJuITE7aWYobil7dmFyIG87aWYoZS5sZW5ndGg+MCYmKG89ZVswXSksbyBpbnN0YW5jZW9mIEVycm9yKXRocm93IG87dmFyIHM9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisobz8iICgiK28ubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBzLmNvbnRleHQ9byxzfXZhciBsPWlbdF07aWYodm9pZCAwPT09bClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClhKGwsdGhpcyxlKTtlbHNle3ZhciBjPWwubGVuZ3RoLHU9ZyhsLGMpO2ZvcihyPTA7cjxjOysrcilhKHVbcl0sdGhpcyxlKX1yZXR1cm4hMH0scy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0aGlzLHQsZSwhMSl9LHMucHJvdG90eXBlLm9uPXMucHJvdG90eXBlLmFkZExpc3RlbmVyLHMucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCEwKX0scy5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiBjKGUpLHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30scy5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBjKGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKHQscCh0aGlzLHQsZSkpLHRoaXN9LHMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbztpZihjKGUpLHZvaWQgMD09PShuPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KHI9blt0XSkpcmV0dXJuIHRoaXM7aWYocj09PWV8fHIubGlzdGVuZXI9PT1lKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBuW3RdLG4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsci5saXN0ZW5lcnx8ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHIpe2ZvcihpPS0xLGE9ci5sZW5ndGgtMTthPj0wO2EtLSlpZihyW2FdPT09ZXx8clthXS5saXN0ZW5lcj09PWUpe289clthXS5saXN0ZW5lcixpPWE7YnJlYWt9aWYoaTwwKXJldHVybiB0aGlzOzA9PT1pP3Iuc2hpZnQoKTpmdW5jdGlvbih0LGUpe2Zvcig7ZSsxPHQubGVuZ3RoO2UrKyl0W2VdPXRbZSsxXTt0LnBvcCgpfShyLGkpLDE9PT1yLmxlbmd0aCYmKG5bdF09clswXSksdm9pZCAwIT09bi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxvfHxlKX1yZXR1cm4gdGhpc30scy5wcm90b3R5cGUub2ZmPXMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLHMucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYodm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1yLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09clt0XSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIHJbdF0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBpLGE9T2JqZWN0LmtleXMocik7Zm9yKG49MDtuPGEubGVuZ3RoOysrbikicmVtb3ZlTGlzdGVuZXIiIT09KGk9YVtuXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGkpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYodm9pZCAwIT09ZSlmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW25dKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LHMucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxzLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5saXN0ZW5lckNvdW50P3QubGlzdGVuZXJDb3VudChlKTptLmNhbGwodCxlKX0scy5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1tLHMucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9uKHRoaXMuX2V2ZW50cyk6W119fSx7fV0sMTgyOltmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpcmV0dXJuIHNlbGY7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdylyZXR1cm4gd2luZG93O3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgZ2xvYmFsIGB0aGlzYCIpfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZih0aGlzKXJldHVybiB0aGlzO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwiX19nbG9iYWxfXyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxjb25maWd1cmFibGU6ITB9KX1jYXRjaCh0KXtyZXR1cm4gbigpfXRyeXtyZXR1cm4gX19nbG9iYWxfX3x8bigpfWZpbmFsbHl7ZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19nbG9iYWxfX319KCl9LHt9XSwxODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP2dsb2JhbFRoaXM6dCgiLi9pbXBsZW1lbnRhdGlvbiIpfSx7Ii4vaW1wbGVtZW50YXRpb24iOjE4MiwiLi9pcy1pbXBsZW1lbnRlZCI6MTg0fV0sMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmKCEhZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcy5BcnJheT09PUFycmF5KX19LHt9XSwxODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHsiaXMtc3RyaW5nLWJsYW5rIjoyMzJ9XSwxODY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IGRhdGEgYXMgZmlyc3QgcGFyYW1ldGVyIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmIm51bWJlciI9PXR5cGVvZiB0WzBdWzBdKXt2YXIgaSxhLG8scyxsPXRbMF0ubGVuZ3RoLGM9dC5sZW5ndGgqbDtlJiYic3RyaW5nIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fCJmbG9hdDMyIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKCJzb3VyY2UgbGVuZ3RoICIrYysiICgiK2wrIngiK3QubGVuZ3RoKyIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCAiK3UpO2ZvcihpPTAsbz1yO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxsO2ErKyllW28rK109bnVsbD09PXRbaV1bYV0/TmFOOnRbaV1bYV19ZWxzZSBpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBmPW4oZXx8ImZsb2F0MzIiKTtpZihBcnJheS5pc0FycmF5KHQpfHwiYXJyYXkiPT09ZSlmb3IoZT1uZXcgZih0Lmxlbmd0aCtyKSxpPTAsbz1yLHM9ZS5sZW5ndGg7bzxzO28rKyxpKyspZVtvXT1udWxsPT09dFtpXT9OYU46dFtpXTtlbHNlIDA9PT1yP2U9bmV3IGYodCk6KGU9bmV3IGYodC5sZW5ndGgrcikpLnNldCh0LHIpfXJldHVybiBlfX0se2R0eXBlOjEyMX1dLDE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC9zdHJpbmdpZnkiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT10LmZvbnQsbz0ibnVtYmVyIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiYic3RyaW5nIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBzWzBdJiYibnVtYmVyIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdCgiIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGY9ci5nZXRDb250ZXh0KCIyZCIpO2YuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxmLmZvbnQ9YSxmLnRleHRBbGlnbj0iY2VudGVyIixmLnRleHRCYXNlbGluZT0ibWlkZGxlIixmLmZpbGxTdHlsZT0iI2ZmZiI7dmFyIGg9b1swXS8yLHA9b1sxXS8yO2ZvcihjPTA7YzxzLmxlbmd0aDtjKyspZi5maWxsVGV4dChzW2NdLGgscCksKGgrPW9bMF0pPmVbMF0tb1swXS8yJiYoaD1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7ImNzcy1mb250L3N0cmluZ2lmeSI6OTd9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsZj11LmdldENvbnRleHQoIjJkIiksaD17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxmLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2YuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFN0eWxlPSJibGFjayIsZi5maWxsVGV4dCgiSCIsMCwwKTt2YXIgbT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYm90dG9tIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBnPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLWcrbSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1wLWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErbTtkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz12LGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErbS0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJoYW5naW5nIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMSttLS41KnAsZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErbSxoLnVwcGVyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnVwcGVyLDAsMCksZC51cHBlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGgubG93ZXImJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgubG93ZXIsMCwwKSxkLmxvd2VyPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGgudGl0dGxlJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnRpdHRsZSwwLDApLGQudGl0dGxlPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLmFzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5kZXNjZW50JiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGgub3ZlcnNob290KXtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgub3ZlcnNob290LDAsMCk7dmFyIF89byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy12fWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsaShkLGMpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMTg5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpOyJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdO3JldHVybiB0WzBdPXMqKGgqdi1wKmcpLWYqKGwqdi1jKmcpK20qKGwqcC1jKmgpLHRbMV09LShuKihoKnYtcCpnKS1mKihpKnYtYSpnKSttKihpKnAtYSpoKSksdFsyXT1uKihsKnYtYypnKS1zKihpKnYtYSpnKSttKihpKmMtYSpsKSx0WzNdPS0obioobCpwLWMqaCktcyooaSpwLWEqaCkrZiooaSpjLWEqbCkpLHRbNF09LShvKihoKnYtcCpnKS11KihsKnYtYypnKStkKihsKnAtYypoKSksdFs1XT1yKihoKnYtcCpnKS11KihpKnYtYSpnKStkKihpKnAtYSpoKSx0WzZdPS0ocioobCp2LWMqZyktbyooaSp2LWEqZykrZCooaSpjLWEqbCkpLHRbN109cioobCpwLWMqaCktbyooaSpwLWEqaCkrdSooaSpjLWEqbCksdFs4XT1vKihmKnYtcCptKS11KihzKnYtYyptKStkKihzKnAtYypmKSx0WzldPS0ociooZip2LXAqbSktdSoobip2LWEqbSkrZCoobipwLWEqZikpLHRbMTBdPXIqKHMqdi1jKm0pLW8qKG4qdi1hKm0pK2QqKG4qYy1hKnMpLHRbMTFdPS0ocioocypwLWMqZiktbyoobipwLWEqZikrdSoobipjLWEqcykpLHRbMTJdPS0obyooZipnLWgqbSktdSoocypnLWwqbSkrZCoocypoLWwqZikpLHRbMTNdPXIqKGYqZy1oKm0pLXUqKG4qZy1pKm0pK2QqKG4qaC1pKmYpLHRbMTRdPS0ocioocypnLWwqbSktbyoobipnLWkqbSkrZCoobipsLWkqcykpLHRbMTVdPXIqKHMqaC1sKmYpLW8qKG4qaC1pKmYpK3UqKG4qbC1pKnMpLHR9fSx7fV0sMTkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMTkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDE5NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGY9dFsxMF0saD10WzExXSxwPXRbMTJdLGQ9dFsxM10sbT10WzE0XSxnPXRbMTVdO3JldHVybihlKm8tciphKSooZipnLWgqbSktKGUqcy1uKmEpKih1KmctaCpkKSsoZSpsLWkqYSkqKHUqbS1mKmQpKyhyKnMtbipvKSooYypnLWgqcCktKHIqbC1pKm8pKihjKm0tZipwKSsobipsLWkqcykqKGMqZC11KnApfX0se31dLDE5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksYz1yKm8sdT1uKm8sZj1uKnMsaD1pKm8scD1pKnMsZD1pKmwsbT1hKm8sZz1hKnMsdj1hKmw7cmV0dXJuIHRbMF09MS1mLWQsdFsxXT11K3YsdFsyXT1oLWcsdFszXT0wLHRbNF09dS12LHRbNV09MS1jLWQsdFs2XT1wK20sdFs3XT0wLHRbOF09aCtnLHRbOV09cC1tLHRbMTBdPTEtYy1mLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDE5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89clswXSxzPXJbMV0sbD1yWzJdLGM9TWF0aC5zcXJ0KG8qbytzKnMrbCpsKTtpZihNYXRoLmFicyhjKTwxZS02KXJldHVybiBudWxsO3JldHVybiBvKj1jPTEvYyxzKj1jLGwqPWMsbj1NYXRoLnNpbihlKSxpPU1hdGguY29zKGUpLGE9MS1pLHRbMF09bypvKmEraSx0WzFdPXMqbyphK2wqbix0WzJdPWwqbyphLXMqbix0WzNdPTAsdFs0XT1vKnMqYS1sKm4sdFs1XT1zKnMqYStpLHRbNl09bCpzKmErbypuLHRbN109MCx0WzhdPW8qbCphK3Mqbix0WzldPXMqbCphLW8qbix0WzEwXT1sKmwqYStpLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDE5NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxmPW4qbCxoPW4qYyxwPWkqbCxkPWkqYyxtPWEqYyxnPW8qcyx2PW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShwK20pLHRbMV09Zit5LHRbMl09aC12LHRbM109MCx0WzRdPWYteSx0WzVdPTEtKHUrbSksdFs2XT1kK2csdFs3XT0wLHRbOF09aCt2LHRbOV09ZC1nLHRbMTBdPTEtKHUrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9fSx7fV0sMTk4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1lWzFdLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT1lWzJdLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDE5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPWVbMF0sdFsxM109ZVsxXSx0WzE0XT1lWzJdLHRbMTVdPTEsdH19LHt9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09bix0WzZdPXIsdFs3XT0wLHRbOF09MCx0WzldPS1yLHRbMTBdPW4sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09MCx0WzJdPS1yLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT1yLHRbOV09MCx0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109MCx0WzRdPS1yLHRbNV09bix0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oci1lKSxsPTEvKGktbiksYz0xLyhhLW8pO3JldHVybiB0WzBdPTIqYSpzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTIqYSpsLHRbNl09MCx0WzddPTAsdFs4XT0ocitlKSpzLHRbOV09KGkrbikqbCx0WzEwXT0obythKSpjLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1vKmEqMipjLHRbMTVdPTAsdH19LHt9XSwyMDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGNvcHk6dCgiLi9jb3B5IiksaWRlbnRpdHk6dCgiLi9pZGVudGl0eSIpLHRyYW5zcG9zZTp0KCIuL3RyYW5zcG9zZSIpLGludmVydDp0KCIuL2ludmVydCIpLGFkam9pbnQ6dCgiLi9hZGpvaW50IiksZGV0ZXJtaW5hbnQ6dCgiLi9kZXRlcm1pbmFudCIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSx0cmFuc2xhdGU6dCgiLi90cmFuc2xhdGUiKSxzY2FsZTp0KCIuL3NjYWxlIikscm90YXRlOnQoIi4vcm90YXRlIikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZnJvbVJvdGF0aW9uOnQoIi4vZnJvbVJvdGF0aW9uIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dCgiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiIpLGZyb21TY2FsaW5nOnQoIi4vZnJvbVNjYWxpbmciKSxmcm9tVHJhbnNsYXRpb246dCgiLi9mcm9tVHJhbnNsYXRpb24iKSxmcm9tWFJvdGF0aW9uOnQoIi4vZnJvbVhSb3RhdGlvbiIpLGZyb21ZUm90YXRpb246dCgiLi9mcm9tWVJvdGF0aW9uIiksZnJvbVpSb3RhdGlvbjp0KCIuL2Zyb21aUm90YXRpb24iKSxmcm9tUXVhdDp0KCIuL2Zyb21RdWF0IiksZnJ1c3R1bTp0KCIuL2ZydXN0dW0iKSxwZXJzcGVjdGl2ZTp0KCIuL3BlcnNwZWN0aXZlIikscGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXc6dCgiLi9wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyIpLG9ydGhvOnQoIi4vb3J0aG8iKSxsb29rQXQ6dCgiLi9sb29rQXQiKSxzdHI6dCgiLi9zdHIiKX19LHsiLi9hZGpvaW50IjoxOTAsIi4vY2xvbmUiOjE5MSwiLi9jb3B5IjoxOTIsIi4vY3JlYXRlIjoxOTMsIi4vZGV0ZXJtaW5hbnQiOjE5NCwiLi9mcm9tUXVhdCI6MTk1LCIuL2Zyb21Sb3RhdGlvbiI6MTk2LCIuL2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjoxOTcsIi4vZnJvbVNjYWxpbmciOjE5OCwiLi9mcm9tVHJhbnNsYXRpb24iOjE5OSwiLi9mcm9tWFJvdGF0aW9uIjoyMDAsIi4vZnJvbVlSb3RhdGlvbiI6MjAxLCIuL2Zyb21aUm90YXRpb24iOjIwMiwiLi9mcnVzdHVtIjoyMDMsIi4vaWRlbnRpdHkiOjIwNCwiLi9pbnZlcnQiOjIwNiwiLi9sb29rQXQiOjIwNywiLi9tdWx0aXBseSI6MjA4LCIuL29ydGhvIjoyMDksIi4vcGVyc3BlY3RpdmUiOjIxMCwiLi9wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyI6MjExLCIuL3JvdGF0ZSI6MjEyLCIuL3JvdGF0ZVgiOjIxMywiLi9yb3RhdGVZIjoyMTQsIi4vcm90YXRlWiI6MjE1LCIuL3NjYWxlIjoyMTYsIi4vc3RyIjoyMTcsIi4vdHJhbnNsYXRlIjoyMTgsIi4vdHJhbnNwb3NlIjoyMTl9XSwyMDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsVD1pKmMtYSpsLGs9dSptLWYqZCxBPXUqZy1oKmQsTT11KnYtcCpkLFM9ZipnLWgqbSxFPWYqdi1wKm0sTD1oKnYtcCpnLEM9eSpMLXgqRStiKlMrXypNLXcqQStUKms7aWYoIUMpcmV0dXJuIG51bGw7cmV0dXJuIEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGkqRS1uKkwtYSpTKSpDLHRbMl09KG0qVC1nKncrdipfKSpDLHRbM109KGgqdy1mKlQtcCpfKSpDLHRbNF09KGwqTS1vKkwtYypBKSpDLHRbNV09KHIqTC1pKk0rYSpBKSpDLHRbNl09KGcqYi1kKlQtdip4KSpDLHRbN109KHUqVC1oKmIrcCp4KSpDLHRbOF09KG8qRS1zKk0rYyprKSpDLHRbOV09KG4qTS1yKkUtYSprKSpDLHRbMTBdPShkKnctbSpiK3YqeSkqQyx0WzExXT0oZipiLXUqdy1wKnkpKkMsdFsxMl09KHMqQS1vKlMtbCprKSpDLHRbMTNdPShyKlMtbipBK2kqaykqQyx0WzE0XT0obSp4LWQqXy1nKnkpKkMsdFsxNV09KHUqXy1mKngraCp5KSpDLHR9fSx7fV0sMjA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtPWVbMF0sZz1lWzFdLHY9ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLFQ9clsyXTtpZihNYXRoLmFicyhtLV8pPDFlLTYmJk1hdGguYWJzKGctdyk8MWUtNiYmTWF0aC5hYnModi1UKTwxZS02KXJldHVybiBuKHQpO2Y9bS1fLGg9Zy13LHA9di1ULGQ9MS9NYXRoLnNxcnQoZipmK2gqaCtwKnApLGE9eCoocCo9ZCktYiooaCo9ZCksbz1iKihmKj1kKS15KnAscz15KmgteCpmLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1oKnMtcCpvLGM9cCphLWYqcyx1PWYqby1oKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWYsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1oLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqbStvKmcrcyp2KSx0WzEzXT0tKGwqbStjKmcrdSp2KSx0WzE0XT0tKGYqbStoKmcrcCp2KSx0WzE1XT0xLHR9fSx7Ii4vaWRlbnRpdHkiOjIwNH1dLDIwODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sbT1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmYrdyptLHRbMV09eCppK2IqbCtfKmgrdypnLHRbMl09eCphK2IqYytfKnArdyp2LHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypmK3cqbSx0WzVdPXgqaStiKmwrXypoK3cqZyx0WzZdPXgqYStiKmMrXypwK3cqdix0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypmK3cqbSx0WzldPXgqaStiKmwrXypoK3cqZyx0WzEwXT14KmErYipjK18qcCt3KnYsdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmYrdyptLHRbMTNdPXgqaStiKmwrXypoK3cqZyx0WzE0XT14KmErYipjK18qcCt3KnYsdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjA5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19LHt9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH19LHt9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9TWF0aC50YW4oZS51cERlZ3JlZXMqTWF0aC5QSS8xODApLGE9TWF0aC50YW4oZS5kb3duRGVncmVlcypNYXRoLlBJLzE4MCksbz1NYXRoLnRhbihlLmxlZnREZWdyZWVzKk1hdGguUEkvMTgwKSxzPU1hdGgudGFuKGUucmlnaHREZWdyZWVzKk1hdGguUEkvMTgwKSxsPTIvKG8rcyksYz0yLyhpK2EpO3JldHVybiB0WzBdPWwsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09Yyx0WzZdPTAsdFs3XT0wLHRbOF09LShvLXMpKmwqLjUsdFs5XT0oaS1hKSpjKi41LHRbMTBdPW4vKHItbiksdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPW4qci8oci1uKSx0WzE1XT0wLHR9fSx7fV0sMjEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyxFPW5bMF0sTD1uWzFdLEM9blsyXSxQPU1hdGguc3FydChFKkUrTCpMK0MqQyk7aWYoTWF0aC5hYnMoUCk8MWUtNilyZXR1cm4gbnVsbDtFKj1QPTEvUCxMKj1QLEMqPVAsaT1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLG89MS1hLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9ZVszXSxmPWVbNF0saD1lWzVdLHA9ZVs2XSxkPWVbN10sbT1lWzhdLGc9ZVs5XSx2PWVbMTBdLHk9ZVsxMV0seD1FKkUqbythLGI9TCpFKm8rQyppLF89QypFKm8tTCppLHc9RSpMKm8tQyppLFQ9TCpMKm8rYSxrPUMqTCpvK0UqaSxBPUUqQypvK0wqaSxNPUwqQypvLUUqaSxTPUMqQypvK2EsdFswXT1zKngrZipiK20qXyx0WzFdPWwqeCtoKmIrZypfLHRbMl09Yyp4K3AqYit2Kl8sdFszXT11KngrZCpiK3kqXyx0WzRdPXMqdytmKlQrbSprLHRbNV09bCp3K2gqVCtnKmssdFs2XT1jKncrcCpUK3Yqayx0WzddPXUqdytkKlQreSprLHRbOF09cypBK2YqTSttKlMsdFs5XT1sKkEraCpNK2cqUyx0WzEwXT1jKkErcCpNK3YqUyx0WzExXT11KkErZCpNK3kqUyxlIT09dCYmKHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdH19LHt9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStmKm4sdFs3XT1sKmkraCpuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09ZippLXMqbix0WzExXT1oKmktbCpuLHR9fSx7fV0sMjE0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppLWMqbix0WzFdPW8qaS11Km4sdFsyXT1zKmktZipuLHRbM109bCppLWgqbix0WzhdPWEqbitjKmksdFs5XT1vKm4rdSppLHRbMTBdPXMqbitmKmksdFsxMV09bCpuK2gqaSx0fX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO2UhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH19LHt9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMjE3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9fSx7fV0sMjE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1yWzBdLGc9clsxXSx2PXJbMl07ZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKmcrZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKmcrZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKmcrZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSpnK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1wLHRbMTFdPWQsdFsxMl09biptK3MqZytmKnYrZVsxMl0sdFsxM109aSptK2wqZytoKnYrZVsxM10sdFsxNF09YSptK2MqZytwKnYrZVsxNF0sdFsxNV09byptK3UqZytkKnYrZVsxNV0pO3JldHVybiB0fX0se31dLDIxOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdLG49ZVsyXSxpPWVbM10sYT1lWzZdLG89ZVs3XSxzPWVbMTFdO3RbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPXIsdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1uLHRbOV09YSx0WzExXT1lWzE0XSx0WzEyXT1pLHRbMTNdPW8sdFsxNF09c31lbHNlIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XTtyZXR1cm4gdH19LHt9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQiKSxpPXQoInBpY2stYnktYWxpYXMiKSxhPXQoInJlZ2wiKSxvPXQoImdsLXV0aWwvY29udGV4dCIpLHM9dCgiZXM2LXdlYWstbWFwIiksbD10KCJjb2xvci1ub3JtYWxpemUiKSxjPXQoImZvbnQtYXRsYXMiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgicGFyc2UtcmVjdCIpLGg9dCgiaXMtcGxhaW4tb2JqIikscD10KCJwYXJzZS11bml0IiksZD10KCJ0by1weCIpLG09dCgiZGV0ZWN0LWtlcm5pbmciKSxnPXQoIm9iamVjdC1hc3NpZ24iKSx2PXQoImZvbnQtbWVhc3VyZSIpLHk9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHg9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixiPW5ldyBzLF89ITE7aWYoZG9jdW1lbnQuYm9keSl7dmFyIHc9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dy5zdHlsZS5mb250PSJpdGFsaWMgc21hbGwtY2FwcyBib2xkIGNvbmRlbnNlZCAxNnB4LzIgY3Vyc2l2ZSIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIFQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9nbCYmdC5wcm9wJiZ0LnRleHR1cmUmJnQuYnVmZmVyfSh0KT90aGlzLmdsPW8odCk6KHQ9e3JlZ2w6dH0sdGhpcy5nbD10LnJlZ2wuX2dsKSx0aGlzLnNoYWRlcj1iLmdldCh0aGlzLmdsKSx0aGlzLnNoYWRlcj90aGlzLnJlZ2w9dGhpcy5zaGFkZXIucmVnbDp0aGlzLnJlZ2w9dC5yZWdsfHxhKHtnbDp0aGlzLmdsfSksdGhpcy5jaGFyQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJmbG9hdCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoaCh0KT90Ont9KX07VC5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSxjaGFyOnQudGhpcygiY2hhckJ1ZmZlciIpLHBvc2l0aW9uOnQudGhpcygicG9zaXRpb24iKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoImNvbG9yIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSx2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0QXJyYXkiKSxzY2FsZTp0LnRoaXMoInNjYWxlIiksYWxpZ246dC5wcm9wKCJhbGlnbiIpLGJhc2VsaW5lOnQucHJvcCgiYmFzZWxpbmUiKSx0cmFuc2xhdGU6dC50aGlzKCJ0cmFuc2xhdGUiKSxwb3NpdGlvbk9mZnNldDp0LnByb3AoInBvc2l0aW9uT2Zmc2V0Iil9LHByaW1pdGl2ZToicG9pbnRzIix2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0IiksdmVydDoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHRhdHRyaWJ1dGUgZmxvYXQgd2lkdGgsIGNoYXJPZmZzZXQsIGNoYXI7XG5cdFx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0dmVjMiBvZmZzZXQgPSBmbG9vcihlbSAqICh2ZWMyKGFsaWduICsgY2hhck9mZnNldCwgYmFzZWxpbmUpXG5cdFx0XHRcdFx0KyB2ZWMyKHBvc2l0aW9uT2Zmc2V0LngsIC1wb3NpdGlvbk9mZnNldC55KSkpXG5cdFx0XHRcdFx0LyAodmlld3BvcnQuencgKiBzY2FsZS54eSk7XG5cblx0XHRcdFx0dmVjMiBwb3NpdGlvbiA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZTtcblx0XHRcdFx0cG9zaXRpb24gKz0gb2Zmc2V0ICogc2NhbGU7XG5cblx0XHRcdFx0Y2hhckNvb3JkID0gcG9zaXRpb24gKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xuXG5cdFx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuIC0gMS4sIDAsIDEpO1xuXG5cdFx0XHRcdGdsX1BvaW50U2l6ZSA9IGNoYXJTdGVwO1xuXG5cdFx0XHRcdGNoYXJJZC54ID0gbW9kKGNoYXIsIGF0bGFzRGltLngpO1xuXHRcdFx0XHRjaGFySWQueSA9IGZsb29yKGNoYXIgLyBhdGxhc0RpbS54KTtcblxuXHRcdFx0XHRjaGFyV2lkdGggPSB3aWR0aCAqIGVtO1xuXG5cdFx0XHRcdGZvbnRDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0XHRcdH0iLGZyYWc6IlxuXHRcdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgYXRsYXM7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cblx0XHRcdGZsb2F0IGxpZ2h0bmVzcyh2ZWM0IGNvbG9yKSB7XG5cdFx0XHRcdHJldHVybiBjb2xvci5yICogMC4yOTkgKyBjb2xvci5nICogMC41ODcgKyBjb2xvci5iICogMC4xMTQ7XG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbiAoKSB7XG5cdFx0XHRcdHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLSBjaGFyQ29vcmQgKyBjaGFyU3RlcCAqIC41O1xuXHRcdFx0XHRmbG9hdCBoYWxmQ2hhclN0ZXAgPSBmbG9vcihjaGFyU3RlcCAqIC41ICsgLjUpO1xuXG5cdFx0XHRcdC8vIGludmVydCB5IGFuZCBzaGlmdCBieSAxcHggKEZGIGV4cGVjaWFsbHkgbmVlZHMgdGhhdClcblx0XHRcdFx0dXYueSA9IGNoYXJTdGVwIC0gdXYueTtcblxuXHRcdFx0XHQvLyBpZ25vcmUgcG9pbnRzIG91dHNpZGUgb2YgY2hhcmFjdGVyIGJvdW5kaW5nIGJveFxuXHRcdFx0XHRmbG9hdCBoYWxmQ2hhcldpZHRoID0gY2VpbChjaGFyV2lkdGggKiAuNSk7XG5cdFx0XHRcdGlmIChmbG9vcih1di54KSA+IGhhbGZDaGFyU3RlcCArIGhhbGZDaGFyV2lkdGggfHxcblx0XHRcdFx0XHRmbG9vcih1di54KSA8IGhhbGZDaGFyU3RlcCAtIGhhbGZDaGFyV2lkdGgpIHJldHVybjtcblxuXHRcdFx0XHR1diArPSBjaGFySWQgKiBjaGFyU3RlcDtcblx0XHRcdFx0dXYgPSB1diAvIGF0bGFzU2l6ZTtcblxuXHRcdFx0XHR2ZWM0IGNvbG9yID0gZm9udENvbG9yO1xuXHRcdFx0XHR2ZWM0IG1hc2sgPSB0ZXh0dXJlMkQoYXRsYXMsIHV2KTtcblxuXHRcdFx0XHRmbG9hdCBtYXNrWSA9IGxpZ2h0bmVzcyhtYXNrKTtcblx0XHRcdFx0Ly8gZmxvYXQgY29sb3JZID0gbGlnaHRuZXNzKGNvbG9yKTtcblx0XHRcdFx0Y29sb3IuYSAqPSBtYXNrWTtcblx0XHRcdFx0Y29sb3IuYSAqPSBvcGFjaXR5O1xuXG5cdFx0XHRcdC8vIGNvbG9yLmEgKz0gLjE7XG5cblx0XHRcdFx0Ly8gYW50aWFsaWFzaW5nLCBzZWUgeWlxIGNvbG9yIHNwYWNlIHktY2hhbm5lbCBmb3JtdWxhXG5cdFx0XHRcdC8vIGNvbG9yLnJnYiArPSAoMS4gLSBjb2xvci5yZ2IpICogKDEuIC0gbWFzay5yZ2IpO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuXHRcdFx0fSJ9KTtyZXR1cm57cmVnbDp0LGRyYXc6ZSxhdGxhczp7fX19LFQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgdCl0PXt0ZXh0OnR9O2Vsc2UgaWYoIXQpcmV0dXJuO251bGwhPSh0PWkodCx7cG9zaXRpb246InBvc2l0aW9uIHBvc2l0aW9ucyBjb29yZCBjb29yZHMgY29vcmRpbmF0ZXMiLGZvbnQ6ImZvbnQgZm9udEZhY2UgZm9udGZhY2UgdHlwZWZhY2UgY3NzRm9udCBjc3MtZm9udCBmYW1pbHkgZm9udEZhbWlseSIsZm9udFNpemU6ImZvbnRTaXplIGZvbnRzaXplIHNpemUgZm9udC1zaXplIix0ZXh0OiJ0ZXh0IHRleHRzIGNoYXJzIGNoYXJhY3RlcnMgdmFsdWUgdmFsdWVzIHN5bWJvbHMiLGFsaWduOiJhbGlnbiBhbGlnbm1lbnQgdGV4dEFsaWduIHRleHRiYXNlbGluZSIsYmFzZWxpbmU6ImJhc2VsaW5lIHRleHRCYXNlbGluZSB0ZXh0YmFzZWxpbmUiLGRpcmVjdGlvbjoiZGlyIGRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uIixjb2xvcjoiY29sb3IgY29sb3VyIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IgdGV4dENvbG9yIHRleHRjb2xvciIsa2VybmluZzoia2VybmluZyBrZXJuIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZwIHZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCB2aWV3UG9ydCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgdmlzaWJsZSB2aXNpYmlsaXR5IG9wYXF1ZSIsb2Zmc2V0OiJvZmZzZXQgcG9zaXRpb25PZmZzZXQgcGFkZGluZyBzaGlmdCBpbmRlbnQgaW5kZW50YXRpb24ifSwhMCkpLm9wYWNpdHkmJihBcnJheS5pc0FycmF5KHQub3BhY2l0eSk/dGhpcy5vcGFjaXR5PXQub3BhY2l0eS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSkpOnRoaXMub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PWYodC52aWV3cG9ydCksdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsPT10aGlzLnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD17eDowLHk6MCx3aWR0aDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxoZWlnaHQ6dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0fSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGwhPXQua2VybmluZyYmKHRoaXMua2VybmluZz10Lmtlcm5pbmcpLG51bGwhPXQub2Zmc2V0JiYoIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmKHQub2Zmc2V0PVt0Lm9mZnNldCwwXSksdGhpcy5wb3NpdGlvbk9mZnNldD15KHQub2Zmc2V0KSksdC5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj10LmRpcmVjdGlvbiksdC5yYW5nZSYmKHRoaXMucmFuZ2U9dC5yYW5nZSx0aGlzLnNjYWxlPVsxLyh0LnJhbmdlWzJdLXQucmFuZ2VbMF0pLDEvKHQucmFuZ2VbM10tdC5yYW5nZVsxXSldLHRoaXMudHJhbnNsYXRlPVstdC5yYW5nZVswXSwtdC5yYW5nZVsxXV0pLHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUpLHQudHJhbnNsYXRlJiYodGhpcy50cmFuc2xhdGU9dC50cmFuc2xhdGUpLHRoaXMuc2NhbGV8fCh0aGlzLnNjYWxlPVsxL3RoaXMudmlld3BvcnQud2lkdGgsMS90aGlzLnZpZXdwb3J0LmhlaWdodF0pLHRoaXMudHJhbnNsYXRlfHwodGhpcy50cmFuc2xhdGU9WzAsMF0pLHRoaXMuZm9udC5sZW5ndGh8fHQuZm9udHx8KHQuZm9udD1ULmJhc2VGb250U2l6ZSsicHggc2Fucy1zZXJpZiIpO3ZhciByLGE9ITEsbz0hMTtpZih0LmZvbnQmJihBcnJheS5pc0FycmF5KHQuZm9udCk/dC5mb250Olt0LmZvbnRdKS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShULmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6VC5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09VC5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksXyYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOnYoYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOlQuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSxULmZvbnRzW2ldPWUuZm9udFtyXX19KSksKGF8fG8pJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXt2YXIgYT1uLnN0cmluZ2lmeSh7c2l6ZTplLmZvbnRTaXplW2ldLGZhbWlseTpyLmZhbWlseSxzdHJldGNoOl8/ci5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnIudmFyaWFudCx3ZWlnaHQ6ci53ZWlnaHQsc3R5bGU6ci5zdHlsZX0pO2lmKGUuZm9udEF0bGFzW2ldPWUuc2hhZGVyLmF0bGFzW2FdLCFlLmZvbnRBdGxhc1tpXSl7dmFyIG89ci5tZXRyaWNzO2Uuc2hhZGVyLmF0bGFzW2FdPWUuZm9udEF0bGFzW2ldPXtmb250U3RyaW5nOmEsc3RlcDoyKk1hdGguY2VpbChlLmZvbnRTaXplW2ldKm8uYm90dG9tKi41KSxlbTplLmZvbnRTaXplW2ldLGNvbHM6MCxyb3dzOjAsaGVpZ2h0OjAsd2lkdGg6MCxjaGFyczpbXSxpZHM6e30sdGV4dHVyZTplLnJlZ2wudGV4dHVyZSgpfX1udWxsPT10LnRleHQmJih0LnRleHQ9ZS50ZXh0KX0pKSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxoPTA7aDxzLmxlbmd0aDtoKyspc1toXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciBiPTE7Yjx0LnRleHQubGVuZ3RoO2IrKyl0aGlzLnRleHRPZmZzZXRzW2JdPXRoaXMudGV4dE9mZnNldHNbYi0xXSt0LnRleHRbYi0xXS5sZW5ndGgsdGhpcy5jb3VudCs9dC50ZXh0W2JdLmxlbmd0aCx0aGlzLmNvdW50cy5wdXNoKHQudGV4dFtiXS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtULmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGk9ZS5mb250QXRsYXNbbl0sYT0wO2E8ZS50ZXh0Lmxlbmd0aDthKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoYSk7aWYobnVsbD09aS5pZHNbb10mJihpLmlkc1tvXT1pLmNoYXJzLmxlbmd0aCxpLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1ULmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9ULmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7Zyh0Lmtlcm5pbmcsbSh0LmZhbWlseSx7cGFpcnM6c30pKX19fSkpfWlmKHQucG9zaXRpb24paWYodC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciB3PSF0LnBvc2l0aW9uWzBdLmxlbmd0aCxrPXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KSxBPTAsTT0wO0E8dGhpcy5jb3VudHMubGVuZ3RoO0ErKyl7dmFyIFM9dGhpcy5jb3VudHNbQV07aWYodylmb3IodmFyIEU9MDtFPFM7RSsrKWtbTSsrXT10LnBvc2l0aW9uWzIqQV0sa1tNKytdPXQucG9zaXRpb25bMipBKzFdO2Vsc2UgZm9yKHZhciBMPTA7TDxTO0wrKylrW00rK109dC5wb3NpdGlvbltBXVswXSxrW00rK109dC5wb3NpdGlvbltBXVsxXX10aGlzLnBvc2l0aW9uLmNhbGw/dGhpcy5wb3NpdGlvbih7dHlwZToiZmxvYXQiLGRhdGE6a30pOnRoaXMucG9zaXRpb249dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToiZmxvYXQiLGRhdGE6a30pLHUuZnJlZUZsb2F0KGspfWVsc2UgdGhpcy5wb3NpdGlvbi5kZXN0cm95JiZ0aGlzLnBvc2l0aW9uLmRlc3Ryb3koKSx0aGlzLnBvc2l0aW9uPXtjb25zdGFudDp0LnBvc2l0aW9ufTtpZih0LnRleHR8fGEpe3ZhciBDPXUubWFsbG9jVWludDgodGhpcy5jb3VudCksUD11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCk7dGhpcy50ZXh0V2lkdGg9W107Zm9yKHZhciBJPTAsTz0wO0k8dGhpcy5jb3VudHMubGVuZ3RoO0krKyl7Zm9yKHZhciB6PXRoaXMuY291bnRzW0ldLEQ9dGhpcy5mb250W0ldfHx0aGlzLmZvbnRbMF0sUj10aGlzLmZvbnRBdGxhc1tJXXx8dGhpcy5mb250QXRsYXNbMF0sRj0wO0Y8ejtGKyspe3ZhciBCPXRoaXMudGV4dC5jaGFyQXQoTyksTj10aGlzLnRleHQuY2hhckF0KE8tMSk7aWYoQ1tPXT1SLmlkc1tCXSxQWzIqT109RC53aWR0aFtCXSxGKXt2YXIgaj1QWzIqTy0yXSxVPVBbMipPXSxWPVBbMipPLTFdKy41KmorLjUqVTtpZih0aGlzLmtlcm5pbmcpe3ZhciBIPUQua2VybmluZ1tOK0JdO0gmJihWKz0uMDAxKkgpfVBbMipPKzFdPVZ9ZWxzZSBQWzIqTysxXT0uNSpQWzIqT107TysrfXRoaXMudGV4dFdpZHRoLnB1c2goUC5sZW5ndGg/LjUqUFsyKk8tMl0rUFsyKk8tMV06MCl9dC5hbGlnbnx8KHQuYWxpZ249dGhpcy5hbGlnbiksdGhpcy5jaGFyQnVmZmVyKHtkYXRhOkMsdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyKHtkYXRhOlAsdHlwZToiZmxvYXQiLHVzYWdlOiJzdHJlYW0ifSksdS5mcmVlVWludDgoQyksdS5mcmVlRmxvYXQoUCksci5sZW5ndGgmJnRoaXMuZm9udC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihULm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6VC5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSkpfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmFsaWduKT9lLmFsaWduLmxlbmd0aD4xP2UuYWxpZ25bcl06ZS5hbGlnblswXTplLmFsaWduO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnJldHVybi10O2Nhc2UiY2VudGVyIjpjYXNlImNlbnRyZSI6Y2FzZSJtaWRkbGUiOnJldHVybi41Ki10fXJldHVybiAwfSkpKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcCgoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsaT0wO3JldHVybiBpKz0uNSpuLmJvdHRvbSxpKz0ibnVtYmVyIj09dHlwZW9mIHQ/dC1uLmJhc2VsaW5lOi1uW3RdLGkqPS0xfSkpKSxudWxsIT10LmNvbG9yKWlmKHQuY29sb3J8fCh0LmNvbG9yPSJ0cmFuc3BhcmVudCIpLCJzdHJpbmciIT10eXBlb2YgdC5jb2xvciYmaXNOYU4odC5jb2xvcikpe3ZhciBxO2lmKCJudW1iZXIiPT10eXBlb2YgdC5jb2xvclswXSYmdC5jb2xvci5sZW5ndGg+dGhpcy5jb3VudHMubGVuZ3RoKXt2YXIgRz10LmNvbG9yLmxlbmd0aDtxPXUubWFsbG9jVWludDgoRyk7Zm9yKHZhciBZPSh0LmNvbG9yLnN1YmFycmF5fHx0LmNvbG9yLnNsaWNlKS5iaW5kKHQuY29sb3IpLFc9MDtXPEc7Vys9NClxLnNldChsKFkoVyxXKzQpLCJ1aW50OCIpLFcpfWVsc2V7dmFyIFg9dC5jb2xvci5sZW5ndGg7cT11Lm1hbGxvY1VpbnQ4KDQqWCk7Zm9yKHZhciBaPTA7WjxYO1orKylxLnNldChsKHQuY29sb3JbWl18fDAsInVpbnQ4IiksNCpaKX10aGlzLmNvbG9yPXF9ZWxzZSB0aGlzLmNvbG9yPWwodC5jb2xvciwidWludDgiKTtpZih0LnBvc2l0aW9ufHx0LnRleHR8fHQuY29sb3J8fHQuYmFzZWxpbmV8fHQuYWxpZ258fHQuZm9udHx8dC5vZmZzZXR8fHQub3BhY2l0eSlpZih0aGlzLmNvbG9yLmxlbmd0aD40fHx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aD4xfHx0aGlzLmFsaWduJiZ0aGlzLmFsaWduLmxlbmd0aD4xfHx0aGlzLmZvbnRBdGxhcy5sZW5ndGg+MXx8dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mil7dmFyIEo9TWF0aC5tYXgoLjUqdGhpcy5wb3NpdGlvbi5sZW5ndGh8fDAsLjI1KnRoaXMuY29sb3IubGVuZ3RofHwwLHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RofHwwLHRoaXMuYWxpZ25PZmZzZXQubGVuZ3RofHwwLHRoaXMuZm9udC5sZW5ndGh8fDAsdGhpcy5vcGFjaXR5Lmxlbmd0aHx8MCwuNSp0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aHx8MCk7dGhpcy5iYXRjaD1BcnJheShKKTtmb3IodmFyIEs9MDtLPHRoaXMuYmF0Y2gubGVuZ3RoO0srKyl0aGlzLmJhdGNoW0tdPXtjb3VudDp0aGlzLmNvdW50cy5sZW5ndGg+MT90aGlzLmNvdW50c1tLXTp0aGlzLmNvdW50c1swXSxvZmZzZXQ6dGhpcy50ZXh0T2Zmc2V0cy5sZW5ndGg+MT90aGlzLnRleHRPZmZzZXRzW0tdOnRoaXMudGV4dE9mZnNldHNbMF0sY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yLmxlbmd0aDw9ND90aGlzLmNvbG9yOnRoaXMuY29sb3Iuc3ViYXJyYXkoNCpLLDQqSys0KTpbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbS106dGhpcy5vcGFjaXR5LGJhc2VsaW5lOm51bGwhPXRoaXMuYmFzZWxpbmVPZmZzZXRbS10/dGhpcy5iYXNlbGluZU9mZnNldFtLXTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ24/bnVsbCE9dGhpcy5hbGlnbk9mZnNldFtLXT90aGlzLmFsaWduT2Zmc2V0W0tdOnRoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1tLXXx8dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mj90aGlzLnBvc2l0aW9uT2Zmc2V0LnN1YmFycmF5KDIqSywyKksrMik6dGhpcy5wb3NpdGlvbk9mZnNldH19ZWxzZSB0aGlzLmNvdW50P3RoaXMuYmF0Y2g9W3tjb3VudDp0aGlzLmNvdW50LG9mZnNldDowLGNvbG9yOnRoaXMuY29sb3J8fFswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheSh0aGlzLm9wYWNpdHkpP3RoaXMub3BhY2l0eVswXTp0aGlzLm9wYWNpdHksYmFzZWxpbmU6dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduT2Zmc2V0P3RoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDp0aGlzLnBvc2l0aW9uT2Zmc2V0fV06dGhpcy5iYXRjaD1bXX0sVC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sVC5wcm90b3R5cGUua2VybmluZz0hMCxULnByb3RvdHlwZS5wb3NpdGlvbj17Y29uc3RhbnQ6bmV3IEZsb2F0MzJBcnJheSgyKX0sVC5wcm90b3R5cGUudHJhbnNsYXRlPW51bGwsVC5wcm90b3R5cGUuc2NhbGU9bnVsbCxULnByb3RvdHlwZS5mb250PW51bGwsVC5wcm90b3R5cGUudGV4dD0iIixULnByb3RvdHlwZS5wb3NpdGlvbk9mZnNldD1bMCwwXSxULnByb3RvdHlwZS5vcGFjaXR5PTEsVC5wcm90b3R5cGUuY29sb3I9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDI1NV0pLFQucHJvdG90eXBlLmFsaWduT2Zmc2V0PVswLDBdLFQubWF4QXRsYXNTaXplPTEwMjQsVC5hdGxhc0NhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxULmF0bGFzQ29udGV4dD1ULmF0bGFzQ2FudmFzLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KSxULmJhc2VGb250U2l6ZT02NCxULmZvbnRzPXt9LGUuZXhwb3J0cz1UfSx7ImJpdC10d2lkZGxlIjo3NywiY29sb3Itbm9ybWFsaXplIjo4NCwiY3NzLWZvbnQiOjk0LCJkZXRlY3Qta2VybmluZyI6MTE5LCJlczYtd2Vhay1tYXAiOjE3NywiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTg2LCJmb250LWF0bGFzIjoxODcsImZvbnQtbWVhc3VyZSI6MTg4LCJnbC11dGlsL2NvbnRleHQiOjIyMSwiaXMtcGxhaW4tb2JqIjoyMzEsIm9iamVjdC1hc3NpZ24iOjI0MiwicGFyc2UtcmVjdCI6MjQ0LCJwYXJzZS11bml0IjoyNDYsInBpY2stYnktYWxpYXMiOjI0OCxyZWdsOjI3OCwidG8tcHgiOjMwOSwidHlwZWRhcnJheS1wb29sIjozMjJ9XSwyMjE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qci5pbm5lcldpZHRoKSxkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodHx8KHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8dC5waXhlbFJhdGlvKnIuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWZ1bmN0aW9uIG8oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPTAsdC5zdHlsZS5sZWZ0PTAsdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD8ic3RyaW5nIj09dHlwZW9mIHQmJih0PXtjb250YWluZXI6dH0pOnQ9e30sYSh0KT90PXtjb250YWluZXI6dH06dD0ic3RyaW5nIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/e2NvbnRhaW5lcjp0fTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjoiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZSIsZ2w6ImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0IixhdHRyczoiYXR0cmlidXRlcyBhdHRycyBjb250ZXh0QXR0cmlidXRlcyIscGl4ZWxSYXRpbzoicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpbyIsd2lkdGg6Incgd2lkdGgiLGhlaWdodDoiaCBoZWlnaHQifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXIucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcyl0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9c31hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgaWYoIXQuY2FudmFzKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXRocm93IEVycm9yKCJOb3QgRE9NIGVudmlyb25tZW50LiBVc2UgaGVhZGxlc3MtZ2wuIik7dC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPW8oKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KX1yZXR1cm4gdC5nbHx8WyJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCIsIndlYmdsLWV4cGVyaW1lbnRhbCJdLnNvbWUoKGZ1bmN0aW9uKGUpe3RyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoZSx0LmF0dHJzKX1jYXRjaCh0KXt9cmV0dXJuIHQuZ2x9KSksdC5nbH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InBpY2stYnktYWxpYXMiOjI0OH1dLDIyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjoyMjd9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6MjI3fV0sMjI1OltmdW5jdGlvbih0LGUscil7Ci8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCnIucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLG09ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Km19fSx7fV0sMjI2OltmdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmKHQuc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX19LHt9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ITB9LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YSxlLmV4cG9ydHMuZGVmYXVsdD1hO3ZhciBuPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO2lmKGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwoZT1uYXZpZ2F0b3IudXNlckFnZW50KSxlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIHI9dC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKTtyZXR1cm4hciYmdC50YWJsZXQmJnQuZmVhdHVyZURldGVjdCYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmLTEhPT1lLmluZGV4T2YoIk1hY2ludG9zaCIpJiYtMSE9PWUuaW5kZXhPZigiU2FmYXJpIikmJihyPSEwKSxyfX0se31dLDIzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPT10JiYoIm9iamVjdCI9PT1lfHwiZnVuY3Rpb24iPT09ZSl9fSx7fV0sMjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09bi5jYWxsKHQpJiYobnVsbD09PShlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSl8fGU9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKX19LHt9XSwyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19LHt9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50cmltKCksISEoL15bbXpsaHZjc3F0YV1ccypbLSsuMC05XVtebWxodnpjc3F0YV0rL2kudGVzdCh0KSYmL1tcZHpdJC9pLnRlc3QodCkmJnQubGVuZ3RoPjQpKX19LHt9XSwyMzQ6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/ZS5leHBvcnRzPW4oKToodD10fHxzZWxmKS5tYXBib3hnbD1uKCl9KHRoaXMsKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7aWYodClpZihlKXt2YXIgYT0idmFyIHNoYXJlZENodW5rID0ge307ICgiK3QrIikoc2hhcmVkQ2h1bmspOyAoIitlKyIpKHNoYXJlZENodW5rKTsiLG89e307dChvKSwocj1pKG8pKS53b3JrZXJVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSkpfWVsc2UgZT1pO2Vsc2UgdD1pfXJldHVybiBuKDAsKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdChlPXtleHBvcnRzOnt9fSxlLmV4cG9ydHMpLGUuZXhwb3J0c312YXIgcj1uO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5jeD0zKnQsdGhpcy5ieD0zKihyLXQpLXRoaXMuY3gsdGhpcy5heD0xLXRoaXMuY3gtdGhpcy5ieCx0aGlzLmN5PTMqZSx0aGlzLmJ5PTMqKG4tZSktdGhpcy5jeSx0aGlzLmF5PTEtdGhpcy5jeS10aGlzLmJ5LHRoaXMucDF4PXQsdGhpcy5wMXk9bix0aGlzLnAyeD1yLHRoaXMucDJ5PW59bi5wcm90b3R5cGUuc2FtcGxlQ3VydmVYPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heCp0K3RoaXMuYngpKnQrdGhpcy5jeCkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVZPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heSp0K3RoaXMuYnkpKnQrdGhpcy5jeSkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWD1mdW5jdGlvbih0KXtyZXR1cm4oMyp0aGlzLmF4KnQrMip0aGlzLmJ4KSp0K3RoaXMuY3h9LG4ucHJvdG90eXBlLnNvbHZlQ3VydmVYPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbztmb3Iodm9pZCAwPT09ZSYmKGU9MWUtNiksaT10LG89MDtvPDg7bysrKXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLXQsTWF0aC5hYnMoYSk8ZSlyZXR1cm4gaTt2YXIgcz10aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoaSk7aWYoTWF0aC5hYnMocyk8MWUtNilicmVhaztpLT1hL3N9aWYoKGk9dCk8KHI9MCkpcmV0dXJuIHI7aWYoaT4obj0xKSlyZXR1cm4gbjtmb3IoO3I8bjspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSksTWF0aC5hYnMoYS10KTxlKXJldHVybiBpO3Q+YT9yPWk6bj1pLGk9LjUqKG4tcikrcn1yZXR1cm4gaX0sbi5wcm90b3R5cGUuc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh0LGUpKX07dmFyIGk9YTtmdW5jdGlvbiBhKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbyh0LGUsbixpKXt2YXIgYT1uZXcgcih0LGUsbixpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEuc29sdmUodCl9fWEucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgYSh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh0KX0sc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1Yih0KX0sbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQodCl9LGRpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2QnlQb2ludCh0KX0sbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KHQpfSxkaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KHQpfSxyb3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKHQpfSxyb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGVBcm91bmQodCxlKX0sbWF0TXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KHQpfSx1bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpfSxwZXJwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LG1hZzpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sZGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcih0KSl9LGRpc3RTcXI6ZnVuY3Rpb24odCl7dmFyIGU9dC54LXRoaXMueCxyPXQueS10aGlzLnk7cmV0dXJuIGUqZStyKnJ9LGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LHRoaXMueCl9LGFuZ2xlVG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LXQueSx0aGlzLngtdC54KX0sYW5nbGVXaXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFuZ2xlV2l0aFNlcCh0LngsdC55KX0sYW5nbGVXaXRoU2VwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy54KmUtdGhpcy55KnQsdGhpcy54KnQrdGhpcy55KmUpfSxfbWF0TXVsdDpmdW5jdGlvbih0KXt2YXIgZT10WzBdKnRoaXMueCt0WzFdKnRoaXMueSxyPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9ZSx0aGlzLnk9cix0aGlzfSxfYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzfSxfbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxfZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQsdGhpcy55Lz10LHRoaXN9LF9tdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc30sX2RpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9LF91bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycDpmdW5jdGlvbigpe3ZhciB0PXRoaXMueTtyZXR1cm4gdGhpcy55PXRoaXMueCx0aGlzLng9LXQsdGhpc30sX3JvdGF0ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpLG49ZSp0aGlzLngtcip0aGlzLnksaT1yKnRoaXMueCtlKnRoaXMueTtyZXR1cm4gdGhpcy54PW4sdGhpcy55PWksdGhpc30sX3JvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1lLngrcioodGhpcy54LWUueCktbioodGhpcy55LWUueSksYT1lLnkrbioodGhpcy54LWUueCkrcioodGhpcy55LWUueSk7cmV0dXJuIHRoaXMueD1pLHRoaXMueT1hLHRoaXN9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc319LGEuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGE/dDpBcnJheS5pc0FycmF5KHQpP25ldyBhKHRbMF0sdFsxXSk6dH07dmFyIHM9byguMjUsLjEsLjI1LDEpO2Z1bmN0aW9uIGwodCxlLHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXItZSxpPSgodC1lKSVuK24pJW4rZTtyZXR1cm4gaT09PWU/cjppfWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH12YXIgZj0xO2Z1bmN0aW9uIGgoKXtyZXR1cm4gZisrfWZ1bmN0aW9uIHAoKXtyZXR1cm4gZnVuY3Rpb24gdChlKXtyZXR1cm4gZT8oZV4xNipNYXRoLnJhbmRvbSgpPj5lLzQpLnRvU3RyaW5nKDE2KTooWzFlN10rLVsxZTNdKy00ZTMrLThlMystMWUxMSkucmVwbGFjZSgvWzAxOF0vZyx0KX0oKX1mdW5jdGlvbiBkKHQpe3JldHVybiEhdCYmL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bNF1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn0kL2kudGVzdCh0KX1mdW5jdGlvbiBtKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdJiYoZVt0XT1lW3RdLmJpbmQoZSkpfSkpfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlLHQubGVuZ3RoLWUubGVuZ3RoKX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCluW2ldPWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KTtyZXR1cm4gbn1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCllLmNhbGwocnx8dGhpcyx0W2ldLGksdCkmJihuW2ldPXRbaV0pO3JldHVybiBufWZ1bmN0aW9uIHgodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoeCk6Im9iamVjdCI9PXR5cGVvZiB0JiZ0P3YodCx4KTp0fXZhciBiPXt9O2Z1bmN0aW9uIF8odCl7Ylt0XXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpLGJbdF09ITApfWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiBUKHQpe2Zvcih2YXIgZT0wLHI9MCxuPXQubGVuZ3RoLGk9bi0xLGE9dm9pZCAwLG89dm9pZCAwO3I8bjtpPXIrKylhPXRbcl0sZSs9KChvPXRbaV0pLngtYS54KSooYS55K28ueSk7cmV0dXJuIGV9ZnVuY3Rpb24gaygpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIEEodCl7dmFyIGU9e307aWYodC5yZXBsYWNlKC8oPzpefCg/OlxzKlwsXHMqKSkoW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKykoPzpcPSg/OihbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKXwoPzpcIigoPzpbXiJcXF18XFwuKSopXCIpKSk/L2csKGZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPW58fGk7cmV0dXJuIGVbcl09IWF8fGEudG9Mb3dlckNhc2UoKSwiIn0pKSxlWyJtYXgtYWdlIl0pe3ZhciByPXBhcnNlSW50KGVbIm1heC1hZ2UiXSwxMCk7aXNOYU4ocik/ZGVsZXRlIGVbIm1heC1hZ2UiXTplWyJtYXgtYWdlIl09cn1yZXR1cm4gZX12YXIgTT1udWxsO2Z1bmN0aW9uIFModCl7aWYobnVsbD09TSl7dmFyIGU9dC5uYXZpZ2F0b3I/dC5uYXZpZ2F0b3IudXNlckFnZW50Om51bGw7TT0hIXQuc2FmYXJpfHwhKCFlfHwhKC9cYihpUGFkfGlQaG9uZXxpUG9kKVxiLy50ZXN0KGUpfHxlLm1hdGNoKCJTYWZhcmkiKSYmIWUubWF0Y2goIkNocm9tZSIpKSl9cmV0dXJuIE19ZnVuY3Rpb24gRSh0KXt0cnl7dmFyIGU9c2VsZlt0XTtyZXR1cm4gZS5zZXRJdGVtKCJfbWFwYm94X3Rlc3RfIiwxKSxlLnJlbW92ZUl0ZW0oIl9tYXBib3hfdGVzdF8iKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19dmFyIEwsQyxQLEksTz1zZWxmLnBlcmZvcm1hbmNlJiZzZWxmLnBlcmZvcm1hbmNlLm5vdz9zZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHNlbGYucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSksej1zZWxmLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lLEQ9c2VsZi5jYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lLFI9e25vdzpPLGZyYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXoodCk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiBEKGUpfX19LGdldEltYWdlRGF0YTpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApO3ZhciByPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1yLmdldENvbnRleHQoIjJkIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIGNhbnZhcyAyZCBjb250ZXh0Iik7cmV0dXJuIHIud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodCxuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxuLmdldEltYWdlRGF0YSgtZSwtZSx0LndpZHRoKzIqZSx0LmhlaWdodCsyKmUpfSxyZXNvbHZlVVJMOmZ1bmN0aW9uKHQpe3JldHVybiBMfHwoTD1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksTC5ocmVmPXQsTC5ocmVmfSxoYXJkd2FyZUNvbmN1cnJlbmN5OnNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l8fDQsZ2V0IGRldmljZVBpeGVsUmF0aW8oKXtyZXR1cm4gc2VsZi5kZXZpY2VQaXhlbFJhdGlvfSxnZXQgcHJlZmVyc1JlZHVjZWRNb3Rpb24oKXtyZXR1cm4hIXNlbGYubWF0Y2hNZWRpYSYmKG51bGw9PUMmJihDPXNlbGYubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSksQy5tYXRjaGVzKX19LEY9e0FQSV9VUkw6Imh0dHBzOi8vYXBpLm1hcGJveC5jb20iLGdldCBFVkVOVFNfVVJMKCl7cmV0dXJuIHRoaXMuQVBJX1VSTD8wPT09dGhpcy5BUElfVVJMLmluZGV4T2YoImh0dHBzOi8vYXBpLm1hcGJveC5jbiIpPyJodHRwczovL2V2ZW50cy5tYXBib3guY24vZXZlbnRzL3YyIjowPT09dGhpcy5BUElfVVJMLmluZGV4T2YoImh0dHBzOi8vYXBpLm1hcGJveC5jb20iKT8iaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjIiOm51bGw6bnVsbH0sRkVFREJBQ0tfVVJMOiJodHRwczovL2FwcHMubWFwYm94LmNvbS9mZWVkYmFjayIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGwsTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOjE2fSxCPXtzdXBwb3J0ZWQ6ITEsdGVzdFN1cHBvcnQ6ZnVuY3Rpb24odCl7aWYoTnx8IUkpcmV0dXJuO2o/VSh0KTpQPXR9fSxOPSExLGo9ITE7ZnVuY3Rpb24gVSh0KXt2YXIgZT10LmNyZWF0ZVRleHR1cmUoKTt0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKTt0cnl7aWYodC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHQuUkdCQSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLEkpLHQuaXNDb250ZXh0TG9zdCgpKXJldHVybjtCLnN1cHBvcnRlZD0hMH1jYXRjaCh0KXt9dC5kZWxldGVUZXh0dXJlKGUpLE49ITB9c2VsZi5kb2N1bWVudCYmKChJPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikpLm9ubG9hZD1mdW5jdGlvbigpe1AmJlUoUCksUD1udWxsLGo9ITB9LEkub25lcnJvcj1mdW5jdGlvbigpe049ITAsUD1udWxsfSxJLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9Iik7dmFyIFY9IjAxIjt2YXIgSD1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbj10LHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWUsdGhpcy5fY3JlYXRlU2t1VG9rZW4oKX07ZnVuY3Rpb24gcSh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZigibWFwYm94OiIpfUgucHJvdG90eXBlLl9jcmVhdGVTa3VUb2tlbj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGU9MDtlPDEwO2UrKyl0Kz0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiW01hdGguZmxvb3IoNjIqTWF0aC5yYW5kb20oKSldO3JldHVybnt0b2tlbjpbIjEiLFYsdF0uam9pbigiIiksdG9rZW5FeHBpcmVzQXQ6RGF0ZS5ub3coKSs0MzJlNX19KCk7dGhpcy5fc2t1VG9rZW49dC50b2tlbix0aGlzLl9za3VUb2tlbkV4cGlyZXNBdD10LnRva2VuRXhwaXJlc0F0fSxILnByb3RvdHlwZS5faXNTa3VUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKT50aGlzLl9za3VUb2tlbkV4cGlyZXNBdH0sSC5wcm90b3R5cGUudHJhbnNmb3JtUmVxdWVzdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4mJnRoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbih0LGUpfHx7dXJsOnR9fSxILnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFxKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL3N0eWxlcy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe2lmKCFxKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL2ZvbnRzL3YxIityLnBhdGgsdGhpcy5fbWFrZUFQSVVSTChyLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxlKX0sSC5wcm90b3R5cGUubm9ybWFsaXplU291cmNlVVJMPWZ1bmN0aW9uKHQsZSl7aWYoIXEodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KTtyZXR1cm4gci5wYXRoPSIvdjQvIityLmF1dGhvcml0eSsiLmpzb24iLHIucGFyYW1zLnB1c2goInNlY3VyZSIpLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVNwcml0ZVVSTD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1YKHQpO3JldHVybiBxKHQpPyhpLnBhdGg9Ii9zdHlsZXMvdjEiK2kucGF0aCsiL3Nwcml0ZSIrZStyLHRoaXMuX21ha2VBUElVUkwoaSx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8bikpOihpLnBhdGgrPSIiK2UrcixaKGkpKX0sSC5wcm90b3R5cGUubm9ybWFsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkmJnRoaXMuX2NyZWF0ZVNrdVRva2VuKCksdCYmIXEodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KSxuPVIuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09ZT8iQDJ4IjoiIixpPUIuc3VwcG9ydGVkPyIud2VicCI6IiQxIjtyLnBhdGg9ci5wYXRoLnJlcGxhY2UoLyhcLihwbmd8anBnKVxkKikoPz0kKS8sIiIrbitpKSxyLnBhdGg9ci5wYXRoLnJlcGxhY2UoL14uK1wvdjRcLy8sIi8iKSxyLnBhdGg9Ii92NCIrci5wYXRoO3ZhciBhPXRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLm1hdGNoKC9eYWNjZXNzX3Rva2VuPSguKikkLyk7aWYobilyZXR1cm4gblsxXX1yZXR1cm4gbnVsbH0oci5wYXJhbXMpfHxGLkFDQ0VTU19UT0tFTjtyZXR1cm4gRi5SRVFVSVJFX0FDQ0VTU19UT0tFTiYmYSYmdGhpcy5fc2t1VG9rZW4mJnIucGFyYW1zLnB1c2goInNrdT0iK3RoaXMuX3NrdVRva2VuKSx0aGlzLl9tYWtlQVBJVVJMKHIsYSl9LEgucHJvdG90eXBlLmNhbm9uaWNhbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj1YKHQpO2lmKCFyLnBhdGgubWF0Y2goLyheXC92NFwvKS8pfHwhci5wYXRoLm1hdGNoKC9cLltcd10rJC8pKXJldHVybiB0O3ZhciBuPSJtYXBib3g6Ly90aWxlcy8iO24rPXIucGF0aC5yZXBsYWNlKCIvdjQvIiwiIik7dmFyIGk9ci5wYXJhbXM7cmV0dXJuIGUmJihpPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5tYXRjaCgvXmFjY2Vzc190b2tlbj0vKX0pKSksaS5sZW5ndGgmJihuKz0iPyIraS5qb2luKCImIikpLG59LEgucHJvdG90eXBlLmNhbm9uaWNhbGl6ZVRpbGVzZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ISFlJiZxKGUpLG49W10saT0wLGE9dC50aWxlc3x8W107aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO1kobyk/bi5wdXNoKHRoaXMuY2Fub25pY2FsaXplVGlsZVVSTChvLHIpKTpuLnB1c2gobyl9cmV0dXJuIG59LEgucHJvdG90eXBlLl9tYWtlQVBJVVJMPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMiLG49WChGLkFQSV9VUkwpO2lmKHQucHJvdG9jb2w9bi5wcm90b2NvbCx0LmF1dGhvcml0eT1uLmF1dGhvcml0eSwiLyIhPT1uLnBhdGgmJih0LnBhdGg9IiIrbi5wYXRoK3QucGF0aCksIUYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIFoodCk7aWYoIShlPWV8fEYuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gIityKTtpZigicyI9PT1lWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiAiK3IpO3JldHVybiB0LnBhcmFtcz10LnBhcmFtcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybi0xPT09dC5pbmRleE9mKCJhY2Nlc3NfdG9rZW4iKX0pKSx0LnBhcmFtcy5wdXNoKCJhY2Nlc3NfdG9rZW49IitlKSxaKHQpfTt2YXIgRz0vXigoaHR0cHM/Oik/XC9cLyk/KFteXC9dK1wuKT9tYXBib3hcLmMobnxvbSkoXC98XD98JCkvaTtmdW5jdGlvbiBZKHQpe3JldHVybiBHLnRlc3QodCl9dmFyIFc9L14oXHcrKTpcL1wvKFteLz9dKikoXC9bXj9dKyk/XD8/KC4rKT8vO2Z1bmN0aW9uIFgodCl7dmFyIGU9dC5tYXRjaChXKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Iik7cmV0dXJue3Byb3RvY29sOmVbMV0sYXV0aG9yaXR5OmVbMl0scGF0aDplWzNdfHwiLyIscGFyYW1zOmVbNF0/ZVs0XS5zcGxpdCgiJiIpOltdfX1mdW5jdGlvbiBaKHQpe3ZhciBlPXQucGFyYW1zLmxlbmd0aD8iPyIrdC5wYXJhbXMuam9pbigiJiIpOiIiO3JldHVybiB0LnByb3RvY29sKyI6Ly8iK3QuYXV0aG9yaXR5K3QucGF0aCtlfWZ1bmN0aW9uIEoodCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIGUscj10LnNwbGl0KCIuIik7aWYoIXJ8fDMhPT1yLmxlbmd0aClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoKGU9clsxXSxkZWNvZGVVUklDb21wb25lbnQoc2VsZi5hdG9iKGUpLnNwbGl0KCIiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIlIisoIjAwIit0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KSkuam9pbigiIikpKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXZhciBLPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT10LHRoaXMuYW5vbklkPW51bGwsdGhpcy5ldmVudERhdGE9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLnBlbmRpbmdSZXF1ZXN0PW51bGx9O0sucHJvdG90eXBlLmdldFN0b3JhZ2VLZXk9ZnVuY3Rpb24odCl7dmFyIGUscj1KKEYuQUNDRVNTX1RPS0VOKSxuPSIiO3JldHVybiByJiZyLnU/KGU9ci51LG49c2VsZi5idG9hKGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLChmdW5jdGlvbih0LGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcigiMHgiK2UpKX0pKSkpOm49Ri5BQ0NFU1NfVE9LRU58fCIiLHQ/Im1hcGJveC5ldmVudERhdGEuIit0KyI6IituOiJtYXBib3guZXZlbnREYXRhOiIrbn0sSy5wcm90b3R5cGUuZmV0Y2hFdmVudERhdGE9ZnVuY3Rpb24oKXt2YXIgdD1FKCJsb2NhbFN0b3JhZ2UiKSxlPXRoaXMuZ2V0U3RvcmFnZUtleSgpLHI9dGhpcy5nZXRTdG9yYWdlS2V5KCJ1dWlkIik7aWYodCl0cnl7dmFyIG49c2VsZi5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKTtuJiYodGhpcy5ldmVudERhdGE9SlNPTi5wYXJzZShuKSk7dmFyIGk9c2VsZi5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShyKTtpJiYodGhpcy5hbm9uSWQ9aSl9Y2F0Y2godCl7XygiVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UiKX19LEsucHJvdG90eXBlLnNhdmVFdmVudERhdGE9ZnVuY3Rpb24oKXt2YXIgdD1FKCJsb2NhbFN0b3JhZ2UiKSxlPXRoaXMuZ2V0U3RvcmFnZUtleSgpLHI9dGhpcy5nZXRTdG9yYWdlS2V5KCJ1dWlkIik7aWYodCl0cnl7c2VsZi5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShyLHRoaXMuYW5vbklkKSxPYmplY3Qua2V5cyh0aGlzLmV2ZW50RGF0YSkubGVuZ3RoPj0xJiZzZWxmLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGUsSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKX1jYXRjaCh0KXtfKCJVbmFibGUgdG8gd3JpdGUgdG8gTG9jYWxTdG9yYWdlIil9fSxLLnByb3RvdHlwZS5wcm9jZXNzUmVxdWVzdHM9ZnVuY3Rpb24odCl7fSxLLnByb3RvdHlwZS5wb3N0RXZlbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcztpZihGLkVWRU5UU19VUkwpe3ZhciBhPVgoRi5FVkVOVFNfVVJMKTthLnBhcmFtcy5wdXNoKCJhY2Nlc3NfdG9rZW49Iisobnx8Ri5BQ0NFU1NfVE9LRU58fCIiKSk7dmFyIG89e2V2ZW50OnRoaXMudHlwZSxjcmVhdGVkOm5ldyBEYXRlKHQpLnRvSVNPU3RyaW5nKCksc2RrSWRlbnRpZmllcjoibWFwYm94LWdsLWpzIixzZGtWZXJzaW9uOiIxLjEwLjEiLHNrdUlkOlYsdXNlcklkOnRoaXMuYW5vbklkfSxzPWU/dShvLGUpOm8sbD17dXJsOlooYSksaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifSxib2R5OkpTT04uc3RyaW5naWZ5KFtzXSl9O3RoaXMucGVuZGluZ1JlcXVlc3Q9YnQobCwoZnVuY3Rpb24odCl7aS5wZW5kaW5nUmVxdWVzdD1udWxsLHIodCksaS5zYXZlRXZlbnREYXRhKCksaS5wcm9jZXNzUmVxdWVzdHMobil9KSl9fSxLLnByb3RvdHlwZS5xdWV1ZVJlcXVlc3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnF1ZXVlLnB1c2godCksdGhpcy5wcm9jZXNzUmVxdWVzdHMoZSl9O3ZhciBRLCQsdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuY2FsbCh0aGlzLCJtYXAubG9hZCIpLHRoaXMuc3VjY2Vzcz17fSx0aGlzLnNrdVRva2VuPSIifXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3N0TWFwTG9hZEV2ZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuc2t1VG9rZW49ciwoRi5FVkVOVFNfVVJMJiZufHxGLkFDQ0VTU19UT0tFTiYmQXJyYXkuaXNBcnJheSh0KSYmdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gcSh0KXx8WSh0KX0pKSkmJnRoaXMucXVldWVSZXF1ZXN0KHtpZDplLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxuKX0sZS5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucGVuZGluZ1JlcXVlc3QmJjAhPT10aGlzLnF1ZXVlLmxlbmd0aCl7dmFyIHI9dGhpcy5xdWV1ZS5zaGlmdCgpLG49ci5pZCxpPXIudGltZXN0YW1wO24mJnRoaXMuc3VjY2Vzc1tuXXx8KHRoaXMuYW5vbklkfHx0aGlzLmZldGNoRXZlbnREYXRhKCksZCh0aGlzLmFub25JZCl8fCh0aGlzLmFub25JZD1wKCkpLHRoaXMucG9zdEV2ZW50KGkse3NrdVRva2VuOnRoaXMuc2t1VG9rZW59LChmdW5jdGlvbih0KXt0fHxuJiYoZS5zdWNjZXNzW25dPSEwKX0pLHQpKX19LGV9KEspLGV0PW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLCJhcHBVc2VyVHVybnN0aWxlIiksdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW49ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdFR1cm5zdGlsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Ri5FVkVOVFNfVVJMJiZGLkFDQ0VTU19UT0tFTiYmQXJyYXkuaXNBcnJheSh0KSYmdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gcSh0KXx8WSh0KX0pKSYmdGhpcy5xdWV1ZVJlcXVlc3QoRGF0ZS5ub3coKSxlKX0sZS5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucGVuZGluZ1JlcXVlc3QmJjAhPT10aGlzLnF1ZXVlLmxlbmd0aCl7dGhpcy5hbm9uSWQmJnRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzJiZ0aGlzLmV2ZW50RGF0YS50b2tlblV8fHRoaXMuZmV0Y2hFdmVudERhdGEoKTt2YXIgcj1KKEYuQUNDRVNTX1RPS0VOKSxuPXI/ci51OkYuQUNDRVNTX1RPS0VOLGk9biE9PXRoaXMuZXZlbnREYXRhLnRva2VuVTtkKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPXAoKSxpPSEwKTt2YXIgYT10aGlzLnF1ZXVlLnNoaWZ0KCk7aWYodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3Mpe3ZhciBvPW5ldyBEYXRlKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSxzPW5ldyBEYXRlKGEpLGw9KGEtdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpLzg2NGU1O2k9aXx8bD49MXx8bDwtMXx8by5nZXREYXRlKCkhPT1zLmdldERhdGUoKX1lbHNlIGk9ITA7aWYoIWkpcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7dGhpcy5wb3N0RXZlbnQoYSx7ImVuYWJsZWQudGVsZW1ldHJ5IjohMX0sKGZ1bmN0aW9uKHQpe3R8fChlLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcz1hLGUuZXZlbnREYXRhLnRva2VuVT1uKX0pLHQpfX0sZX0oSykpLHJ0PWV0LnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKGV0KSxudD1uZXcgdHQsaXQ9bnQucG9zdE1hcExvYWRFdmVudC5iaW5kKG50KSxhdD01MDAsb3Q9NTA7ZnVuY3Rpb24gc3QoKXtzZWxmLmNhY2hlcyYmIVEmJihRPXNlbGYuY2FjaGVzLm9wZW4oIm1hcGJveC10aWxlcyIpKX1mdW5jdGlvbiBsdCh0LGUscil7aWYoc3QoKSxRKXt2YXIgbj17c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IHNlbGYuSGVhZGVyc307ZS5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uaGVhZGVycy5zZXQoZSx0KX0pKTt2YXIgaT1BKGUuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO2lmKCFpWyJuby1zdG9yZSJdKWlbIm1heC1hZ2UiXSYmbi5oZWFkZXJzLnNldCgiRXhwaXJlcyIsbmV3IERhdGUocisxZTMqaVsibWF4LWFnZSJdKS50b1VUQ1N0cmluZygpKSxuZXcgRGF0ZShuLmhlYWRlcnMuZ2V0KCJFeHBpcmVzIikpLmdldFRpbWUoKS1yPDQyZTR8fGZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09JCl0cnl7bmV3IFJlc3BvbnNlKG5ldyBSZWFkYWJsZVN0cmVhbSksJD0hMH1jYXRjaCh0KXskPSExfSQ/ZSh0LmJvZHkpOnQuYmxvYigpLnRoZW4oZSl9KGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBzZWxmLlJlc3BvbnNlKGUsbik7c3QoKSxRJiZRLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1dChjdCh0LnVybCkscil9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBfKHQubWVzc2FnZSl9KSl9KSl9fWZ1bmN0aW9uIGN0KHQpe3ZhciBlPXQuaW5kZXhPZigiPyIpO3JldHVybiBlPDA/dDp0LnNsaWNlKDAsZSl9ZnVuY3Rpb24gdXQodCxlKXtpZihzdCgpLCFRKXJldHVybiBlKG51bGwpO3ZhciByPWN0KHQudXJsKTtRLnRoZW4oKGZ1bmN0aW9uKHQpe3QubWF0Y2gocikudGhlbigoZnVuY3Rpb24obil7dmFyIGk9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9bmV3IERhdGUodC5oZWFkZXJzLmdldCgiRXhwaXJlcyIpfHwwKSxyPUEodC5oZWFkZXJzLmdldCgiQ2FjaGUtQ29udHJvbCIpfHwiIik7cmV0dXJuIGU+RGF0ZS5ub3coKSYmIXJbIm5vLWNhY2hlIl19KG4pO3QuZGVsZXRlKHIpLGkmJnQucHV0KHIsbi5jbG9uZSgpKSxlKG51bGwsbixpKX0pKS5jYXRjaChlKX0pKS5jYXRjaChlKX12YXIgZnQsaHQ9MS8wO2Z1bmN0aW9uIHB0KCl7cmV0dXJuIG51bGw9PWZ0JiYoZnQ9c2VsZi5PZmZzY3JlZW5DYW52YXMmJm5ldyBzZWxmLk9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmNyZWF0ZUltYWdlQml0bWFwKSxmdH12YXIgZHQ9e1Vua25vd246IlVua25vd24iLFN0eWxlOiJTdHlsZSIsU291cmNlOiJTb3VyY2UiLFRpbGU6IlRpbGUiLEdseXBoczoiR2x5cGhzIixTcHJpdGVJbWFnZToiU3ByaXRlSW1hZ2UiLFNwcml0ZUpTT046IlNwcml0ZUpTT04iLEltYWdlOiJJbWFnZSJ9OyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZnJlZXplJiZPYmplY3QuZnJlZXplKGR0KTt2YXIgbXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7NDAxPT09ciYmWShuKSYmKGUrPSI6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMiKSx0LmNhbGwodGhpcyxlKSx0aGlzLnN0YXR1cz1yLHRoaXMudXJsPW4sdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlKyIgKCIrdGhpcy5zdGF0dXMrIik6ICIrdGhpcy51cmx9LGV9KEVycm9yKSxndD1rKCk/ZnVuY3Rpb24oKXtyZXR1cm4gc2VsZi53b3JrZXImJnNlbGYud29ya2VyLnJlZmVycmVyfTpmdW5jdGlvbigpe3JldHVybigiYmxvYjoiPT09c2VsZi5sb2NhdGlvbi5wcm90b2NvbD9zZWxmLnBhcmVudDpzZWxmKS5sb2NhdGlvbi5ocmVmfTtmdW5jdGlvbiB2dCh0LGUpe3ZhciByLG49bmV3IHNlbGYuQWJvcnRDb250cm9sbGVyLGk9bmV3IHNlbGYuUmVxdWVzdCh0LnVybCx7bWV0aG9kOnQubWV0aG9kfHwiR0VUIixib2R5OnQuYm9keSxjcmVkZW50aWFsczp0LmNyZWRlbnRpYWxzLGhlYWRlcnM6dC5oZWFkZXJzLHJlZmVycmVyOmd0KCksc2lnbmFsOm4uc2lnbmFsfSksYT0hMSxvPSExLHM9KHI9aS51cmwpLmluZGV4T2YoInNrdT0iKT4wJiZZKHIpOyJqc29uIj09PXQudHlwZSYmaS5oZWFkZXJzLnNldCgiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpO3ZhciBsPWZ1bmN0aW9uKHIsbixhKXtpZighbyl7aWYociYmIlNlY3VyaXR5RXJyb3IiIT09ci5tZXNzYWdlJiZfKHIpLG4mJmEpcmV0dXJuIGMobik7dmFyIGw9RGF0ZS5ub3coKTtzZWxmLmZldGNoKGkpLnRoZW4oKGZ1bmN0aW9uKHIpe2lmKHIub2spe3ZhciBuPXM/ci5jbG9uZSgpOm51bGw7cmV0dXJuIGMocixuLGwpfXJldHVybiBlKG5ldyBtdChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7MjAhPT10LmNvZGUmJmUobmV3IEVycm9yKHQubWVzc2FnZSkpfSkpfX0sYz1mdW5jdGlvbihyLG4scyl7KCJhcnJheUJ1ZmZlciI9PT10LnR5cGU/ci5hcnJheUJ1ZmZlcigpOiJqc29uIj09PXQudHlwZT9yLmpzb24oKTpyLnRleHQoKSkudGhlbigoZnVuY3Rpb24odCl7b3x8KG4mJnMmJmx0KGksbixzKSxhPSEwLGUobnVsbCx0LHIuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKSxyLmhlYWRlcnMuZ2V0KCJFeHBpcmVzIikpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7b3x8ZShuZXcgRXJyb3IodC5tZXNzYWdlKSl9KSl9O3JldHVybiBzP3V0KGksbCk6bChudWxsLG51bGwpLHtjYW5jZWw6ZnVuY3Rpb24oKXtvPSEwLGF8fG4uYWJvcnQoKX19fXZhciB5dD1mdW5jdGlvbih0LGUpe2lmKHI9dC51cmwsISgvXmZpbGU6Ly50ZXN0KHIpfHwvXmZpbGU6Ly50ZXN0KGd0KCkpJiYhL15cdys6Ly50ZXN0KHIpKSl7aWYoc2VsZi5mZXRjaCYmc2VsZi5SZXF1ZXN0JiZzZWxmLkFib3J0Q29udHJvbGxlciYmc2VsZi5SZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic2lnbmFsIikpcmV0dXJuIHZ0KHQsZSk7aWYoaygpJiZzZWxmLndvcmtlciYmc2VsZi53b3JrZXIuYWN0b3Ipe3JldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCJnZXRSZXNvdXJjZSIsdCxlLHZvaWQgMCwhMCl9fXZhciByO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzZWxmLlhNTEh0dHBSZXF1ZXN0O2Zvcih2YXIgbiBpbiByLm9wZW4odC5tZXRob2R8fCJHRVQiLHQudXJsLCEwKSwiYXJyYXlCdWZmZXIiPT09dC50eXBlJiYoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIiksdC5oZWFkZXJzKXIuc2V0UmVxdWVzdEhlYWRlcihuLHQuaGVhZGVyc1tuXSk7cmV0dXJuImpzb24iPT09dC50eXBlJiYoci5yZXNwb25zZVR5cGU9InRleHQiLHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpKSxyLndpdGhDcmVkZW50aWFscz0iaW5jbHVkZSI9PT10LmNyZWRlbnRpYWxzLHIub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IEVycm9yKHIuc3RhdHVzVGV4dCkpfSxyLm9ubG9hZD1mdW5jdGlvbigpe2lmKChyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDB8fDA9PT1yLnN0YXR1cykmJm51bGwhPT1yLnJlc3BvbnNlKXt2YXIgbj1yLnJlc3BvbnNlO2lmKCJqc29uIj09PXQudHlwZSl0cnl7bj1KU09OLnBhcnNlKHIucmVzcG9uc2UpfWNhdGNoKHQpe3JldHVybiBlKHQpfWUobnVsbCxuLHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNhY2hlLUNvbnRyb2wiKSxyLmdldFJlc3BvbnNlSGVhZGVyKCJFeHBpcmVzIikpfWVsc2UgZShuZXcgbXQoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9LHIuc2VuZCh0LmJvZHkpLHtjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gci5hYm9ydCgpfX19KHQsZSl9LHh0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl0KHUodCx7dHlwZToiYXJyYXlCdWZmZXIifSksZSl9LGJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl0KHUodCx7bWV0aG9kOiJQT1NUIn0pLGUpfTt2YXIgX3Qsd3Q7X3Q9W10sd3Q9MDt2YXIgVHQ9ZnVuY3Rpb24odCxlKXtpZihCLnN1cHBvcnRlZCYmKHQuaGVhZGVyc3x8KHQuaGVhZGVycz17fSksdC5oZWFkZXJzLmFjY2VwdD0iaW1hZ2Uvd2VicCwqLyoiKSx3dD49Ri5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMpe3ZhciByPXtyZXF1ZXN0UGFyYW1ldGVyczp0LGNhbGxiYWNrOmUsY2FuY2VsbGVkOiExLGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsbGVkPSEwfX07cmV0dXJuIF90LnB1c2gocikscn13dCsrO3ZhciBuPSExLGk9ZnVuY3Rpb24oKXtpZighbilmb3Iobj0hMCx3dC0tO190Lmxlbmd0aCYmd3Q8Ri5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM7KXt2YXIgdD1fdC5zaGlmdCgpLGU9dC5yZXF1ZXN0UGFyYW1ldGVycyxyPXQuY2FsbGJhY2s7dC5jYW5jZWxsZWR8fCh0LmNhbmNlbD1UdChlLHIpLmNhbmNlbCl9fSxhPXh0KHQsKGZ1bmN0aW9uKHQscixuLGEpe2koKSx0P2UodCk6ciYmKHB0KCk/ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgc2VsZi5CbG9iKFtuZXcgVWludDhBcnJheSh0KV0se3R5cGU6ImltYWdlL3BuZyJ9KTtzZWxmLmNyZWF0ZUltYWdlQml0bWFwKHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2UobnVsbCx0KX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZShuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkIGltYWdlIGJlY2F1c2Ugb2YgIit0Lm1lc3NhZ2UrIi4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9KSl9KHIsZSk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IHNlbGYuSW1hZ2UsYT1zZWxmLlVSTDtpLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxpKSxhLnJldm9rZU9iamVjdFVSTChpLnNyYyl9LGkub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBlKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgaW1hZ2UuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuIikpfTt2YXIgbz1uZXcgc2VsZi5CbG9iKFtuZXcgVWludDhBcnJheSh0KV0se3R5cGU6ImltYWdlL3BuZyJ9KTtpLmNhY2hlQ29udHJvbD1yLGkuZXhwaXJlcz1uLGkuc3JjPXQuYnl0ZUxlbmd0aD9hLmNyZWF0ZU9iamVjdFVSTChvKToiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9In0ocixlLG4sYSkpfSkpO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXthLmNhbmNlbCgpLGkoKX19fTtmdW5jdGlvbiBrdCh0LGUscil7clt0XSYmLTEhPT1yW3RdLmluZGV4T2YoZSl8fChyW3RdPXJbdF18fFtdLHJbdF0ucHVzaChlKSl9ZnVuY3Rpb24gQXQodCxlLHIpe2lmKHImJnJbdF0pe3ZhciBuPXJbdF0uaW5kZXhPZihlKTstMSE9PW4mJnJbdF0uc3BsaWNlKG4sMSl9fXZhciBNdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx1KHRoaXMsZSksdGhpcy50eXBlPXR9LFN0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdC5jYWxsKHRoaXMsImVycm9yIix1KHtlcnJvcjplfSxyKSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KE10KSxFdD1mdW5jdGlvbigpe307RXQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnN8fHt9LGt0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLHRoaXN9LEV0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXQodCxlLHRoaXMuX2xpc3RlbmVycyksQXQodCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LEV0LnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnM9dGhpcy5fb25lVGltZUxpc3RlbmVyc3x8e30sa3QodCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LEV0LnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiB0JiYodD1uZXcgTXQodCxlfHx7fSkpO3ZhciByPXQudHlwZTtpZih0aGlzLmxpc3RlbnMocikpe3QudGFyZ2V0PXRoaXM7Zm9yKHZhciBuPTAsaT10aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1tyXT90aGlzLl9saXN0ZW5lcnNbcl0uc2xpY2UoKTpbXTtuPGkubGVuZ3RoO24rPTEpe2lbbl0uY2FsbCh0aGlzLHQpfWZvcih2YXIgYT0wLG89dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3JdLnNsaWNlKCk6W107YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO0F0KHIscyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxzLmNhbGwodGhpcyx0KX12YXIgbD10aGlzLl9ldmVudGVkUGFyZW50O2wmJih1KHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLGwuZmlyZSh0KSl9ZWxzZSB0IGluc3RhbmNlb2YgU3QmJmNvbnNvbGUuZXJyb3IodC5lcnJvcik7cmV0dXJuIHRoaXN9LEV0LnByb3RvdHlwZS5saXN0ZW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1t0XSYmdGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9ldmVudGVkUGFyZW50JiZ0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModCl9LEV0LnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBMdD17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOls4XX0sbmFtZTp7dHlwZToic3RyaW5nIn0sbWV0YWRhdGE6e3R5cGU6IioifSxjZW50ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIn0sem9vbTp7dHlwZToibnVtYmVyIn0sYmVhcmluZzp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyJ9LHBpdGNoOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZGVncmVlcyJ9LGxpZ2h0Ont0eXBlOiJsaWdodCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6InNvdXJjZXMifSxzcHJpdGU6e3R5cGU6InN0cmluZyJ9LGdseXBoczp7dHlwZToic3RyaW5nIn0sdHJhbnNpdGlvbjp7dHlwZToidHJhbnNpdGlvbiJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJsYXllciJ9fSxzb3VyY2VzOnsiKiI6e3R5cGU6InNvdXJjZSJ9fSxzb3VyY2U6WyJzb3VyY2VfdmVjdG9yIiwic291cmNlX3Jhc3RlciIsInNvdXJjZV9yYXN0ZXJfZGVtIiwic291cmNlX2dlb2pzb24iLCJzb3VyY2VfdmlkZW8iLCJzb3VyY2VfaW1hZ2UiXSxzb3VyY2VfdmVjdG9yOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LHByb21vdGVJZDp7dHlwZToicHJvbW90ZUlkIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXI6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnsicmFzdGVyLWRlbSI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MTIsdW5pdHM6InBpeGVscyJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxlbmNvZGluZzp7dHlwZToiZW51bSIsdmFsdWVzOnt0ZXJyYXJpdW06e30sbWFwYm94Ont9fSxkZWZhdWx0OiJtYXBib3gifSwiKiI6e3R5cGU6IioifX0sc291cmNlX2dlb2pzb246e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7Z2VvanNvbjp7fX19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTh9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxidWZmZXI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouMzc1fSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn0sY2x1c3RlclByb3BlcnRpZXM6e3R5cGU6IioifSxsaW5lTWV0cmljczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZ2VuZXJhdGVJZDp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0scHJvbW90ZUlkOnt0eXBlOiJwcm9tb3RlSWQifX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZpZGVvOnt9fX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2ltYWdlOnt9fX0sdXJsOntyZXF1aXJlZDohMCx0eXBlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sbGF5ZXI6e2lkOnt0eXBlOiJzdHJpbmciLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2ZpbGw6e30sbGluZTp7fSxzeW1ib2w6e30sY2lyY2xlOnt9LGhlYXRtYXA6e30sImZpbGwtZXh0cnVzaW9uIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHNvdXJjZTp7dHlwZToic3RyaW5nIn0sInNvdXJjZS1sYXllciI6e3R5cGU6InN0cmluZyJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LG1heHpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifX0sbGF5b3V0OlsibGF5b3V0X2ZpbGwiLCJsYXlvdXRfbGluZSIsImxheW91dF9jaXJjbGUiLCJsYXlvdXRfaGVhdG1hcCIsImxheW91dF9maWxsLWV4dHJ1c2lvbiIsImxheW91dF9zeW1ib2wiLCJsYXlvdXRfcmFzdGVyIiwibGF5b3V0X2hpbGxzaGFkZSIsImxheW91dF9iYWNrZ3JvdW5kIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9maWxsOnsiZmlsbC1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2NpcmNsZTp7ImNpcmNsZS1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2hlYXRtYXA6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LCJsYXlvdXRfZmlsbC1leHRydXNpb24iOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfbGluZTp7ImxpbmUtY2FwIjp7dHlwZToiZW51bSIsdmFsdWVzOntidXR0Ont9LHJvdW5kOnt9LHNxdWFyZTp7fX0sZGVmYXVsdDoiYnV0dCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLWpvaW4iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2JldmVsOnt9LHJvdW5kOnt9LG1pdGVyOnt9fSxkZWZhdWx0OiJtaXRlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtbWl0ZXItbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJtaXRlciJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtcm91bmQtbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4wNSxyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJyb3VuZCJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOntwb2ludDp7fSxsaW5lOnt9LCJsaW5lLWNlbnRlciI6e319LGRlZmF1bHQ6InBvaW50IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6W3sic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtYXZvaWQtZWRnZXMiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwic3ltYm9sLXotb3JkZXIiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sInZpZXdwb3J0LXkiOnt9LHNvdXJjZTp7fX0sZGVmYXVsdDoiYXV0byIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdW5pdHM6ImZhY3RvciBvZiB0aGUgb3JpZ2luYWwgaWNvbiBzaXplIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10ZXh0LWZpdCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiLHsiaWNvbi10ZXh0LWZpdCI6WyJib3RoIiwid2lkdGgiLCJoZWlnaHQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pbWFnZSI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIseyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWZpZWxkIjp7dHlwZToiZm9ybWF0dGVkIixkZWZhdWx0OiIiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1mb250Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmciLGRlZmF1bHQ6WyJPcGVuIFNhbnMgUmVndWxhciIsIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciJdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTYsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1sZXR0ZXItc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWp1c3RpZnkiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sbGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcmFkaWFsLW9mZnNldCI6e3R5cGU6Im51bWJlciIsdW5pdHM6ImVtcyIsZGVmYXVsdDowLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19LCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciI6e3R5cGU6ImFycmF5Iix2YWx1ZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC12YXJpYWJsZS1hbmNob3IifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbWF4LWFuZ2xlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjQ1LHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC13cml0aW5nLW1vZGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2Zvcm0iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7IiEiOiJ0ZXh0LXJhZGlhbC1vZmZzZXQifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfcmFzdGVyOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxmaWx0ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToiKiJ9LGZpbHRlcl9vcGVyYXRvcjp7dHlwZToiZW51bSIsdmFsdWVzOnsiPT0iOnt9LCIhPSI6e30sIj4iOnt9LCI+PSI6e30sIjwiOnt9LCI8PSI6e30saW46e30sIiFpbiI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSwiIWhhcyI6e30sd2l0aGluOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZToiZXhwcmVzc2lvbiJ9LHN0b3BzOnt0eXBlOiJhcnJheSIsdmFsdWU6ImZ1bmN0aW9uX3N0b3AifSxiYXNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjB9LHByb3BlcnR5Ont0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiR6b29tIn0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntpZGVudGl0eTp7fSxleHBvbmVudGlhbDp7fSxpbnRlcnZhbDp7fSxjYXRlZ29yaWNhbDp7fX0sZGVmYXVsdDoiZXhwb25lbnRpYWwifSxjb2xvclNwYWNlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OiJyZ2IifSxkZWZhdWx0Ont0eXBlOiIqIixyZXF1aXJlZDohMX19LGZ1bmN0aW9uX3N0b3A6e3R5cGU6ImFycmF5IixtaW5pbXVtOjAsbWF4aW11bToyNCx2YWx1ZTpbIm51bWJlciIsImNvbG9yIl0sbGVuZ3RoOjJ9LGV4cHJlc3Npb246e3R5cGU6ImFycmF5Iix2YWx1ZToiKiIsbWluaW11bToxfSxleHByZXNzaW9uX25hbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7bGV0Ontncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LHZhcjp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSxsaXRlcmFsOntncm91cDoiVHlwZXMifSxhcnJheTp7Z3JvdXA6IlR5cGVzIn0sYXQ6e2dyb3VwOiJMb29rdXAifSxpbjp7Z3JvdXA6Ikxvb2t1cCJ9LCJpbmRleC1vZiI6e2dyb3VwOiJMb29rdXAifSxzbGljZTp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWhjbCI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSwiaW50ZXJwb2xhdGUtbGFiIjp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGxuMjp7Z3JvdXA6Ik1hdGgifSxwaTp7Z3JvdXA6Ik1hdGgifSxlOntncm91cDoiTWF0aCJ9LHR5cGVvZjp7Z3JvdXA6IlR5cGVzIn0sc3RyaW5nOntncm91cDoiVHlwZXMifSxudW1iZXI6e2dyb3VwOiJUeXBlcyJ9LGJvb2xlYW46e2dyb3VwOiJUeXBlcyJ9LG9iamVjdDp7Z3JvdXA6IlR5cGVzIn0sY29sbGF0b3I6e2dyb3VwOiJUeXBlcyJ9LGZvcm1hdDp7Z3JvdXA6IlR5cGVzIn0saW1hZ2U6e2dyb3VwOiJUeXBlcyJ9LCJudW1iZXItZm9ybWF0Ijp7Z3JvdXA6IlR5cGVzIn0sInRvLXN0cmluZyI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1udW1iZXIiOntncm91cDoiVHlwZXMifSwidG8tYm9vbGVhbiI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1yZ2JhIjp7Z3JvdXA6IkNvbG9yIn0sInRvLWNvbG9yIjp7Z3JvdXA6IlR5cGVzIn0scmdiOntncm91cDoiQ29sb3IifSxyZ2JhOntncm91cDoiQ29sb3IifSxnZXQ6e2dyb3VwOiJMb29rdXAifSxoYXM6e2dyb3VwOiJMb29rdXAifSxsZW5ndGg6e2dyb3VwOiJMb29rdXAifSxwcm9wZXJ0aWVzOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImZlYXR1cmUtc3RhdGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImdlb21ldHJ5LXR5cGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0saWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSx6b29tOntncm91cDoiWm9vbSJ9LCJoZWF0bWFwLWRlbnNpdHkiOntncm91cDoiSGVhdG1hcCJ9LCJsaW5lLXByb2dyZXNzIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LGFjY3VtdWxhdGVkOntncm91cDoiRmVhdHVyZSBkYXRhIn0sIisiOntncm91cDoiTWF0aCJ9LCIqIjp7Z3JvdXA6Ik1hdGgifSwiLSI6e2dyb3VwOiJNYXRoIn0sIi8iOntncm91cDoiTWF0aCJ9LCIlIjp7Z3JvdXA6Ik1hdGgifSwiXiI6e2dyb3VwOiJNYXRoIn0sc3FydDp7Z3JvdXA6Ik1hdGgifSxsb2cxMDp7Z3JvdXA6Ik1hdGgifSxsbjp7Z3JvdXA6Ik1hdGgifSxsb2cyOntncm91cDoiTWF0aCJ9LHNpbjp7Z3JvdXA6Ik1hdGgifSxjb3M6e2dyb3VwOiJNYXRoIn0sdGFuOntncm91cDoiTWF0aCJ9LGFzaW46e2dyb3VwOiJNYXRoIn0sYWNvczp7Z3JvdXA6Ik1hdGgifSxhdGFuOntncm91cDoiTWF0aCJ9LG1pbjp7Z3JvdXA6Ik1hdGgifSxtYXg6e2dyb3VwOiJNYXRoIn0scm91bmQ6e2dyb3VwOiJNYXRoIn0sYWJzOntncm91cDoiTWF0aCJ9LGNlaWw6e2dyb3VwOiJNYXRoIn0sZmxvb3I6e2dyb3VwOiJNYXRoIn0sZGlzdGFuY2U6e2dyb3VwOiJNYXRoIn0sIj09Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIiE9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj4iOntncm91cDoiRGVjaXNpb24ifSwiPCI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LGFsbDp7Z3JvdXA6IkRlY2lzaW9uIn0sYW55Ontncm91cDoiRGVjaXNpb24ifSwiISI6e2dyb3VwOiJEZWNpc2lvbiJ9LHdpdGhpbjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxjb2xvcjp7dHlwZToiY29sb3IiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsZGVmYXVsdDoiI2ZmZmZmZiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1vdXRsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9LHsiZmlsbC1hbnRpYWxpYXMiOiEwfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9fSwicGFpbnRfZmlsbC1leHRydXNpb24iOnsiZmlsbC1leHRydXNpb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24taGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfbGluZTp7ImxpbmUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJsaW5lLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1nYXAtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtb2Zmc2V0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1kYXNoYXJyYXkiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6ImxpbmUgd2lkdGhzIixyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkIn0sImxpbmUtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsibGluZS1wcm9ncmVzcyJdfSwicHJvcGVydHktdHlwZSI6ImNvbG9yLXJhbXAifX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9fSxwYWludF9oZWF0bWFwOnsiaGVhdG1hcC1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAsbWluaW11bToxLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJoZWF0bWFwLXdlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC1pbnRlbnNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhlYXRtYXAtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDpbImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCwicmdiYSgwLCAwLCAyNTUsIDApIiwuMSwicm95YWxibHVlIiwuMywiY3lhbiIsLjUsImxpbWUiLC43LCJ5ZWxsb3ciLDEsInJlZCJdLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJoZWF0bWFwLWRlbnNpdHkiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn0sImhlYXRtYXAtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwiaWNvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxvdmVycmlkYWJsZTohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHRyYW5zaXRpb246ITAsdW5pdHM6ImRlZ3JlZXMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWNvbnRyYXN0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1yZXNhbXBsaW5nIjp7dHlwZToiZW51bSIsdmFsdWVzOntsaW5lYXI6e30sbmVhcmVzdDp7fX0sZGVmYXVsdDoibGluZWFyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSx1bml0czoibWlsbGlzZWNvbmRzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2hpbGxzaGFkZTp7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjRkZGRkZGIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfYmFja2dyb3VuZDp7ImJhY2tncm91bmQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiYmFja2dyb3VuZC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiYmFja2dyb3VuZC1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJiYWNrZ3JvdW5kLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9LGRlbGF5Ont0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9fSwicHJvcGVydHktdHlwZSI6eyJkYXRhLWRyaXZlbiI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY3Jvc3MtZmFkZWQiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjb2xvci1yYW1wIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJkYXRhLWNvbnN0YW50Ijp7dHlwZToicHJvcGVydHktdHlwZSJ9LGNvbnN0YW50Ont0eXBlOiJwcm9wZXJ0eS10eXBlIn19LHByb21vdGVJZDp7IioiOnt0eXBlOiJzdHJpbmcifX19LEN0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubWVzc2FnZT0odD90KyI6ICI6IiIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBQdCh0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7cmV0dXJuIHI/W25ldyBDdChlLHIsImNvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCIpXTpbXX1mdW5jdGlvbiBJdCh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fWZ1bmN0aW9uIE90KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbj90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIHp0KHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKHp0KTtpZih0IGluc3RhbmNlb2YgT2JqZWN0JiYhKHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuKSl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZVtyXT16dCh0W3JdKTtyZXR1cm4gZX1yZXR1cm4gT3QodCl9dmFyIER0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxyKSx0aGlzLm1lc3NhZ2U9cix0aGlzLmtleT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShFcnJvciksUnQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy5wYXJlbnQ9dCx0aGlzLmJpbmRpbmdzPXt9O2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pWzBdLG89aVsxXTt0aGlzLmJpbmRpbmdzW2FdPW99fTtSdC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUnQodGhpcyx0KX0sUnQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmJpbmRpbmdzW3RdKXJldHVybiB0aGlzLmJpbmRpbmdzW3RdO2lmKHRoaXMucGFyZW50KXJldHVybiB0aGlzLnBhcmVudC5nZXQodCk7dGhyb3cgbmV3IEVycm9yKHQrIiBub3QgZm91bmQgaW4gc2NvcGUuIil9LFJ0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmJpbmRpbmdzW3RdfHwhIXRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5oYXModCl9O3ZhciBGdD17a2luZDoibnVsbCJ9LEJ0PXtraW5kOiJudW1iZXIifSxOdD17a2luZDoic3RyaW5nIn0sanQ9e2tpbmQ6ImJvb2xlYW4ifSxVdD17a2luZDoiY29sb3IifSxWdD17a2luZDoib2JqZWN0In0sSHQ9e2tpbmQ6InZhbHVlIn0scXQ9e2tpbmQ6ImNvbGxhdG9yIn0sR3Q9e2tpbmQ6ImZvcm1hdHRlZCJ9LFl0PXtraW5kOiJyZXNvbHZlZEltYWdlIn07ZnVuY3Rpb24gV3QodCxlKXtyZXR1cm57a2luZDoiYXJyYXkiLGl0ZW1UeXBlOnQsTjplfX1mdW5jdGlvbiBYdCh0KXtpZigiYXJyYXkiPT09dC5raW5kKXt2YXIgZT1YdCh0Lml0ZW1UeXBlKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQuTj8iYXJyYXk8IitlKyIsICIrdC5OKyI+IjoidmFsdWUiPT09dC5pdGVtVHlwZS5raW5kPyJhcnJheSI6ImFycmF5PCIrZSsiPiJ9cmV0dXJuIHQua2luZH12YXIgWnQ9W0Z0LEJ0LE50LGp0LFV0LEd0LFZ0LFd0KEh0KSxZdF07ZnVuY3Rpb24gSnQodCxlKXtpZigiZXJyb3IiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJhcnJheSI9PT10LmtpbmQpe2lmKCJhcnJheSI9PT1lLmtpbmQmJigwPT09ZS5OJiYidmFsdWUiPT09ZS5pdGVtVHlwZS5raW5kfHwhSnQodC5pdGVtVHlwZSxlLml0ZW1UeXBlKSkmJigibnVtYmVyIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZigidmFsdWUiPT09dC5raW5kKWZvcih2YXIgcj0wLG49WnQ7cjxuLmxlbmd0aDtyKz0xKXtpZighSnQobltyXSxlKSlyZXR1cm4gbnVsbH19cmV0dXJuIkV4cGVjdGVkICIrWHQodCkrIiBidXQgZm91bmQgIitYdChlKSsiIGluc3RlYWQuIn1mdW5jdGlvbiBLdCh0LGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT10LmtpbmR9KSl9ZnVuY3Rpb24gUXQodCxlKXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ibnVsbCI9PT1lP251bGw9PT10OiJhcnJheSI9PT1lP0FycmF5LmlzQXJyYXkodCk6Im9iamVjdCI9PT1lP3QmJiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQ6ZT09PXR5cGVvZiB0fSkpfXZhciAkdD1lKChmdW5jdGlvbih0LGUpe3ZhciByPXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5LDFdLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDcsMV0sZGFya29yYW5nZTpbMjU1LDE0MCwwLDFdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDQsMV0sZGFya3JlZDpbMTM5LDAsMCwxXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMiwxXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzLDFdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOSwxXSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OSwxXSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OSwxXSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDksMV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExLDFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3LDFdLGRlZXBza3libHVlOlswLDE5MSwyNTUsMV0sZGltZ3JheTpbMTA1LDEwNSwxMDUsMV0sZGltZ3JleTpbMTA1LDEwNSwxMDUsMV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NSwxXSxmaXJlYnJpY2s6WzE3OCwzNCwzNCwxXSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDAsMV0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNCwxXSxmdWNoc2lhOlsyNTUsMCwyNTUsMV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMCwxXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NSwxXSxnb2xkOlsyNTUsMjE1LDAsMV0sZ29sZGVucm9kOlsyMTgsMTY1LDMyLDFdLGdyYXk6WzEyOCwxMjgsMTI4LDFdLGdyZWVuOlswLDEyOCwwLDFdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3LDFdLGdyZXk6WzEyOCwxMjgsMTI4LDFdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MCwxXSxob3RwaW5rOlsyNTUsMTA1LDE4MCwxXSxpbmRpYW5yZWQ6WzIwNSw5Miw5MiwxXSxpbmRpZ286Wzc1LDAsMTMwLDFdLGl2b3J5OlsyNTUsMjU1LDI0MCwxXSxraGFraTpbMjQwLDIzMCwxNDAsMV0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwLDFdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1LDFdLGxhd25ncmVlbjpbMTI0LDI1MiwwLDFdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDUsMV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMCwxXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOCwxXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1LDFdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMCwxXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0LDFdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTEsMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5MywxXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjIsMV0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MCwxXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwLDFdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1MywxXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyLDFdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNCwxXSxsaW1lOlswLDI1NSwwLDFdLGxpbWVncmVlbjpbNTAsMjA1LDUwLDFdLGxpbmVuOlsyNTAsMjQwLDIzMCwxXSxtYWdlbnRhOlsyNTUsMCwyNTUsMV0sbWFyb29uOlsxMjgsMCwwLDFdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwLDFdLG1lZGl1bWJsdWU6WzAsMCwyMDUsMV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExLDFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTksMV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTMsMV0sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOCwxXSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0LDFdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNCwxXSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzMsMV0sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTIsMV0sbWludGNyZWFtOlsyNDUsMjU1LDI1MCwxXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1LDFdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MSwxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzMsMV0sbmF2eTpbMCwwLDEyOCwxXSxvbGRsYWNlOlsyNTMsMjQ1LDIzMCwxXSxvbGl2ZTpbMTI4LDEyOCwwLDFdLG9saXZlZHJhYjpbMTA3LDE0MiwzNSwxXSxvcmFuZ2U6WzI1NSwxNjUsMCwxXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwLDFdLG9yY2hpZDpbMjE4LDExMiwyMTQsMV0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzAsMV0scGFsZWdyZWVuOlsxNTIsMjUxLDE1MiwxXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOCwxXSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0NywxXSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxMywxXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1LDFdLHBlcnU6WzIwNSwxMzMsNjMsMV0scGluazpbMjU1LDE5MiwyMDMsMV0scGx1bTpbMjIxLDE2MCwyMjEsMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzAsMV0scHVycGxlOlsxMjgsMCwxMjgsMV0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1MywxXSxyZWQ6WzI1NSwwLDAsMV0scm9zeWJyb3duOlsxODgsMTQzLDE0MywxXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjUsMV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOSwxXSxzYWxtb246WzI1MCwxMjgsMTE0LDFdLHNhbmR5YnJvd246WzI0NCwxNjQsOTYsMV0sc2VhZ3JlZW46WzQ2LDEzOSw4NywxXSxzZWFzaGVsbDpbMjU1LDI0NSwyMzgsMV0sc2llbm5hOlsxNjAsODIsNDUsMV0sc2lsdmVyOlsxOTIsMTkyLDE5MiwxXSxza3libHVlOlsxMzUsMjA2LDIzNSwxXSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDUsMV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NCwxXSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0LDFdLHNub3c6WzI1NSwyNTAsMjUwLDFdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjcsMV0sc3RlZWxibHVlOls3MCwxMzAsMTgwLDFdLHRhbjpbMjEwLDE4MCwxNDAsMV0sdGVhbDpbMCwxMjgsMTI4LDFdLHRoaXN0bGU6WzIxNiwxOTEsMjE2LDFdLHRvbWF0bzpbMjU1LDk5LDcxLDFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOCwxXSx2aW9sZXQ6WzIzOCwxMzAsMjM4LDFdLHdoZWF0OlsyNDUsMjIyLDE3OSwxXSx3aGl0ZTpbMjU1LDI1NSwyNTUsMV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDUsMV0seWVsbG93OlsyNTUsMjU1LDAsMV0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTAsMV19O2Z1bmN0aW9uIG4odCl7cmV0dXJuKHQ9TWF0aC5yb3VuZCh0KSk8MD8wOnQ+MjU1PzI1NTp0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8MD8wOnQ+MT8xOnR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iJSI9PT10W3QubGVuZ3RoLTFdP24ocGFyc2VGbG9hdCh0KS8xMDAqMjU1KTpuKHBhcnNlSW50KHQpKX1mdW5jdGlvbiBvKHQpe3JldHVybiIlIj09PXRbdC5sZW5ndGgtMV0/aShwYXJzZUZsb2F0KHQpLzEwMCk6aShwYXJzZUZsb2F0KHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gcjwwP3IrPTE6cj4xJiYoci09MSksNipyPDE/dCsoZS10KSpyKjY6MipyPDE/ZTozKnI8Mj90KyhlLXQpKigyLzMtcikqNjp0fXRyeXtlLnBhcnNlQ1NTQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUsaT10LnJlcGxhY2UoLyAvZywiIikudG9Mb3dlckNhc2UoKTtpZihpIGluIHIpcmV0dXJuIHJbaV0uc2xpY2UoKTtpZigiIyI9PT1pWzBdKXJldHVybiA0PT09aS5sZW5ndGg/KGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9NDA5NT9bKDM4NDAmZSk+PjR8KDM4NDAmZSk+PjgsMjQwJmV8KDI0MCZlKT4+NCwxNSZlfCgxNSZlKTw8NCwxXTpudWxsOjc9PT1pLmxlbmd0aCYmKGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9MTY3NzcyMTU/WygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlLDFdOm51bGw7dmFyIGw9aS5pbmRleE9mKCIoIiksYz1pLmluZGV4T2YoIikiKTtpZigtMSE9PWwmJmMrMT09PWkubGVuZ3RoKXt2YXIgdT1pLnN1YnN0cigwLGwpLGY9aS5zdWJzdHIobCsxLGMtKGwrMSkpLnNwbGl0KCIsIiksaD0xO3N3aXRjaCh1KXtjYXNlInJnYmEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPW8oZi5wb3AoKSk7Y2FzZSJyZ2IiOnJldHVybiAzIT09Zi5sZW5ndGg/bnVsbDpbYShmWzBdKSxhKGZbMV0pLGEoZlsyXSksaF07Y2FzZSJoc2xhIjppZig0IT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7aD1vKGYucG9wKCkpO2Nhc2UiaHNsIjppZigzIT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9KHBhcnNlRmxvYXQoZlswXSklMzYwKzM2MCklMzYwLzM2MCxkPW8oZlsxXSksbT1vKGZbMl0pLGc9bTw9LjU/bSooZCsxKTptK2QtbSpkLHY9MiptLWc7cmV0dXJuW24oMjU1KnModixnLHArMS8zKSksbigyNTUqcyh2LGcscCkpLG4oMjU1KnModixnLHAtMS8zKSksaF07ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmV0dXJuIG51bGx9fWNhdGNoKHQpe319KSkucGFyc2VDU1NDb2xvcix0ZT1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj0xKSx0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9cix0aGlzLmE9bn07dGUucGFyc2U9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9JHQodCk7aWYoZSlyZXR1cm4gbmV3IHRlKGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LHRlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoZSkrIiwiK01hdGgucm91bmQocikrIiwiK01hdGgucm91bmQobikrIiwiK2krIikifSx0ZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sdGUuYmxhY2s9bmV3IHRlKDAsMCwwLDEpLHRlLndoaXRlPW5ldyB0ZSgxLDEsMSwxKSx0ZS50cmFuc3BhcmVudD1uZXcgdGUoMCwwLDAsMCksdGUucmVkPW5ldyB0ZSgxLDAsMCwxKTt2YXIgZWU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2Vuc2l0aXZpdHk9dD9lPyJ2YXJpYW50IjoiY2FzZSI6ZT8iYWNjZW50IjoiYmFzZSIsdGhpcy5sb2NhbGU9cix0aGlzLmNvbGxhdG9yPW5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdLHtzZW5zaXRpdml0eTp0aGlzLnNlbnNpdGl2aXR5LHVzYWdlOiJzZWFyY2gifSl9O2VlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZSh0LGUpfSxlZS5wcm90b3R5cGUucmVzb2x2ZWRMb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZX07dmFyIHJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50ZXh0PXQsdGhpcy5pbWFnZT1lLHRoaXMuc2NhbGU9cix0aGlzLmZvbnRTdGFjaz1uLHRoaXMudGV4dENvbG9yPWl9LG5lPWZ1bmN0aW9uKHQpe3RoaXMuc2VjdGlvbnM9dH07bmUuZnJvbVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5lKFtuZXcgcmUodCxudWxsLG51bGwsbnVsbCxudWxsKV0pfSxuZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zZWN0aW9ucy5sZW5ndGh8fCF0aGlzLnNlY3Rpb25zLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiAwIT09dC50ZXh0Lmxlbmd0aHx8dC5pbWFnZSYmMCE9PXQuaW1hZ2UubmFtZS5sZW5ndGh9KSl9LG5lLmZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuZT90Om5lLmZyb21TdHJpbmcodCl9LG5lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zZWN0aW9ucy5sZW5ndGg/IiI6dGhpcy5zZWN0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHR9KSkuam9pbigiIil9LG5lLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZihuLmltYWdlKXQucHVzaChbImltYWdlIixuLmltYWdlLm5hbWVdKTtlbHNle3QucHVzaChuLnRleHQpO3ZhciBpPXt9O24uZm9udFN0YWNrJiYoaVsidGV4dC1mb250Il09WyJsaXRlcmFsIixuLmZvbnRTdGFjay5zcGxpdCgiLCIpXSksbi5zY2FsZSYmKGlbImZvbnQtc2NhbGUiXT1uLnNjYWxlKSxuLnRleHRDb2xvciYmKGlbInRleHQtY29sb3IiXT1bInJnYmEiXS5jb25jYXQobi50ZXh0Q29sb3IudG9BcnJheSgpKSksdC5wdXNoKGkpfX1yZXR1cm4gdH07dmFyIGllPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5hdmFpbGFibGU9dC5hdmFpbGFibGV9O2Z1bmN0aW9uIGFlKHQsZSxyLG4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmdDw9MjU1JiYibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJmU8PTI1NSYmIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiZyPD0yNTU/dm9pZCAwPT09bnx8Im51bWJlciI9PXR5cGVvZiBuJiZuPj0wJiZuPD0xP251bGw6IkludmFsaWQgcmdiYSB2YWx1ZSBbIitbdCxlLHIsbl0uam9pbigiLCAiKSsiXTogJ2EnIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLiI6IkludmFsaWQgcmdiYSB2YWx1ZSBbIisoIm51bWJlciI9PXR5cGVvZiBuP1t0LGUscixuXTpbdCxlLHJdKS5qb2luKCIsICIpKyJdOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LiJ9ZnVuY3Rpb24gb2UodCl7aWYobnVsbD09PXQpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEwO2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuITA7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgZWUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIG5lKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBpZSlyZXR1cm4hMDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZighb2UocltlXSkpcmV0dXJuITF9cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IodmFyIG4gaW4gdClpZighb2UodFtuXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2UodCl7aWYobnVsbD09PXQpcmV0dXJuIEZ0O2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gTnQ7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4ganQ7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBCdDtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuIFV0O2lmKHQgaW5zdGFuY2VvZiBlZSlyZXR1cm4gcXQ7aWYodCBpbnN0YW5jZW9mIG5lKXJldHVybiBHdDtpZih0IGluc3RhbmNlb2YgaWUpcmV0dXJuIFl0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1zZShpW25dKTtpZihlKXtpZihlPT09YSljb250aW51ZTtlPUh0O2JyZWFrfWU9YX1yZXR1cm4gV3QoZXx8SHQscil9cmV0dXJuIFZ0fWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsPT09dD8iIjoic3RyaW5nIj09PWV8fCJudW1iZXIiPT09ZXx8ImJvb2xlYW4iPT09ZT9TdHJpbmcodCk6dCBpbnN0YW5jZW9mIHRlfHx0IGluc3RhbmNlb2YgbmV8fHQgaW5zdGFuY2VvZiBpZT90LnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkodCl9aWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0saWUuZnJvbVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uZXcgaWUoe25hbWU6dCxhdmFpbGFibGU6ITF9KTpudWxsfSxpZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJpbWFnZSIsdGhpcy5uYW1lXX07dmFyIGNlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1lfTtjZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYoIW9lKHRbMV0pKXJldHVybiBlLmVycm9yKCJpbnZhbGlkIHZhbHVlIik7dmFyIHI9dFsxXSxuPXNlKHIpLGk9ZS5leHBlY3RlZFR5cGU7cmV0dXJuImFycmF5IiE9PW4ua2luZHx8MCE9PW4uTnx8IWl8fCJhcnJheSIhPT1pLmtpbmR8fCJudW1iZXIiPT10eXBlb2YgaS5OJiYwIT09aS5OfHwobj1pKSxuZXcgY2UobixyKX0sY2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LGNlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LGNlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGNlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4iYXJyYXkiPT09dGhpcy50eXBlLmtpbmR8fCJvYmplY3QiPT09dGhpcy50eXBlLmtpbmQ/WyJsaXRlcmFsIix0aGlzLnZhbHVlXTp0aGlzLnZhbHVlIGluc3RhbmNlb2YgdGU/WyJyZ2JhIl0uY29uY2F0KHRoaXMudmFsdWUudG9BcnJheSgpKTp0aGlzLnZhbHVlIGluc3RhbmNlb2YgbmU/dGhpcy52YWx1ZS5zZXJpYWxpemUoKTp0aGlzLnZhbHVlfTt2YXIgdWU9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPSJFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yIix0aGlzLm1lc3NhZ2U9dH07dWUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O3ZhciBmZT17c3RyaW5nOk50LG51bWJlcjpCdCxib29sZWFuOmp0LG9iamVjdDpWdH0saGU9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07aGUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHIsbj0xLGk9dFswXTtpZigiYXJyYXkiPT09aSl7dmFyIGEsbztpZih0Lmxlbmd0aD4yKXt2YXIgcz10WzFdO2lmKCJzdHJpbmciIT10eXBlb2Ygc3x8IShzIGluIGZlKXx8Im9iamVjdCI9PT1zKXJldHVybiBlLmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mICJhcnJheSIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLDEpO2E9ZmVbc10sbisrfWVsc2UgYT1IdDtpZih0Lmxlbmd0aD4zKXtpZihudWxsIT09dFsyXSYmKCJudW1iZXIiIT10eXBlb2YgdFsyXXx8dFsyXTwwfHx0WzJdIT09TWF0aC5mbG9vcih0WzJdKSkpcmV0dXJuIGUuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gImFycmF5IiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBsaXRlcmFsJywyKTtvPXRbMl0sbisrfXI9V3QoYSxvKX1lbHNlIHI9ZmVbaV07Zm9yKHZhciBsPVtdO248dC5sZW5ndGg7bisrKXt2YXIgYz1lLnBhcnNlKHRbbl0sbixIdCk7aWYoIWMpcmV0dXJuIG51bGw7bC5wdXNoKGMpfXJldHVybiBuZXcgaGUocixsKX0saGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5hcmdzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuYXJnc1tlXS5ldmFsdWF0ZSh0KTtpZighSnQodGhpcy50eXBlLHNlKHIpKSlyZXR1cm4gcjtpZihlPT09dGhpcy5hcmdzLmxlbmd0aC0xKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSAiK1h0KHRoaXMudHlwZSkrIiwgYnV0IGZvdW5kICIrWHQoc2UocikpKyIgaW5zdGVhZC4iKX1yZXR1cm4gbnVsbH0saGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0saGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LGhlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnR5cGUsZT1bdC5raW5kXTtpZigiYXJyYXkiPT09dC5raW5kKXt2YXIgcj10Lml0ZW1UeXBlO2lmKCJzdHJpbmciPT09ci5raW5kfHwibnVtYmVyIj09PXIua2luZHx8ImJvb2xlYW4iPT09ci5raW5kKXtlLnB1c2goci5raW5kKTt2YXIgbj10Lk47KCJudW1iZXIiPT10eXBlb2Ygbnx8dGhpcy5hcmdzLmxlbmd0aD4xKSYmZS5wdXNoKG4pfX1yZXR1cm4gZS5jb25jYXQodGhpcy5hcmdzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSkpfTt2YXIgcGU9ZnVuY3Rpb24odCl7dGhpcy50eXBlPUd0LHRoaXMuc2VjdGlvbnM9dH07cGUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtpZighQXJyYXkuaXNBcnJheShyKSYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybiBlLmVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGltYWdlIG9yIHRleHQgc2VjdGlvbi4iKTtmb3IodmFyIG49W10saT0hMSxhPTE7YTw9dC5sZW5ndGgtMTsrK2Epe3ZhciBvPXRbYV07aWYoaSYmIm9iamVjdCI9PXR5cGVvZiBvJiYhQXJyYXkuaXNBcnJheShvKSl7aT0hMTt2YXIgcz1udWxsO2lmKG9bImZvbnQtc2NhbGUiXSYmIShzPWUucGFyc2Uob1siZm9udC1zY2FsZSJdLDEsQnQpKSlyZXR1cm4gbnVsbDt2YXIgbD1udWxsO2lmKG9bInRleHQtZm9udCJdJiYhKGw9ZS5wYXJzZShvWyJ0ZXh0LWZvbnQiXSwxLFd0KE50KSkpKXJldHVybiBudWxsO3ZhciBjPW51bGw7aWYob1sidGV4dC1jb2xvciJdJiYhKGM9ZS5wYXJzZShvWyJ0ZXh0LWNvbG9yIl0sMSxVdCkpKXJldHVybiBudWxsO3ZhciB1PW5bbi5sZW5ndGgtMV07dS5zY2FsZT1zLHUuZm9udD1sLHUudGV4dENvbG9yPWN9ZWxzZXt2YXIgZj1lLnBhcnNlKHRbYV0sMSxIdCk7aWYoIWYpcmV0dXJuIG51bGw7dmFyIGg9Zi50eXBlLmtpbmQ7aWYoInN0cmluZyIhPT1oJiYidmFsdWUiIT09aCYmIm51bGwiIT09aCYmInJlc29sdmVkSW1hZ2UiIT09aClyZXR1cm4gZS5lcnJvcigiRm9ybWF0dGVkIHRleHQgdHlwZSBtdXN0IGJlICdzdHJpbmcnLCAndmFsdWUnLCAnaW1hZ2UnIG9yICdudWxsJy4iKTtpPSEwLG4ucHVzaCh7Y29udGVudDpmLHNjYWxlOm51bGwsZm9udDpudWxsLHRleHRDb2xvcjpudWxsfSl9fXJldHVybiBuZXcgcGUobil9LHBlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5lKHRoaXMuc2VjdGlvbnMubWFwKChmdW5jdGlvbihlKXt2YXIgcj1lLmNvbnRlbnQuZXZhbHVhdGUodCk7cmV0dXJuIHNlKHIpPT09WXQ/bmV3IHJlKCIiLHIsbnVsbCxudWxsLG51bGwpOm5ldyByZShsZShyKSxudWxsLGUuc2NhbGU/ZS5zY2FsZS5ldmFsdWF0ZSh0KTpudWxsLGUuZm9udD9lLmZvbnQuZXZhbHVhdGUodCkuam9pbigiLCIpOm51bGwsZS50ZXh0Q29sb3I/ZS50ZXh0Q29sb3IuZXZhbHVhdGUodCk6bnVsbCl9KSkpfSxwZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5zZWN0aW9ucztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dChuLmNvbnRlbnQpLG4uc2NhbGUmJnQobi5zY2FsZSksbi5mb250JiZ0KG4uZm9udCksbi50ZXh0Q29sb3ImJnQobi50ZXh0Q29sb3IpfX0scGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImZvcm1hdCJdLGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3QucHVzaChuLmNvbnRlbnQuc2VyaWFsaXplKCkpO3ZhciBpPXt9O24uc2NhbGUmJihpWyJmb250LXNjYWxlIl09bi5zY2FsZS5zZXJpYWxpemUoKSksbi5mb250JiYoaVsidGV4dC1mb250Il09bi5mb250LnNlcmlhbGl6ZSgpKSxuLnRleHRDb2xvciYmKGlbInRleHQtY29sb3IiXT1uLnRleHRDb2xvci5zZXJpYWxpemUoKSksdC5wdXNoKGkpfXJldHVybiB0fTt2YXIgZGU9ZnVuY3Rpb24odCl7dGhpcy50eXBlPVl0LHRoaXMuaW5wdXQ9dH07ZGUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHR3byBhcmd1bWVudHMuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsTnQpO3JldHVybiByP25ldyBkZShyKTplLmVycm9yKCJObyBpbWFnZSBuYW1lIHByb3ZpZGVkLiIpfSxkZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KSxyPWllLmZyb21TdHJpbmcoZSk7cmV0dXJuIHImJnQuYXZhaWxhYmxlSW1hZ2VzJiYoci5hdmFpbGFibGU9dC5hdmFpbGFibGVJbWFnZXMuaW5kZXhPZihlKT4tMSkscn0sZGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpfSxkZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxkZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJpbWFnZSIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBtZT17InRvLWJvb2xlYW4iOmp0LCJ0by1jb2xvciI6VXQsInRvLW51bWJlciI6QnQsInRvLXN0cmluZyI6TnR9LGdlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2dlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMF07aWYoKCJ0by1ib29sZWFuIj09PXJ8fCJ0by1zdHJpbmciPT09cikmJjIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgb25lIGFyZ3VtZW50LiIpO2Zvcih2YXIgbj1tZVtyXSxpPVtdLGE9MTthPHQubGVuZ3RoO2ErKyl7dmFyIG89ZS5wYXJzZSh0W2FdLGEsSHQpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGdlKG4saSl9LGdlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gQm9vbGVhbih0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpO2lmKCJjb2xvciI9PT10aGlzLnR5cGUua2luZCl7Zm9yKHZhciBlLHIsbj0wLGk9dGhpcy5hcmdzO248aS5sZW5ndGg7bis9MSl7aWYocj1udWxsLChlPWlbbl0uZXZhbHVhdGUodCkpaW5zdGFuY2VvZiB0ZSlyZXR1cm4gZTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBhPXQucGFyc2VDb2xvcihlKTtpZihhKXJldHVybiBhfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSYmIShyPWUubGVuZ3RoPDN8fGUubGVuZ3RoPjQ/IkludmFsaWQgcmJnYSB2YWx1ZSAiK0pTT04uc3RyaW5naWZ5KGUpKyI6IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuIjphZShlWzBdLGVbMV0sZVsyXSxlWzNdKSkpcmV0dXJuIG5ldyB0ZShlWzBdLzI1NSxlWzFdLzI1NSxlWzJdLzI1NSxlWzNdKX10aHJvdyBuZXcgdWUocnx8IkNvdWxkIG5vdCBwYXJzZSBjb2xvciBmcm9tIHZhbHVlICciKygic3RyaW5nIj09dHlwZW9mIGU/ZTpTdHJpbmcoSlNPTi5zdHJpbmdpZnkoZSkpKSsiJyIpfWlmKCJudW1iZXIiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgbz1udWxsLHM9MCxsPXRoaXMuYXJncztzPGwubGVuZ3RoO3MrPTEpe2lmKG51bGw9PT0obz1sW3NdLmV2YWx1YXRlKHQpKSlyZXR1cm4gMDt2YXIgYz1OdW1iZXIobyk7aWYoIWlzTmFOKGMpKXJldHVybiBjfXRocm93IG5ldyB1ZSgiQ291bGQgbm90IGNvbnZlcnQgIitKU09OLnN0cmluZ2lmeShvKSsiIHRvIG51bWJlci4iKX1yZXR1cm4iZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kP25lLmZyb21TdHJpbmcobGUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKSk6InJlc29sdmVkSW1hZ2UiPT09dGhpcy50eXBlLmtpbmQ/aWUuZnJvbVN0cmluZyhsZSh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpKTpsZSh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpfSxnZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxnZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3MuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0sZ2UucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2lmKCJmb3JtYXR0ZWQiPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIG5ldyBwZShbe2NvbnRlbnQ6dGhpcy5hcmdzWzBdLHNjYWxlOm51bGwsZm9udDpudWxsLHRleHRDb2xvcjpudWxsfV0pLnNlcmlhbGl6ZSgpO2lmKCJyZXNvbHZlZEltYWdlIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgZGUodGhpcy5hcmdzWzBdKS5zZXJpYWxpemUoKTt2YXIgdD1bInRvLSIrdGhpcy50eXBlLmtpbmRdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciB2ZT1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0seWU9ZnVuY3Rpb24oKXt0aGlzLmdsb2JhbHM9bnVsbCx0aGlzLmZlYXR1cmU9bnVsbCx0aGlzLmZlYXR1cmVTdGF0ZT1udWxsLHRoaXMuZm9ybWF0dGVkU2VjdGlvbj1udWxsLHRoaXMuX3BhcnNlQ29sb3JDYWNoZT17fSx0aGlzLmF2YWlsYWJsZUltYWdlcz1udWxsLHRoaXMuY2Fub25pY2FsPW51bGx9O3llLnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJiJpZCJpbiB0aGlzLmZlYXR1cmU/dGhpcy5mZWF0dXJlLmlkOm51bGx9LHllLnByb3RvdHlwZS5nZW9tZXRyeVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlPyJudW1iZXIiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/dmVbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LHllLnByb3RvdHlwZS5nZW9tZXRyeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJiJnZW9tZXRyeSJpbiB0aGlzLmZlYXR1cmU/dGhpcy5mZWF0dXJlLmdlb21ldHJ5Om51bGx9LHllLnByb3RvdHlwZS5jYW5vbmljYWxJRD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbH0seWUucHJvdG90eXBlLnByb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUucHJvcGVydGllc3x8e319LHllLnByb3RvdHlwZS5wYXJzZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XTtyZXR1cm4gZXx8KGU9dGhpcy5fcGFyc2VDb2xvckNhY2hlW3RdPXRlLnBhcnNlKHQpKSxlfTt2YXIgeGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWUsdGhpcy5fZXZhbHVhdGU9cix0aGlzLmFyZ3M9bn07eGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmFsdWF0ZSh0LHRoaXMuYXJncyl9LHhlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LHhlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHhlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSkpfSx4ZS5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByLG49dFswXSxpPXhlLmRlZmluaXRpb25zW25dO2lmKCFpKXJldHVybiBlLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gIicrbisnIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKTtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShpKT9pWzBdOmkudHlwZSxvPUFycmF5LmlzQXJyYXkoaSk/W1tpWzFdLGlbMl1dXTppLm92ZXJsb2FkcyxzPW8uZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSksbD1udWxsLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9ZlswXSxwPWZbMV07bD1uZXcgVWUoZS5yZWdpc3RyeSxlLnBhdGgsbnVsbCxlLnNjb3BlKTtmb3IodmFyIGQ9W10sbT0hMSxnPTE7Zzx0Lmxlbmd0aDtnKyspe3ZhciB2PXRbZ10seT1BcnJheS5pc0FycmF5KGgpP2hbZy0xXTpoLnR5cGUseD1sLnBhcnNlKHYsMStkLmxlbmd0aCx5KTtpZigheCl7bT0hMDticmVha31kLnB1c2goeCl9aWYoIW0paWYoQXJyYXkuaXNBcnJheShoKSYmaC5sZW5ndGghPT1kLmxlbmd0aClsLmVycm9yKCJFeHBlY3RlZCAiK2gubGVuZ3RoKyIgYXJndW1lbnRzLCBidXQgZm91bmQgIitkLmxlbmd0aCsiIGluc3RlYWQuIik7ZWxzZXtmb3IodmFyIGI9MDtiPGQubGVuZ3RoO2IrKyl7dmFyIF89QXJyYXkuaXNBcnJheShoKT9oW2JdOmgudHlwZSx3PWRbYl07bC5jb25jYXQoYisxKS5jaGVja1N1YnR5cGUoXyx3LnR5cGUpfWlmKDA9PT1sLmVycm9ycy5sZW5ndGgpcmV0dXJuIG5ldyB4ZShuLGEscCxkKX19aWYoMT09PXMubGVuZ3RoKShyPWUuZXJyb3JzKS5wdXNoLmFwcGx5KHIsbC5lcnJvcnMpO2Vsc2V7Zm9yKHZhciBUPShzLmxlbmd0aD9zOm8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGUscj10WzBdO3JldHVybiBlPXIsQXJyYXkuaXNBcnJheShlKT8iKCIrZS5tYXAoWHQpLmpvaW4oIiwgIikrIikiOiIoIitYdChlLnR5cGUpKyIuLi4pIn0pKS5qb2luKCIgfCAiKSxrPVtdLEE9MTtBPHQubGVuZ3RoO0ErKyl7dmFyIE09ZS5wYXJzZSh0W0FdLDEray5sZW5ndGgpO2lmKCFNKXJldHVybiBudWxsO2sucHVzaChYdChNLnR5cGUpKX1lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAiK1QrIiwgYnV0IGZvdW5kICgiK2suam9pbigiLCAiKSsiKSBpbnN0ZWFkLiIpfXJldHVybiBudWxsfSx4ZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB4ZS5kZWZpbml0aW9ucz1lLGUpdFtyXT14ZX07dmFyIGJlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9cXQsdGhpcy5sb2NhbGU9cix0aGlzLmNhc2VTZW5zaXRpdmU9dCx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZT1lfTtiZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIm9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKXJldHVybiBlLmVycm9yKCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09clsiY2FzZS1zZW5zaXRpdmUiXSYmclsiY2FzZS1zZW5zaXRpdmUiXSwxLGp0KTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSYmclsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdLDEsanQpO2lmKCFpKXJldHVybiBudWxsO3ZhciBhPW51bGw7cmV0dXJuIHIubG9jYWxlJiYhKGE9ZS5wYXJzZShyLmxvY2FsZSwxLE50KSk/bnVsbDpuZXcgYmUobixpLGEpfSxiZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlZSh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LGJlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0sYmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O2Z1bmN0aW9uIF9lKHQsZSl7dFswXT1NYXRoLm1pbih0WzBdLGVbMF0pLHRbMV09TWF0aC5taW4odFsxXSxlWzFdKSx0WzJdPU1hdGgubWF4KHRbMl0sZVswXSksdFszXT1NYXRoLm1heCh0WzNdLGVbMV0pfWZ1bmN0aW9uIHdlKHQsZSl7cmV0dXJuISh0WzBdPD1lWzBdKSYmKCEodFsyXT49ZVsyXSkmJighKHRbMV08PWVbMV0pJiYhKHRbM10+PWVbM10pKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcixuPSgxODArdFswXSkvMzYwLGk9KHI9dFsxXSwoMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtyKk1hdGguUEkvMzYwKSkpLzM2MCksYT1NYXRoLnBvdygyLGUueik7cmV0dXJuW01hdGgucm91bmQobiphKjgxOTIpLE1hdGgucm91bmQoaSphKjgxOTIpXX1mdW5jdGlvbiBrZSh0LGUscil7cmV0dXJuIGVbMV0+dFsxXSE9clsxXT50WzFdJiZ0WzBdPChyWzBdLWVbMF0pKih0WzFdLWVbMV0pLyhyWzFdLWVbMV0pK2VbMF19ZnVuY3Rpb24gQWUodCxlKXtmb3IodmFyIHIsbixpLGEsbyxzLGwsYz0hMSx1PTAsZj1lLmxlbmd0aDt1PGY7dSsrKWZvcih2YXIgaD1lW3VdLHA9MCxkPWgubGVuZ3RoO3A8ZC0xO3ArKyl7aWYocj10LG49aFtwXSxpPWhbcCsxXSxhPXZvaWQgMCxvPXZvaWQgMCxzPXZvaWQgMCxsPXZvaWQgMCxhPXJbMF0tblswXSxvPXJbMV0tblsxXSxzPXJbMF0taVswXSxsPXJbMV0taVsxXSxhKmwtcypvPT0wJiZhKnM8PTAmJm8qbDw9MClyZXR1cm4hMTtrZSh0LGhbcF0saFtwKzFdKSYmKGM9IWMpfXJldHVybiBjfWZ1bmN0aW9uIE1lKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoQWUodCxlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBTZSh0LGUscixuKXt2YXIgaT10WzBdLXJbMF0sYT10WzFdLXJbMV0sbz1lWzBdLXJbMF0scz1lWzFdLXJbMV0sbD1uWzBdLXJbMF0sYz1uWzFdLXJbMV0sdT1pKmMtbCphLGY9bypjLWwqcztyZXR1cm4gdT4wJiZmPDB8fHU8MCYmZj4wfWZ1bmN0aW9uIEVlKHQsZSxyKXtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKWZvcih2YXIgYT1pW25dLG89MDtvPGEubGVuZ3RoLTE7KytvKWlmKHM9dCxsPWUsYz1hW29dLHU9YVtvKzFdLGY9dm9pZCAwLGg9dm9pZCAwLHA9dm9pZCAwLGQ9dm9pZCAwLHA9W2xbMF0tc1swXSxsWzFdLXNbMV1dLGQ9W3VbMF0tY1swXSx1WzFdLWNbMV1dLDAhPShmPWQpWzBdKihoPXApWzFdLWZbMV0qaFswXSYmU2UocyxsLGMsdSkmJlNlKGMsdSxzLGwpKXJldHVybiEwO3ZhciBzLGwsYyx1LGYsaCxwLGQ7cmV0dXJuITF9ZnVuY3Rpb24gTGUodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighQWUodFtyXSxlKSlyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoLTE7KytuKWlmKEVlKHRbbl0sdFtuKzFdLGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIENlKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoTGUodCxlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQZSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPVtdLG89MDtvPHRbaV0ubGVuZ3RoO28rKyl7dmFyIHM9VGUodFtpXVtvXSxyKTtfZShlLHMpLGEucHVzaChzKX1uLnB1c2goYSl9cmV0dXJuIG59ZnVuY3Rpb24gSWUodCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVBlKHRbaV0sZSxyKTtuLnB1c2goYSl9cmV0dXJuIG59ZnVuY3Rpb24gT2UodCxlLHIsbil7aWYodFswXTxyWzBdfHx0WzBdPnJbMl0pe3ZhciBpPS41Km4sYT10WzBdLXJbMF0+aT8tbjpyWzBdLXRbMF0+aT9uOjA7MD09PWEmJihhPXRbMF0tclsyXT5pPy1uOnJbMl0tdFswXT5pP246MCksdFswXSs9YX1fZShlLHQpfWZ1bmN0aW9uIHplKHQsZSxyLG4pe2Zvcih2YXIgaT04MTkyKk1hdGgucG93KDIsbi56KSxhPVs4MTkyKm4ueCw4MTkyKm4ueV0sbz1bXSxzPTAsbD10O3M8bC5sZW5ndGg7cys9MSlmb3IodmFyIGM9MCx1PWxbc107Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9W2YueCthWzBdLGYueSthWzFdXTtPZShoLGUscixpKSxvLnB1c2goaCl9cmV0dXJuIG99ZnVuY3Rpb24gRGUodCxlLHIsbil7Zm9yKHZhciBpLGE9ODE5MipNYXRoLnBvdygyLG4ueiksbz1bODE5MipuLngsODE5MipuLnldLHM9W10sbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe2Zvcih2YXIgdT1bXSxmPTAsaD1jW2xdO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXSxkPVtwLngrb1swXSxwLnkrb1sxXV07X2UoZSxkKSx1LnB1c2goZCl9cy5wdXNoKHUpfWlmKGVbMl0tZVswXTw9YS8yKXsoaT1lKVswXT1pWzFdPTEvMCxpWzJdPWlbM109LTEvMDtmb3IodmFyIG09MCxnPXM7bTxnLmxlbmd0aDttKz0xKWZvcih2YXIgdj0wLHk9Z1ttXTt2PHkubGVuZ3RoO3YrPTEpe09lKHlbdl0sZSxyLGEpfX1yZXR1cm4gc312YXIgUmU9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9anQsdGhpcy5nZW9qc29uPXQsdGhpcy5nZW9tZXRyaWVzPWV9O2Z1bmN0aW9uIEZlKHQpe2lmKHQgaW5zdGFuY2VvZiB4ZSl7aWYoImdldCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJmZWF0dXJlLXN0YXRlIj09PXQubmFtZSlyZXR1cm4hMTtpZigiaGFzIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoInByb3BlcnRpZXMiPT09dC5uYW1lfHwiZ2VvbWV0cnktdHlwZSI9PT10Lm5hbWV8fCJpZCI9PT10Lm5hbWUpcmV0dXJuITE7aWYoL15maWx0ZXItLy50ZXN0KHQubmFtZSkpcmV0dXJuITF9aWYodCBpbnN0YW5jZW9mIFJlKXJldHVybiExO3ZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ZSYmIUZlKHQpJiYoZT0hMSl9KSksZX1mdW5jdGlvbiBCZSh0KXtpZih0IGluc3RhbmNlb2YgeGUmJiJmZWF0dXJlLXN0YXRlIj09PXQubmFtZSlyZXR1cm4hMTt2YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UmJiFCZSh0KSYmKGU9ITEpfSkpLGV9ZnVuY3Rpb24gTmUodCxlKXtpZih0IGluc3RhbmNlb2YgeGUmJmUuaW5kZXhPZih0Lm5hbWUpPj0wKXJldHVybiExO3ZhciByPSEwO3JldHVybiB0LmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ciYmIU5lKHQsZSkmJihyPSExKX0pKSxyfVJlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCInd2l0aGluJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKG9lKHRbMV0pKXt2YXIgcj10WzFdO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT1yLnR5cGUpZm9yKHZhciBuPTA7bjxyLmZlYXR1cmVzLmxlbmd0aDsrK24pe3ZhciBpPXIuZmVhdHVyZXNbbl0uZ2VvbWV0cnkudHlwZTtpZigiUG9seWdvbiI9PT1pfHwiTXVsdGlQb2x5Z29uIj09PWkpcmV0dXJuIG5ldyBSZShyLHIuZmVhdHVyZXNbbl0uZ2VvbWV0cnkpfWVsc2UgaWYoIkZlYXR1cmUiPT09ci50eXBlKXt2YXIgYT1yLmdlb21ldHJ5LnR5cGU7aWYoIlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hKXJldHVybiBuZXcgUmUocixyLmdlb21ldHJ5KX1lbHNlIGlmKCJQb2x5Z29uIj09PXIudHlwZXx8Ik11bHRpUG9seWdvbiI9PT1yLnR5cGUpcmV0dXJuIG5ldyBSZShyLHIpfXJldHVybiBlLmVycm9yKCInd2l0aGluJyBleHByZXNzaW9uIHJlcXVpcmVzIHZhbGlkIGdlb2pzb24gb2JqZWN0IHRoYXQgY29udGFpbnMgcG9seWdvbiBnZW9tZXRyeSB0eXBlLiIpfSxSZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYobnVsbCE9dC5nZW9tZXRyeSgpJiZudWxsIT10LmNhbm9uaWNhbElEKCkpe2lmKCJQb2ludCI9PT10Lmdlb21ldHJ5VHlwZSgpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVsxLzAsMS8wLC0xLzAsLTEvMF0sbj1bMS8wLDEvMCwtMS8wLC0xLzBdLGk9dC5jYW5vbmljYWxJRCgpO2lmKCJQb2x5Z29uIj09PWUudHlwZSl7dmFyIGE9UGUoZS5jb29yZGluYXRlcyxuLGkpLG89emUodC5nZW9tZXRyeSgpLHIsbixpKTtpZighd2UocixuKSlyZXR1cm4hMTtmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXtpZighQWUobFtzXSxhKSlyZXR1cm4hMX19aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUllKGUuY29vcmRpbmF0ZXMsbixpKSx1PXplKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXdlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBmPTAsaD11O2Y8aC5sZW5ndGg7Zis9MSl7aWYoIU1lKGhbZl0sYykpcmV0dXJuITF9fXJldHVybiEwfSh0LHRoaXMuZ2VvbWV0cmllcyk7aWYoIkxpbmVTdHJpbmciPT09dC5nZW9tZXRyeVR5cGUoKSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1bMS8wLDEvMCwtMS8wLC0xLzBdLG49WzEvMCwxLzAsLTEvMCwtMS8wXSxpPXQuY2Fub25pY2FsSUQoKTtpZigiUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBhPVBlKGUuY29vcmRpbmF0ZXMsbixpKSxvPURlKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXdlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7aWYoIUxlKGxbc10sYSkpcmV0dXJuITF9fWlmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXt2YXIgYz1JZShlLmNvb3JkaW5hdGVzLG4saSksdT1EZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgZj0wLGg9dTtmPGgubGVuZ3RoO2YrPTEpe2lmKCFDZShoW2ZdLGMpKXJldHVybiExfX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpfXJldHVybiExfSxSZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxSZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxSZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ3aXRoaW4iLHRoaXMuZ2VvanNvbl19O3ZhciBqZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07amUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgdFsxXSlyZXR1cm4gZS5lcnJvcigiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC4iKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgamUocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSAiJytyKyciLiBNYWtlIHN1cmUgIicrcisnIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgImxldCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0samUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0samUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30samUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0samUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsidmFyIix0aGlzLm5hbWVdfTt2YXIgVWU9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1bXSksdm9pZCAwPT09biYmKG49bmV3IFJ0KSx2b2lkIDA9PT1pJiYoaT1bXSksdGhpcy5yZWdpc3RyeT10LHRoaXMucGF0aD1lLHRoaXMua2V5PWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWksdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gVmUodCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoLTEsYT0wLG89aSxzPTA7YTw9bzspaWYocj10W3M9TWF0aC5mbG9vcigoYStvKS8yKV0sbj10W3MrMV0scjw9ZSl7aWYocz09PWl8fGU8bilyZXR1cm4gczthPXMrMX1lbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgdWUoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTtvPXMtMX1yZXR1cm4gMH1VZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LFVlLnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4iYXNzZXJ0Ij09PXI/bmV3IGhlKGUsW3RdKToiY29lcmNlIj09PXI/bmV3IGdlKGUsW3RdKTp0fWlmKG51bGwhPT10JiYic3RyaW5nIiE9dHlwZW9mIHQmJiJib29sZWFuIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdHx8KHQ9WyJsaXRlcmFsIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFtdXS4nKTt2YXIgbj10WzBdO2lmKCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gdGhpcy5lcnJvcigiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBuKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBpPXRoaXMucmVnaXN0cnlbbl07aWYoaSl7dmFyIGE9aS5wYXJzZSh0LHRoaXMpO2lmKCFhKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgbz10aGlzLmV4cGVjdGVkVHlwZSxzPWEudHlwZTtpZigic3RyaW5nIiE9PW8ua2luZCYmIm51bWJlciIhPT1vLmtpbmQmJiJib29sZWFuIiE9PW8ua2luZCYmIm9iamVjdCIhPT1vLmtpbmQmJiJhcnJheSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQpaWYoImNvbG9yIiE9PW8ua2luZCYmImZvcm1hdHRlZCIhPT1vLmtpbmQmJiJyZXNvbHZlZEltYWdlIiE9PW8ua2luZHx8InZhbHVlIiE9PXMua2luZCYmInN0cmluZyIhPT1zLmtpbmQpe2lmKHRoaXMuY2hlY2tTdWJ0eXBlKG8scykpcmV0dXJuIG51bGx9ZWxzZSBhPXIoYSxvLGUudHlwZUFubm90YXRpb258fCJjb2VyY2UiKTtlbHNlIGE9cihhLG8sZS50eXBlQW5ub3RhdGlvbnx8ImFzc2VydCIpfWlmKCEoYSBpbnN0YW5jZW9mIGNlKSYmInJlc29sdmVkSW1hZ2UiIT09YS50eXBlLmtpbmQmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIGplKXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgeGUmJiJlcnJvciI9PT1lLm5hbWUpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIGJlKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBSZSlyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgZ2V8fGUgaW5zdGFuY2VvZiBoZSxuPSEwO2lmKGUuZWFjaENoaWxkKChmdW5jdGlvbihlKXtuPXI/biYmdChlKTpuJiZlIGluc3RhbmNlb2YgY2V9KSksIW4pcmV0dXJuITE7cmV0dXJuIEZlKGUpJiZOZShlLFsiem9vbSIsImhlYXRtYXAtZGVuc2l0eSIsImxpbmUtcHJvZ3Jlc3MiLCJhY2N1bXVsYXRlZCIsImlzLXN1cHBvcnRlZC1zY3JpcHQiXSl9KGEpKXt2YXIgbD1uZXcgeWU7dHJ5e2E9bmV3IGNlKGEudHlwZSxhLmV2YWx1YXRlKGwpKX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5lcnJvcih0Lm1lc3NhZ2UpLG51bGx9fXJldHVybiBhfXJldHVybiB0aGlzLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gIicrbisnIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKX1yZXR1cm4gdm9pZCAwPT09dD90aGlzLmVycm9yKCIndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLiIpOiJvYmplY3QiPT10eXBlb2YgdD90aGlzLmVycm9yKCdCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFsibGl0ZXJhbCIsIHsuLi59XSBpbnN0ZWFkLicpOnRoaXMuZXJyb3IoIkV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgIit0eXBlb2YgdCsiIGluc3RlYWQuIil9LFVlLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSJudW1iZXIiPT10eXBlb2YgdD90aGlzLnBhdGguY29uY2F0KHQpOnRoaXMucGF0aCxpPXI/dGhpcy5zY29wZS5jb25jYXQocik6dGhpcy5zY29wZTtyZXR1cm4gbmV3IFVlKHRoaXMucmVnaXN0cnksbixlfHxudWxsLGksdGhpcy5lcnJvcnMpfSxVZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj0iIit0aGlzLmtleStlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkpLmpvaW4oIiIpO3RoaXMuZXJyb3JzLnB1c2gobmV3IER0KG4sdCkpfSxVZS5wcm90b3R5cGUuY2hlY2tTdWJ0eXBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9SnQodCxlKTtyZXR1cm4gciYmdGhpcy5lcnJvcihyKSxyfTt2YXIgSGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBuPTAsaT1yO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWFbMF0scz1hWzFdO3RoaXMubGFiZWxzLnB1c2gobyksdGhpcy5vdXRwdXRzLnB1c2gocyl9fTtmdW5jdGlvbiBxZSh0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfUhlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEJ0KTtpZighcilyZXR1cm4gbnVsbDt2YXIgbj1bXSxpPW51bGw7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoaT1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBhPTE7YTx0Lmxlbmd0aDthKz0yKXt2YXIgbz0xPT09YT8tMS8wOnRbYV0scz10W2ErMV0sbD1hLGM9YSsxO2lmKCJudW1iZXIiIT10eXBlb2YgbylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAic3RlcCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxsKTtpZihuLmxlbmd0aCYmbltuLmxlbmd0aC0xXVswXT49bylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAic3RlcCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxsKTt2YXIgdT1lLnBhcnNlKHMsYyxpKTtpZighdSlyZXR1cm4gbnVsbDtpPWl8fHUudHlwZSxuLnB1c2goW28sdV0pfXJldHVybiBuZXcgSGUoaSxyLG4pfSxIZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtyZXR1cm4gbj49ZVtpLTFdP3JbaS0xXS5ldmFsdWF0ZSh0KTpyW1ZlKGUsbildLmV2YWx1YXRlKHQpfSxIZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXt0KHJbZV0pfX0sSGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRwdXRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LEhlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJzdGVwIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKWU+MCYmdC5wdXNoKHRoaXMubGFiZWxzW2VdKSx0LnB1c2godGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIEdlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLG51bWJlcjpxZSxjb2xvcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyB0ZShxZSh0LnIsZS5yLHIpLHFlKHQuZyxlLmcscikscWUodC5iLGUuYixyKSxxZSh0LmEsZS5hLHIpKX0sYXJyYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gcWUodCxlW25dLHIpfSkpfX0pLFllPTYvMjksV2U9MypZZSpZZSxYZT1NYXRoLlBJLzE4MCxaZT0xODAvTWF0aC5QSTtmdW5jdGlvbiBKZSh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L1dlKzQvMjl9ZnVuY3Rpb24gS2UodCl7cmV0dXJuIHQ+WWU/dCp0KnQ6V2UqKHQtNC8yOSl9ZnVuY3Rpb24gUWUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiAkZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB0cih0KXt2YXIgZT0kZSh0LnIpLHI9JGUodC5nKSxuPSRlKHQuYiksaT1KZSgoLjQxMjQ1NjQqZSsuMzU3NTc2MSpyKy4xODA0Mzc1Km4pLy45NTA0NyksYT1KZSgoLjIxMjY3MjkqZSsuNzE1MTUyMipyKy4wNzIxNzUqbikvMSk7cmV0dXJue2w6MTE2KmEtMTYsYTo1MDAqKGktYSksYjoyMDAqKGEtSmUoKC4wMTkzMzM5KmUrLjExOTE5MipyKy45NTAzMDQxKm4pLzEuMDg4ODMpKSxhbHBoYTp0LmF9fWZ1bmN0aW9uIGVyKHQpe3ZhciBlPSh0LmwrMTYpLzExNixyPWlzTmFOKHQuYSk/ZTplK3QuYS81MDAsbj1pc05hTih0LmIpP2U6ZS10LmIvMjAwO3JldHVybiBlPTEqS2UoZSkscj0uOTUwNDcqS2Uociksbj0xLjA4ODgzKktlKG4pLG5ldyB0ZShRZSgzLjI0MDQ1NDIqci0xLjUzNzEzODUqZS0uNDk4NTMxNCpuKSxRZSgtLjk2OTI2NipyKzEuODc2MDEwOCplKy4wNDE1NTYqbiksUWUoLjA1NTY0MzQqci0uMjA0MDI1OSplKzEuMDU3MjI1MipuKSx0LmFscGhhKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49ZS10O3JldHVybiB0K3IqKG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bil9dmFyIG5yPXtmb3J3YXJkOnRyLHJldmVyc2U6ZXIsaW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntsOnFlKHQubCxlLmwsciksYTpxZSh0LmEsZS5hLHIpLGI6cWUodC5iLGUuYixyKSxhbHBoYTpxZSh0LmFscGhhLGUuYWxwaGEscil9fX0saXI9e2ZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIGU9dHIodCkscj1lLmwsbj1lLmEsaT1lLmIsYT1NYXRoLmF0YW4yKGksbikqWmU7cmV0dXJue2g6YTwwP2ErMzYwOmEsYzpNYXRoLnNxcnQobipuK2kqaSksbDpyLGFscGhhOnQuYX19LHJldmVyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5oKlhlLHI9dC5jO3JldHVybiBlcih7bDp0LmwsYTpNYXRoLmNvcyhlKSpyLGI6TWF0aC5zaW4oZSkqcixhbHBoYTp0LmFscGhhfSl9LGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57aDpycih0LmgsZS5oLHIpLGM6cWUodC5jLGUuYyxyKSxsOnFlKHQubCxlLmwsciksYWxwaGE6cWUodC5hbHBoYSxlLmFscGhhLHIpfX19LGFyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGxhYjpucixoY2w6aXJ9KSxvcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudHlwZT10LHRoaXMub3BlcmF0b3I9ZSx0aGlzLmludGVycG9sYXRpb249cix0aGlzLmlucHV0PW4sdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgYT0wLG89aTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zWzBdLGM9c1sxXTt0aGlzLmxhYmVscy5wdXNoKGwpLHRoaXMub3V0cHV0cy5wdXNoKGMpfX07ZnVuY3Rpb24gc3IodCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX1vci5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPTA7aWYoImV4cG9uZW50aWFsIj09PXQubmFtZSlhPXNyKGUsdC5iYXNlLG4saSk7ZWxzZSBpZigibGluZWFyIj09PXQubmFtZSlhPXNyKGUsMSxuLGkpO2Vsc2UgaWYoImN1YmljLWJlemllciI9PT10Lm5hbWUpe3ZhciBvPXQuY29udHJvbFBvaW50czthPW5ldyByKG9bMF0sb1sxXSxvWzJdLG9bM10pLnNvbHZlKHNyKGUsMSxuLGkpKX1yZXR1cm4gYX0sb3IucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10LnNsaWNlKDMpO2lmKCFBcnJheS5pc0FycmF5KG4pfHwwPT09bi5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGludGVycG9sYXRpb24gdHlwZSBleHByZXNzaW9uLiIsMSk7aWYoImxpbmVhciI9PT1uWzBdKW49e25hbWU6ImxpbmVhciJ9O2Vsc2UgaWYoImV4cG9uZW50aWFsIj09PW5bMF0pe3ZhciBvPW5bMV07aWYoIm51bWJlciIhPXR5cGVvZiBvKXJldHVybiBlLmVycm9yKCJFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLiIsMSwxKTtuPXtuYW1lOiJleHBvbmVudGlhbCIsYmFzZTpvfX1lbHNle2lmKCJjdWJpYy1iZXppZXIiIT09blswXSlyZXR1cm4gZS5lcnJvcigiVW5rbm93biBpbnRlcnBvbGF0aW9uIHR5cGUgIitTdHJpbmcoblswXSksMSwwKTt2YXIgcz1uLnNsaWNlKDEpO2lmKDQhPT1zLmxlbmd0aHx8cy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8dD4xfSkpKXJldHVybiBlLmVycm9yKCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4iLDEpO249e25hbWU6ImN1YmljLWJlemllciIsY29udHJvbFBvaW50czpzfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShpPWUucGFyc2UoaSwyLEJ0KSkpcmV0dXJuIG51bGw7dmFyIGw9W10sYz1udWxsOyJpbnRlcnBvbGF0ZS1oY2wiPT09cnx8ImludGVycG9sYXRlLWxhYiI9PT1yP2M9VXQ6ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYz1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kz0yKXt2YXIgZj1hW3VdLGg9YVt1KzFdLHA9dSszLGQ9dSs0O2lmKCJudW1iZXIiIT10eXBlb2YgZilyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicscCk7aWYobC5sZW5ndGgmJmxbbC5sZW5ndGgtMV1bMF0+PWYpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLHApO3ZhciBtPWUucGFyc2UoaCxkLGMpO2lmKCFtKXJldHVybiBudWxsO2M9Y3x8bS50eXBlLGwucHVzaChbZixtXSl9cmV0dXJuIm51bWJlciI9PT1jLmtpbmR8fCJjb2xvciI9PT1jLmtpbmR8fCJhcnJheSI9PT1jLmtpbmQmJiJudW1iZXIiPT09Yy5pdGVtVHlwZS5raW5kJiYibnVtYmVyIj09dHlwZW9mIGMuTj9uZXcgb3IoYyxyLG4saSxsKTplLmVycm9yKCJUeXBlICIrWHQoYykrIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuIil9LG9yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO2lmKG4+PWVbaS0xXSlyZXR1cm4gcltpLTFdLmV2YWx1YXRlKHQpO3ZhciBhPVZlKGUsbiksbz1lW2FdLHM9ZVthKzFdLGw9b3IuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9clthXS5ldmFsdWF0ZSh0KSx1PXJbYSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4iaW50ZXJwb2xhdGUiPT09dGhpcy5vcGVyYXRvcj9HZVt0aGlzLnR5cGUua2luZC50b0xvd2VyQ2FzZSgpXShjLHUsbCk6ImludGVycG9sYXRlLWhjbCI9PT10aGlzLm9wZXJhdG9yP2lyLnJldmVyc2UoaXIuaW50ZXJwb2xhdGUoaXIuZm9yd2FyZChjKSxpci5mb3J3YXJkKHUpLGwpKTpuci5yZXZlcnNlKG5yLmludGVycG9sYXRlKG5yLmZvcndhcmQoYyksbnIuZm9yd2FyZCh1KSxsKSl9LG9yLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpe3QocltlXSl9fSxvci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0sb3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0O3Q9ImxpbmVhciI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT9bImxpbmVhciJdOiJleHBvbmVudGlhbCI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT8xPT09dGhpcy5pbnRlcnBvbGF0aW9uLmJhc2U/WyJsaW5lYXIiXTpbImV4cG9uZW50aWFsIix0aGlzLmludGVycG9sYXRpb24uYmFzZV06WyJjdWJpYy1iZXppZXIiXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO2Zvcih2YXIgZT1bdGhpcy5vcGVyYXRvcix0LHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9MDtyPHRoaXMubGFiZWxzLmxlbmd0aDtyKyspZS5wdXNoKHRoaXMubGFiZWxzW3JdLHRoaXMub3V0cHV0c1tyXS5zZXJpYWxpemUoKSk7cmV0dXJuIGV9O3ZhciBscj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtsci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj1udWxsLG49ZS5leHBlY3RlZFR5cGU7biYmInZhbHVlIiE9PW4ua2luZCYmKHI9bik7Zm9yKHZhciBpPVtdLGE9MCxvPXQuc2xpY2UoMSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9ZS5wYXJzZShzLDEraS5sZW5ndGgscix2b2lkIDAse3R5cGVBbm5vdGF0aW9uOiJvbWl0In0pO2lmKCFsKXJldHVybiBudWxsO3I9cnx8bC50eXBlLGkucHVzaChsKX12YXIgYz1uJiZpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBKdChuLHQudHlwZSl9KSk7cmV0dXJuIG5ldyBscihjP0h0OnIsaSl9LGxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1udWxsLG49MCxpPTAsYT10aGlzLmFyZ3M7aTxhLmxlbmd0aDtpKz0xKXtpZihuKyssKHI9YVtpXS5ldmFsdWF0ZSh0KSkmJnIgaW5zdGFuY2VvZiBpZSYmIXIuYXZhaWxhYmxlJiYoZXx8KGU9ci5uYW1lKSxyPW51bGwsbj09PXRoaXMuYXJncy5sZW5ndGgmJihyPWUpKSxudWxsIT09cilicmVha31yZXR1cm4gcn0sbHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sbHIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LGxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImNvYWxlc2NlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIGNyPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLmJpbmRpbmdzPVtdLmNvbmNhdCh0KSx0aGlzLnJlc3VsdD1lfTtjci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzdWx0LmV2YWx1YXRlKHQpfSxjci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3QocltlXVsxXSl9dCh0aGlzLnJlc3VsdCl9LGNyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7Zm9yKHZhciByPVtdLG49MTtuPHQubGVuZ3RoLTE7bis9Mil7dmFyIGk9dFtuXTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHN0cmluZywgYnV0IGZvdW5kICIrdHlwZW9mIGkrIiBpbnN0ZWFkLiIsbik7aWYoL1teYS16QS1aMC05X10vLnRlc3QoaSkpcmV0dXJuIGUuZXJyb3IoIlZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy4iLG4pO3ZhciBhPWUucGFyc2UodFtuKzFdLG4rMSk7aWYoIWEpcmV0dXJuIG51bGw7ci5wdXNoKFtpLGFdKX12YXIgbz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxlLmV4cGVjdGVkVHlwZSxyKTtyZXR1cm4gbz9uZXcgY3IocixvKTpudWxsfSxjci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlc3VsdC5vdXRwdXREZWZpbmVkKCl9LGNyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJsZXQiXSxlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QucHVzaChpLGEuc2VyaWFsaXplKCkpfXJldHVybiB0LnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpLHR9O3ZhciB1cj1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbmRleD1lLHRoaXMuaW5wdXQ9cn07dXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEJ0KSxuPWUucGFyc2UodFsyXSwyLFd0KGUuZXhwZWN0ZWRUeXBlfHxIdCkpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDt2YXIgaT1uLnR5cGU7cmV0dXJuIG5ldyB1cihpLml0ZW1UeXBlLHIsbil9LHVyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IHVlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA8IDAuIik7aWYoZT49ci5sZW5ndGgpdGhyb3cgbmV3IHVlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA+ICIrKHIubGVuZ3RoLTEpKyIuIik7aWYoZSE9PU1hdGguZmxvb3IoZSkpdGhyb3cgbmV3IHVlKCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAiK2UrIiBpbnN0ZWFkLiIpO3JldHVybiByW2VdfSx1ci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sdXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBmcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1qdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZX07ZnIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEh0KSxuPWUucGFyc2UodFsyXSwyLEh0KTtyZXR1cm4gciYmbj9LdChyLnR5cGUsW2p0LE50LEJ0LEZ0LEh0XSk/bmV3IGZyKHIsbik6ZS5lcnJvcigiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitYdChyLnR5cGUpKyIgaW5zdGVhZCIpOm51bGx9LGZyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm5lZWRsZS5ldmFsdWF0ZSh0KSxyPXRoaXMuaGF5c3RhY2suZXZhbHVhdGUodCk7aWYoIXIpcmV0dXJuITE7aWYoIVF0KGUsWyJib29sZWFuIiwic3RyaW5nIiwibnVtYmVyIiwibnVsbCJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrWHQoc2UoZSkpKyIgaW5zdGVhZC4iKTtpZighUXQocixbInN0cmluZyIsImFycmF5Il0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitYdChzZShyKSkrIiBpbnN0ZWFkLiIpO3JldHVybiByLmluZGV4T2YoZSk+PTB9LGZyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKX0sZnIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW4iLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldfTt2YXIgaHI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1CdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZSx0aGlzLmZyb21JbmRleD1yfTtoci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPD0yfHx0Lmxlbmd0aD49NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxIdCksbj1lLnBhcnNlKHRbMl0sMixIdCk7aWYoIXJ8fCFuKXJldHVybiBudWxsO2lmKCFLdChyLnR5cGUsW2p0LE50LEJ0LEZ0LEh0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQiKTtpZig0PT09dC5sZW5ndGgpe3ZhciBpPWUucGFyc2UodFszXSwzLEJ0KTtyZXR1cm4gaT9uZXcgaHIocixuLGkpOm51bGx9cmV0dXJuIG5ldyBocihyLG4pfSxoci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5uZWVkbGUuZXZhbHVhdGUodCkscj10aGlzLmhheXN0YWNrLmV2YWx1YXRlKHQpO2lmKCFRdChlLFsiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsIm51bGwiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHNlKGUpKSsiIGluc3RlYWQuIik7aWYoIVF0KHIsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoc2UocikpKyIgaW5zdGVhZC4iKTtpZih0aGlzLmZyb21JbmRleCl7dmFyIG49dGhpcy5mcm9tSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIHIuaW5kZXhPZihlLG4pfXJldHVybiByLmluZGV4T2YoZSl9LGhyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKSx0aGlzLmZyb21JbmRleCYmdCh0aGlzLmZyb21JbmRleCl9LGhyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGhyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZyb21JbmRleCYmdm9pZCAwIT09dGhpcy5mcm9tSW5kZXgpe3ZhciB0PXRoaXMuZnJvbUluZGV4LnNlcmlhbGl6ZSgpO3JldHVyblsiaW5kZXgtb2YiLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCksdF19cmV0dXJuWyJpbmRleC1vZiIsdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKV19O3ZhciBwcj1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O3ByLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGY9czt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07aWYoIm51bWJlciIhPXR5cGVvZiBoJiYic3RyaW5nIiE9dHlwZW9mIGgpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmFicyhoKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGgmJk1hdGguZmxvb3IoaCkhPT1oKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLHNlKGgpKSlyZXR1cm4gbnVsbH1lbHNlIHI9c2UoaCk7aWYodm9pZCAwIT09aVtTdHJpbmcoaCldKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2lbU3RyaW5nKGgpXT1hLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxhLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEsSHQpO2lmKCFkKXJldHVybiBudWxsO3ZhciBtPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBtPyJ2YWx1ZSIhPT1kLnR5cGUua2luZCYmZS5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKHIsZC50eXBlKT9udWxsOm5ldyBwcihyLG4sZCxpLGEsbSk6bnVsbH0scHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKHNlKGUpPT09dGhpcy5pbnB1dFR5cGUmJnRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxwci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LHByLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpJiZ0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCl9LHByLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVsibWF0Y2giLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3ZvaWQgMD09PShmPW5bdGhpcy5jYXNlc1tvXV0pPyhuW3RoaXMuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdGhpcy5jYXNlc1tvXSxbb11dKSk6cltmXVsxXS5wdXNoKG8pfWZvcih2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXQuaW5wdXRUeXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGw9MCxjPXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9dVswXSxoPXVbMV07MT09PWgubGVuZ3RoP2UucHVzaChzKGhbMF0pKTplLnB1c2goaC5tYXAocykpLGUucHVzaCh0aGlzLm91dHB1dHNbb3V0cHV0SW5kZXgkMV0uc2VyaWFsaXplKCkpfXJldHVybiBlLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpLGV9O3ZhciBkcj1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5icmFuY2hlcz1lLHRoaXMub3RoZXJ3aXNlPXJ9O2RyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHI7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYocj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBuPVtdLGk9MTtpPHQubGVuZ3RoLTE7aSs9Mil7dmFyIGE9ZS5wYXJzZSh0W2ldLGksanQpO2lmKCFhKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFtpKzFdLGkrMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2Esb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBkcihyLG4scyk6bnVsbH0sZHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTtpZihpLmV2YWx1YXRlKHQpKXJldHVybiBhLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sZHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dChpKSx0KGEpfXQodGhpcy5vdGhlcndpc2UpfSxkci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJyYW5jaGVzLmV2ZXJ5KChmdW5jdGlvbih0KXt0WzBdO3JldHVybiB0WzFdLm91dHB1dERlZmluZWQoKX0pKSYmdGhpcy5vdGhlcndpc2Uub3V0cHV0RGVmaW5lZCgpfSxkci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjYXNlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIG1yPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmJlZ2luSW5kZXg9cix0aGlzLmVuZEluZGV4PW59O2Z1bmN0aW9uIGdyKHQsZSl7cmV0dXJuIj09Ij09PXR8fCIhPSI9PT10PyJib29sZWFuIj09PWUua2luZHx8InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwibnVsbCI9PT1lLmtpbmR8fCJ2YWx1ZSI9PT1lLmtpbmQ6InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIHZyKHQsZSxyLG4pe3JldHVybiAwPT09bi5jb21wYXJlKGUscil9ZnVuY3Rpb24geXIodCxlLHIpe3ZhciBuPSI9PSIhPT10JiYiIT0iIT09dDtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsZSxyKXt0aGlzLnR5cGU9anQsdGhpcy5saHM9dCx0aGlzLnJocz1lLHRoaXMuY29sbGF0b3I9cix0aGlzLmhhc1VudHlwZWRBcmd1bWVudD0idmFsdWUiPT09dC50eXBlLmtpbmR8fCJ2YWx1ZSI9PT1lLnR5cGUua2luZH1yZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aCYmNCE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiIpO3ZhciByPXRbMF0sYT1lLnBhcnNlKHRbMV0sMSxIdCk7aWYoIWEpcmV0dXJuIG51bGw7aWYoIWdyKHIsYS50eXBlKSlyZXR1cm4gZS5jb25jYXQoMSkuZXJyb3IoJyInK3IrIlwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICciK1h0KGEudHlwZSkrIicuIik7dmFyIG89ZS5wYXJzZSh0WzJdLDIsSHQpO2lmKCFvKXJldHVybiBudWxsO2lmKCFncihyLG8udHlwZSkpcmV0dXJuIGUuY29uY2F0KDIpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitYdChvLnR5cGUpKyInLiIpO2lmKGEudHlwZS5raW5kIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgY29tcGFyZSB0eXBlcyAnIitYdChhLnR5cGUpKyInIGFuZCAnIitYdChvLnR5cGUpKyInLiIpO24mJigidmFsdWUiPT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZD9hPW5ldyBoZShvLnR5cGUsW2FdKToidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSI9PT1vLnR5cGUua2luZCYmKG89bmV3IGhlKGEudHlwZSxbb10pKSk7dmFyIHM9bnVsbDtpZig0PT09dC5sZW5ndGgpe2lmKCJzdHJpbmciIT09YS50eXBlLmtpbmQmJiJzdHJpbmciIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgdXNlIGNvbGxhdG9yIHRvIGNvbXBhcmUgbm9uLXN0cmluZyB0eXBlcy4iKTtpZighKHM9ZS5wYXJzZSh0WzNdLDMscXQpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYSxvLHMpfSxpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihpKXt2YXIgYT10aGlzLmxocy5ldmFsdWF0ZShpKSxvPXRoaXMucmhzLmV2YWx1YXRlKGkpO2lmKG4mJnRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KXt2YXIgcz1zZShhKSxsPXNlKG8pO2lmKHMua2luZCE9PWwua2luZHx8InN0cmluZyIhPT1zLmtpbmQmJiJudW1iZXIiIT09cy5raW5kKXRocm93IG5ldyB1ZSgnRXhwZWN0ZWQgYXJndW1lbnRzIGZvciAiJyt0KyciIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgnK3Mua2luZCsiLCAiK2wua2luZCsiKSBpbnN0ZWFkLiIpfWlmKHRoaXMuY29sbGF0b3ImJiFuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIGM9c2UoYSksdT1zZShvKTtpZigic3RyaW5nIiE9PWMua2luZHx8InN0cmluZyIhPT11LmtpbmQpcmV0dXJuIGUoaSxhLG8pfXJldHVybiB0aGlzLmNvbGxhdG9yP3IoaSxhLG8sdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShpKSk6ZShpLGEsbyl9LGkucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubGhzKSx0KHRoaXMucmhzKSx0aGlzLmNvbGxhdG9yJiZ0KHRoaXMuY29sbGF0b3IpfSxpLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGkucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPVt0XTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnNlcmlhbGl6ZSgpKX0pKSxlfSxpfSgpfW1yLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8PTJ8fHQubGVuZ3RoPj01KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAzIG9yIDQgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEh0KSxuPWUucGFyc2UodFsyXSwyLEJ0KTtpZighcnx8IW4pcmV0dXJuIG51bGw7aWYoIUt0KHIudHlwZSxbV3QoSHQpLE50LEh0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitYdChyLnR5cGUpKyIgaW5zdGVhZCIpO2lmKDQ9PT10Lmxlbmd0aCl7dmFyIGk9ZS5wYXJzZSh0WzNdLDMsQnQpO3JldHVybiBpP25ldyBtcihyLnR5cGUscixuLGkpOm51bGx9cmV0dXJuIG5ldyBtcihyLnR5cGUscixuKX0sbXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj10aGlzLmJlZ2luSW5kZXguZXZhbHVhdGUodCk7aWYoIVF0KGUsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpO2lmKHRoaXMuZW5kSW5kZXgpe3ZhciBuPXRoaXMuZW5kSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIGUuc2xpY2UocixuKX1yZXR1cm4gZS5zbGljZShyKX0sbXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHQodGhpcy5iZWdpbkluZGV4KSx0aGlzLmVuZEluZGV4JiZ0KHRoaXMuZW5kSW5kZXgpfSxtci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxtci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5lbmRJbmRleCYmdm9pZCAwIT09dGhpcy5lbmRJbmRleCl7dmFyIHQ9dGhpcy5lbmRJbmRleC5zZXJpYWxpemUoKTtyZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKSx0XX1yZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKV19O3ZhciB4cj15cigiPT0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT1yfSksdnIpLGJyPXlyKCIhPSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSE9PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIXZyKDAsZSxyLG4pfSkpLF9yPXlyKCI8IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPDB9KSksd3I9eXIoIj4iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+MH0pKSxUcj15cigiPD0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPD0wfSkpLGtyPXlyKCI+PSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT49cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+PTB9KSksQXI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9TnQsdGhpcy5udW1iZXI9dCx0aGlzLmxvY2FsZT1lLHRoaXMuY3VycmVuY3k9cix0aGlzLm1pbkZyYWN0aW9uRGlnaXRzPW4sdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz1pfTtBci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxCdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49dFsyXTtpZigib2JqZWN0IiE9dHlwZW9mIG58fEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUuZXJyb3IoIk51bWJlckZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBpPW51bGw7aWYobi5sb2NhbGUmJiEoaT1lLnBhcnNlKG4ubG9jYWxlLDEsTnQpKSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO2lmKG4uY3VycmVuY3kmJiEoYT1lLnBhcnNlKG4uY3VycmVuY3ksMSxOdCkpKXJldHVybiBudWxsO3ZhciBvPW51bGw7aWYoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdJiYhKG89ZS5wYXJzZShuWyJtaW4tZnJhY3Rpb24tZGlnaXRzIl0sMSxCdCkpKXJldHVybiBudWxsO3ZhciBzPW51bGw7cmV0dXJuIG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSYmIShzPWUucGFyc2UoblsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdLDEsQnQpKT9udWxsOm5ldyBBcihyLGksYSxvLHMpfSxBci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpbXSx7c3R5bGU6dGhpcy5jdXJyZW5jeT8iY3VycmVuY3kiOiJkZWNpbWFsIixjdXJyZW5jeTp0aGlzLmN1cnJlbmN5P3RoaXMuY3VycmVuY3kuZXZhbHVhdGUodCk6dm9pZCAwLG1pbmltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1pbkZyYWN0aW9uRGlnaXRzP3RoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwLG1heGltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1heEZyYWN0aW9uRGlnaXRzP3RoaXMubWF4RnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwfSkuZm9ybWF0KHRoaXMubnVtYmVyLmV2YWx1YXRlKHQpKX0sQXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubnVtYmVyKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSksdGhpcy5jdXJyZW5jeSYmdCh0aGlzLmN1cnJlbmN5KSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWluRnJhY3Rpb25EaWdpdHMpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJnQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyl9LEFyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEFyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksdGhpcy5jdXJyZW5jeSYmKHQuY3VycmVuY3k9dGhpcy5jdXJyZW5jeS5zZXJpYWxpemUoKSksdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyYmKHRbIm1pbi1mcmFjdGlvbi1kaWdpdHMiXT10aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpKSx0aGlzLm1heEZyYWN0aW9uRGlnaXRzJiYodFsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdPXRoaXMubWF4RnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCkpLFsibnVtYmVyLWZvcm1hdCIsdGhpcy5udW1iZXIuc2VyaWFsaXplKCksdF19O3ZhciBNcj1mdW5jdGlvbih0KXt0aGlzLnR5cGU9QnQsdGhpcy5pbnB1dD10fTtNci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSk7cmV0dXJuIHI/ImFycmF5IiE9PXIudHlwZS5raW5kJiYic3RyaW5nIiE9PXIudHlwZS5raW5kJiYidmFsdWUiIT09ci50eXBlLmtpbmQ/ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK1h0KHIudHlwZSkrIiBpbnN0ZWFkLiIpOm5ldyBNcihyKTpudWxsfSxNci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubGVuZ3RoO3Rocm93IG5ldyB1ZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK1h0KHNlKGUpKSsiIGluc3RlYWQuIil9LE1yLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sTXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsibGVuZ3RoIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIFNyPXsiPT0iOnhyLCIhPSI6YnIsIj4iOndyLCI8IjpfciwiPj0iOmtyLCI8PSI6VHIsYXJyYXk6aGUsYXQ6dXIsYm9vbGVhbjpoZSxjYXNlOmRyLGNvYWxlc2NlOmxyLGNvbGxhdG9yOmJlLGZvcm1hdDpwZSxpbWFnZTpkZSxpbjpmciwiaW5kZXgtb2YiOmhyLGludGVycG9sYXRlOm9yLCJpbnRlcnBvbGF0ZS1oY2wiOm9yLCJpbnRlcnBvbGF0ZS1sYWIiOm9yLGxlbmd0aDpNcixsZXQ6Y3IsbGl0ZXJhbDpjZSxtYXRjaDpwcixudW1iZXI6aGUsIm51bWJlci1mb3JtYXQiOkFyLG9iamVjdDpoZSxzbGljZTptcixzdGVwOkhlLHN0cmluZzpoZSwidG8tYm9vbGVhbiI6Z2UsInRvLWNvbG9yIjpnZSwidG8tbnVtYmVyIjpnZSwidG8tc3RyaW5nIjpnZSx2YXI6amUsd2l0aGluOlJlfTtmdW5jdGlvbiBFcih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM107cj1yLmV2YWx1YXRlKHQpLG49bi5ldmFsdWF0ZSh0KSxpPWkuZXZhbHVhdGUodCk7dmFyIG89YT9hLmV2YWx1YXRlKHQpOjEscz1hZShyLG4saSxvKTtpZihzKXRocm93IG5ldyB1ZShzKTtyZXR1cm4gbmV3IHRlKHIvMjU1Km8sbi8yNTUqbyxpLzI1NSpvLG8pfWZ1bmN0aW9uIExyKHQsZSl7cmV0dXJuIHQgaW4gZX1mdW5jdGlvbiBDcih0LGUpe3ZhciByPWVbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDpyfWZ1bmN0aW9uIFByKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIElyKHQpe3JldHVybntyZXN1bHQ6InN1Y2Nlc3MiLHZhbHVlOnR9fWZ1bmN0aW9uIE9yKHQpe3JldHVybntyZXN1bHQ6ImVycm9yIix2YWx1ZTp0fX1mdW5jdGlvbiB6cih0KXtyZXR1cm4iZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfHwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfWZ1bmN0aW9uIERyKHQpe3JldHVybiEhdC5leHByZXNzaW9uJiZ0LmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCJ6b29tIik+LTF9ZnVuY3Rpb24gUnIodCl7cmV0dXJuISF0LmV4cHJlc3Npb24mJnQuZXhwcmVzc2lvbi5pbnRlcnBvbGF0ZWR9ZnVuY3Rpb24gRnIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/Im51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8ic3RyaW5nIjp0IGluc3RhbmNlb2YgQm9vbGVhbj8iYm9vbGVhbiI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOm51bGw9PT10PyJudWxsIjp0eXBlb2YgdH1mdW5jdGlvbiBCcih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBOcih0KXtyZXR1cm4gdH1mdW5jdGlvbiBqcih0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBVcih0LGUscixuLGkpe3JldHVybiBqcih0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gVnIodCxlLHIpe2lmKCJudW1iZXIiIT09RnIocikpcmV0dXJuIGpyKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBuPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1uKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tuLTFdWzBdKXJldHVybiB0LnN0b3BzW24tMV1bMV07dmFyIGk9VmUodC5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHIpO3JldHVybiB0LnN0b3BzW2ldWzFdfWZ1bmN0aW9uIEhyKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoIm51bWJlciIhPT1GcihyKSlyZXR1cm4ganIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIGk9dC5zdG9wcy5sZW5ndGg7aWYoMT09PWkpcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW2ktMV1bMF0pcmV0dXJuIHQuc3RvcHNbaS0xXVsxXTt2YXIgYT1WZSh0LnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPUdlW2UudHlwZV18fE5yO2lmKHQuY29sb3JTcGFjZSYmInJnYiIhPT10LmNvbG9yU3BhY2Upe3ZhciB1PWFyW3QuY29sb3JTcGFjZV07Yz1mdW5jdGlvbih0LGUpe3JldHVybiB1LnJldmVyc2UodS5pbnRlcnBvbGF0ZSh1LmZvcndhcmQodCksdS5mb3J3YXJkKGUpLG8pKX19cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiBxcih0LGUscil7cmV0dXJuImNvbG9yIj09PWUudHlwZT9yPXRlLnBhcnNlKHIpOiJmb3JtYXR0ZWQiPT09ZS50eXBlP3I9bmUuZnJvbVN0cmluZyhyLnRvU3RyaW5nKCkpOiJyZXNvbHZlZEltYWdlIj09PWUudHlwZT9yPWllLmZyb21TdHJpbmcoci50b1N0cmluZygpKTpGcihyKT09PWUudHlwZXx8ImVudW0iPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSxqcihyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfXhlLnJlZ2lzdGVyKFNyLHtlcnJvcjpbe2tpbmQ6ImVycm9yIn0sW050XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhyb3cgbmV3IHVlKHIuZXZhbHVhdGUodCkpfV0sdHlwZW9mOltOdCxbSHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFh0KHNlKGVbMF0uZXZhbHVhdGUodCkpKX1dLCJ0by1yZ2JhIjpbV3QoQnQsNCksW1V0XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvQXJyYXkoKX1dLHJnYjpbVXQsW0J0LEJ0LEJ0XSxFcl0scmdiYTpbVXQsW0J0LEJ0LEJ0LEJ0XSxFcl0saGFzOnt0eXBlOmp0LG92ZXJsb2FkczpbW1tOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTHIoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW050LFZ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBMcihyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6SHQsb3ZlcmxvYWRzOltbW050XSxmdW5jdGlvbih0LGUpe3JldHVybiBDcihlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbTnQsVnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIENyKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LCJmZWF0dXJlLXN0YXRlIjpbSHQsW050XSxmdW5jdGlvbih0LGUpe3JldHVybiBDcihlWzBdLmV2YWx1YXRlKHQpLHQuZmVhdHVyZVN0YXRlfHx7fSl9XSxwcm9wZXJ0aWVzOltWdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSwiZ2VvbWV0cnktdHlwZSI6W050LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpfV0saWQ6W0h0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKCl9XSx6b29tOltCdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLnpvb219XSwiaGVhdG1hcC1kZW5zaXR5IjpbQnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5oZWF0bWFwRGVuc2l0eXx8MH1dLCJsaW5lLXByb2dyZXNzIjpbQnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5saW5lUHJvZ3Jlc3N8fDB9XSxhY2N1bXVsYXRlZDpbSHQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuZ2xvYmFscy5hY2N1bXVsYXRlZD9udWxsOnQuZ2xvYmFscy5hY2N1bXVsYXRlZH1dLCIrIjpbQnQsUHIoQnQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3IrPWlbbl0uZXZhbHVhdGUodCl9cmV0dXJuIHJ9XSwiKiI6W0J0LFByKEJ0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXtyKj1pW25dLmV2YWx1YXRlKHQpfXJldHVybiByfV0sIi0iOnt0eXBlOkJ0LG92ZXJsb2FkczpbW1tCdCxCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KS1uLmV2YWx1YXRlKHQpfV0sW1tCdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4tZVswXS5ldmFsdWF0ZSh0KX1dXX0sIi8iOltCdCxbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkvbi5ldmFsdWF0ZSh0KX1dLCIlIjpbQnQsW0J0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJW4uZXZhbHVhdGUodCl9XSxsbjI6W0J0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W0J0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguUEl9XSxlOltCdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkV9XSwiXiI6W0J0LFtCdCxCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTWF0aC5wb3coci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dLHNxcnQ6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLnNxcnQoci5ldmFsdWF0ZSh0KSl9XSxsb2cxMDpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpL01hdGguTE4xMH1dLGxuOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2coci5ldmFsdWF0ZSh0KSl9XSxsb2cyOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2coci5ldmFsdWF0ZSh0KSkvTWF0aC5MTjJ9XSxzaW46W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLnNpbihyLmV2YWx1YXRlKHQpKX1dLGNvczpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY29zKHIuZXZhbHVhdGUodCkpfV0sdGFuOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC50YW4oci5ldmFsdWF0ZSh0KSl9XSxhc2luOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hc2luKHIuZXZhbHVhdGUodCkpfV0sYWNvczpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWNvcyhyLmV2YWx1YXRlKHQpKX1dLGF0YW46W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmF0YW4oci5ldmFsdWF0ZSh0KSl9XSxtaW46W0J0LFByKEJ0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxtYXg6W0J0LFByKEJ0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxhYnM6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcjwwPy1NYXRoLnJvdW5kKC1yKTpNYXRoLnJvdW5kKHIpfV0sZmxvb3I6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmZsb29yKHIuZXZhbHVhdGUodCkpfV0sY2VpbDpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5pZCgpPT09ci52YWx1ZX1dLCJmaWx0ZXItdHlwZS09PSI6W2p0LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpPT09ci52YWx1ZX1dLCJmaWx0ZXItPCI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPGF9XSwiZmlsdGVyLWlkLTwiOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sImZpbHRlci0+IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLCJmaWx0ZXItaWQtPiI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSwiZmlsdGVyLTw9IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8PWF9XSwiZmlsdGVyLWlkLTw9IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48PWl9XSwiZmlsdGVyLT49IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+PWF9XSwiZmlsdGVyLWlkLT49IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSwiZmlsdGVyLWhhcyI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLCJmaWx0ZXItaGFzLWlkIjpbanQsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCkmJnZvaWQgMCE9PXQuaWQoKX1dLCJmaWx0ZXItdHlwZS1pbiI6W2p0LFtXdChOdCldLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUuaW5kZXhPZih0Lmdlb21ldHJ5VHlwZSgpKT49MH1dLCJmaWx0ZXItaWQtaW4iOltqdCxbV3QoSHQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLCJmaWx0ZXItaW4tc21hbGwiOltqdCxbTnQsV3QoSHQpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIGVbMV0udmFsdWUuaW5kZXhPZih0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSk+PTB9XSwiZmlsdGVyLWluLWxhcmdlIjpbanQsW050LFd0KEh0KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKDtyPD1uOyl7dmFyIGk9cituPj4xO2lmKGVbaV09PT10KXJldHVybiEwO2VbaV0+dD9uPWktMTpyPWkrMX1yZXR1cm4hMX0odC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sbi52YWx1ZSwwLG4udmFsdWUubGVuZ3RoLTEpfV0sYWxsOnt0eXBlOmp0LG92ZXJsb2FkczpbW1tqdCxqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSYmbi5ldmFsdWF0ZSh0KX1dLFtQcihqdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXtpZighbltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMX1yZXR1cm4hMH1dXX0sYW55Ont0eXBlOmp0LG92ZXJsb2FkczpbW1tqdCxqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KXx8bi5ldmFsdWF0ZSh0KX1dLFtQcihqdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXtpZihuW3JdLmV2YWx1YXRlKHQpKXJldHVybiEwfXJldHVybiExfV1dfSwiISI6W2p0LFtqdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4hZVswXS5ldmFsdWF0ZSh0KX1dLCJpcy1zdXBwb3J0ZWQtc2NyaXB0IjpbanQsW050XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10Lmdsb2JhbHMmJnQuZ2xvYmFscy5pc1N1cHBvcnRlZFNjcmlwdDtyZXR1cm4hbnx8bihyLmV2YWx1YXRlKHQpKX1dLHVwY2FzZTpbTnQsW050XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvVXBwZXJDYXNlKCl9XSxkb3duY2FzZTpbTnQsW050XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvTG93ZXJDYXNlKCl9XSxjb25jYXQ6W050LFByKEh0KSxmdW5jdGlvbih0LGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGxlKGUuZXZhbHVhdGUodCkpfSkpLmpvaW4oIiIpfV0sInJlc29sdmVkLWxvY2FsZSI6W050LFtxdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS5yZXNvbHZlZExvY2FsZSgpfV19KTt2YXIgR3I9ZnVuY3Rpb24odCxlKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLl93YXJuaW5nSGlzdG9yeT17fSx0aGlzLl9ldmFsdWF0b3I9bmV3IHllLHRoaXMuX2RlZmF1bHRWYWx1ZT1lP2Z1bmN0aW9uKHQpe3JldHVybiJjb2xvciI9PT10LnR5cGUmJkJyKHQuZGVmYXVsdCk/bmV3IHRlKDAsMCwwLDApOiJjb2xvciI9PT10LnR5cGU/dGUucGFyc2UodC5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT10LmRlZmF1bHQ/bnVsbDp0LmRlZmF1bHR9KGUpOm51bGwsdGhpcy5fZW51bVZhbHVlcz1lJiYiZW51bSI9PT1lLnR5cGU/ZS52YWx1ZXM6bnVsbH07ZnVuY3Rpb24gWXIodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmdFswXWluIFNyfWZ1bmN0aW9uIFdyKHQsZSl7dmFyIHI9bmV3IFVlKFNyLFtdLGU/ZnVuY3Rpb24odCl7dmFyIGU9e2NvbG9yOlV0LHN0cmluZzpOdCxudW1iZXI6QnQsZW51bTpOdCxib29sZWFuOmp0LGZvcm1hdHRlZDpHdCxyZXNvbHZlZEltYWdlOll0fTtpZigiYXJyYXkiPT09dC50eXBlKXJldHVybiBXdChlW3QudmFsdWVdfHxIdCx0Lmxlbmd0aCk7cmV0dXJuIGVbdC50eXBlXX0oZSk6dm9pZCAwKSxuPXIucGFyc2UodCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxlJiYic3RyaW5nIj09PWUudHlwZT97dHlwZUFubm90YXRpb246ImNvZXJjZSJ9OnZvaWQgMCk7cmV0dXJuIG4/SXIobmV3IEdyKG4sZSkpOk9yKHIuZXJyb3JzKX1Hci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzPXQsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmU9ZSx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZVN0YXRlPXIsdGhpcy5fZXZhbHVhdG9yLmNhbm9uaWNhbD1uLHRoaXMuX2V2YWx1YXRvci5hdmFpbGFibGVJbWFnZXM9aXx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbj1hLHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpfSxHci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2V2YWx1YXRvci5nbG9iYWxzPXQsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmU9ZXx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZVN0YXRlPXJ8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmNhbm9uaWNhbD1uLHRoaXMuX2V2YWx1YXRvci5hdmFpbGFibGVJbWFnZXM9aXx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbj1hfHxudWxsO3RyeXt2YXIgbz10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKTtpZihudWxsPT1vfHwibnVtYmVyIj09dHlwZW9mIG8mJm8hPW8pcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKG8gaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0pKS5qb2luKCIsICIpKyIsIGJ1dCBmb3VuZCAiK0pTT04uc3RyaW5naWZ5KG8pKyIgaW5zdGVhZC4iKTtyZXR1cm4gb31jYXRjaCh0KXtyZXR1cm4gdGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXXx8KHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV09ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odC5tZXNzYWdlKSksdGhpcy5fZGVmYXVsdFZhbHVlfX07dmFyIFhyPWZ1bmN0aW9uKHQsZSl7dGhpcy5raW5kPXQsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsdGhpcy5pc1N0YXRlRGVwZW5kZW50PSJjb25zdGFudCIhPT10JiYhQmUoZS5leHByZXNzaW9uKX07WHIucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUscixuLGksYSl9LFhyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUscixuLGksYSl9O3ZhciBacj1mdW5jdGlvbih0LGUscixuKXt0aGlzLmtpbmQ9dCx0aGlzLnpvb21TdG9wcz1yLHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHRoaXMuaXNTdGF0ZURlcGVuZGVudD0iY2FtZXJhIiE9PXQmJiFCZShlLmV4cHJlc3Npb24pLHRoaXMuaW50ZXJwb2xhdGlvblR5cGU9bn07ZnVuY3Rpb24gSnIodCxlKXtpZigiZXJyb3IiPT09KHQ9V3IodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPUZlKHIpO2lmKCFuJiYhenIoZSkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsImRhdGEgZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCIpXSk7dmFyIGk9TmUocixbInpvb20iXSk7aWYoIWkmJiFEcihlKSlyZXR1cm4gT3IoW25ldyBEdCgiIiwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgYT1mdW5jdGlvbiB0KGUpe3ZhciByPW51bGw7aWYoZSBpbnN0YW5jZW9mIGNyKXI9dChlLnJlc3VsdCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgbHIpZm9yKHZhciBuPTAsaT1lLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2lmKHI9dChhKSlicmVha31lbHNlKGUgaW5zdGFuY2VvZiBIZXx8ZSBpbnN0YW5jZW9mIG9yKSYmZS5pbnB1dCBpbnN0YW5jZW9mIHhlJiYiem9vbSI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO2lmKHIgaW5zdGFuY2VvZiBEdClyZXR1cm4gcjtyZXR1cm4gZS5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3ZhciBuPXQoZSk7biBpbnN0YW5jZW9mIER0P3I9bjohciYmbj9yPW5ldyBEdCgiIiwnInpvb20iIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCAic3RlcCIgb3IgImludGVycG9sYXRlIiBleHByZXNzaW9uLicpOnImJm4mJnIhPT1uJiYocj1uZXcgRHQoIiIsJ09ubHkgb25lIHpvb20tYmFzZWQgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpKX0pKSxyfShyKTtpZighYSYmIWkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKV0pO2lmKGEgaW5zdGFuY2VvZiBEdClyZXR1cm4gT3IoW2FdKTtpZihhIGluc3RhbmNlb2Ygb3ImJiFScihlKSlyZXR1cm4gT3IoW25ldyBEdCgiIiwnImludGVycG9sYXRlIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pO2lmKCFhKXJldHVybiBJcihuZXcgWHIobj8iY29uc3RhbnQiOiJzb3VyY2UiLHQudmFsdWUpKTt2YXIgbz1hIGluc3RhbmNlb2Ygb3I/YS5pbnRlcnBvbGF0aW9uOnZvaWQgMDtyZXR1cm4gSXIobmV3IFpyKG4/ImNhbWVyYSI6ImNvbXBvc2l0ZSIsdC52YWx1ZSxhLmxhYmVscyxvKSl9WnIucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUscixuLGksYSl9LFpyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUscixuLGksYSl9LFpyLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0aW9uVHlwZT9vci5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvblR5cGUsdCxlLHIpOjB9O3ZhciBLcj1mdW5jdGlvbih0LGUpe3RoaXMuX3BhcmFtZXRlcnM9dCx0aGlzLl9zcGVjaWZpY2F0aW9uPWUsSXQodGhpcyxmdW5jdGlvbiB0KGUscil7dmFyIG4saSxhLG89ImNvbG9yIj09PXIudHlwZSxzPWUuc3RvcHMmJiJvYmplY3QiPT10eXBlb2YgZS5zdG9wc1swXVswXSxsPXN8fHZvaWQgMCE9PWUucHJvcGVydHksYz1zfHwhbCx1PWUudHlwZXx8KFJyKHIpPyJleHBvbmVudGlhbCI6ImludGVydmFsIik7aWYobyYmKChlPUl0KHt9LGUpKS5zdG9wcyYmKGUuc3RvcHM9ZS5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLHRlLnBhcnNlKHRbMV0pXX0pKSksZS5kZWZhdWx0P2UuZGVmYXVsdD10ZS5wYXJzZShlLmRlZmF1bHQpOmUuZGVmYXVsdD10ZS5wYXJzZShyLmRlZmF1bHQpKSxlLmNvbG9yU3BhY2UmJiJyZ2IiIT09ZS5jb2xvclNwYWNlJiYhYXJbZS5jb2xvclNwYWNlXSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3Igc3BhY2U6ICIrZS5jb2xvclNwYWNlKTtpZigiZXhwb25lbnRpYWwiPT09dSluPUhyO2Vsc2UgaWYoImludGVydmFsIj09PXUpbj1WcjtlbHNlIGlmKCJjYXRlZ29yaWNhbCI9PT11KXtuPVVyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGY9MCxoPWUuc3RvcHM7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdO2lbcFswXV09cFsxXX1hPXR5cGVvZiBlLnN0b3BzWzBdWzBdfWVsc2V7aWYoImlkZW50aXR5IiE9PXUpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZ1bmN0aW9uIHR5cGUgIicrdSsnIicpO249cXJ9aWYocyl7Zm9yKHZhciBkPXt9LG09W10sZz0wO2c8ZS5zdG9wcy5sZW5ndGg7ZysrKXt2YXIgdj1lLnN0b3BzW2ddLHk9dlswXS56b29tO3ZvaWQgMD09PWRbeV0mJihkW3ldPXt6b29tOnksdHlwZTplLnR5cGUscHJvcGVydHk6ZS5wcm9wZXJ0eSxkZWZhdWx0OmUuZGVmYXVsdCxzdG9wczpbXX0sbS5wdXNoKHkpKSxkW3ldLnN0b3BzLnB1c2goW3ZbMF0udmFsdWUsdlsxXV0pfWZvcih2YXIgeD1bXSxiPTAsXz1tO2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXTt4LnB1c2goW2Rbd10uem9vbSx0KGRbd10scildKX12YXIgVD17bmFtZToibGluZWFyIn07cmV0dXJue2tpbmQ6ImNvbXBvc2l0ZSIsaW50ZXJwb2xhdGlvblR5cGU6VCxpbnRlcnBvbGF0aW9uRmFjdG9yOm9yLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsVCksem9vbVN0b3BzOngubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBpPXQuem9vbTtyZXR1cm4gSHIoe3N0b3BzOngsYmFzZTplLmJhc2V9LHIsaSkuZXZhbHVhdGUoaSxuKX19fWlmKGMpe3ZhciBrPSJleHBvbmVudGlhbCI9PT11P3tuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9Om51bGw7cmV0dXJue2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvblR5cGU6ayxpbnRlcnBvbGF0aW9uRmFjdG9yOm9yLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsayksem9vbVN0b3BzOmUuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0KXt2YXIgbz10Lnpvb207cmV0dXJuIG4oZSxyLG8saSxhKX19fXJldHVybntraW5kOiJzb3VyY2UiLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbyl7dmFyIHM9byYmby5wcm9wZXJ0aWVzP28ucHJvcGVydGllc1tlLnByb3BlcnR5XTp2b2lkIDA7cmV0dXJuIHZvaWQgMD09PXM/anIoZS5kZWZhdWx0LHIuZGVmYXVsdCk6bihlLHIscyxpLGEpfX19KHRoaXMuX3BhcmFtZXRlcnMsdGhpcy5fc3BlY2lmaWNhdGlvbikpfTtmdW5jdGlvbiBRcih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlY3x8e30saT10Lm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzfHx7fSxhPXQuc3R5bGUsbz10LnN0eWxlU3BlYyxzPVtdLGw9RnIocik7aWYoIm9iamVjdCIhPT1sKXJldHVybltuZXcgQ3QoZSxyLCJvYmplY3QgZXhwZWN0ZWQsICIrbCsiIGZvdW5kIildO2Zvcih2YXIgYyBpbiByKXt2YXIgdT1jLnNwbGl0KCIuIilbMF0sZj1uW3VdfHxuWyIqIl0saD12b2lkIDA7aWYoaVt1XSloPWlbdV07ZWxzZSBpZihuW3VdKWg9a247ZWxzZSBpZihpWyIqIl0paD1pWyIqIl07ZWxzZXtpZighblsiKiJdKXtzLnB1c2gobmV3IEN0KGUscltjXSwndW5rbm93biBwcm9wZXJ0eSAiJytjKyciJykpO2NvbnRpbnVlfWg9a259cz1zLmNvbmNhdChoKHtrZXk6KGU/ZSsiLiI6ZSkrYyx2YWx1ZTpyW2NdLHZhbHVlU3BlYzpmLHN0eWxlOmEsc3R5bGVTcGVjOm8sb2JqZWN0OnIsb2JqZWN0S2V5OmN9LHIpKX1mb3IodmFyIHAgaW4gbilpW3BdfHxuW3BdLnJlcXVpcmVkJiZ2b2lkIDA9PT1uW3BdLmRlZmF1bHQmJnZvaWQgMD09PXJbcF0mJnMucHVzaChuZXcgQ3QoZSxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICInK3ArJyInKSk7cmV0dXJuIHN9ZnVuY3Rpb24gJHIodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC5rZXksbz10LmFycmF5RWxlbWVudFZhbGlkYXRvcnx8a247aWYoImFycmF5IiE9PUZyKGUpKXJldHVybltuZXcgQ3QoYSxlLCJhcnJheSBleHBlY3RlZCwgIitGcihlKSsiIGZvdW5kIildO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybltuZXcgQ3QoYSxlLCJhcnJheSBsZW5ndGggIityLmxlbmd0aCsiIGV4cGVjdGVkLCBsZW5ndGggIitlLmxlbmd0aCsiIGZvdW5kIildO2lmKHJbIm1pbi1sZW5ndGgiXSYmZS5sZW5ndGg8clsibWluLWxlbmd0aCJdKXJldHVybltuZXcgQ3QoYSxlLCJhcnJheSBsZW5ndGggYXQgbGVhc3QgIityWyJtaW4tbGVuZ3RoIl0rIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTt2YXIgcz17dHlwZTpyLnZhbHVlLHZhbHVlczpyLnZhbHVlc307aS4kdmVyc2lvbjw3JiYocy5mdW5jdGlvbj1yLmZ1bmN0aW9uKSwib2JqZWN0Ij09PUZyKHIudmFsdWUpJiYocz1yLnZhbHVlKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5sZW5ndGg7YysrKWw9bC5jb25jYXQobyh7YXJyYXk6ZSxhcnJheUluZGV4OmMsdmFsdWU6ZVtjXSx2YWx1ZVNwZWM6cyxzdHlsZTpuLHN0eWxlU3BlYzppLGtleTphKyJbIitjKyJdIn0pKTtyZXR1cm4gbH1mdW5jdGlvbiB0bih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPUZyKHIpO3JldHVybiJudW1iZXIiPT09aSYmciE9ciYmKGk9Ik5hTiIpLCJudW1iZXIiIT09aT9bbmV3IEN0KGUsciwibnVtYmVyIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpXToibWluaW11bSJpbiBuJiZyPG4ubWluaW11bT9bbmV3IEN0KGUscixyKyIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICIrbi5taW5pbXVtKV06Im1heGltdW0iaW4gbiYmcj5uLm1heGltdW0/W25ldyBDdChlLHIscisiIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAiK24ubWF4aW11bSldOltdfWZ1bmN0aW9uIGVuKHQpe3ZhciBlLHIsbixpPXQudmFsdWVTcGVjLGE9T3QodC52YWx1ZS50eXBlKSxvPXt9LHM9ImNhdGVnb3JpY2FsIiE9PWEmJnZvaWQgMD09PXQudmFsdWUucHJvcGVydHksbD0hcyxjPSJhcnJheSI9PT1Gcih0LnZhbHVlLnN0b3BzKSYmImFycmF5Ij09PUZyKHQudmFsdWUuc3RvcHNbMF0pJiYib2JqZWN0Ij09PUZyKHQudmFsdWUuc3RvcHNbMF1bMF0pLHU9UXIoe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzp0LnN0eWxlU3BlYy5mdW5jdGlvbixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7c3RvcHM6ZnVuY3Rpb24odCl7aWYoImlkZW50aXR5Ij09PWEpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSAic3RvcHMiIHByb3BlcnR5JyldO3ZhciBlPVtdLHI9dC52YWx1ZTtlPWUuY29uY2F0KCRyKHtrZXk6dC5rZXksdmFsdWU6cix2YWx1ZVNwZWM6dC52YWx1ZVNwZWMsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsYXJyYXlFbGVtZW50VmFsaWRhdG9yOmZ9KSksImFycmF5Ij09PUZyKHIpJiYwPT09ci5sZW5ndGgmJmUucHVzaChuZXcgQ3QodC5rZXksciwiYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdG9wIikpO3JldHVybiBlfSxkZWZhdWx0OmZ1bmN0aW9uKHQpe3JldHVybiBrbih7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KX19fSk7cmV0dXJuImlkZW50aXR5Ij09PWEmJnMmJnUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAicHJvcGVydHkiJykpLCJpZGVudGl0eSI9PT1hfHx0LnZhbHVlLnN0b3BzfHx1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInN0b3BzIicpKSwiZXhwb25lbnRpYWwiPT09YSYmdC52YWx1ZVNwZWMuZXhwcmVzc2lvbiYmIVJyKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCJleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKSx0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGwmJiF6cih0LnZhbHVlU3BlYyk/dS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCJwcm9wZXJ0eSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKTpzJiYhRHIodC52YWx1ZVNwZWMpJiZ1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSkpLCJjYXRlZ29yaWNhbCIhPT1hJiYhY3x8dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8dS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCcicHJvcGVydHkiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpLHU7ZnVuY3Rpb24gZih0KXt2YXIgZT1bXSxhPXQudmFsdWUscz10LmtleTtpZigiYXJyYXkiIT09RnIoYSkpcmV0dXJuW25ldyBDdChzLGEsImFycmF5IGV4cGVjdGVkLCAiK0ZyKGEpKyIgZm91bmQiKV07aWYoMiE9PWEubGVuZ3RoKXJldHVybltuZXcgQ3QocyxhLCJhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICIrYS5sZW5ndGgrIiBmb3VuZCIpXTtpZihjKXtpZigib2JqZWN0IiE9PUZyKGFbMF0pKXJldHVybltuZXcgQ3QocyxhLCJvYmplY3QgZXhwZWN0ZWQsICIrRnIoYVswXSkrIiBmb3VuZCIpXTtpZih2b2lkIDA9PT1hWzBdLnpvb20pcmV0dXJuW25ldyBDdChzLGEsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbSIpXTtpZih2b2lkIDA9PT1hWzBdLnZhbHVlKXJldHVybltuZXcgQ3QocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlIildO2lmKG4mJm4+T3QoYVswXS56b29tKSlyZXR1cm5bbmV3IEN0KHMsYVswXS56b29tLCJzdG9wIHpvb20gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlciIpXTtPdChhWzBdLnpvb20pIT09biYmKG49T3QoYVswXS56b29tKSxyPXZvaWQgMCxvPXt9KSxlPWUuY29uY2F0KFFyKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206dG4sdmFsdWU6aH19KSl9ZWxzZSBlPWUuY29uY2F0KGgoe2tleTpzKyJbMF0iLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt9LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSxhKSk7cmV0dXJuIFlyKHp0KGFbMV0pKT9lLmNvbmNhdChbbmV3IEN0KHMrIlsxXSIsYVsxXSwiZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHN0b3BzLiIpXSk6ZS5jb25jYXQoa24oe2tleTpzKyJbMV0iLHZhbHVlOmFbMV0sdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSl9ZnVuY3Rpb24gaCh0LG4pe3ZhciBzPUZyKHQudmFsdWUpLGw9T3QodC52YWx1ZSksYz1udWxsIT09dC52YWx1ZT90LnZhbHVlOm47aWYoZSl7aWYocyE9PWUpcmV0dXJuW25ldyBDdCh0LmtleSxjLHMrIiBzdG9wIGRvbWFpbiB0eXBlIG11c3QgbWF0Y2ggcHJldmlvdXMgc3RvcCBkb21haW4gdHlwZSAiK2UpXX1lbHNlIGU9cztpZigibnVtYmVyIiE9PXMmJiJzdHJpbmciIT09cyYmImJvb2xlYW4iIT09cylyZXR1cm5bbmV3IEN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpXTtpZigibnVtYmVyIiE9PXMmJiJjYXRlZ29yaWNhbCIhPT1hKXt2YXIgdT0ibnVtYmVyIGV4cGVjdGVkLCAiK3MrIiBmb3VuZCI7cmV0dXJuIHpyKGkpJiZ2b2lkIDA9PT1hJiYodSs9J1xuSWYgeW91IGludGVuZGVkIHRvIHVzZSBhIGNhdGVnb3JpY2FsIGZ1bmN0aW9uLCBzcGVjaWZ5IGAidHlwZSI6ICJjYXRlZ29yaWNhbCJgLicpLFtuZXcgQ3QodC5rZXksYyx1KV19cmV0dXJuImNhdGVnb3JpY2FsIiE9PWF8fCJudW1iZXIiIT09c3x8aXNGaW5pdGUobCkmJk1hdGguZmxvb3IobCk9PT1sPyJjYXRlZ29yaWNhbCIhPT1hJiYibnVtYmVyIj09PXMmJnZvaWQgMCE9PXImJmw8cj9bbmV3IEN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV06KHI9bCwiY2F0ZWdvcmljYWwiPT09YSYmbCBpbiBvP1tuZXcgQ3QodC5rZXksYywic3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlIildOihvW2xdPSEwLFtdKSk6W25ldyBDdCh0LmtleSxjLCJpbnRlZ2VyIGV4cGVjdGVkLCBmb3VuZCAiK2wpXX19ZnVuY3Rpb24gcm4odCl7dmFyIGU9KCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0P0pyOldyKSh6dCh0LnZhbHVlKSx0LnZhbHVlU3BlYyk7aWYoImVycm9yIj09PWUucmVzdWx0KXJldHVybiBlLnZhbHVlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdCgiIit0LmtleStlLmtleSx0LnZhbHVlLGUubWVzc2FnZSl9KSk7dmFyIHI9ZS52YWx1ZS5leHByZXNzaW9ufHxlLnZhbHVlLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbjtpZigicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmInRleHQtZm9udCI9PT10LnByb3BlcnR5S2V5JiYhci5vdXRwdXREZWZpbmVkKCkpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCdJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgIicrdC5wcm9wZXJ0eUtleSsnIi4gT3V0cHV0IHZhbHVlcyBtdXN0IGJlIGNvbnRhaW5lZCBhcyBsaXRlcmFscyB3aXRoaW4gdGhlIGV4cHJlc3Npb24uJyldO2lmKCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYibGF5b3V0Ij09PXQucHJvcGVydHlUeXBlJiYhQmUocikpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGxheW91dCBwcm9wZXJ0aWVzLicpXTtpZigiZmlsdGVyIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFCZShyKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJyJmZWF0dXJlLXN0YXRlIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggZmlsdGVycy4nKV07aWYodC5leHByZXNzaW9uQ29udGV4dCYmMD09PXQuZXhwcmVzc2lvbkNvbnRleHQuaW5kZXhPZigiY2x1c3RlciIpKXtpZighTmUocixbInpvb20iLCJmZWF0dXJlLXN0YXRlIl0pKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnInpvb20iIGFuZCAiZmVhdHVyZS1zdGF0ZSIgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBjbHVzdGVyIHByb3BlcnRpZXMuJyldO2lmKCJjbHVzdGVyLWluaXRpYWwiPT09dC5leHByZXNzaW9uQ29udGV4dCYmIUZlKHIpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwiRmVhdHVyZSBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggaW5pdGlhbCBleHByZXNzaW9uIHBhcnQgb2YgY2x1c3RlciBwcm9wZXJ0aWVzLiIpXX1yZXR1cm5bXX1mdW5jdGlvbiBubih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPVtdO3JldHVybiBBcnJheS5pc0FycmF5KG4udmFsdWVzKT8tMT09PW4udmFsdWVzLmluZGV4T2YoT3QocikpJiZpLnB1c2gobmV3IEN0KGUsciwiZXhwZWN0ZWQgb25lIG9mIFsiK24udmFsdWVzLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKTotMT09PU9iamVjdC5rZXlzKG4udmFsdWVzKS5pbmRleE9mKE90KHIpKSYmaS5wdXNoKG5ldyBDdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpLGl9ZnVuY3Rpb24gYW4odCl7aWYoITA9PT10fHwhMT09PXQpcmV0dXJuITA7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZSJoYXMiOnJldHVybiB0Lmxlbmd0aD49MiYmIiRpZCIhPT10WzFdJiYiJHR5cGUiIT09dFsxXTtjYXNlImluIjpyZXR1cm4gdC5sZW5ndGg+PTMmJigic3RyaW5nIiE9dHlwZW9mIHRbMV18fEFycmF5LmlzQXJyYXkodFsyXSkpO2Nhc2UiIWluIjpjYXNlIiFoYXMiOmNhc2Uibm9uZSI6cmV0dXJuITE7Y2FzZSI9PSI6Y2FzZSIhPSI6Y2FzZSI+IjpjYXNlIj49IjpjYXNlIjwiOmNhc2UiPD0iOnJldHVybiAzIT09dC5sZW5ndGh8fEFycmF5LmlzQXJyYXkodFsxXSl8fEFycmF5LmlzQXJyYXkodFsyXSk7Y2FzZSJhbnkiOmNhc2UiYWxsIjpmb3IodmFyIGU9MCxyPXQuc2xpY2UoMSk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFhbihuKSYmImJvb2xlYW4iIT10eXBlb2YgbilyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0OnJldHVybiEwfX1Lci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEtyKHQuX3BhcmFtZXRlcnMsdC5fc3BlY2lmaWNhdGlvbil9LEtyLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm57X3BhcmFtZXRlcnM6dC5fcGFyYW1ldGVycyxfc3BlY2lmaWNhdGlvbjp0Ll9zcGVjaWZpY2F0aW9ufX07dmFyIG9uPXt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHRyYW5zaXRpb246ITEsInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfX07ZnVuY3Rpb24gc24odCl7aWYobnVsbD09dClyZXR1cm57ZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5lZWRHZW9tZXRyeTohMX07YW4odCl8fCh0PWNuKHQpKTt2YXIgZT1Xcih0LG9uKTtpZigiZXJyb3IiPT09ZS5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKGUudmFsdWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrIjogIit0Lm1lc3NhZ2V9KSkuam9pbigiLCAiKSk7cmV0dXJue2ZpbHRlcjpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUudmFsdWUuZXZhbHVhdGUodCxyLHt9LG4pfSxuZWVkR2VvbWV0cnk6ZnVuY3Rpb24gdChlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTtpZigid2l0aGluIj09PWVbMF0pcmV0dXJuITA7Zm9yKHZhciByPTE7cjxlLmxlbmd0aDtyKyspaWYodChlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX0odCl9fWZ1bmN0aW9uIGxuKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGNuKHQpe2lmKCF0KXJldHVybiEwO3ZhciBlLHI9dFswXTtyZXR1cm4gdC5sZW5ndGg8PTE/ImFueSIhPT1yOiI9PSI9PT1yP3VuKHRbMV0sdFsyXSwiPT0iKToiIT0iPT09cj9wbih1bih0WzFdLHRbMl0sIj09IikpOiI8Ij09PXJ8fCI+Ij09PXJ8fCI8PSI9PT1yfHwiPj0iPT09cj91bih0WzFdLHRbMl0scik6ImFueSI9PT1yPyhlPXQuc2xpY2UoMSksWyJhbnkiXS5jb25jYXQoZS5tYXAoY24pKSk6ImFsbCI9PT1yP1siYWxsIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKGNuKSk6Im5vbmUiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChjbikubWFwKHBuKSk6ImluIj09PXI/Zm4odFsxXSx0LnNsaWNlKDIpKToiIWluIj09PXI/cG4oZm4odFsxXSx0LnNsaWNlKDIpKSk6ImhhcyI9PT1yP2huKHRbMV0pOiIhaGFzIj09PXI/cG4oaG4odFsxXSkpOiJ3aXRoaW4iIT09cnx8dH1mdW5jdGlvbiB1bih0LGUscil7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtIityLGVdO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC0iK3IsZV07ZGVmYXVsdDpyZXR1cm5bImZpbHRlci0iK3IsdCxlXX19ZnVuY3Rpb24gZm4odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVyblsiZmlsdGVyLXR5cGUtaW4iLFsibGl0ZXJhbCIsZV1dO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1pZC1pbiIsWyJsaXRlcmFsIixlXV07ZGVmYXVsdDpyZXR1cm4gZS5sZW5ndGg+MjAwJiYhZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQhPXR5cGVvZiBlWzBdfSkpP1siZmlsdGVyLWluLWxhcmdlIix0LFsibGl0ZXJhbCIsZS5zb3J0KGxuKV1dOlsiZmlsdGVyLWluLXNtYWxsIix0LFsibGl0ZXJhbCIsZV1dfX1mdW5jdGlvbiBobih0KXtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuITA7Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWhhcy1pZCJdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItaGFzIix0XX19ZnVuY3Rpb24gcG4odCl7cmV0dXJuWyIhIix0XX1mdW5jdGlvbiBkbih0KXtyZXR1cm4gYW4oenQodC52YWx1ZSkpP3JuKEl0KHt9LHQse2V4cHJlc3Npb25Db250ZXh0OiJmaWx0ZXIiLHZhbHVlU3BlYzp7dmFsdWU6ImJvb2xlYW4ifX0pKTpmdW5jdGlvbiB0KGUpe3ZhciByPWUudmFsdWUsbj1lLmtleTtpZigiYXJyYXkiIT09RnIocikpcmV0dXJuW25ldyBDdChuLHIsImFycmF5IGV4cGVjdGVkLCAiK0ZyKHIpKyIgZm91bmQiKV07dmFyIGksYT1lLnN0eWxlU3BlYyxvPVtdO2lmKHIubGVuZ3RoPDEpcmV0dXJuW25ldyBDdChuLHIsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaChvPW8uY29uY2F0KG5uKHtrZXk6bisiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzphLmZpbHRlcl9vcGVyYXRvcixzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKSxPdChyWzBdKSl7Y2FzZSI8IjpjYXNlIjw9IjpjYXNlIj4iOmNhc2UiPj0iOnIubGVuZ3RoPj0yJiYiJHR5cGUiPT09T3QoclsxXSkmJm8ucHVzaChuZXcgQ3QobixyLCciJHR5cGUiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciAiJytyWzBdKyciJykpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPT1yLmxlbmd0aCYmby5wdXNoKG5ldyBDdChuLHIsJ2ZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgIicrclswXSsnIiBtdXN0IGhhdmUgMyBlbGVtZW50cycpKTtjYXNlImluIjpjYXNlIiFpbiI6ci5sZW5ndGg+PTImJiJzdHJpbmciIT09KGk9RnIoclsxXSkpJiZvLnB1c2gobmV3IEN0KG4rIlsxXSIsclsxXSwic3RyaW5nIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKTtmb3IodmFyIHM9MjtzPHIubGVuZ3RoO3MrKylpPUZyKHJbc10pLCIkdHlwZSI9PT1PdChyWzFdKT9vPW8uY29uY2F0KG5uKHtrZXk6bisiWyIrcysiXSIsdmFsdWU6cltzXSx2YWx1ZVNwZWM6YS5nZW9tZXRyeV90eXBlLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpOiJzdHJpbmciIT09aSYmIm51bWJlciIhPT1pJiYiYm9vbGVhbiIhPT1pJiZvLnB1c2gobmV3IEN0KG4rIlsiK3MrIl0iLHJbc10sInN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKTticmVhaztjYXNlImFueSI6Y2FzZSJhbGwiOmNhc2Uibm9uZSI6Zm9yKHZhciBsPTE7bDxyLmxlbmd0aDtsKyspbz1vLmNvbmNhdCh0KHtrZXk6bisiWyIrbCsiXSIsdmFsdWU6cltsXSxzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKTticmVhaztjYXNlImhhcyI6Y2FzZSIhaGFzIjppPUZyKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IEN0KG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJzdHJpbmciIT09aSYmby5wdXNoKG5ldyBDdChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJ3aXRoaW4iOmk9RnIoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgQ3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yICInK3JbMF0rJyIgb3BlcmF0b3IgbXVzdCBoYXZlIDIgZWxlbWVudHMnKSk6Im9iamVjdCIhPT1pJiZvLnB1c2gobmV3IEN0KG4rIlsxXSIsclsxXSwib2JqZWN0IGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKX1yZXR1cm4gb30odCl9ZnVuY3Rpb24gbW4odCxlKXt2YXIgcj10LmtleSxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQudmFsdWUsbz10Lm9iamVjdEtleSxzPWlbZSsiXyIrdC5sYXllclR5cGVdO2lmKCFzKXJldHVybltdO3ZhciBsPW8ubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7aWYoInBhaW50Ij09PWUmJmwmJnNbbFsxXV0mJnNbbFsxXV0udHJhbnNpdGlvbilyZXR1cm4ga24oe2tleTpyLHZhbHVlOmEsdmFsdWVTcGVjOmkudHJhbnNpdGlvbixzdHlsZTpuLHN0eWxlU3BlYzppfSk7dmFyIGMsdT10LnZhbHVlU3BlY3x8c1tvXTtpZighdSlyZXR1cm5bbmV3IEN0KHIsYSwndW5rbm93biBwcm9wZXJ0eSAiJytvKyciJyldO2lmKCJzdHJpbmciPT09RnIoYSkmJnpyKHUpJiYhdS50b2tlbnMmJihjPS9eeyhbXn1dKyl9JC8uZXhlYyhhKSkpcmV0dXJuW25ldyBDdChyLGEsJyInK28rJyIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxuVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IGB7ICJ0eXBlIjogImlkZW50aXR5IiwgInByb3BlcnR5IjogJytKU09OLnN0cmluZ2lmeShjWzFdKSsiIH1gLiIpXTt2YXIgZj1bXTtyZXR1cm4ic3ltYm9sIj09PXQubGF5ZXJUeXBlJiYoInRleHQtZmllbGQiPT09byYmbiYmIW4uZ2x5cGhzJiZmLnB1c2gobmV3IEN0KHIsYSwndXNlIG9mICJ0ZXh0LWZpZWxkIiByZXF1aXJlcyBhIHN0eWxlICJnbHlwaHMiIHByb3BlcnR5JykpLCJ0ZXh0LWZvbnQiPT09byYmQnIoenQoYSkpJiYiaWRlbnRpdHkiPT09T3QoYS50eXBlKSYmZi5wdXNoKG5ldyBDdChyLGEsJyJ0ZXh0LWZvbnQiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxmLmNvbmNhdChrbih7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6aSxleHByZXNzaW9uQ29udGV4dDoicHJvcGVydHkiLHByb3BlcnR5VHlwZTplLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIG1uKHQsInBhaW50Iil9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIG1uKHQsImxheW91dCIpfWZ1bmN0aW9uIHluKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGk9dC5zdHlsZSxhPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgQ3QobixyLCdlaXRoZXIgInR5cGUiIG9yICJyZWYiIGlzIHJlcXVpcmVkJykpO3ZhciBvLHM9T3Qoci50eXBlKSxsPU90KHIucmVmKTtpZihyLmlkKWZvcih2YXIgYz1PdChyLmlkKSx1PTA7dTx0LmFycmF5SW5kZXg7dSsrKXt2YXIgZj1pLmxheWVyc1t1XTtPdChmLmlkKT09PWMmJmUucHVzaChuZXcgQ3QobixyLmlkLCdkdXBsaWNhdGUgbGF5ZXIgaWQgIicrci5pZCsnIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytmLmlkLl9fbGluZV9fKSl9aWYoInJlZiJpbiByKVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gciYmZS5wdXNoKG5ldyBDdChuLHJbdF0sJyInK3QrJyIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVycycpKX0pKSxpLmxheWVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtPdCh0LmlkKT09PWwmJihvPXQpfSkpLG8/by5yZWY/ZS5wdXNoKG5ldyBDdChuLHIucmVmLCJyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllciIpKTpzPU90KG8udHlwZSk6ZS5wdXNoKG5ldyBDdChuLHIucmVmLCdyZWYgbGF5ZXIgIicrbCsnIiBub3QgZm91bmQnKSk7ZWxzZSBpZigiYmFja2dyb3VuZCIhPT1zKWlmKHIuc291cmNlKXt2YXIgaD1pLnNvdXJjZXMmJmkuc291cmNlc1tyLnNvdXJjZV0scD1oJiZPdChoLnR5cGUpO2g/InZlY3RvciI9PT1wJiYicmFzdGVyIj09PXM/ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZScpKToicmFzdGVyIj09PXAmJiJyYXN0ZXIiIT09cz9lLnB1c2gobmV3IEN0KG4sci5zb3VyY2UsJ2xheWVyICInK3IuaWQrJyIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlJykpOiJ2ZWN0b3IiIT09cHx8clsic291cmNlLWxheWVyIl0/InJhc3Rlci1kZW0iPT09cCYmImhpbGxzaGFkZSIhPT1zP2UucHVzaChuZXcgQ3QobixyLnNvdXJjZSwicmFzdGVyLWRlbSBzb3VyY2UgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGxheWVyIHR5cGUgJ2hpbGxzaGFkZScuIikpOiJsaW5lIiE9PXN8fCFyLnBhaW50fHwhci5wYWludFsibGluZS1ncmFkaWVudCJdfHwiZ2VvanNvbiI9PT1wJiZoLmxpbmVNZXRyaWNzfHxlLnB1c2gobmV3IEN0KG4sciwnbGF5ZXIgIicrci5pZCsnIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggYGxpbmVNZXRyaWNzYCBlbmFibGVkLicpKTplLnB1c2gobmV3IEN0KG4sciwnbGF5ZXIgIicrci5pZCsnIiBtdXN0IHNwZWNpZnkgYSAic291cmNlLWxheWVyIicpKTplLnB1c2gobmV3IEN0KG4sci5zb3VyY2UsJ3NvdXJjZSAiJytyLnNvdXJjZSsnIiBub3QgZm91bmQnKSl9ZWxzZSBlLnB1c2gobmV3IEN0KG4sciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAic291cmNlIicpKTtyZXR1cm4gZT1lLmNvbmNhdChRcih7a2V5Om4sdmFsdWU6cix2YWx1ZVNwZWM6YS5sYXllcixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LHR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ga24oe2tleTpuKyIudHlwZSIsdmFsdWU6ci50eXBlLHZhbHVlU3BlYzphLmxheWVyLnR5cGUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0OnIsb2JqZWN0S2V5OiJ0eXBlIn0pfSxmaWx0ZXI6ZG4sbGF5b3V0OmZ1bmN0aW9uKHQpe3JldHVybiBRcih7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiB2bihJdCh7bGF5ZXJUeXBlOnN9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBRcih7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBnbihJdCh7bGF5ZXJUeXBlOnN9LHQpKX19fSl9fX0pKX1mdW5jdGlvbiB4bih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1GcihlKTtyZXR1cm4ic3RyaW5nIiE9PW4/W25ldyBDdChyLGUsInN0cmluZyBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119dmFyIGJuPXtwcm9tb3RlSWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO2lmKCJzdHJpbmciPT09RnIocikpcmV0dXJuIHhuKHtrZXk6ZSx2YWx1ZTpyfSk7dmFyIG49W107Zm9yKHZhciBpIGluIHIpbi5wdXNoLmFwcGx5KG4seG4oe2tleTplKyIuIitpLHZhbHVlOnJbaV19KSk7cmV0dXJuIG59fTtmdW5jdGlvbiBfbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj10LnN0eWxlU3BlYyxpPXQuc3R5bGU7aWYoIWUudHlwZSlyZXR1cm5bbmV3IEN0KHIsZSwnInR5cGUiIGlzIHJlcXVpcmVkJyldO3ZhciBhLG89T3QoZS50eXBlKTtzd2l0Y2gobyl7Y2FzZSJ2ZWN0b3IiOmNhc2UicmFzdGVyIjpjYXNlInJhc3Rlci1kZW0iOnJldHVybiBhPVFyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuWyJzb3VyY2VfIitvLnJlcGxhY2UoIi0iLCJfIildLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOm4sb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6Ym59KTtjYXNlImdlb2pzb24iOmlmKGE9UXIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2dlb2pzb24sc3R5bGU6aSxzdHlsZVNwZWM6bixvYmplY3RFbGVtZW50VmFsaWRhdG9yczpibn0pLGUuY2x1c3Rlcilmb3IodmFyIHMgaW4gZS5jbHVzdGVyUHJvcGVydGllcyl7dmFyIGw9ZS5jbHVzdGVyUHJvcGVydGllc1tzXSxjPWxbMF0sdT1sWzFdLGY9InN0cmluZyI9PXR5cGVvZiBjP1tjLFsiYWNjdW11bGF0ZWQiXSxbImdldCIsc11dOmM7YS5wdXNoLmFwcGx5KGEscm4oe2tleTpyKyIuIitzKyIubWFwIix2YWx1ZTp1LGV4cHJlc3Npb25Db250ZXh0OiJjbHVzdGVyLW1hcCJ9KSksYS5wdXNoLmFwcGx5KGEscm4oe2tleTpyKyIuIitzKyIucmVkdWNlIix2YWx1ZTpmLGV4cHJlc3Npb25Db250ZXh0OiJjbHVzdGVyLXJlZHVjZSJ9KSl9cmV0dXJuIGE7Y2FzZSJ2aWRlbyI6cmV0dXJuIFFyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV92aWRlbyxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZSJpbWFnZSI6cmV0dXJuIFFyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9pbWFnZSxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZSJjYW52YXMiOnJldHVybltuZXcgQ3QocixudWxsLCJQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLiIsInNvdXJjZS5jYW52YXMiKV07ZGVmYXVsdDpyZXR1cm4gbm4oe2tleTpyKyIudHlwZSIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOlsidmVjdG9yIiwicmFzdGVyIiwicmFzdGVyLWRlbSIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl19LHN0eWxlOmksc3R5bGVTcGVjOm59KX19ZnVuY3Rpb24gd24odCl7dmFyIGU9dC52YWx1ZSxyPXQuc3R5bGVTcGVjLG49ci5saWdodCxpPXQuc3R5bGUsYT1bXSxvPUZyKGUpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGE7aWYoIm9iamVjdCIhPT1vKXJldHVybiBhPWEuY29uY2F0KFtuZXcgQ3QoImxpZ2h0IixlLCJvYmplY3QgZXhwZWN0ZWQsICIrbysiIGZvdW5kIildKTtmb3IodmFyIHMgaW4gZSl7dmFyIGw9cy5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTthPWwmJm5bbFsxXV0mJm5bbFsxXV0udHJhbnNpdGlvbj9hLmNvbmNhdChrbih7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6ci50cmFuc2l0aW9uLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6bltzXT9hLmNvbmNhdChrbih7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6bltzXSxzdHlsZTppLHN0eWxlU3BlYzpyfSkpOmEuY29uY2F0KFtuZXcgQ3QocyxlW3NdLCd1bmtub3duIHByb3BlcnR5ICInK3MrJyInKV0pfXJldHVybiBhfXZhciBUbj17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OiRyLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49RnIoZSk7cmV0dXJuImJvb2xlYW4iIT09bj9bbmV3IEN0KHIsZSwiYm9vbGVhbiBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119LG51bWJlcjp0bixjb2xvcjpmdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj1GcihyKTtyZXR1cm4ic3RyaW5nIiE9PW4/W25ldyBDdChlLHIsImNvbG9yIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpudWxsPT09JHQocik/W25ldyBDdChlLHIsJ2NvbG9yIGV4cGVjdGVkLCAiJytyKyciIGZvdW5kJyldOltdfSxjb25zdGFudHM6UHQsZW51bTpubixmaWx0ZXI6ZG4sZnVuY3Rpb246ZW4sbGF5ZXI6eW4sb2JqZWN0OlFyLHNvdXJjZTpfbixsaWdodDp3bixzdHJpbmc6eG4sZm9ybWF0dGVkOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09eG4odCkubGVuZ3RoP1tdOnJuKHQpfSxyZXNvbHZlZEltYWdlOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09eG4odCkubGVuZ3RoP1tdOnJuKHQpfX07ZnVuY3Rpb24ga24odCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZVNwZWM7cmV0dXJuIHIuZXhwcmVzc2lvbiYmQnIoT3QoZSkpP2VuKHQpOnIuZXhwcmVzc2lvbiYmWXIoenQoZSkpP3JuKHQpOnIudHlwZSYmVG5bci50eXBlXT9UbltyLnR5cGVdKHQpOlFyKEl0KHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gQW4odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49eG4odCk7cmV0dXJuIG4ubGVuZ3RofHwoLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJm4ucHVzaChuZXcgQ3QocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntmb250c3RhY2t9IiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZigie3JhbmdlfSIpJiZuLnB1c2gobmV3IEN0KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSksbn1mdW5jdGlvbiBNbih0LGUpe3ZvaWQgMD09PWUmJihlPUx0KTt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChrbih7a2V5OiIiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOkFuLCIqIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KFB0KHtrZXk6ImNvbnN0YW50cyIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksU24ocil9ZnVuY3Rpb24gU24odCl7cmV0dXJuW10uY29uY2F0KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KSl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBTbih0LmFwcGx5KHRoaXMsZSkpfX1Nbi5zb3VyY2U9RW4oX24pLE1uLmxpZ2h0PUVuKHduKSxNbi5sYXllcj1Fbih5biksTW4uZmlsdGVyPUVuKGRuKSxNbi5wYWludFByb3BlcnR5PUVuKGduKSxNbi5sYXlvdXRQcm9wZXJ0eT1Fbih2bik7dmFyIExuPU1uLENuPUxuLmxpZ2h0LFBuPUxuLnBhaW50UHJvcGVydHksSW49TG4ubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gT24odCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QuZmlyZShuZXcgU3QobmV3IEVycm9yKGEubWVzc2FnZSkpKSxyPSEwfXJldHVybiByfXZhciB6bj1EbjtmdW5jdGlvbiBEbih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgaT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWlbMF0sZT1pWzFdLHI9aVsyXSx0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBhPTA7YTx0aGlzLmQqdGhpcy5kO2ErKyl7dmFyIG89aVszK2FdLHM9aVszK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pWzMrbi5sZW5ndGhdLGM9aVszK24ubGVuZ3RoKzFdO3RoaXMua2V5cz1pLnN1YmFycmF5KGwsYyksdGhpcy5iYm94ZXM9aS5zdWJhcnJheShjKSx0aGlzLmluc2VydD10aGlzLl9pbnNlcnRSZWFkb25seX1lbHNle3RoaXMuZD1lKzIqcjtmb3IodmFyIHU9MDt1PHRoaXMuZCp0aGlzLmQ7dSsrKW4ucHVzaChbXSk7dGhpcy5rZXlzPVtdLHRoaXMuYmJveGVzPVtdfXRoaXMubj1lLHRoaXMuZXh0ZW50PXQsdGhpcy5wYWRkaW5nPXIsdGhpcy5zY2FsZT1lL3QsdGhpcy51aWQ9MDt2YXIgZj1yL2UqdDt0aGlzLm1pbj0tZix0aGlzLm1heD10K2Z9RG4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX2ZvckVhY2hDZWxsKGUscixuLGksdGhpcy5faW5zZXJ0Q2VsbCx0aGlzLnVpZCsrKSx0aGlzLmtleXMucHVzaCh0KSx0aGlzLmJib3hlcy5wdXNoKGUpLHRoaXMuYmJveGVzLnB1c2gociksdGhpcy5iYm94ZXMucHVzaChuKSx0aGlzLmJib3hlcy5wdXNoKGkpfSxEbi5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5PWZ1bmN0aW9uKCl7dGhyb3ciQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4ifSxEbi5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sRG4ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5taW4sbz10aGlzLm1heDtpZih0PD1hJiZlPD1hJiZvPD1yJiZvPD1uJiYhaSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTt2YXIgcz1bXTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwscyx7fSxpKSxzfSxEbi5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMuY2VsbHNbaV07aWYobnVsbCE9PWwpZm9yKHZhciBjPXRoaXMua2V5cyx1PXRoaXMuYmJveGVzLGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXTtpZih2b2lkIDA9PT1vW2hdKXt2YXIgcD00Kmg7KHM/cyh1W3ArMF0sdVtwKzFdLHVbcCsyXSx1W3ArM10pOnQ8PXVbcCsyXSYmZTw9dVtwKzNdJiZyPj11W3ArMF0mJm4+PXVbcCsxXSk/KG9baF09ITAsYS5wdXNoKGNbaF0pKTpvW2hdPSExfX19LERuLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHQpLGM9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKGUpLHU9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHIpLGY9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKG4pLGg9bDtoPD11O2grKylmb3IodmFyIHA9YztwPD1mO3ArKyl7dmFyIGQ9dGhpcy5kKnAraDtpZigoIXN8fHModGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoaCksdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQocCksdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoaCsxKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChwKzEpKSkmJmkuY2FsbCh0aGlzLHQsZSxyLG4sZCxhLG8scykpcmV0dXJufX0sRG4ucHJvdG90eXBlLl9jb252ZXJ0RnJvbUNlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnBhZGRpbmcpL3RoaXMuc2NhbGV9LERuLnByb3RvdHlwZS5fY29udmVydFRvQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZC0xLE1hdGguZmxvb3IodCp0aGlzLnNjYWxlKSt0aGlzLnBhZGRpbmcpKX0sRG4ucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmFycmF5QnVmZmVyKXJldHVybiB0aGlzLmFycmF5QnVmZmVyO2Zvcih2YXIgdD10aGlzLmNlbGxzLGU9Myt0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgaT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2lbMF09dGhpcy5leHRlbnQsaVsxXT10aGlzLm4saVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBhPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lbMytvXT1hLGkuc2V0KHMsYSksYSs9cy5sZW5ndGh9cmV0dXJuIGlbMyt0Lmxlbmd0aF09YSxpLnNldCh0aGlzLmtleXMsYSksYSs9dGhpcy5rZXlzLmxlbmd0aCxpWzMrdC5sZW5ndGgrMV09YSxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBSbj1zZWxmLkltYWdlRGF0YSxGbj1zZWxmLkltYWdlQml0bWFwLEJuPXt9O2Z1bmN0aW9uIE5uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jbGFzc1JlZ2lzdHJ5S2V5Iix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxCblt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIGpuIGluIE5uKCJPYmplY3QiLE9iamVjdCksem4uc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSx7YnVmZmVyOnJ9fSx6bi5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpuKHQuYnVmZmVyKX0sTm4oIkdyaWQiLHpuKSxObigiQ29sb3IiLHRlKSxObigiRXJyb3IiLEVycm9yKSxObigiUmVzb2x2ZWRJbWFnZSIsaWUpLE5uKCJTdHlsZVByb3BlcnR5RnVuY3Rpb24iLEtyKSxObigiU3R5bGVFeHByZXNzaW9uIixHcix7b21pdDpbIl9ldmFsdWF0b3IiXX0pLE5uKCJab29tRGVwZW5kZW50RXhwcmVzc2lvbiIsWnIpLE5uKCJab29tQ29uc3RhbnRFeHByZXNzaW9uIixYciksTm4oIkNvbXBvdW5kRXhwcmVzc2lvbiIseGUse29taXQ6WyJfZXZhbHVhdGUiXX0pLFNyKVNyW2puXS5fY2xhc3NSZWdpc3RyeUtleXx8Tm4oIkV4cHJlc3Npb25fIitqbixTcltqbl0pO2Z1bmN0aW9uIFVuKHQpe3JldHVybiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHx0LmNvbnN0cnVjdG9yJiYiQXJyYXlCdWZmZXIiPT09dC5jb25zdHJ1Y3Rvci5uYW1lKX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gRm4mJnQgaW5zdGFuY2VvZiBGbn1mdW5jdGlvbiBIbih0LGUpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYoVW4odCl8fFZuKHQpKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgUm4pcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLnB1c2goSG4obyxlKSl9cmV0dXJuIG59aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcz10LmNvbnN0cnVjdG9yLGw9cy5fY2xhc3NSZWdpc3RyeUtleTtpZighbCl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzIik7dmFyIGM9cy5zZXJpYWxpemU/cy5zZXJpYWxpemUodCxlKTp7fTtpZighcy5zZXJpYWxpemUpe2Zvcih2YXIgdSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkodSkmJiEoQm5bbF0ub21pdC5pbmRleE9mKHUpPj0wKSl7dmFyIGY9dFt1XTtjW3VdPUJuW2xdLnNoYWxsb3cuaW5kZXhPZih1KT49MD9mOkhuKGYsZSl9dCBpbnN0YW5jZW9mIEVycm9yJiYoYy5tZXNzYWdlPXQubWVzc2FnZSl9aWYoYy4kbmFtZSl0aHJvdyBuZXcgRXJyb3IoIiRuYW1lIHByb3BlcnR5IGlzIHJlc2VydmVkIGZvciB3b3JrZXIgc2VyaWFsaXphdGlvbiBsb2dpYy4iKTtyZXR1cm4iT2JqZWN0IiE9PWwmJihjLiRuYW1lPWwpLGN9dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcW4odCl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8VW4odCl8fFZuKHQpfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBSbilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChxbik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZT10LiRuYW1lfHwiT2JqZWN0IixyPUJuW2VdLmtsYXNzO2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzICIrZSk7aWYoci5kZXNlcmlhbGl6ZSlyZXR1cm4gci5kZXNlcmlhbGl6ZSh0KTtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaT0wLGE9T2JqZWN0LmtleXModCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCIkbmFtZSIhPT1vKXt2YXIgcz10W29dO25bb109Qm5bZV0uc2hhbGxvdy5pbmRleE9mKG8pPj0wP3M6cW4ocyl9fXJldHVybiBufXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9dmFyIEduPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07R24ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciBZbj17IkxhdGluLTEgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyOCYmdDw9MjU1fSxBcmFiaWM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE1MzYmJnQ8PTE3OTF9LCJBcmFiaWMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LCJBcmFiaWMgRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LCJIYW5ndWwgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzNTImJnQ8PTQ2MDd9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sIkdlbmVyYWwgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04MTkyJiZ0PD04MzAzfSwiTGV0dGVybGlrZSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sIk51bWJlciBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg5NjAmJnQ8PTkyMTV9LCJDb250cm9sIFBpY3R1cmVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MzEyJiZ0PD05NDcxfSwiR2VvbWV0cmljIFNoYXBlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTAwOCYmdDw9MTEyNjN9LCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sIkthbmd4aSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI3MiYmdDw9MTIyODd9LCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LCJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sIkJvcG9tb2ZvIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MDQmJnQ8PTEyNzM1fSwiQ0pLIFN0cm9rZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyODAwJiZ0PD0xMzA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTk5MDQmJnQ8PTE5OTY3fSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sIllpIFN5bGxhYmxlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sIllpIFJhZGljYWxzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDIxMjgmJnQ8PTQyMTkxfSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sIkhhbmd1bCBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTUyMTYmJnQ8PTU1Mjk1fSwiUHJpdmF0ZSBVc2UgQXJlYSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NDMzNiYmdDw9NjUwMjN9LCJWZXJ0aWNhbCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSwiU21hbGwgRm9ybSBWYXJpYW50cyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTA0JiZ0PD02NTEzNX0sIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24gV24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoWm4ocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBYbih0KXtyZXR1cm4hWW4uQXJhYmljKHQpJiYoIVluWyJBcmFiaWMgU3VwcGxlbWVudCJdKHQpJiYoIVluWyJBcmFiaWMgRXh0ZW5kZWQtQSJdKHQpJiYoIVluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KSYmIVluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KSkpKX1mdW5jdGlvbiBabih0KXtyZXR1cm4gNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoISFZblsiQm9wb21vZm8gRXh0ZW5kZWQiXSh0KXx8KCEhWW4uQm9wb21vZm8odCl8fCghKCFZblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8dD49NjUwOTcmJnQ8PTY1MTAzKXx8KCEhWW5bIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiXSh0KXx8KCEhWW5bIkNKSyBDb21wYXRpYmlsaXR5Il0odCl8fCghIVluWyJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCJdKHQpfHwoISFZblsiQ0pLIFN0cm9rZXMiXSh0KXx8KCEoIVluWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fCghIVluWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0odCl8fCghIVluWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0odCl8fCghIVluWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0odCl8fCghIVluWyJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIl0odCl8fCghIVluWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BIl0odCl8fCghIVluWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIl0odCl8fCghIVluWyJIYW5ndWwgSmFtbyJdKHQpfHwoISFZblsiSGFuZ3VsIFN5bGxhYmxlcyJdKHQpfHwoISFZbi5IaXJhZ2FuYSh0KXx8KCEhWW5bIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXSh0KXx8KCEhWW4uS2FuYnVuKHQpfHwoISFZblsiS2FuZ3hpIFJhZGljYWxzIl0odCl8fCghIVluWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0odCl8fCghKCFZbi5LYXRha2FuYSh0KXx8MTI1NDA9PT10KXx8KCEoIVluWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwoISghWW5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8dD49NjUxMTImJnQ8PTY1MTE4fHx0Pj02NTEyMyYmdDw9NjUxMjYpfHwoISFZblsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyJdKHQpfHwoISFZblsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCJdKHQpfHwoISFZblsiVmVydGljYWwgRm9ybXMiXSh0KXx8KCEhWW5bIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIl0odCl8fCghIVluWyJZaSBTeWxsYWJsZXMiXSh0KXx8ISFZblsiWWkgUmFkaWNhbHMiXSh0KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpfWZ1bmN0aW9uIEpuKHQpe3JldHVybiEoWm4odCl8fGZ1bmN0aW9uKHQpe3JldHVybiEoIVluWyJMYXRpbi0xIFN1cHBsZW1lbnQiXSh0KXx8MTY3IT09dCYmMTY5IT09dCYmMTc0IT09dCYmMTc3IT09dCYmMTg4IT09dCYmMTg5IT09dCYmMTkwIT09dCYmMjE1IT09dCYmMjQ3IT09dCl8fCghKCFZblsiR2VuZXJhbCBQdW5jdHVhdGlvbiJdKHQpfHw4MjE0IT09dCYmODIyNCE9PXQmJjgyMjUhPT10JiY4MjQwIT09dCYmODI0MSE9PXQmJjgyNTEhPT10JiY4MjUyIT09dCYmODI1OCE9PXQmJjgyNjMhPT10JiY4MjY0IT09dCYmODI2NSE9PXQmJjgyNzMhPT10KXx8KCEhWW5bIkxldHRlcmxpa2UgU3ltYm9scyJdKHQpfHwoISFZblsiTnVtYmVyIEZvcm1zIl0odCl8fCghKCFZblsiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiXSh0KXx8ISh0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSkpfHwoISghWW5bIkNvbnRyb2wgUGljdHVyZXMiXSh0KXx8OTI1MT09PXQpfHwoISFZblsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8KCEhWW5bIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8KCEhWW5bIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8KCEoIVluWyJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiXSh0KXx8dD49OTc1NCYmdDw9OTc1OSl8fCghKCFZblsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KXx8ISh0Pj0xMTAyNiYmdDw9MTEwNTV8fHQ+PTExMDg4JiZ0PD0xMTA5N3x8dD49MTExOTImJnQ8PTExMjQzKSl8fCghIVluWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8KCEhWW4uS2F0YWthbmEodCl8fCghIVluWyJQcml2YXRlIFVzZSBBcmVhIl0odCl8fCghIVluWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpfHwoISFZblsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHwoISFZblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8KDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KSkpKSkpKSkpKSkpKSkpKSl9KHQpKX1mdW5jdGlvbiBLbih0KXtyZXR1cm4gdD49MTQyNCYmdDw9MjMwM3x8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKHQpfHxZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0odCl9ZnVuY3Rpb24gUW4odCxlKXtyZXR1cm4hKCFlJiZLbih0KSkmJiEodD49MjMwNCYmdDw9MzU4M3x8dD49Mzg0MCYmdDw9NDI1NXx8WW4uS2htZXIodCkpfWZ1bmN0aW9uICRuKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKEtuKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITB9cmV0dXJuITF9dmFyIHRpPSJkZWZlcnJlZCIsZWk9ImxvYWRpbmciLHJpPSJsb2FkZWQiLG5pPSJlcnJvciIsaWk9bnVsbCxhaT0idW5hdmFpbGFibGUiLG9pPW51bGwsc2k9ZnVuY3Rpb24odCl7dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ0LmluZGV4T2YoIk5ldHdvcmtFcnJvciIpPi0xJiYoYWk9bmkpLGlpJiZpaSh0KX07ZnVuY3Rpb24gbGkoKXtjaS5maXJlKG5ldyBNdCgicGx1Z2luU3RhdGVDaGFuZ2UiLHtwbHVnaW5TdGF0dXM6YWkscGx1Z2luVVJMOm9pfSkpfXZhciBjaT1uZXcgRXQsdWk9ZnVuY3Rpb24oKXtyZXR1cm4gYWl9LGZpPWZ1bmN0aW9uKCl7aWYoYWkhPT10aXx8IW9pKXRocm93IG5ldyBFcnJvcigicnRsLXRleHQtcGx1Z2luIGNhbm5vdCBiZSBkb3dubG9hZGVkIHVubGVzcyBhIHBsdWdpblVSTCBpcyBzcGVjaWZpZWQiKTthaT1laSxsaSgpLG9pJiZ4dCh7dXJsOm9pfSwoZnVuY3Rpb24odCl7dD9zaSh0KTooYWk9cmksbGkoKSl9KSl9LGhpPXthcHBseUFyYWJpY1NoYXBpbmc6bnVsbCxwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6bnVsbCxwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6bnVsbCxpc0xvYWRlZDpmdW5jdGlvbigpe3JldHVybiBhaT09PXJpfHxudWxsIT1oaS5hcHBseUFyYWJpY1NoYXBpbmd9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiBhaT09PWVpfSxzZXRTdGF0ZTpmdW5jdGlvbih0KXthaT10LnBsdWdpblN0YXR1cyxvaT10LnBsdWdpblVSTH0saXNQYXJzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9aGkuYXBwbHlBcmFiaWNTaGFwaW5nJiZudWxsIT1oaS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQmJm51bGwhPWhpLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dH0sZ2V0UGx1Z2luVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIG9pfX0scGk9ZnVuY3Rpb24odCxlKXt0aGlzLnpvb209dCxlPyh0aGlzLm5vdz1lLm5vdyx0aGlzLmZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLnpvb21IaXN0b3J5PWUuem9vbUhpc3RvcnksdGhpcy50cmFuc2l0aW9uPWUudHJhbnNpdGlvbik6KHRoaXMubm93PTAsdGhpcy5mYWRlRHVyYXRpb249MCx0aGlzLnpvb21IaXN0b3J5PW5ldyBHbix0aGlzLnRyYW5zaXRpb249e30pfTtwaS5wcm90b3R5cGUuaXNTdXBwb3J0ZWRTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7aWYoIVFuKG5bcl0uY2hhckNvZGVBdCgwKSxlKSlyZXR1cm4hMX1yZXR1cm4hMH0odCxoaS5pc0xvYWRlZCgpKX0scGkucHJvdG90eXBlLmNyb3NzRmFkaW5nRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOk1hdGgubWluKCh0aGlzLm5vdy10aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uLDEpfSxwaS5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuem9vbSxlPXQtTWF0aC5mbG9vcih0KSxyPXRoaXMuY3Jvc3NGYWRpbmdGYWN0b3IoKTtyZXR1cm4gdD50aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbVNjYWxlOjIsdG9TY2FsZToxLHQ6ZSsoMS1lKSpyfTp7ZnJvbVNjYWxlOi41LHRvU2NhbGU6MSx0OjEtKDEtcikqZX19O3ZhciBkaT1mdW5jdGlvbih0LGUpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5leHByZXNzaW9uPWZ1bmN0aW9uKHQsZSl7aWYoQnIodCkpcmV0dXJuIG5ldyBLcih0LGUpO2lmKFlyKHQpKXt2YXIgcj1Kcih0LGUpO2lmKCJlcnJvciI9PT1yLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3Ioci52YWx1ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pKS5qb2luKCIsICIpKTtyZXR1cm4gci52YWx1ZX12YXIgbj10O3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmImNvbG9yIj09PWUudHlwZSYmKG49dGUucGFyc2UodCkpLHtraW5kOiJjb25zdGFudCIsZXZhbHVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn19fSh2b2lkIDA9PT1lP3Quc3BlY2lmaWNhdGlvbi5kZWZhdWx0OmUsdC5zcGVjaWZpY2F0aW9uKX07ZGkucHJvdG90eXBlLmlzRGF0YURyaXZlbj1mdW5jdGlvbigpe3JldHVybiJzb3VyY2UiPT09dGhpcy5leHByZXNzaW9uLmtpbmR8fCJjb21wb3NpdGUiPT09dGhpcy5leHByZXNzaW9uLmtpbmR9LGRpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsdCxlLHIpfTt2YXIgbWk9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9bmV3IGRpKHQsdm9pZCAwKX07bWkucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdmkodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLGUsdSh7fSx0LnRyYW5zaXRpb24sdGhpcy50cmFuc2l0aW9uKSx0Lm5vdyl9LG1pLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgdmkodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLG51bGwse30sMCl9O3ZhciBnaT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyl9O2dpLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUudmFsdWUpfSxnaS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IG1pKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS52YWx1ZT1uZXcgZGkodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sZ2kucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb24pfSxnaS5wcm90b3R5cGUuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgbWkodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb249eChlKXx8dm9pZCAwfSxnaS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKTt2YXIgYT10aGlzLmdldFRyYW5zaXRpb24obik7dm9pZCAwIT09YSYmKHRbbisiLXRyYW5zaXRpb24iXT1hKX1yZXR1cm4gdH0sZ2kucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgeWkodGhpcy5fcHJvcGVydGllcyksbj0wLGk9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ci5fdmFsdWVzW2FdPXRoaXMuX3ZhbHVlc1thXS50cmFuc2l0aW9uZWQodCxlLl92YWx1ZXNbYV0pfXJldHVybiByfSxnaS5wcm90b3R5cGUudW50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IHlpKHRoaXMuX3Byb3BlcnRpZXMpLGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3QuX3ZhbHVlc1tuXT10aGlzLl92YWx1ZXNbbl0udW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gdH07dmFyIHZpPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmJlZ2luPWkrbi5kZWxheXx8MCx0aGlzLmVuZD10aGlzLmJlZ2luK24uZHVyYXRpb258fDAsdC5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24mJihuLmRlbGF5fHxuLmR1cmF0aW9uKSYmKHRoaXMucHJpb3I9cil9O3ZpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm5vd3x8MCxpPXRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZSh0LGUsciksYT10aGlzLnByaW9yO2lmKGEpe2lmKG4+dGhpcy5lbmQpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxpO2lmKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxpO2lmKG48dGhpcy5iZWdpbilyZXR1cm4gYS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKTt2YXIgbz0obi10aGlzLmJlZ2luKS8odGhpcy5lbmQtdGhpcy5iZWdpbik7cmV0dXJuIHRoaXMucHJvcGVydHkuaW50ZXJwb2xhdGUoYS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKSxpLGZ1bmN0aW9uKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX0obykpfXJldHVybiBpfTt2YXIgeWk9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyl9O3lpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IF9pKHRoaXMuX3Byb3BlcnRpZXMpLGk9MCxhPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24uX3ZhbHVlc1tvXT10aGlzLl92YWx1ZXNbb10ucG9zc2libHlFdmFsdWF0ZSh0LGUscil9cmV0dXJuIG59LHlpLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZih0aGlzLl92YWx1ZXNbcl0ucHJpb3IpcmV0dXJuITB9cmV0dXJuITF9O3ZhciB4aT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UHJvcGVydHlWYWx1ZXMpfTt4aS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnZhbHVlKX0seGkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzW3RdPW5ldyBkaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSx4aS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKX1yZXR1cm4gdH0seGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgX2kodGhpcy5fcHJvcGVydGllcyksaT0wLGE9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5fdmFsdWVzW29dPXRoaXMuX3ZhbHVlc1tvXS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKX1yZXR1cm4gbn07dmFyIGJpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMucGFyYW1ldGVycz1yfTtiaS5wcm90b3R5cGUuaXNDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmR9LGJpLnByb3RvdHlwZS5jb25zdGFudE9yPWZ1bmN0aW9uKHQpe3JldHVybiJjb25zdGFudCI9PT10aGlzLnZhbHVlLmtpbmQ/dGhpcy52YWx1ZS52YWx1ZTp0fSxiaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSx0aGlzLnBhcmFtZXRlcnMsdCxlLHIsbil9O3ZhciBfaT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtfaS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciB3aT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07d2kucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSx3aS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUdlW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIgVGk9ZnVuY3Rpb24odCxlKXt0aGlzLnNwZWNpZmljYXRpb249dCx0aGlzLm92ZXJyaWRlcz1lfTtUaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4iY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmR8fCJjYW1lcmEiPT09dC5leHByZXNzaW9uLmtpbmQ/bmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9LGUpOm5ldyBiaSh0aGlzLHQuZXhwcmVzc2lvbixlKX0sVGkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29uc3RhbnQiIT09dC52YWx1ZS5raW5kfHwiY29uc3RhbnQiIT09ZS52YWx1ZS5raW5kKXJldHVybiB0O2lmKHZvaWQgMD09PXQudmFsdWUudmFsdWV8fHZvaWQgMD09PWUudmFsdWUudmFsdWUpcmV0dXJuIG5ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSx0LnBhcmFtZXRlcnMpO3ZhciBuPUdlW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0LnBhcmFtZXRlcnMpOnR9LFRpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuImNvbnN0YW50Ij09PXQua2luZD90LnZhbHVlOnQuZXZhbHVhdGUoZSxyLG4saSxhKX07dmFyIGtpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10LnZhbHVlKXJldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnZvaWQgMH0sZSk7aWYoImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgaT10LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbiksYT0icmVzb2x2ZWRJbWFnZSI9PT10LnByb3BlcnR5LnNwZWNpZmljYXRpb24udHlwZSYmInN0cmluZyIhPXR5cGVvZiBpP2kubmFtZTppLG89dGhpcy5fY2FsY3VsYXRlKGEsYSxhLGUpO3JldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOm99LGUpfWlmKCJjYW1lcmEiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBzPXRoaXMuX2NhbGN1bGF0ZSh0LmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206ZS56b29tLTF9KSx0LmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206ZS56b29tfSksdC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbSsxfSksZSk7cmV0dXJuIG5ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6c30sZSl9cmV0dXJuIG5ldyBiaSh0aGlzLHQuZXhwcmVzc2lvbixlKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKCJzb3VyY2UiPT09dC5raW5kKXt2YXIgbz10LmV2YWx1YXRlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShvLG8sbyxlKX1yZXR1cm4iY29tcG9zaXRlIj09PXQua2luZD90aGlzLl9jYWxjdWxhdGUodC5ldmFsdWF0ZSh7em9vbTpNYXRoLmZsb29yKGUuem9vbSktMX0scixuKSx0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKX0scixuKSx0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKSsxfSxyLG4pLGUpOnQudmFsdWV9LGUucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uem9vbT5uLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbTp0LHRvOmV9Ontmcm9tOnIsdG86ZX19LGUucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlfShUaSksQWk9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O0FpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMCE9PXQudmFsdWUpe2lmKCJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIGk9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pO3JldHVybiB0aGlzLl9jYWxjdWxhdGUoaSxpLGksZSl9cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSh0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKE1hdGguZmxvb3IoZS56b29tLTEpLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKE1hdGguZmxvb3IoZS56b29tKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaShNYXRoLmZsb29yKGUuem9vbSsxKSxlKSksZSl9fSxBaS5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi56b29tPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZX06e2Zyb206cix0bzplfX0sQWkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgTWk9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O01pLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiEhdC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pfSxNaS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIFNpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnByb3BlcnRpZXM9dCx0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcz17fSx0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcz1bXSx0KXt2YXIgcj10W2VdO3Iuc3BlY2lmaWNhdGlvbi5vdmVycmlkYWJsZSYmdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMucHVzaChlKTt2YXIgbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgZGkocix2b2lkIDApLGk9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgbWkocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWkudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07Tm4oIkRhdGFEcml2ZW5Qcm9wZXJ0eSIsVGkpLE5uKCJEYXRhQ29uc3RhbnRQcm9wZXJ0eSIsd2kpLE5uKCJDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5IixraSksTm4oIkNyb3NzRmFkZWRQcm9wZXJ0eSIsQWkpLE5uKCJDb2xvclJhbXBQcm9wZXJ0eSIsTWkpO3ZhciBFaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7aWYodC5jYWxsKHRoaXMpLHRoaXMuaWQ9ZS5pZCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuX2ZlYXR1cmVGaWx0ZXI9e2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiEwfSxuZWVkR2VvbWV0cnk6ITF9LCJjdXN0b20iIT09ZS50eXBlJiYoZT1lLHRoaXMubWV0YWRhdGE9ZS5tZXRhZGF0YSx0aGlzLm1pbnpvb209ZS5taW56b29tLHRoaXMubWF4em9vbT1lLm1heHpvb20sImJhY2tncm91bmQiIT09ZS50eXBlJiYodGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5zb3VyY2VMYXllcj1lWyJzb3VyY2UtbGF5ZXIiXSx0aGlzLmZpbHRlcj1lLmZpbHRlciksci5sYXlvdXQmJih0aGlzLl91bmV2YWx1YXRlZExheW91dD1uZXcgeGkoci5sYXlvdXQpKSxyLnBhaW50KSl7Zm9yKHZhciBuIGluIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQ9bmV3IGdpKHIucGFpbnQpLGUucGFpbnQpdGhpcy5zZXRQYWludFByb3BlcnR5KG4sZS5wYWludFtuXSx7dmFsaWRhdGU6ITF9KTtmb3IodmFyIGkgaW4gZS5sYXlvdXQpdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShpLGUubGF5b3V0W2ldLHt2YWxpZGF0ZTohMX0pO3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCksdGhpcy5wYWludD1uZXcgX2koci5wYWludCl9fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnN9LGUucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ2aXNpYmlsaXR5Ij09PXQ/dGhpcy52aXNpYmlsaXR5OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIubGF5b3V0LiIrdDtpZih0aGlzLl92YWxpZGF0ZShJbixuLHQsZSxyKSlyZXR1cm59InZpc2liaWxpdHkiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT1lfSxlLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBnKHQsIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksbnVsbCE9ZSl7dmFyIG49ImxheWVycy4iK3RoaXMuaWQrIi5wYWludC4iK3Q7aWYodGhpcy5fdmFsaWRhdGUoUG4sbix0LGUscikpcmV0dXJuITF9aWYoZyh0LCItdHJhbnNpdGlvbiIpKXJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNldFRyYW5zaXRpb24odC5zbGljZSgwLC0iLXRyYW5zaXRpb24iLmxlbmd0aCksZXx8dm9pZCAwKSwhMTt2YXIgaT10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbdF0sYT0iY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iPT09aS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS10eXBlIl0sbz1pLnZhbHVlLmlzRGF0YURyaXZlbigpLHM9aS52YWx1ZTt0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNldFZhbHVlKHQsZSksdGhpcy5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUodCk7dmFyIGw9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3RdLnZhbHVlO3JldHVybiBsLmlzRGF0YURyaXZlbigpfHxvfHxhfHx0aGlzLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGUodCxzLGwpfSxlLnByb3RvdHlwZS5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24odCl7cmV0dXJuISEodGhpcy5taW56b29tJiZ0PHRoaXMubWluem9vbSl8fCghISh0aGlzLm1heHpvb20mJnQ+PXRoaXMubWF4em9vbSl8fCJub25lIj09PXRoaXMudmlzaWJpbGl0eSl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCl9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKX0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCxlKXt0LmdldENyb3NzZmFkZVBhcmFtZXRlcnMmJih0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzPXQuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpKSx0aGlzLl91bmV2YWx1YXRlZExheW91dCYmKHRoaXMubGF5b3V0PXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSkpLHRoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXtpZDp0aGlzLmlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLnNvdXJjZSwic291cmNlLWxheWVyIjp0aGlzLnNvdXJjZUxheWVyLG1ldGFkYXRhOnRoaXMubWV0YWRhdGEsbWluem9vbTp0aGlzLm1pbnpvb20sbWF4em9vbTp0aGlzLm1heHpvb20sZmlsdGVyOnRoaXMuZmlsdGVyLGxheW91dDp0aGlzLl91bmV2YWx1YXRlZExheW91dCYmdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2VyaWFsaXplKCkscGFpbnQ6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCYmdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXJpYWxpemUoKX07cmV0dXJuIHRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PXRoaXMudmlzaWJpbGl0eSkseSh0LChmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSksKCFpfHwhMSE9PWkudmFsaWRhdGUpJiZPbih0aGlzLHQuY2FsbChMbix7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpMdCxzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH19KSl9LGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaXNTdGF0ZURlcGVuZGVudD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnBhaW50Ll92YWx1ZXMpe3ZhciBlPXRoaXMucGFpbnQuZ2V0KHQpO2lmKGUgaW5zdGFuY2VvZiBiaSYmenIoZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSYmKCgic291cmNlIj09PWUudmFsdWUua2luZHx8ImNvbXBvc2l0ZSI9PT1lLnZhbHVlLmtpbmQpJiZlLnZhbHVlLmlzU3RhdGVEZXBlbmRlbnQpKXJldHVybiEwfXJldHVybiExfSxlfShFdCksTGk9e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXl9LENpPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fSxQaT1mdW5jdGlvbigpe3RoaXMuaXNUcmFuc2ZlcnJlZD0hMSx0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApfTtmdW5jdGlvbiBJaSh0LGUpe3ZvaWQgMD09PWUmJihlPTEpO3ZhciByPTAsbj0wO3JldHVybnttZW1iZXJzOnQubWFwKChmdW5jdGlvbih0KXt2YXIgaSxhPShpPXQudHlwZSxMaVtpXS5CWVRFU19QRVJfRUxFTUVOVCksbz1yPU9pKHIsTWF0aC5tYXgoZSxhKSkscz10LmNvbXBvbmVudHN8fDE7cmV0dXJuIG49TWF0aC5tYXgobixhKSxyKz1hKnMse25hbWU6dC5uYW1lLHR5cGU6dC50eXBlLGNvbXBvbmVudHM6cyxvZmZzZXQ6b319KSksc2l6ZTpPaShyLE1hdGgubWF4KG4sZSkpLGFsaWdubWVudDplfX1mdW5jdGlvbiBPaSh0LGUpe3JldHVybiBNYXRoLmNlaWwodC9lKSplfVBpLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmltKCksZSYmKHQuaXNUcmFuc2ZlcnJlZD0hMCxlLnB1c2godC5hcnJheUJ1ZmZlcikpLHtsZW5ndGg6dC5sZW5ndGgsYXJyYXlCdWZmZXI6dC5hcnJheUJ1ZmZlcn19LFBpLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpO3JldHVybiBlLmFycmF5QnVmZmVyPXQuYXJyYXlCdWZmZXIsZS5sZW5ndGg9dC5sZW5ndGgsZS5jYXBhY2l0eT10LmFycmF5QnVmZmVyLmJ5dGVMZW5ndGgvZS5ieXRlc1BlckVsZW1lbnQsZS5fcmVmcmVzaFZpZXdzKCksZX0sUGkucHJvdG90eXBlLl90cmltPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGghPT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT10aGlzLmxlbmd0aCx0aGlzLmFycmF5QnVmZmVyPXRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCx0aGlzLmxlbmd0aCp0aGlzLmJ5dGVzUGVyRWxlbWVudCksdGhpcy5fcmVmcmVzaFZpZXdzKCkpfSxQaS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wfSxQaS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXJ2ZSh0KSx0aGlzLmxlbmd0aD10fSxQaS5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXtpZih0PnRoaXMuY2FwYWNpdHkpe3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgodCxNYXRoLmZsb29yKDUqdGhpcy5jYXBhY2l0eSksMTI4KSx0aGlzLmFycmF5QnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5KnRoaXMuYnl0ZXNQZXJFbGVtZW50KTt2YXIgZT10aGlzLnVpbnQ4O3RoaXMuX3JlZnJlc2hWaWV3cygpLGUmJnRoaXMudWludDguc2V0KGUpfX0sUGkucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9yZWZyZXNoVmlld3MoKSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggY29uY3JldGUgU3RydWN0QXJyYXkgbGF5b3V0Iil9O3ZhciB6aT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmludDE2W24rMF09ZSx0aGlzLmludDE2W24rMV09cix0fSxlfShQaSk7emkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJpNCIsemkpO3ZhciBEaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9NCp0O3JldHVybiB0aGlzLmludDE2W2ErMF09ZSx0aGlzLmludDE2W2ErMV09cix0aGlzLmludDE2W2ErMl09bix0aGlzLmludDE2W2ErM109aSx0fSxlfShQaSk7RGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LE5uKCJTdHJ1Y3RBcnJheUxheW91dDRpOCIsRGkpO3ZhciBSaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobysxKSx0aGlzLmVtcGxhY2Uobyx0LGUscixuLGksYSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9Nip0O3JldHVybiB0aGlzLmludDE2W3MrMF09ZSx0aGlzLmludDE2W3MrMV09cix0aGlzLmludDE2W3MrMl09bix0aGlzLmludDE2W3MrM109aSx0aGlzLmludDE2W3MrNF09YSx0aGlzLmludDE2W3MrNV09byx0fSxlfShQaSk7UmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIiLFJpKTt2YXIgRmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTQqdCxsPTgqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy51aW50OFtsKzRdPW4sdGhpcy51aW50OFtsKzVdPWksdGhpcy51aW50OFtsKzZdPWEsdGhpcy51aW50OFtsKzddPW8sdH0sZX0oUGkpO0ZpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgiLEZpKTt2YXIgQmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh1KzEpLHRoaXMuZW1wbGFjZSh1LHQsZSxyLG4saSxhLG8scyxsLGMpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9OSp0LGg9MTgqdDtyZXR1cm4gdGhpcy51aW50MTZbZiswXT1lLHRoaXMudWludDE2W2YrMV09cix0aGlzLnVpbnQxNltmKzJdPW4sdGhpcy51aW50MTZbZiszXT1pLHRoaXMudWludDE2W2YrNF09YSx0aGlzLnVpbnQxNltmKzVdPW8sdGhpcy51aW50MTZbZis2XT1zLHRoaXMudWludDE2W2YrN109bCx0aGlzLnVpbnQ4W2grMTZdPWMsdGhpcy51aW50OFtoKzE3XT11LHR9LGV9KFBpKTtCaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE4LE5uKCJTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4IixCaSk7dmFyIE5pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaCsxKSx0aGlzLmVtcGxhY2UoaCx0LGUscixuLGksYSxvLHMsbCxjLHUsZil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9MTIqdDtyZXR1cm4gdGhpcy5pbnQxNltwKzBdPWUsdGhpcy5pbnQxNltwKzFdPXIsdGhpcy5pbnQxNltwKzJdPW4sdGhpcy5pbnQxNltwKzNdPWksdGhpcy51aW50MTZbcCs0XT1hLHRoaXMudWludDE2W3ArNV09byx0aGlzLnVpbnQxNltwKzZdPXMsdGhpcy51aW50MTZbcCs3XT1sLHRoaXMuaW50MTZbcCs4XT1jLHRoaXMuaW50MTZbcCs5XT11LHRoaXMuaW50MTZbcCsxMF09Zix0aGlzLmludDE2W3ArMTFdPWgsdH0sZX0oUGkpO05pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQsTm4oIlN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0IixOaSk7dmFyIGppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobisxKSx0aGlzLmVtcGxhY2Uobix0LGUscil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9Myp0O3JldHVybiB0aGlzLmZsb2F0MzJbaSswXT1lLHRoaXMuZmxvYXQzMltpKzFdPXIsdGhpcy5mbG9hdDMyW2krMl09bix0fSxlfShQaSk7amkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQzZjEyIixqaSk7dmFyIFVpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoZSsxKSx0aGlzLmVtcGxhY2UoZSx0KX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUpe3ZhciByPTEqdDtyZXR1cm4gdGhpcy51aW50MzJbciswXT1lLHR9LGV9KFBpKTtVaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQsTm4oIlN0cnVjdEFycmF5TGF5b3V0MXVsNCIsVWkpO3ZhciBWaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShjKzEpLHRoaXMuZW1wbGFjZShjLHQsZSxyLG4saSxhLG8scyxsKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0xMCp0LGY9NSp0O3JldHVybiB0aGlzLmludDE2W3UrMF09ZSx0aGlzLmludDE2W3UrMV09cix0aGlzLmludDE2W3UrMl09bix0aGlzLmludDE2W3UrM109aSx0aGlzLmludDE2W3UrNF09YSx0aGlzLmludDE2W3UrNV09byx0aGlzLnVpbnQzMltmKzNdPXMsdGhpcy51aW50MTZbdSs4XT1sLHRoaXMudWludDE2W3UrOV09Yyx0fSxlfShQaSk7VmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yMCxObigiU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwIixWaSk7dmFyIEhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz02KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMuaW50MTZbcysyXT1uLHRoaXMuaW50MTZbcyszXT1pLHRoaXMuaW50MTZbcys0XT1hLHRoaXMuaW50MTZbcys1XT1vLHR9LGV9KFBpKTtIaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLE5uKCJTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIixIaSk7dmFyIHFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoYSsxKSx0aGlzLmVtcGxhY2UoYSx0LGUscixuLGkpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz00KnQscz04KnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltvKzBdPWUsdGhpcy5mbG9hdDMyW28rMV09cix0aGlzLmZsb2F0MzJbbysyXT1uLHRoaXMuaW50MTZbcys2XT1pLHRoaXMuaW50MTZbcys3XT1hLHR9LGV9KFBpKTtxaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2IixxaSk7dmFyIEdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MTIqdCxvPTMqdDtyZXR1cm4gdGhpcy51aW50OFthKzBdPWUsdGhpcy51aW50OFthKzFdPXIsdGhpcy5mbG9hdDMyW28rMV09bix0aGlzLmZsb2F0MzJbbysyXT1pLHR9LGV9KFBpKTtHaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLE5uKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIiLEdpKTt2YXIgWWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobisxKSx0aGlzLmVtcGxhY2Uobix0LGUscil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9Myp0O3JldHVybiB0aGlzLnVpbnQxNltpKzBdPWUsdGhpcy51aW50MTZbaSsxXT1yLHRoaXMudWludDE2W2krMl09bix0fSxlfShQaSk7WWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LE5uKCJTdHJ1Y3RBcnJheUxheW91dDN1aTYiLFlpKTt2YXIgV2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyl7dmFyIHY9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHYrMSksdGhpcy5lbXBsYWNlKHYsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdil7dmFyIHk9MjQqdCx4PTEyKnQsYj00OCp0O3JldHVybiB0aGlzLmludDE2W3krMF09ZSx0aGlzLmludDE2W3krMV09cix0aGlzLnVpbnQxNlt5KzJdPW4sdGhpcy51aW50MTZbeSszXT1pLHRoaXMudWludDMyW3grMl09YSx0aGlzLnVpbnQzMlt4KzNdPW8sdGhpcy51aW50MzJbeCs0XT1zLHRoaXMudWludDE2W3krMTBdPWwsdGhpcy51aW50MTZbeSsxMV09Yyx0aGlzLnVpbnQxNlt5KzEyXT11LHRoaXMuZmxvYXQzMlt4KzddPWYsdGhpcy5mbG9hdDMyW3grOF09aCx0aGlzLnVpbnQ4W2IrMzZdPXAsdGhpcy51aW50OFtiKzM3XT1kLHRoaXMudWludDhbYiszOF09bSx0aGlzLnVpbnQzMlt4KzEwXT1nLHRoaXMuaW50MTZbeSsyMl09dix0fSxlfShQaSk7V2kucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00OCxObigiU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCIsV2kpO3ZhciBYaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyl7dmFyIEU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKEUrMSksdGhpcy5lbXBsYWNlKEUsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyxFKXt2YXIgTD0zNCp0LEM9MTcqdDtyZXR1cm4gdGhpcy5pbnQxNltMKzBdPWUsdGhpcy5pbnQxNltMKzFdPXIsdGhpcy5pbnQxNltMKzJdPW4sdGhpcy5pbnQxNltMKzNdPWksdGhpcy5pbnQxNltMKzRdPWEsdGhpcy5pbnQxNltMKzVdPW8sdGhpcy5pbnQxNltMKzZdPXMsdGhpcy5pbnQxNltMKzddPWwsdGhpcy51aW50MTZbTCs4XT1jLHRoaXMudWludDE2W0wrOV09dSx0aGlzLnVpbnQxNltMKzEwXT1mLHRoaXMudWludDE2W0wrMTFdPWgsdGhpcy51aW50MTZbTCsxMl09cCx0aGlzLnVpbnQxNltMKzEzXT1kLHRoaXMudWludDE2W0wrMTRdPW0sdGhpcy51aW50MTZbTCsxNV09Zyx0aGlzLnVpbnQxNltMKzE2XT12LHRoaXMudWludDE2W0wrMTddPXksdGhpcy51aW50MTZbTCsxOF09eCx0aGlzLnVpbnQxNltMKzE5XT1iLHRoaXMudWludDE2W0wrMjBdPV8sdGhpcy51aW50MTZbTCsyMV09dyx0aGlzLnVpbnQxNltMKzIyXT1ULHRoaXMudWludDMyW0MrMTJdPWssdGhpcy5mbG9hdDMyW0MrMTNdPUEsdGhpcy5mbG9hdDMyW0MrMTRdPU0sdGhpcy5mbG9hdDMyW0MrMTVdPVMsdGhpcy5mbG9hdDMyW0MrMTZdPUUsdH0sZX0oUGkpO1hpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NjgsTm4oIlN0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCIsWGkpO3ZhciBaaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoZSsxKSx0aGlzLmVtcGxhY2UoZSx0KX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUpe3ZhciByPTEqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW3IrMF09ZSx0fSxlfShQaSk7WmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDFmNCIsWmkpO3ZhciBKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobisxKSx0aGlzLmVtcGxhY2Uobix0LGUscil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9Myp0O3JldHVybiB0aGlzLmludDE2W2krMF09ZSx0aGlzLmludDE2W2krMV09cix0aGlzLmludDE2W2krMl09bix0fSxlfShQaSk7SmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LE5uKCJTdHJ1Y3RBcnJheUxheW91dDNpNiIsSmkpO3ZhciBLaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobisxKSx0aGlzLmVtcGxhY2Uobix0LGUscil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9Mip0LGE9NCp0O3JldHVybiB0aGlzLnVpbnQzMltpKzBdPWUsdGhpcy51aW50MTZbYSsyXT1yLHRoaXMudWludDE2W2ErM109bix0fSxlfShQaSk7S2kucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LE5uKCJTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgiLEtpKTt2YXIgUWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLnVpbnQxNltuKzBdPWUsdGhpcy51aW50MTZbbisxXT1yLHR9LGV9KFBpKTtRaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQsTm4oIlN0cnVjdEFycmF5TGF5b3V0MnVpNCIsUWkpO3ZhciAkaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMudWludDE2W3IrMF09ZSx0fSxlfShQaSk7JGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yLE5uKCJTdHJ1Y3RBcnJheUxheW91dDF1aTIiLCRpKTt2YXIgdGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUocisxKSx0aGlzLmVtcGxhY2Uocix0LGUpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltuKzBdPWUsdGhpcy5mbG9hdDMyW24rMV09cix0fSxlfShQaSk7dGEucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJmOCIsdGEpO3ZhciBlYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTQqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2ErMF09ZSx0aGlzLmZsb2F0MzJbYSsxXT1yLHRoaXMuZmxvYXQzMlthKzJdPW4sdGhpcy5mbG9hdDMyW2ErM109aSx0fSxlfShQaSk7ZWEucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixObigiU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IixlYSk7dmFyIHJhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yUG9pbnRYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50WTp7Y29uZmlndXJhYmxlOiEwfSx4MTp7Y29uZmlndXJhYmxlOiEwfSx5MTp7Y29uZmlndXJhYmxlOiEwfSx4Mjp7Y29uZmlndXJhYmxlOiEwfSx5Mjp7Y29uZmlndXJhYmxlOiEwfSxmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuYW5jaG9yUG9pbnRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclBvaW50WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci54MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci55MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci54Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XX0sci55Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XX0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLnNvdXJjZUxheWVySW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdfSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci5hbmNob3JQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7cmEucHJvdG90eXBlLnNpemU9MjA7dmFyIG5hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcmEodGhpcyx0KX0sZX0oVmkpO05uKCJDb2xsaXNpb25Cb3hBcnJheSIsbmEpO3ZhciBpYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0scGxhY2VkT3JpZW50YXRpb246e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9LGNyb3NzVGlsZUlEOntjb25maWd1cmFibGU6ITB9LGFzc29jaWF0ZWRJY29uSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIudmVydGV4U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMl19LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci51cHBlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEyXX0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF19LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLnBsYWNlZE9yaWVudGF0aW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5wbGFjZWRPcmllbnRhdGlvbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN109dH0sci5oaWRkZW4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzhdfSxyLmhpZGRlbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszOF09dH0sci5jcm9zc1RpbGVJRC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTBdfSxyLmNyb3NzVGlsZUlELnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMF09dH0sci5hc3NvY2lhdGVkSWNvbkluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzIyXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oQ2kpO2lhLnByb3RvdHlwZS5zaXplPTQ4O3ZhciBhYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlhKHRoaXMsdCl9LGV9KFdpKTtObigiUGxhY2VkU3ltYm9sQXJyYXkiLGFhKTt2YXIgb2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclk6e2NvbmZpZ3VyYWJsZTohMH0scmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0scGxhY2VkSWNvblN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGtleTp7Y29uZmlndXJhYmxlOiEwfSx0ZXh0Qm94U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx0ZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxpY29uQm94U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxpY29uQm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxJY29uQm94U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bUljb25WZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1WZXJ0aWNhbEljb25WZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSx1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlczp7Y29uZmlndXJhYmxlOiEwfSxjcm9zc1RpbGVJRDp7Y29uZmlndXJhYmxlOiEwfSx0ZXh0Qm94U2NhbGU6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dE9mZnNldDA6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dE9mZnNldDE6e2NvbmZpZ3VyYWJsZTohMH0sY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXI6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM119LHIubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XX0sci52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XX0sci5wbGFjZWRJY29uU3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNl19LHIudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrN119LHIua2V5LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci50ZXh0Qm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV19LHIudGV4dEJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF19LHIudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIuaWNvbkJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEzXX0sci5pY29uQm94RW5kSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE0XX0sci52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNV19LHIudmVydGljYWxJY29uQm94RW5kSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE2XX0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE3XX0sci5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMThdfSxyLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTldfSxyLm51bUljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjBdfSxyLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMV19LHIudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIyXX0sci5jcm9zc1RpbGVJRC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTJdfSxyLmNyb3NzVGlsZUlELnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMl09dH0sci50ZXh0Qm94U2NhbGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxM119LHIudGV4dE9mZnNldDAuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxNF19LHIudGV4dE9mZnNldDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxNV19LHIuY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxNl19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KENpKTtvYS5wcm90b3R5cGUuc2l6ZT02ODt2YXIgc2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvYSh0aGlzLHQpfSxlfShYaSk7Tm4oIlN5bWJvbEluc3RhbmNlQXJyYXkiLHNhKTt2YXIgbGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRvZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZsb2F0MzJbMSp0KzBdfSxlfShaaSk7Tm4oIkdseXBoT2Zmc2V0QXJyYXkiLGxhKTt2YXIgY2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZX0oSmkpO05uKCJTeW1ib2xMaW5lVmVydGV4QXJyYXkiLGNhKTt2YXIgdWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KENpKTt1YS5wcm90b3R5cGUuc2l6ZT04O3ZhciBmYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHVhKHRoaXMsdCl9LGV9KEtpKTtObigiRmVhdHVyZUluZGV4QXJyYXkiLGZhKTt2YXIgaGE9SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMscGE9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07ZnVuY3Rpb24gZGEodCxlKXtyZXR1cm4gMjU2Kih0PWwoTWF0aC5mbG9vcih0KSwwLDI1NSkpKyhlPWwoTWF0aC5mbG9vcihlKSwwLDI1NSkpfXBhLnByb3RvdHlwZS5wcmVwYXJlU2VnbWVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoLTFdO3JldHVybiB0PnBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiZfKCJNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgIitwYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCsiOiBidWNrZXQgcmVxdWVzdGVkICIrdCksKCFpfHxpLnZlcnRleExlbmd0aCt0PnBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIfHxpLnNvcnRLZXkhPT1uKSYmKGk9e3ZlcnRleE9mZnNldDplLmxlbmd0aCxwcmltaXRpdmVPZmZzZXQ6ci5sZW5ndGgsdmVydGV4TGVuZ3RoOjAscHJpbWl0aXZlTGVuZ3RoOjB9LHZvaWQgMCE9PW4mJihpLnNvcnRLZXk9biksdGhpcy5zZWdtZW50cy5wdXNoKGkpKSxpfSxwYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VnbWVudHN9LHBhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLnNlZ21lbnRzO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtmb3IodmFyIG4gaW4gci52YW9zKXIudmFvc1tuXS5kZXN0cm95KCl9fSxwYS5zaW1wbGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgcGEoW3t2ZXJ0ZXhPZmZzZXQ6dCxwcmltaXRpdmVPZmZzZXQ6ZSx2ZXJ0ZXhMZW5ndGg6cixwcmltaXRpdmVMZW5ndGg6bix2YW9zOnt9LHNvcnRLZXk6MH1dKX0scGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxObigiU2VnbWVudFZlY3RvciIscGEpO3ZhciBtYT1JaShbe25hbWU6ImFfcGF0dGVybl9mcm9tIixjb21wb25lbnRzOjQsdHlwZToiVWludDE2In0se25hbWU6ImFfcGF0dGVybl90byIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BpeGVsX3JhdGlvX2Zyb20iLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCJ9LHtuYW1lOiJhX3BpeGVsX3JhdGlvX3RvIixjb21wb25lbnRzOjEsdHlwZToiVWludDgifV0pLGdhPWUoKGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGM7Zm9yKHI9MyZ0Lmxlbmd0aCxuPXQubGVuZ3RoLXIsaT1lLG89MzQzMjkxODM1MyxzPTQ2MTg0NTkwNyxjPTA7YzxuOylsPTI1NSZ0LmNoYXJDb2RlQXQoYyl8KDI1NSZ0LmNoYXJDb2RlQXQoKytjKSk8PDh8KDI1NSZ0LmNoYXJDb2RlQXQoKytjKSk8PDE2fCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDwyNCwrK2MsaT0yNzQ5MisoNjU1MzUmKGE9NSooNjU1MzUmKGk9KGlePWw9KDY1NTM1JihsPShsPSg2NTUzNSZsKSpvKygoKGw+Pj4xNikqbyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1KTw8MTV8bD4+PjE3KSkqcysoKChsPj4+MTYpKnMmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDEzfGk+Pj4xOSkpKygoNSooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1KSkrKCg1ODk2NCsoYT4+PjE2KSY2NTUzNSk8PDE2KTtzd2l0Y2gobD0wLHIpe2Nhc2UgMzpsXj0oMjU1JnQuY2hhckNvZGVBdChjKzIpKTw8MTY7Y2FzZSAyOmxePSgyNTUmdC5jaGFyQ29kZUF0KGMrMSkpPDw4O2Nhc2UgMTppXj1sPSg2NTUzNSYobD0obD0oNjU1MzUmKGxePTI1NSZ0LmNoYXJDb2RlQXQoYykpKSpvKygoKGw+Pj4xNikqbyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1KTw8MTV8bD4+PjE3KSkqcysoKChsPj4+MTYpKnMmNjU1MzUpPDwxNikmNDI5NDk2NzI5NX1yZXR1cm4gaV49dC5sZW5ndGgsaT0yMjQ2ODIyNTA3Kig2NTUzNSYoaV49aT4+PjE2KSkrKCgyMjQ2ODIyNTA3KihpPj4+MTYpJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUsaT0zMjY2NDg5OTA5Kig2NTUzNSYoaV49aT4+PjEzKSkrKCgzMjY2NDg5OTA5KihpPj4+MTYpJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUsKGlePWk+Pj4xNik+Pj4wfX0pKSx2YT1lKChmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPWVebixhPTA7bj49NDspcj0xNTQwNDgzNDc3Kig2NTUzNSYocj0yNTUmdC5jaGFyQ29kZUF0KGEpfCgyNTUmdC5jaGFyQ29kZUF0KCsrYSkpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsrYSkpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNiksaT0xNTQwNDgzNDc3Kig2NTUzNSZpKSsoKDE1NDA0ODM0NzcqKGk+Pj4xNikmNjU1MzUpPDwxNileKHI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePXI+Pj4yNCkpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK2E7c3dpdGNoKG4pe2Nhc2UgMzppXj0oMjU1JnQuY2hhckNvZGVBdChhKzIpKTw8MTY7Y2FzZSAyOmlePSgyNTUmdC5jaGFyQ29kZUF0KGErMSkpPDw4O2Nhc2UgMTppPTE1NDA0ODM0NzcqKDY1NTM1JihpXj0yNTUmdC5jaGFyQ29kZUF0KGEpKSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybiBpPTE1NDA0ODM0NzcqKDY1NTM1JihpXj1pPj4+MTMpKSsoKDE1NDA0ODM0NzcqKGk+Pj4xNikmNjU1MzUpPDwxNiksKGlePWk+Pj4xNSk+Pj4wfX0pKSx5YT1nYSx4YT1nYSxiYT12YTt5YS5tdXJtdXIzPXhhLHlhLm11cm11cjI9YmE7dmFyIF9hPWZ1bmN0aW9uKCl7dGhpcy5pZHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbmRleGVkPSExfTtfYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuaWRzLnB1c2goVGEodCkpLHRoaXMucG9zaXRpb25zLnB1c2goZSxyLG4pfSxfYS5wcm90b3R5cGUuZ2V0UG9zaXRpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1UYSh0KSxyPTAsbj10aGlzLmlkcy5sZW5ndGgtMTtyPG47KXt2YXIgaT1yK24+PjE7dGhpcy5pZHNbaV0+PWU/bj1pOnI9aSsxfWZvcih2YXIgYT1bXTt0aGlzLmlkc1tyXT09PWU7KXt2YXIgbz10aGlzLnBvc2l0aW9uc1szKnJdLHM9dGhpcy5wb3NpdGlvbnNbMypyKzFdLGw9dGhpcy5wb3NpdGlvbnNbMypyKzJdO2EucHVzaCh7aW5kZXg6byxzdGFydDpzLGVuZDpsfSkscisrfXJldHVybiBhfSxfYS5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgRmxvYXQ2NEFycmF5KHQuaWRzKSxuPW5ldyBVaW50MzJBcnJheSh0LnBvc2l0aW9ucyk7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7Zm9yKDtuPGk7KXtmb3IodmFyIGE9ZVtuK2k+PjFdLG89bi0xLHM9aSsxOzspe2Rve28rK313aGlsZShlW29dPGEpO2Rve3MtLX13aGlsZShlW3NdPmEpO2lmKG8+PXMpYnJlYWs7a2EoZSxvLHMpLGthKHIsMypvLDMqcyksa2EociwzKm8rMSwzKnMrMSksa2EociwzKm8rMiwzKnMrMil9cy1uPGktcz8odChlLHIsbixzKSxuPXMrMSk6KHQoZSxyLHMrMSxpKSxpPXMpfX0ocixuLDAsci5sZW5ndGgtMSksZSYmZS5wdXNoKHIuYnVmZmVyLG4uYnVmZmVyKSx7aWRzOnIscG9zaXRpb25zOm59fSxfYS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgX2E7cmV0dXJuIGUuaWRzPXQuaWRzLGUucG9zaXRpb25zPXQucG9zaXRpb25zLGUuaW5kZXhlZD0hMCxlfTt2YXIgd2E9TWF0aC5wb3coMiw1MyktMTtmdW5jdGlvbiBUYSh0KXt2YXIgZT0rdDtyZXR1cm4haXNOYU4oZSkmJmU8PXdhP2U6eWEoU3RyaW5nKHQpKX1mdW5jdGlvbiBrYSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufU5uKCJGZWF0dXJlUG9zaXRpb25NYXAiLF9hKTt2YXIgQWE9ZnVuY3Rpb24odCxlKXt0aGlzLmdsPXQuZ2wsdGhpcy5sb2NhdGlvbj1lfSxNYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0xaSh0aGlzLmxvY2F0aW9uLHQpKX0sZX0oQWEpLFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD0wfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sdCkpfSxlfShBYSksRWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTJmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdKSl9LGV9KEFhKSxMYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9WzAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV0mJnRbMl09PT10aGlzLmN1cnJlbnRbMl18fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0zZih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSx0WzJdKSl9LGV9KEFhKSxDYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9WzAsMCwwLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXSYmdFsyXT09PXRoaXMuY3VycmVudFsyXSYmdFszXT09PXRoaXMuY3VycmVudFszXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdLHRbMl0sdFszXSkpfSxlfShBYSksUGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PXRlLnRyYW5zcGFyZW50fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dC5yPT09dGhpcy5jdXJyZW50LnImJnQuZz09PXRoaXMuY3VycmVudC5nJiZ0LmI9PT10aGlzLmN1cnJlbnQuYiYmdC5hPT09dGhpcy5jdXJyZW50LmF8fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLHQucix0LmcsdC5iLHQuYSkpfSxlfShBYSksSWE9bmV3IEZsb2F0MzJBcnJheSgxNiksT2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PUlhfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodFsxMl0hPT10aGlzLmN1cnJlbnRbMTJdfHx0WzBdIT09dGhpcy5jdXJyZW50WzBdKXJldHVybiB0aGlzLmN1cnJlbnQ9dCx2b2lkIHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCExLHQpO2Zvcih2YXIgZT0xO2U8MTY7ZSsrKWlmKHRbZV0hPT10aGlzLmN1cnJlbnRbZV0pe3RoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCExLHQpO2JyZWFrfX0sZX0oQWEpO2Z1bmN0aW9uIHphKHQpe3JldHVybltkYSgyNTUqdC5yLDI1NSp0LmcpLGRhKDI1NSp0LmIsMjU1KnQuYSldfXZhciBEYT1mdW5jdGlvbih0LGUscil7dGhpcy52YWx1ZT10LHRoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSksdGhpcy50eXBlPXJ9O0RhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0LnNldChyLmNvbnN0YW50T3IodGhpcy52YWx1ZSkpfSxEYS5wcm90b3R5cGUuZ2V0QmluZGluZz1mdW5jdGlvbih0LGUscil7cmV0dXJuImNvbG9yIj09PXRoaXMudHlwZT9uZXcgUGEodCxlKTpuZXcgU2EodCxlKX07dmFyIFJhPWZ1bmN0aW9uKHQsZSl7dGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdH0pKSx0aGlzLnBhdHRlcm5Gcm9tPW51bGwsdGhpcy5wYXR0ZXJuVG89bnVsbCx0aGlzLnBpeGVsUmF0aW9Gcm9tPTEsdGhpcy5waXhlbFJhdGlvVG89MX07UmEucHJvdG90eXBlLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMucGl4ZWxSYXRpb0Zyb209ZS5waXhlbFJhdGlvLHRoaXMucGl4ZWxSYXRpb1RvPXQucGl4ZWxSYXRpbyx0aGlzLnBhdHRlcm5Gcm9tPWUudGxicix0aGlzLnBhdHRlcm5Ubz10LnRsYnJ9LFJhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSJ1X3BhdHRlcm5fdG8iPT09bj90aGlzLnBhdHRlcm5UbzoidV9wYXR0ZXJuX2Zyb20iPT09bj90aGlzLnBhdHRlcm5Gcm9tOiJ1X3BpeGVsX3JhdGlvX3RvIj09PW4/dGhpcy5waXhlbFJhdGlvVG86InVfcGl4ZWxfcmF0aW9fZnJvbSI9PT1uP3RoaXMucGl4ZWxSYXRpb0Zyb206bnVsbDtpJiZ0LnNldChpKX0sUmEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJ1X3BhdHRlcm4iPT09ci5zdWJzdHIoMCw5KT9uZXcgQ2EodCxlKTpuZXcgU2EodCxlKX07dmFyIEZhPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1yLHRoaXMubWF4VmFsdWU9MCx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6ImFfIit0LHR5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6ImNvbG9yIj09PXI/MjoxLG9mZnNldDowfX0pKSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O0ZhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoLG89dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaSgwKSxlLHt9LG4sW10saSk7dGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlKGEsdCxvKX0sRmEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOjB9LHIsbik7dGhpcy5fc2V0UGFpbnRWYWx1ZSh0LGUsaSl9LEZhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7aWYoImNvbG9yIj09PXRoaXMudHlwZSlmb3IodmFyIG49emEociksaT10O2k8ZTtpKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSxuWzBdLG5bMV0pO2Vsc2V7Zm9yKHZhciBhPXQ7YTxlO2ErKyl0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShhLHIpO3RoaXMubWF4VmFsdWU9TWF0aC5tYXgodGhpcy5tYXhWYWx1ZSxNYXRoLmFicyhyKSl9fSxGYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy5wYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXI/dGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk6dGhpcy5wYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpKX0sRmEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX07dmFyIEJhPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0KyJfdCJ9KSksdGhpcy50eXBlPXIsdGhpcy51c2VJbnRlZ2VyWm9vbT1uLHRoaXMuem9vbT1pLHRoaXMubWF4VmFsdWU9MCx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6ImFfIit0LHR5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6ImNvbG9yIj09PXI/NDoyLG9mZnNldDowfX0pKSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IGF9O0JhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKHRoaXMuem9vbSksZSx7fSxuLFtdLGkpLG89dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaSh0aGlzLnpvb20rMSksZSx7fSxuLFtdLGkpLHM9dGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aDt0aGlzLnBhaW50VmVydGV4QXJyYXkucmVzaXplKHQpLHRoaXMuX3NldFBhaW50VmFsdWUocyx0LGEsbyl9LEJhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTp0aGlzLnpvb219LHIsbiksYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206dGhpcy56b29tKzF9LHIsbik7dGhpcy5fc2V0UGFpbnRWYWx1ZSh0LGUsaSxhKX0sQmEucHJvdG90eXBlLl9zZXRQYWludFZhbHVlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBpPXphKHIpLGE9emEobiksbz10O288ZTtvKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UobyxpWzBdLGlbMV0sYVswXSxhWzFdKTtlbHNle2Zvcih2YXIgcz10O3M8ZTtzKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UocyxyLG4pO3RoaXMubWF4VmFsdWU9TWF0aC5tYXgodGhpcy5tYXhWYWx1ZSxNYXRoLmFicyhyKSxNYXRoLmFicyhuKSl9fSxCYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy5wYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXI/dGhpcy5wYWludFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSk6dGhpcy5wYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnBhaW50VmVydGV4QXJyYXksdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpKX0sQmEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX0sQmEucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnVzZUludGVnZXJab29tP01hdGguZmxvb3IoZS56b29tKTplLnpvb20sbj1sKHRoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKHIsdGhpcy56b29tLHRoaXMuem9vbSsxKSwwLDEpO3Quc2V0KG4pfSxCYS5wcm90b3R5cGUuZ2V0QmluZGluZz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBTYSh0LGUpfTt2YXIgTmE9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMudXNlSW50ZWdlclpvb209cix0aGlzLnpvb209bix0aGlzLmxheWVySWQ9YSx0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXk9bmV3IGksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheT1uZXcgaX07TmEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5Lmxlbmd0aDt0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkucmVzaXplKHQpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkucmVzaXplKHQpLHRoaXMuX3NldFBhaW50VmFsdWVzKG4sdCxlLnBhdHRlcm5zJiZlLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0scil9LE5hLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fc2V0UGFpbnRWYWx1ZXModCxlLHIucGF0dGVybnMmJnIucGF0dGVybnNbdGhpcy5sYXllcklkXSxpKX0sTmEucHJvdG90eXBlLl9zZXRQYWludFZhbHVlcz1mdW5jdGlvbih0LGUscixuKXtpZihuJiZyKXt2YXIgaT1yLm1pbixhPXIubWlkLG89ci5tYXgscz1uW2ldLGw9blthXSxjPW5bb107aWYocyYmbCYmYylmb3IodmFyIHU9dDt1PGU7dSsrKXRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHUsbC50bFswXSxsLnRsWzFdLGwuYnJbMF0sbC5iclsxXSxzLnRsWzBdLHMudGxbMV0scy5iclswXSxzLmJyWzFdLGwucGl4ZWxSYXRpbyxzLnBpeGVsUmF0aW8pLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuZW1wbGFjZSh1LGwudGxbMF0sbC50bFsxXSxsLmJyWzBdLGwuYnJbMV0sYy50bFswXSxjLnRsWzFdLGMuYnJbMF0sYy5iclsxXSxsLnBpeGVsUmF0aW8sYy5waXhlbFJhdGlvKX19LE5hLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5JiZ0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkmJnRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXImJih0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSxtYS5tZW1iZXJzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LG1hLm1lbWJlcnMsdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpKX0sTmEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlciYmdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfTt2YXIgamE9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5iaW5kZXJzPXt9LHRoaXMubGF5b3V0QXR0cmlidXRlcz1uLHRoaXMuX2J1ZmZlcnM9W107dmFyIGk9W107Zm9yKHZhciBhIGluIHQucGFpbnQuX3ZhbHVlcylpZihyKGEpKXt2YXIgbz10LnBhaW50LmdldChhKTtpZihvIGluc3RhbmNlb2YgYmkmJnpyKG8ucHJvcGVydHkuc3BlY2lmaWNhdGlvbikpe3ZhciBzPVZhKGEsdC50eXBlKSxsPW8udmFsdWUsYz1vLnByb3BlcnR5LnNwZWNpZmljYXRpb24udHlwZSx1PW8ucHJvcGVydHkudXNlSW50ZWdlclpvb20sZj1vLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXSxoPSJjcm9zcy1mYWRlZCI9PT1mfHwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iPT09ZjtpZigiY29uc3RhbnQiPT09bC5raW5kKXRoaXMuYmluZGVyc1thXT1oP25ldyBSYShsLnZhbHVlLHMpOm5ldyBEYShsLnZhbHVlLHMsYyksaS5wdXNoKCIvdV8iK2EpO2Vsc2UgaWYoInNvdXJjZSI9PT1sLmtpbmR8fGgpe3ZhciBwPUhhKGEsYywic291cmNlIik7dGhpcy5iaW5kZXJzW2FdPWg/bmV3IE5hKGwsYyx1LGUscCx0LmlkKTpuZXcgRmEobCxzLGMscCksaS5wdXNoKCIvYV8iK2EpfWVsc2V7dmFyIGQ9SGEoYSxjLCJjb21wb3NpdGUiKTt0aGlzLmJpbmRlcnNbYV09bmV3IEJhKGwscyxjLHUsZSxkKSxpLnB1c2goIi96XyIrYSl9fX10aGlzLmNhY2hlS2V5PWkuc29ydCgpLmpvaW4oIiIpfTtqYS5wcm90b3R5cGUuZ2V0TWF4VmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5iaW5kZXJzW3RdO3JldHVybiBlIGluc3RhbmNlb2YgRmF8fGUgaW5zdGFuY2VvZiBCYT9lLm1heFZhbHVlOjB9LGphLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhIGluIHRoaXMuYmluZGVycyl7dmFyIG89dGhpcy5iaW5kZXJzW2FdOyhvIGluc3RhbmNlb2YgRmF8fG8gaW5zdGFuY2VvZiBCYXx8byBpbnN0YW5jZW9mIE5hKSYmby5wb3B1bGF0ZVBhaW50QXJyYXkodCxlLHIsbixpKX19LGphLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5iaW5kZXJzKXt2YXIgbj10aGlzLmJpbmRlcnNbcl07biBpbnN0YW5jZW9mIFJhJiZuLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyh0LGUpfX0samEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ITE7Zm9yKHZhciBvIGluIHQpZm9yKHZhciBzPTAsbD1lLmdldFBvc2l0aW9ucyhvKTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1yLmZlYXR1cmUoYy5pbmRleCk7Zm9yKHZhciBmIGluIHRoaXMuYmluZGVycyl7dmFyIGg9dGhpcy5iaW5kZXJzW2ZdO2lmKChoIGluc3RhbmNlb2YgRmF8fGggaW5zdGFuY2VvZiBCYXx8aCBpbnN0YW5jZW9mIE5hKSYmITA9PT1oLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCl7dmFyIHA9bi5wYWludC5nZXQoZik7aC5leHByZXNzaW9uPXAudmFsdWUsaC51cGRhdGVQYWludEFycmF5KGMuc3RhcnQsYy5lbmQsdSx0W29dLGkpLGE9ITB9fX1yZXR1cm4gYX0samEucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07KHIgaW5zdGFuY2VvZiBEYXx8ciBpbnN0YW5jZW9mIFJhKSYmdC5wdXNoLmFwcGx5KHQsci51bmlmb3JtTmFtZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iI2RlZmluZSBIQVNfVU5JRk9STV8iK3R9KSkpfXJldHVybiB0fSxqYS5wcm90b3R5cGUuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnN9LGphLnByb3RvdHlwZS5nZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBpPXRoaXMuYmluZGVyc1tuXTtpZihpIGluc3RhbmNlb2YgRGF8fGkgaW5zdGFuY2VvZiBSYXx8aSBpbnN0YW5jZW9mIEJhKWZvcih2YXIgYT0wLG89aS51bmlmb3JtTmFtZXM7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2lmKGVbc10pe3ZhciBsPWkuZ2V0QmluZGluZyh0LGVbc10scyk7ci5wdXNoKHtuYW1lOnMscHJvcGVydHk6bixiaW5kaW5nOmx9KX19fXJldHVybiByfSxqYS5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8ubmFtZSxsPW8ucHJvcGVydHksYz1vLmJpbmRpbmc7dGhpcy5iaW5kZXJzW2xdLnNldFVuaWZvcm0oYyxuLHIuZ2V0KGwpLHMpfX0samEucHJvdG90eXBlLnVwZGF0ZVBhaW50QnVmZmVycz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fYnVmZmVycz1bXSx0aGlzLmJpbmRlcnMpe3ZhciByPXRoaXMuYmluZGVyc1tlXTtpZih0JiZyIGluc3RhbmNlb2YgTmEpe3ZhciBuPTI9PT10LmZyb21TY2FsZT9yLnpvb21JblBhaW50VmVydGV4QnVmZmVyOnIuem9vbU91dFBhaW50VmVydGV4QnVmZmVyO24mJnRoaXMuX2J1ZmZlcnMucHVzaChuKX1lbHNlKHIgaW5zdGFuY2VvZiBGYXx8ciBpbnN0YW5jZW9mIEJhKSYmci5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5fYnVmZmVycy5wdXNoKHIucGFpbnRWZXJ0ZXhCdWZmZXIpfX0samEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07KHIgaW5zdGFuY2VvZiBGYXx8ciBpbnN0YW5jZW9mIEJhfHxyIGluc3RhbmNlb2YgTmEpJiZyLnVwbG9hZCh0KX10aGlzLnVwZGF0ZVBhaW50QnVmZmVycygpfSxqYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRlcnMpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTsoZSBpbnN0YW5jZW9mIEZhfHxlIGluc3RhbmNlb2YgQmF8fGUgaW5zdGFuY2VvZiBOYSkmJmUuZGVzdHJveSgpfX07dmFyIFVhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz17fTtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdPW5ldyBqYShvLHIsbix0KX10aGlzLm5lZWRzVXBsb2FkPSExLHRoaXMuX2ZlYXR1cmVNYXA9bmV3IF9hLHRoaXMuX2J1ZmZlck9mZnNldD0wfTtmdW5jdGlvbiBWYSh0LGUpe3JldHVybnsidGV4dC1vcGFjaXR5IjpbIm9wYWNpdHkiXSwiaWNvbi1vcGFjaXR5IjpbIm9wYWNpdHkiXSwidGV4dC1jb2xvciI6WyJmaWxsX2NvbG9yIl0sImljb24tY29sb3IiOlsiZmlsbF9jb2xvciJdLCJ0ZXh0LWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJpY29uLWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJ0ZXh0LWhhbG8tYmx1ciI6WyJoYWxvX2JsdXIiXSwiaWNvbi1oYWxvLWJsdXIiOlsiaGFsb19ibHVyIl0sInRleHQtaGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImljb24taGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImxpbmUtZ2FwLXdpZHRoIjpbImdhcHdpZHRoIl0sImxpbmUtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdfVt0XXx8W3QucmVwbGFjZShlKyItIiwiIikucmVwbGFjZSgvLS9nLCJfIildfWZ1bmN0aW9uIEhhKHQsZSxyKXt2YXIgbj17Y29sb3I6e3NvdXJjZTp0YSxjb21wb3NpdGU6ZWF9LG51bWJlcjp7c291cmNlOlppLGNvbXBvc2l0ZTp0YX19LGk9ZnVuY3Rpb24odCl7cmV0dXJueyJsaW5lLXBhdHRlcm4iOntzb3VyY2U6QmksY29tcG9zaXRlOkJpfSwiZmlsbC1wYXR0ZXJuIjp7c291cmNlOkJpLGNvbXBvc2l0ZTpCaX0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOntzb3VyY2U6QmksY29tcG9zaXRlOkJpfX1bdF19KHQpO3JldHVybiBpJiZpW3JdfHxuW2VdW3JdfVVhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8gaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbb10ucG9wdWxhdGVQYWludEFycmF5cyh0LGUsbixpLGEpO3ZvaWQgMCE9PWUuaWQmJnRoaXMuX2ZlYXR1cmVNYXAuYWRkKGUuaWQscix0aGlzLl9idWZmZXJPZmZzZXQsdCksdGhpcy5fYnVmZmVyT2Zmc2V0PXQsdGhpcy5uZWVkc1VwbG9hZD0hMH0sVWEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9cjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5uZWVkc1VwbG9hZD10aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXS51cGRhdGVQYWludEFycmF5cyh0LHRoaXMuX2ZlYXR1cmVNYXAsZSxvLG4pfHx0aGlzLm5lZWRzVXBsb2FkfX0sVWEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LFVhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5uZWVkc1VwbG9hZCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KTt0aGlzLm5lZWRzVXBsb2FkPSExfX0sVWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxObigiQ29uc3RhbnRCaW5kZXIiLERhKSxObigiQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyIixSYSksTm4oIlNvdXJjZUV4cHJlc3Npb25CaW5kZXIiLEZhKSxObigiQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlciIsTmEpLE5uKCJDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIixCYSksTm4oIlByb2dyYW1Db25maWd1cmF0aW9uIixqYSx7b21pdDpbIl9idWZmZXJzIl19KSxObigiUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQiLFVhKTt2YXIgcWEsR2E9KHFhPTE1LHttaW46LTEqTWF0aC5wb3coMixxYS0xKSxtYXg6TWF0aC5wb3coMixxYS0xKS0xfSk7ZnVuY3Rpb24gWWEodCl7Zm9yKHZhciBlPTgxOTIvdC5leHRlbnQscj10LmxvYWRHZW9tZXRyeSgpLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIGk9cltuXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07by54PU1hdGgucm91bmQoby54KmUpLG8ueT1NYXRoLnJvdW5kKG8ueSplKSwoby54PEdhLm1pbnx8by54PkdhLm1heHx8by55PEdhLm1pbnx8by55PkdhLm1heCkmJihfKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpLG8ueD1sKG8ueCxHYS5taW4sR2EubWF4KSxvLnk9bChvLnksR2EubWluLEdhLm1heCkpfXJldHVybiByfWZ1bmN0aW9uIFdhKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIFhhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHppLHRoaXMuaW5kZXhBcnJheT1uZXcgWWksdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFVhKGhhLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2Z1bmN0aW9uIFphKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoaW8oZSx0W3JdKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihpbyh0LGVbbl0pKXJldHVybiEwO3JldHVybiEhJGEodCxlKX1mdW5jdGlvbiBKYSh0LGUscil7cmV0dXJuISFpbyh0LGUpfHwhIWVvKGUsdCxyKX1mdW5jdGlvbiBLYSh0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gbm8oZSx0WzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoaW8odCxuW2ldKSlyZXR1cm4hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihubyhlLHRbYV0pKXJldHVybiEwO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKCRhKHQsZVtvXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUWEodCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKCRhKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZW8oZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKGVvKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkYSh0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspe2lmKHRvKG4saSxlW2FdLGVbYSsxXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdG8odCxlLHIsbil7cmV0dXJuIHcodCxyLG4pIT09dyhlLHIsbikmJncodCxlLHIpIT09dyh0LGUsbil9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKXtpZihybyh0LGVbaS0xXSxlW2ldKTxuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHJvKHQsZSxyKXt2YXIgbj1lLmRpc3RTcXIocik7aWYoMD09PW4pcmV0dXJuIHQuZGlzdFNxcihlKTt2YXIgaT0oKHQueC1lLngpKihyLngtZS54KSsodC55LWUueSkqKHIueS1lLnkpKS9uO3JldHVybiBpPDA/dC5kaXN0U3FyKGUpOmk+MT90LmRpc3RTcXIocik6dC5kaXN0U3FyKHIuc3ViKGUpLl9tdWx0KGkpLl9hZGQoZSkpfWZ1bmN0aW9uIG5vKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9MCxsPShyPXRbb10pLmxlbmd0aC0xO3M8ci5sZW5ndGg7bD1zKyspbj1yW3NdLGk9cltsXSxuLnk+ZS55IT1pLnk+ZS55JiZlLng8KGkueC1uLngpKihlLnktbi55KS8oaS55LW4ueSkrbi54JiYoYT0hYSk7cmV0dXJuIGF9ZnVuY3Rpb24gaW8odCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZnVuY3Rpb24gYW8odCxlLHIpe3ZhciBuPXJbMF0saT1yWzJdO2lmKHQueDxuLngmJmUueDxuLnh8fHQueD5pLngmJmUueD5pLnh8fHQueTxuLnkmJmUueTxuLnl8fHQueT5pLnkmJmUueT5pLnkpcmV0dXJuITE7dmFyIGE9dyh0LGUsclswXSk7cmV0dXJuIGEhPT13KHQsZSxyWzFdKXx8YSE9PXcodCxlLHJbMl0pfHxhIT09dyh0LGUsclszXSl9ZnVuY3Rpb24gb28odCxlLHIpe3ZhciBuPWUucGFpbnQuZ2V0KHQpLnZhbHVlO3JldHVybiJjb25zdGFudCI9PT1uLmtpbmQ/bi52YWx1ZTpyLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCkuZ2V0TWF4VmFsdWUodCl9ZnVuY3Rpb24gc28odCl7cmV0dXJuIE1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBsbyh0LGUscixuLGEpe2lmKCFlWzBdJiYhZVsxXSlyZXR1cm4gdDt2YXIgbz1pLmNvbnZlcnQoZSkuX211bHQoYSk7InZpZXdwb3J0Ij09PXImJm8uX3JvdGF0ZSgtbik7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXTtzLnB1c2goYy5zdWIobykpfXJldHVybiBzfVhhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllcnNbMF0saT1bXSxhPW51bGw7ImNpcmNsZSI9PT1uLnR5cGUmJihhPW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikpO2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmZlYXR1cmUsdT1sLmlkLGY9bC5pbmRleCxoPWwuc291cmNlTGF5ZXJJbmRleCxwPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxkPXt0eXBlOmMudHlwZSxpZDp1LHByb3BlcnRpZXM6Yy5wcm9wZXJ0aWVzLGdlb21ldHJ5OnA/WWEoYyk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgcGkodGhpcy56b29tKSxkLHIpKXtwfHwoZC5nZW9tZXRyeT1ZYShjKSk7dmFyIG09YT9hLmV2YWx1YXRlKGQse30scik6dm9pZCAwLGc9e2lkOnUscHJvcGVydGllczpjLnByb3BlcnRpZXMsdHlwZTpjLnR5cGUsc291cmNlTGF5ZXJJbmRleDpoLGluZGV4OmYsZ2VvbWV0cnk6ZC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5Om19O2kucHVzaChnKX19YSYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgdj0wLHk9aTt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl0sYj14LF89Yi5nZW9tZXRyeSx3PWIuaW5kZXgsVD1iLnNvdXJjZUxheWVySW5kZXgsaz10W3ddLmZlYXR1cmU7dGhpcy5hZGRGZWF0dXJlKHgsXyx3LHIpLGUuZmVhdHVyZUluZGV4Lmluc2VydChrLF8sdyxULHRoaXMuaW5kZXgpfX0sWGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxYYS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LFhhLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxYYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGhhKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LFhhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sWGEucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSlmb3IodmFyIG89MCxzPWFbaV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC54LHU9bC55O2lmKCEoYzwwfHxjPj04MTkyfHx1PDB8fHU+PTgxOTIpKXt2YXIgZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXksdC5zb3J0S2V5KSxoPWYudmVydGV4TGVuZ3RoO1dhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksYyx1LC0xLC0xKSxXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwxLC0xKSxXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwxLDEpLFdhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksYyx1LC0xLDEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoLGgrMSxoKzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoLGgrMyxoKzIpLGYudmVydGV4TGVuZ3RoKz00LGYucHJpbWl0aXZlTGVuZ3RoKz0yfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscix7fSxuKX0sTm4oIkNpcmNsZUJ1Y2tldCIsWGEse29taXQ6WyJsYXllcnMiXX0pO3ZhciBjbz1uZXcgU2koeyJjaXJjbGUtc29ydC1rZXkiOm5ldyBUaShMdC5sYXlvdXRfY2lyY2xlWyJjaXJjbGUtc29ydC1rZXkiXSl9KSx1bz17cGFpbnQ6bmV3IFNpKHsiY2lyY2xlLXJhZGl1cyI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXJhZGl1cyJdKSwiY2lyY2xlLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtY29sb3IiXSksImNpcmNsZS1ibHVyIjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtYmx1ciJdKSwiY2lyY2xlLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1vcGFjaXR5Il0pLCJjaXJjbGUtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtdHJhbnNsYXRlIl0pLCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSksImNpcmNsZS1waXRjaC1zY2FsZSI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLXNjYWxlIl0pLCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IjpuZXcgd2koTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Il0pLCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLXdpZHRoIl0pLCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLWNvbG9yIl0pLCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2Utb3BhY2l0eSJdKX0pLGxheW91dDpjb30sZm89InVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDMyQXJyYXk/RmxvYXQzMkFycmF5OkFycmF5O2Z1bmN0aW9uIGhvKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH1mdW5jdGlvbiBwbyh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sbT1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmYrdyptLHRbMV09eCppK2IqbCtfKmgrdypnLHRbMl09eCphK2IqYytfKnArdyp2LHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypmK3cqbSx0WzVdPXgqaStiKmwrXypoK3cqZyx0WzZdPXgqYStiKmMrXypwK3cqdix0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypmK3cqbSx0WzldPXgqaStiKmwrXypoK3cqZyx0WzEwXT14KmErYipjK18qcCt3KnYsdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmYrdyptLHRbMTNdPXgqaStiKmwrXypoK3cqZyx0WzE0XT14KmErYipjK18qcCt3KnYsdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9TWF0aC5oeXBvdHx8KE1hdGguaHlwb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllKz10W3JdKnRbcl07cmV0dXJuIE1hdGguc3FydChlKX0pO3ZhciBtbz1wbzt2YXIgZ28sdm8seW89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0fTtnbz1uZXcgZm8oMyksZm8hPUZsb2F0MzJBcnJheSYmKGdvWzBdPTAsZ29bMV09MCxnb1syXT0wKSx2bz1nbztmdW5jdGlvbiB4byh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH0hZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbyg0KTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCksdH0oKX0oKTt2YXIgYm89ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07cmV0dXJuIGUqZStyKnJ9LF9vPShmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDIpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFswXT0wLHRbMV09MCksdH0oKX0oKSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsdW8pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gb28oImNpcmNsZS1yYWRpdXMiLHRoaXMsZSkrb28oImNpcmNsZS1zdHJva2Utd2lkdGgiLHRoaXMsZSkrc28odGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9bG8odCx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciIpLGEuYW5nbGUsbyksYz10aGlzLnBhaW50LmdldCgiY2lyY2xlLXJhZGl1cyIpLmV2YWx1YXRlKGUscikrdGhpcy5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHU9Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpLGY9dT9sOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gd28odCxlKX0pKX0obCxzKSxoPXU/YypvOmMscD0wLGQ9bjtwPGQubGVuZ3RoO3ArPTEpZm9yKHZhciBtPTAsZz1kW3BdO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXSx5PXU/djp3byh2LHMpLHg9aCxiPXhvKFtdLFt2Lngsdi55LDAsMV0scyk7aWYoInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmIm1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpP3gqPWJbM10vYS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSYmKHgqPWEuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9iWzNdKSxKYShmLHkseCkpcmV0dXJuITB9cmV0dXJuITF9LGV9KEVpKSk7ZnVuY3Rpb24gd28odCxlKXt2YXIgcj14byhbXSxbdC54LHQueSwwLDFdLGUpO3JldHVybiBuZXcgaShyWzBdL3JbM10sclsxXS9yWzNdKX12YXIgVG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShYYSk7ZnVuY3Rpb24ga28odCxlLHIsbil7dmFyIGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4pe2lmKG4gaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSluPW5ldyBVaW50OEFycmF5KG4uYnVmZmVyKTtlbHNlIGlmKG4ubGVuZ3RoIT09aSphKnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm1pc21hdGNoZWQgaW1hZ2Ugc2l6ZSIpfWVsc2Ugbj1uZXcgVWludDhBcnJheShpKmEqcik7cmV0dXJuIHQud2lkdGg9aSx0LmhlaWdodD1hLHQuZGF0YT1uLHR9ZnVuY3Rpb24gQW8odCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodDtpZihuIT09dC53aWR0aHx8aSE9PXQuaGVpZ2h0KXt2YXIgYT1rbyh7fSx7d2lkdGg6bixoZWlnaHQ6aX0scik7TW8odCxhLHt4OjAseTowfSx7eDowLHk6MH0se3dpZHRoOk1hdGgubWluKHQud2lkdGgsbiksaGVpZ2h0Ok1hdGgubWluKHQuaGVpZ2h0LGkpfSxyKSx0LndpZHRoPW4sdC5oZWlnaHQ9aSx0LmRhdGE9YS5kYXRhfX1mdW5jdGlvbiBNbyh0LGUscixuLGksYSl7aWYoMD09PWkud2lkdGh8fDA9PT1pLmhlaWdodClyZXR1cm4gZTtpZihpLndpZHRoPnQud2lkdGh8fGkuaGVpZ2h0PnQuaGVpZ2h0fHxyLng+dC53aWR0aC1pLndpZHRofHxyLnk+dC5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHkiKTtpZihpLndpZHRoPmUud2lkdGh8fGkuaGVpZ2h0PmUuaGVpZ2h0fHxuLng+ZS53aWR0aC1pLndpZHRofHxuLnk+ZS5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2Zvcih2YXIgbz10LmRhdGEscz1lLmRhdGEsbD0wO2w8aS5oZWlnaHQ7bCsrKWZvcih2YXIgYz0oKHIueStsKSp0LndpZHRoK3IueCkqYSx1PSgobi55K2wpKmUud2lkdGgrbi54KSphLGY9MDtmPGkud2lkdGgqYTtmKyspc1t1K2ZdPW9bYytmXTtyZXR1cm4gZX1ObigiSGVhdG1hcEJ1Y2tldCIsVG8se29taXQ6WyJsYXllcnMiXX0pO3ZhciBTbz1mdW5jdGlvbih0LGUpe2tvKHRoaXMsdCwxLGUpfTtTby5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe0FvKHRoaXMsdCwxKX0sU28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTbyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxTby5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7TW8odCxlLHIsbixpLDEpfTt2YXIgRW89ZnVuY3Rpb24odCxlKXtrbyh0aGlzLHQsNCxlKX07RW8ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtBbyh0aGlzLHQsNCl9LEVvLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLmRhdGEuc2V0KHQpOnQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT90aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpOnRoaXMuZGF0YT10fSxFby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVvKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LEVvLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtNbyh0LGUscixuLGksNCl9LE5uKCJBbHBoYUltYWdlIixTbyksTm4oIlJHQkFJbWFnZSIsRW8pO3ZhciBMbz17cGFpbnQ6bmV3IFNpKHsiaGVhdG1hcC1yYWRpdXMiOm5ldyBUaShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLXJhZGl1cyJdKSwiaGVhdG1hcC13ZWlnaHQiOm5ldyBUaShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLXdlaWdodCJdKSwiaGVhdG1hcC1pbnRlbnNpdHkiOm5ldyB3aShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWludGVuc2l0eSJdKSwiaGVhdG1hcC1jb2xvciI6bmV3IE1pKEx0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtY29sb3IiXSksImhlYXRtYXAtb3BhY2l0eSI6bmV3IHdpKEx0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtb3BhY2l0eSJdKX0pfTtmdW5jdGlvbiBDbyh0LGUpe2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSgxMDI0KSxuPXt9LGk9MCxhPTA7aTwyNTY7aSsrLGErPTQpe25bZV09aS8yNTU7dmFyIG89dC5ldmFsdWF0ZShuKTtyW2ErMF09TWF0aC5mbG9vcigyNTUqby5yL28uYSksclthKzFdPU1hdGguZmxvb3IoMjU1Km8uZy9vLmEpLHJbYSsyXT1NYXRoLmZsb29yKDI1NSpvLmIvby5hKSxyW2ErM109TWF0aC5mbG9vcigyNTUqby5hKX1yZXR1cm4gbmV3IEVvKHt3aWR0aDoyNTYsaGVpZ2h0OjF9LHIpfXZhciBQbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsTG8pLHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUbyh0KX0sZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJoZWF0bWFwLWNvbG9yIj09PXQmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJoZWF0bWFwLWNvbG9yIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmNvbG9yUmFtcD1Dbyh0LCJoZWF0bWFwRGVuc2l0eSIpLHRoaXMuY29sb3JSYW1wVGV4dHVyZT1udWxsfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXBGYm8mJih0aGlzLmhlYXRtYXBGYm8uZGVzdHJveSgpLHRoaXMuaGVhdG1hcEZibz1udWxsKX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oRWkpLElvPXtwYWludDpuZXcgU2koeyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iXSksImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciJdKSwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiJdKSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciJdKSwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciJdKSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWFjY2VudC1jb2xvciJdKX0pfSxPbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsSW8pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEVpKSx6bz1JaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxEbz1GbyxSbz1GbztmdW5jdGlvbiBGbyh0LGUscil7cj1yfHwyO3ZhciBuLGksYSxvLHMsbCxjLHU9ZSYmZS5sZW5ndGgsZj11P2VbMF0qcjp0Lmxlbmd0aCxoPUJvKHQsMCxmLHIsITApLHA9W107aWYoIWh8fGgubmV4dD09PWgucHJldilyZXR1cm4gcDtpZih1JiYoaD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGM9W107Zm9yKGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspbz1lW2ldKm4scz1pPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCwobD1Cbyh0LG8scyxuLCExKSk9PT1sLm5leHQmJihsLnN0ZWluZXI9ITApLGMucHVzaChabyhsKSk7Zm9yKGMuc29ydChHbyksaT0wO2k8Yy5sZW5ndGg7aSsrKVlvKGNbaV0scikscj1ObyhyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxoLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGY7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIGpvKGgscCxyLG4saSxjKSxwfWZ1bmN0aW9uIEJvKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09bHModCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89YXMoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1hcyhhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiYkbyhvLG8ubmV4dCkmJihvcyhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBObyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8ISRvKG4sbi5uZXh0KSYmMCE9PVFvKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihvcyhuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIGpvKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9WG8oaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/Vm8odCxuLGksYSk6VW8odCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksb3ModCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/am8odD1IbyhObyh0KSxlLHIpLGUscixuLGksYSwyKToyPT09byYmcW8odCxlLHIsbixpLGEpOmpvKE5vKHQpLGUscixuLGksYSwxKTticmVha319fWZ1bmN0aW9uIFVvKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoUW8oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoSm8oZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJlFvKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVm8odCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihRbyhpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxmPVhvKHMsbCxlLHIsbiksaD1YbyhjLHUsZSxyLG4pLHA9dC5wcmV2WixkPXQubmV4dFo7cCYmcC56Pj1mJiZkJiZkLno8PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZKbyhpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmUW8ocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosZCE9PXQucHJldiYmZCE9PXQubmV4dCYmSm8oaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJlFvKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmSm8oaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJlFvKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1oOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmSm8oaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJlFvKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIEhvKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyEkbyhpLGEpJiZ0cyhpLG4sbi5uZXh0LGEpJiZucyhpLGEpJiZucyhhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksb3Mobiksb3Mobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBObyhuKX1mdW5jdGlvbiBxbyh0LGUscixuLGksYSl7dmFyIG89dDtkb3tmb3IodmFyIHM9by5uZXh0Lm5leHQ7cyE9PW8ucHJldjspe2lmKG8uaSE9PXMuaSYmS28obyxzKSl7dmFyIGw9aXMobyxzKTtyZXR1cm4gbz1ObyhvLG8ubmV4dCksbD1ObyhsLGwubmV4dCksam8obyxlLHIsbixpLGEpLHZvaWQgam8obCxlLHIsbixpLGEpfXM9cy5uZXh0fW89by5uZXh0fXdoaWxlKG8hPT10KX1mdW5jdGlvbiBHbyh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIFlvKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHI7dmFyIGwsYz1yLHU9ci54LGY9ci55LGg9MS8wO249cjtkb3tpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmSm8oYTxmP2k6byxhLHUsZixhPGY/bzppLGEsbi54LG4ueSkmJihsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpLG5zKG4sdCkmJihsPGh8fGw9PT1oJiYobi54PnIueHx8bi54PT09ci54JiZXbyhyLG4pKSkmJihyPW4saD1sKSksbj1uLm5leHR9d2hpbGUobiE9PWMpO3JldHVybiByfSh0LGUpKXt2YXIgcj1pcyhlLHQpO05vKGUsZS5uZXh0KSxObyhyLHIubmV4dCl9fWZ1bmN0aW9uIFdvKHQsZSl7cmV0dXJuIFFvKHQucHJldix0LGUucHJldik8MCYmUW8oZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIFhvKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gWm8odCl7dmFyIGU9dCxyPXQ7ZG97KGUueDxyLnh8fGUueD09PXIueCYmZS55PHIueSkmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiBKbyh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gS28odCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJnRzKHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiYobnModCxlKSYmbnMoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKSYmKFFvKHQucHJldix0LGUucHJldil8fFFvKHQsZS5wcmV2LGUpKXx8JG8odCxlKSYmUW8odC5wcmV2LHQsdC5uZXh0KT4wJiZRbyhlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIFFvKHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24gJG8odCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gdHModCxlLHIsbil7dmFyIGk9cnMoUW8odCxlLHIpKSxhPXJzKFFvKHQsZSxuKSksbz1ycyhRbyhyLG4sdCkpLHM9cnMoUW8ocixuLGUpKTtyZXR1cm4gaSE9PWEmJm8hPT1zfHwoISgwIT09aXx8IWVzKHQscixlKSl8fCghKDAhPT1hfHwhZXModCxuLGUpKXx8KCEoMCE9PW98fCFlcyhyLHQsbikpfHwhKDAhPT1zfHwhZXMocixlLG4pKSkpKX1mdW5jdGlvbiBlcyh0LGUscil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LHIueCkmJmUueD49TWF0aC5taW4odC54LHIueCkmJmUueTw9TWF0aC5tYXgodC55LHIueSkmJmUueT49TWF0aC5taW4odC55LHIueSl9ZnVuY3Rpb24gcnModCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfWZ1bmN0aW9uIG5zKHQsZSl7cmV0dXJuIFFvKHQucHJldix0LHQubmV4dCk8MD9Rbyh0LGUsdC5uZXh0KT49MCYmUW8odCx0LnByZXYsZSk+PTA6UW8odCxlLHQucHJldik8MHx8UW8odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBpcyh0LGUpe3ZhciByPW5ldyBzcyh0LmksdC54LHQueSksbj1uZXcgc3MoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIGFzKHQsZSxyLG4pe3ZhciBpPW5ldyBzcyh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIG9zKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gc3ModCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIGxzKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWZ1bmN0aW9uIGNzKHQsZSxyLG4saSl7IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IoO2k+bjspe2lmKGktbj42MDApe3ZhciBvPWktbisxLHM9ci1uKzEsbD1NYXRoLmxvZyhvKSxjPS41Kk1hdGguZXhwKDIqbC8zKSx1PS41Kk1hdGguc3FydChsKmMqKG8tYykvbykqKHMtby8yPDA/LTE6MSksZj1NYXRoLm1heChuLE1hdGguZmxvb3Ioci1zKmMvbyt1KSksaD1NYXRoLm1pbihpLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpO3QoZSxyLGYsaCxhKX12YXIgcD1lW3JdLGQ9bixtPWk7Zm9yKHVzKGUsbixyKSxhKGVbaV0scCk+MCYmdXMoZSxuLGkpO2Q8bTspe2Zvcih1cyhlLGQsbSksZCsrLG0tLTthKGVbZF0scCk8MDspZCsrO2Zvcig7YShlW21dLHApPjA7KW0tLX0wPT09YShlW25dLHApP3VzKGUsbixtKToobSsrLHVzKGUsbSxpKSksbTw9ciYmKG49bSsxKSxyPD1tJiYoaT1tLTEpfX0odCxlLHJ8fDAsbnx8dC5sZW5ndGgtMSxpfHxmcyl9ZnVuY3Rpb24gdXModCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBmcyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBocyh0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbixpLGE9W10sbz0wO288cjtvKyspe3ZhciBzPVQodFtvXSk7MCE9PXMmJih0W29dLmFyZWE9TWF0aC5hYnMocyksdm9pZCAwPT09aSYmKGk9czwwKSxpPT09czwwPyhuJiZhLnB1c2gobiksbj1bdFtvXV0pOm4ucHVzaCh0W29dKSl9aWYobiYmYS5wdXNoKG4pLGU+MSlmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylhW2xdLmxlbmd0aDw9ZXx8KGNzKGFbbF0sZSwxLGFbbF0ubGVuZ3RoLTEscHMpLGFbbF09YVtsXS5zbGljZSgwLGUpKTtyZXR1cm4gYX1mdW5jdGlvbiBwcyh0LGUpe3JldHVybiBlLmFyZWEtdC5hcmVhfWZ1bmN0aW9uIGRzKHQsZSxyKXtmb3IodmFyIG49ci5wYXR0ZXJuRGVwZW5kZW5jaWVzLGk9ITEsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0ucGFpbnQuZ2V0KHQrIi1wYXR0ZXJuIik7cy5pc0NvbnN0YW50KCl8fChpPSEwKTt2YXIgbD1zLmNvbnN0YW50T3IobnVsbCk7bCYmKGk9ITAsbltsLnRvXT0hMCxuW2wuZnJvbV09ITApfXJldHVybiBpfWZ1bmN0aW9uIG1zKHQsZSxyLG4saSl7Zm9yKHZhciBhPWkucGF0dGVybkRlcGVuZGVuY2llcyxvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwucGFpbnQuZ2V0KHQrIi1wYXR0ZXJuIikudmFsdWU7aWYoImNvbnN0YW50IiE9PWMua2luZCl7dmFyIHU9Yy5ldmFsdWF0ZSh7em9vbTpuLTF9LHIse30saS5hdmFpbGFibGVJbWFnZXMpLGY9Yy5ldmFsdWF0ZSh7em9vbTpufSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKSxoPWMuZXZhbHVhdGUoe3pvb206bisxfSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKTt1PXUmJnUubmFtZT91Lm5hbWU6dSxmPWYmJmYubmFtZT9mLm5hbWU6ZixoPWgmJmgubmFtZT9oLm5hbWU6aCxhW3VdPSEwLGFbZl09ITAsYVtoXT0hMCxyLnBhdHRlcm5zW2wuaWRdPXttaW46dSxtaWQ6ZixtYXg6aH19fXJldHVybiByfUZvLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMobHModCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhscyh0LGMsdSxyKSl9dmFyIGY9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGg9bltzXSpyLHA9bltzKzFdKnIsZD1uW3MrMl0qcjtmKz1NYXRoLmFicygodFtoXS10W2RdKSoodFtwKzFdLXRbaCsxXSktKHRbaF0tdFtwXSkqKHRbZCsxXS10W2grMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1mPzA6TWF0aC5hYnMoKGYtbykvbyl9LEZvLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfSxEby5kZWZhdWx0PVJvO3ZhciBncz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLnBhdHRlcm5GZWF0dXJlcz1bXSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB6aSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMuaW5kZXhBcnJheTI9bmV3IFFpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYSh6byx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuc2VnbWVudHMyPW5ldyBwYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07Z3MucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhhc1BhdHRlcm49ZHMoImZpbGwiLHRoaXMubGF5ZXJzLGUpO2Zvcih2YXIgbj10aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCJmaWxsLXNvcnQta2V5IiksaT1bXSxhPTAsbz10O2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXMuZmVhdHVyZSxjPXMuaWQsdT1zLmluZGV4LGY9cy5zb3VyY2VMYXllckluZGV4LGg9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LHA9e3R5cGU6bC50eXBlLGlkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsZ2VvbWV0cnk6aD9ZYShsKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBwaSh0aGlzLnpvb20pLHAscikpe2h8fChwLmdlb21ldHJ5PVlhKGwpKTt2YXIgZD1uP24uZXZhbHVhdGUocCx7fSxyLGUuYXZhaWxhYmxlSW1hZ2VzKTp2b2lkIDAsbT17aWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyx0eXBlOmwudHlwZSxzb3VyY2VMYXllckluZGV4OmYsaW5kZXg6dSxnZW9tZXRyeTpwLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6ZH07aS5wdXNoKG0pfX1uJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBnPTAsdj1pO2c8di5sZW5ndGg7Zys9MSl7dmFyIHk9dltnXSx4PXksYj14Lmdlb21ldHJ5LF89eC5pbmRleCx3PXguc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmhhc1BhdHRlcm4pe3ZhciBUPW1zKCJmaWxsIix0aGlzLmxheWVycyx5LHRoaXMuem9vbSxlKTt0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKFQpfWVsc2UgdGhpcy5hZGRGZWF0dXJlKHksYixfLHIse30pO3ZhciBrPXRbX10uZmVhdHVyZTtlLmZlYXR1cmVJbmRleC5pbnNlcnQoayxiLF8sdyx0aGlzLmluZGV4KX19LGdzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sZ3MucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMucGF0dGVybkZlYXR1cmVzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmFkZEZlYXR1cmUoYSxhLmdlb21ldHJ5LGEuaW5kZXgsZSxyKX19LGdzLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sZ3MucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LGdzLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksem8pLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuaW5kZXhCdWZmZXIyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5MikpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxncy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5zZWdtZW50czIuZGVzdHJveSgpKX0sZ3MucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPWhzKGUsNTAwKTthPG8ubGVuZ3RoO2ErPTEpe2Zvcih2YXIgcz1vW2FdLGw9MCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7bCs9dVtjXS5sZW5ndGh9Zm9yKHZhciBmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksaD1mLnZlcnRleExlbmd0aCxwPVtdLGQ9W10sbT0wLGc9czttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV07aWYoMCE9PXYubGVuZ3RoKXt2IT09c1swXSYmZC5wdXNoKHAubGVuZ3RoLzIpO3ZhciB5PXRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KHYubGVuZ3RoLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5MikseD15LnZlcnRleExlbmd0aDt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZbMF0ueCx2WzBdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soeCt2Lmxlbmd0aC0xLHgpLHAucHVzaCh2WzBdLngpLHAucHVzaCh2WzBdLnkpO2Zvcih2YXIgYj0xO2I8di5sZW5ndGg7YisrKXRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodltiXS54LHZbYl0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh4K2ItMSx4K2IpLHAucHVzaCh2W2JdLngpLHAucHVzaCh2W2JdLnkpO3kudmVydGV4TGVuZ3RoKz12Lmxlbmd0aCx5LnByaW1pdGl2ZUxlbmd0aCs9di5sZW5ndGh9fWZvcih2YXIgXz1EbyhwLGQpLHc9MDt3PF8ubGVuZ3RoO3crPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGgrX1t3XSxoK19bdysxXSxoK19bdysyXSk7Zi52ZXJ0ZXhMZW5ndGgrPWwsZi5wcmltaXRpdmVMZW5ndGgrPV8ubGVuZ3RoLzN9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sTm4oIkZpbGxCdWNrZXQiLGdzLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgdnM9bmV3IFNpKHsiZmlsbC1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9maWxsWyJmaWxsLXNvcnQta2V5Il0pfSkseXM9e3BhaW50Om5ldyBTaSh7ImZpbGwtYW50aWFsaWFzIjpuZXcgd2koTHQucGFpbnRfZmlsbFsiZmlsbC1hbnRpYWxpYXMiXSksImZpbGwtb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2ZpbGxbImZpbGwtY29sb3IiXSksImZpbGwtb3V0bGluZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2ZpbGxbImZpbGwtb3V0bGluZS1jb2xvciJdKSwiZmlsbC10cmFuc2xhdGUiOm5ldyB3aShMdC5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLXBhdHRlcm4iOm5ldyBraShMdC5wYWludF9maWxsWyJmaWxsLXBhdHRlcm4iXSl9KSxsYXlvdXQ6dnN9LHhzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSx5cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUscik7dmFyIG49dGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXTsiY29uc3RhbnQiPT09bi52YWx1ZS5raW5kJiZ2b2lkIDA9PT1uLnZhbHVlLnZhbHVlJiYodGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLW91dGxpbmUtY29sb3IiXT10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtY29sb3IiXSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdzKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBzbyh0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7cmV0dXJuIEthKGxvKHQsdGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpLGEuYW5nbGUsbyksbil9LGUucHJvdG90eXBlLmlzVGlsZUNsaXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZX0oRWkpLGJzPUlpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX25vcm1hbF9lZCIsY29tcG9uZW50czo0LHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsX3M9d3M7ZnVuY3Rpb24gd3ModCxlLHIsbixpKXt0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5leHRlbnQ9cix0aGlzLnR5cGU9MCx0aGlzLl9wYmY9dCx0aGlzLl9nZW9tZXRyeT0tMSx0aGlzLl9rZXlzPW4sdGhpcy5fdmFsdWVzPWksdC5yZWFkRmllbGRzKFRzLHRoaXMsZSl9ZnVuY3Rpb24gVHModCxlLHIpezE9PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT10P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7Zm9yKDt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX0ocixlKTozPT10P2UudHlwZT1yLnJlYWRWYXJpbnQoKTo0PT10JiYoZS5fZ2VvbWV0cnk9ci5wb3MpfWZ1bmN0aW9uIGtzKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLG4rPSgocj10W29dKS54LWUueCkqKGUueStyLnkpO3JldHVybiBufXdzLnR5cGVzPVsiVW5rbm93biIsIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXSx3cy5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZSxyPXQucmVhZFZhcmludCgpK3QucG9zLG49MSxhPTAsbz0wLHM9MCxsPVtdO3QucG9zPHI7KXtpZihhPD0wKXt2YXIgYz10LnJlYWRWYXJpbnQoKTtuPTcmYyxhPWM+PjN9aWYoYS0tLDE9PT1ufHwyPT09bilvKz10LnJlYWRTVmFyaW50KCkscys9dC5yZWFkU1ZhcmludCgpLDE9PT1uJiYoZSYmbC5wdXNoKGUpLGU9W10pLGUucHVzaChuZXcgaShvLHMpKTtlbHNle2lmKDchPT1uKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrbik7ZSYmZS5wdXNoKGVbMF0uY2xvbmUoKSl9fXJldHVybiBlJiZsLnB1c2goZSksbH0sd3MucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9MSxuPTAsaT0wLGE9MCxvPTEvMCxzPS0xLzAsbD0xLzAsYz0tMS8wO3QucG9zPGU7KXtpZihuPD0wKXt2YXIgdT10LnJlYWRWYXJpbnQoKTtyPTcmdSxuPXU+PjN9aWYobi0tLDE9PT1yfHwyPT09cikoaSs9dC5yZWFkU1ZhcmludCgpKTxvJiYobz1pKSxpPnMmJihzPWkpLChhKz10LnJlYWRTVmFyaW50KCkpPGwmJihsPWEpLGE+YyYmKGM9YSk7ZWxzZSBpZig3IT09cil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK3IpfXJldHVybltvLGwscyxjXX0sd3MucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksbz10aGlzLmV4dGVudCp0LHM9dGhpcy5leHRlbnQqZSxsPXRoaXMubG9hZEdlb21ldHJ5KCksYz13cy50eXBlc1t0aGlzLnR5cGVdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrcykvYTt0W2VdPVszNjAqKHIueCtvKS9hLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBmPVtdO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspZltuXT1sW25dWzBdO3UobD1mKTticmVhaztjYXNlIDI6Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl1KGxbbl0pO2JyZWFrO2Nhc2UgMzpmb3IobD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD0xKXJldHVyblt0XTtmb3IodmFyIHIsbixpPVtdLGE9MDthPGU7YSsrKXt2YXIgbz1rcyh0W2FdKTswIT09byYmKHZvaWQgMD09PW4mJihuPW88MCksbj09PW88MD8ociYmaS5wdXNoKHIpLHI9W3RbYV1dKTpyLnB1c2godFthXSkpfXImJmkucHVzaChyKTtyZXR1cm4gaX0obCksbj0wO248bC5sZW5ndGg7bisrKWZvcihpPTA7aTxsW25dLmxlbmd0aDtpKyspdShsW25dW2ldKX0xPT09bC5sZW5ndGg/bD1sWzBdOmM9Ik11bHRpIitjO3ZhciBoPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZTpjLGNvb3JkaW5hdGVzOmx9LHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzfTtyZXR1cm4iaWQiaW4gdGhpcyYmKGguaWQ9dGhpcy5pZCksaH07dmFyIEFzPU1zO2Z1bmN0aW9uIE1zKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhTcyx0aGlzLGUpLHRoaXMubGVuZ3RoPXRoaXMuX2ZlYXR1cmVzLmxlbmd0aH1mdW5jdGlvbiBTcyh0LGUscil7MTU9PT10P2UudmVyc2lvbj1yLnJlYWRWYXJpbnQoKToxPT09dD9lLm5hbWU9ci5yZWFkU3RyaW5nKCk6NT09PXQ/ZS5leHRlbnQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5fZmVhdHVyZXMucHVzaChyLnBvcyk6Mz09PXQ/ZS5fa2V5cy5wdXNoKHIucmVhZFN0cmluZygpKTo0PT09dCYmZS5fdmFsdWVzLnB1c2goZnVuY3Rpb24odCl7dmFyIGU9bnVsbCxyPXQucmVhZFZhcmludCgpK3QucG9zO2Zvcig7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIEVzKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IEFzKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1Ncy5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07dmFyIGU9dGhpcy5fcGJmLnJlYWRWYXJpbnQoKSt0aGlzLl9wYmYucG9zO3JldHVybiBuZXcgX3ModGhpcy5fcGJmLGUsdGhpcy5leHRlbnQsdGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMpfTt2YXIgTHM9e1ZlY3RvclRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoRXMse30sZSl9LFZlY3RvclRpbGVGZWF0dXJlOl9zLFZlY3RvclRpbGVMYXllcjpBc30sQ3M9THMuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsUHM9TWF0aC5wb3coMiwxMyk7ZnVuY3Rpb24gSXModCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUsciwyKk1hdGguZmxvb3IobipQcykrbyxpKlBzKjIsYSpQcyoyLE1hdGgucm91bmQocykpfXZhciBPcz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBSaSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYShicyx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtmdW5jdGlvbiB6cyh0LGUpe3JldHVybiB0Lng9PT1lLngmJih0Lng8MHx8dC54PjgxOTIpfHx0Lnk9PT1lLnkmJih0Lnk8MHx8dC55PjgxOTIpfWZ1bmN0aW9uIERzKHQpe3JldHVybiB0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC54PDB9KSl8fHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+ODE5Mn0pKXx8dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueTwwfSkpfHx0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC55PjgxOTJ9KSl9T3MucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmZlYXR1cmVzPVtdLHRoaXMuaGFzUGF0dGVybj1kcygiZmlsbC1leHRydXNpb24iLHRoaXMubGF5ZXJzLGUpO2Zvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmZlYXR1cmUscz1hLmlkLGw9YS5pbmRleCxjPWEuc291cmNlTGF5ZXJJbmRleCx1PXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxmPXt0eXBlOm8udHlwZSxpZDpzLHByb3BlcnRpZXM6by5wcm9wZXJ0aWVzLGdlb21ldHJ5OnU/WWEobyk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgcGkodGhpcy56b29tKSxmLHIpKXt2YXIgaD17aWQ6cyxzb3VyY2VMYXllckluZGV4OmMsaW5kZXg6bCxnZW9tZXRyeTp1P2YuZ2VvbWV0cnk6WWEobykscHJvcGVydGllczpvLnByb3BlcnRpZXMsdHlwZTpvLnR5cGUscGF0dGVybnM6e319O3ZvaWQgMCE9PW8uaWQmJihoLmlkPW8uaWQpLHRoaXMuaGFzUGF0dGVybj90aGlzLmZlYXR1cmVzLnB1c2gobXMoImZpbGwtZXh0cnVzaW9uIix0aGlzLmxheWVycyxoLHRoaXMuem9vbSxlKSk6dGhpcy5hZGRGZWF0dXJlKGgsaC5nZW9tZXRyeSxsLHIse30pLGUuZmVhdHVyZUluZGV4Lmluc2VydChvLGguZ2VvbWV0cnksbCxjLHRoaXMuaW5kZXgsITApfX19LE9zLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmZlYXR1cmVzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZ2VvbWV0cnk7dGhpcy5hZGRGZWF0dXJlKGEsbyxhLmluZGV4LGUscil9fSxPcy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LE9zLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sT3MucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LE9zLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksYnMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sT3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxPcy5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wLG89aHMoZSw1MDApO2E8by5sZW5ndGg7YSs9MSl7Zm9yKHZhciBzPW9bYV0sbD0wLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXtsKz11W2NdLmxlbmd0aH1mb3IodmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxoPTAscD1zO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZigwIT09ZC5sZW5ndGgmJiFEcyhkKSlmb3IodmFyIG09MCxnPTA7ZzxkLmxlbmd0aDtnKyspe3ZhciB2PWRbZ107aWYoZz49MSl7dmFyIHk9ZFtnLTFdO2lmKCF6cyh2LHkpKXtmLnZlcnRleExlbmd0aCs0PnBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYoZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTt2YXIgeD12LnN1Yih5KS5fcGVycCgpLl91bml0KCksYj15LmRpc3Qodik7bStiPjMyNzY4JiYobT0wKSxJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LHYueCx2LnkseC54LHgueSwwLDAsbSksSXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHgueCx4LnksMCwxLG0pLG0rPWIsSXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx5LngseS55LHgueCx4LnksMCwwLG0pLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkseS54LHkueSx4LngseC55LDAsMSxtKTt2YXIgXz1mLnZlcnRleExlbmd0aDt0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXyxfKzIsXysxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXysxLF8rMixfKzMpLGYudmVydGV4TGVuZ3RoKz00LGYucHJpbWl0aXZlTGVuZ3RoKz0yfX19fWlmKGYudmVydGV4TGVuZ3RoK2w+cGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpLCJQb2x5Z29uIj09PUNzW3QudHlwZV0pe2Zvcih2YXIgdz1bXSxUPVtdLGs9Zi52ZXJ0ZXhMZW5ndGgsQT0wLE09cztBPE0ubGVuZ3RoO0ErPTEpe3ZhciBTPU1bQV07aWYoMCE9PVMubGVuZ3RoKXtTIT09c1swXSYmVC5wdXNoKHcubGVuZ3RoLzIpO2Zvcih2YXIgRT0wO0U8Uy5sZW5ndGg7RSsrKXt2YXIgTD1TW0VdO0lzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksTC54LEwueSwwLDAsMSwxLDApLHcucHVzaChMLngpLHcucHVzaChMLnkpfX19Zm9yKHZhciBDPURvKHcsVCksUD0wO1A8Qy5sZW5ndGg7UCs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaytDW1BdLGsrQ1tQKzJdLGsrQ1tQKzFdKTtmLnByaW1pdGl2ZUxlbmd0aCs9Qy5sZW5ndGgvMyxmLnZlcnRleExlbmd0aCs9bH19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sTm4oIkZpbGxFeHRydXNpb25CdWNrZXQiLE9zLHtvbWl0OlsibGF5ZXJzIiwiZmVhdHVyZXMiXX0pO3ZhciBScz17cGFpbnQ6bmV3IFNpKHsiZmlsbC1leHRydXNpb24tb3BhY2l0eSI6bmV3IHdpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Il0pLCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6bmV3IFRpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1jb2xvciJdKSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIjpuZXcgd2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdKSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjpuZXcga2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iXSksImZpbGwtZXh0cnVzaW9uLWhlaWdodCI6bmV3IFRpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiXSksImZpbGwtZXh0cnVzaW9uLWJhc2UiOm5ldyBUaShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tYmFzZSJdKSwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiXSl9KX0sRnM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFJzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT3ModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHNvKHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwpe3ZhciBjPWxvKHQsdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIiksby5hbmdsZSxzKSx1PXRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiKS5ldmFsdWF0ZShlLHIpLGY9dGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLWJhc2UiKS5ldmFsdWF0ZShlLHIpLGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPVtdLG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9W2wueCxsLnksbiwxXTt4byhjLGMsZSksYS5wdXNoKG5ldyBpKGNbMF0vY1szXSxjWzFdL2NbM10pKX1yZXR1cm4gYX0oYyxsLDAsMCkscD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9W10sbz1bXSxzPW5bOF0qZSxsPW5bOV0qZSxjPW5bMTBdKmUsdT1uWzExXSplLGY9bls4XSpyLGg9bls5XSpyLHA9blsxMF0qcixkPW5bMTFdKnIsbT0wLGc9dDttPGcubGVuZ3RoO20rPTEpe2Zvcih2YXIgdj1nW21dLHk9W10seD1bXSxiPTAsXz12O2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXSxUPXcueCxrPXcueSxBPW5bMF0qVCtuWzRdKmsrblsxMl0sTT1uWzFdKlQrbls1XSprK25bMTNdLFM9blsyXSpUK25bNl0qaytuWzE0XSxFPW5bM10qVCtuWzddKmsrblsxNV0sTD1TK2MsQz1FK3UsUD1BK2YsST1NK2gsTz1TK3Asej1FK2QsRD1uZXcgaSgoQStzKS9DLChNK2wpL0MpO0Quej1ML0MseS5wdXNoKEQpO3ZhciBSPW5ldyBpKFAveixJL3opO1Iuej1PL3oseC5wdXNoKFIpfWEucHVzaCh5KSxvLnB1c2goeCl9cmV0dXJuW2Esb119KG4sZix1LGwpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG49MS8wO0thKHIsZSkmJihuPU5zKHIsZVswXSkpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT1lW2ldLG89dFtpXSxzPTA7czxhLmxlbmd0aC0xO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXSx1PW9bc10sZj1vW3MrMV0saD1bbCxjLGYsdSxsXTtaYShyLGgpJiYobj1NYXRoLm1pbihuLE5zKHIsaCkpKX1yZXR1cm4gbiE9PTEvMCYmbn0ocFswXSxwWzFdLGgpfSxlfShFaSk7ZnVuY3Rpb24gQnModCxlKXtyZXR1cm4gdC54KmUueCt0LnkqZS55fWZ1bmN0aW9uIE5zKHQsZSl7aWYoMT09PXQubGVuZ3RoKXtmb3IodmFyIHIsbj0wLGk9ZVtuKytdOyFyfHxpLmVxdWFscyhyKTspaWYoIShyPWVbbisrXSkpcmV0dXJuIDEvMDtmb3IoO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89dFswXSxzPXIuc3ViKGkpLGw9YS5zdWIoaSksYz1vLnN1YihpKSx1PUJzKHMscyksZj1CcyhzLGwpLGg9QnMobCxsKSxwPUJzKGMscyksZD1CcyhjLGwpLG09dSpoLWYqZixnPShoKnAtZipkKS9tLHY9KHUqZC1mKnApL20seT0xLWctdix4PWkueip5K3IueipnK2Eueip2O2lmKGlzRmluaXRlKHgpKXJldHVybiB4fXJldHVybiAxLzB9Zm9yKHZhciBiPTEvMCxfPTAsdz1lO188dy5sZW5ndGg7Xys9MSl7dmFyIFQ9d1tfXTtiPU1hdGgubWluKGIsVC56KX1yZXR1cm4gYn12YXIganM9SWkoW3tuYW1lOiJhX3Bvc19ub3JtYWwiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSw0KS5tZW1iZXJzLFVzPUxzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFZzPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLEhzPU1hdGgucG93KDIsMTQpLy41LHFzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IEZpLHRoaXMuaW5kZXhBcnJheT1uZXcgWWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFVhKGpzLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O3FzLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5oYXNQYXR0ZXJuPWRzKCJsaW5lIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49dGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgibGluZS1zb3J0LWtleSIpLGk9W10sYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLmZlYXR1cmUsYz1zLmlkLHU9cy5pbmRleCxmPXMuc291cmNlTGF5ZXJJbmRleCxoPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxwPXt0eXBlOmwudHlwZSxpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLGdlb21ldHJ5Omg/WWEobCk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgcGkodGhpcy56b29tKSxwLHIpKXtofHwocC5nZW9tZXRyeT1ZYShsKSk7dmFyIGQ9bj9uLmV2YWx1YXRlKHAse30scik6dm9pZCAwLG09e2lkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsdHlwZTpsLnR5cGUsc291cmNlTGF5ZXJJbmRleDpmLGluZGV4OnUsZ2VvbWV0cnk6cC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5OmR9O2kucHVzaChtKX19biYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgZz0wLHY9aTtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ10seD15LGI9eC5nZW9tZXRyeSxfPXguaW5kZXgsdz14LnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5oYXNQYXR0ZXJuKXt2YXIgVD1tcygibGluZSIsdGhpcy5sYXllcnMseSx0aGlzLnpvb20sZSk7dGhpcy5wYXR0ZXJuRmVhdHVyZXMucHVzaChUKX1lbHNlIHRoaXMuYWRkRmVhdHVyZSh5LGIsXyxyLHt9KTt2YXIgaz10W19dLmZlYXR1cmU7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGssYixfLHcsdGhpcy5pbmRleCl9fSxxcy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LHFzLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLnBhdHRlcm5GZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUscil9fSxxcy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHFzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxxcy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGpzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LHFzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0scXMucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG89YS5nZXQoImxpbmUtam9pbiIpLmV2YWx1YXRlKHQse30pLHM9YS5nZXQoImxpbmUtY2FwIiksbD1hLmdldCgibGluZS1taXRlci1saW1pdCIpLGM9YS5nZXQoImxpbmUtcm91bmQtbGltaXQiKSx1PTAsZj1lO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTt0aGlzLmFkZExpbmUoaCx0LG8scyxsLGMpfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLGksbil9LHFzLnByb3RvdHlwZS5hZGRMaW5lPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZih0aGlzLmRpc3RhbmNlPTAsdGhpcy5zY2FsZWREaXN0YW5jZT0wLHRoaXMudG90YWxEaXN0YW5jZT0wLGUucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJtYXBib3hfY2xpcF9zdGFydCIpJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX2VuZCIpKXt0aGlzLmNsaXBTdGFydD0rZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX3N0YXJ0LHRoaXMuY2xpcEVuZD0rZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX2VuZDtmb3IodmFyIG89MDtvPHQubGVuZ3RoLTE7bysrKXRoaXMudG90YWxEaXN0YW5jZSs9dFtvXS5kaXN0KHRbbysxXSk7dGhpcy51cGRhdGVTY2FsZWREaXN0YW5jZSgpfWZvcih2YXIgcz0iUG9seWdvbiI9PT1Vc1tlLnR5cGVdLGw9dC5sZW5ndGg7bD49MiYmdFtsLTFdLmVxdWFscyh0W2wtMl0pOylsLS07Zm9yKHZhciBjPTA7YzxsLTEmJnRbY10uZXF1YWxzKHRbYysxXSk7KWMrKztpZighKGw8KHM/MzoyKSkpeyJiZXZlbCI9PT1yJiYoaT0xLjA1KTt2YXIgdSxmPXRoaXMub3ZlcnNjYWxpbmc8PTE2PzEyMjg4MC8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpOjAsaD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKmwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLHA9dm9pZCAwLGQ9dm9pZCAwLG09dm9pZCAwLGc9dm9pZCAwO3RoaXMuZTE9dGhpcy5lMj0tMSxzJiYodT10W2wtMl0sZz10W2NdLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdj1jO3Y8bDt2KyspaWYoIShkPXY9PT1sLTE/cz90W2MrMV06dm9pZCAwOnRbdisxXSl8fCF0W3ZdLmVxdWFscyhkKSl7ZyYmKG09ZyksdSYmKHA9dSksdT10W3ZdLGc9ZD9kLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCk6bTt2YXIgeT0obT1tfHxnKS5hZGQoZyk7MD09PXkueCYmMD09PXkueXx8eS5fdW5pdCgpO3ZhciB4PW0ueCpnLngrbS55KmcueSxiPXkueCpnLngreS55KmcueSxfPTAhPT1iPzEvYjoxLzAsdz0yKk1hdGguc3FydCgyLTIqYiksVD1iPFZzJiZwJiZkLGs9bS54KmcueS1tLnkqZy54PjA7aWYoVCYmdj5jKXt2YXIgQT11LmRpc3QocCk7aWYoQT4yKmYpe3ZhciBNPXUuc3ViKHUuc3ViKHApLl9tdWx0KGYvQSkuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UocCxNKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoTSxtLDAsMCxoKSxwPU19fXZhciBTPXAmJmQsRT1TP3I6cz8iYnV0dCI6bjtpZihTJiYicm91bmQiPT09RSYmKF88YT9FPSJtaXRlciI6Xzw9MiYmKEU9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09RSYmXz5pJiYoRT0iYmV2ZWwiKSwiYmV2ZWwiPT09RSYmKF8+MiYmKEU9ImZsaXBiZXZlbCIpLF88aSYmKEU9Im1pdGVyIikpLHAmJnRoaXMudXBkYXRlRGlzdGFuY2UocCx1KSwibWl0ZXIiPT09RSl5Ll9tdWx0KF8pLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGgpO2Vsc2UgaWYoImZsaXBiZXZlbCI9PT1FKXtpZihfPjEwMCl5PWcubXVsdCgtMSk7ZWxzZXt2YXIgTD1fKm0uYWRkKGcpLm1hZygpL20uc3ViKGcpLm1hZygpO3kuX3BlcnAoKS5fbXVsdChMKihrPy0xOjEpKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxoKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5Lm11bHQoLTEpLDAsMCxoKX1lbHNlIGlmKCJiZXZlbCI9PT1FfHwiZmFrZXJvdW5kIj09PUUpe3ZhciBDPS1NYXRoLnNxcnQoXypfLTEpLFA9az9DOjAsST1rPzA6QztpZihwJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxtLFAsSSxoKSwiZmFrZXJvdW5kIj09PUUpZm9yKHZhciBPPU1hdGgucm91bmQoMTgwKncvTWF0aC5QSS8yMCksej0xO3o8Tzt6Kyspe3ZhciBEPXovTztpZiguNSE9PUQpe3ZhciBSPUQtLjU7RCs9RCpSKihELTEpKigoMS4wOTA0K3gqKHgqKDMuNTU2NDUtMS40MzUxOSp4KS0zLjI0NTIpKSpSKlIrKC44NDgwMTMreCooLjIxNTYzOCp4LTEuMDYwMjEpKSl9dmFyIEY9Zy5zdWIobSkuX211bHQoRCkuX2FkZChtKS5fdW5pdCgpLl9tdWx0KGs/LTE6MSk7dGhpcy5hZGRIYWxmVmVydGV4KHUsRi54LEYueSwhMSxrLDAsaCl9ZCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywtUCwtSSxoKX1lbHNlIGlmKCJidXR0Ij09PUUpdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsaCk7ZWxzZSBpZigic3F1YXJlIj09PUUpe3ZhciBCPXA/MTotMTt0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LEIsQixoKX1lbHNlInJvdW5kIj09PUUmJihwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSwwLDAsaCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSwxLDEsaCwhMCkpLGQmJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLC0xLC0xLGgsITApLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LGcsMCwwLGgpKSk7aWYoVCYmdjxsLTEpe3ZhciBOPXUuZGlzdChkKTtpZihOPjIqZil7dmFyIGo9dS5hZGQoZC5zdWIodSkuX211bHQoZi9OKS5fcm91bmQoKSk7dGhpcy51cGRhdGVEaXN0YW5jZSh1LGopLHRoaXMuYWRkQ3VycmVudFZlcnRleChqLGcsMCwwLGgpLHU9an19fX19LHFzLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7dmFyIG89ZS54K2UueSpyLHM9ZS55LWUueCpyLGw9LWUueCtlLnkqbixjPS1lLnktZS54Km47dGhpcy5hZGRIYWxmVmVydGV4KHQsbyxzLGEsITEscixpKSx0aGlzLmFkZEhhbGZWZXJ0ZXgodCxsLGMsYSwhMCwtbixpKSx0aGlzLmRpc3RhbmNlPkhzLzImJjA9PT10aGlzLnRvdGFsRGlzdGFuY2UmJih0aGlzLmRpc3RhbmNlPTAsdGhpcy5hZGRDdXJyZW50VmVydGV4KHQsZSxyLG4saSxhKSl9LHFzLnByb3RvdHlwZS5hZGRIYWxmVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQueCxsPXQueSxjPS41KnRoaXMuc2NhbGVkRGlzdGFuY2U7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygoczw8MSkrKG4/MTowKSwobDw8MSkrKGk/MTowKSxNYXRoLnJvdW5kKDYzKmUpKzEyOCxNYXRoLnJvdW5kKDYzKnIpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwoNjMmYyk8PDIsYz4+Nik7dmFyIHU9by52ZXJ0ZXhMZW5ndGgrKzt0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix1KSxvLnByaW1pdGl2ZUxlbmd0aCsrKSxpP3RoaXMuZTI9dTp0aGlzLmUxPXV9LHFzLnByb3RvdHlwZS51cGRhdGVTY2FsZWREaXN0YW5jZT1mdW5jdGlvbigpe3RoaXMuc2NhbGVkRGlzdGFuY2U9dGhpcy50b3RhbERpc3RhbmNlPjA/KHRoaXMuY2xpcFN0YXJ0Kyh0aGlzLmNsaXBFbmQtdGhpcy5jbGlwU3RhcnQpKnRoaXMuZGlzdGFuY2UvdGhpcy50b3RhbERpc3RhbmNlKSooSHMtMSk6dGhpcy5kaXN0YW5jZX0scXMucHJvdG90eXBlLnVwZGF0ZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXN0YW5jZSs9dC5kaXN0KGUpLHRoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKX0sTm4oIkxpbmVCdWNrZXQiLHFzLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgR3M9bmV3IFNpKHsibGluZS1jYXAiOm5ldyB3aShMdC5sYXlvdXRfbGluZVsibGluZS1jYXAiXSksImxpbmUtam9pbiI6bmV3IFRpKEx0LmxheW91dF9saW5lWyJsaW5lLWpvaW4iXSksImxpbmUtbWl0ZXItbGltaXQiOm5ldyB3aShMdC5sYXlvdXRfbGluZVsibGluZS1taXRlci1saW1pdCJdKSwibGluZS1yb3VuZC1saW1pdCI6bmV3IHdpKEx0LmxheW91dF9saW5lWyJsaW5lLXJvdW5kLWxpbWl0Il0pLCJsaW5lLXNvcnQta2V5IjpuZXcgVGkoTHQubGF5b3V0X2xpbmVbImxpbmUtc29ydC1rZXkiXSl9KSxZcz17cGFpbnQ6bmV3IFNpKHsibGluZS1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1vcGFjaXR5Il0pLCJsaW5lLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1jb2xvciJdKSwibGluZS10cmFuc2xhdGUiOm5ldyB3aShMdC5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZSJdKSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJsaW5lLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS13aWR0aCJdKSwibGluZS1nYXAtd2lkdGgiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLWdhcC13aWR0aCJdKSwibGluZS1vZmZzZXQiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLW9mZnNldCJdKSwibGluZS1ibHVyIjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1ibHVyIl0pLCJsaW5lLWRhc2hhcnJheSI6bmV3IEFpKEx0LnBhaW50X2xpbmVbImxpbmUtZGFzaGFycmF5Il0pLCJsaW5lLXBhdHRlcm4iOm5ldyBraShMdC5wYWludF9saW5lWyJsaW5lLXBhdHRlcm4iXSksImxpbmUtZ3JhZGllbnQiOm5ldyBNaShMdC5wYWludF9saW5lWyJsaW5lLWdyYWRpZW50Il0pfSksbGF5b3V0OkdzfSxXcz1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IHBpKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIHI9dSh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbixpKX0sZX0oVGkpKShZcy5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7V3MudXNlSW50ZWdlclpvb209ITA7dmFyIFhzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxZcyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXsibGluZS1ncmFkaWVudCI9PT10JiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImxpbmUtZ3JhZGllbnQiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuZ3JhZGllbnQ9Q28odCwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKSx0aGlzLnBhaW50Ll92YWx1ZXNbImxpbmUtZmxvb3J3aWR0aCJdPVdzLnBvc3NpYmx5RXZhbHVhdGUodGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Ll92YWx1ZXNbImxpbmUtd2lkdGgiXS52YWx1ZSxlKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcXModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj1acyhvbygibGluZS13aWR0aCIsdGhpcyxlKSxvbygibGluZS1nYXAtd2lkdGgiLHRoaXMsZSkpLG49b28oImxpbmUtb2Zmc2V0Iix0aGlzLGUpO3JldHVybiByLzIrTWF0aC5hYnMobikrc28odGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMpe3ZhciBsPWxvKHQsdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksYz1zLzIqWnModGhpcy5wYWludC5nZXQoImxpbmUtd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLWdhcC13aWR0aCIpLmV2YWx1YXRlKGUscikpLHU9dGhpcy5wYWludC5nZXQoImxpbmUtb2Zmc2V0IikuZXZhbHVhdGUoZSxyKTtyZXR1cm4gdSYmKG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1uZXcgaSgwLDApLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbC0xXSx1PW9bbF0sZj1vW2wrMV0saD0wPT09bD9uOnUuc3ViKGMpLl91bml0KCkuX3BlcnAoKSxwPWw9PT1vLmxlbmd0aC0xP246Zi5zdWIodSkuX3VuaXQoKS5fcGVycCgpLGQ9aC5fYWRkKHApLl91bml0KCksbT1kLngqcC54K2QueSpwLnk7ZC5fbXVsdCgxL20pLHMucHVzaChkLl9tdWx0KGUpLl9hZGQodSkpfXIucHVzaChzKX1yZXR1cm4gcn0obix1KnMpKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aWYodC5sZW5ndGg+PTMpZm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspaWYoaW8odCxpW2FdKSlyZXR1cm4hMDtpZihRYSh0LGkscikpcmV0dXJuITB9cmV0dXJuITF9KGwsbixjKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfShFaSk7ZnVuY3Rpb24gWnModCxlKXtyZXR1cm4gZT4wP2UrMip0OnR9dmFyIEpzPUlpKFt7bmFtZToiYV9wb3Nfb2Zmc2V0Iixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDE2In0se25hbWU6ImFfcGl4ZWxvZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KSxLcz1JaShbe25hbWU6ImFfcHJvamVjdGVkX3BvcyIsY29tcG9uZW50czozLHR5cGU6IkZsb2F0MzIifV0sNCksUXM9KElpKFt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MzIifV0sNCksSWkoW3tuYW1lOiJhX3BsYWNlZCIsY29tcG9uZW50czoyLHR5cGU6IlVpbnQ4In0se25hbWU6ImFfc2hpZnQiLGNvbXBvbmVudHM6Mix0eXBlOiJGbG9hdDMyIn1dKSksJHM9KElpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRZIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTEifSx7dHlwZToiSW50MTYiLG5hbWU6IngyIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MiJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNvdXJjZUxheWVySW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJidWNrZXRJbmRleCJ9XSksSWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfYW5jaG9yX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZXh0cnVkZSIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpKSx0bD1JaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiRmxvYXQzMiJ9LHtuYW1lOiJhX3JhZGl1cyIsY29tcG9uZW50czoxLHR5cGU6IkZsb2F0MzIifSx7bmFtZToiYV9mbGFncyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpO0lpKFt7bmFtZToidHJpYW5nbGUiLGNvbXBvbmVudHM6Myx0eXBlOiJVaW50MTYifV0pLElpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1HbHlwaHMifSx7dHlwZToiVWludDMyIixuYW1lOiJ2ZXJ0ZXhTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZVN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lTGVuZ3RoIn0se3R5cGU6IlVpbnQxNiIsbmFtZToic2VnbWVudCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imxvd2VyU2l6ZSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVwcGVyU2l6ZSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WSJ9LHt0eXBlOiJVaW50OCIsbmFtZToid3JpdGluZ01vZGUifSx7dHlwZToiVWludDgiLG5hbWU6InBsYWNlZE9yaWVudGF0aW9uIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJoaWRkZW4ifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYXNzb2NpYXRlZEljb25JbmRleCJ9XSksSWkoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToibGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InBsYWNlZEljb25TeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJrZXkifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxJY29uQm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsSWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1JY29uVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiY3Jvc3NUaWxlSUQifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGV4dEJveFNjYWxlIn0se3R5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6MixuYW1lOiJ0ZXh0T2Zmc2V0In0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImNvbGxpc2lvbkNpcmNsZURpYW1ldGVyIn1dKSxJaShbe3R5cGU6IkZsb2F0MzIiLG5hbWU6Im9mZnNldFgifV0pLElpKFt7dHlwZToiSW50MTYiLG5hbWU6IngifSx7dHlwZToiSW50MTYiLG5hbWU6InkifSx7dHlwZToiSW50MTYiLG5hbWU6InRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yIn1dKTtmdW5jdGlvbiBlbCh0LGUscil7cmV0dXJuIHQuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50ZXh0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmxheW91dC5nZXQoInRleHQtdHJhbnNmb3JtIikuZXZhbHVhdGUocix7fSk7cmV0dXJuInVwcGVyY2FzZSI9PT1uP3Q9dC50b0xvY2FsZVVwcGVyQ2FzZSgpOiJsb3dlcmNhc2UiPT09biYmKHQ9dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSxoaS5hcHBseUFyYWJpY1NoYXBpbmcmJih0PWhpLmFwcGx5QXJhYmljU2hhcGluZyh0KSksdH0odC50ZXh0LGUscil9KSksdH12YXIgcmw9eyIhIjoiXHVmZTE1IiwiIyI6Ilx1ZmYwMyIsJDoiXHVmZjA0IiwiJSI6Ilx1ZmYwNSIsIiYiOiJcdWZmMDYiLCIoIjoiXHVmZTM1IiwiKSI6Ilx1ZmUzNiIsIioiOiJcdWZmMGEiLCIrIjoiXHVmZjBiIiwiLCI6Ilx1ZmUxMCIsIi0iOiJcdWZlMzIiLCIuIjoiXHUzMGZiIiwiLyI6Ilx1ZmYwZiIsIjoiOiJcdWZlMTMiLCI7IjoiXHVmZTE0IiwiPCI6Ilx1ZmUzZiIsIj0iOiJcdWZmMWQiLCI+IjoiXHVmZTQwIiwiPyI6Ilx1ZmUxNiIsIkAiOiJcdWZmMjAiLCJbIjoiXHVmZTQ3IiwiXFwiOiJcdWZmM2MiLCJdIjoiXHVmZTQ4IiwiXiI6Ilx1ZmYzZSIsXzoiXHVmZTMzIiwiYCI6Ilx1ZmY0MCIsInsiOiJcdWZlMzciLCJ8IjoiXHUyMDE1IiwifSI6Ilx1ZmUzOCIsIn4iOiJcdWZmNWUiLCJceGEyIjoiXHVmZmUwIiwiXHhhMyI6Ilx1ZmZlMSIsIlx4YTUiOiJcdWZmZTUiLCJceGE2IjoiXHVmZmU0IiwiXHhhYyI6Ilx1ZmZlMiIsIlx4YWYiOiJcdWZmZTMiLCJcdTIwMTMiOiJcdWZlMzIiLCJcdTIwMTQiOiJcdWZlMzEiLCJcdTIwMTgiOiJcdWZlNDMiLCJcdTIwMTkiOiJcdWZlNDQiLCJcdTIwMWMiOiJcdWZlNDEiLCJcdTIwMWQiOiJcdWZlNDIiLCJcdTIwMjYiOiJcdWZlMTkiLCJcdTIwMjciOiJcdTMwZmIiLCJcdTIwYTkiOiJcdWZmZTYiLCJcdTMwMDEiOiJcdWZlMTEiLCJcdTMwMDIiOiJcdWZlMTIiLCJcdTMwMDgiOiJcdWZlM2YiLCJcdTMwMDkiOiJcdWZlNDAiLCJcdTMwMGEiOiJcdWZlM2QiLCJcdTMwMGIiOiJcdWZlM2UiLCJcdTMwMGMiOiJcdWZlNDEiLCJcdTMwMGQiOiJcdWZlNDIiLCJcdTMwMGUiOiJcdWZlNDMiLCJcdTMwMGYiOiJcdWZlNDQiLCJcdTMwMTAiOiJcdWZlM2IiLCJcdTMwMTEiOiJcdWZlM2MiLCJcdTMwMTQiOiJcdWZlMzkiLCJcdTMwMTUiOiJcdWZlM2EiLCJcdTMwMTYiOiJcdWZlMTciLCJcdTMwMTciOiJcdWZlMTgiLCJcdWZmMDEiOiJcdWZlMTUiLCJcdWZmMDgiOiJcdWZlMzUiLCJcdWZmMDkiOiJcdWZlMzYiLCJcdWZmMGMiOiJcdWZlMTAiLCJcdWZmMGQiOiJcdWZlMzIiLCJcdWZmMGUiOiJcdTMwZmIiLCJcdWZmMWEiOiJcdWZlMTMiLCJcdWZmMWIiOiJcdWZlMTQiLCJcdWZmMWMiOiJcdWZlM2YiLCJcdWZmMWUiOiJcdWZlNDAiLCJcdWZmMWYiOiJcdWZlMTYiLCJcdWZmM2IiOiJcdWZlNDciLCJcdWZmM2QiOiJcdWZlNDgiLCJcdWZmM2YiOiJcdWZlMzMiLCJcdWZmNWIiOiJcdWZlMzciLCJcdWZmNWMiOiJcdTIwMTUiLCJcdWZmNWQiOiJcdWZlMzgiLCJcdWZmNWYiOiJcdWZlMzUiLCJcdWZmNjAiOiJcdWZlMzYiLCJcdWZmNjEiOiJcdWZlMTIiLCJcdWZmNjIiOiJcdWZlNDEiLCJcdWZmNjMiOiJcdWZlNDIifTt2YXIgbmw9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGY9cj9pLTE6MCxoPXI/LTE6MSxwPXRbZStmXTtmb3IoZis9aCxhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStmXSxmKz1oLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStmXSxmKz1oLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LGlsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsZj11Pj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsbT1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytmPj0xP2gvbDpoKk1hdGgucG93KDIsMS1mKSkqbD49MiYmKG8rKyxsLz0yKSxvK2Y+PXU/KHM9MCxvPXUpOm8rZj49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9Zik6KHM9ZSpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqbX0sYWw9b2w7ZnVuY3Rpb24gb2wodCl7dGhpcy5idWY9QXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0fHwwKSx0aGlzLnBvcz0wLHRoaXMudHlwZT0wLHRoaXMubGVuZ3RoPXRoaXMuYnVmLmxlbmd0aH1vbC5WYXJpbnQ9MCxvbC5GaXhlZDY0PTEsb2wuQnl0ZXM9MixvbC5GaXhlZDMyPTU7dmFyIHNsPSJ1bmRlZmluZWQiPT10eXBlb2YgVGV4dERlY29kZXI/bnVsbDpuZXcgVGV4dERlY29kZXIoInV0ZjgiKTtmdW5jdGlvbiBsbCh0KXtyZXR1cm4gdC50eXBlPT09b2wuQnl0ZXM/dC5yZWFkVmFyaW50KCkrdC5wb3M6dC5wb3MrMX1mdW5jdGlvbiBjbCh0LGUscil7cmV0dXJuIHI/NDI5NDk2NzI5NiplKyh0Pj4+MCk6NDI5NDk2NzI5NiooZT4+PjApKyh0Pj4+MCl9ZnVuY3Rpb24gdWwodCxlLHIpe3ZhciBuPWU8PTE2MzgzPzE6ZTw9MjA5NzE1MT8yOmU8PTI2ODQzNTQ1NT8zOk1hdGguZmxvb3IoTWF0aC5sb2coZSkvKDcqTWF0aC5MTjIpKTtyLnJlYWxsb2Mobik7Zm9yKHZhciBpPXIucG9zLTE7aT49dDtpLS0pci5idWZbaStuXT1yLmJ1ZltpXX1mdW5jdGlvbiBmbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVWYXJpbnQodFtyXSl9ZnVuY3Rpb24gaGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiBwbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGbG9hdCh0W3JdKX1mdW5jdGlvbiBkbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVEb3VibGUodFtyXSl9ZnVuY3Rpb24gbWwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBnbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIHZsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIHlsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkNjQodFtyXSl9ZnVuY3Rpb24gYmwodCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrMTY3NzcyMTYqdFtlKzNdfWZ1bmN0aW9uIF9sKHQsZSxyKXt0W3JdPWUsdFtyKzFdPWU+Pj44LHRbcisyXT1lPj4+MTYsdFtyKzNdPWU+Pj4yNH1mdW5jdGlvbiB3bCh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsodFtlKzNdPDwyNCl9b2wucHJvdG90eXBlPXtkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5idWY9bnVsbH0scmVhZEZpZWxkczpmdW5jdGlvbih0LGUscil7Zm9yKHI9cnx8dGhpcy5sZW5ndGg7dGhpcy5wb3M8cjspe3ZhciBuPXRoaXMucmVhZFZhcmludCgpLGk9bj4+MyxhPXRoaXMucG9zO3RoaXMudHlwZT03Jm4sdChpLGUsdGhpcyksdGhpcy5wb3M9PT1hJiZ0aGlzLnNraXAobil9cmV0dXJuIGV9LHJlYWRNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVhZEZpZWxkcyh0LGUsdGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MpfSxyZWFkRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PWJsKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZFNGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9d2wodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PWJsKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KmJsKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkU0ZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD1ibCh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nip3bCh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZEZsb2F0OmZ1bmN0aW9uKCl7dmFyIHQ9bmwodGhpcy5idWYsdGhpcy5wb3MsITAsMjMsNCk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWREb3VibGU6ZnVuY3Rpb24oKXt2YXIgdD1ubCh0aGlzLmJ1Zix0aGlzLnBvcywhMCw1Miw4KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFZhcmludDpmdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5idWY7cmV0dXJuIGU9MTI3JihyPW5bdGhpcy5wb3MrK10pLHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDw3LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwxNCxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MjEscjwxMjg/ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIuYnVmO2lmKGk9YVtyLnBvcysrXSxuPSgxMTImaSk+PjQsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MyxpPDEyOClyZXR1cm4gY2wodCxuLGUpO2lmKGk9YVtyLnBvcysrXSxufD0oMTI3JmkpPDwxMCxpPDEyOClyZXR1cm4gY2wodCxuLGUpO2lmKGk9YVtyLnBvcysrXSxufD0oMTI3JmkpPDwxNyxpPDEyOClyZXR1cm4gY2wodCxuLGUpO2lmKGk9YVtyLnBvcysrXSxufD0oMTI3JmkpPDwyNCxpPDEyOClyZXR1cm4gY2wodCxuLGUpO2lmKGk9YVtyLnBvcysrXSxufD0oMSZpKTw8MzEsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9KGV8PSgxNSYocj1uW3RoaXMucG9zXSkpPDwyOCx0LHRoaXMpKSkpfSxyZWFkVmFyaW50NjQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVmFyaW50KCEwKX0scmVhZFNWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT0xPyh0KzEpLy0yOnQvMn0scmVhZEJvb2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSl9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMucG9zO3JldHVybiB0aGlzLnBvcz10LHQtZT49MTImJnNsP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gc2wuZGVjb2RlKHQuc3ViYXJyYXkoZSxyKSl9KHRoaXMuYnVmLGUsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSIiLGk9ZTtmb3IoO2k8cjspe3ZhciBhLG8scyxsPXRbaV0sYz1udWxsLHU9bD4yMzk/NDpsPjIyMz8zOmw+MTkxPzI6MTtpZihpK3U+cilicmVhazsxPT09dT9sPDEyOCYmKGM9bCk6Mj09PXU/MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYoYz0oMzEmbCk8PDZ8NjMmYSk8PTEyNyYmKGM9bnVsbCk6Mz09PXU/KGE9dFtpKzFdLG89dFtpKzJdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYoKGM9KDE1JmwpPDwxMnwoNjMmYSk8PDZ8NjMmbyk8PTIwNDd8fGM+PTU1Mjk2JiZjPD01NzM0MykmJihjPW51bGwpKTo0PT09dSYmKGE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJigoYz0oMTUmbCk8PDE4fCg2MyZhKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPD02NTUzNXx8Yz49MTExNDExMikmJihjPW51bGwpKSxudWxsPT09Yz8oYz02NTUzMyx1PTEpOmM+NjU1MzUmJihjLT02NTUzNixuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGM+Pj4xMCYxMDIzfDU1Mjk2KSxjPTU2MzIwfDEwMjMmYyksbis9U3RyaW5nLmZyb21DaGFyQ29kZShjKSxpKz11fXJldHVybiBufSh0aGlzLmJ1ZixlLHQpfSxyZWFkQnl0ZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMuYnVmLnN1YmFycmF5KHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFZhcmludChlKSk7dmFyIHI9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8cjspdC5wdXNoKHRoaXMucmVhZFZhcmludChlKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fSxza2lwOmZ1bmN0aW9uKHQpe3ZhciBlPTcmdDtpZihlPT09b2wuVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09b2wuQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09b2wuRml4ZWQzMil0aGlzLnBvcys9NDtlbHNle2lmKGUhPT1vbC5GaXhlZDY0KXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCB0eXBlOiAiK2UpO3RoaXMucG9zKz04fX0sd3JpdGVUYWc6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9LHJlYWxsb2M6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMubGVuZ3RofHwxNjtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXt2YXIgcj1uZXcgVWludDhBcnJheShlKTtyLnNldCh0aGlzLmJ1ZiksdGhpcy5idWY9cix0aGlzLmxlbmd0aD1lfX0sZmluaXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPXRoaXMucG9zLHRoaXMucG9zPTAsdGhpcy5idWYuc3ViYXJyYXkoMCx0aGlzLmxlbmd0aCl9LHdyaXRlRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksX2wodGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlU0ZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLF9sKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZUZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLF9sKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLF9sKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLF9sKHRoaXMuYnVmLC0xJnQsdGhpcy5wb3MpLF9sKHRoaXMuYnVmLE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlVmFyaW50OmZ1bmN0aW9uKHQpeyh0PSt0fHwwKT4yNjg0MzU0NTV8fHQ8MD9mdW5jdGlvbih0LGUpe3ZhciByLG47dD49MD8ocj10JTQyOTQ5NjcyOTZ8MCxuPXQvNDI5NDk2NzI5NnwwKToobj1+KC10LzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTVeKHI9figtdCU0Mjk0OTY3Mjk2KSk/cj1yKzF8MDoocj0wLG49bisxfDApKTtpZih0Pj0weDEwMDAwMDAwMDAwMDAwMDAwfHx0PC0weDEwMDAwMDAwMDAwMDAwMDAwKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTtlLnJlYWxsb2MoMTApLGZ1bmN0aW9uKHQsZSxyKXtyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zXT0xMjcmdH0ociwwLGUpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9KDcmdCk8PDQ7aWYoZS5idWZbZS5wb3MrK118PXJ8KCh0Pj4+PTMpPzEyODowKSwhdClyZXR1cm47aWYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSwhdClyZXR1cm47aWYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSwhdClyZXR1cm47aWYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSwhdClyZXR1cm47aWYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSwhdClyZXR1cm47ZS5idWZbZS5wb3MrK109MTI3JnR9KG4sZSl9KHQsdGhpcyk6KHRoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpLHRoaXMucmVhbGxvYyg0KnQubGVuZ3RoKSx0aGlzLnBvcysrO3ZhciBlPXRoaXMucG9zO3RoaXMucG9zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTA7YTxlLmxlbmd0aDthKyspe2lmKChuPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtuPjU2MzE5fHxhKzE9PT1lLmxlbmd0aD8odFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODkpOmk9bjtjb250aW51ZX1pZihuPDU2MzIwKXt0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJih0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW51bGwpO248MTI4P3RbcisrXT1uOihuPDIwNDg/dFtyKytdPW4+PjZ8MTkyOihuPDY1NTM2P3RbcisrXT1uPj4xMnwyMjQ6KHRbcisrXT1uPj4xOHwyNDAsdFtyKytdPW4+PjEyJjYzfDEyOCksdFtyKytdPW4+PjYmNjN8MTI4KSx0W3IrK109NjMmbnwxMjgpfXJldHVybiByfSh0aGlzLmJ1Zix0LHRoaXMucG9zKTt2YXIgcj10aGlzLnBvcy1lO3I+PTEyOCYmdWwoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxpbCh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDIzLDQpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksaWwodGhpcy5idWYsdCx0aGlzLnBvcywhMCw1Miw4KSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZ1bChyLG4sdGhpcyksdGhpcy5wb3M9ci0xLHRoaXMud3JpdGVWYXJpbnQobiksdGhpcy5wb3MrPW59LHdyaXRlTWVzc2FnZTpmdW5jdGlvbih0LGUscil7dGhpcy53cml0ZVRhZyh0LG9sLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGZsLGUpfSx3cml0ZVBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxobCxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsbWwsZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxwbCxlKX0sd3JpdGVQYWNrZWREb3VibGU6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxkbCxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZ2wsZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCx2bCxlKX0sd3JpdGVQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQseWwsZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCx4bCxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkMzIpLHRoaXMud3JpdGVGaXhlZDMyKGUpfSx3cml0ZVNGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkNjQpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX0sd3JpdGVWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuQnl0ZXMpLHRoaXMud3JpdGVTdHJpbmcoZSl9LHdyaXRlRmxvYXRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19O2Z1bmN0aW9uIFRsKHQsZSxyKXsxPT09dCYmci5yZWFkTWVzc2FnZShrbCxlKX1mdW5jdGlvbiBrbCh0LGUscil7aWYoMz09PXQpe3ZhciBuPXIucmVhZE1lc3NhZ2UoQWwse30pLGk9bi5pZCxhPW4uYml0bWFwLG89bi53aWR0aCxzPW4uaGVpZ2h0LGw9bi5sZWZ0LGM9bi50b3AsdT1uLmFkdmFuY2U7ZS5wdXNoKHtpZDppLGJpdG1hcDpuZXcgU28oe3dpZHRoOm8rNixoZWlnaHQ6cys2fSxhKSxtZXRyaWNzOnt3aWR0aDpvLGhlaWdodDpzLGxlZnQ6bCx0b3A6YyxhZHZhbmNlOnV9fSl9fWZ1bmN0aW9uIEFsKHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UuYml0bWFwPXIucmVhZEJ5dGVzKCk6Mz09PXQ/ZS53aWR0aD1yLnJlYWRWYXJpbnQoKTo0PT09dD9lLmhlaWdodD1yLnJlYWRWYXJpbnQoKTo1PT09dD9lLmxlZnQ9ci5yZWFkU1ZhcmludCgpOjY9PT10P2UudG9wPXIucmVhZFNWYXJpbnQoKTo3PT09dCYmKGUuYWR2YW5jZT1yLnJlYWRWYXJpbnQoKSl9ZnVuY3Rpb24gTWwodCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2UrPWEudyphLmgscj1NYXRoLm1heChyLGEudyl9dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLmgtdC5ofSkpO2Zvcih2YXIgbz1be3g6MCx5OjAsdzpNYXRoLm1heChNYXRoLmNlaWwoTWF0aC5zcXJ0KGUvLjk1KSksciksaDoxLzB9XSxzPTAsbD0wLGM9MCx1PXQ7Yzx1Lmxlbmd0aDtjKz0xKWZvcih2YXIgZj11W2NdLGg9by5sZW5ndGgtMTtoPj0wO2gtLSl7dmFyIHA9b1toXTtpZighKGYudz5wLnd8fGYuaD5wLmgpKXtpZihmLng9cC54LGYueT1wLnksbD1NYXRoLm1heChsLGYueStmLmgpLHM9TWF0aC5tYXgocyxmLngrZi53KSxmLnc9PT1wLncmJmYuaD09PXAuaCl7dmFyIGQ9by5wb3AoKTtoPG8ubGVuZ3RoJiYob1toXT1kKX1lbHNlIGYuaD09PXAuaD8ocC54Kz1mLncscC53LT1mLncpOmYudz09PXAudz8ocC55Kz1mLmgscC5oLT1mLmgpOihvLnB1c2goe3g6cC54K2Yudyx5OnAueSx3OnAudy1mLncsaDpmLmh9KSxwLnkrPWYuaCxwLmgtPWYuaCk7YnJlYWt9fXJldHVybnt3OnMsaDpsLGZpbGw6ZS8ocypsKXx8MH19dmFyIFNsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvLG49ZS52ZXJzaW9uLGk9ZS5zdHJldGNoWCxhPWUuc3RyZXRjaFksbz1lLmNvbnRlbnQ7dGhpcy5wYWRkZWRSZWN0PXQsdGhpcy5waXhlbFJhdGlvPXIsdGhpcy5zdHJldGNoWD1pLHRoaXMuc3RyZXRjaFk9YSx0aGlzLmNvbnRlbnQ9byx0aGlzLnZlcnNpb249bn0sRWw9e3RsOntjb25maWd1cmFibGU6ITB9LGJyOntjb25maWd1cmFibGU6ITB9LHRsYnI6e2NvbmZpZ3VyYWJsZTohMH0sZGlzcGxheVNpemU6e2NvbmZpZ3VyYWJsZTohMH19O0VsLnRsLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCsxLHRoaXMucGFkZGVkUmVjdC55KzFdfSxFbC5ici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrdGhpcy5wYWRkZWRSZWN0LnctMSx0aGlzLnBhZGRlZFJlY3QueSt0aGlzLnBhZGRlZFJlY3QuaC0xXX0sRWwudGxici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50bC5jb25jYXQodGhpcy5icil9LEVsLmRpc3BsYXlTaXplLmdldD1mdW5jdGlvbigpe3JldHVyblsodGhpcy5wYWRkZWRSZWN0LnctMikvdGhpcy5waXhlbFJhdGlvLCh0aGlzLnBhZGRlZFJlY3QuaC0yKS90aGlzLnBpeGVsUmF0aW9dfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTbC5wcm90b3R5cGUsRWwpO3ZhciBMbD1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG49e307dGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzPVtdO3ZhciBpPVtdO3RoaXMuYWRkSW1hZ2VzKHQscixpKSx0aGlzLmFkZEltYWdlcyhlLG4saSk7dmFyIGE9TWwoaSksbz1hLncscz1hLmgsbD1uZXcgRW8oe3dpZHRoOm98fDEsaGVpZ2h0OnN8fDF9KTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxmPXJbY10ucGFkZGVkUmVjdDtFby5jb3B5KHUuZGF0YSxsLHt4OjAseTowfSx7eDpmLngrMSx5OmYueSsxfSx1LmRhdGEpfWZvcih2YXIgaCBpbiBlKXt2YXIgcD1lW2hdLGQ9bltoXS5wYWRkZWRSZWN0LG09ZC54KzEsZz1kLnkrMSx2PXAuZGF0YS53aWR0aCx5PXAuZGF0YS5oZWlnaHQ7RW8uY29weShwLmRhdGEsbCx7eDowLHk6MH0se3g6bSx5Omd9LHAuZGF0YSksRW8uY29weShwLmRhdGEsbCx7eDowLHk6eS0xfSx7eDptLHk6Zy0xfSx7d2lkdGg6dixoZWlnaHQ6MX0pLEVvLmNvcHkocC5kYXRhLGwse3g6MCx5OjB9LHt4Om0seTpnK3l9LHt3aWR0aDp2LGhlaWdodDoxfSksRW8uY29weShwLmRhdGEsbCx7eDp2LTEseTowfSx7eDptLTEseTpnfSx7d2lkdGg6MSxoZWlnaHQ6eX0pLEVvLmNvcHkocC5kYXRhLGwse3g6MCx5OjB9LHt4Om0rdix5Omd9LHt3aWR0aDoxLGhlaWdodDp5fSl9dGhpcy5pbWFnZT1sLHRoaXMuaWNvblBvc2l0aW9ucz1yLHRoaXMucGF0dGVyblBvc2l0aW9ucz1ufTtMbC5wcm90b3R5cGUuYWRkSW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdCl7dmFyIGk9dFtuXSxhPXt4OjAseTowLHc6aS5kYXRhLndpZHRoKzIsaDppLmRhdGEuaGVpZ2h0KzJ9O3IucHVzaChhKSxlW25dPW5ldyBTbChhLGkpLGkuaGFzUmVuZGVyQ2FsbGJhY2smJnRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcy5wdXNoKG4pfX0sTGwucHJvdG90eXBlLnBhdGNoVXBkYXRlZEltYWdlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0LmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzKHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcyksdC51cGRhdGVkSW1hZ2VzKXRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5pY29uUG9zaXRpb25zW3JdLHQuZ2V0SW1hZ2UociksZSksdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLnBhdHRlcm5Qb3NpdGlvbnNbcl0sdC5nZXRJbWFnZShyKSxlKX0sTGwucHJvdG90eXBlLnBhdGNoVXBkYXRlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXtpZih0JiZlJiZ0LnZlcnNpb24hPT1lLnZlcnNpb24pe3QudmVyc2lvbj1lLnZlcnNpb247dmFyIG49dC50bCxpPW5bMF0sYT1uWzFdO3IudXBkYXRlKGUuZGF0YSx2b2lkIDAse3g6aSx5OmF9KX19LE5uKCJJbWFnZVBvc2l0aW9uIixTbCksTm4oIkltYWdlQXRsYXMiLExsKTt2YXIgQ2w9e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9O3ZhciBQbD1mdW5jdGlvbigpe3RoaXMuc2NhbGU9MSx0aGlzLmZvbnRTdGFjaz0iIix0aGlzLmltYWdlTmFtZT1udWxsfTtQbC5mb3JUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFBsO3JldHVybiByLnNjYWxlPXR8fDEsci5mb250U3RhY2s9ZSxyfSxQbC5mb3JJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUGw7cmV0dXJuIGUuaW1hZ2VOYW1lPXQsZX07dmFyIElsPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PSIiLHRoaXMuc2VjdGlvbkluZGV4PVtdLHRoaXMuc2VjdGlvbnM9W10sdGhpcy5pbWFnZVNlY3Rpb25JRD1udWxsfTtmdW5jdGlvbiBPbCh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtKXt2YXIgZyx2PUlsLmZyb21GZWF0dXJlKHQsaSk7Zj09PUNsLnZlcnRpY2FsJiZ2LnZlcnRpY2FsaXplUHVuY3R1YXRpb24oKTt2YXIgeT1oaS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQseD1oaS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ7aWYoeSYmMT09PXYuc2VjdGlvbnMubGVuZ3RoKXtnPVtdO2Zvcih2YXIgYj0wLF89eSh2LnRvU3RyaW5nKCksamwodixjLGEsZSxuLHAsZCkpO2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXSxUPW5ldyBJbDtULnRleHQ9dyxULnNlY3Rpb25zPXYuc2VjdGlvbnM7Zm9yKHZhciBrPTA7azx3Lmxlbmd0aDtrKyspVC5zZWN0aW9uSW5kZXgucHVzaCgwKTtnLnB1c2goVCl9fWVsc2UgaWYoeCl7Zz1bXTtmb3IodmFyIEE9MCxNPXgodi50ZXh0LHYuc2VjdGlvbkluZGV4LGpsKHYsYyxhLGUsbixwLGQpKTtBPE0ubGVuZ3RoO0ErPTEpe3ZhciBTPU1bQV0sRT1uZXcgSWw7RS50ZXh0PVNbMF0sRS5zZWN0aW9uSW5kZXg9U1sxXSxFLnNlY3Rpb25zPXYuc2VjdGlvbnMsZy5wdXNoKEUpfX1lbHNlIGc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10LnRleHQsaT0wLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3IucHVzaCh0LnN1YnN0cmluZyhpLHMpKSxpPXN9cmV0dXJuIGk8bi5sZW5ndGgmJnIucHVzaCh0LnN1YnN0cmluZyhpLG4ubGVuZ3RoKSkscn0odixqbCh2LGMsYSxlLG4scCxkKSk7dmFyIEw9W10sQz17cG9zaXRpb25lZExpbmVzOkwsdGV4dDp2LnRvU3RyaW5nKCksdG9wOnVbMV0sYm90dG9tOnVbMV0sbGVmdDp1WzBdLHJpZ2h0OnVbMF0sd3JpdGluZ01vZGU6ZixpY29uc0luVGV4dDohMSx2ZXJ0aWNhbGl6YWJsZTohMX07cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtmb3IodmFyIGg9MCxwPS0xNyxkPTAsbT0wLGc9InJpZ2h0Ij09PXM/MToibGVmdCI9PT1zPzA6LjUsdj0wLHk9MCx4PWk7eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldO2IudHJpbSgpO3ZhciBfPWIuZ2V0TWF4U2NhbGUoKSx3PTI0KihfLTEpLFQ9e3Bvc2l0aW9uZWRHbHlwaHM6W10sbGluZU9mZnNldDowfTt0LnBvc2l0aW9uZWRMaW5lc1t2XT1UO3ZhciBrPVQucG9zaXRpb25lZEdseXBocyxBPTA7aWYoYi5sZW5ndGgoKSl7Zm9yKHZhciBNPTA7TTxiLmxlbmd0aCgpO00rKyl7dmFyIFM9Yi5nZXRTZWN0aW9uKE0pLEU9Yi5nZXRTZWN0aW9uSW5kZXgoTSksTD1iLmdldENoYXJDb2RlKE0pLEM9MCxQPW51bGwsST1udWxsLE89bnVsbCx6PTI0LEQ9IShsPT09Q2wuaG9yaXpvbnRhbHx8IXUmJiFabihMKXx8dSYmKHpsW0xdfHwoWT1MLFluLkFyYWJpYyhZKXx8WW5bIkFyYWJpYyBTdXBwbGVtZW50Il0oWSl8fFluWyJBcmFiaWMgRXh0ZW5kZWQtQSJdKFkpfHxZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0oWSl8fFluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXShZKSkpKTtpZihTLmltYWdlTmFtZSl7dmFyIFI9bltTLmltYWdlTmFtZV07aWYoIVIpY29udGludWU7Tz1TLmltYWdlTmFtZSx0Lmljb25zSW5UZXh0PXQuaWNvbnNJblRleHR8fCEwLEk9Ui5wYWRkZWRSZWN0O3ZhciBGPVIuZGlzcGxheVNpemU7Uy5zY2FsZT0yNCpTLnNjYWxlL2YsUD17d2lkdGg6RlswXSxoZWlnaHQ6RlsxXSxsZWZ0OjEsdG9wOi0zLGFkdmFuY2U6RD9GWzFdOkZbMF19O3ZhciBCPTI0LUZbMV0qUy5zY2FsZTtDPXcrQix6PVAuYWR2YW5jZTt2YXIgTj1EP0ZbMF0qUy5zY2FsZS0yNCpfOkZbMV0qUy5zY2FsZS0yNCpfO04+MCYmTj5BJiYoQT1OKX1lbHNle3ZhciBqPXJbUy5mb250U3RhY2tdLFU9aiYmaltMXTtpZihVJiZVLnJlY3QpST1VLnJlY3QsUD1VLm1ldHJpY3M7ZWxzZXt2YXIgVj1lW1MuZm9udFN0YWNrXSxIPVYmJlZbTF07aWYoIUgpY29udGludWU7UD1ILm1ldHJpY3N9Qz0yNCooXy1TLnNjYWxlKX1EPyh0LnZlcnRpY2FsaXphYmxlPSEwLGsucHVzaCh7Z2x5cGg6TCxpbWFnZU5hbWU6Tyx4OmgseTpwK0MsdmVydGljYWw6RCxzY2FsZTpTLnNjYWxlLGZvbnRTdGFjazpTLmZvbnRTdGFjayxzZWN0aW9uSW5kZXg6RSxtZXRyaWNzOlAscmVjdDpJfSksaCs9eipTLnNjYWxlK2MpOihrLnB1c2goe2dseXBoOkwsaW1hZ2VOYW1lOk8seDpoLHk6cCtDLHZlcnRpY2FsOkQsc2NhbGU6Uy5zY2FsZSxmb250U3RhY2s6Uy5mb250U3RhY2ssc2VjdGlvbkluZGV4OkUsbWV0cmljczpQLHJlY3Q6SX0pLGgrPVAuYWR2YW5jZSpTLnNjYWxlK2MpfWlmKDAhPT1rLmxlbmd0aCl7dmFyIHE9aC1jO2Q9TWF0aC5tYXgocSxkKSxWbChrLDAsay5sZW5ndGgtMSxnLEEpfWg9MDt2YXIgRz1hKl8rQTtULmxpbmVPZmZzZXQ9TWF0aC5tYXgoQSx3KSxwKz1HLG09TWF0aC5tYXgoRyxtKSwrK3Z9ZWxzZSBwKz1hLCsrdn12YXIgWTt2YXIgVz1wLSAtMTcsWD1VbChvKSxaPVguaG9yaXpvbnRhbEFsaWduLEo9WC52ZXJ0aWNhbEFsaWduOyhmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9KGUtcikqaSx1PTA7dT1hIT09bz8tcypuLSAtMTc6KC1uKmwrLjUpKm87Zm9yKHZhciBmPTAsaD10O2Y8aC5sZW5ndGg7Zis9MSlmb3IodmFyIHA9aFtmXSxkPTAsbT1wLnBvc2l0aW9uZWRHbHlwaHM7ZDxtLmxlbmd0aDtkKz0xKXt2YXIgZz1tW2RdO2cueCs9YyxnLnkrPXV9fSkodC5wb3NpdGlvbmVkTGluZXMsZyxaLEosZCxtLGEsVyxpLmxlbmd0aCksdC50b3ArPS1KKlcsdC5ib3R0b209dC50b3ArVyx0LmxlZnQrPS1aKmQsdC5yaWdodD10LmxlZnQrZH0oQyxlLHIsbixnLG8scyxsLGYsYyxoLG0pLCFmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZigwIT09cltlXS5wb3NpdGlvbmVkR2x5cGhzLmxlbmd0aClyZXR1cm4hMX1yZXR1cm4hMH0oTCkmJkN9SWwuZnJvbUZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IElsLG49MDtuPHQuc2VjdGlvbnMubGVuZ3RoO24rKyl7dmFyIGk9dC5zZWN0aW9uc1tuXTtpLmltYWdlP3IuYWRkSW1hZ2VTZWN0aW9uKGkpOnIuYWRkVGV4dFNlY3Rpb24oaSxlKX1yZXR1cm4gcn0sSWwucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQubGVuZ3RofSxJbC5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFt0XV19LElsLnByb3RvdHlwZS5nZXRTZWN0aW9uSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W3RdfSxJbC5wcm90b3R5cGUuZ2V0Q2hhckNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KHQpfSxJbC5wcm90b3R5cGUudmVydGljYWxpemVQdW5jdHVhdGlvbj1mdW5jdGlvbigpe3RoaXMudGV4dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmNoYXJDb2RlQXQocisxKXx8bnVsbCxpPXQuY2hhckNvZGVBdChyLTEpfHxudWxsOyghbnx8IUpuKG4pfHxybFt0W3IrMV1dKSYmKCFpfHwhSm4oaSl8fHJsW3Rbci0xXV0pJiZybFt0W3JdXT9lKz1ybFt0W3JdXTplKz10W3JdfXJldHVybiBlfSh0aGlzLnRleHQpfSxJbC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMudGV4dC5sZW5ndGgmJnpsW3RoaXMudGV4dC5jaGFyQ29kZUF0KGUpXTtlKyspdCsrO2Zvcih2YXIgcj10aGlzLnRleHQubGVuZ3RoLG49dGhpcy50ZXh0Lmxlbmd0aC0xO24+PTAmJm4+PXQmJnpsW3RoaXMudGV4dC5jaGFyQ29kZUF0KG4pXTtuLS0pci0tO3RoaXMudGV4dD10aGlzLnRleHQuc3Vic3RyaW5nKHQsciksdGhpcy5zZWN0aW9uSW5kZXg9dGhpcy5zZWN0aW9uSW5kZXguc2xpY2UodCxyKX0sSWwucHJvdG90eXBlLnN1YnN0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBJbDtyZXR1cm4gci50ZXh0PXRoaXMudGV4dC5zdWJzdHJpbmcodCxlKSxyLnNlY3Rpb25JbmRleD10aGlzLnNlY3Rpb25JbmRleC5zbGljZSh0LGUpLHIuc2VjdGlvbnM9dGhpcy5zZWN0aW9ucyxyfSxJbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0fSxJbC5wcm90b3R5cGUuZ2V0TWF4U2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnNlY3Rpb25JbmRleC5yZWR1Y2UoKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGgubWF4KGUsdC5zZWN0aW9uc1tyXS5zY2FsZSl9KSwwKX0sSWwucHJvdG90eXBlLmFkZFRleHRTZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy50ZXh0Kz10LnRleHQsdGhpcy5zZWN0aW9ucy5wdXNoKFBsLmZvclRleHQodC5zY2FsZSx0LmZvbnRTdGFja3x8ZSkpO2Zvcih2YXIgcj10aGlzLnNlY3Rpb25zLmxlbmd0aC0xLG49MDtuPHQudGV4dC5sZW5ndGg7KytuKXRoaXMuc2VjdGlvbkluZGV4LnB1c2gocil9LElsLnByb3RvdHlwZS5hZGRJbWFnZVNlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5pbWFnZT90LmltYWdlLm5hbWU6IiI7aWYoMCE9PWUubGVuZ3RoKXt2YXIgcj10aGlzLmdldE5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSgpO3I/KHRoaXMudGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShyKSx0aGlzLnNlY3Rpb25zLnB1c2goUGwuZm9ySW1hZ2UoZSkpLHRoaXMuc2VjdGlvbkluZGV4LnB1c2godGhpcy5zZWN0aW9ucy5sZW5ndGgtMSkpOl8oIlJlYWNoZWQgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIDY0MDEiKX1lbHNlIF8oIkNhbid0IGFkZCBGb3JtYXR0ZWRTZWN0aW9uIHdpdGggYW4gZW1wdHkgaW1hZ2UuIil9LElsLnByb3RvdHlwZS5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZVNlY3Rpb25JRD90aGlzLmltYWdlU2VjdGlvbklEPj02Mzc0Mz9udWxsOisrdGhpcy5pbWFnZVNlY3Rpb25JRDoodGhpcy5pbWFnZVNlY3Rpb25JRD01NzM0NCx0aGlzLmltYWdlU2VjdGlvbklEKX07dmFyIHpsPXs5OiEwLDEwOiEwLDExOiEwLDEyOiEwLDEzOiEwLDMyOiEwfSxEbD17fTtmdW5jdGlvbiBSbCh0LGUscixuLGksYSl7aWYoZS5pbWFnZU5hbWUpe3ZhciBvPW5bZS5pbWFnZU5hbWVdO3JldHVybiBvP28uZGlzcGxheVNpemVbMF0qZS5zY2FsZSoyNC9hK2k6MH12YXIgcz1yW2UuZm9udFN0YWNrXSxsPXMmJnNbdF07cmV0dXJuIGw/bC5tZXRyaWNzLmFkdmFuY2UqZS5zY2FsZStpOjB9ZnVuY3Rpb24gRmwodCxlLHIsbil7dmFyIGk9TWF0aC5wb3codC1lLDIpO3JldHVybiBuP3Q8ZT9pLzI6MippOmkrTWF0aC5hYnMocikqcn1mdW5jdGlvbiBCbCh0LGUscil7dmFyIG49MDtyZXR1cm4gMTA9PT10JiYobi09MWU0KSxyJiYobis9MTUwKSw0MCE9PXQmJjY1Mjg4IT09dHx8KG4rPTUwKSw0MSE9PWUmJjY1Mjg5IT09ZXx8KG4rPTUwKSxufWZ1bmN0aW9uIE5sKHQsZSxyLG4saSxhKXtmb3IodmFyIG89bnVsbCxzPUZsKGUscixpLGEpLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9RmwoZS11LngscixpLGEpK3UuYmFkbmVzcztmPD1zJiYobz11LHM9Zil9cmV0dXJue2luZGV4OnQseDplLHByaW9yQnJlYWs6byxiYWRuZXNzOnN9fWZ1bmN0aW9uIGpsKHQsZSxyLG4saSxhLG8pe2lmKCJwb2ludCIhPT1hKXJldHVybltdO2lmKCF0KXJldHVybltdO2Zvcih2YXIgcyxsPVtdLGM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wLHM9MDtzPHQubGVuZ3RoKCk7cysrKXt2YXIgbD10LmdldFNlY3Rpb24ocyk7bys9UmwodC5nZXRDaGFyQ29kZShzKSxsLG4saSxlLGEpfXJldHVybiBvL01hdGgubWF4KDEsTWF0aC5jZWlsKG8vcikpfSh0LGUscixuLGksbyksdT10LnRleHQuaW5kZXhPZigiXHUyMDBiIik+PTAsZj0wLGg9MDtoPHQubGVuZ3RoKCk7aCsrKXt2YXIgcD10LmdldFNlY3Rpb24oaCksZD10LmdldENoYXJDb2RlKGgpO2lmKHpsW2RdfHwoZis9UmwoZCxwLG4saSxlLG8pKSxoPHQubGVuZ3RoKCktMSl7dmFyIG09ISEoISgocz1kKTwxMTkwNCkmJihZblsiQm9wb21vZm8gRXh0ZW5kZWQiXShzKXx8WW4uQm9wb21vZm8ocyl8fFluWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHMpfHxZblsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKHMpfHxZblsiQ0pLIENvbXBhdGliaWxpdHkiXShzKXx8WW5bIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0ocyl8fFluWyJDSksgU3Ryb2tlcyJdKHMpfHxZblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0ocyl8fFluWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0ocyl8fFluWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0ocyl8fFluWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0ocyl8fFluWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHMpfHxZbi5IaXJhZ2FuYShzKXx8WW5bIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXShzKXx8WW5bIkthbmd4aSBSYWRpY2FscyJdKHMpfHxZblsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHMpfHxZbi5LYXRha2FuYShzKXx8WW5bIlZlcnRpY2FsIEZvcm1zIl0ocyl8fFluWyJZaSBSYWRpY2FscyJdKHMpfHxZblsiWWkgU3lsbGFibGVzIl0ocykpKTsoRGxbZF18fG18fHAuaW1hZ2VOYW1lKSYmbC5wdXNoKE5sKGgrMSxmLGMsbCxCbChkLHQuZ2V0Q2hhckNvZGUoaCsxKSxtJiZ1KSwhMSkpfX1yZXR1cm4gZnVuY3Rpb24gdChlKXtyZXR1cm4gZT90KGUucHJpb3JCcmVhaykuY29uY2F0KGUuaW5kZXgpOltdfShObCh0Lmxlbmd0aCgpLGYsYyxsLDAsITApKX1mdW5jdGlvbiBVbCh0KXt2YXIgZT0uNSxyPS41O3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmU9MTticmVhaztjYXNlImxlZnQiOmNhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOmU9MH1zd2l0Y2godCl7Y2FzZSJib3R0b20iOmNhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpyPTE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpyPTB9cmV0dXJue2hvcml6b250YWxBbGlnbjplLHZlcnRpY2FsQWxpZ246cn19ZnVuY3Rpb24gVmwodCxlLHIsbixpKXtpZihufHxpKWZvcih2YXIgYT10W3JdLG89YS5tZXRyaWNzLmFkdmFuY2UqYS5zY2FsZSxzPSh0W3JdLngrbykqbixsPWU7bDw9cjtsKyspdFtsXS54LT1zLHRbbF0ueSs9aX1mdW5jdGlvbiBIbCh0LGUscixuLGksYSl7dmFyIG8scz10LmltYWdlO2lmKHMuY29udGVudCl7dmFyIGw9cy5jb250ZW50LGM9cy5waXhlbFJhdGlvfHwxO289W2xbMF0vYyxsWzFdL2Mscy5kaXNwbGF5U2l6ZVswXS1sWzJdL2Mscy5kaXNwbGF5U2l6ZVsxXS1sWzNdL2NdfXZhciB1LGYsaCxwLGQ9ZS5sZWZ0KmEsbT1lLnJpZ2h0KmE7IndpZHRoIj09PXJ8fCJib3RoIj09PXI/KHA9aVswXStkLW5bM10sZj1pWzBdK20rblsxXSk6Zj0ocD1pWzBdKyhkK20tcy5kaXNwbGF5U2l6ZVswXSkvMikrcy5kaXNwbGF5U2l6ZVswXTt2YXIgZz1lLnRvcCphLHY9ZS5ib3R0b20qYTtyZXR1cm4iaGVpZ2h0Ij09PXJ8fCJib3RoIj09PXI/KHU9aVsxXStnLW5bMF0saD1pWzFdK3YrblsyXSk6aD0odT1pWzFdKyhnK3Ytcy5kaXNwbGF5U2l6ZVsxXSkvMikrcy5kaXNwbGF5U2l6ZVsxXSx7aW1hZ2U6cyx0b3A6dSxyaWdodDpmLGJvdHRvbTpoLGxlZnQ6cCxjb2xsaXNpb25QYWRkaW5nOm99fURsWzEwXT0hMCxEbFszMl09ITAsRGxbMzhdPSEwLERsWzQwXT0hMCxEbFs0MV09ITAsRGxbNDNdPSEwLERsWzQ1XT0hMCxEbFs0N109ITAsRGxbMTczXT0hMCxEbFsxODNdPSEwLERsWzgyMDNdPSEwLERsWzgyMDhdPSEwLERsWzgyMTFdPSEwLERsWzgyMzFdPSEwO3ZhciBxbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfSxlfShpKTtObigiQW5jaG9yIixxbCk7ZnVuY3Rpb24gR2wodCxlKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoImNvbnN0YW50Ij09PXIua2luZClyZXR1cm57a2luZDoiY29uc3RhbnQiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgcGkodCsxKSl9O2lmKCJzb3VyY2UiPT09ci5raW5kKXJldHVybntraW5kOiJzb3VyY2UifTtmb3IodmFyIG49ci56b29tU3RvcHMsaT1yLmludGVycG9sYXRpb25UeXBlLGE9MDthPG4ubGVuZ3RoJiZuW2FdPD10OylhKys7Zm9yKHZhciBvPWE9TWF0aC5tYXgoMCxhLTEpO288bi5sZW5ndGgmJm5bb108dCsxOylvKys7bz1NYXRoLm1pbihuLmxlbmd0aC0xLG8pO3ZhciBzPW5bYV0sbD1uW29dO3JldHVybiJjb21wb3NpdGUiPT09ci5raW5kP3traW5kOiJjb21wb3NpdGUiLG1pblpvb206cyxtYXhab29tOmwsaW50ZXJwb2xhdGlvblR5cGU6aX06e2tpbmQ6ImNhbWVyYSIsbWluWm9vbTpzLG1heFpvb206bCxtaW5TaXplOnIuZXZhbHVhdGUobmV3IHBpKHMpKSxtYXhTaXplOnIuZXZhbHVhdGUobmV3IHBpKGwpKSxpbnRlcnBvbGF0aW9uVHlwZTppfX1mdW5jdGlvbiBZbCh0LGUscil7dmFyIG49ZS51U2l6ZSxpPWUudVNpemVULGE9ci5sb3dlclNpemUsbz1yLnVwcGVyU2l6ZTtyZXR1cm4ic291cmNlIj09PXQua2luZD9hLzEyODoiY29tcG9zaXRlIj09PXQua2luZD9xZShhLzEyOCxvLzEyOCxpKTpufWZ1bmN0aW9uIFdsKHQsZSl7dmFyIHI9MCxuPTA7aWYoImNvbnN0YW50Ij09PXQua2luZCluPXQubGF5b3V0U2l6ZTtlbHNlIGlmKCJzb3VyY2UiIT09dC5raW5kKXt2YXIgaT10LmludGVycG9sYXRpb25UeXBlLGE9dC5taW5ab29tLG89dC5tYXhab29tLHM9aT9sKG9yLmludGVycG9sYXRpb25GYWN0b3IoaSxlLGEsbyksMCwxKTowOyJjYW1lcmEiPT09dC5raW5kP249cWUodC5taW5TaXplLHQubWF4U2l6ZSxzKTpyPXN9cmV0dXJue3VTaXplVDpyLHVTaXplOm59fXZhciBYbD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxnZXRTaXplRGF0YTpHbCxldmFsdWF0ZVNpemVGb3JGZWF0dXJlOllsLGV2YWx1YXRlU2l6ZUZvclpvb206V2wsU0laRV9QQUNLX0ZBQ1RPUjoxMjh9KTtmdW5jdGlvbiBabCh0LGUscixuLGkpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGE9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoYSksYT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sYz0wO3M8ci8yOyl7dmFyIHU9dFtvLTFdLGY9dFtvXSxoPXRbbysxXTtpZighaClyZXR1cm4hMTt2YXIgcD11LmFuZ2xlVG8oZiktZi5hbmdsZVRvKGgpO2ZvcihwPU1hdGguYWJzKChwKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6cH0pLGMrPXA7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+aSlyZXR1cm4hMTtvKysscys9Zi5kaXN0KGgpfXJldHVybiEwfWZ1bmN0aW9uIEpsKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoLTE7cisrKWUrPXRbcl0uZGlzdCh0W3IrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEtsKHQsZSxyKXtyZXR1cm4gdD8uNiplKnI6MH1mdW5jdGlvbiBRbCh0LGUpe3JldHVybiBNYXRoLm1heCh0P3QucmlnaHQtdC5sZWZ0OjAsZT9lLnJpZ2h0LWUubGVmdDowKX1mdW5jdGlvbiAkbCh0LGUscixuLGksYSl7Zm9yKHZhciBvPUtsKHIsaSxhKSxzPVFsKHIsbikqYSxsPTAsYz1KbCh0KS8yLHU9MDt1PHQubGVuZ3RoLTE7dSsrKXt2YXIgZj10W3VdLGg9dFt1KzFdLHA9Zi5kaXN0KGgpO2lmKGwrcD5jKXt2YXIgZD0oYy1sKS9wLG09cWUoZi54LGgueCxkKSxnPXFlKGYueSxoLnksZCksdj1uZXcgcWwobSxnLGguYW5nbGVUbyhmKSx1KTtyZXR1cm4gdi5fcm91bmQoKSwhb3x8WmwodCx2LHMsbyxlKT92OnZvaWQgMH1sKz1wfX1mdW5jdGlvbiB0Yyh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9S2wobixhLG8pLHU9UWwobixpKSxmPXUqbyxoPTA9PT10WzBdLnh8fHRbMF0ueD09PWx8fDA9PT10WzBdLnl8fHRbMF0ueT09PWw7cmV0dXJuIGUtZjxlLzQmJihlPWYrZS80KSxmdW5jdGlvbiB0KGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9by8yLGY9SmwoZSksaD0wLHA9ci1uLGQ9W10sbT0wO208ZS5sZW5ndGgtMTttKyspe2Zvcih2YXIgZz1lW21dLHY9ZVttKzFdLHk9Zy5kaXN0KHYpLHg9di5hbmdsZVRvKGcpO3ArbjxoK3k7KXt2YXIgYj0oKHArPW4pLWgpL3ksXz1xZShnLngsdi54LGIpLHc9cWUoZy55LHYueSxiKTtpZihfPj0wJiZfPGMmJnc+PTAmJnc8YyYmcC11Pj0wJiZwK3U8PWYpe3ZhciBUPW5ldyBxbChfLHcseCxtKTtULl9yb3VuZCgpLGkmJiFabChlLFQsbyxpLGEpfHxkLnB1c2goVCl9fWgrPXl9bHx8ZC5sZW5ndGh8fHN8fChkPXQoZSxoLzIsbixpLGEsbyxzLCEwLGMpKTtyZXR1cm4gZH0odCxoP2UvMipzJWU6KHUvMisyKmEpKm8qcyVlLGUsYyxyLGYsaCwhMSxsKX1mdW5jdGlvbiBlYyh0LGUscixuLGEpe2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBmPWxbdV0saD1sW3UrMV07Zi54PGUmJmgueDxlfHwoZi54PGU/Zj1uZXcgaShlLGYueSsoaC55LWYueSkqKChlLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCk6aC54PGUmJihoPW5ldyBpKGUsZi55KyhoLnktZi55KSooKGUtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKSksZi55PHImJmgueTxyfHwoZi55PHI/Zj1uZXcgaShmLngrKGgueC1mLngpKigoci1mLnkpLyhoLnktZi55KSkscikuX3JvdW5kKCk6aC55PHImJihoPW5ldyBpKGYueCsoaC54LWYueCkqKChyLWYueSkvKGgueS1mLnkpKSxyKS5fcm91bmQoKSksZi54Pj1uJiZoLng+PW58fChmLng+PW4/Zj1uZXcgaShuLGYueSsoaC55LWYueSkqKChuLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCk6aC54Pj1uJiYoaD1uZXcgaShuLGYueSsoaC55LWYueSkqKChuLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCkpLGYueT49YSYmaC55Pj1hfHwoZi55Pj1hP2Y9bmV3IGkoZi54KyhoLngtZi54KSooKGEtZi55KS8oaC55LWYueSkpLGEpLl9yb3VuZCgpOmgueT49YSYmKGg9bmV3IGkoZi54KyhoLngtZi54KSooKGEtZi55KS8oaC55LWYueSkpLGEpLl9yb3VuZCgpKSxjJiZmLmVxdWFscyhjW2MubGVuZ3RoLTFdKXx8KGM9W2ZdLG8ucHVzaChjKSksYy5wdXNoKGgpKSkpKX1yZXR1cm4gb31mdW5jdGlvbiByYyh0LGUscixuKXt2YXIgYT1bXSxvPXQuaW1hZ2Uscz1vLnBpeGVsUmF0aW8sbD1vLnBhZGRlZFJlY3Qudy0yLGM9by5wYWRkZWRSZWN0LmgtMix1PXQucmlnaHQtdC5sZWZ0LGY9dC5ib3R0b20tdC50b3AsaD1vLnN0cmV0Y2hYfHxbWzAsbF1dLHA9by5zdHJldGNoWXx8W1swLGNdXSxkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZVsxXS1lWzBdfSxtPWgucmVkdWNlKGQsMCksZz1wLnJlZHVjZShkLDApLHY9bC1tLHk9Yy1nLHg9MCxiPW0sXz0wLHc9ZyxUPTAsaz12LEE9MCxNPXk7aWYoby5jb250ZW50JiZuKXt2YXIgUz1vLmNvbnRlbnQ7eD1uYyhoLDAsU1swXSksXz1uYyhwLDAsU1sxXSksYj1uYyhoLFNbMF0sU1syXSksdz1uYyhwLFNbMV0sU1szXSksVD1TWzBdLXgsQT1TWzFdLV8saz1TWzJdLVNbMF0tYixNPVNbM10tU1sxXS13fXZhciBFPWZ1bmN0aW9uKG4sYSxsLGMpe3ZhciBoPWFjKG4uc3RyZXRjaC14LGIsdSx0LmxlZnQpLHA9b2Mobi5maXhlZC1ULGssbi5zdHJldGNoLG0pLGQ9YWMoYS5zdHJldGNoLV8sdyxmLHQudG9wKSx2PW9jKGEuZml4ZWQtQSxNLGEuc3RyZXRjaCxnKSx5PWFjKGwuc3RyZXRjaC14LGIsdSx0LmxlZnQpLFM9b2MobC5maXhlZC1ULGssbC5zdHJldGNoLG0pLEU9YWMoYy5zdHJldGNoLV8sdyxmLHQudG9wKSxMPW9jKGMuZml4ZWQtQSxNLGMuc3RyZXRjaCxnKSxDPW5ldyBpKGgsZCksUD1uZXcgaSh5LGQpLEk9bmV3IGkoeSxFKSxPPW5ldyBpKGgsRSksej1uZXcgaShwL3Msdi9zKSxEPW5ldyBpKFMvcyxML3MpLFI9ZSpNYXRoLlBJLzE4MDtpZihSKXt2YXIgRj1NYXRoLnNpbihSKSxCPU1hdGguY29zKFIpLE49W0IsLUYsRixCXTtDLl9tYXRNdWx0KE4pLFAuX21hdE11bHQoTiksTy5fbWF0TXVsdChOKSxJLl9tYXRNdWx0KE4pfXZhciBqPW4uc3RyZXRjaCtuLmZpeGVkLFU9bC5zdHJldGNoK2wuZml4ZWQsVj1hLnN0cmV0Y2grYS5maXhlZCxIPWMuc3RyZXRjaCtjLmZpeGVkO3JldHVybnt0bDpDLHRyOlAsYmw6TyxicjpJLHRleDp7eDpvLnBhZGRlZFJlY3QueCsxK2oseTpvLnBhZGRlZFJlY3QueSsxK1YsdzpVLWosaDpILVZ9LHdyaXRpbmdNb2RlOnZvaWQgMCxnbHlwaE9mZnNldDpbMCwwXSxzZWN0aW9uSW5kZXg6MCxwaXhlbE9mZnNldFRMOnoscGl4ZWxPZmZzZXRCUjpELG1pbkZvbnRTY2FsZVg6ay9zL3UsbWluRm9udFNjYWxlWTpNL3MvZixpc1NERjpyfX07aWYobiYmKG8uc3RyZXRjaFh8fG8uc3RyZXRjaFkpKWZvcih2YXIgTD1pYyhoLHYsbSksQz1pYyhwLHksZyksUD0wO1A8TC5sZW5ndGgtMTtQKyspZm9yKHZhciBJPUxbUF0sTz1MW1ArMV0sej0wO3o8Qy5sZW5ndGgtMTt6Kyspe3ZhciBEPUNbel0sUj1DW3orMV07YS5wdXNoKEUoSSxELE8sUikpfWVsc2UgYS5wdXNoKEUoe2ZpeGVkOjAsc3RyZXRjaDotMX0se2ZpeGVkOjAsc3RyZXRjaDotMX0se2ZpeGVkOjAsc3RyZXRjaDpsKzF9LHtmaXhlZDowLHN0cmV0Y2g6YysxfSkpO3JldHVybiBhfWZ1bmN0aW9uIG5jKHQsZSxyKXtmb3IodmFyIG49MCxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuKz1NYXRoLm1heChlLE1hdGgubWluKHIsb1sxXSkpLU1hdGgubWF4KGUsTWF0aC5taW4ocixvWzBdKSl9cmV0dXJuIG59ZnVuY3Rpb24gaWModCxlLHIpe2Zvcih2YXIgbj1be2ZpeGVkOi0xLHN0cmV0Y2g6MH1dLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9b1swXSxsPW9bMV0sYz1uW24ubGVuZ3RoLTFdO24ucHVzaCh7Zml4ZWQ6cy1jLnN0cmV0Y2gsc3RyZXRjaDpjLnN0cmV0Y2h9KSxuLnB1c2goe2ZpeGVkOnMtYy5zdHJldGNoLHN0cmV0Y2g6Yy5zdHJldGNoKyhsLXMpfSl9cmV0dXJuIG4ucHVzaCh7Zml4ZWQ6ZSsxLHN0cmV0Y2g6cn0pLG59ZnVuY3Rpb24gYWModCxlLHIsbil7cmV0dXJuIHQvZSpyK259ZnVuY3Rpb24gb2ModCxlLHIsbil7cmV0dXJuIHQtZSpyL259dmFyIHNjPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMsbCxjLHUpe2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCxjKXt2YXIgZj1vLnRvcCxoPW8uYm90dG9tLHA9by5jb2xsaXNpb25QYWRkaW5nO3AmJihmLT1wWzFdLGgrPXBbM10pO3ZhciBkPWgtZjtkPjAmJihkPU1hdGgubWF4KDEwLGQpLHRoaXMuY2lyY2xlRGlhbWV0ZXI9ZCl9ZWxzZXt2YXIgbT1vLnRvcCpzLWwsZz1vLmJvdHRvbSpzK2wsdj1vLmxlZnQqcy1sLHk9by5yaWdodCpzK2wseD1vLmNvbGxpc2lvblBhZGRpbmc7aWYoeCYmKHYtPXhbMF0qcyxtLT14WzFdKnMseSs9eFsyXSpzLGcrPXhbM10qcyksdSl7dmFyIGI9bmV3IGkodixtKSxfPW5ldyBpKHksbSksdz1uZXcgaSh2LGcpLFQ9bmV3IGkoeSxnKSxrPXUqTWF0aC5QSS8xODA7Yi5fcm90YXRlKGspLF8uX3JvdGF0ZShrKSx3Ll9yb3RhdGUoayksVC5fcm90YXRlKGspLHY9TWF0aC5taW4oYi54LF8ueCx3LngsVC54KSx5PU1hdGgubWF4KGIueCxfLngsdy54LFQueCksbT1NYXRoLm1pbihiLnksXy55LHcueSxULnkpLGc9TWF0aC5tYXgoYi55LF8ueSx3LnksVC55KX10LmVtcGxhY2VCYWNrKGUueCxlLnksdixtLHksZyxyLG4sYSl9dGhpcy5ib3hFbmRJbmRleD10Lmxlbmd0aH0sbGM9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ZSYmKGU9Y2MpLHRoaXMuZGF0YT10LHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5jb21wYXJlPWUsdGhpcy5sZW5ndGg+MClmb3IodmFyIHI9KHRoaXMubGVuZ3RoPj4xKS0xO3I+PTA7ci0tKXRoaXMuX2Rvd24ocil9O2Z1bmN0aW9uIGNjKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIHVjKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1yJiYocj0hMSk7Zm9yKHZhciBuPTEvMCxhPTEvMCxvPS0xLzAscz0tMS8wLGw9dFswXSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107KCFjfHx1Lng8bikmJihuPXUueCksKCFjfHx1Lnk8YSkmJihhPXUueSksKCFjfHx1Lng+bykmJihvPXUueCksKCFjfHx1Lnk+cykmJihzPXUueSl9dmFyIGY9by1uLGg9cy1hLHA9TWF0aC5taW4oZixoKSxkPXAvMixtPW5ldyBsYyhbXSxmYyk7aWYoMD09PXApcmV0dXJuIG5ldyBpKG4sYSk7Zm9yKHZhciBnPW47ZzxvO2crPXApZm9yKHZhciB2PWE7djxzO3YrPXApbS5wdXNoKG5ldyBoYyhnK2QsditkLGQsdCkpO2Zvcih2YXIgeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0wLGk9dFswXSxhPTAsbz1pLmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBsPWlbYV0sYz1pW3NdLHU9bC54KmMueS1jLngqbC55O3IrPShsLngrYy54KSp1LG4rPShsLnkrYy55KSp1LGUrPTMqdX1yZXR1cm4gbmV3IGhjKHIvZSxuL2UsMCx0KX0odCkseD1tLmxlbmd0aDttLmxlbmd0aDspe3ZhciBiPW0ucG9wKCk7KGIuZD55LmR8fCF5LmQpJiYoeT1iLHImJmNvbnNvbGUubG9nKCJmb3VuZCBiZXN0ICVkIGFmdGVyICVkIHByb2JlcyIsTWF0aC5yb3VuZCgxZTQqYi5kKS8xZTQseCkpLGIubWF4LXkuZDw9ZXx8KGQ9Yi5oLzIsbS5wdXNoKG5ldyBoYyhiLnAueC1kLGIucC55LWQsZCx0KSksbS5wdXNoKG5ldyBoYyhiLnAueCtkLGIucC55LWQsZCx0KSksbS5wdXNoKG5ldyBoYyhiLnAueC1kLGIucC55K2QsZCx0KSksbS5wdXNoKG5ldyBoYyhiLnAueCtkLGIucC55K2QsZCx0KSkseCs9NCl9cmV0dXJuIHImJihjb25zb2xlLmxvZygibnVtIHByb2JlczogIit4KSxjb25zb2xlLmxvZygiYmVzdCBkaXN0YW5jZTogIit5LmQpKSx5LnB9ZnVuY3Rpb24gZmModCxlKXtyZXR1cm4gZS5tYXgtdC5tYXh9ZnVuY3Rpb24gaGModCxlLHIsbil7dGhpcy5wPW5ldyBpKHQsZSksdGhpcy5oPXIsdGhpcy5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSExLG49MS8wLGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9ZVtpXSxvPTAscz1hLmxlbmd0aCxsPXMtMTtvPHM7bD1vKyspe3ZhciBjPWFbb10sdT1hW2xdO2MueT50LnkhPXUueT50LnkmJnQueDwodS54LWMueCkqKHQueS1jLnkpLyh1LnktYy55KStjLngmJihyPSFyKSxuPU1hdGgubWluKG4scm8odCxjLHUpKX1yZXR1cm4ocj8xOi0xKSpNYXRoLnNxcnQobil9KHRoaXMucCxuKSx0aGlzLm1heD10aGlzLmQrdGhpcy5oKk1hdGguU1FSVDJ9bGMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnB1c2godCksdGhpcy5sZW5ndGgrKyx0aGlzLl91cCh0aGlzLmxlbmd0aC0xKX0sbGMucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5kYXRhWzBdLGU9dGhpcy5kYXRhLnBvcCgpO3JldHVybiB0aGlzLmxlbmd0aC0tLHRoaXMubGVuZ3RoPjAmJih0aGlzLmRhdGFbMF09ZSx0aGlzLl9kb3duKDApKSx0fX0sbGMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhWzBdfSxsYy5wcm90b3R5cGUuX3VwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj1lW3RdO3Q+MDspe3ZhciBpPXQtMT4+MSxhPWVbaV07aWYocihuLGEpPj0wKWJyZWFrO2VbdF09YSx0PWl9ZVt0XT1ufSxsYy5wcm90b3R5cGUuX2Rvd249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPXRoaXMubGVuZ3RoPj4xLGk9ZVt0XTt0PG47KXt2YXIgYT0xKyh0PDwxKSxvPWVbYV0scz1hKzE7aWYoczx0aGlzLmxlbmd0aCYmcihlW3NdLG8pPDAmJihhPXMsbz1lW3NdKSxyKG8saSk+PTApYnJlYWs7ZVt0XT1vLHQ9YX1lW3RdPWl9O3ZhciBwYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZnVuY3Rpb24gZGModCxlKXtyZXR1cm4gZVsxXSE9PXBjP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGk9MDtzd2l0Y2goZT1NYXRoLmFicyhlKSxyPU1hdGguYWJzKHIpLHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpjYXNlInRvcCI6aT1yLTc7YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOmNhc2UiYm90dG9tIjppPTctcn1zd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpjYXNlInJpZ2h0IjpuPS1lO2JyZWFrO2Nhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOmNhc2UibGVmdCI6bj1lfXJldHVybltuLGldfSh0LGVbMF0sZVsxXSk6ZnVuY3Rpb24odCxlKXt2YXIgcj0wLG49MDtlPDAmJihlPTApO3ZhciBpPWUvTWF0aC5zcXJ0KDIpO3N3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6bj1pLTc7YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOm49Ny1pO2JyZWFrO2Nhc2UiYm90dG9tIjpuPTctZTticmVhaztjYXNlInRvcCI6bj1lLTd9c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6cj0taTticmVhaztjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpyPWk7YnJlYWs7Y2FzZSJsZWZ0IjpyPWU7YnJlYWs7Y2FzZSJyaWdodCI6cj0tZX1yZXR1cm5bcixuXX0odCxlWzBdKX1mdW5jdGlvbiBtYyh0KXtzd2l0Y2godCl7Y2FzZSJyaWdodCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpyZXR1cm4icmlnaHQiO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6cmV0dXJuImxlZnQifXJldHVybiJjZW50ZXIifWZ1bmN0aW9uIGdjKHQsZSxyLG4sYSxvLHMsbCxjLHUsZixoLHAsZCxtKXt2YXIgZz1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwpe2Zvcih2YXIgYz1uLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUobyx7fSkqTWF0aC5QSS8xODAsdT1bXSxmPTAsaD1lLnBvc2l0aW9uZWRMaW5lcztmPGgubGVuZ3RoO2YrPTEpZm9yKHZhciBwPWhbZl0sZD0wLG09cC5wb3NpdGlvbmVkR2x5cGhzO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXTtpZihnLnJlY3Qpe3ZhciB2PWcucmVjdHx8e30seT00LHg9ITAsYj0xLF89MCx3PShhfHxsKSYmZy52ZXJ0aWNhbCxUPWcubWV0cmljcy5hZHZhbmNlKmcuc2NhbGUvMjtpZihsJiZlLnZlcnRpY2FsaXphYmxlKXt2YXIgaz0yNCooZy5zY2FsZS0xKSxBPSgyNC1nLm1ldHJpY3Mud2lkdGgqZy5zY2FsZSkvMjtfPXAubGluZU9mZnNldC8yLShnLmltYWdlTmFtZT8tQTprKX1pZihnLmltYWdlTmFtZSl7dmFyIE09c1tnLmltYWdlTmFtZV07eD1NLnNkZix5PTEvKGI9TS5waXhlbFJhdGlvKX12YXIgUz1hP1tnLngrVCxnLnldOlswLDBdLEU9YT9bMCwwXTpbZy54K1QrclswXSxnLnkrclsxXS1fXSxMPVswLDBdO3cmJihMPUUsRT1bMCwwXSk7dmFyIEM9KGcubWV0cmljcy5sZWZ0LXkpKmcuc2NhbGUtVCtFWzBdLFA9KC1nLm1ldHJpY3MudG9wLXkpKmcuc2NhbGUrRVsxXSxJPUMrdi53Kmcuc2NhbGUvYixPPVArdi5oKmcuc2NhbGUvYix6PW5ldyBpKEMsUCksRD1uZXcgaShJLFApLFI9bmV3IGkoQyxPKSxGPW5ldyBpKEksTyk7aWYodyl7dmFyIEI9bmV3IGkoLVQsVC0gLTE3KSxOPS1NYXRoLlBJLzIsaj0xMi1ULFU9Zy5pbWFnZU5hbWU/ajowLFY9bmV3IGkoMjItaiwtVSksSD1uZXcoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoaSxbbnVsbF0uY29uY2F0KEwpKSk7ei5fcm90YXRlQXJvdW5kKE4sQikuX2FkZChWKS5fYWRkKEgpLEQuX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKSxSLl9yb3RhdGVBcm91bmQoTixCKS5fYWRkKFYpLl9hZGQoSCksRi5fcm90YXRlQXJvdW5kKE4sQikuX2FkZChWKS5fYWRkKEgpfWlmKGMpe3ZhciBxPU1hdGguc2luKGMpLEc9TWF0aC5jb3MoYyksWT1bRywtcSxxLEddO3ouX21hdE11bHQoWSksRC5fbWF0TXVsdChZKSxSLl9tYXRNdWx0KFkpLEYuX21hdE11bHQoWSl9dmFyIFc9bmV3IGkoMCwwKSxYPW5ldyBpKDAsMCk7dS5wdXNoKHt0bDp6LHRyOkQsYmw6UixicjpGLHRleDp2LHdyaXRpbmdNb2RlOmUud3JpdGluZ01vZGUsZ2x5cGhPZmZzZXQ6UyxzZWN0aW9uSW5kZXg6Zy5zZWN0aW9uSW5kZXgsaXNTREY6eCxwaXhlbE9mZnNldFRMOlcscGl4ZWxPZmZzZXRCUjpYLG1pbkZvbnRTY2FsZVg6MCxtaW5Gb250U2NhbGVZOjB9KX19cmV0dXJuIHV9KDAscixsLGEsbyxzLG4sdC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSx2PXQudGV4dFNpemVEYXRhLHk9bnVsbDsic291cmNlIj09PXYua2luZD8oeT1bMTI4KmEubGF5b3V0LmdldCgidGV4dC1zaXplIikuZXZhbHVhdGUocyx7fSldKVswXT4zMjY0MCYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAidGV4dC1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJ0ZXh0LXNpemUiLicpOiJjb21wb3NpdGUiPT09di5raW5kJiYoKHk9WzEyOCpkLmNvbXBvc2l0ZVRleHRTaXplc1swXS5ldmFsdWF0ZShzLHt9LG0pLDEyOCpkLmNvbXBvc2l0ZVRleHRTaXplc1sxXS5ldmFsdWF0ZShzLHt9LG0pXSlbMF0+MzI2NDB8fHlbMV0+MzI2NDApJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJ0ZXh0LXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgInRleHQtc2l6ZSIuJyksdC5hZGRTeW1ib2xzKHQudGV4dCxnLHksbCxvLHMsdSxlLGMubGluZVN0YXJ0SW5kZXgsYy5saW5lTGVuZ3RoLHAsbSk7Zm9yKHZhciB4PTAsYj1mO3g8Yi5sZW5ndGg7eCs9MSl7aFtiW3hdXT10LnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTF9cmV0dXJuIDQqZy5sZW5ndGh9ZnVuY3Rpb24gdmModCl7Zm9yKHZhciBlIGluIHQpcmV0dXJuIHRbZV07cmV0dXJuIG51bGx9ZnVuY3Rpb24geWModCxlLHIsbil7dmFyIGk9dC5jb21wYXJlVGV4dDtpZihlIGluIGkpe2Zvcih2YXIgYT1pW2VdLG89YS5sZW5ndGgtMTtvPj0wO28tLSlpZihuLmRpc3QoYVtvXSk8cilyZXR1cm4hMH1lbHNlIGlbZV09W107cmV0dXJuIGlbZV0ucHVzaChuKSwhMX12YXIgeGM9THMuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsYmM9W3tuYW1lOiJhX2ZhZGVfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4IixvZmZzZXQ6MH1dO2Z1bmN0aW9uIF9jKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwPXM/TWF0aC5taW4oMzI2NDAsTWF0aC5yb3VuZChzWzBdKSk6MCxkPXM/TWF0aC5taW4oMzI2NDAsTWF0aC5yb3VuZChzWzFdKSk6MDt0LmVtcGxhY2VCYWNrKGUscixNYXRoLnJvdW5kKDMyKm4pLE1hdGgucm91bmQoMzIqaSksYSxvLChwPDwxKSsobD8xOjApLGQsMTYqYywxNip1LDI1NipmLDI1NipoKX1mdW5jdGlvbiB3Yyh0LGUscil7dC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpfWZ1bmN0aW9uIFRjKHQpe2Zvcih2YXIgZT0wLHI9dC5zZWN0aW9ucztlPHIubGVuZ3RoO2UrPTEpe2lmKCRuKHJbZV0udGV4dCkpcmV0dXJuITB9cmV0dXJuITF9dmFyIGtjPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IE5pLHRoaXMuaW5kZXhBcnJheT1uZXcgWWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgamksdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IFVpLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IGFhfTtrYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgmJjA9PT10aGlzLmluZGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RofSxrYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuaXNFbXB0eSgpfHwociYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksSnMubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksS3MubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LGJjLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MSksKHJ8fG4pJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCkpfSxrYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxObigiU3ltYm9sQnVmZmVycyIsa2MpO3ZhciBBYz1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgR2l9O0FjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksUXMubWVtYmVycywhMCl9LEFjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sTm4oIkNvbGxpc2lvbkJ1ZmZlcnMiLEFjKTt2YXIgTWM9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5zb3J0S2V5UmFuZ2VzPVtdLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXk9W10sdGhpcy5wbGFjZW1lbnRJbnZQcm9qTWF0cml4PWhvKFtdKSx0aGlzLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4PWhvKFtdKTt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT1HbCh0aGlzLnpvb20sZVsidGV4dC1zaXplIl0pLHRoaXMuaWNvblNpemVEYXRhPUdsKHRoaXMuem9vbSxlWyJpY29uLXNpemUiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoInN5bWJvbC1zb3J0LWtleSIpLGk9ci5nZXQoInN5bWJvbC16LW9yZGVyIik7dGhpcy5zb3J0RmVhdHVyZXNCeUtleT0idmlld3BvcnQteSIhPT1pJiZ2b2lkIDAhPT1uLmNvbnN0YW50T3IoMSk7dmFyIGE9InZpZXdwb3J0LXkiPT09aXx8ImF1dG8iPT09aSYmIXRoaXMuc29ydEZlYXR1cmVzQnlLZXk7dGhpcy5zb3J0RmVhdHVyZXNCeVk9YSYmKHIuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iil8fHIuZ2V0KCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiKSksInBvaW50Ij09PXIuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLndyaXRpbmdNb2Rlcz1yLmdldCgidGV4dC13cml0aW5nLW1vZGUiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBDbFt0XX0pKSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5zb3VyY2VJRD10LnNvdXJjZUlEfTtNYy5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBrYyhuZXcgVWEoSnMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9edGV4dC8udGVzdCh0KX0pKSksdGhpcy5pY29uPW5ldyBrYyhuZXcgVWEoSnMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSksdGhpcy5nbHlwaE9mZnNldEFycmF5PW5ldyBsYSx0aGlzLmxpbmVWZXJ0ZXhBcnJheT1uZXcgY2EsdGhpcy5zeW1ib2xJbnN0YW5jZXM9bmV3IHNhfSxNYy5wcm90b3R5cGUuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihlW3QuY2hhckNvZGVBdChhKV09ITAsKHJ8fG4pJiZpKXt2YXIgbz1ybFt0LmNoYXJBdChhKV07byYmKGVbby5jaGFyQ29kZUF0KDApXT0hMCl9fSxNYy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJzWzBdLGk9bi5sYXlvdXQsYT1pLmdldCgidGV4dC1mb250Iiksbz1pLmdldCgidGV4dC1maWVsZCIpLHM9aS5nZXQoImljb24taW1hZ2UiKSxsPSgiY29uc3RhbnQiIT09by52YWx1ZS5raW5kfHxvLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgbmUmJiFvLnZhbHVlLnZhbHVlLmlzRW1wdHkoKXx8by52YWx1ZS52YWx1ZS50b1N0cmluZygpLmxlbmd0aD4wKSYmKCJjb25zdGFudCIhPT1hLnZhbHVlLmtpbmR8fGEudmFsdWUudmFsdWUubGVuZ3RoPjApLGM9ImNvbnN0YW50IiE9PXMudmFsdWUua2luZHx8ISFzLnZhbHVlLnZhbHVlfHxPYmplY3Qua2V5cyhzLnBhcmFtZXRlcnMpLmxlbmd0aD4wLHU9aS5nZXQoInN5bWJvbC1zb3J0LWtleSIpO2lmKHRoaXMuZmVhdHVyZXM9W10sbHx8Yyl7Zm9yKHZhciBmPWUuaWNvbkRlcGVuZGVuY2llcyxoPWUuZ2x5cGhEZXBlbmRlbmNpZXMscD1lLmF2YWlsYWJsZUltYWdlcyxkPW5ldyBwaSh0aGlzLnpvb20pLG09MCxnPXQ7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dLHk9di5mZWF0dXJlLHg9di5pZCxiPXYuaW5kZXgsXz12LnNvdXJjZUxheWVySW5kZXgsdz1uLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxUPXt0eXBlOnkudHlwZSxpZDp4LHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLGdlb21ldHJ5Onc/WWEoeSk6W119O2lmKG4uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKGQsVCxyKSl7d3x8KFQuZ2VvbWV0cnk9WWEoeSkpO3ZhciBrPXZvaWQgMDtpZihsKXt2YXIgQT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygidGV4dC1maWVsZCIsVCxyLHApLE09bmUuZmFjdG9yeShBKTtUYyhNKSYmKHRoaXMuaGFzUlRMVGV4dD0hMCksKCF0aGlzLmhhc1JUTFRleHR8fCJ1bmF2YWlsYWJsZSI9PT11aSgpfHx0aGlzLmhhc1JUTFRleHQmJmhpLmlzUGFyc2VkKCkpJiYoaz1lbChNLG4sVCkpfXZhciBTPXZvaWQgMDtpZihjKXt2YXIgRT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygiaWNvbi1pbWFnZSIsVCxyLHApO1M9RSBpbnN0YW5jZW9mIGllP0U6aWUuZnJvbVN0cmluZyhFKX1pZihrfHxTKXt2YXIgTD10aGlzLnNvcnRGZWF0dXJlc0J5S2V5P3UuZXZhbHVhdGUoVCx7fSxyKTp2b2lkIDAsQz17aWQ6eCx0ZXh0OmssaWNvbjpTLGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDpfLGdlb21ldHJ5OllhKHkpLHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLHR5cGU6eGNbeS50eXBlXSxzb3J0S2V5Okx9O2lmKHRoaXMuZmVhdHVyZXMucHVzaChDKSxTJiYoZltTLm5hbWVdPSEwKSxrKXt2YXIgUD1hLmV2YWx1YXRlKFQse30scikuam9pbigiLCIpLEk9Im1hcCI9PT1pLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PWkuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik7dGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50PXRoaXMud3JpdGluZ01vZGVzJiZ0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKENsLnZlcnRpY2FsKT49MDtmb3IodmFyIE89MCx6PWsuc2VjdGlvbnM7Tzx6Lmxlbmd0aDtPKz0xKXt2YXIgRD16W09dO2lmKEQuaW1hZ2UpZltELmltYWdlLm5hbWVdPSEwO2Vsc2V7dmFyIFI9V24oay50b1N0cmluZygpKSxGPUQuZm9udFN0YWNrfHxQLEI9aFtGXT1oW0ZdfHx7fTt0aGlzLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKEQudGV4dCxCLEksdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LFIpfX19fX19ImxpbmUiPT09aS5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSYmKHRoaXMuZmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj17fSxuPVtdLGk9MDtmdW5jdGlvbiBhKGUpe24ucHVzaCh0W2VdKSxpKyt9ZnVuY3Rpb24gbyh0LGUsaSl7dmFyIGE9clt0XTtyZXR1cm4gZGVsZXRlIHJbdF0scltlXT1hLG5bYV0uZ2VvbWV0cnlbMF0ucG9wKCksblthXS5nZW9tZXRyeVswXT1uW2FdLmdlb21ldHJ5WzBdLmNvbmNhdChpWzBdKSxhfWZ1bmN0aW9uIHModCxyLGkpe3ZhciBhPWVbcl07cmV0dXJuIGRlbGV0ZSBlW3JdLGVbdF09YSxuW2FdLmdlb21ldHJ5WzBdLnNoaWZ0KCksblthXS5nZW9tZXRyeVswXT1pWzBdLmNvbmNhdChuW2FdLmdlb21ldHJ5WzBdKSxhfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnRleHQ/dS50ZXh0LnRvU3RyaW5nKCk6bnVsbDtpZihoKXt2YXIgcD1sKGgsZiksZD1sKGgsZiwhMCk7aWYocCBpbiByJiZkIGluIGUmJnJbcF0hPT1lW2RdKXt2YXIgbT1zKHAsZCxmKSxnPW8ocCxkLG5bbV0uZ2VvbWV0cnkpO2RlbGV0ZSBlW3BdLGRlbGV0ZSByW2RdLHJbbChoLG5bZ10uZ2VvbWV0cnksITApXT1nLG5bbV0uZ2VvbWV0cnk9bnVsbH1lbHNlIHAgaW4gcj9vKHAsZCxmKTpkIGluIGU/cyhwLGQsZik6KGEoYyksZVtwXT1pLTEscltkXT1pLTEpfWVsc2UgYShjKX1yZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSkpfSh0aGlzLmZlYXR1cmVzKSksdGhpcy5zb3J0RmVhdHVyZXNCeUtleSYmdGhpcy5mZWF0dXJlcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpfX0sTWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJih0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSl9LE1jLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGgmJiF0aGlzLmhhc1JUTFRleHR9LE1jLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR8fHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LE1jLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7IXRoaXMudXBsb2FkZWQmJnRoaXMuaGFzRGVidWdEYXRhKCkmJih0aGlzLnRleHRDb2xsaXNpb25Cb3gudXBsb2FkKHQpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQodCkpLHRoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSwhdGhpcy51cGxvYWRlZCx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy51cGxvYWRlZD0hMH0sTWMucHJvdG90eXBlLmRlc3Ryb3lEZWJ1Z0RhdGE9ZnVuY3Rpb24oKXt0aGlzLnRleHRDb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC5kZXN0cm95KCl9LE1jLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuZGVzdHJveURlYnVnRGF0YSgpfSxNYy5wcm90b3R5cGUuYWRkVG9MaW5lVmVydGV4QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7aWYodm9pZCAwIT09dC5zZWdtZW50KXtmb3IodmFyIG49dC5kaXN0KGVbdC5zZWdtZW50KzFdKSxpPXQuZGlzdChlW3Quc2VnbWVudF0pLGE9e30sbz10LnNlZ21lbnQrMTtvPGUubGVuZ3RoO28rKylhW29dPXt4OmVbb10ueCx5OmVbb10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjpufSxvPGUubGVuZ3RoLTEmJihuKz1lW28rMV0uZGlzdChlW29dKSk7Zm9yKHZhciBzPXQuc2VnbWVudHx8MDtzPj0wO3MtLSlhW3NdPXt4OmVbc10ueCx5OmVbc10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjppfSxzPjAmJihpKz1lW3MtMV0uZGlzdChlW3NdKSk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPWFbbF07dGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soYy54LGMueSxjLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKX19cmV0dXJue2xpbmVTdGFydEluZGV4OnIsbGluZUxlbmd0aDp0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGgtcn19LE1jLnByb3RvdHlwZS5hZGRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtmb3IodmFyIGg9dC5pbmRleEFycmF5LHA9dC5sYXlvdXRWZXJ0ZXhBcnJheSxkPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCxwLGgsYS5zb3J0S2V5KSxtPXRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgsZz1kLnZlcnRleExlbmd0aCx2PXRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbz09PUNsLnZlcnRpY2FsP01hdGguUEkvMjowLHk9YS50ZXh0JiZhLnRleHQuc2VjdGlvbnMseD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgYj1lW3hdLF89Yi50bCx3PWIudHIsVD1iLmJsLGs9Yi5icixBPWIudGV4LE09Yi5waXhlbE9mZnNldFRMLFM9Yi5waXhlbE9mZnNldEJSLEU9Yi5taW5Gb250U2NhbGVYLEw9Yi5taW5Gb250U2NhbGVZLEM9Yi5nbHlwaE9mZnNldCxQPWIuaXNTREYsST1iLnNlY3Rpb25JbmRleCxPPWQudmVydGV4TGVuZ3RoLHo9Q1sxXTtfYyhwLHMueCxzLnksXy54LHorXy55LEEueCxBLnkscixQLE0ueCxNLnksRSxMKSxfYyhwLHMueCxzLnksdy54LHordy55LEEueCtBLncsQS55LHIsUCxTLngsTS55LEUsTCksX2MocCxzLngscy55LFQueCx6K1QueSxBLngsQS55K0EuaCxyLFAsTS54LFMueSxFLEwpLF9jKHAscy54LHMueSxrLngseitrLnksQS54K0EudyxBLnkrQS5oLHIsUCxTLngsUy55LEUsTCksd2ModC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkscyx2KSxoLmVtcGxhY2VCYWNrKE8sTysxLE8rMiksaC5lbXBsYWNlQmFjayhPKzEsTysyLE8rMyksZC52ZXJ0ZXhMZW5ndGgrPTQsZC5wcmltaXRpdmVMZW5ndGgrPTIsdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKENbMF0pLHghPT1lLmxlbmd0aC0xJiZJPT09ZVt4KzFdLnNlY3Rpb25JbmRleHx8dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyhwLmxlbmd0aCxhLGEuaW5kZXgse30sZix5JiZ5W0ldKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksbSx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLW0sZyxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLDAsITEsMCx1KX0sTWMucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbixpLE1hdGgucm91bmQoYS54KSxNYXRoLnJvdW5kKGEueSkpfSxNYy5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXt2YXIgbD1hLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsYS5sYXlvdXRWZXJ0ZXhBcnJheSxhLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1hLmxheW91dFZlcnRleEFycmF5LGY9YS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxoPXMuYW5jaG9yWCxwPXMuYW5jaG9yWTt0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkodCxlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHIsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaShyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkodCxuKSksbC52ZXJ0ZXhMZW5ndGgrPTQ7dmFyIGQ9YS5pbmRleEFycmF5O2QuZW1wbGFjZUJhY2soYyxjKzEpLGQuZW1wbGFjZUJhY2soYysxLGMrMiksZC5lbXBsYWNlQmFjayhjKzIsYyszKSxkLmVtcGxhY2VCYWNrKGMrMyxjKSxsLnByaW1pdGl2ZUxlbmd0aCs9NH0sTWMucHJvdG90eXBlLmFkZERlYnVnQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQ7aTxlO2krKyl7dmFyIGE9dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoaSksbz1hLngxLHM9YS55MSxsPWEueDIsYz1hLnkyO3RoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyhvLHMsbCxjLG4/dGhpcy50ZXh0Q29sbGlzaW9uQm94OnRoaXMuaWNvbkNvbGxpc2lvbkJveCxhLmFuY2hvclBvaW50LHIpfX0sTWMucHJvdG90eXBlLmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzPWZ1bmN0aW9uKCl7dGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy5kZXN0cm95RGVidWdEYXRhKCksdGhpcy50ZXh0Q29sbGlzaW9uQm94PW5ldyBBYyhIaSwkcy5tZW1iZXJzLFFpKSx0aGlzLmljb25Db2xsaXNpb25Cb3g9bmV3IEFjKEhpLCRzLm1lbWJlcnMsUWkpO2Zvcih2YXIgdD0wO3Q8dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KHQpO3RoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnRleHRCb3hTdGFydEluZGV4LGUudGV4dEJveEVuZEluZGV4LGUsITApLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsZS52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCxlLCEwKSx0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS5pY29uQm94U3RhcnRJbmRleCxlLmljb25Cb3hFbmRJbmRleCxlLCExKSx0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LGUudmVydGljYWxJY29uQm94RW5kSW5kZXgsZSwhMSl9fSxNYy5wcm90b3R5cGUuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2w9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYz17fSx1PWU7dTxyO3UrKyl7dmFyIGY9dC5nZXQodSk7Yy50ZXh0Qm94PXt4MTpmLngxLHkxOmYueTEseDI6Zi54Mix5MjpmLnkyLGFuY2hvclBvaW50WDpmLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6Zi5hbmNob3JQb2ludFl9LGMudGV4dEZlYXR1cmVJbmRleD1mLmZlYXR1cmVJbmRleDticmVha31mb3IodmFyIGg9bjtoPGk7aCsrKXt2YXIgcD10LmdldChoKTtjLnZlcnRpY2FsVGV4dEJveD17eDE6cC54MSx5MTpwLnkxLHgyOnAueDIseTI6cC55MixhbmNob3JQb2ludFg6cC5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOnAuYW5jaG9yUG9pbnRZfSxjLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleD1wLmZlYXR1cmVJbmRleDticmVha31mb3IodmFyIGQ9YTtkPG87ZCsrKXt2YXIgbT10LmdldChkKTtjLmljb25Cb3g9e3gxOm0ueDEseTE6bS55MSx4MjptLngyLHkyOm0ueTIsYW5jaG9yUG9pbnRYOm0uYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTptLmFuY2hvclBvaW50WX0sYy5pY29uRmVhdHVyZUluZGV4PW0uZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgZz1zO2c8bDtnKyspe3ZhciB2PXQuZ2V0KGcpO2MudmVydGljYWxJY29uQm94PXt4MTp2LngxLHkxOnYueTEseDI6di54Mix5Mjp2LnkyLGFuY2hvclBvaW50WDp2LmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6di5hbmNob3JQb2ludFl9LGMudmVydGljYWxJY29uRmVhdHVyZUluZGV4PXYuZmVhdHVyZUluZGV4O2JyZWFrfXJldHVybiBjfSxNYy5wcm90b3R5cGUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkFycmF5cz1bXTtmb3IodmFyIGU9MDtlPHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChlKTt0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2wodCxyLnRleHRCb3hTdGFydEluZGV4LHIudGV4dEJveEVuZEluZGV4LHIudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxyLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LHIuaWNvbkJveFN0YXJ0SW5kZXgsci5pY29uQm94RW5kSW5kZXgsci52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LHIudmVydGljYWxJY29uQm94RW5kSW5kZXgpKX19LE1jLnByb3RvdHlwZS5oYXNUZXh0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE1jLnByb3RvdHlwZS5oYXNJY29uRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE1jLnByb3RvdHlwZS5oYXNEZWJ1Z0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0Q29sbGlzaW9uQm94JiZ0aGlzLmljb25Db2xsaXNpb25Cb3h9LE1jLnByb3RvdHlwZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLnRleHRDb2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE1jLnByb3RvdHlwZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmljb25Db2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE1jLnByb3RvdHlwZS5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGUpLG49ci52ZXJ0ZXhTdGFydEluZGV4KzQqci5udW1HbHlwaHMsaT1yLnZlcnRleFN0YXJ0SW5kZXg7aTxuO2krPTQpdC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGksaSsxLGkrMiksdC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGkrMSxpKzIsaSszKX0sTWMucHJvdG90eXBlLmdldFNvcnRlZFN5bWJvbEluZGV4ZXM9ZnVuY3Rpb24odCl7aWYodGhpcy5zb3J0ZWRBbmdsZT09PXQmJnZvaWQgMCE9PXRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzKXJldHVybiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcztmb3IodmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KSxuPVtdLGk9W10sYT1bXSxvPTA7bzx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7KytvKXthLnB1c2gobyk7dmFyIHM9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KG8pO24ucHVzaCgwfE1hdGgucm91bmQoZSpzLmFuY2hvclgrcipzLmFuY2hvclkpKSxpLnB1c2gocy5mZWF0dXJlSW5kZXgpfXJldHVybiBhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXXx8aVtlXS1pW3RdfSkpLGF9LE1jLnByb3RvdHlwZS5hZGRUb1NvcnRLZXlSYW5nZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNvcnRLZXlSYW5nZXNbdGhpcy5zb3J0S2V5UmFuZ2VzLmxlbmd0aC0xXTtyJiZyLnNvcnRLZXk9PT1lP3Iuc3ltYm9sSW5zdGFuY2VFbmQ9dCsxOnRoaXMuc29ydEtleVJhbmdlcy5wdXNoKHtzb3J0S2V5OmUsc3ltYm9sSW5zdGFuY2VTdGFydDp0LHN5bWJvbEluc3RhbmNlRW5kOnQrMX0pfSxNYy5wcm90b3R5cGUuc29ydEZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5zb3J0RmVhdHVyZXNCeVkmJnRoaXMuc29ydGVkQW5nbGUhPT10JiYhKHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MXx8dGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xKSl7dGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM9dGhpcy5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzKHQpLHRoaXMuc29ydGVkQW5nbGU9dCx0aGlzLnRleHQuaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuaWNvbi5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5mZWF0dXJlU29ydE9yZGVyPVtdO2Zvcih2YXIgcj0wLG49dGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO3RoaXMuZmVhdHVyZVNvcnRPcmRlci5wdXNoKGEuZmVhdHVyZUluZGV4KSxbYS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxhLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxhLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhdLmZvckVhY2goKGZ1bmN0aW9uKHQscixuKXt0Pj0wJiZuLmluZGV4T2YodCk9PT1yJiZlLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2woZS50ZXh0LHQpfSkpLGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg+PTAmJnRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLnRleHQsYS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCksYS5wbGFjZWRJY29uU3ltYm9sSW5kZXg+PTAmJnRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLmljb24sYS5wbGFjZWRJY29uU3ltYm9sSW5kZXgpLGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg+PTAmJnRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLmljb24sYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCl9dGhpcy50ZXh0LmluZGV4QnVmZmVyJiZ0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSksdGhpcy5pY29uLmluZGV4QnVmZmVyJiZ0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSl9fSxObigiU3ltYm9sQnVja2V0IixNYyx7b21pdDpbImxheWVycyIsImNvbGxpc2lvbkJveEFycmF5IiwiZmVhdHVyZXMiLCJjb21wYXJlVGV4dCJdfSksTWMuTUFYX0dMWVBIUz02NTUzNSxNYy5hZGREeW5hbWljQXR0cmlidXRlcz13Yzt2YXIgU2M9bmV3IFNpKHsic3ltYm9sLXBsYWNlbWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1wbGFjZW1lbnQiXSksInN5bWJvbC1zcGFjaW5nIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsic3ltYm9sLXNwYWNpbmciXSksInN5bWJvbC1hdm9pZC1lZGdlcyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1hdm9pZC1lZGdlcyJdKSwic3ltYm9sLXNvcnQta2V5IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsic3ltYm9sLXNvcnQta2V5Il0pLCJzeW1ib2wtei1vcmRlciI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC16LW9yZGVyIl0pLCJpY29uLWFsbG93LW92ZXJsYXAiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWFsbG93LW92ZXJsYXAiXSksImljb24taWdub3JlLXBsYWNlbWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24taWdub3JlLXBsYWNlbWVudCJdKSwiaWNvbi1vcHRpb25hbCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tb3B0aW9uYWwiXSksImljb24tcm90YXRpb24tYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSksImljb24tc2l6ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24tc2l6ZSJdKSwiaWNvbi10ZXh0LWZpdCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tdGV4dC1maXQiXSksImljb24tdGV4dC1maXQtcGFkZGluZyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tdGV4dC1maXQtcGFkZGluZyJdKSwiaWNvbi1pbWFnZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24taW1hZ2UiXSksImljb24tcm90YXRlIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1yb3RhdGUiXSksImljb24tcGFkZGluZyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tcGFkZGluZyJdKSwiaWNvbi1rZWVwLXVwcmlnaHQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWtlZXAtdXByaWdodCJdKSwiaWNvbi1vZmZzZXQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9mZnNldCJdKSwiaWNvbi1hbmNob3IiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWFuY2hvciJdKSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBpdGNoLWFsaWdubWVudCJdKSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXBpdGNoLWFsaWdubWVudCJdKSwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdKSwidGV4dC1maWVsZCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtZmllbGQiXSksInRleHQtZm9udCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtZm9udCJdKSwidGV4dC1zaXplIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1zaXplIl0pLCJ0ZXh0LW1heC13aWR0aCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtbWF4LXdpZHRoIl0pLCJ0ZXh0LWxpbmUtaGVpZ2h0IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1saW5lLWhlaWdodCJdKSwidGV4dC1sZXR0ZXItc3BhY2luZyI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtbGV0dGVyLXNwYWNpbmciXSksInRleHQtanVzdGlmeSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtanVzdGlmeSJdKSwidGV4dC1yYWRpYWwtb2Zmc2V0IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1yYWRpYWwtb2Zmc2V0Il0pLCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtdmFyaWFibGUtYW5jaG9yIl0pLCJ0ZXh0LWFuY2hvciI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtYW5jaG9yIl0pLCJ0ZXh0LW1heC1hbmdsZSI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtbWF4LWFuZ2xlIl0pLCJ0ZXh0LXdyaXRpbmctbW9kZSI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtd3JpdGluZy1tb2RlIl0pLCJ0ZXh0LXJvdGF0ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcm90YXRlIl0pLCJ0ZXh0LXBhZGRpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXBhZGRpbmciXSksInRleHQta2VlcC11cHJpZ2h0IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1rZWVwLXVwcmlnaHQiXSksInRleHQtdHJhbnNmb3JtIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC10cmFuc2Zvcm0iXSksInRleHQtb2Zmc2V0IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1vZmZzZXQiXSksInRleHQtYWxsb3ctb3ZlcmxhcCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtYWxsb3ctb3ZlcmxhcCJdKSwidGV4dC1pZ25vcmUtcGxhY2VtZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1pZ25vcmUtcGxhY2VtZW50Il0pLCJ0ZXh0LW9wdGlvbmFsIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1vcHRpb25hbCJdKX0pLEVjPXtwYWludDpuZXcgU2koeyJpY29uLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24tb3BhY2l0eSJdKSwiaWNvbi1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1jb2xvciJdKSwiaWNvbi1oYWxvLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8tY29sb3IiXSksImljb24taGFsby13aWR0aCI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLXdpZHRoIl0pLCJpY29uLWhhbG8tYmx1ciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWJsdXIiXSksImljb24tdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfc3ltYm9sWyJpY29uLXRyYW5zbGF0ZSJdKSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfc3ltYm9sWyJpY29uLXRyYW5zbGF0ZS1hbmNob3IiXSksInRleHQtb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1vcGFjaXR5Il0pLCJ0ZXh0LWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LWNvbG9yIl0se3J1bnRpbWVUeXBlOlV0LGdldE92ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb2xvcn0saGFzT3ZlcnJpZGU6ZnVuY3Rpb24odCl7cmV0dXJuISF0LnRleHRDb2xvcn19KSwidGV4dC1oYWxvLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8tY29sb3IiXSksInRleHQtaGFsby13aWR0aCI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLXdpZHRoIl0pLCJ0ZXh0LWhhbG8tYmx1ciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWJsdXIiXSksInRleHQtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LXRyYW5zbGF0ZSJdKSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiXSl9KSxsYXlvdXQ6U2N9LExjPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT10LnByb3BlcnR5Lm92ZXJyaWRlcz90LnByb3BlcnR5Lm92ZXJyaWRlcy5ydW50aW1lVHlwZTpGdCx0aGlzLmRlZmF1bHRWYWx1ZT10fTtMYy5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYodC5mb3JtYXR0ZWRTZWN0aW9uKXt2YXIgZT10aGlzLmRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXM7aWYoZSYmZS5oYXNPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pKXJldHVybiBlLmdldE92ZXJyaWRlKHQuZm9ybWF0dGVkU2VjdGlvbil9cmV0dXJuIHQuZmVhdHVyZSYmdC5mZWF0dXJlU3RhdGU/dGhpcy5kZWZhdWx0VmFsdWUuZXZhbHVhdGUodC5mZWF0dXJlLHQuZmVhdHVyZVN0YXRlKTp0aGlzLmRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLmRlZmF1bHR9LExjLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5kZWZhdWx0VmFsdWUuaXNDb25zdGFudCgpfHx0KHRoaXMuZGVmYXVsdFZhbHVlLnZhbHVlLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbil9LExjLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LExjLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sTm4oIkZvcm1hdFNlY3Rpb25PdmVycmlkZSIsTGMse29taXQ6WyJkZWZhdWx0VmFsdWUiXX0pO3ZhciBDYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsRWMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe2lmKHQucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKCJwb2ludCIhPT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYoInBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09Im1hcCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXT0idmlld3BvcnQiKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXBpdGNoLWFsaWdubWVudCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1waXRjaC1hbGlnbm1lbnQiXT10aGlzLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikpLCJwb2ludCI9PT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSl7dmFyIG49dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXdyaXRpbmctbW9kZSIpO2lmKG4pe2Zvcih2YXIgaT1bXSxhPTAsbz1uO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpLmluZGV4T2Yocyk8MCYmaS5wdXNoKHMpfXRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtd3JpdGluZy1tb2RlIl09aX1lbHNlIHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtd3JpdGluZy1tb2RlIl09WyJob3Jpem9udGFsIl19dGhpcy5fc2V0UGFpbnRPdmVycmlkZXMoKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGF5b3V0LmdldCh0KS5ldmFsdWF0ZShlLHt9LHIsbiksYT10aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW3RdO3JldHVybiBhLmlzRGF0YURyaXZlbigpfHxZcihhLnZhbHVlKXx8IWk/aTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnJlcGxhY2UoL3soW157fV0rKX0vZywoZnVuY3Rpb24oZSxyKXtyZXR1cm4gciBpbiB0P1N0cmluZyh0W3JdKToiIn0pKX0oZS5wcm9wZXJ0aWVzLGkpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNYyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5fc2V0UGFpbnRPdmVycmlkZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxyPUVjLnBhaW50Lm92ZXJyaWRhYmxlUHJvcGVydGllczt0PHIubGVuZ3RoO3QrPTEpe3ZhciBuPXJbdF07aWYoZS5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LG4pKXt2YXIgaT10aGlzLnBhaW50LmdldChuKSxhPW5ldyBMYyhpKSxvPW5ldyBHcihhLGkucHJvcGVydHkuc3BlY2lmaWNhdGlvbikscz1udWxsO3M9ImNvbnN0YW50Ij09PWkudmFsdWUua2luZHx8InNvdXJjZSI9PT1pLnZhbHVlLmtpbmQ/bmV3IFhyKCJzb3VyY2UiLG8pOm5ldyBacigiY29tcG9zaXRlIixvLGkudmFsdWUuem9vbVN0b3BzLGkudmFsdWUuX2ludGVycG9sYXRpb25UeXBlKSx0aGlzLnBhaW50Ll92YWx1ZXNbbl09bmV3IGJpKGkucHJvcGVydHkscyxpLnBhcmFtZXRlcnMpfX19LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiEoIXRoaXMubGF5b3V0fHxyLmlzRGF0YURyaXZlbigpfHxuLmlzRGF0YURyaXZlbigpKSYmZS5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LHQpfSxlLmhhc1BhaW50T3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldCgidGV4dC1maWVsZCIpLG49RWMucGFpbnQucHJvcGVydGllc1tlXSxpPSExLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIGE9cltlXTtpZihuLm92ZXJyaWRlcyYmbi5vdmVycmlkZXMuaGFzT3ZlcnJpZGUoYSkpcmV0dXJuIHZvaWQoaT0hMCl9fTtpZigiY29uc3RhbnQiPT09ci52YWx1ZS5raW5kJiZyLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgbmUpYShyLnZhbHVlLnZhbHVlLnNlY3Rpb25zKTtlbHNlIGlmKCJzb3VyY2UiPT09ci52YWx1ZS5raW5kKXt2YXIgbz1mdW5jdGlvbih0KXtpZighaSlpZih0IGluc3RhbmNlb2YgY2UmJnNlKHQudmFsdWUpPT09R3Qpe3ZhciBlPXQudmFsdWU7YShlLnNlY3Rpb25zKX1lbHNlIHQgaW5zdGFuY2VvZiBwZT9hKHQuc2VjdGlvbnMpOnQuZWFjaENoaWxkKG8pfSxzPXIudmFsdWU7cy5fc3R5bGVFeHByZXNzaW9uJiZvKHMuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uKX1yZXR1cm4gaX0sZX0oRWkpLFBjPXtwYWludDpuZXcgU2koeyJiYWNrZ3JvdW5kLWNvbG9yIjpuZXcgd2koTHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1jb2xvciJdKSwiYmFja2dyb3VuZC1wYXR0ZXJuIjpuZXcgQWkoTHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1wYXR0ZXJuIl0pLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOm5ldyB3aShMdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSl9KX0sSWM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFBjKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRWkpLE9jPXtwYWludDpuZXcgU2koeyJyYXN0ZXItb3BhY2l0eSI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLW9wYWNpdHkiXSksInJhc3Rlci1odWUtcm90YXRlIjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItaHVlLXJvdGF0ZSJdKSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iXSksInJhc3Rlci1icmlnaHRuZXNzLW1heCI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWF4Il0pLCJyYXN0ZXItc2F0dXJhdGlvbiI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLXNhdHVyYXRpb24iXSksInJhc3Rlci1jb250cmFzdCI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWNvbnRyYXN0Il0pLCJyYXN0ZXItcmVzYW1wbGluZyI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLXJlc2FtcGxpbmciXSksInJhc3Rlci1mYWRlLWR1cmF0aW9uIjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItZmFkZS1kdXJhdGlvbiJdKX0pfSx6Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsT2MpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShFaSk7dmFyIERjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSx7fSksdGhpcy5pbXBsZW1lbnRhdGlvbj1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuIjNkIj09PXRoaXMuaW1wbGVtZW50YXRpb24ucmVuZGVyaW5nTW9kZX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmltcGxlbWVudGF0aW9uLnByZXJlbmRlcn0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuaW1wbGVtZW50YXRpb24ub25BZGQmJnRoaXMuaW1wbGVtZW50YXRpb24ub25BZGQodCx0LnBhaW50ZXIuY29udGV4dC5nbCl9LGUucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuaW1wbGVtZW50YXRpb24ub25SZW1vdmUmJnRoaXMuaW1wbGVtZW50YXRpb24ub25SZW1vdmUodCx0LnBhaW50ZXIuY29udGV4dC5nbCl9LGV9KEVpKSxSYz17Y2lyY2xlOl9vLGhlYXRtYXA6UG8saGlsbHNoYWRlOk9vLGZpbGw6eHMsImZpbGwtZXh0cnVzaW9uIjpGcyxsaW5lOlhzLHN5bWJvbDpDYyxiYWNrZ3JvdW5kOkljLHJhc3Rlcjp6Y307dmFyIEZjPXNlbGYuSFRNTEltYWdlRWxlbWVudCxCYz1zZWxmLkhUTUxDYW52YXNFbGVtZW50LE5jPXNlbGYuSFRNTFZpZGVvRWxlbWVudCxqYz1zZWxmLkltYWdlRGF0YSxVYz1zZWxmLkltYWdlQml0bWFwLFZjPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMuZm9ybWF0PXIsdGhpcy50ZXh0dXJlPXQuZ2wuY3JlYXRlVGV4dHVyZSgpLHRoaXMudXBkYXRlKGUsbil9O1ZjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQud2lkdGgsaT10LmhlaWdodCxhPSEodGhpcy5zaXplJiZ0aGlzLnNpemVbMF09PT1uJiZ0aGlzLnNpemVbMV09PT1pfHxyKSxvPXRoaXMuY29udGV4dCxzPW8uZ2w7aWYodGhpcy51c2VNaXBtYXA9Qm9vbGVhbihlJiZlLnVzZU1pcG1hcCkscy5iaW5kVGV4dHVyZShzLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxvLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXQoITEpLG8ucGl4ZWxTdG9yZVVucGFjay5zZXQoMSksby5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQ9PT1zLlJHQkEmJighZXx8ITEhPT1lLnByZW11bHRpcGx5KSksYSl0aGlzLnNpemU9W24saV0sdCBpbnN0YW5jZW9mIEZjfHx0IGluc3RhbmNlb2YgQmN8fHQgaW5zdGFuY2VvZiBOY3x8dCBpbnN0YW5jZW9mIGpjfHxVYyYmdCBpbnN0YW5jZW9mIFVjP3MudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LG4saSwwLHRoaXMuZm9ybWF0LHMuVU5TSUdORURfQllURSx0LmRhdGEpO2Vsc2V7dmFyIGw9cnx8e3g6MCx5OjB9LGM9bC54LHU9bC55O3QgaW5zdGFuY2VvZiBGY3x8dCBpbnN0YW5jZW9mIEJjfHx0IGluc3RhbmNlb2YgTmN8fHQgaW5zdGFuY2VvZiBqY3x8VWMmJnQgaW5zdGFuY2VvZiBVYz9zLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELDAsYyx1LHMuUkdCQSxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLGMsdSxuLGkscy5SR0JBLHMuVU5TSUdORURfQllURSx0LmRhdGEpfXRoaXMudXNlTWlwbWFwJiZ0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSYmcy5nZW5lcmF0ZU1pcG1hcChzLlRFWFRVUkVfMkQpfSxWYy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LFZjLnByb3RvdHlwZS5pc1NpemVQb3dlck9mVHdvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZVswXT09PXRoaXMuc2l6ZVsxXSYmTWF0aC5sb2codGhpcy5zaXplWzBdKS9NYXRoLkxOMiUxPT0wfSxWYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGx9O3ZhciBIYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NhbGxiYWNrPXQsdGhpcy5fdHJpZ2dlcmVkPSExLCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwmJih0aGlzLl9jaGFubmVsPW5ldyBNZXNzYWdlQ2hhbm5lbCx0aGlzLl9jaGFubmVsLnBvcnQyLm9ubWVzc2FnZT1mdW5jdGlvbigpe2UuX3RyaWdnZXJlZD0hMSxlLl9jYWxsYmFjaygpfSl9O0hjLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyZWR8fCh0aGlzLl90cmlnZ2VyZWQ9ITAsdGhpcy5fY2hhbm5lbD90aGlzLl9jaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCEwKTpzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX3RyaWdnZXJlZD0hMSx0Ll9jYWxsYmFjaygpfSksMCkpfSxIYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NoYW5uZWwsdGhpcy5fY2FsbGJhY2s9ZnVuY3Rpb24oKXt9fTt2YXIgcWM9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy50YXNrcz17fSx0aGlzLnRhc2tRdWV1ZT1bXSx0aGlzLmNhbmNlbENhbGxiYWNrcz17fSxtKFsicmVjZWl2ZSIsInByb2Nlc3MiXSx0aGlzKSx0aGlzLmludm9rZXI9bmV3IEhjKHRoaXMucHJvY2VzcyksdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKSx0aGlzLmdsb2JhbFNjb3BlPWsoKT90OnNlbGZ9O2Z1bmN0aW9uIEdjKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfXFjLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIG89TWF0aC5yb3VuZCgxZTE4Kk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMCwxMCk7ciYmKHRoaXMuY2FsbGJhY2tzW29dPXIpO3ZhciBzPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdO3JldHVybiB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOnQsaGFzQ2FsbGJhY2s6ISFyLHRhcmdldE1hcElkOm4sbXVzdFF1ZXVlOmksc291cmNlTWFwSWQ6dGhpcy5tYXBJZCxkYXRhOkhuKGUscyl9LHMpLHtjYW5jZWw6ZnVuY3Rpb24oKXtyJiZkZWxldGUgYS5jYWxsYmFja3Nbb10sYS50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZToiPGNhbmNlbD4iLHRhcmdldE1hcElkOm4sc291cmNlTWFwSWQ6YS5tYXBJZH0pfX19LHFjLnByb3RvdHlwZS5yZWNlaXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YSxyPWUuaWQ7aWYociYmKCFlLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09ZS50YXJnZXRNYXBJZCkpaWYoIjxjYW5jZWw+Ij09PWUudHlwZSl7ZGVsZXRlIHRoaXMudGFza3Nbcl07dmFyIG49dGhpcy5jYW5jZWxDYWxsYmFja3Nbcl07ZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW3JdLG4mJm4oKX1lbHNlIGsoKXx8ZS5tdXN0UXVldWU/KHRoaXMudGFza3Nbcl09ZSx0aGlzLnRhc2tRdWV1ZS5wdXNoKHIpLHRoaXMuaW52b2tlci50cmlnZ2VyKCkpOnRoaXMucHJvY2Vzc1Rhc2socixlKX0scWMucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXtpZih0aGlzLnRhc2tRdWV1ZS5sZW5ndGgpe3ZhciB0PXRoaXMudGFza1F1ZXVlLnNoaWZ0KCksZT10aGlzLnRhc2tzW3RdO2RlbGV0ZSB0aGlzLnRhc2tzW3RdLHRoaXMudGFza1F1ZXVlLmxlbmd0aCYmdGhpcy5pbnZva2VyLnRyaWdnZXIoKSxlJiZ0aGlzLnByb2Nlc3NUYXNrKHQsZSl9fSxxYy5wcm90b3R5cGUucHJvY2Vzc1Rhc2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2lmKCI8cmVzcG9uc2U+Ij09PWUudHlwZSl7dmFyIG49dGhpcy5jYWxsYmFja3NbdF07ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3RdLG4mJihlLmVycm9yP24ocW4oZS5lcnJvcikpOm4obnVsbCxxbihlLmRhdGEpKSl9ZWxzZXt2YXIgaT0hMSxhPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdLG89ZS5oYXNDYWxsYmFjaz9mdW5jdGlvbihlLG4pe2k9ITAsZGVsZXRlIHIuY2FuY2VsQ2FsbGJhY2tzW3RdLHIudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDp0LHR5cGU6IjxyZXNwb25zZT4iLHNvdXJjZU1hcElkOnIubWFwSWQsZXJyb3I6ZT9IbihlKTpudWxsLGRhdGE6SG4obixhKX0sYSl9OmZ1bmN0aW9uKHQpe2k9ITB9LHM9bnVsbCxsPXFuKGUuZGF0YSk7aWYodGhpcy5wYXJlbnRbZS50eXBlXSlzPXRoaXMucGFyZW50W2UudHlwZV0oZS5zb3VyY2VNYXBJZCxsLG8pO2Vsc2UgaWYodGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgYz1lLnR5cGUuc3BsaXQoIi4iKTtzPXRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShlLnNvdXJjZU1hcElkLGNbMF0sbC5zb3VyY2UpW2NbMV1dKGwsbyl9ZWxzZSBvKG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZnVuY3Rpb24gIitlLnR5cGUpKTshaSYmcyYmcy5jYW5jZWwmJih0aGlzLmNhbmNlbENhbGxiYWNrc1t0XT1zLmNhbmNlbCl9fSxxYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5pbnZva2VyLnJlbW92ZSgpLHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O3ZhciBZYz1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07WWMucHJvdG90eXBlLnNldE5vcnRoRWFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmU9dCBpbnN0YW5jZW9mIFdjP25ldyBXYyh0LmxuZyx0LmxhdCk6V2MuY29udmVydCh0KSx0aGlzfSxZYy5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgV2M/bmV3IFdjKHQubG5nLHQubGF0KTpXYy5jb252ZXJ0KHQpLHRoaXN9LFljLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIFdjKWU9dCxyPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBZYykpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDQ9PT10Lmxlbmd0aHx8dC5ldmVyeShBcnJheS5pc0FycmF5KSl7dmFyIGE9dDtyZXR1cm4gdGhpcy5leHRlbmQoWWMuY29udmVydChhKSl9dmFyIG89dDtyZXR1cm4gdGhpcy5leHRlbmQoV2MuY29udmVydChvKSl9cmV0dXJuIHRoaXN9aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IFdjKGUubG5nLGUubGF0KSx0aGlzLl9uZT1uZXcgV2Moci5sbmcsci5sYXQpKSx0aGlzfSxZYy5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYygodGhpcy5fc3cubG5nK3RoaXMuX25lLmxuZykvMiwodGhpcy5fc3cubGF0K3RoaXMuX25lLmxhdCkvMil9LFljLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFljLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LFljLnByb3RvdHlwZS5nZXROb3J0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdjKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFljLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdjKHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0U291dGgoKSl9LFljLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sWWMucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sWWMucHJvdG90eXBlLmdldEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubG5nfSxZYy5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxZYy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sWWMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdEJvdW5kcygiK3RoaXMuX3N3LnRvU3RyaW5nKCkrIiwgIit0aGlzLl9uZS50b1N0cmluZygpKyIpIn0sWWMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFljLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1XYy5jb252ZXJ0KHQpLHI9ZS5sbmcsbj1lLmxhdCxpPXRoaXMuX3N3LmxhdDw9biYmbjw9dGhpcy5fbmUubGF0LGE9dGhpcy5fc3cubG5nPD1yJiZyPD10aGlzLl9uZS5sbmc7cmV0dXJuIHRoaXMuX3N3LmxuZz50aGlzLl9uZS5sbmcmJihhPXRoaXMuX3N3LmxuZz49ciYmcj49dGhpcy5fbmUubG5nKSxpJiZhfSxZYy5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiF0fHx0IGluc3RhbmNlb2YgWWM/dDpuZXcgWWModCl9O3ZhciBXYz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IG9iamVjdDogKCIrdCsiLCAiK2UrIikiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwIil9O1djLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYyhjKHRoaXMubG5nLC0xODAsMTgwKSx0aGlzLmxhdCl9LFdjLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubG5nLHRoaXMubGF0XX0sV2MucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxXYy5wcm90b3R5cGUuZGlzdGFuY2VUbz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLlBJLzE4MCxyPXRoaXMubGF0KmUsbj10LmxhdCplLGk9TWF0aC5zaW4ocikqTWF0aC5zaW4obikrTWF0aC5jb3MocikqTWF0aC5jb3MobikqTWF0aC5jb3MoKHQubG5nLXRoaXMubG5nKSplKTtyZXR1cm4gNjM3MTAwOC44Kk1hdGguYWNvcyhNYXRoLm1pbihpLDEpKX0sV2MucHJvdG90eXBlLnRvQm91bmRzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PTApO3ZhciBlPTM2MCp0LzQwMDc1MDE3LHI9ZS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIG5ldyBZYyhuZXcgV2ModGhpcy5sbmctcix0aGlzLmxhdC1lKSxuZXcgV2ModGhpcy5sbmcrcix0aGlzLmxhdCtlKSl9LFdjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFdjKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkmJigyPT09dC5sZW5ndGh8fDM9PT10Lmxlbmd0aCkpcmV0dXJuIG5ldyBXYyhOdW1iZXIodFswXSksTnVtYmVyKHRbMV0pKTtpZighQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dClyZXR1cm4gbmV3IFdjKE51bWJlcigibG5nImluIHQ/dC5sbmc6dC5sb24pLE51bWJlcih0LmxhdCkpO3Rocm93IG5ldyBFcnJvcigiYExuZ0xhdExpa2VgIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgTG5nTGF0IGluc3RhbmNlLCBhbiBvYmplY3Qge2xuZzogPGxuZz4sIGxhdDogPGxhdD59LCBhbiBvYmplY3Qge2xvbjogPGxuZz4sIGxhdDogPGxhdD59LCBvciBhbiBhcnJheSBvZiBbPGxuZz4sIDxsYXQ+XSIpfTt2YXIgWGM9MipNYXRoLlBJKjYzNzEwMDguODtmdW5jdGlvbiBaYyh0KXtyZXR1cm4gWGMqTWF0aC5jb3ModCpNYXRoLlBJLzE4MCl9ZnVuY3Rpb24gSmModCl7cmV0dXJuKDE4MCt0KS8zNjB9ZnVuY3Rpb24gS2ModCl7cmV0dXJuKDE4MC0xODAvTWF0aC5QSSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdCpNYXRoLlBJLzM2MCkpKS8zNjB9ZnVuY3Rpb24gUWModCxlKXtyZXR1cm4gdC9aYyhlKX1mdW5jdGlvbiAkYyh0KXt2YXIgZT0xODAtMzYwKnQ7cmV0dXJuIDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChlKk1hdGguUEkvMTgwKSktOTB9dmFyIHR1PWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj0wKSx0aGlzLng9K3QsdGhpcy55PStlLHRoaXMuej0rcn07dHUuZnJvbUxuZ0xhdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApO3ZhciByPVdjLmNvbnZlcnQodCk7cmV0dXJuIG5ldyB0dShKYyhyLmxuZyksS2Moci5sYXQpLFFjKGUsci5sYXQpKX0sdHUucHJvdG90eXBlLnRvTG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYygzNjAqdGhpcy54LTE4MCwkYyh0aGlzLnkpKX0sdHUucHJvdG90eXBlLnRvQWx0aXR1ZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdD10aGlzLnosZT10aGlzLnksdCpaYygkYyhlKSk7dmFyIHQsZX0sdHUucHJvdG90eXBlLm1ldGVySW5NZXJjYXRvckNvb3JkaW5hdGVVbml0cz1mdW5jdGlvbigpe3JldHVybiAxL1hjKih0PSRjKHRoaXMueSksMS9NYXRoLmNvcyh0Kk1hdGguUEkvMTgwKSk7dmFyIHR9O3ZhciBldT1mdW5jdGlvbih0LGUscil7dGhpcy56PXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5rZXk9aXUoMCx0LHQsZSxyKX07ZXUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy56PT09dC56JiZ0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sZXUucHJvdG90eXBlLnVybD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scz0ocj10aGlzLngsbj10aGlzLnksaT10aGlzLnosYT1HYygyNTYqciwyNTYqKG49TWF0aC5wb3coMixpKS1uLTEpLGkpLG89R2MoMjU2KihyKzEpLDI1NioobisxKSxpKSxhWzBdKyIsIithWzFdKyIsIitvWzBdKyIsIitvWzFdKSxsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0iIixhPXQ7YT4wO2EtLSlpKz0oZSYobj0xPDxhLTEpPzE6MCkrKHImbj8yOjApO3JldHVybiBpfSh0aGlzLnosdGhpcy54LHRoaXMueSk7cmV0dXJuIHRbKHRoaXMueCt0aGlzLnkpJXQubGVuZ3RoXS5yZXBsYWNlKCJ7cHJlZml4fSIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZSgie3p9IixTdHJpbmcodGhpcy56KSkucmVwbGFjZSgie3h9IixTdHJpbmcodGhpcy54KSkucmVwbGFjZSgie3l9IixTdHJpbmcoInRtcyI9PT1lP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpKS5yZXBsYWNlKCJ7cXVhZGtleX0iLGwpLnJlcGxhY2UoIntiYm94LWVwc2ctMzg1N30iLHMpfSxldS5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdGhpcy56KTtyZXR1cm4gbmV3IGkoODE5MioodC54KmUtdGhpcy54KSw4MTkyKih0LnkqZS10aGlzLnkpKX0sZXUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueisiLyIrdGhpcy54KyIvIit0aGlzLnl9O3ZhciBydT1mdW5jdGlvbih0LGUpe3RoaXMud3JhcD10LHRoaXMuY2Fub25pY2FsPWUsdGhpcy5rZXk9aXUodCxlLnosZS56LGUueCxlLnkpfSxudT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMub3ZlcnNjYWxlZFo9dCx0aGlzLndyYXA9ZSx0aGlzLmNhbm9uaWNhbD1uZXcgZXUociwrbiwraSksdGhpcy5rZXk9aXUoZSx0LHIsbixpKX07ZnVuY3Rpb24gaXUodCxlLHIsbixpKXsodCo9Mik8MCYmKHQ9LTEqdC0xKTt2YXIgYT0xPDxyO3JldHVybihhKmEqdCthKmkrbikudG9TdHJpbmcoMzYpK3IudG9TdHJpbmcoMzYpK2UudG9TdHJpbmcoMzYpfW51LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZFo9PT10Lm92ZXJzY2FsZWRaJiZ0aGlzLndyYXA9PT10LndyYXAmJnRoaXMuY2Fub25pY2FsLmVxdWFscyh0LmNhbm9uaWNhbCl9LG51LnByb3RvdHlwZS5zY2FsZWRUbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQ7cmV0dXJuIHQ+dGhpcy5jYW5vbmljYWwuej9uZXcgbnUodCx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOm5ldyBudSh0LHRoaXMud3JhcCx0LHRoaXMuY2Fub25pY2FsLng+PmUsdGhpcy5jYW5vbmljYWwueT4+ZSl9LG51LnByb3RvdHlwZS5jYWxjdWxhdGVTY2FsZWRLZXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNhbm9uaWNhbC56LXQ7cmV0dXJuIHQ+dGhpcy5jYW5vbmljYWwuej9pdSh0aGlzLndyYXAqK2UsdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSk6aXUodGhpcy53cmFwKitlLHQsdCx0aGlzLmNhbm9uaWNhbC54Pj5yLHRoaXMuY2Fub25pY2FsLnk+PnIpfSxudS5wcm90b3R5cGUuaXNDaGlsZE9mPWZ1bmN0aW9uKHQpe2lmKHQud3JhcCE9PXRoaXMud3JhcClyZXR1cm4hMTt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLno7cmV0dXJuIDA9PT10Lm92ZXJzY2FsZWRafHx0Lm92ZXJzY2FsZWRaPHRoaXMub3ZlcnNjYWxlZFomJnQuY2Fub25pY2FsLng9PT10aGlzLmNhbm9uaWNhbC54Pj5lJiZ0LmNhbm9uaWNhbC55PT09dGhpcy5jYW5vbmljYWwueT4+ZX0sbnUucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3ZlcnNjYWxlZFo+PXQpcmV0dXJuW25ldyBudSh0aGlzLm92ZXJzY2FsZWRaKzEsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KV07dmFyIGU9dGhpcy5jYW5vbmljYWwueisxLHI9Mip0aGlzLmNhbm9uaWNhbC54LG49Mip0aGlzLmNhbm9uaWNhbC55O3JldHVybltuZXcgbnUoZSx0aGlzLndyYXAsZSxyLG4pLG5ldyBudShlLHRoaXMud3JhcCxlLHIrMSxuKSxuZXcgbnUoZSx0aGlzLndyYXAsZSxyLG4rMSksbmV3IG51KGUsdGhpcy53cmFwLGUscisxLG4rMSldfSxudS5wcm90b3R5cGUuaXNMZXNzVGhhbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cmFwPHQud3JhcHx8ISh0aGlzLndyYXA+dC53cmFwKSYmKHRoaXMub3ZlcnNjYWxlZFo8dC5vdmVyc2NhbGVkWnx8ISh0aGlzLm92ZXJzY2FsZWRaPnQub3ZlcnNjYWxlZFopJiYodGhpcy5jYW5vbmljYWwueDx0LmNhbm9uaWNhbC54fHwhKHRoaXMuY2Fub25pY2FsLng+dC5jYW5vbmljYWwueCkmJnRoaXMuY2Fub25pY2FsLnk8dC5jYW5vbmljYWwueSkpfSxudS5wcm90b3R5cGUud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbnUodGhpcy5vdmVyc2NhbGVkWiwwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sbnUucHJvdG90eXBlLnVud3JhcFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbnUodGhpcy5vdmVyc2NhbGVkWix0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sbnUucHJvdG90eXBlLm92ZXJzY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygyLHRoaXMub3ZlcnNjYWxlZFotdGhpcy5jYW5vbmljYWwueil9LG51LnByb3RvdHlwZS50b1Vud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgcnUodGhpcy53cmFwLHRoaXMuY2Fub25pY2FsKX0sbnUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZForIi8iK3RoaXMuY2Fub25pY2FsLngrIi8iK3RoaXMuY2Fub25pY2FsLnl9LG51LnByb3RvdHlwZS5nZXRUaWxlUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsLmdldFRpbGVQb2ludChuZXcgdHUodC54LXRoaXMud3JhcCx0LnkpKX0sTm4oIkNhbm9uaWNhbFRpbGVJRCIsZXUpLE5uKCJPdmVyc2NhbGVkVGlsZUlEIixudSx7b21pdDpbInBvc01hdHJpeCJdfSk7dmFyIGF1PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnVpZD10LGUuaGVpZ2h0IT09ZS53aWR0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlIik7aWYociYmIm1hcGJveCIhPT1yJiYidGVycmFyaXVtIiE9PXIpcmV0dXJuIF8oJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgZW5jb2RpbmcgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSAibWFwYm94IiBhbmQgInRlcnJhcml1bSIuJyk7dGhpcy5zdHJpZGU9ZS5oZWlnaHQ7dmFyIG49dGhpcy5kaW09ZS5oZWlnaHQtMjt0aGlzLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5idWZmZXIpLHRoaXMuZW5jb2Rpbmc9cnx8Im1hcGJveCI7Zm9yKHZhciBpPTA7aTxuO2krKyl0aGlzLmRhdGFbdGhpcy5faWR4KC0xLGkpXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsaSldLHRoaXMuZGF0YVt0aGlzLl9pZHgobixpKV09dGhpcy5kYXRhW3RoaXMuX2lkeChuLTEsaSldLHRoaXMuZGF0YVt0aGlzLl9pZHgoaSwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgoaSwwKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChpLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KGksbi0xKV07dGhpcy5kYXRhW3RoaXMuX2lkeCgtMSwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgoMCwwKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLC0xKV09dGhpcy5kYXRhW3RoaXMuX2lkeChuLTEsMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsbildPXRoaXMuZGF0YVt0aGlzLl9pZHgoMCxuLTEpXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4sbildPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLG4tMSldfTthdS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlciksbj00KnRoaXMuX2lkeCh0LGUpO3JldHVybigidGVycmFyaXVtIj09PXRoaXMuZW5jb2Rpbmc/dGhpcy5fdW5wYWNrVGVycmFyaXVtOnRoaXMuX3VucGFja01hcGJveCkocltuXSxyW24rMV0scltuKzJdKX0sYXUucHJvdG90eXBlLmdldFVucGFja1ZlY3Rvcj1mdW5jdGlvbigpe3JldHVybiJ0ZXJyYXJpdW0iPT09dGhpcy5lbmNvZGluZz9bMjU2LDEsMS8yNTYsMzI3NjhdOls2NTUzLjYsMjUuNiwuMSwxZTRdfSxhdS5wcm90b3R5cGUuX2lkeD1mdW5jdGlvbih0LGUpe2lmKHQ8LTF8fHQ+PXRoaXMuZGltKzF8fGU8LTF8fGU+PXRoaXMuZGltKzEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhIik7cmV0dXJuKGUrMSkqdGhpcy5zdHJpZGUrKHQrMSl9LGF1LnByb3RvdHlwZS5fdW5wYWNrTWFwYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oMjU2KnQqMjU2KzI1NiplK3IpLzEwLTFlNH0sYXUucHJvdG90eXBlLl91bnBhY2tUZXJyYXJpdW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiAyNTYqdCtlK3IvMjU2LTMyNzY4fSxhdS5wcm90b3R5cGUuZ2V0UGl4ZWxzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFbyh7d2lkdGg6dGhpcy5zdHJpZGUsaGVpZ2h0OnRoaXMuc3RyaWRlfSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSl9LGF1LnByb3RvdHlwZS5iYWNrZmlsbEJvcmRlcj1mdW5jdGlvbih0LGUscil7aWYodGhpcy5kaW0hPT10LmRpbSl0aHJvdyBuZXcgRXJyb3IoImRlbSBkaW1lbnNpb24gbWlzbWF0Y2giKTt2YXIgbj1lKnRoaXMuZGltLGk9ZSp0aGlzLmRpbSt0aGlzLmRpbSxhPXIqdGhpcy5kaW0sbz1yKnRoaXMuZGltK3RoaXMuZGltO3N3aXRjaChlKXtjYXNlLTE6bj1pLTE7YnJlYWs7Y2FzZSAxOmk9bisxfXN3aXRjaChyKXtjYXNlLTE6YT1vLTE7YnJlYWs7Y2FzZSAxOm89YSsxfWZvcih2YXIgcz0tZSp0aGlzLmRpbSxsPS1yKnRoaXMuZGltLGM9YTtjPG87YysrKWZvcih2YXIgdT1uO3U8aTt1KyspdGhpcy5kYXRhW3RoaXMuX2lkeCh1LGMpXT10LmRhdGFbdGhpcy5faWR4KHUrcyxjK2wpXX0sTm4oIkRFTURhdGEiLGF1KTt2YXIgb3U9ZnVuY3Rpb24odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX07b3UucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LG91LnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW3RdfTt2YXIgc3U9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9IkZlYXR1cmUiLHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlPXQsdC5fej1lLHQuX3g9cix0Ll95PW4sdGhpcy5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyx0aGlzLmlkPWl9LGx1PXtnZW9tZXRyeTp7Y29uZmlndXJhYmxlOiEwfX07bHUuZ2VvbWV0cnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2dlb21ldHJ5JiYodGhpcy5fZ2VvbWV0cnk9dGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl94LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl95LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl96KS5nZW9tZXRyeSksdGhpcy5fZ2VvbWV0cnl9LGx1Lmdlb21ldHJ5LnNldD1mdW5jdGlvbih0KXt0aGlzLl9nZW9tZXRyeT10fSxzdS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9e2dlb21ldHJ5OnRoaXMuZ2VvbWV0cnl9O2Zvcih2YXIgZSBpbiB0aGlzKSJfZ2VvbWV0cnkiIT09ZSYmIl92ZWN0b3JUaWxlRmVhdHVyZSIhPT1lJiYodFtlXT10aGlzW2VdKTtyZXR1cm4gdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3UucHJvdG90eXBlLGx1KTt2YXIgY3U9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPXt9LHRoaXMuc3RhdGVDaGFuZ2VzPXt9LHRoaXMuZGVsZXRlZFN0YXRlcz17fX07Y3UucHJvdG90eXBlLnVwZGF0ZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TdHJpbmcoZSk7aWYodGhpcy5zdGF0ZUNoYW5nZXNbdF09dGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dPXRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dfHx7fSx1KHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dLHIpLG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pZm9yKHZhciBpIGluIHRoaXMuZGVsZXRlZFN0YXRlc1t0XT17fSx0aGlzLnN0YXRlW3RdKWkhPT1uJiYodGhpcy5kZWxldGVkU3RhdGVzW3RdW2ldPW51bGwpO2Vsc2UgaWYodGhpcy5kZWxldGVkU3RhdGVzW3RdJiZudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dKWZvcih2YXIgYSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl09e30sdGhpcy5zdGF0ZVt0XVtuXSlyW2FdfHwodGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW2FdPW51bGwpO2Vsc2UgZm9yKHZhciBvIGluIHIpe3RoaXMuZGVsZXRlZFN0YXRlc1t0XSYmdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiZudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dJiZkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dfX0sY3UucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUscil7aWYoIShudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKSl7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF18fHt9LHImJnZvaWQgMCE9PWUpbnVsbCE9PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl18fHt9LHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsKTtlbHNlIGlmKHZvaWQgMCE9PWUpe2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdJiZ0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSlmb3IociBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl09e30sdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW3JdPW51bGw7ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl09bnVsbH1lbHNlIHRoaXMuZGVsZXRlZFN0YXRlc1t0XT1udWxsfX0sY3UucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9U3RyaW5nKGUpLG49dGhpcy5zdGF0ZVt0XXx8e30saT10aGlzLnN0YXRlQ2hhbmdlc1t0XXx8e30sYT11KHt9LG5bcl0saVtyXSk7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSlyZXR1cm57fTtpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pe3ZhciBvPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtlXTtpZihudWxsPT09bylyZXR1cm57fTtmb3IodmFyIHMgaW4gbylkZWxldGUgYVtzXX1yZXR1cm4gYX0sY3UucHJvdG90eXBlLmluaXRpYWxpemVUaWxlU3RhdGU9ZnVuY3Rpb24odCxlKXt0LnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLGUpfSxjdS5wcm90b3R5cGUuY29hbGVzY2VDaGFuZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluIHRoaXMuc3RhdGVDaGFuZ2VzKXt0aGlzLnN0YXRlW25dPXRoaXMuc3RhdGVbbl18fHt9O3ZhciBpPXt9O2Zvcih2YXIgYSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tuXSl0aGlzLnN0YXRlW25dW2FdfHwodGhpcy5zdGF0ZVtuXVthXT17fSksdSh0aGlzLnN0YXRlW25dW2FdLHRoaXMuc3RhdGVDaGFuZ2VzW25dW2FdKSxpW2FdPXRoaXMuc3RhdGVbbl1bYV07cltuXT1pfWZvcih2YXIgbyBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpe3RoaXMuc3RhdGVbb109dGhpcy5zdGF0ZVtvXXx8e307dmFyIHM9e307aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXSlmb3IodmFyIGwgaW4gdGhpcy5zdGF0ZVtvXSlzW2xdPXt9LHRoaXMuc3RhdGVbb11bbF09e307ZWxzZSBmb3IodmFyIGMgaW4gdGhpcy5kZWxldGVkU3RhdGVzW29dKXtpZihudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW29dW2NdKXRoaXMuc3RhdGVbb11bY109e307ZWxzZSBmb3IodmFyIGY9MCxoPU9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSk7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdO2RlbGV0ZSB0aGlzLnN0YXRlW29dW2NdW3BdfXNbY109dGhpcy5zdGF0ZVtvXVtjXX1yW29dPXJbb118fHt9LHUocltvXSxzKX1pZih0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e30sMCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClmb3IodmFyIGQgaW4gdCl7dFtkXS5zZXRGZWF0dXJlU3RhdGUocixlKX19O3ZhciB1dT1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEPXQsdGhpcy54PXQuY2Fub25pY2FsLngsdGhpcy55PXQuY2Fub25pY2FsLnksdGhpcy56PXQuY2Fub25pY2FsLnosdGhpcy5ncmlkPW5ldyB6big4MTkyLDE2LDApLHRoaXMuZ3JpZDNEPW5ldyB6big4MTkyLDE2LDApLHRoaXMuZmVhdHVyZUluZGV4QXJyYXk9bmV3IGZhLHRoaXMucHJvbW90ZUlkPWV9O2Z1bmN0aW9uIGZ1KHQsZSxyLG4saSl7cmV0dXJuIHYodCwoZnVuY3Rpb24odCxhKXt2YXIgbz1lIGluc3RhbmNlb2YgX2k/ZS5nZXQoYSk6bnVsbDtyZXR1cm4gbyYmby5ldmFsdWF0ZT9vLmV2YWx1YXRlKHIsbixpKTpvfSkpfWZ1bmN0aW9uIGh1KHQpe2Zvcih2YXIgZT0xLzAscj0xLzAsbj0tMS8wLGk9LTEvMCxhPTAsbz10O2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtlPU1hdGgubWluKGUscy54KSxyPU1hdGgubWluKHIscy55KSxuPU1hdGgubWF4KG4scy54KSxpPU1hdGgubWF4KGkscy55KX1yZXR1cm57bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfX1mdW5jdGlvbiBwdSh0LGUpe3JldHVybiBlLXR9dXUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhyLG4saSk7Zm9yKHZhciBzPWE/dGhpcy5ncmlkM0Q6dGhpcy5ncmlkLGw9MDtsPGUubGVuZ3RoO2wrKyl7Zm9yKHZhciBjPWVbbF0sdT1bMS8wLDEvMCwtMS8wLC0xLzBdLGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGg9Y1tmXTt1WzBdPU1hdGgubWluKHVbMF0saC54KSx1WzFdPU1hdGgubWluKHVbMV0saC55KSx1WzJdPU1hdGgubWF4KHVbMl0saC54KSx1WzNdPU1hdGgubWF4KHVbM10saC55KX11WzBdPDgxOTImJnVbMV08ODE5MiYmdVsyXT49MCYmdVszXT49MCYmcy5pbnNlcnQobyx1WzBdLHVbMV0sdVsyXSx1WzNdKX19LHV1LnByb3RvdHlwZS5sb2FkVlRMYXllcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52dExheWVyc3x8KHRoaXMudnRMYXllcnM9bmV3IExzLlZlY3RvclRpbGUobmV3IGFsKHRoaXMucmF3VGlsZURhdGEpKS5sYXllcnMsdGhpcy5zb3VyY2VMYXllckNvZGVyPW5ldyBvdSh0aGlzLnZ0TGF5ZXJzP09iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pKSx0aGlzLnZ0TGF5ZXJzfSx1dS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpczt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgbz10LnBhcmFtc3x8e30scz04MTkyL3QudGlsZVNpemUvdC5zY2FsZSxsPXNuKG8uZmlsdGVyKSxjPXQucXVlcnlHZW9tZXRyeSx1PXQucXVlcnlQYWRkaW5nKnMsZj1odShjKSxoPXRoaXMuZ3JpZC5xdWVyeShmLm1pblgtdSxmLm1pblktdSxmLm1heFgrdSxmLm1heFkrdSkscD1odSh0LmNhbWVyYVF1ZXJ5R2VvbWV0cnkpLGQ9dGhpcy5ncmlkM0QucXVlcnkocC5taW5YLXUscC5taW5ZLXUscC5tYXhYK3UscC5tYXhZK3UsKGZ1bmN0aW9uKGUscixuLGEpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGEpe2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107aWYoZTw9bC54JiZyPD1sLnkmJm4+PWwueCYmYT49bC55KXJldHVybiEwfXZhciBjPVtuZXcgaShlLHIpLG5ldyBpKGUsYSksbmV3IGkobixhKSxuZXcgaShuLHIpXTtpZih0Lmxlbmd0aD4yKWZvcih2YXIgdT0wLGY9Yzt1PGYubGVuZ3RoO3UrPTEpe2lmKGlvKHQsZlt1XSkpcmV0dXJuITB9Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aC0xO2grKyl7aWYoYW8odFtoXSx0W2grMV0sYykpcmV0dXJuITB9cmV0dXJuITF9KHQuY2FtZXJhUXVlcnlHZW9tZXRyeSxlLXUsci11LG4rdSxhK3UpfSkpLG09MCxnPWQ7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dO2gucHVzaCh2KX1oLnNvcnQocHUpO2Zvcih2YXIgeSx4PXt9LGI9ZnVuY3Rpb24oaSl7dmFyIHU9aFtpXTtpZih1IT09eSl7eT11O3ZhciBmPWEuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KHUpLHA9bnVsbDthLmxvYWRNYXRjaGluZ0ZlYXR1cmUoeCxmLmJ1Y2tldEluZGV4LGYuc291cmNlTGF5ZXJJbmRleCxmLmZlYXR1cmVJbmRleCxsLG8ubGF5ZXJzLG8uYXZhaWxhYmxlSW1hZ2VzLGUscixuLChmdW5jdGlvbihlLHIsbil7cmV0dXJuIHB8fChwPVlhKGUpKSxyLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUoYyxlLG4scCxhLnosdC50cmFuc2Zvcm0scyx0LnBpeGVsUG9zTWF0cml4KX0pKX19LF89MDtfPGgubGVuZ3RoO18rKyliKF8pO3JldHVybiB4fSx1dS5wcm90b3R5cGUubG9hZE1hdGNoaW5nRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPXRoaXMuYnVja2V0TGF5ZXJJRHNbZV07aWYoIWF8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoZS5pbmRleE9mKHRbcl0pPj0wKXJldHVybiEwO3JldHVybiExfShhLGYpKXt2YXIgaD10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHIpLHA9dGhpcy52dExheWVyc1toXS5mZWF0dXJlKG4pO2lmKGkuZmlsdGVyKG5ldyBwaSh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWikscCkpZm9yKHZhciBkPXRoaXMuZ2V0SWQocCxoKSxtPTA7bTxmLmxlbmd0aDttKyspe3ZhciBnPWZbbV07aWYoIShhJiZhLmluZGV4T2YoZyk8MCkpe3ZhciB2PXNbZ107aWYodil7dmFyIHk9e307dm9pZCAwIT09ZCYmYyYmKHk9Yy5nZXRTdGF0ZSh2LnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLGQpKTt2YXIgeD1sW2ddO3gucGFpbnQ9ZnUoeC5wYWludCx2LnBhaW50LHAseSxvKSx4LmxheW91dD1mdSh4LmxheW91dCx2LmxheW91dCxwLHksbyk7dmFyIGI9IXV8fHUocCx2LHkpO2lmKGIpe3ZhciBfPW5ldyBzdShwLHRoaXMueix0aGlzLngsdGhpcy55LGQpO18ubGF5ZXI9eDt2YXIgdz10W2ddO3ZvaWQgMD09PXcmJih3PXRbZ109W10pLHcucHVzaCh7ZmVhdHVyZUluZGV4Om4sZmVhdHVyZTpfLGludGVyc2VjdGlvblo6Yn0pfX19fX19LHV1LnByb3RvdHlwZS5sb29rdXBTeW1ib2xGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXt9O3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBjPXNuKGkpLHU9MCxmPXQ7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO3RoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShsLHIsbixoLGMsYSxvLHMsZSl9cmV0dXJuIGx9LHV1LnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnVja2V0TGF5ZXJJRHM7ZTxyLmxlbmd0aDtlKz0xKWZvcih2YXIgbj0wLGk9cltlXTtuPGkubGVuZ3RoO24rPTEpe2lmKHQ9PT1pW25dKXJldHVybiEwfXJldHVybiExfSx1dS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkO2lmKHRoaXMucHJvbW90ZUlkKXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHRoaXMucHJvbW90ZUlkP3RoaXMucHJvbW90ZUlkOnRoaXMucHJvbW90ZUlkW2VdOyJib29sZWFuIj09dHlwZW9mKHI9dC5wcm9wZXJ0aWVzW25dKSYmKHI9TnVtYmVyKHIpKX1yZXR1cm4gcn0sTm4oIkZlYXR1cmVJbmRleCIsdXUse29taXQ6WyJyYXdUaWxlRGF0YSIsInNvdXJjZUxheWVyQ29kZXIiXX0pO3ZhciBkdT1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEPXQsdGhpcy51aWQ9aCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9ZSx0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5oYXNTeW1ib2xCdWNrZXRzPSExLHRoaXMuaGFzUlRMVGV4dD0hMSx0aGlzLmRlcGVuZGVuY2llcz17fSx0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLnN0YXRlPSJsb2FkaW5nIn07ZHUucHJvdG90eXBlLnJlZ2lzdGVyRmFkZUR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQrdGhpcy50aW1lQWRkZWQ7ZTxSLm5vdygpfHx0aGlzLmZhZGVFbmRUaW1lJiZlPHRoaXMuZmFkZUVuZFRpbWV8fCh0aGlzLmZhZGVFbmRUaW1lPWUpfSxkdS5wcm90b3R5cGUud2FzUmVxdWVzdGVkPWZ1bmN0aW9uKCl7cmV0dXJuImVycm9yZWQiPT09dGhpcy5zdGF0ZXx8ImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV9LGR1LnByb3RvdHlwZS5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5oYXNEYXRhKCkmJnRoaXMudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuc3RhdGU9ImxvYWRlZCIsdCl7Zm9yKHZhciBuIGluIHQuZmVhdHVyZUluZGV4JiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9dC5mZWF0dXJlSW5kZXgsdC5yYXdUaWxlRGF0YT8odGhpcy5sYXRlc3RSYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEpOnRoaXMubGF0ZXN0UmF3VGlsZURhdGEmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSksdGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuYnVja2V0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2Zvcih2YXIgbj1mdW5jdGlvbigpe3ZhciB0PWFbaV0sbj10LmxheWVySWRzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0TGF5ZXIodCl9KSkuZmlsdGVyKEJvb2xlYW4pO2lmKDAhPT1uLmxlbmd0aCl7dC5sYXllcnM9bix0LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMmJih0LnN0YXRlRGVwZW5kZW50TGF5ZXJzPXQuc3RhdGVEZXBlbmRlbnRMYXllcklkcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10fSkpWzBdfSkpKTtmb3IodmFyIG89MCxzPW47bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3JbbC5pZF09dH19fSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluKCk7cmV0dXJuIHJ9KHQuYnVja2V0cyxlLnN0eWxlKSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITEsdGhpcy5idWNrZXRzKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl07aWYoaSBpbnN0YW5jZW9mIE1jKXtpZih0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITAsIXIpYnJlYWs7aS5qdXN0UmVsb2FkZWQ9ITB9fWlmKHRoaXMuaGFzUlRMVGV4dD0hMSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHMpZm9yKHZhciBhIGluIHRoaXMuYnVja2V0cyl7dmFyIG89dGhpcy5idWNrZXRzW2FdO2lmKG8gaW5zdGFuY2VvZiBNYyYmby5oYXNSVExUZXh0KXt0aGlzLmhhc1JUTFRleHQ9ITAsaGkuaXNMb2FkaW5nKCl8fGhpLmlzTG9hZGVkKCl8fCJkZWZlcnJlZCIhPT11aSgpfHxmaSgpO2JyZWFrfX1mb3IodmFyIHMgaW4gdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmJ1Y2tldHMpe3ZhciBsPXRoaXMuYnVja2V0c1tzXTt0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxlLnN0eWxlLmdldExheWVyKHMpLnF1ZXJ5UmFkaXVzKGwpKX10LmltYWdlQXRsYXMmJih0aGlzLmltYWdlQXRsYXM9dC5pbWFnZUF0bGFzKSx0LmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc0ltYWdlPXQuZ2x5cGhBdGxhc0ltYWdlKX1lbHNlIHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IG5hfSxkdS5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSYmdGhpcy5pbWFnZUF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPW51bGwpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT0idW5sb2FkZWQifSxkdS5wcm90b3R5cGUuZ2V0QnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1Y2tldHNbdC5pZF19LGR1LnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3IudXBsb2FkUGVuZGluZygpJiZyLnVwbG9hZCh0KX12YXIgbj10LmdsO3RoaXMuaW1hZ2VBdGxhcyYmIXRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCYmKHRoaXMuaW1hZ2VBdGxhc1RleHR1cmU9bmV3IFZjKHQsdGhpcy5pbWFnZUF0bGFzLmltYWdlLG4uUkdCQSksdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkPSEwKSx0aGlzLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmU9bmV3IFZjKHQsdGhpcy5nbHlwaEF0bGFzSW1hZ2Usbi5BTFBIQSksdGhpcy5nbHlwaEF0bGFzSW1hZ2U9bnVsbCl9LGR1LnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe3RoaXMuaW1hZ2VBdGxhcyYmdGhpcy5pbWFnZUF0bGFzLnBhdGNoVXBkYXRlZEltYWdlcyh0LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUpfSxkdS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6bixjYW1lcmFRdWVyeUdlb21ldHJ5Omksc2NhbGU6YSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHBpeGVsUG9zTWF0cml4OmMsdHJhbnNmb3JtOnMscGFyYW1zOm8scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmx9LHQsZSxyKTp7fX0sZHUucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleDtpZihyJiZyLnJhd1RpbGVEYXRhKXt2YXIgbj1yLmxvYWRWVExheWVycygpLGk9ZT9lLnNvdXJjZUxheWVyOiIiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz1zbihlJiZlLmZpbHRlcikscz10aGlzLnRpbGVJRC5jYW5vbmljYWwsbD1zLnosYz1zLngsdT1zLnksZj17ejpsLHg6Yyx5OnV9LGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIHA9YS5mZWF0dXJlKGgpO2lmKG8uZmlsdGVyKG5ldyBwaSh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWikscCkpe3ZhciBkPXIuZ2V0SWQocCxpKSxtPW5ldyBzdShwLGwsYyx1LGQpO20udGlsZT1mLHQucHVzaChtKX19fX0sZHUucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZXx8ImV4cGlyZWQiPT09dGhpcy5zdGF0ZX0sZHUucHJvdG90eXBlLnBhdHRlcm5zTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VBdGxhcyYmISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RofSxkdS5wcm90b3R5cGUuc2V0RXhwaXJ5RGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmV4cGlyYXRpb25UaW1lO2lmKHQuY2FjaGVDb250cm9sKXt2YXIgcj1BKHQuY2FjaGVDb250cm9sKTtyWyJtYXgtYWdlIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKnJbIm1heC1hZ2UiXSl9ZWxzZSB0LmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKHQuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgbj1EYXRlLm5vdygpLGk9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5uKWk9ITE7ZWxzZSBpZihlKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8ZSlpPSEwO2Vsc2V7dmFyIGE9dGhpcy5leHBpcmF0aW9uVGltZS1lO2E/dGhpcy5leHBpcmF0aW9uVGltZT1uK01hdGgubWF4KGEsM2U0KTppPSEwfWVsc2UgaT0hMDtpPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPSJleHBpcmVkIik6dGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTB9fSxkdS5wcm90b3R5cGUuZ2V0RXhwaXJ5VGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpcmV0dXJuIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD8xZTMqKDE8PE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudC0xLDMxKSk6TWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZS0obmV3IERhdGUpLmdldFRpbWUoKSxNYXRoLnBvdygyLDMxKS0xKX0sZHUucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSYmMCE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCl7dmFyIHI9dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBuIGluIHRoaXMuYnVja2V0cylpZihlLnN0eWxlLmhhc0xheWVyKG4pKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl0sYT1pLmxheWVyc1swXS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixvPXJbYV0scz10W2FdO2lmKG8mJnMmJjAhPT1PYmplY3Qua2V5cyhzKS5sZW5ndGgpe2kudXBkYXRlKHMsbyx0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zfHx7fSk7dmFyIGw9ZSYmZS5zdHlsZSYmZS5zdHlsZS5nZXRMYXllcihuKTtsJiYodGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsbC5xdWVyeVJhZGl1cyhpKSkpfX19fSxkdS5wcm90b3R5cGUuaG9sZGluZ0ZvckZhZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsfSxkdS5wcm90b3R5cGUuc3ltYm9sRmFkZUZpbmlzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbHx8dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPFIubm93KCl9LGR1LnByb3RvdHlwZS5jbGVhckZhZGVIb2xkPWZ1bmN0aW9uKCl7dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPXZvaWQgMH0sZHUucHJvdG90eXBlLnNldEhvbGREdXJhdGlvbj1mdW5jdGlvbih0KXt0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw9Ui5ub3coKSt0fSxkdS5wcm90b3R5cGUuc2V0RGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXtyW2lbbl1dPSEwfXRoaXMuZGVwZW5kZW5jaWVzW3RdPXJ9LGR1LnByb3RvdHlwZS5oYXNEZXBlbmRlbmN5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPXRoaXMuZGVwZW5kZW5jaWVzW2ldO2lmKGEpZm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7aWYoYVtzW29dXSlyZXR1cm4hMH19cmV0dXJuITF9O3ZhciBtdT1zZWxmLnBlcmZvcm1hbmNlLGd1PWZ1bmN0aW9uKHQpe3RoaXMuX21hcmtzPXtzdGFydDpbdC51cmwsInN0YXJ0Il0uam9pbigiIyIpLGVuZDpbdC51cmwsImVuZCJdLmpvaW4oIiMiKSxtZWFzdXJlOnQudXJsLnRvU3RyaW5nKCl9LG11Lm1hcmsodGhpcy5fbWFya3Muc3RhcnQpfTtndS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7bXUubWFyayh0aGlzLl9tYXJrcy5lbmQpO3ZhciB0PW11LmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSk7cmV0dXJuIDA9PT10Lmxlbmd0aCYmKG11Lm1lYXN1cmUodGhpcy5fbWFya3MubWVhc3VyZSx0aGlzLl9tYXJrcy5zdGFydCx0aGlzLl9tYXJrcy5lbmQpLHQ9bXUuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKSxtdS5jbGVhck1hcmtzKHRoaXMuX21hcmtzLnN0YXJ0KSxtdS5jbGVhck1hcmtzKHRoaXMuX21hcmtzLmVuZCksbXUuY2xlYXJNZWFzdXJlcyh0aGlzLl9tYXJrcy5tZWFzdXJlKSksdH0sdC5BY3Rvcj1xYyx0LkFscGhhSW1hZ2U9U28sdC5DYW5vbmljYWxUaWxlSUQ9ZXUsdC5Db2xsaXNpb25Cb3hBcnJheT1uYSx0LkNvbG9yPXRlLHQuREVNRGF0YT1hdSx0LkRhdGFDb25zdGFudFByb3BlcnR5PXdpLHQuRGljdGlvbmFyeUNvZGVyPW91LHQuRVhURU5UPTgxOTIsdC5FcnJvckV2ZW50PVN0LHQuRXZhbHVhdGlvblBhcmFtZXRlcnM9cGksdC5FdmVudD1NdCx0LkV2ZW50ZWQ9RXQsdC5GZWF0dXJlSW5kZXg9dXUsdC5GaWxsQnVja2V0PWdzLHQuRmlsbEV4dHJ1c2lvbkJ1Y2tldD1Pcyx0LkltYWdlQXRsYXM9TGwsdC5JbWFnZVBvc2l0aW9uPVNsLHQuTGluZUJ1Y2tldD1xcyx0LkxuZ0xhdD1XYyx0LkxuZ0xhdEJvdW5kcz1ZYyx0Lk1lcmNhdG9yQ29vcmRpbmF0ZT10dSx0Lk9ORV9FTT0yNCx0Lk92ZXJzY2FsZWRUaWxlSUQ9bnUsdC5Qb2ludD1pLHQuUG9pbnQkMT1pLHQuUHJvcGVydGllcz1TaSx0LlByb3RvYnVmPWFsLHQuUkdCQUltYWdlPUVvLHQuUmVxdWVzdE1hbmFnZXI9SCx0LlJlcXVlc3RQZXJmb3JtYW5jZT1ndSx0LlJlc291cmNlVHlwZT1kdCx0LlNlZ21lbnRWZWN0b3I9cGEsdC5Tb3VyY2VGZWF0dXJlU3RhdGU9Y3UsdC5TdHJ1Y3RBcnJheUxheW91dDF1aTI9JGksdC5TdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2PXFpLHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ9emksdC5TdHJ1Y3RBcnJheUxheW91dDN1aTY9WWksdC5TdHJ1Y3RBcnJheUxheW91dDRpOD1EaSx0LlN5bWJvbEJ1Y2tldD1NYyx0LlRleHR1cmU9VmMsdC5UaWxlPWR1LHQuVHJhbnNpdGlvbmFibGU9Z2ksdC5Vbmlmb3JtMWY9U2EsdC5Vbmlmb3JtMWk9TWEsdC5Vbmlmb3JtMmY9RWEsdC5Vbmlmb3JtM2Y9TGEsdC5Vbmlmb3JtNGY9Q2EsdC5Vbmlmb3JtQ29sb3I9UGEsdC5Vbmlmb3JtTWF0cml4NGY9T2EsdC5VbndyYXBwZWRUaWxlSUQ9cnUsdC5WYWxpZGF0aW9uRXJyb3I9Q3QsdC5Xcml0aW5nTW9kZT1DbCx0Llpvb21IaXN0b3J5PUduLHQuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH0sdC5hZGREeW5hbWljQXR0cmlidXRlcz13Yyx0LmFzeW5jQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuIHIobnVsbCxbXSk7dmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9bnVsbDt0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7ZSh0LChmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pKX0pKX0sdC5iZXppZXI9byx0LmJpbmRBbGw9bSx0LmJyb3dzZXI9Uix0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkPWZ1bmN0aW9uKHQpeysraHQ+b3QmJih0LmdldEFjdG9yKCkuc2VuZCgiZW5mb3JjZUNhY2hlU2l6ZUxpbWl0IixhdCksaHQ9MCl9LHQuY2xhbXA9bCx0LmNsZWFyVGlsZUNhY2hlPWZ1bmN0aW9uKHQpe3ZhciBlPXNlbGYuY2FjaGVzLmRlbGV0ZSgibWFwYm94LXRpbGVzIik7dCYmZS5jYXRjaCh0KS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0KCl9KSl9LHQuY2xpcExpbmU9ZWMsdC5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgZm8oMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX0sdC5jbG9uZSQxPXgsdC5jbG9uZSQyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBmbygzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX0sdC5jb2xsaXNpb25DaXJjbGVMYXlvdXQ9dGwsdC5jb25maWc9Rix0LmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbygxNik7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTApLHRbMF09MSx0WzVdPTEsdFsxMF09MSx0WzE1XT0xLHR9LHQuY3JlYXRlJDE9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oOSk7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzVdPTAsdFs2XT0wLHRbN109MCksdFswXT0xLHRbNF09MSx0WzhdPTEsdH0sdC5jcmVhdGUkMj1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbyg0KTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTApLHRbMF09MSx0WzNdPTEsdH0sdC5jcmVhdGVDb21tb25qc01vZHVsZT1lLHQuY3JlYXRlRXhwcmVzc2lvbj1Xcix0LmNyZWF0ZUxheW91dD1JaSx0LmNyZWF0ZVN0eWxlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuImN1c3RvbSI9PT10LnR5cGU/bmV3IERjKHQpOm5ldyBSY1t0LnR5cGVdKHQpfSx0LmNyb3NzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl07cmV0dXJuIHRbMF09aSpsLWEqcyx0WzFdPWEqby1uKmwsdFsyXT1uKnMtaSpvLHR9LHQuZGVlcEVxdWFsPWZ1bmN0aW9uIHQoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZighQXJyYXkuaXNBcnJheShyKXx8ZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZighdChlW25dLHJbbl0pKXJldHVybiExO3JldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPT1yKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuITE7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0scltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT1yfSx0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX0sdC5kb3QkMT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119LHQuZWFzZT1zLHQuZW1pdFZhbGlkYXRpb25FcnJvcnM9T24sdC5lbmRzV2l0aD1nLHQuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0PWZ1bmN0aW9uKHQpe3N0KCksUSYmUS50aGVuKChmdW5jdGlvbihlKXtlLmtleXMoKS50aGVuKChmdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoLXQ7bisrKWUuZGVsZXRlKHJbbl0pfSkpfSkpfSx0LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmU9WWwsdC5ldmFsdWF0ZVNpemVGb3Jab29tPVdsLHQuZXZhbHVhdGVWYXJpYWJsZU9mZnNldD1kYyx0LmV2ZW50ZWQ9Y2ksdC5leHRlbmQ9dSx0LmZlYXR1cmVGaWx0ZXI9c24sdC5maWx0ZXJPYmplY3Q9eSx0LmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSx0LmdldEFuY2hvckFsaWdubWVudD1VbCx0LmdldEFuY2hvckp1c3RpZmljYXRpb249bWMsdC5nZXRBcnJheUJ1ZmZlcj14dCx0LmdldEltYWdlPVR0LHQuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiB5dCh1KHQse3R5cGU6Impzb24ifSksZSl9LHQuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cz11aSx0LmdldFJlZmVycmVyPWd0LHQuZ2V0VmlkZW89ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO2kubXV0ZWQ9ITAsaS5vbmxvYWRzdGFydD1mdW5jdGlvbigpe2UobnVsbCxpKX07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic291cmNlIik7cj10W2FdLG49dm9pZCAwLChuPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKS5ocmVmPXIsKG4ucHJvdG9jb2whPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfHxuLmhvc3QhPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLmhvc3QpJiYoaS5jcm9zc09yaWdpbj0iQW5vbnltb3VzIiksby5zcmM9dFthXSxpLmFwcGVuZENoaWxkKG8pfXJldHVybntjYW5jZWw6ZnVuY3Rpb24oKXt9fX0sdC5pZGVudGl0eT1obyx0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxmPWVbOV0saD1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sbT1lWzEzXSxnPWVbMTRdLHY9ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxUPWkqYy1hKmwsaz11Km0tZipkLEE9dSpnLWgqZCxNPXUqdi1wKmQsUz1mKmctaCptLEU9Zip2LXAqbSxMPWgqdi1wKmcsQz15KkwteCpFK2IqUytfKk0tdypBK1QqaztyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqRStjKlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpULWcqdyt2Kl8pKkMsdFszXT0oaCp3LWYqVC1wKl8pKkMsdFs0XT0obCpNLW8qTC1jKkEpKkMsdFs1XT0ocipMLWkqTSthKkEpKkMsdFs2XT0oZypiLWQqVC12KngpKkMsdFs3XT0odSpULWgqYitwKngpKkMsdFs4XT0obypFLXMqTStjKmspKkMsdFs5XT0obipNLXIqRS1hKmspKkMsdFsxMF09KGQqdy1tKmIrdip5KSpDLHRbMTFdPShmKmItdSp3LXAqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKngtZCpfLWcqeSkqQyx0WzE1XT0odSpfLWYqeCtoKnkpKkMsdCk6bnVsbH0sdC5pc0NoYXI9WW4sdC5pc01hcGJveFVSTD1xLHQua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sdC5tYWtlUmVxdWVzdD15dCx0Lm1hcE9iamVjdD12LHQubWVyY2F0b3JYZnJvbUxuZz1KYyx0Lm1lcmNhdG9yWWZyb21MYXQ9S2MsdC5tZXJjYXRvclpmcm9tQWx0aXR1ZGU9UWMsdC5tdWw9bW8sdC5tdWx0aXBseT1wbyx0Lm12dD1Mcyx0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO3JldHVybiBhPjAmJihhPTEvTWF0aC5zcXJ0KGEpKSx0WzBdPWVbMF0qYSx0WzFdPWVbMV0qYSx0WzJdPWVbMl0qYSx0fSx0Lm51bWJlcj1xZSx0Lm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1wdCx0Lm9ydGhvPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH0sdC5wYXJzZUdseXBoUEJGPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWwodCkucmVhZEZpZWxkcyhUbCxbXSl9LHQucGJmPWFsLHQucGVyZm9ybVN5bWJvbExheW91dD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt0LmNyZWF0ZUFycmF5cygpO3ZhciBzPTUxMip0Lm92ZXJzY2FsaW5nO3QudGlsZVBpeGVsUmF0aW89ODE5Mi9zLHQuY29tcGFyZVRleHQ9e30sdC5pY29uc05lZWRMaW5lYXI9ITE7dmFyIGw9dC5sYXllcnNbMF0ubGF5b3V0LGM9dC5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXMsdT17fTtpZigiY29tcG9zaXRlIj09PXQudGV4dFNpemVEYXRhLmtpbmQpe3ZhciBmPXQudGV4dFNpemVEYXRhLGg9Zi5taW5ab29tLHA9Zi5tYXhab29tO3UuY29tcG9zaXRlVGV4dFNpemVzPVtjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaShoKSxvKSxjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaShwKSxvKV19aWYoImNvbXBvc2l0ZSI9PT10Lmljb25TaXplRGF0YS5raW5kKXt2YXIgZD10Lmljb25TaXplRGF0YSxtPWQubWluWm9vbSxnPWQubWF4Wm9vbTt1LmNvbXBvc2l0ZUljb25TaXplcz1bY1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkobSksbyksY1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkoZyksbyldfXUubGF5b3V0VGV4dFNpemU9Y1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkodC56b29tKzEpLG8pLHUubGF5b3V0SWNvblNpemU9Y1siaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkodC56b29tKzEpLG8pLHUudGV4dE1heFNpemU9Y1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkoMTgpKTtmb3IodmFyIHY9MjQqbC5nZXQoInRleHQtbGluZS1oZWlnaHQiKSx5PSJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1sLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLHg9bC5nZXQoInRleHQta2VlcC11cHJpZ2h0IiksYj1sLmdldCgidGV4dC1zaXplIiksdz1mdW5jdGlvbigpe3ZhciBhPWtbVF0scz1sLmdldCgidGV4dC1mb250IikuZXZhbHVhdGUoYSx7fSxvKS5qb2luKCIsIiksYz1iLmV2YWx1YXRlKGEse30sbyksZj11LmxheW91dFRleHRTaXplLmV2YWx1YXRlKGEse30sbyksaD11LmxheW91dEljb25TaXplLmV2YWx1YXRlKGEse30sbykscD17aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp2b2lkIDB9LGQ9YS50ZXh0LG09WzAsMF07aWYoZCl7dmFyIGc9ZC50b1N0cmluZygpLHc9MjQqbC5nZXQoInRleHQtbGV0dGVyLXNwYWNpbmciKS5ldmFsdWF0ZShhLHt9LG8pLEE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoIVhuKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITF9cmV0dXJuITB9KGcpP3c6MCxNPWwuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKGEse30sbyksUz1sLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZighUyl7dmFyIEU9bC5nZXQoInRleHQtcmFkaWFsLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbyk7bT1FP2RjKE0sWzI0KkUscGNdKTpsLmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSl9dmFyIEw9eT8iY2VudGVyIjpsLmdldCgidGV4dC1qdXN0aWZ5IikuZXZhbHVhdGUoYSx7fSxvKSxDPWwuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUD0icG9pbnQiPT09Qz8yNCpsLmdldCgidGV4dC1tYXgtd2lkdGgiKS5ldmFsdWF0ZShhLHt9LG8pOjAsST1mdW5jdGlvbigpe3QuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmV24oZykmJihwLnZlcnRpY2FsPU9sKGQsZSxyLGkscyxQLHYsTSwibGVmdCIsQSxtLENsLnZlcnRpY2FsLCEwLEMsZixjKSl9O2lmKCF5JiZTKXtmb3IodmFyIE89ImF1dG8iPT09TD9TLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG1jKHQpfSkpOltMXSx6PSExLEQ9MDtEPE8ubGVuZ3RoO0QrKyl7dmFyIFI9T1tEXTtpZighcC5ob3Jpem9udGFsW1JdKWlmKHopcC5ob3Jpem9udGFsW1JdPXAuaG9yaXpvbnRhbFswXTtlbHNle3ZhciBGPU9sKGQsZSxyLGkscyxQLHYsImNlbnRlciIsUixBLG0sQ2wuaG9yaXpvbnRhbCwhMSxDLGYsYyk7RiYmKHAuaG9yaXpvbnRhbFtSXT1GLHo9MT09PUYucG9zaXRpb25lZExpbmVzLmxlbmd0aCl9fUkoKX1lbHNleyJhdXRvIj09PUwmJihMPW1jKE0pKTt2YXIgQj1PbChkLGUscixpLHMsUCx2LE0sTCxBLG0sQ2wuaG9yaXpvbnRhbCwhMSxDLGYsYyk7QiYmKHAuaG9yaXpvbnRhbFtMXT1CKSxJKCksV24oZykmJnkmJngmJihwLnZlcnRpY2FsPU9sKGQsZSxyLGkscyxQLHYsTSxMLEEsbSxDbC52ZXJ0aWNhbCwhMSxDLGYsYykpfX12YXIgTj12b2lkIDAsaj0hMTtpZihhLmljb24mJmEuaWNvbi5uYW1lKXt2YXIgVT1uW2EuaWNvbi5uYW1lXTtVJiYoTj1mdW5jdGlvbih0LGUscil7dmFyIG49VWwociksaT1uLmhvcml6b250YWxBbGlnbixhPW4udmVydGljYWxBbGlnbixvPWVbMF0scz1lWzFdLGw9by10LmRpc3BsYXlTaXplWzBdKmksYz1sK3QuZGlzcGxheVNpemVbMF0sdT1zLXQuZGlzcGxheVNpemVbMV0qYTtyZXR1cm57aW1hZ2U6dCx0b3A6dSxib3R0b206dSt0LmRpc3BsYXlTaXplWzFdLGxlZnQ6bCxyaWdodDpjfX0oaVthLmljb24ubmFtZV0sbC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoYSx7fSxvKSxsLmdldCgiaWNvbi1hbmNob3IiKS5ldmFsdWF0ZShhLHt9LG8pKSxqPVUuc2RmLHZvaWQgMD09PXQuc2RmSWNvbnM/dC5zZGZJY29ucz1VLnNkZjp0LnNkZkljb25zIT09VS5zZGYmJl8oIlN0eWxlIHNoZWV0IHdhcm5pbmc6IENhbm5vdCBtaXggU0RGIGFuZCBub24tU0RGIGljb25zIGluIG9uZSBidWZmZXIiKSwoVS5waXhlbFJhdGlvIT09dC5waXhlbFJhdGlvfHwwIT09bC5nZXQoImljb24tcm90YXRlIikuY29uc3RhbnRPcigxKSkmJih0Lmljb25zTmVlZExpbmVhcj0hMCkpfXZhciBWPXZjKHAuaG9yaXpvbnRhbCl8fHAudmVydGljYWw7dC5pY29uc0luVGV4dD0hIVYmJlYuaWNvbnNJblRleHQsKFZ8fE4pJiZmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPWEudGV4dE1heFNpemUuZXZhbHVhdGUoZSx7fSk7dm9pZCAwPT09ZiYmKGY9byk7dmFyIGgscD10LmxheWVyc1swXS5sYXlvdXQsZD1wLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShlLHt9LHUpLG09dmMoci5ob3Jpem9udGFsKSxnPW8vMjQsdj10LnRpbGVQaXhlbFJhdGlvKmcseT10LnRpbGVQaXhlbFJhdGlvKmYvMjQseD10LnRpbGVQaXhlbFJhdGlvKnMsYj10LnRpbGVQaXhlbFJhdGlvKnAuZ2V0KCJzeW1ib2wtc3BhY2luZyIpLHc9cC5nZXQoInRleHQtcGFkZGluZyIpKnQudGlsZVBpeGVsUmF0aW8sVD1wLmdldCgiaWNvbi1wYWRkaW5nIikqdC50aWxlUGl4ZWxSYXRpbyxrPXAuZ2V0KCJ0ZXh0LW1heC1hbmdsZSIpLzE4MCpNYXRoLlBJLEE9Im1hcCI9PT1wLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksTT0ibWFwIj09PXAuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09cC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxTPXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksRT1iLzIsTD1wLmdldCgiaWNvbi10ZXh0LWZpdCIpO24mJiJub25lIiE9PUwmJih0LmFsbG93VmVydGljYWxQbGFjZW1lbnQmJnIudmVydGljYWwmJihoPUhsKG4sci52ZXJ0aWNhbCxMLHAuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKSxkLGcpKSxtJiYobj1IbChuLG0sTCxwLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIiksZCxnKSkpO3ZhciBDPWZ1bmN0aW9uKHMsZil7Zi54PDB8fGYueD49ODE5Mnx8Zi55PDB8fGYueT49ODE5Mnx8ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsdyxULGssQSl7dmFyIE0sUyxFLEwsQyxQPXQuYWRkVG9MaW5lVmVydGV4QXJyYXkoZSxyKSxJPTAsTz0wLHo9MCxEPTAsUj0tMSxGPS0xLEI9e30sTj15YSgiIiksaj0wLFU9MDt2b2lkIDA9PT1zLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSgidGV4dC1yYWRpYWwtb2Zmc2V0Iik/KE09cy5sYXlvdXQuZ2V0KCJ0ZXh0LW9mZnNldCIpLmV2YWx1YXRlKGIse30saykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMjQqdH0pKSxqPU1bMF0sVT1NWzFdKTooaj0yNCpzLmxheW91dC5nZXQoInRleHQtcmFkaWFsLW9mZnNldCIpLmV2YWx1YXRlKGIse30sayksVT1wYyk7aWYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZuLnZlcnRpY2FsKXt2YXIgVj1zLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYix7fSxrKSs5MCxIPW4udmVydGljYWw7TD1uZXcgc2MobCxlLGMsdSxmLEgsaCxwLGQsViksbyYmKEM9bmV3IHNjKGwsZSxjLHUsZixvLGcsdixkLFYpKX1pZihpKXt2YXIgcT1zLmxheW91dC5nZXQoImljb24tcm90YXRlIikuZXZhbHVhdGUoYix7fSksRz0ibm9uZSIhPT1zLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSxZPXJjKGkscSxULEcpLFc9bz9yYyhvLHEsVCxHKTp2b2lkIDA7RT1uZXcgc2MobCxlLGMsdSxmLGksZyx2LCExLHEpLEk9NCpZLmxlbmd0aDt2YXIgWD10Lmljb25TaXplRGF0YSxaPW51bGw7InNvdXJjZSI9PT1YLmtpbmQ/KFo9WzEyOCpzLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmV2YWx1YXRlKGIse30pXSlbMF0+MzI2NDAmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKToiY29tcG9zaXRlIj09PVgua2luZCYmKChaPVsxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoYix7fSxrKSwxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoYix7fSxrKV0pWzBdPjMyNjQwfHxaWzFdPjMyNjQwKSYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAiaWNvbi1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJpY29uLXNpemUiLicpLHQuYWRkU3ltYm9scyh0Lmljb24sWSxaLHgseSxiLCExLGUsUC5saW5lU3RhcnRJbmRleCxQLmxpbmVMZW5ndGgsLTEsayksUj10Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEsVyYmKE89NCpXLmxlbmd0aCx0LmFkZFN5bWJvbHModC5pY29uLFcsWix4LHksYixDbC52ZXJ0aWNhbCxlLFAubGluZVN0YXJ0SW5kZXgsUC5saW5lTGVuZ3RoLC0xLGspLEY9dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xKX1mb3IodmFyIEogaW4gbi5ob3Jpem9udGFsKXt2YXIgSz1uLmhvcml6b250YWxbSl07aWYoIVMpe049eWEoSy50ZXh0KTt2YXIgUT1zLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYix7fSxrKTtTPW5ldyBzYyhsLGUsYyx1LGYsSyxoLHAsZCxRKX12YXIgJD0xPT09Sy5wb3NpdGlvbmVkTGluZXMubGVuZ3RoO2lmKHorPWdjKHQsZSxLLGEscyxkLGIsbSxQLG4udmVydGljYWw/Q2wuaG9yaXpvbnRhbDpDbC5ob3Jpem9udGFsT25seSwkP09iamVjdC5rZXlzKG4uaG9yaXpvbnRhbCk6W0pdLEIsUix3LGspLCQpYnJlYWt9bi52ZXJ0aWNhbCYmKEQrPWdjKHQsZSxuLnZlcnRpY2FsLGEscyxkLGIsbSxQLENsLnZlcnRpY2FsLFsidmVydGljYWwiXSxCLEYsdyxrKSk7dmFyIHR0PVM/Uy5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGV0PVM/Uy5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxydD1MP0wuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxudD1MP0wuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsaXQ9RT9FLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsYXQ9RT9FLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLG90PUM/Qy5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHN0PUM/Qy5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxsdD0tMSxjdD1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZ0LmNpcmNsZURpYW1ldGVyP01hdGgubWF4KHQuY2lyY2xlRGlhbWV0ZXIsZSk6ZX07bHQ9Y3QoUyxsdCksbHQ9Y3QoTCxsdCksbHQ9Y3QoRSxsdCk7dmFyIHV0PShsdD1jdChDLGx0KSk+LTE/MTowO3V0JiYobHQqPUEvMjQpO3QuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg+PU1jLk1BWF9HTFlQSFMmJl8oIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpO3ZvaWQgMCE9PWIuc29ydEtleSYmdC5hZGRUb1NvcnRLZXlSYW5nZXModC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLGIuc29ydEtleSk7dC5zeW1ib2xJbnN0YW5jZXMuZW1wbGFjZUJhY2soZS54LGUueSxCLnJpZ2h0Pj0wP0IucmlnaHQ6LTEsQi5jZW50ZXI+PTA/Qi5jZW50ZXI6LTEsQi5sZWZ0Pj0wP0IubGVmdDotMSxCLnZlcnRpY2FsfHwtMSxSLEYsTix0dCxldCxydCxudCxpdCxhdCxvdCxzdCxjLHosRCxJLE8sdXQsMCxoLGosVSxsdCl9KHQsZixzLHIsbixpLGgsdC5sYXllcnNbMF0sdC5jb2xsaXNpb25Cb3hBcnJheSxlLmluZGV4LGUuc291cmNlTGF5ZXJJbmRleCx0LmluZGV4LHYsdyxBLGwseCxULE0sZCxlLGEsYyx1LG8pfTtpZigibGluZSI9PT1TKWZvcih2YXIgUD0wLEk9ZWMoZS5nZW9tZXRyeSwwLDAsODE5Miw4MTkyKTtQPEkubGVuZ3RoO1ArPTEpZm9yKHZhciBPPUlbUF0sej10YyhPLGIsayxyLnZlcnRpY2FsfHxtLG4sMjQseSx0Lm92ZXJzY2FsaW5nLDgxOTIpLEQ9MCxSPXo7RDxSLmxlbmd0aDtEKz0xKXt2YXIgRj1SW0RdLEI9bTtCJiZ5Yyh0LEIudGV4dCxFLEYpfHxDKE8sRil9ZWxzZSBpZigibGluZS1jZW50ZXIiPT09Uylmb3IodmFyIE49MCxqPWUuZ2VvbWV0cnk7TjxqLmxlbmd0aDtOKz0xKXt2YXIgVT1qW05dO2lmKFUubGVuZ3RoPjEpe3ZhciBWPSRsKFUsayxyLnZlcnRpY2FsfHxtLG4sMjQseSk7ViYmQyhVLFYpfX1lbHNlIGlmKCJQb2x5Z29uIj09PWUudHlwZSlmb3IodmFyIEg9MCxxPWhzKGUuZ2VvbWV0cnksMCk7SDxxLmxlbmd0aDtIKz0xKXt2YXIgRz1xW0hdLFk9dWMoRywxNik7QyhHWzBdLG5ldyBxbChZLngsWS55LDApKX1lbHNlIGlmKCJMaW5lU3RyaW5nIj09PWUudHlwZSlmb3IodmFyIFc9MCxYPWUuZ2VvbWV0cnk7VzxYLmxlbmd0aDtXKz0xKXt2YXIgWj1YW1ddO0MoWixuZXcgcWwoWlswXS54LFpbMF0ueSwwKSl9ZWxzZSBpZigiUG9pbnQiPT09ZS50eXBlKWZvcih2YXIgSj0wLEs9ZS5nZW9tZXRyeTtKPEsubGVuZ3RoO0orPTEpZm9yKHZhciBRPUtbSl0sJD0wLHR0PVE7JDx0dC5sZW5ndGg7JCs9MSl7dmFyIGV0PXR0WyRdO0MoW2V0XSxuZXcgcWwoZXQueCxldC55LDApKX19KHQsYSxwLE4sbix1LGYsaCxtLGosbyl9LFQ9MCxrPXQuZmVhdHVyZXM7VDxrLmxlbmd0aDtUKz0xKXcoKTthJiZ0LmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCl9LHQucGVyc3BlY3RpdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPTEvTWF0aC50YW4oZS8yKTtyZXR1cm4gdFswXT1vL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09byx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTVdPTAsbnVsbCE9aSYmaSE9PTEvMD8oYT0xLyhuLWkpLHRbMTBdPShpK24pKmEsdFsxNF09MippKm4qYSk6KHRbMTBdPS0xLHRbMTRdPS0yKm4pLHR9LHQucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sdC5wbHVnaW49aGksdC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249WmEsdC5wb3N0TWFwTG9hZEV2ZW50PWl0LHQucG9zdFR1cm5zdGlsZUV2ZW50PXJ0LHQucG90cGFjaz1NbCx0LnJlZlByb3BlcnRpZXM9WyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwibWluem9vbSIsIm1heHpvb20iLCJmaWx0ZXIiLCJsYXlvdXQiXSx0LnJlZ2lzdGVyPU5uLHQucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdCh7cGx1Z2luU3RhdHVzOmFpLHBsdWdpblVSTDpvaX0pLGNpLm9uKCJwbHVnaW5TdGF0ZUNoYW5nZSIsdCksdH0sdC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSx0LnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStmKm4sdFs3XT1sKmkraCpuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09ZippLXMqbix0WzExXT1oKmktbCpuLHR9LHQucm90YXRlWj1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH0sdC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sdC5zY2FsZSQxPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH0sdC5zY2FsZSQyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH0sdC5zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbih0LGUpe2F0PXQsb3Q9ZX0sdC5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksYWk9PT10aXx8YWk9PT1laXx8YWk9PT1yaSl0aHJvdyBuZXcgRXJyb3IoInNldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4iKTtvaT1SLnJlc29sdmVVUkwodCksYWk9dGksaWk9ZSxsaSgpLHJ8fGZpKCl9LHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiByKz05MCxyKj1NYXRoLlBJLzE4MCxuKj1NYXRoLlBJLzE4MCx7eDplKk1hdGguY29zKHIpKk1hdGguc2luKG4pLHk6ZSpNYXRoLnNpbihyKSpNYXRoLnNpbihuKSx6OmUqTWF0aC5jb3Mobil9fSx0LnNxckxlbj1ibyx0LnN0eWxlU3BlYz1MdCx0LnN1Yj15byx0LnN5bWJvbFNpemU9WGwsdC50cmFuc2Zvcm1NYXQzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl07cmV0dXJuIHRbMF09bipyWzBdK2kqclszXSthKnJbNl0sdFsxXT1uKnJbMV0raSpyWzRdK2Eqcls3XSx0WzJdPW4qclsyXStpKnJbNV0rYSpyWzhdLHR9LHQudHJhbnNmb3JtTWF0ND14byx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG09clswXSxnPXJbMV0sdj1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSptK2VbNF0qZytlWzhdKnYrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qZytlWzldKnYrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qZytlWzEwXSp2K2VbMTRdLHRbMTVdPWVbM10qbStlWzddKmcrZVsxMV0qditlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWYsdFs5XT1oLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKm0rcypnK2YqditlWzEyXSx0WzEzXT1pKm0rbCpnK2gqditlWzEzXSx0WzE0XT1hKm0rYypnK3AqditlWzE0XSx0WzE1XT1vKm0rdSpnK2QqditlWzE1XSksdH0sdC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50PXNpLHQudW5pcXVlSWQ9aCx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQuaWQ7cmV0dXJuIHZvaWQgMD09PXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJpZCInfSksdm9pZCAwPT09dC5yZW5kZXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCAicmVuZGVyIid9KSx0LnJlbmRlcmluZ01vZGUmJiIyZCIhPT10LnJlbmRlcmluZ01vZGUmJiIzZCIhPT10LnJlbmRlcmluZ01vZGUmJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBwcm9wZXJ0eSAicmVuZGVyaW5nTW9kZSIgbXVzdCBiZSBlaXRoZXIgIjJkIiBvciAiM2QiJ30pLGV9LHQudmFsaWRhdGVMaWdodD1Dbix0LnZhbGlkYXRlU3R5bGU9TG4sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LnZlY3RvclRpbGU9THMsdC52ZXJzaW9uPSIxLjEwLjEiLHQud2Fybk9uY2U9Xyx0LndlYnBTdXBwb3J0ZWQ9Qix0LndpbmRvdz1zZWxmLHQud3JhcD1jfSkpLG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZigibnVtYmVyIj09PXJ8fCJib29sZWFuIj09PXJ8fCJzdHJpbmciPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPSJbIixpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7bis9ZShhW2ldKSsiLCJ9cmV0dXJuIG4rIl0ifWZvcih2YXIgbz1PYmplY3Qua2V5cyh0KS5zb3J0KCkscz0ieyIsbD0wO2w8by5sZW5ndGg7bCsrKXMrPUpTT04uc3RyaW5naWZ5KG9bbF0pKyI6IitlKHRbb1tsXV0pKyIsIjtyZXR1cm4gcysifSJ9ZnVuY3Rpb24gcihyKXtmb3IodmFyIG49IiIsaT0wLGE9dC5yZWZQcm9wZXJ0aWVzO2k8YS5sZW5ndGg7aSs9MSl7bis9Ii8iK2UoclthW2ldXSl9cmV0dXJuIG59dmFyIG49ZnVuY3Rpb24odCl7dGhpcy5rZXlDYWNoZT17fSx0JiZ0aGlzLnJlcGxhY2UodCl9O24ucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCl7dGhpcy5fbGF5ZXJDb25maWdzPXt9LHRoaXMuX2xheWVycz17fSx0aGlzLnVwZGF0ZSh0LFtdKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPXRoaXMsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07dGhpcy5fbGF5ZXJDb25maWdzW3MuaWRdPXM7dmFyIGw9dGhpcy5fbGF5ZXJzW3MuaWRdPXQuY3JlYXRlU3R5bGVMYXllcihzKTtsLl9mZWF0dXJlRmlsdGVyPXQuZmVhdHVyZUZpbHRlcihsLmZpbHRlciksdGhpcy5rZXlDYWNoZVtzLmlkXSYmZGVsZXRlIHRoaXMua2V5Q2FjaGVbcy5pZF19Zm9yKHZhciBjPTAsdT1uO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXTtkZWxldGUgdGhpcy5rZXlDYWNoZVtmXSxkZWxldGUgdGhpcy5fbGF5ZXJDb25maWdzW2ZdLGRlbGV0ZSB0aGlzLl9sYXllcnNbZl19dGhpcy5mYW1pbGllc0J5U291cmNlPXt9O2Zvcih2YXIgaD0wLHA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49e30saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lJiZlW3RbaV0uaWRdfHxyKHRbaV0pO2UmJihlW3RbaV0uaWRdPWEpO3ZhciBvPW5bYV07b3x8KG89blthXT1bXSksby5wdXNoKHRbaV0pfXZhciBzPVtdO2Zvcih2YXIgbCBpbiBuKXMucHVzaChuW2xdKTtyZXR1cm4gc30odC52YWx1ZXModGhpcy5fbGF5ZXJDb25maWdzKSx0aGlzLmtleUNhY2hlKTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaS5fbGF5ZXJzW3QuaWRdfSkpLG09ZFswXTtpZigibm9uZSIhPT1tLnZpc2liaWxpdHkpe3ZhciBnPW0uc291cmNlfHwiIix2PXRoaXMuZmFtaWxpZXNCeVNvdXJjZVtnXTt2fHwodj10aGlzLmZhbWlsaWVzQnlTb3VyY2VbZ109e30pO3ZhciB5PW0uc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIseD12W3ldO3h8fCh4PXZbeV09W10pLHgucHVzaChkKX19fTt2YXIgaT1mdW5jdGlvbihlKXt2YXIgcj17fSxuPVtdO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1lW2ldLG89cltpXT17fTtmb3IodmFyIHMgaW4gYSl7dmFyIGw9YVsrc107aWYobCYmMCE9PWwuYml0bWFwLndpZHRoJiYwIT09bC5iaXRtYXAuaGVpZ2h0KXt2YXIgYz17eDowLHk6MCx3OmwuYml0bWFwLndpZHRoKzIsaDpsLmJpdG1hcC5oZWlnaHQrMn07bi5wdXNoKGMpLG9bc109e3JlY3Q6YyxtZXRyaWNzOmwubWV0cmljc319fX12YXIgdT10LnBvdHBhY2sobiksZj11LncsaD11LmgscD1uZXcgdC5BbHBoYUltYWdlKHt3aWR0aDpmfHwxLGhlaWdodDpofHwxfSk7Zm9yKHZhciBkIGluIGUpe3ZhciBtPWVbZF07Zm9yKHZhciBnIGluIG0pe3ZhciB2PW1bK2ddO2lmKHYmJjAhPT12LmJpdG1hcC53aWR0aCYmMCE9PXYuYml0bWFwLmhlaWdodCl7dmFyIHk9cltkXVtnXS5yZWN0O3QuQWxwaGFJbWFnZS5jb3B5KHYuYml0bWFwLHAse3g6MCx5OjB9LHt4OnkueCsxLHk6eS55KzF9LHYuYml0bWFwKX19fXRoaXMuaW1hZ2U9cCx0aGlzLnBvc2l0aW9ucz1yfTt0LnJlZ2lzdGVyKCJHbHlwaEF0bGFzIixpKTt2YXIgYT1mdW5jdGlvbihlKXt0aGlzLnRpbGVJRD1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUudGlsZUlELm92ZXJzY2FsZWRaLGUudGlsZUlELndyYXAsZS50aWxlSUQuY2Fub25pY2FsLnosZS50aWxlSUQuY2Fub25pY2FsLngsZS50aWxlSUQuY2Fub25pY2FsLnkpLHRoaXMudWlkPWUudWlkLHRoaXMuem9vbT1lLnpvb20sdGhpcy5waXhlbFJhdGlvPWUucGl4ZWxSYXRpbyx0aGlzLnRpbGVTaXplPWUudGlsZVNpemUsdGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5vdmVyc2NhbGluZz10aGlzLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcz1lLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hIWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzPSEhZS5yZXR1cm5EZXBlbmRlbmNpZXMsdGhpcy5wcm9tb3RlSWQ9ZS5wcm9tb3RlSWR9O2Z1bmN0aW9uIG8oZSxyLG4pe2Zvcih2YXIgaT1uZXcgdC5FdmFsdWF0aW9uUGFyYW1ldGVycyhyKSxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7b1thXS5yZWNhbGN1bGF0ZShpLG4pfX1mdW5jdGlvbiBzKGUscil7dmFyIG49dC5nZXRBcnJheUJ1ZmZlcihlLnJlcXVlc3QsKGZ1bmN0aW9uKGUsbixpLGEpe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQudmVjdG9yVGlsZS5WZWN0b3JUaWxlKG5ldyB0LnBiZihuKSkscmF3RGF0YTpuLGNhY2hlQ29udHJvbDppLGV4cGlyZXM6YX0pfSkpO3JldHVybiBmdW5jdGlvbigpe24uY2FuY2VsKCkscigpfX1hLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHIsbixhLHMpe3ZhciBsPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIGM9bmV3IHQuRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHU9bmV3IHQuRmVhdHVyZUluZGV4KHRoaXMudGlsZUlELHRoaXMucHJvbW90ZUlkKTt1LmJ1Y2tldExheWVySURzPVtdO3ZhciBmLGgscCxkLG09e30sZz17ZmVhdHVyZUluZGV4OnUsaWNvbkRlcGVuZGVuY2llczp7fSxwYXR0ZXJuRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9LGF2YWlsYWJsZUltYWdlczpufSx2PXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciB5IGluIHYpe3ZhciB4PWUubGF5ZXJzW3ldO2lmKHgpezE9PT14LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSAiJyt0aGlzLnNvdXJjZSsnIiBsYXllciAiJyt5KyciIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgYj1jLmVuY29kZSh5KSxfPVtdLHc9MDt3PHgubGVuZ3RoO3crKyl7dmFyIFQ9eC5mZWF0dXJlKHcpLGs9dS5nZXRJZChULHkpO18ucHVzaCh7ZmVhdHVyZTpULGlkOmssaW5kZXg6dyxzb3VyY2VMYXllckluZGV4OmJ9KX1mb3IodmFyIEE9MCxNPXZbeV07QTxNLmxlbmd0aDtBKz0xKXt2YXIgUz1NW0FdLEU9U1swXTtpZighKEUubWluem9vbSYmdGhpcy56b29tPE1hdGguZmxvb3IoRS5taW56b29tKSkpaWYoIShFLm1heHpvb20mJnRoaXMuem9vbT49RS5tYXh6b29tKSlpZigibm9uZSIhPT1FLnZpc2liaWxpdHkpbyhTLHRoaXMuem9vbSxuKSwobVtFLmlkXT1FLmNyZWF0ZUJ1Y2tldCh7aW5kZXg6dS5idWNrZXRMYXllcklEcy5sZW5ndGgsbGF5ZXJzOlMsem9vbTp0aGlzLnpvb20scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW8sb3ZlcnNjYWxpbmc6dGhpcy5vdmVyc2NhbGluZyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LHNvdXJjZUxheWVySW5kZXg6Yixzb3VyY2VJRDp0aGlzLnNvdXJjZX0pKS5wb3B1bGF0ZShfLGcsdGhpcy50aWxlSUQuY2Fub25pY2FsKSx1LmJ1Y2tldExheWVySURzLnB1c2goUy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKX19fXZhciBMPXQubWFwT2JqZWN0KGcuZ2x5cGhEZXBlbmRlbmNpZXMsKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoTnVtYmVyKX0pKTtPYmplY3Qua2V5cyhMKS5sZW5ndGg/YS5zZW5kKCJnZXRHbHlwaHMiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOkx9LChmdW5jdGlvbih0LGUpe2Z8fChmPXQsaD1lLEkuY2FsbChsKSl9KSk6aD17fTt2YXIgQz1PYmplY3Qua2V5cyhnLmljb25EZXBlbmRlbmNpZXMpO0MubGVuZ3RoP2Euc2VuZCgiZ2V0SW1hZ2VzIix7aWNvbnM6Qyxzb3VyY2U6dGhpcy5zb3VyY2UsdGlsZUlEOnRoaXMudGlsZUlELHR5cGU6Imljb25zIn0sKGZ1bmN0aW9uKHQsZSl7Znx8KGY9dCxwPWUsSS5jYWxsKGwpKX0pKTpwPXt9O3ZhciBQPU9iamVjdC5rZXlzKGcucGF0dGVybkRlcGVuZGVuY2llcyk7ZnVuY3Rpb24gSSgpe2lmKGYpcmV0dXJuIHMoZik7aWYoaCYmcCYmZCl7dmFyIGU9bmV3IGkoaCkscj1uZXcgdC5JbWFnZUF0bGFzKHAsZCk7Zm9yKHZhciBhIGluIG0pe3ZhciBsPW1bYV07bCBpbnN0YW5jZW9mIHQuU3ltYm9sQnVja2V0PyhvKGwubGF5ZXJzLHRoaXMuem9vbSxuKSx0LnBlcmZvcm1TeW1ib2xMYXlvdXQobCxoLGUucG9zaXRpb25zLHAsci5pY29uUG9zaXRpb25zLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMudGlsZUlELmNhbm9uaWNhbCkpOmwuaGFzUGF0dGVybiYmKGwgaW5zdGFuY2VvZiB0LkxpbmVCdWNrZXR8fGwgaW5zdGFuY2VvZiB0LkZpbGxCdWNrZXR8fGwgaW5zdGFuY2VvZiB0LkZpbGxFeHRydXNpb25CdWNrZXQpJiYobyhsLmxheWVycyx0aGlzLnpvb20sbiksbC5hZGRGZWF0dXJlcyhnLHRoaXMudGlsZUlELmNhbm9uaWNhbCxyLnBhdHRlcm5Qb3NpdGlvbnMpKX10aGlzLnN0YXR1cz0iZG9uZSIscyhudWxsLHtidWNrZXRzOnQudmFsdWVzKG0pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSkpLGZlYXR1cmVJbmRleDp1LGNvbGxpc2lvbkJveEFycmF5OnRoaXMuY29sbGlzaW9uQm94QXJyYXksZ2x5cGhBdGxhc0ltYWdlOmUuaW1hZ2UsaW1hZ2VBdGxhczpyLGdseXBoTWFwOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP2g6bnVsbCxpY29uTWFwOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP3A6bnVsbCxnbHlwaFBvc2l0aW9uczp0aGlzLnJldHVybkRlcGVuZGVuY2llcz9lLnBvc2l0aW9uczpudWxsfSl9fVAubGVuZ3RoP2Euc2VuZCgiZ2V0SW1hZ2VzIix7aWNvbnM6UCxzb3VyY2U6dGhpcy5zb3VyY2UsdGlsZUlEOnRoaXMudGlsZUlELHR5cGU6InBhdHRlcm5zIn0sKGZ1bmN0aW9uKHQsZSl7Znx8KGY9dCxkPWUsSS5jYWxsKGwpKX0pKTpkPXt9LEkuY2FsbCh0aGlzKX07dmFyIGw9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5hY3Rvcj10LHRoaXMubGF5ZXJJbmRleD1lLHRoaXMuYXZhaWxhYmxlSW1hZ2VzPXIsdGhpcy5sb2FkVmVjdG9yRGF0YT1ufHxzLHRoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07bC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS51aWQ7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXt9KTt2YXIgbz0hIShlJiZlLnJlcXVlc3QmJmUucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpJiZuZXcgdC5SZXF1ZXN0UGVyZm9ybWFuY2UoZS5yZXF1ZXN0KSxzPXRoaXMubG9hZGluZ1tpXT1uZXcgYShlKTtzLmFib3J0PXRoaXMubG9hZFZlY3RvckRhdGEoZSwoZnVuY3Rpb24oZSxhKXtpZihkZWxldGUgbi5sb2FkaW5nW2ldLGV8fCFhKXJldHVybiBzLnN0YXR1cz0iZG9uZSIsbi5sb2FkZWRbaV09cyxyKGUpO3ZhciBsPWEucmF3RGF0YSxjPXt9O2EuZXhwaXJlcyYmKGMuZXhwaXJlcz1hLmV4cGlyZXMpLGEuY2FjaGVDb250cm9sJiYoYy5jYWNoZUNvbnRyb2w9YS5jYWNoZUNvbnRyb2wpO3ZhciB1PXt9O2lmKG8pe3ZhciBmPW8uZmluaXNoKCk7ZiYmKHUucmVzb3VyY2VUaW1pbmc9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmKSkpfXMudmVjdG9yVGlsZT1hLnZlY3RvclRpbGUscy5wYXJzZShhLnZlY3RvclRpbGUsbi5sYXllckluZGV4LG4uYXZhaWxhYmxlSW1hZ2VzLG4uYWN0b3IsKGZ1bmN0aW9uKGUsbil7aWYoZXx8IW4pcmV0dXJuIHIoZSk7cihudWxsLHQuZXh0ZW5kKHtyYXdUaWxlRGF0YTpsLnNsaWNlKDApfSxuLGMsdSkpfSkpLG4ubG9hZGVkPW4ubG9hZGVkfHx7fSxuLmxvYWRlZFtpXT1zfSkpfSxsLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXRoaXMubG9hZGVkLGk9dC51aWQsYT10aGlzO2lmKG4mJm5baV0pe3ZhciBvPW5baV07by5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXM7dmFyIHM9ZnVuY3Rpb24odCxuKXt2YXIgaT1vLnJlbG9hZENhbGxiYWNrO2kmJihkZWxldGUgby5yZWxvYWRDYWxsYmFjayxvLnBhcnNlKG8udmVjdG9yVGlsZSxhLmxheWVySW5kZXgsci5hdmFpbGFibGVJbWFnZXMsYS5hY3RvcixpKSksZSh0LG4pfTsicGFyc2luZyI9PT1vLnN0YXR1cz9vLnJlbG9hZENhbGxiYWNrPXM6ImRvbmUiPT09by5zdGF0dXMmJihvLnZlY3RvclRpbGU/by5wYXJzZShvLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYXZhaWxhYmxlSW1hZ2VzLHRoaXMuYWN0b3Iscyk6cygpKX19LGwucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGluZyxuPXQudWlkO3ImJnJbbl0mJnJbbl0uYWJvcnQmJihyW25dLmFib3J0KCksZGVsZXRlIHJbbl0pLGUoKX0sbC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQ7ciYmcltuXSYmZGVsZXRlIHJbbl0sZSgpfTt2YXIgYz10LndpbmRvdy5JbWFnZUJpdG1hcCx1PWZ1bmN0aW9uKCl7dGhpcy5sb2FkZWQ9e319O3UucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ZS51aWQsaT1lLmVuY29kaW5nLGE9ZS5yYXdJbWFnZURhdGEsbz1jJiZhIGluc3RhbmNlb2YgYz90aGlzLmdldEltYWdlRGF0YShhKTphLHM9bmV3IHQuREVNRGF0YShuLG8saSk7dGhpcy5sb2FkZWQ9dGhpcy5sb2FkZWR8fHt9LHRoaXMubG9hZGVkW25dPXMscihudWxsLHMpfSx1LnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oZSl7dGhpcy5vZmZzY3JlZW5DYW52YXMmJnRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dHx8KHRoaXMub2Zmc2NyZWVuQ2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoZS53aWR0aCxlLmhlaWdodCksdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0PXRoaXMub2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoIjJkIikpLHRoaXMub2Zmc2NyZWVuQ2FudmFzLndpZHRoPWUud2lkdGgsdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCk7dmFyIHI9dGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgtMSwtMSxlLndpZHRoKzIsZS5oZWlnaHQrMik7cmV0dXJuIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMub2Zmc2NyZWVuQ2FudmFzLndpZHRoLHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodCksbmV3IHQuUkdCQUltYWdlKHt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sci5kYXRhKX0sdS5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZCxyPXQudWlkO2UmJmVbcl0mJmRlbGV0ZSBlW3JdfTt2YXIgZj1mdW5jdGlvbiB0KGUscil7dmFyIG4saT1lJiZlLnR5cGU7aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZmVhdHVyZXMubGVuZ3RoO24rKyl0KGUuZmVhdHVyZXNbbl0scik7ZWxzZSBpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZ2VvbWV0cmllcy5sZW5ndGg7bisrKXQoZS5nZW9tZXRyaWVzW25dLHIpO2Vsc2UgaWYoIkZlYXR1cmUiPT09aSl0KGUuZ2VvbWV0cnkscik7ZWxzZSBpZigiUG9seWdvbiI9PT1pKWgoZS5jb29yZGluYXRlcyxyKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aSlmb3Iobj0wO248ZS5jb29yZGluYXRlcy5sZW5ndGg7bisrKWgoZS5jb29yZGluYXRlc1tuXSxyKTtyZXR1cm4gZX07ZnVuY3Rpb24gaCh0LGUpe2lmKDAhPT10Lmxlbmd0aCl7cCh0WzBdLGUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXAodFtyXSwhZSl9fWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMTtuPGk7YT1uKyspcis9KHRbbl1bMF0tdFthXVswXSkqKHRbYV1bMV0rdFtuXVsxXSk7cj49MCE9ISFlJiZ0LnJldmVyc2UoKX12YXIgZD10LnZlY3RvclRpbGUuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTixtPWZ1bmN0aW9uKGUpe3RoaXMuX2ZlYXR1cmU9ZSx0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMucHJvcGVydGllcz1lLnRhZ3MsImlkImluIGUmJiFpc05hTihlLmlkKSYmKHRoaXMuaWQ9cGFyc2VJbnQoZS5pZCwxMCkpfTttLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXtpZigxPT09dGhpcy5fZmVhdHVyZS50eXBlKXtmb3IodmFyIGU9W10scj0wLG49dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5wdXNoKFtuZXcgdC5Qb2ludCQxKGlbMF0saVsxXSldKX1yZXR1cm4gZX1mb3IodmFyIGE9W10sbz0wLHM9dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtvPHMubGVuZ3RoO28rPTEpe2Zvcih2YXIgbD1bXSxjPTAsdT1zW29dO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXTtsLnB1c2gobmV3IHQuUG9pbnQkMShmWzBdLGZbMV0pKX1hLnB1c2gobCl9cmV0dXJuIGF9LG0ucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQuY2FsbCh0aGlzLHQsZSxyKX07dmFyIGc9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuZXh0ZW50PXQuRVhURU5ULHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O2cucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIHY9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLHk9eDtmdW5jdGlvbiB4KHQsZSl7dGhpcy5vcHRpb25zPWV8fHt9LHRoaXMuZmVhdHVyZXM9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH1mdW5jdGlvbiBiKHQsZSl7dGhpcy5pZD0ibnVtYmVyIj09dHlwZW9mIHQuaWQ/dC5pZDp2b2lkIDAsdGhpcy50eXBlPXQudHlwZSx0aGlzLnJhd0dlb21ldHJ5PTE9PT10LnR5cGU/W3QuZ2VvbWV0cnldOnQuZ2VvbWV0cnksdGhpcy5wcm9wZXJ0aWVzPXQudGFncyx0aGlzLmV4dGVudD1lfHw0MDk2fXgucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBiKHRoaXMuZmVhdHVyZXNbdF0sdGhpcy5vcHRpb25zLmV4dGVudCl9LGIucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPWVbcl0saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKG5ldyB0LlBvaW50JDEoblthXVswXSxuW2FdWzFdKSk7dGhpcy5nZW9tZXRyeS5wdXNoKGkpfXJldHVybiB0aGlzLmdlb21ldHJ5fSxiLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeXx8dGhpcy5sb2FkR2VvbWV0cnkoKTtmb3IodmFyIHQ9dGhpcy5nZW9tZXRyeSxlPTEvMCxyPS0xLzAsbj0xLzAsaT0tMS8wLGE9MDthPHQubGVuZ3RoO2ErKylmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107ZT1NYXRoLm1pbihlLGwueCkscj1NYXRoLm1heChyLGwueCksbj1NYXRoLm1pbihuLGwueSksaT1NYXRoLm1heChpLGwueSl9cmV0dXJuW2UsbixyLGldfSxiLnByb3RvdHlwZS50b0dlb0pTT049di5wcm90b3R5cGUudG9HZW9KU09OO3ZhciBfPUEsdz1BLFQ9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXJbbl09bmV3IHkodFtuXS5mZWF0dXJlcyxlKSxyW25dLm5hbWU9bixyW25dLnZlcnNpb249ZS52ZXJzaW9uLHJbbl0uZXh0ZW50PWUuZXh0ZW50O3JldHVybiBBKHtsYXllcnM6cn0pfSxrPXk7ZnVuY3Rpb24gQShlKXt2YXIgcj1uZXcgdC5wYmY7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQubGF5ZXJzKWUud3JpdGVNZXNzYWdlKDMsTSx0LmxheWVyc1tyXSl9KGUsciksci5maW5pc2goKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI7ZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbnx8MSksZS53cml0ZVN0cmluZ0ZpZWxkKDEsdC5uYW1lfHwiIiksZS53cml0ZVZhcmludEZpZWxkKDUsdC5leHRlbnR8fDQwOTYpO3ZhciBuPXtrZXlzOltdLHZhbHVlczpbXSxrZXljYWNoZTp7fSx2YWx1ZWNhY2hlOnt9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW4uZmVhdHVyZT10LmZlYXR1cmUociksZS53cml0ZU1lc3NhZ2UoMixTLG4pO3ZhciBpPW4ua2V5cztmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUud3JpdGVTdHJpbmdGaWVsZCgzLGlbcl0pO3ZhciBhPW4udmFsdWVzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZU1lc3NhZ2UoNCxJLGFbcl0pfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10LmZlYXR1cmU7dm9pZCAwIT09ci5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsci5pZCksZS53cml0ZU1lc3NhZ2UoMixFLHQpLGUud3JpdGVWYXJpbnRGaWVsZCgzLHIudHlwZSksZS53cml0ZU1lc3NhZ2UoNCxQLHIpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10LmZlYXR1cmUsbj10LmtleXMsaT10LnZhbHVlcyxhPXQua2V5Y2FjaGUsbz10LnZhbHVlY2FjaGU7Zm9yKHZhciBzIGluIHIucHJvcGVydGllcyl7dmFyIGw9YVtzXTt2b2lkIDA9PT1sJiYobi5wdXNoKHMpLGw9bi5sZW5ndGgtMSxhW3NdPWwpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7InN0cmluZyIhPT11JiYiYm9vbGVhbiIhPT11JiYibnVtYmVyIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgZj11KyI6IitjLGg9b1tmXTt2b2lkIDA9PT1oJiYoaS5wdXNoKGMpLGg9aS5sZW5ndGgtMSxvW2ZdPWgpLGUud3JpdGVWYXJpbnQoaCl9fWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiBQKHQsZSl7Zm9yKHZhciByPXQubG9hZEdlb21ldHJ5KCksbj10LnR5cGUsaT0wLGE9MCxvPXIubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1yW3NdLGM9MTsxPT09biYmKGM9bC5sZW5ndGgpLGUud3JpdGVWYXJpbnQoTCgxLGMpKTtmb3IodmFyIHU9Mz09PW4/bC5sZW5ndGgtMTpsLmxlbmd0aCxmPTA7Zjx1O2YrKyl7MT09PWYmJjEhPT1uJiZlLndyaXRlVmFyaW50KEwoMix1LTEpKTt2YXIgaD1sW2ZdLngtaSxwPWxbZl0ueS1hO2Uud3JpdGVWYXJpbnQoQyhoKSksZS53cml0ZVZhcmludChDKHApKSxpKz1oLGErPXB9Mz09PW4mJmUud3JpdGVWYXJpbnQoTCg3LDEpKX19ZnVuY3Rpb24gSSh0LGUpe3ZhciByPXR5cGVvZiB0OyJzdHJpbmciPT09cj9lLndyaXRlU3RyaW5nRmllbGQoMSx0KToiYm9vbGVhbiI9PT1yP2Uud3JpdGVCb29sZWFuRmllbGQoNyx0KToibnVtYmVyIj09PXImJih0JTEhPTA/ZS53cml0ZURvdWJsZUZpZWxkKDMsdCk6dDwwP2Uud3JpdGVTVmFyaW50RmllbGQoNix0KTplLndyaXRlVmFyaW50RmllbGQoNSx0KSl9ZnVuY3Rpb24gTyh0LGUscixuLGksYSl7aWYoIShpLW48PXIpKXt2YXIgbz1uK2k+PjE7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2Zvcig7YT5pOyl7aWYoYS1pPjYwMCl7dmFyIHM9YS1pKzEsbD1uLWkrMSxjPU1hdGgubG9nKHMpLHU9LjUqTWF0aC5leHAoMipjLzMpLGY9LjUqTWF0aC5zcXJ0KGMqdSoocy11KS9zKSoobC1zLzI8MD8tMToxKSxoPU1hdGgubWF4KGksTWF0aC5mbG9vcihuLWwqdS9zK2YpKSxwPU1hdGgubWluKGEsTWF0aC5mbG9vcihuKyhzLWwpKnUvcytmKSk7dChlLHIsbixoLHAsbyl9dmFyIGQ9clsyKm4rb10sbT1pLGc9YTtmb3IoeihlLHIsaSxuKSxyWzIqYStvXT5kJiZ6KGUscixpLGEpO208Zzspe2Zvcih6KGUscixtLGcpLG0rKyxnLS07clsyKm0rb108ZDspbSsrO2Zvcig7clsyKmcrb10+ZDspZy0tfXJbMippK29dPT09ZD96KGUscixpLGcpOihnKysseihlLHIsZyxhKSksZzw9biYmKGk9ZysxKSxuPD1nJiYoYT1nLTEpfX0odCxlLG8sbixpLGElMiksTyh0LGUscixuLG8tMSxhKzEpLE8odCxlLHIsbysxLGksYSsxKX19ZnVuY3Rpb24geih0LGUscixuKXtEKHQscixuKSxEKGUsMipyLDIqbiksRChlLDIqcisxLDIqbisxKX1mdW5jdGlvbiBEKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10LXIsYT1lLW47cmV0dXJuIGkqaSthKmF9Xy5mcm9tVmVjdG9yVGlsZUpzPXcsXy5mcm9tR2VvanNvblZ0PVQsXy5HZW9KU09OV3JhcHBlcj1rO3ZhciBGPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSxCPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdfSxOPWZ1bmN0aW9uKHQsZSxyLG4saSl7dm9pZCAwPT09ZSYmKGU9Riksdm9pZCAwPT09ciYmKHI9Qiksdm9pZCAwPT09biYmKG49NjQpLHZvaWQgMD09PWkmJihpPUZsb2F0NjRBcnJheSksdGhpcy5ub2RlU2l6ZT1uLHRoaXMucG9pbnRzPXQ7Zm9yKHZhciBhPXQubGVuZ3RoPDY1NTM2P1VpbnQxNkFycmF5OlVpbnQzMkFycmF5LG89dGhpcy5pZHM9bmV3IGEodC5sZW5ndGgpLHM9dGhpcy5jb29yZHM9bmV3IGkoMip0Lmxlbmd0aCksbD0wO2w8dC5sZW5ndGg7bCsrKW9bbF09bCxzWzIqbF09ZSh0W2xdKSxzWzIqbCsxXT1yKHRbbF0pO08obyxzLG4sMCxvLmxlbmd0aC0xLDApfTtOLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsYz1bMCx0Lmxlbmd0aC0xLDBdLHU9W107Yy5sZW5ndGg7KXt2YXIgZj1jLnBvcCgpLGg9Yy5wb3AoKSxwPWMucG9wKCk7aWYoaC1wPD1vKWZvcih2YXIgZD1wO2Q8PWg7ZCsrKXM9ZVsyKmRdLGw9ZVsyKmQrMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbZF0pO2Vsc2V7dmFyIG09TWF0aC5mbG9vcigocCtoKS8yKTtzPWVbMiptXSxsPWVbMiptKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W21dKTt2YXIgZz0oZisxKSUyOygwPT09Zj9yPD1zOm48PWwpJiYoYy5wdXNoKHApLGMucHVzaChtLTEpLGMucHVzaChnKSksKDA9PT1mP2k+PXM6YT49bCkmJihjLnB1c2gobSsxKSxjLnB1c2goaCksYy5wdXNoKGcpKX19cmV0dXJuIHV9KHRoaXMuaWRzLHRoaXMuY29vcmRzLHQsZSxyLG4sdGhpcy5ub2RlU2l6ZSl9LE4ucHJvdG90eXBlLndpdGhpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89WzAsdC5sZW5ndGgtMSwwXSxzPVtdLGw9aSppO28ubGVuZ3RoOyl7dmFyIGM9by5wb3AoKSx1PW8ucG9wKCksZj1vLnBvcCgpO2lmKHUtZjw9YSlmb3IodmFyIGg9ZjtoPD11O2grKylSKGVbMipoXSxlWzIqaCsxXSxyLG4pPD1sJiZzLnB1c2godFtoXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChmK3UpLzIpLGQ9ZVsyKnBdLG09ZVsyKnArMV07UihkLG0scixuKTw9bCYmcy5wdXNoKHRbcF0pO3ZhciBnPShjKzEpJTI7KDA9PT1jP3ItaTw9ZDpuLWk8PW0pJiYoby5wdXNoKGYpLG8ucHVzaChwLTEpLG8ucHVzaChnKSksKDA9PT1jP3IraT49ZDpuK2k+PW0pJiYoby5wdXNoKHArMSksby5wdXNoKHUpLG8ucHVzaChnKSl9fXJldHVybiBzfSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscix0aGlzLm5vZGVTaXplKX07dmFyIGo9e21pblpvb206MCxtYXhab29tOjE2LHJhZGl1czo0MCxleHRlbnQ6NTEyLG5vZGVTaXplOjY0LGxvZzohMSxnZW5lcmF0ZUlkOiExLHJlZHVjZTpudWxsLG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LFU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPVgoT2JqZWN0LmNyZWF0ZShqKSx0KSx0aGlzLnRyZWVzPW5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKX07ZnVuY3Rpb24gVih0LGUscixuLGkpe3JldHVybnt4OnQseTplLHpvb206MS8wLGlkOnIscGFyZW50SWQ6LTEsbnVtUG9pbnRzOm4scHJvcGVydGllczppfX1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcyxuPXJbMF0saT1yWzFdO3JldHVybnt4OlkobikseTpXKGkpLHpvb206MS8wLGluZGV4OmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIHEodCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczpHKHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gRyh0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiBYKFgoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gVyh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBYKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIFoodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBKKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gSyh0LGUscixuLGksYSl7dmFyIG89aS1yLHM9YS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1pLG49YSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBRKHQsZSxyLG4pe3ZhciBpPXtpZDp2b2lkIDA9PT10P251bGw6dCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOm4sbWluWDoxLzAsbWluWToxLzAsbWF4WDotMS8wLG1heFk6LTEvMH07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10LnR5cGU7aWYoIlBvaW50Ij09PXJ8fCJNdWx0aVBvaW50Ij09PXJ8fCJMaW5lU3RyaW5nIj09PXIpJCh0LGUpO2Vsc2UgaWYoIlBvbHlnb24iPT09cnx8Ik11bHRpTGluZVN0cmluZyI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKSQodCxlW25dKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKSQodCxlW25dW2ldKX0oaSksaX1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIHR0KHQsZSxyLG4pe2lmKGUuZ2VvbWV0cnkpe3ZhciBpPWUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsYT1lLmdlb21ldHJ5LnR5cGUsbz1NYXRoLnBvdyhyLnRvbGVyYW5jZS8oKDE8PHIubWF4Wm9vbSkqci5leHRlbnQpLDIpLHM9W10sbD1lLmlkO2lmKHIucHJvbW90ZUlkP2w9ZS5wcm9wZXJ0aWVzW3IucHJvbW90ZUlkXTpyLmdlbmVyYXRlSWQmJihsPW58fDApLCJQb2ludCI9PT1hKWV0KGkscyk7ZWxzZSBpZigiTXVsdGlQb2ludCI9PT1hKWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKWV0KGlbY10scyk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKXJ0KGkscyxvLCExKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09YSl7aWYoci5saW5lTWV0cmljcyl7Zm9yKGM9MDtjPGkubGVuZ3RoO2MrKylzPVtdLHJ0KGlbY10scyxvLCExKSx0LnB1c2goUShsLCJMaW5lU3RyaW5nIixzLGUucHJvcGVydGllcykpO3JldHVybn1udChpLHMsbywhMSl9ZWxzZSBpZigiUG9seWdvbiI9PT1hKW50KGkscyxvLCEwKTtlbHNle2lmKCJNdWx0aVBvbHlnb24iIT09YSl7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1hKXtmb3IoYz0wO2M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtjKyspdHQodCx7aWQ6bCxnZW9tZXRyeTplLmdlb21ldHJ5Lmdlb21ldHJpZXNbY10scHJvcGVydGllczplLnByb3BlcnRpZXN9LHIsbik7cmV0dXJufXRocm93IG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKX1mb3IoYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1bXTtudChpW2NdLHUsbywhMCkscy5wdXNoKHUpfX10LnB1c2goUShsLGEscyxlLnByb3BlcnRpZXMpKX19ZnVuY3Rpb24gZXQodCxlKXtlLnB1c2goaXQodFswXSkpLGUucHVzaChhdCh0WzFdKSksZS5wdXNoKDApfWZ1bmN0aW9uIHJ0KHQsZSxyLG4pe2Zvcih2YXIgaSxhLG89MCxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWl0KHRbc11bMF0pLGM9YXQodFtzXVsxXSk7ZS5wdXNoKGwpLGUucHVzaChjKSxlLnB1c2goMCkscz4wJiYobys9bj8oaSpjLWwqYSkvMjpNYXRoLnNxcnQoTWF0aC5wb3cobC1pLDIpK01hdGgucG93KGMtYSwyKSkpLGk9bCxhPWN9dmFyIHU9ZS5sZW5ndGgtMztlWzJdPTEsZnVuY3Rpb24gdChlLHIsbixpKXtmb3IodmFyIGEsbz1pLHM9bi1yPj4xLGw9bi1yLGM9ZVtyXSx1PWVbcisxXSxmPWVbbl0saD1lW24rMV0scD1yKzM7cDxuO3ArPTMpe3ZhciBkPUsoZVtwXSxlW3ArMV0sYyx1LGYsaCk7aWYoZD5vKWE9cCxvPWQ7ZWxzZSBpZihkPT09byl7dmFyIG09TWF0aC5hYnMocC1zKTttPGwmJihhPXAsbD1tKX19bz5pJiYoYS1yPjMmJnQoZSxyLGEsaSksZVthKzJdPW8sbi1hPjMmJnQoZSxhLG4saSkpfShlLDAsdSxyKSxlW3UrMl09MSxlLnNpemU9TWF0aC5hYnMobyksZS5zdGFydD0wLGUuZW5kPWUuc2l6ZX1mdW5jdGlvbiBudCh0LGUscixuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9W107cnQodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gYXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gb3QodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzxuKXJldHVybiB0O2lmKG88cnx8YT49bilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGY9dS5nZW9tZXRyeSxoPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8bilsLnB1c2godSk7ZWxzZSBpZighKGQ8cnx8cD49bikpe3ZhciBtPVtdO2lmKCJQb2ludCI9PT1ofHwiTXVsdGlQb2ludCI9PT1oKXN0KGYsbSxyLG4saSk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1oKWx0KGYsbSxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09aCl1dChmLG0scixuLGksITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09aCl1dChmLG0scixuLGksITApO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1oKWZvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgdj1bXTt1dChmW2ddLHYscixuLGksITApLHYubGVuZ3RoJiZtLnB1c2godil9aWYobS5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJiJMaW5lU3RyaW5nIj09PWgpe2ZvcihnPTA7ZzxtLmxlbmd0aDtnKyspbC5wdXNoKFEodS5pZCxoLG1bZ10sdS50YWdzKSk7Y29udGludWV9IkxpbmVTdHJpbmciIT09aCYmIk11bHRpTGluZVN0cmluZyIhPT1ofHwoMT09PW0ubGVuZ3RoPyhoPSJMaW5lU3RyaW5nIixtPW1bMF0pOmg9Ik11bHRpTGluZVN0cmluZyIpLCJQb2ludCIhPT1oJiYiTXVsdGlQb2ludCIhPT1ofHwoaD0zPT09bS5sZW5ndGg/IlBvaW50IjoiTXVsdGlQb2ludCIpLGwucHVzaChRKHUuaWQsaCxtLHUudGFncykpfX19cmV0dXJuIGwubGVuZ3RoP2w6bnVsbH1mdW5jdGlvbiBzdCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSs9Myl7dmFyIG89dFthK2ldO28+PXImJm88PW4mJihlLnB1c2godFthXSksZS5wdXNoKHRbYSsxXSksZS5wdXNoKHRbYSsyXSkpfX1mdW5jdGlvbiBsdCh0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPWN0KHQpLHU9MD09PWk/aHQ6cHQsZj10LnN0YXJ0LGg9MDtoPHQubGVuZ3RoLTM7aCs9Myl7dmFyIHA9dFtoXSxkPXRbaCsxXSxtPXRbaCsyXSxnPXRbaCszXSx2PXRbaCs0XSx5PTA9PT1pP3A6ZCx4PTA9PT1pP2c6dixiPSExO28mJihzPU1hdGguc3FydChNYXRoLnBvdyhwLWcsMikrTWF0aC5wb3coZC12LDIpKSkseTxyP3g+ciYmKGw9dShjLHAsZCxnLHYsciksbyYmKGMuc3RhcnQ9ZitzKmwpKTp5Pm4/eDxuJiYobD11KGMscCxkLGcsdixuKSxvJiYoYy5zdGFydD1mK3MqbCkpOmZ0KGMscCxkLG0pLHg8ciYmeT49ciYmKGw9dShjLHAsZCxnLHYsciksYj0hMCkseD5uJiZ5PD1uJiYobD11KGMscCxkLGcsdixuKSxiPSEwKSwhYSYmYiYmKG8mJihjLmVuZD1mK3MqbCksZS5wdXNoKGMpLGM9Y3QodCkpLG8mJihmKz1zKX12YXIgXz10Lmxlbmd0aC0zO3A9dFtfXSxkPXRbXysxXSxtPXRbXysyXSwoeT0wPT09aT9wOmQpPj1yJiZ5PD1uJiZmdChjLHAsZCxtKSxfPWMubGVuZ3RoLTMsYSYmXz49MyYmKGNbX10hPT1jWzBdfHxjW18rMV0hPT1jWzFdKSYmZnQoYyxjWzBdLGNbMV0sY1syXSksYy5sZW5ndGgmJmUucHVzaChjKX1mdW5jdGlvbiBjdCh0KXt2YXIgZT1bXTtyZXR1cm4gZS5zaXplPXQuc2l6ZSxlLnN0YXJ0PXQuc3RhcnQsZS5lbmQ9dC5lbmQsZX1mdW5jdGlvbiB1dCh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspbHQodFtvXSxlLHIsbixpLGEsITEpfWZ1bmN0aW9uIGZ0KHQsZSxyLG4pe3QucHVzaChlKSx0LnB1c2gociksdC5wdXNoKG4pfWZ1bmN0aW9uIGh0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1lKS8obi1lKTtyZXR1cm4gdC5wdXNoKGEpLHQucHVzaChyKyhpLXIpKm8pLHQucHVzaCgxKSxvfWZ1bmN0aW9uIHB0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1yKS8oaS1yKTtyZXR1cm4gdC5wdXNoKGUrKG4tZSkqbyksdC5wdXNoKGEpLHQucHVzaCgxKSxvfWZ1bmN0aW9uIGR0KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLG89YS50eXBlO2lmKCJQb2ludCI9PT1vfHwiTXVsdGlQb2ludCI9PT1vfHwiTGluZVN0cmluZyI9PT1vKWk9bXQoYS5nZW9tZXRyeSxlKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09b3x8IlBvbHlnb24iPT09byl7aT1bXTtmb3IodmFyIHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKylpLnB1c2gobXQoYS5nZW9tZXRyeVtzXSxlKSl9ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PW8pZm9yKGk9W10scz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKXtmb3IodmFyIGw9W10sYz0wO2M8YS5nZW9tZXRyeVtzXS5sZW5ndGg7YysrKWwucHVzaChtdChhLmdlb21ldHJ5W3NdW2NdLGUpKTtpLnB1c2gobCl9ci5wdXNoKFEoYS5pZCxvLGksYS50YWdzKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbXQodCxlKXt2YXIgcj1bXTtyLnNpemU9dC5zaXplLHZvaWQgMCE9PXQuc3RhcnQmJihyLnN0YXJ0PXQuc3RhcnQsci5lbmQ9dC5lbmQpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MylyLnB1c2godFtuXStlLHRbbisxXSx0W24rMl0pO3JldHVybiByfWZ1bmN0aW9uIGd0KHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGksYT0xPDx0Lnosbz10Lngscz10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGw9dC5mZWF0dXJlc1tyXSxjPWwuZ2VvbWV0cnksdT1sLnR5cGU7aWYobC5nZW9tZXRyeT1bXSwxPT09dSlmb3Iobj0wO248Yy5sZW5ndGg7bis9MilsLmdlb21ldHJ5LnB1c2godnQoY1tuXSxjW24rMV0sZSxhLG8scykpO2Vsc2UgZm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGY9W107Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoO2krPTIpZi5wdXNoKHZ0KGNbbl1baV0sY1tuXVtpKzFdLGUsYSxvLHMpKTtsLmdlb21ldHJ5LnB1c2goZil9fXJldHVybiB0LnRyYW5zZm9ybWVkPSEwLHR9ZnVuY3Rpb24gdnQodCxlLHIsbixpLGEpe3JldHVybltNYXRoLnJvdW5kKHIqKHQqbi1pKSksTWF0aC5yb3VuZChyKihlKm4tYSkpXX1mdW5jdGlvbiB5dCh0LGUscixuLGkpe2Zvcih2YXIgYT1lPT09aS5tYXhab29tPzA6aS50b2xlcmFuY2UvKCgxPDxlKSppLmV4dGVudCksbz17ZmVhdHVyZXM6W10sbnVtUG9pbnRzOjAsbnVtU2ltcGxpZmllZDowLG51bUZlYXR1cmVzOjAsc291cmNlOm51bGwseDpyLHk6bix6OmUsdHJhbnNmb3JtZWQ6ITEsbWluWDoyLG1pblk6MSxtYXhYOi0xLG1heFk6MH0scz0wO3M8dC5sZW5ndGg7cysrKXtvLm51bUZlYXR1cmVzKysseHQobyx0W3NdLGEsaSk7dmFyIGw9dFtzXS5taW5YLGM9dFtzXS5taW5ZLHU9dFtzXS5tYXhYLGY9dFtzXS5tYXhZO2w8by5taW5YJiYoby5taW5YPWwpLGM8by5taW5ZJiYoby5taW5ZPWMpLHU+by5tYXhYJiYoby5tYXhYPXUpLGY+by5tYXhZJiYoby5tYXhZPWYpfXJldHVybiBvfWZ1bmN0aW9uIHh0KHQsZSxyLG4pe3ZhciBpPWUuZ2VvbWV0cnksYT1lLnR5cGUsbz1bXTtpZigiUG9pbnQiPT09YXx8Ik11bHRpUG9pbnQiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKWJ0KG8saSx0LHIsITEsITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hfHwiUG9seWdvbiI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspYnQobyxpW3NdLHQsciwiUG9seWdvbiI9PT1hLDA9PT1zKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKWJ0KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoIkxpbmVTdHJpbmciPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBmIGluIHU9e30sZS50YWdzKXVbZl09ZS50YWdzW2ZdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBoPXtnZW9tZXRyeTpvLHR5cGU6IlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hPzM6IkxpbmVTdHJpbmciPT09YXx8Ik11bHRpTGluZVN0cmluZyI9PT1hPzI6MSx0YWdzOnV9O251bGwhPT1lLmlkJiYoaC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2goaCl9fWZ1bmN0aW9uIGJ0KHQsZSxyLG4saSxhKXt2YXIgbz1uKm47aWYobj4wJiZlLnNpemU8KGk/bzpuKSlyLm51bVBvaW50cys9ZS5sZW5ndGgvMztlbHNle2Zvcih2YXIgcz1bXSxsPTA7bDxlLmxlbmd0aDtsKz0zKSgwPT09bnx8ZVtsKzJdPm8pJiYoci5udW1TaW1wbGlmaWVkKysscy5wdXNoKGVbbF0pLHMucHVzaChlW2wrMV0pKSxyLm51bVBvaW50cysrO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTI7bjxpO2E9bixuKz0yKXIrPSh0W25dLXRbYV0pKih0W24rMV0rdFthKzFdKTtpZihyPjA9PT1lKWZvcihuPTAsaT10Lmxlbmd0aDtuPGkvMjtuKz0yKXt2YXIgbz10W25dLHM9dFtuKzFdO3Rbbl09dFtpLTItbl0sdFtuKzFdPXRbaS0xLW5dLHRbaS0yLW5dPW8sdFtpLTEtbl09c319KHMsYSksdC5wdXNoKHMpfX1mdW5jdGlvbiBfdCh0LGUpe3ZhciByPShlPXRoaXMub3B0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH0oT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLGUpKS5kZWJ1ZztpZihyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZSIpO2lmKGUucHJvbW90ZUlkJiZlLmdlbmVyYXRlSWQpdGhyb3cgbmV3IEVycm9yKCJwcm9tb3RlSWQgYW5kIGdlbmVyYXRlSWQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKXR0KHIsdC5mZWF0dXJlc1tuXSxlLG4pO2Vsc2UiRmVhdHVyZSI9PT10LnR5cGU/dHQocix0LGUpOnR0KHIse2dlb21ldHJ5OnR9LGUpO3JldHVybiByfSh0LGUpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoInByZXByb2Nlc3MgZGF0YSIpLGNvbnNvbGUubG9nKCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZSgiZ2VuZXJhdGUgdGlsZXMiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksKG49ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJ1ZmZlci9lLmV4dGVudCxuPXQsaT1vdCh0LDEsLTEtcixyLDAsLTEsMixlKSxhPW90KHQsMSwxLXIsMityLDAsLTEsMixlKTtyZXR1cm4oaXx8YSkmJihuPW90KHQsMSwtciwxK3IsMCwtMSwyLGUpfHxbXSxpJiYobj1kdChpLDEpLmNvbmNhdChuKSksYSYmKG49bi5jb25jYXQoZHQoYSwtMSkpKSksbn0obixlKSkubGVuZ3RoJiZ0aGlzLnNwbGl0VGlsZShuLDAsMCwwKSxyJiYobi5sZW5ndGgmJmNvbnNvbGUubG9nKCJmZWF0dXJlczogJWQsIHBvaW50czogJWQiLHRoaXMudGlsZXNbMF0ubnVtRmVhdHVyZXMsdGhpcy50aWxlc1swXS5udW1Qb2ludHMpLGNvbnNvbGUudGltZUVuZCgiZ2VuZXJhdGUgdGlsZXMiKSxjb25zb2xlLmxvZygidGlsZXMgZ2VuZXJhdGVkOiIsdGhpcy50b3RhbCxKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSkpfWZ1bmN0aW9uIHd0KHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24gVHQodCxlKXt2YXIgcj10LnRpbGVJRC5jYW5vbmljYWw7aWYoIXRoaXMuX2dlb0pTT05JbmRleClyZXR1cm4gZShudWxsLG51bGwpO3ZhciBuPXRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKHIueixyLngsci55KTtpZighbilyZXR1cm4gZShudWxsLG51bGwpO3ZhciBpPW5ldyBnKG4uZmVhdHVyZXMpLGE9XyhpKTswPT09YS5ieXRlT2Zmc2V0JiZhLmJ5dGVMZW5ndGg9PT1hLmJ1ZmZlci5ieXRlTGVuZ3RofHwoYT1uZXcgVWludDhBcnJheShhKSksZShudWxsLHt2ZWN0b3JUaWxlOmkscmF3RGF0YTphLmJ1ZmZlcn0pfVUucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5sb2csbj1lLm1pblpvb20saT1lLm1heFpvb20sYT1lLm5vZGVTaXplO3ImJmNvbnNvbGUudGltZSgidG90YWwgdGltZSIpO3ZhciBvPSJwcmVwYXJlICIrdC5sZW5ndGgrIiBwb2ludHMiO3ImJmNvbnNvbGUudGltZShvKSx0aGlzLnBvaW50cz10O2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspdFtsXS5nZW9tZXRyeSYmcy5wdXNoKEgodFtsXSxsKSk7dGhpcy50cmVlc1tpKzFdPW5ldyBOKHMsWixKLGEsRmxvYXQzMkFycmF5KSxyJiZjb25zb2xlLnRpbWVFbmQobyk7Zm9yKHZhciBjPWk7Yz49bjtjLS0pe3ZhciB1PStEYXRlLm5vdygpO3M9dGhpcy5fY2x1c3RlcihzLGMpLHRoaXMudHJlZXNbY109bmV3IE4ocyxaLEosYSxGbG9hdDMyQXJyYXkpLHImJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGMscy5sZW5ndGgsK0RhdGUubm93KCktdSl9cmV0dXJuIHImJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LFUucHJvdG90eXBlLmdldENsdXN0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KCh0WzBdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxuPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzFdKSksaT0xODA9PT10WzJdPzE4MDooKHRbMl0rMTgwKSUzNjArMzYwKSUzNjAtMTgwLGE9TWF0aC5tYXgoLTkwLE1hdGgubWluKDkwLHRbM10pKTtpZih0WzJdLXRbMF0+PTM2MClyPS0xODAsaT0xODA7ZWxzZSBpZihyPmkpe3ZhciBvPXRoaXMuZ2V0Q2x1c3RlcnMoW3IsbiwxODAsYV0sZSkscz10aGlzLmdldENsdXN0ZXJzKFstMTgwLG4saSxhXSxlKTtyZXR1cm4gby5jb25jYXQocyl9Zm9yKHZhciBsPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxjPVtdLHU9MCxmPWwucmFuZ2UoWShyKSxXKGEpLFkoaSksVyhuKSk7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdLHA9bC5wb2ludHNbaF07Yy5wdXNoKHAubnVtUG9pbnRzP3EocCk6dGhpcy5wb2ludHNbcC5pbmRleF0pfXJldHVybiBjfSxVLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRPcmlnaW5JZCh0KSxyPXRoaXMuX2dldE9yaWdpblpvb20odCksbj0iTm8gY2x1c3RlciB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuIixpPXRoaXMudHJlZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKG4pO3ZhciBhPWkucG9pbnRzW2VdO2lmKCFhKXRocm93IG5ldyBFcnJvcihuKTtmb3IodmFyIG89dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLHItMSkpLHM9W10sbD0wLGM9aS53aXRoaW4oYS54LGEueSxvKTtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj1pLnBvaW50c1t1XTtmLnBhcmVudElkPT09dCYmcy5wdXNoKGYubnVtUG9pbnRzP3EoZik6dGhpcy5wb2ludHNbZi5pbmRleF0pfWlmKDA9PT1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIHN9LFUucHJvdG90eXBlLmdldExlYXZlcz1mdW5jdGlvbih0LGUscil7ZT1lfHwxMCxyPXJ8fDA7dmFyIG49W107cmV0dXJuIHRoaXMuX2FwcGVuZExlYXZlcyhuLHQsZSxyLDApLG59LFUucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMsbz1hLmV4dGVudCxzPWEucmFkaXVzL28sbD0oci1zKS9pLGM9KHIrMStzKS9pLHU9e2ZlYXR1cmVzOltdfTtyZXR1cm4gdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoKGUtcykvaSxsLChlKzErcykvaSxjKSxuLnBvaW50cyxlLHIsaSx1KSwwPT09ZSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMS1zL2ksbCwxLGMpLG4ucG9pbnRzLGkscixpLHUpLGU9PT1pLTEmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDAsbCxzL2ksYyksbi5wb2ludHMsLTEscixpLHUpLHUuZmVhdHVyZXMubGVuZ3RoP3U6bnVsbH0sVS5wcm90b3R5cGUuZ2V0Q2x1c3RlckV4cGFuc2lvblpvb209ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dldE9yaWdpblpvb20odCktMTtlPD10aGlzLm9wdGlvbnMubWF4Wm9vbTspe3ZhciByPXRoaXMuZ2V0Q2hpbGRyZW4odCk7aWYoZSsrLDEhPT1yLmxlbmd0aClicmVhazt0PXJbMF0ucHJvcGVydGllcy5jbHVzdGVyX2lkfXJldHVybiBlfSxVLnByb3RvdHlwZS5fYXBwZW5kTGVhdmVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz10aGlzLmdldENoaWxkcmVuKGUpO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXMucHJvcGVydGllcztpZihsJiZsLmNsdXN0ZXI/aStsLnBvaW50X2NvdW50PD1uP2krPWwucG9pbnRfY291bnQ6aT10aGlzLl9hcHBlbmRMZWF2ZXModCxsLmNsdXN0ZXJfaWQscixuLGkpOmk8bj9pKys6dC5wdXNoKHMpLHQubGVuZ3RoPT09cilicmVha31yZXR1cm4gaX0sVS5wcm90b3R5cGUuX2FkZFRpbGVGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9ZVtzW29dXSxjPWwubnVtUG9pbnRzLHU9e3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoobC54KmktcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoobC55KmktbikpXV0sdGFnczpjP0cobCk6dGhpcy5wb2ludHNbbC5pbmRleF0ucHJvcGVydGllc30sZj12b2lkIDA7Yz9mPWwuaWQ6dGhpcy5vcHRpb25zLmdlbmVyYXRlSWQ/Zj1sLmluZGV4OnRoaXMucG9pbnRzW2wuaW5kZXhdLmlkJiYoZj10aGlzLnBvaW50c1tsLmluZGV4XS5pZCksdm9pZCAwIT09ZiYmKHUuaWQ9ZiksYS5mZWF0dXJlcy5wdXNoKHUpfX0sVS5wcm90b3R5cGUuX2xpbWl0Wm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sTWF0aC5taW4odCx0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKSl9LFUucHJvdG90eXBlLl9jbHVzdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dGhpcy5vcHRpb25zLGk9bi5yYWRpdXMsYT1uLmV4dGVudCxvPW4ucmVkdWNlLHM9aS8oYSpNYXRoLnBvdygyLGUpKSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07aWYoIShjLnpvb208PWUpKXtjLnpvb209ZTtmb3IodmFyIHU9dGhpcy50cmVlc1tlKzFdLGY9dS53aXRoaW4oYy54LGMueSxzKSxoPWMubnVtUG9pbnRzfHwxLHA9Yy54KmgsZD1jLnkqaCxtPW8mJmg+MT90aGlzLl9tYXAoYywhMCk6bnVsbCxnPShsPDw1KSsoZSsxKSt0aGlzLnBvaW50cy5sZW5ndGgsdj0wLHk9Zjt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl0sYj11LnBvaW50c1t4XTtpZighKGIuem9vbTw9ZSkpe2Iuem9vbT1lO3ZhciBfPWIubnVtUG9pbnRzfHwxO3ArPWIueCpfLGQrPWIueSpfLGgrPV8sYi5wYXJlbnRJZD1nLG8mJihtfHwobT10aGlzLl9tYXAoYywhMCkpLG8obSx0aGlzLl9tYXAoYikpKX19MT09PWg/ci5wdXNoKGMpOihjLnBhcmVudElkPWcsci5wdXNoKFYocC9oLGQvaCxnLGgsbSkpKX19cmV0dXJuIHJ9LFUucHJvdG90eXBlLl9nZXRPcmlnaW5JZD1mdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnBvaW50cy5sZW5ndGg+PjV9LFUucHJvdG90eXBlLl9nZXRPcmlnaW5ab29tPWZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMucG9pbnRzLmxlbmd0aCklMzJ9LFUucHJvdG90eXBlLl9tYXA9ZnVuY3Rpb24odCxlKXtpZih0Lm51bVBvaW50cylyZXR1cm4gZT9YKHt9LHQucHJvcGVydGllcyk6dC5wcm9wZXJ0aWVzO3ZhciByPXRoaXMucG9pbnRzW3QuaW5kZXhdLnByb3BlcnRpZXMsbj10aGlzLm9wdGlvbnMubWFwKHIpO3JldHVybiBlJiZuPT09cj9YKHt9LG4pOm59LF90LnByb3RvdHlwZS5vcHRpb25zPXttYXhab29tOjE0LGluZGV4TWF4Wm9vbTo1LGluZGV4TWF4UG9pbnRzOjFlNSx0b2xlcmFuY2U6MyxleHRlbnQ6NDA5NixidWZmZXI6NjQsbGluZU1ldHJpY3M6ITEscHJvbW90ZUlkOm51bGwsZ2VuZXJhdGVJZDohMSxkZWJ1ZzowfSxfdC5wcm90b3R5cGUuc3BsaXRUaWxlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1bdCxlLHIsbl0sbD10aGlzLm9wdGlvbnMsYz1sLmRlYnVnO3MubGVuZ3RoOyl7bj1zLnBvcCgpLHI9cy5wb3AoKSxlPXMucG9wKCksdD1zLnBvcCgpO3ZhciB1PTE8PGUsZj13dChlLHIsbiksaD10aGlzLnRpbGVzW2ZdO2lmKCFoJiYoYz4xJiZjb25zb2xlLnRpbWUoImNyZWF0aW9uIiksaD10aGlzLnRpbGVzW2ZdPXl0KHQsZSxyLG4sbCksdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6ZSx4OnIseTpufSksYykpe2M+MSYmKGNvbnNvbGUubG9nKCJ0aWxlIHolZC0lZC0lZCAoZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkLCBzaW1wbGlmaWVkOiAlZCkiLGUscixuLGgubnVtRmVhdHVyZXMsaC5udW1Qb2ludHMsaC5udW1TaW1wbGlmaWVkKSxjb25zb2xlLnRpbWVFbmQoImNyZWF0aW9uIikpO3ZhciBwPSJ6IitlO3RoaXMuc3RhdHNbcF09KHRoaXMuc3RhdHNbcF18fDApKzEsdGhpcy50b3RhbCsrfWlmKGguc291cmNlPXQsaSl7aWYoZT09PWwubWF4Wm9vbXx8ZT09PWkpY29udGludWU7dmFyIGQ9MTw8aS1lO2lmKHIhPT1NYXRoLmZsb29yKGEvZCl8fG4hPT1NYXRoLmZsb29yKG8vZCkpY29udGludWV9ZWxzZSBpZihlPT09bC5pbmRleE1heFpvb218fGgubnVtUG9pbnRzPD1sLmluZGV4TWF4UG9pbnRzKWNvbnRpbnVlO2lmKGguc291cmNlPW51bGwsMCE9PXQubGVuZ3RoKXtjPjEmJmNvbnNvbGUudGltZSgiY2xpcHBpbmciKTt2YXIgbSxnLHYseSx4LGIsXz0uNSpsLmJ1ZmZlci9sLmV4dGVudCx3PS41LV8sVD0uNStfLGs9MStfO209Zz12PXk9bnVsbCx4PW90KHQsdSxyLV8scitULDAsaC5taW5YLGgubWF4WCxsKSxiPW90KHQsdSxyK3cscitrLDAsaC5taW5YLGgubWF4WCxsKSx0PW51bGwseCYmKG09b3QoeCx1LG4tXyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLGc9b3QoeCx1LG4rdyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLHg9bnVsbCksYiYmKHY9b3QoYix1LG4tXyxuK1QsMSxoLm1pblksaC5tYXhZLGwpLHk9b3QoYix1LG4rdyxuK2ssMSxoLm1pblksaC5tYXhZLGwpLGI9bnVsbCksYz4xJiZjb25zb2xlLnRpbWVFbmQoImNsaXBwaW5nIikscy5wdXNoKG18fFtdLGUrMSwyKnIsMipuKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4rMSkscy5wdXNoKHZ8fFtdLGUrMSwyKnIrMSwyKm4pLHMucHVzaCh5fHxbXSxlKzEsMipyKzEsMipuKzEpfX19LF90LnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm9wdGlvbnMsaT1uLmV4dGVudCxhPW4uZGVidWc7aWYodDwwfHx0PjI0KXJldHVybiBudWxsO3ZhciBvPTE8PHQscz13dCh0LGU9KGUlbytvKSVvLHIpO2lmKHRoaXMudGlsZXNbc10pcmV0dXJuIGd0KHRoaXMudGlsZXNbc10saSk7YT4xJiZjb25zb2xlLmxvZygiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQiLHQsZSxyKTtmb3IodmFyIGwsYz10LHU9ZSxmPXI7IWwmJmM+MDspYy0tLHU9TWF0aC5mbG9vcih1LzIpLGY9TWF0aC5mbG9vcihmLzIpLGw9dGhpcy50aWxlc1t3dChjLHUsZildO3JldHVybiBsJiZsLnNvdXJjZT8oYT4xJiZjb25zb2xlLmxvZygiZm91bmQgcGFyZW50IHRpbGUgeiVkLSVkLSVkIixjLHUsZiksYT4xJiZjb25zb2xlLnRpbWUoImRyaWxsaW5nIGRvd24iKSx0aGlzLnNwbGl0VGlsZShsLnNvdXJjZSxjLHUsZix0LGUsciksYT4xJiZjb25zb2xlLnRpbWVFbmQoImRyaWxsaW5nIGRvd24iKSx0aGlzLnRpbGVzW3NdP2d0KHRoaXMudGlsZXNbc10saSk6bnVsbCk6bnVsbH07dmFyIGt0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4sVHQpLGkmJih0aGlzLmxvYWRHZW9KU09OPWkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLHRoaXMuX3BlbmRpbmdDYWxsYmFjaz1lLHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcz10LHRoaXMuX3N0YXRlJiYiSWRsZSIhPT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iTmVlZHNMb2FkRGF0YSI6KHRoaXMuX3N0YXRlPSJDb2FsZXNjaW5nIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUuX2xvYWREYXRhPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyl7dmFyIHI9dGhpcy5fcGVuZGluZ0NhbGxiYWNrLG49dGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO2RlbGV0ZSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2ssZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtczt2YXIgaT0hIShuJiZuLnJlcXVlc3QmJm4ucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpJiZuZXcgdC5SZXF1ZXN0UGVyZm9ybWFuY2Uobi5yZXF1ZXN0KTt0aGlzLmxvYWRHZW9KU09OKG4sKGZ1bmN0aW9uKGEsbyl7aWYoYXx8IW8pcmV0dXJuIHIoYSk7aWYoIm9iamVjdCIhPXR5cGVvZiBvKXJldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIituLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSk7ZihvLCEwKTt0cnl7ZS5fZ2VvSlNPTkluZGV4PW4uY2x1c3Rlcj9uZXcgVShmdW5jdGlvbihlKXt2YXIgcj1lLnN1cGVyY2x1c3Rlck9wdGlvbnMsbj1lLmNsdXN0ZXJQcm9wZXJ0aWVzO2lmKCFufHwhcilyZXR1cm4gcjtmb3IodmFyIGk9e30sYT17fSxvPXthY2N1bXVsYXRlZDpudWxsLHpvb206MH0scz17cHJvcGVydGllczpudWxsfSxsPU9iamVjdC5rZXlzKG4pLGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9bltmXSxwPWhbMF0sZD1oWzFdLG09dC5jcmVhdGVFeHByZXNzaW9uKGQpLGc9dC5jcmVhdGVFeHByZXNzaW9uKCJzdHJpbmciPT10eXBlb2YgcD9bcCxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLGZdXTpwKTtpW2ZdPW0udmFsdWUsYVtmXT1nLnZhbHVlfXJldHVybiByLm1hcD1mdW5jdGlvbih0KXtzLnByb3BlcnRpZXM9dDtmb3IodmFyIGU9e30scj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZVthXT1pW2FdLmV2YWx1YXRlKG8scyl9cmV0dXJuIGV9LHIucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cy5wcm9wZXJ0aWVzPWU7Zm9yKHZhciByPTAsbj1sO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtvLmFjY3VtdWxhdGVkPXRbaV0sdFtpXT1hW2ldLmV2YWx1YXRlKG8scyl9fSxyfShuKSkubG9hZChvLmZlYXR1cmVzKTpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgX3QodCxlKX0obyxuLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKGEpe3JldHVybiByKGEpfWUubG9hZGVkPXt9O3ZhciBzPXt9O2lmKGkpe3ZhciBsPWkuZmluaXNoKCk7bCYmKHMucmVzb3VyY2VUaW1pbmc9e30scy5yZXNvdXJjZVRpbWluZ1tuLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsKSkpfXIobnVsbCxzKX0pKX19LHIucHJvdG90eXBlLmNvYWxlc2NlPWZ1bmN0aW9uKCl7IkNvYWxlc2NpbmciPT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9IklkbGUiOiJOZWVkc0xvYWREYXRhIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sb2FkZWQsaT10LnVpZDtyZXR1cm4gbiYmbltpXT9lLnByb3RvdHlwZS5yZWxvYWRUaWxlLmNhbGwodGhpcyx0LHIpOnRoaXMubG9hZFRpbGUodCxyKX0sci5wcm90b3R5cGUubG9hZEdlb0pTT049ZnVuY3Rpb24oZSxyKXtpZihlLnJlcXVlc3QpdC5nZXRKU09OKGUucmVxdWVzdCxyKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgZS5kYXRhKXJldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIitlLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSk7dHJ5e3JldHVybiByKG51bGwsSlNPTi5wYXJzZShlLmRhdGEpKX1jYXRjaCh0KXtyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrZS5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpfX19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLGUoKX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckV4cGFuc2lvblpvb209ZnVuY3Rpb24odCxlKXt0cnl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbSh0LmNsdXN0ZXJJZCkpfWNhdGNoKHQpe2UodCl9fSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt0cnl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRDaGlsZHJlbih0LmNsdXN0ZXJJZCkpfWNhdGNoKHQpe2UodCl9fSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSl7dHJ5e2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0TGVhdmVzKHQuY2x1c3RlcklkLHQubGltaXQsdC5vZmZzZXQpKX1jYXRjaCh0KXtlKHQpfX0scn0obCk7dmFyIEF0PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5zZWxmPWUsdGhpcy5hY3Rvcj1uZXcgdC5BY3RvcihlLHRoaXMpLHRoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMuYXZhaWxhYmxlSW1hZ2VzPXt9LHRoaXMud29ya2VyU291cmNlVHlwZXM9e3ZlY3RvcjpsLGdlb2pzb246a3R9LHRoaXMud29ya2VyU291cmNlcz17fSx0aGlzLmRlbVdvcmtlclNvdXJjZXM9e30sdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7aWYoci53b3JrZXJTb3VyY2VUeXBlc1t0XSl0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciBzb3VyY2Ugd2l0aCBuYW1lICInK3QrJyIgYWxyZWFkeSByZWdpc3RlcmVkLicpO3Iud29ya2VyU291cmNlVHlwZXNbdF09ZX0sdGhpcy5zZWxmLnJlZ2lzdGVyUlRMVGV4dFBsdWdpbj1mdW5jdGlvbihlKXtpZih0LnBsdWdpbi5pc1BhcnNlZCgpKXRocm93IG5ldyBFcnJvcigiUlRMIHRleHQgcGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTt0LnBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmc9ZS5hcHBseUFyYWJpY1NoYXBpbmcsdC5wbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0PWUucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LHQucGx1Z2luLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dH19O3JldHVybiBBdC5wcm90b3R5cGUuc2V0UmVmZXJyZXI9ZnVuY3Rpb24odCxlKXt0aGlzLnJlZmVycmVyPWV9LEF0LnByb3RvdHlwZS5zZXRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0aGlzLmF2YWlsYWJsZUltYWdlc1t0XT1lLHRoaXMud29ya2VyU291cmNlc1t0XSl7dmFyIGk9dGhpcy53b3JrZXJTb3VyY2VzW3RdW25dO2Zvcih2YXIgYSBpbiBpKWlbYV0uYXZhaWxhYmxlSW1hZ2VzPWV9cigpfSxBdC5wcm90b3R5cGUuc2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkucmVwbGFjZShlKSxyKCl9LEF0LnByb3RvdHlwZS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS51cGRhdGUoZS5sYXllcnMsZS5yZW1vdmVkSWRzKSxyKCl9LEF0LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5sb2FkREVNVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sQXQucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZWxvYWRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5hYm9ydFRpbGUoZSxyKX0sQXQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZW1vdmVUaWxlKGUscil9LEF0LnByb3RvdHlwZS5yZW1vdmVERU1UaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkucmVtb3ZlVGlsZShlKX0sQXQucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdKXt2YXIgbj10aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV07ZGVsZXRlIHRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSx2b2lkIDAhPT1uLnJlbW92ZVNvdXJjZT9uLnJlbW92ZVNvdXJjZShlLHIpOnIoKX19LEF0LnByb3RvdHlwZS5sb2FkV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoZS51cmwpLHIoKX1jYXRjaCh0KXtyKHQudG9TdHJpbmcoKSl9fSxBdC5wcm90b3R5cGUuc3luY1JUTFBsdWdpblN0YXRlPWZ1bmN0aW9uKGUscixuKXt0cnl7dC5wbHVnaW4uc2V0U3RhdGUocik7dmFyIGk9dC5wbHVnaW4uZ2V0UGx1Z2luVVJMKCk7aWYodC5wbHVnaW4uaXNMb2FkZWQoKSYmIXQucGx1Z2luLmlzUGFyc2VkKCkmJm51bGwhPWkpe3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGkpO3ZhciBhPXQucGx1Z2luLmlzUGFyc2VkKCk7bihhP3ZvaWQgMDpuZXcgRXJyb3IoIlJUTCBUZXh0IFBsdWdpbiBmYWlsZWQgdG8gaW1wb3J0IHNjcmlwdHMgZnJvbSAiK2kpLGEpfX1jYXRjaCh0KXtuKHQudG9TdHJpbmcoKSl9fSxBdC5wcm90b3R5cGUuZ2V0QXZhaWxhYmxlSW1hZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYXZhaWxhYmxlSW1hZ2VzW3RdO3JldHVybiBlfHwoZT1bXSksZX0sQXQucHJvdG90eXBlLmdldExheWVySW5kZXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllckluZGV4ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMubGF5ZXJJbmRleGVzW3RdPW5ldyBuKSxlfSxBdC5wcm90b3R5cGUuZ2V0V29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHRoaXMud29ya2VyU291cmNlc1t0XXx8KHRoaXMud29ya2VyU291cmNlc1t0XT17fSksdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdPXt9KSwhdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdKXt2YXIgaT17c2VuZDpmdW5jdGlvbihlLHIsaSl7bi5hY3Rvci5zZW5kKGUscixpLHQpfX07dGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdPW5ldyB0aGlzLndvcmtlclNvdXJjZVR5cGVzW2VdKGksdGhpcy5nZXRMYXllckluZGV4KHQpLHRoaXMuZ2V0QXZhaWxhYmxlSW1hZ2VzKHQpKX1yZXR1cm4gdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdfSxBdC5wcm90b3R5cGUuZ2V0REVNV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1t0XXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XT17fSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdPW5ldyB1KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV19LEF0LnByb3RvdHlwZS5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24oZSxyKXt0LmVuZm9yY2VDYWNoZVNpemVMaW1pdChyKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmdm9pZCAwIT09dC53aW5kb3cmJnQud2luZG93IGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJih0LndpbmRvdy53b3JrZXI9bmV3IEF0KHQud2luZG93KSksQXR9KSksbigwLChmdW5jdGlvbih0KXt2YXIgZT10LmNyZWF0ZUNvbW1vbmpzTW9kdWxlKChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiFyKHQpfWZ1bmN0aW9uIHIodCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/Im5vdCBhIGJyb3dzZXIiOkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheT9GdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP09iamVjdC5rZXlzJiZPYmplY3QuY3JlYXRlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiZPYmplY3QuaXNTZWFsZWQmJk9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRXh0ZW5zaWJsZSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciYmT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydGllcyYmT2JqZWN0LnNlYWwmJk9iamVjdC5mcmVlemUmJk9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT04/ZnVuY3Rpb24oKXtpZighKCJXb3JrZXIiaW4gd2luZG93JiYiQmxvYiJpbiB3aW5kb3cmJiJVUkwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChyKTt0cnl7ZT1uZXcgV29ya2VyKG4pLHQ9ITB9Y2F0Y2goZSl7dD0hMX1lJiZlLnRlcm1pbmF0ZSgpO3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKG4pLHR9KCk/IlVpbnQ4Q2xhbXBlZEFycmF5ImluIHdpbmRvdz9BcnJheUJ1ZmZlci5pc1ZpZXc/ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LndpZHRoPXQuaGVpZ2h0PTE7dmFyIGU9dC5nZXRDb250ZXh0KCIyZCIpO2lmKCFlKXJldHVybiExO3ZhciByPWUuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpO3JldHVybiByJiZyLndpZHRoPT09dC53aWR0aH0oKT9mdW5jdGlvbih0KXt2b2lkIDA9PT1uW3RdJiYoblt0XT1mdW5jdGlvbih0KXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPU9iamVjdC5jcmVhdGUoZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gbi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9yLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbik6ci5zdXBwb3J0c0NvbnRleHQ/ci5zdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5zdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbik6ci5nZXRDb250ZXh0KCJ3ZWJnbCIsbil8fHIuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKX0odCk7aWYoIXIpcmV0dXJuITE7dmFyIG49ci5jcmVhdGVTaGFkZXIoci5WRVJURVhfU0hBREVSKTtpZighbnx8ci5pc0NvbnRleHRMb3N0KCkpcmV0dXJuITE7cmV0dXJuIHIuc2hhZGVyU291cmNlKG4sInZvaWQgbWFpbigpIHt9Iiksci5jb21waWxlU2hhZGVyKG4pLCEwPT09ci5nZXRTaGFkZXJQYXJhbWV0ZXIobixyLkNPTVBJTEVfU1RBVFVTKX0odCkpO3JldHVybiBuW3RdfSh0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpP3ZvaWQgMDoiaW5zdWZmaWNpZW50IFdlYkdMIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgQ2FudmFzL2dldEltYWdlRGF0YSBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEFycmF5QnVmZmVyIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgVWludDhDbGFtcGVkQXJyYXkgc3VwcG9ydCI6Imluc3VmZmljaWVudCB3b3JrZXIgc3VwcG9ydCI6Imluc3VmZmljaWVudCBKU09OIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgT2JqZWN0IHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgRnVuY3Rpb24gc3VwcG9ydCI6Imluc3VmZmljZW50IEFycmF5IHN1cHBvcnQifXQuZXhwb3J0cz90LmV4cG9ydHM9ZTp3aW5kb3cmJih3aW5kb3cubWFwYm94Z2w9d2luZG93Lm1hcGJveGdsfHx7fSx3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkPWUsd2luZG93Lm1hcGJveGdsLm5vdFN1cHBvcnRlZFJlYXNvbj1yKTt2YXIgbj17fTtlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0pKSxyPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIHZvaWQgMCE9PXImJihpLmNsYXNzTmFtZT1yKSxuJiZuLmFwcGVuZENoaWxkKGkpLGl9LGNyZWF0ZU5TOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLHIpfX0sbj10LndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7ZnVuY3Rpb24gaSh0KXtpZighbilyZXR1cm4gdFswXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbilyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgYSxvPWkoWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7ci5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe24mJm8mJihhPW5bb10sbltvXT0ibm9uZSIpfSxyLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYobltvXT1hKX07dmFyIHM9aShbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtyLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbc109ZX07dmFyIGw9ITE7dHJ5e3ZhciBjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2w9ITB9fSk7dC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixjLGMpfWNhdGNoKHQpe2w9ITF9ci5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSwicGFzc2l2ZSJpbiBuJiZsP3QuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5hZGRFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfSxyLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLCJwYXNzaXZlImluIG4mJmw/dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9O3ZhciB1PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix1LCEwKX07ZnVuY3Rpb24gZih0KXt2YXIgZT10LnVzZXJJbWFnZTtpZihlJiZlLnJlbmRlciYmZS5yZW5kZXIoKSlyZXR1cm4gdC5kYXRhLnJlcGxhY2UobmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcikpLCEwO3JldHVybiExfXIuc3VwcHJlc3NDbGljaz1mdW5jdGlvbigpe3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix1LCEwKSx0LndpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe3Qud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix1LCEwKX0pLDApfSxyLm1vdXNlUG9zPWZ1bmN0aW9uKGUscil7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbmV3IHQuUG9pbnQoci5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKX0sci50b3VjaFBvcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9W10sYT0wO2E8ci5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5Qb2ludChyW2FdLmNsaWVudFgtbi5sZWZ0LWUuY2xpZW50TGVmdCxyW2FdLmNsaWVudFktbi50b3AtZS5jbGllbnRUb3ApKTtyZXR1cm4gaX0sci5tb3VzZUJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dC53aW5kb3cuSW5zdGFsbFRyaWdnZXImJjI9PT1lLmJ1dHRvbiYmZS5jdHJsS2V5JiZ0LndpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCJNQUMiKT49MD8wOmUuYnV0dG9ufSxyLnJlbW92ZT1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX07dmFyIGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe2UuY2FsbCh0aGlzKSx0aGlzLmltYWdlcz17fSx0aGlzLnVwZGF0ZWRJbWFnZXM9e30sdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU9e30sdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXF1ZXN0b3JzPVtdLHRoaXMucGF0dGVybnM9e30sdGhpcy5hdGxhc0ltYWdlPW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMuZGlydHk9ITB9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxyLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9bi5pZHMsYT1uLmNhbGxiYWNrO3RoaXMuX25vdGlmeShpLGEpfXRoaXMucmVxdWVzdG9ycz1bXX19LHIucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlc1t0XX0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWxpZGF0ZSh0LGUpJiYodGhpcy5pbWFnZXNbdF09ZSl9LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIpe3ZhciBuPSEwO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0cmV0Y2goci5zdHJldGNoWCxyLmRhdGEmJnIuZGF0YS53aWR0aCl8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgInN0cmV0Y2hYIiB2YWx1ZScpKSksbj0hMSksdGhpcy5fdmFsaWRhdGVTdHJldGNoKHIuc3RyZXRjaFksci5kYXRhJiZyLmRhdGEuaGVpZ2h0KXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAic3RyZXRjaFkiIHZhbHVlJykpKSxuPSExKSx0aGlzLl92YWxpZGF0ZUNvbnRlbnQoci5jb250ZW50LHIpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJjb250ZW50IiB2YWx1ZScpKSksbj0hMSksbn0sci5wcm90b3R5cGUuX3ZhbGlkYXRlU3RyZXRjaD1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiEwO2Zvcih2YXIgcj0wLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2lmKGFbMF08cnx8YVsxXTxhWzBdfHxlPGFbMV0pcmV0dXJuITE7cj1hWzFdfXJldHVybiEwfSxyLnByb3RvdHlwZS5fdmFsaWRhdGVDb250ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXR8fDQ9PT10Lmxlbmd0aCYmKCEodFswXTwwfHxlLmRhdGEud2lkdGg8dFswXSkmJighKHRbMV08MHx8ZS5kYXRhLmhlaWdodDx0WzFdKSYmKCEodFsyXTwwfHxlLmRhdGEud2lkdGg8dFsyXSkmJighKHRbM108MHx8ZS5kYXRhLmhlaWdodDx0WzNdKSYmKCEodFsyXTx0WzBdKSYmISh0WzNdPHRbMV0pKSkpKSl9LHIucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pbWFnZXNbdF07ZS52ZXJzaW9uPXIudmVyc2lvbisxLHRoaXMuaW1hZ2VzW3RdPWUsdGhpcy51cGRhdGVkSW1hZ2VzW3RdPSEwfSxyLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltYWdlc1t0XTtkZWxldGUgdGhpcy5pbWFnZXNbdF0sZGVsZXRlIHRoaXMucGF0dGVybnNbdF0sZS51c2VySW1hZ2UmJmUudXNlckltYWdlLm9uUmVtb3ZlJiZlLnVzZXJJbWFnZS5vblJlbW92ZSgpfSxyLnByb3RvdHlwZS5saXN0SW1hZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW1hZ2VzKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7aWYoIXRoaXMuaXNMb2FkZWQoKSlmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuaW1hZ2VzW2FdfHwocj0hMSl9dGhpcy5pc0xvYWRlZCgpfHxyP3RoaXMuX25vdGlmeSh0LGUpOnRoaXMucmVxdWVzdG9ycy5wdXNoKHtpZHM6dCxjYWxsYmFjazplfSl9LHIucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5pbWFnZXNbb118fHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGVpbWFnZW1pc3NpbmciLHtpZDpvfSkpO3ZhciBzPXRoaXMuaW1hZ2VzW29dO3M/bltvXT17ZGF0YTpzLmRhdGEuY2xvbmUoKSxwaXhlbFJhdGlvOnMucGl4ZWxSYXRpbyxzZGY6cy5zZGYsdmVyc2lvbjpzLnZlcnNpb24sc3RyZXRjaFg6cy5zdHJldGNoWCxzdHJldGNoWTpzLnN0cmV0Y2hZLGNvbnRlbnQ6cy5jb250ZW50LGhhc1JlbmRlckNhbGxiYWNrOkJvb2xlYW4ocy51c2VySW1hZ2UmJnMudXNlckltYWdlLnJlbmRlcil9OnQud2Fybk9uY2UoJ0ltYWdlICInK28rJyIgY291bGQgbm90IGJlIGxvYWRlZC4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB0aGUgaW1hZ2Ugd2l0aCBtYXAuYWRkSW1hZ2UoKSBvciBhICJzcHJpdGUiIHByb3BlcnR5IGluIHlvdXIgc3R5bGUuIFlvdSBjYW4gcHJvdmlkZSBtaXNzaW5nIGltYWdlcyBieSBsaXN0ZW5pbmcgZm9yIHRoZSAic3R5bGVpbWFnZW1pc3NpbmciIG1hcCBldmVudC4nKX1yKG51bGwsbil9LHIucHJvdG90eXBlLmdldFBpeGVsU2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYXRsYXNJbWFnZTtyZXR1cm57d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fSxyLnByb3RvdHlwZS5nZXRQYXR0ZXJuPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucGF0dGVybnNbZV0sbj10aGlzLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiBudWxsO2lmKHImJnIucG9zaXRpb24udmVyc2lvbj09PW4udmVyc2lvbilyZXR1cm4gci5wb3NpdGlvbjtpZihyKXIucG9zaXRpb24udmVyc2lvbj1uLnZlcnNpb247ZWxzZXt2YXIgaT17dzpuLmRhdGEud2lkdGgrMixoOm4uZGF0YS5oZWlnaHQrMix4OjAseTowfSxhPW5ldyB0LkltYWdlUG9zaXRpb24oaSxuKTt0aGlzLnBhdHRlcm5zW2VdPXtiaW46aSxwb3NpdGlvbjphfX1yZXR1cm4gdGhpcy5fdXBkYXRlUGF0dGVybkF0bGFzKCksdGhpcy5wYXR0ZXJuc1tlXS5wb3NpdGlvbn0sci5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlKXt2YXIgcj1lLmdsO3RoaXMuYXRsYXNUZXh0dXJlP3RoaXMuZGlydHkmJih0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKSx0aGlzLmRpcnR5PSExKTp0aGlzLmF0bGFzVGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy5hdGxhc0ltYWdlLHIuUkdCQSksdGhpcy5hdGxhc1RleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpfSxyLnByb3RvdHlwZS5fdXBkYXRlUGF0dGVybkF0bGFzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciByIGluIHRoaXMucGF0dGVybnMpZS5wdXNoKHRoaXMucGF0dGVybnNbcl0uYmluKTt2YXIgbj10LnBvdHBhY2soZSksaT1uLncsYT1uLmgsbz10aGlzLmF0bGFzSW1hZ2U7Zm9yKHZhciBzIGluIG8ucmVzaXplKHt3aWR0aDppfHwxLGhlaWdodDphfHwxfSksdGhpcy5wYXR0ZXJucyl7dmFyIGw9dGhpcy5wYXR0ZXJuc1tzXS5iaW4sYz1sLngrMSx1PWwueSsxLGY9dGhpcy5pbWFnZXNbc10uZGF0YSxoPWYud2lkdGgscD1mLmhlaWdodDt0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6MH0se3g6Yyx5OnV9LHt3aWR0aDpoLGhlaWdodDpwfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OnAtMX0se3g6Yyx5OnUtMX0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6MH0se3g6Yyx5OnUrcH0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDpoLTEseTowfSx7eDpjLTEseTp1fSx7d2lkdGg6MSxoZWlnaHQ6cH0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTowfSx7eDpjK2gseTp1fSx7d2lkdGg6MSxoZWlnaHQ6cH0pfXRoaXMuZGlydHk9ITB9LHIucHJvdG90eXBlLmJlZ2luRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZT17fX0sci5wcm90b3R5cGUuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbbl0pe3RoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW25dPSEwO3ZhciBpPXRoaXMuaW1hZ2VzW25dO2YoaSkmJnRoaXMudXBkYXRlSW1hZ2UobixpKX19fSxyfSh0LkV2ZW50ZWQpO3ZhciBwPWcsZD1nLG09MWUyMDtmdW5jdGlvbiBnKHQsZSxyLG4saSxhKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8InNhbnMtc2VyaWYiLHRoaXMuZm9udFdlaWdodD1hfHwibm9ybWFsIix0aGlzLnJhZGl1cz1yfHw4O3ZhciBvPXRoaXMuc2l6ZT10aGlzLmZvbnRTaXplKzIqdGhpcy5idWZmZXI7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PW8sdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmN0eC5mb250PXRoaXMuZm9udFdlaWdodCsiICIrdGhpcy5mb250U2l6ZSsicHggIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuY3R4LmZpbGxTdHlsZT0iYmxhY2siLHRoaXMuZ3JpZE91dGVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmdyaWRJbm5lcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5mPW5ldyBGbG9hdDY0QXJyYXkobyksdGhpcy5kPW5ldyBGbG9hdDY0QXJyYXkobyksdGhpcy56PW5ldyBGbG9hdDY0QXJyYXkobysxKSx0aGlzLnY9bmV3IEludDE2QXJyYXkobyksdGhpcy5taWRkbGU9TWF0aC5yb3VuZChvLzIqKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiR2Vja28vIik+PTA/MS4yOjEpKX1mdW5jdGlvbiB2KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wO3M8ZTtzKyspe2Zvcih2YXIgbD0wO2w8cjtsKyspbltsXT10W2wqZStzXTtmb3IoeShuLGksYSxvLHIpLGw9MDtsPHI7bCsrKXRbbCplK3NdPWlbbF19Zm9yKGw9MDtsPHI7bCsrKXtmb3Iocz0wO3M8ZTtzKyspbltzXT10W2wqZStzXTtmb3IoeShuLGksYSxvLGUpLHM9MDtzPGU7cysrKXRbbCplK3NdPU1hdGguc3FydChpW3NdKX19ZnVuY3Rpb24geSh0LGUscixuLGkpe3JbMF09MCxuWzBdPS1tLG5bMV09K207Zm9yKHZhciBhPTEsbz0wO2E8aTthKyspe2Zvcih2YXIgcz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3M8PW5bb107KW8tLSxzPSh0W2FdK2EqYS0odFtyW29dXStyW29dKnJbb10pKS8oMiphLTIqcltvXSk7clsrK29dPWEsbltvXT1zLG5bbysxXT0rbX1mb3IoYT0wLG89MDthPGk7YSsrKXtmb3IoO25bbysxXTxhOylvKys7ZVthXT0oYS1yW29dKSooYS1yW29dKSt0W3Jbb11dfX1nLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSksdGhpcy5jdHguZmlsbFRleHQodCx0aGlzLmJ1ZmZlcix0aGlzLm1pZGRsZSk7Zm9yKHZhciBlPXRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSkscj1uZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplKnRoaXMuc2l6ZSksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBpPWUuZGF0YVs0Km4rM10vMjU1O3RoaXMuZ3JpZE91dGVyW25dPTE9PT1pPzA6MD09PWk/bTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LWkpLDIpLHRoaXMuZ3JpZElubmVyW25dPTE9PT1pP206MD09PWk/MDpNYXRoLnBvdyhNYXRoLm1heCgwLGktLjUpLDIpfWZvcih2KHRoaXMuZ3JpZE91dGVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSx2KHRoaXMuZ3JpZElubmVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGE9dGhpcy5ncmlkT3V0ZXJbbl0tdGhpcy5ncmlkSW5uZXJbbl07cltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKGEvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpfXJldHVybiByfSxwLmRlZmF1bHQ9ZDt2YXIgeD1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdE1hbmFnZXI9dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07eC5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LHgucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2kucHVzaCh7c3RhY2s6YSxpZDpsfSl9dC5hc3luY0FsbChpLChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhY2ssaT10LmlkLGE9bi5lbnRyaWVzW3JdO2F8fChhPW4uZW50cmllc1tyXT17Z2x5cGhzOnt9LHJlcXVlc3RzOnt9LHJhbmdlczp7fX0pO3ZhciBvPWEuZ2x5cGhzW2ldO2lmKHZvaWQgMD09PW8pe2lmKG89bi5fdGlueVNERihhLHIsaSkpcmV0dXJuIGEuZ2x5cGhzW2ldPW8sdm9pZCBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKSk7ZWxzZSBpZihhLnJhbmdlc1tzXSllKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7ZWxzZXt2YXIgbD1hLnJlcXVlc3RzW3NdO2x8fChsPWEucmVxdWVzdHNbc109W10seC5sb2FkR2x5cGhSYW5nZShyLHMsbi51cmwsbi5yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24odCxlKXtpZihlKXtmb3IodmFyIHIgaW4gZSluLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKCtyKXx8KGEuZ2x5cGhzWytyXT1lWytyXSk7YS5yYW5nZXNbc109ITB9Zm9yKHZhciBpPTAsbz1sO2k8by5sZW5ndGg7aSs9MSl7KDAsb1tpXSkodCxlKX1kZWxldGUgYS5yZXF1ZXN0c1tzXX0pKSksbC5wdXNoKChmdW5jdGlvbih0LG4pe3Q/ZSh0KTpuJiZlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpuW2ldfHxudWxsfSl9KSl9fWVsc2UgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pfSksKGZ1bmN0aW9uKHQsZSl7aWYodClyKHQpO2Vsc2UgaWYoZSl7Zm9yKHZhciBuPXt9LGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by5zdGFjayxsPW8uaWQsYz1vLmdseXBoOyhuW3NdfHwobltzXT17fSkpW2xdPWMmJntpZDpjLmlkLGJpdG1hcDpjLmJpdG1hcC5jbG9uZSgpLG1ldHJpY3M6Yy5tZXRyaWNzfX1yKG51bGwsbil9fSkpfSx4LnByb3RvdHlwZS5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaD1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5JiYodC5pc0NoYXJbIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXShlKXx8dC5pc0NoYXJbIkhhbmd1bCBTeWxsYWJsZXMiXShlKXx8dC5pc0NoYXIuSGlyYWdhbmEoZSl8fHQuaXNDaGFyLkthdGFrYW5hKGUpKX0seC5wcm90b3R5cGUuX3RpbnlTREY9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O2lmKGkmJnRoaXMuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgobikpe3ZhciBhPWUudGlueVNERjtpZighYSl7dmFyIG89IjQwMCI7L2JvbGQvaS50ZXN0KHIpP289IjkwMCI6L21lZGl1bS9pLnRlc3Qocik/bz0iNTAwIjovbGlnaHQvaS50ZXN0KHIpJiYobz0iMjAwIiksYT1lLnRpbnlTREY9bmV3IHguVGlueVNERigyNCwzLDgsLjI1LGksbyl9cmV0dXJue2lkOm4sYml0bWFwOm5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOjMwLGhlaWdodDozMH0sYS5kcmF3KFN0cmluZy5mcm9tQ2hhckNvZGUobikpKSxtZXRyaWNzOnt3aWR0aDoyNCxoZWlnaHQ6MjQsbGVmdDowLHRvcDotOCxhZHZhbmNlOjI0fX19fSx4LmxvYWRHbHlwaFJhbmdlPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89MjU2KnIscz1vKzI1NSxsPWkudHJhbnNmb3JtUmVxdWVzdChpLm5vcm1hbGl6ZUdseXBoc1VSTChuKS5yZXBsYWNlKCJ7Zm9udHN0YWNrfSIsZSkucmVwbGFjZSgie3JhbmdlfSIsbysiLSIrcyksdC5SZXNvdXJjZVR5cGUuR2x5cGhzKTt0LmdldEFycmF5QnVmZmVyKGwsKGZ1bmN0aW9uKGUscil7aWYoZSlhKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGk9MCxvPXQucGFyc2VHbHlwaFBCRihyKTtpPG8ubGVuZ3RoO2krPTEpe3ZhciBzPW9baV07bltzLmlkXT1zfWEobnVsbCxuKX19KSl9LHguVGlueVNERj1wO3ZhciBiPWZ1bmN0aW9uKCl7dGhpcy5zcGVjaWZpY2F0aW9uPXQuc3R5bGVTcGVjLmxpZ2h0LnBvc2l0aW9ufTtiLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oZS5leHByZXNzaW9uLmV2YWx1YXRlKHIpKX0sYi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OnQubnVtYmVyKGUueCxyLngsbikseTp0Lm51bWJlcihlLnksci55LG4pLHo6dC5udW1iZXIoZS56LHIueixuKX19O3ZhciBfPW5ldyB0LlByb3BlcnRpZXMoe2FuY2hvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5hbmNob3IpLHBvc2l0aW9uOm5ldyBiLGNvbG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmNvbG9yKSxpbnRlbnNpdHk6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuaW50ZW5zaXR5KX0pLHc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5fdHJhbnNpdGlvbmFibGU9bmV3IHQuVHJhbnNpdGlvbmFibGUoXyksdGhpcy5zZXRMaWdodChyKSx0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZUxpZ2h0LGUscikpZm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07dC5lbmRzV2l0aChuLCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlLnNldFRyYW5zaXRpb24obi5zbGljZSgwLC0iLXRyYW5zaXRpb24iLmxlbmd0aCksaSk6dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VmFsdWUobixpKX19LHIucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZyl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZy5oYXNUcmFuc2l0aW9uKCl9LHIucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucHJvcGVydGllcz10aGlzLl90cmFuc2l0aW9uaW5nLnBvc3NpYmx5RXZhbHVhdGUodCl9LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuKCFufHwhMSE9PW4udmFsaWRhdGUpJiZ0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsZS5jYWxsKHQudmFsaWRhdGVTdHlsZSx0LmV4dGVuZCh7dmFsdWU6cixzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH0sc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpKX0scn0odC5FdmVudGVkKSxUPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5uZXh0Um93PTAsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQpLHRoaXMuZGFzaEVudHJ5PXt9fTtULnByb3RvdHlwZS5nZXREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5qb2luKCIsIikrU3RyaW5nKGUpO3JldHVybiB0aGlzLmRhc2hFbnRyeVtyXXx8KHRoaXMuZGFzaEVudHJ5W3JdPXRoaXMuYWRkRGFzaCh0LGUpKSx0aGlzLmRhc2hFbnRyeVtyXX0sVC5wcm90b3R5cGUuZ2V0RGFzaFJhbmdlcz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT10Lmxlbmd0aCUyPT0xPy10W3QubGVuZ3RoLTFdKnI6MCxhPXRbMF0qcixvPSEwO24ucHVzaCh7bGVmdDppLHJpZ2h0OmEsaXNEYXNoOm8semVyb0xlbmd0aDowPT09dFswXX0pO2Zvcih2YXIgcz10WzBdLGw9MTtsPHQubGVuZ3RoO2wrKyl7bz0hbzt2YXIgYz10W2xdO2k9cypyLGE9KHMrPWMpKnIsbi5wdXNoKHtsZWZ0OmkscmlnaHQ6YSxpc0Rhc2g6byx6ZXJvTGVuZ3RoOjA9PT1jfSl9cmV0dXJuIG59LFQucHJvdG90eXBlLmFkZFJvdW5kRGFzaD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUvMixpPS1yO2k8PXI7aSsrKWZvcih2YXIgYT10aGlzLm5leHRSb3crcitpLG89dGhpcy53aWR0aCphLHM9MCxsPXRbc10sYz0wO2M8dGhpcy53aWR0aDtjKyspe2MvbC5yaWdodD4xJiYobD10Wysrc10pO3ZhciB1PU1hdGguYWJzKGMtbC5sZWZ0KSxmPU1hdGguYWJzKGMtbC5yaWdodCksaD1NYXRoLm1pbih1LGYpLHA9dm9pZCAwLGQ9aS9yKihuKzEpO2lmKGwuaXNEYXNoKXt2YXIgbT1uLU1hdGguYWJzKGQpO3A9TWF0aC5zcXJ0KGgqaCttKm0pfWVsc2UgcD1uLU1hdGguc3FydChoKmgrZCpkKTt0aGlzLmRhdGFbbytjXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxwKzEyOCkpfX0sVC5wcm90b3R5cGUuYWRkUmVndWxhckRhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRbZV0sbj10W2UrMV07ci56ZXJvTGVuZ3RoP3Quc3BsaWNlKGUsMSk6biYmbi5pc0Rhc2g9PT1yLmlzRGFzaCYmKG4ubGVmdD1yLmxlZnQsdC5zcGxpY2UoZSwxKSl9dmFyIGk9dFswXSxhPXRbdC5sZW5ndGgtMV07aS5pc0Rhc2g9PT1hLmlzRGFzaCYmKGkubGVmdD1hLmxlZnQtdGhpcy53aWR0aCxhLnJpZ2h0PWkucmlnaHQrdGhpcy53aWR0aCk7Zm9yKHZhciBvPXRoaXMud2lkdGgqdGhpcy5uZXh0Um93LHM9MCxsPXRbc10sYz0wO2M8dGhpcy53aWR0aDtjKyspe2MvbC5yaWdodD4xJiYobD10Wysrc10pO3ZhciB1PU1hdGguYWJzKGMtbC5sZWZ0KSxmPU1hdGguYWJzKGMtbC5yaWdodCksaD1NYXRoLm1pbih1LGYpLHA9bC5pc0Rhc2g/aDotaDt0aGlzLmRhdGFbbytjXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxwKzEyOCkpfX0sVC5wcm90b3R5cGUuYWRkRGFzaD1mdW5jdGlvbihlLHIpe3ZhciBuPXI/NzowLGk9MipuKzE7aWYodGhpcy5uZXh0Um93K2k+dGhpcy5oZWlnaHQpcmV0dXJuIHQud2Fybk9uY2UoIkxpbmVBdGxhcyBvdXQgb2Ygc3BhY2UiKSxudWxsO2Zvcih2YXIgYT0wLG89MDtvPGUubGVuZ3RoO28rKylhKz1lW29dO2lmKDAhPT1hKXt2YXIgcz10aGlzLndpZHRoL2EsbD10aGlzLmdldERhc2hSYW5nZXMoZSx0aGlzLndpZHRoLHMpO3I/dGhpcy5hZGRSb3VuZERhc2gobCxzLG4pOnRoaXMuYWRkUmVndWxhckRhc2gobCl9dmFyIGM9e3k6KHRoaXMubmV4dFJvdytuKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipuL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPWksdGhpcy5kaXJ0eT0hMCxjfSxULnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy50ZXh0dXJlPyhlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHRoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlLkFMUEhBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5BTFBIQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsZS5BTFBIQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSl9O3ZhciBrPWZ1bmN0aW9uIGUocixuKXt0aGlzLndvcmtlclBvb2w9cix0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wLHRoaXMuaWQ9dC51bmlxdWVJZCgpO2Zvcih2YXIgaT10aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uZXcgZS5BY3RvcihvLG4sdGhpcy5pZCk7cy5uYW1lPSJXb3JrZXIgIithLHRoaXMuYWN0b3JzLnB1c2gocyl9fTtmdW5jdGlvbiBBKGUscixuKXt2YXIgaT1mdW5jdGlvbihpLGEpe2lmKGkpcmV0dXJuIG4oaSk7aWYoYSl7dmFyIG89dC5waWNrKHQuZXh0ZW5kKGEsZSksWyJ0aWxlcyIsIm1pbnpvb20iLCJtYXh6b29tIiwiYXR0cmlidXRpb24iLCJtYXBib3hfbG9nbyIsImJvdW5kcyIsInNjaGVtZSIsInRpbGVTaXplIiwiZW5jb2RpbmciXSk7YS52ZWN0b3JfbGF5ZXJzJiYoby52ZWN0b3JMYXllcnM9YS52ZWN0b3JfbGF5ZXJzLG8udmVjdG9yTGF5ZXJJZHM9by52ZWN0b3JMYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSksby50aWxlcz1yLmNhbm9uaWNhbGl6ZVRpbGVzZXQobyxlLnVybCksbihudWxsLG8pfX07cmV0dXJuIGUudXJsP3QuZ2V0SlNPTihyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTb3VyY2VVUkwoZS51cmwpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksaSk6dC5icm93c2VyLmZyYW1lKChmdW5jdGlvbigpe3JldHVybiBpKG51bGwsZSl9KSl9ay5wcm90b3R5cGUuYnJvYWRjYXN0PWZ1bmN0aW9uKGUscixuKXtuPW58fGZ1bmN0aW9uKCl7fSx0LmFzeW5jQWxsKHRoaXMuYWN0b3JzLChmdW5jdGlvbih0LG4pe3Quc2VuZChlLHIsbil9KSxuKX0say5wcm90b3R5cGUuZ2V0QWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50QWN0b3I9KHRoaXMuY3VycmVudEFjdG9yKzEpJXRoaXMuYWN0b3JzLmxlbmd0aCx0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl19LGsucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSksdGhpcy5hY3RvcnM9W10sdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCl9LGsuQWN0b3I9dC5BY3Rvcjt2YXIgTT1mdW5jdGlvbihlLHIsbil7dGhpcy5ib3VuZHM9dC5MbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGUpKSx0aGlzLm1pbnpvb209cnx8MCx0aGlzLm1heHpvb209bnx8MjR9O00ucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LE0ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciByPU1hdGgucG93KDIsZS56KSxuPU1hdGguZmxvb3IodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkqciksaT1NYXRoLmZsb29yKHQubWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSpyKSxhPU1hdGguY2VpbCh0Lm1lcmNhdG9yWGZyb21MbmcodGhpcy5ib3VuZHMuZ2V0RWFzdCgpKSpyKSxvPU1hdGguY2VpbCh0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkqcik7cmV0dXJuIGUueD49biYmZS54PGEmJmUueT49aSYmZS55PG99O3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMuX2xvYWRlZD0hMSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiLCJwcm9tb3RlSWQiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InZlY3RvciJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcigidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTIiKTt0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PUEodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBNKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzLGUubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pLHQucG9zdE1hcExvYWRFdmVudChuLnRpbGVzLGUubWFwLl9nZXRNYXBJZCgpLGUubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4sZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fdGlsZUpTT05SZXF1ZXN0JiYodGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1udWxsKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSkpLGk9e3JlcXVlc3Q6dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSx1aWQ6ZS51aWQsdGlsZUlEOmUudGlsZUlELHpvb206ZS50aWxlSUQub3ZlcnNjYWxlZFosdGlsZVNpemU6dGhpcy50aWxlU2l6ZSplLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZCxwaXhlbFJhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMscHJvbW90ZUlkOnRoaXMucHJvbW90ZUlkfTtmdW5jdGlvbiBhKG4saSl7cmV0dXJuIGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkP3IobnVsbCk6biYmNDA0IT09bi5zdGF0dXM/cihuKTooaSYmaS5yZXNvdXJjZVRpbWluZyYmKGUucmVzb3VyY2VUaW1pbmc9aS5yZXNvdXJjZVRpbWluZyksdGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmkmJmUuc2V0RXhwaXJ5RGF0YShpKSxlLmxvYWRWZWN0b3JEYXRhKGksdGhpcy5tYXAucGFpbnRlciksdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZCh0aGlzLmRpc3BhdGNoZXIpLHIobnVsbCksdm9pZChlLnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZShlLGUucmVsb2FkQ2FsbGJhY2spLGUucmVsb2FkQ2FsbGJhY2s9bnVsbCkpKX1pLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyxlLmFjdG9yJiYiZXhwaXJlZCIhPT1lLnN0YXRlPyJsb2FkaW5nIj09PWUuc3RhdGU/ZS5yZWxvYWRDYWxsYmFjaz1yOmUucmVxdWVzdD1lLmFjdG9yLnNlbmQoInJlbG9hZFRpbGUiLGksYS5iaW5kKHRoaXMpKTooZS5hY3Rvcj10aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKSxlLnJlcXVlc3Q9ZS5hY3Rvci5zZW5kKCJsb2FkVGlsZSIsaSxhLmJpbmQodGhpcykpKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSx0LmFjdG9yJiZ0LmFjdG9yLnNlbmQoImFib3J0VGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0LmFjdG9yJiZ0LmFjdG9yLnNlbmQoInJlbW92ZVRpbGUiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxFPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy50eXBlPSJyYXN0ZXIiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7dHlwZToicmFzdGVyIn0sbiksdC5leHRlbmQodGhpcyx0LnBpY2sobixbInVybCIsInNjaGVtZSIsInRpbGVTaXplIl0pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9QSh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24ocixuKXtlLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCxlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IE0obi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLHQucG9zdFR1cm5zdGlsZUV2ZW50KG4udGlsZXMpLHQucG9zdE1hcExvYWRFdmVudChuLnRpbGVzLGUubWFwLl9nZXRNYXBJZCgpLGUubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl90aWxlSlNPTlJlcXVlc3QmJih0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PW51bGwpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnRpbGVTaXplKTtlLnJlcXVlc3Q9dC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChpLHQuUmVzb3VyY2VUeXBlLlRpbGUpLChmdW5jdGlvbihpLGEpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9InVubG9hZGVkIixyKG51bGwpO2Vsc2UgaWYoaSllLnN0YXRlPSJlcnJvcmVkIixyKGkpO2Vsc2UgaWYoYSl7bi5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmUuc2V0RXhwaXJ5RGF0YShhKSxkZWxldGUgYS5jYWNoZUNvbnRyb2wsZGVsZXRlIGEuZXhwaXJlczt2YXIgbz1uLm1hcC5wYWludGVyLmNvbnRleHQscz1vLmdsO2UudGV4dHVyZT1uLm1hcC5wYWludGVyLmdldFRpbGVUZXh0dXJlKGEud2lkdGgpLGUudGV4dHVyZT9lLnRleHR1cmUudXBkYXRlKGEse3VzZU1pcG1hcDohMH0pOihlLnRleHR1cmU9bmV3IHQuVGV4dHVyZShvLGEscy5SR0JBLHt1c2VNaXBtYXA6ITB9KSxlLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLG8uZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiZzLnRleFBhcmFtZXRlcmYocy5URVhUVVJFXzJELG8uZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULG8uZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4KSksZS5zdGF0ZT0ibG9hZGVkIix0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkKG4uZGlzcGF0Y2hlcikscihudWxsKX19KSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSxlKCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt0LnRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQudGV4dHVyZSksZSgpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksTD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLHRoaXMudHlwZT0icmFzdGVyLWRlbSIsdGhpcy5tYXh6b29tPTIyLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InJhc3Rlci1kZW0ifSxuKSx0aGlzLmVuY29kaW5nPW4uZW5jb2Rpbmd8fCJtYXBib3gifXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmFzdGVyLWRlbSIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnRpbGVTaXplKTtmdW5jdGlvbiBpKHQsbil7dCYmKGUuc3RhdGU9ImVycm9yZWQiLHIodCkpLG4mJihlLmRlbT1uLGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwLGUuc3RhdGU9ImxvYWRlZCIscihudWxsKSl9ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbihuLGEpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9InVubG9hZGVkIixyKG51bGwpO2Vsc2UgaWYobillLnN0YXRlPSJlcnJvcmVkIixyKG4pO2Vsc2UgaWYoYSl7dGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmUuc2V0RXhwaXJ5RGF0YShhKSxkZWxldGUgYS5jYWNoZUNvbnRyb2wsZGVsZXRlIGEuZXhwaXJlczt2YXIgbz10LndpbmRvdy5JbWFnZUJpdG1hcCYmYSBpbnN0YW5jZW9mIHQud2luZG93LkltYWdlQml0bWFwJiZ0Lm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP2E6dC5icm93c2VyLmdldEltYWdlRGF0YShhLDEpLHM9e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6byxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLmFjdG9yJiYiZXhwaXJlZCIhPT1lLnN0YXRlfHwoZS5hY3Rvcj10aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKSxlLmFjdG9yLnNlbmQoImxvYWRERU1UaWxlIixzLGkuYmluZCh0aGlzKSkpfX0uYmluZCh0aGlzKSksZS5uZWlnaGJvcmluZ1RpbGVzPXRoaXMuX2dldE5laWdoYm9yaW5nVGlsZXMoZS50aWxlSUQpfSxyLnByb3RvdHlwZS5fZ2V0TmVpZ2hib3JpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj1lLmNhbm9uaWNhbCxuPU1hdGgucG93KDIsci56KSxpPShyLngtMStuKSVuLGE9MD09PXIueD9lLndyYXAtMTplLndyYXAsbz0oci54KzErbiklbixzPXIueCsxPT09bj9lLndyYXArMTplLndyYXAsbD17fTtyZXR1cm4gbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxyLnk+MCYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSksci55KzE8biYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSksbH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LmRlbVRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQuZGVtVGV4dHVyZSksdC5mYm8mJih0LmZiby5kZXN0cm95KCksZGVsZXRlIHQuZmJvKSx0LmRlbSYmZGVsZXRlIHQuZGVtLGRlbGV0ZSB0Lm5laWdoYm9yaW5nVGlsZXMsdC5zdGF0ZT0idW5sb2FkZWQiLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlREVNVGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0pfSxyfShFKSxDPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLnR5cGU9Imdlb2pzb24iLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0xOCx0aGlzLnRpbGVTaXplPTUxMix0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLl9yZW1vdmVkPSExLHRoaXMuX2xvYWRlZD0hMSx0aGlzLmFjdG9yPWkuZ2V0QWN0b3IoKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSksbi5hdHRyaWJ1dGlvbiYmKHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbiksdGhpcy5wcm9tb3RlSWQ9bi5wcm9tb3RlSWQ7dmFyIG89dC5FWFRFTlQvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuRVhURU5ULG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sc3VwZXJjbHVzdGVyT3B0aW9uczp7bWF4Wm9vbTp2b2lkIDAhPT1uLmNsdXN0ZXJNYXhab29tP01hdGgubWluKG4uY2x1c3Rlck1heFpvb20sdGhpcy5tYXh6b29tLTEpOnRoaXMubWF4em9vbS0xLGV4dGVudDp0LkVYVEVOVCxyYWRpdXM6KG4uY2x1c3RlclJhZGl1c3x8NTApKm8sbG9nOiExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sY2x1c3RlclByb3BlcnRpZXM6bi5jbHVzdGVyUHJvcGVydGllc30sbi53b3JrZXJPcHRpb25zKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGZ1bmN0aW9uKHIpe2lmKHIpZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpO2Vsc2V7dmFyIG49e2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9O2UuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1lLl9yZXNvdXJjZVRpbWluZyxlLl9yZXNvdXJjZVRpbWluZz1bXSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIixuKSl9fSkpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX2RhdGE9ZSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZnVuY3Rpb24oZSl7aWYoZSlyLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifTtyLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ci5fcmVzb3VyY2VUaW1pbmcsci5fcmVzb3VyY2VUaW1pbmc9W10pLHIuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20iLHtjbHVzdGVySWQ6dCxzb3VyY2U6dGhpcy5pZH0sZSksdGhpc30sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyQ2hpbGRyZW4iLHtjbHVzdGVySWQ6dCxzb3VyY2U6dGhpcy5pZH0sZSksdGhpc30sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckxlYXZlcz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJMZWF2ZXMiLHtzb3VyY2U6dGhpcy5pZCxjbHVzdGVySWQ6dCxsaW1pdDplLG9mZnNldDpyfSxuKSx0aGlzfSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyRGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuX2xvYWRlZD0hMTt2YXIgbj10LmV4dGVuZCh7fSx0aGlzLndvcmtlck9wdGlvbnMpLGk9dGhpcy5fZGF0YTsic3RyaW5nIj09dHlwZW9mIGk/KG4ucmVxdWVzdD10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh0LmJyb3dzZXIucmVzb2x2ZVVSTChpKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLG4ucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nKTpuLmRhdGE9SlNPTi5zdHJpbmdpZnkoaSksdGhpcy5hY3Rvci5zZW5kKHRoaXMudHlwZSsiLmxvYWREYXRhIixuLChmdW5jdGlvbih0LGkpe3IuX3JlbW92ZWR8fGkmJmkuYWJhbmRvbmVkfHwoci5fbG9hZGVkPSEwLGkmJmkucmVzb3VyY2VUaW1pbmcmJmkucmVzb3VyY2VUaW1pbmdbci5pZF0mJihyLl9yZXNvdXJjZVRpbWluZz1pLnJlc291cmNlVGltaW5nW3IuaWRdLnNsaWNlKDApKSxyLmFjdG9yLnNlbmQoci50eXBlKyIuY29hbGVzY2UiLHtzb3VyY2U6bi5zb3VyY2V9LG51bGwpLGUodCkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLmFjdG9yPyJyZWxvYWRUaWxlIjoibG9hZFRpbGUiO2UuYWN0b3I9dGhpcy5hY3Rvcjt2YXIgYT17dHlwZTp0aGlzLnR5cGUsdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLHByb21vdGVJZDp0aGlzLnByb21vdGVJZH07ZS5yZXF1ZXN0PXRoaXMuYWN0b3Iuc2VuZChpLGEsKGZ1bmN0aW9uKHQsYSl7cmV0dXJuIGRlbGV0ZSBlLnJlcXVlc3QsZS51bmxvYWRWZWN0b3JEYXRhKCksZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihlLmxvYWRWZWN0b3JEYXRhKGEsbi5tYXAucGFpbnRlciwicmVsb2FkVGlsZSI9PT1pKSxyKG51bGwpKX0pKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSx0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlZD0hMCx0aGlzLmFjdG9yLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLFA9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn0se25hbWU6ImFfdGV4dHVyZV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XSksST1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPW4sdGhpcy5jb29yZGluYXRlcz1yLmNvb3JkaW5hdGVzLHRoaXMudHlwZT0iaW1hZ2UiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuX2xvYWRlZD0hMSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy51cmw9dGhpcy5vcHRpb25zLnVybCx0LmdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLHQuUmVzb3VyY2VUeXBlLkltYWdlKSwoZnVuY3Rpb24oaSxhKXtuLl9sb2FkZWQ9ITAsaT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChpKSk6YSYmKG4uaW1hZ2U9YSxlJiYobi5jb29yZGluYXRlcz1lKSxyJiZyKCksbi5fZmluaXNoTG9hZGluZygpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5pbWFnZSYmdC51cmw/KHRoaXMub3B0aW9ucy51cmw9dC51cmwsdGhpcy5sb2FkKHQuY29vcmRpbmF0ZXMsKGZ1bmN0aW9uKCl7ZS50ZXh0dXJlPW51bGx9KSksdGhpcyk6dGhpc30sci5wcm90b3R5cGUuX2ZpbmlzaExvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcyksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn0pKSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5jb29yZGluYXRlcz1lO3ZhciBuPWUubWFwKHQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQpO3RoaXMudGlsZUlEPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0xLzAsbj0xLzAsaT0tMS8wLGE9LTEvMCxvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtyPU1hdGgubWluKHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC54KSxhPU1hdGgubWF4KGEsbC55KX12YXIgYz1pLXIsdT1hLW4sZj1NYXRoLm1heChjLHUpLGg9TWF0aC5tYXgoMCxNYXRoLmZsb29yKC1NYXRoLmxvZyhmKS9NYXRoLkxOMikpLHA9TWF0aC5wb3coMixoKTtyZXR1cm4gbmV3IHQuQ2Fub25pY2FsVGlsZUlEKGgsTWF0aC5mbG9vcigocitpKS8yKnApLE1hdGguZmxvb3IoKG4rYSkvMipwKSl9KG4pLHRoaXMubWluem9vbT10aGlzLm1heHpvb209dGhpcy50aWxlSUQuejt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHIudGlsZUlELmdldFRpbGVQb2ludCh0KS5fcm91bmQoKX0pKTtyZXR1cm4gdGhpcy5fYm91bmRzQXJyYXk9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQ0aTgsdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVswXS54LGlbMF0ueSwwLDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMV0ueCxpWzFdLnksdC5FWFRFTlQsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVszXS54LGlbM10ueSwwLHQuRVhURU5UKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzJdLngsaVsyXS55LHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmJvdW5kc0J1ZmZlciYmKHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCYmdGhpcy5pbWFnZSl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxQLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmltYWdlLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGk9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWkuc3RhdGUmJihpLnN0YXRlPSJsb2FkZWQiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCk7dmFyIE89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixpKSx0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnR5cGU9InZpZGVvIix0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbG9hZGVkPSExO3ZhciByPXRoaXMub3B0aW9uczt0aGlzLnVybHM9W107Zm9yKHZhciBuPTAsaT1yLnVybHM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMudXJscy5wdXNoKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGEsdC5SZXNvdXJjZVR5cGUuU291cmNlKS51cmwpfXQuZ2V0VmlkZW8odGhpcy51cmxzLChmdW5jdGlvbihyLG4pe2UuX2xvYWRlZD0hMCxyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYoZS52aWRlbz1uLGUudmlkZW8ubG9vcD0hMCxlLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLChmdW5jdGlvbigpe2UubWFwLnRyaWdnZXJSZXBhaW50KCl9KSksZS5tYXAmJmUudmlkZW8ucGxheSgpLGUuX2ZpbmlzaExvYWRpbmcoKSl9KSl9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy52aWRlbyYmdGhpcy52aWRlby5wYXVzZSgpfSxyLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy52aWRlbyYmdGhpcy52aWRlby5wbGF5KCl9LHIucHJvdG90eXBlLnNlZWs9ZnVuY3Rpb24oZSl7aWYodGhpcy52aWRlbyl7dmFyIHI9dGhpcy52aWRlby5zZWVrYWJsZTtlPHIuc3RhcnQoMCl8fGU+ci5lbmQoMCk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrdGhpcy5pZCxudWxsLCJQbGF5YmFjayBmb3IgdGhpcyB2aWRlbyBjYW4gYmUgc2V0IG9ubHkgYmV0d2VlbiB0aGUgIityLnN0YXJ0KDApKyIgYW5kICIrci5lbmQoMCkrIi1zZWNvbmQgbWFyay4iKSkpOnRoaXMudmlkZW8uY3VycmVudFRpbWU9ZX19LHIucHJvdG90eXBlLmdldFZpZGVvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW99LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwfHwodGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLnZpZGVvJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSkpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoISgwPT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RofHx0aGlzLnZpZGVvLnJlYWR5U3RhdGU8Mikpe3ZhciBlPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxyPWUuZ2w7Zm9yKHZhciBuIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksUC5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZT90aGlzLnZpZGVvLnBhdXNlZHx8KHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSksci50ZXhTdWJJbWFnZTJEKHIuVEVYVFVSRV8yRCwwLDAsMCxyLlJHQkEsci5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLnZpZGVvLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGk9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWkuc3RhdGUmJihpLnN0YXRlPSJsb2FkZWQiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJ2aWRlbyIsdXJsczp0aGlzLnVybHMsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlbyYmIXRoaXMudmlkZW8ucGF1c2VkfSxyfShJKSx6PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksbi5jb29yZGluYXRlcz9BcnJheS5pc0FycmF5KG4uY29vcmRpbmF0ZXMpJiY0PT09bi5jb29yZGluYXRlcy5sZW5ndGgmJiFuLmNvb3JkaW5hdGVzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGh8fHQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fSkpfSkpfHx0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJyJjb29yZGluYXRlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiA0IGxvbmdpdHVkZS9sYXRpdHVkZSBhcnJheSBwYWlycycpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJjb29yZGluYXRlcyInKSkpLG4uYW5pbWF0ZSYmImJvb2xlYW4iIT10eXBlb2Ygbi5hbmltYXRlJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJ29wdGlvbmFsICJhbmltYXRlIiBwcm9wZXJ0eSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZScpKSksbi5jYW52YXM/InN0cmluZyI9PXR5cGVvZiBuLmNhbnZhc3x8bi5jYW52YXMgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MQ2FudmFzRWxlbWVudHx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCciY2FudmFzIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImNhbnZhcyInKSkpLHRoaXMub3B0aW9ucz1uLHRoaXMuYW5pbWF0ZT12b2lkIDA9PT1uLmFuaW1hdGV8fG4uYW5pbWF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuX2xvYWRlZD0hMCx0aGlzLmNhbnZhc3x8KHRoaXMuY2FudmFzPXRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKX0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmcmJih0aGlzLnByZXBhcmUoKSx0aGlzLl9wbGF5aW5nPSExKX0sdGhpcy5fZmluaXNoTG9hZGluZygpKX0sci5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMuY2FudmFzJiZ0aGlzLmFuaW1hdGUmJnRoaXMucGxheSgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMucGF1c2UoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe3ZhciBlPSExO2lmKHRoaXMuY2FudmFzLndpZHRoIT09dGhpcy53aWR0aCYmKHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsZT0hMCksdGhpcy5jYW52YXMuaGVpZ2h0IT09dGhpcy5oZWlnaHQmJih0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsZT0hMCksIXRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkmJjAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgpe3ZhciByPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxuPXIuZ2w7Zm9yKHZhciBpIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ci5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksUC5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZT8oZXx8dGhpcy5fcGxheWluZykmJnRoaXMudGV4dHVyZS51cGRhdGUodGhpcy5jYW52YXMse3ByZW11bHRpcGx5OiEwfSk6dGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUocix0aGlzLmNhbnZhcyxuLlJHQkEse3ByZW11bHRpcGx5OiEwfSksdGhpcy50aWxlcyl7dmFyIGE9dGhpcy50aWxlc1tpXTsibG9hZGVkIiE9PWEuc3RhdGUmJihhLnN0YXRlPSJsb2FkZWQiLGEudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJjYW52YXMiLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXlpbmd9LHIucHJvdG90eXBlLl9oYXNJbnZhbGlkRGltZW5zaW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9W3RoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodF07dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKGlzTmFOKHIpfHxyPD0wKXJldHVybiEwfXJldHVybiExfSxyfShJKSxEPXt2ZWN0b3I6UyxyYXN0ZXI6RSwicmFzdGVyLWRlbSI6TCxnZW9qc29uOkMsdmlkZW86TyxpbWFnZTpJLGNhbnZhczp6fTtmdW5jdGlvbiBSKGUscil7dmFyIG49dC5pZGVudGl0eShbXSk7cmV0dXJuIHQudHJhbnNsYXRlKG4sbixbMSwxLDBdKSx0LnNjYWxlKG4sbixbLjUqZS53aWR0aCwuNSplLmhlaWdodCwxXSksdC5tdWx0aXBseShuLG4sZS5jYWxjdWxhdGVQb3NNYXRyaXgoci50b1Vud3JhcHBlZCgpKSl9ZnVuY3Rpb24gRih0LGUscixuLGksYSl7dmFyIG89ZnVuY3Rpb24odCxlLHIpe2lmKHQpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9ZVtpW25dXTtpZihhJiZhLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1hLnR5cGUpcmV0dXJuITB9ZWxzZSBmb3IodmFyIG8gaW4gZSl7dmFyIHM9ZVtvXTtpZihzLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1zLnR5cGUpcmV0dXJuITB9cmV0dXJuITF9KGkmJmkubGF5ZXJzLGUsdC5pZCkscz1hLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxsPXQudGlsZXNJbihuLHMsbyk7bC5zb3J0KEIpO2Zvcih2YXIgYz1bXSx1PTAsZj1sO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtjLnB1c2goe3dyYXBwZWRUaWxlSUQ6aC50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6aC50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHIsdC5fc3RhdGUsaC5xdWVyeUdlb21ldHJ5LGguY2FtZXJhUXVlcnlHZW9tZXRyeSxoLnNjYWxlLGksYSxzLFIodC50cmFuc2Zvcm0saC50aWxlSUQpKX0pfXZhciBwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPXt9LG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5xdWVyeVJlc3VsdHMscz1hLndyYXBwZWRUaWxlSUQsbD1yW3NdPXJbc118fHt9O2Zvcih2YXIgYyBpbiBvKWZvcih2YXIgdT1vW2NdLGY9bFtjXT1sW2NdfHx7fSxoPWVbY109ZVtjXXx8W10scD0wLGQ9dTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBtPWRbcF07ZlttLmZlYXR1cmVJbmRleF18fChmW20uZmVhdHVyZUluZGV4XT0hMCxoLnB1c2gobSkpfX1yZXR1cm4gZX0oYyk7Zm9yKHZhciBkIGluIHApcFtkXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLmZlYXR1cmUsbj10LmdldEZlYXR1cmVTdGF0ZShyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxyLmlkKTtyLnNvdXJjZT1yLmxheWVyLnNvdXJjZSxyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKHIuc291cmNlTGF5ZXI9ci5sYXllclsic291cmNlLWxheWVyIl0pLHIuc3RhdGU9bn0pKTtyZXR1cm4gcH1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgTj1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07Ti5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWZvcih2YXIgZT0wLHI9dGhpcy5kYXRhW3RdO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtuLnRpbWVvdXQmJmNsZWFyVGltZW91dChuLnRpbWVvdXQpLHRoaXMub25SZW1vdmUobi52YWx1ZSl9cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXQud3JhcHBlZCgpLmtleTt2b2lkIDA9PT10aGlzLmRhdGFbaV0mJih0aGlzLmRhdGFbaV09W10pO3ZhciBhPXt2YWx1ZTplLHRpbWVvdXQ6dm9pZCAwfTtpZih2b2lkIDAhPT1yJiYoYS50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5yZW1vdmUodCxhKX0pLHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sTi5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LE4ucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sTi5wcm90b3R5cGUuZ2V0QnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdO3JldHVybiBlP2VbMF0udmFsdWU6bnVsbH0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxOLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGk9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksaS50aW1lb3V0JiZjbGVhclRpbWVvdXQoaS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGkudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxOLnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc30sTi5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLmRhdGEpZm9yKHZhciBuPTAsaT10aGlzLmRhdGFbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QoYS52YWx1ZSl8fGUucHVzaChhKX1mb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3RoaXMucmVtb3ZlKGwudmFsdWUudGlsZUlELGwpfX07dmFyIGo9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2oucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sai5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIFU9e0ludDg6IkJZVEUiLFVpbnQ4OiJVTlNJR05FRF9CWVRFIixJbnQxNjoiU0hPUlQiLFVpbnQxNjoiVU5TSUdORURfU0hPUlQiLEludDMyOiJJTlQiLFVpbnQzMjoiVU5TSUdORURfSU5UIixGbG9hdDMyOiJGTE9BVCJ9LFY9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5hdHRyaWJ1dGVzPXIsdGhpcy5pdGVtU2l6ZT1lLmJ5dGVzUGVyRWxlbWVudCx0aGlzLmR5bmFtaWNEcmF3PW4sdGhpcy5jb250ZXh0PXQ7dmFyIGk9dC5nbDt0aGlzLmJ1ZmZlcj1pLmNyZWF0ZUJ1ZmZlcigpLHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLGkuYnVmZmVyRGF0YShpLkFSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/aS5EWU5BTUlDX0RSQVc6aS5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O1YucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxWLnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5BUlJBWV9CVUZGRVIsMCx0LmFycmF5QnVmZmVyKX0sVi5wcm90b3R5cGUuZW5hYmxlQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxpPWUuYXR0cmlidXRlc1tuLm5hbWVdO3ZvaWQgMCE9PWkmJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSxWLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbVVtpLnR5cGVdXSwhMSx0aGlzLml0ZW1TaXplLGkub2Zmc2V0K3RoaXMuaXRlbVNpemUqKHJ8fDApKX19LFYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIEg9ZnVuY3Rpb24odCl7dGhpcy5nbD10LmdsLHRoaXMuZGVmYXVsdD10aGlzLmdldERlZmF1bHQoKSx0aGlzLmN1cnJlbnQ9dGhpcy5kZWZhdWx0LHRoaXMuZGlydHk9ITF9O0gucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEgucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt9LEgucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0fSxILnByb3RvdHlwZS5zZXREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5zZXQodGhpcy5kZWZhdWx0KX07dmFyIHE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0oSCksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY2xlYXJEZXB0aCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksWT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY2xlYXJTdGVuY2lsKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxXPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblshMCwhMCwhMCwhMF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY29sb3JNYXNrKHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5kZXB0aE1hc2sodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDI1NX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLEo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2Z1bmM6dGhpcy5nbC5BTFdBWVMscmVmOjAsbWFzazoyNTV9fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LmZ1bmMhPT1lLmZ1bmN8fHQucmVmIT09ZS5yZWZ8fHQubWFzayE9PWUubWFza3x8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7cmV0dXJuW3QuS0VFUCx0LktFRVAsdC5LRUVQXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxPcCh0WzBdLHRbMV0sdFsyXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5TVEVOQ0lMX1RFU1QpOmUuZGlzYWJsZShlLlNURU5DSUxfVEVTVCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLCQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoUmFuZ2UodFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5ERVBUSF9URVNUKTplLmRpc2FibGUoZS5ERVBUSF9URVNUKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksZXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuTEVTU30sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxydD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkJMRU5EKTplLmRpc2FibGUoZS5CTEVORCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLG50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7cmV0dXJuW3QuT05FLHQuWkVST119LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kRnVuYyh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxpdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5Db2xvci50cmFuc3BhcmVudH0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodC5yIT09ZS5yfHx0LmchPT1lLmd8fHQuYiE9PWUuYnx8dC5hIT09ZS5hfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRDb2xvcih0LnIsdC5nLHQuYix0LmEpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxyfShIKSxhdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5GVU5DX0FERH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRFcXVhdGlvbih0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksb3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5DVUxMX0ZBQ0UpOmUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLHN0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkJBQ0t9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmN1bGxGYWNlKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxsdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5DQ1d9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmZyb250RmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnVzZVByb2dyYW0odCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHV0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLlRFWFRVUkUwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxmdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dFszXSE9PWVbM118fHRoaXMuZGlydHkpJiYodGhpcy5nbC52aWV3cG9ydCh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRSZW5kZXJidWZmZXIoZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksbXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksZ3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO2UuYmluZEJ1ZmZlcihlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9LGV9KEgpLHZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSksdGhpcy52YW89ZS5leHRWZXJ0ZXhBcnJheU9iamVjdH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy52YW8mJih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCkseXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDR9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfQUxJR05NRU5ULHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSx4dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksYnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxfdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSksdGhpcy5jb250ZXh0PWUsdGhpcy5wYXJlbnQ9cn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlfShIKSx3dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3RoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTt2YXIgZT10aGlzLmdsO2UuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCx0LDApLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShfdCksVHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO3ZhciBlPXRoaXMuZ2w7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLGt0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBpPXQuZ2wsYT10aGlzLmZyYW1lYnVmZmVyPWkuY3JlYXRlRnJhbWVidWZmZXIoKTt0aGlzLmNvbG9yQXR0YWNobWVudD1uZXcgd3QodCxhKSxuJiYodGhpcy5kZXB0aEF0dGFjaG1lbnQ9bmV3IFR0KHQsYSkpfTtrdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbCxlPXRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO2lmKGUmJnQuZGVsZXRlVGV4dHVyZShlKSx0aGlzLmRlcHRoQXR0YWNobWVudCl7dmFyIHI9dGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7ciYmdC5kZWxldGVSZW5kZXJidWZmZXIocil9dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKX07dmFyIEF0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmZ1bmM9dCx0aGlzLm1hc2s9ZSx0aGlzLnJhbmdlPXJ9O0F0LlJlYWRPbmx5PSExLEF0LlJlYWRXcml0ZT0hMCxBdC5kaXNhYmxlZD1uZXcgQXQoNTE5LEF0LlJlYWRPbmx5LFswLDFdKTt2YXIgTXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMudGVzdD10LHRoaXMucmVmPWUsdGhpcy5tYXNrPXIsdGhpcy5mYWlsPW4sdGhpcy5kZXB0aEZhaWw9aSx0aGlzLnBhc3M9YX07TXQuZGlzYWJsZWQ9bmV3IE10KHtmdW5jOjUxOSxtYXNrOjB9LDAsMCw3NjgwLDc2ODAsNzY4MCk7dmFyIFN0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJsZW5kRnVuY3Rpb249dCx0aGlzLmJsZW5kQ29sb3I9ZSx0aGlzLm1hc2s9cn07U3QuZGlzYWJsZWQ9bmV3IFN0KFN0LlJlcGxhY2U9WzEsMF0sdC5Db2xvci50cmFuc3BhcmVudCxbITEsITEsITEsITFdKSxTdC51bmJsZW5kZWQ9bmV3IFN0KFN0LlJlcGxhY2UsdC5Db2xvci50cmFuc3BhcmVudCxbITAsITAsITAsITBdKSxTdC5hbHBoYUJsZW5kZWQ9bmV3IFN0KFsxLDc3MV0sdC5Db2xvci50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTt2YXIgRXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZW5hYmxlPXQsdGhpcy5tb2RlPWUsdGhpcy5mcm9udEZhY2U9cn07RXQuZGlzYWJsZWQ9bmV3IEV0KCExLDEwMjksMjMwNSksRXQuYmFja0NDVz1uZXcgRXQoITAsMTAyOSwyMzA1KTt2YXIgTHQ9ZnVuY3Rpb24odCl7dGhpcy5nbD10LHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3Q9dGhpcy5nbC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksdGhpcy5jbGVhckNvbG9yPW5ldyBxKHRoaXMpLHRoaXMuY2xlYXJEZXB0aD1uZXcgRyh0aGlzKSx0aGlzLmNsZWFyU3RlbmNpbD1uZXcgWSh0aGlzKSx0aGlzLmNvbG9yTWFzaz1uZXcgVyh0aGlzKSx0aGlzLmRlcHRoTWFzaz1uZXcgWCh0aGlzKSx0aGlzLnN0ZW5jaWxNYXNrPW5ldyBaKHRoaXMpLHRoaXMuc3RlbmNpbEZ1bmM9bmV3IEoodGhpcyksdGhpcy5zdGVuY2lsT3A9bmV3IEsodGhpcyksdGhpcy5zdGVuY2lsVGVzdD1uZXcgUSh0aGlzKSx0aGlzLmRlcHRoUmFuZ2U9bmV3ICQodGhpcyksdGhpcy5kZXB0aFRlc3Q9bmV3IHR0KHRoaXMpLHRoaXMuZGVwdGhGdW5jPW5ldyBldCh0aGlzKSx0aGlzLmJsZW5kPW5ldyBydCh0aGlzKSx0aGlzLmJsZW5kRnVuYz1uZXcgbnQodGhpcyksdGhpcy5ibGVuZENvbG9yPW5ldyBpdCh0aGlzKSx0aGlzLmJsZW5kRXF1YXRpb249bmV3IGF0KHRoaXMpLHRoaXMuY3VsbEZhY2U9bmV3IG90KHRoaXMpLHRoaXMuY3VsbEZhY2VTaWRlPW5ldyBzdCh0aGlzKSx0aGlzLmZyb250RmFjZT1uZXcgbHQodGhpcyksdGhpcy5wcm9ncmFtPW5ldyBjdCh0aGlzKSx0aGlzLmFjdGl2ZVRleHR1cmU9bmV3IHV0KHRoaXMpLHRoaXMudmlld3BvcnQ9bmV3IGZ0KHRoaXMpLHRoaXMuYmluZEZyYW1lYnVmZmVyPW5ldyBodCh0aGlzKSx0aGlzLmJpbmRSZW5kZXJidWZmZXI9bmV3IHB0KHRoaXMpLHRoaXMuYmluZFRleHR1cmU9bmV3IGR0KHRoaXMpLHRoaXMuYmluZFZlcnRleEJ1ZmZlcj1uZXcgbXQodGhpcyksdGhpcy5iaW5kRWxlbWVudEJ1ZmZlcj1uZXcgZ3QodGhpcyksdGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmbmV3IHZ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFjaz1uZXcgeXQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYT1uZXcgeHQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFk9bmV3IGJ0KHRoaXMpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPXQuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4PXQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCkpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCYmKHQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLHRoaXMuZXh0UmVuZGVyVG9UZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSksdGhpcy5leHRUaW1lclF1ZXJ5PXQuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnkiKX07THQucHJvdG90eXBlLnNldERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLnVuYmluZFZBTygpLHRoaXMuY2xlYXJDb2xvci5zZXREZWZhdWx0KCksdGhpcy5jbGVhckRlcHRoLnNldERlZmF1bHQoKSx0aGlzLmNsZWFyU3RlbmNpbC5zZXREZWZhdWx0KCksdGhpcy5jb2xvck1hc2suc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhNYXNrLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxNYXNrLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxGdW5jLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxPcC5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsVGVzdC5zZXREZWZhdWx0KCksdGhpcy5kZXB0aFJhbmdlLnNldERlZmF1bHQoKSx0aGlzLmRlcHRoVGVzdC5zZXREZWZhdWx0KCksdGhpcy5kZXB0aEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmQuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRGdW5jLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kQ29sb3Iuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRFcXVhdGlvbi5zZXREZWZhdWx0KCksdGhpcy5jdWxsRmFjZS5zZXREZWZhdWx0KCksdGhpcy5jdWxsRmFjZVNpZGUuc2V0RGVmYXVsdCgpLHRoaXMuZnJvbnRGYWNlLnNldERlZmF1bHQoKSx0aGlzLnByb2dyYW0uc2V0RGVmYXVsdCgpLHRoaXMuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCksdGhpcy5iaW5kRnJhbWVidWZmZXIuc2V0RGVmYXVsdCgpLHRoaXMucGl4ZWxTdG9yZVVucGFjay5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpfSxMdC5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyQ29sb3IuZGlydHk9ITAsdGhpcy5jbGVhckRlcHRoLmRpcnR5PSEwLHRoaXMuY2xlYXJTdGVuY2lsLmRpcnR5PSEwLHRoaXMuY29sb3JNYXNrLmRpcnR5PSEwLHRoaXMuZGVwdGhNYXNrLmRpcnR5PSEwLHRoaXMuc3RlbmNpbE1hc2suZGlydHk9ITAsdGhpcy5zdGVuY2lsRnVuYy5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxPcC5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxUZXN0LmRpcnR5PSEwLHRoaXMuZGVwdGhSYW5nZS5kaXJ0eT0hMCx0aGlzLmRlcHRoVGVzdC5kaXJ0eT0hMCx0aGlzLmRlcHRoRnVuYy5kaXJ0eT0hMCx0aGlzLmJsZW5kLmRpcnR5PSEwLHRoaXMuYmxlbmRGdW5jLmRpcnR5PSEwLHRoaXMuYmxlbmRDb2xvci5kaXJ0eT0hMCx0aGlzLmJsZW5kRXF1YXRpb24uZGlydHk9ITAsdGhpcy5jdWxsRmFjZS5kaXJ0eT0hMCx0aGlzLmN1bGxGYWNlU2lkZS5kaXJ0eT0hMCx0aGlzLmZyb250RmFjZS5kaXJ0eT0hMCx0aGlzLnByb2dyYW0uZGlydHk9ITAsdGhpcy5hY3RpdmVUZXh0dXJlLmRpcnR5PSEwLHRoaXMudmlld3BvcnQuZGlydHk9ITAsdGhpcy5iaW5kRnJhbWVidWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kUmVuZGVyYnVmZmVyLmRpcnR5PSEwLHRoaXMuYmluZFRleHR1cmUuZGlydHk9ITAsdGhpcy5iaW5kVmVydGV4QnVmZmVyLmRpcnR5PSEwLHRoaXMuYmluZEVsZW1lbnRCdWZmZXIuZGlydHk9ITAsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmKHRoaXMuYmluZFZlcnRleEFycmF5T0VTLmRpcnR5PSEwKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2suZGlydHk9ITAsdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5kaXJ0eT0hMCx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5kaXJ0eT0hMH0sTHQucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBqKHRoaXMsdCxlKX0sTHQucHJvdG90eXBlLmNyZWF0ZVZlcnRleEJ1ZmZlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBWKHRoaXMsdCxlLHIpfSxMdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyYnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdsLGk9bi5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChpKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsdCxlLHIpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQobnVsbCksaX0sTHQucHJvdG90eXBlLmNyZWF0ZUZyYW1lYnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGt0KHRoaXMsdCxlLHIpfSxMdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb2xvcixyPXQuZGVwdGgsbj10aGlzLmdsLGk9MDtlJiYoaXw9bi5DT0xPUl9CVUZGRVJfQklULHRoaXMuY2xlYXJDb2xvci5zZXQoZSksdGhpcy5jb2xvck1hc2suc2V0KFshMCwhMCwhMCwhMF0pKSx2b2lkIDAhPT1yJiYoaXw9bi5ERVBUSF9CVUZGRVJfQklULHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsMV0pLHRoaXMuY2xlYXJEZXB0aC5zZXQociksdGhpcy5kZXB0aE1hc2suc2V0KCEwKSksbi5jbGVhcihpKX0sTHQucHJvdG90eXBlLnNldEN1bGxGYWNlPWZ1bmN0aW9uKHQpeyExPT09dC5lbmFibGU/dGhpcy5jdWxsRmFjZS5zZXQoITEpOih0aGlzLmN1bGxGYWNlLnNldCghMCksdGhpcy5jdWxsRmFjZVNpZGUuc2V0KHQubW9kZSksdGhpcy5mcm9udEZhY2Uuc2V0KHQuZnJvbnRGYWNlKSl9LEx0LnByb3RvdHlwZS5zZXREZXB0aE1vZGU9ZnVuY3Rpb24odCl7dC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5kZXB0aFRlc3Quc2V0KCEwKSx0aGlzLmRlcHRoRnVuYy5zZXQodC5mdW5jKSx0aGlzLmRlcHRoTWFzay5zZXQodC5tYXNrKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0KHQucmFuZ2UpKTp0aGlzLmRlcHRoVGVzdC5zZXQoITEpfSxMdC5wcm90b3R5cGUuc2V0U3RlbmNpbE1vZGU9ZnVuY3Rpb24odCl7dC50ZXN0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLnN0ZW5jaWxUZXN0LnNldCghMCksdGhpcy5zdGVuY2lsTWFzay5zZXQodC5tYXNrKSx0aGlzLnN0ZW5jaWxPcC5zZXQoW3QuZmFpbCx0LmRlcHRoRmFpbCx0LnBhc3NdKSx0aGlzLnN0ZW5jaWxGdW5jLnNldCh7ZnVuYzp0LnRlc3QuZnVuYyxyZWY6dC5yZWYsbWFzazp0LnRlc3QubWFza30pKTp0aGlzLnN0ZW5jaWxUZXN0LnNldCghMSl9LEx0LnByb3RvdHlwZS5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oZSl7dC5kZWVwRXF1YWwoZS5ibGVuZEZ1bmN0aW9uLFN0LlJlcGxhY2UpP3RoaXMuYmxlbmQuc2V0KCExKToodGhpcy5ibGVuZC5zZXQoITApLHRoaXMuYmxlbmRGdW5jLnNldChlLmJsZW5kRnVuY3Rpb24pLHRoaXMuYmxlbmRDb2xvci5zZXQoZS5ibGVuZENvbG9yKSksdGhpcy5jb2xvck1hc2suc2V0KGUubWFzayl9LEx0LnByb3RvdHlwZS51bmJpbmRWQU89ZnVuY3Rpb24oKXt0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZ0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCl9O3ZhciBDdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpKXt2YXIgYT10aGlzO2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5vbigiZGF0YSIsKGZ1bmN0aW9uKHQpeyJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUmJihhLl9zb3VyY2VMb2FkZWQ9ITApLGEuX3NvdXJjZUxvYWRlZCYmIWEuX3BhdXNlZCYmInNvdXJjZSI9PT10LmRhdGFUeXBlJiYiY29udGVudCI9PT10LnNvdXJjZURhdGFUeXBlJiYoYS5yZWxvYWQoKSxhLnRyYW5zZm9ybSYmYS51cGRhdGUoYS50cmFuc2Zvcm0pKX0pKSx0aGlzLm9uKCJlcnJvciIsKGZ1bmN0aW9uKCl7YS5fc291cmNlRXJyb3JlZD0hMH0pKSx0aGlzLl9zb3VyY2U9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bmV3IERbci50eXBlXShlLHIsbixpKTtpZihhLmlkIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFNvdXJjZSBpZCB0byBiZSAiK2UrIiBpbnN0ZWFkIG9mICIrYS5pZCk7cmV0dXJuIHQuYmluZEFsbChbImxvYWQiLCJhYm9ydCIsInVubG9hZCIsInNlcmlhbGl6ZSIsInByZXBhcmUiXSxhKSxhfShyLG4saSx0aGlzKSx0aGlzLl90aWxlcz17fSx0aGlzLl9jYWNoZT1uZXcgTigwLHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSksdGhpcy5fdGltZXJzPXt9LHRoaXMuX2NhY2hlVGltZXJzPXt9LHRoaXMuX21heFRpbGVDYWNoZVNpemU9bnVsbCx0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcz17fSx0aGlzLl9jb3ZlcmVkVGlsZXM9e30sdGhpcy5fc3RhdGU9bmV3IHQuU291cmNlRmVhdHVyZVN0YXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2lmKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZigibG9hZGVkIiE9PWUuc3RhdGUmJiJlcnJvcmVkIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSEwfSxyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpe3ZhciB0PXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lO3RoaXMuX3BhdXNlZD0hMSx0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0JiZ0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSl9fSxyLnByb3RvdHlwZS5fbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc291cmNlLmxvYWRUaWxlKHQsZSl9LHIucHJvdG90eXBlLl91bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0LChmdW5jdGlvbigpe30pKX0sci5wcm90b3R5cGUuX2Fib3J0VGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHQsKGZ1bmN0aW9uKCl7fSkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl9zb3VyY2UucHJlcGFyZSYmdGhpcy5fc291cmNlLnByZXBhcmUoKSx0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl90aWxlcyl7dmFyIHI9dGhpcy5fdGlsZXNbZV07ci51cGxvYWQodCksci5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcil9fSxyLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC52YWx1ZXModGhpcy5fdGlsZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpLnNvcnQoUHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxyLnByb3RvdHlwZS5nZXRSZW5kZXJhYmxlSWRzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1bXTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpdGhpcy5faXNJZFJlbmRlcmFibGUoaSxlKSYmbi5wdXNoKHRoaXMuX3RpbGVzW2ldKTtyZXR1cm4gZT9uLnNvcnQoKGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS50aWxlSUQsYT1uLnRpbGVJRCxvPW5ldyB0LlBvaW50KGkuY2Fub25pY2FsLngsaS5jYW5vbmljYWwueSkuX3JvdGF0ZShyLnRyYW5zZm9ybS5hbmdsZSkscz1uZXcgdC5Qb2ludChhLmNhbm9uaWNhbC54LGEuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpO3JldHVybiBpLm92ZXJzY2FsZWRaLWEub3ZlcnNjYWxlZFp8fHMueS1vLnl8fHMueC1vLnh9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aWxlSUQua2V5fSkpOm4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aWxlSUR9KSkuc29ydChQdCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LHIucHJvdG90eXBlLmhhc1JlbmRlcmFibGVQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kTG9hZGVkUGFyZW50KHQsMCk7cmV0dXJuISFlJiZ0aGlzLl9pc0lkUmVuZGVyYWJsZShlLnRpbGVJRC5rZXkpfSxyLnByb3RvdHlwZS5faXNJZFJlbmRlcmFibGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdGlsZXNbdF0mJnRoaXMuX3RpbGVzW3RdLmhhc0RhdGEoKSYmIXRoaXMuX2NvdmVyZWRUaWxlc1t0XSYmKGV8fCF0aGlzLl90aWxlc1t0XS5ob2xkaW5nRm9yRmFkZSgpKX0sci5wcm90b3R5cGUucmVsb2FkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSEwO2Vsc2UgZm9yKHZhciB0IGluIHRoaXMuX2NhY2hlLnJlc2V0KCksdGhpcy5fdGlsZXMpImVycm9yZWQiIT09dGhpcy5fdGlsZXNbdF0uc3RhdGUmJnRoaXMuX3JlbG9hZFRpbGUodCwicmVsb2FkaW5nIil9LHIucHJvdG90eXBlLl9yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdGlsZXNbdF07ciYmKCJsb2FkaW5nIiE9PXIuc3RhdGUmJihyLnN0YXRlPWUpLHRoaXMuX2xvYWRUaWxlKHIsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMscix0LGUpKSl9LHIucHJvdG90eXBlLl90aWxlTG9hZGVkPWZ1bmN0aW9uKGUscixuLGkpe2lmKGkpcmV0dXJuIGUuc3RhdGU9ImVycm9yZWQiLHZvaWQoNDA0IT09aS5zdGF0dXM/dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXJyb3JFdmVudChpLHt0aWxlOmV9KSk6dGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pKTtlLnRpbWVBZGRlZD10LmJyb3dzZXIubm93KCksImV4cGlyZWQiPT09biYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITApLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihyLGUpLCJyYXN0ZXItZGVtIj09PXRoaXMuZ2V0U291cmNlKCkudHlwZSYmZS5kZW0mJnRoaXMuX2JhY2tmaWxsREVNKGUpLHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUoZSx0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsdGlsZTplLGNvb3JkOmUudGlsZUlEfSkpfSxyLnByb3RvdHlwZS5fYmFja2ZpbGxERU09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZih0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1tuXSl7dmFyIGk9dGhpcy5nZXRUaWxlQnlJRChuKTthKHQsaSksYShpLHQpfX1mdW5jdGlvbiBhKHQsZSl7dC5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITA7dmFyIHI9ZS50aWxlSUQuY2Fub25pY2FsLngtdC50aWxlSUQuY2Fub25pY2FsLngsbj1lLnRpbGVJRC5jYW5vbmljYWwueS10LnRpbGVJRC5jYW5vbmljYWwueSxpPU1hdGgucG93KDIsdC50aWxlSUQuY2Fub25pY2FsLnopLGE9ZS50aWxlSUQua2V5OzA9PT1yJiYwPT09bnx8TWF0aC5hYnMobik+MXx8KE1hdGguYWJzKHIpPjEmJigxPT09TWF0aC5hYnMocitpKT9yKz1pOjE9PT1NYXRoLmFicyhyLWkpJiYoci09aSkpLGUuZGVtJiZ0LmRlbSYmKHQuZGVtLmJhY2tmaWxsQm9yZGVyKGUuZGVtLHIsbiksdC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbYV0mJih0Lm5laWdoYm9yaW5nVGlsZXNbYV0uYmFja2ZpbGxlZD0hMCkpKX19LHIucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0VGlsZUJ5SUQodC5rZXkpfSxyLnByb3RvdHlwZS5nZXRUaWxlQnlJRD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF19LHIucHJvdG90eXBlLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2lmKCEobltpXXx8IWEuaGFzRGF0YSgpfHxhLnRpbGVJRC5vdmVyc2NhbGVkWjw9ZXx8YS50aWxlSUQub3ZlcnNjYWxlZFo+cikpe2Zvcih2YXIgbz1hLnRpbGVJRDthJiZhLnRpbGVJRC5vdmVyc2NhbGVkWj5lKzE7KXt2YXIgcz1hLnRpbGVJRC5zY2FsZWRUbyhhLnRpbGVJRC5vdmVyc2NhbGVkWi0xKTsoYT10aGlzLl90aWxlc1tzLmtleV0pJiZhLmhhc0RhdGEoKSYmKG89cyl9Zm9yKHZhciBsPW87bC5vdmVyc2NhbGVkWj5lOylpZih0WyhsPWwuc2NhbGVkVG8obC5vdmVyc2NhbGVkWi0xKSkua2V5XSl7bltvLmtleV09bzticmVha319fX0sci5wcm90b3R5cGUuZmluZExvYWRlZFBhcmVudD1mdW5jdGlvbih0LGUpe2lmKHQua2V5IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzKXt2YXIgcj10aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1t0LmtleV07cmV0dXJuIHImJnIudGlsZUlELm92ZXJzY2FsZWRaPj1lP3I6bnVsbH1mb3IodmFyIG49dC5vdmVyc2NhbGVkWi0xO24+PWU7bi0tKXt2YXIgaT10LnNjYWxlZFRvKG4pLGE9dGhpcy5fZ2V0TG9hZGVkVGlsZShpKTtpZihhKXJldHVybiBhfX0sci5wcm90b3R5cGUuX2dldExvYWRlZFRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdC5rZXldO3JldHVybiBlJiZlLmhhc0RhdGEoKT9lOnRoaXMuX2NhY2hlLmdldEJ5S2V5KHQud3JhcHBlZCgpLmtleSl9LHIucHJvdG90eXBlLnVwZGF0ZUNhY2hlU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT0oTWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSooTWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkscj1NYXRoLmZsb29yKDUqZSksbj0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemU/TWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSxyKTpyO3RoaXMuX2NhY2hlLnNldE1heFNpemUobil9LHIucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCxyPU1hdGgucm91bmQoZSk7aWYodGhpcy5fcHJldkxuZz10LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07YS50aWxlSUQ9YS50aWxlSUQudW53cmFwVG8oYS50aWxlSUQud3JhcCtyKSxuW2EudGlsZUlELmtleV09YX1mb3IodmFyIG8gaW4gdGhpcy5fdGlsZXM9bix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tvXSksZGVsZXRlIHRoaXMuX3RpbWVyc1tvXTtmb3IodmFyIHMgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3NdO3RoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihzLGwpfX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fc291cmNlTG9hZGVkJiYhdGhpcy5fcGF1c2VkKXt2YXIgaTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZShlKSx0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpLHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLnVzZWQ/dGhpcy5fc291cmNlLnRpbGVJRD9pPWUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5jYW5vbmljYWwueixlLndyYXAsZS5jYW5vbmljYWwueixlLmNhbm9uaWNhbC54LGUuY2Fub25pY2FsLnkpfSkpOihpPWUuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6dGhpcy5fc291cmNlLnRpbGVTaXplLG1pbnpvb206dGhpcy5fc291cmNlLm1pbnpvb20sbWF4em9vbTp0aGlzLl9zb3VyY2UubWF4em9vbSxyb3VuZFpvb206dGhpcy5fc291cmNlLnJvdW5kWm9vbSxyZXBhcnNlT3ZlcnNjYWxlZDp0aGlzLl9zb3VyY2UucmVwYXJzZU92ZXJzY2FsZWR9KSx0aGlzLl9zb3VyY2UuaGFzVGlsZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zb3VyY2UuaGFzVGlsZSh0KX0pKSkpOmk9W107dmFyIGE9ZS5jb3ZlcmluZ1pvb21MZXZlbCh0aGlzLl9zb3VyY2UpLG89TWF0aC5tYXgoYS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxzPU1hdGgubWF4KGErci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLGw9dGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpLGEpO2lmKEl0KHRoaXMuX3NvdXJjZS50eXBlKSl7Zm9yKHZhciBjPXt9LHU9e30sZj0wLGg9T2JqZWN0LmtleXMobCk7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdLGQ9bFtwXSxtPXRoaXMuX3RpbGVzW3BdO2lmKG0mJiEobS5mYWRlRW5kVGltZSYmbS5mYWRlRW5kVGltZTw9dC5icm93c2VyLm5vdygpKSl7dmFyIGc9dGhpcy5maW5kTG9hZGVkUGFyZW50KGQsbyk7ZyYmKHRoaXMuX2FkZFRpbGUoZy50aWxlSUQpLGNbZy50aWxlSUQua2V5XT1nLnRpbGVJRCksdVtwXT1kfX1mb3IodmFyIHYgaW4gdGhpcy5fcmV0YWluTG9hZGVkQ2hpbGRyZW4odSxhLHMsbCksYylsW3ZdfHwodGhpcy5fY292ZXJlZFRpbGVzW3ZdPSEwLGxbdl09Y1t2XSl9Zm9yKHZhciB5IGluIGwpdGhpcy5fdGlsZXNbeV0uY2xlYXJGYWRlSG9sZCgpO2Zvcih2YXIgeD0wLGI9dC5rZXlzRGlmZmVyZW5jZSh0aGlzLl90aWxlcyxsKTt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF0sdz10aGlzLl90aWxlc1tfXTt3Lmhhc1N5bWJvbEJ1Y2tldHMmJiF3LmhvbGRpbmdGb3JGYWRlKCk/dy5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik6dy5oYXNTeW1ib2xCdWNrZXRzJiYhdy5zeW1ib2xGYWRlRmluaXNoZWQoKXx8dGhpcy5fcmVtb3ZlVGlsZShfKX10aGlzLl91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGUoKX19LHIucHJvdG90eXBlLnJlbGVhc2VTeW1ib2xGYWRlVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbdF0uaG9sZGluZ0ZvckZhZGUoKSYmdGhpcy5fcmVtb3ZlVGlsZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVJldGFpbmVkVGlsZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49e30saT17fSxhPU1hdGgubWF4KGUtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbz1NYXRoLm1heChlK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxzPXt9LGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9dGhpcy5fYWRkVGlsZSh1KTtuW3Uua2V5XT11LGYuaGFzRGF0YSgpfHxlPHRoaXMuX3NvdXJjZS5tYXh6b29tJiYoc1t1LmtleV09dSl9dGhpcy5fcmV0YWluTG9hZGVkQ2hpbGRyZW4ocyxlLG8sbik7Zm9yKHZhciBoPTAscD10O2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXSxtPXRoaXMuX3RpbGVzW2Qua2V5XTtpZighbS5oYXNEYXRhKCkpe2lmKGUrMT50aGlzLl9zb3VyY2UubWF4em9vbSl7dmFyIGc9ZC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF0sdj10aGlzLmdldFRpbGUoZyk7aWYodiYmdi5oYXNEYXRhKCkpe25bZy5rZXldPWc7Y29udGludWV9fWVsc2V7dmFyIHk9ZC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSk7aWYoblt5WzBdLmtleV0mJm5beVsxXS5rZXldJiZuW3lbMl0ua2V5XSYmblt5WzNdLmtleV0pY29udGludWV9Zm9yKHZhciB4PW0ud2FzUmVxdWVzdGVkKCksYj1kLm92ZXJzY2FsZWRaLTE7Yj49YTstLWIpe3ZhciBfPWQuc2NhbGVkVG8oYik7aWYoaVtfLmtleV0pYnJlYWs7aWYoaVtfLmtleV09ITAsIShtPXRoaXMuZ2V0VGlsZShfKSkmJngmJihtPXRoaXMuX2FkZFRpbGUoXykpLG0mJihuW18ua2V5XT1fLHg9bS53YXNSZXF1ZXN0ZWQoKSxtLmhhc0RhdGEoKSkpYnJlYWt9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcz17fSx0aGlzLl90aWxlcyl7Zm9yKHZhciBlPVtdLHI9dm9pZCAwLG49dGhpcy5fdGlsZXNbdF0udGlsZUlEO24ub3ZlcnNjYWxlZFo+MDspe2lmKG4ua2V5IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzKXtyPXRoaXMuX2xvYWRlZFBhcmVudFRpbGVzW24ua2V5XTticmVha31lLnB1c2gobi5rZXkpO3ZhciBpPW4uc2NhbGVkVG8obi5vdmVyc2NhbGVkWi0xKTtpZihyPXRoaXMuX2dldExvYWRlZFRpbGUoaSkpYnJlYWs7bj1pfWZvcih2YXIgYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbc109cn19fSxyLnByb3RvdHlwZS5fYWRkVGlsZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl90aWxlc1tlLmtleV07aWYocilyZXR1cm4gcjsocj10aGlzLl9jYWNoZS5nZXRBbmRSZW1vdmUoZSkpJiYodGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpLHIudGlsZUlEPWUsdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZShyLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fY2FjaGVUaW1lcnNbZS5rZXldJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSksZGVsZXRlIHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoZS5rZXkscikpKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgdC5UaWxlKGUsdGhpcy5fc291cmNlLnRpbGVTaXplKmUub3ZlcnNjYWxlRmFjdG9yKCkpLHRoaXMuX2xvYWRUaWxlKHIsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMscixlLmtleSxyLnN0YXRlKSkpLHI/KHIudXNlcysrLHRoaXMuX3RpbGVzW2Uua2V5XT1yLG58fHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse3RpbGU6cixjb29yZDpyLnRpbGVJRCxkYXRhVHlwZToic291cmNlIn0pKSxyKTpudWxsfSxyLnByb3RvdHlwZS5fc2V0VGlsZVJlbG9hZFRpbWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0IGluIHRoaXMuX3RpbWVycyYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pO3ZhciBuPWUuZ2V0RXhwaXJ5VGltZW91dCgpO24mJih0aGlzLl90aW1lcnNbdF09c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLl9yZWxvYWRUaWxlKHQsImV4cGlyZWQiKSxkZWxldGUgci5fdGltZXJzW3RdfSksbikpfSxyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoZS51c2VzLS0sZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuX3RpbWVyc1t0XSYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pLGUudXNlcz4wfHwoZS5oYXNEYXRhKCkmJiJyZWxvYWRpbmciIT09ZS5zdGF0ZT90aGlzLl9jYWNoZS5hZGQoZS50aWxlSUQsZSxlLmdldEV4cGlyeVRpbWVvdXQoKSk6KGUuYWJvcnRlZD0hMCx0aGlzLl9hYm9ydFRpbGUoZSksdGhpcy5fdW5sb2FkVGlsZShlKSkpKX0sci5wcm90b3R5cGUuY2xlYXJUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fdGlsZXMpdGhpcy5fcmVtb3ZlVGlsZSh0KTt0aGlzLl9jYWNoZS5yZXNldCgpfSxyLnByb3RvdHlwZS50aWxlc0luPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLGE9W10sbz10aGlzLnRyYW5zZm9ybTtpZighbylyZXR1cm4gYTtmb3IodmFyIHM9bj9vLmdldENhbWVyYVF1ZXJ5R2VvbWV0cnkoZSk6ZSxsPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5wb2ludENvb3JkaW5hdGUodCl9KSksYz1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnRDb29yZGluYXRlKHQpfSkpLHU9dGhpcy5nZXRJZHMoKSxmPTEvMCxoPTEvMCxwPS0xLzAsZD0tMS8wLG09MCxnPWM7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dO2Y9TWF0aC5taW4oZix2LngpLGg9TWF0aC5taW4oaCx2LnkpLHA9TWF0aC5tYXgocCx2LngpLGQ9TWF0aC5tYXgoZCx2LnkpfWZvcih2YXIgeT1mdW5jdGlvbihlKXt2YXIgbj1pLl90aWxlc1t1W2VdXTtpZighbi5ob2xkaW5nRm9yRmFkZSgpKXt2YXIgcz1uLnRpbGVJRCxtPU1hdGgucG93KDIsby56b29tLW4udGlsZUlELm92ZXJzY2FsZWRaKSxnPXIqbi5xdWVyeVBhZGRpbmcqdC5FWFRFTlQvbi50aWxlU2l6ZS9tLHY9W3MuZ2V0VGlsZVBvaW50KG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShmLGgpKSxzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUocCxkKSldO2lmKHZbMF0ueC1nPHQuRVhURU5UJiZ2WzBdLnktZzx0LkVYVEVOVCYmdlsxXS54K2c+PTAmJnZbMV0ueStnPj0wKXt2YXIgeT1sLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHMuZ2V0VGlsZVBvaW50KHQpfSkpLHg9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pKTthLnB1c2goe3RpbGU6bix0aWxlSUQ6cyxxdWVyeUdlb21ldHJ5OnksY2FtZXJhUXVlcnlHZW9tZXRyeTp4LHNjYWxlOm19KX19fSx4PTA7eDx1Lmxlbmd0aDt4KyspeSh4KTtyZXR1cm4gYX0sci5wcm90b3R5cGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RpbGVzW3RdLnRpbGVJRH0pKSxuPTAsaT1yO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTthLnBvc01hdHJpeD10aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoYS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gcn0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoSXQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgZSBpbiB0aGlzLl90aWxlcyl7dmFyIHI9dGhpcy5fdGlsZXNbZV07aWYodm9pZCAwIT09ci5mYWRlRW5kVGltZSYmci5mYWRlRW5kVGltZT49dC5icm93c2VyLm5vdygpKXJldHVybiEwfXJldHVybiExfSxyLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe3Q9dHx8Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLl9zdGF0ZS51cGRhdGVTdGF0ZSh0LGUscil9LHIucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUscil7dD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuX3N0YXRlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0LGUscil9LHIucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5fc3RhdGUuZ2V0U3RhdGUodCxlKX0sci5wcm90b3R5cGUuc2V0RGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl90aWxlc1t0XTtuJiZuLnNldERlcGVuZGVuY2llcyhlLHIpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLl90aWxlcyl7dGhpcy5fdGlsZXNbcl0uaGFzRGVwZW5kZW5jeSh0LGUpJiZ0aGlzLl9yZWxvYWRUaWxlKHIsInJlbG9hZGluZyIpfXRoaXMuX2NhY2hlLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIXIuaGFzRGVwZW5kZW5jeSh0LGUpfSkpfSxyfSh0LkV2ZW50ZWQpO2Z1bmN0aW9uIFB0KHQsZSl7dmFyIHI9TWF0aC5hYnMoMip0LndyYXApLSsodC53cmFwPDApLG49TWF0aC5hYnMoMiplLndyYXApLSsoZS53cmFwPDApO3JldHVybiB0Lm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFp8fG4tcnx8ZS5jYW5vbmljYWwueS10LmNhbm9uaWNhbC55fHxlLmNhbm9uaWNhbC54LXQuY2Fub25pY2FsLnh9ZnVuY3Rpb24gSXQodCl7cmV0dXJuInJhc3RlciI9PT10fHwiaW1hZ2UiPT09dHx8InZpZGVvIj09PXR9ZnVuY3Rpb24gT3QoKXtyZXR1cm4gbmV3IHQud2luZG93LldvcmtlcihaaS53b3JrZXJVcmwpfUN0Lm1heE92ZXJ6b29taW5nPTEwLEN0Lm1heFVuZGVyem9vbWluZz0zO3ZhciB6dD0ibWFwYm94Z2xfcHJlbG9hZGVkX3dvcmtlcl9wb29sIixEdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtEdC5wcm90b3R5cGUuYWNxdWlyZT1mdW5jdGlvbih0KXtpZighdGhpcy53b3JrZXJzKWZvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxEdC53b3JrZXJDb3VudDspdGhpcy53b3JrZXJzLnB1c2gobmV3IE90KTtyZXR1cm4gdGhpcy5hY3RpdmVbdF09ITAsdGhpcy53b3JrZXJzLnNsaWNlKCl9LER0LnByb3RvdHlwZS5yZWxlYXNlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmFjdGl2ZVt0XSwwPT09dGhpcy5udW1BY3RpdmUoKSYmKHRoaXMud29ya2Vycy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSkpLHRoaXMud29ya2Vycz1udWxsKX0sRHQucHJvdG90eXBlLmlzUHJlbG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjdGl2ZVt6dF19LER0LnByb3RvdHlwZS5udW1BY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hY3RpdmUpLmxlbmd0aH07dmFyIFJ0LEZ0PU1hdGguZmxvb3IodC5icm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kvMik7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gUnR8fChSdD1uZXcgRHQpLFJ0fWZ1bmN0aW9uIE50KGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIGUpInJlZiIhPT1pJiYobltpXT1lW2ldKTtyZXR1cm4gdC5yZWZQcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gciYmKG5bdF09clt0XSl9KSksbn1mdW5jdGlvbiBqdCh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSJyZWYiaW4gdFtuXSYmKHRbbl09TnQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUR0LndvcmtlckNvdW50PU1hdGgubWF4KE1hdGgubWluKEZ0LDYpLDEpO3ZhciBVdD17c2V0U3R5bGU6InNldFN0eWxlIixhZGRMYXllcjoiYWRkTGF5ZXIiLHJlbW92ZUxheWVyOiJyZW1vdmVMYXllciIsc2V0UGFpbnRQcm9wZXJ0eToic2V0UGFpbnRQcm9wZXJ0eSIsc2V0TGF5b3V0UHJvcGVydHk6InNldExheW91dFByb3BlcnR5IixzZXRGaWx0ZXI6InNldEZpbHRlciIsYWRkU291cmNlOiJhZGRTb3VyY2UiLHJlbW92ZVNvdXJjZToicmVtb3ZlU291cmNlIixzZXRHZW9KU09OU291cmNlRGF0YToic2V0R2VvSlNPTlNvdXJjZURhdGEiLHNldExheWVyWm9vbVJhbmdlOiJzZXRMYXllclpvb21SYW5nZSIsc2V0TGF5ZXJQcm9wZXJ0eToic2V0TGF5ZXJQcm9wZXJ0eSIsc2V0Q2VudGVyOiJzZXRDZW50ZXIiLHNldFpvb206InNldFpvb20iLHNldEJlYXJpbmc6InNldEJlYXJpbmciLHNldFBpdGNoOiJzZXRQaXRjaCIsc2V0U3ByaXRlOiJzZXRTcHJpdGUiLHNldEdseXBoczoic2V0R2x5cGhzIixzZXRUcmFuc2l0aW9uOiJzZXRUcmFuc2l0aW9uIixzZXRMaWdodDoic2V0TGlnaHQifTtmdW5jdGlvbiBWdCh0LGUscil7ci5wdXNoKHtjb21tYW5kOlV0LmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gSHQodCxlLHIpe2UucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIHF0KHQsZSxyLG4pe0h0KHQscixuKSxWdCh0LGUscil9ZnVuY3Rpb24gR3QoZSxyLG4pe3ZhciBpO2ZvcihpIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShpKSYmImRhdGEiIT09aSYmIXQuZGVlcEVxdWFsKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWVwRXF1YWwoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZdChlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZXBFcXVhbChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKTtmb3IocyBpbiByKXIuaGFzT3duUHJvcGVydHkocykmJiFlLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gV3QodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9ZnVuY3Rpb24gWnQoZSxyKXtpZighZSlyZXR1cm5be2NvbW1hbmQ6VXQuc2V0U3R5bGUsYXJnczpbcl19XTt2YXIgbj1bXTt0cnl7aWYoIXQuZGVlcEVxdWFsKGUudmVyc2lvbixyLnZlcnNpb24pKXJldHVyblt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dO3QuZGVlcEVxdWFsKGUuY2VudGVyLHIuY2VudGVyKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldENlbnRlcixhcmdzOltyLmNlbnRlcl19KSx0LmRlZXBFcXVhbChlLnpvb20sci56b29tKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldFpvb20sYXJnczpbci56b29tXX0pLHQuZGVlcEVxdWFsKGUuYmVhcmluZyxyLmJlYXJpbmcpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0QmVhcmluZyxhcmdzOltyLmJlYXJpbmddfSksdC5kZWVwRXF1YWwoZS5waXRjaCxyLnBpdGNoKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldFBpdGNoLGFyZ3M6W3IucGl0Y2hdfSksdC5kZWVwRXF1YWwoZS5zcHJpdGUsci5zcHJpdGUpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0U3ByaXRlLGFyZ3M6W3Iuc3ByaXRlXX0pLHQuZGVlcEVxdWFsKGUuZ2x5cGhzLHIuZ2x5cGhzKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEdseXBocyxhcmdzOltyLmdseXBoc119KSx0LmRlZXBFcXVhbChlLnRyYW5zaXRpb24sci50cmFuc2l0aW9uKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldFRyYW5zaXRpb24sYXJnczpbci50cmFuc2l0aW9uXX0pLHQuZGVlcEVxdWFsKGUubGlnaHQsci5saWdodCl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRMaWdodCxhcmdzOltyLmxpZ2h0XX0pO3ZhciBpPXt9LGE9W107IWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhO2ZvcihhIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KGEpJiYoci5oYXNPd25Qcm9wZXJ0eShhKXx8SHQoYSxuLGkpKTtmb3IoYSBpbiByKXIuaGFzT3duUHJvcGVydHkoYSkmJihlLmhhc093blByb3BlcnR5KGEpP3QuZGVlcEVxdWFsKGVbYV0sclthXSl8fCgiZ2VvanNvbiI9PT1lW2FdLnR5cGUmJiJnZW9qc29uIj09PXJbYV0udHlwZSYmR3QoZSxyLGEpP24ucHVzaCh7Y29tbWFuZDpVdC5zZXRHZW9KU09OU291cmNlRGF0YSxhcmdzOlthLHJbYV0uZGF0YV19KTpxdChhLHIsbixpKSk6VnQoYSxyLG4pKX0oZS5zb3VyY2VzLHIuc291cmNlcyxhLGkpO3ZhciBvPVtdO2UubGF5ZXJzJiZlLmxheWVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtpW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSksbj1uLmNvbmNhdChhKSxmdW5jdGlvbihlLHIsbil7cj1yfHxbXTt2YXIgaSxhLG8scyxsLGMsdSxmPShlPWV8fFtdKS5tYXAoV3QpLGg9ci5tYXAoV3QpLHA9ZS5yZWR1Y2UoWHQse30pLGQ9ci5yZWR1Y2UoWHQse30pLG09Zi5zbGljZSgpLGc9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoaT0wLGE9MDtpPGYubGVuZ3RoO2krKylvPWZbaV0sZC5oYXNPd25Qcm9wZXJ0eShvKT9hKys6KG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLG0uc3BsaWNlKG0uaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGgubGVuZ3RoO2krKylvPWhbaC5sZW5ndGgtMS1pXSxtW20ubGVuZ3RoLTEtaV0hPT1vJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksbS5zcGxpY2UobS5sYXN0SW5kZXhPZihvLG0ubGVuZ3RoLWEpLDEpKTphKyssYz1tW20ubGVuZ3RoLWldLG4ucHVzaCh7Y29tbWFuZDpVdC5hZGRMYXllcixhcmdzOltkW29dLGNdfSksbS5zcGxpY2UobS5sZW5ndGgtaSwwLG8pLGdbb109ITApO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspaWYocz1wW289aFtpXV0sbD1kW29dLCFnW29dJiYhdC5kZWVwRXF1YWwocyxsKSlpZih0LmRlZXBFcXVhbChzLnNvdXJjZSxsLnNvdXJjZSkmJnQuZGVlcEVxdWFsKHNbInNvdXJjZS1sYXllciJdLGxbInNvdXJjZS1sYXllciJdKSYmdC5kZWVwRXF1YWwocy50eXBlLGwudHlwZSkpe2Zvcih1IGluIFl0KHMubGF5b3V0LGwubGF5b3V0LG4sbyxudWxsLFV0LnNldExheW91dFByb3BlcnR5KSxZdChzLnBhaW50LGwucGFpbnQsbixvLG51bGwsVXQuc2V0UGFpbnRQcm9wZXJ0eSksdC5kZWVwRXF1YWwocy5maWx0ZXIsbC5maWx0ZXIpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0RmlsdGVyLGFyZ3M6W28sbC5maWx0ZXJdfSksdC5kZWVwRXF1YWwocy5taW56b29tLGwubWluem9vbSkmJnQuZGVlcEVxdWFsKHMubWF4em9vbSxsLm1heHpvb20pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0TGF5ZXJab29tUmFuZ2UsYXJnczpbbyxsLm1pbnpvb20sbC5tYXh6b29tXX0pLHMpcy5oYXNPd25Qcm9wZXJ0eSh1KSYmImxheW91dCIhPT11JiYicGFpbnQiIT09dSYmImZpbHRlciIhPT11JiYibWV0YWRhdGEiIT09dSYmIm1pbnpvb20iIT09dSYmIm1heHpvb20iIT09dSYmKDA9PT11LmluZGV4T2YoInBhaW50LiIpP1l0KHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxVdC5zZXRQYWludFByb3BlcnR5KTp0LmRlZXBFcXVhbChzW3VdLGxbdV0pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0TGF5ZXJQcm9wZXJ0eSxhcmdzOltvLHUsbFt1XV19KSk7Zm9yKHUgaW4gbClsLmhhc093blByb3BlcnR5KHUpJiYhcy5oYXNPd25Qcm9wZXJ0eSh1KSYmImxheW91dCIhPT11JiYicGFpbnQiIT09dSYmImZpbHRlciIhPT11JiYibWV0YWRhdGEiIT09dSYmIm1pbnpvb20iIT09dSYmIm1heHpvb20iIT09dSYmKDA9PT11LmluZGV4T2YoInBhaW50LiIpP1l0KHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxVdC5zZXRQYWludFByb3BlcnR5KTp0LmRlZXBFcXVhbChzW3VdLGxbdV0pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0TGF5ZXJQcm9wZXJ0eSxhcmdzOltvLHUsbFt1XV19KSl9ZWxzZSBuLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxjPW1bbS5sYXN0SW5kZXhPZihvKSsxXSxuLnB1c2goe2NvbW1hbmQ6VXQuYWRkTGF5ZXIsYXJnczpbbCxjXX0pfShvLHIubGF5ZXJzLG4pfWNhdGNoKHQpe2NvbnNvbGUud2FybigiVW5hYmxlIHRvIGNvbXB1dGUgc3R5bGUgZGlmZjoiLHQpLG49W3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV19cmV0dXJuIG59dmFyIEp0PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZXNldCh0LGUpfTtKdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnBvaW50cz10fHxbXSx0aGlzLl9kaXN0YW5jZXM9WzBdO2Zvcih2YXIgcj0xO3I8dGhpcy5wb2ludHMubGVuZ3RoO3IrKyl0aGlzLl9kaXN0YW5jZXNbcl09dGhpcy5fZGlzdGFuY2VzW3ItMV0rdGhpcy5wb2ludHNbcl0uZGlzdCh0aGlzLnBvaW50c1tyLTFdKTt0aGlzLmxlbmd0aD10aGlzLl9kaXN0YW5jZXNbdGhpcy5fZGlzdGFuY2VzLmxlbmd0aC0xXSx0aGlzLnBhZGRpbmc9TWF0aC5taW4oZXx8MCwuNSp0aGlzLmxlbmd0aCksdGhpcy5wYWRkZWRMZW5ndGg9dGhpcy5sZW5ndGgtMip0aGlzLnBhZGRpbmd9LEp0LnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLnBvaW50cy5sZW5ndGgpcmV0dXJuIHRoaXMucG9pbnRzWzBdO2U9dC5jbGFtcChlLDAsMSk7Zm9yKHZhciByPTEsbj10aGlzLl9kaXN0YW5jZXNbcl0saT1lKnRoaXMucGFkZGVkTGVuZ3RoK3RoaXMucGFkZGluZztuPGkmJnI8dGhpcy5fZGlzdGFuY2VzLmxlbmd0aDspbj10aGlzLl9kaXN0YW5jZXNbKytyXTt2YXIgYT1yLTEsbz10aGlzLl9kaXN0YW5jZXNbYV0scz1uLW8sbD1zPjA/KGktbykvczowO3JldHVybiB0aGlzLnBvaW50c1thXS5tdWx0KDEtbCkuYWRkKHRoaXMucG9pbnRzW3JdLm11bHQobCkpfTt2YXIgS3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtmdW5jdGlvbiBRdChlLHIsbixpLGEpe3ZhciBvPXQuY3JlYXRlKCk7cmV0dXJuIHI/KHQuc2NhbGUobyxvLFsxL2EsMS9hLDFdKSxufHx0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKTp0Lm11bHRpcGx5KG8saS5sYWJlbFBsYW5lTWF0cml4LGUpLG99ZnVuY3Rpb24gJHQoZSxyLG4saSxhKXtpZihyKXt2YXIgbz10LmNsb25lKGUpO3JldHVybiB0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSxvfXJldHVybiBpLmdsQ29vcmRNYXRyaXh9ZnVuY3Rpb24gdGUoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO2ZlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5Qb2ludChuWzBdL2ksblsxXS9pKSxzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6aX19ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4uNSt0L2UqLjV9ZnVuY3Rpb24gcmUodCxlKXt2YXIgcj10WzBdL3RbM10sbj10WzFdL3RbM107cmV0dXJuIHI+PS1lWzBdJiZyPD1lWzBdJiZuPj0tZVsxXSYmbjw9ZVsxXX1mdW5jdGlvbiBuZShlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWk/ZS50ZXh0U2l6ZURhdGE6ZS5pY29uU2l6ZURhdGEsdT10LmV2YWx1YXRlU2l6ZUZvclpvb20oYyxuLnRyYW5zZm9ybS56b29tKSxmPVsyNTYvbi53aWR0aCoyKzEsMjU2L24uaGVpZ2h0KjIrMV0saD1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtoLmNsZWFyKCk7Zm9yKHZhciBwPWUubGluZVZlcnRleEFycmF5LGQ9aT9lLnRleHQucGxhY2VkU3ltYm9sQXJyYXk6ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LG09bi50cmFuc2Zvcm0ud2lkdGgvbi50cmFuc2Zvcm0uaGVpZ2h0LGc9ITEsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgeT1kLmdldCh2KTtpZih5LmhpZGRlbnx8eS53cml0aW5nTW9kZT09PXQuV3JpdGluZ01vZGUudmVydGljYWwmJiFnKXVlKHkubnVtR2x5cGhzLGgpO2Vsc2V7Zz0hMTt2YXIgeD1beS5hbmNob3JYLHkuYW5jaG9yWSwwLDFdO2lmKHQudHJhbnNmb3JtTWF0NCh4LHgscikscmUoeCxmKSl7dmFyIGI9eFszXSxfPWVlKG4udHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsYiksdz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYyx1LHkpLFQ9cz93L186dypfLGs9bmV3IHQuUG9pbnQoeS5hbmNob3JYLHkuYW5jaG9yWSksQT10ZShrLGEpLnBvaW50LE09e30sUz1vZSh5LFQsITEsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxoLEEsayxNLG0pO2c9Uy51c2VWZXJ0aWNhbCwoUy5ub3RFbm91Z2hSb29tfHxnfHxTLm5lZWRzRmxpcHBpbmcmJm9lKHksVCwhMCxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGgsQSxrLE0sbSkubm90RW5vdWdoUm9vbSkmJnVlKHkubnVtR2x5cGhzLGgpfWVsc2UgdWUoeS5udW1HbHlwaHMsaCl9fWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShoKTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGgpfWZ1bmN0aW9uIGllKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9cy5nbHlwaFN0YXJ0SW5kZXgrcy5udW1HbHlwaHMsaD1zLmxpbmVTdGFydEluZGV4LHA9cy5saW5lU3RhcnRJbmRleCtzLmxpbmVMZW5ndGgsZD1lLmdldG9mZnNldFgocy5nbHlwaFN0YXJ0SW5kZXgpLG09ZS5nZXRvZmZzZXRYKGYtMSksZz1sZSh0KmQscixuLGksYSxvLHMuc2VnbWVudCxoLHAsbCxjLHUpO2lmKCFnKXJldHVybiBudWxsO3ZhciB2PWxlKHQqbSxyLG4saSxhLG8scy5zZWdtZW50LGgscCxsLGMsdSk7cmV0dXJuIHY/e2ZpcnN0OmcsbGFzdDp2fTpudWxsfWZ1bmN0aW9uIGFlKGUscixuLGkpe2lmKGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmkpcmV0dXJue3VzZVZlcnRpY2FsOiEwfTtyZXR1cm4oZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiBvZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQpe3ZhciBtLGc9ci8yNCx2PWUubGluZU9mZnNldFgqZyx5PWUubGluZU9mZnNldFkqZztpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PWllKGcsbCx2LHksbixmLGgsZSxjLG8scCk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBUPXRlKHcuZmlyc3QucG9pbnQscykucG9pbnQsaz10ZSh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBBPWFlKGUud3JpdGluZ01vZGUsVCxrLGQpO2lmKEEpcmV0dXJuIEF9bT1bdy5maXJzdF07Zm9yKHZhciBNPWUuZ2x5cGhTdGFydEluZGV4KzE7TTx4LTE7TSsrKW0ucHVzaChsZShnKmwuZ2V0b2Zmc2V0WChNKSx2LHksbixmLGgsZS5zZWdtZW50LGIsXyxjLG8scCkpO20ucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPXRlKGgsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEw9bmV3IHQuUG9pbnQoYy5nZXR4KEUpLGMuZ2V0eShFKSksQz10ZShMLGEpLFA9Qy5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9DLnBvaW50OnNlKGgsTCxTLDEsYSksST1hZShlLndyaXRpbmdNb2RlLFMsUCxkKTtpZihJKXJldHVybiBJfXZhciBPPWxlKGcqbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSx2LHksbixmLGgsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHApO2lmKCFPKXJldHVybntub3RFbm91Z2hSb29tOiEwfTttPVtPXX1mb3IodmFyIHo9MCxEPW07ejxELmxlbmd0aDt6Kz0xKXt2YXIgUj1EW3pdO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIHNlKHQsZSxyLG4saSl7dmFyIGE9dGUodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksaSkucG9pbnQsbz1yLnN1YihhKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBsZShlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9aT9lLXI6ZStyLGQ9cD4wPzE6LTEsbT0wO2kmJihkKj0tMSxtPU1hdGguUEkpLGQ8MCYmKG0rPU1hdGguUEkpO2Zvcih2YXIgZz1kPjA/bCtzOmwrcysxLHY9YSx5PWEseD0wLGI9MCxfPU1hdGguYWJzKHApLHc9W107eCtiPD1fOyl7aWYoKGcrPWQpPGx8fGc+PWMpcmV0dXJuIG51bGw7aWYoeT12LHcucHVzaCh2KSx2b2lkIDA9PT0odj1oW2ddKSl7dmFyIFQ9bmV3IHQuUG9pbnQodS5nZXR4KGcpLHUuZ2V0eShnKSksaz10ZShULGYpO2lmKGsuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApdj1oW2ddPWsucG9pbnQ7ZWxzZXt2YXIgQT1nLWQ7dj1zZSgwPT09eD9vOm5ldyB0LlBvaW50KHUuZ2V0eChBKSx1LmdldHkoQSkpLFQseSxfLXgrMSxmKX19eCs9YixiPXkuZGlzdCh2KX12YXIgTT0oXy14KS9iLFM9di5zdWIoeSksRT1TLm11bHQoTSkuX2FkZCh5KTtFLl9hZGQoUy5fdW5pdCgpLl9wZXJwKCkuX211bHQobipkKSk7dmFyIEw9bStNYXRoLmF0YW4yKHYueS15Lnksdi54LXkueCk7cmV0dXJuIHcucHVzaChFKSx7cG9pbnQ6RSxhbmdsZTpMLHBhdGg6d319S3QucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxLdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LEt0LnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LEt0LnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxLdC5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sS3QucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIG89W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBzPTA7czx0aGlzLmJveEtleXMubGVuZ3RoO3MrKylvLnB1c2goe2tleTp0aGlzLmJveEtleXNbc10seDE6dGhpcy5iYm94ZXNbNCpzXSx5MTp0aGlzLmJib3hlc1s0KnMrMV0seDI6dGhpcy5iYm94ZXNbNCpzKzJdLHkyOnRoaXMuYmJveGVzWzQqcyszXX0pO2Zvcih2YXIgbD0wO2w8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtsKyspe3ZhciBjPXRoaXMuY2lyY2xlc1szKmxdLHU9dGhpcy5jaXJjbGVzWzMqbCsxXSxmPXRoaXMuY2lyY2xlc1szKmwrMl07by5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW2xdLHgxOmMtZix5MTp1LWYseDI6YytmLHkyOnUrZn0pfXJldHVybiBhP28uZmlsdGVyKGEpOm99dmFyIGg9e2hpdFRlc3Q6aSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19O3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxvLGgsYSksaT9vLmxlbmd0aD4wOm99LEt0LnByb3RvdHlwZS5fcXVlcnlDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10LXIsbz10K3Iscz1lLXIsbD1lK3I7aWYobzwwfHxhPnRoaXMud2lkdGh8fGw8MHx8cz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGM9W10sdT17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoYSxzLG8sbCx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsYyx1LGkpLG4/Yy5sZW5ndGg+MDpjfSxLdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSxpKX0sS3QucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMCxpKX0sS3QucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwLG4pfSxLdC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxmPTAsaD1jO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0PD11W2QrMl0mJmU8PXVbZCszXSYmcj49dVtkKzBdJiZuPj11W2QrMV0mJighc3x8cyh0aGlzLmJveEtleXNbcF0pKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1twXSx4MTp1W2RdLHkxOnVbZCsxXSx4Mjp1W2QrMl0seTI6dVtkKzNdfSl9fX12YXIgbT10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1tKWZvcih2YXIgZz10aGlzLmNpcmNsZXMsdj0wLHk9bTt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl07aWYoIWwuY2lyY2xlW3hdKXtsLmNpcmNsZVt4XT0hMDt2YXIgYj0zKng7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoZ1tiXSxnW2IrMV0sZ1tiKzJdLHQsZSxyLG4pJiYoIXN8fHModGhpcy5jaXJjbGVLZXlzW3hdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDt2YXIgXz1nW2JdLHc9Z1tiKzFdLFQ9Z1tiKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1t4XSx4MTpfLVQseTE6dy1ULHgyOl8rVCx5Mjp3K1R9KX19fX0sS3QucHJvdG90eXBlLl9xdWVyeUNlbGxDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1vLmNpcmNsZSxjPW8uc2VlblVpZHMsdT10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT11KWZvcih2YXIgZj10aGlzLmJib3hlcyxoPTAscD11O2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXTtpZighYy5ib3hbZF0pe2MuYm94W2RdPSEwO3ZhciBtPTQqZDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShsLngsbC55LGwucmFkaXVzLGZbbSswXSxmW20rMV0sZlttKzJdLGZbbSszXSkmJighc3x8cyh0aGlzLmJveEtleXNbZF0pKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIGc9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09Zylmb3IodmFyIHY9dGhpcy5jaXJjbGVzLHk9MCx4PWc7eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldO2lmKCFjLmNpcmNsZVtiXSl7Yy5jaXJjbGVbYl09ITA7dmFyIF89MypiO2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbX10sdltfKzFdLHZbXysyXSxsLngsbC55LGwucmFkaXVzKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1tiXSkpKXJldHVybiBhLnB1c2goITApLCEwfX19LEt0LnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLGY9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxoPWw7aDw9dTtoKyspZm9yKHZhciBwPWM7cDw9ZjtwKyspe3ZhciBkPXRoaXMueENlbGxDb3VudCpwK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbyxzKSlyZXR1cm59fSxLdC5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxLdC5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxLdC5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLXQscz1pLWUsbD1yK2E7cmV0dXJuIGwqbD5vKm8rcypzfSxLdC5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPShhLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1pKS8yLHU9TWF0aC5hYnMoZS0oaStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgZj1sLXMsaD11LWM7cmV0dXJuIGYqZitoKmg8PXIqcn07dmFyIGNlPW5ldyBGbG9hdDMyQXJyYXkoWy0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwXSk7ZnVuY3Rpb24gdWUodCxlKXtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj1lLmxlbmd0aDtlLnJlc2l6ZShuKzQpLGUuZmxvYXQzMi5zZXQoY2UsMypuKX19ZnVuY3Rpb24gZmUodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrclsxMl0sdFsxXT1yWzFdKm4rcls1XSppK3JbMTNdLHRbM109clszXSpuK3JbN10qaStyWzE1XSx0fXZhciBoZT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ZSYmKGU9bmV3IEt0KHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHZvaWQgMD09PXImJihyPW5ldyBLdCh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx0aGlzLnRyYW5zZm9ybT10LHRoaXMuZ3JpZD1lLHRoaXMuaWdub3JlZEdyaWQ9cix0aGlzLnBpdGNoZmFjdG9yPU1hdGguY29zKHQuX3BpdGNoKSp0LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5PXQud2lkdGgrMTAwLHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMTAwLHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnk9dC53aWR0aCsyMDAsdGhpcy5ncmlkQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMjAwfTtmdW5jdGlvbiBwZShlLHIsbil7cmV0dXJuIHIqKHQuRVhURU5ULyhlLnRpbGVTaXplKk1hdGgucG93KDIsbi1lLnRpbGVJRC5vdmVyc2NhbGVkWikpKX1oZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKG4sdC5hbmNob3JQb2ludFgsdC5hbmNob3JQb2ludFkpLG89ciphLnBlcnNwZWN0aXZlUmF0aW8scz10LngxKm8rYS5wb2ludC54LGw9dC55MSpvK2EucG9pbnQueSxjPXQueDIqbythLnBvaW50LngsdT10LnkyKm8rYS5wb2ludC55O3JldHVybiF0aGlzLmlzSW5zaWRlR3JpZChzLGwsYyx1KXx8IWUmJnRoaXMuZ3JpZC5oaXRUZXN0KHMsbCxjLHUsaSk/e2JveDpbXSxvZmZzY3JlZW46ITF9Ontib3g6W3MsbCxjLHVdLG9mZnNjcmVlbjp0aGlzLmlzT2Zmc2NyZWVuKHMsbCxjLHUpfX0saGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwKXt2YXIgZD1bXSxtPW5ldyB0LlBvaW50KHIuYW5jaG9yWCxyLmFuY2hvclkpLGc9dGUobSxvKSx2PWVlKHRoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsZy5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEpLHk9KHU/YS92OmEqdikvdC5PTkVfRU0seD10ZShtLHMpLnBvaW50LGI9aWUoeSxpLHIubGluZU9mZnNldFgqeSxyLmxpbmVPZmZzZXRZKnksITEseCxtLHIsbixzLHt9KSxfPSExLHc9ITEsVD0hMDtpZihiKXtmb3IodmFyIGs9LjUqaCp2K3AsQT1uZXcgdC5Qb2ludCgtMTAwLC0xMDApLE09bmV3IHQuUG9pbnQodGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5LHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnkpLFM9bmV3IEp0LEU9Yi5maXJzdCxMPWIubGFzdCxDPVtdLFA9RS5wYXRoLmxlbmd0aC0xO1A+PTE7UC0tKUMucHVzaChFLnBhdGhbUF0pO2Zvcih2YXIgST0xO0k8TC5wYXRoLmxlbmd0aDtJKyspQy5wdXNoKEwucGF0aFtJXSk7dmFyIE89Mi41Kms7aWYobCl7dmFyIHo9Qy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0ZSh0LGwpfSkpO0M9ei5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE8PTB9KSk/W106ei5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvaW50fSkpfXZhciBEPVtdO2lmKEMubGVuZ3RoPjApe2Zvcih2YXIgUj1DWzBdLmNsb25lKCksRj1DWzBdLmNsb25lKCksQj0xO0I8Qy5sZW5ndGg7QisrKVIueD1NYXRoLm1pbihSLngsQ1tCXS54KSxSLnk9TWF0aC5taW4oUi55LENbQl0ueSksRi54PU1hdGgubWF4KEYueCxDW0JdLngpLEYueT1NYXRoLm1heChGLnksQ1tCXS55KTtEPVIueD49QS54JiZGLng8PU0ueCYmUi55Pj1BLnkmJkYueTw9TS55P1tDXTpGLng8QS54fHxSLng+TS54fHxGLnk8QS55fHxSLnk+TS55P1tdOnQuY2xpcExpbmUoW0NdLEEueCxBLnksTS54LE0ueSl9Zm9yKHZhciBOPTAsaj1EO048ai5sZW5ndGg7Tis9MSl7dmFyIFU9altOXTtTLnJlc2V0KFUsLjI1KmspO3ZhciBWPTA7Vj1TLmxlbmd0aDw9LjUqaz8xOk1hdGguY2VpbChTLnBhZGRlZExlbmd0aC9PKSsxO2Zvcih2YXIgSD0wO0g8VjtIKyspe3ZhciBxPUgvTWF0aC5tYXgoVi0xLDEpLEc9Uy5sZXJwKHEpLFk9Ry54KzEwMCxXPUcueSsxMDA7ZC5wdXNoKFksVyxrLDApO3ZhciBYPVktayxaPVctayxKPVkrayxLPVcraztpZihUPVQmJnRoaXMuaXNPZmZzY3JlZW4oWCxaLEosSyksdz13fHx0aGlzLmlzSW5zaWRlR3JpZChYLFosSixLKSwhZSYmdGhpcy5ncmlkLmhpdFRlc3RDaXJjbGUoWSxXLGssZikmJihfPSEwLCFjKSlyZXR1cm57Y2lyY2xlczpbXSxvZmZzY3JlZW46ITEsY29sbGlzaW9uRGV0ZWN0ZWQ6X319fX1yZXR1cm57Y2lyY2xlczohYyYmX3x8IXc/W106ZCxvZmZzY3JlZW46VCxjb2xsaXNpb25EZXRlY3RlZDpffX0saGUucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMuZ3JpZC5rZXlzTGVuZ3RoKCkmJjA9PT10aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSlyZXR1cm57fTtmb3IodmFyIHI9W10sbj0xLzAsaT0xLzAsYT0tMS8wLG89LTEvMCxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PW5ldyB0LlBvaW50KGMueCsxMDAsYy55KzEwMCk7bj1NYXRoLm1pbihuLHUueCksaT1NYXRoLm1pbihpLHUueSksYT1NYXRoLm1heChhLHUueCksbz1NYXRoLm1heChvLHUueSksci5wdXNoKHUpfWZvcih2YXIgZj17fSxoPXt9LHA9MCxkPXRoaXMuZ3JpZC5xdWVyeShuLGksYSxvKS5jb25jYXQodGhpcy5pZ25vcmVkR3JpZC5xdWVyeShuLGksYSxvKSk7cDxkLmxlbmd0aDtwKz0xKXt2YXIgbT1kW3BdLGc9bS5rZXk7aWYodm9pZCAwPT09ZltnLmJ1Y2tldEluc3RhbmNlSWRdJiYoZltnLmJ1Y2tldEluc3RhbmNlSWRdPXt9KSwhZltnLmJ1Y2tldEluc3RhbmNlSWRdW2cuZmVhdHVyZUluZGV4XSl7dmFyIHY9W25ldyB0LlBvaW50KG0ueDEsbS55MSksbmV3IHQuUG9pbnQobS54MixtLnkxKSxuZXcgdC5Qb2ludChtLngyLG0ueTIpLG5ldyB0LlBvaW50KG0ueDEsbS55MildO3QucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHIsdikmJihmW2cuYnVja2V0SW5zdGFuY2VJZF1bZy5mZWF0dXJlSW5kZXhdPSEwLHZvaWQgMD09PWhbZy5idWNrZXRJbnN0YW5jZUlkXSYmKGhbZy5idWNrZXRJbnN0YW5jZUlkXT1bXSksaFtnLmJ1Y2tldEluc3RhbmNlSWRdLnB1c2goZy5mZWF0dXJlSW5kZXgpKX19cmV0dXJuIGh9LGhlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX07KGU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQpLmluc2VydChhLHRbMF0sdFsxXSx0WzJdLHRbM10pfSxoZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT1lP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkLG89e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bixjb2xsaXNpb25Hcm91cElEOml9LHM9MDtzPHQubGVuZ3RoO3MrPTQpYS5pbnNlcnRDaXJjbGUobyx0W3NdLHRbcysxXSx0W3MrMl0pfSxoZS5wcm90b3R5cGUucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW89ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtyLG4sMCwxXTtyZXR1cm4gZmUoaSxpLGUpLHtwb2ludDpuZXcgdC5Qb2ludCgoaVswXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtaVsxXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCkscGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL2lbM10qLjV9fSxoZS5wcm90b3R5cGUuaXNPZmZzY3JlZW49ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI8MTAwfHx0Pj10aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnl8fG48MTAwfHxlPnRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnl9LGhlLnByb3RvdHlwZS5pc0luc2lkZUdyaWQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI+PTAmJnQ8dGhpcy5ncmlkUmlnaHRCb3VuZGFyeSYmbj49MCYmZTx0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeX0saGUucHJvdG90eXBlLmdldFZpZXdwb3J0TWF0cml4PWZ1bmN0aW9uKCl7dmFyIGU9dC5pZGVudGl0eShbXSk7cmV0dXJuIHQudHJhbnNsYXRlKGUsZSxbLTEwMCwtMTAwLDBdKSxlfTt2YXIgZGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5vcGFjaXR5PXQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQub3BhY2l0eSsodC5wbGFjZWQ/ZTotZSkpKTpuJiZyPzE6MCx0aGlzLnBsYWNlZD1yfTtkZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMub3BhY2l0eSYmIXRoaXMucGxhY2VkfTt2YXIgbWU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9bmV3IGRlKHQ/dC50ZXh0Om51bGwsZSxyLGkpLHRoaXMuaWNvbj1uZXcgZGUodD90Lmljb246bnVsbCxlLG4saSl9O21lLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSYmdGhpcy5pY29uLmlzSGlkZGVuKCl9O3ZhciBnZT1mdW5jdGlvbih0LGUscil7dGhpcy50ZXh0PXQsdGhpcy5pY29uPWUsdGhpcy5za2lwRmFkZT1yfSx2ZT1mdW5jdGlvbigpe3RoaXMuaW52UHJvak1hdHJpeD10LmNyZWF0ZSgpLHRoaXMudmlld3BvcnRNYXRyaXg9dC5jcmVhdGUoKSx0aGlzLmNpcmNsZXM9W119LHllPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5idWNrZXRJbnN0YW5jZUlkPXQsdGhpcy5mZWF0dXJlSW5kZXg9ZSx0aGlzLnNvdXJjZUxheWVySW5kZXg9cix0aGlzLmJ1Y2tldEluZGV4PW4sdGhpcy50aWxlSUQ9aX0seGU9ZnVuY3Rpb24odCl7dGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM9dCx0aGlzLm1heEdyb3VwSUQ9MCx0aGlzLmNvbGxpc2lvbkdyb3Vwcz17fX07ZnVuY3Rpb24gYmUoZSxyLG4saSxhKXt2YXIgbz10LmdldEFuY2hvckFsaWdubWVudChlKSxzPS0oby5ob3Jpem9udGFsQWxpZ24tLjUpKnIsbD0tKG8udmVydGljYWxBbGlnbi0uNSkqbixjPXQuZXZhbHVhdGVWYXJpYWJsZU9mZnNldChlLGkpO3JldHVybiBuZXcgdC5Qb2ludChzK2NbMF0qYSxsK2NbMV0qYSl9ZnVuY3Rpb24gX2UoZSxyLG4saSxhLG8pe3ZhciBzPWUueDEsbD1lLngyLGM9ZS55MSx1PWUueTIsZj1lLmFuY2hvclBvaW50WCxoPWUuYW5jaG9yUG9pbnRZLHA9bmV3IHQuUG9pbnQocixuKTtyZXR1cm4gaSYmcC5fcm90YXRlKGE/bzotbykse3gxOnMrcC54LHkxOmMrcC55LHgyOmwrcC54LHkyOnUrcC55LGFuY2hvclBvaW50WDpmLGFuY2hvclBvaW50WTpofX14ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zKXJldHVybntJRDowLHByZWRpY2F0ZTpudWxsfTtpZighdGhpcy5jb2xsaXNpb25Hcm91cHNbdF0pe3ZhciBlPSsrdGhpcy5tYXhHcm91cElEO3RoaXMuY29sbGlzaW9uR3JvdXBzW3RdPXtJRDplLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xsaXNpb25Hcm91cElEPT09ZX19fXJldHVybiB0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XX07dmFyIHdlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHJhbnNmb3JtPXQuY2xvbmUoKSx0aGlzLmNvbGxpc2lvbkluZGV4PW5ldyBoZSh0aGlzLnRyYW5zZm9ybSksdGhpcy5wbGFjZW1lbnRzPXt9LHRoaXMub3BhY2l0aWVzPXt9LHRoaXMudmFyaWFibGVPZmZzZXRzPXt9LHRoaXMuc3RhbGU9ITEsdGhpcy5jb21taXRUaW1lPTAsdGhpcy5mYWRlRHVyYXRpb249ZSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhPXt9LHRoaXMuY29sbGlzaW9uR3JvdXBzPW5ldyB4ZShyKSx0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cz17fSx0aGlzLnByZXZQbGFjZW1lbnQ9bixuJiYobi5wcmV2UGxhY2VtZW50PXZvaWQgMCksdGhpcy5wbGFjZWRPcmllbnRhdGlvbnM9e319O2Z1bmN0aW9uIFRlKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApfXdlLnByb3RvdHlwZS5nZXRCdWNrZXRQYXJ0cz1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLmdldEJ1Y2tldChyKSxvPW4ubGF0ZXN0RmVhdHVyZUluZGV4O2lmKGEmJm8mJnIuaWQ9PT1hLmxheWVySWRzWzBdKXt2YXIgcz1uLmNvbGxpc2lvbkJveEFycmF5LGw9YS5sYXllcnNbMF0ubGF5b3V0LGM9TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLW4udGlsZUlELm92ZXJzY2FsZWRaKSx1PW4udGlsZVNpemUvdC5FWFRFTlQsZj10aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgobi50aWxlSUQudG9VbndyYXBwZWQoKSksaD0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLHA9Im1hcCI9PT1sLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxkPXBlKG4sMSx0aGlzLnRyYW5zZm9ybS56b29tKSxtPVF0KGYsaCxwLHRoaXMudHJhbnNmb3JtLGQpLGc9bnVsbDtpZihoKXt2YXIgdj0kdChmLGgscCx0aGlzLnRyYW5zZm9ybSxkKTtnPXQubXVsdGlwbHkoW10sdGhpcy50cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCx2KX10aGlzLnJldGFpbmVkUXVlcnlEYXRhW2EuYnVja2V0SW5zdGFuY2VJZF09bmV3IHllKGEuYnVja2V0SW5zdGFuY2VJZCxvLGEuc291cmNlTGF5ZXJJbmRleCxhLmluZGV4LG4udGlsZUlEKTt2YXIgeT17YnVja2V0OmEsbGF5b3V0OmwscG9zTWF0cml4OmYsdGV4dExhYmVsUGxhbmVNYXRyaXg6bSxsYWJlbFRvU2NyZWVuTWF0cml4Omcsc2NhbGU6Yyx0ZXh0UGl4ZWxSYXRpbzp1LGhvbGRpbmdGb3JGYWRlOm4uaG9sZGluZ0ZvckZhZGUoKSxjb2xsaXNpb25Cb3hBcnJheTpzLHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplOnQuZXZhbHVhdGVTaXplRm9yWm9vbShhLnRleHRTaXplRGF0YSx0aGlzLnRyYW5zZm9ybS56b29tKSxjb2xsaXNpb25Hcm91cDp0aGlzLmNvbGxpc2lvbkdyb3Vwcy5nZXQoYS5zb3VyY2VJRCl9O2lmKGkpZm9yKHZhciB4PTAsYj1hLnNvcnRLZXlSYW5nZXM7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9Xy5zb3J0S2V5LFQ9Xy5zeW1ib2xJbnN0YW5jZVN0YXJ0LGs9Xy5zeW1ib2xJbnN0YW5jZUVuZDtlLnB1c2goe3NvcnRLZXk6dyxzeW1ib2xJbnN0YW5jZVN0YXJ0OlQsc3ltYm9sSW5zdGFuY2VFbmQ6ayxwYXJhbWV0ZXJzOnl9KX1lbHNlIGUucHVzaCh7c3ltYm9sSW5zdGFuY2VTdGFydDowLHN5bWJvbEluc3RhbmNlRW5kOmEuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCxwYXJhbWV0ZXJzOnl9KX19LHdlLnByb3RvdHlwZS5hdHRlbXB0QW5jaG9yUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkKXt2YXIgbSxnPVtmLnRleHRPZmZzZXQwLGYudGV4dE9mZnNldDFdLHY9YmUodCxyLG4sZyxpKSx5PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goX2UoZSx2Lngsdi55LGEsbyx0aGlzLnRyYW5zZm9ybS5hbmdsZSksdSxzLGwsYy5wcmVkaWNhdGUpO2lmKGQmJjA9PT10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KF9lKGQsdi54LHYueSxhLG8sdGhpcy50cmFuc2Zvcm0uYW5nbGUpLHUscyxsLGMucHJlZGljYXRlKS5ib3gubGVuZ3RoKXJldHVybjtpZih5LmJveC5sZW5ndGg+MClyZXR1cm4gdGhpcy5wcmV2UGxhY2VtZW50JiZ0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2YuY3Jvc3NUaWxlSURdJiZ0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tmLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbZi5jcm9zc1RpbGVJRF0udGV4dCYmKG09dGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXS5hbmNob3IpLHRoaXMudmFyaWFibGVPZmZzZXRzW2YuY3Jvc3NUaWxlSURdPXt0ZXh0T2Zmc2V0Omcsd2lkdGg6cixoZWlnaHQ6bixhbmNob3I6dCx0ZXh0Qm94U2NhbGU6aSxwcmV2QW5jaG9yOm19LHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGgsdCxmLHApLGguYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmKHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihoLHAsZiksdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZi5jcm9zc1RpbGVJRF09cCkse3NoaWZ0OnYscGxhY2VkR2x5cGhCb3hlczp5fX0sd2UucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXRQYXJ0PWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLGE9ZS5wYXJhbWV0ZXJzLG89YS5idWNrZXQscz1hLmxheW91dCxsPWEucG9zTWF0cml4LGM9YS50ZXh0TGFiZWxQbGFuZU1hdHJpeCx1PWEubGFiZWxUb1NjcmVlbk1hdHJpeCxmPWEudGV4dFBpeGVsUmF0aW8saD1hLmhvbGRpbmdGb3JGYWRlLHA9YS5jb2xsaXNpb25Cb3hBcnJheSxkPWEucGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUsbT1hLmNvbGxpc2lvbkdyb3VwLGc9cy5nZXQoInRleHQtb3B0aW9uYWwiKSx2PXMuZ2V0KCJpY29uLW9wdGlvbmFsIikseT1zLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIikseD1zLmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIiksYj0ibWFwIj09PXMuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLF89Im1hcCI9PT1zLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSx3PSJub25lIiE9PXMuZ2V0KCJpY29uLXRleHQtZml0IiksVD0idmlld3BvcnQteSI9PT1zLmdldCgic3ltYm9sLXotb3JkZXIiKSxrPXkmJih4fHwhby5oYXNJY29uRGF0YSgpfHx2KSxBPXgmJih5fHwhby5oYXNUZXh0RGF0YSgpfHxnKTshby5jb2xsaXNpb25BcnJheXMmJnAmJm8uZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhwKTt2YXIgTT1mdW5jdGlvbihlLGEpe2lmKCFyW2UuY3Jvc3NUaWxlSURdKWlmKGgpaS5wbGFjZW1lbnRzW2UuY3Jvc3NUaWxlSURdPW5ldyBnZSghMSwhMSwhMSk7ZWxzZXt2YXIgcCxUPSExLE09ITEsUz0hMCxFPW51bGwsTD17Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9LEM9e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfSxQPW51bGwsST1udWxsLE89MCx6PTAsRD0wO2EudGV4dEZlYXR1cmVJbmRleD9PPWEudGV4dEZlYXR1cmVJbmRleDplLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzJiYoTz1lLmZlYXR1cmVJbmRleCksYS52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgmJih6PWEudmVydGljYWxUZXh0RmVhdHVyZUluZGV4KTt2YXIgUj1hLnRleHRCb3g7aWYoUil7dmFyIEY9ZnVuY3Rpb24ocil7dmFyIG49dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsO2lmKG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmIXImJmkucHJldlBsYWNlbWVudCl7dmFyIGE9aS5wcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9uc1tlLmNyb3NzVGlsZUlEXTthJiYoaS5wbGFjZWRPcmllbnRhdGlvbnNbZS5jcm9zc1RpbGVJRF09YSxuPWEsaS5tYXJrVXNlZE9yaWVudGF0aW9uKG8sbixlKSl9cmV0dXJuIG59LEI9ZnVuY3Rpb24ocixuKXtpZihvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJmEudmVydGljYWxUZXh0Qm94KWZvcih2YXIgaT0wLHM9by53cml0aW5nTW9kZXM7aTxzLmxlbmd0aDtpKz0xKXtpZihzW2ldPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD8oTD1uKCksQz1MKTpMPXIoKSxMJiZMLmJveCYmTC5ib3gubGVuZ3RoKWJyZWFrfWVsc2UgTD1yKCl9O2lmKHMuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpKXt2YXIgTj1zLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZihpLnByZXZQbGFjZW1lbnQmJmkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF0pe3ZhciBqPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07Ti5pbmRleE9mKGouYW5jaG9yKT4wJiYoTj1OLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1qLmFuY2hvcn0pKSkudW5zaGlmdChqLmFuY2hvcil9dmFyIFU9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgYT10LngyLXQueDEscz10LnkyLXQueTEsYz1lLnRleHRCb3hTY2FsZSx1PXcmJiF4P3I6bnVsbCxoPXtib3g6W10sb2Zmc2NyZWVuOiExfSxwPXk/MipOLmxlbmd0aDpOLmxlbmd0aCxkPTA7ZDxwOysrZCl7dmFyIGc9TltkJU4ubGVuZ3RoXSx2PWQ+PU4ubGVuZ3RoLGs9aS5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KGcsdCxhLHMsYyxiLF8sZixsLG0sdixlLG8sbix1KTtpZihrJiYoaD1rLnBsYWNlZEdseXBoQm94ZXMpJiZoLmJveCYmaC5ib3gubGVuZ3RoKXtUPSEwLEU9ay5zaGlmdDticmVha319cmV0dXJuIGh9O0IoKGZ1bmN0aW9uKCl7cmV0dXJuIFUoUixhLmljb25Cb3gsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKX0pLChmdW5jdGlvbigpe3ZhciByPWEudmVydGljYWxUZXh0Qm94LG49TCYmTC5ib3gmJkwuYm94Lmxlbmd0aDtyZXR1cm4gby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhbiYmZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmcj9VKHIsYS52ZXJ0aWNhbEljb25Cb3gsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCk6e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfX0pKSxMJiYoVD1MLmJveCxTPUwub2Zmc2NyZWVuKTt2YXIgVj1GKEwmJkwuYm94KTtpZighVCYmaS5wcmV2UGxhY2VtZW50KXt2YXIgSD1pLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdO0gmJihpLnZhcmlhYmxlT2Zmc2V0c1tlLmNyb3NzVGlsZUlEXT1ILGkubWFya1VzZWRKdXN0aWZpY2F0aW9uKG8sSC5hbmNob3IsZSxWKSl9fWVsc2V7dmFyIHE9ZnVuY3Rpb24odCxyKXt2YXIgbj1pLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHQseSxmLGwsbS5wcmVkaWNhdGUpO3JldHVybiBuJiZuLmJveCYmbi5ib3gubGVuZ3RoJiYoaS5tYXJrVXNlZE9yaWVudGF0aW9uKG8scixlKSxpLnBsYWNlZE9yaWVudGF0aW9uc1tlLmNyb3NzVGlsZUlEXT1yKSxufTtCKChmdW5jdGlvbigpe3JldHVybiBxKFIsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKX0pLChmdW5jdGlvbigpe3ZhciByPWEudmVydGljYWxUZXh0Qm94O3JldHVybiBvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJnI/cShyLHQuV3JpdGluZ01vZGUudmVydGljYWwpOntib3g6bnVsbCxvZmZzY3JlZW46bnVsbH19KSksRihMJiZMLmJveCYmTC5ib3gubGVuZ3RoKX19aWYoVD0ocD1MKSYmcC5ib3gmJnAuYm94Lmxlbmd0aD4wLFM9cCYmcC5vZmZzY3JlZW4sZS51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyl7dmFyIEc9by50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCksWT10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoby50ZXh0U2l6ZURhdGEsZCxHKSxXPXMuZ2V0KCJ0ZXh0LXBhZGRpbmciKSxYPWUuY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXI7UD1pLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQ2lyY2xlcyh5LEcsby5saW5lVmVydGV4QXJyYXksby5nbHlwaE9mZnNldEFycmF5LFksbCxjLHUsbixfLG0ucHJlZGljYXRlLFgsVyksVD15fHxQLmNpcmNsZXMubGVuZ3RoPjAmJiFQLmNvbGxpc2lvbkRldGVjdGVkLFM9UyYmUC5vZmZzY3JlZW59aWYoYS5pY29uRmVhdHVyZUluZGV4JiYoRD1hLmljb25GZWF0dXJlSW5kZXgpLGEuaWNvbkJveCl7dmFyIFo9ZnVuY3Rpb24odCl7dmFyIGU9dyYmRT9fZSh0LEUueCxFLnksYixfLGkudHJhbnNmb3JtLmFuZ2xlKTp0O3JldHVybiBpLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KGUseCxmLGwsbS5wcmVkaWNhdGUpfTtNPUMmJkMuYm94JiZDLmJveC5sZW5ndGgmJmEudmVydGljYWxJY29uQm94PyhJPVooYS52ZXJ0aWNhbEljb25Cb3gpKS5ib3gubGVuZ3RoPjA6KEk9WihhLmljb25Cb3gpKS5ib3gubGVuZ3RoPjAsUz1TJiZJLm9mZnNjcmVlbn12YXIgSj1nfHwwPT09ZS5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyYmMD09PWUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLEs9dnx8MD09PWUubnVtSWNvblZlcnRpY2VzO2lmKEp8fEs/Sz9KfHwoTT1NJiZUKTpUPU0mJlQ6TT1UPU0mJlQsVCYmcCYmcC5ib3gmJihDJiZDLmJveCYmej9pLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwLmJveCxzLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLHosbS5JRCk6aS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocC5ib3gscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCxPLG0uSUQpKSxNJiZJJiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChJLmJveCxzLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLEQsbS5JRCksUCYmKFQmJmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhQLmNpcmNsZXMscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCxPLG0uSUQpLG4pKXt2YXIgUT1vLmJ1Y2tldEluc3RhbmNlSWQsJD1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tRXTt2b2lkIDA9PT0kJiYoJD1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tRXT1uZXcgdmUpO2Zvcih2YXIgdHQ9MDt0dDxQLmNpcmNsZXMubGVuZ3RoO3R0Kz00KSQuY2lyY2xlcy5wdXNoKFAuY2lyY2xlc1t0dCswXSksJC5jaXJjbGVzLnB1c2goUC5jaXJjbGVzW3R0KzFdKSwkLmNpcmNsZXMucHVzaChQLmNpcmNsZXNbdHQrMl0pLCQuY2lyY2xlcy5wdXNoKFAuY29sbGlzaW9uRGV0ZWN0ZWQ/MTowKX1pLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKFR8fGssTXx8QSxTfHxvLmp1c3RSZWxvYWRlZCkscltlLmNyb3NzVGlsZUlEXT0hMH19O2lmKFQpZm9yKHZhciBTPW8uZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksRT1TLmxlbmd0aC0xO0U+PTA7LS1FKXt2YXIgTD1TW0VdO00oby5zeW1ib2xJbnN0YW5jZXMuZ2V0KEwpLG8uY29sbGlzaW9uQXJyYXlzW0xdKX1lbHNlIGZvcih2YXIgQz1lLnN5bWJvbEluc3RhbmNlU3RhcnQ7QzxlLnN5bWJvbEluc3RhbmNlRW5kO0MrKylNKG8uc3ltYm9sSW5zdGFuY2VzLmdldChDKSxvLmNvbGxpc2lvbkFycmF5c1tDXSk7aWYobiYmby5idWNrZXRJbnN0YW5jZUlkIGluIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzKXt2YXIgUD10aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tvLmJ1Y2tldEluc3RhbmNlSWRdO3QuaW52ZXJ0KFAuaW52UHJvak1hdHJpeCxsKSxQLnZpZXdwb3J0TWF0cml4PXRoaXMuY29sbGlzaW9uSW5kZXguZ2V0Vmlld3BvcnRNYXRyaXgoKX1vLmp1c3RSZWxvYWRlZD0hMX0sd2UucHJvdG90eXBlLm1hcmtVc2VkSnVzdGlmaWNhdGlvbj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYSxvPXtsZWZ0Om4ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxjZW50ZXI6bi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgscmlnaHQ6bi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleH07YT1pPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9uLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Om9bdC5nZXRBbmNob3JKdXN0aWZpY2F0aW9uKHIpXTtmb3IodmFyIHM9MCxsPVtuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4XTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107Yz49MCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYykuY3Jvc3NUaWxlSUQ9YT49MCYmYyE9PWE/MDpuLmNyb3NzVGlsZUlEKX19LHdlLnByb3RvdHlwZS5tYXJrVXNlZE9yaWVudGF0aW9uPWZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9cj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbHx8cj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk/cjowLGE9cj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/cjowLG89MCxzPVtuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleF07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2UudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCkucGxhY2VkT3JpZW50YXRpb249aX1uLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4JiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChuLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbj1hKX0sd2UucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXt0aGlzLmNvbW1pdFRpbWU9dCx0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2s9dGhpcy50cmFuc2Zvcm0uem9vbTt2YXIgZT10aGlzLnByZXZQbGFjZW1lbnQscj0hMTt0aGlzLnByZXZab29tQWRqdXN0bWVudD1lP2Uuem9vbUFkanVzdG1lbnQodGhpcy50cmFuc2Zvcm0uem9vbSk6MDt2YXIgbj1lP2Uuc3ltYm9sRmFkZUNoYW5nZSh0KToxLGk9ZT9lLm9wYWNpdGllczp7fSxhPWU/ZS52YXJpYWJsZU9mZnNldHM6e30sbz1lP2UucGxhY2VkT3JpZW50YXRpb25zOnt9O2Zvcih2YXIgcyBpbiB0aGlzLnBsYWNlbWVudHMpe3ZhciBsPXRoaXMucGxhY2VtZW50c1tzXSxjPWlbc107Yz8odGhpcy5vcGFjaXRpZXNbc109bmV3IG1lKGMsbixsLnRleHQsbC5pY29uKSxyPXJ8fGwudGV4dCE9PWMudGV4dC5wbGFjZWR8fGwuaWNvbiE9PWMuaWNvbi5wbGFjZWQpOih0aGlzLm9wYWNpdGllc1tzXT1uZXcgbWUobnVsbCxuLGwudGV4dCxsLmljb24sbC5za2lwRmFkZSkscj1yfHxsLnRleHR8fGwuaWNvbil9Zm9yKHZhciB1IGluIGkpe3ZhciBmPWlbdV07aWYoIXRoaXMub3BhY2l0aWVzW3VdKXt2YXIgaD1uZXcgbWUoZixuLCExLCExKTtoLmlzSGlkZGVuKCl8fCh0aGlzLm9wYWNpdGllc1t1XT1oLHI9cnx8Zi50ZXh0LnBsYWNlZHx8Zi5pY29uLnBsYWNlZCl9fWZvcih2YXIgcCBpbiBhKXRoaXMudmFyaWFibGVPZmZzZXRzW3BdfHwhdGhpcy5vcGFjaXRpZXNbcF18fHRoaXMub3BhY2l0aWVzW3BdLmlzSGlkZGVuKCl8fCh0aGlzLnZhcmlhYmxlT2Zmc2V0c1twXT1hW3BdKTtmb3IodmFyIGQgaW4gbyl0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tkXXx8IXRoaXMub3BhY2l0aWVzW2RdfHx0aGlzLm9wYWNpdGllc1tkXS5pc0hpZGRlbigpfHwodGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZF09b1tkXSk7cj90aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPXQ6Im51bWJlciIhPXR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lJiYodGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT1lP2UubGFzdFBsYWNlbWVudENoYW5nZVRpbWU6dCl9LHdlLnByb3RvdHlwZS51cGRhdGVMYXllck9wYWNpdGllcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZ2V0QnVja2V0KHQpO28mJmEubGF0ZXN0RmVhdHVyZUluZGV4JiZ0LmlkPT09by5sYXllcklkc1swXSYmdGhpcy51cGRhdGVCdWNrZXRPcGFjaXRpZXMobyxyLGEuY29sbGlzaW9uQm94QXJyYXkpfX0sd2UucHJvdG90eXBlLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcz1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztlLmhhc1RleHREYXRhKCkmJmUudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSxlLmhhc0ljb25EYXRhKCkmJmUuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSxlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkmJmUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSYmZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7dmFyIGE9ZS5sYXllcnNbMF0ubGF5b3V0LG89bmV3IG1lKG51bGwsMCwhMSwhMSwhMCkscz1hLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksbD1hLmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIiksYz1hLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSx1PSJtYXAiPT09YS5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksZj0ibWFwIj09PWEuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLGg9Im5vbmUiIT09YS5nZXQoImljb24tdGV4dC1maXQiKSxwPW5ldyBtZShudWxsLDAscyYmKGx8fCFlLmhhc0ljb25EYXRhKCl8fGEuZ2V0KCJpY29uLW9wdGlvbmFsIikpLGwmJihzfHwhZS5oYXNUZXh0RGF0YSgpfHxhLmdldCgidGV4dC1vcHRpb25hbCIpKSwhMCk7IWUuY29sbGlzaW9uQXJyYXlzJiZuJiYoZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpfHxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpJiZlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMobik7Zm9yKHZhciBkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUvNDtuKyspdC5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socil9LG09ZnVuY3Rpb24obil7dmFyIGE9ZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KG4pLHM9YS5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxsPWEubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLG09YS5jcm9zc1RpbGVJRCxnPXJbbV0sdj1pLm9wYWNpdGllc1ttXTtnP3Y9bzp2fHwodj1wLGkub3BhY2l0aWVzW21dPXYpLHJbbV09ITA7dmFyIHk9cz4wfHxsPjAseD1hLm51bUljb25WZXJ0aWNlcz4wLGI9aS5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF0sXz1iPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCx3PWI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWx8fGI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5O2lmKHkpe3ZhciBUPVBlKHYudGV4dCksaz1fP0llOlQ7ZChlLnRleHQscyxrKTt2YXIgQT13P0llOlQ7ZChlLnRleHQsbCxBKTt2YXIgTT12LnRleHQuaXNIaWRkZW4oKTtbYS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxhLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxhLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Q+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHQpLmhpZGRlbj1NfHxfPzE6MCl9KSksYS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleD49MCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkuaGlkZGVuPU18fHc/MTowKTt2YXIgUz1pLnZhcmlhYmxlT2Zmc2V0c1thLmNyb3NzVGlsZUlEXTtTJiZpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLFMuYW5jaG9yLGEsYik7dmFyIEU9aS5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF07RSYmKGkubWFya1VzZWRKdXN0aWZpY2F0aW9uKGUsImxlZnQiLGEsRSksaS5tYXJrVXNlZE9yaWVudGF0aW9uKGUsRSxhKSl9aWYoeCl7dmFyIEw9UGUodi5pY29uKSxDPSEoaCYmYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCYmXyk7aWYoYS5wbGFjZWRJY29uU3ltYm9sSW5kZXg+PTApe3ZhciBQPUM/TDpJZTtkKGUuaWNvbixhLm51bUljb25WZXJ0aWNlcyxQKSxlLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEucGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49di5pY29uLmlzSGlkZGVuKCl9aWYoYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleD49MCl7dmFyIEk9Qz9JZTpMO2QoZS5pY29uLGEubnVtVmVydGljYWxJY29uVmVydGljZXMsSSksZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49di5pY29uLmlzSGlkZGVuKCl9fWlmKGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKXx8ZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKXt2YXIgTz1lLmNvbGxpc2lvbkFycmF5c1tuXTtpZihPKXt2YXIgej1uZXcgdC5Qb2ludCgwLDApO2lmKE8udGV4dEJveHx8Ty52ZXJ0aWNhbFRleHRCb3gpe3ZhciBEPSEwO2lmKGMpe3ZhciBSPWkudmFyaWFibGVPZmZzZXRzW21dO1I/KHo9YmUoUi5hbmNob3IsUi53aWR0aCxSLmhlaWdodCxSLnRleHRPZmZzZXQsUi50ZXh0Qm94U2NhbGUpLHUmJnouX3JvdGF0ZShmP2kudHJhbnNmb3JtLmFuZ2xlOi1pLnRyYW5zZm9ybS5hbmdsZSkpOkQ9ITF9Ty50ZXh0Qm94JiZUZShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksdi50ZXh0LnBsYWNlZCwhRHx8Xyx6Lngsei55KSxPLnZlcnRpY2FsVGV4dEJveCYmVGUoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYudGV4dC5wbGFjZWQsIUR8fHcsei54LHoueSl9dmFyIEY9Qm9vbGVhbighdyYmTy52ZXJ0aWNhbEljb25Cb3gpO08uaWNvbkJveCYmVGUoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYuaWNvbi5wbGFjZWQsRixoP3oueDowLGg/ei55OjApLE8udmVydGljYWxJY29uQm94JiZUZShlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksdi5pY29uLnBsYWNlZCwhRixoP3oueDowLGg/ei55OjApfX19LGc9MDtnPGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtnKyspbShnKTtpZihlLnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdJiYodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXI9ZS5mZWF0dXJlU29ydE9yZGVyKSxlLmhhc1RleHREYXRhKCkmJmUudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXImJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSksZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkmJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLGUuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cyl7dmFyIHY9dGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXTtlLnBsYWNlbWVudEludlByb2pNYXRyaXg9di5pbnZQcm9qTWF0cml4LGUucGxhY2VtZW50Vmlld3BvcnRNYXRyaXg9di52aWV3cG9ydE1hdHJpeCxlLmNvbGxpc2lvbkNpcmNsZUFycmF5PXYuY2lyY2xlcyxkZWxldGUgdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXX19LHdlLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uK3RoaXMucHJldlpvb21BZGp1c3RtZW50fSx3ZS5wcm90b3R5cGUuem9vbUFkanVzdG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsKHRoaXMudHJhbnNmb3JtLnpvb20tdCkvMS41KX0sd2UucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0YWxlfHx0LXRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU8dGhpcy5mYWRlRHVyYXRpb259LHdlLnByb3RvdHlwZS5zdGlsbFJlY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz09PWU/MS10aGlzLnpvb21BZGp1c3RtZW50KGUpOjE7cmV0dXJuIHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz1lLHRoaXMuY29tbWl0VGltZSt0aGlzLmZhZGVEdXJhdGlvbipyPnR9LHdlLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBrZT1NYXRoLnBvdygyLDI1KSxBZT1NYXRoLnBvdygyLDI0KSxNZT1NYXRoLnBvdygyLDE3KSxTZT1NYXRoLnBvdygyLDE2KSxFZT1NYXRoLnBvdygyLDkpLExlPU1hdGgucG93KDIsOCksQ2U9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBQZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gciprZStlKkFlK3IqTWUrZSpTZStyKkVlK2UqTGUrcipDZStlfXZhciBJZT0wLE9lPWZ1bmN0aW9uKHQpe3RoaXMuX3NvcnRBY3Jvc3NUaWxlcz0idmlld3BvcnQteSIhPT10LmxheW91dC5nZXQoInN5bWJvbC16LW9yZGVyIikmJnZvaWQgMCE9PXQubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4PTAsdGhpcy5fY3VycmVudFBhcnRJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e30sdGhpcy5fYnVja2V0UGFydHM9W119O09lLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLl9idWNrZXRQYXJ0czt0aGlzLl9jdXJyZW50VGlsZUluZGV4PHQubGVuZ3RoOyl7dmFyIG89dFt0aGlzLl9jdXJyZW50VGlsZUluZGV4XTtpZihlLmdldEJ1Y2tldFBhcnRzKGEsbixvLHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMH1mb3IodGhpcy5fc29ydEFjcm9zc1RpbGVzJiYodGhpcy5fc29ydEFjcm9zc1RpbGVzPSExLGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKSk7dGhpcy5fY3VycmVudFBhcnRJbmRleDxhLmxlbmd0aDspe3ZhciBzPWFbdGhpcy5fY3VycmVudFBhcnRJbmRleF07aWYoZS5wbGFjZUxheWVyQnVja2V0UGFydChzLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMsciksdGhpcy5fY3VycmVudFBhcnRJbmRleCsrLGkoKSlyZXR1cm4hMH1yZXR1cm4hMX07dmFyIHplPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3RoaXMucGxhY2VtZW50PW5ldyB3ZSh0LGksYSxvKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTt6ZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LHplLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXRoaXMsYT10LmJyb3dzZXIubm93KCksbz1mdW5jdGlvbigpe3ZhciBlPXQuYnJvd3Nlci5ub3coKS1hO3JldHVybiFpLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJmU+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9cltlW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9dGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZih0aGlzLl9pblByb2dyZXNzTGF5ZXJ8fCh0aGlzLl9pblByb2dyZXNzTGF5ZXI9bmV3IE9lKHMpKSx0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobltzLnNvdXJjZV0sdGhpcy5wbGFjZW1lbnQsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXJ9dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0semUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQpLHRoaXMucGxhY2VtZW50fTt2YXIgRGU9NTEyL3QuRVhURU5ULzIsUmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzPXt9LHRoaXMuYnVja2V0SW5zdGFuY2VJZD1yO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lLmdldChuKSxhPWkua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2FdLnB1c2goe2Nyb3NzVGlsZUlEOmkuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhpLHQpfSl9fTtSZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmNhbm9uaWNhbC56LXRoaXMudGlsZUlELmNhbm9uaWNhbC56LGk9RGUvTWF0aC5wb3coMixuKTtyZXR1cm57eDpNYXRoLmZsb29yKChyLmNhbm9uaWNhbC54KnQuRVhURU5UK2UuYW5jaG9yWCkqaSkseTpNYXRoLmZsb29yKChyLmNhbm9uaWNhbC55KnQuRVhURU5UK2UuYW5jaG9yWSkqaSl9fSxSZS5wcm90b3R5cGUuZmluZE1hdGNoZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLnRpbGVJRC5jYW5vbmljYWwuejxlLmNhbm9uaWNhbC56PzE6TWF0aC5wb3coMix0aGlzLnRpbGVJRC5jYW5vbmljYWwuei1lLmNhbm9uaWNhbC56KSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXQuZ2V0KGkpO2lmKCFhLmNyb3NzVGlsZUlEKXt2YXIgbz10aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYS5rZXldO2lmKG8pZm9yKHZhciBzPXRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoYSxlKSxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTtpZihNYXRoLmFicyh1LmNvb3JkLngtcy54KTw9biYmTWF0aC5hYnModS5jb29yZC55LXMueSk8PW4mJiFyW3UuY3Jvc3NUaWxlSURdKXtyW3UuY3Jvc3NUaWxlSURdPSEwLGEuY3Jvc3NUaWxlSUQ9dS5jcm9zc1RpbGVJRDticmVha319fX19O3ZhciBGZT1mdW5jdGlvbigpe3RoaXMubWF4Q3Jvc3NUaWxlSUQ9MH07RmUucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLm1heENyb3NzVGlsZUlEfTt2YXIgQmU9ZnVuY3Rpb24oKXt0aGlzLmluZGV4ZXM9e30sdGhpcy51c2VkQ3Jvc3NUaWxlSURzPXt9LHRoaXMubG5nPTB9O0JlLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubG5nKS8zNjApO2lmKDAhPT1lKWZvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXSxpPXt9O2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1uW2FdO28udGlsZUlEPW8udGlsZUlELnVud3JhcFRvKG8udGlsZUlELndyYXArZSksaVtvLnRpbGVJRC5rZXldPW99dGhpcy5pbmRleGVzW3JdPWl9dGhpcy5sbmc9dH0sQmUucHJvdG90eXBlLmFkZEJ1Y2tldD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiZ0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldLmJ1Y2tldEluc3RhbmNlSWQ9PT1lLmJ1Y2tldEluc3RhbmNlSWQpcmV0dXJuITE7dGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHModC5vdmVyc2NhbGVkWix0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKX1mb3IodmFyIG49MDtuPGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtuKyspe2Uuc3ltYm9sSW5zdGFuY2VzLmdldChuKS5jcm9zc1RpbGVJRD0wfXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXXx8KHRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXT17fSk7dmFyIGk9dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdO2Zvcih2YXIgYSBpbiB0aGlzLmluZGV4ZXMpe3ZhciBvPXRoaXMuaW5kZXhlc1thXTtpZihOdW1iZXIoYSk+dC5vdmVyc2NhbGVkWilmb3IodmFyIHMgaW4gbyl7dmFyIGw9b1tzXTtsLnRpbGVJRC5pc0NoaWxkT2YodCkmJmwuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxpKX1lbHNle3ZhciBjPW9bdC5zY2FsZWRUbyhOdW1iZXIoYSkpLmtleV07YyYmYy5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGkpfX1mb3IodmFyIHU9MDt1PGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDt1Kyspe3ZhciBmPWUuc3ltYm9sSW5zdGFuY2VzLmdldCh1KTtmLmNyb3NzVGlsZUlEfHwoZi5jcm9zc1RpbGVJRD1yLmdlbmVyYXRlKCksaVtmLmNyb3NzVGlsZUlEXT0hMCl9cmV0dXJuIHZvaWQgMD09PXRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXSYmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXT17fSksdGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XT1uZXcgUmUodCxlLnN5bWJvbEluc3RhbmNlcyxlLmJ1Y2tldEluc3RhbmNlSWQpLCEwfSxCZS5wcm90b3R5cGUucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUuaW5kZXhlZFN5bWJvbEluc3RhbmNlcylmb3IodmFyIG49MCxpPWUuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tyXTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ZGVsZXRlIHRoaXMudXNlZENyb3NzVGlsZUlEc1t0XVthLmNyb3NzVGlsZUlEXX19LEJlLnByb3RvdHlwZS5yZW1vdmVTdGFsZUJ1Y2tldHM9ZnVuY3Rpb24odCl7dmFyIGU9ITE7Zm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdO2Zvcih2YXIgaSBpbiBuKXRbbltpXS5idWNrZXRJbnN0YW5jZUlkXXx8KHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHIsbltpXSksZGVsZXRlIG5baV0sZT0hMCl9cmV0dXJuIGV9O3ZhciBOZT1mdW5jdGlvbigpe3RoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMuY3Jvc3NUaWxlSURzPW5ldyBGZSx0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQ9MCx0aGlzLmJ1Y2tldHNJbkN1cnJlbnRQbGFjZW1lbnQ9e319O05lLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF07dm9pZCAwPT09biYmKG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF09bmV3IEJlKTt2YXIgaT0hMSxhPXt9O24uaGFuZGxlV3JhcEp1bXAocik7Zm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwuZ2V0QnVja2V0KHQpO2MmJnQuaWQ9PT1jLmxheWVySWRzWzBdJiYoYy5idWNrZXRJbnN0YW5jZUlkfHwoYy5idWNrZXRJbnN0YW5jZUlkPSsrdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkKSxuLmFkZEJ1Y2tldChsLnRpbGVJRCxjLHRoaXMuY3Jvc3NUaWxlSURzKSYmKGk9ITApLGFbYy5idWNrZXRJbnN0YW5jZUlkXT0hMCl9cmV0dXJuIG4ucmVtb3ZlU3RhbGVCdWNrZXRzKGEpJiYoaT0hMCksaX0sTmUucHJvdG90eXBlLnBydW5lVW51c2VkTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgamU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4ic291cmNlLmNhbnZhcyIhPT10LmlkZW50aWZpZXJ9KSkpfSxVZT10LnBpY2soVXQsWyJhZGRMYXllciIsInJlbW92ZUxheWVyIiwic2V0UGFpbnRQcm9wZXJ0eSIsInNldExheW91dFByb3BlcnR5Iiwic2V0RmlsdGVyIiwiYWRkU291cmNlIiwicmVtb3ZlU291cmNlIiwic2V0TGF5ZXJab29tUmFuZ2UiLCJzZXRMaWdodCIsInNldFRyYW5zaXRpb24iLCJzZXRHZW9KU09OU291cmNlRGF0YSJdKSxWZT10LnBpY2soVXQsWyJzZXRDZW50ZXIiLCJzZXRab29tIiwic2V0QmVhcmluZyIsInNldFBpdGNoIl0pLEhlPWZ1bmN0aW9uKCl7dmFyIGU9e30scj10LnN0eWxlU3BlYy4kdmVyc2lvbjtmb3IodmFyIG4gaW4gdC5zdHlsZVNwZWMuJHJvb3Qpe3ZhciBpPXQuc3R5bGVTcGVjLiRyb290W25dO2lmKGkucmVxdWlyZWQpe3ZhciBhPW51bGw7bnVsbCE9KGE9InZlcnNpb24iPT09bj9yOiJhcnJheSI9PT1pLnR5cGU/W106e30pJiYoZVtuXT1hKX19cmV0dXJuIGV9KCkscWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXRoaXM7dm9pZCAwPT09aSYmKGk9e30pLGUuY2FsbCh0aGlzKSx0aGlzLm1hcD1uLHRoaXMuZGlzcGF0Y2hlcj1uZXcgayhCdCgpLHRoaXMpLHRoaXMuaW1hZ2VNYW5hZ2VyPW5ldyBoLHRoaXMuaW1hZ2VNYW5hZ2VyLnNldEV2ZW50ZWRQYXJlbnQodGhpcyksdGhpcy5nbHlwaE1hbmFnZXI9bmV3IHgobi5fcmVxdWVzdE1hbmFnZXIsaS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpLHRoaXMubGluZUF0bGFzPW5ldyBUKDI1Niw1MTIpLHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IE5lLHRoaXMuX2xheWVycz17fSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzPXt9LHRoaXMuX29yZGVyPVtdLHRoaXMuc291cmNlQ2FjaGVzPXt9LHRoaXMuem9vbUhpc3Rvcnk9bmV3IHQuWm9vbUhpc3RvcnksdGhpcy5fbG9hZGVkPSExLHRoaXMuX2F2YWlsYWJsZUltYWdlcz1bXSx0aGlzLl9yZXNldFVwZGF0ZXMoKSx0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRSZWZlcnJlciIsdC5nZXRSZWZlcnJlcigpKTt2YXIgbz10aGlzO3RoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjaz1yLnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UoKGZ1bmN0aW9uKGUpe3ZhciByPXtwbHVnaW5TdGF0dXM6ZS5wbHVnaW5TdGF0dXMscGx1Z2luVVJMOmUucGx1Z2luVVJMfTtvLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzeW5jUlRMUGx1Z2luU3RhdGUiLHIsKGZ1bmN0aW9uKGUscil7aWYoKHQudHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudChlKSxyKSYmci5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkpZm9yKHZhciBuIGluIG8uc291cmNlQ2FjaGVzKW8uc291cmNlQ2FjaGVzW25dLnJlbG9hZCgpfSkpfSkpLHRoaXMub24oImRhdGEiLChmdW5jdGlvbih0KXtpZigic291cmNlIj09PXQuZGF0YVR5cGUmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlKXt2YXIgZT1hLnNvdXJjZUNhY2hlc1t0LnNvdXJjZUlkXTtpZihlKXt2YXIgcj1lLmdldFNvdXJjZSgpO2lmKHImJnIudmVjdG9yTGF5ZXJJZHMpZm9yKHZhciBuIGluIGEuX2xheWVycyl7dmFyIGk9YS5fbGF5ZXJzW25dO2kuc291cmNlPT09ci5pZCYmYS5fdmFsaWRhdGVMYXllcihpKX19fX0pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpO3ZhciBpPSJib29sZWFuIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZTohdC5pc01hcGJveFVSTChlKTtlPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlLHIuYWNjZXNzVG9rZW4pO3ZhciBhPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3RoaXMuX3JlcXVlc3Q9dC5nZXRKU09OKGEsKGZ1bmN0aW9uKGUscil7bi5fcmVxdWVzdD1udWxsLGU/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pKX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLl9yZXF1ZXN0PXQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24oKXtuLl9yZXF1ZXN0PW51bGwsbi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KSl9LHIucHJvdG90eXBlLmxvYWRFbXB0eT1mdW5jdGlvbigpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuX2xvYWQoSGUsITEpfSxyLnByb3RvdHlwZS5fbG9hZD1mdW5jdGlvbihlLHIpe2lmKCFyfHwhamUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIG4gaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyl0aGlzLmFkZFNvdXJjZShuLGUuc291cmNlc1tuXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT90aGlzLl9sb2FkU3ByaXRlKGUuc3ByaXRlKTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIGk9anQodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuX2xheWVycz17fSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzPXt9O2Zvcih2YXIgYT0wLG89aTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07KHM9dC5jcmVhdGVTdHlsZUxheWVyKHMpKS5zZXRFdmVudGVkUGFyZW50KHRoaXMse2xheWVyOntpZDpzLmlkfX0pLHRoaXMuX2xheWVyc1tzLmlkXT1zLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbcy5pZF09cy5zZXJpYWxpemUoKX10aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRMYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IHcodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGUubG9hZCIpKX19LHIucHJvdG90eXBlLl9sb2FkU3ByaXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fc3ByaXRlUmVxdWVzdD1mdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHM9dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8+MT8iQDJ4IjoiIixsPXQuZ2V0SlNPTihyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIuanNvbiIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLChmdW5jdGlvbih0LGUpe2w9bnVsbCxvfHwobz10LGk9ZSx1KCkpfSkpLGM9dC5nZXRJbWFnZShyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLChmdW5jdGlvbih0LGUpe2M9bnVsbCxvfHwobz10LGE9ZSx1KCkpfSkpO2Z1bmN0aW9uIHUoKXtpZihvKW4obyk7ZWxzZSBpZihpJiZhKXt2YXIgZT10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGEpLHI9e307Zm9yKHZhciBzIGluIGkpe3ZhciBsPWlbc10sYz1sLndpZHRoLHU9bC5oZWlnaHQsZj1sLngsaD1sLnkscD1sLnNkZixkPWwucGl4ZWxSYXRpbyxtPWwuc3RyZXRjaFgsZz1sLnN0cmV0Y2hZLHY9bC5jb250ZW50LHk9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpjLGhlaWdodDp1fSk7dC5SR0JBSW1hZ2UuY29weShlLHkse3g6Zix5Omh9LHt4OjAseTowfSx7d2lkdGg6YyxoZWlnaHQ6dX0pLHJbc109e2RhdGE6eSxwaXhlbFJhdGlvOmQsc2RmOnAsc3RyZXRjaFg6bSxzdHJldGNoWTpnLGNvbnRlbnQ6dn19bihudWxsLHIpfX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bCYmKGwuY2FuY2VsKCksbD1udWxsKSxjJiYoYy5jYW5jZWwoKSxjPW51bGwpfX19KGUsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihlLG4pe2lmKHIuX3Nwcml0ZVJlcXVlc3Q9bnVsbCxlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKG4pZm9yKHZhciBpIGluIG4pci5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxuW2ldKTtyLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHIuX2F2YWlsYWJsZUltYWdlcz1yLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksci5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0SW1hZ2VzIixyLl9hdmFpbGFibGVJbWFnZXMpLHIuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9KSl9LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KCJnZW9qc29uIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJytuKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytpLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJytlLmlkKyciJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9dGhpcy5fbGF5ZXJzW2ldOyJjdXN0b20iIT09YS50eXBlJiZlLnB1c2goYS5zZXJpYWxpemUoKSl9cmV0dXJuIGV9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5saWdodCYmdGhpcy5saWdodC5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKHRoaXMuc291cmNlQ2FjaGVzW3RdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tlXS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7cmV0dXJuITF9LHIucHJvdG90eXBlLl9jaGVja0xvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nIil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtpZih0aGlzLl9sb2FkZWQpe3ZhciByPXRoaXMuX2NoYW5nZWQ7aWYodGhpcy5fY2hhbmdlZCl7dmFyIG49T2JqZWN0LmtleXModGhpcy5fdXBkYXRlZExheWVycyksaT1PYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtmb3IodmFyIGEgaW4obi5sZW5ndGh8fGkubGVuZ3RoKSYmdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKG4saSksdGhpcy5fdXBkYXRlZFNvdXJjZXMpe3ZhciBvPXRoaXMuX3VwZGF0ZWRTb3VyY2VzW2FdOyJyZWxvYWQiPT09bz90aGlzLl9yZWxvYWRTb3VyY2UoYSk6ImNsZWFyIj09PW8mJnRoaXMuX2NsZWFyU291cmNlKGEpfWZvcih2YXIgcyBpbiB0aGlzLl91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcyl0aGlzLl9sYXllcnNbc10udXBkYXRlVHJhbnNpdGlvbnMoZSk7dGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhlKSx0aGlzLl9yZXNldFVwZGF0ZXMoKX1mb3IodmFyIGwgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbbF0udXNlZD0hMTtmb3IodmFyIGM9MCx1PXRoaXMuX29yZGVyO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPXRoaXMuX2xheWVyc1tmXTtoLnJlY2FsY3VsYXRlKGUsdGhpcy5fYXZhaWxhYmxlSW1hZ2VzKSwhaC5pc0hpZGRlbihlLnpvb20pJiZoLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2guc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb20sciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX19LHIucHJvdG90eXBlLl91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXM9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Qua2V5cyh0aGlzLl9jaGFuZ2VkSW1hZ2VzKTtpZih0Lmxlbmd0aCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLnJlbG9hZFRpbGVzRm9yRGVwZW5kZW5jaWVzKFsiaWNvbnMiLCJwYXR0ZXJucyJdLHQpO3RoaXMuX2NoYW5nZWRJbWFnZXM9e319fSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgidXBkYXRlTGF5ZXJzIix7bGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSxyZW1vdmVkSWRzOmV9KX0sci5wcm90b3R5cGUuX3Jlc2V0VXBkYXRlcz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRlZExheWVycz17fSx0aGlzLl9yZW1vdmVkTGF5ZXJzPXt9LHRoaXMuX3VwZGF0ZWRTb3VyY2VzPXt9LHRoaXMuX3VwZGF0ZWRQYWludFByb3BzPXt9LHRoaXMuX2NoYW5nZWRJbWFnZXM9e319LHIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSxqZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpcmV0dXJuITE7KGU9dC5jbG9uZSQxKGUpKS5sYXllcnM9anQoZS5sYXllcnMpO3ZhciBuPVp0KHRoaXMuc2VyaWFsaXplKCksZSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiBWZSl9KSk7aWYoMD09PW4ubGVuZ3RoKXJldHVybiExO3ZhciBpPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiBVZSl9KSk7aWYoaS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQ6ICIraS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KSkuam9pbigiLCAiKSsiLiIpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJzZXRUcmFuc2l0aW9uIiE9PXQuY29tbWFuZCYmclt0LmNvbW1hbmRdLmFwcGx5KHIsdC5hcmdzKX0pKSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkFuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLl9hdmFpbGFibGVJbWFnZXM9dGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpLHRoaXMuX2NoYW5nZWRJbWFnZXNbZV09ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe3RoaXMuaW1hZ2VNYW5hZ2VyLnVwZGF0ZUltYWdlKHQsZSl9LHIucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZSh0KX0sci5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZ2V0SW1hZ2UoZSkpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiTm8gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIucmVtb3ZlSW1hZ2UoZSksdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPXRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSx0aGlzLl9jaGFuZ2VkSW1hZ2VzW2VdPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKX0sci5wcm90b3R5cGUuYWRkU291cmNlPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzO2lmKHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMocikuam9pbigiLCAiKSsiLiIpO2lmKCEoWyJ2ZWN0b3IiLCJyYXN0ZXIiLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdLmluZGV4T2Yoci50eXBlKT49MCl8fCF0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuc291cmNlLCJzb3VyY2VzLiIrZSxyLG51bGwsbikpe3RoaXMubWFwJiZ0aGlzLm1hcC5fY29sbGVjdFJlc291cmNlVGltaW5nJiYoci5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ITApO3ZhciBhPXRoaXMuc291cmNlQ2FjaGVzW2VdPW5ldyBDdChlLHIsdGhpcy5kaXNwYXRjaGVyKTthLnN0eWxlPXRoaXMsYS5zZXRFdmVudGVkUGFyZW50KHRoaXMsKGZ1bmN0aW9uKCl7cmV0dXJue2lzU291cmNlTG9hZGVkOmkubG9hZGVkKCksc291cmNlOmEuc2VyaWFsaXplKCksc291cmNlSWQ6ZX19KSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPWUuaWQ7aWYodGhpcy5nZXRMYXllcihpKSl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicraSsnIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZXt2YXIgYTtpZigiY3VzdG9tIj09PWUudHlwZSl7aWYoamUodGhpcyx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihlKSkpcmV0dXJuO2E9dC5jcmVhdGVTdHlsZUxheWVyKGUpfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiBlLnNvdXJjZSYmKHRoaXMuYWRkU291cmNlKGksZS5zb3VyY2UpLGU9dC5jbG9uZSQxKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXJldHVybjthPXQuY3JlYXRlU3R5bGVMYXllcihlKSx0aGlzLl92YWxpZGF0ZUxheWVyKGEpLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6aX19KSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2EuaWRdPWEuc2VyaWFsaXplKCl9dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKTtlbHNle2lmKHRoaXMuX29yZGVyLnNwbGljZShvLDAsaSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2ldPWEsdGhpcy5fcmVtb3ZlZExheWVyc1tpXSYmYS5zb3VyY2UmJiJjdXN0b20iIT09YS50eXBlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09ImNsZWFyIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW2Euc291cmNlXS5wYXVzZSgpKX10aGlzLl91cGRhdGVMYXllcihhKSxhLm9uQWRkJiZhLm9uQWRkKHRoaXMubWFwKX19fSxyLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2VdKXtpZihlIT09cil7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKTt2YXIgaT1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO3ImJi0xPT09aT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLiIpKSl9LHIucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5fbGF5ZXJzW2VdO2lmKHIpe3Iuc2V0RXZlbnRlZFBhcmVudChudWxsKTt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fcmVtb3ZlZExheWVyc1tlXT1yLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sZGVsZXRlIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdLHIub25SZW1vdmUmJnIub25SZW1vdmUodGhpcy5tYXApfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluIHRoaXMuX2xheWVyc30sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoaSl7aWYoIXQuZGVlcEVxdWFsKGkuZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhpLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihpKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJsYXllcnMuIitpLmlkKyIuZmlsdGVyIixyLG51bGwsbil8fChpLmZpbHRlcj10LmNsb25lJDEociksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNsb25lJDEodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgYT10aGlzLmdldExheWVyKGUpO2E/dC5kZWVwRXF1YWwoYS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGEuc2V0TGF5b3V0UHJvcGVydHkocixuLGkpLHRoaXMuX3VwZGF0ZUxheWVyKGEpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobilyZXR1cm4gbi5nZXRMYXlvdXRQcm9wZXJ0eShyKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuLGkpe3ZvaWQgMD09PWkmJihpPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPXRoaXMuZ2V0TGF5ZXIoZSk7YT90LmRlZXBFcXVhbChhLmdldFBhaW50UHJvcGVydHkociksbil8fChhLnNldFBhaW50UHJvcGVydHkocixuLGkpJiZ0aGlzLl91cGRhdGVMYXllcihhKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxpPWUuc291cmNlTGF5ZXIsYT10aGlzLnNvdXJjZUNhY2hlc1tuXTtpZih2b2lkIDAhPT1hKXt2YXIgbz1hLmdldFNvdXJjZSgpLnR5cGU7Imdlb2pzb24iPT09byYmaT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci4iKSkpOiJ2ZWN0b3IiIT09b3x8aT8odm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGEuc2V0RmVhdHVyZVN0YXRlKGksZS5pZCxyKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPWUuc291cmNlLGk9dGhpcy5zb3VyY2VDYWNoZXNbbl07aWYodm9pZCAwIT09aSl7dmFyIGE9aS5nZXRTb3VyY2UoKS50eXBlLG89InZlY3RvciI9PT1hP2Uuc291cmNlTGF5ZXI6dm9pZCAwOyJ2ZWN0b3IiIT09YXx8bz9yJiYic3RyaW5nIiE9dHlwZW9mIGUuaWQmJiJudW1iZXIiIT10eXBlb2YgZS5pZD90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuIikpKTppLnJlbW92ZUZlYXR1cmVTdGF0ZShvLGUuaWQscik6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj1lLnNvdXJjZSxuPWUuc291cmNlTGF5ZXIsaT10aGlzLnNvdXJjZUNhY2hlc1tyXTtpZih2b2lkIDAhPT1pKXtpZigidmVjdG9yIiE9PWkuZ2V0U291cmNlKCkudHlwZXx8bilyZXR1cm4gdm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGkuZ2V0RmVhdHVyZVN0YXRlKG4sZS5pZCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIityKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0JiZ0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpLGxheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpfSwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYicmFzdGVyIiE9PXRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5nZXRTb3VyY2UoKS50eXBlJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5wYXVzZSgpKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZnVuY3Rpb24odCl7cmV0dXJuImZpbGwtZXh0cnVzaW9uIj09PWUuX2xheWVyc1t0XS50eXBlfSxuPXt9LGk9W10sYT10aGlzLl9vcmRlci5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIG89dGhpcy5fb3JkZXJbYV07aWYocihvKSl7bltvXT1hO2Zvcih2YXIgcz0wLGw9dDtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc11bb107aWYoYylmb3IodmFyIHU9MCxmPWM7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2kucHVzaChoKX19fX1pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaW50ZXJzZWN0aW9uWi10LmludGVyc2VjdGlvblp9KSk7Zm9yKHZhciBwPVtdLGQ9dGhpcy5fb3JkZXIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBtPXRoaXMuX29yZGVyW2RdO2lmKHIobSkpZm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB2PWlbZ10uZmVhdHVyZTtpZihuW3YubGF5ZXIuaWRdPGQpYnJlYWs7cC5wdXNoKHYpLGkucG9wKCl9ZWxzZSBmb3IodmFyIHk9MCx4PXQ7eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldW21dO2lmKGIpZm9yKHZhciBfPTAsdz1iO188dy5sZW5ndGg7Xys9MSl7dmFyIFQ9d1tfXTtwLnB1c2goVC5mZWF0dXJlKX19fXJldHVybiBwfSxyLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyLG4pe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcixudWxsLHIpO3ZhciBpPXt9O2lmKHImJnIubGF5ZXJzKXtpZighQXJyYXkuaXNBcnJheShyLmxheWVycykpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigicGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS4iKSkpLFtdO2Zvcih2YXIgYT0wLG89ci5sYXllcnM7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9dGhpcy5fbGF5ZXJzW3NdO2lmKCFsKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitzKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHF1ZXJpZWQgZm9yIGZlYXR1cmVzLiIpKSksW107aVtsLnNvdXJjZV09ITB9fXZhciBjPVtdO2Zvcih2YXIgdSBpbiByLmF2YWlsYWJsZUltYWdlcz10aGlzLl9hdmFpbGFibGVJbWFnZXMsdGhpcy5zb3VyY2VDYWNoZXMpci5sYXllcnMmJiFpW3VdfHxjLnB1c2goRih0aGlzLnNvdXJjZUNhY2hlc1t1XSx0aGlzLl9sYXllcnMsdGhpcy5fc2VyaWFsaXplZExheWVycyxlLHIsbikpO3JldHVybiB0aGlzLnBsYWNlbWVudCYmYy5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz17fSxsPWEucXVlcnlSZW5kZXJlZFN5bWJvbHMobiksYz1bXSx1PTAsZj1PYmplY3Qua2V5cyhsKS5tYXAoTnVtYmVyKTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07Yy5wdXNoKG9baF0pfWMuc29ydChCKTtmb3IodmFyIHA9ZnVuY3Rpb24oKXt2YXIgcj1tW2RdLG49ci5mZWF0dXJlSW5kZXgubG9va3VwU3ltYm9sRmVhdHVyZXMobFtyLmJ1Y2tldEluc3RhbmNlSWRdLGUsci5idWNrZXRJbmRleCxyLnNvdXJjZUxheWVySW5kZXgsaS5maWx0ZXIsaS5sYXllcnMsaS5hdmFpbGFibGVJbWFnZXMsdCk7Zm9yKHZhciBhIGluIG4pe3ZhciBvPXNbYV09c1thXXx8W10sYz1uW2FdO2Muc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yLmZlYXR1cmVTb3J0T3JkZXI7aWYobil7dmFyIGk9bi5pbmRleE9mKHQuZmVhdHVyZUluZGV4KTtyZXR1cm4gbi5pbmRleE9mKGUuZmVhdHVyZUluZGV4KS1pfXJldHVybiBlLmZlYXR1cmVJbmRleC10LmZlYXR1cmVJbmRleH0pKTtmb3IodmFyIHU9MCxmPWM7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO28ucHVzaChoKX19fSxkPTAsbT1jO2Q8bS5sZW5ndGg7ZCs9MSlwKCk7dmFyIGc9ZnVuY3Rpb24oZSl7c1tlXS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLmZlYXR1cmUsYT10W2VdLG89clthLnNvdXJjZV0uZ2V0RmVhdHVyZVN0YXRlKGkubGF5ZXJbInNvdXJjZS1sYXllciJdLGkuaWQpO2kuc291cmNlPWkubGF5ZXIuc291cmNlLGkubGF5ZXJbInNvdXJjZS1sYXllciJdJiYoaS5zb3VyY2VMYXllcj1pLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSksaS5zdGF0ZT1vfSkpfTtmb3IodmFyIHYgaW4gcylnKHYpO3JldHVybiBzfSh0aGlzLl9sYXllcnMsdGhpcy5fc2VyaWFsaXplZExheWVycyx0aGlzLnNvdXJjZUNhY2hlcyxlLHIsdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgsdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpKSx0aGlzLl9mbGF0dGVuQW5kU29ydFJlbmRlcmVkRmVhdHVyZXMoYyl9LHIucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXIiLHIuZmlsdGVyLG51bGwscik7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRUaWxlQnlJRChlKX0pKSxuPVtdLGk9e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9by50aWxlSUQuY2Fub25pY2FsLmtleTtpW3NdfHwoaVtzXT0hMCxvLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59KG4scik6W119LHIucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmdldFNvdXJjZVR5cGUodCk/bihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkICInK3QrJyIgYWxyZWFkeSBleGlzdHMuJykpOihyLnNldFNvdXJjZVR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoImxvYWRXb3JrZXJTb3VyY2UiLHtuYW1lOnQsdXJsOmUud29ya2VyU291cmNlVVJMfSxuKTpuKG51bGwsbnVsbCkpfSxyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpZ2h0LmdldExpZ2h0KCl9LHIucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5saWdodC5nZXRMaWdodCgpLGk9ITE7Zm9yKHZhciBhIGluIGUpaWYoIXQuZGVlcEVxdWFsKGVbYV0sblthXSkpe2k9ITA7YnJlYWt9aWYoaSl7dmFyIG89e25vdzp0LmJyb3dzZXIubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlLHIpLHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMobyl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9e30pLCghYXx8ITEhPT1hLnZhbGlkYXRlKSYmamUodGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHtrZXk6cixzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOm4sc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSxpKSkpfSxyLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuX3JlcXVlc3QmJih0aGlzLl9yZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3JlcXVlc3Q9bnVsbCksdGhpcy5fc3ByaXRlUmVxdWVzdCYmKHRoaXMuX3Nwcml0ZVJlcXVlc3QuY2FuY2VsKCksdGhpcy5fc3ByaXRlUmVxdWVzdD1udWxsKSx0LmV2ZW50ZWQub2ZmKCJwbHVnaW5TdGF0ZUNoYW5nZSIsdGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrKSx0aGlzLl9sYXllcnMpe3RoaXMuX2xheWVyc1tlXS5zZXRFdmVudGVkUGFyZW50KG51bGwpfWZvcih2YXIgciBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tyXS5jbGVhclRpbGVzKCksdGhpcy5zb3VyY2VDYWNoZXNbcl0uc2V0RXZlbnRlZFBhcmVudChudWxsKTt0aGlzLmltYWdlTWFuYWdlci5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9jbGVhclNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5jbGVhclRpbGVzKCl9LHIucHJvdG90eXBlLl9yZWxvYWRTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVzdW1lKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsb2FkKCl9LHIucHJvdG90eXBlLl91cGRhdGVTb3VyY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS51cGRhdGUodCl9LHIucHJvdG90eXBlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuX3JlbG9hZFNvdXJjZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVBsYWNlbWVudD1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPSExKTtmb3IodmFyIG89ITEscz0hMSxsPXt9LGM9MCx1PXRoaXMuX29yZGVyO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPXRoaXMuX2xheWVyc1tmXTtpZigic3ltYm9sIj09PWgudHlwZSl7aWYoIWxbaC5zb3VyY2VdKXt2YXIgcD10aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV07bFtoLnNvdXJjZV09cC5nZXRSZW5kZXJhYmxlSWRzKCEwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwLmdldFRpbGVCeUlEKHQpfSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KSl9dmFyIGQ9dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihoLGxbaC5zb3VyY2VdLGUuY2VudGVyLmxuZyk7bz1vfHxkfX1pZih0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKSwoKGE9YXx8dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWR8fDA9PT1uKXx8IXRoaXMucGF1c2VhYmxlUGxhY2VtZW50fHx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmIXRoaXMucGxhY2VtZW50LnN0aWxsUmVjZW50KHQuYnJvd3Nlci5ub3coKSxlLnpvb20pKSYmKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50PW5ldyB6ZShlLHRoaXMuX29yZGVyLGEscixuLGksdGhpcy5wbGFjZW1lbnQpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbCksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodC5icm93c2VyLm5vdygpKSxzPSEwKSxvJiZ0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKSksc3x8bylmb3IodmFyIG09MCxnPXRoaXMuX29yZGVyO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXSx5PXRoaXMuX2xheWVyc1t2XTsic3ltYm9sIj09PXkudHlwZSYmdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoeSxsW3kuc291cmNlXSl9cmV0dXJuIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpfHx0aGlzLnBsYWNlbWVudC5oYXNUcmFuc2l0aW9ucyh0LmJyb3dzZXIubm93KCkpfSxyLnByb3RvdHlwZS5fcmVsZWFzZVN5bWJvbEZhZGVUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUscil7dGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKGUuaWNvbnMsciksdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCk7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZS5zb3VyY2VdO24mJm4uc2V0RGVwZW5kZW5jaWVzKGUudGlsZUlELmtleSxlLnR5cGUsZS5pY29ucyl9LHIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbih0LGUscil7dGhpcy5nbHlwaE1hbmFnZXIuZ2V0R2x5cGhzKGUuc3RhY2tzLHIpfSxyLnByb3RvdHlwZS5nZXRSZXNvdXJjZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQubWFrZVJlcXVlc3QocixuKX0scn0odC5FdmVudGVkKTtxZS5nZXRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBEW3RdfSxxZS5zZXRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSl7RFt0XT1lfSxxZS5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlPXQucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZTt2YXIgR2U9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dKSxZZT15cigiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG4jaWYgIWRlZmluZWQobWVkaXVtcClcbiNkZWZpbmUgbWVkaXVtcFxuI2VuZGlmXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcbiNlbmRpZiIsIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuI2VuZGlmXG52ZWMyIHVucGFja19mbG9hdChjb25zdCBmbG9hdCBwYWNrZWRWYWx1ZSkge2ludCBwYWNrZWRJbnRWYWx1ZT1pbnQocGFja2VkVmFsdWUpO2ludCB2MD1wYWNrZWRJbnRWYWx1ZS8yNTY7cmV0dXJuIHZlYzIodjAscGFja2VkSW50VmFsdWUtdjAqMjU2KTt9dmVjMiB1bnBhY2tfb3BhY2l0eShjb25zdCBmbG9hdCBwYWNrZWRPcGFjaXR5KSB7aW50IGludE9wYWNpdHk9aW50KHBhY2tlZE9wYWNpdHkpLzI7cmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkvMTI3LjAsbW9kKHBhY2tlZE9wYWNpdHksMi4wKSk7fXZlYzQgZGVjb2RlX2NvbG9yKGNvbnN0IHZlYzIgZW5jb2RlZENvbG9yKSB7cmV0dXJuIHZlYzQodW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkvMjU1LjAsdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclsxXSkvMjU1LjBcbik7fWZsb2F0IHVucGFja19taXhfdmVjMihjb25zdCB2ZWMyIHBhY2tlZFZhbHVlLGNvbnN0IGZsb2F0IHQpIHtyZXR1cm4gbWl4KHBhY2tlZFZhbHVlWzBdLHBhY2tlZFZhbHVlWzFdLHQpO312ZWM0IHVucGFja19taXhfY29sb3IoY29uc3QgdmVjNCBwYWNrZWRDb2xvcnMsY29uc3QgZmxvYXQgdCkge3ZlYzQgbWluQ29sb3I9ZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzBdLHBhY2tlZENvbG9yc1sxXSkpO3ZlYzQgbWF4Q29sb3I9ZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzJdLHBhY2tlZENvbG9yc1szXSkpO3JldHVybiBtaXgobWluQ29sb3IsbWF4Q29sb3IsdCk7fXZlYzIgZ2V0X3BhdHRlcm5fcG9zKGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfdXBwZXIsY29uc3QgdmVjMiBwaXhlbF9jb29yZF9sb3dlcixjb25zdCB2ZWMyIHBhdHRlcm5fc2l6ZSxjb25zdCBmbG9hdCB0aWxlX3VuaXRzX3RvX3BpeGVscyxjb25zdCB2ZWMyIHBvcykge3ZlYzIgb2Zmc2V0PW1vZChtb2QobW9kKHBpeGVsX2Nvb3JkX3VwcGVyLHBhdHRlcm5fc2l6ZSkqMjU2LjAscGF0dGVybl9zaXplKSoyNTYuMCtwaXhlbF9jb29yZF9sb3dlcixwYXR0ZXJuX3NpemUpO3JldHVybiAodGlsZV91bml0c190b19waXhlbHMqcG9zK29mZnNldCkvcGF0dGVybl9zaXplO30iKSxXZT15cigidW5pZm9ybSB2ZWM0IHVfY29sb3I7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj11X2NvbG9yKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IiksWGU9eXIoInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9taXg7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2b2lkIG1haW4oKSB7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHVfcGF0dGVybl90bF9hL3VfdGV4c2l6ZSx1X3BhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgodV9wYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHVfcGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO2dsX0ZyYWdDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X21peCkqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTt1bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjt1bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdV9zY2FsZV9hKnVfcGF0dGVybl9zaXplX2EsdV90aWxlX3VuaXRzX3RvX3BpeGVscyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHVfc2NhbGVfYip1X3BhdHRlcm5fc2l6ZV9iLHVfdGlsZV91bml0c190b19waXhlbHMsYV9wb3MpO30iKSxaZT15cigidmFyeWluZyB2ZWMzIHZfZGF0YTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52ZWMyIGV4dHJ1ZGU9dl9kYXRhLnh5O2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoPWxlbmd0aChleHRydWRlKTtsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXI9dl9kYXRhLno7ZmxvYXQgYW50aWFsaWFzZWRfYmx1cj0tbWF4KGJsdXIsYW50aWFsaWFzYmx1cik7ZmxvYXQgb3BhY2l0eV90PXNtb290aHN0ZXAoMC4wLGFudGlhbGlhc2VkX2JsdXIsZXh0cnVkZV9sZW5ndGgtMS4wKTtmbG9hdCBjb2xvcl90PXN0cm9rZV93aWR0aCA8IDAuMDEgPyAwLjAgOiBzbW9vdGhzdGVwKGFudGlhbGlhc2VkX2JsdXIsMC4wLGV4dHJ1ZGVfbGVuZ3RoLXJhZGl1cy8ocmFkaXVzK3N0cm9rZV93aWR0aCkpO2dsX0ZyYWdDb2xvcj1vcGFjaXR5X3QqbWl4KGNvbG9yKm9wYWNpdHksc3Ryb2tlX2NvbG9yKnN0cm9rZV9vcGFjaXR5LGNvbG9yX3QpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGJvb2wgdV9zY2FsZV93aXRoX21hcDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzMgdl9kYXRhO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudm9pZCBtYWluKHZvaWQpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52ZWMyIGV4dHJ1ZGU9dmVjMihtb2QoYV9wb3MsMi4wKSoyLjAtMS4wKTt2ZWMyIGNpcmNsZV9jZW50ZXI9Zmxvb3IoYV9wb3MqMC41KTtpZiAodV9waXRjaF93aXRoX21hcCkge3ZlYzIgY29ybmVyX3Bvc2l0aW9uPWNpcmNsZV9jZW50ZXI7aWYgKHVfc2NhbGVfd2l0aF9tYXApIHtjb3JuZXJfcG9zaXRpb24rPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZTt9IGVsc2Uge3ZlYzQgcHJvamVjdGVkX2NlbnRlcj11X21hdHJpeCp2ZWM0KGNpcmNsZV9jZW50ZXIsMCwxKTtjb3JuZXJfcG9zaXRpb24rPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSoocHJvamVjdGVkX2NlbnRlci53L3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSk7fWdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoY29ybmVyX3Bvc2l0aW9uLDAsMSk7fSBlbHNlIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGNpcmNsZV9jZW50ZXIsMCwxKTtpZiAodV9zY2FsZV93aXRoX21hcCkge2dsX1Bvc2l0aW9uLnh5Kz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO30gZWxzZSB7Z2xfUG9zaXRpb24ueHkrPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSpnbF9Qb3NpdGlvbi53O319bG93cCBmbG9hdCBhbnRpYWxpYXNibHVyPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8ocmFkaXVzK3N0cm9rZV93aWR0aCk7dl9kYXRhPXZlYzMoZXh0cnVkZS54LGV4dHJ1ZGUueSxhbnRpYWxpYXNibHVyKTt9IiksSmU9eXIoInZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dmVjNCgxLjApO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IiksS2U9eXIoInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9pbnRlbnNpdHk7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcbmZsb2F0IGQ9LTAuNSozLjAqMy4wKmRvdCh2X2V4dHJ1ZGUsdl9leHRydWRlKTtmbG9hdCB2YWw9d2VpZ2h0KnVfaW50ZW5zaXR5KkdBVVNTX0NPRUYqZXhwKGQpO2dsX0ZyYWdDb2xvcj12ZWM0KHZhbCwxLjAsMS4wLDEuMCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gZmxvYXQgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gZmxvYXQgdV9pbnRlbnNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG5jb25zdCBoaWdocCBmbG9hdCBaRVJPPTEuMC8yNTUuMC8xNi4wO1xuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xudm9pZCBtYWluKHZvaWQpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbnZlYzIgdW5zY2FsZWRfZXh0cnVkZT12ZWMyKG1vZChhX3BvcywyLjApKjIuMC0xLjApO2Zsb2F0IFM9c3FydCgtMi4wKmxvZyhaRVJPL3dlaWdodC91X2ludGVuc2l0eS9HQVVTU19DT0VGKSkvMy4wO3ZfZXh0cnVkZT1TKnVuc2NhbGVkX2V4dHJ1ZGU7dmVjMiBleHRydWRlPXZfZXh0cnVkZSpyYWRpdXMqdV9leHRydWRlX3NjYWxlO3ZlYzQgcG9zPXZlYzQoZmxvb3IoYV9wb3MqMC41KStleHRydWRlLDAsMSk7Z2xfUG9zaXRpb249dV9tYXRyaXgqcG9zO30iKSxRZT15cigidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbG9yX3JhbXA7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtmbG9hdCB0PXRleHR1cmUyRCh1X2ltYWdlLHZfcG9zKS5yO3ZlYzQgY29sb3I9dGV4dHVyZTJEKHVfY29sb3JfcmFtcCx2ZWMyKHQsMC41KSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDAuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zKnVfd29ybGQsMCwxKTt2X3Bvcy54PWFfcG9zLng7dl9wb3MueT0xLjAtYV9wb3MueTt9IiksJGU9eXIoInZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7dmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7dm9pZCBtYWluKCkge2Zsb2F0IGFscGhhPTAuNTtnbF9GcmFnQ29sb3I9dmVjNCgxLjAsMC4wLDAuMCwxLjApKmFscGhhO2lmICh2X3BsYWNlZCA+IDAuNSkge2dsX0ZyYWdDb2xvcj12ZWM0KDAuMCwwLjAsMS4wLDAuNSkqYWxwaGE7fWlmICh2X25vdFVzZWQgPiAwLjUpIHtnbF9GcmFnQ29sb3IqPS4xO319IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTthdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDthdHRyaWJ1dGUgdmVjMiBhX3NoaWZ0O3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7dmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7dm9pZCBtYWluKCkge3ZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX2FuY2hvcl9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAuMCwxLjApO2dsX1Bvc2l0aW9uLnh5Kz0oYV9leHRydWRlK2Ffc2hpZnQpKnVfZXh0cnVkZV9zY2FsZSpnbF9Qb3NpdGlvbi53KmNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbzt2X3BsYWNlZD1hX3BsYWNlZC54O3Zfbm90VXNlZD1hX3BsYWNlZC55O30iKSx0cj15cigidmFyeWluZyBmbG9hdCB2X3JhZGl1czt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO3ZhcnlpbmcgZmxvYXQgdl9wZXJzcGVjdGl2ZV9yYXRpbzt2YXJ5aW5nIGZsb2F0IHZfY29sbGlzaW9uO3ZvaWQgbWFpbigpIHtmbG9hdCBhbHBoYT0wLjUqbWluKHZfcGVyc3BlY3RpdmVfcmF0aW8sMS4wKTtmbG9hdCBzdHJva2VfcmFkaXVzPTAuOSptYXgodl9wZXJzcGVjdGl2ZV9yYXRpbywxLjApO2Zsb2F0IGRpc3RhbmNlX3RvX2NlbnRlcj1sZW5ndGgodl9leHRydWRlKTtmbG9hdCBkaXN0YW5jZV90b19lZGdlPWFicyhkaXN0YW5jZV90b19jZW50ZXItdl9yYWRpdXMpO2Zsb2F0IG9wYWNpdHlfdD1zbW9vdGhzdGVwKC1zdHJva2VfcmFkaXVzLDAuMCwtZGlzdGFuY2VfdG9fZWRnZSk7dmVjNCBjb2xvcj1taXgodmVjNCgwLjAsMC4wLDEuMCwwLjUpLHZlYzQoMS4wLDAuMCwwLjAsMS4wKSx2X2NvbGxpc2lvbik7Z2xfRnJhZ0NvbG9yPWNvbG9yKmFscGhhKm9wYWNpdHlfdDt9IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIGZsb2F0IGFfcmFkaXVzO2F0dHJpYnV0ZSB2ZWMyIGFfZmxhZ3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2ludl9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdmlld3BvcnRfc2l6ZTt1bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt2YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7dmFyeWluZyBmbG9hdCB2X3BlcnNwZWN0aXZlX3JhdGlvO3ZhcnlpbmcgZmxvYXQgdl9jb2xsaXNpb247dmVjMyB0b1RpbGVQb3NpdGlvbih2ZWMyIHNjcmVlblBvcykge3ZlYzQgcmF5U3RhcnQ9dV9pbnZfbWF0cml4KnZlYzQoc2NyZWVuUG9zLC0xLjAsMS4wKTt2ZWM0IHJheUVuZCAgPXVfaW52X21hdHJpeCp2ZWM0KHNjcmVlblBvcywgMS4wLDEuMCk7cmF5U3RhcnQueHl6Lz1yYXlTdGFydC53O3JheUVuZC54eXogIC89cmF5RW5kLnc7aGlnaHAgZmxvYXQgdD0oMC4wLXJheVN0YXJ0LnopLyhyYXlFbmQuei1yYXlTdGFydC56KTtyZXR1cm4gbWl4KHJheVN0YXJ0Lnh5eixyYXlFbmQueHl6LHQpO312b2lkIG1haW4oKSB7dmVjMiBxdWFkQ2VudGVyUG9zPWFfcG9zO2Zsb2F0IHJhZGl1cz1hX3JhZGl1cztmbG9hdCBjb2xsaXNpb249YV9mbGFncy54O2Zsb2F0IHZlcnRleElkeD1hX2ZsYWdzLnk7dmVjMiBxdWFkVmVydGV4T2Zmc2V0PXZlYzIobWl4KC0xLjAsMS4wLGZsb2F0KHZlcnRleElkeCA+PTIuMCkpLG1peCgtMS4wLDEuMCxmbG9hdCh2ZXJ0ZXhJZHggPj0xLjAgJiYgdmVydGV4SWR4IDw9Mi4wKSkpO3ZlYzIgcXVhZFZlcnRleEV4dGVudD1xdWFkVmVydGV4T2Zmc2V0KnJhZGl1czt2ZWMzIHRpbGVQb3M9dG9UaWxlUG9zaXRpb24ocXVhZENlbnRlclBvcyk7dmVjNCBjbGlwUG9zPXVfbWF0cml4KnZlYzQodGlsZVBvcywxLjApO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9Y2xpcFBvcy53O2hpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41Kih1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksMC4wLDQuMCk7ZmxvYXQgcGFkZGluZ19mYWN0b3I9MS4yO3ZfcmFkaXVzPXJhZGl1czt2X2V4dHJ1ZGU9cXVhZFZlcnRleEV4dGVudCpwYWRkaW5nX2ZhY3Rvcjt2X3BlcnNwZWN0aXZlX3JhdGlvPWNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbzt2X2NvbGxpc2lvbj1jb2xsaXNpb247Z2xfUG9zaXRpb249dmVjNChjbGlwUG9zLnh5ei9jbGlwUG9zLncsMS4wKSt2ZWM0KHF1YWRWZXJ0ZXhFeHRlbnQqcGFkZGluZ19mYWN0b3IvdV92aWV3cG9ydF9zaXplKjIuMCwwLjAsMC4wKTt9IiksZXI9eXIoInVuaWZvcm0gaGlnaHAgdmVjNCB1X2NvbG9yO3VuaWZvcm0gc2FtcGxlcjJEIHVfb3ZlcmxheTt2YXJ5aW5nIHZlYzIgdl91djt2b2lkIG1haW4oKSB7dmVjNCBvdmVybGF5X2NvbG9yPXRleHR1cmUyRCh1X292ZXJsYXksdl91dik7Z2xfRnJhZ0NvbG9yPW1peCh1X2NvbG9yLG92ZXJsYXlfY29sb3Isb3ZlcmxheV9jb2xvci5hKTt9IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfdXY7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gZmxvYXQgdV9vdmVybGF5X3NjYWxlO3ZvaWQgbWFpbigpIHt2X3V2PWFfcG9zLzgxOTIuMDtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zKnVfb3ZlcmxheV9zY2FsZSwwLDEpO30iKSxycj15cigiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9GcmFnQ29sb3I9Y29sb3Iqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IiksbnI9eXIoInZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfcG9zLWdsX0ZyYWdDb29yZC54eSk7ZmxvYXQgYWxwaGE9MS4wLXNtb290aHN0ZXAoMC4wLDEuMCxkaXN0KTtnbF9GcmFnQ29sb3I9b3V0bGluZV9jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvcz0oZ2xfUG9zaXRpb24ueHkvZ2xfUG9zaXRpb24udysxLjApLzIuMCp1X3dvcmxkO30iKSxpcj15cigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7ZmxvYXQgZGlzdD1sZW5ndGgodl9wb3MtZ2xfRnJhZ0Nvb3JkLnh5KTtmbG9hdCBhbHBoYT0xLjAtc21vb3Roc3RlcCgwLjAsMS4wLGRpc3QpO2dsX0ZyYWdDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpKmFscGhhKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gdmVjMyB1X3NjYWxlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcixmcm9tU2NhbGUqZGlzcGxheV9zaXplX2EsdGlsZVJhdGlvLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlUmF0aW8sYV9wb3MpO3ZfcG9zPShnbF9Qb3NpdGlvbi54eS9nbF9Qb3NpdGlvbi53KzEuMCkvMi4wKnVfd29ybGQ7fSIpLGFyPXlyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO2dsX0ZyYWdDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gdmVjMyB1X3NjYWxlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlWm9vbVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcixmcm9tU2NhbGUqZGlzcGxheV9zaXplX2EsdGlsZVpvb21SYXRpbyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHRvU2NhbGUqZGlzcGxheV9zaXplX2IsdGlsZVpvb21SYXRpbyxhX3Bvcyk7fSIpLG9yPXlyKCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjt2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXZfY29sb3I7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7dW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTt1bmlmb3JtIGZsb2F0IHVfdmVydGljYWxfZ3JhZGllbnQ7dW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDt2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG52ZWMzIG5vcm1hbD1hX25vcm1hbF9lZC54eXo7YmFzZT1tYXgoMC4wLGJhc2UpO2hlaWdodD1tYXgoMC4wLGhlaWdodCk7ZmxvYXQgdD1tb2Qobm9ybWFsLngsMi4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLHQgPiAwLjAgPyBoZWlnaHQgOiBiYXNlLDEpO2Zsb2F0IGNvbG9ydmFsdWU9Y29sb3IuciowLjIxMjYrY29sb3IuZyowLjcxNTIrY29sb3IuYiowLjA3MjI7dl9jb2xvcj12ZWM0KDAuMCwwLjAsMC4wLDEuMCk7dmVjNCBhbWJpZW50bGlnaHQ9dmVjNCgwLjAzLDAuMDMsMC4wMywxLjApO2NvbG9yKz1hbWJpZW50bGlnaHQ7ZmxvYXQgZGlyZWN0aW9uYWw9Y2xhbXAoZG90KG5vcm1hbC8xNjM4NC4wLHVfbGlnaHRwb3MpLDAuMCwxLjApO2RpcmVjdGlvbmFsPW1peCgoMS4wLXVfbGlnaHRpbnRlbnNpdHkpLG1heCgoMS4wLWNvbG9ydmFsdWUrdV9saWdodGludGVuc2l0eSksMS4wKSxkaXJlY3Rpb25hbCk7aWYgKG5vcm1hbC55ICE9MC4wKSB7ZGlyZWN0aW9uYWwqPSgoMS4wLXVfdmVydGljYWxfZ3JhZGllbnQpKyh1X3ZlcnRpY2FsX2dyYWRpZW50KmNsYW1wKCh0K2Jhc2UpKnBvdyhoZWlnaHQvMTUwLjAsMC41KSxtaXgoMC43LDAuOTgsMS4wLXVfbGlnaHRpbnRlbnNpdHkpLDEuMCkpKTt9dl9jb2xvci5yKz1jbGFtcChjb2xvci5yKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5yLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuciksMS4wKTt2X2NvbG9yLmcrPWNsYW1wKGNvbG9yLmcqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLmcsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5nKSwxLjApO3ZfY29sb3IuYis9Y2xhbXAoY29sb3IuYipkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IuYixtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLmIpLDEuMCk7dl9jb2xvcio9dV9vcGFjaXR5O30iKSxzcj15cigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTt2ZWM0IG1peGVkQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKTtnbF9GcmFnQ29sb3I9bWl4ZWRDb2xvcip2X2xpZ2h0aW5nO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIGZsb2F0IHVfaGVpZ2h0X2ZhY3Rvcjt1bmlmb3JtIHZlYzMgdV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfdmVydGljYWxfZ3JhZGllbnQ7dW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO3VuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7dW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMyBub3JtYWw9YV9ub3JtYWxfZWQueHl6O2Zsb2F0IGVkZ2VkaXN0YW5jZT1hX25vcm1hbF9lZC53O3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87YmFzZT1tYXgoMC4wLGJhc2UpO2hlaWdodD1tYXgoMC4wLGhlaWdodCk7ZmxvYXQgdD1tb2Qobm9ybWFsLngsMi4wKTtmbG9hdCB6PXQgPiAwLjAgPyBoZWlnaHQgOiBiYXNlO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MseiwxKTt2ZWMyIHBvcz1ub3JtYWwueD09MS4wICYmIG5vcm1hbC55PT0wLjAgJiYgbm9ybWFsLno9PTE2Mzg0LjBcbj8gYV9wb3NcbjogdmVjMihlZGdlZGlzdGFuY2Useip1X2hlaWdodF9mYWN0b3IpO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcixmcm9tU2NhbGUqZGlzcGxheV9zaXplX2EsdGlsZVJhdGlvLHBvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHRvU2NhbGUqZGlzcGxheV9zaXplX2IsdGlsZVJhdGlvLHBvcyk7dl9saWdodGluZz12ZWM0KDAuMCwwLjAsMC4wLDEuMCk7ZmxvYXQgZGlyZWN0aW9uYWw9Y2xhbXAoZG90KG5vcm1hbC8xNjM4My4wLHVfbGlnaHRwb3MpLDAuMCwxLjApO2RpcmVjdGlvbmFsPW1peCgoMS4wLXVfbGlnaHRpbnRlbnNpdHkpLG1heCgoMC41K3VfbGlnaHRpbnRlbnNpdHkpLDEuMCksZGlyZWN0aW9uYWwpO2lmIChub3JtYWwueSAhPTAuMCkge2RpcmVjdGlvbmFsKj0oKDEuMC11X3ZlcnRpY2FsX2dyYWRpZW50KSsodV92ZXJ0aWNhbF9ncmFkaWVudCpjbGFtcCgodCtiYXNlKSpwb3coaGVpZ2h0LzE1MC4wLDAuNSksbWl4KDAuNywwLjk4LDEuMC11X2xpZ2h0aW50ZW5zaXR5KSwxLjApKSk7fXZfbGlnaHRpbmcucmdiKz1jbGFtcChkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IsbWl4KHZlYzMoMC4wKSx2ZWMzKDAuMyksMS4wLXVfbGlnaHRjb2xvciksdmVjMygxLjApKTt2X2xpZ2h0aW5nKj11X29wYWNpdHk7fSIpLGxyPXlyKCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbmRpZlxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3M7dW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO3VuaWZvcm0gZmxvYXQgdV96b29tO3VuaWZvcm0gZmxvYXQgdV9tYXh6b29tO3VuaWZvcm0gdmVjNCB1X3VucGFjaztmbG9hdCBnZXRFbGV2YXRpb24odmVjMiBjb29yZCxmbG9hdCBiaWFzKSB7dmVjNCBkYXRhPXRleHR1cmUyRCh1X2ltYWdlLGNvb3JkKSoyNTUuMDtkYXRhLmE9LTEuMDtyZXR1cm4gZG90KGRhdGEsdV91bnBhY2spLzQuMDt9dm9pZCBtYWluKCkge3ZlYzIgZXBzaWxvbj0xLjAvdV9kaW1lbnNpb247ZmxvYXQgYT1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigtZXBzaWxvbi54LC1lcHNpbG9uLnkpLDAuMCk7ZmxvYXQgYj1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigwLC1lcHNpbG9uLnkpLDAuMCk7ZmxvYXQgYz1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBkPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsMCksMC4wKTtmbG9hdCBlPWdldEVsZXZhdGlvbih2X3BvcywwLjApO2Zsb2F0IGY9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoZXBzaWxvbi54LDApLDAuMCk7ZmxvYXQgZz1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigtZXBzaWxvbi54LGVwc2lsb24ueSksMC4wKTtmbG9hdCBoPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKDAsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGk9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoZXBzaWxvbi54LGVwc2lsb24ueSksMC4wKTtmbG9hdCBleGFnZ2VyYXRpb249dV96b29tIDwgMi4wID8gMC40IDogdV96b29tIDwgNC41ID8gMC4zNSA6IDAuMzt2ZWMyIGRlcml2PXZlYzIoKGMrZitmK2kpLShhK2QrZCtnKSwoZytoK2graSktKGErYitiK2MpKS8gcG93KDIuMCwodV96b29tLXVfbWF4em9vbSkqZXhhZ2dlcmF0aW9uKzE5LjI1NjItdV96b29tKTtnbF9GcmFnQ29sb3I9Y2xhbXAodmVjNChkZXJpdi54LzIuMCswLjUsZGVyaXYueS8yLjArMC41LDEuMCwxLjApLDAuMCwxLjApO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCB2ZWMyIGVwc2lsb249MS4wL3VfZGltZW5zaW9uO2Zsb2F0IHNjYWxlPSh1X2RpbWVuc2lvbi54LTIuMCkvdV9kaW1lbnNpb24ueDt2X3Bvcz0oYV90ZXh0dXJlX3Bvcy84MTkyLjApKnNjYWxlK2Vwc2lsb247fSIpLGNyPXlyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvczt1bmlmb3JtIHZlYzIgdV9sYXRyYW5nZTt1bmlmb3JtIHZlYzIgdV9saWdodDt1bmlmb3JtIHZlYzQgdV9zaGFkb3c7dW5pZm9ybSB2ZWM0IHVfaGlnaGxpZ2h0O3VuaWZvcm0gdmVjNCB1X2FjY2VudDtcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcbnZvaWQgbWFpbigpIHt2ZWM0IHBpeGVsPXRleHR1cmUyRCh1X2ltYWdlLHZfcG9zKTt2ZWMyIGRlcml2PSgocGl4ZWwucmcqMi4wKS0xLjApO2Zsb2F0IHNjYWxlRmFjdG9yPWNvcyhyYWRpYW5zKCh1X2xhdHJhbmdlWzBdLXVfbGF0cmFuZ2VbMV0pKigxLjAtdl9wb3MueSkrdV9sYXRyYW5nZVsxXSkpO2Zsb2F0IHNsb3BlPWF0YW4oMS4yNSpsZW5ndGgoZGVyaXYpL3NjYWxlRmFjdG9yKTtmbG9hdCBhc3BlY3Q9ZGVyaXYueCAhPTAuMCA/IGF0YW4oZGVyaXYueSwtZGVyaXYueCkgOiBQSS8yLjAqKGRlcml2LnkgPiAwLjAgPyAxLjAgOi0xLjApO2Zsb2F0IGludGVuc2l0eT11X2xpZ2h0Lng7ZmxvYXQgYXppbXV0aD11X2xpZ2h0LnkrUEk7ZmxvYXQgYmFzZT0xLjg3NS1pbnRlbnNpdHkqMS43NTtmbG9hdCBtYXhWYWx1ZT0wLjUqUEk7ZmxvYXQgc2NhbGVkU2xvcGU9aW50ZW5zaXR5ICE9MC41ID8gKChwb3coYmFzZSxzbG9wZSktMS4wKS8ocG93KGJhc2UsbWF4VmFsdWUpLTEuMCkpKm1heFZhbHVlIDogc2xvcGU7ZmxvYXQgYWNjZW50PWNvcyhzY2FsZWRTbG9wZSk7dmVjNCBhY2NlbnRfY29sb3I9KDEuMC1hY2NlbnQpKnVfYWNjZW50KmNsYW1wKGludGVuc2l0eSoyLjAsMC4wLDEuMCk7ZmxvYXQgc2hhZGU9YWJzKG1vZCgoYXNwZWN0K2F6aW11dGgpL1BJKzAuNSwyLjApLTEuMCk7dmVjNCBzaGFkZV9jb2xvcj1taXgodV9zaGFkb3csdV9oaWdobGlnaHQsc2hhZGUpKnNpbihzY2FsZWRTbG9wZSkqY2xhbXAoaW50ZW5zaXR5KjIuMCwwLjAsMS4wKTtnbF9GcmFnQ29sb3I9YWNjZW50X2NvbG9yKigxLjAtc2hhZGVfY29sb3IuYSkrc2hhZGVfY29sb3I7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3M9YV90ZXh0dXJlX3Bvcy84MTkyLjA7fSIpLHVyPXlyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfbm9ybWFsKSp2X3dpZHRoMi5zO2Zsb2F0IGJsdXIyPShibHVyKzEuMC91X2RldmljZV9waXhlbF9yYXRpbykqdl9nYW1tYV9zY2FsZTtmbG9hdCBhbHBoYT1jbGFtcChtaW4oZGlzdC0odl93aWR0aDIudC1ibHVyMiksdl93aWR0aDIucy1kaXN0KS9ibHVyMiwwLjAsMS4wKTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuYXR0cmlidXRlIHZlYzIgYV9wb3Nfbm9ybWFsO2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXNvZmFyO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7dl9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqMi4wO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxmcj15cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfbm9ybWFsKSp2X3dpZHRoMi5zO2Zsb2F0IGJsdXIyPShibHVyKzEuMC91X2RldmljZV9waXhlbF9yYXRpbykqdl9nYW1tYV9zY2FsZTtmbG9hdCBhbHBoYT1jbGFtcChtaW4oZGlzdC0odl93aWR0aDIudC1ibHVyMiksdl93aWR0aDIucy1kaXN0KS9ibHVyMiwwLjAsMS4wKTt2ZWM0IGNvbG9yPXRleHR1cmUyRCh1X2ltYWdlLHZlYzIodl9saW5lcHJvZ3Jlc3MsMC41KSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgTUFYX0xJTkVfRElTVEFOQ0UgMzI3NjcuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuYXR0cmlidXRlIHZlYzIgYV9wb3Nfbm9ybWFsO2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO3ZfbGluZXByb2dyZXNzPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKjIuMC9NQVhfTElORV9ESVNUQU5DRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt9IiksaHI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gbWVkaXVtcCB2ZWMzIHVfc2NhbGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgZmxvYXQgdl93aWR0aDtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVpvb21SYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO3ZlYzIgcGF0dGVybl9zaXplX2E9dmVjMihkaXNwbGF5X3NpemVfYS54KmZyb21TY2FsZS90aWxlWm9vbVJhdGlvLGRpc3BsYXlfc2l6ZV9hLnkpO3ZlYzIgcGF0dGVybl9zaXplX2I9dmVjMihkaXNwbGF5X3NpemVfYi54KnRvU2NhbGUvdGlsZVpvb21SYXRpbyxkaXNwbGF5X3NpemVfYi55KTtmbG9hdCBhc3BlY3RfYT1kaXNwbGF5X3NpemVfYS55L3Zfd2lkdGg7ZmxvYXQgYXNwZWN0X2I9ZGlzcGxheV9zaXplX2IueS92X3dpZHRoO2Zsb2F0IGRpc3Q9bGVuZ3RoKHZfbm9ybWFsKSp2X3dpZHRoMi5zO2Zsb2F0IGJsdXIyPShibHVyKzEuMC91X2RldmljZV9waXhlbF9yYXRpbykqdl9nYW1tYV9zY2FsZTtmbG9hdCBhbHBoYT1jbGFtcChtaW4oZGlzdC0odl93aWR0aDIudC1ibHVyMiksdl93aWR0aDIucy1kaXN0KS9ibHVyMiwwLjAsMS4wKTtmbG9hdCB4X2E9bW9kKHZfbGluZXNvZmFyL3BhdHRlcm5fc2l6ZV9hLngqYXNwZWN0X2EsMS4wKTtmbG9hdCB4X2I9bW9kKHZfbGluZXNvZmFyL3BhdHRlcm5fc2l6ZV9iLngqYXNwZWN0X2IsMS4wKTtmbG9hdCB5PTAuNSp2X25vcm1hbC55KzAuNTt2ZWMyIHRleGVsX3NpemU9MS4wL3VfdGV4c2l6ZTt2ZWMyIHBvc19hPW1peChwYXR0ZXJuX3RsX2EqdGV4ZWxfc2l6ZS10ZXhlbF9zaXplLHBhdHRlcm5fYnJfYSp0ZXhlbF9zaXplK3RleGVsX3NpemUsdmVjMih4X2EseSkpO3ZlYzIgcG9zX2I9bWl4KHBhdHRlcm5fdGxfYip0ZXhlbF9zaXplLXRleGVsX3NpemUscGF0dGVybl9icl9iKnRleGVsX3NpemUrdGV4ZWxfc2l6ZSx2ZWMyKHhfYix5KSk7dmVjNCBjb2xvcj1taXgodGV4dHVyZTJEKHVfaW1hZ2UscG9zX2EpLHRleHR1cmUyRCh1X2ltYWdlLHBvc19iKSx1X2ZhZGUpO2dsX0ZyYWdDb2xvcj1jb2xvciphbHBoYSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuYXR0cmlidXRlIHZlYzIgYV9wb3Nfbm9ybWFsO2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgZmxvYXQgdl93aWR0aDtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO2Zsb2F0IGFfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKkxJTkVfRElTVEFOQ0VfU0NBTEU7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X2xpbmVzb2Zhcj1hX2xpbmVzb2Zhcjt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7dl93aWR0aD1mbG9vcndpZHRoO30iKSxwcj15cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBmbG9hdCB1X3NkZmdhbW1hO3VuaWZvcm0gZmxvYXQgdV9taXg7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl90ZXhfYTt2YXJ5aW5nIHZlYzIgdl90ZXhfYjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2Zsb2F0IHNkZmRpc3RfYT10ZXh0dXJlMkQodV9pbWFnZSx2X3RleF9hKS5hO2Zsb2F0IHNkZmRpc3RfYj10ZXh0dXJlMkQodV9pbWFnZSx2X3RleF9iKS5hO2Zsb2F0IHNkZmRpc3Q9bWl4KHNkZmRpc3RfYSxzZGZkaXN0X2IsdV9taXgpO2FscGhhKj1zbW9vdGhzdGVwKDAuNS11X3NkZmdhbW1hL2Zsb29yd2lkdGgsMC41K3Vfc2RmZ2FtbWEvZmxvb3J3aWR0aCxzZGZkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuYXR0cmlidXRlIHZlYzIgYV9wb3Nfbm9ybWFsO2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9hO3VuaWZvcm0gZmxvYXQgdV90ZXhfeV9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9iO3VuaWZvcm0gZmxvYXQgdV90ZXhfeV9iO3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X3RleF9hO3ZhcnlpbmcgdmVjMiB2X3RleF9iO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO2Zsb2F0IGFfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKkxJTkVfRElTVEFOQ0VfU0NBTEU7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3RleF9hPXZlYzIoYV9saW5lc29mYXIqdV9wYXR0ZXJuc2NhbGVfYS54L2Zsb29yd2lkdGgsbm9ybWFsLnkqdV9wYXR0ZXJuc2NhbGVfYS55K3VfdGV4X3lfYSk7dl90ZXhfYj12ZWMyKGFfbGluZXNvZmFyKnVfcGF0dGVybnNjYWxlX2IueC9mbG9vcndpZHRoLG5vcm1hbC55KnVfcGF0dGVybnNjYWxlX2IueSt1X3RleF95X2IpO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt9IiksZHI9eXIoInVuaWZvcm0gZmxvYXQgdV9mYWRlX3Q7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTA7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7dmFyeWluZyB2ZWMyIHZfcG9zMDt2YXJ5aW5nIHZlYzIgdl9wb3MxO3VuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdzt1bmlmb3JtIGZsb2F0IHVfYnJpZ2h0bmVzc19oaWdoO3VuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3Rvcjt1bmlmb3JtIGZsb2F0IHVfY29udHJhc3RfZmFjdG9yO3VuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0czt2b2lkIG1haW4oKSB7dmVjNCBjb2xvcjA9dGV4dHVyZTJEKHVfaW1hZ2UwLHZfcG9zMCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UxLHZfcG9zMSk7aWYgKGNvbG9yMC5hID4gMC4wKSB7Y29sb3IwLnJnYj1jb2xvcjAucmdiL2NvbG9yMC5hO31pZiAoY29sb3IxLmEgPiAwLjApIHtjb2xvcjEucmdiPWNvbG9yMS5yZ2IvY29sb3IxLmE7fXZlYzQgY29sb3I9bWl4KGNvbG9yMCxjb2xvcjEsdV9mYWRlX3QpO2NvbG9yLmEqPXVfb3BhY2l0eTt2ZWMzIHJnYj1jb2xvci5yZ2I7cmdiPXZlYzMoZG90KHJnYix1X3NwaW5fd2VpZ2h0cy54eXopLGRvdChyZ2IsdV9zcGluX3dlaWdodHMuenh5KSxkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnl6eCkpO2Zsb2F0IGF2ZXJhZ2U9KGNvbG9yLnIrY29sb3IuZytjb2xvci5iKS8zLjA7cmdiKz0oYXZlcmFnZS1yZ2IpKnVfc2F0dXJhdGlvbl9mYWN0b3I7cmdiPShyZ2ItMC41KSp1X2NvbnRyYXN0X2ZhY3RvciswLjU7dmVjMyB1X2hpZ2hfdmVjPXZlYzModV9icmlnaHRuZXNzX2xvdyx1X2JyaWdodG5lc3NfbG93LHVfYnJpZ2h0bmVzc19sb3cpO3ZlYzMgdV9sb3dfdmVjPXZlYzModV9icmlnaHRuZXNzX2hpZ2gsdV9icmlnaHRuZXNzX2hpZ2gsdV9icmlnaHRuZXNzX2hpZ2gpO2dsX0ZyYWdDb2xvcj12ZWM0KG1peCh1X2hpZ2hfdmVjLHVfbG93X3ZlYyxyZ2IpKmNvbG9yLmEsY29sb3IuYSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3RsX3BhcmVudDt1bmlmb3JtIGZsb2F0IHVfc2NhbGVfcGFyZW50O3VuaWZvcm0gZmxvYXQgdV9idWZmZXJfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3MwO3ZhcnlpbmcgdmVjMiB2X3BvczE7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3BvczA9KCgoYV90ZXh0dXJlX3Bvcy84MTkyLjApLTAuNSkvdV9idWZmZXJfc2NhbGUgKSswLjU7dl9wb3MxPSh2X3BvczAqdV9zY2FsZV9wYXJlbnQpK3VfdGxfcGFyZW50O30iKSxtcj15cigidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO3ZhcnlpbmcgdmVjMiB2X3RleDt2YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxubG93cCBmbG9hdCBhbHBoYT1vcGFjaXR5KnZfZmFkZV9vcGFjaXR5O2dsX0ZyYWdDb2xvcj10ZXh0dXJlMkQodV90ZXh0dXJlLHZfdGV4KSphbHBoYTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWM0IGFfcGl4ZWxvZmZzZXQ7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3ZhcnlpbmcgdmVjMiB2X3RleDt2YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2Zsb2F0IGFfc2l6ZV9taW49Zmxvb3IoYV9zaXplWzBdKjAuNSk7dmVjMiBhX3B4b2Zmc2V0PWFfcGl4ZWxvZmZzZXQueHk7dmVjMiBhX21pbkZvbnRTY2FsZT1hX3BpeGVsb2Zmc2V0Lnp3LzI1Ni4wO2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplX21pbixhX3NpemVbMV0sdV9zaXplX3QpLzEyOC4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVfbWluLzEyOC4wO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKm1heChhX21pbkZvbnRTY2FsZSxmb250U2NhbGUpK2FfcHhvZmZzZXQvMTYuMCksMC4wLDEuMCk7dl90ZXg9YV90ZXgvdV90ZXhzaXplO3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTt2X2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7fSIpLGdyPXlyKCIjZGVmaW5lIFNERl9QWCA4LjBcbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9nYW1tYV9zY2FsZTt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBib29sIHVfaXNfdGV4dDt2YXJ5aW5nIHZlYzIgdl9kYXRhMDt2YXJ5aW5nIHZlYzMgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5mbG9hdCBFREdFX0dBTU1BPTAuMTA1L3VfZGV2aWNlX3BpeGVsX3JhdGlvO3ZlYzIgdGV4PXZfZGF0YTAueHk7ZmxvYXQgZ2FtbWFfc2NhbGU9dl9kYXRhMS54O2Zsb2F0IHNpemU9dl9kYXRhMS55O2Zsb2F0IGZhZGVfb3BhY2l0eT12X2RhdGExWzJdO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2xvd3AgdmVjNCBjb2xvcj1maWxsX2NvbG9yO2hpZ2hwIGZsb2F0IGdhbW1hPUVER0VfR0FNTUEvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtsb3dwIGZsb2F0IGJ1ZmY9KDI1Ni4wLTY0LjApLzI1Ni4wO2lmICh1X2lzX2hhbG8pIHtjb2xvcj1oYWxvX2NvbG9yO2dhbW1hPShoYWxvX2JsdXIqMS4xOS9TREZfUFgrRURHRV9HQU1NQSkvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtidWZmPSg2LjAtaGFsb193aWR0aC9mb250U2NhbGUpL1NERl9QWDt9bG93cCBmbG9hdCBkaXN0PXRleHR1cmUyRCh1X3RleHR1cmUsdGV4KS5hO2hpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZD1nYW1tYSpnYW1tYV9zY2FsZTtoaWdocCBmbG9hdCBhbHBoYT1zbW9vdGhzdGVwKGJ1ZmYtZ2FtbWFfc2NhbGVkLGJ1ZmYrZ2FtbWFfc2NhbGVkLGRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSpmYWRlX29wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzQgYV9waXhlbG9mZnNldDthdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7YXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDt1bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2Nvb3JkX21hdHJpeDt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDt1bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dmFyeWluZyB2ZWMyIHZfZGF0YTA7dmFyeWluZyB2ZWMzIHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2Zsb2F0IGFfc2l6ZV9taW49Zmxvb3IoYV9zaXplWzBdKjAuNSk7dmVjMiBhX3B4b2Zmc2V0PWFfcGl4ZWxvZmZzZXQueHk7aGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZT0tYV9wcm9qZWN0ZWRfcG9zWzJdO2Zsb2F0IHNpemU7aWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPW1peChhX3NpemVfbWluLGFfc2l6ZVsxXSx1X3NpemVfdCkvMTI4LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZV9taW4vMTI4LjA7fSBlbHNlIHtzaXplPXVfc2l6ZTt9dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvPXVfcGl0Y2hfd2l0aF9tYXAgP1xuY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZS91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7aGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSpkaXN0YW5jZV9yYXRpbywwLjAsNC4wKTtzaXplKj1wZXJzcGVjdGl2ZV9yYXRpbztmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqZm9udFNjYWxlK2FfcHhvZmZzZXQpLDAuMCwxLjApO2Zsb2F0IGdhbW1hX3NjYWxlPWdsX1Bvc2l0aW9uLnc7dmVjMiBmYWRlX29wYWNpdHk9dW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO2Zsb2F0IGZhZGVfY2hhbmdlPWZhZGVfb3BhY2l0eVsxXSA+IDAuNSA/IHVfZmFkZV9jaGFuZ2UgOi11X2ZhZGVfY2hhbmdlO2Zsb2F0IGludGVycG9sYXRlZF9mYWRlX29wYWNpdHk9bWF4KDAuMCxtaW4oMS4wLGZhZGVfb3BhY2l0eVswXStmYWRlX2NoYW5nZSkpO3ZfZGF0YTA9YV90ZXgvdV90ZXhzaXplO3ZfZGF0YTE9dmVjMyhnYW1tYV9zY2FsZSxzaXplLGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkpO30iKSx2cj15cigiI2RlZmluZSBTREZfUFggOC4wXG4jZGVmaW5lIFNERiAxLjBcbiNkZWZpbmUgSUNPTiAwLjBcbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO3VuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZV9pY29uO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9nYW1tYV9zY2FsZTt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWM0IHZfZGF0YTA7dmFyeWluZyB2ZWM0IHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuZmxvYXQgZmFkZV9vcGFjaXR5PXZfZGF0YTFbMl07aWYgKHZfZGF0YTEudz09SUNPTikge3ZlYzIgdGV4X2ljb249dl9kYXRhMC56dztsb3dwIGZsb2F0IGFscGhhPW9wYWNpdHkqZmFkZV9vcGFjaXR5O2dsX0ZyYWdDb2xvcj10ZXh0dXJlMkQodV90ZXh0dXJlX2ljb24sdGV4X2ljb24pKmFscGhhO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxucmV0dXJuO312ZWMyIHRleD12X2RhdGEwLnh5O2Zsb2F0IEVER0VfR0FNTUE9MC4xMDUvdV9kZXZpY2VfcGl4ZWxfcmF0aW87ZmxvYXQgZ2FtbWFfc2NhbGU9dl9kYXRhMS54O2Zsb2F0IHNpemU9dl9kYXRhMS55O2Zsb2F0IGZvbnRTY2FsZT1zaXplLzI0LjA7bG93cCB2ZWM0IGNvbG9yPWZpbGxfY29sb3I7aGlnaHAgZmxvYXQgZ2FtbWE9RURHRV9HQU1NQS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2xvd3AgZmxvYXQgYnVmZj0oMjU2LjAtNjQuMCkvMjU2LjA7aWYgKHVfaXNfaGFsbykge2NvbG9yPWhhbG9fY29sb3I7Z2FtbWE9KGhhbG9fYmx1cioxLjE5L1NERl9QWCtFREdFX0dBTU1BKS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2J1ZmY9KDYuMC1oYWxvX3dpZHRoL2ZvbnRTY2FsZSkvU0RGX1BYO31sb3dwIGZsb2F0IGRpc3Q9dGV4dHVyZTJEKHVfdGV4dHVyZSx0ZXgpLmE7aGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkPWdhbW1hKmdhbW1hX3NjYWxlO2hpZ2hwIGZsb2F0IGFscGhhPXNtb290aHN0ZXAoYnVmZi1nYW1tYV9zY2FsZWQsYnVmZitnYW1tYV9zY2FsZWQsZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KmZhZGVfb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7YXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDt1bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2Nvb3JkX21hdHJpeDt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDt1bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZV9pY29uO3ZhcnlpbmcgdmVjNCB2X2RhdGEwO3ZhcnlpbmcgdmVjNCB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztmbG9hdCBhX3NpemVfbWluPWZsb29yKGFfc2l6ZVswXSowLjUpO2Zsb2F0IGlzX3NkZj1hX3NpemVbMF0tMi4wKmFfc2l6ZV9taW47aGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZT0tYV9wcm9qZWN0ZWRfcG9zWzJdO2Zsb2F0IHNpemU7aWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPW1peChhX3NpemVfbWluLGFfc2l6ZVsxXSx1X3NpemVfdCkvMTI4LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZV9taW4vMTI4LjA7fSBlbHNlIHtzaXplPXVfc2l6ZTt9dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvPXVfcGl0Y2hfd2l0aF9tYXAgP1xuY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZS91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7aGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSpkaXN0YW5jZV9yYXRpbywwLjAsNC4wKTtzaXplKj1wZXJzcGVjdGl2ZV9yYXRpbztmbG9hdCBmb250U2NhbGU9c2l6ZS8yNC4wO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCpmb250U2NhbGUpLDAuMCwxLjApO2Zsb2F0IGdhbW1hX3NjYWxlPWdsX1Bvc2l0aW9uLnc7dmVjMiBmYWRlX29wYWNpdHk9dW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO2Zsb2F0IGZhZGVfY2hhbmdlPWZhZGVfb3BhY2l0eVsxXSA+IDAuNSA/IHVfZmFkZV9jaGFuZ2UgOi11X2ZhZGVfY2hhbmdlO2Zsb2F0IGludGVycG9sYXRlZF9mYWRlX29wYWNpdHk9bWF4KDAuMCxtaW4oMS4wLGZhZGVfb3BhY2l0eVswXStmYWRlX2NoYW5nZSkpO3ZfZGF0YTAueHk9YV90ZXgvdV90ZXhzaXplO3ZfZGF0YTAuenc9YV90ZXgvdV90ZXhzaXplX2ljb247dl9kYXRhMT12ZWM0KGdhbW1hX3NjYWxlLHNpemUsaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSxpc19zZGYpO30iKTtmdW5jdGlvbiB5cih0LGUpe3ZhciByPS8jcHJhZ21hIG1hcGJveDogKFtcd10rKSAoW1x3XSspIChbXHddKykgKFtcd10rKS9nLG49e307cmV0dXJue2ZyYWdtZW50U291cmNlOnQ9dC5yZXBsYWNlKHIsKGZ1bmN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIG5bYV09ITAsImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudmFyeWluZyAiK3IrIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KSksdmVydGV4U291cmNlOmU9ZS5yZXBsYWNlKHIsKGZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89ImZsb2F0Ij09PWk/InZlYzIiOiJ2ZWM0IixzPWEubWF0Y2goL2NvbG9yLyk/ImNvbG9yIjpvO3JldHVybiBuW2FdPyJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCB1XyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIityKyIgIitvKyIgYV8iK2ErIjtcbnZhcnlpbmcgIityKyIgIitpKyIgIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJ2ZWM0Ij09PXM/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIithKyIgPSBhXyIrYSsiO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIithKyIgPSB1bnBhY2tfbWl4XyIrcysiKGFfIithKyIsIHVfIithKyJfdCk7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgdV8iK2ErIl90O1xuYXR0cmlidXRlICIrcisiICIrbysiIGFfIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJ2ZWM0Ij09PXM/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIityKyIgIitpKyIgIithKyIgPSBhXyIrYSsiO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1bnBhY2tfbWl4XyIrcysiKGFfIithKyIsIHVfIithKyJfdCk7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pKX19dmFyIHhyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLHByZWx1ZGU6WWUsYmFja2dyb3VuZDpXZSxiYWNrZ3JvdW5kUGF0dGVybjpYZSxjaXJjbGU6WmUsY2xpcHBpbmdNYXNrOkplLGhlYXRtYXA6S2UsaGVhdG1hcFRleHR1cmU6UWUsY29sbGlzaW9uQm94OiRlLGNvbGxpc2lvbkNpcmNsZTp0cixkZWJ1ZzplcixmaWxsOnJyLGZpbGxPdXRsaW5lOm5yLGZpbGxPdXRsaW5lUGF0dGVybjppcixmaWxsUGF0dGVybjphcixmaWxsRXh0cnVzaW9uOm9yLGZpbGxFeHRydXNpb25QYXR0ZXJuOnNyLGhpbGxzaGFkZVByZXBhcmU6bHIsaGlsbHNoYWRlOmNyLGxpbmU6dXIsbGluZUdyYWRpZW50OmZyLGxpbmVQYXR0ZXJuOmhyLGxpbmVTREY6cHIscmFzdGVyOmRyLHN5bWJvbEljb246bXIsc3ltYm9sU0RGOmdyLHN5bWJvbFRleHRBbmRJY29uOnZyfSksYnI9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kUHJvZ3JhbT1udWxsLHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPVtdLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9bnVsbCx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1udWxsLHRoaXMudmFvPW51bGx9O2JyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5jb250ZXh0PXQ7Zm9yKHZhciBsPXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoIT09bi5sZW5ndGgsYz0wOyFsJiZjPG4ubGVuZ3RoO2MrKyl0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2NdIT09bltjXSYmKGw9ITApO3ZhciB1PSF0aGlzLnZhb3x8dGhpcy5ib3VuZFByb2dyYW0hPT1lfHx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyIT09cnx8bHx8dGhpcy5ib3VuZEluZGV4QnVmZmVyIT09aXx8dGhpcy5ib3VuZFZlcnRleE9mZnNldCE9PWF8fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyIT09b3x8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyIT09czshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8dT90aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKToodC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxvJiZvLmJpbmQoKSxpJiZpLmR5bmFtaWNEcmF3JiZpLmJpbmQoKSxzJiZzLmJpbmQoKSl9LGJyLnByb3RvdHlwZS5mcmVzaEJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD10Lm51bUF0dHJpYnV0ZXMsYz10aGlzLmNvbnRleHQsdT1jLmdsO2lmKGMuZXh0VmVydGV4QXJyYXlPYmplY3QpdGhpcy52YW8mJnRoaXMuZGVzdHJveSgpLHRoaXMudmFvPWMuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSxjLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLHM9MCx0aGlzLmJvdW5kUHJvZ3JhbT10LHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9ZSx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPXIsdGhpcy5ib3VuZEluZGV4QnVmZmVyPW4sdGhpcy5ib3VuZFZlcnRleE9mZnNldD1pLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPWEsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyPW87ZWxzZXtzPWMuY3VycmVudE51bUF0dHJpYnV0ZXN8fDA7Zm9yKHZhciBmPWw7ZjxzO2YrKyl1LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShmKX1lLmVuYWJsZUF0dHJpYnV0ZXModSx0KTtmb3IodmFyIGg9MCxwPXI7aDxwLmxlbmd0aDtoKz0xKXtwW2hdLmVuYWJsZUF0dHJpYnV0ZXModSx0KX1hJiZhLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxvJiZvLmVuYWJsZUF0dHJpYnV0ZXModSx0KSxlLmJpbmQoKSxlLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKTtmb3IodmFyIGQ9MCxtPXI7ZDxtLmxlbmd0aDtkKz0xKXt2YXIgZz1tW2RdO2cuYmluZCgpLGcuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpfWEmJihhLmJpbmQoKSxhLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksbiYmbi5iaW5kKCksbyYmKG8uYmluZCgpLG8uc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxjLmN1cnJlbnROdW1BdHRyaWJ1dGVzPWx9LGJyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy52YW8mJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGwpfTt2YXIgX3I9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10LmdsO3RoaXMucHJvZ3JhbT1hLmNyZWF0ZVByb2dyYW0oKTt2YXIgbz1yP3IuZGVmaW5lcygpOltdO2kmJm8ucHVzaCgiI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Iik7dmFyIHM9by5jb25jYXQoWWUuZnJhZ21lbnRTb3VyY2UsZS5mcmFnbWVudFNvdXJjZSkuam9pbigiXG4iKSxsPW8uY29uY2F0KFllLnZlcnRleFNvdXJjZSxlLnZlcnRleFNvdXJjZSkuam9pbigiXG4iKSxjPWEuY3JlYXRlU2hhZGVyKGEuRlJBR01FTlRfU0hBREVSKTtpZihhLmlzQ29udGV4dExvc3QoKSl0aGlzLmZhaWxlZFRvQ3JlYXRlPSEwO2Vsc2V7YS5zaGFkZXJTb3VyY2UoYyxzKSxhLmNvbXBpbGVTaGFkZXIoYyksYS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLGMpO3ZhciB1PWEuY3JlYXRlU2hhZGVyKGEuVkVSVEVYX1NIQURFUik7aWYoYS5pc0NvbnRleHRMb3N0KCkpdGhpcy5mYWlsZWRUb0NyZWF0ZT0hMDtlbHNle2Euc2hhZGVyU291cmNlKHUsbCksYS5jb21waWxlU2hhZGVyKHUpLGEuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSx1KTtmb3IodmFyIGY9cj9yLmxheW91dEF0dHJpYnV0ZXM6W10saD0wO2g8Zi5sZW5ndGg7aCsrKWEuYmluZEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxoLGZbaF0ubmFtZSk7YS5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pLGEuZGVsZXRlU2hhZGVyKHUpLGEuZGVsZXRlU2hhZGVyKGMpLHRoaXMubnVtQXR0cmlidXRlcz1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGEuQUNUSVZFX0FUVFJJQlVURVMpLHRoaXMuYXR0cmlidXRlcz17fTtmb3IodmFyIHA9e30sZD0wO2Q8dGhpcy5udW1BdHRyaWJ1dGVzO2QrKyl7dmFyIG09YS5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLGQpO20mJih0aGlzLmF0dHJpYnV0ZXNbbS5uYW1lXT1hLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxtLm5hbWUpKX1mb3IodmFyIGc9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxhLkFDVElWRV9VTklGT1JNUyksdj0wO3Y8Zzt2Kyspe3ZhciB5PWEuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLnByb2dyYW0sdik7eSYmKHBbeS5uYW1lXT1hLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0seS5uYW1lKSl9dGhpcy5maXhlZFVuaWZvcm1zPW4odCxwKSx0aGlzLmJpbmRlclVuaWZvcm1zPXI/ci5nZXRVbmlmb3Jtcyh0LHApOltdfX19O2Z1bmN0aW9uIHdyKHQsZSxyKXt2YXIgbj0xL3BlKHIsMSxlLnRyYW5zZm9ybS50aWxlWm9vbSksaT1NYXRoLnBvdygyLHIudGlsZUlELm92ZXJzY2FsZWRaKSxhPXIudGlsZVNpemUqTWF0aC5wb3coMixlLnRyYW5zZm9ybS50aWxlWm9vbSkvaSxvPWEqKHIudGlsZUlELmNhbm9uaWNhbC54K3IudGlsZUlELndyYXAqaSkscz1hKnIudGlsZUlELmNhbm9uaWNhbC55O3JldHVybnt1X2ltYWdlOjAsdV90ZXhzaXplOnIuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSx1X3NjYWxlOltuLHQuZnJvbVNjYWxlLHQudG9TY2FsZV0sdV9mYWRlOnQudCx1X3BpeGVsX2Nvb3JkX3VwcGVyOltvPj4xNixzPj4xNl0sdV9waXhlbF9jb29yZF9sb3dlcjpbNjU1MzUmbyw2NTUzNSZzXX19X3IucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSl7dmFyIGcsdj10LmdsO2lmKCF0aGlzLmZhaWxlZFRvQ3JlYXRlKXtmb3IodmFyIHkgaW4gdC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pLHQuc2V0RGVwdGhNb2RlKHIpLHQuc2V0U3RlbmNpbE1vZGUobiksdC5zZXRDb2xvck1vZGUoaSksdC5zZXRDdWxsRmFjZShhKSx0aGlzLmZpeGVkVW5pZm9ybXMpdGhpcy5maXhlZFVuaWZvcm1zW3ldLnNldChvW3ldKTtwJiZwLnNldFVuaWZvcm1zKHQsdGhpcy5iaW5kZXJVbmlmb3JtcyxmLHt6b29tOmh9KTtmb3IodmFyIHg9KGc9e30sZ1t2LkxJTkVTXT0yLGdbdi5UUklBTkdMRVNdPTMsZ1t2LkxJTkVfU1RSSVBdPTEsZylbZV0sYj0wLF89dS5nZXQoKTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0sVD13LnZhb3N8fCh3LnZhb3M9e30pOyhUW3NdfHwoVFtzXT1uZXcgYnIpKS5iaW5kKHQsdGhpcyxsLHA/cC5nZXRQYWludFZlcnRleEJ1ZmZlcnMoKTpbXSxjLHcudmVydGV4T2Zmc2V0LGQsbSksdi5kcmF3RWxlbWVudHMoZSx3LnByaW1pdGl2ZUxlbmd0aCp4LHYuVU5TSUdORURfU0hPUlQsdy5wcmltaXRpdmVPZmZzZXQqeCoyKX19fTt2YXIgVHI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ci5zdHlsZS5saWdodCxvPWEucHJvcGVydGllcy5nZXQoInBvc2l0aW9uIikscz1bby54LG8ueSxvLnpdLGw9dC5jcmVhdGUkMSgpOyJ2aWV3cG9ydCI9PT1hLnByb3BlcnRpZXMuZ2V0KCJhbmNob3IiKSYmdC5mcm9tUm90YXRpb24obCwtci50cmFuc2Zvcm0uYW5nbGUpLHQudHJhbnNmb3JtTWF0MyhzLHMsbCk7dmFyIGM9YS5wcm9wZXJ0aWVzLmdldCgiY29sb3IiKTtyZXR1cm57dV9tYXRyaXg6ZSx1X2xpZ2h0cG9zOnMsdV9saWdodGludGVuc2l0eTphLnByb3BlcnRpZXMuZ2V0KCJpbnRlbnNpdHkiKSx1X2xpZ2h0Y29sb3I6W2MucixjLmcsYy5iXSx1X3ZlcnRpY2FsX2dyYWRpZW50OituLHVfb3BhY2l0eTppfX0sa3I9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyl7cmV0dXJuIHQuZXh0ZW5kKFRyKGUscixuLGkpLHdyKG8scixzKSx7dV9oZWlnaHRfZmFjdG9yOi1NYXRoLnBvdygyLGEub3ZlcnNjYWxlZFopL3MudGlsZVNpemUvOH0pfSxBcj1mdW5jdGlvbih0KXtyZXR1cm57dV9tYXRyaXg6dH19LE1yPWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiB0LmV4dGVuZChBcihlKSx3cihuLHIsaSkpfSxTcj1mdW5jdGlvbih0LGUpe3JldHVybnt1X21hdHJpeDp0LHVfd29ybGQ6ZX19LEVyPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIHQuZXh0ZW5kKE1yKGUscixuLGkpLHt1X3dvcmxkOmF9KX0sTHI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGEsbyxzPWUudHJhbnNmb3JtO2lmKCJtYXAiPT09aS5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSl7dmFyIGw9cGUobiwxLHMuem9vbSk7YT0hMCxvPVtsLGxdfWVsc2UgYT0hMSxvPXMucGl4ZWxzVG9HTFVuaXRzO3JldHVybnt1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6cy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfc2NhbGVfd2l0aF9tYXA6KygibWFwIj09PWkucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSksdV9tYXRyaXg6ZS50cmFuc2xhdGVQb3NNYXRyaXgoci5wb3NNYXRyaXgsbixpLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpLGkucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciIpKSx1X3BpdGNoX3dpdGhfbWFwOithLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfZXh0cnVkZV9zY2FsZTpvfX0sQ3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXBlKHIsMSxlLnpvb20pLGk9TWF0aC5wb3coMixlLnpvb20tci50aWxlSUQub3ZlcnNjYWxlZFopLGE9ci50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCk7cmV0dXJue3VfbWF0cml4OnQsdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOmUuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3BpeGVsc190b190aWxlX3VuaXRzOm4sdV9leHRydWRlX3NjYWxlOltlLnBpeGVsc1RvR0xVbml0c1swXS8obippKSxlLnBpeGVsc1RvR0xVbml0c1sxXS8obippKV0sdV9vdmVyc2NhbGVfZmFjdG9yOmF9fSxQcj1mdW5jdGlvbih0LGUscil7cmV0dXJue3VfbWF0cml4OnQsdV9pbnZfbWF0cml4OmUsdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnIuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3ZpZXdwb3J0X3NpemU6W3Iud2lkdGgsci5oZWlnaHRdfX0sSXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0xKSx7dV9tYXRyaXg6dCx1X2NvbG9yOmUsdV9vdmVybGF5OjAsdV9vdmVybGF5X3NjYWxlOnJ9fSxPcj1mdW5jdGlvbih0KXtyZXR1cm57dV9tYXRyaXg6dH19LHpyPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybnt1X21hdHJpeDp0LHVfZXh0cnVkZV9zY2FsZTpwZShlLDEsciksdV9pbnRlbnNpdHk6bn19O2Z1bmN0aW9uIERyKGUscil7dmFyIG49TWF0aC5wb3coMixyLmNhbm9uaWNhbC56KSxpPXIuY2Fub25pY2FsLnk7cmV0dXJuW25ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLGkvbikudG9MbmdMYXQoKS5sYXQsbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKDAsKGkrMSkvbikudG9MbmdMYXQoKS5sYXRdfXZhciBScj1mdW5jdGlvbihlLHIsbil7dmFyIGk9ZS50cmFuc2Zvcm07cmV0dXJue3VfbWF0cml4OlVyKGUscixuKSx1X3JhdGlvOjEvcGUociwxLGkuem9vbSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV91bml0c190b19waXhlbHM6WzEvaS5waXhlbHNUb0dMVW5pdHNbMF0sMS9pLnBpeGVsc1RvR0xVbml0c1sxXV19fSxGcj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuZXh0ZW5kKFJyKGUscixuKSx7dV9pbWFnZTowfSl9LEJyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWUudHJhbnNmb3JtLG89anIocixhKTtyZXR1cm57dV9tYXRyaXg6VXIoZSxyLG4pLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9yYXRpbzoxL3BlKHIsMSxhLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaW1hZ2U6MCx1X3NjYWxlOltvLGkuZnJvbVNjYWxlLGkudG9TY2FsZV0sdV9mYWRlOmkudCx1X3VuaXRzX3RvX3BpeGVsczpbMS9hLnBpeGVsc1RvR0xVbml0c1swXSwxL2EucGl4ZWxzVG9HTFVuaXRzWzFdXX19LE5yPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89ZS50cmFuc2Zvcm0scz1lLmxpbmVBdGxhcyxsPWpyKHIsbyksYz0icm91bmQiPT09bi5sYXlvdXQuZ2V0KCJsaW5lLWNhcCIpLHU9cy5nZXREYXNoKGkuZnJvbSxjKSxmPXMuZ2V0RGFzaChpLnRvLGMpLGg9dS53aWR0aCphLmZyb21TY2FsZSxwPWYud2lkdGgqYS50b1NjYWxlO3JldHVybiB0LmV4dGVuZChScihlLHIsbikse3VfcGF0dGVybnNjYWxlX2E6W2wvaCwtdS5oZWlnaHQvMl0sdV9wYXR0ZXJuc2NhbGVfYjpbbC9wLC1mLmhlaWdodC8yXSx1X3NkZmdhbW1hOnMud2lkdGgvKDI1NipNYXRoLm1pbihoLHApKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvKS8yLHVfaW1hZ2U6MCx1X3RleF95X2E6dS55LHVfdGV4X3lfYjpmLnksdV9taXg6YS50fSl9O2Z1bmN0aW9uIGpyKHQsZSl7cmV0dXJuIDEvcGUodCwxLGUudGlsZVpvb20pfWZ1bmN0aW9uIFVyKHQsZSxyKXtyZXR1cm4gdC50cmFuc2xhdGVQb3NNYXRyaXgoZS50aWxlSUQucG9zTWF0cml4LGUsci5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpKX12YXIgVnI9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm57dV9tYXRyaXg6dCx1X3RsX3BhcmVudDplLHVfc2NhbGVfcGFyZW50OnIsdV9idWZmZXJfc2NhbGU6MSx1X2ZhZGVfdDpuLm1peCx1X29wYWNpdHk6bi5vcGFjaXR5KmkucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpLHVfaW1hZ2UwOjAsdV9pbWFnZTE6MSx1X2JyaWdodG5lc3NfbG93OmkucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iKSx1X2JyaWdodG5lc3NfaGlnaDppLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWF4IiksdV9zYXR1cmF0aW9uX2ZhY3Rvcjoobz1pLnBhaW50LmdldCgicmFzdGVyLXNhdHVyYXRpb24iKSxvPjA/MS0xLygxLjAwMS1vKTotbyksdV9jb250cmFzdF9mYWN0b3I6KGE9aS5wYWludC5nZXQoInJhc3Rlci1jb250cmFzdCIpLGE+MD8xLygxLWEpOjErYSksdV9zcGluX3dlaWdodHM6SHIoaS5wYWludC5nZXQoInJhc3Rlci1odWUtcm90YXRlIikpfTt2YXIgYSxvfTtmdW5jdGlvbiBIcih0KXt0Kj1NYXRoLlBJLzE4MDt2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpO3JldHVyblsoMipyKzEpLzMsKC1NYXRoLnNxcnQoMykqZS1yKzEpLzMsKE1hdGguc3FydCgzKSplLXIrMSkvM119dmFyIHFyLEdyPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PWkudHJhbnNmb3JtO3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDorKCJjb25zdGFudCI9PT10fHwic291cmNlIj09PXQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50OisoImNvbnN0YW50Ij09PXR8fCJjYW1lcmEiPT09dCksdV9zaXplX3Q6ZT9lLnVTaXplVDowLHVfc2l6ZTplP2UudVNpemU6MCx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6dS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfcGl0Y2g6dS5waXRjaC8zNjAqMipNYXRoLlBJLHVfcm90YXRlX3N5bWJvbDorcix1X2FzcGVjdF9yYXRpbzp1LndpZHRoL3UuaGVpZ2h0LHVfZmFkZV9jaGFuZ2U6aS5vcHRpb25zLmZhZGVEdXJhdGlvbj9pLnN5bWJvbEZhZGVDaGFuZ2U6MSx1X21hdHJpeDphLHVfbGFiZWxfcGxhbmVfbWF0cml4Om8sdV9jb29yZF9tYXRyaXg6cyx1X2lzX3RleHQ6K2wsdV9waXRjaF93aXRoX21hcDorbix1X3RleHNpemU6Yyx1X3RleHR1cmU6MH19LFlyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9YS50cmFuc2Zvcm07cmV0dXJuIHQuZXh0ZW5kKEdyKGUscixuLGksYSxvLHMsbCxjLHUpLHt1X2dhbW1hX3NjYWxlOmk/TWF0aC5jb3MoaC5fcGl0Y2gpKmguY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaXNfaGFsbzorZn0pfSxXcj1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1KXtyZXR1cm4gdC5leHRlbmQoWXIoZSxyLG4saSxhLG8scyxsLCEwLGMsITApLHt1X3RleHNpemVfaWNvbjp1LHVfdGV4dHVyZV9pY29uOjF9KX0sWHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt1X21hdHJpeDp0LHVfb3BhY2l0eTplLHVfY29sb3I6cn19LFpyPWZ1bmN0aW9uKGUscixuLGksYSxvKXtyZXR1cm4gdC5leHRlbmQoZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20udG9TdHJpbmcoKSksYT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8udG9TdHJpbmcoKSksbz1yLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKSxzPW8ud2lkdGgsbD1vLmhlaWdodCxjPU1hdGgucG93KDIsbi50aWxlSUQub3ZlcnNjYWxlZFopLHU9bi50aWxlU2l6ZSpNYXRoLnBvdygyLHIudHJhbnNmb3JtLnRpbGVab29tKS9jLGY9dSoobi50aWxlSUQuY2Fub25pY2FsLngrbi50aWxlSUQud3JhcCpjKSxoPXUqbi50aWxlSUQuY2Fub25pY2FsLnk7cmV0dXJue3VfaW1hZ2U6MCx1X3BhdHRlcm5fdGxfYTppLnRsLHVfcGF0dGVybl9icl9hOmkuYnIsdV9wYXR0ZXJuX3RsX2I6YS50bCx1X3BhdHRlcm5fYnJfYjphLmJyLHVfdGV4c2l6ZTpbcyxsXSx1X21peDplLnQsdV9wYXR0ZXJuX3NpemVfYTppLmRpc3BsYXlTaXplLHVfcGF0dGVybl9zaXplX2I6YS5kaXNwbGF5U2l6ZSx1X3NjYWxlX2E6ZS5mcm9tU2NhbGUsdV9zY2FsZV9iOmUudG9TY2FsZSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzOjEvcGUobiwxLHIudHJhbnNmb3JtLnRpbGVab29tKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOltmPj4xNixoPj4xNl0sdV9waXhlbF9jb29yZF9sb3dlcjpbNjU1MzUmZiw2NTUzNSZoXX19KGksbyxuLGEpLHt1X21hdHJpeDplLHVfb3BhY2l0eTpyfSl9LEpyPXtmaWxsRXh0cnVzaW9uOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGlnaHRwb3M6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0cG9zKSx1X2xpZ2h0aW50ZW5zaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9saWdodGludGVuc2l0eSksdV9saWdodGNvbG9yOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodGNvbG9yKSx1X3ZlcnRpY2FsX2dyYWRpZW50Om5ldyB0LlVuaWZvcm0xZihlLHIudV92ZXJ0aWNhbF9ncmFkaWVudCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGZpbGxFeHRydXNpb25QYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGlnaHRwb3M6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0cG9zKSx1X2xpZ2h0aW50ZW5zaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9saWdodGludGVuc2l0eSksdV9saWdodGNvbG9yOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodGNvbG9yKSx1X3ZlcnRpY2FsX2dyYWRpZW50Om5ldyB0LlVuaWZvcm0xZihlLHIudV92ZXJ0aWNhbF9ncmFkaWVudCksdV9oZWlnaHRfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9oZWlnaHRfZmFjdG9yKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSl9fSxmaWxsOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0sZmlsbFBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKX19LGZpbGxPdXRsaW5lOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKX19LGZpbGxPdXRsaW5lUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKX19LGNpcmNsZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfc2NhbGVfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3NjYWxlX3dpdGhfbWFwKSx1X3BpdGNoX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9waXRjaF93aXRoX21hcCksdV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9leHRydWRlX3NjYWxlKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGNvbGxpc2lvbkJveDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl4ZWxzX3RvX3RpbGVfdW5pdHM6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpeGVsc190b190aWxlX3VuaXRzKSx1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTJmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfb3ZlcnNjYWxlX2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3ZlcnNjYWxlX2ZhY3Rvcil9fSxjb2xsaXNpb25DaXJjbGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbnZfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9pbnZfbWF0cml4KSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfdmlld3BvcnRfc2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdmlld3BvcnRfc2l6ZSl9fSxkZWJ1ZzpmdW5jdGlvbihlLHIpe3JldHVybnt1X2NvbG9yOm5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9jb2xvciksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vdmVybGF5Om5ldyB0LlVuaWZvcm0xaShlLHIudV9vdmVybGF5KSx1X292ZXJsYXlfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X292ZXJsYXlfc2NhbGUpfX0sY2xpcHBpbmdNYXNrOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0saGVhdG1hcDpmdW5jdGlvbihlLHIpe3JldHVybnt1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfaW50ZW5zaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9pbnRlbnNpdHkpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0saGVhdG1hcFRleHR1cmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X2NvbG9yX3JhbXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X2NvbG9yX3JhbXApLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSl9fSxoaWxsc2hhZGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfbGF0cmFuZ2U6bmV3IHQuVW5pZm9ybTJmKGUsci51X2xhdHJhbmdlKSx1X2xpZ2h0Om5ldyB0LlVuaWZvcm0yZihlLHIudV9saWdodCksdV9zaGFkb3c6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X3NoYWRvdyksdV9oaWdobGlnaHQ6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2hpZ2hsaWdodCksdV9hY2NlbnQ6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2FjY2VudCl9fSxoaWxsc2hhZGVQcmVwYXJlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X2RpbWVuc2lvbjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZGltZW5zaW9uKSx1X3pvb206bmV3IHQuVW5pZm9ybTFmKGUsci51X3pvb20pLHVfbWF4em9vbTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbWF4em9vbSksdV91bnBhY2s6bmV3IHQuVW5pZm9ybTRmKGUsci51X3VucGFjayl9fSxsaW5lOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKX19LGxpbmVHcmFkaWVudDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpfX0sbGluZVBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sbGluZVNERjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyksdV9wYXR0ZXJuc2NhbGVfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybnNjYWxlX2EpLHVfcGF0dGVybnNjYWxlX2I6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5zY2FsZV9iKSx1X3NkZmdhbW1hOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zZGZnYW1tYSksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4X3lfYTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGV4X3lfYSksdV90ZXhfeV9iOm5ldyB0LlVuaWZvcm0xZihlLHIudV90ZXhfeV9iKSx1X21peDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbWl4KX19LHJhc3RlcjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3RsX3BhcmVudDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGxfcGFyZW50KSx1X3NjYWxlX3BhcmVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2NhbGVfcGFyZW50KSx1X2J1ZmZlcl9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYnVmZmVyX3NjYWxlKSx1X2ZhZGVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV90KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfaW1hZ2UwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZTApLHVfaW1hZ2UxOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZTEpLHVfYnJpZ2h0bmVzc19sb3c6bmV3IHQuVW5pZm9ybTFmKGUsci51X2JyaWdodG5lc3NfbG93KSx1X2JyaWdodG5lc3NfaGlnaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYnJpZ2h0bmVzc19oaWdoKSx1X3NhdHVyYXRpb25fZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zYXR1cmF0aW9uX2ZhY3RvciksdV9jb250cmFzdF9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NvbnRyYXN0X2ZhY3RvciksdV9zcGluX3dlaWdodHM6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NwaW5fd2VpZ2h0cyl9fSxzeW1ib2xJY29uOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX3pvb21fY29uc3RhbnQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLHVfc2l6ZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplX3QpLHVfc2l6ZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZSksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpdGNoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXRjaCksdV9yb3RhdGVfc3ltYm9sOm5ldyB0LlVuaWZvcm0xaShlLHIudV9yb3RhdGVfc3ltYm9sKSx1X2FzcGVjdF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYXNwZWN0X3JhdGlvKSx1X2ZhZGVfY2hhbmdlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX2NoYW5nZSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9sYWJlbF9wbGFuZV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2xhYmVsX3BsYW5lX21hdHJpeCksdV9jb29yZF9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2Nvb3JkX21hdHJpeCksdV9pc190ZXh0Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc190ZXh0KSx1X3BpdGNoX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9waXRjaF93aXRoX21hcCksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3RleHR1cmU6bmV3IHQuVW5pZm9ybTFpKGUsci51X3RleHR1cmUpfX0sc3ltYm9sU0RGOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX3pvb21fY29uc3RhbnQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLHVfc2l6ZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplX3QpLHVfc2l6ZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZSksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpdGNoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXRjaCksdV9yb3RhdGVfc3ltYm9sOm5ldyB0LlVuaWZvcm0xaShlLHIudV9yb3RhdGVfc3ltYm9sKSx1X2FzcGVjdF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYXNwZWN0X3JhdGlvKSx1X2ZhZGVfY2hhbmdlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX2NoYW5nZSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9sYWJlbF9wbGFuZV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2xhYmVsX3BsYW5lX21hdHJpeCksdV9jb29yZF9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2Nvb3JkX21hdHJpeCksdV9pc190ZXh0Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc190ZXh0KSx1X3BpdGNoX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9waXRjaF93aXRoX21hcCksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3RleHR1cmU6bmV3IHQuVW5pZm9ybTFpKGUsci51X3RleHR1cmUpLHVfZ2FtbWFfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2dhbW1hX3NjYWxlKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2lzX2hhbG86bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX2hhbG8pfX0sc3ltYm9sVGV4dEFuZEljb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4c2l6ZV9pY29uOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplX2ljb24pLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSksdV90ZXh0dXJlX2ljb246bmV3IHQuVW5pZm9ybTFpKGUsci51X3RleHR1cmVfaWNvbiksdV9nYW1tYV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZ2FtbWFfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaXNfaGFsbzpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfaGFsbyl9fSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9jb2xvcjpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfY29sb3IpfX0sYmFja2dyb3VuZFBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9wYXR0ZXJuX3RsX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fdGxfYSksdV9wYXR0ZXJuX2JyX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fYnJfYSksdV9wYXR0ZXJuX3RsX2I6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fdGxfYiksdV9wYXR0ZXJuX2JyX2I6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fYnJfYiksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X21peDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbWl4KSx1X3BhdHRlcm5fc2l6ZV9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3NpemVfYSksdV9wYXR0ZXJuX3NpemVfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9zaXplX2IpLHVfc2NhbGVfYTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2NhbGVfYSksdV9zY2FsZV9iOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9iKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfdGlsZV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzKX19fTtmdW5jdGlvbiBLcihlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9ZS5jb250ZXh0LGM9bC5nbCx1PWUudXNlUHJvZ3JhbSgiY29sbGlzaW9uQm94IiksZj1bXSxoPTAscD0wLGQ9MDtkPGkubGVuZ3RoO2QrKyl7dmFyIG09aVtkXSxnPXIuZ2V0VGlsZShtKSx2PWcuZ2V0QnVja2V0KG4pO2lmKHYpe3ZhciB5PW0ucG9zTWF0cml4OzA9PT1hWzBdJiYwPT09YVsxXXx8KHk9ZS50cmFuc2xhdGVQb3NNYXRyaXgobS5wb3NNYXRyaXgsZyxhLG8pKTt2YXIgeD1zP3YudGV4dENvbGxpc2lvbkJveDp2Lmljb25Db2xsaXNpb25Cb3gsYj12LmNvbGxpc2lvbkNpcmNsZUFycmF5O2lmKGIubGVuZ3RoPjApe3ZhciBfPXQuY3JlYXRlKCksdz15O3QubXVsKF8sdi5wbGFjZW1lbnRJbnZQcm9qTWF0cml4LGUudHJhbnNmb3JtLmdsQ29vcmRNYXRyaXgpLHQubXVsKF8sXyx2LnBsYWNlbWVudFZpZXdwb3J0TWF0cml4KSxmLnB1c2goe2NpcmNsZUFycmF5OmIsY2lyY2xlT2Zmc2V0OnAsdHJhbnNmb3JtOncsaW52VHJhbnNmb3JtOl99KSxwPWgrPWIubGVuZ3RoLzR9eCYmdS5kcmF3KGwsYy5MSU5FUyxBdC5kaXNhYmxlZCxNdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxDcih5LGUudHJhbnNmb3JtLGcpLG4uaWQseC5sYXlvdXRWZXJ0ZXhCdWZmZXIseC5pbmRleEJ1ZmZlcix4LnNlZ21lbnRzLG51bGwsZS50cmFuc2Zvcm0uem9vbSxudWxsLG51bGwseC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpfX1pZihzJiZmLmxlbmd0aCl7dmFyIFQ9ZS51c2VQcm9ncmFtKCJjb2xsaXNpb25DaXJjbGUiKSxrPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTY7ay5yZXNpemUoNCpoKSxrLl90cmltKCk7Zm9yKHZhciBBPTAsTT0wLFM9ZjtNPFMubGVuZ3RoO00rPTEpZm9yKHZhciBFPVNbTV0sTD0wO0w8RS5jaXJjbGVBcnJheS5sZW5ndGgvNDtMKyspe3ZhciBDPTQqTCxQPUUuY2lyY2xlQXJyYXlbQyswXSxJPUUuY2lyY2xlQXJyYXlbQysxXSxPPUUuY2lyY2xlQXJyYXlbQysyXSx6PUUuY2lyY2xlQXJyYXlbQyszXTtrLmVtcGxhY2UoQSsrLFAsSSxPLHosMCksay5lbXBsYWNlKEErKyxQLEksTyx6LDEpLGsuZW1wbGFjZShBKyssUCxJLE8seiwyKSxrLmVtcGxhY2UoQSsrLFAsSSxPLHosMyl9KCFxcnx8cXIubGVuZ3RoPDIqaCkmJihxcj1mdW5jdGlvbihlKXt2YXIgcj0yKmUsbj1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDN1aTY7bi5yZXNpemUociksbi5fdHJpbSgpO2Zvcih2YXIgaT0wO2k8cjtpKyspe3ZhciBhPTYqaTtuLnVpbnQxNlthKzBdPTQqaSswLG4udWludDE2W2ErMV09NCppKzEsbi51aW50MTZbYSsyXT00KmkrMixuLnVpbnQxNlthKzNdPTQqaSsyLG4udWludDE2W2ErNF09NCppKzMsbi51aW50MTZbYSs1XT00KmkrMH1yZXR1cm4gbn0oaCkpO2Zvcih2YXIgRD1sLmNyZWF0ZUluZGV4QnVmZmVyKHFyLCEwKSxSPWwuY3JlYXRlVmVydGV4QnVmZmVyKGssdC5jb2xsaXNpb25DaXJjbGVMYXlvdXQubWVtYmVycywhMCksRj0wLEI9ZjtGPEIubGVuZ3RoO0YrPTEpe3ZhciBOPUJbRl0saj1QcihOLnRyYW5zZm9ybSxOLmludlRyYW5zZm9ybSxlLnRyYW5zZm9ybSk7VC5kcmF3KGwsYy5UUklBTkdMRVMsQXQuZGlzYWJsZWQsTXQuZGlzYWJsZWQsZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksRXQuZGlzYWJsZWQsaixuLmlkLFIsRCx0LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDIqTi5jaXJjbGVPZmZzZXQsTi5jaXJjbGVBcnJheS5sZW5ndGgsTi5jaXJjbGVBcnJheS5sZW5ndGgvMiksbnVsbCxlLnRyYW5zZm9ybS56b29tLG51bGwsbnVsbCxudWxsKX1SLmRlc3Ryb3koKSxELmRlc3Ryb3koKX19dmFyIFFyPXQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO2Z1bmN0aW9uICRyKGUscixuLGksYSxvKXt2YXIgcz10LmdldEFuY2hvckFsaWdubWVudChlKSxsPS0ocy5ob3Jpem9udGFsQWxpZ24tLjUpKnIsYz0tKHMudmVydGljYWxBbGlnbi0uNSkqbix1PXQuZXZhbHVhdGVWYXJpYWJsZU9mZnNldChlLGkpO3JldHVybiBuZXcgdC5Qb2ludCgobC9hK3VbMF0pKm8sKGMvYSt1WzFdKSpvKX1mdW5jdGlvbiB0bihlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPWUudGV4dC5wbGFjZWRTeW1ib2xBcnJheSxwPWUudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksZD1lLmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5LG09e307cC5jbGVhcigpO2Zvcih2YXIgZz0wO2c8aC5sZW5ndGg7ZysrKXt2YXIgdj1oLmdldChnKSx5PWUuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmIXYucGxhY2VkT3JpZW50YXRpb24seD12LmhpZGRlbnx8IXYuY3Jvc3NUaWxlSUR8fHk/bnVsbDppW3YuY3Jvc3NUaWxlSURdO2lmKHgpe3ZhciBiPW5ldyB0LlBvaW50KHYuYW5jaG9yWCx2LmFuY2hvclkpLF89dGUoYixuP2w6cyksdz1lZShvLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXy5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEpLFQ9YS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGUudGV4dFNpemVEYXRhLHUsdikqdy90Lk9ORV9FTTtuJiYoVCo9ZS50aWxlUGl4ZWxSYXRpby9jKTtmb3IodmFyIGs9eC53aWR0aCxBPXguaGVpZ2h0LE09JHIoeC5hbmNob3IsayxBLHgudGV4dE9mZnNldCx4LnRleHRCb3hTY2FsZSxUKSxTPW4/dGUoYi5hZGQoTSkscykucG9pbnQ6Xy5wb2ludC5hZGQocj9NLnJvdGF0ZSgtby5hbmdsZSk6TSksRT1lLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJnYucGxhY2VkT3JpZW50YXRpb249PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP01hdGguUEkvMjowLEw9MDtMPHYubnVtR2x5cGhzO0wrKyl0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHAsUyxFKTtmJiZ2LmFzc29jaWF0ZWRJY29uSW5kZXg+PTAmJihtW3YuYXNzb2NpYXRlZEljb25JbmRleF09e3NoaWZ0ZWRBbmNob3I6UyxhbmdsZTpFfSl9ZWxzZSB1ZSh2Lm51bUdseXBocyxwKX1pZihmKXtkLmNsZWFyKCk7Zm9yKHZhciBDPWUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxQPTA7UDxDLmxlbmd0aDtQKyspe3ZhciBJPUMuZ2V0KFApO2lmKEkuaGlkZGVuKXVlKEkubnVtR2x5cGhzLGQpO2Vsc2V7dmFyIE89bVtQXTtpZihPKWZvcih2YXIgej0wO3o8SS5udW1HbHlwaHM7eisrKXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMoZCxPLnNoaWZ0ZWRBbmNob3IsTy5hbmdsZSk7ZWxzZSB1ZShJLm51bUdseXBocyxkKX19ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShkKX1lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHApfWZ1bmN0aW9uIGVuKHQsZSxyKXtyZXR1cm4gci5pY29uc0luVGV4dCYmZT8ic3ltYm9sVGV4dEFuZEljb24iOnQ/InN5bWJvbFNERiI6InN5bWJvbEljb24ifWZ1bmN0aW9uIHJuKGUscixuLGksYSxvLHMsbCxjLHUsZixoKXtmb3IodmFyIHA9ZS5jb250ZXh0LGQ9cC5nbCxtPWUudHJhbnNmb3JtLGc9Im1hcCI9PT1sLHY9Im1hcCI9PT1jLHk9ZyYmInBvaW50IiE9PW4ubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpLHg9ZyYmIXYmJiF5LGI9dm9pZCAwIT09bi5sYXlvdXQuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKS5jb25zdGFudE9yKDEpLF89ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KSx3PW4ubGF5b3V0LmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSxUPVtdLGs9MCxBPWk7azxBLmxlbmd0aDtrKz0xKXt2YXIgTT1BW2tdLFM9ci5nZXRUaWxlKE0pLEU9Uy5nZXRCdWNrZXQobik7aWYoRSl7dmFyIEw9YT9FLnRleHQ6RS5pY29uO2lmKEwmJkwuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgQz1MLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksUD1hfHxFLnNkZkljb25zLEk9YT9FLnRleHRTaXplRGF0YTpFLmljb25TaXplRGF0YSxPPXZ8fDAhPT1tLnBpdGNoLHo9ZS51c2VQcm9ncmFtKGVuKFAsYSxFKSxDKSxEPXQuZXZhbHVhdGVTaXplRm9yWm9vbShJLG0uem9vbSksUj12b2lkIDAsRj1bMCwwXSxCPXZvaWQgMCxOPXZvaWQgMCxqPW51bGwsVT12b2lkIDA7aWYoYSl7aWYoQj1TLmdseXBoQXRsYXNUZXh0dXJlLE49ZC5MSU5FQVIsUj1TLmdseXBoQXRsYXNUZXh0dXJlLnNpemUsRS5pY29uc0luVGV4dCl7Rj1TLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsaj1TLmltYWdlQXRsYXNUZXh0dXJlO3ZhciBWPSJjb21wb3NpdGUiPT09SS5raW5kfHwiY2FtZXJhIj09PUkua2luZDtVPU98fGUub3B0aW9ucy5yb3RhdGluZ3x8ZS5vcHRpb25zLnpvb21pbmd8fFY/ZC5MSU5FQVI6ZC5ORUFSRVNUfX1lbHNle3ZhciBIPTEhPT1uLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmNvbnN0YW50T3IoMCl8fEUuaWNvbnNOZWVkTGluZWFyO0I9Uy5pbWFnZUF0bGFzVGV4dHVyZSxOPVB8fGUub3B0aW9ucy5yb3RhdGluZ3x8ZS5vcHRpb25zLnpvb21pbmd8fEh8fE8/ZC5MSU5FQVI6ZC5ORUFSRVNULFI9Uy5pbWFnZUF0bGFzVGV4dHVyZS5zaXplfXZhciBxPXBlKFMsMSxlLnRyYW5zZm9ybS56b29tKSxHPVF0KE0ucG9zTWF0cml4LHYsZyxlLnRyYW5zZm9ybSxxKSxZPSR0KE0ucG9zTWF0cml4LHYsZyxlLnRyYW5zZm9ybSxxKSxXPXcmJkUuaGFzVGV4dERhdGEoKSxYPSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZXJiZFLmhhc0ljb25EYXRhKCk7eSYmbmUoRSxNLnBvc01hdHJpeCxlLGEsRyxZLHYsdSk7dmFyIFo9ZS50cmFuc2xhdGVQb3NNYXRyaXgoTS5wb3NNYXRyaXgsUyxvLHMpLEo9eXx8YSYmd3x8WD9RcjpHLEs9ZS50cmFuc2xhdGVQb3NNYXRyaXgoWSxTLG8scywhMCksUT1QJiYwIT09bi5wYWludC5nZXQoYT8idGV4dC1oYWxvLXdpZHRoIjoiaWNvbi1oYWxvLXdpZHRoIikuY29uc3RhbnRPcigxKSwkPXtwcm9ncmFtOnosYnVmZmVyczpMLHVuaWZvcm1WYWx1ZXM6UD9FLmljb25zSW5UZXh0P1dyKEkua2luZCxELHgsdixlLFosSixLLFIsRik6WXIoSS5raW5kLEQseCx2LGUsWixKLEssYSxSLCEwKTpHcihJLmtpbmQsRCx4LHYsZSxaLEosSyxhLFIpLGF0bGFzVGV4dHVyZTpCLGF0bGFzVGV4dHVyZUljb246aixhdGxhc0ludGVycG9sYXRpb246TixhdGxhc0ludGVycG9sYXRpb25JY29uOlUsaXNTREY6UCxoYXNIYWxvOlF9O2lmKGIpZm9yKHZhciB0dD0wLGV0PUwuc2VnbWVudHMuZ2V0KCk7dHQ8ZXQubGVuZ3RoO3R0Kz0xKXt2YXIgcnQ9ZXRbdHRdO1QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3RvcihbcnRdKSxzb3J0S2V5OnJ0LnNvcnRLZXksc3RhdGU6JH0pfWVsc2UgVC5wdXNoKHtzZWdtZW50czpMLnNlZ21lbnRzLHNvcnRLZXk6MCxzdGF0ZTokfSl9fX1iJiZULnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBudD0wLGl0PVQ7bnQ8aXQubGVuZ3RoO250Kz0xKXt2YXIgYXQ9aXRbbnRdLG90PWF0LnN0YXRlO2lmKHAuYWN0aXZlVGV4dHVyZS5zZXQoZC5URVhUVVJFMCksb3QuYXRsYXNUZXh0dXJlLmJpbmQob3QuYXRsYXNJbnRlcnBvbGF0aW9uLGQuQ0xBTVBfVE9fRURHRSksb3QuYXRsYXNUZXh0dXJlSWNvbiYmKHAuYWN0aXZlVGV4dHVyZS5zZXQoZC5URVhUVVJFMSksb3QuYXRsYXNUZXh0dXJlSWNvbiYmb3QuYXRsYXNUZXh0dXJlSWNvbi5iaW5kKG90LmF0bGFzSW50ZXJwb2xhdGlvbkljb24sZC5DTEFNUF9UT19FREdFKSksb3QuaXNTREYpe3ZhciBzdD1vdC51bmlmb3JtVmFsdWVzO290Lmhhc0hhbG8mJihzdC51X2lzX2hhbG89MSxubihvdC5idWZmZXJzLGF0LnNlZ21lbnRzLG4sZSxvdC5wcm9ncmFtLF8sZixoLHN0KSksc3QudV9pc19oYWxvPTB9bm4ob3QuYnVmZmVycyxhdC5zZWdtZW50cyxuLGUsb3QucHJvZ3JhbSxfLGYsaCxvdC51bmlmb3JtVmFsdWVzKX19ZnVuY3Rpb24gbm4odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPW4uY29udGV4dCx1PWMuZ2w7aS5kcmF3KGMsdS5UUklBTkdMRVMsYSxvLHMsRXQuZGlzYWJsZWQsbCxyLmlkLHQubGF5b3V0VmVydGV4QnVmZmVyLHQuaW5kZXhCdWZmZXIsZSxyLnBhaW50LG4udHJhbnNmb3JtLnpvb20sdC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcix0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpfWZ1bmN0aW9uIGFuKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGYsaD10LmNvbnRleHQuZ2wscD1yLnBhaW50LmdldCgiZmlsbC1wYXR0ZXJuIiksZD1wJiZwLmNvbnN0YW50T3IoMSksbT1yLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtvPyhsPWQmJiFyLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPyJmaWxsT3V0bGluZVBhdHRlcm4iOiJmaWxsT3V0bGluZSIscz1oLkxJTkVTKToobD1kPyJmaWxsUGF0dGVybiI6ImZpbGwiLHM9aC5UUklBTkdMRVMpO2Zvcih2YXIgZz0wLHY9bjtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ10seD1lLmdldFRpbGUoeSk7aWYoIWR8fHgucGF0dGVybnNMb2FkZWQoKSl7dmFyIGI9eC5nZXRCdWNrZXQocik7aWYoYil7dmFyIF89Yi5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHc9dC51c2VQcm9ncmFtKGwsXyk7ZCYmKHQuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChoLlRFWFRVUkUwKSx4LmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoaC5MSU5FQVIsaC5DTEFNUF9UT19FREdFKSxfLnVwZGF0ZVBhaW50QnVmZmVycyhtKSk7dmFyIFQ9cC5jb25zdGFudE9yKG51bGwpO2lmKFQmJnguaW1hZ2VBdGxhcyl7dmFyIGs9eC5pbWFnZUF0bGFzLEE9ay5wYXR0ZXJuUG9zaXRpb25zW1QudG8udG9TdHJpbmcoKV0sTT1rLnBhdHRlcm5Qb3NpdGlvbnNbVC5mcm9tLnRvU3RyaW5nKCldO0EmJk0mJl8uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKEEsTSl9dmFyIFM9dC50cmFuc2xhdGVQb3NNYXRyaXgoeS5wb3NNYXRyaXgseCxyLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIikpO2lmKG8pe3U9Yi5pbmRleEJ1ZmZlcjIsZj1iLnNlZ21lbnRzMjt2YXIgRT1baC5kcmF3aW5nQnVmZmVyV2lkdGgsaC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtjPSJmaWxsT3V0bGluZVBhdHRlcm4iPT09bCYmZD9FcihTLHQsbSx4LEUpOlNyKFMsRSl9ZWxzZSB1PWIuaW5kZXhCdWZmZXIsZj1iLnNlZ21lbnRzLGM9ZD9NcihTLHQsbSx4KTpBcihTKTt3LmRyYXcodC5jb250ZXh0LHMsaSx0LnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoeSksYSxFdC5kaXNhYmxlZCxjLHIuaWQsYi5sYXlvdXRWZXJ0ZXhCdWZmZXIsdSxmLHIucGFpbnQsdC50cmFuc2Zvcm0uem9vbSxfKX19fX1mdW5jdGlvbiBvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dC5jb250ZXh0LGw9cy5nbCxjPXIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIiksdT1jLmNvbnN0YW50T3IoMSksZj1yLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxoPXIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IikscD0wLGQ9bjtwPGQubGVuZ3RoO3ArPTEpe3ZhciBtPWRbcF0sZz1lLmdldFRpbGUobSksdj1nLmdldEJ1Y2tldChyKTtpZih2KXt2YXIgeT12LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCkseD10LnVzZVByb2dyYW0odT8iZmlsbEV4dHJ1c2lvblBhdHRlcm4iOiJmaWxsRXh0cnVzaW9uIix5KTt1JiYodC5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGwuVEVYVFVSRTApLGcuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChsLkxJTkVBUixsLkNMQU1QX1RPX0VER0UpLHkudXBkYXRlUGFpbnRCdWZmZXJzKGYpKTt2YXIgYj1jLmNvbnN0YW50T3IobnVsbCk7aWYoYiYmZy5pbWFnZUF0bGFzKXt2YXIgXz1nLmltYWdlQXRsYXMsdz1fLnBhdHRlcm5Qb3NpdGlvbnNbYi50by50b1N0cmluZygpXSxUPV8ucGF0dGVyblBvc2l0aW9uc1tiLmZyb20udG9TdHJpbmcoKV07dyYmVCYmeS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnModyxUKX12YXIgaz10LnRyYW5zbGF0ZVBvc01hdHJpeChtLnBvc01hdHJpeCxnLHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpKSxBPXIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCIpLE09dT9rcihrLHQsQSxoLG0sZixnKTpUcihrLHQsQSxoKTt4LmRyYXcocyxzLmdsLlRSSUFOR0xFUyxpLGEsbyxFdC5iYWNrQ0NXLE0sci5pZCx2LmxheW91dFZlcnRleEJ1ZmZlcix2LmluZGV4QnVmZmVyLHYuc2VnbWVudHMsci5wYWludCx0LnRyYW5zZm9ybS56b29tLHkpfX19ZnVuY3Rpb24gc24odCxlLHIsbixpLGEpe3ZhciBvPXQuY29udGV4dCxzPW8uZ2wsbD1lLmZibztpZihsKXt2YXIgYz10LnVzZVByb2dyYW0oImhpbGxzaGFkZSIpO28uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCkscy5iaW5kVGV4dHVyZShzLlRFWFRVUkVfMkQsbC5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO3ZhciB1PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnBhaW50LmdldCgiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciIpLGk9ci5wYWludC5nZXQoImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiKSxhPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIiksbz1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iKSooTWF0aC5QSS8xODApOyJ2aWV3cG9ydCI9PT1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiKSYmKG8tPXQudHJhbnNmb3JtLmFuZ2xlKTt2YXIgcz0hdC5vcHRpb25zLm1vdmluZztyZXR1cm57dV9tYXRyaXg6dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGUudGlsZUlELnRvVW53cmFwcGVkKCkscyksdV9pbWFnZTowLHVfbGF0cmFuZ2U6RHIodCxlLnRpbGVJRCksdV9saWdodDpbci5wYWludC5nZXQoImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iKSxvXSx1X3NoYWRvdzpuLHVfaGlnaGxpZ2h0OmksdV9hY2NlbnQ6YX19KHQsZSxyKTtjLmRyYXcobyxzLlRSSUFOR0xFUyxuLGksYSxFdC5kaXNhYmxlZCx1LHIuaWQsdC5yYXN0ZXJCb3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnJhc3RlckJvdW5kc1NlZ21lbnRzKX19ZnVuY3Rpb24gbG4oZSxyLG4saSxhLG8scyl7dmFyIGw9ZS5jb250ZXh0LGM9bC5nbCx1PXIuZGVtO2lmKHUmJnUuZGF0YSl7dmFyIGY9dS5kaW0saD11LnN0cmlkZSxwPXUuZ2V0UGl4ZWxzKCk7aWYobC5hY3RpdmVUZXh0dXJlLnNldChjLlRFWFRVUkUxKSxsLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShoKSxyLmRlbVRleHR1cmUpe3ZhciBkPXIuZGVtVGV4dHVyZTtkLnVwZGF0ZShwLHtwcmVtdWx0aXBseTohMX0pLGQuYmluZChjLk5FQVJFU1QsYy5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgdC5UZXh0dXJlKGwscCxjLlJHQkEse3ByZW11bHRpcGx5OiExfSksci5kZW1UZXh0dXJlLmJpbmQoYy5ORUFSRVNULGMuQ0xBTVBfVE9fRURHRSk7bC5hY3RpdmVUZXh0dXJlLnNldChjLlRFWFRVUkUwKTt2YXIgbT1yLmZibztpZighbSl7dmFyIGc9bmV3IHQuVGV4dHVyZShsLHt3aWR0aDpmLGhlaWdodDpmLGRhdGE6bnVsbH0sYy5SR0JBKTtnLmJpbmQoYy5MSU5FQVIsYy5DTEFNUF9UT19FREdFKSwobT1yLmZibz1sLmNyZWF0ZUZyYW1lYnVmZmVyKGYsZiwhMCkpLmNvbG9yQXR0YWNobWVudC5zZXQoZy50ZXh0dXJlKX1sLmJpbmRGcmFtZWJ1ZmZlci5zZXQobS5mcmFtZWJ1ZmZlciksbC52aWV3cG9ydC5zZXQoWzAsMCxmLGZdKSxlLnVzZVByb2dyYW0oImhpbGxzaGFkZVByZXBhcmUiKS5kcmF3KGwsYy5UUklBTkdMRVMsYSxvLHMsRXQuZGlzYWJsZWQsZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuc3RyaWRlLGE9dC5jcmVhdGUoKTtyZXR1cm4gdC5vcnRobyhhLDAsdC5FWFRFTlQsLXQuRVhURU5ULDAsMCwxKSx0LnRyYW5zbGF0ZShhLGEsWzAsLXQuRVhURU5ULDBdKSx7dV9tYXRyaXg6YSx1X2ltYWdlOjEsdV9kaW1lbnNpb246W2ksaV0sdV96b29tOmUub3ZlcnNjYWxlZFosdV9tYXh6b29tOm4sdV91bnBhY2s6ci5nZXRVbnBhY2tWZWN0b3IoKX19KHIudGlsZUlELHUsaSksbi5pZCxlLnJhc3RlckJvdW5kc0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUucmFzdGVyQm91bmRzU2VnbWVudHMpLHIubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSExfX1mdW5jdGlvbiBjbihlLHIsbixpLGEpe3ZhciBvPWkucGFpbnQuZ2V0KCJyYXN0ZXItZmFkZS1kdXJhdGlvbiIpO2lmKG8+MCl7dmFyIHM9dC5icm93c2VyLm5vdygpLGw9KHMtZS50aW1lQWRkZWQpL28sYz1yPyhzLXIudGltZUFkZGVkKS9vOi0xLHU9bi5nZXRTb3VyY2UoKSxmPWEuY292ZXJpbmdab29tTGV2ZWwoe3RpbGVTaXplOnUudGlsZVNpemUscm91bmRab29tOnUucm91bmRab29tfSksaD0hcnx8TWF0aC5hYnMoci50aWxlSUQub3ZlcnNjYWxlZFotZik+TWF0aC5hYnMoZS50aWxlSUQub3ZlcnNjYWxlZFotZikscD1oJiZlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPzE6dC5jbGFtcChoP2w6MS1jLDAsMSk7cmV0dXJuIGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24mJmw+PTEmJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSExKSxyP3tvcGFjaXR5OjEsbWl4OjEtcH06e29wYWNpdHk6cCxtaXg6MH19cmV0dXJue29wYWNpdHk6MSxtaXg6MH19dmFyIHVuPW5ldyB0LkNvbG9yKDEsMCwwLDEpLGZuPW5ldyB0LkNvbG9yKDAsMSwwLDEpLGhuPW5ldyB0LkNvbG9yKDAsMCwxLDEpLHBuPW5ldyB0LkNvbG9yKDEsMCwxLDEpLGRuPW5ldyB0LkNvbG9yKDAsMSwxLDEpO2Z1bmN0aW9uIG1uKHQpe3ZhciBlPXQudHJhbnNmb3JtLnBhZGRpbmc7Z24odCx0LnRyYW5zZm9ybS5oZWlnaHQtKGUudG9wfHwwKSwzLHVuKSxnbih0LGUuYm90dG9tfHwwLDMsZm4pLHZuKHQsZS5sZWZ0fHwwLDMsaG4pLHZuKHQsdC50cmFuc2Zvcm0ud2lkdGgtKGUucmlnaHR8fDApLDMscG4pO3ZhciByPXQudHJhbnNmb3JtLmNlbnRlclBvaW50OyFmdW5jdGlvbih0LGUscixuKXt5bih0LGUtMSxyLTEwLDIsMjAsbikseW4odCxlLTEwLHItMSwyMCwyLG4pfSh0LHIueCx0LnRyYW5zZm9ybS5oZWlnaHQtci55LGRuKX1mdW5jdGlvbiBnbih0LGUscixuKXt5bih0LDAsZStyLzIsdC50cmFuc2Zvcm0ud2lkdGgscixuKX1mdW5jdGlvbiB2bih0LGUscixuKXt5bih0LGUtci8yLDAscix0LnRyYW5zZm9ybS5oZWlnaHQsbil9ZnVuY3Rpb24geW4oZSxyLG4saSxhLG8pe3ZhciBzPWUuY29udGV4dCxsPXMuZ2w7bC5lbmFibGUobC5TQ0lTU09SX1RFU1QpLGwuc2Npc3NvcihyKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLG4qdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8saSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxhKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvKSxzLmNsZWFyKHtjb2xvcjpvfSksbC5kaXNhYmxlKGwuU0NJU1NPUl9URVNUKX1mdW5jdGlvbiB4bihlLHIsbil7dmFyIGk9ZS5jb250ZXh0LGE9aS5nbCxvPW4ucG9zTWF0cml4LHM9ZS51c2VQcm9ncmFtKCJkZWJ1ZyIpLGw9QXQuZGlzYWJsZWQsYz1NdC5kaXNhYmxlZCx1PWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCksZS5lbXB0eVRleHR1cmUuYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLHMuZHJhdyhpLGEuTElORV9TVFJJUCxsLGMsdSxFdC5kaXNhYmxlZCxJcihvLHQuQ29sb3IucmVkKSwiJGRlYnVnIixlLmRlYnVnQnVmZmVyLGUudGlsZUJvcmRlckluZGV4QnVmZmVyLGUuZGVidWdTZWdtZW50cyk7dmFyIGY9ci5nZXRUaWxlQnlJRChuLmtleSkubGF0ZXN0UmF3VGlsZURhdGEsaD1mJiZmLmJ5dGVMZW5ndGh8fDAscD1NYXRoLmZsb29yKGgvMTAyNCksZD1yLmdldFRpbGUobikudGlsZVNpemUsbT01MTIvTWF0aC5taW4oZCw1MTIpKihuLm92ZXJzY2FsZWRaL2UudHJhbnNmb3JtLnpvb20pKi41LGc9bi5jYW5vbmljYWwudG9TdHJpbmcoKTtuLm92ZXJzY2FsZWRaIT09bi5jYW5vbmljYWwueiYmKGcrPSIgPT4gIituLm92ZXJzY2FsZWRaKSxmdW5jdGlvbih0LGUpe3QuaW5pdERlYnVnT3ZlcmxheUNhbnZhcygpO3ZhciByPXQuZGVidWdPdmVybGF5Q2FudmFzLG49dC5jb250ZXh0LmdsLGk9dC5kZWJ1Z092ZXJsYXlDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTtpLmNsZWFyUmVjdCgwLDAsci53aWR0aCxyLmhlaWdodCksaS5zaGFkb3dDb2xvcj0id2hpdGUiLGkuc2hhZG93Qmx1cj0yLGkubGluZVdpZHRoPTEuNSxpLnN0cm9rZVN0eWxlPSJ3aGl0ZSIsaS50ZXh0QmFzZWxpbmU9InRvcCIsaS5mb250PSJib2xkIDM2cHggT3BlbiBTYW5zLCBzYW5zLXNlcmlmIixpLmZpbGxUZXh0KGUsNSw1KSxpLnN0cm9rZVRleHQoZSw1LDUpLHQuZGVidWdPdmVybGF5VGV4dHVyZS51cGRhdGUociksdC5kZWJ1Z092ZXJsYXlUZXh0dXJlLmJpbmQobi5MSU5FQVIsbi5DTEFNUF9UT19FREdFKX0oZSxnKyIgIitwKyJrYiIpLHMuZHJhdyhpLGEuVFJJQU5HTEVTLGwsYyxTdC5hbHBoYUJsZW5kZWQsRXQuZGlzYWJsZWQsSXIobyx0LkNvbG9yLnRyYW5zcGFyZW50LG0pLCIkZGVidWciLGUuZGVidWdCdWZmZXIsZS5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpfXZhciBibj17c3ltYm9sOmZ1bmN0aW9uKGUscixuLGksYSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIG89TXQuZGlzYWJsZWQscz1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtuLmxheW91dC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIikmJmZ1bmN0aW9uKGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD1yLnRyYW5zZm9ybSxjPSJtYXAiPT09YSx1PSJtYXAiPT09byxmPTAsaD1lO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXSxkPWkuZ2V0VGlsZShwKSxtPWQuZ2V0QnVja2V0KG4pO2lmKG0mJm0udGV4dCYmbS50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIGc9bS50ZXh0U2l6ZURhdGEsdj10LmV2YWx1YXRlU2l6ZUZvclpvb20oZyxsLnpvb20pLHk9cGUoZCwxLHIudHJhbnNmb3JtLnpvb20pLHg9UXQocC5wb3NNYXRyaXgsdSxjLHIudHJhbnNmb3JtLHkpLGI9Im5vbmUiIT09bi5sYXlvdXQuZ2V0KCJpY29uLXRleHQtZml0IikmJm0uaGFzSWNvbkRhdGEoKTtpZih2KXt2YXIgXz1NYXRoLnBvdygyLGwuem9vbS1kLnRpbGVJRC5vdmVyc2NhbGVkWik7dG4obSxjLHUscyx0LnN5bWJvbFNpemUsbCx4LHAucG9zTWF0cml4LF8sdixiKX19fX0oaSxlLG4scixuLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLGEpLDAhPT1uLnBhaW50LmdldCgiaWNvbi1vcGFjaXR5IikuY29uc3RhbnRPcigxKSYmcm4oZSxyLG4saSwhMSxuLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUiKSxuLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUtYW5jaG9yIiksbi5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoImljb24ta2VlcC11cHJpZ2h0IiksbyxzKSwwIT09bi5wYWludC5nZXQoInRleHQtb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJnJuKGUscixuLGksITAsbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLG4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpLG8scyksci5tYXAuc2hvd0NvbGxpc2lvbkJveGVzJiYoS3IoZSxyLG4saSxuLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUiKSxuLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUtYW5jaG9yIiksITApLEtyKGUscixuLGksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLCExKSl9fSxjaXJjbGU6ZnVuY3Rpb24oZSxyLG4saSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIGE9bi5wYWludC5nZXQoImNpcmNsZS1vcGFjaXR5Iiksbz1uLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLHM9bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utb3BhY2l0eSIpLGw9dm9pZCAwIT09bi5sYXlvdXQuZ2V0KCJjaXJjbGUtc29ydC1rZXkiKS5jb25zdGFudE9yKDEpO2lmKDAhPT1hLmNvbnN0YW50T3IoMSl8fDAhPT1vLmNvbnN0YW50T3IoMSkmJjAhPT1zLmNvbnN0YW50T3IoMSkpe2Zvcih2YXIgYz1lLmNvbnRleHQsdT1jLmdsLGY9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KSxoPU10LmRpc2FibGVkLHA9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksZD1bXSxtPTA7bTxpLmxlbmd0aDttKyspe3ZhciBnPWlbbV0sdj1yLmdldFRpbGUoZykseT12LmdldEJ1Y2tldChuKTtpZih5KXt2YXIgeD15LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksYj17cHJvZ3JhbUNvbmZpZ3VyYXRpb246eCxwcm9ncmFtOmUudXNlUHJvZ3JhbSgiY2lyY2xlIix4KSxsYXlvdXRWZXJ0ZXhCdWZmZXI6eS5sYXlvdXRWZXJ0ZXhCdWZmZXIsaW5kZXhCdWZmZXI6eS5pbmRleEJ1ZmZlcix1bmlmb3JtVmFsdWVzOkxyKGUsZyx2LG4pfTtpZihsKWZvcih2YXIgXz0wLHc9eS5zZWdtZW50cy5nZXQoKTtfPHcubGVuZ3RoO18rPTEpe3ZhciBUPXdbX107ZC5wdXNoKHtzZWdtZW50czpuZXcgdC5TZWdtZW50VmVjdG9yKFtUXSksc29ydEtleTpULnNvcnRLZXksc3RhdGU6Yn0pfWVsc2UgZC5wdXNoKHtzZWdtZW50czp5LnNlZ21lbnRzLHNvcnRLZXk6MCxzdGF0ZTpifSl9fWwmJmQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIGs9MCxBPWQ7azxBLmxlbmd0aDtrKz0xKXt2YXIgTT1BW2tdLFM9TS5zdGF0ZSxFPVMucHJvZ3JhbUNvbmZpZ3VyYXRpb24sTD1TLnByb2dyYW0sQz1TLmxheW91dFZlcnRleEJ1ZmZlcixQPVMuaW5kZXhCdWZmZXIsST1TLnVuaWZvcm1WYWx1ZXMsTz1NLnNlZ21lbnRzO0wuZHJhdyhjLHUuVFJJQU5HTEVTLGYsaCxwLEV0LmRpc2FibGVkLEksbi5pZCxDLFAsTyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20sRSl9fX19LGhlYXRtYXA6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKSlpZigib2Zmc2NyZWVuIj09PWUucmVuZGVyUGFzcyl7dmFyIGE9ZS5jb250ZXh0LG89YS5nbCxzPU10LmRpc2FibGVkLGw9bmV3IFN0KFtvLk9ORSxvLk9ORV0sdC5Db2xvci50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuZ2w7dC5hY3RpdmVUZXh0dXJlLnNldChuLlRFWFRVUkUxKSx0LnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgvNCxlLmhlaWdodC80XSk7dmFyIGk9ci5oZWF0bWFwRmJvO2lmKGkpbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsaS5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLHQuYmluZEZyYW1lYnVmZmVyLnNldChpLmZyYW1lYnVmZmVyKTtlbHNle3ZhciBhPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGEpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIsbi5MSU5FQVIpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5MSU5FQVIpLGk9ci5oZWF0bWFwRmJvPXQuY3JlYXRlRnJhbWVidWZmZXIoZS53aWR0aC80LGUuaGVpZ2h0LzQsITEpLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuZ2wsYT10LmV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdD90LmV4dFRleHR1cmVIYWxmRmxvYXQuSEFMRl9GTE9BVF9PRVM6aS5VTlNJR05FRF9CWVRFO2kudGV4SW1hZ2UyRChpLlRFWFRVUkVfMkQsMCxpLlJHQkEsZS53aWR0aC80LGUuaGVpZ2h0LzQsMCxpLlJHQkEsYSxudWxsKSxuLmNvbG9yQXR0YWNobWVudC5zZXQocil9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuQ29sb3IudHJhbnNwYXJlbnR9KTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KHUpKXt2YXIgZj1yLmdldFRpbGUodSksaD1mLmdldEJ1Y2tldChuKTtpZihoKXt2YXIgcD1oLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksZD1lLnVzZVByb2dyYW0oImhlYXRtYXAiLHApLG09ZS50cmFuc2Zvcm0uem9vbTtkLmRyYXcoYSxvLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxzLGwsRXQuZGlzYWJsZWQsenIodS5wb3NNYXRyaXgsZixtLG4ucGFpbnQuZ2V0KCJoZWF0bWFwLWludGVuc2l0eSIpKSxuLmlkLGgubGF5b3V0VmVydGV4QnVmZmVyLGguaW5kZXhCdWZmZXIsaC5zZWdtZW50cyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20scCl9fX1hLnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgsZS5oZWlnaHRdKX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIuaGVhdG1hcEZibztpZighYSlyZXR1cm47bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB0LlRleHR1cmUobixyLmNvbG9yUmFtcCxpLlJHQkEpKTtvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxlLnVzZVByb2dyYW0oImhlYXRtYXBUZXh0dXJlIikuZHJhdyhuLGkuVFJJQU5HTEVTLEF0LmRpc2FibGVkLE10LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuY3JlYXRlKCk7dC5vcnRobyhhLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSk7dmFyIG89ZS5jb250ZXh0LmdsO3JldHVybnt1X21hdHJpeDphLHVfd29ybGQ6W28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0sdV9pbWFnZTpuLHVfY29sb3JfcmFtcDppLHVfb3BhY2l0eTpyLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5Iil9fShlLHIsMCwxKSxyLmlkLGUudmlld3BvcnRCdWZmZXIsZS5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixlLnZpZXdwb3J0U2VnbWVudHMsci5wYWludCxlLnRyYW5zZm9ybS56b29tKX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24oZSxyLG4saSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIGE9bi5wYWludC5nZXQoImxpbmUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImxpbmUtd2lkdGgiKTtpZigwIT09YS5jb25zdGFudE9yKDEpJiYwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpLGw9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksYz1uLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKSx1PW4ucGFpbnQuZ2V0KCJsaW5lLXBhdHRlcm4iKSxmPXUuY29uc3RhbnRPcigxKSxoPW4ucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50IikscD1uLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxkPWY/ImxpbmVQYXR0ZXJuIjpjPyJsaW5lU0RGIjpoPyJsaW5lR3JhZGllbnQiOiJsaW5lIixtPWUuY29udGV4dCxnPW0uZ2wsdj0hMDtpZihoKXttLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApO3ZhciB5PW4uZ3JhZGllbnRUZXh0dXJlO2lmKCFuLmdyYWRpZW50KXJldHVybjt5fHwoeT1uLmdyYWRpZW50VGV4dHVyZT1uZXcgdC5UZXh0dXJlKG0sbi5ncmFkaWVudCxnLlJHQkEpKSx5LmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKX1mb3IodmFyIHg9MCxiPWk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ci5nZXRUaWxlKF8pO2lmKCFmfHx3LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBUPXcuZ2V0QnVja2V0KG4pO2lmKFQpe3ZhciBrPVQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxBPWUuY29udGV4dC5wcm9ncmFtLmdldCgpLE09ZS51c2VQcm9ncmFtKGQsayksUz12fHxNLnByb2dyYW0hPT1BLEU9dS5jb25zdGFudE9yKG51bGwpO2lmKEUmJncuaW1hZ2VBdGxhcyl7dmFyIEw9dy5pbWFnZUF0bGFzLEM9TC5wYXR0ZXJuUG9zaXRpb25zW0UudG8udG9TdHJpbmcoKV0sUD1MLnBhdHRlcm5Qb3NpdGlvbnNbRS5mcm9tLnRvU3RyaW5nKCldO0MmJlAmJmsuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKEMsUCl9dmFyIEk9Zj9CcihlLHcsbixwKTpjP05yKGUsdyxuLGMscCk6aD9GcihlLHcsbik6UnIoZSx3LG4pO2Y/KG0uYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksdy5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGcuTElORUFSLGcuQ0xBTVBfVE9fRURHRSksay51cGRhdGVQYWludEJ1ZmZlcnMocCkpOmMmJihTfHxlLmxpbmVBdGxhcy5kaXJ0eSkmJihtLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApLGUubGluZUF0bGFzLmJpbmQobSkpLE0uZHJhdyhtLGcuVFJJQU5HTEVTLHMsZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKF8pLGwsRXQuZGlzYWJsZWQsSSxuLmlkLFQubGF5b3V0VmVydGV4QnVmZmVyLFQuaW5kZXhCdWZmZXIsVC5zZWdtZW50cyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20sayksdj0hMX19fX19fSxmaWxsOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4ucGFpbnQuZ2V0KCJmaWxsLWNvbG9yIiksbz1uLnBhaW50LmdldCgiZmlsbC1vcGFjaXR5Iik7aWYoMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksbD1uLnBhaW50LmdldCgiZmlsbC1wYXR0ZXJuIiksYz1lLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSYmIWwuY29uc3RhbnRPcigxKSYmMT09PWEuY29uc3RhbnRPcih0LkNvbG9yLnRyYW5zcGFyZW50KS5hJiYxPT09by5jb25zdGFudE9yKDApPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYoZS5yZW5kZXJQYXNzPT09Yyl7dmFyIHU9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigxLCJvcGFxdWUiPT09ZS5yZW5kZXJQYXNzP0F0LlJlYWRXcml0ZTpBdC5SZWFkT25seSk7YW4oZSxyLG4saSx1LHMsITEpfWlmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KCJmaWxsLWFudGlhbGlhcyIpKXt2YXIgZj1lLmRlcHRoTW9kZUZvclN1YmxheWVyKG4uZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/MjowLEF0LlJlYWRPbmx5KTthbihlLHIsbixpLGYscywhMCl9fX0sImZpbGwtZXh0cnVzaW9uIjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpO2lmKDAhPT1pJiYidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1uZXcgQXQodC5jb250ZXh0LmdsLkxFUVVBTCxBdC5SZWFkV3JpdGUsdC5kZXB0aFJhbmdlRm9yM0QpO2lmKDEhPT1pfHxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLmNvbnN0YW50T3IoMSkpb24odCxlLHIsbixhLE10LmRpc2FibGVkLFN0LmRpc2FibGVkKSxvbih0LGUscixuLGEsdC5zdGVuY2lsTW9kZUZvcjNEKCksdC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Vsc2V7dmFyIG89dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7b24odCxlLHIsbixhLE10LmRpc2FibGVkLG8pfX19LGhpbGxzaGFkZTpmdW5jdGlvbih0LGUscixuKXtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzc3x8InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7Zm9yKHZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbSxvPXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSkscz10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxsPSJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3M/dC5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcChuKTpbe30sbl0sYz1sWzBdLHU9MCxmPWxbMV07dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdLHA9ZS5nZXRUaWxlKGgpO3AubmVlZHNIaWxsc2hhZGVQcmVwYXJlJiYib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcz9sbih0LHAscixhLG8sTXQuZGlzYWJsZWQscyk6InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmc24odCxwLHIsbyxjW2gub3ZlcnNjYWxlZFpdLHMpfWkudmlld3BvcnQuc2V0KFswLDAsdC53aWR0aCx0LmhlaWdodF0pfX0scmFzdGVyOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSYmbi5sZW5ndGgpZm9yKHZhciBpPXQuY29udGV4dCxhPWkuZ2wsbz1lLmdldFNvdXJjZSgpLHM9dC51c2VQcm9ncmFtKCJyYXN0ZXIiKSxsPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGM9byBpbnN0YW5jZW9mIEk/W3t9LG5dOnQuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAobiksdT1jWzBdLGY9Y1sxXSxoPWZbZi5sZW5ndGgtMV0ub3ZlcnNjYWxlZFoscD0hdC5vcHRpb25zLm1vdmluZyxkPTAsbT1mO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXSx2PXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoZy5vdmVyc2NhbGVkWi1oLDE9PT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKT9BdC5SZWFkV3JpdGU6QXQuUmVhZE9ubHksYS5MRVNTKSx5PWUuZ2V0VGlsZShnKSx4PXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChnLnRvVW53cmFwcGVkKCkscCk7eS5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKSk7dmFyIGI9ZS5maW5kTG9hZGVkUGFyZW50KGcsMCksXz1jbih5LGIsZSxyLHQudHJhbnNmb3JtKSx3PXZvaWQgMCxUPXZvaWQgMCxrPSJuZWFyZXN0Ij09PXIucGFpbnQuZ2V0KCJyYXN0ZXItcmVzYW1wbGluZyIpP2EuTkVBUkVTVDphLkxJTkVBUjtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLHkudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSxpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpLGI/KGIudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSx3PU1hdGgucG93KDIsYi50aWxlSUQub3ZlcnNjYWxlZFoteS50aWxlSUQub3ZlcnNjYWxlZFopLFQ9W3kudGlsZUlELmNhbm9uaWNhbC54KnclMSx5LnRpbGVJRC5jYW5vbmljYWwueSp3JTFdKTp5LnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7dmFyIEE9VnIoeCxUfHxbMCwwXSx3fHwxLF8scik7byBpbnN0YW5jZW9mIEk/cy5kcmF3KGksYS5UUklBTkdMRVMsdixNdC5kaXNhYmxlZCxsLEV0LmRpc2FibGVkLEEsci5pZCxvLmJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLG8uYm91bmRzU2VnbWVudHMpOnMuZHJhdyhpLGEuVFJJQU5HTEVTLHYsdVtnLm92ZXJzY2FsZWRaXSxsLEV0LmRpc2FibGVkLEEsci5pZCx0LnJhc3RlckJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQucmFzdGVyQm91bmRzU2VnbWVudHMpfX0sYmFja2dyb3VuZDpmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImJhY2tncm91bmQtY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLW9wYWNpdHkiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLXBhdHRlcm4iKTtpZighdC5pc1BhdHRlcm5NaXNzaW5nKGMpKXt2YXIgdT0hYyYmMT09PW4uYSYmMT09PWkmJnQub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGY9TXQuZGlzYWJsZWQsaD10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIm9wYXF1ZSI9PT11P0F0LlJlYWRXcml0ZTpBdC5SZWFkT25seSkscD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxkPXQudXNlUHJvZ3JhbShjPyJiYWNrZ3JvdW5kUGF0dGVybiI6ImJhY2tncm91bmQiKSxtPXMuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6bH0pO2MmJihhLmFjdGl2ZVRleHR1cmUuc2V0KG8uVEVYVFVSRTApLHQuaW1hZ2VNYW5hZ2VyLmJpbmQodC5jb250ZXh0KSk7Zm9yKHZhciBnPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLHY9MCx5PW07djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHgudG9VbndyYXBwZWQoKSksXz1jP1pyKGIsaSx0LGMse3RpbGVJRDp4LHRpbGVTaXplOmx9LGcpOlhyKGIsaSxuKTtkLmRyYXcoYSxvLlRSSUFOR0xFUyxoLGYscCxFdC5kaXNhYmxlZCxfLHIuaWQsdC50aWxlRXh0ZW50QnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC50aWxlRXh0ZW50U2VnbWVudHMpfX19fX0sZGVidWc6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXhuKHQsZSxyW25dKX0sY3VzdG9tOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnRleHQsaT1yLmltcGxlbWVudGF0aW9uO2lmKCJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1pLnByZXJlbmRlcjthJiYodC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGEuY2FsbChpLG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCkpfWVsc2UgaWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG4uc2V0U3RlbmNpbE1vZGUoTXQuZGlzYWJsZWQpO3ZhciBvPSIzZCI9PT1pLnJlbmRlcmluZ01vZGU/bmV3IEF0KHQuY29udGV4dC5nbC5MRVFVQUwsQXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTp0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpO24uc2V0RGVwdGhNb2RlKG8pLGkucmVuZGVyKG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCksbi5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpfX19LF9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250ZXh0PW5ldyBMdCh0KSx0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3RpbGVUZXh0dXJlcz17fSx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9Q3QubWF4VW5kZXJ6b29taW5nK0N0Lm1heE92ZXJ6b29taW5nKzEsdGhpcy5kZXB0aEVwc2lsb249MS9NYXRoLnBvdygyLDE2KSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBOZSx0aGlzLmdwdVRpbWVycz17fX07X24ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHIpe2lmKHRoaXMud2lkdGg9ZSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1yKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5zdHlsZSlmb3IodmFyIG49MCxpPXRoaXMuc3R5bGUuX29yZGVyO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLnN0eWxlLl9sYXllcnNbYV0ucmVzaXplKCl9fSxfbi5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LkVYVEVOVCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQpLHIuZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEdlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFNlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBuPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuRVhURU5ULDApLG4uZW1wbGFjZUJhY2soMCx0LkVYVEVOVCksbi5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5kZWJ1Z0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEdlLm1lbWJlcnMpLHRoaXMuZGVidWdTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCw1KTt2YXIgaT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDRpODtpLmVtcGxhY2VCYWNrKDAsMCwwLDApLGkuZW1wbGFjZUJhY2sodC5FWFRFTlQsMCx0LkVYVEVOVCwwKSxpLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQsMCx0LkVYVEVOVCksaS5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCx0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoaSxQLm1lbWJlcnMpLHRoaXMucmFzdGVyQm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMik7dmFyIGE9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7YS5lbXBsYWNlQmFjaygwLDApLGEuZW1wbGFjZUJhY2soMSwwKSxhLmVtcGxhY2VCYWNrKDAsMSksYS5lbXBsYWNlQmFjaygxLDEpLHRoaXMudmlld3BvcnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSxHZS5tZW1iZXJzKSx0aGlzLnZpZXdwb3J0U2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMik7dmFyIG89bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQxdWkyO28uZW1wbGFjZUJhY2soMCksby5lbXBsYWNlQmFjaygxKSxvLmVtcGxhY2VCYWNrKDMpLG8uZW1wbGFjZUJhY2soMiksby5lbXBsYWNlQmFjaygwKSx0aGlzLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcj1lLmNyZWF0ZUluZGV4QnVmZmVyKG8pO3ZhciBzPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0M3VpNjtzLmVtcGxhY2VCYWNrKDAsMSwyKSxzLmVtcGxhY2VCYWNrKDIsMSwzKSx0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIocyksdGhpcy5lbXB0eVRleHR1cmU9bmV3IHQuVGV4dHVyZShlLHt3aWR0aDoxLGhlaWdodDoxLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDBdKX0sZS5nbC5SR0JBKTt2YXIgbD10aGlzLmNvbnRleHQuZ2w7dGhpcy5zdGVuY2lsQ2xlYXJNb2RlPW5ldyBNdCh7ZnVuYzpsLkFMV0FZUyxtYXNrOjB9LDAsMjU1LGwuWkVSTyxsLlpFUk8sbC5aRVJPKX0sX24ucHJvdG90eXBlLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPWUuZ2w7dGhpcy5uZXh0U3RlbmNpbElEPTEsdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDA7dmFyIG49dC5jcmVhdGUoKTt0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0LnNjYWxlKG4sbixbci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0LDBdKSx0aGlzLnVzZVByb2dyYW0oImNsaXBwaW5nTWFzayIpLmRyYXcoZSxyLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCx0aGlzLnN0ZW5jaWxDbGVhck1vZGUsU3QuZGlzYWJsZWQsRXQuZGlzYWJsZWQsT3IobiksIiRjbGlwcGluZyIsdGhpcy52aWV3cG9ydEJ1ZmZlcix0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHRoaXMudmlld3BvcnRTZWdtZW50cyl9LF9uLnByb3RvdHlwZS5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3M9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlIT09dC5zb3VyY2UmJnQuaXNUaWxlQ2xpcHBlZCgpJiZlJiZlLmxlbmd0aCl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT10LnNvdXJjZTt2YXIgcj10aGlzLmNvbnRleHQsbj1yLmdsO3RoaXMubmV4dFN0ZW5jaWxJRCtlLmxlbmd0aD4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCksci5zZXRDb2xvck1vZGUoU3QuZGlzYWJsZWQpLHIuc2V0RGVwdGhNb2RlKEF0LmRpc2FibGVkKTt2YXIgaT10aGlzLnVzZVByb2dyYW0oImNsaXBwaW5nTWFzayIpO3RoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHM9e307Zm9yKHZhciBhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbcy5rZXldPXRoaXMubmV4dFN0ZW5jaWxJRCsrO2kuZHJhdyhyLG4uVFJJQU5HTEVTLEF0LmRpc2FibGVkLG5ldyBNdCh7ZnVuYzpuLkFMV0FZUyxtYXNrOjB9LGwsMjU1LG4uS0VFUCxuLktFRVAsbi5SRVBMQUNFKSxTdC5kaXNhYmxlZCxFdC5kaXNhYmxlZCxPcihzLnBvc01hdHJpeCksIiRjbGlwcGluZyIsdGhpcy50aWxlRXh0ZW50QnVmZmVyLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdGhpcy50aWxlRXh0ZW50U2VnbWVudHMpfX19LF9uLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvcjNEPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDAsdGhpcy5uZXh0U3RlbmNpbElEKzE+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpO3ZhciB0PXRoaXMubmV4dFN0ZW5jaWxJRCsrLGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgTXQoe2Z1bmM6ZS5OT1RFUVVBTCxtYXNrOjI1NX0sdCwyNTUsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSxfbi5wcm90b3R5cGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIG5ldyBNdCh7ZnVuYzplLkVRVUFMLG1hc2s6MjU1fSx0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3Qua2V5XSwwLGUuS0VFUCxlLktFRVAsZS5SRVBMQUNFKX0sX24ucHJvdG90eXBlLnN0ZW5jaWxDb25maWdGb3JPdmVybGFwPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5jb250ZXh0LmdsLG49dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLm92ZXJzY2FsZWRaLXQub3ZlcnNjYWxlZFp9KSksaT1uW24ubGVuZ3RoLTFdLm92ZXJzY2FsZWRaLGE9blswXS5vdmVyc2NhbGVkWi1pKzE7aWYoYT4xKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMCx0aGlzLm5leHRTdGVuY2lsSUQrYT4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCk7Zm9yKHZhciBvPXt9LHM9MDtzPGE7cysrKW9bcytpXT1uZXcgTXQoe2Z1bmM6ci5HRVFVQUwsbWFzazoyNTV9LHMrdGhpcy5uZXh0U3RlbmNpbElELDI1NSxyLktFRVAsci5LRUVQLHIuUkVQTEFDRSk7cmV0dXJuIHRoaXMubmV4dFN0ZW5jaWxJRCs9YSxbbyxuXX1yZXR1cm5bKGU9e30sZVtpXT1NdC5kaXNhYmxlZCxlKSxuXX0sX24ucHJvdG90eXBlLmNvbG9yTW9kZUZvclJlbmRlclBhc3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7aWYodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKXtyZXR1cm4gbmV3IFN0KFtlLkNPTlNUQU5UX0NPTE9SLGUuT05FXSxuZXcgdC5Db2xvcigxLzgsMS84LDEvOCwwKSxbITAsITAsITAsITBdKX1yZXR1cm4ib3BhcXVlIj09PXRoaXMucmVuZGVyUGFzcz9TdC51bmJsZW5kZWQ6U3QuYWxwaGFCbGVuZGVkfSxfbi5wcm90b3R5cGUuZGVwdGhNb2RlRm9yU3VibGF5ZXI9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSlyZXR1cm4gQXQuZGlzYWJsZWQ7dmFyIG49MS0oKDErdGhpcy5jdXJyZW50TGF5ZXIpKnRoaXMubnVtU3VibGF5ZXJzK3QpKnRoaXMuZGVwdGhFcHNpbG9uO3JldHVybiBuZXcgQXQocnx8dGhpcy5jb250ZXh0LmdsLkxFUVVBTCxlLFtuLG5dKX0sX24ucHJvdG90eXBlLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50TGF5ZXI8dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmfSxfbi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLnN0eWxlPWUsdGhpcy5vcHRpb25zPXIsdGhpcy5saW5lQXRsYXM9ZS5saW5lQXRsYXMsdGhpcy5pbWFnZU1hbmFnZXI9ZS5pbWFnZU1hbmFnZXIsdGhpcy5nbHlwaE1hbmFnZXI9ZS5nbHlwaE1hbmFnZXIsdGhpcy5zeW1ib2xGYWRlQ2hhbmdlPWUucGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2UodC5icm93c2VyLm5vdygpKSx0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7dmFyIGk9dGhpcy5zdHlsZS5fb3JkZXIsYT10aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIG8gaW4gYSl7dmFyIHM9YVtvXTtzLnVzZWQmJnMucHJlcGFyZSh0aGlzLmNvbnRleHQpfXZhciBsLGMsdT17fSxmPXt9LGg9e307Zm9yKHZhciBwIGluIGEpe3ZhciBkPWFbcF07dVtwXT1kLmdldFZpc2libGVDb29yZGluYXRlcygpLGZbcF09dVtwXS5zbGljZSgpLnJldmVyc2UoKSxoW3BdPWQuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCEwKS5yZXZlcnNlKCl9dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPTEvMDtmb3IodmFyIG09MDttPGkubGVuZ3RoO20rKyl7dmFyIGc9aVttXTtpZih0aGlzLnN0eWxlLl9sYXllcnNbZ10uaXMzRCgpKXt0aGlzLm9wYXF1ZVBhc3NDdXRvZmY9bTticmVha319dGhpcy5yZW5kZXJQYXNzPSJvZmZzY3JlZW4iO2Zvcih2YXIgdj0wLHk9aTt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl0sYj10aGlzLnN0eWxlLl9sYXllcnNbeF07aWYoYi5oYXNPZmZzY3JlZW5QYXNzKCkmJiFiLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKXt2YXIgXz1mW2Iuc291cmNlXTsoImN1c3RvbSI9PT1iLnR5cGV8fF8ubGVuZ3RoKSYmdGhpcy5yZW5kZXJMYXllcih0aGlzLGFbYi5zb3VyY2VdLGIsXyl9fWZvcih0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKSx0aGlzLmNvbnRleHQuY2xlYXIoe2NvbG9yOnIuc2hvd092ZXJkcmF3SW5zcGVjdG9yP3QuQ29sb3IuYmxhY2s6dC5Db2xvci50cmFuc3BhcmVudCxkZXB0aDoxfSksdGhpcy5jbGVhclN0ZW5jaWwoKSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3IsdGhpcy5kZXB0aFJhbmdlRm9yM0Q9WzAsMS0oZS5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uXSx0aGlzLnJlbmRlclBhc3M9Im9wYXF1ZSIsdGhpcy5jdXJyZW50TGF5ZXI9aS5sZW5ndGgtMTt0aGlzLmN1cnJlbnRMYXllcj49MDt0aGlzLmN1cnJlbnRMYXllci0tKXt2YXIgdz10aGlzLnN0eWxlLl9sYXllcnNbaVt0aGlzLmN1cnJlbnRMYXllcl1dLFQ9YVt3LnNvdXJjZV0saz11W3cuc291cmNlXTt0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh3LGspLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxULHcsayl9Zm9yKHRoaXMucmVuZGVyUGFzcz0idHJhbnNsdWNlbnQiLHRoaXMuY3VycmVudExheWVyPTA7dGhpcy5jdXJyZW50TGF5ZXI8aS5sZW5ndGg7dGhpcy5jdXJyZW50TGF5ZXIrKyl7dmFyIEE9dGhpcy5zdHlsZS5fbGF5ZXJzW2lbdGhpcy5jdXJyZW50TGF5ZXJdXSxNPWFbQS5zb3VyY2VdLFM9KCJzeW1ib2wiPT09QS50eXBlP2g6ZilbQS5zb3VyY2VdO3RoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKEEsdVtBLnNvdXJjZV0pLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxNLEEsUyl9dGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcyYmKHQudmFsdWVzKHRoaXMuc3R5bGUuX2xheWVycykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zb3VyY2UmJiF0LmlzSGlkZGVuKG4udHJhbnNmb3JtLnpvb20pJiYodC5zb3VyY2UhPT0oYyYmYy5pZCkmJihjPW4uc3R5bGUuc291cmNlQ2FjaGVzW3Quc291cmNlXSksKCFsfHxsLmdldFNvdXJjZSgpLm1heHpvb208Yy5nZXRTb3VyY2UoKS5tYXh6b29tKSYmKGw9YykpfSkpLGwmJmJuLmRlYnVnKHRoaXMsbCxsLmdldFZpc2libGVDb29yZGluYXRlcygpKSk7dGhpcy5vcHRpb25zLnNob3dQYWRkaW5nJiZtbih0aGlzKSx0aGlzLmNvbnRleHQuc2V0RGVmYXVsdCgpfSxfbi5wcm90b3R5cGUucmVuZGVyTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7ci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKXx8KCJiYWNrZ3JvdW5kIj09PXIudHlwZXx8ImN1c3RvbSI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCx0aGlzLmdwdVRpbWluZ1N0YXJ0KHIpLGJuW3IudHlwZV0odCxlLHIsbix0aGlzLnN0eWxlLnBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMpLHRoaXMuZ3B1VGltaW5nRW5kKCkpfSxfbi5wcm90b3R5cGUuZ3B1VGltaW5nU3RhcnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLmdwdVRpbWluZyl7dmFyIGU9dGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnkscj10aGlzLmdwdVRpbWVyc1t0LmlkXTtyfHwocj10aGlzLmdwdVRpbWVyc1t0LmlkXT17Y2FsbHM6MCxjcHVUaW1lOjAscXVlcnk6ZS5jcmVhdGVRdWVyeUVYVCgpfSksci5jYWxscysrLGUuYmVnaW5RdWVyeUVYVChlLlRJTUVfRUxBUFNFRF9FWFQsci5xdWVyeSl9fSxfbi5wcm90b3R5cGUuZ3B1VGltaW5nRW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmdwdVRpbWluZyl7dmFyIHQ9dGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7dC5lbmRRdWVyeUVYVCh0LlRJTUVfRUxBUFNFRF9FWFQpfX0sX24ucHJvdG90eXBlLmNvbGxlY3RHcHVUaW1lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdwdVRpbWVycztyZXR1cm4gdGhpcy5ncHVUaW1lcnM9e30sdH0sX24ucHJvdG90eXBlLnF1ZXJ5R3B1VGltZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdLGk9dGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnksYT1pLmdldFF1ZXJ5T2JqZWN0RVhUKG4ucXVlcnksaS5RVUVSWV9SRVNVTFRfRVhUKS8xZTY7aS5kZWxldGVRdWVyeUVYVChuLnF1ZXJ5KSxlW3JdPWF9cmV0dXJuIGV9LF9uLnByb3RvdHlwZS50cmFuc2xhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyLG4saSxhKXtpZighblswXSYmIW5bMV0pcmV0dXJuIGU7dmFyIG89YT8ibWFwIj09PWk/dGhpcy50cmFuc2Zvcm0uYW5nbGU6MDoidmlld3BvcnQiPT09aT8tdGhpcy50cmFuc2Zvcm0uYW5nbGU6MDtpZihvKXt2YXIgcz1NYXRoLnNpbihvKSxsPU1hdGguY29zKG8pO249W25bMF0qbC1uWzFdKnMsblswXSpzK25bMV0qbF19dmFyIGM9W2E/blswXTpwZShyLG5bMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksYT9uWzFdOnBlKHIsblsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0LnRyYW5zbGF0ZSh1LGUsYyksdX0sX24ucHJvdG90eXBlLnNhdmVUaWxlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlVGV4dHVyZXNbdC5zaXplWzBdXTtlP2UucHVzaCh0KTp0aGlzLl90aWxlVGV4dHVyZXNbdC5zaXplWzBdXT1bdF19LF9uLnByb3RvdHlwZS5nZXRUaWxlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlVGV4dHVyZXNbdF07cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZS5wb3AoKTpudWxsfSxfbi5wcm90b3R5cGUuaXNQYXR0ZXJuTWlzc2luZz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtpZighdC5mcm9tfHwhdC50bylyZXR1cm4hMDt2YXIgZT10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbS50b1N0cmluZygpKSxyPXRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50by50b1N0cmluZygpKTtyZXR1cm4hZXx8IXJ9LF9uLnByb3RvdHlwZS51c2VQcm9ncmFtPWZ1bmN0aW9uKHQsZSl7dGhpcy5jYWNoZT10aGlzLmNhY2hlfHx7fTt2YXIgcj0iIit0KyhlP2UuY2FjaGVLZXk6IiIpKyh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/Ii9vdmVyZHJhdyI6IiIpO3JldHVybiB0aGlzLmNhY2hlW3JdfHwodGhpcy5jYWNoZVtyXT1uZXcgX3IodGhpcy5jb250ZXh0LHhyW3RdLGUsSnJbdF0sdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKSksdGhpcy5jYWNoZVtyXX0sX24ucHJvdG90eXBlLnNldEN1c3RvbUxheWVyRGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQudW5iaW5kVkFPKCksdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LF9uLnByb3RvdHlwZS5zZXRCYXNlU3RhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldCghMSksdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdKSx0aGlzLmNvbnRleHQuYmxlbmRFcXVhdGlvbi5zZXQodC5GVU5DX0FERCl9LF9uLnByb3RvdHlwZS5pbml0RGVidWdPdmVybGF5Q2FudmFzPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMpe3RoaXMuZGVidWdPdmVybGF5Q2FudmFzPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLndpZHRoPTUxMix0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcy5oZWlnaHQ9NTEyO3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmU9bmV3IHQuVGV4dHVyZSh0aGlzLmNvbnRleHQsdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMsZS5SR0JBKX19LF9uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbXB0eVRleHR1cmUuZGVzdHJveSgpLHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSYmdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlLmRlc3Ryb3koKX07dmFyIHduPWZ1bmN0aW9uKHQsZSl7dGhpcy5wb2ludHM9dCx0aGlzLnBsYW5lcz1lfTt3bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeD1mdW5jdGlvbihlLHIsbil7dmFyIGk9TWF0aC5wb3coMixuKSxhPVtbLTEsMSwtMSwxXSxbMSwxLC0xLDFdLFsxLC0xLC0xLDFdLFstMSwtMSwtMSwxXSxbLTEsMSwxLDFdLFsxLDEsMSwxXSxbMSwtMSwxLDFdLFstMSwtMSwxLDFdXS5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiB0LnRyYW5zZm9ybU1hdDQoW10scixlKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjYWxlJDEoW10sZSwxL2VbM10vcippKX0pKSxvPVtbMCwxLDJdLFs2LDUsNF0sWzAsMyw3XSxbMiwxLDVdLFszLDIsNl0sWzAsNCw1XV0ubWFwKChmdW5jdGlvbihlKXt2YXIgcj10LnN1YihbXSxhW2VbMF1dLGFbZVsxXV0pLG49dC5zdWIoW10sYVtlWzJdXSxhW2VbMV1dKSxpPXQubm9ybWFsaXplKFtdLHQuY3Jvc3MoW10scixuKSksbz0tdC5kb3QoaSxhW2VbMV1dKTtyZXR1cm4gaS5jb25jYXQobyl9KSk7cmV0dXJuIG5ldyB3bihhLG8pfTt2YXIgVG49ZnVuY3Rpb24oZSxyKXt0aGlzLm1pbj1lLHRoaXMubWF4PXIsdGhpcy5jZW50ZXI9dC5zY2FsZSQyKFtdLHQuYWRkKFtdLHRoaXMubWluLHRoaXMubWF4KSwuNSl9O1RuLnByb3RvdHlwZS5xdWFkcmFudD1mdW5jdGlvbihlKXtmb3IodmFyIHI9W2UlMj09MCxlPDJdLG49dC5jbG9uZSQyKHRoaXMubWluKSxpPXQuY2xvbmUkMih0aGlzLm1heCksYT0wO2E8ci5sZW5ndGg7YSsrKW5bYV09clthXT90aGlzLm1pblthXTp0aGlzLmNlbnRlclthXSxpW2FdPXJbYV0/dGhpcy5jZW50ZXJbYV06dGhpcy5tYXhbYV07cmV0dXJuIGlbMl09dGhpcy5tYXhbMl0sbmV3IFRuKG4saSl9LFRuLnByb3RvdHlwZS5kaXN0YW5jZVg9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzBdLHRbMF0pLHRoaXMubWluWzBdKS10WzBdfSxUbi5wcm90b3R5cGUuZGlzdGFuY2VZPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFsxXSx0WzFdKSx0aGlzLm1pblsxXSktdFsxXX0sVG4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtbdGhpcy5taW5bMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5tYXhbMV0sMCwxXSxbdGhpcy5taW5bMF0sdGhpcy5tYXhbMV0sMCwxXV0sbj0hMCxpPTA7aTxlLnBsYW5lcy5sZW5ndGg7aSsrKXtmb3IodmFyIGE9ZS5wbGFuZXNbaV0sbz0wLHM9MDtzPHIubGVuZ3RoO3MrKylvKz10LmRvdCQxKGEscltzXSk+PTA7aWYoMD09PW8pcmV0dXJuIDA7byE9PXIubGVuZ3RoJiYobj0hMSl9aWYobilyZXR1cm4gMjtmb3IodmFyIGw9MDtsPDM7bCsrKXtmb3IodmFyIGM9TnVtYmVyLk1BWF9WQUxVRSx1PS1OdW1iZXIuTUFYX1ZBTFVFLGY9MDtmPGUucG9pbnRzLmxlbmd0aDtmKyspe3ZhciBoPWUucG9pbnRzW2ZdW2xdLXRoaXMubWluW2xdO2M9TWF0aC5taW4oYyxoKSx1PU1hdGgubWF4KHUsaCl9aWYodTwwfHxjPnRoaXMubWF4W2xdLXRoaXMubWluW2xdKXJldHVybiAwfXJldHVybiAxfTt2YXIga249ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09biYmKG49MCksaXNOYU4odCl8fHQ8MHx8aXNOYU4oZSl8fGU8MHx8aXNOYU4ocil8fHI8MHx8aXNOYU4obil8fG48MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIGVkZ2UtaW5zZXRzLCB0b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgbXVzdCBhbGwgYmUgbnVtYmVycyIpO3RoaXMudG9wPXQsdGhpcy5ib3R0b209ZSx0aGlzLmxlZnQ9cix0aGlzLnJpZ2h0PW59O2tuLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIG51bGwhPXIudG9wJiZudWxsIT1lLnRvcCYmKHRoaXMudG9wPXQubnVtYmVyKGUudG9wLHIudG9wLG4pKSxudWxsIT1yLmJvdHRvbSYmbnVsbCE9ZS5ib3R0b20mJih0aGlzLmJvdHRvbT10Lm51bWJlcihlLmJvdHRvbSxyLmJvdHRvbSxuKSksbnVsbCE9ci5sZWZ0JiZudWxsIT1lLmxlZnQmJih0aGlzLmxlZnQ9dC5udW1iZXIoZS5sZWZ0LHIubGVmdCxuKSksbnVsbCE9ci5yaWdodCYmbnVsbCE9ZS5yaWdodCYmKHRoaXMucmlnaHQ9dC5udW1iZXIoZS5yaWdodCxyLnJpZ2h0LG4pKSx0aGlzfSxrbi5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jbGFtcCgodGhpcy5sZWZ0K2UtdGhpcy5yaWdodCkvMiwwLGUpLGk9dC5jbGFtcCgodGhpcy50b3Arci10aGlzLmJvdHRvbSkvMiwwLHIpO3JldHVybiBuZXcgdC5Qb2ludChuLGkpfSxrbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvcD09PXQudG9wJiZ0aGlzLmJvdHRvbT09PXQuYm90dG9tJiZ0aGlzLmxlZnQ9PT10LmxlZnQmJnRoaXMucmlnaHQ9PT10LnJpZ2h0fSxrbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMudG9wLHRoaXMuYm90dG9tLHRoaXMubGVmdCx0aGlzLnJpZ2h0KX0sa24ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0b3A6dGhpcy50b3AsYm90dG9tOnRoaXMuYm90dG9tLGxlZnQ6dGhpcy5sZWZ0LHJpZ2h0OnRoaXMucmlnaHR9fTt2YXIgQW49ZnVuY3Rpb24oZSxyLG4saSxhKXt0aGlzLnRpbGVTaXplPTUxMix0aGlzLm1heFZhbGlkTGF0aXR1ZGU9ODUuMDUxMTI5LHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PWF8fGEsdGhpcy5fbWluWm9vbT1lfHwwLHRoaXMuX21heFpvb209cnx8MjIsdGhpcy5fbWluUGl0Y2g9bnVsbD09bj8wOm4sdGhpcy5fbWF4UGl0Y2g9bnVsbD09aT82MDppLHRoaXMuc2V0TWF4Qm91bmRzKCksdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyB0LkxuZ0xhdCgwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX2VkZ2VJbnNldHM9bmV3IGtuLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0sTW49e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxtaW5QaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxtYXhQaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyT2Zmc2V0Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0scGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJQb2ludDp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHBvaW50Ontjb25maWd1cmFibGU6ITB9fTtBbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQW4odGhpcy5fbWluWm9vbSx0aGlzLl9tYXhab29tLHRoaXMuX21pblBpdGNoLHRoaXMubWF4UGl0Y2gsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2VkZ2VJbnNldHM9dGhpcy5fZWRnZUluc2V0cy5jbG9uZSgpLHQuX2NhbGNNYXRyaWNlcygpLHR9LE1uLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LE1uLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxNbi5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxNbi5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sTW4ubWluUGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblBpdGNofSxNbi5taW5QaXRjaC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluUGl0Y2ghPT10JiYodGhpcy5fbWluUGl0Y2g9dCx0aGlzLnBpdGNoPU1hdGgubWF4KHRoaXMucGl0Y2gsdCkpfSxNbi5tYXhQaXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4UGl0Y2h9LE1uLm1heFBpdGNoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhQaXRjaCE9PXQmJih0aGlzLl9tYXhQaXRjaD10LHRoaXMucGl0Y2g9TWF0aC5taW4odGhpcy5waXRjaCx0KSl9LE1uLnJlbmRlcldvcmxkQ29waWVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllc30sTW4ucmVuZGVyV29ybGRDb3BpZXMuc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQ/dD0hMDpudWxsPT09dCYmKHQ9ITEpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXR9LE1uLndvcmxkU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxNbi5jZW50ZXJPZmZzZXQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuX3N1Yih0aGlzLnNpemUuX2RpdigyKSl9LE1uLnNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxNbi5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxNbi5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD10LmNyZWF0ZSQyKCksdC5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sTW4ucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxNbi5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLHRoaXMubWluUGl0Y2gsdGhpcy5tYXhQaXRjaCkvMTgwKk1hdGguUEk7dGhpcy5fcGl0Y2ghPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9waXRjaD1yLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uZm92LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3YvTWF0aC5QSSoxODB9LE1uLmZvdi5zZXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heCguMDEsTWF0aC5taW4oNjAsdCkpLHRoaXMuX2ZvdiE9PXQmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2Zvdj10LzE4MCpNYXRoLlBJLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uem9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sTW4uem9vbS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxNbi5jZW50ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sTW4uY2VudGVyLnNldD1mdW5jdGlvbih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxNbi5wYWRkaW5nLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlSW5zZXRzLnRvSlNPTigpfSxNbi5wYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyh0KXx8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0aGlzLl9lZGdlSW5zZXRzLHQsMSksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxNbi5jZW50ZXJQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5nZXRDZW50ZXIodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LEFuLnByb3RvdHlwZS5pc1BhZGRpbmdFcXVhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5lcXVhbHModCl9LEFuLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVBhZGRpbmc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0LGUsciksdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LEFuLnByb3RvdHlwZS5jb3ZlcmluZ1pvb21MZXZlbD1mdW5jdGlvbih0KXt2YXIgZT0odC5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLnpvb20rdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZS90LnRpbGVTaXplKSk7cmV0dXJuIE1hdGgubWF4KDAsZSl9LEFuLnByb3RvdHlwZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9W25ldyB0LlVud3JhcHBlZFRpbGVJRCgwLGUpXTtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIG49dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCwwKSksaT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCh0aGlzLndpZHRoLDApKSxhPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxvPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSxzPU1hdGguZmxvb3IoTWF0aC5taW4obi54LGkueCxhLngsby54KSksbD1NYXRoLmZsb29yKE1hdGgubWF4KG4ueCxpLngsYS54LG8ueCkpLGM9cy0xO2M8PWwrMTtjKyspMCE9PWMmJnIucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQoYyxlKSk7cmV0dXJuIHJ9LEFuLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKSxhPU1hdGgucG93KDIsciksbz1bYSppLngsYSppLnksMF0scz13bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeCh0aGlzLmludlByb2pNYXRyaXgsdGhpcy53b3JsZFNpemUsciksbD1lLm1pbnpvb218fDA7dGhpcy5waXRjaDw9NjAmJnRoaXMuX2VkZ2VJbnNldHMudG9wPC4xJiYobD1yKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm57YWFiYjpuZXcgVG4oW3QqYSwwLDBdLFsodCsxKSphLGEsMF0pLHpvb206MCx4OjAseTowLHdyYXA6dCxmdWxseVZpc2libGU6ITF9fSx1PVtdLGY9W10saD1yLHA9ZS5yZXBhcnNlT3ZlcnNjYWxlZD9uOnI7aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBkPTE7ZDw9MztkKyspdS5wdXNoKGMoLWQpKSx1LnB1c2goYyhkKSk7Zm9yKHUucHVzaChjKDApKTt1Lmxlbmd0aD4wOyl7dmFyIG09dS5wb3AoKSxnPW0ueCx2PW0ueSx5PW0uZnVsbHlWaXNpYmxlO2lmKCF5KXt2YXIgeD1tLmFhYmIuaW50ZXJzZWN0cyhzKTtpZigwPT09eCljb250aW51ZTt5PTI9PT14fXZhciBiPW0uYWFiYi5kaXN0YW5jZVgobyksXz1tLmFhYmIuZGlzdGFuY2VZKG8pLHc9TWF0aC5tYXgoTWF0aC5hYnMoYiksTWF0aC5hYnMoXykpLFQ9MysoMTw8aC1tLnpvb20pLTI7aWYobS56b29tPT09aHx8dz5UJiZtLnpvb20+PWwpZi5wdXNoKHt0aWxlSUQ6bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChtLnpvb209PT1oP3A6bS56b29tLG0ud3JhcCxtLnpvb20sZyx2KSxkaXN0YW5jZVNxOnQuc3FyTGVuKFtvWzBdLS41LWcsb1sxXS0uNS12XSl9KTtlbHNlIGZvcih2YXIgaz0wO2s8NDtrKyspe3ZhciBBPShnPDwxKStrJTIsTT0odjw8MSkrKGs+PjEpO3UucHVzaCh7YWFiYjptLmFhYmIucXVhZHJhbnQoayksem9vbTptLnpvb20rMSx4OkEseTpNLHdyYXA6bS53cmFwLGZ1bGx5VmlzaWJsZTp5fSl9fXJldHVybiBmLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2VTcS1lLmRpc3RhbmNlU3F9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aWxlSUR9KSl9LEFuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnBpeGVsc1RvR0xVbml0cz1bMi90LC0yL2VdLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpfSxNbi51bm1vZGlmaWVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bm1vZGlmaWVkfSxBbi5wcm90b3R5cGUuem9vbVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSxBbi5wcm90b3R5cGUuc2NhbGVab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sQW4ucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLmxhdCwtdGhpcy5tYXhWYWxpZExhdGl0dWRlLHRoaXMubWF4VmFsaWRMYXRpdHVkZSk7cmV0dXJuIG5ldyB0LlBvaW50KHQubWVyY2F0b3JYZnJvbUxuZyhlLmxuZykqdGhpcy53b3JsZFNpemUsdC5tZXJjYXRvcllmcm9tTGF0KHIpKnRoaXMud29ybGRTaXplKX0sQW4ucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKGUueC90aGlzLndvcmxkU2l6ZSxlLnkvdGhpcy53b3JsZFNpemUpLnRvTG5nTGF0KCl9LE1uLnBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2plY3QodGhpcy5jZW50ZXIpfSxBbi5wcm90b3R5cGUuc2V0TG9jYXRpb25BdFBvaW50PWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5wb2ludENvb3JkaW5hdGUociksaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSxhPXRoaXMubG9jYXRpb25Db29yZGluYXRlKGUpLG89bmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKGEueC0obi54LWkueCksYS55LShuLnktaS55KSk7dGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24obyksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLmNlbnRlcj10aGlzLmNlbnRlci53cmFwKCkpfSxBbi5wcm90b3R5cGUubG9jYXRpb25Qb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxBbi5wcm90b3R5cGUucG9pbnRMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxBbi5wcm90b3R5cGUubG9jYXRpb25Db29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KGUpfSxBbi5wcm90b3R5cGUuY29vcmRpbmF0ZUxvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG5nTGF0KCl9LEFuLnByb3RvdHlwZS5wb2ludENvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7dmFyIHI9W2UueCxlLnksMCwxXSxuPVtlLngsZS55LDEsMV07dC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksdC50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7dmFyIGk9clszXSxhPW5bM10sbz1yWzBdL2kscz1uWzBdL2EsbD1yWzFdL2ksYz1uWzFdL2EsdT1yWzJdL2ksZj1uWzJdL2EsaD11PT09Zj8wOigwLXUpLyhmLXUpO3JldHVybiBuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUodC5udW1iZXIobyxzLGgpL3RoaXMud29ybGRTaXplLHQubnVtYmVyKGwsYyxoKS90aGlzLndvcmxkU2l6ZSl9LEFuLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9W2UueCp0aGlzLndvcmxkU2l6ZSxlLnkqdGhpcy53b3JsZFNpemUsMCwxXTtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KSxuZXcgdC5Qb2ludChyWzBdL3JbM10sclsxXS9yWzNdKX0sQW4ucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybihuZXcgdC5MbmdMYXRCb3VuZHMpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQoMCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSl9LEFuLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRSYW5nZSYmMj09PXRoaXMubGF0UmFuZ2UubGVuZ3RoJiZ0aGlzLmxuZ1JhbmdlJiYyPT09dGhpcy5sbmdSYW5nZS5sZW5ndGg/bmV3IHQuTG5nTGF0Qm91bmRzKFt0aGlzLmxuZ1JhbmdlWzBdLHRoaXMubGF0UmFuZ2VbMF1dLFt0aGlzLmxuZ1JhbmdlWzFdLHRoaXMubGF0UmFuZ2VbMV1dKTpudWxsfSxBbi5wcm90b3R5cGUuc2V0TWF4Qm91bmRzPWZ1bmN0aW9uKHQpe3Q/KHRoaXMubG5nUmFuZ2U9W3QuZ2V0V2VzdCgpLHQuZ2V0RWFzdCgpXSx0aGlzLmxhdFJhbmdlPVt0LmdldFNvdXRoKCksdC5nZXROb3J0aCgpXSx0aGlzLl9jb25zdHJhaW4oKSk6KHRoaXMubG5nUmFuZ2U9bnVsbCx0aGlzLmxhdFJhbmdlPVstdGhpcy5tYXhWYWxpZExhdGl0dWRlLHRoaXMubWF4VmFsaWRMYXRpdHVkZV0pfSxBbi5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPXQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO3JldHVybiB0LnRyYW5zbGF0ZShsLGwsW3MqbyxhLnkqbywwXSksdC5zY2FsZShsLGwsW28vdC5FWFRFTlQsby90LkVYVEVOVCwxXSksdC5tdWx0aXBseShsLHI/dGhpcy5hbGlnbmVkUHJvak1hdHJpeDp0aGlzLnByb2pNYXRyaXgsbCksaVtuXT1uZXcgRmxvYXQzMkFycmF5KGwpLGlbbl19LEFuLnByb3RvdHlwZS5jdXN0b21MYXllck1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lcmNhdG9yTWF0cml4LnNsaWNlKCl9LEFuLnByb3RvdHlwZS5fY29uc3RyYWluPWZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIGUscixuLGksYT0tOTAsbz05MCxzPS0xODAsbD0xODAsYz10aGlzLnNpemUsdT10aGlzLl91bm1vZGlmaWVkO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBmPXRoaXMubGF0UmFuZ2U7YT10Lm1lcmNhdG9yWWZyb21MYXQoZlsxXSkqdGhpcy53b3JsZFNpemUsZT0obz10Lm1lcmNhdG9yWWZyb21MYXQoZlswXSkqdGhpcy53b3JsZFNpemUpLWE8Yy55P2MueS8oby1hKTowfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBoPXRoaXMubG5nUmFuZ2U7cz10Lm1lcmNhdG9yWGZyb21MbmcoaFswXSkqdGhpcy53b3JsZFNpemUscj0obD10Lm1lcmNhdG9yWGZyb21MbmcoaFsxXSkqdGhpcy53b3JsZFNpemUpLXM8Yy54P2MueC8obC1zKTowfXZhciBwPXRoaXMucG9pbnQsZD1NYXRoLm1heChyfHwwLGV8fDApO2lmKGQpcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHI/KGwrcykvMjpwLngsZT8obythKS8yOnAueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20oZCksdGhpcy5fdW5tb2RpZmllZD11LHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgbT1wLnksZz1jLnkvMjttLWc8YSYmKGk9YStnKSxtK2c+byYmKGk9by1nKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgdj1wLngseT1jLngvMjt2LXk8cyYmKG49cyt5KSx2K3k+bCYmKG49bC15KX12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuUG9pbnQodm9pZCAwIT09bj9uOnAueCx2b2lkIDAhPT1pP2k6cC55KSkpLHRoaXMuX3VubW9kaWZpZWQ9dSx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSxBbi5wcm90b3R5cGUuX2NhbGNNYXRyaWNlcz1mdW5jdGlvbigpe2lmKHRoaXMuaGVpZ2h0KXt2YXIgZT10aGlzLl9mb3YvMixyPXRoaXMuY2VudGVyT2Zmc2V0O3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZT0uNS9NYXRoLnRhbihlKSp0aGlzLmhlaWdodDt2YXIgbj1NYXRoLlBJLzIrdGhpcy5fcGl0Y2gsaT10aGlzLl9mb3YqKC41K3IueS90aGlzLmhlaWdodCksYT1NYXRoLnNpbihpKSp0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvTWF0aC5zaW4odC5jbGFtcChNYXRoLlBJLW4taSwuMDEsTWF0aC5QSS0uMDEpKSxvPXRoaXMucG9pbnQscz1vLngsbD1vLnksYz0xLjAxKihNYXRoLmNvcyhNYXRoLlBJLzItdGhpcy5fcGl0Y2gpKmErdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKSx1PXRoaXMuaGVpZ2h0LzUwLGY9bmV3IEZsb2F0NjRBcnJheSgxNik7dC5wZXJzcGVjdGl2ZShmLHRoaXMuX2Zvdix0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LHUsYyksZls4XT0yKi1yLngvdGhpcy53aWR0aCxmWzldPTIqci55L3RoaXMuaGVpZ2h0LHQuc2NhbGUoZixmLFsxLC0xLDFdKSx0LnRyYW5zbGF0ZShmLGYsWzAsMCwtdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlXSksdC5yb3RhdGVYKGYsZix0aGlzLl9waXRjaCksdC5yb3RhdGVaKGYsZix0aGlzLmFuZ2xlKSx0LnRyYW5zbGF0ZShmLGYsWy1zLC1sLDBdKSx0aGlzLm1lcmNhdG9yTWF0cml4PXQuc2NhbGUoW10sZixbdGhpcy53b3JsZFNpemUsdGhpcy53b3JsZFNpemUsdGhpcy53b3JsZFNpemVdKSx0LnNjYWxlKGYsZixbMSwxLHQubWVyY2F0b3JaZnJvbUFsdGl0dWRlKDEsdGhpcy5jZW50ZXIubGF0KSp0aGlzLndvcmxkU2l6ZSwxXSksdGhpcy5wcm9qTWF0cml4PWYsdGhpcy5pbnZQcm9qTWF0cml4PXQuaW52ZXJ0KFtdLHRoaXMucHJvak1hdHJpeCk7dmFyIGg9dGhpcy53aWR0aCUyLzIscD10aGlzLmhlaWdodCUyLzIsZD1NYXRoLmNvcyh0aGlzLmFuZ2xlKSxtPU1hdGguc2luKHRoaXMuYW5nbGUpLGc9cy1NYXRoLnJvdW5kKHMpK2QqaCttKnAsdj1sLU1hdGgucm91bmQobCkrZCpwK20qaCx5PW5ldyBGbG9hdDY0QXJyYXkoZik7aWYodC50cmFuc2xhdGUoeSx5LFtnPi41P2ctMTpnLHY+LjU/di0xOnYsMF0pLHRoaXMuYWxpZ25lZFByb2pNYXRyaXg9eSxmPXQuY3JlYXRlKCksdC5zY2FsZShmLGYsW3RoaXMud2lkdGgvMiwtdGhpcy5oZWlnaHQvMiwxXSksdC50cmFuc2xhdGUoZixmLFsxLC0xLDBdKSx0aGlzLmxhYmVsUGxhbmVNYXRyaXg9ZixmPXQuY3JlYXRlKCksdC5zY2FsZShmLGYsWzEsLTEsMV0pLHQudHJhbnNsYXRlKGYsZixbLTEsLTEsMF0pLHQuc2NhbGUoZixmLFsyL3RoaXMud2lkdGgsMi90aGlzLmhlaWdodCwxXSksdGhpcy5nbENvb3JkTWF0cml4PWYsdGhpcy5waXhlbE1hdHJpeD10Lm11bHRpcGx5KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMubGFiZWxQbGFuZU1hdHJpeCx0aGlzLnByb2pNYXRyaXgpLCEoZj10LmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLnBpeGVsTWF0cml4KSkpdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gaW52ZXJ0IG1hdHJpeCIpO3RoaXMucGl4ZWxNYXRyaXhJbnZlcnNlPWYsdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fX0sQW4ucHJvdG90eXBlLm1heFBpdGNoU2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtpZighdGhpcy5waXhlbE1hdHJpeEludmVyc2UpcmV0dXJuIDE7dmFyIGU9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCwwKSkscj1bZS54KnRoaXMud29ybGRTaXplLGUueSp0aGlzLndvcmxkU2l6ZSwwLDFdO3JldHVybiB0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpWzNdL3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZX0sQW4ucHJvdG90eXBlLmdldENhbWVyYVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGl0Y2gscj1NYXRoLnRhbihlKSoodGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfHwxKTtyZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5hZGQobmV3IHQuUG9pbnQoMCxyKSl9LEFuLnByb3RvdHlwZS5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZ2V0Q2FtZXJhUG9pbnQoKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuW2VbMF0scl07Zm9yKHZhciBuPXIueCxpPXIueSxhPXIueCxvPXIueSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTtuPU1hdGgubWluKG4sYy54KSxpPU1hdGgubWluKGksYy55KSxhPU1hdGgubWF4KGEsYy54KSxvPU1hdGgubWF4KG8sYy55KX1yZXR1cm5bbmV3IHQuUG9pbnQobixpKSxuZXcgdC5Qb2ludChhLGkpLG5ldyB0LlBvaW50KGEsbyksbmV3IHQuUG9pbnQobixvKSxuZXcgdC5Qb2ludChuLGkpXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW4ucHJvdG90eXBlLE1uKTt2YXIgU249ZnVuY3Rpb24oZSl7dmFyIHIsbixpLGEsbzt0aGlzLl9oYXNoTmFtZT1lJiZlbmNvZGVVUklDb21wb25lbnQoZSksdC5iaW5kQWxsKFsiX2dldEN1cnJlbnRIYXNoIiwiX29uSGFzaENoYW5nZSIsIl91cGRhdGVIYXNoIl0sdGhpcyksdGhpcy5fdXBkYXRlSGFzaD0ocj10aGlzLl91cGRhdGVIYXNoVW50aHJvdHRsZWQuYmluZCh0aGlzKSxuPTMwMCxpPSExLGE9bnVsbCxvPWZ1bmN0aW9uKCl7YT1udWxsLGkmJihyKCksYT1zZXRUaW1lb3V0KG8sbiksaT0hMSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGk9ITAsYXx8bygpLGF9KX07U24ucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30sU24ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVIYXNoKCkpLGRlbGV0ZSB0aGlzLl9tYXAsdGhpc30sU24ucHJvdG90eXBlLmdldEhhc2hTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fbWFwLmdldENlbnRlcigpLG49TWF0aC5yb3VuZCgxMDAqdGhpcy5fbWFwLmdldFpvb20oKSkvMTAwLGk9TWF0aC5jZWlsKChuKk1hdGguTE4yK01hdGgubG9nKDUxMi8zNjAvLjUpKS9NYXRoLkxOMTApLGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHIubG5nKmEpL2Escz1NYXRoLnJvdW5kKHIubGF0KmEpL2EsbD10aGlzLl9tYXAuZ2V0QmVhcmluZygpLGM9dGhpcy5fbWFwLmdldFBpdGNoKCksdT0iIjtpZih1Kz1lPyIvIitvKyIvIitzKyIvIituOm4rIi8iK3MrIi8iK28sKGx8fGMpJiYodSs9Ii8iK01hdGgucm91bmQoMTAqbCkvMTApLGMmJih1Kz0iLyIrTWF0aC5yb3VuZChjKSksdGhpcy5faGFzaE5hbWUpe3ZhciBmPXRoaXMuX2hhc2hOYW1lLGg9ITEscD10LndpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpLnNwbGl0KCImIikubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KCI9IilbMF07cmV0dXJuIGU9PT1mPyhoPSEwLGUrIj0iK3UpOnR9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTtyZXR1cm4gaHx8cC5wdXNoKGYrIj0iK3UpLCIjIitwLmpvaW4oIiYiKX1yZXR1cm4iIyIrdX0sU24ucHJvdG90eXBlLl9nZXRDdXJyZW50SGFzaD1mdW5jdGlvbigpe3ZhciBlLHI9dGhpcyxuPXQud2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgiIyIsIiIpO3JldHVybiB0aGlzLl9oYXNoTmFtZT8obi5zcGxpdCgiJiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIj0iKX0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0WzBdPT09ci5faGFzaE5hbWUmJihlPXQpfSkpLChlJiZlWzFdfHwiIikuc3BsaXQoIi8iKSk6bi5zcGxpdCgiLyIpfSxTbi5wcm90b3R5cGUuX29uSGFzaENoYW5nZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEN1cnJlbnRIYXNoKCk7aWYodC5sZW5ndGg+PTMmJiF0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KX0pKSl7dmFyIGU9dGhpcy5fbWFwLmRyYWdSb3RhdGUuaXNFbmFibGVkKCkmJnRoaXMuX21hcC50b3VjaFpvb21Sb3RhdGUuaXNFbmFibGVkKCk/Kyh0WzNdfHwwKTp0aGlzLl9tYXAuZ2V0QmVhcmluZygpO3JldHVybiB0aGlzLl9tYXAuanVtcFRvKHtjZW50ZXI6Wyt0WzJdLCt0WzFdXSx6b29tOit0WzBdLGJlYXJpbmc6ZSxwaXRjaDorKHRbNF18fDApfSksITB9cmV0dXJuITF9LFNuLnByb3RvdHlwZS5fdXBkYXRlSGFzaFVudGhyb3R0bGVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRIYXNoU3RyaW5nKCk7dHJ5e3Qud2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHQud2luZG93Lmhpc3Rvcnkuc3RhdGUsIiIsZSl9Y2F0Y2godCl7fX07dmFyIEVuPXtsaW5lYXJpdHk6LjMsZWFzaW5nOnQuYmV6aWVyKDAsMCwuMywxKX0sTG49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoyNTAwLG1heFNwZWVkOjE0MDB9LEVuKSxDbj10LmV4dGVuZCh7ZGVjZWxlcmF0aW9uOjIwLG1heFNwZWVkOjE0MDB9LEVuKSxQbj10LmV4dGVuZCh7ZGVjZWxlcmF0aW9uOjFlMyxtYXhTcGVlZDozNjB9LEVuKSxJbj10LmV4dGVuZCh7ZGVjZWxlcmF0aW9uOjFlMyxtYXhTcGVlZDo5MH0sRW4pLE9uPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuY2xlYXIoKX07ZnVuY3Rpb24gem4odCxlKXsoIXQuZHVyYXRpb258fHQuZHVyYXRpb248ZS5kdXJhdGlvbikmJih0LmR1cmF0aW9uPWUuZHVyYXRpb24sdC5lYXNpbmc9ZS5lYXNpbmcpfWZ1bmN0aW9uIERuKGUscixuKXt2YXIgaT1uLm1heFNwZWVkLGE9bi5saW5lYXJpdHksbz1uLmRlY2VsZXJhdGlvbixzPXQuY2xhbXAoZSphLyhyLzFlMyksLWksaSksbD1NYXRoLmFicyhzKS8obyphKTtyZXR1cm57ZWFzaW5nOm4uZWFzaW5nLGR1cmF0aW9uOjFlMypsLGFtb3VudDpzKihsLzIpfX1Pbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9pbmVydGlhQnVmZmVyPVtdfSxPbi5wcm90b3R5cGUucmVjb3JkPWZ1bmN0aW9uKGUpe3RoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWFCdWZmZXIucHVzaCh7dGltZTp0LmJyb3dzZXIubm93KCksc2V0dGluZ3M6ZX0pfSxPbi5wcm90b3R5cGUuX2RyYWluSW5lcnRpYUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9pbmVydGlhQnVmZmVyLHI9dC5icm93c2VyLm5vdygpO2UubGVuZ3RoPjAmJnItZVswXS50aW1lPjE2MDspZS5zaGlmdCgpfSxPbi5wcm90b3R5cGUuX29uTW92ZUVuZD1mdW5jdGlvbihlKXtpZih0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSwhKHRoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoPDIpKXtmb3IodmFyIHI9e3pvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxwYW46bmV3IHQuUG9pbnQoMCwwKSxwaW5jaEFyb3VuZDp2b2lkIDAsYXJvdW5kOnZvaWQgMH0sbj0wLGk9dGhpcy5faW5lcnRpYUJ1ZmZlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0uc2V0dGluZ3M7ci56b29tKz1hLnpvb21EZWx0YXx8MCxyLmJlYXJpbmcrPWEuYmVhcmluZ0RlbHRhfHwwLHIucGl0Y2grPWEucGl0Y2hEZWx0YXx8MCxhLnBhbkRlbHRhJiZyLnBhbi5fYWRkKGEucGFuRGVsdGEpLGEuYXJvdW5kJiYoci5hcm91bmQ9YS5hcm91bmQpLGEucGluY2hBcm91bmQmJihyLnBpbmNoQXJvdW5kPWEucGluY2hBcm91bmQpfXZhciBvPXRoaXMuX2luZXJ0aWFCdWZmZXJbdGhpcy5faW5lcnRpYUJ1ZmZlci5sZW5ndGgtMV0udGltZS10aGlzLl9pbmVydGlhQnVmZmVyWzBdLnRpbWUscz17fTtpZihyLnBhbi5tYWcoKSl7dmFyIGw9RG4oci5wYW4ubWFnKCksbyx0LmV4dGVuZCh7fSxMbixlfHx7fSkpO3Mub2Zmc2V0PXIucGFuLm11bHQobC5hbW91bnQvci5wYW4ubWFnKCkpLHMuY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyLHpuKHMsbCl9aWYoci56b29tKXt2YXIgYz1EbihyLnpvb20sbyxDbik7cy56b29tPXRoaXMuX21hcC50cmFuc2Zvcm0uem9vbStjLmFtb3VudCx6bihzLGMpfWlmKHIuYmVhcmluZyl7dmFyIHU9RG4oci5iZWFyaW5nLG8sUG4pO3MuYmVhcmluZz10aGlzLl9tYXAudHJhbnNmb3JtLmJlYXJpbmcrdC5jbGFtcCh1LmFtb3VudCwtMTc5LDE3OSksem4ocyx1KX1pZihyLnBpdGNoKXt2YXIgZj1EbihyLnBpdGNoLG8sSW4pO3MucGl0Y2g9dGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCtmLmFtb3VudCx6bihzLGYpfWlmKHMuem9vbXx8cy5iZWFyaW5nKXt2YXIgaD12b2lkIDA9PT1yLnBpbmNoQXJvdW5kP3IuYXJvdW5kOnIucGluY2hBcm91bmQ7cy5hcm91bmQ9aD90aGlzLl9tYXAudW5wcm9qZWN0KGgpOnRoaXMuX21hcC5nZXRDZW50ZXIoKX1yZXR1cm4gdGhpcy5jbGVhcigpLHQuZXh0ZW5kKHMse25vTW92ZVN0YXJ0OiEwfSl9fTt2YXIgUm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGksYSxvKXt2b2lkIDA9PT1vJiYobz17fSk7dmFyIHM9ci5tb3VzZVBvcyhpLmdldENhbnZhc0NvbnRhaW5lcigpLGEpLGw9aS51bnByb2plY3Qocyk7ZS5jYWxsKHRoaXMsbix0LmV4dGVuZCh7cG9pbnQ6cyxsbmdMYXQ6bCxvcmlnaW5hbEV2ZW50OmF9LG8pKSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExLHRoaXMudGFyZ2V0PWl9ZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksRm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGksYSl7dmFyIG89InRvdWNoZW5kIj09PW4/YS5jaGFuZ2VkVG91Y2hlczphLnRvdWNoZXMscz1yLnRvdWNoUG9zKGkuZ2V0Q2FudmFzQ29udGFpbmVyKCksbyksbD1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkudW5wcm9qZWN0KHQpfSkpLGM9cy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSksbmV3IHQuUG9pbnQoMCwwKSksdT1pLnVucHJvamVjdChjKTtlLmNhbGwodGhpcyxuLHtwb2ludHM6cyxwb2ludDpjLGxuZ0xhdHM6bCxsbmdMYXQ6dSxvcmlnaW5hbEV2ZW50OmF9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBpPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxpLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGkpLG59KHQuRXZlbnQpLEJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUse29yaWdpbmFsRXZlbnQ6bn0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LHIuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0odC5FdmVudCksTm49ZnVuY3Rpb24odCxlKXt0aGlzLl9tYXA9dCx0aGlzLl9jbGlja1RvbGVyYW5jZT1lLmNsaWNrVG9sZXJhbmNlfTtObi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fbW91c2Vkb3duUG9zfSxObi5wcm90b3R5cGUud2hlZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgQm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbW91c2Vkb3duUG9zPWUsdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUuY2xpY2s9ZnVuY3Rpb24odCxlKXt0aGlzLl9tb3VzZWRvd25Qb3MmJnRoaXMuX21vdXNlZG93blBvcy5kaXN0KGUpPj10aGlzLl9jbGlja1RvbGVyYW5jZXx8dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUuZGJsY2xpY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5tb3VzZW92ZXI9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2VvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBGbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgRm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgRm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgRm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5fZmlyZVByZXZlbnRhYmxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcC5maXJlKHQpLHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm57fX0sTm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEwfSxObi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTm4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sTm4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9O3ZhciBqbj1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dH07am4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMSxkZWxldGUgdGhpcy5fY29udGV4dE1lbnVFdmVudH0sam4ucHJvdG90eXBlLm1vdXNlbW92ZT1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LGpuLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSEwfSxqbi5wcm90b3R5cGUubW91c2V1cD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITEsdGhpcy5fY29udGV4dE1lbnVFdmVudCYmKHRoaXMuX21hcC5maXJlKG5ldyBSbigiY29udGV4dG1lbnUiLHRoaXMuX21hcCx0aGlzLl9jb250ZXh0TWVudUV2ZW50KSksZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnQpfSxqbi5wcm90b3R5cGUuY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT90aGlzLl9jb250ZXh0TWVudUV2ZW50PXQ6dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpLHRoaXMuX21hcC5saXN0ZW5zKCJjb250ZXh0bWVudSIpJiZ0LnByZXZlbnREZWZhdWx0KCl9LGpuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sam4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGpuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LGpuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fTt2YXIgVW49ZnVuY3Rpb24odCxlKXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj10LmdldENvbnRhaW5lcigpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPWUuY2xpY2tUb2xlcmFuY2V8fDF9O2Z1bmN0aW9uIFZuKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoO24rKylyW3Rbbl0uaWRlbnRpZmllcl09ZVtuXTtyZXR1cm4gcn1Vbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxVbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sVW4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sVW4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LFVuLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24odCxlKXt0aGlzLmlzRW5hYmxlZCgpJiZ0LnNoaWZ0S2V5JiYwPT09dC5idXR0b24mJihyLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9dGhpcy5fbGFzdFBvcz1lLHRoaXMuX2FjdGl2ZT0hMCl9LFVuLnByb3RvdHlwZS5tb3VzZW1vdmVXaW5kb3c9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9hY3RpdmUpe3ZhciBuPWU7aWYoISh0aGlzLl9sYXN0UG9zLmVxdWFscyhuKXx8IXRoaXMuX2JveCYmbi5kaXN0KHRoaXMuX3N0YXJ0UG9zKTx0aGlzLl9jbGlja1RvbGVyYW5jZSkpe3ZhciBpPXRoaXMuX3N0YXJ0UG9zO3RoaXMuX2xhc3RQb3M9bix0aGlzLl9ib3h8fCh0aGlzLl9ib3g9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWJveHpvb20iLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNyb3NzaGFpciIpLHRoaXMuX2ZpcmVFdmVudCgiYm94em9vbXN0YXJ0Iix0KSk7dmFyIGE9TWF0aC5taW4oaS54LG4ueCksbz1NYXRoLm1heChpLngsbi54KSxzPU1hdGgubWluKGkueSxuLnkpLGw9TWF0aC5tYXgoaS55LG4ueSk7ci5zZXRUcmFuc2Zvcm0odGhpcy5fYm94LCJ0cmFuc2xhdGUoIithKyJweCwiK3MrInB4KSIpLHRoaXMuX2JveC5zdHlsZS53aWR0aD1vLWErInB4Iix0aGlzLl9ib3guc3R5bGUuaGVpZ2h0PWwtcysicHgifX19LFVuLnByb3RvdHlwZS5tb3VzZXVwV2luZG93PWZ1bmN0aW9uKGUsbil7dmFyIGk9dGhpcztpZih0aGlzLl9hY3RpdmUmJjA9PT1lLmJ1dHRvbil7dmFyIGE9dGhpcy5fc3RhcnRQb3Msbz1uO2lmKHRoaXMucmVzZXQoKSxyLnN1cHByZXNzQ2xpY2soKSxhLnghPT1vLnh8fGEueSE9PW8ueSlyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoImJveHpvb21lbmQiLHtvcmlnaW5hbEV2ZW50OmV9KSkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5maXRTY3JlZW5Db29yZGluYXRlcyhhLG8saS5fbWFwLmdldEJlYXJpbmcoKSx7bGluZWFyOiEwfSl9fTt0aGlzLl9maXJlRXZlbnQoImJveHpvb21jYW5jZWwiLGUpfX0sVW4ucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlJiYyNz09PXQua2V5Q29kZSYmKHRoaXMucmVzZXQoKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21jYW5jZWwiLHQpKX0sVW4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9ib3gmJihyLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxyLmVuYWJsZURyYWcoKSxkZWxldGUgdGhpcy5fc3RhcnRQb3MsZGVsZXRlIHRoaXMuX2xhc3RQb3N9LFVuLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6cn0pKX07dmFyIEhuPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXQoKSx0aGlzLm51bVRvdWNoZXM9dC5udW1Ub3VjaGVzfTtIbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jZW50cm9pZCxkZWxldGUgdGhpcy5zdGFydFRpbWUsZGVsZXRlIHRoaXMudG91Y2hlcyx0aGlzLmFib3J0ZWQ9ITF9LEhuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKGUscixuKXsodGhpcy5jZW50cm9pZHx8bi5sZW5ndGg+dGhpcy5udW1Ub3VjaGVzKSYmKHRoaXMuYWJvcnRlZD0hMCksdGhpcy5hYm9ydGVkfHwodm9pZCAwPT09dGhpcy5zdGFydFRpbWUmJih0aGlzLnN0YXJ0VGltZT1lLnRpbWVTdGFtcCksbi5sZW5ndGg9PT10aGlzLm51bVRvdWNoZXMmJih0aGlzLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1uZXcgdC5Qb2ludCgwLDApLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3IuX2FkZChhKX1yZXR1cm4gci5kaXYoZS5sZW5ndGgpfShyKSx0aGlzLnRvdWNoZXM9Vm4obixyKSkpfSxIbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5hYm9ydGVkJiZ0aGlzLmNlbnRyb2lkKXt2YXIgbj1WbihyLGUpO2Zvcih2YXIgaSBpbiB0aGlzLnRvdWNoZXMpe3ZhciBhPXRoaXMudG91Y2hlc1tpXSxvPW5baV07KCFvfHxvLmRpc3QoYSk+MzApJiYodGhpcy5hYm9ydGVkPSEwKX19fSxIbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCghdGhpcy5jZW50cm9pZHx8dC50aW1lU3RhbXAtdGhpcy5zdGFydFRpbWU+NTAwKSYmKHRoaXMuYWJvcnRlZD0hMCksMD09PXIubGVuZ3RoKXt2YXIgbj0hdGhpcy5hYm9ydGVkJiZ0aGlzLmNlbnRyb2lkO2lmKHRoaXMucmVzZXQoKSxuKXJldHVybiBufX07dmFyIHFuPWZ1bmN0aW9uKHQpe3RoaXMuc2luZ2xlVGFwPW5ldyBIbih0KSx0aGlzLm51bVRhcHM9dC5udW1UYXBzLHRoaXMucmVzZXQoKX07cW4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sYXN0VGltZT0xLzAsZGVsZXRlIHRoaXMubGFzdFRhcCx0aGlzLmNvdW50PTAsdGhpcy5zaW5nbGVUYXAucmVzZXQoKX0scW4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2luZ2xlVGFwLnRvdWNoc3RhcnQodCxlLHIpfSxxbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpbmdsZVRhcC50b3VjaG1vdmUodCxlLHIpfSxxbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2luZ2xlVGFwLnRvdWNoZW5kKHQsZSxyKTtpZihuKXt2YXIgaT10LnRpbWVTdGFtcC10aGlzLmxhc3RUaW1lPDUwMCxhPSF0aGlzLmxhc3RUYXB8fHRoaXMubGFzdFRhcC5kaXN0KG4pPDMwO2lmKGkmJmF8fHRoaXMucmVzZXQoKSx0aGlzLmNvdW50KyssdGhpcy5sYXN0VGltZT10LnRpbWVTdGFtcCx0aGlzLmxhc3RUYXA9bix0aGlzLmNvdW50PT09dGhpcy5udW1UYXBzKXJldHVybiB0aGlzLnJlc2V0KCksbn19O3ZhciBHbj1mdW5jdGlvbigpe3RoaXMuX3pvb21Jbj1uZXcgcW4oe251bVRvdWNoZXM6MSxudW1UYXBzOjJ9KSx0aGlzLl96b29tT3V0PW5ldyBxbih7bnVtVG91Y2hlczoyLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07R24ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX3pvb21Jbi5yZXNldCgpLHRoaXMuX3pvb21PdXQucmVzZXQoKX0sR24ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3pvb21Jbi50b3VjaHN0YXJ0KHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNoc3RhcnQodCxlLHIpfSxHbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl96b29tSW4udG91Y2htb3ZlKHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNobW92ZSh0LGUscil9LEduLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXRoaXMuX3pvb21Jbi50b3VjaGVuZCh0LGUsciksYT10aGlzLl96b29tT3V0LnRvdWNoZW5kKHQsZSxyKTtyZXR1cm4gaT8odGhpcy5fYWN0aXZlPSEwLHQucHJldmVudERlZmF1bHQoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBuLnJlc2V0KCl9KSwwKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ZS5nZXRab29tKCkrMSxhcm91bmQ6ZS51bnByb2plY3QoaSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19KTphPyh0aGlzLl9hY3RpdmU9ITAsdC5wcmV2ZW50RGVmYXVsdCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzZXQoKX0pLDApLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWFzZVRvKHtkdXJhdGlvbjozMDAsem9vbTplLmdldFpvb20oKS0xLGFyb3VuZDplLnVucHJvamVjdChhKX0se29yaWdpbmFsRXZlbnQ6dH0pfX0pOnZvaWQgMH0sR24ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxHbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sR24ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sR24ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxHbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgWW49ZnVuY3Rpb24odCl7dGhpcy5yZXNldCgpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDF9O1luLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tb3ZlZD0hMSxkZWxldGUgdGhpcy5fbGFzdFBvaW50LGRlbGV0ZSB0aGlzLl9ldmVudEJ1dHRvbn0sWW4ucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LFluLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3JldHVybnt9fSxZbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2xhc3RQb2ludCl7dmFyIG49ci5tb3VzZUJ1dHRvbih0KTt0aGlzLl9jb3JyZWN0QnV0dG9uKHQsbikmJih0aGlzLl9sYXN0UG9pbnQ9ZSx0aGlzLl9ldmVudEJ1dHRvbj1uKX19LFluLnByb3RvdHlwZS5tb3VzZW1vdmVXaW5kb3c9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9sYXN0UG9pbnQ7aWYociYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9tb3ZlZHx8IShlLmRpc3Qocik8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKSlyZXR1cm4gdGhpcy5fbW92ZWQ9ITAsdGhpcy5fbGFzdFBvaW50PWUsdGhpcy5fbW92ZShyLGUpfSxZbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbih0KXtyLm1vdXNlQnV0dG9uKHQpPT09dGhpcy5fZXZlbnRCdXR0b24mJih0aGlzLl9tb3ZlZCYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX0sWW4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LFluLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LFluLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sWW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIFduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGUubW91c2Vkb3duLmNhbGwodGhpcyxlLHIpLHRoaXMuX2xhc3RQb2ludCYmKHRoaXMuX2FjdGl2ZT0hMCl9LGUucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lJiYhdC5jdHJsS2V5fSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3JldHVybnthcm91bmQ6ZSxwYW5EZWx0YTplLnN1Yih0KX19LGV9KFluKSxYbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lJiZ0LmN0cmxLZXl8fDI9PT1lfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPS44KihlLngtdC54KTtpZihyKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse2JlYXJpbmdEZWx0YTpyfX0sZS5wcm90b3R5cGUuY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSxlfShZbiksWm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0tLjUqKGUueS10LnkpO2lmKHIpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7cGl0Y2hEZWx0YTpyfX0sZS5wcm90b3R5cGUuY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSxlfShZbiksSm49ZnVuY3Rpb24odCl7dGhpcy5fbWluVG91Y2hlcz0xLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDEsdGhpcy5yZXNldCgpfTtKbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fdG91Y2hlcz17fSx0aGlzLl9zdW09bmV3IHQuUG9pbnQoMCwwKX0sSm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxKbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxKbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybSh0LGUsciksdGhpcy5fYWN0aXZlJiZyLmxlbmd0aDx0aGlzLl9taW5Ub3VjaGVzJiZ0aGlzLnJlc2V0KCl9LEpuLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sSm4ucHJvdG90eXBlLl9jYWxjdWxhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oZSxyLG4pe24ubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmU9ITApO3ZhciBpPVZuKG4sciksYT1uZXcgdC5Qb2ludCgwLDApLG89bmV3IHQuUG9pbnQoMCwwKSxzPTA7Zm9yKHZhciBsIGluIGkpe3ZhciBjPWlbbF0sdT10aGlzLl90b3VjaGVzW2xdO3UmJihhLl9hZGQoYyksby5fYWRkKGMuc3ViKHUpKSxzKyssaVtsXT1jKX1pZih0aGlzLl90b3VjaGVzPWksIShzPHRoaXMuX21pblRvdWNoZXMpJiZvLm1hZygpKXt2YXIgZj1vLmRpdihzKTtpZih0aGlzLl9zdW0uX2FkZChmKSwhKHRoaXMuX3N1bS5tYWcoKTx0aGlzLl9jbGlja1RvbGVyYW5jZSkpcmV0dXJue2Fyb3VuZDphLmRpdihzKSxwYW5EZWx0YTpmfX19LEpuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxKbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxKbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LEpuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBLbj1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX07ZnVuY3Rpb24gUW4odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaWRlbnRpZmllcj09PXIpcmV0dXJuIGVbbl19S24ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRlbGV0ZSB0aGlzLl9maXJzdFR3b1RvdWNoZXN9LEtuLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7fSxLbi5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt9fSxLbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fZmlyc3RUd29Ub3VjaGVzfHxyLmxlbmd0aDwyfHwodGhpcy5fZmlyc3RUd29Ub3VjaGVzPVtyWzBdLmlkZW50aWZpZXIsclsxXS5pZGVudGlmaWVyXSx0aGlzLl9zdGFydChbZVswXSxlWzFdXSkpfSxLbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9maXJzdFR3b1RvdWNoZXMpe3QucHJldmVudERlZmF1bHQoKTt2YXIgbj10aGlzLl9maXJzdFR3b1RvdWNoZXMsaT1uWzBdLGE9blsxXSxvPVFuKHIsZSxpKSxzPVFuKHIsZSxhKTtpZihvJiZzKXt2YXIgbD10aGlzLl9hcm91bmRDZW50ZXI/bnVsbDpvLmFkZChzKS5kaXYoMik7cmV0dXJuIHRoaXMuX21vdmUoW28sc10sbCx0KX19fSxLbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2ZpcnN0VHdvVG91Y2hlcyl7dmFyIGk9dGhpcy5fZmlyc3RUd29Ub3VjaGVzLGE9aVswXSxvPWlbMV0scz1RbihuLGUsYSksbD1RbihuLGUsbyk7cyYmbHx8KHRoaXMuX2FjdGl2ZSYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX19LEtuLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sS24ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJiJjZW50ZXIiPT09dC5hcm91bmR9LEtuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LEtuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sS24ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm4gTWF0aC5sb2codC9lKS9NYXRoLkxOMn12YXIgdGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksZGVsZXRlIHRoaXMuX2Rpc3RhbmNlLGRlbGV0ZSB0aGlzLl9zdGFydERpc3RhbmNlfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnREaXN0YW5jZT10aGlzLl9kaXN0YW5jZT10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fZGlzdGFuY2U7aWYodGhpcy5fZGlzdGFuY2U9dFswXS5kaXN0KHRbMV0pLHRoaXMuX2FjdGl2ZXx8IShNYXRoLmFicygkbih0aGlzLl9kaXN0YW5jZSx0aGlzLl9zdGFydERpc3RhbmNlKSk8LjEpKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTokbih0aGlzLl9kaXN0YW5jZSxyKSxwaW5jaEFyb3VuZDplfX0sZX0oS24pO2Z1bmN0aW9uIGVpKHQsZSl7cmV0dXJuIDE4MCp0LmFuZ2xlV2l0aChlKS9NYXRoLlBJfXZhciByaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSxkZWxldGUgdGhpcy5fbWluRGlhbWV0ZXIsZGVsZXRlIHRoaXMuX3N0YXJ0VmVjdG9yLGRlbGV0ZSB0aGlzLl92ZWN0b3J9LGUucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt0aGlzLl9zdGFydFZlY3Rvcj10aGlzLl92ZWN0b3I9dFswXS5zdWIodFsxXSksdGhpcy5fbWluRGlhbWV0ZXI9dFswXS5kaXN0KHRbMV0pfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZlY3RvcjtpZih0aGlzLl92ZWN0b3I9dFswXS5zdWIodFsxXSksdGhpcy5fYWN0aXZlfHwhdGhpcy5faXNCZWxvd1RocmVzaG9sZCh0aGlzLl92ZWN0b3IpKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse2JlYXJpbmdEZWx0YTplaSh0aGlzLl92ZWN0b3IscikscGluY2hBcm91bmQ6ZX19LGUucHJvdG90eXBlLl9pc0JlbG93VGhyZXNob2xkPWZ1bmN0aW9uKHQpe3RoaXMuX21pbkRpYW1ldGVyPU1hdGgubWluKHRoaXMuX21pbkRpYW1ldGVyLHQubWFnKCkpO3ZhciBlPTI1LyhNYXRoLlBJKnRoaXMuX21pbkRpYW1ldGVyKSozNjAscj1laSh0LHRoaXMuX3N0YXJ0VmVjdG9yKTtyZXR1cm4gTWF0aC5hYnMocik8ZX0sZX0oS24pO2Z1bmN0aW9uIG5pKHQpe3JldHVybiBNYXRoLmFicyh0LnkpPk1hdGguYWJzKHQueCl9dmFyIGlpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3ZhbGlkPXZvaWQgMCxkZWxldGUgdGhpcy5fZmlyc3RNb3ZlLGRlbGV0ZSB0aGlzLl9sYXN0UG9pbnRzfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdFBvaW50cz10LG5pKHRbMF0uc3ViKHRbMV0pKSYmKHRoaXMuX3ZhbGlkPSExKX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRbMF0uc3ViKHRoaXMuX2xhc3RQb2ludHNbMF0pLGk9dFsxXS5zdWIodGhpcy5fbGFzdFBvaW50c1sxXSk7aWYodGhpcy5fdmFsaWQ9dGhpcy5nZXN0dXJlQmVnaW5zVmVydGljYWxseShuLGksci50aW1lU3RhbXApLHRoaXMuX3ZhbGlkKXt0aGlzLl9sYXN0UG9pbnRzPXQsdGhpcy5fYWN0aXZlPSEwO3JldHVybntwaXRjaERlbHRhOi0uNSooKG4ueStpLnkpLzIpfX19LGUucHJvdG90eXBlLmdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5PWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDAhPT10aGlzLl92YWxpZClyZXR1cm4gdGhpcy5fdmFsaWQ7dmFyIG49dC5tYWcoKT49MixpPWUubWFnKCk+PTI7aWYobnx8aSl7aWYoIW58fCFpKXJldHVybiB2b2lkIDA9PT10aGlzLl9maXJzdE1vdmUmJih0aGlzLl9maXJzdE1vdmU9ciksci10aGlzLl9maXJzdE1vdmU8MTAwJiZ2b2lkIDA7dmFyIGE9dC55PjA9PWUueT4wO3JldHVybiBuaSh0KSYmbmkoZSkmJmF9fSxlfShLbiksYWk9e3BhblN0ZXA6MTAwLGJlYXJpbmdTdGVwOjE1LHBpdGNoU3RlcDoxMH0sb2k9ZnVuY3Rpb24oKXt2YXIgdD1haTt0aGlzLl9wYW5TdGVwPXQucGFuU3RlcCx0aGlzLl9iZWFyaW5nU3RlcD10LmJlYXJpbmdTdGVwLHRoaXMuX3BpdGNoU3RlcD10LnBpdGNoU3RlcH07ZnVuY3Rpb24gc2kodCl7cmV0dXJuIHQqKDItdCl9b2kucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExfSxvaS5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIHI9MCxuPTAsaT0wLGE9MCxvPTA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzpyPTE7YnJlYWs7Y2FzZSAxODk6Y2FzZSAxMDk6Y2FzZSAxNzM6cj0tMTticmVhaztjYXNlIDM3OnQuc2hpZnRLZXk/bj0tMToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgMzk6dC5zaGlmdEtleT9uPTE6KHQucHJldmVudERlZmF1bHQoKSxhPTEpO2JyZWFrO2Nhc2UgMzg6dC5zaGlmdEtleT9pPTE6KHQucHJldmVudERlZmF1bHQoKSxvPS0xKTticmVhaztjYXNlIDQwOnQuc2hpZnRLZXk/aT0tMToodC5wcmV2ZW50RGVmYXVsdCgpLG89MSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59cmV0dXJue2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihzKXt2YXIgbD1zLmdldFpvb20oKTtzLmVhc2VUbyh7ZHVyYXRpb246MzAwLGVhc2VJZDoia2V5Ym9hcmRIYW5kbGVyIixlYXNpbmc6c2ksem9vbTpyP01hdGgucm91bmQobCkrcioodC5zaGlmdEtleT8yOjEpOmwsYmVhcmluZzpzLmdldEJlYXJpbmcoKStuKmUuX2JlYXJpbmdTdGVwLHBpdGNoOnMuZ2V0UGl0Y2goKStpKmUuX3BpdGNoU3RlcCxvZmZzZXQ6Wy1hKmUuX3BhblN0ZXAsLW8qZS5fcGFuU3RlcF0sY2VudGVyOnMuZ2V0Q2VudGVyKCl9LHtvcmlnaW5hbEV2ZW50OnR9KX19fX0sb2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LG9pLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LG9pLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sb2kucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGxpPWZ1bmN0aW9uKGUscil7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9oYW5kbGVyPXIsdGhpcy5fZGVsdGE9MCx0aGlzLl9kZWZhdWx0Wm9vbVJhdGU9LjAxLHRoaXMuX3doZWVsWm9vbVJhdGU9MS80NTAsdC5iaW5kQWxsKFsiX29uV2hlZWwiLCJfb25UaW1lb3V0IiwiX29uU2Nyb2xsRnJhbWUiLCJfb25TY3JvbGxGaW5pc2hlZCJdLHRoaXMpfTtsaS5wcm90b3R5cGUuc2V0Wm9vbVJhdGU9ZnVuY3Rpb24odCl7dGhpcy5fZGVmYXVsdFpvb21SYXRlPXR9LGxpLnByb3RvdHlwZS5zZXRXaGVlbFpvb21SYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3doZWVsWm9vbVJhdGU9dH0sbGkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sbGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV8fHZvaWQgMCE9PXRoaXMuX2ZpbmlzaFRpbWVvdXR9LGxpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3pvb21pbmd9LGxpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPXQmJiJjZW50ZXIiPT09dC5hcm91bmQpfSxsaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sbGkucHJvdG90eXBlLndoZWVsPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkpe3ZhciByPWUuZGVsdGFNb2RlPT09dC53aW5kb3cuV2hlZWxFdmVudC5ET01fREVMVEFfTElORT80MCplLmRlbHRhWTplLmRlbHRhWSxuPXQuYnJvd3Nlci5ub3coKSxpPW4tKHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZXx8MCk7dGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lPW4sMCE9PXImJnIlNC4wMDAyNDQxNDA2MjU9PTA/dGhpcy5fdHlwZT0id2hlZWwiOjAhPT1yJiZNYXRoLmFicyhyKTw0P3RoaXMuX3R5cGU9InRyYWNrcGFkIjppPjQwMD8odGhpcy5fdHlwZT1udWxsLHRoaXMuX2xhc3RWYWx1ZT1yLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsNDAsZSkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKGkqcik8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxyKz10aGlzLl9sYXN0VmFsdWUpKSxlLnNoaWZ0S2V5JiZyJiYoci89NCksdGhpcy5fdHlwZSYmKHRoaXMuX2xhc3RXaGVlbEV2ZW50PWUsdGhpcy5fZGVsdGEtPXIsdGhpcy5fYWN0aXZlfHx0aGlzLl9zdGFydChlKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sbGkucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT0id2hlZWwiLHRoaXMuX2RlbHRhLT10aGlzLl9sYXN0VmFsdWUsdGhpcy5fYWN0aXZlfHx0aGlzLl9zdGFydCh0KX0sbGkucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLl9kZWx0YSl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5fYWN0aXZlPSEwLHRoaXMuaXNab29taW5nKCl8fCh0aGlzLl96b29taW5nPSEwKSx0aGlzLl9maW5pc2hUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX2ZpbmlzaFRpbWVvdXQpLGRlbGV0ZSB0aGlzLl9maW5pc2hUaW1lb3V0KTt2YXIgbj1yLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2Fyb3VuZD10LkxuZ0xhdC5jb252ZXJ0KHRoaXMuX2Fyb3VuZENlbnRlcj90aGlzLl9tYXAuZ2V0Q2VudGVyKCk6dGhpcy5fbWFwLnVucHJvamVjdChuKSksdGhpcy5fYXJvdW5kUG9pbnQ9dGhpcy5fbWFwLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHRoaXMuX2Fyb3VuZCksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9ITAsdGhpcy5faGFuZGxlci5fdHJpZ2dlclJlbmRlckZyYW1lKCkpfX0sbGkucHJvdG90eXBlLnJlbmRlckZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uU2Nyb2xsRnJhbWUoKX0sbGkucHJvdG90eXBlLl9vblNjcm9sbEZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1udWxsLHRoaXMuaXNBY3RpdmUoKSkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj0id2hlZWwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1P3RoaXMuX3doZWVsWm9vbVJhdGU6dGhpcy5fZGVmYXVsdFpvb21SYXRlLGk9Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModGhpcy5fZGVsdGEqbikpKTt0aGlzLl9kZWx0YTwwJiYwIT09aSYmKGk9MS9pKTt2YXIgYT0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX3RhcmdldFpvb20/ci56b29tU2NhbGUodGhpcy5fdGFyZ2V0Wm9vbSk6ci5zY2FsZTt0aGlzLl90YXJnZXRab29tPU1hdGgubWluKHIubWF4Wm9vbSxNYXRoLm1heChyLm1pblpvb20sci5zY2FsZVpvb20oYSppKSkpLCJ3aGVlbCI9PT10aGlzLl90eXBlJiYodGhpcy5fc3RhcnRab29tPXIuem9vbSx0aGlzLl9lYXNpbmc9dGhpcy5fc21vb3RoT3V0RWFzaW5nKDIwMCkpLHRoaXMuX2RlbHRhPTB9dmFyIG8scz0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX3RhcmdldFpvb20/dGhpcy5fdGFyZ2V0Wm9vbTpyLnpvb20sbD10aGlzLl9zdGFydFpvb20sYz10aGlzLl9lYXNpbmcsdT0hMTtpZigid2hlZWwiPT09dGhpcy5fdHlwZSYmbCYmYyl7dmFyIGY9TWF0aC5taW4oKHQuYnJvd3Nlci5ub3coKS10aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpLzIwMCwxKSxoPWMoZik7bz10Lm51bWJlcihsLHMsaCksZjwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPSEwKTp1PSEwfWVsc2Ugbz1zLHU9ITA7cmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx1JiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2ZpbmlzaFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLl96b29taW5nPSExLGUuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpLGRlbGV0ZSBlLl90YXJnZXRab29tLGRlbGV0ZSBlLl9maW5pc2hUaW1lb3V0fSksMjAwKSkse25vSW5lcnRpYTohMCxuZWVkc1JlbmRlckZyYW1lOiF1LHpvb21EZWx0YTpvLXIuem9vbSxhcm91bmQ6dGhpcy5fYXJvdW5kUG9pbnQsb3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0V2hlZWxFdmVudH19fSxsaS5wcm90b3R5cGUuX3Ntb290aE91dEVhc2luZz1mdW5jdGlvbihlKXt2YXIgcj10LmVhc2U7aWYodGhpcy5fcHJldkVhc2Upe3ZhciBuPXRoaXMuX3ByZXZFYXNlLGk9KHQuYnJvd3Nlci5ub3coKS1uLnN0YXJ0KS9uLmR1cmF0aW9uLGE9bi5lYXNpbmcoaSsuMDEpLW4uZWFzaW5nKGkpLG89LjI3L01hdGguc3FydChhKmErMWUtNCkqLjAxLHM9TWF0aC5zcXJ0KC4wNzI5LW8qbyk7cj10LmJlemllcihvLHMsLjI1LDEpfXJldHVybiB0aGlzLl9wcmV2RWFzZT17c3RhcnQ6dC5icm93c2VyLm5vdygpLGR1cmF0aW9uOmUsZWFzaW5nOnJ9LHJ9LGxpLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX07dmFyIGNpPWZ1bmN0aW9uKHQsZSl7dGhpcy5fY2xpY2tab29tPXQsdGhpcy5fdGFwWm9vbT1lfTtjaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fY2xpY2tab29tLmVuYWJsZSgpLHRoaXMuX3RhcFpvb20uZW5hYmxlKCl9LGNpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fY2xpY2tab29tLmRpc2FibGUoKSx0aGlzLl90YXBab29tLmRpc2FibGUoKX0sY2kucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jbGlja1pvb20uaXNFbmFibGVkKCkmJnRoaXMuX3RhcFpvb20uaXNFbmFibGVkKCl9LGNpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jbGlja1pvb20uaXNBY3RpdmUoKXx8dGhpcy5fdGFwWm9vbS5pc0FjdGl2ZSgpfTt2YXIgdWk9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9O3VpLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX0sdWkucHJvdG90eXBlLmRibGNsaWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKHIpe3IuZWFzZVRvKHtkdXJhdGlvbjozMDAsem9vbTpyLmdldFpvb20oKSsodC5zaGlmdEtleT8tMToxKSxhcm91bmQ6ci51bnByb2plY3QoZSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19fSx1aS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sdWkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sdWkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSx1aS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgZmk9ZnVuY3Rpb24oKXt0aGlzLl90YXA9bmV3IHFuKHtudW1Ub3VjaGVzOjEsbnVtVGFwczoxfSksdGhpcy5yZXNldCgpfTtmaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsZGVsZXRlIHRoaXMuX3N3aXBlUG9pbnQsZGVsZXRlIHRoaXMuX3N3aXBlVG91Y2gsZGVsZXRlIHRoaXMuX3RhcFRpbWUsdGhpcy5fdGFwLnJlc2V0KCl9LGZpLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9zd2lwZVBvaW50fHwodGhpcy5fdGFwVGltZSYmdC50aW1lU3RhbXAtdGhpcy5fdGFwVGltZT41MDAmJnRoaXMucmVzZXQoKSx0aGlzLl90YXBUaW1lP3IubGVuZ3RoPjAmJih0aGlzLl9zd2lwZVBvaW50PWVbMF0sdGhpcy5fc3dpcGVUb3VjaD1yWzBdLmlkZW50aWZpZXIpOnRoaXMuX3RhcC50b3VjaHN0YXJ0KHQsZSxyKSl9LGZpLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3RhcFRpbWUpe2lmKHRoaXMuX3N3aXBlUG9pbnQpe2lmKHJbMF0uaWRlbnRpZmllciE9PXRoaXMuX3N3aXBlVG91Y2gpcmV0dXJuO3ZhciBuPWVbMF0saT1uLnktdGhpcy5fc3dpcGVQb2ludC55O3JldHVybiB0aGlzLl9zd2lwZVBvaW50PW4sdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2ZT0hMCx7em9vbURlbHRhOmkvMTI4fX19ZWxzZSB0aGlzLl90YXAudG91Y2htb3ZlKHQsZSxyKX0sZmkucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl90YXBUaW1lP3RoaXMuX3N3aXBlUG9pbnQmJjA9PT1yLmxlbmd0aCYmdGhpcy5yZXNldCgpOnRoaXMuX3RhcC50b3VjaGVuZCh0LGUscikmJih0aGlzLl90YXBUaW1lPXQudGltZVN0YW1wKX0sZmkucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxmaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sZmkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sZmkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxmaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgaGk9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2VsPXQsdGhpcy5fbW91c2VQYW49ZSx0aGlzLl90b3VjaFBhbj1yfTtoaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX2luZXJ0aWFPcHRpb25zPXR8fHt9LHRoaXMuX21vdXNlUGFuLmVuYWJsZSgpLHRoaXMuX3RvdWNoUGFuLmVuYWJsZSgpLHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuIil9LGhpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fbW91c2VQYW4uZGlzYWJsZSgpLHRoaXMuX3RvdWNoUGFuLmRpc2FibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpfSxoaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUGFuLmlzRW5hYmxlZCgpJiZ0aGlzLl90b3VjaFBhbi5pc0VuYWJsZWQoKX0saGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUGFuLmlzQWN0aXZlKCl8fHRoaXMuX3RvdWNoUGFuLmlzQWN0aXZlKCl9O3ZhciBwaT1mdW5jdGlvbih0LGUscil7dGhpcy5fcGl0Y2hXaXRoUm90YXRlPXQucGl0Y2hXaXRoUm90YXRlLHRoaXMuX21vdXNlUm90YXRlPWUsdGhpcy5fbW91c2VQaXRjaD1yfTtwaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fbW91c2VSb3RhdGUuZW5hYmxlKCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9tb3VzZVBpdGNoLmVuYWJsZSgpfSxwaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUm90YXRlLmRpc2FibGUoKSx0aGlzLl9tb3VzZVBpdGNoLmRpc2FibGUoKX0scGkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVJvdGF0ZS5pc0VuYWJsZWQoKSYmKCF0aGlzLl9waXRjaFdpdGhSb3RhdGV8fHRoaXMuX21vdXNlUGl0Y2guaXNFbmFibGVkKCkpfSxwaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5fbW91c2VQaXRjaC5pc0FjdGl2ZSgpfTt2YXIgZGk9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZWw9dCx0aGlzLl90b3VjaFpvb209ZSx0aGlzLl90b3VjaFJvdGF0ZT1yLHRoaXMuX3RhcERyYWdab29tPW4sdGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMSx0aGlzLl9lbmFibGVkPSEwfTtkaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX3RvdWNoWm9vbS5lbmFibGUodCksdGhpcy5fcm90YXRpb25EaXNhYmxlZHx8dGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKHQpLHRoaXMuX3RhcERyYWdab29tLmVuYWJsZSgpLHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlIil9LGRpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fdG91Y2hab29tLmRpc2FibGUoKSx0aGlzLl90b3VjaFJvdGF0ZS5kaXNhYmxlKCksdGhpcy5fdGFwRHJhZ1pvb20uZGlzYWJsZSgpLHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlIil9LGRpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG91Y2hab29tLmlzRW5hYmxlZCgpJiYodGhpcy5fcm90YXRpb25EaXNhYmxlZHx8dGhpcy5fdG91Y2hSb3RhdGUuaXNFbmFibGVkKCkpJiZ0aGlzLl90YXBEcmFnWm9vbS5pc0VuYWJsZWQoKX0sZGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0FjdGl2ZSgpfHx0aGlzLl90b3VjaFJvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLl90YXBEcmFnWm9vbS5pc0FjdGl2ZSgpfSxkaS5wcm90b3R5cGUuZGlzYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMCx0aGlzLl90b3VjaFJvdGF0ZS5kaXNhYmxlKCl9LGRpLnByb3RvdHlwZS5lbmFibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITEsdGhpcy5fdG91Y2hab29tLmlzRW5hYmxlZCgpJiZ0aGlzLl90b3VjaFJvdGF0ZS5lbmFibGUoKX07dmFyIG1pPWZ1bmN0aW9uKHQpe3JldHVybiB0Lnpvb218fHQuZHJhZ3x8dC5waXRjaHx8dC5yb3RhdGV9LGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0odC5FdmVudCk7ZnVuY3Rpb24gdmkodCl7cmV0dXJuIHQucGFuRGVsdGEmJnQucGFuRGVsdGEubWFnKCl8fHQuem9vbURlbHRhfHx0LmJlYXJpbmdEZWx0YXx8dC5waXRjaERlbHRhfXZhciB5aT1mdW5jdGlvbihlLG4pe3RoaXMuX21hcD1lLHRoaXMuX2VsPXRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9oYW5kbGVyc0J5SWQ9e30sdGhpcy5fY2hhbmdlcz1bXSx0aGlzLl9pbmVydGlhPW5ldyBPbihlKSx0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnM9e30sdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcz17fSx0aGlzLl9hZGREZWZhdWx0SGFuZGxlcnMobiksdC5iaW5kQWxsKFsiaGFuZGxlRXZlbnQiLCJoYW5kbGVXaW5kb3dFdmVudCJdLHRoaXMpO3ZhciBpPXRoaXMuX2VsO3RoaXMuX2xpc3RlbmVycz1bW2ksInRvdWNoc3RhcnQiLHtwYXNzaXZlOiExfV0sW2ksInRvdWNobW92ZSIse3Bhc3NpdmU6ITF9XSxbaSwidG91Y2hlbmQiLHZvaWQgMF0sW2ksInRvdWNoY2FuY2VsIix2b2lkIDBdLFtpLCJtb3VzZWRvd24iLHZvaWQgMF0sW2ksIm1vdXNlbW92ZSIsdm9pZCAwXSxbaSwibW91c2V1cCIsdm9pZCAwXSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIse2NhcHR1cmU6ITB9XSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLHZvaWQgMF0sW2ksIm1vdXNlb3ZlciIsdm9pZCAwXSxbaSwibW91c2VvdXQiLHZvaWQgMF0sW2ksImRibGNsaWNrIix2b2lkIDBdLFtpLCJjbGljayIsdm9pZCAwXSxbaSwia2V5ZG93biIse2NhcHR1cmU6ITF9XSxbaSwia2V5dXAiLHZvaWQgMF0sW2ksIndoZWVsIix7cGFzc2l2ZTohMX1dLFtpLCJjb250ZXh0bWVudSIsdm9pZCAwXSxbdC53aW5kb3csImJsdXIiLHZvaWQgMF1dO2Zvcih2YXIgYT0wLG89dGhpcy5fbGlzdGVuZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtyLmFkZEV2ZW50TGlzdGVuZXIobCxjLGw9PT10LndpbmRvdy5kb2N1bWVudD90aGlzLmhhbmRsZVdpbmRvd0V2ZW50OnRoaXMuaGFuZGxlRXZlbnQsdSl9fTt5aS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49dGhpcy5fbGlzdGVuZXJzO2U8bi5sZW5ndGg7ZSs9MSl7dmFyIGk9bltlXSxhPWlbMF0sbz1pWzFdLHM9aVsyXTtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxvLGE9PT10LndpbmRvdy5kb2N1bWVudD90aGlzLmhhbmRsZVdpbmRvd0V2ZW50OnRoaXMuaGFuZGxlRXZlbnQscyl9fSx5aS5wcm90b3R5cGUuX2FkZERlZmF1bHRIYW5kbGVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAscj1lLmdldENhbnZhc0NvbnRhaW5lcigpO3RoaXMuX2FkZCgibWFwRXZlbnQiLG5ldyBObihlLHQpKTt2YXIgbj1lLmJveFpvb209bmV3IFVuKGUsdCk7dGhpcy5fYWRkKCJib3hab29tIixuKTt2YXIgaT1uZXcgR24sYT1uZXcgdWk7ZS5kb3VibGVDbGlja1pvb209bmV3IGNpKGEsaSksdGhpcy5fYWRkKCJ0YXBab29tIixpKSx0aGlzLl9hZGQoImNsaWNrWm9vbSIsYSk7dmFyIG89bmV3IGZpO3RoaXMuX2FkZCgidGFwRHJhZ1pvb20iLG8pO3ZhciBzPWUudG91Y2hQaXRjaD1uZXcgaWk7dGhpcy5fYWRkKCJ0b3VjaFBpdGNoIixzKTt2YXIgbD1uZXcgWG4odCksYz1uZXcgWm4odCk7ZS5kcmFnUm90YXRlPW5ldyBwaSh0LGwsYyksdGhpcy5fYWRkKCJtb3VzZVJvdGF0ZSIsbCxbIm1vdXNlUGl0Y2giXSksdGhpcy5fYWRkKCJtb3VzZVBpdGNoIixjLFsibW91c2VSb3RhdGUiXSk7dmFyIHU9bmV3IFduKHQpLGY9bmV3IEpuKHQpO2UuZHJhZ1Bhbj1uZXcgaGkocix1LGYpLHRoaXMuX2FkZCgibW91c2VQYW4iLHUpLHRoaXMuX2FkZCgidG91Y2hQYW4iLGYsWyJ0b3VjaFpvb20iLCJ0b3VjaFJvdGF0ZSJdKTt2YXIgaD1uZXcgcmkscD1uZXcgdGk7ZS50b3VjaFpvb21Sb3RhdGU9bmV3IGRpKHIscCxoLG8pLHRoaXMuX2FkZCgidG91Y2hSb3RhdGUiLGgsWyJ0b3VjaFBhbiIsInRvdWNoWm9vbSJdKSx0aGlzLl9hZGQoInRvdWNoWm9vbSIscCxbInRvdWNoUGFuIiwidG91Y2hSb3RhdGUiXSk7dmFyIGQ9ZS5zY3JvbGxab29tPW5ldyBsaShlLHRoaXMpO3RoaXMuX2FkZCgic2Nyb2xsWm9vbSIsZCxbIm1vdXNlUGFuIl0pO3ZhciBtPWUua2V5Ym9hcmQ9bmV3IG9pO3RoaXMuX2FkZCgia2V5Ym9hcmQiLG0pLHRoaXMuX2FkZCgiYmxvY2thYmxlTWFwRXZlbnQiLG5ldyBqbihlKSk7Zm9yKHZhciBnPTAsdj1bImJveFpvb20iLCJkb3VibGVDbGlja1pvb20iLCJ0YXBEcmFnWm9vbSIsInRvdWNoUGl0Y2giLCJkcmFnUm90YXRlIiwiZHJhZ1BhbiIsInRvdWNoWm9vbVJvdGF0ZSIsInNjcm9sbFpvb20iLCJrZXlib2FyZCJdO2c8di5sZW5ndGg7Zys9MSl7dmFyIHk9dltnXTt0LmludGVyYWN0aXZlJiZ0W3ldJiZlW3ldLmVuYWJsZSh0W3ldKX19LHlpLnByb3RvdHlwZS5fYWRkPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYW5kbGVycy5wdXNoKHtoYW5kbGVyTmFtZTp0LGhhbmRsZXI6ZSxhbGxvd2VkOnJ9KSx0aGlzLl9oYW5kbGVyc0J5SWRbdF09ZX0seWkucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtpZighdGhpcy5fdXBkYXRpbmdDYW1lcmEpe2Zvcih2YXIgdD0wLGU9dGhpcy5faGFuZGxlcnM7dDxlLmxlbmd0aDt0Kz0xKXtlW3RdLmhhbmRsZXIucmVzZXQoKX10aGlzLl9pbmVydGlhLmNsZWFyKCksdGhpcy5fZmlyZUV2ZW50cyh7fSx7fSksdGhpcy5fY2hhbmdlcz1bXX19LHlpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5faGFuZGxlcnM7dDxlLmxlbmd0aDt0Kz0xKXtpZihlW3RdLmhhbmRsZXIuaXNBY3RpdmUoKSlyZXR1cm4hMH1yZXR1cm4hMX0seWkucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy56b29tfHx0aGlzLl9tYXAuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKX0seWkucHJvdG90eXBlLmlzUm90YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mucm90YXRlfSx5aS5wcm90b3R5cGUuaXNNb3Zpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihtaSh0aGlzLl9ldmVudHNJblByb2dyZXNzKSl8fHRoaXMuaXNab29taW5nKCl9LHlpLnByb3RvdHlwZS5fYmxvY2tlZEJ5QWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdClpZihuIT09ciYmKCFlfHxlLmluZGV4T2Yobik8MCkpcmV0dXJuITA7cmV0dXJuITF9LHlpLnByb3RvdHlwZS5oYW5kbGVXaW5kb3dFdmVudD1mdW5jdGlvbih0KXt0aGlzLmhhbmRsZUV2ZW50KHQsdC50eXBlKyJXaW5kb3ciKX0seWkucHJvdG90eXBlLl9nZXRNYXBUb3VjaGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkudGFyZ2V0O3RoaXMuX2VsLmNvbnRhaW5zKGEpJiZlLnB1c2goaSl9cmV0dXJuIGV9LHlpLnByb3RvdHlwZS5oYW5kbGVFdmVudD1mdW5jdGlvbih0LGUpe2lmKCJibHVyIiE9PXQudHlwZSl7dGhpcy5fdXBkYXRpbmdDYW1lcmE9ITA7Zm9yKHZhciBuPSJyZW5kZXJGcmFtZSI9PT10LnR5cGU/dm9pZCAwOnQsaT17bmVlZHNSZW5kZXJGcmFtZTohMX0sYT17fSxvPXt9LHM9dC50b3VjaGVzP3RoaXMuX2dldE1hcFRvdWNoZXModC50b3VjaGVzKTp2b2lkIDAsbD1zP3IudG91Y2hQb3ModGhpcy5fZWwscyk6ci5tb3VzZVBvcyh0aGlzLl9lbCx0KSxjPTAsdT10aGlzLl9oYW5kbGVycztjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD1mLmhhbmRsZXJOYW1lLHA9Zi5oYW5kbGVyLGQ9Zi5hbGxvd2VkO2lmKHAuaXNFbmFibGVkKCkpe3ZhciBtPXZvaWQgMDt0aGlzLl9ibG9ja2VkQnlBY3RpdmUobyxkLGgpP3AucmVzZXQoKTpwW2V8fHQudHlwZV0mJihtPXBbZXx8dC50eXBlXSh0LGwscyksdGhpcy5tZXJnZUhhbmRsZXJSZXN1bHQoaSxhLG0saCxuKSxtJiZtLm5lZWRzUmVuZGVyRnJhbWUmJnRoaXMuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKSwobXx8cC5pc0FjdGl2ZSgpKSYmKG9baF09cCl9fXZhciBnPXt9O2Zvcih2YXIgdiBpbiB0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzKW9bdl18fChnW3ZdPW4pO3RoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnM9bywoT2JqZWN0LmtleXMoZykubGVuZ3RofHx2aShpKSkmJih0aGlzLl9jaGFuZ2VzLnB1c2goW2ksYSxnXSksdGhpcy5fdHJpZ2dlclJlbmRlckZyYW1lKCkpLChPYmplY3Qua2V5cyhvKS5sZW5ndGh8fHZpKGkpKSYmdGhpcy5fbWFwLl9zdG9wKCEwKSx0aGlzLl91cGRhdGluZ0NhbWVyYT0hMTt2YXIgeT1pLmNhbWVyYUFuaW1hdGlvbjt5JiYodGhpcy5faW5lcnRpYS5jbGVhcigpLHRoaXMuX2ZpcmVFdmVudHMoe30se30pLHRoaXMuX2NoYW5nZXM9W10seSh0aGlzLl9tYXApKX1lbHNlIHRoaXMuc3RvcCgpfSx5aS5wcm90b3R5cGUubWVyZ2VIYW5kbGVyUmVzdWx0PWZ1bmN0aW9uKGUscixuLGksYSl7aWYobil7dC5leHRlbmQoZSxuKTt2YXIgbz17aGFuZGxlck5hbWU6aSxvcmlnaW5hbEV2ZW50Om4ub3JpZ2luYWxFdmVudHx8YX07dm9pZCAwIT09bi56b29tRGVsdGEmJihyLnpvb209byksdm9pZCAwIT09bi5wYW5EZWx0YSYmKHIuZHJhZz1vKSx2b2lkIDAhPT1uLnBpdGNoRGVsdGEmJihyLnBpdGNoPW8pLHZvaWQgMCE9PW4uYmVhcmluZ0RlbHRhJiYoci5yb3RhdGU9byl9fSx5aS5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcz1mdW5jdGlvbigpe2Zvcih2YXIgZT17fSxyPXt9LG49e30saT0wLGE9dGhpcy5fY2hhbmdlcztpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXSxjPW9bMl07cy5wYW5EZWx0YSYmKGUucGFuRGVsdGE9KGUucGFuRGVsdGF8fG5ldyB0LlBvaW50KDAsMCkpLl9hZGQocy5wYW5EZWx0YSkpLHMuem9vbURlbHRhJiYoZS56b29tRGVsdGE9KGUuem9vbURlbHRhfHwwKStzLnpvb21EZWx0YSkscy5iZWFyaW5nRGVsdGEmJihlLmJlYXJpbmdEZWx0YT0oZS5iZWFyaW5nRGVsdGF8fDApK3MuYmVhcmluZ0RlbHRhKSxzLnBpdGNoRGVsdGEmJihlLnBpdGNoRGVsdGE9KGUucGl0Y2hEZWx0YXx8MCkrcy5waXRjaERlbHRhKSx2b2lkIDAhPT1zLmFyb3VuZCYmKGUuYXJvdW5kPXMuYXJvdW5kKSx2b2lkIDAhPT1zLnBpbmNoQXJvdW5kJiYoZS5waW5jaEFyb3VuZD1zLnBpbmNoQXJvdW5kKSxzLm5vSW5lcnRpYSYmKGUubm9JbmVydGlhPXMubm9JbmVydGlhKSx0LmV4dGVuZChyLGwpLHQuZXh0ZW5kKG4sYyl9dGhpcy5fdXBkYXRlTWFwVHJhbnNmb3JtKGUscixuKSx0aGlzLl9jaGFuZ2VzPVtdfSx5aS5wcm90b3R5cGUuX3VwZGF0ZU1hcFRyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fbWFwLGk9bi50cmFuc2Zvcm07aWYoIXZpKHQpKXJldHVybiB0aGlzLl9maXJlRXZlbnRzKGUscik7dmFyIGE9dC5wYW5EZWx0YSxvPXQuem9vbURlbHRhLHM9dC5iZWFyaW5nRGVsdGEsbD10LnBpdGNoRGVsdGEsYz10LmFyb3VuZCx1PXQucGluY2hBcm91bmQ7dm9pZCAwIT09dSYmKGM9dSksbi5fc3RvcCghMCksYz1jfHxuLnRyYW5zZm9ybS5jZW50ZXJQb2ludDt2YXIgZj1pLnBvaW50TG9jYXRpb24oYT9jLnN1YihhKTpjKTtzJiYoaS5iZWFyaW5nKz1zKSxsJiYoaS5waXRjaCs9bCksbyYmKGkuem9vbSs9byksaS5zZXRMb2NhdGlvbkF0UG9pbnQoZixjKSx0aGlzLl9tYXAuX3VwZGF0ZSgpLHQubm9JbmVydGlhfHx0aGlzLl9pbmVydGlhLnJlY29yZCh0KSx0aGlzLl9maXJlRXZlbnRzKGUscil9LHlpLnByb3RvdHlwZS5fZmlyZUV2ZW50cz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1taSh0aGlzLl9ldmVudHNJblByb2dyZXNzKSxhPW1pKGUpLG89e307Zm9yKHZhciBzIGluIGUpe3ZhciBsPWVbc10ub3JpZ2luYWxFdmVudDt0aGlzLl9ldmVudHNJblByb2dyZXNzW3NdfHwob1tzKyJzdGFydCJdPWwpLHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Nbc109ZVtzXX1mb3IodmFyIGMgaW4haSYmYSYmdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLGEub3JpZ2luYWxFdmVudCksbyl0aGlzLl9maXJlRXZlbnQoYyxvW2NdKTtmb3IodmFyIHUgaW4gZS5yb3RhdGUmJih0aGlzLl9iZWFyaW5nQ2hhbmdlZD0hMCksYSYmdGhpcy5fZmlyZUV2ZW50KCJtb3ZlIixhLm9yaWdpbmFsRXZlbnQpLGUpe3ZhciBmPWVbdV0ub3JpZ2luYWxFdmVudDt0aGlzLl9maXJlRXZlbnQodSxmKX12YXIgaCxwPXt9O2Zvcih2YXIgZCBpbiB0aGlzLl9ldmVudHNJblByb2dyZXNzKXt2YXIgbT10aGlzLl9ldmVudHNJblByb2dyZXNzW2RdLGc9bS5oYW5kbGVyTmFtZSx2PW0ub3JpZ2luYWxFdmVudDt0aGlzLl9oYW5kbGVyc0J5SWRbZ10uaXNBY3RpdmUoKXx8KGRlbGV0ZSB0aGlzLl9ldmVudHNJblByb2dyZXNzW2RdLGg9cltnXXx8dixwW2QrImVuZCJdPWgpfWZvcih2YXIgeSBpbiBwKXRoaXMuX2ZpcmVFdmVudCh5LHBbeV0pO3ZhciB4PW1pKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpO2lmKChpfHxhKSYmIXgpe3RoaXMuX3VwZGF0aW5nQ2FtZXJhPSEwO3ZhciBiPXRoaXMuX2luZXJ0aWEuX29uTW92ZUVuZCh0aGlzLl9tYXAuZHJhZ1Bhbi5faW5lcnRpYU9wdGlvbnMpLF89ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10JiYtbi5fYmVhcmluZ1NuYXA8dCYmdDxuLl9iZWFyaW5nU25hcH07Yj8oXyhiLmJlYXJpbmd8fHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiYoYi5iZWFyaW5nPTApLHRoaXMuX21hcC5lYXNlVG8oYix7b3JpZ2luYWxFdmVudDpofSkpOih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIse29yaWdpbmFsRXZlbnQ6aH0pKSxfKHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiZ0aGlzLl9tYXAucmVzZXROb3J0aCgpKSx0aGlzLl9iZWFyaW5nQ2hhbmdlZD0hMSx0aGlzLl91cGRhdGluZ0NhbWVyYT0hMX19LHlpLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LHlpLnByb3RvdHlwZS5fdHJpZ2dlclJlbmRlckZyYW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt2b2lkIDA9PT10aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSgoZnVuY3Rpb24oZSl7ZGVsZXRlIHQuX2ZyYW1lSWQsdC5oYW5kbGVFdmVudChuZXcgZ2koInJlbmRlckZyYW1lIix7dGltZVN0YW1wOmV9KSksdC5fYXBwbHlDaGFuZ2VzKCl9KSkpfTt2YXIgeGk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFsiX3JlbmRlckZyYW1lQ2FsbGJhY2siXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LkxuZ0xhdCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nLHRoaXMudHJhbnNmb3JtLmNlbnRlci5sYXQpfSxyLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcjp0fSxlKX0sci5wcm90b3R5cGUucGFuQnk9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPXQuUG9pbnQuY29udmVydChlKS5tdWx0KC0xKSx0aGlzLnBhblRvKHRoaXMudHJhbnNmb3JtLmNlbnRlcix0LmV4dGVuZCh7b2Zmc2V0OmV9LHIpLG4pfSxyLnByb3RvdHlwZS5wYW5Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtjZW50ZXI6ZX0sciksbil9LHIucHJvdG90eXBlLmdldFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uem9vbX0sci5wcm90b3R5cGUuc2V0Wm9vbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7em9vbTp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS56b29tVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7em9vbTplfSxyKSxuKX0sci5wcm90b3R5cGUuem9vbUluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpKzEsdCxlKSx0aGlzfSxyLnByb3RvdHlwZS56b29tT3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpLTEsdCxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRCZWFyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmJlYXJpbmd9LHIucHJvdG90eXBlLnNldEJlYXJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2JlYXJpbmc6dH0sZSksdGhpc30sci5wcm90b3R5cGUuZ2V0UGFkZGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wYWRkaW5nfSxyLnByb3RvdHlwZS5zZXRQYWRkaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwYWRkaW5nOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnJvdGF0ZVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6ZX0sciksbil9LHIucHJvdG90eXBlLnJlc2V0Tm9ydGg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5yb3RhdGVUbygwLHQuZXh0ZW5kKHtkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnJlc2V0Tm9ydGhQaXRjaD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7YmVhcmluZzowLHBpdGNoOjAsZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5zbmFwVG9Ob3J0aD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sci5wcm90b3R5cGUuZ2V0UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHIucHJvdG90eXBlLnNldFBpdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5jYW1lcmFGb3JCb3VuZHM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT10LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGUpLHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcoZS5nZXROb3J0aFdlc3QoKSxlLmdldFNvdXRoRWFzdCgpLDAscil9LHIucHJvdG90eXBlLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXt0b3A6MCxib3R0b206MCxyaWdodDowLGxlZnQ6MH07aWYoIm51bWJlciI9PXR5cGVvZihpPXQuZXh0ZW5kKHtwYWRkaW5nOmEsb2Zmc2V0OlswLDBdLG1heFpvb206dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0saSkpLnBhZGRpbmcpe3ZhciBvPWkucGFkZGluZztpLnBhZGRpbmc9e3RvcDpvLGJvdHRvbTpvLHJpZ2h0Om8sbGVmdDpvfX1pLnBhZGRpbmc9dC5leHRlbmQoYSxpLnBhZGRpbmcpO3ZhciBzPXRoaXMudHJhbnNmb3JtLGw9cy5wYWRkaW5nLGM9cy5wcm9qZWN0KHQuTG5nTGF0LmNvbnZlcnQoZSkpLHU9cy5wcm9qZWN0KHQuTG5nTGF0LmNvbnZlcnQocikpLGY9Yy5yb3RhdGUoLW4qTWF0aC5QSS8xODApLGg9dS5yb3RhdGUoLW4qTWF0aC5QSS8xODApLHA9bmV3IHQuUG9pbnQoTWF0aC5tYXgoZi54LGgueCksTWF0aC5tYXgoZi55LGgueSkpLGQ9bmV3IHQuUG9pbnQoTWF0aC5taW4oZi54LGgueCksTWF0aC5taW4oZi55LGgueSkpLG09cC5zdWIoZCksZz0ocy53aWR0aC0obC5sZWZ0K2wucmlnaHQraS5wYWRkaW5nLmxlZnQraS5wYWRkaW5nLnJpZ2h0KSkvbS54LHY9KHMuaGVpZ2h0LShsLnRvcCtsLmJvdHRvbStpLnBhZGRpbmcudG9wK2kucGFkZGluZy5ib3R0b20pKS9tLnk7aWYoISh2PDB8fGc8MCkpe3ZhciB5PU1hdGgubWluKHMuc2NhbGVab29tKHMuc2NhbGUqTWF0aC5taW4oZyx2KSksaS5tYXhab29tKSx4PXQuUG9pbnQuY29udmVydChpLm9mZnNldCksYj0oaS5wYWRkaW5nLmxlZnQtaS5wYWRkaW5nLnJpZ2h0KS8yLF89KGkucGFkZGluZy50b3AtaS5wYWRkaW5nLmJvdHRvbSkvMix3PW5ldyB0LlBvaW50KHgueCtiLHgueStfKS5tdWx0KHMuc2NhbGUvcy56b29tU2NhbGUoeSkpO3JldHVybntjZW50ZXI6cy51bnByb2plY3QoYy5hZGQodSkuZGl2KDIpLnN1Yih3KSksem9vbTp5LGJlYXJpbmc6bn19dC53YXJuT25jZSgiTWFwIGNhbm5vdCBmaXQgd2l0aGluIGNhbnZhcyB3aXRoIHRoZSBnaXZlbiBib3VuZHMsIHBhZGRpbmcsIGFuZC9vciBvZmZzZXQuIil9LHIucHJvdG90eXBlLmZpdEJvdW5kcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuY2FtZXJhRm9yQm91bmRzKHQsZSksZSxyKX0sci5wcm90b3R5cGUuZml0U2NyZWVuQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwodGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSksdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQocikpLG4saSksaSxhKX0sci5wcm90b3R5cGUuX2ZpdEludGVybmFsPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT8oZGVsZXRlKHI9dC5leHRlbmQoZSxyKSkucGFkZGluZyxyLmxpbmVhcj90aGlzLmVhc2VUbyhyLG4pOnRoaXMuZmx5VG8ocixuKSk6dGhpc30sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuInpvb20iaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcikpLCJiZWFyaW5nImluIGUmJm4uYmVhcmluZyE9PStlLmJlYXJpbmcmJihhPSEwLG4uYmVhcmluZz0rZS5iZWFyaW5nKSwicGl0Y2giaW4gZSYmbi5waXRjaCE9PStlLnBpdGNoJiYobz0hMCxuLnBpdGNoPStlLnBpdGNoKSxudWxsPT1lLnBhZGRpbmd8fG4uaXNQYWRkaW5nRXF1YWwoZS5wYWRkaW5nKXx8KG4ucGFkZGluZz1lLnBhZGRpbmcpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIscikpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbSIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLHIpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixyKSksbyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIscikpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuX3N0b3AoITEsZS5lYXNlSWQpLCghMT09PShlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzp0LmVhc2V9LGUpKS5hbmltYXRlfHwhZS5lc3NlbnRpYWwmJnQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPXRoaXMuZ2V0UGFkZGluZygpLGM9Inpvb20iaW4gZT8rZS56b29tOmEsdT0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sZj0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGg9InBhZGRpbmciaW4gZT9lLnBhZGRpbmc6aS5wYWRkaW5nLHA9dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxkPWkuY2VudGVyUG9pbnQuYWRkKHApLG09aS5wb2ludExvY2F0aW9uKGQpLGc9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8bSk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKGcpO3ZhciB2LHkseD1pLnByb2plY3QobSksYj1pLnByb2plY3QoZykuc3ViKHgpLF89aS56b29tU2NhbGUoYy1hKTtlLmFyb3VuZCYmKHY9dC5MbmdMYXQuY29udmVydChlLmFyb3VuZCkseT1pLmxvY2F0aW9uUG9pbnQodikpO3ZhciB3PXttb3Zpbmc6dGhpcy5fbW92aW5nLHpvb21pbmc6dGhpcy5fem9vbWluZyxyb3RhdGluZzp0aGlzLl9yb3RhdGluZyxwaXRjaGluZzp0aGlzLl9waXRjaGluZ307cmV0dXJuIHRoaXMuX3pvb21pbmc9dGhpcy5fem9vbWluZ3x8YyE9PWEsdGhpcy5fcm90YXRpbmc9dGhpcy5fcm90YXRpbmd8fG8hPT11LHRoaXMuX3BpdGNoaW5nPXRoaXMuX3BpdGNoaW5nfHxmIT09cyx0aGlzLl9wYWRkaW5nPSFpLmlzUGFkZGluZ0VxdWFsKGgpLHRoaXMuX2Vhc2VJZD1lLmVhc2VJZCx0aGlzLl9wcmVwYXJlRWFzZShyLGUubm9Nb3ZlU3RhcnQsdyksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe2lmKG4uX3pvb21pbmcmJihpLnpvb209dC5udW1iZXIoYSxjLGUpKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLHUsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLGYsZSkpLG4uX3BhZGRpbmcmJihpLmludGVycG9sYXRlUGFkZGluZyhsLGgsZSksZD1pLmNlbnRlclBvaW50LmFkZChwKSksdilpLnNldExvY2F0aW9uQXRQb2ludCh2LHkpO2Vsc2V7dmFyIG09aS56b29tU2NhbGUoaS56b29tLWEpLGc9Yz5hP01hdGgubWluKDIsXyk6TWF0aC5tYXgoLjUsXyksdz1NYXRoLnBvdyhnLDEtZSksVD1pLnVucHJvamVjdCh4LmFkZChiLm11bHQoZSp3KSkubXVsdChtKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9ULndyYXAoKTpULGQpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKHQpe24uX2FmdGVyRWFzZShyLHQpfSksZSksdGhpc30sci5wcm90b3R5cGUuX3ByZXBhcmVFYXNlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fbW92aW5nPSEwLHJ8fG4ubW92aW5nfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLHRoaXMuX3pvb21pbmcmJiFuLnpvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixlKSksdGhpcy5fcm90YXRpbmcmJiFuLnJvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixlKSksdGhpcy5fcGl0Y2hpbmcmJiFuLnBpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbSIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5fZWFzZUlkfHwhcnx8dGhpcy5fZWFzZUlkIT09cil7ZGVsZXRlIHRoaXMuX2Vhc2VJZDt2YXIgbj10aGlzLl96b29taW5nLGk9dGhpcy5fcm90YXRpbmcsYT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSx0aGlzLl9wYWRkaW5nPSExLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIsZSkpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixlKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIsZSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpfX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFlLmVzc2VudGlhbCYmdC5icm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKXt2YXIgaT10LnBpY2soZSxbImNlbnRlciIsInpvb20iLCJiZWFyaW5nIiwicGl0Y2giLCJhcm91bmQiXSk7cmV0dXJuIHRoaXMuanVtcFRvKGkscil9dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBhPXRoaXMudHJhbnNmb3JtLG89dGhpcy5nZXRab29tKCkscz10aGlzLmdldEJlYXJpbmcoKSxsPXRoaXMuZ2V0UGl0Y2goKSxjPXRoaXMuZ2V0UGFkZGluZygpLHU9Inpvb20iaW4gZT90LmNsYW1wKCtlLnpvb20sYS5taW5ab29tLGEubWF4Wm9vbSk6byxmPSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcscyk6cyxoPSJwaXRjaCJpbiBlPytlLnBpdGNoOmwscD0icGFkZGluZyJpbiBlP2UucGFkZGluZzphLnBhZGRpbmcsZD1hLnpvb21TY2FsZSh1LW8pLG09dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxnPWEuY2VudGVyUG9pbnQuYWRkKG0pLHY9YS5wb2ludExvY2F0aW9uKGcpLHk9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8dik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHkpO3ZhciB4PWEucHJvamVjdCh2KSxiPWEucHJvamVjdCh5KS5zdWIoeCksXz1lLmN1cnZlLHc9TWF0aC5tYXgoYS53aWR0aCxhLmhlaWdodCksVD13L2Qsaz1iLm1hZygpO2lmKCJtaW5ab29tImluIGUpe3ZhciBBPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLG8sdSksYS5taW5ab29tLGEubWF4Wm9vbSksTT13L2Euem9vbVNjYWxlKEEtbyk7Xz1NYXRoLnNxcnQoTS9rKjIpfXZhciBTPV8qXztmdW5jdGlvbiBFKHQpe3ZhciBlPShUKlQtdyp3Kyh0Py0xOjEpKlMqUyprKmspLygyKih0P1Q6dykqUyprKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBMKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBQPUUoMCksST1mdW5jdGlvbih0KXtyZXR1cm4gQyhQKS9DKFArXyp0KX0sTz1mdW5jdGlvbih0KXtyZXR1cm4gdyooKEMoUCkqKEwoZT1QK18qdCkvQyhlKSktTChQKSkvUykvazt2YXIgZX0sej0oRSgxKS1QKS9fO2lmKE1hdGguYWJzKGspPDFlLTZ8fCFpc0Zpbml0ZSh6KSl7aWYoTWF0aC5hYnMody1UKTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciBEPVQ8dz8tMToxO3o9TWF0aC5hYnMoTWF0aC5sb2coVC93KSkvXyxPPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKEQqXyp0KX19aWYoImR1cmF0aW9uImluIGUpZS5kdXJhdGlvbj0rZS5kdXJhdGlvbjtlbHNle3ZhciBSPSJzY3JlZW5TcGVlZCJpbiBlPytlLnNjcmVlblNwZWVkL186K2Uuc3BlZWQ7ZS5kdXJhdGlvbj0xZTMqei9SfXJldHVybiBlLm1heER1cmF0aW9uJiZlLmR1cmF0aW9uPmUubWF4RHVyYXRpb24mJihlLmR1cmF0aW9uPTApLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fcm90YXRpbmc9cyE9PWYsdGhpcy5fcGl0Y2hpbmc9aCE9PWwsdGhpcy5fcGFkZGluZz0hYS5pc1BhZGRpbmdFcXVhbChwKSx0aGlzLl9wcmVwYXJlRWFzZShyLCExKSx0aGlzLl9lYXNlKChmdW5jdGlvbihlKXt2YXIgaT1lKnosZD0xL0koaSk7YS56b29tPTE9PT1lP3U6bythLnNjYWxlWm9vbShkKSxuLl9yb3RhdGluZyYmKGEuYmVhcmluZz10Lm51bWJlcihzLGYsZSkpLG4uX3BpdGNoaW5nJiYoYS5waXRjaD10Lm51bWJlcihsLGgsZSkpLG4uX3BhZGRpbmcmJihhLmludGVycG9sYXRlUGFkZGluZyhjLHAsZSksZz1hLmNlbnRlclBvaW50LmFkZChtKSk7dmFyIHY9MT09PWU/eTphLnVucHJvamVjdCh4LmFkZChiLm11bHQoTyhpKSkpLm11bHQoZCkpO2Euc2V0TG9jYXRpb25BdFBvaW50KGEucmVuZGVyV29ybGRDb3BpZXM/di53cmFwKCk6dixnKSxuLl9maXJlTW92ZUV2ZW50cyhyKX0pLChmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9KSxlKSx0aGlzfSxyLnByb3RvdHlwZS5pc0Vhc2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZWFzZUZyYW1lSWR9LHIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RvcCgpfSxyLnByb3RvdHlwZS5fc3RvcD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2Vhc2VGcmFtZUlkJiYodGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpLGRlbGV0ZSB0aGlzLl9lYXNlRnJhbWVJZCxkZWxldGUgdGhpcy5fb25FYXNlRnJhbWUpLHRoaXMuX29uRWFzZUVuZCl7dmFyIHI9dGhpcy5fb25FYXNlRW5kO2RlbGV0ZSB0aGlzLl9vbkVhc2VFbmQsci5jYWxsKHRoaXMsZSl9aWYoIXQpe3ZhciBuPXRoaXMuaGFuZGxlcnM7biYmbi5zdG9wKCl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLl9lYXNlPWZ1bmN0aW9uKGUscixuKXshMT09PW4uYW5pbWF0ZXx8MD09PW4uZHVyYXRpb24/KGUoMSkscigpKToodGhpcy5fZWFzZVN0YXJ0PXQuYnJvd3Nlci5ub3coKSx0aGlzLl9lYXNlT3B0aW9ucz1uLHRoaXMuX29uRWFzZUZyYW1lPWUsdGhpcy5fb25FYXNlRW5kPXIsdGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spKX0sci5wcm90b3R5cGUuX3JlbmRlckZyYW1lQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1pbigodC5icm93c2VyLm5vdygpLXRoaXMuX2Vhc2VTdGFydCkvdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sMSk7dGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKGUpKSxlPDE/dGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spOnRoaXMuc3RvcCgpfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQmVhcmluZz1mdW5jdGlvbihlLHIpe2U9dC53cmFwKGUsLTE4MCwxODApO3ZhciBuPU1hdGguYWJzKGUtcik7cmV0dXJuIE1hdGguYWJzKGUtMzYwLXIpPG4mJihlLT0zNjApLE1hdGguYWJzKGUrMzYwLXIpPG4mJihlKz0zNjApLGV9LHIucHJvdG90eXBlLl9ub3JtYWxpemVDZW50ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50cmFuc2Zvcm07aWYoZS5yZW5kZXJXb3JsZENvcGllcyYmIWUubG5nUmFuZ2Upe3ZhciByPXQubG5nLWUuY2VudGVyLmxuZzt0LmxuZys9cj4xODA/LTM2MDpyPC0xODA/MzYwOjB9fSxyfSh0LkV2ZW50ZWQpLGJpPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLm9wdGlvbnM9ZSx0LmJpbmRBbGwoWyJfdXBkYXRlRWRpdExpbmsiLCJfdXBkYXRlRGF0YSIsIl91cGRhdGVDb21wYWN0Il0sdGhpcyl9O2JpLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLXJpZ2h0In0sYmkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbXBhY3Q7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYiIpLHRoaXMuX2lubmVyQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciIsdGhpcy5fY29udGFpbmVyKSxlJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpLHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCksdGhpcy5fbWFwLm9uKCJzdHlsZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVFZGl0TGluayksdm9pZCAwPT09ZSYmKHRoaXMuX21hcC5vbigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KSx0aGlzLl91cGRhdGVDb21wYWN0KCkpLHRoaXMuX2NvbnRhaW5lcn0sYmkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJzdHlsZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vZmYoInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx0aGlzLl9tYXAub2ZmKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX21hcD12b2lkIDAsdGhpcy5fYXR0cmliSFRNTD12b2lkIDB9LGJpLnByb3RvdHlwZS5fdXBkYXRlRWRpdExpbms9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9lZGl0TGluaztlfHwoZT10aGlzLl9lZGl0TGluaz10aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1hcGJveC1pbXByb3ZlLW1hcCIpKTt2YXIgcj1be2tleToib3duZXIiLHZhbHVlOnRoaXMuc3R5bGVPd25lcn0se2tleToiaWQiLHZhbHVlOnRoaXMuc3R5bGVJZH0se2tleToiYWNjZXNzX3Rva2VuIix2YWx1ZTp0aGlzLl9tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbnx8dC5jb25maWcuQUNDRVNTX1RPS0VOfV07aWYoZSl7dmFyIG49ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS52YWx1ZSYmKHQrPWUua2V5KyI9IitlLnZhbHVlKyhuPHIubGVuZ3RoLTE/IiYiOiIiKSksdH0pLCI/Iik7ZS5ocmVmPXQuY29uZmlnLkZFRURCQUNLX1VSTCsiLyIrbisodGhpcy5fbWFwLl9oYXNoP3RoaXMuX21hcC5faGFzaC5nZXRIYXNoU3RyaW5nKCEwKToiIiksZS5yZWw9Im5vb3BlbmVyIG5vZm9sbG93In19LGJpLnByb3RvdHlwZS5fdXBkYXRlRGF0YT1mdW5jdGlvbih0KXshdHx8Im1ldGFkYXRhIiE9PXQuc291cmNlRGF0YVR5cGUmJiJzdHlsZSIhPT10LmRhdGFUeXBlfHwodGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSl9LGJpLnByb3RvdHlwZS5fdXBkYXRlQXR0cmlidXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD1bXTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24mJihBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbik/dD10LmNvbmNhdCh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/IiI6dH0pKSk6InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24mJnQucHVzaCh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pKSx0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCl7dmFyIGU9dGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7dGhpcy5zdHlsZU93bmVyPWUub3duZXIsdGhpcy5zdHlsZUlkPWUuaWR9dmFyIHI9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXTtpZihpLnVzZWQpe3ZhciBhPWkuZ2V0U291cmNlKCk7YS5hdHRyaWJ1dGlvbiYmdC5pbmRleE9mKGEuYXR0cmlidXRpb24pPDAmJnQucHVzaChhLmF0dHJpYnV0aW9uKX19dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH0pKTt2YXIgbz0odD10LmZpbHRlcigoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cisxO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4hMTtyZXR1cm4hMH0pKSkuam9pbigiIHwgIik7byE9PXRoaXMuX2F0dHJpYkhUTUwmJih0aGlzLl9hdHRyaWJIVE1MPW8sdC5sZW5ndGg/KHRoaXMuX2lubmVyQ29udGFpbmVyLmlubmVySFRNTD1vLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1hdHRyaWItZW1wdHkiKSk6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpLHRoaXMuX2VkaXRMaW5rPW51bGwpfX0sYmkucHJvdG90eXBlLl91cGRhdGVDb21wYWN0PWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoPD02NDA/dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNvbXBhY3QiKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfTt2YXIgX2k9ZnVuY3Rpb24oKXt0LmJpbmRBbGwoWyJfdXBkYXRlTG9nbyJdLHRoaXMpLHQuYmluZEFsbChbIl91cGRhdGVDb21wYWN0Il0sdGhpcyl9O19pLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwiKTt2YXIgZT1yLmNyZWF0ZSgiYSIsIm1hcGJveGdsLWN0cmwtbG9nbyIpO3JldHVybiBlLnRhcmdldD0iX2JsYW5rIixlLnJlbD0ibm9vcGVuZXIgbm9mb2xsb3ciLGUuaHJlZj0iaHR0cHM6Ly93d3cubWFwYm94LmNvbS8iLGUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJMb2dvQ29udHJvbC5UaXRsZSIpKSxlLnNldEF0dHJpYnV0ZSgicmVsIiwibm9vcGVuZXIgbm9mb2xsb3ciKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX21hcC5vbigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fdXBkYXRlTG9nbygpLHRoaXMuX21hcC5vbigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KSx0aGlzLl91cGRhdGVDb21wYWN0KCksdGhpcy5fY29udGFpbmVyfSxfaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCl9LF9pLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLWxlZnQifSxfaS5wcm90b3R5cGUuX3VwZGF0ZUxvZ289ZnVuY3Rpb24odCl7dCYmIm1ldGFkYXRhIiE9PXQuc291cmNlRGF0YVR5cGV8fCh0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT10aGlzLl9sb2dvUmVxdWlyZWQoKT8iYmxvY2siOiJub25lIil9LF9pLnByb3RvdHlwZS5fbG9nb1JlcXVpcmVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KXtpZih0W2VdLmdldFNvdXJjZSgpLm1hcGJveF9sb2dvKXJldHVybiEwfXJldHVybiExfX0sX2kucHJvdG90eXBlLl91cGRhdGVDb21wYWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyLmNoaWxkcmVuO2lmKHQubGVuZ3RoKXt2YXIgZT10WzBdO3RoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aDwyNTA/ZS5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0Iik6ZS5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9fTt2YXIgd2k9ZnVuY3Rpb24oKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9pZD0wLHRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX07d2kucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rK3RoaXMuX2lkO3JldHVybiB0aGlzLl9xdWV1ZS5wdXNoKHtjYWxsYmFjazp0LGlkOmUsY2FuY2VsbGVkOiExfSksZX0sd2kucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZyxyPTAsbj1lP3RoaXMuX3F1ZXVlLmNvbmNhdChlKTp0aGlzLl9xdWV1ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aWYoaS5pZD09PXQpcmV0dXJuIHZvaWQoaS5jYW5jZWxsZWQ9ITApfX0sd2kucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKTt2YXIgZT10aGlzLl9jdXJyZW50bHlSdW5uaW5nPXRoaXMuX3F1ZXVlO3RoaXMuX3F1ZXVlPVtdO2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aWYoIWkuY2FuY2VsbGVkJiYoaS5jYWxsYmFjayh0KSx0aGlzLl9jbGVhcmVkKSlicmVha310aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9LHdpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRseVJ1bm5pbmcmJih0aGlzLl9jbGVhcmVkPSEwKSx0aGlzLl9xdWV1ZT1bXX07dmFyIFRpPXsiRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXIiOiJFbnRlciBmdWxsc2NyZWVuIiwiRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCI6IkV4aXQgZnVsbHNjcmVlbiIsIkdlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24iOiJGaW5kIG15IGxvY2F0aW9uIiwiR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSI6IkxvY2F0aW9uIG5vdCBhdmFpbGFibGUiLCJMb2dvQ29udHJvbC5UaXRsZSI6Ik1hcGJveCBsb2dvIiwiTmF2aWdhdGlvbkNvbnRyb2wuUmVzZXRCZWFyaW5nIjoiUmVzZXQgYmVhcmluZyB0byBub3J0aCIsIk5hdmlnYXRpb25Db250cm9sLlpvb21JbiI6Ilpvb20gaW4iLCJOYXZpZ2F0aW9uQ29udHJvbC5ab29tT3V0IjoiWm9vbSBvdXQiLCJTY2FsZUNvbnRyb2wuRmVldCI6ImZ0IiwiU2NhbGVDb250cm9sLk1ldGVycyI6Im0iLCJTY2FsZUNvbnRyb2wuS2lsb21ldGVycyI6ImttIiwiU2NhbGVDb250cm9sLk1pbGVzIjoibWkiLCJTY2FsZUNvbnRyb2wuTmF1dGljYWxNaWxlcyI6Im5tIn0sa2k9dC53aW5kb3cuSFRNTEltYWdlRWxlbWVudCxBaT10LndpbmRvdy5IVE1MRWxlbWVudCxNaT10LndpbmRvdy5JbWFnZUJpdG1hcCxTaT17Y2VudGVyOlswLDBdLHpvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxtaW5ab29tOi0yLG1heFpvb206MjIsbWluUGl0Y2g6MCxtYXhQaXRjaDo2MCxpbnRlcmFjdGl2ZTohMCxzY3JvbGxab29tOiEwLGJveFpvb206ITAsZHJhZ1JvdGF0ZTohMCxkcmFnUGFuOiEwLGtleWJvYXJkOiEwLGRvdWJsZUNsaWNrWm9vbTohMCx0b3VjaFpvb21Sb3RhdGU6ITAsdG91Y2hQaXRjaDohMCxiZWFyaW5nU25hcDo3LGNsaWNrVG9sZXJhbmNlOjMscGl0Y2hXaXRoUm90YXRlOiEwLGhhc2g6ITEsYXR0cmlidXRpb25Db250cm9sOiEwLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEscHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHRyYWNrUmVzaXplOiEwLHJlbmRlcldvcmxkQ29waWVzOiEwLHJlZnJlc2hFeHBpcmVkVGlsZXM6ITAsbWF4VGlsZUNhY2hlU2l6ZTpudWxsLGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseToic2Fucy1zZXJpZiIsdHJhbnNmb3JtUmVxdWVzdDpudWxsLGFjY2Vzc1Rva2VuOm51bGwsZmFkZUR1cmF0aW9uOjMwMCxjcm9zc1NvdXJjZUNvbGxpc2lvbnM6ITB9LEVpPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGkoZSl7dmFyIHI9dGhpcztpZihudWxsIT0oZT10LmV4dGVuZCh7fSxTaSxlKSkubWluWm9vbSYmbnVsbCE9ZS5tYXhab29tJiZlLm1pblpvb20+ZS5tYXhab29tKXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5ab29tIik7aWYobnVsbCE9ZS5taW5QaXRjaCYmbnVsbCE9ZS5tYXhQaXRjaCYmZS5taW5QaXRjaD5lLm1heFBpdGNoKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluUGl0Y2giKTtpZihudWxsIT1lLm1pblBpdGNoJiZlLm1pblBpdGNoPDApdGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIik7aWYobnVsbCE9ZS5tYXhQaXRjaCYmZS5tYXhQaXRjaD42MCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDYwIik7dmFyIGk9bmV3IEFuKGUubWluWm9vbSxlLm1heFpvb20sZS5taW5QaXRjaCxlLm1heFBpdGNoLGUucmVuZGVyV29ybGRDb3BpZXMpO2lmKG4uY2FsbCh0aGlzLGksZSksdGhpcy5faW50ZXJhY3RpdmU9ZS5pbnRlcmFjdGl2ZSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPWUubWF4VGlsZUNhY2hlU2l6ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fYW50aWFsaWFzPWUuYW50aWFsaWFzLHRoaXMuX3RyYWNrUmVzaXplPWUudHJhY2tSZXNpemUsdGhpcy5fYmVhcmluZ1NuYXA9ZS5iZWFyaW5nU25hcCx0aGlzLl9yZWZyZXNoRXhwaXJlZFRpbGVzPWUucmVmcmVzaEV4cGlyZWRUaWxlcyx0aGlzLl9mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zPWUuY3Jvc3NTb3VyY2VDb2xsaXNpb25zLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPTEsdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3JlbmRlclRhc2tRdWV1ZT1uZXcgd2ksdGhpcy5fY29udHJvbHM9W10sdGhpcy5fbWFwSWQ9dC51bmlxdWVJZCgpLHRoaXMuX2xvY2FsZT10LmV4dGVuZCh7fSxUaSxlLmxvY2FsZSksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IHQuUmVxdWVzdE1hbmFnZXIoZS50cmFuc2Zvcm1SZXF1ZXN0LGUuYWNjZXNzVG9rZW4pLCJzdHJpbmciPT10eXBlb2YgZS5jb250YWluZXIpe2lmKHRoaXMuX2NvbnRhaW5lcj10LndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lciksIXRoaXMuX2NvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciAnIitlLmNvbnRhaW5lcisiJyBub3QgZm91bmQuIil9ZWxzZXtpZighKGUuY29udGFpbmVyIGluc3RhbmNlb2YgQWkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LiIpO3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcn1pZihlLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoZS5tYXhCb3VuZHMpLHQuYmluZEFsbChbIl9vbldpbmRvd09ubGluZSIsIl9vbldpbmRvd1Jlc2l6ZSIsIl9jb250ZXh0TG9zdCIsIl9jb250ZXh0UmVzdG9yZWQiXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHZvaWQgMD09PXRoaXMucGFpbnRlcil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLiIpO3RoaXMub24oIm1vdmUiLChmdW5jdGlvbigpe3JldHVybiByLl91cGRhdGUoITEpfSkpLHRoaXMub24oIm1vdmVlbmQiLChmdW5jdGlvbigpe3JldHVybiByLl91cGRhdGUoITEpfSkpLHRoaXMub24oInpvb20iLChmdW5jdGlvbigpe3JldHVybiByLl91cGRhdGUoITApfSkpLHZvaWQgMCE9PXQud2luZG93JiYodC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSksdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSkpLHRoaXMuaGFuZGxlcnM9bmV3IHlpKHRoaXMsZSk7dmFyIGE9InN0cmluZyI9PXR5cGVvZiBlLmhhc2gmJmUuaGFzaHx8dm9pZCAwO3RoaXMuX2hhc2g9ZS5oYXNoJiZuZXcgU24oYSkuYWRkVG8odGhpcyksdGhpcy5faGFzaCYmdGhpcy5faGFzaC5fb25IYXNoQ2hhbmdlKCl8fCh0aGlzLmp1bXBUbyh7Y2VudGVyOmUuY2VudGVyLHpvb206ZS56b29tLGJlYXJpbmc6ZS5iZWFyaW5nLHBpdGNoOmUucGl0Y2h9KSxlLmJvdW5kcyYmKHRoaXMucmVzaXplKCksdGhpcy5maXRCb3VuZHMoZS5ib3VuZHMsdC5leHRlbmQoe30sZS5maXRCb3VuZHNPcHRpb25zLHtkdXJhdGlvbjowfSkpKSksdGhpcy5yZXNpemUoKSx0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9ZS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHksZS5zdHlsZSYmdGhpcy5zZXRTdHlsZShlLnN0eWxlLHtsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ZS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9KSxlLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hZGRDb250cm9sKG5ldyBiaSh7Y3VzdG9tQXR0cmlidXRpb246ZS5jdXN0b21BdHRyaWJ1dGlvbn0pKSx0aGlzLmFkZENvbnRyb2wobmV3IF9pLGUubG9nb1Bvc2l0aW9uKSx0aGlzLm9uKCJzdHlsZS5sb2FkIiwoZnVuY3Rpb24oKXtyLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZyLmp1bXBUbyhyLnN0eWxlLnN0eWxlc2hlZXQpfSkpLHRoaXMub24oImRhdGEiLChmdW5jdGlvbihlKXtyLl91cGRhdGUoInN0eWxlIj09PWUuZGF0YVR5cGUpLHIuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhIixlKSl9KSksdGhpcy5vbigiZGF0YWxvYWRpbmciLChmdW5jdGlvbihlKXtyLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZSsiZGF0YWxvYWRpbmciLGUpKX0pKX1uJiYoaS5fX3Byb3RvX189biksaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuJiZuLnByb3RvdHlwZSksaS5wcm90b3R5cGUuY29uc3RydWN0b3I9aTt2YXIgYT17c2hvd1RpbGVCb3VuZGFyaWVzOntjb25maWd1cmFibGU6ITB9LHNob3dQYWRkaW5nOntjb25maWd1cmFibGU6ITB9LHNob3dDb2xsaXNpb25Cb3hlczp7Y29uZmlndXJhYmxlOiEwfSxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6e2NvbmZpZ3VyYWJsZTohMH0scmVwYWludDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSx2ZXJzaW9uOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gaS5wcm90b3R5cGUuX2dldE1hcElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcElkfSxpLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKGUscil7aWYodm9pZCAwPT09ciYmZS5nZXREZWZhdWx0UG9zaXRpb24mJihyPWUuZ2V0RGVmYXVsdFBvc2l0aW9uKCkpLHZvaWQgMD09PXImJihyPSJ0b3AtcmlnaHQiKSwhZXx8IWUub25BZGQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudCB0byBtYXAuYWRkQ29udHJvbCgpLiBBcmd1bWVudCBtdXN0IGJlIGEgY29udHJvbCB3aXRoIG9uQWRkIGFuZCBvblJlbW92ZSBtZXRob2RzLiIpKSk7dmFyIG49ZS5vbkFkZCh0aGlzKTt0aGlzLl9jb250cm9scy5wdXNoKGUpO3ZhciBpPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbcl07cmV0dXJuLTEhPT1yLmluZGV4T2YoImJvdHRvbSIpP2kuaW5zZXJ0QmVmb3JlKG4saS5maXJzdENoaWxkKTppLmFwcGVuZENoaWxkKG4pLHRoaXN9LGkucHJvdG90eXBlLnJlbW92ZUNvbnRyb2w9ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLm9uUmVtb3ZlKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgdG8gbWFwLnJlbW92ZUNvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4iKSkpO3ZhciByPXRoaXMuX2NvbnRyb2xzLmluZGV4T2YoZSk7cmV0dXJuIHI+LTEmJnRoaXMuX2NvbnRyb2xzLnNwbGljZShyLDEpLGUub25SZW1vdmUodGhpcyksdGhpc30saS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKSxuPXJbMF0saT1yWzFdO3RoaXMuX3Jlc2l6ZUNhbnZhcyhuLGkpLHRoaXMudHJhbnNmb3JtLnJlc2l6ZShuLGkpLHRoaXMucGFpbnRlci5yZXNpemUobixpKTt2YXIgYT0hdGhpcy5fbW92aW5nO3JldHVybiBhJiYodGhpcy5zdG9wKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLGUpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixlKSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVzaXplIixlKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSksdGhpc30saS5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldEJvdW5kcygpfSxpLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0TWF4Qm91bmRzKCl9LGkucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uc2V0TWF4Qm91bmRzKHQuTG5nTGF0Qm91bmRzLmNvbnZlcnQoZSkpLHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/LTI6dCk+PS0yJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk8dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAtMiBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlIil9LGkucHJvdG90eXBlLmdldE1pblpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbX0saS5wcm90b3R5cGUuc2V0TWF4Wm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzIyOnQpPj10aGlzLnRyYW5zZm9ybS5taW5ab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk+dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb20iKX0saS5wcm90b3R5cGUuZ2V0TWF4Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxpLnByb3RvdHlwZS5zZXRNaW5QaXRjaD1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzA6dCk8MCl0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAiKTtpZih0Pj0wJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhQaXRjaClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluUGl0Y2g9dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFBpdGNoKCk8dCYmdGhpcy5zZXRQaXRjaCh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IG1heFBpdGNoLCBpbmNsdXNpdmUiKX0saS5wcm90b3R5cGUuZ2V0TWluUGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluUGl0Y2h9LGkucHJvdG90eXBlLnNldE1heFBpdGNoPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/NjA6dCk+NjApdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2MCIpO2lmKHQ+PXRoaXMudHJhbnNmb3JtLm1pblBpdGNoKXJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaD10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0UGl0Y2goKT50JiZ0aGlzLnNldFBpdGNoKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5QaXRjaCIpfSxpLnByb3RvdHlwZS5nZXRNYXhQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaH0saS5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LGkucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHQuTG5nTGF0LmNvbnZlcnQoZSkpfSxpLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5Qb2ludC5jb252ZXJ0KGUpKX0saS5wcm90b3R5cGUuaXNNb3Zpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92aW5nfHx0aGlzLmhhbmRsZXJzLmlzTW92aW5nKCl9LGkucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29taW5nfHx0aGlzLmhhbmRsZXJzLmlzWm9vbWluZygpfSxpLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW5nfHx0aGlzLmhhbmRsZXJzLmlzUm90YXRpbmcoKX0saS5wcm90b3R5cGUuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXM7aWYoIm1vdXNlZW50ZXIiPT09dHx8Im1vdXNlb3ZlciI9PT10KXt2YXIgYT0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4pe3ZhciBvPWkuZ2V0TGF5ZXIoZSk/aS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMobi5wb2ludCx7bGF5ZXJzOltlXX0pOltdO28ubGVuZ3RoP2F8fChhPSEwLHIuY2FsbChpLG5ldyBSbih0LGksbi5vcmlnaW5hbEV2ZW50LHtmZWF0dXJlczpvfSkpKTphPSExfSxtb3VzZW91dDpmdW5jdGlvbigpe2E9ITF9fX19aWYoIm1vdXNlbGVhdmUiPT09dHx8Im1vdXNlb3V0Ij09PXQpe3ZhciBvPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24obil7KGkuZ2V0TGF5ZXIoZSk/aS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMobi5wb2ludCx7bGF5ZXJzOltlXX0pOltdKS5sZW5ndGg/bz0hMDpvJiYobz0hMSxyLmNhbGwoaSxuZXcgUm4odCxpLG4ub3JpZ2luYWxFdmVudCkpKX0sbW91c2VvdXQ6ZnVuY3Rpb24oZSl7byYmKG89ITEsci5jYWxsKGksbmV3IFJuKHQsaSxlLm9yaWdpbmFsRXZlbnQpKSl9fX19cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6KG49e30sblt0XT1mdW5jdGlvbih0KXt2YXIgbj1pLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHQucG9pbnQse2xheWVyczpbZV19KTpbXTtuLmxlbmd0aCYmKHQuZmVhdHVyZXM9bixyLmNhbGwoaSx0KSxkZWxldGUgdC5mZWF0dXJlcyl9LG4pfX0saS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9uLmNhbGwodGhpcyx0LGUpO3ZhciBpPXRoaXMuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHQsZSxyKTtmb3IodmFyIGEgaW4gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc3x8e30sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XXx8W10sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdLnB1c2goaSksaS5kZWxlZ2F0ZXMpdGhpcy5vbihhLGkuZGVsZWdhdGVzW2FdKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09cilyZXR1cm4gbi5wcm90b3R5cGUub25jZS5jYWxsKHRoaXMsdCxlKTt2YXIgaT10aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0LGUscik7Zm9yKHZhciBhIGluIGkuZGVsZWdhdGVzKXRoaXMub25jZShhLGkuZGVsZWdhdGVzW2FdKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzO2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9mZi5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzJiZ0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0mJmZ1bmN0aW9uKG4pe2Zvcih2YXIgYT1uW3RdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtpZihzLmxheWVyPT09ZSYmcy5saXN0ZW5lcj09PXIpe2Zvcih2YXIgbCBpbiBzLmRlbGVnYXRlcylpLm9mZihsLHMuZGVsZWdhdGVzW2xdKTtyZXR1cm4gYS5zcGxpY2UobywxKSxpfX19KHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyksdGhpc30saS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscil7aWYoIXRoaXMuc3R5bGUpcmV0dXJuW107dmFyIG47aWYodm9pZCAwIT09cnx8dm9pZCAwPT09ZXx8ZSBpbnN0YW5jZW9mIHQuUG9pbnR8fEFycmF5LmlzQXJyYXkoZSl8fChyPWUsZT12b2lkIDApLHI9cnx8e30sKGU9ZXx8W1swLDBdLFt0aGlzLnRyYW5zZm9ybS53aWR0aCx0aGlzLnRyYW5zZm9ybS5oZWlnaHRdXSlpbnN0YW5jZW9mIHQuUG9pbnR8fCJudW1iZXIiPT10eXBlb2YgZVswXSluPVt0LlBvaW50LmNvbnZlcnQoZSldO2Vsc2V7dmFyIGk9dC5Qb2ludC5jb252ZXJ0KGVbMF0pLGE9dC5Qb2ludC5jb252ZXJ0KGVbMV0pO249W2ksbmV3IHQuUG9pbnQoYS54LGkueSksYSxuZXcgdC5Qb2ludChpLngsYS55KSxpXX1yZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMobixyLHRoaXMudHJhbnNmb3JtKX0saS5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXModCxlKX0saS5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4hMSE9PShyPXQuZXh0ZW5kKHt9LHtsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6dGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSxyKSkuZGlmZiYmci5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9PT10aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkmJnRoaXMuc3R5bGUmJmU/KHRoaXMuX2RpZmZTdHlsZShlLHIpLHRoaXMpOih0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9ci5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHksdGhpcy5fdXBkYXRlU3R5bGUoZSxyKSl9LGkucHJvdG90eXBlLl9nZXRVSVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sb2NhbGVbdF07aWYobnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgVUkgc3RyaW5nICciK3QrIiciKTtyZXR1cm4gZX0saS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5zdHlsZS5fcmVtb3ZlKCkpLHQ/KHRoaXMuc3R5bGU9bmV3IHFlKHRoaXMsZXx8e30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuc3R5bGUubG9hZFVSTCh0KTp0aGlzLnN0eWxlLmxvYWRKU09OKHQpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0saS5wcm90b3R5cGUuX2xhenlJbml0RW1wdHlTdHlsZT1mdW5jdGlvbigpe3RoaXMuc3R5bGV8fCh0aGlzLnN0eWxlPW5ldyBxZSh0aGlzLHt9KSx0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7c3R5bGU6dGhpcy5zdHlsZX0pLHRoaXMuc3R5bGUubG9hZEVtcHR5KCkpfSxpLnByb3RvdHlwZS5fZGlmZlN0eWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPXRoaXMuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVN0eWxlVVJMKGUpLGE9dGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChpLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0LmdldEpTT04oYSwoZnVuY3Rpb24oZSxpKXtlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTppJiZuLl91cGRhdGVEaWZmKGkscil9KSl9ZWxzZSJvYmplY3QiPT10eXBlb2YgZSYmdGhpcy5fdXBkYXRlRGlmZihlLHIpfSxpLnByb3RvdHlwZS5fdXBkYXRlRGlmZj1mdW5jdGlvbihlLHIpe3RyeXt0aGlzLnN0eWxlLnNldFN0YXRlKGUpJiZ0aGlzLl91cGRhdGUoITApfWNhdGNoKG4pe3Qud2Fybk9uY2UoIlVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6ICIrKG4ubWVzc2FnZXx8bi5lcnJvcnx8bikrIi4gIFJlYnVpbGRpbmcgdGhlIHN0eWxlIGZyb20gc2NyYXRjaC4iKSx0aGlzLl91cGRhdGVTdHlsZShlLHIpfX0saS5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnN0eWxlKXJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpfSxpLnByb3RvdHlwZS5pc1N0eWxlTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGU/dGhpcy5zdHlsZS5sb2FkZWQoKTp0Lndhcm5PbmNlKCJUaGVyZSBpcyBubyBzdHlsZSBhZGRlZCB0byB0aGUgbWFwLiIpfSxpLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5hZGRTb3VyY2UodCxlKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5pc1NvdXJjZUxvYWRlZD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tlXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmxvYWRlZCgpO3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggSUQgJyIrZSsiJyIpKSl9LGkucHJvdG90eXBlLmFyZVRpbGVzTG9hZGVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpe3ZhciByPXRbZV0uX3RpbGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKCJsb2FkZWQiIT09aS5zdGF0ZSYmImVycm9yZWQiIT09aS5zdGF0ZSlyZXR1cm4hMX19cmV0dXJuITB9LGkucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZFNvdXJjZVR5cGUodCxlLHIpfSxpLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlU291cmNlKHQpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UodCl9LGkucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9bi5waXhlbFJhdGlvO3ZvaWQgMD09PWkmJihpPTEpO3ZhciBhPW4uc2RmO3ZvaWQgMD09PWEmJihhPSExKTt2YXIgbz1uLnN0cmV0Y2hYLHM9bi5zdHJldGNoWSxsPW4uY29udGVudDt0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtpZihyIGluc3RhbmNlb2Yga2l8fE1pJiZyIGluc3RhbmNlb2YgTWkpe3ZhciBjPXQuYnJvd3Nlci5nZXRJbWFnZURhdGEociksdT1jLndpZHRoLGY9Yy5oZWlnaHQsaD1jLmRhdGE7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6dSxoZWlnaHQ6Zn0saCkscGl4ZWxSYXRpbzppLHN0cmV0Y2hYOm8sc3RyZXRjaFk6cyxjb250ZW50Omwsc2RmOmEsdmVyc2lvbjowfSl9ZWxzZXtpZih2b2lkIDA9PT1yLndpZHRofHx2b2lkIDA9PT1yLmhlaWdodClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAuYWRkSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAiKSkpO3ZhciBwPXIud2lkdGgsZD1yLmhlaWdodCxtPXIuZGF0YSxnPXI7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6cCxoZWlnaHQ6ZH0sbmV3IFVpbnQ4QXJyYXkobSkpLHBpeGVsUmF0aW86aSxzdHJldGNoWDpvLHN0cmV0Y2hZOnMsY29udGVudDpsLHNkZjphLHZlcnNpb246MCx1c2VySW1hZ2U6Z30pLGcub25BZGQmJmcub25BZGQodGhpcyxlKX19LGkucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5zdHlsZS5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbWFwIGhhcyBubyBpbWFnZSB3aXRoIHRoYXQgaWQuIElmIHlvdSBhcmUgYWRkaW5nIGEgbmV3IGltYWdlIHVzZSBgbWFwLmFkZEltYWdlKC4uLilgIGluc3RlYWQuIikpKTt2YXIgaT1yIGluc3RhbmNlb2Yga2l8fE1pJiZyIGluc3RhbmNlb2YgTWk/dC5icm93c2VyLmdldEltYWdlRGF0YShyKTpyLGE9aS53aWR0aCxvPWkuaGVpZ2h0LHM9aS5kYXRhO2lmKHZvaWQgMD09PWF8fHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLnVwZGF0ZUltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgIikpKTtpZihhIT09bi5kYXRhLndpZHRofHxvIT09bi5kYXRhLmhlaWdodClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdXBkYXRlZCBpbWFnZSBtdXN0IGJlIHRoYXQgc2FtZSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgaW1hZ2UiKSkpO3ZhciBsPSEociBpbnN0YW5jZW9mIGtpfHxNaSYmciBpbnN0YW5jZW9mIE1pKTtuLmRhdGEucmVwbGFjZShzLGwpLHRoaXMuc3R5bGUudXBkYXRlSW1hZ2UoZSxuKX0saS5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQiKSkpLCExKX0saS5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0saS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxpLnByb3RvdHlwZS5saXN0SW1hZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUubGlzdEltYWdlcygpfSxpLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUubW92ZUxheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LGkucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSxyKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxpLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRQYWludFByb3BlcnR5KHQsZSxyLG4pLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLnNldExpZ2h0KHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpfSxpLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGZWF0dXJlU3RhdGUodCxlKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlRmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGZWF0dXJlU3RhdGUodCl9LGkucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LGkucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwzMDApLFt0LGVdfSxpLnByb3RvdHlwZS5fZGV0ZWN0TWlzc2luZ0NTUz1mdW5jdGlvbigpeyJyZ2IoMjUwLCAxMjgsIDExNCkiIT09dC53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KS5nZXRQcm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWNvbG9yIikmJnQud2Fybk9uY2UoIlRoaXMgcGFnZSBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgQ1NTIGRlY2xhcmF0aW9ucyBmb3IgTWFwYm94IEdMIEpTLCB3aGljaCBtYXkgY2F1c2UgdGhlIG1hcCB0byBkaXNwbGF5IGluY29ycmVjdGx5LiBQbGVhc2UgZW5zdXJlIHlvdXIgcGFnZSBpbmNsdWRlcyBtYXBib3gtZ2wuY3NzLCBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLy4iKX0saS5wcm90b3R5cGUuX3NldHVwQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyO3QuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFwIiksKHRoaXMuX21pc3NpbmdDU1NDYW5hcnk9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbmFyeSIsdCkpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fZGV0ZWN0TWlzc2luZ0NTUygpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9ci5jcmVhdGUoImNhbnZhcyIsIm1hcGJveGdsLWNhbnZhcyIsZSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHRoaXMuX2NvbnRleHRMb3N0LCExKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHRoaXMuX2NvbnRleHRSZXN0b3JlZCwhMSksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCIpO3ZhciBuPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTt0aGlzLl9yZXNpemVDYW52YXMoblswXSxuWzFdKTt2YXIgaT10aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksYT10aGlzLl9jb250cm9sUG9zaXRpb25zPXt9O1sidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LGkpfSkpfSxpLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9cisicHgifSxpLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe30sZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzLHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixhbnRpYWxpYXM6dGhpcy5fYW50aWFsaWFzfHwhMX0pLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoIndlYmdsIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik7bj8odGhpcy5wYWludGVyPW5ldyBfbihuLHRoaXMudHJhbnNmb3JtKSx0LndlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQobikpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wiKSkpfSxpLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWUuY2FuY2VsKCksdGhpcy5fZnJhbWU9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRsb3N0Iix7b3JpZ2luYWxFdmVudDplfSkpfSxpLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0saS5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEhdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5sb2FkZWQoKX0saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLnRyaWdnZXJSZXBhaW50KCksdGhpcyk6dGhpc30saS5wcm90b3R5cGUuX3JlcXVlc3RSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZCh0KX0saS5wcm90b3R5cGUuX2NhbmNlbFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUodCl9LGkucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzLGk9MCxhPXRoaXMucGFpbnRlci5jb250ZXh0LmV4dFRpbWVyUXVlcnk7aWYodGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWZyYW1lIikmJihyPWEuY3JlYXRlUXVlcnlFWFQoKSxhLmJlZ2luUXVlcnlFWFQoYS5USU1FX0VMQVBTRURfRVhULHIpLGk9dC5icm93c2VyLm5vdygpKSx0aGlzLnBhaW50ZXIuY29udGV4dC5zZXREaXJ0eSgpLHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKGUpLCF0aGlzLl9yZW1vdmVkKXt2YXIgbz0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciBzPXRoaXMudHJhbnNmb3JtLnpvb20sbD10LmJyb3dzZXIubm93KCk7dGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUocyxsKTt2YXIgYz1uZXcgdC5FdmFsdWF0aW9uUGFyYW1ldGVycyhzLHtub3c6bCxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLHU9Yy5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT11JiZ1PT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChvPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPXUpLHRoaXMuc3R5bGUudXBkYXRlKGMpfWlmKHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksbW92aW5nOnRoaXMuaXNNb3ZpbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHNob3dQYWRkaW5nOnRoaXMuc2hvd1BhZGRpbmcsZ3B1VGltaW5nOiEhdGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWxheWVyIil9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbmRlciIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibG9hZCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8bykmJih0aGlzLl9zdHlsZURpcnR5PSEwKSx0aGlzLnN0eWxlJiYhdGhpcy5fcGxhY2VtZW50RGlydHkmJnRoaXMuc3R5bGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSx0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctZnJhbWUiKSl7dmFyIGY9dC5icm93c2VyLm5vdygpLWk7YS5lbmRRdWVyeUVYVChhLlRJTUVfRUxBUFNFRF9FWFQsciksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1hLmdldFF1ZXJ5T2JqZWN0RVhUKHIsYS5RVUVSWV9SRVNVTFRfRVhUKS8xZTY7YS5kZWxldGVRdWVyeUVYVChyKSxuLmZpcmUobmV3IHQuRXZlbnQoImdwdS10aW1pbmctZnJhbWUiLHtjcHVUaW1lOmYsZ3B1VGltZTplfSkpfSksNTApfWlmKHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1sYXllciIpKXt2YXIgaD10aGlzLnBhaW50ZXIuY29sbGVjdEdwdVRpbWVycygpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9bi5wYWludGVyLnF1ZXJ5R3B1VGltZXJzKGgpO24uZmlyZShuZXcgdC5FdmVudCgiZ3B1LXRpbWluZy1sYXllciIse2xheWVyVGltZXM6ZX0pKX0pLDUwKX1yZXR1cm4gdGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eXx8dGhpcy5fcmVwYWludD90aGlzLnRyaWdnZXJSZXBhaW50KCk6IXRoaXMuaXNNb3ZpbmcoKSYmdGhpcy5sb2FkZWQoKSYmKHRoaXMuX2Z1bGx5TG9hZGVkfHwodGhpcy5fZnVsbHlMb2FkZWQ9ITApLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiaWRsZSIpKSksdGhpc319LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX2hhc2gmJnRoaXMuX2hhc2gucmVtb3ZlKCk7Zm9yKHZhciBlPTAscj10aGlzLl9jb250cm9scztlPHIubGVuZ3RoO2UrPTEpe3JbZV0ub25SZW1vdmUodGhpcyl9dGhpcy5fY29udHJvbHM9W10sdGhpcy5fZnJhbWUmJih0aGlzLl9mcmFtZS5jYW5jZWwoKSx0aGlzLl9mcmFtZT1udWxsKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUuY2xlYXIoKSx0aGlzLnBhaW50ZXIuZGVzdHJveSgpLHRoaXMuaGFuZGxlcnMuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhhbmRsZXJzLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09dC53aW5kb3cmJih0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJvbmxpbmUiLHRoaXMuX29uV2luZG93T25saW5lLCExKSk7dmFyIG49dGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtuJiZuLmxvc2VDb250ZXh0KCksTGkodGhpcy5fY2FudmFzQ29udGFpbmVyKSxMaSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSxMaSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtbWFwIiksdGhpcy5fcmVtb3ZlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbW92ZSIpKX0saS5wcm90b3R5cGUudHJpZ2dlclJlcGFpbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc3R5bGUmJiF0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lPXQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24odCl7ZS5fZnJhbWU9bnVsbCxlLl9yZW5kZXIodCl9KSkpfSxpLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYWNrUmVzaXplJiZ0aGlzLnJlc2l6ZSh7b3JpZ2luYWxFdmVudDp0fSkuX3VwZGF0ZSgpfSxhLnNob3dUaWxlQm91bmRhcmllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dUaWxlQm91bmRhcmllc30sYS5zaG93VGlsZUJvdW5kYXJpZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LGEuc2hvd1BhZGRpbmcuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93UGFkZGluZ30sYS5zaG93UGFkZGluZy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1BhZGRpbmchPT10JiYodGhpcy5fc2hvd1BhZGRpbmc9dCx0aGlzLl91cGRhdGUoKSl9LGEuc2hvd0NvbGxpc2lvbkJveGVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzfSxhLnNob3dDb2xsaXNpb25Cb3hlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHQ/dGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpOnRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93T3ZlcmRyYXdJbnNwZWN0b3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LGEuc2hvd092ZXJkcmF3SW5zcGVjdG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IhPT10JiYodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXQsdGhpcy5fdXBkYXRlKCkpfSxhLnJlcGFpbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9yZXBhaW50fSxhLnJlcGFpbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3JlcGFpbnQhPT10JiYodGhpcy5fcmVwYWludD10LHRoaXMudHJpZ2dlclJlcGFpbnQoKSl9LGEudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30sYS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuX3NldENhY2hlTGltaXRzPWZ1bmN0aW9uKGUscil7dC5zZXRDYWNoZUxpbWl0cyhlLHIpfSxhLnZlcnNpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHQudmVyc2lvbn0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaS5wcm90b3R5cGUsYSksaX0oeGkpO2Z1bmN0aW9uIExpKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXZhciBDaT17c2hvd0NvbXBhc3M6ITAsc2hvd1pvb206ITAsdmlzdWFsaXplUGl0Y2g6ITF9LFBpPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LENpLGUpLHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0LmJpbmRBbGwoWyJfc2V0QnV0dG9uVGl0bGUiLCJfdXBkYXRlWm9vbUJ1dHRvbnMiXSx0aGlzKSx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLXpvb20taW4iLChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWFwLnpvb21Jbih7fSx7b3JpZ2luYWxFdmVudDp0fSl9KSksci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX3pvb21JbkJ1dHRvbikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLXpvb20tb3V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21hcC56b29tT3V0KHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fem9vbU91dEJ1dHRvbikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0LmJpbmRBbGwoWyJfcm90YXRlQ29tcGFzc0Fycm93Il0sdGhpcyksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtY29tcGFzcyIsKGZ1bmN0aW9uKHQpe24ub3B0aW9ucy52aXN1YWxpemVQaXRjaD9uLl9tYXAucmVzZXROb3J0aFBpdGNoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTpuLl9tYXAucmVzZXROb3J0aCh7fSx7b3JpZ2luYWxFdmVudDp0fSl9KSksdGhpcy5fY29tcGFzc0ljb249ci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX2NvbXBhc3MpLHRoaXMuX2NvbXBhc3NJY29uLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSl9O1BpLnByb3RvdHlwZS5fdXBkYXRlWm9vbUJ1dHRvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Wm9vbSgpO3RoaXMuX3pvb21JbkJ1dHRvbi5kaXNhYmxlZD10PT09dGhpcy5fbWFwLmdldE1heFpvb20oKSx0aGlzLl96b29tT3V0QnV0dG9uLmRpc2FibGVkPXQ9PT10aGlzLl9tYXAuZ2V0TWluWm9vbSgpfSxQaS5wcm90b3R5cGUuX3JvdGF0ZUNvbXBhc3NBcnJvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaD8ic2NhbGUoIisxL01hdGgucG93KE1hdGguY29zKHRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2gqKE1hdGguUEkvMTgwKSksLjUpKyIpIHJvdGF0ZVgoIit0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoKyJkZWcpIHJvdGF0ZVooIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiOiJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NJY29uLnN0eWxlLnRyYW5zZm9ybT10fSxQaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmKHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX3pvb21JbkJ1dHRvbiwiWm9vbUluIiksdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbU91dEJ1dHRvbiwiWm9vbU91dCIpLHRoaXMuX21hcC5vbigiem9vbSIsdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKCkpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX2NvbXBhc3MsIlJlc2V0QmVhcmluZyIpLHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCYmdGhpcy5fbWFwLm9uKCJwaXRjaCIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9tYXAub24oInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3coKSx0aGlzLl9oYW5kbGVyPW5ldyBJaSh0aGlzLl9tYXAsdGhpcy5fY29tcGFzcyx0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gpKSx0aGlzLl9jb250YWluZXJ9LFBpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLnNob3dab29tJiZ0aGlzLl9tYXAub2ZmKCJ6b29tIix0aGlzLl91cGRhdGVab29tQnV0dG9ucyksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoJiZ0aGlzLl9tYXAub2ZmKCJwaXRjaCIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9tYXAub2ZmKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5faGFuZGxlci5vZmYoKSxkZWxldGUgdGhpcy5faGFuZGxlciksZGVsZXRlIHRoaXMuX21hcH0sUGkucHJvdG90eXBlLl9jcmVhdGVCdXR0b249ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNyZWF0ZSgiYnV0dG9uIix0LHRoaXMuX2NvbnRhaW5lcik7cmV0dXJuIG4udHlwZT0iYnV0dG9uIixuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlKSxufSxQaS5wcm90b3R5cGUuX3NldEJ1dHRvblRpdGxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiTmF2aWdhdGlvbkNvbnRyb2wuIitlKTt0LnRpdGxlPXIsdC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHIpfTt2YXIgSWk9ZnVuY3Rpb24oZSxuLGkpe3ZvaWQgMD09PWkmJihpPSExKSx0aGlzLl9jbGlja1RvbGVyYW5jZT0xMCx0aGlzLmVsZW1lbnQ9bix0aGlzLm1vdXNlUm90YXRlPW5ldyBYbih7Y2xpY2tUb2xlcmFuY2U6ZS5kcmFnUm90YXRlLl9tb3VzZVJvdGF0ZS5fY2xpY2tUb2xlcmFuY2V9KSx0aGlzLm1hcD1lLGkmJih0aGlzLm1vdXNlUGl0Y2g9bmV3IFpuKHtjbGlja1RvbGVyYW5jZTplLmRyYWdSb3RhdGUuX21vdXNlUGl0Y2guX2NsaWNrVG9sZXJhbmNlfSkpLHQuYmluZEFsbChbIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNldCJdLHRoaXMpLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJtb3VzZWRvd24iLHRoaXMubW91c2Vkb3duKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hzdGFydCIsdGhpcy50b3VjaHN0YXJ0LHtwYXNzaXZlOiExfSksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNobW92ZSIsdGhpcy50b3VjaG1vdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaGVuZCIsdGhpcy50b3VjaGVuZCksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoY2FuY2VsIix0aGlzLnJlc2V0KX07ZnVuY3Rpb24gT2koZSxyLG4pe2lmKGU9bmV3IHQuTG5nTGF0KGUubG5nLGUubGF0KSxyKXt2YXIgaT1uZXcgdC5MbmdMYXQoZS5sbmctMzYwLGUubGF0KSxhPW5ldyB0LkxuZ0xhdChlLmxuZyszNjAsZS5sYXQpLG89bi5sb2NhdGlvblBvaW50KGUpLmRpc3RTcXIocik7bi5sb2NhdGlvblBvaW50KGkpLmRpc3RTcXIocik8bz9lPWk6bi5sb2NhdGlvblBvaW50KGEpLmRpc3RTcXIocik8byYmKGU9YSl9Zm9yKDtNYXRoLmFicyhlLmxuZy1uLmNlbnRlci5sbmcpPjE4MDspe3ZhciBzPW4ubG9jYXRpb25Qb2ludChlKTtpZihzLng+PTAmJnMueT49MCYmcy54PD1uLndpZHRoJiZzLnk8PW4uaGVpZ2h0KWJyZWFrO2UubG5nPm4uY2VudGVyLmxuZz9lLmxuZy09MzYwOmUubG5nKz0zNjB9cmV0dXJuIGV9SWkucHJvdG90eXBlLmRvd249ZnVuY3Rpb24odCxlKXt0aGlzLm1vdXNlUm90YXRlLm1vdXNlZG93bih0LGUpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLm1vdXNlZG93bih0LGUpLHIuZGlzYWJsZURyYWcoKX0sSWkucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm1hcCxuPXRoaXMubW91c2VSb3RhdGUubW91c2Vtb3ZlV2luZG93KHQsZSk7aWYobiYmbi5iZWFyaW5nRGVsdGEmJnIuc2V0QmVhcmluZyhyLmdldEJlYXJpbmcoKStuLmJlYXJpbmdEZWx0YSksdGhpcy5tb3VzZVBpdGNoKXt2YXIgaT10aGlzLm1vdXNlUGl0Y2gubW91c2Vtb3ZlV2luZG93KHQsZSk7aSYmaS5waXRjaERlbHRhJiZyLnNldFBpdGNoKHIuZ2V0UGl0Y2goKStpLnBpdGNoRGVsdGEpfX0sSWkucHJvdG90eXBlLm9mZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudDtyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIix0aGlzLm1vdXNlZG93biksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoc3RhcnQiLHRoaXMudG91Y2hzdGFydCx7cGFzc2l2ZTohMX0pLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaG1vdmUiLHRoaXMudG91Y2htb3ZlKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hlbmQiLHRoaXMudG91Y2hlbmQpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaGNhbmNlbCIsdGhpcy5yZXNldCksdGhpcy5vZmZUZW1wKCl9LElpLnByb3RvdHlwZS5vZmZUZW1wPWZ1bmN0aW9uKCl7ci5lbmFibGVEcmFnKCksci5yZW1vdmVFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZW1vdmUiLHRoaXMubW91c2Vtb3ZlKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNldXAiLHRoaXMubW91c2V1cCl9LElpLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24oZSl7dGhpcy5kb3duKHQuZXh0ZW5kKHt9LGUse2N0cmxLZXk6ITAscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpfX0pLHIubW91c2VQb3ModGhpcy5lbGVtZW50LGUpKSxyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNlbW92ZSIsdGhpcy5tb3VzZW1vdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2V1cCIsdGhpcy5tb3VzZXVwKX0sSWkucHJvdG90eXBlLm1vdXNlbW92ZT1mdW5jdGlvbih0KXt0aGlzLm1vdmUodCxyLm1vdXNlUG9zKHRoaXMuZWxlbWVudCx0KSl9LElpLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKHQpe3RoaXMubW91c2VSb3RhdGUubW91c2V1cFdpbmRvdyh0KSx0aGlzLm1vdXNlUGl0Y2gmJnRoaXMubW91c2VQaXRjaC5tb3VzZXVwV2luZG93KHQpLHRoaXMub2ZmVGVtcCgpfSxJaS5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0KXsxIT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aD90aGlzLnJlc2V0KCk6KHRoaXMuX3N0YXJ0UG9zPXRoaXMuX2xhc3RQb3M9ci50b3VjaFBvcyh0aGlzLmVsZW1lbnQsdC50YXJnZXRUb3VjaGVzKVswXSx0aGlzLmRvd24oe3R5cGU6Im1vdXNlZG93biIsYnV0dG9uOjAsY3RybEtleTohMCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9fSx0aGlzLl9zdGFydFBvcykpfSxJaS5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQpezEhPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP3RoaXMucmVzZXQoKToodGhpcy5fbGFzdFBvcz1yLnRvdWNoUG9zKHRoaXMuZWxlbWVudCx0LnRhcmdldFRvdWNoZXMpWzBdLHRoaXMubW92ZSh7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfX0sdGhpcy5fbGFzdFBvcykpfSxJaS5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCl7MD09PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGgmJnRoaXMuX3N0YXJ0UG9zJiZ0aGlzLl9sYXN0UG9zJiZ0aGlzLl9zdGFydFBvcy5kaXN0KHRoaXMuX2xhc3RQb3MpPHRoaXMuX2NsaWNrVG9sZXJhbmNlJiZ0aGlzLmVsZW1lbnQuY2xpY2soKSx0aGlzLnJlc2V0KCl9LElpLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubW91c2VSb3RhdGUucmVzZXQoKSx0aGlzLm1vdXNlUGl0Y2gmJnRoaXMubW91c2VQaXRjaC5yZXNldCgpLGRlbGV0ZSB0aGlzLl9zdGFydFBvcyxkZWxldGUgdGhpcy5fbGFzdFBvcyx0aGlzLm9mZlRlbXAoKX07dmFyIHppPXtjZW50ZXI6InRyYW5zbGF0ZSgtNTAlLC01MCUpIix0b3A6InRyYW5zbGF0ZSgtNTAlLDApIiwidG9wLWxlZnQiOiJ0cmFuc2xhdGUoMCwwKSIsInRvcC1yaWdodCI6InRyYW5zbGF0ZSgtMTAwJSwwKSIsYm90dG9tOiJ0cmFuc2xhdGUoLTUwJSwtMTAwJSkiLCJib3R0b20tbGVmdCI6InRyYW5zbGF0ZSgwLC0xMDAlKSIsImJvdHRvbS1yaWdodCI6InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiLGxlZnQ6InRyYW5zbGF0ZSgwLC01MCUpIixyaWdodDoidHJhbnNsYXRlKC0xMDAlLC01MCUpIn07ZnVuY3Rpb24gRGkodCxlLHIpe3ZhciBuPXQuY2xhc3NMaXN0O2Zvcih2YXIgaSBpbiB6aSluLnJlbW92ZSgibWFwYm94Z2wtIityKyItYW5jaG9yLSIraSk7bi5hZGQoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2UpfXZhciBSaSxGaT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4saSl7dmFyIGE9dGhpcztpZihlLmNhbGwodGhpcyksKG4gaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MRWxlbWVudHx8aSkmJihuPXQuZXh0ZW5kKHtlbGVtZW50Om59LGkpKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uTW92ZSIsIl9vblVwIiwiX2FkZERyYWdIYW5kbGVyIiwiX29uTWFwQ2xpY2siLCJfb25LZXlQcmVzcyJdLHRoaXMpLHRoaXMuX2FuY2hvcj1uJiZuLmFuY2hvcnx8ImNlbnRlciIsdGhpcy5fY29sb3I9biYmbi5jb2xvcnx8IiMzRkIxQ0UiLHRoaXMuX2RyYWdnYWJsZT1uJiZuLmRyYWdnYWJsZXx8ITEsdGhpcy5fc3RhdGU9ImluYWN0aXZlIix0aGlzLl9yb3RhdGlvbj1uJiZuLnJvdGF0aW9ufHwwLHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50PW4mJm4ucm90YXRpb25BbGlnbm1lbnR8fCJhdXRvIix0aGlzLl9waXRjaEFsaWdubWVudD1uJiZuLnBpdGNoQWxpZ25tZW50JiYiYXV0byIhPT1uLnBpdGNoQWxpZ25tZW50P24ucGl0Y2hBbGlnbm1lbnQ6dGhpcy5fcm90YXRpb25BbGlnbm1lbnQsbiYmbi5lbGVtZW50KXRoaXMuX2VsZW1lbnQ9bi5lbGVtZW50LHRoaXMuX29mZnNldD10LlBvaW50LmNvbnZlcnQobiYmbi5vZmZzZXR8fFswLDBdKTtlbHNle3RoaXMuX2RlZmF1bHRNYXJrZXI9ITAsdGhpcy5fZWxlbWVudD1yLmNyZWF0ZSgiZGl2IiksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXAgbWFya2VyIik7dmFyIG89ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtvLnNldEF0dHJpYnV0ZU5TKG51bGwsImRpc3BsYXkiLCJibG9jayIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IiwiNDFweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIyN3B4Iiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwIDI3IDQxIik7dmFyIHM9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLCJub25lIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLCIxIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO3ZhciBsPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwibm9uemVybyIpO3ZhciBjPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Muc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMuMCwgMjkuMCkiKSxjLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7Zm9yKHZhciB1PTAsZj1be3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjkuNSIscnk6IjQuNzcyNzUwMDcifSx7cng6IjguNSIscnk6IjQuMjk1NDk5MzYifSx7cng6IjcuNSIscnk6IjMuODE4MjIzMDgifSx7cng6IjYuNSIscnk6IjMuMzQwOTQ2NzkifSx7cng6IjUuNSIscnk6IjIuODYzNjcwNTEifSx7cng6IjQuNSIscnk6IjIuMzg2MzY4NjQifV07dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdLHA9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJlbGxpcHNlIik7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4wNCIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCIxMC41IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuODAwMjkwMDgiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsInJ4IixoLnJ4KSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsInJ5IixoLnJ5KSxjLmFwcGVuZENoaWxkKHApfXZhciBkPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fY29sb3IpO3ZhciBtPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO20uc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFoiKSxkLmFwcGVuZENoaWxkKG0pO3ZhciBnPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2cuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxnLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7dmFyIHY9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7di5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFoiKSxnLmFwcGVuZENoaWxkKHYpO3ZhciB5PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3kuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDYuMCwgNy4wKSIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKTt2YXIgeD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt4LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg4LjAsIDguMCkiKTt2YXIgYj1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO2Iuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKTt2YXIgXz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO18uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpLHguYXBwZW5kQ2hpbGQoYikseC5hcHBlbmRDaGlsZChfKSxsLmFwcGVuZENoaWxkKGMpLGwuYXBwZW5kQ2hpbGQoZCksbC5hcHBlbmRDaGlsZChnKSxsLmFwcGVuZENoaWxkKHkpLGwuYXBwZW5kQ2hpbGQoeCksby5hcHBlbmRDaGlsZChsKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKG8pLHRoaXMuX29mZnNldD10LlBvaW50LmNvbnZlcnQobiYmbi5vZmZzZXR8fFswLC0xNF0pfXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFya2VyIiksdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKGZ1bmN0aW9uKCl7dmFyIHQ9YS5fbWFwLmdldENvbnRhaW5lcigpO3Quc2Nyb2xsVG9wPTAsdC5zY3JvbGxMZWZ0PTB9KSksRGkodGhpcy5fZWxlbWVudCx0aGlzLl9hbmNob3IsIm1hcmtlciIpLHRoaXMuX3BvcHVwPW51bGx9cmV0dXJuIGUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbW92ZSgpLHRoaXMuX21hcD10LHQuZ2V0Q2FudmFzQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0Lm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuc2V0RHJhZ2dhYmxlKHRoaXMuX2RyYWdnYWJsZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9mZigidG91Y2hzdGFydCIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuX21hcC5vZmYoInRvdWNoZW5kIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9mZigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLGRlbGV0ZSB0aGlzLl9tYXApLHIucmVtb3ZlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxuLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xuZ0xhdD10LkxuZ0xhdC5jb252ZXJ0KGUpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LG4ucHJvdG90eXBlLnNldFBvcHVwPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpcy5fcG9wdXA9bnVsbCx0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIix0aGlzLl9vbktleVByZXNzKSx0aGlzLl9vcmlnaW5hbFRhYkluZGV4fHx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSksdCl7aWYoISgib2Zmc2V0ImluIHQub3B0aW9ucykpe3ZhciBlPU1hdGguc3FydChNYXRoLnBvdygxMy41LDIpLzIpO3Qub3B0aW9ucy5vZmZzZXQ9dGhpcy5fZGVmYXVsdE1hcmtlcj97dG9wOlswLDBdLCJ0b3AtbGVmdCI6WzAsMF0sInRvcC1yaWdodCI6WzAsMF0sYm90dG9tOlswLC0zOC4xXSwiYm90dG9tLWxlZnQiOltlLC0xKigyNC42K2UpXSwiYm90dG9tLXJpZ2h0IjpbLWUsLTEqKDI0LjYrZSldLGxlZnQ6WzEzLjUsLTI0LjZdLHJpZ2h0OlstMTMuNSwtMjQuNl19OnRoaXMuX29mZnNldH10aGlzLl9wb3B1cD10LHRoaXMuX2xuZ0xhdCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fb3JpZ2luYWxUYWJJbmRleD10aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9vcmlnaW5hbFRhYkluZGV4fHx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyl9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLl9vbktleVByZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxyPXQuY2hhckNvZGV8fHQua2V5Q29kZTsiU3BhY2UiIT09ZSYmIkVudGVyIiE9PWUmJjMyIT09ciYmMTMhPT1yfHx0aGlzLnRvZ2dsZVBvcHVwKCl9LG4ucHJvdG90eXBlLl9vbk1hcENsaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JpZ2luYWxFdmVudC50YXJnZXQscj10aGlzLl9lbGVtZW50O3RoaXMuX3BvcHVwJiYoZT09PXJ8fHIuY29udGFpbnMoZSkpJiZ0aGlzLnRvZ2dsZVBvcHVwKCl9LG4ucHJvdG90eXBlLmdldFBvcHVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxuLnByb3RvdHlwZS50b2dnbGVQb3B1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvcHVwO3JldHVybiB0Pyh0LmlzT3BlbigpP3QucmVtb3ZlKCk6dC5hZGRUbyh0aGlzLl9tYXApLHRoaXMpOnRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwKXt0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PU9pKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpLHRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLl9hZGQodGhpcy5fb2Zmc2V0KTt2YXIgZT0iIjsidmlld3BvcnQiPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnR8fCJhdXRvIj09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50P2U9InJvdGF0ZVooIit0aGlzLl9yb3RhdGlvbisiZGVnKSI6Im1hcCI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudCYmKGU9InJvdGF0ZVooIisodGhpcy5fcm90YXRpb24tdGhpcy5fbWFwLmdldEJlYXJpbmcoKSkrImRlZykiKTt2YXIgbj0iIjsidmlld3BvcnQiPT09dGhpcy5fcGl0Y2hBbGlnbm1lbnR8fCJhdXRvIj09PXRoaXMuX3BpdGNoQWxpZ25tZW50P249InJvdGF0ZVgoMGRlZykiOiJtYXAiPT09dGhpcy5fcGl0Y2hBbGlnbm1lbnQmJihuPSJyb3RhdGVYKCIrdGhpcy5fbWFwLmdldFBpdGNoKCkrImRlZykiKSx0JiYibW92ZWVuZCIhPT10LnR5cGV8fCh0aGlzLl9wb3M9dGhpcy5fcG9zLnJvdW5kKCkpLHIuc2V0VHJhbnNmb3JtKHRoaXMuX2VsZW1lbnQsemlbdGhpcy5fYW5jaG9yXSsiIHRyYW5zbGF0ZSgiK3RoaXMuX3Bvcy54KyJweCwgIit0aGlzLl9wb3MueSsicHgpICIrbisiICIrZSl9fSxuLnByb3RvdHlwZS5nZXRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fSxuLnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29mZnNldD10LlBvaW50LmNvbnZlcnQoZSksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbihlKXt0aGlzLl9wb3M9ZS5wb2ludC5zdWIodGhpcy5fcG9zaXRpb25EZWx0YSksdGhpcy5fbG5nTGF0PXRoaXMuX21hcC51bnByb2plY3QodGhpcy5fcG9zKSx0aGlzLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsInBlbmRpbmciPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iYWN0aXZlIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRyYWdzdGFydCIpKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnIikpfSxuLnByb3RvdHlwZS5fb25VcD1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cz0iYXV0byIsdGhpcy5fcG9zaXRpb25EZWx0YT1udWxsLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSksImFjdGl2ZSI9PT10aGlzLl9zdGF0ZSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnZW5kIikpLHRoaXMuX3N0YXRlPSJpbmFjdGl2ZSJ9LG4ucHJvdG90eXBlLl9hZGREcmFnSGFuZGxlcj1mdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50LmNvbnRhaW5zKHQub3JpZ2luYWxFdmVudC50YXJnZXQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3Bvc2l0aW9uRGVsdGE9dC5wb2ludC5zdWIodGhpcy5fcG9zKS5hZGQodGhpcy5fb2Zmc2V0KSx0aGlzLl9zdGF0ZT0icGVuZGluZyIsdGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9uKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9uY2UoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuX21hcC5vbmNlKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCkpfSxuLnByb3RvdHlwZS5zZXREcmFnZ2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZT0hIXQsdGhpcy5fbWFwJiYodD8odGhpcy5fbWFwLm9uKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub24oInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSk6KHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSkpLHRoaXN9LG4ucHJvdG90eXBlLmlzRHJhZ2dhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZX0sbi5wcm90b3R5cGUuc2V0Um90YXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uPXR8fDAsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0Um90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm90YXRpb259LG4ucHJvdG90eXBlLnNldFJvdGF0aW9uQWxpZ25tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudD10fHwiYXV0byIsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0Um90YXRpb25BbGlnbm1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm90YXRpb25BbGlnbm1lbnR9LG4ucHJvdG90eXBlLnNldFBpdGNoQWxpZ25tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9waXRjaEFsaWdubWVudD10JiYiYXV0byIhPT10P3Q6dGhpcy5fcm90YXRpb25BbGlnbm1lbnQsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0UGl0Y2hBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl0Y2hBbGlnbm1lbnR9LG59KHQuRXZlbnRlZCksQmk9e3Bvc2l0aW9uT3B0aW9uczp7ZW5hYmxlSGlnaEFjY3VyYWN5OiExLG1heGltdW1BZ2U6MCx0aW1lb3V0OjZlM30sZml0Qm91bmRzT3B0aW9uczp7bWF4Wm9vbToxNX0sdHJhY2tVc2VyTG9jYXRpb246ITEsc2hvd0FjY3VyYWN5Q2lyY2xlOiEwLHNob3dVc2VyTG9jYXRpb246ITB9O3ZhciBOaT0wLGppPSExLFVpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxCaSxyKSx0LmJpbmRBbGwoWyJfb25TdWNjZXNzIiwiX29uRXJyb3IiLCJfb25ab29tIiwiX2ZpbmlzaCIsIl9zZXR1cFVJIiwiX3VwZGF0ZUNhbWVyYSIsIl91cGRhdGVNYXJrZXIiXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuX21hcD1lLHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwIiksbj10aGlzLl9zZXR1cFVJLHZvaWQgMCE9PVJpP24oUmkpOnZvaWQgMCE9PXQud2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucz90LndpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6Imdlb2xvY2F0aW9uIn0pLnRoZW4oKGZ1bmN0aW9uKHQpe1JpPSJkZW5pZWQiIT09dC5zdGF0ZSxuKFJpKX0pKTooUmk9ISF0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sbihSaSkpLHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXImJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlciYmdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCksci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJ6b29tIix0aGlzLl9vblpvb20pLHRoaXMuX21hcD12b2lkIDAsTmk9MCxqaT0hMX0sbi5wcm90b3R5cGUuX2lzT3V0T2ZNYXBNYXhCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldE1heEJvdW5kcygpLHI9dC5jb29yZHM7cmV0dXJuIGUmJihyLmxvbmdpdHVkZTxlLmdldFdlc3QoKXx8ci5sb25naXR1ZGU+ZS5nZXRFYXN0KCl8fHIubGF0aXR1ZGU8ZS5nZXRTb3V0aCgpfHxyLmxhdGl0dWRlPmUuZ2V0Tm9ydGgoKSl9LG4ucHJvdG90eXBlLl9zZXRFcnJvclN0YXRlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfX0sbi5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLl9tYXApe2lmKHRoaXMuX2lzT3V0T2ZNYXBNYXhCb3VuZHMoZSkpcmV0dXJuIHRoaXMuX3NldEVycm9yU3RhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm91dG9mbWF4Ym91bmRzIixlKSksdGhpcy5fdXBkYXRlTWFya2VyKCksdm9pZCB0aGlzLl9maW5pc2goKTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9MT0NLIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYiT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMuX3VwZGF0ZU1hcmtlcihlKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJiJBQ1RJVkVfTE9DSyIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImdlb2xvY2F0ZSIsZSkpLHRoaXMuX2ZpbmlzaCgpfX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbihlKXt2YXIgcj1uZXcgdC5MbmdMYXQoZS5jb29yZHMubG9uZ2l0dWRlLGUuY29vcmRzLmxhdGl0dWRlKSxuPWUuY29vcmRzLmFjY3VyYWN5LGk9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxhPXQuZXh0ZW5kKHtiZWFyaW5nOml9LHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zKTt0aGlzLl9tYXAuZml0Qm91bmRzKHIudG9Cb3VuZHMobiksYSx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LG4ucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9bmV3IHQuTG5nTGF0KGUuY29vcmRzLmxvbmdpdHVkZSxlLmNvb3Jkcy5sYXRpdHVkZSk7dGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIuc2V0TG5nTGF0KHIpLmFkZFRvKHRoaXMuX21hcCksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChyKS5hZGRUbyh0aGlzLl9tYXApLHRoaXMuX2FjY3VyYWN5PWUuY29vcmRzLmFjY3VyYWN5LHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX1lbHNlIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNpcmNsZVJhZGl1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGU9dGhpcy5fbWFwLnVucHJvamVjdChbMCx0XSkscj10aGlzLl9tYXAudW5wcm9qZWN0KFsxLHRdKSxuPWUuZGlzdGFuY2VUbyhyKSxpPU1hdGguY2VpbCgyKnRoaXMuX2FjY3VyYWN5L24pO3RoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUud2lkdGg9aSsicHgiLHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUuaGVpZ2h0PWkrInB4In0sbi5wcm90b3R5cGUuX29uWm9vbT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX0sbi5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbWFwKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24paWYoMT09PWUuY29kZSl7dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZD0hMDt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlPXIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsciksdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiZ0aGlzLl9jbGVhcldhdGNoKCl9ZWxzZXtpZigzPT09ZS5jb2RlJiZqaSlyZXR1cm47dGhpcy5fc2V0RXJyb3JTdGF0ZSgpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9fSxuLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxuLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZSIsdGhpcy5fY29udGFpbmVyKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsITE9PT1lKXt0Lndhcm5PbmNlKCJHZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgc28gdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBiZSBkaXNhYmxlZC4iKTt2YXIgaT10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkPSEwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1pLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpfWVsc2V7dmFyIGE9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbiIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1hLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpfXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCIpLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcj1uZXcgRmkodGhpcy5fZG90RWxlbWVudCksdGhpcy5fY2lyY2xlRWxlbWVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1hY2N1cmFjeS1jaXJjbGUiKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlcj1uZXcgRmkoe2VsZW1lbnQ6dGhpcy5fY2lyY2xlRWxlbWVudCxwaXRjaEFsaWdubWVudDoibWFwIn0pLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMuX21hcC5vbigiem9vbSIsdGhpcy5fb25ab29tKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oIm1vdmVzdGFydCIsKGZ1bmN0aW9uKGUpe3ZhciByPWUub3JpZ2luYWxFdmVudCYmInJlc2l6ZSI9PT1lLm9yaWdpbmFsRXZlbnQudHlwZTtlLmdlb2xvY2F0ZVNvdXJjZXx8IkFDVElWRV9MT0NLIiE9PW4uX3dhdGNoU3RhdGV8fHJ8fChuLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EIixuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLG4uX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSxuLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpKX0pKX0sbi5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbigpe2lmKCF0aGlzLl9zZXR1cClyZXR1cm4gdC53YXJuT25jZSgiR2VvbG9jYXRlIGNvbnRyb2wgdHJpZ2dlcmVkIGJlZm9yZSBhZGRlZCB0byBhIG1hcCIpLCExO2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbil7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiT0ZGIjp0aGlzLl93YXRjaFN0YXRlPSJXQUlUSU5HX0FDVElWRSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpO2JyZWFrO2Nhc2UiV0FJVElOR19BQ1RJVkUiOmNhc2UiQUNUSVZFX0xPQ0siOmNhc2UiQUNUSVZFX0VSUk9SIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOk5pLS0samk9ITEsdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSk7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSl9c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQUNUSVZFX0xPQ0siOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpfWlmKCJPRkYiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKXRoaXMuX2NsZWFyV2F0Y2goKTtlbHNlIGlmKHZvaWQgMD09PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCl7dmFyIGU7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJ0cnVlIiksKytOaT4xPyhlPXttYXhpbXVtQWdlOjZlNSx0aW1lb3V0OjB9LGppPSEwKTooZT10aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zLGppPSExKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsZSl9fWVsc2UgdC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih0aGlzLl9vblN1Y2Nlc3MsdGhpcy5fb25FcnJvcix0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKSx0aGlzLl90aW1lb3V0SWQ9c2V0VGltZW91dCh0aGlzLl9maW5pc2gsMWU0KTtyZXR1cm4hMH0sbi5wcm90b3R5cGUuX2NsZWFyV2F0Y2g9ZnVuY3Rpb24oKXt0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LG59KHQuRXZlbnRlZCksVmk9e21heFdpZHRoOjEwMCx1bml0OiJtZXRyaWMifSxIaT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sVmksZSksdC5iaW5kQWxsKFsiX29uTW92ZSIsInNldFVuaXQiXSx0aGlzKX07ZnVuY3Rpb24gcWkodCxlLHIpe3ZhciBuPXImJnIubWF4V2lkdGh8fDEwMCxpPXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixhPXQudW5wcm9qZWN0KFswLGldKSxvPXQudW5wcm9qZWN0KFtuLGldKSxzPWEuZGlzdGFuY2VUbyhvKTtpZihyJiYiaW1wZXJpYWwiPT09ci51bml0KXt2YXIgbD0zLjI4MDgqcztpZihsPjUyODApR2koZSxuLGwvNTI4MCx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLk1pbGVzIikpO2Vsc2UgR2koZSxuLGwsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5GZWV0IikpfWVsc2UgaWYociYmIm5hdXRpY2FsIj09PXIudW5pdCl7R2koZSxuLHMvMTg1Mix0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMiKSl9ZWxzZSBzPj0xZTM/R2koZSxuLHMvMWUzLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuS2lsb21ldGVycyIpKTpHaShlLG4scyx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLk1ldGVycyIpKX1mdW5jdGlvbiBHaSh0LGUscixuKXt2YXIgaSxhLG8scz0oaT1yLGE9TWF0aC5wb3coMTAsKCIiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSxvPShvPWkvYSk+PTEwPzEwOm8+PTU/NTpvPj0zPzM6bz49Mj8yOm8+PTE/MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygxMCxNYXRoLmNlaWwoLU1hdGgubG9nKHQpL01hdGguTE4xMCkpO3JldHVybiBNYXRoLnJvdW5kKHQqZSkvZX0obyksYSpvKSxsPXMvcjt0LnN0eWxlLndpZHRoPWUqbCsicHgiLHQuaW5uZXJIVE1MPXMrIiZuYnNwOyIrbn1IaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1sZWZ0In0sSGkucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oKXtxaSh0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9LEhpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUiLHQuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9vbk1vdmUoKSx0aGlzLl9jb250YWluZXJ9LEhpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXA9dm9pZCAwfSxIaS5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudW5pdD10LHFpKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX07dmFyIFlpPWZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxzY3JlZW49ITEsZSYmZS5jb250YWluZXImJihlLmNvbnRhaW5lciBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50P3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcjp0Lndhcm5PbmNlKCJGdWxsIHNjcmVlbiBjb250cm9sICdjb250YWluZXInIG11c3QgYmUgYSBET00gZWxlbWVudC4iKSksdC5iaW5kQWxsKFsiX29uQ2xpY2tGdWxsc2NyZWVuIiwiX2NoYW5nZUljb24iXSx0aGlzKSwib25mdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiOiJvbm1vemZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6Im9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjoib25tc2Z1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQmJih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJNU0Z1bGxzY3JlZW5DaGFuZ2UiKX07WWkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyfSxZaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LFlpLnByb3RvdHlwZS5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydD1mdW5jdGlvbigpe3JldHVybiEhKHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxZaS5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW4iLHRoaXMuX2NvbnRyb2xDb250YWluZXIpO3IuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIixlKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksZS50eXBlPSJidXR0b24iLHRoaXMuX3VwZGF0ZVRpdGxlKCksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pLHQud2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sWWkucHJvdG90eXBlLl91cGRhdGVUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpdGxlKCk7dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHQpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGU9dH0sWWkucHJvdG90eXBlLl9nZXRUaXRsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKHRoaXMuX2lzRnVsbHNjcmVlbigpPyJGdWxsc2NyZWVuQ29udHJvbC5FeGl0IjoiRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXIiKX0sWWkucHJvdG90eXBlLl9pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVsbHNjcmVlbn0sWWkucHJvdG90eXBlLl9jaGFuZ2VJY29uPWZ1bmN0aW9uKCl7KHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fY29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCJtYXBib3hnbC1jdHJsLXNocmluayIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgibWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuIiksdGhpcy5fdXBkYXRlVGl0bGUoKSl9LFlpLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbj90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4mJnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJiZ0aGlzLl9jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKX07dmFyIFdpPXtjbG9zZUJ1dHRvbjohMCxjbG9zZU9uQ2xpY2s6ITAsY2xhc3NOYW1lOiIiLG1heFdpZHRoOiIyNDBweCJ9LFhpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZChPYmplY3QuY3JlYXRlKFdpKSxyKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xvc2UiLCJyZW1vdmUiLCJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uRHJhZyJdLHRoaXMpfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLnJlbW92ZSgpLHRoaXMuX21hcD1lLHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2smJnRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xvc2UpLHRoaXMub3B0aW9ucy5jbG9zZU9uTW92ZSYmdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl9vbkNsb3NlKSx0aGlzLl9tYXAub24oInJlbW92ZSIsdGhpcy5yZW1vdmUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RyYWNrUG9pbnRlcj8odGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub24oIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSk6dGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgib3BlbiIpKSx0aGlzfSxuLnByb3RvdHlwZS5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcH0sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQmJnIucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRhaW5lciYmKHIucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl9vbkNsb3NlKSx0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25DbG9zZSksdGhpcy5fbWFwLm9mZigicmVtb3ZlIix0aGlzLnJlbW92ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9mZigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0aGlzLl9tYXAub2ZmKCJkcmFnIix0aGlzLl9vbkRyYWcpLGRlbGV0ZSB0aGlzLl9tYXApLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiY2xvc2UiKSksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl90cmFja1BvaW50ZXI9ITEsdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpLHRoaXN9LG4ucHJvdG90eXBlLnRyYWNrUG9pbnRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFja1BvaW50ZXI9ITAsdGhpcy5fcG9zPW51bGwsdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vbigiZHJhZyIsdGhpcy5fb25EcmFnKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQud2luZG93LmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX0sbi5wcm90b3R5cGUuc2V0SFRNTD1mdW5jdGlvbihlKXt2YXIgcixuPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtmb3IoaS5pbm5lckhUTUw9ZTtyPWkuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxuLnByb3RvdHlwZS5nZXRNYXhXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aH0sbi5wcm90b3R5cGUuc2V0TWF4V2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhXaWR0aD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLnNldERPTUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNvbnRlbnQoKSx0aGlzLl9jb250ZW50LmFwcGVuZENoaWxkKHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmFkZENsYXNzTmFtZT1mdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHQpfSxuLnByb3RvdHlwZS5yZW1vdmVDbGFzc05hbWU9ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSh0KX0sbi5wcm90b3R5cGUudG9nZ2xlQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUodCl9LG4ucHJvdG90eXBlLl9jcmVhdGVDb250ZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29udGVudCYmci5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAtY29udGVudCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24mJih0aGlzLl9jbG9zZUJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtcG9wdXAtY2xvc2UtYnV0dG9uIix0aGlzLl9jb250ZW50KSx0aGlzLl9jbG9zZUJ1dHRvbi50eXBlPSJidXR0b24iLHRoaXMuX2Nsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkNsb3NlIHBvcHVwIiksdGhpcy5fY2xvc2VCdXR0b24uaW5uZXJIVE1MPSImIzIxNTsiLHRoaXMuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsb3NlKSl9LG4ucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKHQucG9pbnQpfSxuLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKHQucG9pbnQpfSxuLnByb3RvdHlwZS5fb25EcmFnPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZSh0LnBvaW50KX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzLGk9dGhpcy5fbG5nTGF0fHx0aGlzLl90cmFja1BvaW50ZXI7aWYodGhpcy5fbWFwJiZpJiZ0aGlzLl9jb250ZW50JiYodGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLXRpcCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmdGhpcy5vcHRpb25zLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0pKSx0aGlzLl90cmFja1BvaW50ZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIikpLHRoaXMub3B0aW9ucy5tYXhXaWR0aCYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoIT09dGhpcy5vcHRpb25zLm1heFdpZHRoJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoPXRoaXMub3B0aW9ucy5tYXhXaWR0aCksdGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmIXRoaXMuX3RyYWNrUG9pbnRlciYmKHRoaXMuX2xuZ0xhdD1PaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSwhdGhpcy5fdHJhY2tQb2ludGVyfHxlKSl7dmFyIGE9dGhpcy5fcG9zPXRoaXMuX3RyYWNrUG9pbnRlciYmZT9lOnRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCksbz10aGlzLm9wdGlvbnMuYW5jaG9yLHM9ZnVuY3Rpb24gZShyKXtpZihyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LlBvaW50KDAsMCksdG9wOm5ldyB0LlBvaW50KDAsciksInRvcC1sZWZ0IjpuZXcgdC5Qb2ludChuLG4pLCJ0b3AtcmlnaHQiOm5ldyB0LlBvaW50KC1uLG4pLGJvdHRvbTpuZXcgdC5Qb2ludCgwLC1yKSwiYm90dG9tLWxlZnQiOm5ldyB0LlBvaW50KG4sLW4pLCJib3R0b20tcmlnaHQiOm5ldyB0LlBvaW50KC1uLC1uKSxsZWZ0Om5ldyB0LlBvaW50KHIsMCkscmlnaHQ6bmV3IHQuUG9pbnQoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LlBvaW50fHxBcnJheS5pc0FycmF5KHIpKXt2YXIgaT10LlBvaW50LmNvbnZlcnQocik7cmV0dXJue2NlbnRlcjppLHRvcDppLCJ0b3AtbGVmdCI6aSwidG9wLXJpZ2h0IjppLGJvdHRvbTppLCJib3R0b20tbGVmdCI6aSwiYm90dG9tLXJpZ2h0IjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuUG9pbnQuY29udmVydChyLmNlbnRlcnx8WzAsMF0pLHRvcDp0LlBvaW50LmNvbnZlcnQoci50b3B8fFswLDBdKSwidG9wLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtbGVmdCJdfHxbMCwwXSksInRvcC1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbInRvcC1yaWdodCJdfHxbMCwwXSksYm90dG9tOnQuUG9pbnQuY29udmVydChyLmJvdHRvbXx8WzAsMF0pLCJib3R0b20tbGVmdCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1sZWZ0Il18fFswLDBdKSwiYm90dG9tLXJpZ2h0Ijp0LlBvaW50LmNvbnZlcnQoclsiYm90dG9tLXJpZ2h0Il18fFswLDBdKSxsZWZ0OnQuUG9pbnQuY29udmVydChyLmxlZnR8fFswLDBdKSxyaWdodDp0LlBvaW50LmNvbnZlcnQoci5yaWdodHx8WzAsMF0pfX1yZXR1cm4gZShuZXcgdC5Qb2ludCgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIW8pe3ZhciBsLGM9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLHU9dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtsPWEueStzLmJvdHRvbS55PHU/WyJ0b3AiXTphLnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtdT9bImJvdHRvbSJdOltdLGEueDxjLzI/bC5wdXNoKCJsZWZ0Iik6YS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtYy8yJiZsLnB1c2goInJpZ2h0Iiksbz0wPT09bC5sZW5ndGg/ImJvdHRvbSI6bC5qb2luKCItIil9dmFyIGY9YS5hZGQoc1tvXSkucm91bmQoKTtyLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsemlbb10rIiB0cmFuc2xhdGUoIitmLngrInB4LCIrZi55KyJweCkiKSxEaSh0aGlzLl9jb250YWluZXIsbywicG9wdXAiKX19LG4ucHJvdG90eXBlLl9vbkNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0sbn0odC5FdmVudGVkKTt2YXIgWmk9e3ZlcnNpb246dC52ZXJzaW9uLHN1cHBvcnRlZDplLHNldFJUTFRleHRQbHVnaW46dC5zZXRSVExUZXh0UGx1Z2luLGdldFJUTFRleHRQbHVnaW5TdGF0dXM6dC5nZXRSVExUZXh0UGx1Z2luU3RhdHVzLE1hcDpFaSxOYXZpZ2F0aW9uQ29udHJvbDpQaSxHZW9sb2NhdGVDb250cm9sOlVpLEF0dHJpYnV0aW9uQ29udHJvbDpiaSxTY2FsZUNvbnRyb2w6SGksRnVsbHNjcmVlbkNvbnRyb2w6WWksUG9wdXA6WGksTWFya2VyOkZpLFN0eWxlOnFlLExuZ0xhdDp0LkxuZ0xhdCxMbmdMYXRCb3VuZHM6dC5MbmdMYXRCb3VuZHMsUG9pbnQ6dC5Qb2ludCxNZXJjYXRvckNvb3JkaW5hdGU6dC5NZXJjYXRvckNvb3JkaW5hdGUsRXZlbnRlZDp0LkV2ZW50ZWQsY29uZmlnOnQuY29uZmlnLHByZXdhcm06ZnVuY3Rpb24oKXtCdCgpLmFjcXVpcmUoenQpfSxjbGVhclByZXdhcm1lZFJlc291cmNlczpmdW5jdGlvbigpe3ZhciB0PVJ0O3QmJih0LmlzUHJlbG9hZGVkKCkmJjE9PT10Lm51bUFjdGl2ZSgpPyh0LnJlbGVhc2UoenQpLFJ0PW51bGwpOmNvbnNvbGUud2FybigiQ291bGQgbm90IGNsZWFyIFdlYldvcmtlcnMgc2luY2UgdGhlcmUgYXJlIGFjdGl2ZSBNYXAgaW5zdGFuY2VzIHRoYXQgc3RpbGwgcmVmZXJlbmNlIGl0LiBUaGUgcHJlLXdhcm1lZCBXZWJXb3JrZXIgcG9vbCBjYW4gb25seSBiZSBjbGVhcmVkIHdoZW4gYWxsIG1hcCBpbnN0YW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQgd2l0aCBtYXAucmVtb3ZlKCkiKSl9LGdldCBhY2Nlc3NUb2tlbigpe3JldHVybiB0LmNvbmZpZy5BQ0NFU1NfVE9LRU59LHNldCBhY2Nlc3NUb2tlbihlKXt0LmNvbmZpZy5BQ0NFU1NfVE9LRU49ZX0sZ2V0IGJhc2VBcGlVcmwoKXtyZXR1cm4gdC5jb25maWcuQVBJX1VSTH0sc2V0IGJhc2VBcGlVcmwoZSl7dC5jb25maWcuQVBJX1VSTD1lfSxnZXQgd29ya2VyQ291bnQoKXtyZXR1cm4gRHQud29ya2VyQ291bnR9LHNldCB3b3JrZXJDb3VudCh0KXtEdC53b3JrZXJDb3VudD10fSxnZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKCl7cmV0dXJuIHQuY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUU30sc2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cyhlKXt0LmNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM9ZX0sY2xlYXJTdG9yYWdlOmZ1bmN0aW9uKGUpe3QuY2xlYXJUaWxlQ2FjaGUoZSl9LHdvcmtlclVybDoiIn07cmV0dXJuIFppfSkpLHJ9KSl9LHt9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMkV9fSx7fV0sMjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuImFsdEtleSJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLCJzaGlmdEtleSJpbiB0JiYoZT1lfHx0LnNoaWZ0S2V5IT09by5zaGlmdCxvLnNoaWZ0PSEhdC5zaGlmdEtleSksImN0cmxLZXkiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksIm1ldGFLZXkiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpOyJidXR0b25zImluIHMmJih0PTB8cy5idXR0b25zKSwodCE9PXJ8fGMhPT1pfHx1IT09YXx8bChzKSkmJihyPTB8dCxpPWN8fDAsYT11fHwwLGUmJmUocixpLGEsbykpfWZ1bmN0aW9uIHUodCl7YygwLHQpfWZ1bmN0aW9uIGYoKXsocnx8aXx8YXx8by5zaGlmdHx8by5hbHR8fG8ubWV0YXx8by5jb250cm9sKSYmKGk9YT0wLHI9MCxvLnNoaWZ0PW8uYWx0PW8uY29udHJvbD1vLm1ldGE9ITEsZSYmZSgwLDAsMCxvKSl9ZnVuY3Rpb24gaCh0KXtsKHQpJiZlJiZlKHIsaSxhLG8pfWZ1bmN0aW9uIHAodCl7MD09PW4uYnV0dG9ucyh0KT9jKDAsdCk6YyhyLHQpfWZ1bmN0aW9uIGQodCl7YyhyfG4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBtKHQpe2MociZ+bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcoKXtzfHwocz0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKSl9ZygpO3ZhciB2PXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2LHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUpe2U/ZygpOmZ1bmN0aW9uKCl7aWYoIXMpcmV0dXJuO3M9ITEsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG0pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpLHQhPT13aW5kb3cmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSl9KCl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLHZ9O3ZhciBuPXQoIm1vdXNlLWV2ZW50Iil9LHsibW91c2UtZXZlbnQiOjIzOH1dLDIzNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1lfHx0LmN1cnJlbnRUYXJnZXR8fHQuc3JjRWxlbWVudCxBcnJheS5pc0FycmF5KHIpfHwocj1bMCwwXSk7dmFyIGk9dC5jbGllbnRYfHwwLGE9dC5jbGllbnRZfHwwLG89KHM9ZSxzPT09d2luZG93fHxzPT09ZG9jdW1lbnR8fHM9PT1kb2N1bWVudC5ib2R5P246cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7dmFyIHM7cmV0dXJuIHJbMF09aS1vLmxlZnQsclsxXT1hLW8udG9wLHJ9fSx7fV0sMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKCJidXR0b24iaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRZImluIHQpcmV0dXJuIHQub2Zmc2V0WTt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFktZS50b3B9cmV0dXJuIDB9fSx7fV0sMjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRvLXB4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIGk9bigiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPTE7c3dpdGNoKHQuZGVsdGFNb2RlKXtjYXNlIDE6cz1pO2JyZWFrO2Nhc2UgMjpzPXdpbmRvdy5pbm5lckhlaWdodH1pZihhKj1zLG8qPXMsKG4qPXMpfHxhfHxvKXJldHVybiBlKG4sYSxvLHQpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsYSksYX19LHsidG8tcHgiOjMwOX1dLDI0MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0LHIpeyhmdW5jdGlvbigpewovKiEgTmF0aXZlIFByb21pc2UgT25seQogICAgdjAuOC4xIChjKSBLeWxlIFNpbXBzb24KICAgIE1JVCBMaWNlbnNlOiBodHRwOi8vZ2V0aWZ5Lm1pdC1saWNlbnNlLm9yZwoqLwohZnVuY3Rpb24odCxyLG4pe3JbdF09clt0XXx8bigpLHZvaWQgMCE9PWUmJmUuZXhwb3J0cyYmKGUuZXhwb3J0cz1yW3RdKX0oIlByb21pc2UiLHZvaWQgMCE9PXQ/dDp0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdCxlLG4saT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGE9dm9pZCAwIT09cj9mdW5jdGlvbih0KXtyZXR1cm4gcih0KX06c2V0VGltZW91dDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJ4Iix7fSksdD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cix3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEhPT1ufSl9fWNhdGNoKGUpe3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19ZnVuY3Rpb24gbyh0LHIpe24uYWRkKHQsciksZXx8KGU9YShuLmRyYWluKSl9ZnVuY3Rpb24gcyh0KXt2YXIgZSxyPXR5cGVvZiB0O3JldHVybiBudWxsPT10fHwib2JqZWN0IiE9ciYmImZ1bmN0aW9uIiE9cnx8KGU9dC50aGVuKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmZX1mdW5jdGlvbiBsKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmNoYWluLmxlbmd0aDt0KyspYyh0aGlzLDE9PT10aGlzLnN0YXRlP3RoaXMuY2hhaW5bdF0uc3VjY2Vzczp0aGlzLmNoYWluW3RdLmZhaWx1cmUsdGhpcy5jaGFpblt0XSk7dGhpcy5jaGFpbi5sZW5ndGg9MH1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbixpO3RyeXshMT09PWU/ci5yZWplY3QodC5tc2cpOihuPSEwPT09ZT90Lm1zZzplLmNhbGwodm9pZCAwLHQubXNnKSk9PT1yLnByb21pc2U/ci5yZWplY3QoVHlwZUVycm9yKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihpPXMobikpP2kuY2FsbChuLHIucmVzb2x2ZSxyLnJlamVjdCk6ci5yZXNvbHZlKG4pfWNhdGNoKHQpe3IucmVqZWN0KHQpfX1mdW5jdGlvbiB1KHQpe3ZhciBlLHI9dGhpcztpZighci50cmlnZ2VyZWQpe3IudHJpZ2dlcmVkPSEwLHIuZGVmJiYocj1yLmRlZik7dHJ5eyhlPXModCkpP28oKGZ1bmN0aW9uKCl7dmFyIG49bmV3IHAocik7dHJ5e2UuY2FsbCh0LChmdW5jdGlvbigpe3UuYXBwbHkobixhcmd1bWVudHMpfSksKGZ1bmN0aW9uKCl7Zi5hcHBseShuLGFyZ3VtZW50cyl9KSl9Y2F0Y2godCl7Zi5jYWxsKG4sdCl9fSkpOihyLm1zZz10LHIuc3RhdGU9MSxyLmNoYWluLmxlbmd0aD4wJiZvKGwscikpfWNhdGNoKHQpe2YuY2FsbChuZXcgcChyKSx0KX19fWZ1bmN0aW9uIGYodCl7dmFyIGU9dGhpcztlLnRyaWdnZXJlZHx8KGUudHJpZ2dlcmVkPSEwLGUuZGVmJiYoZT1lLmRlZiksZS5tc2c9dCxlLnN0YXRlPTIsZS5jaGFpbi5sZW5ndGg+MCYmbyhsLGUpKX1mdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSFmdW5jdGlvbihpKXt0LnJlc29sdmUoZVtpXSkudGhlbigoZnVuY3Rpb24odCl7cihpLHQpfSksbil9KGkpfWZ1bmN0aW9uIHAodCl7dGhpcy5kZWY9dCx0aGlzLnRyaWdnZXJlZD0hMX1mdW5jdGlvbiBkKHQpe3RoaXMucHJvbWlzZT10LHRoaXMuc3RhdGU9MCx0aGlzLnRyaWdnZXJlZD0hMSx0aGlzLmNoYWluPVtdLHRoaXMubXNnPXZvaWQgMH1mdW5jdGlvbiBtKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtpZigwIT09dGhpcy5fX05QT19fKXRocm93IFR5cGVFcnJvcigiTm90IGEgcHJvbWlzZSIpO3RoaXMuX19OUE9fXz0xO3ZhciBlPW5ldyBkKHRoaXMpO3RoaXMudGhlbj1mdW5jdGlvbih0LHIpe3ZhciBuPXtzdWNjZXNzOiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0LGZhaWx1cmU6ImZ1bmN0aW9uIj09dHlwZW9mIHImJnJ9O3JldHVybiBuLnByb21pc2U9bmV3IHRoaXMuY29uc3RydWN0b3IoKGZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtuLnJlc29sdmU9dCxuLnJlamVjdD1lfSkpLGUuY2hhaW4ucHVzaChuKSwwIT09ZS5zdGF0ZSYmbyhsLGUpLG4ucHJvbWlzZX0sdGhpcy5jYXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX07dHJ5e3QuY2FsbCh2b2lkIDAsKGZ1bmN0aW9uKHQpe3UuY2FsbChlLHQpfSksKGZ1bmN0aW9uKHQpe2YuY2FsbChlLHQpfSkpfWNhdGNoKHQpe2YuY2FsbChlLHQpfX1uPWZ1bmN0aW9uKCl7dmFyIHQscixuO2Z1bmN0aW9uIGkodCxlKXt0aGlzLmZuPXQsdGhpcy5zZWxmPWUsdGhpcy5uZXh0PXZvaWQgMH1yZXR1cm57YWRkOmZ1bmN0aW9uKGUsYSl7bj1uZXcgaShlLGEpLHI/ci5uZXh0PW46dD1uLHI9bixuPXZvaWQgMH0sZHJhaW46ZnVuY3Rpb24oKXt2YXIgbj10O2Zvcih0PXI9ZT12b2lkIDA7bjspbi5mbi5jYWxsKG4uc2VsZiksbj1uLm5leHR9fX0oKTt2YXIgZz10KHt9LCJjb25zdHJ1Y3RvciIsbSwhMSk7cmV0dXJuIG0ucHJvdG90eXBlPWcsdChnLCJfX05QT19fIiwwLCExKSx0KG0sInJlc29sdmUiLChmdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYxPT09dC5fX05QT19fP3Q6bmV3IHRoaXMoKGZ1bmN0aW9uKGUscil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCJmdW5jdGlvbiIhPXR5cGVvZiByKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtlKHQpfSkpfSkpLHQobSwicmVqZWN0IiwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0aGlzKChmdW5jdGlvbihlLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHwiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7cih0KX0pKX0pKSx0KG0sImFsbCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIltvYmplY3QgQXJyYXldIiE9aS5jYWxsKHQpP2UucmVqZWN0KFR5cGVFcnJvcigiTm90IGFuIGFycmF5IikpOjA9PT10Lmxlbmd0aD9lLnJlc29sdmUoW10pOm5ldyBlKChmdW5jdGlvbihyLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByfHwiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7dmFyIGk9dC5sZW5ndGgsYT1BcnJheShpKSxvPTA7aChlLHQsKGZ1bmN0aW9uKHQsZSl7YVt0XT1lLCsrbz09PWkmJnIoYSl9KSxuKX0pKX0pKSx0KG0sInJhY2UiLChmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJbb2JqZWN0IEFycmF5XSIhPWkuY2FsbCh0KT9lLnJlamVjdChUeXBlRXJyb3IoIk5vdCBhbiBhcnJheSIpKTpuZXcgZSgoZnVuY3Rpb24ocixuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO2goZSx0LChmdW5jdGlvbih0LGUpe3IoZSl9KSxuKX0pKX0pKSxtfSkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoInRpbWVycyIpLnNldEltbWVkaWF0ZSl9LHt0aW1lcnM6MzA2fV0sMjQxOltmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5QSSxpPWMoMTIwKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19ZnVuY3Rpb24gcyh0LGUscixhLG8sYyx1LGYsaCxwKXtpZihwKVQ9cFswXSxrPXBbMV0sXz1wWzJdLHc9cFszXTtlbHNle3ZhciBkPWwodCxlLC1vKTt0PWQueCxlPWQueTt2YXIgbT0odC0oZj0oZD1sKGYsaCwtbykpLngpKS8yLGc9KGUtKGg9ZC55KSkvMix2PW0qbS8ocipyKStnKmcvKGEqYSk7dj4xJiYocio9dj1NYXRoLnNxcnQodiksYSo9dik7dmFyIHk9cipyLHg9YSphLGI9KGM9PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KngteSpnKmcteCptKm0pLyh5KmcqZyt4Km0qbSkpKTtiPT0xLzAmJihiPTEpO3ZhciBfPWIqcipnL2ErKHQrZikvMix3PWIqLWEqbS9yKyhlK2gpLzIsVD1NYXRoLmFzaW4oKChlLXcpL2EpLnRvRml4ZWQoOSkpLGs9TWF0aC5hc2luKCgoaC13KS9hKS50b0ZpeGVkKDkpKTsoVD10PF8/bi1UOlQpPDAmJihUPTIqbitUKSwoaz1mPF8/bi1rOmspPDAmJihrPTIqbitrKSx1JiZUPmsmJihULT0yKm4pLCF1JiZrPlQmJihrLT0yKm4pfWlmKE1hdGguYWJzKGstVCk+aSl7dmFyIEE9ayxNPWYsUz1oO2s9VCtpKih1JiZrPlQ/MTotMSk7dmFyIEU9cyhmPV8rcipNYXRoLmNvcyhrKSxoPXcrYSpNYXRoLnNpbihrKSxyLGEsbywwLHUsTSxTLFtrLEEsXyx3XSl9dmFyIEw9TWF0aC50YW4oKGstVCkvNCksQz00LzMqcipMLFA9NC8zKmEqTCxJPVsyKnQtKHQrQypNYXRoLnNpbihUKSksMiplLShlLVAqTWF0aC5jb3MoVCkpLGYrQypNYXRoLnNpbihrKSxoLVAqTWF0aC5jb3MoayksZixoXTtpZihwKXJldHVybiBJO0UmJihJPUkuY29uY2F0KEUpKTtmb3IodmFyIE89MDtPPEkubGVuZ3RoOyl7dmFyIHo9bChJW09dLElbTysxXSxvKTtJW08rK109ei54LElbTysrXT16Lnl9cmV0dXJuIEl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJue3g6dCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHk6dCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpfX1mdW5jdGlvbiBjKHQpe3JldHVybiB0KihuLzE4MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49MCxpPTAsbD0wLHU9MCxmPW51bGwsaD1udWxsLHA9MCxkPTAsbT0wLGc9dC5sZW5ndGg7bTxnO20rKyl7dmFyIHY9dFttXSx5PXZbMF07c3dpdGNoKHkpe2Nhc2UiTSI6bD12WzFdLHU9dlsyXTticmVhaztjYXNlIkEiOih2PXMocCxkLHZbMV0sdlsyXSxjKHZbM10pLHZbNF0sdls1XSx2WzZdLHZbN10pKS51bnNoaWZ0KCJDIiksdi5sZW5ndGg+NyYmKHIucHVzaCh2LnNwbGljZSgwLDcpKSx2LnVuc2hpZnQoIkMiKSk7YnJlYWs7Y2FzZSJTIjp2YXIgeD1wLGI9ZDsiQyIhPWUmJiJTIiE9ZXx8KHgrPXgtbixiKz1iLWkpLHY9WyJDIix4LGIsdlsxXSx2WzJdLHZbM10sdls0XV07YnJlYWs7Y2FzZSJUIjoiUSI9PWV8fCJUIj09ZT8oZj0yKnAtZixoPTIqZC1oKTooZj1wLGg9ZCksdj1vKHAsZCxmLGgsdlsxXSx2WzJdKTticmVhaztjYXNlIlEiOmY9dlsxXSxoPXZbMl0sdj1vKHAsZCx2WzFdLHZbMl0sdlszXSx2WzRdKTticmVhaztjYXNlIkwiOnY9YShwLGQsdlsxXSx2WzJdKTticmVhaztjYXNlIkgiOnY9YShwLGQsdlsxXSxkKTticmVhaztjYXNlIlYiOnY9YShwLGQscCx2WzFdKTticmVhaztjYXNlIloiOnY9YShwLGQsbCx1KX1lPXkscD12W3YubGVuZ3RoLTJdLGQ9dlt2Lmxlbmd0aC0xXSx2Lmxlbmd0aD40PyhuPXZbdi5sZW5ndGgtNF0saT12W3YubGVuZ3RoLTNdKToobj1wLGk9ZCksci5wdXNoKHYpfXJldHVybiByfX0se31dLDI0MjpbZnVuY3Rpb24odCxlLHIpewovKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwoidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXR9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1vKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlpLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWEuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSx7fV0sMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuW3RdO3ZhciByPVt0XTsic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLGk9ZS5lc2NhcGV8fCJfX18iLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKFsiXFwiLHRbMF0sIlteXFwiLHRbMF0sIlxcIix0WzFdLCJdKlxcIix0WzFdXS5qb2luKCIiKSksbj1bXTtmdW5jdGlvbiBhKGUsYSxvKXt2YXIgcz1yLnB1c2goZS5zbGljZSh0WzBdLmxlbmd0aCwtdFsxXS5sZW5ndGgpKS0xO3JldHVybiBuLnB1c2gocyksaStzK2l9ci5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Zvcih2YXIgaSxvPTA7dCE9aTspaWYoaT10LHQ9dC5yZXBsYWNlKGUsYSksbysrPjFlNCl0aHJvdyBFcnJvcigiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS4iKTtyW25dPXR9KSksbj1uLnJldmVyc2UoKSxyPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIoXFwiK2krcisiXFwiK2krIikiLCJnIiksdFswXSsiJDEiK3RbMV0pfSkpLGV9KSl9KSk7dmFyIG89bmV3IFJlZ0V4cCgiXFwiK2krIihbMC05XSspXFwiK2kpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpcyIpO2EucHVzaChlLnNsaWNlKDAsaS5pbmRleCkpLGEucHVzaCh0KHJbaVsxXV0scikpLGU9ZS5zbGljZShpLmluZGV4K2lbMF0ubGVuZ3RoKX1yZXR1cm4gYS5wdXNoKGUpLGF9KHJbMF0scil9ZnVuY3Rpb24gaSh0LGUpe2lmKGUmJmUuZmxhdCl7dmFyIHIsbj1lJiZlLmVzY2FwZXx8Il9fXyIsaT10WzBdO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKylcXCIrbiksbz0wO2khPXI7KXtpZihvKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluICIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbiB0KGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJihyPXIucmVkdWNlKHQsIiIpKSxlK3J9KSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDI0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjI0OH1dLDI0NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGksKGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSwibSI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz0ibCIscj0ibSI9PXI/ImwiOiJMIik7Oyl7aWYoaS5sZW5ndGg9PW5bb10pcmV0dXJuIGkudW5zaGlmdChyKSxlLnB1c2goaSk7aWYoaS5sZW5ndGg8bltvXSl0aHJvdyBuZXcgRXJyb3IoIm1hbGZvcm1lZCBwYXRoIGRhdGEiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSkpLGV9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGk9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgYT0vLT9bMC05XSpcLj9bMC05XSsoPzplWy0rXT9cZCspPy9naX0se31dLDI0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSwyNDc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEsbyxzOyJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJm51bGwhPT1wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06bnVsbCE9dCYmdC5ocnRpbWU/KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihyKCktbykvMWU2fSxuPXQuaHJ0aW1lLGE9KHI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gMWU5Kih0PW4oKSlbMF0rdFsxXX0pKCkscz0xZTkqdC51cHRpbWUoKSxvPWEtcyk6RGF0ZS5ub3c/KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpLWl9LGk9RGF0ZS5ub3coKSk6KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpLWl9LGk9KG5ldyBEYXRlKS5nZXRUaW1lKCkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2VzczoyNzJ9XSwyNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89e307aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1pKGUpKSxBcnJheS5pc0FycmF5KGUpKXt2YXIgcz17fTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXNbZVthXV09ITA7ZT1zfWZvcihuIGluIGUpZVtuXT1pKGVbbl0pO3ZhciBsPXt9O2ZvcihuIGluIGUpe3ZhciBjPWVbbl07aWYoQXJyYXkuaXNBcnJheShjKSlmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO2lmKHImJihsW3VdPSEwKSx1IGluIHQpe2lmKG9bbl09dFt1XSxyKWZvcih2YXIgZj1hO2Y8Yy5sZW5ndGg7ZisrKWxbY1tmXV09ITA7YnJlYWt9fWVsc2UgbiBpbiB0JiYoZVtuXSYmKG9bbl09dFtuXSksciYmKGxbbl09ITApKX1pZihyKWZvcihuIGluIHQpbFtuXXx8KG9bbl09dFtuXSk7cmV0dXJuIG99O3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5bdF0/blt0XTooInN0cmluZyI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xzKixccyp8XHMrLykpLHQpfX0se31dLDI0OTpbZnVuY3Rpb24odCxlLHIpewovKgogKiBAY29weXJpZ2h0IDIwMTYgU2VhbiBDb25uZWxseSAoQHZvaWRxayksIGh0dHA6Ly9zeW50aGV0aS5jYwogKiBAbGljZW5zZSBNSVQKICogQHByZXNlcnZlIFByb2plY3QgSG9tZTogaHR0cHM6Ly9naXRodWIuY29tL3ZvaWRxay9wb2x5Ym9vbGpzCiAqLwp2YXIgbixpPXQoIi4vbGliL2J1aWxkLWxvZyIpLGE9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsZj1hKCk7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gZi5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGYsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxmLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxmLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixmLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjI1MCwiLi9saWIvZXBzaWxvbiI6MjUxLCIuL2xpYi9nZW9qc29uIjoyNTIsIi4vbGliL2ludGVyc2VjdGVyIjoyNTMsIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6MjU1LCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjoyNTZ9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWkpKihlWzFdLWEpLShzLWEpKihsLWkpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzFdLXJbMV0sYT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmEraSpzO3JldHVybiEobDx0KSYmIShsLShhKmErcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzBdLXJbMF0sYT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGkqcy1vKmEpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWlbMF0tblswXSxsPWlbMV0tblsxXSxjPWEqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0sZj1lWzFdLW5bMV0saD0ocypmLWwqdSkvYyxwPShhKmYtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2gqYSxlWzFdK2gqb119O3JldHVybiBkLmFsb25nQT1oPD0tdD8tMjpoPHQ/LTE6aC0xPD0tdD8wOmgtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWk+dCE9by1pPnQmJihhLWMpKihpLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksYT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDI1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksaT0xO2k8ZS5sZW5ndGg7aSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVtpXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGkodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgYT1pKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBhPWkoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihhLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChhKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhhLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0saT10W3QubGVuZ3RoLTFdWzFdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTthLnB1c2goW3MsbF0pLHIrPWwqbi1zKmksbj1zLGk9bH1yZXR1cm4gcjwwIT09ZSYmYS5yZXZlcnNlKCksYS5wdXNoKFthWzBdWzBdLGFbMF1bMV1dKSxhfXZhciB1PVtdO2Z1bmN0aW9uIGYodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGgodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspZih0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGEuY2hpbGRyZW4ubGVuZ3RoO3MrKylmKGEuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sMjUzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzPWUucG9pbnRzQ29tcGFyZShyLGEpO3JldHVybiAwIT09cz9zOmUucG9pbnRzU2FtZShuLG8pPzA6dCE9PWk/dD8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKG4saT9hOm8saT9vOmEpPzE6LTF9KHQuaXNTdGFydCx0LnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLm5vZGUoe2lzU3RhcnQ6ITAscHQ6dC5zdGFydCxzZWc6dCxwcmltYXJ5OmUsb3RoZXI6bnVsbCxzdGF0dXM6bnVsbH0pO3JldHVybiBvKHIsdC5lbmQpLHJ9KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLm5vZGUoe2lzU3RhcnQ6ITEscHQ6ZS5lbmQsc2VnOmUscHJpbWFyeTpyLG90aGVyOnQsc3RhdHVzOm51bGx9KTt0Lm90aGVyPWksbyhpLHQucHQpfShyLHQsZSkscn1mdW5jdGlvbiBsKHQsZSl7dmFyIG49aShlLHQuc2VnLmVuZCx0LnNlZyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ciYmci5zZWdtZW50Q2hvcCh0LnNlZyxlKSx0Lm90aGVyLnJlbW92ZSgpLHQuc2VnLmVuZD1lLHQub3RoZXIucHQ9ZSxvKHQub3RoZXIsdC5wdCl9KHQsZSkscyhuLHQucHJpbWFyeSl9ZnVuY3Rpb24gYyhpLG8pe3ZhciBzPW4uY3JlYXRlKCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcy5maW5kVHJhbnNpdGlvbigoZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybihuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCxlLnBvaW50c0NvbGxpbmVhcihhLHMsbCk/ZS5wb2ludHNDb2xsaW5lYXIobyxzLGwpfHxlLnBvaW50QWJvdmVPck9uTGluZShvLHMsbCk/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShhLHMsbCk/MTotMSk+MH0pKX1mdW5jdGlvbiB1KHQsbil7dmFyIGk9dC5zZWcsYT1uLnNlZyxvPWkuc3RhcnQscz1pLmVuZCxjPWEuc3RhcnQsdT1hLmVuZDtyJiZyLmNoZWNrSW50ZXJzZWN0aW9uKGksYSk7dmFyIGY9ZS5saW5lc0ludGVyc2VjdChvLHMsYyx1KTtpZighMT09PWYpe2lmKCFlLnBvaW50c0NvbGxpbmVhcihvLHMsYykpcmV0dXJuITE7aWYoZS5wb2ludHNTYW1lKG8sdSl8fGUucG9pbnRzU2FtZShzLGMpKXJldHVybiExO3ZhciBoPWUucG9pbnRzU2FtZShvLGMpLHA9ZS5wb2ludHNTYW1lKHMsdSk7aWYoaCYmcClyZXR1cm4gbjt2YXIgZD0haCYmZS5wb2ludEJldHdlZW4obyxjLHUpLG09IXAmJmUucG9pbnRCZXR3ZWVuKHMsYyx1KTtpZihoKXJldHVybiBtP2wobixzKTpsKHQsdSksbjtkJiYocHx8KG0/bChuLHMpOmwodCx1KSksbChuLG8pKX1lbHNlIDA9PT1mLmFsb25nQSYmKC0xPT09Zi5hbG9uZ0I/bCh0LGMpOjA9PT1mLmFsb25nQj9sKHQsZi5wdCk6MT09PWYuYWxvbmdCJiZsKHQsdSkpLDA9PT1mLmFsb25nQiYmKC0xPT09Zi5hbG9uZ0E/bChuLG8pOjA9PT1mLmFsb25nQT9sKG4sZi5wdCk6MT09PWYuYWxvbmdBJiZsKG4scykpO3JldHVybiExfWZvcih2YXIgZj1bXTshYS5pc0VtcHR5KCk7KXt2YXIgaD1hLmdldEhlYWQoKTtpZihyJiZyLnZlcnQoaC5wdFswXSksaC5pc1N0YXJ0KXtyJiZyLnNlZ21lbnROZXcoaC5zZWcsaC5wcmltYXJ5KTt2YXIgcD1jKGgpLGQ9cC5iZWZvcmU/cC5iZWZvcmUuZXY6bnVsbCxtPXAuYWZ0ZXI/cC5hZnRlci5ldjpudWxsO2Z1bmN0aW9uIGcoKXtpZihkKXt2YXIgdD11KGgsZCk7aWYodClyZXR1cm4gdH1yZXR1cm4hIW0mJnUoaCxtKX1yJiZyLnRlbXBTdGF0dXMoaC5zZWcsISFkJiZkLnNlZywhIW0mJm0uc2VnKTt2YXIgdix5PWcoKTtpZih5KXt2YXIgeDtpZih0KSh4PW51bGw9PT1oLnNlZy5teUZpbGwuYmVsb3d8fGguc2VnLm15RmlsbC5hYm92ZSE9PWguc2VnLm15RmlsbC5iZWxvdykmJih5LnNlZy5teUZpbGwuYWJvdmU9IXkuc2VnLm15RmlsbC5hYm92ZSk7ZWxzZSB5LnNlZy5vdGhlckZpbGw9aC5zZWcubXlGaWxsO3ImJnIuc2VnbWVudFVwZGF0ZSh5LnNlZyksaC5vdGhlci5yZW1vdmUoKSxoLnJlbW92ZSgpfWlmKGEuZ2V0SGVhZCgpIT09aCl7ciYmci5yZXdpbmQoaC5zZWcpO2NvbnRpbnVlfWlmKHQpeD1udWxsPT09aC5zZWcubXlGaWxsLmJlbG93fHxoLnNlZy5teUZpbGwuYWJvdmUhPT1oLnNlZy5teUZpbGwuYmVsb3csaC5zZWcubXlGaWxsLmJlbG93PW0/bS5zZWcubXlGaWxsLmFib3ZlOmksaC5zZWcubXlGaWxsLmFib3ZlPXg/IWguc2VnLm15RmlsbC5iZWxvdzpoLnNlZy5teUZpbGwuYmVsb3c7ZWxzZSBpZihudWxsPT09aC5zZWcub3RoZXJGaWxsKXY9bT9oLnByaW1hcnk9PT1tLnByaW1hcnk/bS5zZWcub3RoZXJGaWxsLmFib3ZlOm0uc2VnLm15RmlsbC5hYm92ZTpoLnByaW1hcnk/bzppLGguc2VnLm90aGVyRmlsbD17YWJvdmU6dixiZWxvdzp2fTtyJiZyLnN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhbSYmbS5zZWcpLGgub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6aH0pKX1lbHNle3ZhciBiPWguc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhaC5wcmltYXJ5KXt2YXIgXz1oLnNlZy5teUZpbGw7aC5zZWcubXlGaWxsPWguc2VnLm90aGVyRmlsbCxoLnNlZy5vdGhlckZpbGw9X31mLnB1c2goaC5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxmfXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCEwKX0pKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pKSxjKGUsbil9fX19LHsiLi9saW5rZWQtbGlzdCI6MjU0fV0sMjU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD17cm9vdDp7cm9vdDohMCxuZXh0Om51bGx9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJmUhPT10LnJvb3R9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQucm9vdC5uZXh0fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdC5uZXh0fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5yb290LGk9dC5yb290Lm5leHQ7bnVsbCE9PWk7KXtpZihyKGkpKXJldHVybiBlLnByZXY9aS5wcmV2LGUubmV4dD1pLGkucHJldi5uZXh0PWUsdm9pZChpLnByZXY9ZSk7bj1pLGk9aS5uZXh0fW4ubmV4dD1lLGUucHJldj1uLGUubmV4dD1udWxsfSxmaW5kVHJhbnNpdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHI9dC5yb290LG49dC5yb290Lm5leHQ7bnVsbCE9PW4mJiFlKG4pOylyPW4sbj1uLm5leHQ7cmV0dXJue2JlZm9yZTpyPT09dC5yb290P251bGw6cixhZnRlcjpuLGluc2VydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PXIsdC5uZXh0PW4sci5uZXh0PXQsbnVsbCE9PW4mJihuLnByZXY9dCksdH19fX07cmV0dXJuIHR9LG5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1udWxsLHQubmV4dD1udWxsLHQucmVtb3ZlPWZ1bmN0aW9uKCl7dC5wcmV2Lm5leHQ9dC5uZXh0LHQubmV4dCYmKHQubmV4dC5wcmV2PXQucHJldiksdC5wcmV2PW51bGwsdC5uZXh0PW51bGx9LHR9fX0se31dLDI1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtlbHNle3ImJnIuY2hhaW5TdGFydCh0KTtmb3IodmFyIHM9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxsPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sYz1zLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGY9KGc9blt1XSlbMF0saD0oZ1sxXSxnW2cubGVuZ3RoLTFdKTtnW2cubGVuZ3RoLTJdO2lmKGUucG9pbnRzU2FtZShmLGEpKXtpZihrKHUsITAsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykpe2lmKGsodSwhMCwhMSkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxhKSl7aWYoayh1LCExLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pJiZrKHUsITEsITEpKWJyZWFrfWlmKGM9PT1zKXJldHVybiBuLnB1c2goW2Esb10pLHZvaWQociYmci5jaGFpbk5ldyhhLG8pKTtpZihjPT09bCl7ciYmci5jaGFpbk1hdGNoKHMuaW5kZXgpO3ZhciBwPXMuaW5kZXgsZD1zLm1hdGNoZXNfcHQxP286YSxtPXMubWF0Y2hlc19oZWFkLGc9bltwXSx2PW0/Z1swXTpnW2cubGVuZ3RoLTFdLHk9bT9nWzFdOmdbZy5sZW5ndGgtMl0seD1tP2dbZy5sZW5ndGgtMV06Z1swXSxiPW0/Z1tnLmxlbmd0aC0yXTpnWzFdO3JldHVybiBlLnBvaW50c0NvbGxpbmVhcih5LHYsZCkmJihtPyhyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LGQpLGcuc2hpZnQoKSk6KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsZCksZy5wb3AoKSksdj15KSxlLnBvaW50c1NhbWUoeCxkKT8obi5zcGxpY2UocCwxKSxlLnBvaW50c0NvbGxpbmVhcihiLHgsdikmJihtPyhyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LHYpLGcucG9wKCkpOihyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LHYpLGcuc2hpZnQoKSkpLHImJnIuY2hhaW5DbG9zZShzLmluZGV4KSx2b2lkIGkucHVzaChnKSk6dm9pZChtPyhyJiZyLmNoYWluQWRkSGVhZChzLmluZGV4LGQpLGcudW5zaGlmdChkKSk6KHImJnIuY2hhaW5BZGRUYWlsKHMuaW5kZXgsZCksZy5wdXNoKGQpKSl9dmFyIF89cy5pbmRleCx3PWwuaW5kZXg7ciYmci5jaGFpbkNvbm5lY3QoXyx3KTt2YXIgVD1uW19dLmxlbmd0aDxuW3ddLmxlbmd0aDtzLm1hdGNoZXNfaGVhZD9sLm1hdGNoZXNfaGVhZD9UPyhBKF8pLE0oXyx3KSk6KEEodyksTSh3LF8pKTpNKHcsXyk6bC5tYXRjaGVzX2hlYWQ/TShfLHcpOlQ/KEEoXyksTSh3LF8pKTooQSh3KSxNKF8sdykpfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiBjLmluZGV4PXQsYy5tYXRjaGVzX2hlYWQ9ZSxjLm1hdGNoZXNfcHQxPXIsYz09PXM/KGM9bCwhMSk6KGM9bnVsbCwhMCl9ZnVuY3Rpb24gQSh0KXtyJiZyLmNoYWluUmV2ZXJzZSh0KSxuW3RdLnJldmVyc2UoKX1mdW5jdGlvbiBNKHQsaSl7dmFyIGE9blt0XSxvPW5baV0scz1hW2EubGVuZ3RoLTFdLGw9YVthLmxlbmd0aC0yXSxjPW9bMF0sdT1vWzFdO2UucG9pbnRzQ29sbGluZWFyKGwscyxjKSYmKHImJnIuY2hhaW5SZW1vdmVUYWlsKHQscyksYS5wb3AoKSxzPWwpLGUucG9pbnRzQ29sbGluZWFyKHMsYyx1KSYmKHImJnIuY2hhaW5SZW1vdmVIZWFkKGksYyksby5zaGlmdCgpKSxyJiZyLmNoYWluSm9pbih0LGkpLG5bdF09YS5jb25jYXQobyksbi5zcGxpY2UoaSwxKX19KSksaX19LHt9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT0odC5teUZpbGwuYWJvdmU/ODowKSsodC5teUZpbGwuYmVsb3c/NDowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmFib3ZlPzI6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT1lW2ldJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZCxteUZpbGw6e2Fib3ZlOjE9PT1lW2ldLGJlbG93OjI9PT1lW2ldfSxvdGhlckZpbGw6bnVsbH0pfSkpLHImJnIuc2VsZWN0ZWQobiksbn12YXIgaT17dW5pb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMiwwLDAsMSwwLDEsMCwwLDAsMCwwXSxlKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwwLDIsMCwyLDAsMCwxLDEsMCwyLDEsMF0sZSl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDIsMCwyLDAsMSwxLDAsMCwwLDEsMiwwXSxlKX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMCwwLDEsMSwwLDIsMCwyLDAsMCwwLDBdLGUpfSx4b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMCwwLDEsMSwwLDAsMiwwLDEsMiwwXSxlKX19O2UuZXhwb3J0cz1pfSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInN0cmVhbSIpLlRyYW5zZm9ybSxpPXQoInN0cmVhbS1wYXJzZXIiKTtmdW5jdGlvbiBhKCl7bi5jYWxsKHRoaXMse3JlYWRhYmxlT2JqZWN0TW9kZTohMH0pfWZ1bmN0aW9uIG8odCxlLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfHwiIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT10LGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuc3RhdHVzQ29kZT1yKX1hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGkoYS5wcm90b3R5cGUpLHIuUGFyc2VyU3RyZWFtPWEsci5zbGljZUVxPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZSxpPTA7aTxyLmxlbmd0aDspaWYodFtuKytdIT09cltpKytdKXJldHVybiExO3JldHVybiEwfSxyLnN0cjJhcnI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPTA7aWYoZSYmImhleCI9PT1lKWZvcig7bjx0Lmxlbmd0aDspci5wdXNoKHBhcnNlSW50KHQuc2xpY2UobixuKzIpLDE2KSksbis9MjtlbHNlIGZvcig7bjx0Lmxlbmd0aDtuKyspci5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQobikpO3JldHVybiByfSxyLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdfHRbZSsxXTw8OH0sci5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlKzFdfHRbZV08PDh9LHIucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTZ8MTY3NzcyMTYqdFtlKzNdfSxyLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2UrM118dFtlKzJdPDw4fHRbZSsxXTw8MTZ8MTY3NzcyMTYqdFtlXX0sby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLG8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW8sci5Qcm9iZUVycm9yPW99LHtzdHJlYW06MjgwLCJzdHJlYW0tcGFyc2VyIjoyOTV9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPW5ldyBFcnJvcih0KTtyZXR1cm4gci5jb2RlPWUscn1mdW5jdGlvbiBpKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9Y2F0Y2goZSl7cmV0dXJuIHR9fWZ1bmN0aW9uIGEodCxlLHIpe3RoaXMuaW5wdXQ9dC5zdWJhcnJheShlLHIpLHRoaXMuc3RhcnQ9ZTt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdGhpcy5pbnB1dC5zdWJhcnJheSgwLDQpKTtpZigiSUkqXDAiIT09aSYmIk1NXDAqIiE9PWkpdGhyb3cgbigiaW52YWxpZCBUSUZGIHNpZ25hdHVyZSIsIkVCQUREQVRBIik7dGhpcy5iaWdfZW5kaWFuPSJNIj09PWlbMF19YS5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbih0KXt0aGlzLmFib3J0ZWQ9ITE7dmFyIGU9dGhpcy5yZWFkX3VpbnQzMig0KTtmb3IodGhpcy5pZmRzX3RvX3JlYWQ9W3tpZDowLG9mZnNldDplfV07dGhpcy5pZmRzX3RvX3JlYWQubGVuZ3RoPjAmJiF0aGlzLmFib3J0ZWQ7KXt2YXIgcj10aGlzLmlmZHNfdG9fcmVhZC5zaGlmdCgpO3Iub2Zmc2V0JiZ0aGlzLnNjYW5faWZkKHIuaWQsci5vZmZzZXQsdCl9fSxhLnByb3RvdHlwZS5yZWFkX3VpbnQxNj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0O2lmKHQrMj5lLmxlbmd0aCl0aHJvdyBuKCJ1bmV4cGVjdGVkIEVPRiIsIkVCQUREQVRBIik7cmV0dXJuIHRoaXMuYmlnX2VuZGlhbj8yNTYqZVt0XStlW3QrMV06ZVt0XSsyNTYqZVt0KzFdfSxhLnByb3RvdHlwZS5yZWFkX3VpbnQzMj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0O2lmKHQrND5lLmxlbmd0aCl0aHJvdyBuKCJ1bmV4cGVjdGVkIEVPRiIsIkVCQUREQVRBIik7cmV0dXJuIHRoaXMuYmlnX2VuZGlhbj8xNjc3NzIxNiplW3RdKzY1NTM2KmVbdCsxXSsyNTYqZVt0KzJdK2VbdCszXTplW3RdKzI1NiplW3QrMV0rNjU1MzYqZVt0KzJdKzE2Nzc3MjE2KmVbdCszXX0sYS5wcm90b3R5cGUuaXNfc3ViaWZkX2xpbms9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmJjM0NjY1PT09ZXx8MD09PXQmJjM0ODUzPT09ZXx8MzQ2NjU9PT10JiY0MDk2NT09PWV9LGEucHJvdG90eXBlLmV4aWZfZm9ybWF0X2xlbmd0aD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA3OnJldHVybiAxO2Nhc2UgMzpjYXNlIDg6cmV0dXJuIDI7Y2FzZSA0OmNhc2UgOTpjYXNlIDExOnJldHVybiA0O2Nhc2UgNTpjYXNlIDEwOmNhc2UgMTI6cmV0dXJuIDg7ZGVmYXVsdDpyZXR1cm4gMH19LGEucHJvdG90eXBlLmV4aWZfZm9ybWF0X3JlYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOmNhc2UgMjpyZXR1cm4gcj10aGlzLmlucHV0W2VdO2Nhc2UgNjpyZXR1cm4ocj10aGlzLmlucHV0W2VdKXwzMzU1NDQzMCooMTI4JnIpO2Nhc2UgMzpyZXR1cm4gcj10aGlzLnJlYWRfdWludDE2KGUpO2Nhc2UgODpyZXR1cm4ocj10aGlzLnJlYWRfdWludDE2KGUpKXwxMzEwNzAqKDMyNzY4JnIpO2Nhc2UgNDpyZXR1cm4gcj10aGlzLnJlYWRfdWludDMyKGUpO2Nhc2UgOTpyZXR1cm4gMHwocj10aGlzLnJlYWRfdWludDMyKGUpKTtjYXNlIDU6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6Y2FzZSA3OmRlZmF1bHQ6cmV0dXJuIG51bGx9fSxhLnByb3RvdHlwZS5zY2FuX2lmZD1mdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5yZWFkX3VpbnQxNihlKTtlKz0yO2Zvcih2YXIgbz0wO288YTtvKyspe3ZhciBzPXRoaXMucmVhZF91aW50MTYoZSksbD10aGlzLnJlYWRfdWludDE2KGUrMiksYz10aGlzLnJlYWRfdWludDMyKGUrNCksdT10aGlzLmV4aWZfZm9ybWF0X2xlbmd0aChsKSxmPWMqdSxoPWY8PTQ/ZSs4OnRoaXMucmVhZF91aW50MzIoZSs4KSxwPSExO2lmKGgrZj50aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBuKCJ1bmV4cGVjdGVkIEVPRiIsIkVCQUREQVRBIik7Zm9yKHZhciBkPVtdLG09aCxnPTA7ZzxjO2crKyxtKz11KXt2YXIgdj10aGlzLmV4aWZfZm9ybWF0X3JlYWQobCxtKTtpZihudWxsPT09dil7ZD1udWxsO2JyZWFrfWQucHVzaCh2KX1pZihBcnJheS5pc0FycmF5KGQpJiYyPT09bCYmKGQ9aShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCkpKSYmIlwwIj09PWRbZC5sZW5ndGgtMV0mJihkPWQuc2xpY2UoMCwtMSkpLHRoaXMuaXNfc3ViaWZkX2xpbmsodCxzKSYmQXJyYXkuaXNBcnJheShkKSYmTnVtYmVyLmlzSW50ZWdlcihkWzBdKSYmZFswXT4wJiYodGhpcy5pZmRzX3RvX3JlYWQucHVzaCh7aWQ6cyxvZmZzZXQ6ZFswXX0pLHA9ITApLCExPT09cih7aXNfYmlnX2VuZGlhbjp0aGlzLmJpZ19lbmRpYW4saWZkOnQsdGFnOnMsZm9ybWF0OmwsY291bnQ6YyxlbnRyeV9vZmZzZXQ6ZSt0aGlzLnN0YXJ0LGRhdGFfbGVuZ3RoOmYsZGF0YV9vZmZzZXQ6aCt0aGlzLnN0YXJ0LHZhbHVlOmQsaXNfc3ViaWZkX2xpbms6cH0pKXJldHVybiB2b2lkKHRoaXMuYWJvcnRlZD0hMCk7ZSs9MTJ9MD09PXQmJnRoaXMuaWZkc190b19yZWFkLnB1c2goe2lkOjEsb2Zmc2V0OnRoaXMucmVhZF91aW50MzIoZSl9KX0sZS5leHBvcnRzLkV4aWZQYXJzZXI9YSxlLmV4cG9ydHMuZ2V0X29yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPTA7dHJ5e3JldHVybiBuZXcgYSh0LDAsdC5sZW5ndGgpLmVhY2goKGZ1bmN0aW9uKHQpe2lmKDA9PT10LmlmZCYmMjc0PT09dC50YWcmJkFycmF5LmlzQXJyYXkodC52YWx1ZSkpcmV0dXJuIGU9dC52YWx1ZVswXSwhMX0pKSxlfWNhdGNoKHQpe3JldHVybi0xfX19LHt9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb21tb24iKS5yZWFkVUludDE2QkUsaT10KCIuL2NvbW1vbiIpLnJlYWRVSW50MzJCRTtmdW5jdGlvbiBhKHQsZSl7aWYodC5sZW5ndGg8NCtlKXJldHVybiBudWxsO3ZhciByPWkodCxlKTtyZXR1cm4gdC5sZW5ndGg8citlfHxyPDg/bnVsbDp7Ym94dHlwZTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShlKzQsZSs4KSksZGF0YTp0LnNsaWNlKGUrOCxlK3IpLGVuZDplK3J9fWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7c3dpdGNoKG4uYm94dHlwZSl7Y2FzZSJpc3BlIjplLnNpemVzLnB1c2goe3dpZHRoOmkobi5kYXRhLDQpLGhlaWdodDppKG4uZGF0YSw4KX0pO2JyZWFrO2Nhc2UiaXJvdCI6ZS50cmFuc2Zvcm1zLnB1c2goe3R5cGU6Imlyb3QiLHZhbHVlOjMmbi5kYXRhWzBdfSk7YnJlYWs7Y2FzZSJpbWlyIjplLnRyYW5zZm9ybXMucHVzaCh7dHlwZToiaW1pciIsdmFsdWU6MSZuLmRhdGFbMF19KX1yPW4uZW5kfX1mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTxyO2krKyluPTI1NipuKyh0W2UraV18fDApO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9dFs0XT4+NCYxNSxpPTE1JnRbNF0sYT10WzVdPj40JjE1LG89bih0LDYpLGw9OCxjPTA7YzxvO2MrKyl7dmFyIHU9bih0LGwpLGY9bih0LGwrPTIpLGg9cyh0LGwrPTIsYSkscD1uKHQsbCs9YSk7aWYobCs9MiwwPT09ZiYmMT09PXApe3ZhciBkPXModCxsLHIpLG09cyh0LGwrcixpKTtlLml0ZW1fbG9jW3VdPXtsZW5ndGg6bSxvZmZzZXQ6ZCtofX1sKz1wKihyK2kpfX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW4odCw0KSxpPTYsbz0wO288cjtvKyspe3ZhciBzPWEodCxpKTtpZighcylicmVhaztpZigiaW5mZSI9PT1zLmJveHR5cGUpe2Zvcih2YXIgbD1uKHMuZGF0YSw0KSxjPSIiLHU9ODt1PHMuZGF0YS5sZW5ndGgmJnMuZGF0YVt1XTt1KyspYys9U3RyaW5nLmZyb21DaGFyQ29kZShzLmRhdGFbdV0pO2UuaXRlbV9pbmZbY109bH1pPXMuZW5kfX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7Oyl7dmFyIG49YSh0LHIpO2lmKCFuKWJyZWFrOyJpcGNvIj09PW4uYm94dHlwZSYmbyhuLmRhdGEsZSkscj1uLmVuZH19ZS5leHBvcnRzLnVuYm94PWEsZS5leHBvcnRzLnJlYWRTaXplRnJvbU1ldGE9ZnVuY3Rpb24odCl7dmFyIGU9e3NpemVzOltdLHRyYW5zZm9ybXM6W10saXRlbV9pbmY6e30saXRlbV9sb2M6e319O2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQ7Oyl7dmFyIG49YSh0LHIpO2lmKCFuKWJyZWFrOyJpcHJwIj09PW4uYm94dHlwZSYmdShuLmRhdGEsZSksImlsb2MiPT09bi5ib3h0eXBlJiZsKG4uZGF0YSxlKSwiaWluZiI9PT1uLmJveHR5cGUmJmMobi5kYXRhLGUpLHI9bi5lbmR9fSh0LGUpLGUuc2l6ZXMubGVuZ3RoKXt2YXIgcixuLGksbz0ocj1lLnNpemVzLG49ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQud2lkdGg+ZS53aWR0aHx8dC53aWR0aD09PWUud2lkdGgmJnQuaGVpZ2h0PmUuaGVpZ2h0P3Q6ZX0pKSxpPXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmhlaWdodD5lLmhlaWdodHx8dC5oZWlnaHQ9PT1lLmhlaWdodCYmdC53aWR0aD5lLndpZHRoP3Q6ZX0pKSxuLndpZHRoPmkuaGVpZ2h0fHxuLndpZHRoPT09aS5oZWlnaHQmJm4uaGVpZ2h0Pmkud2lkdGg/bjppKSxzPTE7ZS50cmFuc2Zvcm1zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXsxOjYsMjo1LDM6OCw0OjcsNTo0LDY6Myw3OjIsODoxfSxyPXsxOjQsMjozLDM6Miw0OjEsNTo2LDY6NSw3OjgsODo3fTtpZigiaW1pciI9PT10LnR5cGUmJihzPTA9PT10LnZhbHVlP3Jbc106ZVtzPWVbcz1yW3NdXV0pLCJpcm90Ij09PXQudHlwZSlmb3IodmFyIG49MDtuPHQudmFsdWU7bisrKXM9ZVtzXX0pKTt2YXIgZj1udWxsO3JldHVybiBlLml0ZW1faW5mLkV4aWYmJihmPWUuaXRlbV9sb2NbZS5pdGVtX2luZi5FeGlmXSkse3dpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0LG9yaWVudGF0aW9uOmUudHJhbnNmb3Jtcy5sZW5ndGg/czpudWxsLHZhcmlhbnRzOmUuc2l6ZXMsZXhpZl9sb2NhdGlvbjpmfX19LGUuZXhwb3J0cy5nZXRNaW1lVHlwZT1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZSgwLDQpKSxyPXt9O3JbZV09ITA7Zm9yKHZhciBuPTg7bjx0Lmxlbmd0aDtuKz00KXJbU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc2xpY2UobixuKzQpKV09ITA7aWYoci5taWYxfHxyLm1zZjF8fHIubWlhZilyZXR1cm4iYXZpZiI9PT1lfHwiYXZpcyI9PT1lfHwiYXZpbyI9PT1lP3t0eXBlOiJhdmlmIixtaW1lOiJpbWFnZS9hdmlmIn06ImhlaWMiPT09ZXx8ImhlaXgiPT09ZT97dHlwZToiaGVpYyIsbWltZToiaW1hZ2UvaGVpYyJ9OiJoZXZjIj09PWV8fCJoZXZ4Ij09PWU/e3R5cGU6ImhlaWMiLG1pbWU6ImltYWdlL2hlaWMtc2VxdWVuY2UifTpyLmF2aWZ8fHIuYXZpcz97dHlwZToiYXZpZiIsbWltZToiaW1hZ2UvYXZpZiJ9OnIuaGVpY3x8ci5oZWl4fHxyLmhldmN8fHIuaGV2eHx8ci5oZWlzP3IubXNmMT97dHlwZToiaGVpZiIsbWltZToiaW1hZ2UvaGVpZi1zZXF1ZW5jZSJ9Ont0eXBlOiJoZWlmIixtaW1lOiJpbWFnZS9oZWlmIn06e3R5cGU6ImF2aWYiLG1pbWU6ImltYWdlL2F2aWYifX19LHsiLi9jb21tb24iOjI1N31dLDI2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJCRSxvPXQoIi4uL21pYWZfdXRpbHMiKSxzPXQoIi4uL2V4aWZfdXRpbHMiKSxsPW4oImZ0eXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoaSh0LDQsbCkpe3ZhciBlPW8udW5ib3godCwwKTtpZihlKXt2YXIgcj1vLmdldE1pbWVUeXBlKGUuZGF0YSk7aWYocil7Zm9yKHZhciBuLGM9ZS5lbmQ7Oyl7dmFyIHU9by51bmJveCh0LGMpO2lmKCF1KWJyZWFrO2lmKGM9dS5lbmQsIm1kYXQiPT09dS5ib3h0eXBlKXJldHVybjtpZigibWV0YSI9PT11LmJveHR5cGUpe249dS5kYXRhO2JyZWFrfX1pZihuKXt2YXIgZj1vLnJlYWRTaXplRnJvbU1ldGEobik7aWYoZil7dmFyIGg9e3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHR5cGU6ci50eXBlLG1pbWU6ci5taW1lLHdVbml0czoicHgiLGhVbml0czoicHgifTtpZihmLnZhcmlhbnRzLmxlbmd0aD4xJiYoaC52YXJpYW50cz1mLnZhcmlhbnRzKSxmLm9yaWVudGF0aW9uJiYoaC5vcmllbnRhdGlvbj1mLm9yaWVudGF0aW9uKSxmLmV4aWZfbG9jYXRpb24mJmYuZXhpZl9sb2NhdGlvbi5vZmZzZXQrZi5leGlmX2xvY2F0aW9uLmxlbmd0aDw9dC5sZW5ndGgpe3ZhciBwPWEodCxmLmV4aWZfbG9jYXRpb24ub2Zmc2V0KSxkPXQuc2xpY2UoZi5leGlmX2xvY2F0aW9uLm9mZnNldCtwKzQsZi5leGlmX2xvY2F0aW9uLm9mZnNldCtmLmV4aWZfbG9jYXRpb24ubGVuZ3RoKSxtPXMuZ2V0X29yaWVudGF0aW9uKGQpO20+MCYmKGgub3JpZW50YXRpb249bSl9cmV0dXJuIGh9fX19fX19LHsiLi4vY29tbW9uIjoyNTcsIi4uL2V4aWZfdXRpbHMiOjI1OCwiLi4vbWlhZl91dGlscyI6MjU5fV0sMjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkxFLG89bigiQk0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwyNikmJmkodCwwLG8pKXJldHVybnt3aWR0aDphKHQsMTgpLGhlaWdodDphKHQsMjIpLHR5cGU6ImJtcCIsbWltZToiaW1hZ2UvYm1wIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6MjU3fV0sMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkxFLG89bigiR0lGODdhIikscz1uKCJHSUY4OWEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwxMCkmJihpKHQsMCxvKXx8aSh0LDAscykpKXJldHVybnt3aWR0aDphKHQsNiksaGVpZ2h0OmEodCw4KSx0eXBlOiJnaWYiLG1pbWU6ImltYWdlL2dpZiIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX0seyIuLi9jb21tb24iOjI1N31dLDI2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwwKSxyPW4odCwyKSxpPW4odCw0KTtpZigwPT09ZSYmMT09PXImJmkpe2Zvcih2YXIgYT1bXSxvPXt3aWR0aDowLGhlaWdodDowfSxzPTA7czxpO3MrKyl7dmFyIGw9dFs2KzE2KnNdfHwyNTYsYz10WzYrMTYqcysxXXx8MjU2LHU9e3dpZHRoOmwsaGVpZ2h0OmN9O2EucHVzaCh1KSwobD5vLndpZHRofHxjPm8uaGVpZ2h0KSYmKG89dSl9cmV0dXJue3dpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0LHZhcmlhbnRzOmEsdHlwZToiaWNvIixtaW1lOiJpbWFnZS94LWljb24iLHdVbml0czoicHgiLGhVbml0czoicHgifX19fSx7Ii4uL2NvbW1vbiI6MjU3fV0sMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZCRSxpPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsYT10KCIuLi9jb21tb24iKS5zbGljZUVxLG89dCgiLi4vZXhpZl91dGlscyIpLHM9aSgiRXhpZlwwXDAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwyKSYmMjU1PT09dFswXSYmMjE2PT09dFsxXSYmMjU1PT09dFsyXSlmb3IodmFyIGU9Mjs7KXtmb3IoOzspe2lmKHQubGVuZ3RoLWU8MilyZXR1cm47aWYoMjU1PT09dFtlKytdKWJyZWFrfWZvcih2YXIgcixpLGw9dFtlKytdOzI1NT09PWw7KWw9dFtlKytdO2lmKDIwODw9bCYmbDw9MjE3fHwxPT09bClyPTA7ZWxzZXtpZighKDE5Mjw9bCYmbDw9MjU0KSlyZXR1cm47aWYodC5sZW5ndGgtZTwyKXJldHVybjtyPW4odCxlKS0yLGUrPTJ9aWYoMjE3PT09bHx8MjE4PT09bClyZXR1cm47aWYoMjI1PT09bCYmcj49MTAmJmEodCxlLHMpJiYoaT1vLmdldF9vcmllbnRhdGlvbih0LnNsaWNlKGUrNixlK3IpKSkscj49NSYmMTkyPD1sJiZsPD0yMDcmJjE5NiE9PWwmJjIwMCE9PWwmJjIwNCE9PWwpe2lmKHQubGVuZ3RoLWU8cilyZXR1cm47dmFyIGM9e3dpZHRoOm4odCxlKzMpLGhlaWdodDpuKHQsZSsxKSx0eXBlOiJqcGciLG1pbWU6ImltYWdlL2pwZWciLHdVbml0czoicHgiLGhVbml0czoicHgifTtyZXR1cm4gaT4wJiYoYy5vcmllbnRhdGlvbj1pKSxjfWUrPXJ9fX0seyIuLi9jb21tb24iOjI1NywiLi4vZXhpZl91dGlscyI6MjU4fV0sMjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89bigiXHg4OVBOR1xyXG5ceDFhXG4iKSxzPW4oIklIRFIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwyNCkmJmkodCwwLG8pJiZpKHQsMTIscykpcmV0dXJue3dpZHRoOmEodCwxNiksaGVpZ2h0OmEodCwyMCksdHlwZToicG5nIixtaW1lOiJpbWFnZS9wbmciLHdVbml0czoicHgiLGhVbml0czoicHgifX19LHsiLi4vY29tbW9uIjoyNTd9XSwyNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDMyQkUsbz1uKCI4QlBTXDBceDAxIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MjIpJiZpKHQsMCxvKSlyZXR1cm57d2lkdGg6YSh0LDE4KSxoZWlnaHQ6YSh0LDE0KSx0eXBlOiJwc2QiLG1pbWU6ImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AiLHdVbml0czoicHgiLGhVbml0czoicHgifX19LHsiLi4vY29tbW9uIjoyNTd9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpJiZ0PjB9dmFyIGk9LzxbLV8uOmEtekEtWjAtOV1bXj5dKj4vLGE9L148KFstXy46YS16QS1aMC05XSs6KT9zdmdccy8sbz0vW14tXVxid2lkdGg9IihbXiVdKz8pInxbXi1dXGJ3aWR0aD0nKFteJV0rPyknLyxzPS9cYmhlaWdodD0iKFteJV0rPykifFxiaGVpZ2h0PScoW14lXSs/KScvLGw9L1xidmlld1tiQl1veD0iKC4rPykifFxidmlld1tiQl1veD0nKC4rPyknLyxjPS9pbiR8bW0kfGNtJHxwdCR8cGMkfHB4JHxlbSR8ZXgkLztmdW5jdGlvbiB1KHQpe3JldHVybiBjLnRlc3QodCk/dC5tYXRjaChjKVswXToicHgifWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj10Lmxlbmd0aDtmb3IoMjM5PT09dFswXSYmMTg3PT09dFsxXSYmMTkxPT09dFsyXSYmKHI9Myk7cjxuJiYoMzI9PT0oZT10W3JdKXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lKTspcisrO3JldHVybiByIT09biYmNjA9PT10W3JdfSh0KSl7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3ZhciBjPShlLm1hdGNoKGkpfHxbIiJdKVswXTtpZihhLnRlc3QoYykpe3ZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2gobykscj10Lm1hdGNoKHMpLG49dC5tYXRjaChsKTtyZXR1cm57d2lkdGg6ZSYmKGVbMV18fGVbMl0pLGhlaWdodDpyJiYoclsxXXx8clsyXSksdmlld2JveDpuJiYoblsxXXx8blsyXSl9fShjKSxoPXBhcnNlRmxvYXQoZi53aWR0aCkscD1wYXJzZUZsb2F0KGYuaGVpZ2h0KTtpZihmLndpZHRoJiZmLmhlaWdodCl7aWYoIW4oaCl8fCFuKHApKXJldHVybjtyZXR1cm57d2lkdGg6aCxoZWlnaHQ6cCx0eXBlOiJzdmciLG1pbWU6ImltYWdlL3N2Zyt4bWwiLHdVbml0czp1KGYud2lkdGgpLGhVbml0czp1KGYuaGVpZ2h0KX19dmFyIGQ9KGYudmlld2JveHx8IiIpLnNwbGl0KCIgIiksbT17d2lkdGg6ZFsyXSxoZWlnaHQ6ZFszXX0sZz1wYXJzZUZsb2F0KG0ud2lkdGgpLHY9cGFyc2VGbG9hdChtLmhlaWdodCk7aWYobihnKSYmbih2KSYmdShtLndpZHRoKT09PXUobS5oZWlnaHQpKXt2YXIgeT1nL3Y7aWYoZi53aWR0aCl7aWYoIW4oaCkpcmV0dXJuO3JldHVybnt3aWR0aDpoLGhlaWdodDpoL3ksdHlwZToic3ZnIixtaW1lOiJpbWFnZS9zdmcreG1sIix3VW5pdHM6dShmLndpZHRoKSxoVW5pdHM6dShmLndpZHRoKX19aWYoZi5oZWlnaHQpe2lmKCFuKHApKXJldHVybjtyZXR1cm57d2lkdGg6cCp5LGhlaWdodDpwLHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUoZi5oZWlnaHQpLGhVbml0czp1KGYuaGVpZ2h0KX19cmV0dXJue3dpZHRoOmcsaGVpZ2h0OnYsdHlwZToic3ZnIixtaW1lOiJpbWFnZS9zdmcreG1sIix3VW5pdHM6dShtLndpZHRoKSxoVW5pdHM6dShtLmhlaWdodCl9fX19fX0se31dLDI2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZMRSxvPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZCRSxzPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJMRSxsPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJCRSxjPW4oIklJKlwwIiksdT1uKCJNTVwwKiIpO2Z1bmN0aW9uIGYodCxlLHIpe3JldHVybiByP28odCxlKTphKHQsZSl9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHI/bCh0LGUpOnModCxlKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj1mKHQsZSsyLHIpO3JldHVybiAxIT09aCh0LGUrNCxyKXx8MyE9PW4mJjQhPT1uP251bGw6Mz09PW4/Zih0LGUrOCxyKTpoKHQsZSs4LHIpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDgpJiYoaSh0LDAsYyl8fGkodCwwLHUpKSl7dmFyIGU9Nzc9PT10WzBdLHI9aCh0LDQsZSktODtpZighKHI8MCkpe3ZhciBuPXIrODtpZighKHQubGVuZ3RoLW48Mikpe3ZhciBhPTEyKmYodCxuKzAsZSk7aWYoIShhPD0wfHwobis9Mix0Lmxlbmd0aC1uPGEpKSl7dmFyIG8scyxsLGQ7Zm9yKG89MDtvPGE7bys9MTIpMjU2PT09KGQ9Zih0LG4rbyxlKSk/cz1wKHQsbitvLGUpOjI1Nz09PWQmJihsPXAodCxuK28sZSkpO3JldHVybiBzJiZsP3t3aWR0aDpzLGhlaWdodDpsLHR5cGU6InRpZmYiLG1pbWU6ImltYWdlL3RpZmYiLHdVbml0czoicHgiLGhVbml0czoicHgifTp2b2lkIDB9fX19fX0seyIuLi9jb21tb24iOjI1N31dLDI2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZMRSxvPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJMRSxzPXQoIi4uL2V4aWZfdXRpbHMiKSxsPW4oIlJJRkYiKSxjPW4oIldFQlAiKTtmdW5jdGlvbiB1KHQsZSl7aWYoMTU3PT09dFtlKzNdJiYxPT09dFtlKzRdJiY0Mj09PXRbZSs1XSlyZXR1cm57d2lkdGg6MTYzODMmYSh0LGUrNiksaGVpZ2h0OjE2MzgzJmEodCxlKzgpLHR5cGU6IndlYnAiLG1pbWU6ImltYWdlL3dlYnAiLHdVbml0czoicHgiLGhVbml0czoicHgifX1mdW5jdGlvbiBmKHQsZSl7aWYoNDc9PT10W2VdKXt2YXIgcj1vKHQsZSsxKTtyZXR1cm57d2lkdGg6MSsoMTYzODMmciksaGVpZ2h0OjErKHI+PjE0JjE2MzgzKSx0eXBlOiJ3ZWJwIixtaW1lOiJpbWFnZS93ZWJwIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm57d2lkdGg6MSsodFtlKzZdPDwxNnx0W2UrNV08PDh8dFtlKzRdKSxoZWlnaHQ6MSsodFtlKzldPDxlfHRbZSs4XTw8OHx0W2UrN10pLHR5cGU6IndlYnAiLG1pbWU6ImltYWdlL3dlYnAiLHdVbml0czoicHgiLGhVbml0czoicHgifX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwxNikmJihpKHQsMCxsKXx8aSh0LDgsYykpKXt2YXIgZT0xMixyPW51bGwsbj0wLGE9byh0LDQpKzg7aWYoIShhPnQubGVuZ3RoKSl7Zm9yKDtlKzg8YTspaWYoMCE9PXRbZV0pe3ZhciBwPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKGUsZSs0KSksZD1vKHQsZSs0KTsiVlA4ICI9PT1wJiZkPj0xMD9yPXJ8fHUodCxlKzgpOiJWUDhMIj09PXAmJmQ+PTk/cj1yfHxmKHQsZSs4KToiVlA4WCI9PT1wJiZkPj0xMD9yPXJ8fGgodCxlKzgpOiJFWElGIj09PXAmJihuPXMuZ2V0X29yaWVudGF0aW9uKHQuc2xpY2UoZSs4LGUrOCtkKSksZT0xLzApLGUrPTgrZH1lbHNlIGUrKztpZihyKXJldHVybiBuPjAmJihyLm9yaWVudGF0aW9uPW4pLHJ9fX19LHsiLi4vY29tbW9uIjoyNTcsIi4uL2V4aWZfdXRpbHMiOjI1OH1dLDI3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F2aWY6dCgiLi9wYXJzZV9zeW5jL2F2aWYiKSxibXA6dCgiLi9wYXJzZV9zeW5jL2JtcCIpLGdpZjp0KCIuL3BhcnNlX3N5bmMvZ2lmIiksaWNvOnQoIi4vcGFyc2Vfc3luYy9pY28iKSxqcGVnOnQoIi4vcGFyc2Vfc3luYy9qcGVnIikscG5nOnQoIi4vcGFyc2Vfc3luYy9wbmciKSxwc2Q6dCgiLi9wYXJzZV9zeW5jL3BzZCIpLHN2Zzp0KCIuL3BhcnNlX3N5bmMvc3ZnIiksdGlmZjp0KCIuL3BhcnNlX3N5bmMvdGlmZiIpLHdlYnA6dCgiLi9wYXJzZV9zeW5jL3dlYnAiKX19LHsiLi9wYXJzZV9zeW5jL2F2aWYiOjI2MCwiLi9wYXJzZV9zeW5jL2JtcCI6MjYxLCIuL3BhcnNlX3N5bmMvZ2lmIjoyNjIsIi4vcGFyc2Vfc3luYy9pY28iOjI2MywiLi9wYXJzZV9zeW5jL2pwZWciOjI2NCwiLi9wYXJzZV9zeW5jL3BuZyI6MjY1LCIuL3BhcnNlX3N5bmMvcHNkIjoyNjYsIi4vcGFyc2Vfc3luYy9zdmciOjI2NywiLi9wYXJzZV9zeW5jL3RpZmYiOjI2OCwiLi9wYXJzZV9zeW5jL3dlYnAiOjI2OX1dLDI3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9wYXJzZXJzX3N5bmMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhuKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPW5bZVtyXV0odCk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0odCl9LGUuZXhwb3J0cy5wYXJzZXJzPW59LHsiLi9saWIvcGFyc2Vyc19zeW5jIjoyNzB9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBsKHQpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKG49PT1vfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBuKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe249b310cnl7aT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoKHQpe2k9c319KCk7dmFyIGMsdT1bXSxmPSExLGg9LTE7ZnVuY3Rpb24gcCgpe2YmJmMmJihmPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6aD0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWYpe3ZhciB0PWwocCk7Zj0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2g8ZTspYyYmY1toXS5ydW4oKTtoPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGY9ITEsZnVuY3Rpb24odCl7aWYoaT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChpPT09c3x8IWkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7aSh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBpLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gbSh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIGcoKXt9YS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgbSh0LGUpKSwxIT09dS5sZW5ndGh8fGZ8fGwoZCl9LG0ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9ImJyb3dzZXIiLGEuYnJvd3Nlcj0hMCxhLmVudj17fSxhLmFyZ3Y9W10sYS52ZXJzaW9uPSIiLGEudmVyc2lvbnM9e30sYS5vbj1nLGEuYWRkTGlzdGVuZXI9ZyxhLm9uY2U9ZyxhLm9mZj1nLGEucmVtb3ZlTGlzdGVuZXI9ZyxhLnJlbW92ZUFsbExpc3RlbmVycz1nLGEuZW1pdD1nLGEucHJlcGVuZExpc3RlbmVyPWcsYS5wcmVwZW5kT25jZUxpc3RlbmVyPWcsYS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxhLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSwyNzM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGk9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csYT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWlbInJlcXVlc3QiK29dLGw9aVsiY2FuY2VsIitvXXx8aVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGEubGVuZ3RoO2MrKylzPWlbYVtjXSsiUmVxdWVzdCIrb10sbD1pW2FbY10rIkNhbmNlbCIrb118fGlbYVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGY9MCxoPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWgubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgdD1oLnNsaWNlKDApO2gubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRbZV0uY2FuY2VsbGVkKXRyeXt0W2VdLmNhbGxiYWNrKHUpfWNhdGNoKHQpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgdH0pLDApfX0pLE1hdGgucm91bmQocikpfXJldHVybiBoLnB1c2goe2hhbmRsZTorK2YsY2FsbGJhY2s6dCxjYW5jZWxsZWQ6ITF9KSxmfSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aC5sZW5ndGg7ZSsrKWhbZV0uaGFuZGxlPT09dCYmKGhbZV0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwoaSx0KX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkoaSxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24odCl7dHx8KHQ9aSksdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9cyx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwZXJmb3JtYW5jZS1ub3ciOjI0N31dLDI3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKSxpPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGE9dCgidXBkYXRlLWRpZmYiKSxvPXQoInBpY2stYnktYWxpYXMiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoInRvLWZsb2F0MzIiKSx1PWMuZmxvYXQzMixmPWMuZnJhY3QzMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dmFyIHIsYyxwLGQsbSxnLHY9dC5fZ2wseT17Y29sb3I6ImJsYWNrIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGM9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLG09dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOmh9KSxUKGUpLHI9dCh7dmVydDoiXG5cdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cdFx0YXR0cmlidXRlIHZlYzQgZXJyb3I7XG5cdFx0YXR0cmlidXRlIHZlYzQgY29sb3I7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcblxuXHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcblx0XHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXG5cdFx0XHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcblxuXHRcdFx0dmVjMiBkeHkgPSAtc3RlcCguNSwgZGlyZWN0aW9uLnh5KSAqIGVycm9yLnh6ICsgc3RlcChkaXJlY3Rpb24ueHksIHZlYzIoLS41KSkgKiBlcnJvci55dztcblxuXHRcdFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xuXG5cdFx0XHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuXHRcdFx0cG9zICs9IHBpeGVsT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblx0XHR9XG5cdFx0IixmcmFnOiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0XHR9XG5cdFx0Iix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKCJyYW5nZSIpLGxpbmVXaWR0aDp0LnByb3AoImxpbmVXaWR0aCIpLGNhcFNpemU6dC5wcm9wKCJjYXBTaXplIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0Iiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6bSxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6ZyxzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6ZyxzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOiJ0cmlhbmdsZXMiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OmgubGVuZ3RofSkscyhiLHt1cGRhdGU6VCxkcmF3Ol8sZGVzdHJveTprLHJlZ2w6dCxnbDp2LGNhbnZhczp2LmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P1QodCk6bnVsbD09PXQmJmsoKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIHcoZSk7ZSYmIUFycmF5LmlzQXJyYXkoZSkmJihlPVtlXSksdC5fcmVmcmVzaCgpLHguZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt0JiYoZSYmKGVbcl0/dC5kcmF3PSEwOnQuZHJhdz0hMSksdC5kcmF3P3cocik6dC5kcmF3PSEwKX0pKX1mdW5jdGlvbiB3KHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9eFt0XSksbnVsbCE9dCYmdCYmdC5jb3VudCYmdC5jb2xvciYmdC5vcGFjaXR5JiZ0LnBvc2l0aW9ucyYmdC5wb3NpdGlvbnMubGVuZ3RoPjEmJih0LnNjYWxlUmF0aW89W3Quc2NhbGVbMF0qdC52aWV3cG9ydC53aWR0aCx0LnNjYWxlWzFdKnQudmlld3BvcnQuaGVpZ2h0XSxyKHQpLHQuYWZ0ZXImJnQuYWZ0ZXIodCkpfWZ1bmN0aW9uIFQodCl7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcCgoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PygiZnVuY3Rpb24iPT10eXBlb2YgdD90PXthZnRlcjp0fToibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjoiY29sb3IgY29sb3JzIGZpbGwiLGNhcFNpemU6ImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemUiLGxpbmVXaWR0aDoibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3MiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsZXJyb3JzOiJlcnJvcnMgZXJyb3IiLHBvc2l0aW9uczoicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzIn0pLHV8fCh4W2NdPXU9e2lkOmMsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxkcmF3OiEwfSx0PXMoe30seSx0KSksYSh1LHQsW3tsaW5lV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LGNhcFNpemU6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LG9wYWNpdHk6cGFyc2VGbG9hdCxlcnJvcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bCh0KSxyKz10Lmxlbmd0aCx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1sKHQsImZsb2F0NjQiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD0idHJhbnNwYXJlbnQiKSwhQXJyYXkuaXNBcnJheSh0KXx8Im51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgbj10O3Q9QXJyYXkocik7Zm9yKHZhciBhPTA7YTxyO2ErKyl0W2FdPW59aWYodC5sZW5ndGg8cil0aHJvdyBFcnJvcigiTm90IGVub3VnaCBjb2xvcnMiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9aSh0W3NdLCJ1aW50OCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWYoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1mKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOnYuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp2LmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSksZXx8cil7dmFyIGg9eC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSksMCksZz1uZXcgRmxvYXQ2NEFycmF5KDIqaCksXz1uZXcgVWludDhBcnJheSg0KmgpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmgpO3guZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZih0KXt2YXIgcj10LnBvc2l0aW9ucyxuPXQuY291bnQsaT10Lm9mZnNldCxhPXQuY29sb3Isbz10LmVycm9ycztuJiYoXy5zZXQoYSw0KmkpLHcuc2V0KG8sNCppKSxnLnNldChyLDIqaSkpfX0pKTt2YXIgVD11KGcpO2MoVCk7dmFyIGs9ZihnLFQpO3AoayksZChfKSxtKHcpfX19ZnVuY3Rpb24gaygpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLG0uZGVzdHJveSgpLGcuZGVzdHJveSgpfX07dmFyIGg9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0seyJhcnJheS1ib3VuZHMiOjY3LCJjb2xvci1ub3JtYWxpemUiOjg0LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoxODYsIm9iamVjdC1hc3NpZ24iOjI0MiwicGljay1ieS1hbGlhcyI6MjQ4LCJ0by1mbG9hdDMyIjozMDgsInVwZGF0ZS1kaWZmIjozMjR9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3Itbm9ybWFsaXplIiksaT10KCJhcnJheS1ib3VuZHMiKSxhPXQoIm9iamVjdC1hc3NpZ24iKSxvPXQoImdsc2xpZnkiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoImVhcmN1dCIpLHU9dCgiYXJyYXktbm9ybWFsaXplIiksZj10KCJ0by1mbG9hdDMyIiksaD1mLmZsb2F0MzIscD1mLmZyYWN0MzIsZD10KCJlczYtd2Vhay1tYXAiKSxtPXQoInBhcnNlLXJlY3QiKSxnPXQoImFycmF5LWZpbmQtaW5kZXgiKTtmdW5jdGlvbiB2KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpdGhyb3cgRXJyb3IoInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPXYuc2hhZGVycy5oYXModCk/di5zaGFkZXJzLmdldCh0KTp2LnNoYWRlcnMuc2V0KHQsdi5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPXYsdi5kYXNoTXVsdD0yLHYubWF4UGF0dGVybkxlbmd0aD0yNTYsdi5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LHYubWF4UG9pbnRzPTFlNCx2Lm1heExpbmVzPTIwNDgsdi5zaGFkZXJzPW5ldyBkLHYuY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZToic3RhdGljIix0eXBlOiJmbG9hdCIsZGF0YTpbMCwxLDAsMCwxLDEsMSwwXX0pLG49e3ByaW1pdGl2ZToidHJpYW5nbGUgc3RyaXAiLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdW5kIj09PWUuam9pbj8yOjF9LG1pdGVyTGltaXQ6dC5wcm9wKCJtaXRlckxpbWl0Iiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRoaWNrbmVzczp0LnByb3AoInRoaWNrbmVzcyIpLGRhc2hUZXh0dXJlOnQucHJvcCgiZGFzaFRleHR1cmUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLGRhc2hMZW5ndGg6dC5wcm9wKCJkYXNoTGVuZ3RoIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcCgiZGVwdGgiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iil9LGk9dChhKHt2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgYUNvb3JkRnJhY3QsIGJDb29yZEZyYWN0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcblx0cmV0dXJuIHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xuXG5cdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcblx0dGFuZ2VudCA9IG5vcm1hbGl6ZShkaWZmICogc2NhbGUgKiB2aWV3cG9ydC56dyk7XG5cdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxuXHRcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXG5cblx0XHQrIHRoaWNrbmVzcyAqIG5vcm1hbCAqIC41ICogbGluZU9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIGZsb2F0IGRhc2hMZW5ndGgsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS47XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaExlbmd0aCkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBmbG9hdCBkYXNoTGVuZ3RoLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xuXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcblxuXHQvL2JldmVsIG1pdGVyXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gcm91bmQgbWl0ZXJcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gZW5kQ29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoTGVuZ3RoKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9LGJDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1pfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZToidHJpYW5nbGUiLGVsZW1lbnRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudHJpYW5nbGVzfSxvZmZzZXQ6MCx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2Ljtcblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBkZXB0aCA9IChNQVhfTElORVMgLSA0LiAtIGlkKSAvIChNQVhfTElORVMpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcCgic2NhbGUiKSxjb2xvcjp0LnByb3AoImZpbGwiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH19LGJsZW5kOm4uYmxlbmQsZGVwdGg6e2VuYWJsZTohMX0sc2Npc3NvcjpuLnNjaXNzb3Isc3RlbmNpbDpuLnN0ZW5jaWwsdmlld3BvcnQ6bi52aWV3cG9ydH0pLHJlY3Q6aSxtaXRlcjplfX0sdi5kZWZhdWx0cz17ZGFzaGVzOm51bGwsam9pbjoibWl0ZXIiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOiJzcXVhcmUiLGNvbG9yOiJibGFjayIsb3BhY2l0eToxLG92ZXJsYXk6ITEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLGNsb3NlOiExLGZpbGw6bnVsbH0sdi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07ZS5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LGUpLHRoaXMuZHJhdygpfSx2LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4oZS5sZW5ndGg/ZTp0aGlzLnBhc3NlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihlJiZBcnJheS5pc0FycmF5KGUpKXJldHVybihuPXQpLmRyYXcuYXBwbHkobixlKTsibnVtYmVyIj09dHlwZW9mIGUmJihlPXQucGFzc2VzW2VdKSxlJiZlLmNvdW50PjEmJmUub3BhY2l0eSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD52LnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD52LnByZWNpc2lvblRocmVzaG9sZHx8InJlY3QiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pKSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10aGlzLnJlZ2wsbz10aGlzLmdsO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCxmKXt2YXIgZD1lLnBhc3Nlc1tmXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6InBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHMiLHRoaWNrbmVzczoidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aCIsam9pbjoibGluZUpvaW4gbGluZWpvaW4gam9pbiB0eXBlIG1vZGUiLG1pdGVyTGltaXQ6Im1pdGVybGltaXQgbWl0ZXJMaW1pdCIsZGFzaGVzOiJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXkiLGNvbG9yOiJjb2xvciBjb2xvdXIgc3Ryb2tlIGNvbG9ycyBjb2xvdXJzIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsZmlsbDoiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToiYWxwaGEgb3BhY2l0eSIsb3ZlcmxheToib3ZlcmxheSBjcmVhc2Ugb3ZlcmxhcCBpbnRlcnNlY3QiLGNsb3NlOiJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3giLGhvbGU6ImhvbGVzIGhvbGUgaG9sbG93IixzcGxpdE51bGw6InNwbGl0TnVsbCJ9KSxkfHwoZS5wYXNzZXNbZl09ZD17aWQ6ZixzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LHYuZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxmPHYubWF4TGluZXMmJihkLmRlcHRoPTIqKHYubWF4TGluZXMtMS1mJXYubWF4TGluZXMpL3YubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9bSh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9bShbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIHkseDtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgYj10LnBvc2l0aW9ucy54LF89dC5wb3NpdGlvbnMueTt4PWQuY291bnQ9TWF0aC5tYXgoYi5sZW5ndGgsXy5sZW5ndGgpLHk9bmV3IEZsb2F0NjRBcnJheSgyKngpO2Zvcih2YXIgdz0wO3c8eDt3KyspeVsyKnddPWJbd10seVsyKncrMV09X1t3XX1lbHNlIHk9bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHg9ZC5jb3VudD1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO3ZhciBUPWQuYm91bmRzPWkoeSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxBPXt9LE09MCxTPTAsRT0wLEw9ZC5jb3VudDtTPEw7UysrKXt2YXIgQz15WzIqU10sUD15WzIqUysxXTtpc05hTihDKXx8aXNOYU4oUCl8fG51bGw9PUN8fG51bGw9PVA/KEM9eVsyKk1dLFA9eVsyKk0rMV0sQVtTXT1NKTpNPVMsa1tFKytdPUMsa1tFKytdPVB9aWYodC5zcGxpdE51bGwpe2QuY291bnQtMSBpbiBBfHwoQVtkLmNvdW50XT1kLmNvdW50LTEpO3ZhciBJPU9iamVjdC5rZXlzKEEpLm1hcChOdW1iZXIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxPPVtdLHo9MCxEPW51bGwhPWQuaG9sZT9kLmhvbGVbMF06bnVsbDtpZihudWxsIT1EKXt2YXIgUj1nKEksKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj1EfSkpOyhJPUkuc2xpY2UoMCxSKSkucHVzaChEKX1mb3IodmFyIEY9ZnVuY3Rpb24odCl7dmFyIGU9ay5zbGljZSgyKnosMipJW3RdKS5jb25jYXQoRD9rLnNsaWNlKDIqRCk6W10pLHI9KGQuaG9sZXx8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUtRCsoSVt0XS16KX0pKSxuPWMoZSxyKTtuPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSt6KyhlK3o8SVt0XT8wOkQtSVt0XSl9KSksTy5wdXNoLmFwcGx5KE8sbiksej1JW3RdKzF9LEI9MDtCPEkubGVuZ3RoO0IrKylGKEIpO2Zvcih2YXIgTj0wLGo9Ty5sZW5ndGg7TjxqO04rKyludWxsIT1BW09bTl1dJiYoT1tOXT1BW09bTl1dKTtkLnRyaWFuZ2xlcz1PfWVsc2V7Zm9yKHZhciBVPWMoayxkLmhvbGV8fFtdKSxWPTAsSD1VLmxlbmd0aDtWPEg7VisrKW51bGwhPUFbVVtWXV0mJihVW1ZdPUFbVVtWXV0pO2QudHJpYW5nbGVzPVV9fXZhciBxPW5ldyBGbG9hdDY0QXJyYXkoeSk7dShxLDIsVCk7dmFyIEc9bmV3IEZsb2F0NjRBcnJheSgyKngrNik7ZC5jbG9zZT95WzBdPT09eVsyKngtMl0mJnlbMV09PT15WzIqeC0xXT8oR1swXT1xWzIqeC00XSxHWzFdPXFbMip4LTNdKTooR1swXT1xWzIqeC0yXSxHWzFdPXFbMip4LTFdKTooR1swXT1xWzBdLEdbMV09cVsxXSksRy5zZXQocSwyKSxkLmNsb3NlP3lbMF09PT15WzIqeC0yXSYmeVsxXT09PXlbMip4LTFdPyhHWzIqeCsyXT1xWzJdLEdbMip4KzNdPXFbM10sZC5jb3VudC09MSk6KEdbMip4KzJdPXFbMF0sR1syKngrM109cVsxXSxHWzIqeCs0XT1xWzJdLEdbMip4KzVdPXFbM10pOihHWzIqeCsyXT1xWzIqeC0yXSxHWzIqeCszXT1xWzIqeC0xXSxHWzIqeCs0XT1xWzIqeC0yXSxHWzIqeCs1XT1xWzIqeC0xXSk7dmFyIFk9aChHKTtkLnBvc2l0aW9uQnVmZmVyKFkpO3ZhciBXPXAoRyxZKTtkLnBvc2l0aW9uRnJhY3RCdWZmZXIoVyl9aWYodC5yYW5nZT9kLnJhbmdlPXQucmFuZ2U6ZC5yYW5nZXx8KGQucmFuZ2U9ZC5ib3VuZHMpLCh0LnJhbmdlfHx0LnBvc2l0aW9ucykmJmQuY291bnQpe3ZhciBYPWQuYm91bmRzLFo9WFsyXS1YWzBdLEo9WFszXS1YWzFdLEs9ZC5yYW5nZVsyXS1kLnJhbmdlWzBdLFE9ZC5yYW5nZVszXS1kLnJhbmdlWzFdO2Quc2NhbGU9W1ovSyxKL1FdLGQudHJhbnNsYXRlPVstZC5yYW5nZVswXS9LK1hbMF0vS3x8MCwtZC5yYW5nZVsxXS9RK1hbMV0vUXx8MF0sZC5zY2FsZUZyYWN0PXAoZC5zY2FsZSksZC50cmFuc2xhdGVGcmFjdD1wKGQudHJhbnNsYXRlKX1pZih0LmRhc2hlcyl7dmFyICQsdHQ9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKXR0PTEsJD1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7dHQ9MDtmb3IodmFyIGV0PTA7ZXQ8dC5kYXNoZXMubGVuZ3RoOysrZXQpdHQrPXQuZGFzaGVzW2V0XTskPW5ldyBVaW50OEFycmF5KHR0KnYuZGFzaE11bHQpO2Zvcih2YXIgcnQ9MCxudD0yNTUsaXQ9MDtpdDwyO2l0KyspZm9yKHZhciBhdD0wO2F0PHQuZGFzaGVzLmxlbmd0aDsrK2F0KXtmb3IodmFyIG90PTAsc3Q9dC5kYXNoZXNbYXRdKnYuZGFzaE11bHQqLjU7b3Q8c3Q7KytvdCkkW3J0KytdPW50O250Xj0yNTV9fWQuZGFzaExlbmd0aD10dCxkLmRhc2hUZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6JCx3aWR0aDokLmxlbmd0aCxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSwwLDApfWlmKHQuY29sb3Ipe3ZhciBsdD1kLmNvdW50LGN0PXQuY29sb3I7Y3R8fChjdD0idHJhbnNwYXJlbnQiKTt2YXIgdXQ9bmV3IFVpbnQ4QXJyYXkoNCpsdCs0KTtpZihBcnJheS5pc0FycmF5KGN0KSYmIm51bWJlciIhPXR5cGVvZiBjdFswXSl7Zm9yKHZhciBmdD0wO2Z0PGx0O2Z0Kyspe3ZhciBodD1uKGN0W2Z0XSwidWludDgiKTt1dC5zZXQoaHQsNCpmdCl9dXQuc2V0KG4oY3RbMF0sInVpbnQ4IiksNCpsdCl9ZWxzZSBmb3IodmFyIHB0PW4oY3QsInVpbnQ4IiksZHQ9MDtkdDxsdCsxO2R0KyspdXQuc2V0KHB0LDQqZHQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTp1dH0pfX1lbHNlIGUucGFzc2VzW2ZdPW51bGx9KSksdC5sZW5ndGg8dGhpcy5wYXNzZXMubGVuZ3RoKXtmb3IodmFyIGY9dC5sZW5ndGg7Zjx0aGlzLnBhc3Nlcy5sZW5ndGg7ZisrKXt2YXIgZD10aGlzLnBhc3Nlc1tmXTtkJiYoZC5jb2xvckJ1ZmZlci5kZXN0cm95KCksZC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksZC5kYXNoVGV4dHVyZS5kZXN0cm95KCkpfXRoaXMucGFzc2VzLmxlbmd0aD10Lmxlbmd0aH1mb3IodmFyIHk9W10seD0wO3g8dGhpcy5wYXNzZXMubGVuZ3RoO3grKyludWxsIT09dGhpcy5wYXNzZXNbeF0mJnkucHVzaCh0aGlzLnBhc3Nlc1t4XSk7cmV0dXJuIHRoaXMucGFzc2VzPXksdGhpc319LHYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo2NywiYXJyYXktZmluZC1pbmRleCI6NjgsImFycmF5LW5vcm1hbGl6ZSI6NjksImNvbG9yLW5vcm1hbGl6ZSI6ODQsZWFyY3V0OjEyMywiZXM2LXdlYWstbWFwIjoxNzcsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjE4NixnbHNsaWZ5OjIyMiwib2JqZWN0LWFzc2lnbiI6MjQyLCJwYXJzZS1yZWN0IjoyNDQsInBpY2stYnktYWxpYXMiOjI0OCwidG8tZmxvYXQzMiI6MzA4fV0sMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsPT1yKXJldHVybjt2YXIgbixpLGE9W10sbz0hMCxzPSExO3RyeXtmb3Iocj1yLmNhbGwodCk7IShvPShuPXIubmV4dCgpKS5kb25lKSYmKGEucHVzaChuLnZhbHVlKSwhZXx8YS5sZW5ndGghPT1lKTtvPSEwKTt9Y2F0Y2godCl7cz0hMCxpPXR9ZmluYWxseXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fXJldHVybiBhfSh0LGUpfHxhKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBvKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8YSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBhKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBvKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBzPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGw9dCgiYXJyYXktYm91bmRzIiksYz10KCJjb2xvci1pZCIpLHU9dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksZj10KCJvYmplY3QtYXNzaWduIiksaD10KCJnbHNsaWZ5IikscD10KCJwaWNrLWJ5LWFsaWFzIiksZD10KCJ1cGRhdGUtZGlmZiIpLG09dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGc9dCgiaXMtaWV4cGxvcmVyIiksdj10KCJ0by1mbG9hdDMyIikseT10KCJwYXJzZS1yZWN0IikseD1iO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10aGlzO2lmKCEodGhpcyBpbnN0YW5jZW9mIGIpKXJldHVybiBuZXcgYih0LGUpOyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOihlPXQsdD1udWxsKSxlJiZlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO3ZhciBuLGk9KHQ9ZS5yZWdsKS5fZ2wsYT1bXTt0aGlzLnRvb01hbnlDb2xvcnM9ZyxuPXQudGV4dHVyZSh7ZGF0YTpuZXcgVWludDhBcnJheSgxMDIwKSx3aWR0aDoyNTUsaGVpZ2h0OjEsdHlwZToidWludDgiLGZvcm1hdDoicmdiYSIsd3JhcFM6ImNsYW1wIix3cmFwVDoiY2xhbXAiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0In0pLGYodGhpcyx7cmVnbDp0LGdsOmksZ3JvdXBzOltdLG1hcmtlckNhY2hlOltudWxsXSxtYXJrZXJUZXh0dXJlczpbbnVsbF0scGFsZXR0ZTphLHBhbGV0dGVJZHM6e30scGFsZXR0ZVRleHR1cmU6bixtYXhDb2xvcnM6MjU1LG1heFNpemU6MTAwLGNhbnZhczppLmNhbnZhc30pLHRoaXMudXBkYXRlKGUpO3ZhciBvPXt1bmlmb3Jtczp7Y29uc3RQb2ludFNpemU6ISFlLmNvbnN0UG9pbnRTaXplLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0scGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxzY2FsZTp0LnByb3AoInNjYWxlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0IiksbWFya2VyVGV4dHVyZTp0LnByb3AoIm1hcmtlclRleHR1cmUiKSxwYWxldHRlVGV4dHVyZTpufSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcCgiZWxlbWVudHMiKSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IikscHJpbWl0aXZlOiJwb2ludHMifSxzPWYoe30sbyk7cy5mcmFnPWgoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXJUZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgZGlzdCA9IHRleHR1cmUyRChtYXJrZXJUZXh0dXJlLCBnbF9Qb2ludENvb3JkKS5yLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuICAvLyBtYXgtZGlzdGFuY2UgYWxwaGFcbiAgaWYgKGRpc3QgPCAwLjAwMykgZGlzY2FyZDtcblxuICAvLyBudWxsLWJvcmRlciBjYXNlXG4gIGlmIChmcmFnQm9yZGVyQ29sb3JMZXZlbCA9PSBmcmFnQ29sb3JMZXZlbCB8fCBmcmFnQm9yZGVyQ29sb3IuYSA9PSAwLikge1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcCguNSAtIGRlbHRhLCAuNSArIGRlbHRhLCBkaXN0KTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZyYWdDb2xvci5yZ2IsIGNvbG9yQW10ICogZnJhZ0NvbG9yLmEgKiBvcGFjaXR5KTtcbiAgfVxuICBlbHNlIHtcbiAgICBmbG9hdCBib3JkZXJDb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuXG4gICAgdmVjNCBjb2xvciA9IGZyYWdCb3JkZXJDb2xvcjtcbiAgICBjb2xvci5hICo9IGJvcmRlckNvbG9yQW10O1xuICAgIGNvbG9yID0gbWl4KGNvbG9yLCBmcmFnQ29sb3IsIGNvbG9yQW10KTtcbiAgICBjb2xvci5hICo9IG9wYWNpdHk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgfVxuXG59XG4iXSkscy52ZXJ0PWgoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyU2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9ySWQsIGJvcmRlckNvbG9ySWQ7XG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XG5cbnVuaWZvcm0gYm9vbCBjb25zdFBvaW50U2l6ZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCwgcGFsZXR0ZVNpemU7XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlVGV4dHVyZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG5mbG9hdCBwb2ludFNpemVTY2FsZSA9IChjb25zdFBvaW50U2l6ZSkgPyAyLiA6IHBpeGVsUmF0aW87XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlVGV4dHVyZSxcbiAgICB2ZWMyKFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICAgKVxuICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XG5cbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xuXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xuXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XG5cbiAgZ2xfUG9pbnRTaXplID0gMi4gKiBzaXplICogcG9pbnRTaXplU2NhbGU7XG4gIGZyYWdQb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMC4sIDEuKTtcblxuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZnJhZ0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7XG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xuXG4gIGZyYWdCb3JkZXJDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgLSBib3JkZXJMZXZlbCAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xuICBmcmFnQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsICsgKDEuIC0gYm9yZGVyTGV2ZWwpICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XG59Il0pLHRoaXMuZHJhd01hcmtlcj10KHMpO3ZhciBsPWYoe30sbyk7bC5mcmFnPWgoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQgeCkge1xuXHRmbG9hdCB0O1xuXHR0ID0gY2xhbXAoKHggLSBlZGdlMCkgLyAoZWRnZTEgLSBlZGdlMCksIDAuMCwgMS4wKTtcblx0cmV0dXJuIHQgKiB0ICogKDMuMCAtIDIuMCAqIHQpO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IHJhZGl1cywgYWxwaGEgPSAxLjAsIGRlbHRhID0gZnJhZ1dpZHRoO1xuXG5cdHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcblxuXHRpZiAocmFkaXVzID4gMS4wICsgZGVsdGEpIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cblx0YWxwaGEgLT0gc21vb3Roc3RlcCgxLjAgLSBkZWx0YSwgMS4wICsgZGVsdGEsIHJhZGl1cyk7XG5cblx0ZmxvYXQgYm9yZGVyUmFkaXVzID0gZnJhZ0JvcmRlclJhZGl1cztcblx0ZmxvYXQgcmF0aW8gPSBzbW9vdGhzdGVwKGJvcmRlclJhZGl1cyAtIGRlbHRhLCBib3JkZXJSYWRpdXMgKyBkZWx0YSwgcmFkaXVzKTtcblx0dmVjNCBjb2xvciA9IG1peChmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvciwgcmF0aW8pO1xuXHRjb2xvci5hICo9IGFscGhhICogb3BhY2l0eTtcblx0Z2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSksbC52ZXJ0PWgoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyU2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9ySWQsIGJvcmRlckNvbG9ySWQ7XG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XG5cbnVuaWZvcm0gYm9vbCBjb25zdFBvaW50U2l6ZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjMiBwYWxldHRlU2l6ZSwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlVGV4dHVyZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xuXG5mbG9hdCBwb2ludFNpemVTY2FsZSA9IChjb25zdFBvaW50U2l6ZSkgPyAyLiA6IHBpeGVsUmF0aW87XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlVGV4dHVyZSxcbiAgICB2ZWMyKFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICAgKVxuICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XG5cbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xuXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xuXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XG5cbiAgZ2xfUG9pbnRTaXplID0gKHNpemUgKyBib3JkZXJTaXplKSAqIHBvaW50U2l6ZVNjYWxlO1xuXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLiwgMS4pO1xuXG4gIGZyYWdCb3JkZXJSYWRpdXMgPSAxLiAtIDIuICogYm9yZGVyU2l6ZSAvIChzaXplICsgYm9yZGVyU2l6ZSk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvci5hID09IDAuIHx8IGJvcmRlclNpemUgPT0gMC4gPyB2ZWM0KGNvbG9yLnJnYiwgMC4pIDogYm9yZGVyQ29sb3I7XG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xufVxuIl0pLGcmJihsLmZyYWc9bC5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikscy5mcmFnPXMuZnJhZy5yZXBsYWNlKCJzbW9vdGhzdGVwIiwic21vb3RoU3RlcCIpKSx0aGlzLmRyYXdDaXJjbGU9dChsKX1iLmRlZmF1bHRzPXtjb2xvcjoiYmxhY2siLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZTowLHNpemU6MTIsb3BhY2l0eToxLG1hcmtlcjp2b2lkIDAsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLHBpeGVsU2l6ZTpudWxsLGNvdW50OjAsb2Zmc2V0OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLHNuYXA6MWU0fSxiLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdGhpcy51cGRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuZHJhdygpLHRoaXN9LGIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5ncm91cHM7aWYoMT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYobnVsbD09PXJbMF1bMF18fEFycmF5LmlzQXJyYXkoclswXVswXSkpJiYocj1yWzBdKSx0aGlzLnJlZ2wuX3JlZnJlc2goKSxyLmxlbmd0aClmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl0aGlzLmRyYXdJdGVtKGEsclthXSk7ZWxzZSBpLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5kcmF3SXRlbShyKX0pKTtyZXR1cm4gdGhpc30sYi5wcm90b3R5cGUuZHJhd0l0ZW09ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyb3VwcyxuPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiYodD1lLG49cltlXSxlPW51bGwpLG4mJm4uY291bnQmJm4ub3BhY2l0eSl7bi5hY3RpdmF0aW9uWzBdJiZ0aGlzLmRyYXdDaXJjbGUodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucygwLG4sZSkpO2Zvcih2YXIgYT1bXSxvPTE7bzxuLmFjdGl2YXRpb24ubGVuZ3RoO28rKyluLmFjdGl2YXRpb25bb10mJighMD09PW4uYWN0aXZhdGlvbltvXXx8bi5hY3RpdmF0aW9uW29dLmRhdGEubGVuZ3RoKSYmYS5wdXNoLmFwcGx5KGEsaSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKG8sbixlKSkpO2EubGVuZ3RoJiZ0aGlzLmRyYXdNYXJrZXIoYSl9fSxiLnByb3RvdHlwZS5nZXRNYXJrZXJEcmF3T3B0aW9ucz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5yYW5nZSxhPWUudHJlZSxvPWUudmlld3BvcnQscz1lLmFjdGl2YXRpb24sbD1lLnNlbGVjdGlvbkJ1ZmZlcixjPWUuY291bnQ7dGhpcy5yZWdsO2lmKCFhKXJldHVybiByP1tmKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sY291bnQ6ci5sZW5ndGgsZWxlbWVudHM6cixvZmZzZXQ6MH0pXTpbZih7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLG9mZnNldDowfSldO3ZhciB1PVtdLGg9YS5yYW5nZShpLHtsb2Q6ITAscHg6WyhpWzJdLWlbMF0pL28ud2lkdGgsKGlbM10taVsxXSkvby5oZWlnaHRdfSk7aWYocil7Zm9yKHZhciBwPXNbdF0uZGF0YSxkPW5ldyBVaW50OEFycmF5KGMpLG09MDttPHIubGVuZ3RoO20rKyl7dmFyIGc9clttXTtkW2ddPXA/cFtnXToxfWwuc3ViZGF0YShkKX1mb3IodmFyIHY9aC5sZW5ndGg7di0tOyl7dmFyIHk9bihoW3ZdLDIpLHg9eVswXSxiPXlbMV07dS5wdXNoKGYoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246cj9sOnNbdF0sb2Zmc2V0OngsY291bnQ6Yi14fSkpfXJldHVybiB1fSxiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07aWYoci5sZW5ndGgpezE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKHI9clswXSk7dmFyIGk9dGhpcy5ncm91cHMsYT10aGlzLmdsLG89dGhpcy5yZWdsLHM9dGhpcy5tYXhTaXplLGM9dGhpcy5tYXhDb2xvcnMsaD10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9aT1yLm1hcCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1pW3JdO2lmKHZvaWQgMD09PWUpcmV0dXJuIG47bnVsbD09PWU/ZT17cG9zaXRpb25zOm51bGx9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U9e29uZHJhdzplfToibnVtYmVyIj09dHlwZW9mIGVbMF0mJihlPXtwb3NpdGlvbnM6ZX0pLG51bGw9PT0oZT1wKGUse3Bvc2l0aW9uczoicG9zaXRpb25zIGRhdGEgcG9pbnRzIixzbmFwOiJzbmFwIGNsdXN0ZXIgbG9kIHRyZWUiLHNpemU6InNpemVzIHNpemUgcmFkaXVzIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSBkYXRhQm94IGRhdGFib3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3UG9ydCB2aWV3Qm94IHZpZXdib3giLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5Iixib3VuZHM6ImJvdW5kIGJvdW5kcyBib3VuZGFyaWVzIGxpbWl0cyIsdG9vTWFueUNvbG9yczoidG9vTWFueUNvbG9ycyBwYWxldHRlIHBhbGV0dGVNb2RlIG9wdGltaXplUGFsZXR0ZSBlbmFibGVQYWxldHRlIn0pKS5wb3NpdGlvbnMmJihlLnBvc2l0aW9ucz1bXSksbnVsbCE9ZS50b29NYW55Q29sb3JzJiYodC50b29NYW55Q29sb3JzPWUudG9vTWFueUNvbG9ycyksbnx8KGlbcl09bj17aWQ6cixzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGFjdGl2YXRpb246W10sc2VsZWN0aW9uQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJzdHJlYW0iLHR5cGU6InVpbnQ4In0pLHNpemVCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLGNvbG9yQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxwb3NpdGlvbkJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSl9LGU9Zih7fSxiLmRlZmF1bHRzLGUpKSxlLnBvc2l0aW9ucyYmISgibWFya2VyImluIGUpJiYoZS5tYXJrZXI9bi5tYXJrZXIsZGVsZXRlIG4ubWFya2VyKSxlLm1hcmtlciYmISgicG9zaXRpb25zImluIGUpJiYoZS5wb3NpdGlvbnM9bi5wb3NpdGlvbnMsZGVsZXRlIG4ucG9zaXRpb25zKTt2YXIgZz0wLHg9MDtpZihkKG4sZSxbe3NuYXA6ITAsc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD1iLmRlZmF1bHRzLnNpemUpLGcrPXQmJnQubGVuZ3RoPzE6MCx0fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWIuZGVmYXVsdHMuYm9yZGVyU2l6ZSksZys9dCYmdC5sZW5ndGg/MTowLHR9LG9wYWNpdHk6cGFyc2VGbG9hdCxjb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT1iLmRlZmF1bHRzLmNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSkseCsrLGV9LGJvcmRlckNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPWIuZGVmYXVsdHMuYm9yZGVyQ29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSx4KyssZX0sYm91bmRzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4icmFuZ2UiaW4gcnx8KHIucmFuZ2U9bnVsbCksdH0scG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnNuYXAsaT1lLnBvc2l0aW9uQnVmZmVyLGE9ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHM9ZS5zZWxlY3Rpb25CdWZmZXI7aWYodC54fHx0LnkpcmV0dXJuIHQueC5sZW5ndGg/ZS54QXR0cj17YnVmZmVyOm8uYnVmZmVyKHQueCksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC54Lmxlbmd0aH06ZS54QXR0cj17YnVmZmVyOnQueC5idWZmZXIsb2Zmc2V0OjQqdC54Lm9mZnNldHx8MCxzdHJpZGU6NCoodC54LnN0cmlkZXx8MSksY291bnQ6dC54LmNvdW50fSx0LnkubGVuZ3RoP2UueUF0dHI9e2J1ZmZlcjpvLmJ1ZmZlcih0LnkpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueS5sZW5ndGh9OmUueUF0dHI9e2J1ZmZlcjp0LnkuYnVmZmVyLG9mZnNldDo0KnQueS5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueS5zdHJpZGV8fDEpLGNvdW50OnQueS5jb3VudH0sZS5jb3VudD1NYXRoLm1heChlLnhBdHRyLmNvdW50LGUueUF0dHIuY291bnQpLHQ7dD1tKHQsImZsb2F0NjQiKTt2YXIgYz1lLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksZj1lLmJvdW5kcz1jP2wodCwyKTpudWxsO2lmKHIucmFuZ2V8fGUucmFuZ2V8fChkZWxldGUgZS5yYW5nZSxyLnJhbmdlPWYpLHIubWFya2VyfHxlLm1hcmtlcnx8KGRlbGV0ZSBlLm1hcmtlcixyLm1hcmtlcj1udWxsKSxuJiYoITA9PT1ufHxjPm4pP2UudHJlZT11KHQse2JvdW5kczpmfSk6biYmbi5sZW5ndGgmJihlLnRyZWU9biksZS50cmVlKXt2YXIgaD17cHJpbWl0aXZlOiJwb2ludHMiLHVzYWdlOiJzdGF0aWMiLGRhdGE6ZS50cmVlLHR5cGU6InVpbnQzMiJ9O2UuZWxlbWVudHM/ZS5lbGVtZW50cyhoKTplLmVsZW1lbnRzPW8uZWxlbWVudHMoaCl9dmFyIHA9di5mbG9hdDMyKHQpO3JldHVybiBpKHtkYXRhOnAsdXNhZ2U6ImR5bmFtaWMifSksYSh7ZGF0YTp2LmZyYWN0MzIodCxwKSx1c2FnZToiZHluYW1pYyJ9KSxzKHtkYXRhOm5ldyBVaW50OEFycmF5KGMpLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmFjdGl2YXRpb247aWYoaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSxpLmxlbmd0aD0wLGUmJiJudW1iZXIiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO3M8bDtzKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbc10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW3NdPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGY9e2RhdGE6YVt1XSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0YXRpYyJ9O2lbdV0/aVt1XShmKTppW3VdPW8uYnVmZmVyKGYpLGlbdV0uZGF0YT1hW3VdfX1lbHNle2lbdC5hZGRNYXJrZXIoZSldPSEwfXJldHVybiBlfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7aWYobilyZXR1cm4gdHx8KHQ9biksZS5zY2FsZT1bMS8odFsyXS10WzBdKSwxLyh0WzNdLXRbMV0pXSxlLnRyYW5zbGF0ZT1bLXRbMF0sLXRbMV1dLGUuc2NhbGVGcmFjdD12LmZyYWN0KGUuc2NhbGUpLGUudHJhbnNsYXRlRnJhY3Q9di5mcmFjdChlLnRyYW5zbGF0ZSksdH0sdmlld3BvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHkodHx8W2EuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodF0pfX1dKSxnKXt2YXIgXz1uLHc9Xy5jb3VudCxUPV8uc2l6ZSxrPV8uYm9yZGVyU2l6ZSxBPV8uc2l6ZUJ1ZmZlcixNPW5ldyBVaW50OEFycmF5KDIqdyk7aWYoVC5sZW5ndGh8fGsubGVuZ3RoKWZvcih2YXIgUz0wO1M8dztTKyspTVsyKlNdPU1hdGgucm91bmQoMjU1KihudWxsPT1UW1NdP1Q6VFtTXSkvcyksTVsyKlMrMV09TWF0aC5yb3VuZCgyNTUqKG51bGw9PWtbU10/azprW1NdKS9zKTtBKHtkYXRhOk0sdXNhZ2U6ImR5bmFtaWMifSl9aWYoeCl7dmFyIEUsTD1uLEM9TC5jb3VudCxQPUwuY29sb3IsST1MLmJvcmRlckNvbG9yLE89TC5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKFAubGVuZ3RofHxJLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkMpO2Zvcih2YXIgej0wO3o8Qzt6Kyspe3ZhciBEPVBbel07RVs4KnpdPWhbNCpEXSxFWzgqeisxXT1oWzQqRCsxXSxFWzgqeisyXT1oWzQqRCsyXSxFWzgqeiszXT1oWzQqRCszXTt2YXIgUj1JW3pdO0VbOCp6KzRdPWhbNCpSXSxFWzgqeis1XT1oWzQqUisxXSxFWzgqeis2XT1oWzQqUisyXSxFWzgqeis3XT1oWzQqUiszXX19fWVsc2UgaWYoUC5sZW5ndGh8fEkubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqQysyKTtmb3IodmFyIEY9MDtGPEM7RisrKW51bGwhPVBbRl0mJihFWzQqRl09UFtGXSVjLEVbNCpGKzFdPU1hdGguZmxvb3IoUFtGXS9jKSksbnVsbCE9SVtGXSYmKEVbNCpGKzJdPUlbRl0lYyxFWzQqRiszXT1NYXRoLmZsb29yKElbRl0vYykpfU8oe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZToidWludDgiLHVzYWdlOiJkeW5hbWljIn0pfXJldHVybiBufSkpfX0sYi5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5tYXJrZXJUZXh0dXJlcyxuPXRoaXMucmVnbCxpPXRoaXMubWFya2VyQ2FjaGUsYT1udWxsPT10PzA6aS5pbmRleE9mKHQpO2lmKGE+PTApcmV0dXJuIGE7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSllPXQ7ZWxzZXtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIG89MCxzPXQubGVuZ3RoO288cztvKyspZVtvXT0yNTUqdFtvXX12YXIgbD1NYXRoLmZsb29yKE1hdGguc3FydChlLmxlbmd0aCkpO3JldHVybiBhPXIubGVuZ3RoLGkucHVzaCh0KSxyLnB1c2gobi50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6ZSxyYWRpdXM6bCxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSkpLGF9LGIucHJvdG90eXBlLnVwZGF0ZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFsZXR0ZUlkcyxyPXRoaXMucGFsZXR0ZSxuPXRoaXMubWF4Q29sb3JzO0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGk9W107aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgYT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wO288dC5sZW5ndGg7bys9NClhLnB1c2godC5zbGljZShvLG8rNCkpO2Vsc2UgZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKz00KWEucHVzaCh0LnN1YmFycmF5KGwsbCs0KSk7dD1hfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgZj10W3VdO2Y9cyhmLCJ1aW50OCIpO3ZhciBoPWMoZiwhMSk7aWYobnVsbD09ZVtoXSl7dmFyIHA9ci5sZW5ndGg7ZVtoXT1NYXRoLmZsb29yKHAvNCkscltwXT1mWzBdLHJbcCsxXT1mWzFdLHJbcCsyXT1mWzJdLHJbcCszXT1mWzNdfWlbdV09ZVtoXX1yZXR1cm4hdGhpcy50b29NYW55Q29sb3JzJiZyLmxlbmd0aD40Km4mJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09aS5sZW5ndGg/aVswXTppfSxiLnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgaT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTtpPG4qZTtpKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LGIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zaXplQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uRnJhY3RCdWZmZXIuZGVzdHJveSgpLHQuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQuYWN0aXZhdGlvbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSksdGhpcy5ncm91cHMubGVuZ3RoPTAsdGhpcy5wYWxldHRlVGV4dHVyZS5kZXN0cm95KCksdGhpcy5tYXJrZXJUZXh0dXJlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSx0aGlzfTt2YXIgXz10KCJvYmplY3QtYXNzaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHgodCxlKSxuPXIucmVuZGVyLmJpbmQocik7cmV0dXJuIF8obix7cmVuZGVyOm4sdXBkYXRlOnIudXBkYXRlLmJpbmQociksZHJhdzpyLmRyYXcuYmluZChyKSxkZXN0cm95OnIuZGVzdHJveS5iaW5kKHIpLHJlZ2w6ci5yZWdsLGdsOnIuZ2wsY2FudmFzOnIuZ2wuY2FudmFzLGdyb3VwczpyLmdyb3VwcyxtYXJrZXJzOnIubWFya2VyQ2FjaGUscGFsZXR0ZTpyLnBhbGV0dGV9KSxufX0seyJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiOjU5LCJhcnJheS1ib3VuZHMiOjY3LCJjb2xvci1pZCI6ODIsImNvbG9yLW5vcm1hbGl6ZSI6ODQsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjE4NixnbHNsaWZ5OjIyMiwiaXMtaWV4cGxvcmVyIjoyMjgsIm9iamVjdC1hc3NpZ24iOjI0MiwicGFyc2UtcmVjdCI6MjQ0LCJwaWNrLWJ5LWFsaWFzIjoyNDgsInRvLWZsb2F0MzIiOjMwOCwidXBkYXRlLWRpZmYiOjMyNH1dLDI3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKSk6KHRoaXMuZHJhdygpLHRoaXMuZGlydHk9ITAsbygoZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGk9W10sYT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspaS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9YSxhKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxpKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89aShlLHtkYXRhOiJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHgiLHNuYXA6InNuYXAgY2x1c3RlciIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgcmFuZ2VzIGRhdGFib3ggZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCIsZG9tYWluOiJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzIixwYWRkaW5nOiJwYWQgcGFkZGluZyBwYWRkaW5ncyBwYWRzIG1hcmdpbiBtYXJnaW5zIix0cmFuc3Bvc2U6InRyYW5zcG9zZSB0cmFuc3Bvc2VkIixkaWFnb25hbDoiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWwiLHVwcGVyOiJ1cHBlciB1cCB0b3AgdXBwZXJoYWxmIHVwcGVySGFsZiBzaG93dXBwZXJoYWxmIHNob3dVcHBlciBzaG93VXBwZXJIYWxmIixsb3dlcjoibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXIifSkscz10aGlzLnRyYWNlc1t0XXx8KHRoaXMudHJhY2VzW3RdPXtpZDp0LGJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6ImJsYWNrIixtYXJrZXI6bnVsbCxzaXplOjEyLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09YShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJiJudW1iZXIiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiYibnVtYmVyIj09dHlwZW9mIG8ucGFkZGluZ1tvLnBhZGRpbmcubGVuZ3RoLTFdPyhzLnBhZGRpbmc9by5wYWRkaW5nLm1hcChwKSxkPSEwKTpzLnBhZGRpbmc9cChvLnBhZGRpbmcpKTt2YXIgbT1zLmNvbHVtbnMsZz1zLmNvdW50LHY9cy52aWV3cG9ydC53aWR0aCx5PXMudmlld3BvcnQuaGVpZ2h0LHg9cy52aWV3cG9ydC54LGI9cy52aWV3cG9ydC55LF89di9tLHc9eS9tO3MucGFzc2VzPVtdO2Zvcih2YXIgVD0wO1Q8bTtUKyspZm9yKHZhciBrPTA7azxtO2srKylpZigocy5kaWFnb25hbHx8ayE9PVQpJiYocy51cHBlcnx8IShUPmspKSYmKHMubG93ZXJ8fCEoVDxrKSkpe3ZhciBBPWYocy5pZCxULGspLE09dGhpcy5wYXNzZXNbQV18fCh0aGlzLnBhc3Nlc1tBXT17fSk7aWYoby5kYXRhJiYoby50cmFuc3Bvc2U/TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDpnLHN0cmlkZTptfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQsY291bnQ6ZyxzdHJpZGU6bX19Ok0ucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OmsqZyxjb3VudDpnfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQqZyxjb3VudDpnfX0sTS5ib3VuZHM9aChzLmJvdW5kcyxULGspKSxvLmRvbWFpbnx8by52aWV3cG9ydHx8by5kYXRhKXt2YXIgUz1kP2gocy5wYWRkaW5nLFQsayk6cy5wYWRkaW5nO2lmKHMuZG9tYWluKXt2YXIgRT1oKHMuZG9tYWluLFQsayksTD1FWzBdLEM9RVsxXSxQPUVbMl0sST1FWzNdO00udmlld3BvcnQ9W3grTCp2K1NbMF0sYitDKnkrU1sxXSx4K1Aqdi1TWzJdLGIrSSp5LVNbM11dfWVsc2UgTS52aWV3cG9ydD1beCtrKl8rXypTWzBdLGIrVCp3K3cqU1sxXSx4KyhrKzEpKl8tXypTWzJdLGIrKFQrMSkqdy13KlNbM11dfW8uY29sb3ImJihNLmNvbG9yPXMuY29sb3IpLG8uc2l6ZSYmKE0uc2l6ZT1zLnNpemUpLG8ubWFya2VyJiYoTS5tYXJrZXI9cy5tYXJrZXIpLG8uYm9yZGVyU2l6ZSYmKE0uYm9yZGVyU2l6ZT1zLmJvcmRlclNpemUpLG8uYm9yZGVyQ29sb3ImJihNLmJvcmRlckNvbG9yPXMuYm9yZGVyQ29sb3IpLG8ub3BhY2l0eSYmKE0ub3BhY2l0eT1zLm9wYWNpdHkpLG8ucmFuZ2UmJihNLnJhbmdlPW4/aChzLnJhbmdlLFQsayk6cy5yYW5nZXx8TS5ib3VuZHMpLHMucGFzc2VzLnB1c2goQSl9cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoO2krKylpZigibnVtYmVyIj09dHlwZW9mIGVbaV0pe3ZhciBhPXRoaXMudHJhY2VzW2VbaV1dLG89YS5wYXNzZXMsbD1hLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbaV0ubGVuZ3RoKXt2YXIgYz1lW2ldLHU9dGhpcy50cmFjZXNbaV0sZj11LnBhc3NlcyxoPXUucGFzc09mZnNldDtmPWYubWFwKChmdW5jdGlvbih0LGUpe25baCtlXT1jfSkpfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSkpLHRoaXMudHJhY2VzPW51bGwsdGhpcy5wYXNzZXM9bnVsbCx0aGlzLnNjYXR0ZXIuZGVzdHJveSgpLHRoaXN9fSx7ImFycmF5LWJvdW5kcyI6NjcsImFycmF5LXJhbmdlIjo3MCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTg2LCJwYXJzZS1yZWN0IjoyNDQsInBpY2stYnktYWxpYXMiOjI0OCxyYWY6MjczLCJyZWdsLXNjYXR0ZXIyZCI6Mjc2fV0sMjc4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz1uKCk6dC5jcmVhdGVSRUdMPW4oKX0odGhpcywoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5pZD1xKyssdGhpcy50eXBlPXQsdGhpcy5kYXRhPWV9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iWyIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCciJz09PXJ8fCInIj09PXIpKXJldHVyblsnIicrZS5zdWJzdHIoMSxlLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2lmKHI9L1xbKGZhbHNlfHRydWV8bnVsbHxcZCt8J1teJ10qJ3wiW14iXSoiKVxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KCIuIikpLmxlbmd0aClyZXR1cm5bJyInK2UucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz8xOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGY9ITEsaD17fSxwPWZ1bmN0aW9uKHQpe30sZD1mdW5jdGlvbigpe307aWYoInN0cmluZyI9PXR5cGVvZiBzP2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKToib2JqZWN0Ij09dHlwZW9mIHMmJigic3RyaW5nIj09dHlwZW9mIHMubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZT1zOiJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdFbGVtZW50cz9hPShvPXMpLmNhbnZhczooImdsImluIHM/bz1zLmdsOiJjYW52YXMiaW4gcz9hPW4ocy5jYW52YXMpOiJjb250YWluZXIiaW4gcyYmKGk9bihzLmNvbnRhaW5lcikpLCJhdHRyaWJ1dGVzImluIHMmJih0PXMuYXR0cmlidXRlcyksImV4dGVuc2lvbnMiaW4gcyYmKGw9cihzLmV4dGVuc2lvbnMpKSwib3B0aW9uYWxFeHRlbnNpb25zImluIHMmJihjPXIocy5vcHRpb25hbEV4dGVuc2lvbnMpKSwib25Eb25lImluIHMmJihwPXMub25Eb25lKSwicHJvZmlsZSJpbiBzJiYoZj0hIXMucHJvZmlsZSksInBpeGVsUmF0aW8iaW4gcyYmKHU9K3MucGl4ZWxSYXRpbyksImNhY2hlZENvZGUiaW4gcyYmKGg9cy5jYWNoZWRDb2RlKSkpLGUmJigiY2FudmFzIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9hPWU6aT1lKSwhbyl7aWYoIWEpe2lmKCEoZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0O3QhPT1kb2N1bWVudC5ib2R5JiYoZT0obj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5yaWdodC1uLmxlZnQsbj1uLmJvdHRvbS1uLnRvcCksYS53aWR0aD1yKmUsYS5oZWlnaHQ9cipufXZhciBpLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIEgoYS5zdHlsZSx7Ym9yZGVyOjAsbWFyZ2luOjAscGFkZGluZzowLHRvcDowLGxlZnQ6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0pLHQuYXBwZW5kQ2hpbGQoYSksdD09PWRvY3VtZW50LmJvZHkmJihhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsSCh0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksdCE9PWRvY3VtZW50LmJvZHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXNpemVPYnNlcnZlcj8oaT1uZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKCl7c2V0VGltZW91dChuKX0pKSkub2JzZXJ2ZSh0KTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuLCExKSxuKCkse2NhbnZhczphLG9uRGVzdHJveTpmdW5jdGlvbigpe2k/aS5kaXNjb25uZWN0KCk6d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiksdC5yZW1vdmVDaGlsZChhKX19fShpfHxkb2N1bWVudC5ib2R5LDAsdSkpKXJldHVybiBudWxsO2E9ZS5jYW52YXMsZD1lLm9uRGVzdHJveX12b2lkIDA9PT10LnByZW11bHRpcGxpZWRBbHBoYSYmKHQucHJlbXVsdGlwbGllZEFscGhhPSEwKSxvPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcigid2ViZ2wiKXx8cigiZXhwZXJpbWVudGFsLXdlYmdsIil8fHIoIndlYmdsLWV4cGVyaW1lbnRhbCIpfShhLHQpfXJldHVybiBvP3tnbDpvLGNhbnZhczphLGNvbnRhaW5lcjppLGV4dGVuc2lvbnM6bCxvcHRpb25hbEV4dGVuc2lvbnM6YyxwaXhlbFJhdGlvOnUscHJvZmlsZTpmLGNhY2hlZENvZGU6aCxvbkRvbmU6cCxvbkRlc3Ryb3k6ZH06KGQoKSxwKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fEoodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPW50KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPXJ0KGUsaSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpYLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksZihpPVguYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOlguZnJlZVR5cGUoaSkpOkooZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9cnQoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOlguZnJlZVR5cGUoZSkpfWVsc2UgaWYoSihlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxtPTAsZz0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxtPWNbMF0sZz0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLG09Y1swXSxnPWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsaChpPVguYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLG0sZyxzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpYLmZyZWVUeXBlKGkpfWVsc2UgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodC5kdHlwZT01MTIxLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZSkpKSl9ZnVuY3Rpb24gcyhyKXtlLmJ1ZmZlckNvdW50LS0sbihyKSx0LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9cFtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4sYSxjLGQpe2Z1bmN0aW9uIG0oZSl7dmFyIG49MzUwNDQsaT1udWxsLGE9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxKKGUpfHxsKGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoImRhdGEiaW4gZSYmKGk9ZS5kYXRhKSwidXNhZ2UiaW4gZSYmKG49ZXRbZS51c2FnZV0pLCJ0eXBlImluIGUmJihzPXR0W2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksImxlbmd0aCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksZy5iaW5kKCksaT9vKGcsaSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKGcudHlwZSxhLG4pLGcuZHR5cGU9c3x8NTEyMSxnLnVzYWdlPW4sZy5kaW1lbnNpb249YyxnLmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYoZy5zdGF0cy5zaXplPWcuYnl0ZUxlbmd0aCppdFtnLmR0eXBlXSksbX1lLmJ1ZmZlckNvdW50Kys7dmFyIGc9bmV3IGkoYSk7cmV0dXJuIHBbZy5pZF09ZyxjfHxtKG4pLG0uX3JlZ2xUeXBlPSJidWZmZXIiLG0uX2J1ZmZlcj1nLG0uc3ViZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGk9MHwocnx8MCk7aWYoZy5iaW5kKCksSihlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXQuYnVmZmVyU3ViRGF0YShnLnR5cGUsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt2YXIgYT1YLmFsbG9jVHlwZShnLmR0eXBlLGUubGVuZ3RoKTtmKGEsZSksdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLGEpLFguZnJlZVR5cGUoYSl9ZWxzZShBcnJheS5pc0FycmF5KGVbMF0pfHxKKGVbMF0pKSYmKG49bnQoZSksYT1ydChlLG4sZy5kdHlwZSksdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLGEpLFguZnJlZVR5cGUoYSkpfWVsc2UgaWYobChlKSl7bj1lLnNoYXBlO3ZhciBvPWUuc3RyaWRlLHM9YT0wLGM9MCxwPTA7MT09PW4ubGVuZ3RoPyhhPW5bMF0scz0xLGM9b1swXSxwPTApOjI9PT1uLmxlbmd0aCYmKGE9blswXSxzPW5bMV0sYz1vWzBdLHA9b1sxXSksbj1BcnJheS5pc0FycmF5KGUuZGF0YSk/Zy5kdHlwZTp1KGUuZGF0YSksaChuPVguYWxsb2NUeXBlKG4sYSpzKSxlLmRhdGEsYSxzLGMscCxlLm9mZnNldCksdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLG4pLFguZnJlZVR5cGUobil9cmV0dXJuIG19LHIucHJvZmlsZSYmKG0uc3RhdHM9Zy5zdGF0cyksbS5kZXN0cm95PWZ1bmN0aW9uKCl7cyhnKX0sbX0sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZC5wb3AoKTtyZXR1cm4gcnx8KHI9bmV3IGkodCkpLHIuYmluZCgpLG8ocixlLDM1MDQwLDAsMSwhMSkscn0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtkLnB1c2godCl9LGNsZWFyOmZ1bmN0aW9uKCl7SyhwKS5mb3JFYWNoKHMpLGQuZm9yRWFjaChzKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBpP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7SyhwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSkpfSxfaW5pdEJ1ZmZlcjpvfX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7dGhpcy5pZD1jKyssc1t0aGlzLmlkXT10aGlzLHRoaXMuYnVmZmVyPXQsdGhpcy5wcmltVHlwZT00LHRoaXMudHlwZT10aGlzLnZlcnRDb3VudD0wfWZ1bmN0aW9uIGEobixpLGEsbyxzLGMsdSl7dmFyIGY7aWYobi5idWZmZXIuYmluZCgpLGk/KChmPXUpfHxKKGkpJiYoIWwoaSl8fEooaS5kYXRhKSl8fChmPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD81MTI1OjUxMjMpLHIuX2luaXRCdWZmZXIobi5idWZmZXIsaSxhLGYsMykpOih0LmJ1ZmZlckRhdGEoMzQ5NjMsYyxhKSxuLmJ1ZmZlci5kdHlwZT1mfHw1MTIxLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1jKSxmPXUsIXUpe3N3aXRjaChuLmJ1ZmZlci5kdHlwZSl7Y2FzZSA1MTIxOmNhc2UgNTEyMDpmPTUxMjE7YnJlYWs7Y2FzZSA1MTIzOmNhc2UgNTEyMjpmPTUxMjM7YnJlYWs7Y2FzZSA1MTI1OmNhc2UgNTEyNDpmPTUxMjV9bi5idWZmZXIuZHR5cGU9Zn1uLnR5cGU9ZiwwPihpPXMpJiYoaT1uLmJ1ZmZlci5ieXRlTGVuZ3RoLDUxMjM9PT1mP2k+Pj0xOjUxMjU9PT1mJiYoaT4+PTIpKSxuLnZlcnRDb3VudD1pLGk9bywwPm8mJihpPTQsMT09PShvPW4uYnVmZmVyLmRpbWVuc2lvbikmJihpPTApLDI9PT1vJiYoaT0xKSwzPT09byYmKGk9NCkpLG4ucHJpbVR5cGU9aX1mdW5jdGlvbiBvKHQpe24uZWxlbWVudHNDb3VudC0tLGRlbGV0ZSBzW3QuaWRdLHQuYnVmZmVyLmRlc3Ryb3koKSx0LmJ1ZmZlcj1udWxsfXZhciBzPXt9LGM9MCx1PXt1aW50ODo1MTIxLHVpbnQxNjo1MTIzfTtlLm9lc19lbGVtZW50X2luZGV4X3VpbnQmJih1LnVpbnQzMj01MTI1KSxpLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5idWZmZXIuYmluZCgpfTt2YXIgZj1bXTtyZXR1cm57Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcyh0KXtpZih0KWlmKCJudW1iZXIiPT10eXBlb2YgdCljKHQpLGYucHJpbVR5cGU9NCxmLnZlcnRDb3VudD0wfHQsZi50eXBlPTUxMjE7ZWxzZXt2YXIgZT1udWxsLHI9MzUwNDQsbj0tMSxpPS0xLG89MCxoPTA7QXJyYXkuaXNBcnJheSh0KXx8Sih0KXx8bCh0KT9lPXQ6KCJkYXRhImluIHQmJihlPXQuZGF0YSksInVzYWdlImluIHQmJihyPWV0W3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihuPWF0W3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGg9dVt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWh8fDUxMjI9PT1oP28qPTI6NTEyNSE9PWgmJjUxMjQhPT1ofHwobyo9NCkpKSxhKGYsZSxyLG4saSxvLGgpfWVsc2UgYygpLGYucHJpbVR5cGU9NCxmLnZlcnRDb3VudD0wLGYudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGY9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT0iZWxlbWVudHMiLHMuX2VsZW1lbnRzPWYscy5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc3ViZGF0YSh0LGUpLHN9LHMuZGVzdHJveT1mdW5jdGlvbigpe28oZil9LHN9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1mLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLDM0OTYzLCEwLCExKS5fYnVmZmVyKSksYShlLHQsMzUwNDAsLTEsLTEsMCwwKSxlfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2YucHVzaCh0KX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe0socykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVguYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle290WzBdPXRbcl07dmFyIG49KGE9c3RbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIGcodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fEoodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIHkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJigwPT09dC5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCFnKHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD12dC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9bShlKSxYLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtpZih0PXZvaWQgMCE9PXh0W3RdP3h0W3RdOnV0W3RdKnl0W2VdLGEmJih0Kj02KSxpKXtmb3Iobj0wOzE8PXI7KW4rPXQqcipyLHIvPTI7cmV0dXJuIG59cmV0dXJuIHQqcipufWZ1bmN0aW9uIGsodCxlLHIsbixpLGEsbyl7ZnVuY3Rpb24gcygpe3RoaXMuZm9ybWF0PXRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLnR5cGU9NTEyMSx0aGlzLmZsaXBZPXRoaXMucHJlbXVsdGlwbHlBbHBoYT10aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9Mzc0NDQsdGhpcy5jaGFubmVscz10aGlzLmhlaWdodD10aGlzLndpZHRoPTB9ZnVuY3Rpb24gYyh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmUpeyJwcmVtdWx0aXBseUFscGhhImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSwiZmxpcFkiaW4gZSYmKHQuZmxpcFk9ZS5mbGlwWSksImFsaWdubWVudCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLCJjb2xvclNwYWNlImluIGUmJih0LmNvbG9yU3BhY2U9VltlLmNvbG9yU3BhY2VdKSwidHlwZSJpbiBlJiYodC50eXBlPXFbZS50eXBlXSk7dmFyIHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5jaGFubmVscyxhPSExOyJzaGFwZSJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KCJyYWRpdXMiaW4gZSYmKHI9bj1lLnJhZGl1cyksIndpZHRoImluIGUmJihyPWUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKG49ZS5oZWlnaHQpLCJjaGFubmVscyJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSwiZm9ybWF0ImluIGUmJihyPWUuZm9ybWF0LG49dC5pbnRlcm5hbGZvcm1hdD1HW3JdLHQuZm9ybWF0PWF0W25dLHIgaW4gcSYmISgidHlwZSJpbiBlKSYmKHQudHlwZT1xW3JdKSxyIGluIFkmJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9dXRbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09Y3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1jdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGYoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gaCgpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxfKGUuZGF0YSkmJihyPWUuZGF0YSkpLGUuY29weSl7dmFyIG49aS52aWV3cG9ydFdpZHRoLGE9aS52aWV3cG9ydEhlaWdodDt0LndpZHRoPXQud2lkdGh8fG4tdC54T2Zmc2V0LHQuaGVpZ2h0PXQuaGVpZ2h0fHxhLXQueU9mZnNldCx0Lm5lZWRzQ29weT0hMH1lbHNlIGlmKHIpe2lmKEoocikpdC5jaGFubmVscz10LmNoYW5uZWxzfHw0LHQuZGF0YT1yLCJ0eXBlImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1YLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1tKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGYsaD1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxmPWhbMl0pOmY9Yz0xLG89YVswXSxzPWFbMV0sYT1oWzBdLGg9aFsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PWN0W2NdLHQubmVlZHNGcmVlPSEwLG89ZixyPXIub2Zmc2V0LGM9dC53aWR0aCxmPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9WC5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypmKnMpLGQ9MCx2PTA7djxmOysrdilmb3IodmFyIFQ9MDtUPGM7KytUKWZvcih2YXIgaz0wO2s8czsrK2spcFtkKytdPW5bYSpUK2gqditvKmsrcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWZ0fHxiKHIpPT09aHR8fGIocik9PT1wdCliKHIpPT09ZnR8fGIocik9PT1odD90LmVsZW1lbnQ9cjp0LmVsZW1lbnQ9ci5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09ZHQpdC5lbGVtZW50PXIsdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1tdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PXIubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09Z3QpdC5lbGVtZW50PXIsdC53aWR0aD1yLnZpZGVvV2lkdGgsdC5oZWlnaHQ9ci52aWRlb0hlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih4KHIpKXtmb3Iobj10LndpZHRofHxyWzBdLmxlbmd0aCxhPXQuaGVpZ2h0fHxyLmxlbmd0aCxoPXQuY2hhbm5lbHMsaD1nKHJbMF1bMF0pP2h8fHJbMF1bMF0ubGVuZ3RoOmh8fDEsbz1RLnNoYXBlKHIpLGM9MSxmPTA7ZjxvLmxlbmd0aDsrK2YpYyo9b1tmXTtjPVguYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMpLFEuZmxhdHRlbihyLG8sIiIsYyksdyh0LGMpLHQuYWxpZ25tZW50PTEsdC53aWR0aD1uLHQuaGVpZ2h0PWEsdC5jaGFubmVscz1oLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9Y3RbaF0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NH1mdW5jdGlvbiBkKGUscixpLGEsbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLGM9ZS5pbnRlcm5hbGZvcm1hdCx1PWUuZm9ybWF0LGg9ZS50eXBlLHA9ZS53aWR0aCxkPWUuaGVpZ2h0O2YoZSkscz90LnRleFN1YkltYWdlMkQocixvLGksYSx1LGgscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGksYSxjLHAsZCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGksYSxlLnhPZmZzZXQsZS55T2Zmc2V0LHAsZCkpOnQudGV4U3ViSW1hZ2UyRChyLG8saSxhLHAsZCx1LGgsbCl9ZnVuY3Rpb24gdigpe3JldHVybiBvdC5wb3AoKXx8bmV3IGh9ZnVuY3Rpb24gayh0KXt0Lm5lZWRzRnJlZSYmWC5mcmVlVHlwZSh0LmRhdGEpLGguY2FsbCh0KSxvdC5wdXNoKHQpfWZ1bmN0aW9uIEEoKXtzLmNhbGwodGhpcyksdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT12KCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpKWMocj10LmltYWdlc1swXT12KCksdCkscChyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYodSh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxpPTA7aTxuLmxlbmd0aDsrK2kpYyhyPXQuaW1hZ2VzW2ldPXYoKSx0KSxyLndpZHRoPj49aSxyLmhlaWdodD4+PWkscChyLG5baV0pLHQubWlwbWFza3w9MTw8aTtlbHNlIGMocj10LmltYWdlc1swXT12KCksdCkscChyLGUpLHQubWlwbWFzaz0xO2ModCx0LmltYWdlc1swXSl9ZnVuY3Rpb24gRShlLHIpe2Zvcih2YXIgaT1lLmltYWdlcyxhPTA7YTxpLmxlbmd0aCYmaVthXTsrK2Epe3ZhciBvPWlbYV0scz1yLGw9YSxjPW8uZWxlbWVudCx1PW8uZGF0YSxoPW8uaW50ZXJuYWxmb3JtYXQscD1vLmZvcm1hdCxkPW8udHlwZSxtPW8ud2lkdGgsZz1vLmhlaWdodDtmKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsaCxtLGcsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxtLGcsMCkpOnQudGV4SW1hZ2UyRChzLGwscCxtLGcsMCxwLGQsdXx8bnVsbCl9fWZ1bmN0aW9uIEwoKXt2YXIgdD1zdC5wb3AoKXx8bmV3IEE7cy5jYWxsKHQpO2Zvcih2YXIgZT10Lm1pcG1hc2s9MDsxNj5lOysrZSl0LmltYWdlc1tlXT1udWxsO3JldHVybiB0fWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQuaW1hZ2VzLHI9MDtyPGUubGVuZ3RoOysrcillW3JdJiZrKGVbcl0pLGVbcl09bnVsbDtzdC5wdXNoKHQpfWZ1bmN0aW9uIFAoKXt0aGlzLm1hZ0ZpbHRlcj10aGlzLm1pbkZpbHRlcj05NzI4LHRoaXMud3JhcFQ9dGhpcy53cmFwUz0zMzA3MSx0aGlzLmFuaXNvdHJvcGljPTEsdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyfWZ1bmN0aW9uIEkodCxlKXsibWluImluIGUmJih0Lm1pbkZpbHRlcj1VW2UubWluXSwwPD1sdC5pbmRleE9mKHQubWluRmlsdGVyKSYmISgiZmFjZXMiaW4gZSkmJih0Lmdlbk1pcG1hcHM9ITApKSwibWFnImluIGUmJih0Lm1hZ0ZpbHRlcj1qW2UubWFnXSk7dmFyIHI9dC53cmFwUyxuPXQud3JhcFQ7aWYoIndyYXAiaW4gZSl7dmFyIGk9ZS53cmFwOyJzdHJpbmciPT10eXBlb2YgaT9yPW49TltpXTpBcnJheS5pc0FycmF5KGkpJiYocj1OW2lbMF1dLG49TltpWzFdXSl9ZWxzZSJ3cmFwUyJpbiBlJiYocj1OW2Uud3JhcFNdKSwid3JhcFQiaW4gZSYmKG49TltlLndyYXBUXSk7aWYodC53cmFwUz1yLHQud3JhcFQ9biwiYW5pc290cm9waWMiaW4gZSYmKHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpYyksIm1pcG1hcCJpbiBlKXtzd2l0Y2gocj0hMSx0eXBlb2YgZS5taXBtYXApe2Nhc2Uic3RyaW5nIjp0Lm1pcG1hcEhpbnQ9QltlLm1pcG1hcF0scj10Lmdlbk1pcG1hcHM9ITA7YnJlYWs7Y2FzZSJib29sZWFuIjpyPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlIm9iamVjdCI6dC5nZW5NaXBtYXBzPSExLHI9ITB9IXJ8fCJtaW4iaW4gZXx8KHQubWluRmlsdGVyPTk5ODQpfX1mdW5jdGlvbiBPKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDEsci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4sMzQwNDYsci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KDMzMTcwLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24geihlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMuaWQ9dnQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyBQLG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIEQoZSl7dC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gUigpe3ZhciBlPWJ0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUoMzU1MyxudWxsKX1mdW5jdGlvbiBGKGUpe3ZhciByPWUudGV4dHVyZSxuPWUudW5pdCxpPWUudGFyZ2V0OzA8PW4mJih0LmFjdGl2ZVRleHR1cmUoMzM5ODQrbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLGJ0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB5dFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfXZhciBCPXsiZG9uJ3QgY2FyZSI6NDM1MiwiZG9udCBjYXJlIjo0MzUyLG5pY2U6NDM1NCxmYXN0OjQzNTN9LE49e3JlcGVhdDoxMDQ5NyxjbGFtcDozMzA3MSxtaXJyb3I6MzM2NDh9LGo9e25lYXJlc3Q6OTcyOCxsaW5lYXI6OTcyOX0sVT1IKHttaXBtYXA6OTk4NywibmVhcmVzdCBtaXBtYXAgbmVhcmVzdCI6OTk4NCwibGluZWFyIG1pcG1hcCBuZWFyZXN0Ijo5OTg1LCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiOjk5ODYsImxpbmVhciBtaXBtYXAgbGluZWFyIjo5OTg3fSxqKSxWPXtub25lOjAsYnJvd3NlcjozNzQ0NH0scT17dWludDg6NTEyMSxyZ2JhNDozMjgxOSxyZ2I1NjU6MzM2MzUsInJnYjUgYTEiOjMyODIwfSxHPXthbHBoYTo2NDA2LGx1bWluYW5jZTo2NDA5LCJsdW1pbmFuY2UgYWxwaGEiOjY0MTAscmdiOjY0MDcscmdiYTo2NDA4LHJnYmE0OjMyODU0LCJyZ2I1IGExIjozMjg1NSxyZ2I1NjU6MzYxOTR9LFk9e307ZS5leHRfc3JnYiYmKEcuc3JnYj0zNTkwNCxHLnNyZ2JhPTM1OTA2KSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYocS5mbG9hdDMyPXEuZmxvYXQ9NTEyNiksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYocS5mbG9hdDE2PXFbImhhbGYgZmxvYXQiXT0zNjE5MyksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoSChHLHtkZXB0aDo2NDAyLCJkZXB0aCBzdGVuY2lsIjozNDA0MX0pLEgocSx7dWludDE2OjUxMjMsdWludDMyOjUxMjUsImRlcHRoIHN0ZW5jaWwiOjM0MDQyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJkgoWSx7InJnYiBzM3RjIGR4dDEiOjMzNzc2LCJyZ2JhIHMzdGMgZHh0MSI6MzM3NzcsInJnYmEgczN0YyBkeHQzIjozMzc3OCwicmdiYSBzM3RjIGR4dDUiOjMzNzc5fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiZIKFkseyJyZ2IgYXRjIjozNTk4NiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiOjM1OTg3LCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiOjM0Nzk4fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMmJkgoWSx7InJnYiBwdnJ0YyA0YnBwdjEiOjM1ODQwLCJyZ2IgcHZydGMgMmJwcHYxIjozNTg0MSwicmdiYSBwdnJ0YyA0YnBwdjEiOjM1ODQyLCJyZ2JhIHB2cnRjIDJicHB2MSI6MzU4NDN9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJiYoWVsicmdiIGV0YzEiXT0zNjE5Nik7dmFyIFc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIoMzQ0NjcpKTtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1ZW3RdOzA8PVcuaW5kZXhPZihlKSYmKEdbdF09ZSl9KSk7dmFyIFo9T2JqZWN0LmtleXMoRyk7ci50ZXh0dXJlRm9ybWF0cz1aO3ZhciB0dD1bXTtPYmplY3Qua2V5cyhHKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0dFtHW3RdXT10fSkpO3ZhciBldD1bXTtPYmplY3Qua2V5cyhxKS5mb3JFYWNoKChmdW5jdGlvbih0KXtldFtxW3RdXT10fSkpO3ZhciBydD1bXTtPYmplY3Qua2V5cyhqKS5mb3JFYWNoKChmdW5jdGlvbih0KXtydFtqW3RdXT10fSkpO3ZhciBudD1bXTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChmdW5jdGlvbih0KXtudFtVW3RdXT10fSkpO3ZhciBpdD1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpdFtOW3RdXT10fSkpO3ZhciBhdD1aLnJlZHVjZSgoZnVuY3Rpb24odCxyKXt2YXIgbj1HW3JdO3JldHVybiA2NDA5PT09bnx8NjQwNj09PW58fDY0MDk9PT1ufHw2NDEwPT09bnx8NjQwMj09PW58fDM0MDQxPT09bnx8ZS5leHRfc3JnYiYmKDM1OTA0PT09bnx8MzU5MDY9PT1uKT90W25dPW46MzI4NTU9PT1ufHwwPD1yLmluZGV4T2YoInJnYmEiKT90W25dPTY0MDg6dFtuXT02NDA3LHR9KSx7fSksb3Q9W10sc3Q9W10sdnQ9MCx5dD17fSx4dD1yLm1heFRleHR1cmVVbml0cyxidD1BcnJheSh4dCkubWFwKChmdW5jdGlvbigpe3JldHVybiBudWxsfSkpO3JldHVybiBIKHoucHJvdG90eXBlLHtiaW5kOmZ1bmN0aW9uKCl7dGhpcy5iaW5kQ291bnQrPTE7dmFyIGU9dGhpcy51bml0O2lmKDA+ZSl7Zm9yKHZhciByPTA7cjx4dDsrK3Ipe3ZhciBuPWJ0W3JdO2lmKG4pe2lmKDA8bi5iaW5kQ291bnQpY29udGludWU7bi51bml0PS0xfWJ0W3JdPXRoaXMsZT1yO2JyZWFrfW8ucHJvZmlsZSYmYS5tYXhUZXh0dXJlVW5pdHM8ZSsxJiYoYS5tYXhUZXh0dXJlVW5pdHM9ZSsxKSx0aGlzLnVuaXQ9ZSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSh0aGlzLnRhcmdldCx0aGlzLnRleHR1cmUpfXJldHVybiBlfSx1bmJpbmQ6ZnVuY3Rpb24oKXstLXRoaXMuYmluZENvdW50fSxkZWNSZWY6ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJkYodGhpcyl9fSksby5wcm9maWxlJiYoYS5nZXRUb3RhbFRleHR1cmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMoeXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPXl0W2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGUyRDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pLnRleEluZm87UC5jYWxsKHIpO3ZhciBhPUwoKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/TShhLDB8dCwibnVtYmVyIj09dHlwZW9mIGU/MHxlOjB8dCk6dD8oSShyLHQpLFMoYSx0KSk6TShhLDEsMSksci5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxpLm1pcG1hc2s9YS5taXBtYXNrLGMoaSxhKSxpLmludGVybmFsZm9ybWF0PWEuaW50ZXJuYWxmb3JtYXQsbi53aWR0aD1hLndpZHRoLG4uaGVpZ2h0PWEuaGVpZ2h0LEQoaSksRShhLDM1NTMpLE8ociwzNTUzKSxSKCksQyhhKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9VChpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLndpZHRoLGEuaGVpZ2h0LHIuZ2VuTWlwbWFwcywhMSkpLG4uZm9ybWF0PXR0W2kuaW50ZXJuYWxmb3JtYXRdLG4udHlwZT1ldFtpLnR5cGVdLG4ubWFnPXJ0W3IubWFnRmlsdGVyXSxuLm1pbj1udFtyLm1pbkZpbHRlcl0sbi53cmFwUz1pdFtyLndyYXBTXSxuLndyYXBUPWl0W3Iud3JhcFRdLG59dmFyIGk9bmV3IHooMzU1Myk7cmV0dXJuIHl0W2kuaWRdPWksYS50ZXh0dXJlQ291bnQrKyxuKGUsciksbi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixhKXtlfD0wLHJ8PTAsYXw9MDt2YXIgbz12KCk7cmV0dXJuIGMobyxpKSxvLndpZHRoPTAsby5oZWlnaHQ9MCxwKG8sdCksby53aWR0aD1vLndpZHRofHwoaS53aWR0aD4+YSktZSxvLmhlaWdodD1vLmhlaWdodHx8KGkuaGVpZ2h0Pj5hKS1yLEQoaSksZChvLDM1NTMsZSxyLGEpLFIoKSxrKG8pLG59LG4ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIGE9MHxlLHM9MHxyfHxhO2lmKGE9PT1pLndpZHRoJiZzPT09aS5oZWlnaHQpcmV0dXJuIG47bi53aWR0aD1pLndpZHRoPWEsbi5oZWlnaHQ9aS5oZWlnaHQ9cyxEKGkpO2Zvcih2YXIgbD0wO2kubWlwbWFzaz4+bDsrK2wpe3ZhciBjPWE+PmwsdT1zPj5sO2lmKCFjfHwhdSlicmVhazt0LnRleEltYWdlMkQoMzU1MyxsLGkuZm9ybWF0LGMsdSwwLGkuZm9ybWF0LGkudHlwZSxudWxsKX1yZXR1cm4gUigpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1UKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEscywhMSwhMSkpLG59LG4uX3JlZ2xUeXBlPSJ0ZXh0dXJlMmQiLG4uX3RleHR1cmU9aSxvLnByb2ZpbGUmJihuLnN0YXRzPWkuc3RhdHMpLG4uZGVzdHJveT1mdW5jdGlvbigpe2kuZGVjUmVmKCl9LG59LGNyZWF0ZUN1YmU6ZnVuY3Rpb24oZSxyLG4saSxzLGwpe2Z1bmN0aW9uIGYodCxlLHIsbixpLGEpe3ZhciBzLGw9aC50ZXhJbmZvO2ZvcihQLmNhbGwobCkscz0wOzY+czsrK3MpbVtzXT1MKCk7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpaWYoZSlTKG1bMF0sdCksUyhtWzFdLGUpLFMobVsyXSxyKSxTKG1bM10sbiksUyhtWzRdLGkpLFMobVs1XSxhKTtlbHNlIGlmKEkobCx0KSx1KGgsdCksImZhY2VzImluIHQpZm9yKHQ9dC5mYWNlcyxzPTA7Nj5zOysrcyljKG1bc10saCksUyhtW3NdLHRbc10pO2Vsc2UgZm9yKHM9MDs2PnM7KytzKVMobVtzXSx0KX1lbHNlIGZvcih0PTB8dHx8MSxzPTA7Nj5zOysrcylNKG1bc10sdCx0KTtmb3IoYyhoLG1bMF0pLGgubWlwbWFzaz1sLmdlbk1pcG1hcHM/KG1bMF0ud2lkdGg8PDEpLTE6bVswXS5taXBtYXNrLGguaW50ZXJuYWxmb3JtYXQ9bVswXS5pbnRlcm5hbGZvcm1hdCxmLndpZHRoPW1bMF0ud2lkdGgsZi5oZWlnaHQ9bVswXS5oZWlnaHQsRChoKSxzPTA7Nj5zOysrcylFKG1bc10sMzQwNjkrcyk7Zm9yKE8obCwzNDA2NyksUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1UKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsbC5nZW5NaXBtYXBzLCEwKSksZi5mb3JtYXQ9dHRbaC5pbnRlcm5hbGZvcm1hdF0sZi50eXBlPWV0W2gudHlwZV0sZi5tYWc9cnRbbC5tYWdGaWx0ZXJdLGYubWluPW50W2wubWluRmlsdGVyXSxmLndyYXBTPWl0W2wud3JhcFNdLGYud3JhcFQ9aXRbbC53cmFwVF0scz0wOzY+czsrK3MpQyhtW3NdKTtyZXR1cm4gZn12YXIgaD1uZXcgeigzNDA2Nyk7eXRbaC5pZF09aCxhLmN1YmVDb3VudCsrO3ZhciBtPUFycmF5KDYpO3JldHVybiBmKGUscixuLGkscyxsKSxmLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cnw9MCxufD0wLGl8PTA7dmFyIGE9digpO3JldHVybiBjKGEsaCksYS53aWR0aD0wLGEuaGVpZ2h0PTAscChhLGUpLGEud2lkdGg9YS53aWR0aHx8KGgud2lkdGg+PmkpLXIsYS5oZWlnaHQ9YS5oZWlnaHR8fChoLmhlaWdodD4+aSktbixEKGgpLGQoYSwzNDA2OSt0LHIsbixpKSxSKCksayhhKSxmfSxmLnJlc2l6ZT1mdW5jdGlvbihlKXtpZigoZXw9MCkhPT1oLndpZHRoKXtmLndpZHRoPWgud2lkdGg9ZSxmLmhlaWdodD1oLmhlaWdodD1lLEQoaCk7Zm9yKHZhciByPTA7Nj5yOysrcilmb3IodmFyIG49MDtoLm1pcG1hc2s+Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStyLG4saC5mb3JtYXQsZT4+bixlPj5uLDAsaC5mb3JtYXQsaC50eXBlLG51bGwpO3JldHVybiBSKCksby5wcm9maWxlJiYoaC5zdGF0cy5zaXplPVQoaC5pbnRlcm5hbGZvcm1hdCxoLnR5cGUsZi53aWR0aCxmLmhlaWdodCwhMSwhMCkpLGZ9fSxmLl9yZWdsVHlwZT0idGV4dHVyZUN1YmUiLGYuX3RleHR1cmU9aCxvLnByb2ZpbGUmJihmLnN0YXRzPWguc3RhdHMpLGYuZGVzdHJveT1mdW5jdGlvbigpe2guZGVjUmVmKCl9LGZ9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2UpdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSxidFtlXT1udWxsO0soeXQpLmZvckVhY2goRiksYS5jdWJlQ291bnQ9MCxhLnRleHR1cmVDb3VudD0wfSxnZXRUZXh0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2Upe3ZhciByPWJ0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSxidFtlXT1udWxsKX1LKHl0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7TyhlLnRleEluZm8sZS50YXJnZXQpfSkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2Upe3ZhciByPWJ0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSxidFtlXT1udWxsKSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9fX19ZnVuY3Rpb24gQSh0LGUscixuLGksYSl7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnRleHR1cmU9ZSx0aGlzLnJlbmRlcmJ1ZmZlcj1yO3ZhciBuPXQ9MDtlPyh0PWUud2lkdGgsbj1lLmhlaWdodCk6ciYmKHQ9ci53aWR0aCxuPXIuaGVpZ2h0KSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBzKHQpe3QmJih0LnRleHR1cmUmJnQudGV4dHVyZS5fdGV4dHVyZS5kZWNSZWYoKSx0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5kZWNSZWYoKSl9ZnVuY3Rpb24gbCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUuX3RleHR1cmUucmVmQ291bnQrPTE6dC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudCs9MSl9ZnVuY3Rpb24gYyhlLHIpe3ImJihyLnRleHR1cmU/dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxlLHIudGFyZ2V0LHIudGV4dHVyZS5fdGV4dHVyZS50ZXh0dXJlLDApOnQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsZSwzNjE2MSxyLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcikpfWZ1bmN0aW9uIHUodCl7dmFyIGU9MzU1MyxyPW51bGwsbj1udWxsLGk9dDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJihpPXQuZGF0YSwidGFyZ2V0ImluIHQmJihlPTB8dC50YXJnZXQpKSwidGV4dHVyZTJkIj09PSh0PWkuX3JlZ2xUeXBlKXx8InRleHR1cmVDdWJlIj09PXQ/cj1pOiJyZW5kZXJidWZmZXIiPT09dCYmKG49aSxlPTM2MTYxKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gZih0LGUscixhLHMpe3JldHVybiByPygodD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphLHR5cGU6c30pKS5fdGV4dHVyZS5yZWZDb3VudD0wLG5ldyBvKDM1NTMsdCxudWxsKSk6KCh0PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSkpLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbygzNjE2MSxudWxsLHQpKX1mdW5jdGlvbiBoKHQpe3JldHVybiB0JiYodC50ZXh0dXJlfHx0LnJlbmRlcmJ1ZmZlcil9ZnVuY3Rpb24gcCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUucmVzaXplKGUscik6dC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLnJlc2l6ZShlLHIpLHQud2lkdGg9ZSx0LmhlaWdodD1yKX1mdW5jdGlvbiBkKCl7dGhpcy5pZD1UKyssa1t0aGlzLmlkXT10aGlzLHRoaXMuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PXRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbH1mdW5jdGlvbiBtKHQpe3QuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKHMpLHModC5kZXB0aEF0dGFjaG1lbnQpLHModC5zdGVuY2lsQXR0YWNobWVudCkscyh0LmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpfWZ1bmN0aW9uIGcoZSl7dC5kZWxldGVGcmFtZWJ1ZmZlcihlLmZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyPW51bGwsYS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIGtbZS5pZF19ZnVuY3Rpb24gdihlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlLmZyYW1lYnVmZmVyKTt2YXIgaT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGkubGVuZ3RoOysrbiljKDM2MDY0K24saVtuXSk7Zm9yKG49aS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQrbiwzNTUzLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjEyOCwzNTUzLG51bGwsMCksYygzNjA5NixlLmRlcHRoQXR0YWNobWVudCksYygzNjEyOCxlLnN0ZW5jaWxBdHRhY2htZW50KSxjKDMzMzA2LGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCksdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSx0LmlzQ29udGV4dExvc3QoKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4Lm5leHQ/eC5uZXh0LmZyYW1lYnVmZmVyOm51bGwpLHguY3VyPXgubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgaSxhPTAsbz0wLHM9ITAsYz0hMDtpPW51bGw7dmFyIHA9ITAsZD0icmdiYSIsZz0idWludDgiLHk9MSx4PW51bGwsdz1udWxsLFQ9bnVsbCxrPSExOyJudW1iZXIiPT10eXBlb2YgdD8oYT0wfHQsbz0wfGV8fGEpOnQ/KCJzaGFwZSJpbiB0PyhhPShvPXQuc2hhcGUpWzBdLG89b1sxXSk6KCJyYWRpdXMiaW4gdCYmKGE9bz10LnJhZGl1cyksIndpZHRoImluIHQmJihhPXQud2lkdGgpLCJoZWlnaHQiaW4gdCYmKG89dC5oZWlnaHQpKSwoImNvbG9yImluIHR8fCJjb2xvcnMiaW4gdCkmJihpPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkoaSkpLGl8fCgiY29sb3JDb3VudCJpbiB0JiYoeT0wfHQuY29sb3JDb3VudCksImNvbG9yVGV4dHVyZSJpbiB0JiYocD0hIXQuY29sb3JUZXh0dXJlLGQ9InJnYmE0IiksImNvbG9yVHlwZSJpbiB0JiYoZz10LmNvbG9yVHlwZSwhcCkmJigiaGFsZiBmbG9hdCI9PT1nfHwiZmxvYXQxNiI9PT1nP2Q9InJnYmExNmYiOiJmbG9hdCIhPT1nJiYiZmxvYXQzMiIhPT1nfHwoZD0icmdiYTMyZiIpKSwiY29sb3JGb3JtYXQiaW4gdCYmKGQ9dC5jb2xvckZvcm1hdCwwPD1iLmluZGV4T2YoZCk/cD0hMDowPD1fLmluZGV4T2YoZCkmJihwPSExKSkpLCgiZGVwdGhUZXh0dXJlImluIHR8fCJkZXB0aFN0ZW5jaWxUZXh0dXJlImluIHQpJiYoaz0hKCF0LmRlcHRoVGV4dHVyZSYmIXQuZGVwdGhTdGVuY2lsVGV4dHVyZSkpLCJkZXB0aCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aD9zPXQuZGVwdGg6KHg9dC5kZXB0aCxjPSExKSksInN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuc3RlbmNpbD9jPXQuc3RlbmNpbDoodz10LnN0ZW5jaWwscz0hMSkpLCJkZXB0aFN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZGVwdGhTdGVuY2lsP3M9Yz10LmRlcHRoU3RlbmNpbDooVD10LmRlcHRoU3RlbmNpbCxjPXM9ITEpKSk6YT1vPTE7dmFyIEE9bnVsbCxNPW51bGwsUz1udWxsLEU9bnVsbDtpZihBcnJheS5pc0FycmF5KGkpKUE9aS5tYXAodSk7ZWxzZSBpZihpKUE9W3UoaSldO2Vsc2UgZm9yKEE9QXJyYXkoeSksaT0wO2k8eTsrK2kpQVtpXT1mKGEsbyxwLGQsZyk7Zm9yKGE9YXx8QVswXS53aWR0aCxvPW98fEFbMF0uaGVpZ2h0LHg/TT11KHgpOnMmJiFjJiYoTT1mKGEsbyxrLCJkZXB0aCIsInVpbnQzMiIpKSx3P1M9dSh3KTpjJiYhcyYmKFM9ZihhLG8sITEsInN0ZW5jaWwiLCJ1aW50OCIpKSxUP0U9dShUKToheCYmIXcmJmMmJnMmJihFPWYoYSxvLGssImRlcHRoIHN0ZW5jaWwiLCJkZXB0aCBzdGVuY2lsIikpLHM9bnVsbCxpPTA7aTxBLmxlbmd0aDsrK2kpbChBW2ldKSxBW2ldJiZBW2ldLnRleHR1cmUmJihjPXd0W0FbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXRdKlR0W0FbaV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXSxudWxsPT09cyYmKHM9YykpO3JldHVybiBsKE0pLGwoUyksbChFKSxtKG4pLG4ud2lkdGg9YSxuLmhlaWdodD1vLG4uY29sb3JBdHRhY2htZW50cz1BLG4uZGVwdGhBdHRhY2htZW50PU0sbi5zdGVuY2lsQXR0YWNobWVudD1TLG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudD1FLHIuY29sb3I9QS5tYXAoaCksci5kZXB0aD1oKE0pLHIuc3RlbmNpbD1oKFMpLHIuZGVwdGhTdGVuY2lsPWgoRSksci53aWR0aD1uLndpZHRoLHIuaGVpZ2h0PW4uaGVpZ2h0LHYobikscn12YXIgbj1uZXcgZDtyZXR1cm4gYS5mcmFtZWJ1ZmZlckNvdW50Kysscih0LGUpLEgocix7cmVzaXplOmZ1bmN0aW9uKHQsZSl7dmFyIGk9TWF0aC5tYXgoMHx0LDEpLGE9TWF0aC5tYXgoMHxlfHxpLDEpO2lmKGk9PT1uLndpZHRoJiZhPT09bi5oZWlnaHQpcmV0dXJuIHI7Zm9yKHZhciBvPW4uY29sb3JBdHRhY2htZW50cyxzPTA7czxvLmxlbmd0aDsrK3MpcChvW3NdLGksYSk7cmV0dXJuIHAobi5kZXB0aEF0dGFjaG1lbnQsaSxhKSxwKG4uc3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxwKG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudCxpLGEpLG4ud2lkdGg9ci53aWR0aD1pLG4uaGVpZ2h0PXIuaGVpZ2h0PWEsdihuKSxyfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyIixfZnJhbWVidWZmZXI6bixkZXN0cm95OmZ1bmN0aW9uKCl7ZyhuKSxtKG4pfSx1c2U6ZnVuY3Rpb24odCl7eC5zZXRGQk8oe2ZyYW1lYnVmZmVyOnJ9LHQpfX0pfXZhciB4PXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LGI9WyJyZ2JhIl0sXz1bInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSJdO2UuZXh0X3NyZ2ImJl8ucHVzaCgic3JnYmEiKSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmXy5wdXNoKCJyZ2JhMTZmIiwicmdiMTZmIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJl8ucHVzaCgicmdiYTMyZiIpO3ZhciB3PVsidWludDgiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJncucHVzaCgiaGFsZiBmbG9hdCIsImZsb2F0MTYiKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiZ3LnB1c2goImZsb2F0IiwiZmxvYXQzMiIpO3ZhciBUPTAsaz17fTtyZXR1cm4gSCh4LHtnZXRGcmFtZWJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmImZyYW1lYnVmZmVyIj09PXQuX3JlZ2xUeXBlJiYodD10Ll9mcmFtZWJ1ZmZlcilpbnN0YW5jZW9mIGQ/dDpudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGksYT17Y29sb3I6bnVsbH0sbz0wLHM9bnVsbDtpPSJyZ2JhIjt2YXIgbD0idWludDgiLGM9MTtpZigibnVtYmVyIj09dHlwZW9mIHQ/bz0wfHQ6dD8oInNoYXBlImluIHQ/bz10LnNoYXBlWzBdOigicmFkaXVzImluIHQmJihvPTB8dC5yYWRpdXMpLCJ3aWR0aCJpbiB0P289MHx0LndpZHRoOiJoZWlnaHQiaW4gdCYmKG89MHx0LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKHM9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShzKSksc3x8KCJjb2xvckNvdW50ImluIHQmJihjPTB8dC5jb2xvckNvdW50KSwiY29sb3JUeXBlImluIHQmJihsPXQuY29sb3JUeXBlKSwiY29sb3JGb3JtYXQiaW4gdCYmKGk9dC5jb2xvckZvcm1hdCkpLCJkZXB0aCJpbiB0JiYoYS5kZXB0aD10LmRlcHRoKSwic3RlbmNpbCJpbiB0JiYoYS5zdGVuY2lsPXQuc3RlbmNpbCksImRlcHRoU3RlbmNpbCJpbiB0JiYoYS5kZXB0aFN0ZW5jaWw9dC5kZXB0aFN0ZW5jaWwpKTpvPTEscylpZihBcnJheS5pc0FycmF5KHMpKWZvcih0PVtdLGk9MDtpPHMubGVuZ3RoOysraSl0W2ldPXNbaV07ZWxzZSB0PVtzXTtlbHNlIGZvcih0PUFycmF5KGMpLHM9e3JhZGl1czpvLGZvcm1hdDppLHR5cGU6bH0saT0wO2k8YzsrK2kpdFtpXT1uLmNyZWF0ZUN1YmUocyk7Zm9yKGEuY29sb3I9QXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoOysraSljPXRbaV0sbz1vfHxjLndpZHRoLGEuY29sb3JbaV09e3RhcmdldDozNDA2OSxkYXRhOnRbaV19O2ZvcihpPTA7Nj5pOysraSl7Zm9yKGM9MDtjPHQubGVuZ3RoOysrYylhLmNvbG9yW2NdLnRhcmdldD0zNDA2OStpOzA8aSYmKGEuZGVwdGg9clswXS5kZXB0aCxhLnN0ZW5jaWw9clswXS5zdGVuY2lsLGEuZGVwdGhTdGVuY2lsPXJbMF0uZGVwdGhTdGVuY2lsKSxyW2ldP3JbaV0oYSk6cltpXT15KGEpfXJldHVybiBIKGUse3dpZHRoOm8saGVpZ2h0Om8sY29sb3I6dH0pfXZhciByPUFycmF5KDYpO3JldHVybiBlKHQpLEgoZSx7ZmFjZXM6cixyZXNpemU6ZnVuY3Rpb24odCl7dmFyIG49MHx0O2lmKG49PT1lLndpZHRoKXJldHVybiBlO3ZhciBpPWUuY29sb3I7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdLnJlc2l6ZShuKTtmb3IodD0wOzY+dDsrK3Qpclt0XS5yZXNpemUobik7cmV0dXJuIGUud2lkdGg9ZS5oZWlnaHQ9bixlfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyQ3ViZSIsZGVzdHJveTpmdW5jdGlvbigpe3IuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95KCl9KSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7SyhrKS5mb3JFYWNoKGcpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLEsoaykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdihlKX0pKX19KX1mdW5jdGlvbiBNKCl7dGhpcy53PXRoaXMuej10aGlzLnk9dGhpcy54PXRoaXMuc3RhdGU9MCx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuc2l6ZT0wLHRoaXMubm9ybWFsaXplZD0hMSx0aGlzLnR5cGU9NTEyNix0aGlzLmRpdmlzb3I9dGhpcy5zdHJpZGU9dGhpcy5vZmZzZXQ9MH1mdW5jdGlvbiBTKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmlkPSsrZix0aGlzLmF0dHJpYnV0ZXM9W10sdGhpcy5lbGVtZW50cz1udWxsLHRoaXMub3duc0VsZW1lbnRzPSExLHRoaXMub2Zmc2V0PXRoaXMuY291bnQ9MCx0aGlzLmluc3RhbmNlcz0tMSx0aGlzLnByaW1pdGl2ZT00O3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcy52YW89dD90LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk6bnVsbCxoW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXJzPVtdfXZhciBjPXIubWF4QXR0cmlidXRlcyx1PUFycmF5KGMpO2ZvcihyPTA7cjxjOysrcil1W3JdPW5ldyBNO3ZhciBmPTAsaD17fSxwPXtSZWNvcmQ6TSxzY29wZTp7fSxzdGF0ZTp1LGN1cnJlbnRWQU86bnVsbCx0YXJnZXRWQU86bnVsbCxyZXN0b3JlOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtlLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZLKGgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSkpfTpmdW5jdGlvbigpe30sY3JlYXRlVkFPOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIG47QXJyYXkuaXNBcnJheSh0KT8obj10LHIuZWxlbWVudHMmJnIub3duc0VsZW1lbnRzJiZyLmVsZW1lbnRzLmRlc3Ryb3koKSxyLmVsZW1lbnRzPW51bGwsci5vd25zRWxlbWVudHM9ITEsci5vZmZzZXQ9MCxyLmNvdW50PTAsci5pbnN0YW5jZXM9LTEsci5wcmltaXRpdmU9NCk6KHQuZWxlbWVudHM/KG49dC5lbGVtZW50cyxyLm93bnNFbGVtZW50cz8oImZ1bmN0aW9uIj09dHlwZW9mIG4mJiJlbGVtZW50cyI9PT1uLl9yZWdsVHlwZT9yLmVsZW1lbnRzLmRlc3Ryb3koKTpyLmVsZW1lbnRzKG4pLHIub3duc0VsZW1lbnRzPSExKTphLmdldEVsZW1lbnRzKHQuZWxlbWVudHMpPyhyLmVsZW1lbnRzPXQuZWxlbWVudHMsci5vd25zRWxlbWVudHM9ITEpOihyLmVsZW1lbnRzPWEuY3JlYXRlKHQuZWxlbWVudHMpLHIub3duc0VsZW1lbnRzPSEwKSk6KHIuZWxlbWVudHM9bnVsbCxyLm93bnNFbGVtZW50cz0hMSksbj10LmF0dHJpYnV0ZXMsci5vZmZzZXQ9MCxyLmNvdW50PS0xLHIuaW5zdGFuY2VzPS0xLHIucHJpbWl0aXZlPTQsci5lbGVtZW50cyYmKHIuY291bnQ9ci5lbGVtZW50cy5fZWxlbWVudHMudmVydENvdW50LHIucHJpbWl0aXZlPXIuZWxlbWVudHMuX2VsZW1lbnRzLnByaW1UeXBlKSwib2Zmc2V0ImluIHQmJihyLm9mZnNldD0wfHQub2Zmc2V0KSwiY291bnQiaW4gdCYmKHIuY291bnQ9MHx0LmNvdW50KSwiaW5zdGFuY2VzImluIHQmJihyLmluc3RhbmNlcz0wfHQuaW5zdGFuY2VzKSwicHJpbWl0aXZlImluIHQmJihyLnByaW1pdGl2ZT1hdFt0LnByaW1pdGl2ZV0pKSx0PXt9O3ZhciBvPXIuYXR0cmlidXRlcztvLmxlbmd0aD1uLmxlbmd0aDtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoOysrcyl7dmFyIGMsdT1uW3NdLGY9b1tzXT1uZXcgTSxoPXUuZGF0YXx8dTtpZihBcnJheS5pc0FycmF5KGgpfHxKKGgpfHxsKGgpKXIuYnVmZmVyc1tzXSYmKGM9ci5idWZmZXJzW3NdLEooaCkmJmMuX2J1ZmZlci5ieXRlTGVuZ3RoPj1oLmJ5dGVMZW5ndGg/Yy5zdWJkYXRhKGgpOihjLmRlc3Ryb3koKSxyLmJ1ZmZlcnNbc109bnVsbCkpLHIuYnVmZmVyc1tzXXx8KGM9ci5idWZmZXJzW3NdPWkuY3JlYXRlKHUsMzQ5NjIsITEsITApKSxmLmJ1ZmZlcj1pLmdldEJ1ZmZlcihjKSxmLnNpemU9MHxmLmJ1ZmZlci5kaW1lbnNpb24sZi5ub3JtYWxpemVkPSExLGYudHlwZT1mLmJ1ZmZlci5kdHlwZSxmLm9mZnNldD0wLGYuc3RyaWRlPTAsZi5kaXZpc29yPTAsZi5zdGF0ZT0xLHRbc109MTtlbHNlIGkuZ2V0QnVmZmVyKHUpPyhmLmJ1ZmZlcj1pLmdldEJ1ZmZlcih1KSxmLnNpemU9MHxmLmJ1ZmZlci5kaW1lbnNpb24sZi5ub3JtYWxpemVkPSExLGYudHlwZT1mLmJ1ZmZlci5kdHlwZSxmLm9mZnNldD0wLGYuc3RyaWRlPTAsZi5kaXZpc29yPTAsZi5zdGF0ZT0xKTppLmdldEJ1ZmZlcih1LmJ1ZmZlcik/KGYuYnVmZmVyPWkuZ2V0QnVmZmVyKHUuYnVmZmVyKSxmLnNpemU9MHwoK3Uuc2l6ZXx8Zi5idWZmZXIuZGltZW5zaW9uKSxmLm5vcm1hbGl6ZWQ9ISF1Lm5vcm1hbGl6ZWR8fCExLGYudHlwZT0idHlwZSJpbiB1P3R0W3UudHlwZV06Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MHwodS5vZmZzZXR8fDApLGYuc3RyaWRlPTB8KHUuc3RyaWRlfHwwKSxmLmRpdmlzb3I9MHwodS5kaXZpc29yfHwwKSxmLnN0YXRlPTEpOiJ4ImluIHUmJihmLng9K3UueHx8MCxmLnk9K3UueXx8MCxmLno9K3Uuenx8MCxmLnc9K3Uud3x8MCxmLnN0YXRlPTIpfWZvcihjPTA7YzxyLmJ1ZmZlcnMubGVuZ3RoOysrYykhdFtjXSYmci5idWZmZXJzW2NdJiYoci5idWZmZXJzW2NdLmRlc3Ryb3koKSxyLmJ1ZmZlcnNbY109bnVsbCk7cmV0dXJuIHIucmVmcmVzaCgpLGV9dmFyIHI9bmV3IHM7cmV0dXJuIG4udmFvQ291bnQrPTEsZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmJ1ZmZlcnMubGVuZ3RoOysrdClyLmJ1ZmZlcnNbdF0mJnIuYnVmZmVyc1t0XS5kZXN0cm95KCk7ci5idWZmZXJzLmxlbmd0aD0wLHIub3duc0VsZW1lbnRzJiYoci5lbGVtZW50cy5kZXN0cm95KCksci5lbGVtZW50cz1udWxsLHIub3duc0VsZW1lbnRzPSExKSxyLmRlc3Ryb3koKX0sZS5fdmFvPXIsZS5fcmVnbFR5cGU9InZhbyIsZSh0KX0sZ2V0VkFPOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll92YW8/dC5fdmFvOm51bGx9LGRlc3Ryb3lCdWZmZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx1Lmxlbmd0aDsrK3Ipe3ZhciBuPXVbcl07bi5idWZmZXI9PT1lJiYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkociksbi5idWZmZXI9bnVsbCl9fSxzZXRWQU86ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdD9mdW5jdGlvbih0KXtpZih0IT09cC5jdXJyZW50VkFPKXt2YXIgcj1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3Q/ci5iaW5kVmVydGV4QXJyYXlPRVModC52YW8pOnIuYmluZFZlcnRleEFycmF5T0VTKG51bGwpLHAuY3VycmVudFZBTz10fX06ZnVuY3Rpb24ocil7aWYociE9PXAuY3VycmVudFZBTyl7aWYocilyLmJpbmRBdHRycygpO2Vsc2V7Zm9yKHZhciBuPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxpPTA7aTx1Lmxlbmd0aDsrK2kpe3ZhciBhPXVbaV07YS5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksYS5idWZmZXIuYmluZCgpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLGEuc2l6ZSxhLnR5cGUsYS5ub3JtYWxpemVkLGEuc3RyaWRlLGEub2ZmZnNldCksbiYmYS5kaXZpc29yJiZuLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLGEuZGl2aXNvcikpOih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYjRmKGksYS54LGEueSxhLnosYS53KSl9by5lbGVtZW50cz90LmJpbmRCdWZmZXIoMzQ5NjMsby5lbGVtZW50cy5idWZmZXIuYnVmZmVyKTp0LmJpbmRCdWZmZXIoMzQ5NjMsbnVsbCl9cC5jdXJyZW50VkFPPXJ9fSxjbGVhcjplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKCl7SyhoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX06ZnVuY3Rpb24oKXt9fTtyZXR1cm4gcy5wcm90b3R5cGUuYmluZEF0dHJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxuPXRoaXMuYXR0cmlidXRlcyxpPTA7aTxuLmxlbmd0aDsrK2kpe3ZhciBvPW5baV07by5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC5iaW5kQnVmZmVyKDM0OTYyLG8uYnVmZmVyLmJ1ZmZlciksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksby5zaXplLG8udHlwZSxvLm5vcm1hbGl6ZWQsby5zdHJpZGUsby5vZmZzZXQpLHImJm8uZGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSxvLmRpdmlzb3IpKToodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWI0ZihpLG8ueCxvLnksby56LG8udykpfWZvcihyPW4ubGVuZ3RoO3I8YzsrK3IpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocik7KHI9YS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnRzKSk/dC5iaW5kQnVmZmVyKDM0OTYzLHIuYnVmZmVyLmJ1ZmZlcik6dC5iaW5kQnVmZmVyKDM0OTYzLG51bGwpfSxzLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0JiYodC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMuYmluZEF0dHJzKCkscC5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpfSxzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy52YW8pe3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcz09PXAuY3VycmVudFZBTyYmKHAuY3VycmVudFZBTz1udWxsLHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpKSx0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsfXRoaXMub3duc0VsZW1lbnRzJiYodGhpcy5lbGVtZW50cy5kZXN0cm95KCksdGhpcy5lbGVtZW50cz1udWxsLHRoaXMub3duc0VsZW1lbnRzPSExKSxoW3RoaXMuaWRdJiYoZGVsZXRlIGhbdGhpcy5pZF0sLS1uLnZhb0NvdW50KX0scH1mdW5jdGlvbiBFKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy5pZD1lLHRoaXMubG9jYXRpb249cix0aGlzLmluZm89bn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS5pZD09PWUuaWQpcmV0dXJuIHZvaWQodFtyXS5sb2NhdGlvbj1lLmxvY2F0aW9uKTt0LnB1c2goZSl9ZnVuY3Rpb24gbyhyLG4saSl7aWYoIShvPShpPTM1NjMyPT09cj9jOnUpW25dKSl7dmFyIGE9ZS5zdHIobiksbz10LmNyZWF0ZVNoYWRlcihyKTt0LnNoYWRlclNvdXJjZShvLGEpLHQuY29tcGlsZVNoYWRlcihvKSxpW25dPW99cmV0dXJuIG99ZnVuY3Rpb24gcyh0LGUpe3RoaXMuaWQ9cCsrLHRoaXMuZnJhZ0lkPXQsdGhpcy52ZXJ0SWQ9ZSx0aGlzLnByb2dyYW09bnVsbCx0aGlzLnVuaWZvcm1zPVtdLHRoaXMuYXR0cmlidXRlcz1bXSx0aGlzLnJlZkNvdW50PTEsbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMsbCl7dmFyIGM7Yz1vKDM1NjMyLHIuZnJhZ0lkKTt2YXIgdT1vKDM1NjMzLHIudmVydElkKTtpZihzPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKSx0LmF0dGFjaFNoYWRlcihzLGMpLHQuYXR0YWNoU2hhZGVyKHMsdSksbClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKXU9bFtjXSx0LmJpbmRBdHRyaWJMb2NhdGlvbihzLHVbMF0sdVsxXSk7dC5saW5rUHJvZ3JhbShzKSx1PXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLDM1NzE4KSxuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9dSk7dmFyIGY9ci51bmlmb3Jtcztmb3IoYz0wO2M8dTsrK2MpaWYobD10LmdldEFjdGl2ZVVuaWZvcm0ocyxjKSlpZigxPGwuc2l6ZSlmb3IodmFyIGg9MDtoPGwuc2l6ZTsrK2gpe3ZhciBwPWwubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitoKyJdIik7YShmLG5ldyBpKHAsZS5pZChwKSx0LmdldFVuaWZvcm1Mb2NhdGlvbihzLHApLGwpKX1lbHNlIGEoZixuZXcgaShsLm5hbWUsZS5pZChsLm5hbWUpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHMsbC5uYW1lKSxsKSk7Zm9yKHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PXUpLHI9ci5hdHRyaWJ1dGVzLGM9MDtjPHU7KytjKShsPXQuZ2V0QWN0aXZlQXR0cmliKHMsYykpJiZhKHIsbmV3IGkobC5uYW1lLGUuaWQobC5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHMsbC5uYW1lKSxsKSl9dmFyIGM9e30sdT17fSxmPXt9LGg9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSkpLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7SyhjKS5mb3JFYWNoKGUpLGM9e30sSyh1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pKSxoLmxlbmd0aD0wLGY9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKGUsbixpLGEpe3ZhciBvPWZbbl07b3x8KG89ZltuXT17fSk7dmFyIHA9b1tlXTtpZihwJiYocC5yZWZDb3VudCsrLCFhKSlyZXR1cm4gcDt2YXIgZD1uZXcgcyhuLGUpO3JldHVybiByLnNoYWRlckNvdW50KyssbChkLGksYSkscHx8KG9bZV09ZCksaC5wdXNoKGQpLEgoZCx7ZGVzdHJveTpmdW5jdGlvbigpe2lmKGQucmVmQ291bnQtLSwwPj1kLnJlZkNvdW50KXt0LmRlbGV0ZVByb2dyYW0oZC5wcm9ncmFtKTt2YXIgZT1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZSwxKSxyLnNoYWRlckNvdW50LS19MD49b1tkLnZlcnRJZF0ucmVmQ291bnQmJih0LmRlbGV0ZVNoYWRlcih1W2QudmVydElkXSksZGVsZXRlIHVbZC52ZXJ0SWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXVtkLnZlcnRJZF0pLE9iamVjdC5rZXlzKGZbZC5mcmFnSWRdKS5sZW5ndGh8fCh0LmRlbGV0ZVNoYWRlcihjW2QuZnJhZ0lkXSksZGVsZXRlIGNbZC5mcmFnSWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXSl9fSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdLG51bGwsaFt0XS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QubG9jYXRpb24sdC5uYW1lXX0pKSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBKKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSwoZnVuY3Rpb24oKXtyPXModCl9KSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiB0Pj4+ZXx0PDwzMi1lfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj0oNjU1MzUmdCkrKDY1NTM1JmUpO3JldHVybih0Pj4xNikrKGU+PjE2KSsocj4+MTYpPDwxNnw2NTUzNSZyfWZ1bmN0aW9uIEkodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIEkodCkuam9pbigiIil9ZnVuY3Rpb24geih0KXtmdW5jdGlvbiBlKCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gSCgoZnVuY3Rpb24oKXt0LnB1c2guYXBwbHkodCxJKGFyZ3VtZW50cykpfSkse2RlZjpmdW5jdGlvbigpe3ZhciByPSJ2IitpKys7cmV0dXJuIGUucHVzaChyKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gociwiPSIpLHQucHVzaC5hcHBseSh0LEkoYXJndW1lbnRzKSksdC5wdXNoKCI7IikpLHJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE8oWzA8ZS5sZW5ndGg/InZhciAiK2Uuam9pbigiLCIpKyI7IjoiIixPKHQpXSl9fSl9ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIHQodCxlKXtuKHQsZSwiPSIsci5kZWYodCxlKSwiOyIpfXZhciByPWUoKSxuPWUoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBIKChmdW5jdGlvbigpe3IuYXBwbHkocixJKGFyZ3VtZW50cykpfSkse2RlZjpyLmRlZixlbnRyeTpyLGV4aXQ6bixzYXZlOnQsc2V0OmZ1bmN0aW9uKGUsbixpKXt0KGUsbikscihlLG4sIj0iLGksIjsiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgpK2EoKX19KX12YXIgbj10JiZ0LmNhY2hlLGk9MCxhPVtdLG89W10scz1bXSxsPWUoKSxjPXt9O3JldHVybntnbG9iYWw6bCxsaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSYmZS5zdGFibGU7aWYoIXIpZm9yKHZhciBuPTA7bjxvLmxlbmd0aDsrK24paWYob1tuXT09PXQmJiFzW25dKXJldHVybiBhW25dO3JldHVybiBuPSJnIitpKyssYS5wdXNoKG4pLG8ucHVzaCh0KSxzLnB1c2gociksbn0sYmxvY2s6ZSxwcm9jOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciB0PSJhIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107ZT1lfHwwO2Zvcih2YXIgYT0wO2E8ZTsrK2EpbigpO3ZhciBvPShhPXIoKSkudG9TdHJpbmc7cmV0dXJuIGNbdF09SChhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBPKFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLG8oKSwifSJdKX19KX0sc2NvcGU6cixjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9Tyhhcmd1bWVudHMpLGU9cigpLG49cigpLGk9ZS50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIEgoZSx7dGhlbjpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KGUsSShhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixJKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT0iZWxzZXsiK2UrIn0iKSxPKFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJyJ1c2Ugc3RyaWN0IjsnLGwsInJldHVybiB7Il07T2JqZWN0LmtleXMoYykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsY1tlXS50b1N0cmluZygpLCIsIil9KSksdC5wdXNoKCJ9Iik7dmFyIGUscj1PKHQpLnJlcGxhY2UoLzsvZywiO1xuIikucmVwbGFjZSgvfS9nLCJ9XG4iKS5yZXBsYWNlKC97L2csIntcbiIpO3JldHVybiBuJiYoZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0iIixuPTA7bjx0Lmxlbmd0aDtuKyspZT10LmNoYXJDb2RlQXQobikscis9IjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdChlPj4+NCYxNSkrIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdCgxNSZlKTtyZXR1cm4gcn0oZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5KHQubGVuZ3RoPj4yKSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT0wO2ZvcihyPTA7cjw4KnQubGVuZ3RoO3IrPTgpZVtyPj41XXw9KDI1NSZ0LmNoYXJDb2RlQXQoci84KSk8PDI0LXIlMzI7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkPTgqdC5sZW5ndGg7Zm9yKHQ9WzE3NzkwMzM3MDMsLTExNTA4MzMwMTksMTAxMzkwNDI0MiwtMTUyMTQ4NjUzNCwxMzU5ODkzMTE5LC0xNjk0MTQ0MzcyLDUyODczNDYzNSwxNTQxNDU5MjI1XSxyPUFycmF5KDY0KSxlW2Q+PjVdfD0xMjg8PDI0LWQlMzIsZVsxNSsoZCs2ND4+OTw8NCldPWQsdT0wO3U8ZS5sZW5ndGg7dSs9MTYpe2ZvcihkPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM10sbz10WzRdLHM9dFs1XSxsPXRbNl0sYz10WzddLGY9MDs2ND5mO2YrKyl7dmFyIG07aWYoMTY+ZilyW2ZdPWVbZit1XTtlbHNlIGg9ZixwPVAocD1DKHA9cltmLTJdLDE3KV5DKHAsMTkpXnA+Pj4xMCxyW2YtN10pLG09QyhtPXJbZi0xNV0sNyleQyhtLDE4KV5tPj4+MyxyW2hdPVAoUChwLG0pLHJbZi0xNl0pO2g9UChQKFAoUChjLGg9QyhoPW8sNileQyhoLDExKV5DKGgsMjUpKSxvJnNefm8mbCksa3RbZl0pLHJbZl0pLHA9UChjPUMoYz1kLDIpXkMoYywxMyleQyhjLDIyKSxkJm5eZCZpXm4maSksYz1sLGw9cyxzPW8sbz1QKGEsaCksYT1pLGk9bixuPWQsZD1QKGgscCl9dFswXT1QKGQsdFswXSksdFsxXT1QKG4sdFsxXSksdFsyXT1QKGksdFsyXSksdFszXT1QKGEsdFszXSksdFs0XT1QKG8sdFs0XSksdFs1XT1QKHMsdFs1XSksdFs2XT1QKGwsdFs2XSksdFs3XT1QKGMsdFs3XSl9Zm9yKGU9IiIscj0wO3I8MzIqdC5sZW5ndGg7cis9OCllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcj4+NV0+Pj4yNC1yJTMyJjI1NSk7cmV0dXJuIGV9KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49IiIsaT0tMTsrK2k8dC5sZW5ndGg7KWU9dC5jaGFyQ29kZUF0KGkpLHI9aSsxPHQubGVuZ3RoP3QuY2hhckNvZGVBdChpKzEpOjAsNTUyOTY8PWUmJjU2MzE5Pj1lJiY1NjMyMDw9ciYmNTczNDM+PXImJihlPTY1NTM2KygoMTAyMyZlKTw8MTApKygxMDIzJnIpLGkrKyksMTI3Pj1lP24rPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk6MjA0Nz49ZT9uKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDE5MnxlPj4+NiYzMSwxMjh8NjMmZSk6NjU1MzU+PWU/bis9U3RyaW5nLmZyb21DaGFyQ29kZSgyMjR8ZT4+PjEyJjE1LDEyOHxlPj4+NiY2MywxMjh8NjMmZSk6MjA5NzE1MT49ZSYmKG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMjQwfGU+Pj4xOCY3LDEyOHxlPj4+MTImNjMsMTI4fGU+Pj42JjYzLDEyOHw2MyZlKSk7cmV0dXJuIG59KHIpKSksbltlXSk/bltlXS5hcHBseShudWxsLG8pOihyPUZ1bmN0aW9uLmFwcGx5KG51bGwsYS5jb25jYXQocikpLG4mJihuW2VdPXIpLHIuYXBwbHkobnVsbCxvKSl9fX1mdW5jdGlvbiBEKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxKKHQpfHxsKHQpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4idmlld3BvcnQiPT09dD8tMToidmlld3BvcnQiPT09ZT8xOnQ8ZT8tMToxfSkpfWZ1bmN0aW9uIEYodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBCKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIE4odCl7cmV0dXJuIG5ldyBGKCExLCExLCExLHQpfWZ1bmN0aW9uIGoodCxlKXt2YXIgcj10LnR5cGU7aWYoMD09PXIpcmV0dXJuIG5ldyBGKCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk7aWYoND09PXIpcmV0dXJuIG5ldyBGKChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpO2lmKDU9PT1yKXJldHVybiBuZXcgRighMSwhMSwhMSxlKTtpZig2PT09cil7Zm9yKHZhciBuPXI9ITEsaT0hMSxhPTA7YTx0LmRhdGEubGVuZ3RoOysrYSl7dmFyIG89dC5kYXRhW2FdOzE9PT1vLnR5cGU/aT0hMDoyPT09by50eXBlP249ITA6Mz09PW8udHlwZT9yPSEwOjA9PT1vLnR5cGU/KHI9ITAsMTw9KG89by5kYXRhKSYmKG49ITApLDI8PW8mJihpPSEwKSk6ND09PW8udHlwZSYmKHI9cnx8by5kYXRhLnRoaXNEZXAsbj1ufHxvLmRhdGEuY29udGV4dERlcCxpPWl8fG8uZGF0YS5wcm9wRGVwKX1yZXR1cm4gbmV3IEYocixuLGksZSl9cmV0dXJuIG5ldyBGKDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIFUodCxlLHIsbixpLG8scyxsLGMsdSxmLGgscCxkLG0sdil7ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5yZXBsYWNlKCIuIiwiXyIpfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXkodCk7b3QucHVzaCh0KSxpdFtuXT1udFtuXT0hIXIsc3Rbbl09ZX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj15KHQpO290LnB1c2godCksQXJyYXkuaXNBcnJheShyKT8obnRbbl09ci5zbGljZSgpLGl0W25dPXIuc2xpY2UoKSk6bnRbbl09aXRbbl09cixsdFtuXT1lfWZ1bmN0aW9uIF8oKXt2YXIgdD16KHtjYWNoZTptfSkscj10Lmxpbmssbj10Lmdsb2JhbDt0LmlkPWZ0KyssdC5iYXRjaElkPSIwIjt2YXIgaT1yKGN0KSxhPXQuc2hhcmVkPXtwcm9wczoiYTAifTtPYmplY3Qua2V5cyhjdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT1uLmRlZihpLCIuIix0KX0pKTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMobHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkobnRbdF0pJiYob1t0XT1uLmRlZihhLm5leHQsIi4iLHQpLHNbdF09bi5kZWYoYS5jdXJyZW50LCIuIix0KSl9KSk7dmFyIGw9dC5jb25zdGFudHM9e307T2JqZWN0LmtleXModXQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkodXRbdF0pKX0pKSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoYS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoYS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIDQ6cmV0dXJuIG4uZGF0YS5hcHBlbmQodCxlKSxuLmRhdGEucmVmO2Nhc2UgNTpyZXR1cm4gbi5kYXRhLnRvU3RyaW5nKCk7Y2FzZSA2OnJldHVybiBuLmRhdGEubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gdC5pbnZva2UoZSxyKX0pKX19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IEspLGNbdF09cihuKX0sdH1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoImZyYW1lYnVmZmVyImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxOKChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO3JldHVybiBlLnNldChuLmZyYW1lYnVmZmVyLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi53aWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmhlaWdodCIpLHJ9KSkpOk4oKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsIi5uZXh0IiwibnVsbCIpLHI9ci5jb250ZXh0LGUuc2V0KHIsIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQociwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLCJudWxsIn0pKX1pZigiZnJhbWVidWZmZXIiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gaihhLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSksbj10LnNoYXJlZCxpPW4uZnJhbWVidWZmZXI7cj1lLmRlZihpLCIuZ2V0RnJhbWVidWZmZXIoIixyLCIpIik7cmV0dXJuIGUuc2V0KGksIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiPyIrcisiLndpZHRoOiIrbisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiPyIrcisiLmhlaWdodDoiK24rIi5kcmF3aW5nQnVmZmVySGVpZ2h0Iikscn0pKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUKHQscixuKXtmdW5jdGlvbiBpKHQpe2lmKHQgaW4gYSl7dmFyIHI9ZS5pZChhW3RdKTtyZXR1cm4odD1OKChmdW5jdGlvbigpe3JldHVybiByfSkpKS5pZD1yLHR9aWYodCBpbiBvKXt2YXIgbj1vW3RdO3JldHVybiBqKG4sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxuKTtyZXR1cm4gZS5kZWYodC5zaGFyZWQuc3RyaW5ncywiLmlkKCIsciwiKSIpfSkpfXJldHVybiBudWxsfXZhciBhPXQuc3RhdGljLG89dC5keW5hbWljLHM9aSgiZnJhZyIpLGw9aSgidmVydCIpLGM9bnVsbDtyZXR1cm4gQihzKSYmQihsKT8oYz1mLnByb2dyYW0obC5pZCxzLmlkLG51bGwsbiksdD1OKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmsoYyl9KSkpOnQ9bmV3IEYocyYmcy50aGlzRGVwfHxsJiZsLnRoaXNEZXAscyYmcy5jb250ZXh0RGVwfHxsJiZsLmNvbnRleHREZXAscyYmcy5wcm9wRGVwfHxsJiZsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuc2hhcmVkLnNoYWRlcjtyZXR1cm4gcj1zP3MuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsImZyYWciKSxuPWw/bC5hcHBlbmQodCxlKTplLmRlZihpLCIuIiwidmVydCIpLGUuZGVmKGkrIi5wcm9ncmFtKCIrbisiLCIrcisiKSIpfSkpLHtmcmFnOnMsdmVydDpsLHByb2dWYXI6dCxwcm9ncmFtOmN9fWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIGU/YS5vZmZzZXQ9cjphLmluc3RhbmNlcz1yLE4oKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUmJih0Lk9GRlNFVD1yKSxyfSkpfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gaihvLChmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSkpfWlmKGUpe2lmKGMpcmV0dXJuIE4oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPTB9KSk7aWYocylyZXR1cm4gbmV3IEYobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLm9mZnNldDowIil9KSl9ZWxzZSBpZihzKXJldHVybiBuZXcgRihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8uaW5zdGFuY2VzOi0xIil9KSk7cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT17fSxzPSExLGw9ZnVuY3Rpb24oKXtpZigidmFvImluIG4pe3ZhciB0PW4udmFvO3JldHVybiBudWxsIT09dCYmbnVsbD09PXUuZ2V0VkFPKHQpJiYodD11LmNyZWF0ZVZBTyh0KSkscz0hMCxhLnZhbz10LE4oKGZ1bmN0aW9uKGUpe3ZhciByPXUuZ2V0VkFPKHQpO3JldHVybiByP2UubGluayhyKToibnVsbCJ9KSl9aWYoInZhbyJpbiBpKXtzPSEwO3ZhciBlPWkudmFvO3JldHVybiBqKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYodC5zaGFyZWQudmFvKyIuZ2V0VkFPKCIrbisiKSIpfSkpfXJldHVybiBudWxsfSgpLGM9ITEsZj1mdW5jdGlvbigpe2lmKCJlbGVtZW50cyJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO2lmKGEuZWxlbWVudHM9dCxEKHQpKXt2YXIgZT1hLmVsZW1lbnRzPW8uY3JlYXRlKHQsITApO3Q9by5nZXRFbGVtZW50cyhlKTtjPSEwfWVsc2UgdCYmKHQ9by5nZXRFbGVtZW50cyh0KSxjPSEwKTtyZXR1cm4oZT1OKChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KSkpLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7Yz0hMDt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBqKHIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoIm51bGwiKTtuPWUuZGVmKG4sIigiLGEsIikiKSxhPXQuY29uZChuKS50aGVuKG8sIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UobywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSwiLmRlc3Ryb3lTdHJlYW0oIixvLCIpOyIpKSx0LkVMRU1FTlRTPW99KSl9cmV0dXJuIHM/bmV3IEYobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC5lbGVtZW50cysiLmdldEVsZW1lbnRzKCIrdC5zaGFyZWQudmFvKyIuY3VycmVudFZBTy5lbGVtZW50cyk6bnVsbCIpfSkpOm51bGx9KCksaD1yKCJvZmZzZXQiLCEwKSxwPWZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gYS5wcmltaXRpdmU9dCxOKChmdW5jdGlvbihlLHIpe3JldHVybiBhdFt0XX0pKX1pZigicHJpbWl0aXZlImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBqKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGk9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobiwiWyIsaSwiXSIpfSkpfXJldHVybiBjP0IoZik/Zi52YWx1ZT9OKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIucHJpbVR5cGUiKX0pKTpOKChmdW5jdGlvbigpe3JldHVybiA0fSkpOm5ldyBGKGYudGhpc0RlcCxmLmNvbnRleHREZXAsZi5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsIj8iLHIsIi5wcmltVHlwZToiLDQpfSkpOnM/bmV3IEYobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLnByaW1pdGl2ZTo0Iil9KSk6bnVsbH0oKSxkPWZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gYS5jb3VudD10LE4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9aWYoImNvdW50ImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIGooZSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pKX1yZXR1cm4gYz9CKGYpP2Y/aD9uZXcgRihoLnRoaXNEZXAsaC5jb250ZXh0RGVwLGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudC0iLHQuT0ZGU0VUKX0pKTpOKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50Iil9KSk6TigoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKTpuZXcgRihmLnRoaXNEZXB8fGgudGhpc0RlcCxmLmNvbnRleHREZXB8fGguY29udGV4dERlcCxmLnByb3BEZXB8fGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLCI/IixyLCIudmVydENvdW50LSIsdC5PRkZTRVQsIjotMSIpOmUuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQ6LTEiKX0pKTpzP25ldyBGKGwudGhpc0RlcCxsLmNvbnRleHREZXAsbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8sIi5jdXJyZW50VkFPPyIsdC5zaGFyZWQudmFvLCIuY3VycmVudFZBTy5jb3VudDotMSIpfSkpOm51bGx9KCksbT1yKCJpbnN0YW5jZXMiLCExKTtyZXR1cm57ZWxlbWVudHM6ZixwcmltaXRpdmU6cCxjb3VudDpkLGluc3RhbmNlczptLG9mZnNldDpoLHZhbzpsLHZhb0FjdGl2ZTpzLGVsZW1lbnRzQWN0aXZlOmMsc3RhdGljOmF9fWZ1bmN0aW9uIEEodCxyKXt2YXIgbj10LnN0YXRpYyxhPXQuZHluYW1pYyxvPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBLO2lmKEQocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZigiY29uc3RhbnQiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj0ibnVsbCIscy5zdGF0ZT0yLCJudW1iZXIiPT10eXBlb2YgbD9zLng9bDpBdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSkpfWVsc2V7dmFyIGM9RChyLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoci5idWZmZXIsMzQ5NjIsITEsITApKTppLmdldEJ1ZmZlcihyLmJ1ZmZlciksdT0wfHIub2Zmc2V0LGY9MHxyLnN0cmlkZSxoPTB8ci5zaXplLHA9ISFyLm5vcm1hbGl6ZWQsZD0wOyJ0eXBlImluIHImJihkPXR0W3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWgscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1mLHMuZGl2aXNvcj1yfW9bdF09TigoZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHJpYkNhY2hlO2lmKGEgaW4gcilyZXR1cm4gclthXTt2YXIgbj17aXNTdHJlYW06ITF9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW2FdPW59KSl9KSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtvW3RdPWooZSwoZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSwiPSIsaSwiLiIsdCwifDA7Iil9dmFyIGk9dC5pbnZva2UocixlKSxhPXQuc2hhcmVkLG89dC5jb25zdGFudHMscz1hLmlzQnVmZmVyQXJncyxsPShhPWEuYnVmZmVyLHtpc1N0cmVhbTpyLmRlZighMSl9KSxjPW5ldyBLO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3RdPXIuZGVmKCIiK2NbdF0pfSkpO3ZhciB1PWwuYnVmZmVyLGY9bC50eXBlO3JldHVybiByKCJpZigiLHMsIigiLGksIikpeyIsbC5pc1N0cmVhbSwiPXRydWU7Iix1LCI9IixhLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIik7IixmLCI9Iix1LCIuZHR5cGU7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiKTsiLCJpZigiLHUsIil7IixmLCI9Iix1LCIuZHR5cGU7IiwnfWVsc2UgaWYoImNvbnN0YW50IiBpbiAnLGksIil7IixsLnN0YXRlLCI9IiwyLCI7IiwiaWYodHlwZW9mICIraSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7JyxsW0F0WzBdXSwiPSIsaSwiLmNvbnN0YW50OyIsQXQuc2xpY2UoMSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pKS5qb2luKCI9IiksIj0wOyIsIn1lbHNleyIsQXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdKyI9IitpKyIuY29uc3RhbnQubGVuZ3RoPiIrZSsiPyIraSsiLmNvbnN0YW50WyIrZSsiXTowOyJ9KSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLHMsIigiLGksIi5idWZmZXIpKXsiLHUsIj0iLGEsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiLmJ1ZmZlcik7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiLmJ1ZmZlcik7IiwifSIsZiwnPSJ0eXBlIiBpbiAnLGksIj8iLG8uZ2xUeXBlcywiWyIsaSwiLnR5cGVdOiIsdSwiLmR0eXBlOyIsbC5ub3JtYWxpemVkLCI9ISEiLGksIi5ub3JtYWxpemVkOyIpLG4oInNpemUiKSxuKCJvZmZzZXQiKSxuKCJzdHJpZGUiKSxuKCJkaXZpc29yIikscigifX0iKSxyLmV4aXQoImlmKCIsbC5pc1N0cmVhbSwiKXsiLGEsIi5kZXN0cm95U3RyZWFtKCIsdSwiKTsiLCJ9IiksbH0pKX0pKSxvfWZ1bmN0aW9uIE0odCxlLG4saSxvKXtmdW5jdGlvbiBzKHQpe3ZhciBlPWNbdF07ZSYmKGhbdF09ZSl9dmFyIGw9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mKHI9dC5zdGF0aWMpLmZyYWcmJiJzdHJpbmciPT10eXBlb2Ygci52ZXJ0KXtpZigwPE9iamVjdC5rZXlzKGUuZHluYW1pYykubGVuZ3RoKXJldHVybiBudWxsO3ZhciByPWUuc3RhdGljLG49T2JqZWN0LmtleXMocik7aWYoMDxuLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiByW25bMF1dKXtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7KythKWkucHVzaChbMHxyW25bYV1dLG5bYV1dKTtyZXR1cm4gaX19cmV0dXJuIG51bGx9KHQsZSksYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0IGluIGkpe3ZhciByPWlbdF07dD0hMDt2YXIgbixvLHM9MHxyLngsbD0wfHIueTtyZXR1cm4id2lkdGgiaW4gcj9uPTB8ci53aWR0aDp0PSExLCJoZWlnaHQiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRighdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgaT10LnNoYXJlZC5jb250ZXh0LGE9bjsid2lkdGgiaW4gcnx8KGE9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixzKSk7dmFyIGM9bztyZXR1cm4iaGVpZ2h0ImluIHJ8fChjPWUuZGVmKGksIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGwpKSxbcyxsLGEsY119KSl9aWYodCBpbiBhKXt2YXIgYz1hW3RdO3JldHVybiB0PWooYywoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsIi54fDAiKSxhPWUuZGVmKHIsIi55fDAiKTtyZXR1cm5baSxhLGUuZGVmKCcid2lkdGgiIGluICcsciwiPyIsciwiLndpZHRofDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixpLCIpIikscj1lLmRlZignImhlaWdodCIgaW4gJyxyLCI/IixyLCIuaGVpZ2h0fDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsYSwiKSIpXX0pKSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEYoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQuY29udGV4dDtyZXR1cm5bMCwwLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiksZS5kZWYociwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IildfSkpOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKCJ2aWV3cG9ydCIpKXt2YXIgbz10O3Q9bmV3IEYodC50aGlzRGVwLHQuY29udGV4dERlcCx0LnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi52aWV3cG9ydFdpZHRoIixyWzJdKSxlLnNldChuLCIudmlld3BvcnRIZWlnaHQiLHJbM10pLHJ9KSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bigic2Npc3Nvci5ib3giKX19KHQsZD13KHQpKSxmPWsodCksaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIG90LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1OKChmdW5jdGlvbigpe3JldHVybiBzfSkpfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2lbb109aihsLChmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pKX19dmFyIG89eSh0KTtzd2l0Y2godCl7Y2FzZSJjdWxsLmVuYWJsZSI6Y2FzZSJibGVuZC5lbmFibGUiOmNhc2UiZGl0aGVyIjpjYXNlInN0ZW5jaWwuZW5hYmxlIjpjYXNlImRlcHRoLmVuYWJsZSI6Y2FzZSJzY2lzc29yLmVuYWJsZSI6Y2FzZSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSI6Y2FzZSJzYW1wbGUuYWxwaGEiOmNhc2Uic2FtcGxlLmVuYWJsZSI6Y2FzZSJkZXB0aC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZGVwdGguZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiBFdFt0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiXSIpfSkpO2Nhc2UiZGVwdGgucmFuZ2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCIrIixyLCJbMF0iKSxlPWUuZGVmKCIrIixyLCJbMV0iKV19KSk7Y2FzZSJibGVuZC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuW1N0WyJzcmNSR0IiaW4gdD90LnNyY1JHQjp0LnNyY10sU3RbImRzdFJHQiJpbiB0P3QuZHN0UkdCOnQuZHN0XSxTdFsic3JjQWxwaGEiaW4gdD90LnNyY0FscGhhOnQuc3JjXSxTdFsiZHN0QWxwaGEiaW4gdD90LmRzdEFscGhhOnQuZHN0XV19KSwoZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJyInLHQsbiwnIiBpbiAnLHIsIj8iLHIsIi4iLHQsbiwiOiIsciwiLiIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oInNyYyIsIlJHQiIpLGE9bigiZHN0IiwiUkdCIiksbz0oaT1lLmRlZih0LCJbIixpLCJdIiksZS5kZWYodCwiWyIsbigic3JjIiwiQWxwaGEiKSwiXSIpKTtyZXR1cm5baSxhPWUuZGVmKHQsIlsiLGEsIl0iKSxvLHQ9ZS5kZWYodCwiWyIsbigiZHN0IiwiQWxwaGEiKSwiXSIpXX0pKTtjYXNlImJsZW5kLmVxdWF0aW9uIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P1tRW3RdLFFbdF1dOiJvYmplY3QiPT10eXBlb2YgdD9bUVt0LnJnYl0sUVt0LmFscGhhXV06dm9pZCAwfSksKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnN0YW50cy5ibGVuZEVxdWF0aW9ucyxpPWUuZGVmKCksYT1lLmRlZigpO3JldHVybih0PXQuY29uZCgidHlwZW9mICIsciwnPT09InN0cmluZyInKSkudGhlbihpLCI9IixhLCI9IixuLCJbIixyLCJdOyIpLHQuZWxzZShpLCI9IixuLCJbIixyLCIucmdiXTsiLGEsIj0iLG4sIlsiLHIsIi5hbHBoYV07IiksZSh0KSxbaSxhXX0pKTtjYXNlImJsZW5kLmNvbG9yIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIGEoNCwoZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KSl9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZigiKyIsciwiWyIsdCwiXSIpfSkpfSkpO2Nhc2Uic3RlbmNpbC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIDB8dH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsInwwIil9KSk7Y2FzZSJzdGVuY2lsLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bRXRbdC5jbXB8fCJrZWVwIl0sdC5yZWZ8fDAsIm1hc2siaW4gdD90Lm1hc2s6LTFdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignImNtcCIgaW4gJyxyLCI/Iix0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIi5jbXBdIiwiOiIsNzY4MCksZS5kZWYociwiLnJlZnwwIiksZT1lLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pKTtjYXNlInN0ZW5jaWwub3BGcm9udCI6Y2FzZSJzdGVuY2lsLm9wQmFjayI6cmV0dXJuIGUoKGZ1bmN0aW9uKGUpe3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsTHRbZS5mYWlsfHwia2VlcCJdLEx0W2UuemZhaWx8fCJrZWVwIl0sTHRbZS56cGFzc3x8ImtlZXAiXV19KSwoZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCciJyx0LCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsdCwiXToiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxpKCJmYWlsIiksaSgiemZhaWwiKSxpKCJ6cGFzcyIpXX0pKTtjYXNlInBvbHlnb25PZmZzZXQub2Zmc2V0IjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsIi5mYWN0b3J8MCIpLGU9ZS5kZWYociwiLnVuaXRzfDAiKV19KSk7Y2FzZSJjdWxsLmZhY2UiOnJldHVybiBlKChmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiJmcm9udCI9PT10P2U9MTAyODoiYmFjayI9PT10JiYoZT0xMDI5KSxlfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09ImZyb250Ij8nLDEwMjgsIjoiLDEwMjkpfSkpO2Nhc2UibGluZVdpZHRoIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZnJvbnRGYWNlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIEN0W3RdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09ImN3Ij8yMzA0OjIzMDUnKX0pKTtjYXNlImNvbG9yTWFzayI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LChmdW5jdGlvbih0KXtyZXR1cm4iISEiK3IrIlsiK3QrIl0ifSkpfSkpO2Nhc2Uic2FtcGxlLmNvdmVyYWdlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWyJ2YWx1ZSJpbiB0P3QudmFsdWU6MSwhIXQuaW52ZXJ0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCcidmFsdWUiIGluICcsciwiPysiLHIsIi52YWx1ZToxIiksZT1lLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KSl9fSkpLGl9KHQpLHA9VCh0LDAsbCk7cygidmlld3BvcnQiKSxzKHkoInNjaXNzb3IuYm94IikpO3ZhciBkLG09MDxPYmplY3Qua2V5cyhoKS5sZW5ndGg7aWYoKGQ9e2ZyYW1lYnVmZmVyOmQsZHJhdzpmLHNoYWRlcjpwLHN0YXRlOmgsZGlydHk6bSxzY29wZVZBTzpudWxsLGRyYXdWQU86bnVsbCx1c2VWQU86ITEsYXR0cmlidXRlczp7fX0pLnByb2ZpbGU9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN0YXRpYztpZih0PXQuZHluYW1pYywicHJvZmlsZSJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1OKChmdW5jdGlvbih0LGUpe3JldHVybiBufSkpKS5lbmFibGU9bn1lbHNlIGlmKCJwcm9maWxlImluIHQpe3ZhciBpPXQucHJvZmlsZTtlPWooaSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pKX1yZXR1cm4gZX0odCksZC51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIG58fCJib29sZWFuIj09dHlwZW9mIG4pZT1OKChmdW5jdGlvbigpe3JldHVybiBufSkpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBvPW4uX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/ZT1OKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4pfSkpOiJmcmFtZWJ1ZmZlciIhPT1vJiYiZnJhbWVidWZmZXJDdWJlIiE9PW98fChlPU4oKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSkpfWVsc2UgZyhuKSYmKGU9TigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFsLmRlZigiWyIsYShuLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSksIl0iKX0pKSk7ZS52YWx1ZT1uLGlbdF09ZX0pKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2lbdF09aihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfSkpLGl9KG4pLGQuZHJhd1ZBTz1kLnNjb3BlVkFPPWYudmFvLCFkLmRyYXdWQU8mJnAucHJvZ3JhbSYmIWwmJnIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyYmZi5zdGF0aWMuZWxlbWVudHMpe3ZhciB2PSEwO2lmKHQ9cC5wcm9ncmFtLmF0dHJpYnV0ZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdD1lLnN0YXRpY1t0XSx2PXYmJiEhdCx0fSkpLHYmJjA8dC5sZW5ndGgpe3ZhciB4PXUuZ2V0VkFPKHUuY3JlYXRlVkFPKHthdHRyaWJ1dGVzOnQsZWxlbWVudHM6Zi5zdGF0aWMuZWxlbWVudHN9KSk7ZC5kcmF3VkFPPW5ldyBGKG51bGwsbnVsbCxudWxsLChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmsoeCl9KSksZC51c2VWQU89ITB9fXJldHVybiBsP2QudXNlVkFPPSEwOmQuYXR0cmlidXRlcz1BKGUpLGQuY29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lW3RdO25bdF09TigoZnVuY3Rpb24odCxlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHI/IiIrcjp0Lmxpbmsocil9KSl9KSksT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTtuW3RdPWooZSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pKX0pKSxufShpKSxkfWZ1bmN0aW9uIFModCxlLHIpe3ZhciBuPXQuc2hhcmVkLmNvbnRleHQsaT10LnNjb3BlKCk7T2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24oYSl7ZS5zYXZlKG4sIi4iK2EpO3ZhciBvPXJbYV0uYXBwZW5kKHQsZSk7QXJyYXkuaXNBcnJheShvKT9pKG4sIi4iLGEsIj1bIixvLmpvaW4oKSwiXTsiKTppKG4sIi4iLGEsIj0iLG8sIjsiKX0pKSxlKGkpfWZ1bmN0aW9uIEUodCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyO2V0JiYoaT1lLmRlZihzLmV4dGVuc2lvbnMsIi53ZWJnbF9kcmF3X2J1ZmZlcnMiKSk7dmFyIHM9KGw9dC5jb25zdGFudHMpLmRyYXdCdWZmZXIsbD1sLmJhY2tCdWZmZXI7dD1yP3IuYXBwZW5kKHQsZSk6ZS5kZWYobywiLm5leHQiKSxufHxlKCJpZigiLHQsIiE9PSIsbywiLmN1cil7IiksZSgiaWYoIix0LCIpeyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsIix0LCIuZnJhbWVidWZmZXIpOyIpLGV0JiZlKGksIi5kcmF3QnVmZmVyc1dFQkdMKCIscywiWyIsdCwiLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7IiksZSgifWVsc2V7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIixudWxsKTsiKSxldCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGwsIik7IiksZSgifSIsbywiLmN1cj0iLHQsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsIi5kaXJ0eSIpO290LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuLGY7aWYoISgoZT15KGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGY9b1tlXTt2YXIgaD1hKG50W2VdLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sIlsiLHQsIl0iKX0pKTt1KHQuY29uZChoLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiIT09IitmKyJbIitlKyJdIn0pKS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLGx0W2VdLCIoIixoLCIpOyIsaC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkpLmpvaW4oIjsiKSwiOyIpKX1lbHNlIG49dS5kZWYoYywiLiIsZSksaD10LmNvbmQobiwiIT09IixsLCIuIixlKSx1KGgpLGUgaW4gc3Q/aCh0LmNvbmQobikudGhlbihpLCIuZW5hYmxlKCIsc3RbZV0sIik7IikuZWxzZShpLCIuZGlzYWJsZSgiLHN0W2VdLCIpOyIpLGwsIi4iLGUsIj0iLG4sIjsiKTpoKGksIi4iLGx0W2VdLCIoIixuLCIpOyIsbCwiLiIsZSwiPSIsbiwiOyIpfSkpLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCwiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaSxhPXQuc2hhcmVkLG89dC5jdXJyZW50LHM9YS5jdXJyZW50LGw9YS5nbDtSKE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKChmdW5jdGlvbihhKXt2YXIgYz1yW2FdO2lmKCFufHxuKGMpKXt2YXIgdT1jLmFwcGVuZCh0LGUpO2lmKHN0W2FdKXt2YXIgZj1zdFthXTtCKGMpPyhpPXQubGluayh1LHtzdGFibGU6ITB9KSxlKHQuY29uZChpKS50aGVuKGwsIi5lbmFibGUoIixmLCIpOyIpLmVsc2UobCwiLmRpc2FibGUoIixmLCIpOyIpKSxlKHMsIi4iLGEsIj0iLGksIjsiKSk6KGUodC5jb25kKHUpLnRoZW4obCwiLmVuYWJsZSgiLGYsIik7IikuZWxzZShsLCIuZGlzYWJsZSgiLGYsIik7IikpLGUocywiLiIsYSwiPSIsdSwiOyIpKX1lbHNlIGlmKGcodSkpe3ZhciBoPW9bYV07ZShsLCIuIixsdFthXSwiKCIsdSwiKTsiLHUubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBoKyJbIitlKyJdPSIrdH0pKS5qb2luKCI7IiksIjsiKX1lbHNlIEIoYyk/KGk9dC5saW5rKHUse3N0YWJsZTohMH0pLGUobCwiLiIsbHRbYV0sIigiLGksIik7IixzLCIuIixhLCI9IixpLCI7IikpOmUobCwiLiIsbHRbYV0sIigiLHUsIik7IixzLCIuIixhLCI9Iix1LCI7Iil9fSkpfWZ1bmN0aW9uIFAodCxlKXskJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpfWZ1bmN0aW9uIEkodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBwZXJmb3JtYW5jZT8iRGF0ZS5ub3coKSI6InBlcmZvcm1hbmNlLm5vdygpIn1mdW5jdGlvbiBvKHQpe3QoYz1lLmRlZigpLCI9IixhKCksIjsiKSwic3RyaW5nIj09dHlwZW9mIGk/dChoLCIuY291bnQrPSIsaSwiOyIpOnQoaCwiLmNvdW50Kys7IiksZCYmKG4/dCh1PWUuZGVmKCksIj0iLG0sIi5nZXROdW1QZW5kaW5nUXVlcmllcygpOyIpOnQobSwiLmJlZ2luUXVlcnkoIixoLCIpOyIpKX1mdW5jdGlvbiBzKHQpe3QoaCwiLmNwdVRpbWUrPSIsYSgpLCItIixjLCI7IiksZCYmKG4/dChtLCIucHVzaFNjb3BlU3RhdHMoIix1LCIsIixtLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSwiLGgsIik7Iik6dChtLCIuZW5kUXVlcnkoKTsiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihwLCIucHJvZmlsZSIpO2UocCwiLnByb2ZpbGU9Iix0LCI7IiksZS5leGl0KHAsIi5wcm9maWxlPSIsciwiOyIpfXZhciBjLHUsZj10LnNoYXJlZCxoPXQuc3RhdHMscD1mLmN1cnJlbnQsbT1mLnRpbWVyO2lmKHI9ci5wcm9maWxlKXtpZihCKHIpKXJldHVybiB2b2lkKHIuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKCJ0cnVlIikpOmwoImZhbHNlIikpO2wocj1yLmFwcGVuZCh0LGUpKX1lbHNlIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtvKGY9dC5ibG9jaygpKSxlKCJpZigiLHIsIil7IixmLCJ9Iikscyh0PXQuYmxvY2soKSksZS5leGl0KCJpZigiLHIsIil7Iix0LCJ9Iil9ZnVuY3Rpb24gTyh0LGUscixuLGkpe2Z1bmN0aW9uIGEocixuLGkpe2Z1bmN0aW9uIGEoKXtlKCJpZighIix1LCIuYnVmZmVyKXsiLGwsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7fSIpO3ZhciByLGE9aS50eXBlO3I9aS5zaXplP2UuZGVmKGkuc2l6ZSwifHwiLG4pOm4sZSgiaWYoIix1LCIudHlwZSE9PSIsYSwifHwiLHUsIi5zaXplIT09IixyLCJ8fCIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyIhPT0iK2lbdF19KSkuam9pbigifHwiKSwiKXsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGYsIi5idWZmZXIpOyIsbCwiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixbYyxyLGEsaS5ub3JtYWxpemVkLGkuc3RyaWRlLGkub2Zmc2V0XSwiKTsiLHUsIi50eXBlPSIsYSwiOyIsdSwiLnNpemU9IixyLCI7IixwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHUrIi4iK3QrIj0iK2lbdF0rIjsifSkpLmpvaW4oIiIpLCJ9IiksJCYmKGE9aS5kaXZpc29yLGUoImlmKCIsdSwiLmRpdmlzb3IhPT0iLGEsIil7Iix0Lmluc3RhbmNpbmcsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixbYyxhXSwiKTsiLHUsIi5kaXZpc29yPSIsYSwiO30iKSl9ZnVuY3Rpb24gcygpe2UoImlmKCIsdSwiLmJ1ZmZlcil7IixsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsYywiKTsiLHUsIi5idWZmZXI9bnVsbDsiLCJ9aWYoIixBdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIiE9PSIraFtlXX0pKS5qb2luKCJ8fCIpLCIpeyIsbCwiLnZlcnRleEF0dHJpYjRmKCIsYywiLCIsaCwiKTsiLEF0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiPSIraFtlXSsiOyJ9KSkuam9pbigiIiksIn0iKX12YXIgbD1vLmdsLGM9ZS5kZWYociwiLmxvY2F0aW9uIiksdT1lLmRlZihvLmF0dHJpYnV0ZXMsIlsiLGMsIl0iKTtyPWkuc3RhdGU7dmFyIGY9aS5idWZmZXIsaD1baS54LGkueSxpLnosaS53XSxwPVsiYnVmZmVyIiwibm9ybWFsaXplZCIsIm9mZnNldCIsInN0cmlkZSJdOzE9PT1yP2EoKToyPT09cj9zKCk6KGUoImlmKCIsciwiPT09IiwxLCIpeyIpLGEoKSxlKCJ9ZWxzZXsiKSxzKCksZSgifSIpKX12YXIgbz10LnNoYXJlZDtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvLHM9bi5uYW1lLGw9ci5hdHRyaWJ1dGVzW3NdO2lmKGwpe2lmKCFpKGwpKXJldHVybjtvPWwuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShQdCkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIocyk7bz17fSxPYmplY3Qua2V5cyhuZXcgSykuZm9yRWFjaCgoZnVuY3Rpb24odCl7b1t0XT1lLmRlZihjLCIuIix0KX0pKX1hKHQubGluayhuKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAzNTY2NDpjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIDI7Y2FzZSAzNTY2NTpjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIDM7Y2FzZSAzNTY2NjpjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMX19KG4uaW5mby50eXBlKSxvKX0pKX1mdW5jdGlvbiBVKHQscixuLGksbyxzKXtmb3IodmFyIGwsYz10LnNoYXJlZCx1PWMuZ2wsZj0wO2Y8aS5sZW5ndGg7KytmKXt2YXIgaCxwPSh2PWlbZl0pLm5hbWUsZD12LmluZm8udHlwZSxtPW4udW5pZm9ybXNbcF0sdj10LmxpbmsodikrIi5sb2NhdGlvbiI7aWYobSl7aWYoIW8obSkpY29udGludWU7aWYoQihtKSl7aWYocD1tLnZhbHVlLDM1Njc4PT09ZHx8MzU2ODA9PT1kKXIodSwiLnVuaWZvcm0xaSgiLHYsIiwiLChkPXQubGluayhwLl90ZXh0dXJlfHxwLmNvbG9yWzBdLl90ZXh0dXJlKSkrIi5iaW5kKCkpOyIpLHIuZXhpdChkLCIudW5iaW5kKCk7Iik7ZWxzZSBpZigzNTY3ND09PWR8fDM1Njc1PT09ZHx8MzU2NzY9PT1kKW09MiwzNTY3NT09PWQ/bT0zOjM1Njc2PT09ZCYmKG09NCkscih1LCIudW5pZm9ybU1hdHJpeCIsbSwiZnYoIix2LCIsZmFsc2UsIixwPXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheShbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKSsiXSkiKSwiKTsiKTtlbHNle3N3aXRjaChkKXtjYXNlIDUxMjY6bD0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6bD0iMmYiO2JyZWFrO2Nhc2UgMzU2NjU6bD0iM2YiO2JyZWFrO2Nhc2UgMzU2NjY6bD0iNGYiO2JyZWFrO2Nhc2UgMzU2NzA6Y2FzZSA1MTI0Omw9IjFpIjticmVhaztjYXNlIDM1NjcxOmNhc2UgMzU2Njc6bD0iMmkiO2JyZWFrO2Nhc2UgMzU2NzI6Y2FzZSAzNTY2ODpsPSIzaSI7YnJlYWs7Y2FzZSAzNTY3MzpsPSI0aSI7YnJlYWs7Y2FzZSAzNTY2OTpsPSI0aSJ9cih1LCIudW5pZm9ybSIsbCwiKCIsdiwiLCIsZyhwKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKTpwLCIpOyIpfWNvbnRpbnVlfWg9bS5hcHBlbmQodCxyKX1lbHNle2lmKCFvKFB0KSljb250aW51ZTtoPXIuZGVmKGMudW5pZm9ybXMsIlsiLGUuaWQocCksIl0iKX1zd2l0Y2goMzU2Nzg9PT1kP3IoImlmKCIsaCwiJiYiLGgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXIiKXsnLGgsIj0iLGgsIi5jb2xvclswXTsiLCJ9Iik6MzU2ODA9PT1kJiZyKCJpZigiLGgsIiYmIixoLCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyQ3ViZSIpeycsaCwiPSIsaCwiLmNvbG9yWzBdOyIsIn0iKSxwPTEsZCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOmQ9ci5kZWYoaCwiLl90ZXh0dXJlIikscih1LCIudW5pZm9ybTFpKCIsdiwiLCIsZCwiLmJpbmQoKSk7Iiksci5leGl0KGQsIi51bmJpbmQoKTsiKTtjb250aW51ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpsPSIxaSI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOmw9IjJpIixwPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOmw9IjNpIixwPTM7YnJlYWs7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOmw9IjRpIixwPTQ7YnJlYWs7Y2FzZSA1MTI2Omw9IjFmIjticmVhaztjYXNlIDM1NjY0Omw9IjJmIixwPTI7YnJlYWs7Y2FzZSAzNTY2NTpsPSIzZiIscD0zO2JyZWFrO2Nhc2UgMzU2NjY6bD0iNGYiLHA9NDticmVhaztjYXNlIDM1Njc0Omw9Ik1hdHJpeDJmdiI7YnJlYWs7Y2FzZSAzNTY3NTpsPSJNYXRyaXgzZnYiO2JyZWFrO2Nhc2UgMzU2NzY6bD0iTWF0cml4NGZ2In1pZigiTSI9PT1sLmNoYXJBdCgwKSl7cih1LCIudW5pZm9ybSIsbCwiKCIsdiwiLCIpO3Y9TWF0aC5wb3coZC0zNTY3NCsyLDIpO3ZhciB5PXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheSgiLHYsIikiKTtBcnJheS5pc0FycmF5KGgpP3IoImZhbHNlLCgiLGEodiwoZnVuY3Rpb24odCl7cmV0dXJuIHkrIlsiK3QrIl09IitoW3RdfSkpLCIsIix5LCIpIik6cigiZmFsc2UsKEFycmF5LmlzQXJyYXkoIixoLCIpfHwiLGgsIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/IixoLCI6KCIsYSh2LChmdW5jdGlvbih0KXtyZXR1cm4geSsiWyIrdCsiXT0iK2grIlsiK3QrIl0ifSkpLCIsIix5LCIpIikscigiKTsiKX1lbHNle2lmKDE8cCl7ZD1bXTt2YXIgeD1bXTtmb3IobT0wO208cDsrK20pQXJyYXkuaXNBcnJheShoKT94LnB1c2goaFttXSk6eC5wdXNoKHIuZGVmKGgrIlsiK20rIl0iKSkscyYmZC5wdXNoKHIuZGVmKCkpO3MmJnIoImlmKCEiLHQuYmF0Y2hJZCwifHwiLGQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK3hbZV19KSkuam9pbigifHwiKSwiKXsiLGQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0KyI9Iit4W2VdKyI7In0pKS5qb2luKCIiKSkscih1LCIudW5pZm9ybSIsbCwiKCIsdiwiLCIseC5qb2luKCIsIiksIik7Iil9ZWxzZSBzJiYoZD1yLmRlZigpLHIoImlmKCEiLHQuYmF0Y2hJZCwifHwiLGQsIiE9PSIsaCwiKXsiLGQsIj0iLGgsIjsiKSkscih1LCIudW5pZm9ybSIsbCwiKCIsdiwiLCIsaCwiKTsiKTtzJiZyKCJ9Iil9fX1mdW5jdGlvbiBWKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9aFtpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoZiwiLiIsaSl9ZnVuY3Rpb24gYSgpe2Z1bmN0aW9uIHQoKXtyKGwsIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSgiLFtkLGcsdixtKyI8PCgoIit2KyItNTEyMSk+PjEpIixzXSwiKTsiKX1mdW5jdGlvbiBlKCl7cihsLCIuZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKCIsW2QsbSxnLHNdLCIpOyIpfXAmJiJudWxsIiE9PXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KCl7cih1KyIuZHJhd0VsZW1lbnRzKCIrW2QsZyx2LG0rIjw8KCgiK3YrIi01MTIxKT4+MSkiXSsiKTsiKX1mdW5jdGlvbiBlKCl7cih1KyIuZHJhd0FycmF5cygiK1tkLG0sZ10rIik7Iil9cCYmIm51bGwiIT09cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9dmFyIHMsbCxjPXQuc2hhcmVkLHU9Yy5nbCxmPWMuZHJhdyxoPW4uZHJhdyxwPWZ1bmN0aW9uKCl7dmFyIGk9aC5lbGVtZW50cyxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSxoLmVsZW1lbnRzQWN0aXZlJiZhKCJpZigiK2krIikiK3UrIi5iaW5kQnVmZmVyKDM0OTYzLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIpKTooaT1hLmRlZigpLGEoaSwiPSIsZiwiLiIsImVsZW1lbnRzIiwiOyIsImlmKCIsaSwiKXsiLHUsIi5iaW5kQnVmZmVyKCIsMzQ5NjMsIiwiLGksIi5idWZmZXIuYnVmZmVyKTt9IiwiZWxzZSBpZigiLGMudmFvLCIuY3VycmVudFZBTyl7IixpLCI9Iix0LnNoYXJlZC5lbGVtZW50cysiLmdldEVsZW1lbnRzKCIrYy52YW8sIi5jdXJyZW50VkFPLmVsZW1lbnRzKTsiLHJ0PyIiOiJpZigiK2krIikiK3UrIi5iaW5kQnVmZmVyKDM0OTYzLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIsIn0iKSksaX0oKSxkPWkoInByaW1pdGl2ZSIpLG09aSgib2Zmc2V0IiksZz1mdW5jdGlvbigpe3ZhciBpPWguY291bnQsYT1lO3JldHVybiBpPygoaS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXApJiYoYT1yKSxpPWkuYXBwZW5kKHQsYSkpOmk9YS5kZWYoZiwiLiIsImNvdW50IiksaX0oKTtpZigibnVtYmVyIj09dHlwZW9mIGcpe2lmKDA9PT1nKXJldHVybn1lbHNlIHIoImlmKCIsZywiKXsiKSxyLmV4aXQoIn0iKTskJiYocz1pKCJpbnN0YW5jZXMiKSxsPXQuaW5zdGFuY2luZyk7dmFyIHY9cCsiLnR5cGUiLHk9aC5lbGVtZW50cyYmQihoLmVsZW1lbnRzKSYmIWgudmFvQWN0aXZlOyQmJigibnVtYmVyIiE9dHlwZW9mIHN8fDA8PXMpPyJzdHJpbmciPT10eXBlb2Ygcz8ocigiaWYoIixzLCI+MCl7IiksYSgpLHIoIn1lbHNlIGlmKCIscywiPDApeyIpLG8oKSxyKCJ9IikpOmEoKTpvKCl9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBpPShlPV8oKSkucHJvYygiYm9keSIsaSksJCYmKGUuaW5zdGFuY2luZz1pLmRlZihlLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGUsaSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gWSh0LGUscixuKXtQKHQsZSksci51c2VWQU8/ci5kcmF3VkFPP2UodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsci5kcmF3VkFPLmFwcGVuZCh0LGUpLCIpOyIpOmUodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKTooZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7IiksTyh0LGUscixuLmF0dHJpYnV0ZXMsKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSkpLFUodCxlLHIsbi51bmlmb3JtcywoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLCExKSxWKHQsZSxlLHIpfWZ1bmN0aW9uIFcodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiEwfXQuYmF0Y2hJZD0iYTEiLFAodCxlKSxPKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxVKHQsZSxyLG4udW5pZm9ybXMsaSwhMSksVih0LGUsZSxyKX1mdW5jdGlvbiBYKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9UCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSwiZm9yKCIscywiPTA7IixzLCI8IiwiYTEiLCI7KysiLHMsIil7IixsLCI9IiwiYTAiLCJbIixzLCJdOyIsdSwifSIsYy5leGl0KSxyLm5lZWRzQ29udGV4dCYmUyh0LHUsci5jb250ZXh0KSxyLm5lZWRzRnJhbWVidWZmZXImJkUodCx1LHIuZnJhbWVidWZmZXIpLEModCx1LHIuc3RhdGUsaSksci5wcm9maWxlJiZpKHIucHJvZmlsZSkmJkkodCx1LHIsITEsITApLG4/KHIudXNlVkFPP3IuZHJhd1ZBTz9pKHIuZHJhd1ZBTyk/dSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsdSksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsYyksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIix0LnNoYXJlZC52YW8sIi50YXJnZXRWQU8pOyIpOihjKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKSxPKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxPKHQsdSxyLG4uYXR0cmlidXRlcyxpKSksVSh0LGMscixuLnVuaWZvcm1zLGEsITEpLFUodCx1LHIsbi51bmlmb3JtcyxpLCEwKSxWKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoInt9Iiksbj1yLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHUpLGw9dS5kZWYobiwiLmlkIiksYz11LmRlZihlLCJbIixsLCJdIiksdSh0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiwiaWYoISIsYywiKXsiLGMsIj0iLGUsIlsiLGwsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKGUpe3JldHVybiBxKFcsdCxyLGUsMil9KSksIigiLG4sIik7fSIsYywiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpKX1mdW5jdGlvbiBaKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiYobj1uLmFwcGVuZCh0LGkpLGlzTmFOKG4pP2kuc2V0KGEuc2hhZGVyLCIuIitlLG4pOmkuc2V0KGEuc2hhZGVyLCIuIitlLHQubGluayhuLHtzdGFibGU6ITB9KSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O2lmKFModCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxSKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLG89bi5hcHBlbmQodCxpKTtnKG8pP28uZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtpc05hTihyKT9pLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpOmkuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIsdC5saW5rKHIse3N0YWJsZTohMH0pKX0pKTpCKG4pP2kuc2V0KGEubmV4dCwiLiIrZSx0Lmxpbmsobyx7c3RhYmxlOiEwfSkpOmkuc2V0KGEubmV4dCwiLiIrZSxvKX0pKSxJKHQsaSxyLCEwLCEwKSxbImVsZW1lbnRzIiwib2Zmc2V0IiwiY291bnQiLCJpbnN0YW5jZXMiLCJwcmltaXRpdmUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLmRyYXdbZV07biYmKG49bi5hcHBlbmQodCxpKSxpc05hTihuKT9pLnNldChhLmRyYXcsIi4iK2Usbik6aS5zZXQoYS5kcmF3LCIuIitlLHQubGluayhuKSx7c3RhYmxlOiEwfSkpfSkpLE9iamVjdC5rZXlzKHIudW5pZm9ybXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSk7QXJyYXkuaXNBcnJheShvKSYmKG89IlsiK28ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZSk/ZTp0LmxpbmsoZSx7c3RhYmxlOiEwfSl9KSkrIl0iKSxpLnNldChhLnVuaWZvcm1zLCJbIit0LmxpbmsoZS5pZChuKSx7c3RhYmxlOiEwfSkrIl0iLG8pfSkpLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgSykuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pKX0pKSxyLnNjb3BlVkFPKXt2YXIgcz1yLnNjb3BlVkFPLmFwcGVuZCh0LGkpO2lzTmFOKHMpP2kuc2V0KGEudmFvLCIudGFyZ2V0VkFPIixzKTppLnNldChhLnZhbywiLnRhcmdldFZBTyIsdC5saW5rKHMse3N0YWJsZTohMH0pKX1uKCJ2ZXJ0IiksbigiZnJhZyIpLDA8T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiYoaShvLCIuZGlydHk9dHJ1ZTsiKSxpLmV4aXQobywiLmRpcnR5PXRydWU7IikpLGkoImExKCIsdC5zaGFyZWQuY29udGV4dCwiLGEwLCIsdC5iYXRjaElkLCIpOyIpfWZ1bmN0aW9uIEoodCxlLHIpe3ZhciBuPWUuc3RhdGljW3JdO2lmKG4mJmZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmIWcodCkpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoRy5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fShuKSl7dmFyIGk9dC5nbG9iYWwsYT1PYmplY3Qua2V5cyhuKSxvPSExLHM9ITEsbD0hMSxjPXQuZ2xvYmFsLmRlZigie30iKTthLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoRy5pc0R5bmFtaWMocikpImZ1bmN0aW9uIj09dHlwZW9mIHImJihyPW5bZV09Ry51bmJveChyKSksZT1qKHIsbnVsbCksbz1vfHxlLnRoaXNEZXAsbD1sfHxlLnByb3BEZXAscz1zfHxlLmNvbnRleHREZXA7ZWxzZXtzd2l0Y2goaShjLCIuIixlLCI9IiksdHlwZW9mIHIpe2Nhc2UibnVtYmVyIjppKHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjppKCciJyxyLCciJyk7YnJlYWs7Y2FzZSJvYmplY3QiOkFycmF5LmlzQXJyYXkocikmJmkoIlsiLHIuam9pbigpLCJdIik7YnJlYWs7ZGVmYXVsdDppKHQubGluayhyKSl9aSgiOyIpfX0pKSxlLmR5bmFtaWNbcl09bmV3IEcuRHluYW1pY1ZhcmlhYmxlKDQse3RoaXNEZXA6byxjb250ZXh0RGVwOnMscHJvcERlcDpsLHJlZjpjLGFwcGVuZDpmdW5jdGlvbih0LGUpe2EuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9bltyXTtHLmlzRHluYW1pYyhpKSYmKGk9dC5pbnZva2UoZSxpKSxlKGMsIi4iLHIsIj0iLGksIjsiKSl9KSl9fSksZGVsZXRlIGUuc3RhdGljW3JdfX12YXIgSz11LlJlY29yZCxRPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsInJldmVyc2Ugc3VidHJhY3QiOjMyNzc5fTtyLmV4dF9ibGVuZF9taW5tYXgmJihRLm1pbj0zMjc3NSxRLm1heD0zMjc3Nik7dmFyICQ9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGV0PXIud2ViZ2xfZHJhd19idWZmZXJzLHJ0PXIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QsbnQ9e2RpcnR5OiEwLHByb2ZpbGU6di5wcm9maWxlfSxpdD17fSxvdD1bXSxzdD17fSxsdD17fTt4KCJkaXRoZXIiLDMwMjQpLHgoImJsZW5kLmVuYWJsZSIsMzA0MiksYigiYmxlbmQuY29sb3IiLCJibGVuZENvbG9yIixbMCwwLDAsMF0pLGIoImJsZW5kLmVxdWF0aW9uIiwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbMzI3NzQsMzI3NzRdKSxiKCJibGVuZC5mdW5jIiwiYmxlbmRGdW5jU2VwYXJhdGUiLFsxLDAsMSwwXSkseCgiZGVwdGguZW5hYmxlIiwyOTI5LCEwKSxiKCJkZXB0aC5mdW5jIiwiZGVwdGhGdW5jIiw1MTMpLGIoImRlcHRoLnJhbmdlIiwiZGVwdGhSYW5nZSIsWzAsMV0pLGIoImRlcHRoLm1hc2siLCJkZXB0aE1hc2siLCEwKSxiKCJjb2xvck1hc2siLCJjb2xvck1hc2siLFshMCwhMCwhMCwhMF0pLHgoImN1bGwuZW5hYmxlIiwyODg0KSxiKCJjdWxsLmZhY2UiLCJjdWxsRmFjZSIsMTAyOSksYigiZnJvbnRGYWNlIiwiZnJvbnRGYWNlIiwyMzA1KSxiKCJsaW5lV2lkdGgiLCJsaW5lV2lkdGgiLDEpLHgoInBvbHlnb25PZmZzZXQuZW5hYmxlIiwzMjgyMyksYigicG9seWdvbk9mZnNldC5vZmZzZXQiLCJwb2x5Z29uT2Zmc2V0IixbMCwwXSkseCgic2FtcGxlLmFscGhhIiwzMjkyNikseCgic2FtcGxlLmVuYWJsZSIsMzI5MjgpLGIoInNhbXBsZS5jb3ZlcmFnZSIsInNhbXBsZUNvdmVyYWdlIixbMSwhMV0pLHgoInN0ZW5jaWwuZW5hYmxlIiwyOTYwKSxiKCJzdGVuY2lsLm1hc2siLCJzdGVuY2lsTWFzayIsLTEpLGIoInN0ZW5jaWwuZnVuYyIsInN0ZW5jaWxGdW5jIixbNTE5LDAsLTFdKSxiKCJzdGVuY2lsLm9wRnJvbnQiLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSxiKCJzdGVuY2lsLm9wQmFjayIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHgoInNjaXNzb3IuZW5hYmxlIiwzMDg5KSxiKCJzY2lzc29yLmJveCIsInNjaXNzb3IiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSksYigidmlld3BvcnQiLCJ2aWV3cG9ydCIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKTt2YXIgY3Q9e2dsOnQsY29udGV4dDpwLHN0cmluZ3M6ZSxuZXh0Oml0LGN1cnJlbnQ6bnQsZHJhdzpoLGVsZW1lbnRzOm8sYnVmZmVyOmksc2hhZGVyOmYsYXR0cmlidXRlczp1LnN0YXRlLHZhbzp1LHVuaWZvcm1zOmMsZnJhbWVidWZmZXI6bCxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6RH0sdXQ9e3ByaW1UeXBlczphdCxjb21wYXJlRnVuY3M6RXQsYmxlbmRGdW5jczpTdCxibGVuZEVxdWF0aW9uczpRLHN0ZW5jaWxPcHM6THQsZ2xUeXBlczp0dCxvcmllbnRhdGlvblR5cGU6Q3R9O2V0JiYodXQuYmFja0J1ZmZlcj1bMTAyOV0sdXQuZHJhd0J1ZmZlcj1hKG4ubWF4RHJhd2J1ZmZlcnMsKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dD9bMF06YSh0LChmdW5jdGlvbih0KXtyZXR1cm4gMzYwNjQrdH0pKX0pKSk7dmFyIGZ0PTA7cmV0dXJue25leHQ6aXQsY3VycmVudDpudCxwcm9jczpmdW5jdGlvbigpe3ZhciB0PV8oKSxlPXQucHJvYygicG9sbCIpLGk9dC5wcm9jKCJyZWZyZXNoIiksbz10LmJsb2NrKCk7ZShvKSxpKG8pO3ZhciBzLGw9KGY9dC5zaGFyZWQpLmdsLGM9Zi5uZXh0LHU9Zi5jdXJyZW50O28odSwiLmRpcnR5PWZhbHNlOyIpLEUodCxlKSxFKHQsaSxudWxsLCEwKSwkJiYocz10LmxpbmsoJCkpLHIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QmJmkodC5saW5rKHIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QpLCIuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOyIpO3ZhciBmPWkuZGVmKGYuYXR0cmlidXRlcyksaD1pLmRlZigwKSxwPXQuY29uZChoLCIuYnVmZmVyIik7cC50aGVuKGwsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGgsIi5idWZmZXIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIixoLCIuc2l6ZSwiLGgsIi50eXBlLCIsaCwiLm5vcm1hbGl6ZWQsIixoLCIuc3RyaWRlLCIsaCwiLm9mZnNldCk7IikuZWxzZShsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpOyIsbCwiLnZlcnRleEF0dHJpYjRmKGksIixoLCIueCwiLGgsIi55LCIsaCwiLnosIixoLCIudyk7IixoLCIuYnVmZmVyPW51bGw7Iik7dmFyIGQ9dC5saW5rKG4ubWF4QXR0cmlidXRlcyx7c3RhYmxlOiEwfSk7cmV0dXJuIGkoImZvcih2YXIgaT0wO2k8IixkLCI7KytpKXsiLGgsIj0iLGYsIltpXTsiLHAsIn0iKSwkJiZpKCJmb3IodmFyIGk9MDtpPCIsZCwiOysraSl7IixzLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGksIixmLCJbaV0uZGl2aXNvcik7IiwifSIpLGkodC5zaGFyZWQudmFvLCIuY3VycmVudFZBTz1udWxsOyIsdC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKSxPYmplY3Qua2V5cyhzdCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49c3Rbcl0sYT1vLmRlZihjLCIuIixyKSxzPXQuYmxvY2soKTtzKCJpZigiLGEsIil7IixsLCIuZW5hYmxlKCIsbiwiKX1lbHNleyIsbCwiLmRpc2FibGUoIixuLCIpfSIsdSwiLiIsciwiPSIsYSwiOyIpLGkocyksZSgiaWYoIixhLCIhPT0iLHUsIi4iLHIsIil7IixzLCJ9Iil9KSksT2JqZWN0LmtleXMobHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuLHMsZj1sdFtyXSxoPW50W3JdLHA9dC5ibG9jaygpO3AobCwiLiIsZiwiKCIpLGcoaCk/KGY9aC5sZW5ndGgsbj10Lmdsb2JhbC5kZWYoYywiLiIscikscz10Lmdsb2JhbC5kZWYodSwiLiIscikscChhKGYsKGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIn0pKSwiKTsiLGEoZiwoZnVuY3Rpb24odCl7cmV0dXJuIHMrIlsiK3QrIl09IituKyJbIit0KyJdOyJ9KSkuam9pbigiIikpLGUoImlmKCIsYShmLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSE9PSIrcysiWyIrdCsiXSJ9KSkuam9pbigifHwiKSwiKXsiLHAsIn0iKSk6KG49by5kZWYoYywiLiIscikscz1vLmRlZih1LCIuIixyKSxwKG4sIik7Iix1LCIuIixyLCI9IixuLCI7IiksZSgiaWYoIixuLCIhPT0iLHMsIil7IixwLCJ9IikpLGkocCl9KSksdC5jb21waWxlKCl9KCksY29tcGlsZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPV8oKTthLnN0YXRzPWEubGluayhpKSxPYmplY3Qua2V5cyhlLnN0YXRpYykuZm9yRWFjaCgoZnVuY3Rpb24odCl7SihhLGUsdCl9KSksTXQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLHQsZSl9KSk7dmFyIG89TSh0LGUscixuKTtyZXR1cm4gby5zaGFkZXIucHJvZ3JhbSYmKG8uc2hhZGVyLnByb2dyYW0uYXR0cmlidXRlcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9KSksby5zaGFkZXIucHJvZ3JhbS51bmlmb3Jtcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9KSkpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtQKHQsciksUyh0LHIsZS5jb250ZXh0KSxFKHQscixlLmZyYW1lYnVmZmVyKSxMKHQscixlKSxDKHQscixlLnN0YXRlKSxJKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pWSh0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3IodC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpO3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKChmdW5jdGlvbihyKXtyZXR1cm4gcShZLHQsZSxyLDEpfSkpLCIoIixuLCIpOyIsbywiLmNhbGwodGhpcyxhMCk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpLHQuc2hhcmVkLnZhbyYmcih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iil9KGEsbyksWihhLG8pLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixQKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSksaXx8KFModCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8RSh0LG4scykpOkUodCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEwodCxuLGUpLEModCxuLGUuc3RhdGUsKGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSkpLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxJKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVgodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixhLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlYKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7bih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoYSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluaygoZnVuY3Rpb24ocil7cmV0dXJuIHEoWCx0LGUsciwyKX0pKSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKSx0LnNoYXJlZC52YW8mJm4odC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpfShhLG8pLEgoYS5jb21waWxlKCkse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtvLnNoYWRlci5wcm9ncmFtLmRlc3Ryb3koKX19KX19fWZ1bmN0aW9uIFYodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgSD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxxPTAsRz17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24gZShyLG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP25ldyB0KDAscik6Im51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByP25ldyB0KDUscik6QXJyYXkuaXNBcnJheShyKT9uZXcgdCg2LHIubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlKHQsbisiWyIrcisiXSIpfSkpKTpyIGluc3RhbmNlb2YgdD9yOnZvaWQgMH0sYWNjZXNzb3I6ZX0sWT17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxXPSJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LFg9cygpO1guemVybz1zKCk7dmFyIFo9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1YLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksWC5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbil8fC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXx8KHM9dC5jcmVhdGVUZXh0dXJlKCksbz1YLmFsbG9jVHlwZSg1MTIxLDM2KSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoMzQwNjcscyksdC50ZXhJbWFnZTJEKDM0MDY5LDAsNjQwOCwzLDMsMCw2NDA4LDUxMjEsbyksWC5mcmVlVHlwZShvKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpLHQuZGVsZXRlVGV4dHVyZShzKSxzPSF0LmdldEVycm9yKCkpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6aSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6YSxucG90VGV4dHVyZUN1YmU6c319LEo9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LEs9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9LFE9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8WC5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0sZj1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGYscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LCQ9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sdHQ9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sZXQ9e2R5bmFtaWM6MzUwNDgsc3RyZWFtOjM1MDQwLHN0YXRpYzozNTA0NH0scnQ9US5mbGF0dGVuLG50PVEuc2hhcGUsaXQ9W107aXRbNTEyMF09MSxpdFs1MTIyXT0yLGl0WzUxMjRdPTQsaXRbNTEyMV09MSxpdFs1MTIzXT0yLGl0WzUxMjVdPTQsaXRbNTEyNl09NDt2YXIgYXQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxvdD1uZXcgRmxvYXQzMkFycmF5KDEpLHN0PW5ldyBVaW50MzJBcnJheShvdC5idWZmZXIpLGx0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxjdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSx1dD17fTt1dFs2NDA5XT11dFs2NDA2XT11dFs2NDAyXT0xLHV0WzM0MDQxXT11dFs2NDEwXT0yLHV0WzY0MDddPXV0WzM1OTA0XT0zLHV0WzY0MDhdPXV0WzM1OTA2XT00O3ZhciBmdD12KCJIVE1MQ2FudmFzRWxlbWVudCIpLGh0PXYoIk9mZnNjcmVlbkNhbnZhcyIpLHB0PXYoIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLGR0PXYoIkltYWdlQml0bWFwIiksbXQ9digiSFRNTEltYWdlRWxlbWVudCIpLGd0PXYoIkhUTUxWaWRlb0VsZW1lbnQiKSx2dD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2Z0LGh0LHB0LGR0LG10LGd0XSkseXQ9W107eXRbNTEyMV09MSx5dFs1MTI2XT00LHl0WzM2MTkzXT0yLHl0WzUxMjNdPTIseXRbNTEyNV09NDt2YXIgeHQ9W107eHRbMzI4NTRdPTIseHRbMzI4NTVdPTIseHRbMzYxOTRdPTIseHRbMzQwNDFdPTQseHRbMzM3NzZdPS41LHh0WzMzNzc3XT0uNSx4dFszMzc3OF09MSx4dFszMzc3OV09MSx4dFszNTk4Nl09LjUseHRbMzU5ODddPTEseHRbMzQ3OThdPTEseHRbMzU4NDBdPS41LHh0WzM1ODQxXT0uMjUseHRbMzU4NDJdPS41LHh0WzM1ODQzXT0uMjUseHRbMzYxOTZdPS41O3ZhciBidD1bXTtidFszMjg1NF09MixidFszMjg1NV09MixidFszNjE5NF09MixidFszMzE4OV09MixidFszNjE2OF09MSxidFszNDA0MV09NCxidFszNTkwN109NCxidFszNDgzNl09MTYsYnRbMzQ4NDJdPTgsYnRbMzQ4NDNdPTY7dmFyIF90PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KSk7dmFyIGM9MCx1PXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsYT0wLHU9MzI4NTQ7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlPygic2hhcGUiaW4gZT8obj0wfChhPWUuc2hhcGUpWzBdLGE9MHxhWzFdKTooInJhZGl1cyJpbiBlJiYobj1hPTB8ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYobj0wfGUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKGE9MHxlLmhlaWdodCkpLCJmb3JtYXQiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKToibnVtYmVyIj09dHlwZW9mIGU/KG49MHxlLGE9Im51bWJlciI9PXR5cGVvZiByPzB8cjpuKTplfHwobj1hPTEpLG4hPT1jLndpZHRofHxhIT09Yy5oZWlnaHR8fHUhPT1jLmZvcm1hdClyZXR1cm4gby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSxjLmZvcm1hdD11LHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHUsbixhKSxpLnByb2ZpbGUmJihjLnN0YXRzLnNpemU9YnRbYy5mb3JtYXRdKmMud2lkdGgqYy5oZWlnaHQpLG8uZm9ybWF0PWxbYy5mb3JtYXRdLG99dmFyIGM9bmV3IGEodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIHVbYy5pZF09YyxuLnJlbmRlcmJ1ZmZlckNvdW50KyssbyhlLHIpLG8ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIG49MHxlLGE9MHxyfHxuO3JldHVybiBuPT09Yy53aWR0aCYmYT09PWMuaGVpZ2h0fHwoby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT1idFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCkpLG99LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtLKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtLKHUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfX19LHd0PVtdO3d0WzY0MDhdPTQsd3RbNjQwN109Mzt2YXIgVHQ9W107VHRbNTEyMV09MSxUdFs1MTI2XT00LFR0WzM2MTkzXT0yO3ZhciBrdD1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLC0xMjQ1NjQzODI1LC0zNzM5NTc3MjMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsLTE4NDEzMzE1NDgsLTE0MjQyMDQwNzUsLTY3MDU4NjIxNiwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwtMjEzMjg4OTA5MCwtMTY4MDA3OTE5MywtMTA0Njc0NDcxNiwtNDU5NTc2ODk1LC0yNzI3NDI1MjIsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsLTE3NDA3NDY0MTQsLTE0NzMxMzI5NDcsLTEzNDE5NzA0ODgsLTEwODQ2NTM2MjUsLTk1ODM5NTQwNSwtNzEwNDM4NTg1LDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLC0yMTE3OTQwOTQ2LC0xODM4MDExMjU5LC0xNTY0NDgxMzc1LC0xNDc0NjY0ODg1LC0xMDM1MjM2NDk2LC05NDkyMDI1MjUsLTc3ODkwMTQ3OSwtNjk0NjE0NDkyLC0yMDAzOTUzODcsMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LC0yMDY3MjM2ODQ0LC0xOTMzMTE0ODcyLC0xODY2NTMwODIyLC0xNTM4MjMzMTA5LC0xMDkwOTM1ODE3LC05NjU2NDE5OThdLEF0PVsieCIsInkiLCJ6IiwidyJdLE10PSJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0Ii5zcGxpdCgiICIpLFN0PXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxFdD17bmV2ZXI6NTEyLGxlc3M6NTEzLCI8Ijo1MTMsZXF1YWw6NTE0LCI9Ijo1MTQsIj09Ijo1MTQsIj09PSI6NTE0LGxlcXVhbDo1MTUsIjw9Ijo1MTUsZ3JlYXRlcjo1MTYsIj4iOjUxNixub3RlcXVhbDo1MTcsIiE9Ijo1MTcsIiE9PSI6NTE3LGdlcXVhbDo1MTgsIj49Ijo1MTgsYWx3YXlzOjUxOX0sTHQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MywiaW5jcmVtZW50IHdyYXAiOjM0MDU1LCJkZWNyZW1lbnQgd3JhcCI6MzQwNTYsaW52ZXJ0OjUzODZ9LEN0PXtjdzoyMzA0LGNjdzoyMzA1fSxQdD1uZXcgRighMSwhMSwhMSwoZnVuY3Rpb24oKXt9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Sy5sZW5ndGgpVCYmVC51cGRhdGUoKSxldD1udWxsO2Vsc2V7ZXQ9WS5uZXh0KGUpLGYoKTtmb3IodmFyIHQ9Sy5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9S1t0XTtyJiZyKEksbnVsbCwwKX1nLmZsdXNoKCksVCYmVC51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyFldCYmMDxLLmxlbmd0aCYmKGV0PVkubmV4dChlKSl9ZnVuY3Rpb24gbigpe2V0JiYoWS5jYW5jZWwoZSksZXQ9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLFEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfWZ1bmN0aW9uIG8odCl7Zy5nZXRFcnJvcigpLHkucmVzdG9yZSgpLEYucmVzdG9yZSgpLHoucmVzdG9yZSgpLEIucmVzdG9yZSgpLE4ucmVzdG9yZSgpLGoucmVzdG9yZSgpLFIucmVzdG9yZSgpLFQmJlQucmVzdG9yZSgpLHEucHJvY3MucmVmcmVzaCgpLHIoKSwkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT10W2ldO2lmKEcuaXNEeW5hbWljKGEpKW5baV09Ry51bmJveChhLGkpO2Vsc2V7aWYoZSYmQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIG89MDtvPGEubGVuZ3RoOysrbylpZihHLmlzRHluYW1pYyhhW29dKSlyZXR1cm4gdm9pZChuW2ldPUcudW5ib3goYSxpKSk7cltpXT1hfX0pKSx7ZHluYW1pYzpuLHN0YXRpYzpyfX12YXIgcj1lKHQuY29udGV4dHx8e30sITApLG49ZSh0LnVuaWZvcm1zfHx7fSwhMCksaT1lKHQuYXR0cmlidXRlc3x8e30sITEpO3Q9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtyW3QrIi4iK25dPWVbbl19KSl9fXZhciByPUgoe30sdCk7cmV0dXJuIGRlbGV0ZSByLnVuaWZvcm1zLGRlbGV0ZSByLmF0dHJpYnV0ZXMsZGVsZXRlIHIuY29udGV4dCxkZWxldGUgci52YW8sInN0ZW5jaWwiaW4gciYmci5zdGVuY2lsLm9wJiYoci5zdGVuY2lsLm9wQmFjaz1yLnN0ZW5jaWwub3BGcm9udD1yLnN0ZW5jaWwub3AsZGVsZXRlIHIuc3RlbmNpbC5vcCksZSgiYmxlbmQiKSxlKCJkZXB0aCIpLGUoImN1bGwiKSxlKCJzdGVuY2lsIiksZSgicG9seWdvbk9mZnNldCIpLGUoInNjaXNzb3IiKSxlKCJzYW1wbGUiKSwidmFvImluIHQmJihyLnZhbz10LnZhbykscn0odCksITEpO3ZhciBhPXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9LG89cS5jb21waWxlKHQsaSxuLHIsYSkscz1vLmRyYXcsbD1vLmJhdGNoLGM9by5zY29wZSx1PVtdO3JldHVybiBIKChmdW5jdGlvbih0LGUpe3ZhciByO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBjLmNhbGwodGhpcyxudWxsLHQsMCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpaWYoIm51bWJlciI9PXR5cGVvZiB0KWZvcihyPTA7cjx0OysrciljLmNhbGwodGhpcyxudWxsLGUscik7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYy5jYWxsKHRoaXMsdCxlLDApO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpYy5jYWxsKHRoaXMsdFtyXSxlLHIpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigwPHQpcmV0dXJuIGwuY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe2Zvcig7dS5sZW5ndGg8dDspdS5wdXNoKG51bGwpO3JldHVybiB1fSgwfHQpLDB8dCl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gcy5jYWxsKHRoaXMsdCk7aWYodC5sZW5ndGgpcmV0dXJuIGwuY2FsbCh0aGlzLHQsdC5sZW5ndGgpfX0pLHtzdGF0czphLGRlc3Ryb3k6ZnVuY3Rpb24oKXtvLmRlc3Ryb3koKX19KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtxLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJihnLmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PTE2Mzg0KSwiZGVwdGgiaW4gZSYmKGcuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9MjU2KSwic3RlbmNpbCJpbiBlJiYoZy5jbGVhclN0ZW5jaWwoMHxlLnN0ZW5jaWwpLHJ8PTEwMjQpLGcuY2xlYXIocil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gSy5wdXNoKHQpLHIoKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIGU9VihLLHQpO0tbZV09ZnVuY3Rpb24gdCgpe3ZhciBlPVYoSyx0KTtLW2VdPUtbSy5sZW5ndGgtMV0sLS1LLmxlbmd0aCwwPj1LLmxlbmd0aCYmbigpfX19fWZ1bmN0aW9uIHUoKXt2YXIgdD1YLnZpZXdwb3J0LGU9WC5zY2lzc29yX2JveDt0WzBdPXRbMV09ZVswXT1lWzFdPTAsSS52aWV3cG9ydFdpZHRoPUkuZnJhbWVidWZmZXJXaWR0aD1JLmRyYXdpbmdCdWZmZXJXaWR0aD10WzJdPWVbMl09Zy5kcmF3aW5nQnVmZmVyV2lkdGgsSS52aWV3cG9ydEhlaWdodD1JLmZyYW1lYnVmZmVySGVpZ2h0PUkuZHJhd2luZ0J1ZmZlckhlaWdodD10WzNdPWVbM109Zy5kcmF3aW5nQnVmZmVySGVpZ2h0fWZ1bmN0aW9uIGYoKXtJLnRpY2srPTEsSS50aW1lPW0oKSx1KCkscS5wcm9jcy5wb2xsKCl9ZnVuY3Rpb24gaCgpe0IucmVmcmVzaCgpLHUoKSxxLnByb2NzLnJlZnJlc2goKSxUJiZULnVwZGF0ZSgpfWZ1bmN0aW9uIG0oKXtyZXR1cm4oVygpLU0pLzFlM31pZighKHQ9aSh0KSkpcmV0dXJuIG51bGw7dmFyIGc9dC5nbCx2PWcuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTtnLmlzQ29udGV4dExvc3QoKTt2YXIgeT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dmFyIHI7ZT1lLnRvTG93ZXJDYXNlKCk7dHJ5e3I9bltlXT10LmdldEV4dGVuc2lvbihlKX1jYXRjaCh0KXt9cmV0dXJuISFyfWZvcih2YXIgbj17fSxpPTA7aTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSl7dmFyIGE9ZS5leHRlbnNpb25zW2ldO2lmKCFyKGEpKXJldHVybiBlLm9uRGVzdHJveSgpLGUub25Eb25lKCciJythKyciIGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFdlYkdMIGNvbnRleHQsIHRyeSB1cGdyYWRpbmcgeW91ciBzeXN0ZW0gb3IgYSBkaWZmZXJlbnQgYnJvd3NlcicpLG51bGx9cmV0dXJuIGUub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2gocikse2V4dGVuc2lvbnM6bixyZXN0b3JlOmZ1bmN0aW9uKCl7T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoblt0XSYmIXIodCkpdGhyb3cgRXJyb3IoIihyZWdsKTogZXJyb3IgcmVzdG9yaW5nIGV4dGVuc2lvbiAiK3QpfSkpfX19KGcsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17dmFvQ291bnQ6MCxidWZmZXJDb3VudDowLGVsZW1lbnRzQ291bnQ6MCxmcmFtZWJ1ZmZlckNvdW50OjAsc2hhZGVyQ291bnQ6MCx0ZXh0dXJlQ291bnQ6MCxjdWJlQ291bnQ6MCxyZW5kZXJidWZmZXJDb3VudDowLG1heFRleHR1cmVVbml0czowfSxfPXQuY2FjaGVkQ29kZXx8e30sdz15LmV4dGVuc2lvbnMsVD1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBmPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleDtuLnN1bSs9bFt1XS1sW2ZdLGY9Y1tmXSwodT1jW3VdKT09PWY/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWYsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCx3KSxNPVcoKSxDPWcuZHJhd2luZ0J1ZmZlcldpZHRoLFA9Zy5kcmF3aW5nQnVmZmVySGVpZ2h0LEk9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpDLHZpZXdwb3J0SGVpZ2h0OlAsZnJhbWVidWZmZXJXaWR0aDpDLGZyYW1lYnVmZmVySGVpZ2h0OlAsZHJhd2luZ0J1ZmZlcldpZHRoOkMsZHJhd2luZ0J1ZmZlckhlaWdodDpQLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxPPShDPXtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sWihnLHcpKSx6PXAoZyxiLHQsKGZ1bmN0aW9uKHQpe3JldHVybiBSLmRlc3Ryb3lCdWZmZXIodCl9KSksRD1kKGcsdyx6LGIpLFI9UyhnLHcsTyxiLHosRCxDKSxGPUUoZyx4LGIsdCksQj1rKGcsdyxPLChmdW5jdGlvbigpe3EucHJvY3MucG9sbCgpfSksSSxiLHQpLE49X3QoZyx3LDAsYix0KSxqPUEoZyx3LE8sQixOLGIpLHE9VShnLHgsdyxPLHosRCwwLGose30sUixGLEMsSSxULF8sdCksWD0oeD1MKGcsaixxLnByb2NzLnBvbGwsSSkscS5uZXh0KSxKPWcuY2FudmFzLEs9W10sUT1bXSwkPVtdLHR0PVt0Lm9uRGVzdHJveV0sZXQ9bnVsbDtKJiYoSi5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhLCExKSxKLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIHJ0PWouc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOkcuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGgoKSx2PUgocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpcnQoSCh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSBydCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOkcuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OkcuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOkcuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gei5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpCLmNyZWF0ZTJELGN1YmU6Qi5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpOLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpqLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6ai5jcmVhdGVDdWJlLHZhbzpSLmNyZWF0ZVZBTyxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9UTticmVhaztjYXNlInJlc3RvcmUiOnI9JDticmVhaztjYXNlImRlc3Ryb3kiOnI9dHR9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpe3JbdF09cltyLmxlbmd0aC0xXSxyLnBvcCgpO2JyZWFrfX19fSxsaW1pdHM6TyxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIDA8PU8uZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9LHJlYWQ6eCxkZXN0cm95OmZ1bmN0aW9uKCl7Sy5sZW5ndGg9MCxuKCksSiYmKEoucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsYSksSi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbykpLEYuY2xlYXIoKSxqLmNsZWFyKCksTi5jbGVhcigpLFIuY2xlYXIoKSxCLmNsZWFyKCksRC5jbGVhcigpLHouY2xlYXIoKSxUJiZULmNsZWFyKCksdHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfSxfZ2w6ZyxfcmVmcmVzaDpoLHBvbGw6ZnVuY3Rpb24oKXtmKCksVCYmVC51cGRhdGUoKX0sbm93Om0sc3RhdHM6YixnZXRDYWNoZWRDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIF99LHByZWxvYWRDYWNoZWRDb2RlOmZ1bmN0aW9uKHQpe09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe19bdFswXV09dFsxXX0pKX19KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSkpfSx7fV0sMjc5OltmdW5jdGlvbih0LGUscil7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwp2YXIgbj10KCJidWZmZXIiKSxpPW4uQnVmZmVyO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGkodCxlLHIpfWkuZnJvbSYmaS5hbGxvYyYmaS5hbGxvY1Vuc2FmZSYmaS5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGEobixyKSxyLkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxhKGksbyksby5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaSh0LGUscil9LG8uYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIG49aSh0KTtyZXR1cm4gdm9pZCAwIT09ZT8ic3RyaW5nIj09dHlwZW9mIHI/bi5maWxsKGUscik6bi5maWxsKGUpOm4uZmlsbCgwKSxufSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkodCl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcih0KX19LHtidWZmZXI6ODB9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9aTt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX10KCJpbmhlcml0cyIpKGksbiksaS5SZWFkYWJsZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSxpLldyaXRhYmxlPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLGkuRHVwbGV4PXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxpLlRyYW5zZm9ybT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksaS5QYXNzVGhyb3VnaD10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKSxpLmZpbmlzaGVkPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksaS5waXBlbGluZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiKSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gYSgpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oImRhdGEiLGkpLHQub24oImRyYWluIixhKSx0Ll9pc1N0ZGlvfHxlJiYhMT09PWUuZW5kfHwoci5vbigiZW5kIixzKSxyLm9uKCJjbG9zZSIsbCkpO3ZhciBvPSExO2Z1bmN0aW9uIHMoKXtvfHwobz0hMCx0LmVuZCgpKX1mdW5jdGlvbiBsKCl7b3x8KG89ITAsImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGModCl7aWYodSgpLDA9PT1uLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyB0fWZ1bmN0aW9uIHUoKXtyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixzKSxyLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksci5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHUpLHIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSl9cmV0dXJuIHIub24oImVycm9yIixjKSx0Lm9uKCJlcnJvciIsYyksci5vbigiZW5kIix1KSxyLm9uKCJjbG9zZSIsdSksdC5vbigiY2xvc2UiLHUpLHQuZW1pdCgicGlwZSIsciksdH19LHtldmVudHM6MTgxLGluaGVyaXRzOjIyNiwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyI6MjgyLCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiOjI4MywicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjoyODQsInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiOjI4NSwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjoyODYsInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIjoyOTAsInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyI6MjkyfV0sMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGkodCxlLHIpe3J8fChyPUVycm9yKTt2YXIgaT1mdW5jdGlvbih0KXt2YXIgcixuO2Z1bmN0aW9uIGkocixuLGkpe3JldHVybiB0LmNhbGwodGhpcyxmdW5jdGlvbih0LHIsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSh0LHIsbil9KHIsbixpKSl8fHRoaXN9cmV0dXJuIG49dCwocj1pKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLl9fcHJvdG9fXz1uLGl9KHIpO2kucHJvdG90eXBlLm5hbWU9ci5uYW1lLGkucHJvdG90eXBlLmNvZGU9dCxuW3RdPWl9ZnVuY3Rpb24gYSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXQubGVuZ3RoO3JldHVybiB0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfSkpLHI+Mj8ib25lIG9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodC5zbGljZSgwLHItMSkuam9pbigiLCAiKSwiLCBvciAiKSt0W3ItMV06Mj09PXI/Im9uZSBvZiAiLmNvbmNhdChlLCIgIikuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSk6Im9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodFswXSl9cmV0dXJuIm9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQoU3RyaW5nKHQpKX1pKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLChmdW5jdGlvbih0LGUpe3JldHVybidUaGUgdmFsdWUgIicrZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrdCsnIid9KSxUeXBlRXJyb3IpLGkoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGk9Im5vdCAiLGUuc3Vic3RyKCFvfHxvPDA/MDorbyxpLmxlbmd0aCk9PT1pKT8obj0ibXVzdCBub3QgYmUiLGU9ZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpuPSJtdXN0IGJlIixmdW5jdGlvbih0LGUscil7cmV0dXJuKHZvaWQgMD09PXJ8fHI+dC5sZW5ndGgpJiYocj10Lmxlbmd0aCksdC5zdWJzdHJpbmcoci1lLmxlbmd0aCxyKT09PWV9KHQsIiBhcmd1bWVudCIpKXM9IlRoZSAiLmNvbmNhdCh0LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoYShlLCJ0eXBlIikpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgciYmKHI9MCksIShyK2UubGVuZ3RoPnQubGVuZ3RoKSYmLTEhPT10LmluZGV4T2YoZSxyKX0odCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzPSdUaGUgIicuY29uY2F0KHQsJyIgJykuY29uY2F0KGwsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChhKGUsInR5cGUiKSl9cmV0dXJuIHMrPSIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIHIpfSksVHlwZUVycm9yKSxpKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxpKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJUaGUgIit0KyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSksaSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxpKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJDYW5ub3QgY2FsbCAiK3QrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pKSxpKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxpKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLGkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksaSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLGkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwoZnVuY3Rpb24odCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrdH0pLFR5cGVFcnJvciksaSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksZS5leHBvcnRzLmNvZGVzPW59LHt9XSwyODI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9O2UuZXhwb3J0cz1jO3ZhciBpPXQoIi4vX3N0cmVhbV9yZWFkYWJsZSIpLGE9dCgiLi9fc3RyZWFtX3dyaXRhYmxlIik7dCgiaW5oZXJpdHMiKShjLGkpO2Zvcih2YXIgbz1uKGEucHJvdG90eXBlKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Yy5wcm90b3R5cGVbbF18fChjLnByb3RvdHlwZVtsXT1hLnByb3RvdHlwZVtsXSl9ZnVuY3Rpb24gYyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGModCk7aS5jYWxsKHRoaXMsdCksYS5jYWxsKHRoaXMsdCksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLHQmJighMT09PXQucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PXQud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PXQuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsdSkpKX1mdW5jdGlvbiB1KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ci5uZXh0VGljayhmLHRoaXMpfWZ1bmN0aW9uIGYodCl7dC5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkKX0sc2V0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL19zdHJlYW1fcmVhZGFibGUiOjI4NCwiLi9fc3RyZWFtX3dyaXRhYmxlIjoyODYsX3Byb2Nlc3M6MjcyLGluaGVyaXRzOjIyNn1dLDI4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aTt2YXIgbj10KCIuL19zdHJlYW1fdHJhbnNmb3JtIik7ZnVuY3Rpb24gaSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkodCk7bi5jYWxsKHRoaXMsdCl9dCgiaW5oZXJpdHMiKShpLG4pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KX19LHsiLi9fc3RyZWFtX3RyYW5zZm9ybSI6Mjg1LGluaGVyaXRzOjIyNn1dLDI4NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgaTtlLmV4cG9ydHM9QSxBLlJlYWRhYmxlU3RhdGU9azt0KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7dmFyIGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lcnMoZSkubGVuZ3RofSxvPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxzPXQoImJ1ZmZlciIpLkJ1ZmZlcixsPW4uVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBjLHU9dCgidXRpbCIpO2M9dSYmdS5kZWJ1Z2xvZz91LmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGYsaCxwLGQ9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IiksbT10KCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLGc9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdhdGVyTWFyayx2PXQoIi4uL2Vycm9ycyIpLmNvZGVzLHk9di5FUlJfSU5WQUxJRF9BUkdfVFlQRSx4PXYuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixiPXYuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXz12LkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7dCgiaW5oZXJpdHMiKShBLG8pO3ZhciB3PW0uZXJyb3JPckRlc3Ryb3ksVD1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBrKGUscixuKXtpPWl8fHQoIi4vX3N0cmVhbV9kdXBsZXgiKSxlPWV8fHt9LCJib29sZWFuIiE9dHlwZW9mIG4mJihuPXIgaW5zdGFuY2VvZiBpKSx0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsbiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1nKHRoaXMsZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixuKSx0aGlzLmJ1ZmZlcj1uZXcgZCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUuZW5jb2RpbmcmJihmfHwoZj10KCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IGYoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBBKGUpe2lmKGk9aXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEEpKXJldHVybiBuZXcgQShlKTt2YXIgcj10aGlzIGluc3RhbmNlb2YgaTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBrKGUsdGhpcyxyKSx0aGlzLnJlYWRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkJiYodGhpcy5fcmVhZD1lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSkpLG8uY2FsbCh0aGlzKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7YygicmVhZGFibGVBZGRDaHVuayIsZSk7dmFyIGEsbz10Ll9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1lKW8ucmVhZGluZz0hMSxmdW5jdGlvbih0LGUpe2lmKGMoIm9uRW9mQ2h1bmsiKSxlLmVuZGVkKXJldHVybjtpZihlLmRlY29kZXIpe3ZhciByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX1lLmVuZGVkPSEwLGUuc3luYz9MKHQpOihlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGUuZW1pdHRlZFJlYWRhYmxlPSEwLEModCkpKX0odCxvKTtlbHNlIGlmKGl8fChhPWZ1bmN0aW9uKHQsZSl7dmFyIHI7bj1lLHMuaXNCdWZmZXIobil8fG4gaW5zdGFuY2VvZiBsfHwic3RyaW5nIj09dHlwZW9mIGV8fHZvaWQgMD09PWV8fHQub2JqZWN0TW9kZXx8KHI9bmV3IHkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxlKSk7dmFyIG47cmV0dXJuIHJ9KG8sZSkpLGEpdyh0LGEpO2Vsc2UgaWYoby5vYmplY3RNb2RlfHxlJiZlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgZXx8by5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1zLnByb3RvdHlwZXx8KGU9ZnVuY3Rpb24odCl7cmV0dXJuIHMuZnJvbSh0KX0oZSkpLG4pby5lbmRFbWl0dGVkP3codCxuZXcgXyk6Uyh0LG8sZSwhMCk7ZWxzZSBpZihvLmVuZGVkKXcodCxuZXcgeCk7ZWxzZXtpZihvLmRlc3Ryb3llZClyZXR1cm4hMTtvLnJlYWRpbmc9ITEsby5kZWNvZGVyJiYhcj8oZT1vLmRlY29kZXIud3JpdGUoZSksby5vYmplY3RNb2RlfHwwIT09ZS5sZW5ndGg/Uyh0LG8sZSwhMSk6UCh0LG8pKTpTKHQsbyxlLCExKX1lbHNlIG58fChvLnJlYWRpbmc9ITEsUCh0LG8pKTtyZXR1cm4hby5lbmRlZCYmKG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFya3x8MD09PW8ubGVuZ3RoKX1mdW5jdGlvbiBTKHQsZSxyLG4pe2UuZmxvd2luZyYmMD09PWUubGVuZ3RoJiYhZS5zeW5jPyhlLmF3YWl0RHJhaW49MCx0LmVtaXQoImRhdGEiLHIpKTooZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoLG4/ZS5idWZmZXIudW5zaGlmdChyKTplLmJ1ZmZlci5wdXNoKHIpLGUubmVlZFJlYWRhYmxlJiZMKHQpKSxQKHQsZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10KX19KSxBLnByb3RvdHlwZS5kZXN0cm95PW0uZGVzdHJveSxBLnByb3RvdHlwZS5fdW5kZXN0cm95PW0udW5kZXN0cm95LEEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KX0sQS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6InN0cmluZyI9PXR5cGVvZiB0JiYoKGU9ZXx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKHQ9cy5mcm9tKHQsZSksZT0iIikscj0hMCksTSh0aGlzLHQsZSwhMSxyKX0sQS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXtyZXR1cm4gTSh0aGlzLHQsbnVsbCwhMCwhMSl9LEEucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEEucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2Z8fChmPXQoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpO3ZhciByPW5ldyBmKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1yLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGk9IiI7bnVsbCE9PW47KWkrPXIud3JpdGUobi5kYXRhKSxuPW4ubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PWkmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goaSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9aS5sZW5ndGgsdGhpc307ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0PD0wfHwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp0IT10P2UuZmxvd2luZyYmZS5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDplLmxlbmd0aDoodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwNzM3NDE4MjQ/dD0xMDczNzQxODI0Oih0LS0sdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsdHw9dD4+PjE2LHQrKyksdH0odCkpLHQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDooZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEwodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGUiLGUubmVlZFJlYWRhYmxlLGUuZW1pdHRlZFJlYWRhYmxlKSxlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGMoImVtaXRSZWFkYWJsZSIsZS5mbG93aW5nKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKEMsdCkpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGVfIixlLmRlc3Ryb3llZCxlLmxlbmd0aCxlLmVuZGVkKSxlLmRlc3Ryb3llZHx8IWUubGVuZ3RoJiYhZS5lbmRlZHx8KHQuZW1pdCgicmVhZGFibGUiKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMSksZS5uZWVkUmVhZGFibGU9IWUuZmxvd2luZyYmIWUuZW5kZWQmJmUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssUih0KX1mdW5jdGlvbiBQKHQsZSl7ZS5yZWFkaW5nTW9yZXx8KGUucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayhJLHQsZSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IoOyFlLnJlYWRpbmcmJiFlLmVuZGVkJiYoZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHxlLmZsb3dpbmcmJjA9PT1lLmxlbmd0aCk7KXt2YXIgcj1lLmxlbmd0aDtpZihjKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHQucmVhZCgwKSxyPT09ZS5sZW5ndGgpYnJlYWt9ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7ZS5yZWFkYWJsZUxpc3RlbmluZz10Lmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxlLnJlc3VtZVNjaGVkdWxlZCYmIWUucGF1c2VkP2UuZmxvd2luZz0hMDp0Lmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZ0LnJlc3VtZSgpfWZ1bmN0aW9uIHoodCl7YygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdC5yZWFkKDApfWZ1bmN0aW9uIEQodCxlKXtjKCJyZXN1bWUiLGUucmVhZGluZyksZS5yZWFkaW5nfHx0LnJlYWQoMCksZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdC5lbWl0KCJyZXN1bWUiKSxSKHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApfWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtmb3IoYygiZmxvdyIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJm51bGwhPT10LnJlYWQoKTspO31mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOihlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8ocj1lLmRlY29kZXI/ZS5idWZmZXIuam9pbigiIik6MT09PWUuYnVmZmVyLmxlbmd0aD9lLmJ1ZmZlci5maXJzdCgpOmUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1lLmJ1ZmZlci5jb25zdW1lKHQsZS5kZWNvZGVyKSxyKTt2YXIgcn1mdW5jdGlvbiBCKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7YygiZW5kUmVhZGFibGUiLGUuZW5kRW1pdHRlZCksZS5lbmRFbWl0dGVkfHwoZS5lbmRlZD0hMCxyLm5leHRUaWNrKE4sZSx0KSl9ZnVuY3Rpb24gTih0LGUpe2lmKGMoImVuZFJlYWRhYmxlTlQiLHQuZW5kRW1pdHRlZCx0Lmxlbmd0aCksIXQuZW5kRW1pdHRlZCYmMD09PXQubGVuZ3RoJiYodC5lbmRFbWl0dGVkPSEwLGUucmVhZGFibGU9ITEsZS5lbWl0KCJlbmQiKSx0LmF1dG9EZXN0cm95KSl7dmFyIHI9ZS5fd3JpdGFibGVTdGF0ZTsoIXJ8fHIuYXV0b0Rlc3Ryb3kmJnIuZmluaXNoZWQpJiZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gaih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1BLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe2MoInJlYWQiLHQpLHQ9cGFyc2VJbnQodCwxMCk7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXQ7aWYoMCE9PXQmJihlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXQmJmUubmVlZFJlYWRhYmxlJiYoKDAhPT1lLmhpZ2hXYXRlck1hcms/ZS5sZW5ndGg+PWUuaGlnaFdhdGVyTWFyazplLmxlbmd0aD4wKXx8ZS5lbmRlZCkpcmV0dXJuIGMoInJlYWQ6IGVtaXRSZWFkYWJsZSIsZS5sZW5ndGgsZS5lbmRlZCksMD09PWUubGVuZ3RoJiZlLmVuZGVkP0IodGhpcyk6TCh0aGlzKSxudWxsO2lmKDA9PT0odD1FKHQsZSkpJiZlLmVuZGVkKXJldHVybiAwPT09ZS5sZW5ndGgmJkIodGhpcyksbnVsbDt2YXIgbixpPWUubmVlZFJlYWRhYmxlO3JldHVybiBjKCJuZWVkIHJlYWRhYmxlIixpKSwoMD09PWUubGVuZ3RofHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJmMoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixpPSEwKSxlLmVuZGVkfHxlLnJlYWRpbmc/YygicmVhZGluZyBvciBlbmRlZCIsaT0hMSk6aSYmKGMoImRvIHJlYWQiKSxlLnJlYWRpbmc9ITAsZS5zeW5jPSEwLDA9PT1lLmxlbmd0aCYmKGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGUuaGlnaFdhdGVyTWFyayksZS5zeW5jPSExLGUucmVhZGluZ3x8KHQ9RShyLGUpKSksbnVsbD09PShuPXQ+MD9GKHQsZSk6bnVsbCk/KGUubmVlZFJlYWRhYmxlPWUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssdD0wKTooZS5sZW5ndGgtPXQsZS5hd2FpdERyYWluPTApLDA9PT1lLmxlbmd0aCYmKGUuZW5kZWR8fChlLm5lZWRSZWFkYWJsZT0hMCksciE9PXQmJmUuZW5kZWQmJkIodGhpcykpLG51bGwhPT1uJiZ0aGlzLmVtaXQoImRhdGEiLG4pLG59LEEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3codGhpcyxuZXcgYigiX3JlYWQoKSIpKX0sQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChpLnBpcGVzQ291bnQpe2Nhc2UgMDppLnBpcGVzPXQ7YnJlYWs7Y2FzZSAxOmkucGlwZXM9W2kucGlwZXMsdF07YnJlYWs7ZGVmYXVsdDppLnBpcGVzLnB1c2godCl9aS5waXBlc0NvdW50Kz0xLGMoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsaS5waXBlc0NvdW50LGUpO3ZhciBvPSghZXx8ITEhPT1lLmVuZCkmJnQhPT1yLnN0ZG91dCYmdCE9PXIuc3RkZXJyP2w6ZztmdW5jdGlvbiBzKGUscil7Yygib251bnBpcGUiKSxlPT09biYmciYmITE9PT1yLmhhc1VucGlwZWQmJihyLmhhc1VucGlwZWQ9ITAsYygiY2xlYW51cCIpLHQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixkKSx0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG0pLHQucmVtb3ZlTGlzdGVuZXIoImRyYWluIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksdC5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixzKSxuLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGwpLG4ucmVtb3ZlTGlzdGVuZXIoImVuZCIsZyksbi5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsaCksZj0hMCwhaS5hd2FpdERyYWlufHx0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHUoKSl9ZnVuY3Rpb24gbCgpe2MoIm9uZW5kIiksdC5lbmQoKX1pLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhvKTpuLm9uY2UoImVuZCIsbyksdC5vbigidW5waXBlIixzKTt2YXIgdT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2MoInBpcGVPbkRyYWluIixlLmF3YWl0RHJhaW4pLGUuYXdhaXREcmFpbiYmZS5hd2FpdERyYWluLS0sMD09PWUuYXdhaXREcmFpbiYmYSh0LCJkYXRhIikmJihlLmZsb3dpbmc9ITAsUih0KSl9fShuKTt0Lm9uKCJkcmFpbiIsdSk7dmFyIGY9ITE7ZnVuY3Rpb24gaChlKXtjKCJvbmRhdGEiKTt2YXIgcj10LndyaXRlKGUpO2MoImRlc3Qud3JpdGUiLHIpLCExPT09ciYmKCgxPT09aS5waXBlc0NvdW50JiZpLnBpcGVzPT09dHx8aS5waXBlc0NvdW50PjEmJi0xIT09aihpLnBpcGVzLHQpKSYmIWYmJihjKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGkuYXdhaXREcmFpbiksaS5hd2FpdERyYWluKyspLG4ucGF1c2UoKSl9ZnVuY3Rpb24gcChlKXtjKCJvbmVycm9yIixlKSxnKCksdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHApLDA9PT1hKHQsImVycm9yIikmJncodCxlKX1mdW5jdGlvbiBkKCl7dC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixtKSxnKCl9ZnVuY3Rpb24gbSgpe2MoIm9uZmluaXNoIiksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpLGcoKX1mdW5jdGlvbiBnKCl7YygidW5waXBlIiksbi51bnBpcGUodCl9cmV0dXJuIG4ub24oImRhdGEiLGgpLGZ1bmN0aW9uKHQsZSxyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHQucHJlcGVuZExpc3RlbmVyKGUscik7dC5fZXZlbnRzJiZ0Ll9ldmVudHNbZV0/QXJyYXkuaXNBcnJheSh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dOnQub24oZSxyKX0odCwiZXJyb3IiLHApLHQub25jZSgiY2xvc2UiLGQpLHQub25jZSgiZmluaXNoIixtKSx0LmVtaXQoInBpcGUiLG4pLGkuZmxvd2luZ3x8KGMoInBpcGUgcmVzdW1lIiksbi5yZXN1bWUoKSksdH0sQS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj17aGFzVW5waXBlZDohMX07aWYoMD09PWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09ZS5waXBlc0NvdW50KXJldHVybiB0JiZ0IT09ZS5waXBlc3x8KHR8fCh0PWUucGlwZXMpLGUucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITEsdCYmdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXM7aWYoIXQpe3ZhciBuPWUucGlwZXMsaT1lLnBpcGVzQ291bnQ7ZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMTtmb3IodmFyIGE9MDthPGk7YSsrKW5bYV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIG89aihlLnBpcGVzLHQpO3JldHVybi0xPT09b3x8KGUucGlwZXMuc3BsaWNlKG8sMSksZS5waXBlc0NvdW50LT0xLDE9PT1lLnBpcGVzQ291bnQmJihlLnBpcGVzPWUucGlwZXNbMF0pLHQuZW1pdCgidW5waXBlIix0aGlzLHIpKSx0aGlzfSxBLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLm9uLmNhbGwodGhpcyx0LGUpLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT10PyhpLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09aS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09dCYmKGkuZW5kRW1pdHRlZHx8aS5yZWFkYWJsZUxpc3RlbmluZ3x8KGkucmVhZGFibGVMaXN0ZW5pbmc9aS5uZWVkUmVhZGFibGU9ITAsaS5mbG93aW5nPSExLGkuZW1pdHRlZFJlYWRhYmxlPSExLGMoIm9uIHJlYWRhYmxlIixpLmxlbmd0aCxpLnJlYWRpbmcpLGkubGVuZ3RoP0wodGhpcyk6aS5yZWFkaW5nfHxyLm5leHRUaWNrKHosdGhpcykpKSxufSxBLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1BLnByb3RvdHlwZS5vbixBLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyx0LGUpO3JldHVybiJyZWFkYWJsZSI9PT10JiZyLm5leHRUaWNrKE8sdGhpcyksbn0sQS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPW8ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuInJlYWRhYmxlIiE9PXQmJnZvaWQgMCE9PXR8fHIubmV4dFRpY2soTyx0aGlzKSxlfSxBLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0LmZsb3dpbmd8fChjKCJyZXN1bWUiKSx0LmZsb3dpbmc9IXQucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLHIubmV4dFRpY2soRCx0LGUpKX0odGhpcyx0KSksdC5wYXVzZWQ9ITEsdGhpc30sQS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gYygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxBLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLG49ITE7Zm9yKHZhciBpIGluIHQub24oImVuZCIsKGZ1bmN0aW9uKCl7aWYoYygid3JhcHBlZCBlbmQiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgdD1yLmRlY29kZXIuZW5kKCk7dCYmdC5sZW5ndGgmJmUucHVzaCh0KX1lLnB1c2gobnVsbCl9KSksdC5vbigiZGF0YSIsKGZ1bmN0aW9uKGkpeyhjKCJ3cmFwcGVkIGRhdGEiKSxyLmRlY29kZXImJihpPXIuZGVjb2Rlci53cml0ZShpKSksci5vYmplY3RNb2RlJiZudWxsPT1pKXx8KHIub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpJiYoZS5wdXNoKGkpfHwobj0hMCx0LnBhdXNlKCkpKX0pKSx0KXZvaWQgMD09PXRoaXNbaV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldJiYodGhpc1tpXT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBhPTA7YTxULmxlbmd0aDthKyspdC5vbihUW2FdLHRoaXMuZW1pdC5iaW5kKHRoaXMsVFthXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGUpe2MoIndyYXBwZWQgX3JlYWQiLGUpLG4mJihuPSExLHQucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWgmJihoPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvciIpKSxoKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz10KX19KSxBLl9mcm9tTGlzdD1GLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5mcm9tPWZ1bmN0aW9uKGUscil7cmV0dXJuIHZvaWQgMD09PXAmJihwPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIikpLHAoQSxlLHIpfSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjoyODEsIi4vX3N0cmVhbV9kdXBsZXgiOjI4MiwiLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yIjoyODcsIi4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCI6Mjg4LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6Mjg5LCIuL2ludGVybmFsL3N0cmVhbXMvZnJvbSI6MjkxLCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjI5MywiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6Mjk0LF9wcm9jZXNzOjI3MixidWZmZXI6ODAsZXZlbnRzOjE4MSxpbmhlcml0czoyMjYsInN0cmluZ19kZWNvZGVyLyI6MzAwLHV0aWw6Nzl9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXU7dmFyIG49dCgiLi4vZXJyb3JzIikuY29kZXMsaT1uLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGE9bi5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssbz1uLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcscz1uLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxsPXQoIi4vX3N0cmVhbV9kdXBsZXgiKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKG51bGw9PT1uKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgYSk7ci53cml0ZWNodW5rPW51bGwsci53cml0ZWNiPW51bGwsbnVsbCE9ZSYmdGhpcy5wdXNoKGUpLG4odCk7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtpLnJlYWRpbmc9ITEsKGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gdSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCk7bC5jYWxsKHRoaXMsdCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmMuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmZsdXNoJiYodGhpcy5fZmx1c2g9dC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsZil9ZnVuY3Rpb24gZigpe3ZhciB0PXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9oKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaCgoZnVuY3Rpb24oZSxyKXtoKHQsZSxyKX0pKX1mdW5jdGlvbiBoKHQsZSxyKXtpZihlKXJldHVybiB0LmVtaXQoImVycm9yIixlKTtpZihudWxsIT1yJiZ0LnB1c2gociksdC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHM7aWYodC5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBvO3JldHVybiB0LnB1c2gobnVsbCl9dCgiaW5oZXJpdHMiKSh1LGwpLHUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxsLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx0LGUpfSx1LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyKG5ldyBpKCJfdHJhbnNmb3JtKCkiKSl9LHUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYobi53cml0ZWNiPXIsbi53cml0ZWNodW5rPXQsbi53cml0ZWVuY29kaW5nPWUsIW4udHJhbnNmb3JtaW5nKXt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlOyhuLm5lZWRUcmFuc2Zvcm18fGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9fSx1LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09ZS53cml0ZWNodW5rfHxlLnRyYW5zZm9ybWluZz9lLm5lZWRUcmFuc2Zvcm09ITA6KGUudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShlLndyaXRlY2h1bmssZS53cml0ZWVuY29kaW5nLGUuYWZ0ZXJUcmFuc2Zvcm0pKX0sdS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odCxlKXtsLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsdCwoZnVuY3Rpb24odCl7ZSh0KX0pKX19LHsiLi4vZXJyb3JzIjoyODEsIi4vX3N0cmVhbV9kdXBsZXgiOjI4Mixpbmhlcml0czoyMjZ9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocixuKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXt2YXIgZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscil7dmFyIG49dC5lbnRyeTt0LmVudHJ5PW51bGw7Zm9yKDtuOyl7dmFyIGk9bi5jYWxsYmFjaztlLnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD10fShlLHQpfX12YXIgYTtlLmV4cG9ydHM9QSxBLldyaXRhYmxlU3RhdGU9azt2YXIgbz17ZGVwcmVjYXRlOnQoInV0aWwtZGVwcmVjYXRlIil9LHM9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSIpLGw9dCgiYnVmZmVyIikuQnVmZmVyLGM9bi5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIHUsZj10KCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLGg9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdhdGVyTWFyayxwPXQoIi4uL2Vycm9ycyIpLmNvZGVzLGQ9cC5FUlJfSU5WQUxJRF9BUkdfVFlQRSxtPXAuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZz1wLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyx2PXAuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSx5PXAuRVJSX1NUUkVBTV9ERVNUUk9ZRUQseD1wLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsYj1wLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELF89cC5FUlJfVU5LTk9XTl9FTkNPRElORyx3PWYuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVCgpe31mdW5jdGlvbiBrKGUsbixvKXthPWF8fHQoIi4vX3N0cmVhbV9kdXBsZXgiKSxlPWV8fHt9LCJib29sZWFuIiE9dHlwZW9mIG8mJihvPW4gaW5zdGFuY2VvZiBhKSx0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsbyYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1oKHRoaXMsZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixvKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTt2YXIgcz0hMT09PWUuZGVjb2RlU3RyaW5nczt0aGlzLmRlY29kZVN0cmluZ3M9IXMsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuX3dyaXRhYmxlU3RhdGUsaT1uLnN5bmMsYT1uLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IGc7aWYoZnVuY3Rpb24odCl7dC53cml0aW5nPSExLHQud3JpdGVjYj1udWxsLHQubGVuZ3RoLT10LndyaXRlbGVuLHQud3JpdGVsZW49MH0obiksZSkhZnVuY3Rpb24odCxlLG4saSxhKXstLWUucGVuZGluZ2NiLG4/KHIubmV4dFRpY2soYSxpKSxyLm5leHRUaWNrKFAsdCxlKSx0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx3KHQsaSkpOihhKGkpLHQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHcodCxpKSxQKHQsZSkpfSh0LG4saSxlLGEpO2Vsc2V7dmFyIG89TChuKXx8dC5kZXN0cm95ZWQ7b3x8bi5jb3JrZWR8fG4uYnVmZmVyUHJvY2Vzc2luZ3x8IW4uYnVmZmVyZWRSZXF1ZXN0fHxFKHQsbiksaT9yLm5leHRUaWNrKFMsdCxuLG8sYSk6Uyh0LG4sbyxhKX19KG4sdCl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFlLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgaSh0aGlzKX1mdW5jdGlvbiBBKGUpe3ZhciByPXRoaXMgaW5zdGFuY2VvZihhPWF8fHQoIi4vX3N0cmVhbV9kdXBsZXgiKSk7aWYoIXImJiF1LmNhbGwoQSx0aGlzKSlyZXR1cm4gbmV3IEEoZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgayhlLHRoaXMsciksdGhpcy53cml0YWJsZT0hMCxlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSkscy5jYWxsKHRoaXMpfWZ1bmN0aW9uIE0odCxlLHIsbixpLGEsbyl7ZS53cml0ZWxlbj1uLGUud3JpdGVjYj1vLGUud3JpdGluZz0hMCxlLnN5bmM9ITAsZS5kZXN0cm95ZWQ/ZS5vbndyaXRlKG5ldyB5KCJ3cml0ZSIpKTpyP3QuX3dyaXRldihpLGUub253cml0ZSk6dC5fd3JpdGUoaSxhLGUub253cml0ZSksZS5zeW5jPSExfWZ1bmN0aW9uIFModCxlLHIsbil7cnx8ZnVuY3Rpb24odCxlKXswPT09ZS5sZW5ndGgmJmUubmVlZERyYWluJiYoZS5uZWVkRHJhaW49ITEsdC5lbWl0KCJkcmFpbiIpKX0odCxlKSxlLnBlbmRpbmdjYi0tLG4oKSxQKHQsZSl9ZnVuY3Rpb24gRSh0LGUpe2UuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgcj1lLmJ1ZmZlcmVkUmVxdWVzdDtpZih0Ll93cml0ZXYmJnImJnIubmV4dCl7dmFyIG49ZS5idWZmZXJlZFJlcXVlc3RDb3VudCxhPW5ldyBBcnJheShuKSxvPWUuY29ya2VkUmVxdWVzdHNGcmVlO28uZW50cnk9cjtmb3IodmFyIHM9MCxsPSEwO3I7KWFbc109cixyLmlzQnVmfHwobD0hMSkscj1yLm5leHQscys9MTthLmFsbEJ1ZmZlcnM9bCxNKHQsZSwhMCxlLmxlbmd0aCxhLCIiLG8uZmluaXNoKSxlLnBlbmRpbmdjYisrLGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLG8ubmV4dD8oZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9by5uZXh0LG8ubmV4dD1udWxsKTplLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgaShlKSxlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3I7KXt2YXIgYz1yLmNodW5rLHU9ci5lbmNvZGluZyxmPXIuY2FsbGJhY2s7aWYoTSh0LGUsITEsZS5vYmplY3RNb2RlPzE6Yy5sZW5ndGgsYyx1LGYpLHI9ci5uZXh0LGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxlLndyaXRpbmcpYnJlYWt9bnVsbD09PXImJihlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9ZS5idWZmZXJlZFJlcXVlc3Q9cixlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5lbmRpbmcmJjA9PT10Lmxlbmd0aCYmbnVsbD09PXQuYnVmZmVyZWRSZXF1ZXN0JiYhdC5maW5pc2hlZCYmIXQud3JpdGluZ31mdW5jdGlvbiBDKHQsZSl7dC5fZmluYWwoKGZ1bmN0aW9uKHIpe2UucGVuZGluZ2NiLS0sciYmdyh0LHIpLGUucHJlZmluaXNoZWQ9ITAsdC5lbWl0KCJwcmVmaW5pc2giKSxQKHQsZSl9KSl9ZnVuY3Rpb24gUCh0LGUpe3ZhciBuPUwoZSk7aWYobiYmKGZ1bmN0aW9uKHQsZSl7ZS5wcmVmaW5pc2hlZHx8ZS5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiB0Ll9maW5hbHx8ZS5kZXN0cm95ZWQ/KGUucHJlZmluaXNoZWQ9ITAsdC5lbWl0KCJwcmVmaW5pc2giKSk6KGUucGVuZGluZ2NiKyssZS5maW5hbENhbGxlZD0hMCxyLm5leHRUaWNrKEMsdCxlKSkpfSh0LGUpLDA9PT1lLnBlbmRpbmdjYiYmKGUuZmluaXNoZWQ9ITAsdC5lbWl0KCJmaW5pc2giKSxlLmF1dG9EZXN0cm95KSkpe3ZhciBpPXQuX3JlYWRhYmxlU3RhdGU7KCFpfHxpLmF1dG9EZXN0cm95JiZpLmVuZEVtaXR0ZWQpJiZ0LmRlc3Ryb3koKX1yZXR1cm4gbn10KCJpbmhlcml0cyIpKEEscyksay5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGU9W107dDspZS5wdXNoKHQpLHQ9dC5uZXh0O3JldHVybiBlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoay5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpvLmRlcHJlY2F0ZSgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0pLCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKHQpe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4hIXUuY2FsbCh0aGlzLHQpfHx0aGlzPT09QSYmKHQmJnQuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBrKX19KSk6dT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXN9LEEucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt3KHRoaXMsbmV3IHYpfSxBLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10aGlzLl93cml0YWJsZVN0YXRlLG89ITEscz0hYS5vYmplY3RNb2RlJiYoaT10LGwuaXNCdWZmZXIoaSl8fGkgaW5zdGFuY2VvZiBjKTtyZXR1cm4gcyYmIWwuaXNCdWZmZXIodCkmJih0PWZ1bmN0aW9uKHQpe3JldHVybiBsLmZyb20odCl9KHQpKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZSxlPW51bGwpLHM/ZT0iYnVmZmVyIjplfHwoZT1hLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVQpLGEuZW5kaW5nP2Z1bmN0aW9uKHQsZSl7dmFyIG49bmV3IGI7dyh0LG4pLHIubmV4dFRpY2soZSxuKX0odGhpcyxuKTooc3x8ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE7cmV0dXJuIG51bGw9PT1uP2E9bmV3IHg6InN0cmluZyI9PXR5cGVvZiBufHxlLm9iamVjdE1vZGV8fChhPW5ldyBkKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSxuKSksIWF8fCh3KHQsYSksci5uZXh0VGljayhpLGEpLCExKX0odGhpcyxhLHQsbikpJiYoYS5wZW5kaW5nY2IrKyxvPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZighcil7dmFyIG89ZnVuY3Rpb24odCxlLHIpe3Qub2JqZWN0TW9kZXx8ITE9PT10LmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgZXx8KGU9bC5mcm9tKGUscikpO3JldHVybiBlfShlLG4saSk7biE9PW8mJihyPSEwLGk9ImJ1ZmZlciIsbj1vKX12YXIgcz1lLm9iamVjdE1vZGU/MTpuLmxlbmd0aDtlLmxlbmd0aCs9czt2YXIgYz1lLmxlbmd0aDxlLmhpZ2hXYXRlck1hcms7Y3x8KGUubmVlZERyYWluPSEwKTtpZihlLndyaXRpbmd8fGUuY29ya2VkKXt2YXIgdT1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpuLGVuY29kaW5nOmksaXNCdWY6cixjYWxsYmFjazphLG5leHQ6bnVsbH0sdT91Lm5leHQ9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OmUuYnVmZmVyZWRSZXF1ZXN0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdCxlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgTSh0LGUsITEscyxuLGksYSk7cmV0dXJuIGN9KHRoaXMsYSxzLHQsZSxuKSksb30sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7dC5jb3JrZWQmJih0LmNvcmtlZC0tLHQud3JpdGluZ3x8dC5jb3JrZWR8fHQuYnVmZmVyUHJvY2Vzc2luZ3x8IXQuYnVmZmVyZWRSZXF1ZXN0fHxFKHRoaXMsdCkpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHQrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgXyh0KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dCx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxBLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3IobmV3IG0oIl93cml0ZSgpIikpfSxBLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsQS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0PyhuPXQsdD1udWxsLGU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUsZT1udWxsKSxudWxsIT10JiZ0aGlzLndyaXRlKHQsZSksaS5jb3JrZWQmJihpLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGkuZW5kaW5nfHxmdW5jdGlvbih0LGUsbil7ZS5lbmRpbmc9ITAsUCh0LGUpLG4mJihlLmZpbmlzaGVkP3IubmV4dFRpY2sobik6dC5vbmNlKCJmaW5pc2giLG4pKTtlLmVuZGVkPSEwLHQud3JpdGFibGU9ITF9KHRoaXMsaSxuKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD10KX19KSxBLnByb3RvdHlwZS5kZXN0cm95PWYuZGVzdHJveSxBLnByb3RvdHlwZS5fdW5kZXN0cm95PWYudW5kZXN0cm95LEEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjoyODEsIi4vX3N0cmVhbV9kdXBsZXgiOjI4MiwiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiOjI4OSwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIjoyOTMsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iOjI5NCxfcHJvY2VzczoyNzIsYnVmZmVyOjgwLGluaGVyaXRzOjIyNiwidXRpbC1kZXByZWNhdGUiOjMyNX1dLDI4NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG47ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9dmFyIGE9dCgiLi9lbmQtb2Ytc3RyZWFtIiksbz1TeW1ib2woImxhc3RSZXNvbHZlIikscz1TeW1ib2woImxhc3RSZWplY3QiKSxsPVN5bWJvbCgiZXJyb3IiKSxjPVN5bWJvbCgiZW5kZWQiKSx1PVN5bWJvbCgibGFzdFByb21pc2UiKSxmPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGg9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBwKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX1mdW5jdGlvbiBkKHQpe3ZhciBlPXRbb107aWYobnVsbCE9PWUpe3ZhciByPXRbaF0ucmVhZCgpO251bGwhPT1yJiYodFt1XT1udWxsLHRbb109bnVsbCx0W3NdPW51bGwsZShwKHIsITEpKSl9fWZ1bmN0aW9uIG0odCl7ci5uZXh0VGljayhkLHQpfXZhciBnPU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSksdj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2hdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXNbbF07aWYobnVsbCE9PWUpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKHRoaXNbY10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKHZvaWQgMCwhMCkpO2lmKHRoaXNbaF0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxuKXtyLm5leHRUaWNrKChmdW5jdGlvbigpe3RbbF0/bih0W2xdKTplKHAodm9pZCAwLCEwKSl9KSl9KSk7dmFyIG4saT10aGlzW3VdO2lmKGkpbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3QudGhlbigoZnVuY3Rpb24oKXtlW2NdP3IocCh2b2lkIDAsITApKTplW2ZdKHIsbil9KSxuKX19KGksdGhpcykpO2Vsc2V7dmFyIGE9dGhpc1toXS5yZWFkKCk7aWYobnVsbCE9PWEpcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKGEsITEpKTtuPW5ldyBQcm9taXNlKHRoaXNbZl0pfXJldHVybiB0aGlzW3VdPW4sbn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobiwicmV0dXJuIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt0W2hdLmRlc3Ryb3kobnVsbCwoZnVuY3Rpb24odCl7dD9yKHQpOmUocCh2b2lkIDAsITApKX0pKX0pKX0pKSxuKSxnKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1PYmplY3QuY3JlYXRlKHYsKGkoZT17fSxoLHt2YWx1ZTp0LHdyaXRhYmxlOiEwfSksaShlLG8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKGUscyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkoZSxsLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaShlLGMse3ZhbHVlOnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGkoZSxmLHt2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBuPXJbaF0ucmVhZCgpO24/KHJbdV09bnVsbCxyW29dPW51bGwscltzXT1udWxsLHQocChuLCExKSkpOihyW29dPXQscltzXT1lKX0sd3JpdGFibGU6ITB9KSxlKSk7cmV0dXJuIHJbdV09bnVsbCxhKHQsKGZ1bmN0aW9uKHQpe2lmKHQmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT10LmNvZGUpe3ZhciBlPXJbc107cmV0dXJuIG51bGwhPT1lJiYoclt1XT1udWxsLHJbb109bnVsbCxyW3NdPW51bGwsZSh0KSksdm9pZChyW2xdPXQpfXZhciBuPXJbb107bnVsbCE9PW4mJihyW3VdPW51bGwscltvXT1udWxsLHJbc109bnVsbCxuKHAodm9pZCAwLCEwKSkpLHJbY109ITB9KSksdC5vbigicmVhZGFibGUiLG0uYmluZChudWxsLHIpKSxyfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9lbmQtb2Ytc3RyZWFtIjoyOTAsX3Byb2Nlc3M6MjcyfV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX12YXIgbz10KCJidWZmZXIiKS5CdWZmZXIscz10KCJ1dGlsIikuaW5zcGVjdCxsPXMmJnMuY3VzdG9tfHwiaW5zcGVjdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGUscixjO3JldHVybiBlPXQsKHI9W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1lKSx0aGlzLmhlYWQ9ZSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgZT10aGlzLmhlYWQscj0iIitlLmRhdGE7ZT1lLm5leHQ7KXIrPXQrZS5kYXRhO3JldHVybiByfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIG8uYWxsb2MoMCk7Zm9yKHZhciBlLHIsbixpPW8uYWxsb2NVbnNhZmUodD4+PjApLGE9dGhpcy5oZWFkLHM9MDthOyllPWEuZGF0YSxyPWksbj1zLG8ucHJvdG90eXBlLmNvcHkuY2FsbChlLHIsbikscys9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gaX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHQ8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsdCksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UodCkpOnI9dD09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6ZT90aGlzLl9nZXRTdHJpbmcodCk6dGhpcy5fZ2V0QnVmZmVyKHQpLHJ9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhlYWQscj0xLG49ZS5kYXRhO2Zvcih0LT1uLmxlbmd0aDtlPWUubmV4dDspe3ZhciBpPWUuZGF0YSxhPXQ+aS5sZW5ndGg/aS5sZW5ndGg6dDtpZihhPT09aS5sZW5ndGg/bis9aTpuKz1pLnNsaWNlKDAsdCksMD09KHQtPWEpKXthPT09aS5sZW5ndGg/KCsrcixlLm5leHQ/dGhpcy5oZWFkPWUubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9ZSxlLmRhdGE9aS5zbGljZShhKSk7YnJlYWt9KytyfXJldHVybiB0aGlzLmxlbmd0aC09cixufX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9by5hbGxvY1Vuc2FmZSh0KSxyPXRoaXMuaGVhZCxuPTE7Zm9yKHIuZGF0YS5jb3B5KGUpLHQtPXIuZGF0YS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgaT1yLmRhdGEsYT10PmkubGVuZ3RoP2kubGVuZ3RoOnQ7aWYoaS5jb3B5KGUsZS5sZW5ndGgtdCwwLGEpLDA9PSh0LT1hKSl7YT09PWkubGVuZ3RoPygrK24sci5uZXh0P3RoaXMuaGVhZD1yLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXIsci5kYXRhPWkuc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gdGhpcy5sZW5ndGgtPW4sZX19LHtrZXk6bCx2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBzKHRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/bihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOm4oT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9KHt9LGUse2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmEoZS5wcm90b3R5cGUsciksYyYmYShlLGMpLHR9KCl9LHtidWZmZXI6ODAsdXRpbDo3OX1dLDI4OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe2kodCxlKSxuKHQpfWZ1bmN0aW9uIG4odCl7dC5fd3JpdGFibGVTdGF0ZSYmIXQuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx0Ll9yZWFkYWJsZVN0YXRlJiYhdC5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHQuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBpKHQsZSl7dC5lbWl0KCJlcnJvciIsZSl9ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKGUsYSl7dmFyIG89dGhpcyxzPXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkLGw9dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIHN8fGw/KGE/YShlKTplJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHQubmV4dFRpY2soaSx0aGlzLGUpKTp0Lm5leHRUaWNrKGksdGhpcyxlKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGV8fG51bGwsKGZ1bmN0aW9uKGUpeyFhJiZlP28uX3dyaXRhYmxlU3RhdGU/by5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/dC5uZXh0VGljayhuLG8pOihvLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx0Lm5leHRUaWNrKHIsbyxlKSk6dC5uZXh0VGljayhyLG8sZSk6YT8odC5uZXh0VGljayhuLG8pLGEoZSkpOnQubmV4dFRpY2sobixvKX0pKSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbih0LGUpe3ZhciByPXQuX3JlYWRhYmxlU3RhdGUsbj10Ll93cml0YWJsZVN0YXRlO3ImJnIuYXV0b0Rlc3Ryb3l8fG4mJm4uYXV0b0Rlc3Ryb3k/dC5kZXN0cm95KGUpOnQuZW1pdCgiZXJyb3IiLGUpfX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6MjcyfV0sMjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2Vycm9ycyIpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIGkoKXt9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiB0KGUsbnVsbCxyKTtyfHwocj17fSksYT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighZSl7ZT0hMDtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyO2krKyluW2ldPWFyZ3VtZW50c1tpXTt0LmFwcGx5KHRoaXMsbil9fX0oYXx8aSk7dmFyIG89ci5yZWFkYWJsZXx8ITEhPT1yLnJlYWRhYmxlJiZlLnJlYWRhYmxlLHM9ci53cml0YWJsZXx8ITEhPT1yLndyaXRhYmxlJiZlLndyaXRhYmxlLGw9ZnVuY3Rpb24oKXtlLndyaXRhYmxlfHx1KCl9LGM9ZS5fd3JpdGFibGVTdGF0ZSYmZS5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCx1PWZ1bmN0aW9uKCl7cz0hMSxjPSEwLG98fGEuY2FsbChlKX0sZj1lLl9yZWFkYWJsZVN0YXRlJiZlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsaD1mdW5jdGlvbigpe289ITEsZj0hMCxzfHxhLmNhbGwoZSl9LHA9ZnVuY3Rpb24odCl7YS5jYWxsKGUsdCl9LGQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gbyYmIWY/KGUuX3JlYWRhYmxlU3RhdGUmJmUuX3JlYWRhYmxlU3RhdGUuZW5kZWR8fCh0PW5ldyBuKSxhLmNhbGwoZSx0KSk6cyYmIWM/KGUuX3dyaXRhYmxlU3RhdGUmJmUuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fCh0PW5ldyBuKSxhLmNhbGwoZSx0KSk6dm9pZCAwfSxtPWZ1bmN0aW9uKCl7ZS5yZXEub24oImZpbmlzaCIsdSl9O3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFib3J0fShlKT9zJiYhZS5fd3JpdGFibGVTdGF0ZSYmKGUub24oImVuZCIsbCksZS5vbigiY2xvc2UiLGwpKTooZS5vbigiY29tcGxldGUiLHUpLGUub24oImFib3J0IixkKSxlLnJlcT9tKCk6ZS5vbigicmVxdWVzdCIsbSkpLGUub24oImVuZCIsaCksZS5vbigiZmluaXNoIix1KSwhMSE9PXIuZXJyb3ImJmUub24oImVycm9yIixwKSxlLm9uKCJjbG9zZSIsZCksZnVuY3Rpb24oKXtlLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsdSksZS5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLGQpLGUucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLG0pLGUucmVxJiZlLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGwpLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixsKSxlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHUpLGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsaCksZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHApLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixkKX19fSx7Ii4uLy4uLy4uL2Vycm9ycyI6MjgxfV0sMjkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LHt9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG47dmFyIGk9dCgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMsYT1pLkVSUl9NSVNTSU5HX0FSR1Msbz1pLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIHModCl7aWYodCl0aHJvdyB0fWZ1bmN0aW9uIGwoZSxyLGksYSl7YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCx0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KGEpO3ZhciBzPSExO2Uub24oImNsb3NlIiwoZnVuY3Rpb24oKXtzPSEwfSkpLHZvaWQgMD09PW4mJihuPXQoIi4vZW5kLW9mLXN0cmVhbSIpKSxuKGUse3JlYWRhYmxlOnIsd3JpdGFibGU6aX0sKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIGEodCk7cz0hMCxhKCl9KSk7dmFyIGw9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFzJiYhbClyZXR1cm4gbD0hMCxmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFib3J0fShlKT9lLmFib3J0KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveT9lLmRlc3Ryb3koKTp2b2lkIGEodHx8bmV3IG8oInBpcGUiKSl9fWZ1bmN0aW9uIGModCl7dCgpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5waXBlKGUpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQubGVuZ3RoPyJmdW5jdGlvbiIhPXR5cGVvZiB0W3QubGVuZ3RoLTFdP3M6dC5wb3AoKTpzfWUuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3ZhciBuLGk9ZihlKTtpZihBcnJheS5pc0FycmF5KGVbMF0pJiYoZT1lWzBdKSxlLmxlbmd0aDwyKXRocm93IG5ldyBhKCJzdHJlYW1zIik7dmFyIG89ZS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIGE9cjxlLmxlbmd0aC0xO3JldHVybiBsKHQsYSxyPjAsKGZ1bmN0aW9uKHQpe258fChuPXQpLHQmJm8uZm9yRWFjaChjKSxhfHwoby5mb3JFYWNoKGMpLGkobikpfSkpfSkpO3JldHVybiBlLnJlZHVjZSh1KX19LHsiLi4vLi4vLi4vZXJyb3JzIjoyODEsIi4vZW5kLW9mLXN0cmVhbSI6MjkwfV0sMjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2Vycm9ycyIpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsIT10LmhpZ2hXYXRlck1hcms/dC5oaWdoV2F0ZXJNYXJrOmU/dFtyXTpudWxsfShlLGkscik7aWYobnVsbCE9YSl7aWYoIWlzRmluaXRlKGEpfHxNYXRoLmZsb29yKGEpIT09YXx8YTwwKXRocm93IG5ldyBuKGk/cjoiaGlnaFdhdGVyTWFyayIsYSk7cmV0dXJuIE1hdGguZmxvb3IoYSl9cmV0dXJuIHQub2JqZWN0TW9kZT8xNjoxNjM4NH19fSx7Ii4uLy4uLy4uL2Vycm9ycyI6MjgxfV0sMjk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcn0se2V2ZW50czoxODF9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocixuKXsoZnVuY3Rpb24oKXt2YXIgcj10KCJhc3NlcnQiKSxpPXQoImRlYnVnIikoInN0cmVhbS1wYXJzZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuX3RyYW5zZm9ybSxyPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Ll93cml0ZTtpZighZSYmIXIpdGhyb3cgbmV3IEVycm9yKCJtdXN0IHBhc3MgYSBXcml0YWJsZSBvciBUcmFuc2Zvcm0gc3RyZWFtIGluIik7aSgiZXh0ZW5kaW5nIFBhcnNlciBpbnRvIHN0cmVhbSIpLHQuX2J5dGVzPW8sdC5fc2tpcEJ5dGVzPXMsZSYmKHQuX3Bhc3N0aHJvdWdoPWwpO2U/dC5fdHJhbnNmb3JtPXU6dC5fd3JpdGU9Y307ZnVuY3Rpb24gYSh0KXtpKCJpbml0aWFsaXppbmcgcGFyc2VyIHN0cmVhbSIpLHQuX3BhcnNlckJ5dGVzTGVmdD0wLHQuX3BhcnNlckJ1ZmZlcnM9W10sdC5fcGFyc2VyQnVmZmVyZWQ9MCx0Ll9wYXJzZXJTdGF0ZT0tMSx0Ll9wYXJzZXJDYWxsYmFjaz1udWxsLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnB1c2gmJih0Ll9wYXJzZXJPdXRwdXQ9dC5wdXNoLmJpbmQodCkpLHQuX3BhcnNlckluaXQ9ITB9ZnVuY3Rpb24gbyh0LGUpe3IoIXRoaXMuX3BhcnNlckNhbGxiYWNrLCd0aGVyZSBpcyBhbHJlYWR5IGEgImNhbGxiYWNrIiBzZXQhJykscihpc0Zpbml0ZSh0KSYmdD4wLCdjYW4gb25seSBidWZmZXIgYSBmaW5pdGUgbnVtYmVyIG9mIGJ5dGVzID4gMCwgZ290ICInK3QrJyInKSx0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoImJ1ZmZlcmluZyAlbyBieXRlcyIsdCksdGhpcy5fcGFyc2VyQnl0ZXNMZWZ0PXQsdGhpcy5fcGFyc2VyQ2FsbGJhY2s9ZSx0aGlzLl9wYXJzZXJTdGF0ZT0wfWZ1bmN0aW9uIHModCxlKXtyKCF0aGlzLl9wYXJzZXJDYWxsYmFjaywndGhlcmUgaXMgYWxyZWFkeSBhICJjYWxsYmFjayIgc2V0IScpLHIodD4wLCdjYW4gb25seSBza2lwID4gMCBieXRlcywgZ290ICInK3QrJyInKSx0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoInNraXBwaW5nICVvIGJ5dGVzIix0KSx0aGlzLl9wYXJzZXJCeXRlc0xlZnQ9dCx0aGlzLl9wYXJzZXJDYWxsYmFjaz1lLHRoaXMuX3BhcnNlclN0YXRlPTF9ZnVuY3Rpb24gbCh0LGUpe3IoIXRoaXMuX3BhcnNlckNhbGxiYWNrLCdUaGVyZSBpcyBhbHJlYWR5IGEgImNhbGxiYWNrIiBzZXQhJykscih0PjAsJ2NhbiBvbmx5IHBhc3MgdGhyb3VnaCA+IDAgYnl0ZXMsIGdvdCAiJyt0KyciJyksdGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJwYXNzaW5nIHRocm91Z2ggJW8gYnl0ZXMiLHQpLHRoaXMuX3BhcnNlckJ5dGVzTGVmdD10LHRoaXMuX3BhcnNlckNhbGxiYWNrPWUsdGhpcy5fcGFyc2VyU3RhdGU9Mn1mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoIndyaXRlKCVvIGJ5dGVzKSIsdC5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lKSxoKHRoaXMsdCxudWxsLHIpfWZ1bmN0aW9uIHUodCxlLHIpe3RoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgidHJhbnNmb3JtKCVvIGJ5dGVzKSIsdC5sZW5ndGgpLCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10aGlzLl9wYXJzZXJPdXRwdXQpLGgodGhpcyx0LGUscil9ZnVuY3Rpb24gZih0LGUscixhKXtpZih0Ll9wYXJzZXJCeXRlc0xlZnQtPWUubGVuZ3RoLGkoIiVvIGJ5dGVzIGxlZnQgZm9yIHN0cmVhbSBwaWVjZSIsdC5fcGFyc2VyQnl0ZXNMZWZ0KSwwPT09dC5fcGFyc2VyU3RhdGU/KHQuX3BhcnNlckJ1ZmZlcnMucHVzaChlKSx0Ll9wYXJzZXJCdWZmZXJlZCs9ZS5sZW5ndGgpOjI9PT10Ll9wYXJzZXJTdGF0ZSYmcihlKSwwIT09dC5fcGFyc2VyQnl0ZXNMZWZ0KXJldHVybiBhO3ZhciBvPXQuX3BhcnNlckNhbGxiYWNrO2lmKG8mJjA9PT10Ll9wYXJzZXJTdGF0ZSYmdC5fcGFyc2VyQnVmZmVycy5sZW5ndGg+MSYmKGU9bi5jb25jYXQodC5fcGFyc2VyQnVmZmVycyx0Ll9wYXJzZXJCdWZmZXJlZCkpLDAhPT10Ll9wYXJzZXJTdGF0ZSYmKGU9bnVsbCksdC5fcGFyc2VyQ2FsbGJhY2s9bnVsbCx0Ll9wYXJzZXJCdWZmZXJlZD0wLHQuX3BhcnNlclN0YXRlPS0xLHQuX3BhcnNlckJ1ZmZlcnMuc3BsaWNlKDApLG8pe3ZhciBzPVtdO2UmJnMucHVzaChlKSxyJiZzLnB1c2gocik7dmFyIGw9by5sZW5ndGg+cy5sZW5ndGg7bCYmcy5wdXNoKHAoYSkpO3ZhciBjPW8uYXBwbHkodCxzKTtpZighbHx8YT09PWMpcmV0dXJuIGF9fXZhciBoPXAoKGZ1bmN0aW9uIHQoZSxyLG4saSl7cmV0dXJuIGUuX3BhcnNlckJ5dGVzTGVmdDw9MD9pKG5ldyBFcnJvcigiZ290IGRhdGEgYnV0IG5vdCBjdXJyZW50bHkgcGFyc2luZyBhbnl0aGluZyIpKTpyLmxlbmd0aDw9ZS5fcGFyc2VyQnl0ZXNMZWZ0P2Z1bmN0aW9uKCl7cmV0dXJuIGYoZSxyLG4saSl9OmZ1bmN0aW9uKCl7dmFyIGE9ci5zbGljZSgwLGUuX3BhcnNlckJ5dGVzTGVmdCk7cmV0dXJuIGYoZSxhLG4sKGZ1bmN0aW9uKG8pe3JldHVybiBvP2kobyk6ci5sZW5ndGg+YS5sZW5ndGg/ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIuc2xpY2UoYS5sZW5ndGgpLG4saSl9OnZvaWQgMH0pKX19KSk7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ImZ1bmN0aW9uIj09dHlwZW9mIGU7KWU9ZSgpO3JldHVybiBlfX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksdCgiYnVmZmVyIikuQnVmZmVyKX0se19wcm9jZXNzOjI3Mixhc3NlcnQ6NzEsYnVmZmVyOjgwLGRlYnVnOjI5Nn1dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXsoZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dmFyIHQ7dHJ5e3Q9ci5zdG9yYWdlLmRlYnVnfWNhdGNoKHQpe31yZXR1cm4hdCYmdm9pZCAwIT09biYmImVudiJpbiBuJiYodD1uLmVudi5ERUJVRyksdH0ocj1lLmV4cG9ydHM9dCgiLi9kZWJ1ZyIpKS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUubG9nJiZGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlLGFyZ3VtZW50cyl9LHIuZm9ybWF0QXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnVzZUNvbG9ycztpZih0WzBdPShlPyIlYyI6IiIpK3RoaXMubmFtZXNwYWNlKyhlPyIgJWMiOiIgIikrdFswXSsoZT8iJWMgIjoiICIpKyIrIityLmh1bWFuaXplKHRoaXMuZGlmZiksIWUpcmV0dXJuO3ZhciBuPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxuLCJjb2xvcjogaW5oZXJpdCIpO3ZhciBpPTAsYT0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLChmdW5jdGlvbih0KXsiJSUiIT09dCYmKGkrKywiJWMiPT09dCYmKGE9aSkpfSkpLHQuc3BsaWNlKGEsMCxuKX0sci5zYXZlPWZ1bmN0aW9uKHQpe3RyeXtudWxsPT10P3Iuc3RvcmFnZS5yZW1vdmVJdGVtKCJkZWJ1ZyIpOnIuc3RvcmFnZS5kZWJ1Zz10fWNhdGNoKHQpe319LHIubG9hZD1pLHIudXNlQ29sb3JzPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiYicmVuZGVyZXIiPT09d2luZG93LnByb2Nlc3MudHlwZSlyZXR1cm4hMDtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9LHIuc3RvcmFnZT0idW5kZWZpbmVkIiE9dHlwZW9mIGNocm9tZSYmdm9pZCAwIT09Y2hyb21lLnN0b3JhZ2U/Y2hyb21lLnN0b3JhZ2UubG9jYWw6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2V9Y2F0Y2godCl7fX0oKSxyLmNvbG9ycz1bImxpZ2h0c2VhZ3JlZW4iLCJmb3Jlc3RncmVlbiIsImdvbGRlbnJvZCIsImRvZGdlcmJsdWUiLCJkYXJrb3JjaGlkIiwiY3JpbXNvbiJdLHIuZm9ybWF0dGVycy5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2godCl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK3QubWVzc2FnZX19LHIuZW5hYmxlKGkoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vZGVidWciOjI5NyxfcHJvY2VzczoyNzJ9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoKXtpZihlLmVuYWJsZWQpe3ZhciB0PWUsaT0rbmV3IERhdGUsYT1pLShufHxpKTt0LmRpZmY9YSx0LnByZXY9bix0LmN1cnI9aSxuPWk7Zm9yKHZhciBvPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxzPTA7czxvLmxlbmd0aDtzKyspb1tzXT1hcmd1bWVudHNbc107b1swXT1yLmNvZXJjZShvWzBdKSwic3RyaW5nIiE9dHlwZW9mIG9bMF0mJm8udW5zaGlmdCgiJU8iKTt2YXIgbD0wO29bMF09b1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywoZnVuY3Rpb24oZSxuKXtpZigiJSUiPT09ZSlyZXR1cm4gZTtsKys7dmFyIGk9ci5mb3JtYXR0ZXJzW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXt2YXIgYT1vW2xdO2U9aS5jYWxsKHQsYSksby5zcGxpY2UobCwxKSxsLS19cmV0dXJuIGV9KSksci5mb3JtYXRBcmdzLmNhbGwodCxvKTt2YXIgYz1lLmxvZ3x8ci5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7Yy5hcHBseSh0LG8pfX1yZXR1cm4gZS5uYW1lc3BhY2U9dCxlLmVuYWJsZWQ9ci5lbmFibGVkKHQpLGUudXNlQ29sb3JzPXIudXNlQ29sb3JzKCksZS5jb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxuPTA7Zm9yKGUgaW4gdCluPShuPDw1KS1uK3QuY2hhckNvZGVBdChlKSxufD0wO3JldHVybiByLmNvbG9yc1tNYXRoLmFicyhuKSVyLmNvbG9ycy5sZW5ndGhdfSh0KSwiZnVuY3Rpb24iPT10eXBlb2Ygci5pbml0JiZyLmluaXQoZSksZX0ocj1lLmV4cG9ydHM9aS5kZWJ1Zz1pLmRlZmF1bHQ9aSkuY29lcmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFja3x8dC5tZXNzYWdlOnR9LHIuZGlzYWJsZT1mdW5jdGlvbigpe3IuZW5hYmxlKCIiKX0sci5lbmFibGU9ZnVuY3Rpb24odCl7ci5zYXZlKHQpLHIubmFtZXM9W10sci5za2lwcz1bXTtmb3IodmFyIGU9KCJzdHJpbmciPT10eXBlb2YgdD90OiIiKS5zcGxpdCgvW1xzLF0rLyksbj1lLmxlbmd0aCxpPTA7aTxuO2krKyllW2ldJiYoIi0iPT09KHQ9ZVtpXS5yZXBsYWNlKC9cKi9nLCIuKj8iKSlbMF0/ci5za2lwcy5wdXNoKG5ldyBSZWdFeHAoIl4iK3Quc3Vic3RyKDEpKyIkIikpOnIubmFtZXMucHVzaChuZXcgUmVnRXhwKCJeIit0KyIkIikpKX0sci5lbmFibGVkPWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKGU9MCxuPXIuc2tpcHMubGVuZ3RoO2U8bjtlKyspaWYoci5za2lwc1tlXS50ZXN0KHQpKXJldHVybiExO2ZvcihlPTAsbj1yLm5hbWVzLmxlbmd0aDtlPG47ZSsrKWlmKHIubmFtZXNbZV0udGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX0sci5odW1hbml6ZT10KCJtcyIpLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e319LHttczoyOTh9XSwyOTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0xZTMsaT02ZTQsYT02MCppLG89MjQqYTtmdW5jdGlvbiBzKHQsZSxyKXtpZighKHQ8ZSkpcmV0dXJuIHQ8MS41KmU/TWF0aC5mbG9vcih0L2UpKyIgIityOk1hdGguY2VpbCh0L2UpKyIgIityKyJzIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByLGw9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1sJiZ0Lmxlbmd0aD4wKXJldHVybiBmdW5jdGlvbih0KXtpZigodD1TdHJpbmcodCkpLmxlbmd0aD4xMDApcmV0dXJuO3ZhciBlPS9eKCg/OlxkKyk/XC4/XGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWModCk7aWYoIWUpcmV0dXJuO3ZhciByPXBhcnNlRmxvYXQoZVsxXSk7c3dpdGNoKChlWzJdfHwibXMiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInllYXJzIjpjYXNlInllYXIiOmNhc2UieXJzIjpjYXNlInlyIjpjYXNlInkiOnJldHVybiAzMTU1NzZlNSpyO2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIHIqbztjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKmE7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcippO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIHIqbjtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19KHQpO2lmKCJudW1iZXIiPT09bCYmITE9PT1pc05hTih0KSlyZXR1cm4gZS5sb25nP3Mocj10LG8sImRheSIpfHxzKHIsYSwiaG91ciIpfHxzKHIsaSwibWludXRlIil8fHMocixuLCJzZWNvbmQiKXx8cisiIG1zIjpmdW5jdGlvbih0KXtpZih0Pj1vKXJldHVybiBNYXRoLnJvdW5kKHQvbykrImQiO2lmKHQ+PWEpcmV0dXJuIE1hdGgucm91bmQodC9hKSsiaCI7aWYodD49aSlyZXR1cm4gTWF0aC5yb3VuZCh0L2kpKyJtIjtpZih0Pj1uKXJldHVybiBNYXRoLnJvdW5kKHQvbikrInMiO3JldHVybiB0KyJtcyJ9KHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX19LHt9XSwyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKSk7dmFyIGk9bi5wYXJzZSh0LHtmbGF0OiEwLGJyYWNrZXRzOnIuaWdub3JlfSksYT1pWzBdLnNwbGl0KGUpO2lmKHIuZXNjYXBlKXtmb3IodmFyIG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdOyJcXCI9PT1sW2wubGVuZ3RoLTFdJiYiXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6MjQzfV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2goKHQ9IiIrdCkmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBhKHQpe3ZhciBlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJ1dGY4Ijtmb3IodmFyIGU7Oylzd2l0Y2godCl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHQ7ZGVmYXVsdDppZihlKXJldHVybjt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLGU9ITB9fSh0KTtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihuLmlzRW5jb2Rpbmc9PT1pfHwhaSh0KSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3JldHVybiBlfHx0fSh0KSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1sLHRoaXMuZW5kPWMsZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1zLGU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PXUsdGhpcy5lbmQ9ZixlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1oLHZvaWQodGhpcy5lbmQ9cCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKGUpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTEyNz8wOnQ+PjU9PTY/Mjp0Pj40PT0xND8zOnQ+PjM9PTMwPzQ6dD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKHQpe3ZhciBlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbih0LGUscil7aWYoMTI4IT0oMTkyJmVbMF0pKXJldHVybiB0Lmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYodC5sYXN0TmVlZD4xJiZlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImZVsxXSkpcmV0dXJuIHQubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZih0Lmxhc3ROZWVkPjImJmUubGVuZ3RoPjImJjEyOCE9KDE5MiZlWzJdKSlyZXR1cm4gdC5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyx0KTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoPyh0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHQubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXQubGVuZ3RoKSl9ZnVuY3Rpb24gbCh0LGUpe2lmKCh0Lmxlbmd0aC1lKSUyPT0wKXt2YXIgcj10LnRvU3RyaW5nKCJ1dGYxNmxlIixlKTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXSx0LnRvU3RyaW5nKCJ1dGYxNmxlIixlLHQubGVuZ3RoLTEpfWZ1bmN0aW9uIGModCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiBlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAscil9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSh0Lmxlbmd0aC1lKSUzO3JldHVybiAwPT09cj90LnRvU3RyaW5nKCJiYXNlNjQiLGUpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLDE9PT1yP3RoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0Lmxlbmd0aC0xXSksdC50b1N0cmluZygiYmFzZTY0IixlLHQubGVuZ3RoLXIpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTplfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIn1yLlN0cmluZ0RlY29kZXI9YSxhLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIGUscjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oZT10aGlzLmZpbGxMYXN0KHQpKSlyZXR1cm4iIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPHQubGVuZ3RoP2U/ZSt0aGlzLnRleHQodCxyKTp0aGlzLnRleHQodCxyKTplfHwiIn0sYS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSsiXHVmZmZkIjplfSxhLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPW8oZVtuXSk7aWYoaT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTEpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTIpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYoMj09PWk/aT0wOnQubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLHQsZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHQudG9TdHJpbmcoInV0ZjgiLGUpO3RoaXMubGFzdFRvdGFsPXI7dmFyIG49dC5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksdC50b1N0cmluZygidXRmOCIsZSxuKX0sYS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odCl7aWYodGhpcy5sYXN0TmVlZDw9dC5sZW5ndGgpcmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjI3OX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgbT1wW2RdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxjLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe3ZhciBnPVtdLHY9W10seT0wO2ZvcihkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSxnLnB1c2goeCksdi5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaChnKTt2YXIgYj1uZXcgQXJyYXkoeSk7Zm9yKGQ9MDtkPHYubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPHZbZF0ubGVuZ3RoO18rKyliWy0teV09dltkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcihsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7dmFyIGQ9aFtsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGM9W2RbMF1dO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKWRbbV0hPT1kW20tMV0mJmMucHVzaChkW21dKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSwzMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9LGk9MipNYXRoLlBJLGE9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55O3JldHVybnt4Om4qKHMqPWUpLWkqKGwqPXIpK2EseTppKnMrbipsK299fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MS41NzA3OTYzMjY3OTQ4OTY2PT09ZT8uNTUxOTE1MDI0NDk0Oi0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy0uNTUxOTE1MDI0NDk0OjQvMypNYXRoLnRhbihlLzQpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqcitlKm47cmV0dXJuIGk+MSYmKGk9MSksaTwtMSYmKGk9LTEpLCh0Km4tZSpyPDA/LTE6MSkqTWF0aC5hY29zKGkpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsZj10LnJ5LGg9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09aD8wOmgsZD10LmxhcmdlQXJjRmxhZyxtPXZvaWQgMD09PWQ/MDpkLGc9dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1nPzA6Zyx5PVtdO2lmKDA9PT11fHwwPT09ZilyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGY9TWF0aC5hYnMoZik7dmFyIFQ9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coZiwyKTtUPjEmJih1Kj1NYXRoLnNxcnQoVCksZio9TWF0aC5zcXJ0KFQpKTt2YXIgaz1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxmLGgscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxtPU1hdGgucG93KG8sMiksZz1NYXRoLnBvdyhoLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqbS1kKnYtbSpnO3k8MCYmKHk9MCkseS89ZCp2K20qZzt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpoLF89Zip4LXUqYisodCtyKS8yLHc9dSp4K2YqYisoZStuKS8yLFQ9KGgteCkvYSxrPShwLWIpL28sQT0oLWgteCkvYSxNPSgtcC1iKS9vLFM9cygxLDAsVCxrKSxFPXMoVCxrLEEsTSk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsZixtLHYseCxiLF8sdyksQT1uKGssNCksTT1BWzBdLFM9QVsxXSxFPUFbMl0sTD1BWzNdLEM9TWF0aC5hYnMoTCkvKGkvNCk7TWF0aC5hYnMoMS1DKTwxZS03JiYoQz0xKTt2YXIgUD1NYXRoLm1heChNYXRoLmNlaWwoQyksMSk7TC89UDtmb3IodmFyIEk9MDtJPFA7SSsrKXkucHVzaChvKEUsTCkpLEUrPUw7cmV0dXJuIHkubWFwKChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSkpfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0KSYmMT09PXQubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJih0PXRbMF0pO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoIW8odCkpdGhyb3cgRXJyb3IoIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIik7dD1uKHQpfWlmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKTtpZih0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLHM9dC5sZW5ndGg7cjxzO3IrKylmb3IodmFyIGw9dFtyXS5zbGljZSgxKSxjPTA7YzxsLmxlbmd0aDtjKz0yKWxbYyswXTxlWzBdJiYoZVswXT1sW2MrMF0pLGxbYysxXTxlWzFdJiYoZVsxXT1sW2MrMV0pLGxbYyswXT5lWzJdJiYoZVsyXT1sW2MrMF0pLGxbYysxXT5lWzNdJiYoZVszXT1sW2MrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjY2LCJpcy1zdmctcGF0aCI6MjMzLCJub3JtYWxpemUtc3ZnLXBhdGgiOjMwNCwicGFyc2Utc3ZnLXBhdGgiOjI0NX1dLDMwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxmPW51bGwsaD0wLHA9MCxkPTAsbT10Lmxlbmd0aDtkPG07ZCsrKXt2YXIgZz10W2RdLHY9Z1swXTtzd2l0Y2godil7Y2FzZSJNIjpsPWdbMV0sYz1nWzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6aCxweTpwLGN4OmdbNl0sY3k6Z1s3XSxyeDpnWzFdLHJ5OmdbMl0seEF4aXNSb3RhdGlvbjpnWzNdLGxhcmdlQXJjRmxhZzpnWzRdLHN3ZWVwRmxhZzpnWzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLGc9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKGcpO2JyZWFrO2Nhc2UiUyI6dmFyIF89aCx3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSxnPVsiQyIsXyx3LGdbMV0sZ1syXSxnWzNdLGdbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipoLXUsZj0yKnAtZik6KHU9aCxmPXApLGc9YShoLHAsdSxmLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJRIjp1PWdbMV0sZj1nWzJdLGc9YShoLHAsZ1sxXSxnWzJdLGdbM10sZ1s0XSk7YnJlYWs7Y2FzZSJMIjpnPWkoaCxwLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJIIjpnPWkoaCxwLGdbMV0scCk7YnJlYWs7Y2FzZSJWIjpnPWkoaCxwLGgsZ1sxXSk7YnJlYWs7Y2FzZSJaIjpnPWkoaCxwLGwsYyl9ZT12LGg9Z1tnLmxlbmd0aC0yXSxwPWdbZy5sZW5ndGgtMV0sZy5sZW5ndGg+ND8obz1nW2cubGVuZ3RoLTRdLHM9Z1tnLmxlbmd0aC0zXSk6KG89aCxzPXApLHIucHVzaChnKX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjozMDJ9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsZjtlLnNoYXBlPyhyPWUuc2hhcGVbMF0sZj1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGY9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgaD1NYXRoLm1pbihyLGYpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxtPVtyLyhkWzJdLWRbMF0pLGYvKGRbM10tZFsxXSldLGc9TWF0aC5taW4obVswXXx8MCxtWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixmKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpmKSx1LnNjYWxlKGcsZyksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciB2PW5ldyBQYXRoMkQodCk7dS5maWxsKHYpLHAmJnUuc3Ryb2tlKHYpfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpofSl9fSx7ImJpdG1hcC1zZGYiOjc4LCJkcmF3LXN2Zy1wYXRoIjoxMjAsImlzLXN2Zy1wYXRoIjoyMzMsInBhcnNlLXN2Zy1wYXRoIjoyNDUsInN2Zy1wYXRoLWJvdW5kcyI6MzAzfV0sMzA2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7KGZ1bmN0aW9uKCl7dmFyIGk9dCgicHJvY2Vzcy9icm93c2VyLmpzIikubmV4dFRpY2ssYT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksbz1BcnJheS5wcm90b3R5cGUuc2xpY2Uscz17fSxsPTA7ZnVuY3Rpb24gYyh0LGUpe3RoaXMuX2lkPXQsdGhpcy5fY2xlYXJGbj1lfXIuc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhhLmNhbGwoc2V0VGltZW91dCx3aW5kb3csYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSxyLnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKGEuY2FsbChzZXRJbnRlcnZhbCx3aW5kb3csYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sci5jbGVhclRpbWVvdXQ9ci5jbGVhckludGVydmFsPWZ1bmN0aW9uKHQpe3QuY2xvc2UoKX0sYy5wcm90b3R5cGUudW5yZWY9Yy5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7fSxjLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csdGhpcy5faWQpfSxyLmVucm9sbD1mdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD1lfSxyLnVuZW5yb2xsPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD0tMX0sci5fdW5yZWZBY3RpdmU9ci5hY3RpdmU9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpO3ZhciBlPXQuX2lkbGVUaW1lb3V0O2U+PTAmJih0Ll9pZGxlVGltZW91dElkPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fb25UaW1lb3V0JiZ0Ll9vblRpbWVvdXQoKX0pLGUpKX0sci5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbih0KXt2YXIgZT1sKyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJm8uY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHNbZV09ITAsaSgoZnVuY3Rpb24oKXtzW2VdJiYobj90LmFwcGx5KG51bGwsbik6dC5jYWxsKG51bGwpLHIuY2xlYXJJbW1lZGlhdGUoZSkpfSkpLGV9LHIuY2xlYXJJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbih0KXtkZWxldGUgc1t0XX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoInRpbWVycyIpLnNldEltbWVkaWF0ZSx0KCJ0aW1lcnMiKS5jbGVhckltbWVkaWF0ZSl9LHsicHJvY2Vzcy9icm93c2VyLmpzIjoyNzIsdGltZXJzOjMwNn1dLDMwNzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0KXt2YXIgcj0vXlxzKy8sbj0vXHMrJC8saT0wLGE9dC5yb3VuZCxvPXQubWluLHM9dC5tYXgsbD10LnJhbmRvbTtmdW5jdGlvbiBjKGUsbCl7aWYobD1sfHx7fSwoZT1lfHwiIilpbnN0YW5jZW9mIGMpcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUsbCk7dmFyIHU9ZnVuY3Rpb24oZSl7dmFyIGk9e3I6MCxnOjAsYjowfSxhPTEsbD1udWxsLGM9bnVsbCx1PW51bGwsZj0hMSxoPSExOyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZnVuY3Rpb24odCl7dD10LnJlcGxhY2UociwiIikucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBlLGk9ITE7aWYoU1t0XSl0PVNbdF0saT0hMDtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PXQpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6Im5hbWUifTtpZihlPWoucmdiLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdfTtpZihlPWoucmdiYS5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXSxhOmVbNF19O2lmKGU9ai5oc2wuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM119O2lmKGU9ai5oc2xhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdLGE6ZVs0XX07aWYoZT1qLmhzdi5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXX07aWYoZT1qLmhzdmEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM10sYTplWzRdfTtpZihlPWouaGV4OC5leGVjKHQpKXJldHVybntyOkkoZVsxXSksZzpJKGVbMl0pLGI6SShlWzNdKSxhOlIoZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDYuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0pLGc6SShlWzJdKSxiOkkoZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtpZihlPWouaGV4NC5leGVjKHQpKXJldHVybntyOkkoZVsxXSsiIitlWzFdKSxnOkkoZVsyXSsiIitlWzJdKSxiOkkoZVszXSsiIitlWzNdKSxhOlIoZVs0XSsiIitlWzRdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleDgifTtpZihlPWouaGV4My5leGVjKHQpKXJldHVybntyOkkoZVsxXSsiIitlWzFdKSxnOkkoZVsyXSsiIitlWzJdKSxiOkkoZVszXSsiIitlWzNdKSxmb3JtYXQ6aT8ibmFtZSI6ImhleCJ9O3JldHVybiExfShlKSk7Im9iamVjdCI9PXR5cGVvZiBlJiYoVShlLnIpJiZVKGUuZykmJlUoZS5iKT8ocD1lLnIsZD1lLmcsbT1lLmIsaT17cjoyNTUqQyhwLDI1NSksZzoyNTUqQyhkLDI1NSksYjoyNTUqQyhtLDI1NSl9LGY9ITAsaD0iJSI9PT1TdHJpbmcoZS5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6VShlLmgpJiZVKGUucykmJlUoZS52KT8obD16KGUucyksYz16KGUudiksaT1mdW5jdGlvbihlLHIsbil7ZT02KkMoZSwzNjApLHI9QyhyLDEwMCksbj1DKG4sMTAwKTt2YXIgaT10LmZsb29yKGUpLGE9ZS1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksYz1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bY10sZzoyNTUqW2wsbixuLHMsbyxvXVtjXSxiOjI1NSpbbyxvLGwsbixuLHNdW2NdfX0oZS5oLGwsYyksZj0hMCxoPSJoc3YiKTpVKGUuaCkmJlUoZS5zKSYmVShlLmwpJiYobD16KGUucyksdT16KGUubCksaT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhO2Z1bmN0aW9uIG8odCxlLHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj90KzYqKGUtdCkqcjpyPC41P2U6cjwyLzM/dCsoZS10KSooMi8zLXIpKjY6dH1pZih0PUModCwzNjApLGU9QyhlLDEwMCkscj1DKHIsMTAwKSwwPT09ZSluPWk9YT1yO2Vsc2V7dmFyIHM9cjwuNT9yKigxK2UpOnIrZS1yKmUsbD0yKnItcztuPW8obCxzLHQrMS8zKSxpPW8obCxzLHQpLGE9byhsLHMsdC0xLzMpfXJldHVybntyOjI1NSpuLGc6MjU1KmksYjoyNTUqYX19KGUuaCxsLHUpLGY9ITAsaD0iaHNsIiksZS5oYXNPd25Qcm9wZXJ0eSgiYSIpJiYoYT1lLmEpKTt2YXIgcCxkLG07cmV0dXJuIGE9TChhKSx7b2s6Zixmb3JtYXQ6ZS5mb3JtYXR8fGgscjpvKDI1NSxzKGkuciwwKSksZzpvKDI1NSxzKGkuZywwKSksYjpvKDI1NSxzKGkuYiwwKSksYTphfX0oZSk7dGhpcy5fb3JpZ2luYWxJbnB1dD1lLHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWwuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9bC5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1hKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWEodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9YSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1pKyt9ZnVuY3Rpb24gdSh0LGUscil7dD1DKHQsMjU1KSxlPUMoZSwyNTUpLHI9QyhyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz0oYStsKS8yO2lmKGE9PWwpbj1pPTA7ZWxzZXt2YXIgdT1hLWw7c3dpdGNoKGk9Yz4uNT91LygyLWEtbCk6dS8oYStsKSxhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksbDpjfX1mdW5jdGlvbiBmKHQsZSxyKXt0PUModCwyNTUpLGU9QyhlLDI1NSkscj1DKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPWEsdT1hLWw7aWYoaT0wPT09YT8wOnUvYSxhPT1sKW49MDtlbHNle3N3aXRjaChhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksdjpjfX1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPVtPKGEodCkudG9TdHJpbmcoMTYpKSxPKGEoZSkudG9TdHJpbmcoMTYpKSxPKGEocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKCIiKX1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybltPKEQobikpLE8oYSh0KS50b1N0cmluZygxNikpLE8oYShlKS50b1N0cmluZygxNikpLE8oYShyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9UChyLnMpLGMocil9ZnVuY3Rpb24gbSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPVAoci5zKSxjKHIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGModCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHYodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD1QKHIubCksYyhyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9SZ2IoKTtyZXR1cm4gci5yPXMoMCxvKDI1NSxyLnItYSgtZS8xMDAqMjU1KSkpLHIuZz1zKDAsbygyNTUsci5nLWEoLWUvMTAwKjI1NSkpKSxyLmI9cygwLG8oMjU1LHIuYi1hKC1lLzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9UChyLmwpLGMocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWModCkudG9Ic2woKSxuPShyLmgrZSklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKHQpe3ZhciBlPWModCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsYyhlKX1mdW5jdGlvbiB3KHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBUKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBrKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIEEodCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBuPWModCkudG9Ic2woKSxpPTM2MC9yLGE9W2ModCldO2ZvcihuLmg9KG4uaC0oaSplPj4xKSs3MjApJTM2MDstLWU7KW4uaD0obi5oK2kpJTM2MCxhLnB1c2goYyhuKSk7cmV0dXJuIGF9ZnVuY3Rpb24gTSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9Yyh0KS50b0hzdigpLG49ci5oLGk9ci5zLGE9ci52LG89W10scz0xL2U7ZS0tOylvLnB1c2goYyh7aDpuLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KnQucis1ODcqdC5nKzExNCp0LmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUscixuLGk9dGhpcy50b1JnYigpO3JldHVybiBlPWkuci8yNTUscj1pLmcvMjU1LG49aS5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6dC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOnQucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45Mjp0LnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2E9TCh0KSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyx2OnQudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciB0PWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LnYpO3JldHVybiAxPT10aGlzLl9hPyJoc3YoIitlKyIsICIrcisiJSwgIituKyIlKSI6ImhzdmEoIitlKyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyxsOnQubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LmwpO3JldHVybiAxPT10aGlzLl9hPyJoc2woIitlKyIsICIrcisiJSwgIituKyIlKSI6ImhzbGEoIitlKyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSGV4OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHQpfSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iIyIrdGhpcy50b0hleCh0KX0sdG9IZXg4OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtPKGEodCkudG9TdHJpbmcoMTYpKSxPKGEoZSkudG9TdHJpbmcoMTYpKSxPKGEocikudG9TdHJpbmcoMTYpKSxPKEQobikpXTtpZihpJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oIiIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLHQpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmEodGhpcy5fciksZzphKHRoaXMuX2cpLGI6YSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIithKHRoaXMuX3IpKyIsICIrYSh0aGlzLl9nKSsiLCAiK2EodGhpcy5fYikrIikiOiJyZ2JhKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlIixnOmEoMTAwKkModGhpcy5fZywyNTUpKSsiJSIsYjphKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIithKDEwMCpDKHRoaXMuX3IsMjU1KSkrIiUsICIrYSgxMDAqQyh0aGlzLl9nLDI1NSkpKyIlLCAiK2EoMTAwKkModGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIrYSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkModGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoRVtoKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9IiMiK3AodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj1lLG49dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKHQpe3ZhciBpPWModCk7cj0iIyIrcChpLl9yLGkuX2csaS5fYixpLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIrbisic3RhcnRDb2xvcnN0cj0iK2UrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHwiaGV4IiE9PXQmJiJoZXg2IiE9PXQmJiJoZXgzIiE9PXQmJiJoZXg0IiE9PXQmJiJoZXg4IiE9PXQmJiJuYW1lIiE9PXQ/KCJyZ2IiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT10JiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PXQmJiJoZXg2IiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09dCYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09dCYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PXQmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPXQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGQsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihNLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGssYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih3LGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX19LGMuZnJvbVJhdGlvPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYocltuXT0iYSI9PT1uP3Rbbl06eih0W25dKSk7dD1yfXJldHVybiBjKHQsZSl9LGMuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZjKHQpLnRvUmdiU3RyaW5nKCk9PWMoZSkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6bCgpLGc6bCgpLGI6bCgpfSl9LGMubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49Yyh0KS50b1JnYigpLGk9YyhlKS50b1JnYigpLGE9ci8xMDA7cmV0dXJuIGMoe3I6KGkuci1uLnIpKmErbi5yLGc6KGkuZy1uLmcpKmErbi5nLGI6KGkuYi1uLmIpKmErbi5iLGE6KGkuYS1uLmEpKmErbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj1jKGUpLGk9YyhyKTtyZXR1cm4odC5tYXgobi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpLyh0Lm1pbihuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWMucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goaT0hMSwobj1mdW5jdGlvbih0KXt2YXIgZSxyO2U9KCh0PXR8fHtsZXZlbDoiQUEiLHNpemU6InNtYWxsIn0pLmxldmVsfHwiQUEiKS50b1VwcGVyQ2FzZSgpLHI9KHQuc2l6ZXx8InNtYWxsIikudG9Mb3dlckNhc2UoKSwiQUEiIT09ZSYmIkFBQSIhPT1lJiYoZT0iQUEiKTsic21hbGwiIT09ciYmImxhcmdlIiE9PXImJihyPSJzbWFsbCIpO3JldHVybntsZXZlbDplLHNpemU6cn19KHIpKS5sZXZlbCtuLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6aT1hPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjppPWE+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6aT1hPj03fXJldHVybiBpfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz1udWxsLGw9MDtpPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsYT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkodCxlW3VdKSk+bCYmKGw9bixzPWMoZVt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUodCxzLHtsZXZlbDphLHNpemU6b30pfHwhaT9zOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZSh0LFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBTPWMubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxFPWMuaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFMpO2Z1bmN0aW9uIEwodCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBDKGUscil7KGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdCh0KX0pKGUpJiYoZT0iMTAwJSIpO3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiJSIpfShlKTtyZXR1cm4gZT1vKHIscygwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnIsMTApLzEwMCksdC5hYnMoZS1yKTwxZS02PzE6ZSVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gbygxLHMoMCx0KSl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gcGFyc2VJbnQodCwxNil9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gMT09dC5sZW5ndGg/IjAiK3Q6IiIrdH1mdW5jdGlvbiB6KHQpe3JldHVybiB0PD0xJiYodD0xMDAqdCsiJSIpLHR9ZnVuY3Rpb24gRChlKXtyZXR1cm4gdC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIEkodCkvMjU1fXZhciBGLEIsTixqPShCPSJbXFxzfFxcKF0rKCIrKEY9Iig/OlstXFwrXT9cXGQqXFwuXFxkKyU/KXwoPzpbLVxcK10/XFxkKyU/KSIpKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLE49IltcXHN8XFwoXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEYpLHJnYjpuZXcgUmVnRXhwKCJyZ2IiK0IpLHJnYmE6bmV3IFJlZ0V4cCgicmdiYSIrTiksaHNsOm5ldyBSZWdFeHAoImhzbCIrQiksaHNsYTpuZXcgUmVnRXhwKCJoc2xhIitOKSxoc3Y6bmV3IFJlZ0V4cCgiaHN2IitCKSxoc3ZhOm5ldyBSZWdFeHAoImhzdmEiK04pLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBVKHQpe3JldHVybiEhai5DU1NfVU5JVC5leGVjKHQpfXZvaWQgMCE9PWUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sMzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1pLGUuZXhwb3J0cy5mbG9hdDMyPWUuZXhwb3J0cy5mbG9hdD1pLGUuZXhwb3J0cy5mcmFjdDMyPWUuZXhwb3J0cy5mcmFjdD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBuZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKTtlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHwoZT1pKHQpKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGkodC1pKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P3Q6bmV3IEZsb2F0MzJBcnJheSh0KTooblswXT10LG5bMF0pfX0se31dLDMwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPWE7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW4oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSphKHJbMV0sdCl9ZnVuY3Rpb24gYSh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWkociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZSJlbSI6cmV0dXJuIGkoZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBpKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIDk2O2Nhc2UiY20iOnJldHVybiA5Ni8yLjU0O2Nhc2UibW0iOnJldHVybiA5Ni8yNS40O2Nhc2UicHQiOnJldHVybiA5Ni83MjtjYXNlInBjIjpyZXR1cm4gMTZ9cmV0dXJuIDF9fSx7InBhcnNlLXVuaXQiOjI0Nn1dLDMxMDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikudG9wb2pzb249dC50b3BvanNvbnx8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiByKHQpe2lmKG51bGw9PXQpcmV0dXJuIGU7dmFyIHIsbixpPXQuc2NhbGVbMF0sYT10LnNjYWxlWzFdLG89dC50cmFuc2xhdGVbMF0scz10LnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtlfHwocj1uPTApO3ZhciBsPTIsYz10Lmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IodVswXT0ocis9dFswXSkqaStvLHVbMV09KG4rPXRbMV0pKmErcztsPGM7KXVbbF09dFtsXSwrK2w7cmV0dXJuIHV9fWZ1bmN0aW9uIG4odCl7dmFyIGUsbj1yKHQudHJhbnNmb3JtKSxpPTEvMCxhPWksbz0taSxzPS1pO2Z1bmN0aW9uIGwodCl7KHQ9bih0KSlbMF08aSYmKGk9dFswXSksdFswXT5vJiYobz10WzBdKSx0WzFdPGEmJihhPXRbMV0pLHRbMV0+cyYmKHM9dFsxXSl9ZnVuY3Rpb24gYyh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2goYyk7YnJlYWs7Y2FzZSJQb2ludCI6bCh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChsKX19Zm9yKGUgaW4gdC5hcmNzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLGw9dC5sZW5ndGg7KytyPGw7KShlPW4odFtyXSxyKSlbMF08aSYmKGk9ZVswXSksZVswXT5vJiYobz1lWzBdKSxlWzFdPGEmJihhPWVbMV0pLGVbMV0+cyYmKHM9ZVsxXSl9KSksdC5vYmplY3RzKWModC5vYmplY3RzW2VdKTtyZXR1cm5baSxhLG8sc119ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUuaWQsbj1lLmJib3gsaT1udWxsPT1lLnByb3BlcnRpZXM/e306ZS5wcm9wZXJ0aWVzLG89YSh0LGUpO3JldHVybiBudWxsPT1yJiZudWxsPT1uP3t0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b306bnVsbD09bj97dHlwZToiRmVhdHVyZSIsaWQ6cixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b306e3R5cGU6IkZlYXR1cmUiLGlkOnIsYmJveDpuLHByb3BlcnRpZXM6aSxnZW9tZXRyeTpvfX1mdW5jdGlvbiBhKHQsZSl7dmFyIG49cih0LnRyYW5zZm9ybSksaT10LmFyY3M7ZnVuY3Rpb24gYSh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1pW3Q8MD9+dDp0XSxhPTAsbz1yLmxlbmd0aDthPG87KythKWUucHVzaChuKHJbYV0sYSkpO3Q8MCYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW4tZTtpPC0tbjspcj10W2ldLHRbaSsrXT10W25dLHRbbl09cn0oZSxvKX1mdW5jdGlvbiBvKHQpe3JldHVybiBuKHQpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpYSh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXSksZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1zKHQpO2UubGVuZ3RoPDQ7KWUucHVzaChlWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiBjKHQpe3JldHVybiB0Lm1hcChsKX1yZXR1cm4gZnVuY3Rpb24gdChlKXt2YXIgcixuPWUudHlwZTtzd2l0Y2gobil7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnJldHVybnt0eXBlOm4sZ2VvbWV0cmllczplLmdlb21ldHJpZXMubWFwKHQpfTtjYXNlIlBvaW50IjpyPW8oZS5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjpyPWUuY29vcmRpbmF0ZXMubWFwKG8pO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cj1zKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnI9ZS5hcmNzLm1hcChzKTticmVhaztjYXNlIlBvbHlnb24iOnI9YyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpyPWUuYXJjcy5tYXAoYyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm57dHlwZTpuLGNvb3JkaW5hdGVzOnJ9fShlKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9e30sbj17fSxpPXt9LGE9W10sbz0tMTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl07ZGVsZXRlIGVbaS5zdGFydF0sZGVsZXRlIGkuc3RhcnQsZGVsZXRlIGkuZW5kLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF09MX0pKSxhLnB1c2goaSl9fXJldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK29dLGVbb109cixlW25dPWkpfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyWzBdKz10WzBdLHJbMV0rPXRbMV19KSkpOnI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZTwwP1tyLGldOltpLHJdfShlKSxzPW9bMF0sbD1vWzFdO2lmKHI9aVtzXSlpZihkZWxldGUgaVtyLmVuZF0sci5wdXNoKGUpLHIuZW5kPWwsYT1uW2xdKXtkZWxldGUgblthLnN0YXJ0XTt2YXIgYz1hPT09cj9yOnIuY29uY2F0KGEpO25bYy5zdGFydD1yLnN0YXJ0XT1pW2MuZW5kPWEuZW5kXT1jfWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2UgaWYocj1uW2xdKWlmKGRlbGV0ZSBuW3Iuc3RhcnRdLHIudW5zaGlmdChlKSxyLnN0YXJ0PXMsYT1pW3NdKXtkZWxldGUgaVthLmVuZF07dmFyIHU9YT09PXI/cjphLmNvbmNhdChyKTtuW3Uuc3RhcnQ9YS5zdGFydF09aVt1LmVuZD1yLmVuZF09dX1lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIG5bKHI9W2VdKS5zdGFydD1zXT1pW3IuZW5kPWxdPXJ9KSkscyhpLG4pLHMobixpKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdfHxhLnB1c2goW3RdKX0pKSxhfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuLGksYTtpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1sKHQsZSxyKTtlbHNlIGZvcihpPTAsbj1uZXcgQXJyYXkoYT10LmFyY3MubGVuZ3RoKTtpPGE7KytpKW5baV09aTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixhcmNzOm8odCxuKX19ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCl7dmFyIGU9dDwwP350OnQ7KGFbZV18fChhW2VdPVtdKSkucHVzaCh7aTp0LGc6bn0pfWZ1bmN0aW9uIHModCl7dC5mb3JFYWNoKG8pfWZ1bmN0aW9uIGwodCl7dC5mb3JFYWNoKHMpfXJldHVybiBmdW5jdGlvbiB0KGUpe3N3aXRjaChuPWUsZS50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZS5nZW9tZXRyaWVzLmZvckVhY2godCk7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpzKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjohZnVuY3Rpb24odCl7dC5mb3JFYWNoKGwpfShlLmFyY3MpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxpPVtdO2Z1bmN0aW9uIHModCl7dC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpeyhyW2U9ZTwwP35lOmVdfHwocltlXT1bXSkpLnB1c2godCl9KSl9KSksbi5wdXNoKHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfShhKHQse3R5cGU6IlBvbHlnb24iLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXJldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uIHQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiUG9seWdvbiI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjplLmFyY3MuZm9yRWFjaChzKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxuPVt0XTtmb3IodC5fPTEsaS5wdXNoKGUpO3Q9bi5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxuLnB1c2godCkpfSkpfSkpfSkpfX0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsYXJjczppLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG4saT1bXTtpZihlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5sZW5ndGg8MiYmaS5wdXNoKHQpfSkpfSkpfSkpLChuPShpPW8odCxpKSkubGVuZ3RoKT4xKWZvcih2YXIgYSxzLGM9MSx1PWwoaVswXSk7YzxuOysrYykoYT1sKGlbY10pKT51JiYocz1pWzBdLGlbMF09aVtjXSxpW2NdPXMsdT1hKTtyZXR1cm4gaX0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4wfSkpfX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47KXt2YXIgaT1yK24+Pj4xO3RbaV08ZT9yPWkrMTpuPWl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyksZj1NYXRoLnJvdW5kKCh0WzBdLW8pL2kpLGg9TWF0aC5yb3VuZCgodFsxXS1zKS9hKTtmb3IodVswXT1mLXIscj1mLHVbMV09aC1uLG49aDtsPGM7KXVbbF09dFtsXSwrK2w7cmV0dXJuIHV9fXQuYmJveD1uLHQuZmVhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9dC5vYmplY3RzW2VdKSwiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT97dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOmUuZ2VvbWV0cmllcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSl9KSl9OmkodCxlKX0sdC5tZXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYSh0LGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5tZXJnZUFyY3M9Yyx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9cyx0Lm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFwKChmdW5jdGlvbigpe3JldHVybltdfSkpO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciBuPWVbdF07bj9uLnB1c2gocik6ZVt0XT1bcl19KSl9ZnVuY3Rpb24gaSh0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bih0LGUpfSkpfXZhciBhPXtMaW5lU3RyaW5nOm4sTXVsdGlMaW5lU3RyaW5nOmksUG9seWdvbjppLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aSh0LGUpfSkpfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaCgoZnVuY3Rpb24gdChlLHIpeyJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlP2UuZ2VvbWV0cmllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUscil9KSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSksZSlmb3IodmFyIHM9ZVtvXSxsPXMubGVuZ3RoLGM9MDtjPGw7KytjKWZvcih2YXIgZj1jKzE7ZjxsOysrZil7dmFyIGgscD1zW2NdLGQ9c1tmXTsoaD1yW3BdKVtvPXUoaCxkKV0hPT1kJiZoLnNwbGljZShvLDAsZCksKGg9cltkXSlbbz11KGgscCldIT09cCYmaC5zcGxpY2UobywwLHApfXJldHVybiByfSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO2lmKGUmJmUuc2NhbGUpbD10LmJib3g7ZWxzZXtpZighKChyPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7dmFyIHIsaT0obD10LmJib3h8fG4odCkpWzBdLGE9bFsxXSxvPWxbMl0scz1sWzNdO2U9e3NjYWxlOltvLWk/KG8taSkvKHItMSk6MSxzLWE/KHMtYSkvKHItMSk6MV0sdHJhbnNsYXRlOltpLGFdfX12YXIgbCxjLHU9ZihlKSxoPXQub2JqZWN0cyxwPXt9O2Z1bmN0aW9uIGQodCl7cmV0dXJuIHUodCl9ZnVuY3Rpb24gbSh0KXt2YXIgZTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAobSl9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpkKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9pbnQiOmU9e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXMubWFwKGQpfTticmVhaztkZWZhdWx0OnJldHVybiB0fXJldHVybiBudWxsIT10LmlkJiYoZS5pZD10LmlkKSxudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxudWxsIT10LnByb3BlcnRpZXMmJihlLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzKSxlfWZvcihjIGluIGgpcFtjXT1tKGhbY10pO3JldHVybnt0eXBlOiJUb3BvbG9neSIsYmJveDpsLHRyYW5zZm9ybTplLG9iamVjdHM6cCxhcmNzOnQuYXJjcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9MCxuPTEsaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKTtmb3IoYVswXT11KHRbMF0sMCk7KytyPGk7KSgoZT11KHRbcl0scikpWzBdfHxlWzFdKSYmKGFbbisrXT1lKTtyZXR1cm4gMT09PW4mJihhW24rK109WzAsMF0pLGEubGVuZ3RoPW4sYX0pKX19LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wcm90b3R5cGUvaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIWhhc093blByb3BlcnR5LmNhbGwodCwibGVuZ3RoIikpcmV0dXJuITE7dHJ5e2lmKCJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2FsbClyZXR1cm4hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdC5hcHBseSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hbih0KX19LHsiLi4vcHJvdG90eXBlL2lzIjozMTh9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXQoIi4uL29iamVjdC9pcyIpLGE9dCgiLi4vc3RyaW5nL2NvZXJjZSIpLG89dCgiLi90by1zaG9ydC1zdHJpbmciKSxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucmVwbGFjZSgiJXYiLG8oZSkpfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IocyhlLHQpKTtpZighbih0KSl7aWYoImRlZmF1bHQiaW4gcilyZXR1cm4gci5kZWZhdWx0O2lmKHIuaXNPcHRpb25hbClyZXR1cm4gbnVsbH12YXIgbz1hKHIuZXJyb3JNZXNzYWdlKTt0aHJvdyBuKG8pfHwobz1lKSxuZXcgVHlwZUVycm9yKHMobyx0KSl9fSx7Ii4uL29iamVjdC9pcyI6MzE1LCIuLi9zdHJpbmcvY29lcmNlIjozMTksIi4uL3ZhbHVlL2lzIjozMjEsIi4vdG8tc2hvcnQtc3RyaW5nIjozMTR9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC50b1N0cmluZygpfWNhdGNoKGUpe3RyeXtyZXR1cm4gU3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfX19fSx7fV0sMzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2FmZS10by1zdHJpbmciKSxpPS9bXG5cclx1MjAyOFx1MjAyOV0vZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gbnVsbD09PWU/IjxOb24tY29lcmNpYmxlIHRvIHN0cmluZyB2YWx1ZT4iOihlLmxlbmd0aD4xMDAmJihlPWUuc2xpY2UoMCw5OSkrIlx1MjAyNiIpLGU9ZS5yZXBsYWNlKGksKGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIlxuIjpyZXR1cm4iXFxuIjtjYXNlIlxyIjpyZXR1cm4iXFxyIjtjYXNlIlx1MjAyOCI6cmV0dXJuIlxcdTIwMjgiO2Nhc2UiXHUyMDI5IjpyZXR1cm4iXFx1MjAyOSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIil9fSkpKX19LHsiLi9zYWZlLXRvLXN0cmluZyI6MzEzfV0sMzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT17b2JqZWN0OiEwLGZ1bmN0aW9uOiEwLHVuZGVmaW5lZDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmaGFzT3duUHJvcGVydHkuY2FsbChpLHR5cGVvZiB0KX19LHsiLi4vdmFsdWUvaXMiOjMyMX1dLDMxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iKSxpPXQoIi4vaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/dDpuKHQsIiV2IGlzIG5vdCBhIHBsYWluIGZ1bmN0aW9uIixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjMxMiwiLi9pcyI6MzE3fV0sMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL2lzIiksaT0vXlxzKmNsYXNzW1xzey99XS8sYT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmIWkudGVzdChhLmNhbGwodCkpfX0seyIuLi9mdW5jdGlvbi9pcyI6MzExfV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL29iamVjdC9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLnByb3RvdHlwZT09PXR9Y2F0Y2godCl7cmV0dXJuITF9fX0seyIuLi9vYmplY3QvaXMiOjMxNX1dLDMxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9dCgiLi4vb2JqZWN0L2lzIiksYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4gbnVsbDtpZihpKHQpKXt2YXIgZT10LnRvU3RyaW5nO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBudWxsO2lmKGU9PT1hKXJldHVybiBudWxsfXRyeXtyZXR1cm4iIit0fWNhdGNoKHQpe3JldHVybiBudWxsfX19LHsiLi4vb2JqZWN0L2lzIjozMTUsIi4uL3ZhbHVlL2lzIjozMjF9XSwzMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIiksaT10KCIuL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP3Q6bih0LCJDYW5ub3QgdXNlICV2Iixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjMxMiwiLi9pcyI6MzIxfV0sMzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH19LHt9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJkdXAiKSxhPXQoImJ1ZmZlciIpLkJ1ZmZlcjtlLl9fVFlQRURBUlJBWV9QT09MfHwoZS5fX1RZUEVEQVJSQVlfUE9PTD17VUlOVDg6aShbMzIsMF0pLFVJTlQxNjppKFszMiwwXSksVUlOVDMyOmkoWzMyLDBdKSxCSUdVSU5UNjQ6aShbMzIsMF0pLElOVDg6aShbMzIsMF0pLElOVDE2OmkoWzMyLDBdKSxJTlQzMjppKFszMiwwXSksQklHSU5UNjQ6aShbMzIsMF0pLEZMT0FUOmkoWzMyLDBdKSxET1VCTEU6aShbMzIsMF0pLERBVEE6aShbMzIsMF0pLFVJTlQ4QzppKFszMiwwXSksQlVGRkVSOmkoWzMyLDBdKX0pO3ZhciBvPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz0idW5kZWZpbmVkIiE9dHlwZW9mIEJpZ1VpbnQ2NEFycmF5LGw9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdJbnQ2NEFycmF5LGM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtjLlVJTlQ4Q3x8KGMuVUlOVDhDPWkoWzMyLDBdKSksYy5CSUdVSU5UNjR8fChjLkJJR1VJTlQ2ND1pKFszMiwwXSkpLGMuQklHSU5UNjR8fChjLkJJR0lOVDY0PWkoWzMyLDBdKSksYy5CVUZGRVJ8fChjLkJVRkZFUj1pKFszMiwwXSkpO3ZhciB1PWMuREFUQSxmPWMuQlVGRkVSO2Z1bmN0aW9uIGgodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPW4ubG9nMihlKTt1W3JdLnB1c2godCl9fWZ1bmN0aW9uIHAodCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPXVbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShwKDIqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDhBcnJheShwKHQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KHAoOCp0KSwwLHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHAodCksMCx0KTpkKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHM/bmV3IEJpZ1VpbnQ2NEFycmF5KHAoOCp0KSwwLHQpOm51bGx9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbD9uZXcgQmlnSW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG5ldyBEYXRhVmlldyhwKHQpLDAsdCl9ZnVuY3Rpb24gTSh0KXt0PW4ubmV4dFBvdzIodCk7dmFyIGU9bi5sb2cyKHQpLHI9ZltlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBhKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKWZbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJih0PXQuYnVmZmVyKSwhdClyZXR1cm47dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPTB8bi5sb2cyKGUpO3Vbcl0ucHVzaCh0KX19LHIuZnJlZVVpbnQ4PXIuZnJlZVVpbnQxNj1yLmZyZWVVaW50MzI9ci5mcmVlQmlnVWludDY0PXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlQmlnSW50NjQ9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7aCh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPWgsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2Zbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gcCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGQodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBtKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZyh0KTtjYXNlImludDgiOnJldHVybiB2KHQpO2Nhc2UiaW50MTYiOnJldHVybiB5KHQpO2Nhc2UiaW50MzIiOnJldHVybiB4KHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIGIodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIF8odCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gdyh0KTtjYXNlImJpZ2ludDY0IjpyZXR1cm4gayh0KTtjYXNlImJpZ3VpbnQ2NCI6cmV0dXJuIFQodCk7Y2FzZSJidWZmZXIiOnJldHVybiBNKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIEEodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1wLHIubWFsbG9jVWludDg9ZCxyLm1hbGxvY1VpbnQxNj1tLHIubWFsbG9jVWludDMyPWcsci5tYWxsb2NJbnQ4PXYsci5tYWxsb2NJbnQxNj15LHIubWFsbG9jSW50MzI9eCxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1iLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1fLHIubWFsbG9jVWludDhDbGFtcGVkPXcsci5tYWxsb2NCaWdVaW50NjQ9VCxyLm1hbGxvY0JpZ0ludDY0PWssci5tYWxsb2NEYXRhVmlldz1BLHIubWFsbG9jQnVmZmVyPU0sci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpYy5VSU5UOFt0XS5sZW5ndGg9MCxjLlVJTlQxNlt0XS5sZW5ndGg9MCxjLlVJTlQzMlt0XS5sZW5ndGg9MCxjLklOVDhbdF0ubGVuZ3RoPTAsYy5JTlQxNlt0XS5sZW5ndGg9MCxjLklOVDMyW3RdLmxlbmd0aD0wLGMuRkxPQVRbdF0ubGVuZ3RoPTAsYy5ET1VCTEVbdF0ubGVuZ3RoPTAsYy5CSUdVSU5UNjRbdF0ubGVuZ3RoPTAsYy5CSUdJTlQ2NFt0XS5sZW5ndGg9MCxjLlVJTlQ4Q1t0XS5sZW5ndGg9MCx1W3RdLmxlbmd0aD0wLGZbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJiaXQtdHdpZGRsZSI6NzcsYnVmZmVyOjgwLGR1cDoxMjJ9XSwzMjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0vW1wnXCJdLztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG4udGVzdCh0LmNoYXJBdCgwKSkmJih0PXQuc3Vic3RyKDEpKSxuLnRlc3QodC5jaGFyQXQodC5sZW5ndGgtMSkpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSx0KToiIn19LHt9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHIpfHwocj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7Zm9yKHZhciBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2Zvcih2YXIgbyBpbiBhKWlmKCh2b2lkIDA9PT1lW29dfHxBcnJheS5pc0FycmF5KGVbb10pfHx0W29dIT09ZVtvXSkmJm8gaW4gZSl7dmFyIHM7aWYoITA9PT1hW29dKXM9ZVtvXTtlbHNle2lmKCExPT09YVtvXSljb250aW51ZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYVtvXSYmdm9pZCAwPT09KHM9YVtvXShlW29dLHQsZSkpKWNvbnRpbnVlfXRbb109c319cmV0dXJuIHR9fSx7fV0sMzI1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7dHJ5e2lmKCF0LmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgcj10LmxvY2FsU3RvcmFnZVtlXTtyZXR1cm4gbnVsbCE9ciYmInRydWUiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocigibm9EZXByZWNhdGlvbiIpKXJldHVybiB0O3ZhciBuPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFuKXtpZihyKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKGUpO3IoInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKGUpOmNvbnNvbGUud2FybihlKSxuPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDMyNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdldC1jYW52YXMtY29udGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbigid2ViZ2wiLHQpfX0seyJnZXQtY2FudmFzLWNvbnRleHQiOjE4OX1dLDMyNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IkNoaW5lc2UiLGpkRXBvY2g6MTcyMTQyNS41LGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNoaW5lc2UiLGVwb2NoczpbIkJFQyIsIkVDIl0sbW9udGhOdW1iZXJzOmZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10Lm1hdGNoKGwpO3JldHVybiByP3JbMF06IiJ9dmFyIG49dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGk9dC5tb250aCgpLGE9IiIrdGhpcy50b0NoaW5lc2VNb250aChuLGkpO3JldHVybiBlJiZhLmxlbmd0aDwyJiYoYT0iMCIrYSksdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSYmKGErPSJpIiksYX0sbW9udGhOYW1lczpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2goYyk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bIlx1NGUwMFx1NjcwOCIsIlx1NGU4Y1x1NjcwOCIsIlx1NGUwOVx1NjcwOCIsIlx1NTZkYlx1NjcwOCIsIlx1NGU5NFx1NjcwOCIsIlx1NTE2ZFx1NjcwOCIsIlx1NGUwM1x1NjcwOCIsIlx1NTE2Ylx1NjcwOCIsIlx1NGU1ZFx1NjcwOCIsIlx1NTM0MVx1NjcwOCIsIlx1NTM0MVx1NGUwMFx1NjcwOCIsIlx1NTM0MVx1NGU4Y1x1NjcwOCJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9Ilx1OTVmMCIraSksaX0sbW9udGhOYW1lc1Nob3J0OmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaCh1KTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVsiXHU0ZTAwIiwiXHU0ZThjIiwiXHU0ZTA5IiwiXHU1NmRiIiwiXHU0ZTk0IiwiXHU1MTZkIiwiXHU0ZTAzIiwiXHU1MTZiIiwiXHU0ZTVkIiwiXHU1MzQxIiwiXHU1MzQxXHU0ZTAwIiwiXHU1MzQxXHU0ZThjIl1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT0iXHU5NWYwIitpKSxpfSxwYXJzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHIsbj1wYXJzZUludChlKTtpZihpc05hTihuKSkiXHU5NWYwIj09PWVbMF0mJihyPSEwLGU9ZS5zdWJzdHJpbmcoMSkpLCJcdTY3MDgiPT09ZVtlLmxlbmd0aC0xXSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0xKSksbj0xK1siXHU0ZTAwIiwiXHU0ZThjIiwiXHU0ZTA5IiwiXHU1NmRiIiwiXHU0ZTk0IiwiXHU1MTZkIiwiXHU0ZTAzIiwiXHU1MTZiIiwiXHU0ZTVkIiwiXHU1MzQxIiwiXHU1MzQxXHU0ZTAwIiwiXHU1MzQxXHU0ZThjIl0uaW5kZXhPZihlKTtlbHNle3ZhciBpPWVbZS5sZW5ndGgtMV07cj0iaSI9PT1pfHwiSSI9PT1pfXJldHVybiB0aGlzLnRvTW9udGhJbmRleCh0LG4scil9LGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxfdmFsaWRhdGVZZWFyOmZ1bmN0aW9uKHQsZSl7aWYodC55ZWFyJiYodD10LnllYXIoKSksIm51bWJlciIhPXR5cGVvZiB0fHx0PDE4ODh8fHQ+MjExMSl0aHJvdyBlLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiB0fSx0b01vbnRoSW5kZXg6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihyJiZlIT09aXx8ZTwxfHxlPjEyKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBpPyFyJiZlPD1pP2UtMTplOmUtMX0sdG9DaGluZXNlTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPSh0PXQueWVhcigpKS5tb250aCgpKTt2YXIgcj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYoZTwwfHxlPihyPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gcj9lPHI/ZSsxOmU6ZSsxfSxpbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxmW3QtZlswXV0+PjEzfSxpc0ludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPSh0PXQueWVhcigpKS5tb250aCgpKTt2YXIgcj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7cmV0dXJuISFyJiZyPT09ZX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLmludGVyY2FsYXJ5TW9udGgodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dGhpcy5fdmFsaWRhdGVZZWFyKHQsbi5sb2NhbC5pbnZhbGlkeWVhcikscz1oW28taFswXV0sbD1zPj45JjQwOTUsYz1zPj41JjE1LHU9MzEmczsoaT1hLm5ld0RhdGUobCxjLHUpKS5hZGQoNC0oaS5kYXlPZldlZWsoKXx8NyksImQiKTt2YXIgZj10aGlzLnRvSkQodCxlLHIpLWkudG9KRCgpO3JldHVybiAxK01hdGguZmxvb3IoZi83KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzEzOjEyfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByPWZbdC1mWzBdXTtpZihlPihyPj4xMz8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHImMTw8MTItZT8zMDoyOX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxzLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl92YWxpZGF0ZVllYXIoaS55ZWFyKCkpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgbz10aGlzLmlzSW50ZXJjYWxhcnlNb250aCh0LGUpLHM9dGhpcy50b0NoaW5lc2VNb250aCh0LGUpLGw9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KW89dCxhPWV8fHt9O2Vsc2V7dmFyIGw7aWYoISgibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTEpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgeWVhciBvdXRzaWRlIHJhbmdlIDE4ODgtMjExMSIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMikpdGhyb3cgbmV3IEVycm9yKCJMdW5hciBtb250aCBvdXRzaWRlIHJhbmdlIDEgLSAxMiIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMCkpdGhyb3cgbmV3IEVycm9yKCJMdW5hciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzAiKTsib2JqZWN0Ij09dHlwZW9mIG4/KGw9ITEsYT1uKToobD0hIW4sYT1pfHx7fSksbz17eWVhcjp0LG1vbnRoOmUsZGF5OnIsaXNJbnRlcmNhbGFyeTpsfX1zPW8uZGF5LTE7dmFyIGMsdT1mW28ueWVhci1mWzBdXSxwPXU+PjEzO2M9cCYmKG8ubW9udGg+cHx8by5pc0ludGVyY2FsYXJ5KT9vLm1vbnRoOm8ubW9udGgtMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKXtzKz11JjE8PDEyLWQ/MzA6Mjl9dmFyIG09aFtvLnllYXItaFswXV0sZz1uZXcgRGF0ZShtPj45JjQwOTUsKG0+PjUmMTUpLTEsKDMxJm0pK3MpO3JldHVybiBhLnllYXI9Zy5nZXRGdWxsWWVhcigpLGEubW9udGg9MStnLmdldE1vbnRoKCksYS5kYXk9Zy5nZXREYXRlKCksYX0odCxzLHIsbyk7cmV0dXJuIGEudG9KRChsLnllYXIsbC5tb250aCxsLmRheSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWk9dCxhPWV8fHt9O2Vsc2V7aWYoISgibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgeWVhciBvdXRzaWRlIHJhbmdlIDE4ODgtMjExMSIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMikpdGhyb3cgbmV3IEVycm9yKCJTb2xhciBtb250aCBvdXRzaWRlIHJhbmdlIDEgLSAxMiIpO2lmKCEoIm51bWJlciI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMSkpdGhyb3cgbmV3IEVycm9yKCJTb2xhciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzEiKTtpPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cn0sYT1ufHx7fX12YXIgbz1oW2kueWVhci1oWzBdXSxzPWkueWVhcjw8OXxpLm1vbnRoPDw1fGkuZGF5O2EueWVhcj1zPj1vP2kueWVhcjppLnllYXItMSxvPWhbYS55ZWFyLWhbMF1dO3ZhciBsLGM9bmV3IERhdGUobz4+OSY0MDk1LChvPj41JjE1KS0xLDMxJm8pLHU9bmV3IERhdGUoaS55ZWFyLGkubW9udGgtMSxpLmRheSk7bD1NYXRoLnJvdW5kKCh1LWMpLzg2NGU1KTt2YXIgcCxkPWZbYS55ZWFyLWZbMF1dO2ZvcihwPTA7cDwxMztwKyspe3ZhciBtPWQmMTw8MTItcD8zMDoyOTtpZihsPG0pYnJlYWs7bC09bX12YXIgZz1kPj4xMzshZ3x8cDxnPyhhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD0xK3ApOnA9PT1nPyhhLmlzSW50ZXJjYWxhcnk9ITAsYS5tb250aD1wKTooYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9cCk7cmV0dXJuIGEuZGF5PTErbCxhfShlLnllYXIoKSxlLm1vbnRoKCksZS5kYXkoKSksbj10aGlzLnRvTW9udGhJbmRleChyLnllYXIsci5tb250aCxyLmlzSW50ZXJjYWxhcnkpO3JldHVybiB0aGlzLm5ld0RhdGUoci55ZWFyLG4sci5kYXkpfSxmcm9tU3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2gocykscj10aGlzLl92YWxpZGF0ZVllYXIoK2VbMV0pLG49K2VbMl0saT0hIWVbM10sYT10aGlzLnRvTW9udGhJbmRleChyLG4saSksbz0rZVs0XTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsYSxvKX0sYWRkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnllYXIoKSxpPXQubW9udGgoKSxhPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSksbD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoby5wcm90b3R5cGUpLmFkZC5jYWxsKHRoaXMsdCxlLHIpO2lmKCJ5Ij09PXIpe3ZhciBjPWwueWVhcigpLHU9bC5tb250aCgpLGY9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgoYyxzKSxoPWEmJmY/dGhpcy50b01vbnRoSW5kZXgoYyxzLCEwKTp0aGlzLnRvTW9udGhJbmRleChjLHMsITEpO2ghPT11JiZsLm1vbnRoKGgpfXJldHVybiBsfX0pO3ZhciBzPS9eXHMqKC0/XGRcZFxkXGR8XGRcZClbLS9dKFxkP1xkKShbaUldPylbLS9dKFxkP1xkKS9tLGw9L15cZD9cZFtpSV0/L20sYz0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/XHU2NzA4L20sdT0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/L207bi5jYWxlbmRhcnMuY2hpbmVzZT1vO3ZhciBmPVsxODg3LDU3ODAsNTgwMiwxOTE1NywyNzQyLDUwMzU5LDExOTgsMjY0Niw0NjM3OCw3NDY2LDM0MTIsMzAxMjIsNTQ4Miw2Nzk0OSwyMzk2LDUyOTQsNDM1OTcsNjczMiw2OTU0LDM2MTgxLDI3NzIsNDk1NCwxODc4MSwyMzk2LDU0NDI3LDUyNzQsNjczMCw0Nzc4MSw1ODAwLDY4NjgsMjEyMTAsNDc5MCw1OTcwMywyMzUwLDUyNzAsNDY2NjcsMzQwMiwzNDk2LDM4MzI1LDEzODgsNDc4MiwxODczNSwyMzUwLDUyMzc0LDY4MDQsNzQ5OCw0NDQ1NywyOTA2LDEzODgsMjkyOTQsNDcwMCw2Mzc4OSw2NDQyLDY4MDQsNTYxMzgsNTgwMiwyNzcyLDM4MjM1LDEyMTAsNDY5OCwyMjgyNyw1NDE4LDYzMTI1LDM0NzYsNTgwMiw0MzcwMSwyNDg0LDUzMDIsMjcyMjMsMjY0Niw3MDk1NCw3NDY2LDM0MTIsNTQ2OTgsNTQ4MiwyNDEyLDM4MDYyLDUyOTQsMjYzNiwzMjAzOCw2OTU0LDYwMjQ1LDI3NzIsNDgyNiw0MzM1NywyMzk0LDUyNzQsMzk1MDEsNjczMCw3MjM1Nyw1ODAwLDU4NDQsNTM5NzgsNDc5MCwyMzU4LDM4MDM5LDUyNzAsODc2MjcsMzQwMiwzNDk2LDU0NzA4LDU0ODQsNDc4Miw0MzMxMSwyMzUwLDMyMjIsMjc5NzgsNzQ5OCw2ODk2NSwyOTA0LDU0ODQsNDU2NzcsNDcwMCw2NDQ0LDM5NTczLDY4MDQsNjk4NiwxOTI4NSwyNzcyLDYyODExLDEyMTAsNDY5OCw0NzQwMyw1NDE4LDU3ODAsMzg1NzAsNTU0Niw3NjQ2OSwyNDIwLDUzMDIsNTE3OTksMjY0Niw1NDE0LDM2NTAxLDM0MTIsNTU0NiwxODg2OSwyNDEyLDU0NDQ2LDUyNzYsNjczMiw0ODQyMiw2ODIyLDI5MDAsMjgwMTAsNDgyNiw5MjUwOSwyMzk0LDUyNzQsNTU4ODMsNjczMCw2ODIwLDQ3OTU2LDU4MTIsMjc3OCwxODc3OSwyMzU4LDYyNjE1LDUyNzAsNTQ1MCw0Njc1NywzNDkyLDU1NTYsMjczMTgsNDcxOCw2Nzg4NywyMzUwLDMyMjIsNTI1NTQsNzQ5OCwzNDI4LDM4MjUyLDU0NjgsNDcwMCwzMTAyMiw2NDQ0LDY0MTQ5LDY4MDQsNjk4Niw0Mzg2MSwyNzcyLDUzMzgsMzU0MjEsMjY1MCw3MDk1NSw1NDE4LDU3ODAsNTQ5NTQsNTU0NiwyNzQwLDM4MDc0LDUzMDIsMjY0NiwyOTk5MSwzMzY2LDYxMDExLDM0MTIsNTU0Niw0MzQ0NSwyNDEyLDUyOTQsMzU0MDYsNjczMiw3Mjk5OCw2ODIwLDY5OTYsNTI1ODYsMjc3OCwyMzk2LDM4MDQ1LDUyNzQsNjY5OCwyMzMzMyw2ODIwLDY0MzM4LDU4MTIsMjc0Niw0MzM1NSwyMzU4LDUyNzAsMzk0OTksNTQ1MCw3OTUyNSwzNDkyLDU1NDhdLGg9WzE4ODcsOTY2NzMyLDk2NzIzMSw5Njc3MzMsOTY4MjY1LDk2ODc2Niw5NjkyOTcsOTY5Nzk4LDk3MDI5OCw5NzA4MjksOTcxMzMwLDk3MTgzMCw5NzIzNjIsOTcyODYzLDk3MzM5NSw5NzM4OTYsOTc0Mzk3LDk3NDkyOCw5NzU0MjgsOTc1OTI5LDk3NjQ2MSw5NzY5NjIsOTc3NDYyLDk3Nzk5NCw5Nzg0OTQsOTc5MDI2LDk3OTUyNiw5ODAwMjYsOTgwNTU4LDk4MTA1OSw5ODE1NTksOTgyMDkxLDk4MjU5Myw5ODMxMjQsOTgzNjI0LDk4NDEyNCw5ODQ2NTYsOTg1MTU3LDk4NTY1Niw5ODYxODksOTg2NjkwLDk4NzE5MSw5ODc3MjIsOTg4MjIyLDk4ODc1Myw5ODkyNTQsOTg5NzU0LDk5MDI4Niw5OTA3ODgsOTkxMjg4LDk5MTgxOSw5OTIzMTksOTkyODUxLDk5MzM1Miw5OTM4NTEsOTk0MzgzLDk5NDg4NSw5OTUzODUsOTk1OTE3LDk5NjQxOCw5OTY5MTgsOTk3NDUwLDk5Nzk0OSw5OTg0ODEsOTk4OTgyLDk5OTQ4MywxMDAwMDE0LDEwMDA1MTUsMTAwMTAxNiwxMDAxNTQ4LDEwMDIwNDcsMTAwMjU3OCwxMDAzMDgwLDEwMDM1ODAsMTAwNDExMSwxMDA0NjEzLDEwMDUxMTMsMTAwNTY0NSwxMDA2MTQ2LDEwMDY2NDUsMTAwNzE3NywxMDA3Njc4LDEwMDgyMDksMTAwODcxMCwxMDA5MjExLDEwMDk3NDMsMTAxMDI0MywxMDEwNzQzLDEwMTEyNzUsMTAxMTc3NSwxMDEyMzA2LDEwMTI4MDcsMTAxMzMwOCwxMDEzODQwLDEwMTQzNDEsMTAxNDg0MSwxMDE1MzczLDEwMTU4NzQsMTAxNjQwNCwxMDE2OTA1LDEwMTc0MDUsMTAxNzkzNywxMDE4NDM4LDEwMTg5MzksMTAxOTQ3MSwxMDE5OTcyLDEwMjA0NzEsMTAyMTAwMiwxMDIxNTAzLDEwMjIwMzUsMTAyMjUzNSwxMDIzMDM2LDEwMjM1NjgsMTAyNDA2OSwxMDI0NTY4LDEwMjUxMDAsMTAyNTYwMSwxMDI2MTAyLDEwMjY2MzMsMTAyNzEzMywxMDI3NjY2LDEwMjgxNjcsMTAyODY2NiwxMDI5MTk4LDEwMjk2OTksMTAzMDE5OSwxMDMwNzMwLDEwMzEyMzEsMTAzMTc2MywxMDMyMjY0LDEwMzI3NjQsMTAzMzI5NiwxMDMzNzk3LDEwMzQyOTcsMTAzNDgyOCwxMDM1MzI5LDEwMzU4MzAsMTAzNjM2MiwxMDM2ODYxLDEwMzczOTMsMTAzNzg5NCwxMDM4Mzk0LDEwMzg5MjUsMTAzOTQyNywxMDM5OTI3LDEwNDA0NTksMTA0MDk1OSwxMDQxNDkxLDEwNDE5OTIsMTA0MjQ5MiwxMDQzMDIzLDEwNDM1MjQsMTA0NDAyNCwxMDQ0NTU2LDEwNDUwNTcsMTA0NTU1OCwxMDQ2MDkwLDEwNDY1OTAsMTA0NzEyMSwxMDQ3NjIyLDEwNDgxMjIsMTA0ODY1NCwxMDQ5MTU0LDEwNDk2NTUsMTA1MDE4NywxMDUwNjg5LDEwNTEyMTksMTA1MTcyMCwxMDUyMjIwLDEwNTI3NTEsMTA1MzI1MiwxMDUzNzUyLDEwNTQyODQsMTA1NDc4NiwxMDU1Mjg1LDEwNTU4MTcsMTA1NjMxNywxMDU2ODQ5LDEwNTczNDksMTA1Nzg1MCwxMDU4MzgyLDEwNTg4ODMsMTA1OTM4MywxMDU5OTE1LDEwNjA0MTUsMTA2MDk0NywxMDYxNDQ3LDEwNjE5NDcsMTA2MjQ3OSwxMDYyOTgxLDEwNjM0ODAsMTA2NDAxMiwxMDY0NTE0LDEwNjUwMTQsMTA2NTU0NSwxMDY2MDQ1LDEwNjY1NzcsMTA2NzA3OCwxMDY3NTc4LDEwNjgxMTAsMTA2ODYxMSwxMDY5MTEyLDEwNjk2NDIsMTA3MDE0MiwxMDcwNjc0LDEwNzExNzUsMTA3MTY3NSwxMDcyMjA3LDEwNzI3MDksMTA3MzIwOSwxMDczNzQwLDEwNzQyNDEsMTA3NDc0MSwxMDc1MjczLDEwNzU3NzMsMTA3NjMwNSwxMDc2ODA3LDEwNzczMDgsMTA3NzgzOSwxMDc4MzQwLDEwNzg4NDAsMTA3OTM3MiwxMDc5ODcxLDEwODA0MDMsMTA4MDkwNF19LHsiLi4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJDb3B0aWMiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ29wdGljIixlcG9jaHM6WyJCQU0iLCJBTSJdLG1vbnRoTmFtZXM6WyJUaG91dCIsIlBhb3BpIiwiSGF0aG9yIiwiS29pYWsiLCJUb2JpIiwiTWVzaGlyIiwiUGFyZW1oYXQiLCJQYXJlbW91ZGUiLCJQYXNob25zIiwiUGFvbmkiLCJFcGlwIiwiTWVzb3JpIiwiUGkgS29naSBFbmF2b3QiXSxtb250aE5hbWVzU2hvcnQ6WyJUaG8iLCJQYW8iLCJIYXRoIiwiS29pIiwiVG9iIiwiTWVzaCIsIlBhdCIsIlBhZCIsIlBhc2giLCJQYW8iLCJFcGkiLCJNZXNvIiwiUGlLIl0sZGF5TmFtZXM6WyJUa3lyaWFrYSIsIlBlc25hdSIsIlBzaG9tZW50IiwiUGVmdG9vdSIsIlB0aW91IiwiUHNvb3UiLCJQc2FiYmF0b24iXSxkYXlOYW1lc1Nob3J0OlsiVGt5IiwiUGVzIiwiUHNoIiwiUGVmIiwiUHRpIiwiUHNvIiwiUHNhIl0sZGF5TmFtZXNNaW46WyJUayIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0IiwiUHNvIiwiUHNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEzfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmNvcHRpYz1hfSx7Ii4uL21haW4iOjM0MSwib2JqZWN0LWFzc2lnbiI6MjQyfV0sMzI5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRGlzY3dvcmxkIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzE2LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJEaXNjd29ybGQiLGVwb2NoczpbIkJVQyIsIlVDIl0sbW9udGhOYW1lczpbIkljayIsIk9mZmxlIiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkdydW5lIiwiQXVndXN0IiwiU3B1bmUiLCJTZWt0b2JlciIsIkVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJJY2siLCJPZmYiLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJHcnUiLCJBdWciLCJTcHUiLCJTZWsiLCJFbWIiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk9jdGVkYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJPY3QiLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiT2MiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToyLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTN9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSw0MDB9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS84KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA4fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKSsxKSU4fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmRheU9mV2Vlayh0LGUscik7cmV0dXJuIG4+PTImJm48PTZ9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue2NlbnR1cnk6b1tNYXRoLmZsb29yKChpLnllYXIoKS0xKS8xMDApKzFdfHwiIn19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpKyhpLnllYXIoKTwwPzE6MCksZT1pLm1vbnRoKCksKHI9aS5kYXkoKSkrKGU+MT8xNjowKSsoZT4yPzMyKihlLTIpOjApKzQwMCoodC0xKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KS1NYXRoLmZsb29yKHRoaXMuamRFcG9jaCktMTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKSsxO3QtPTQwMCooZS0xKSx0Kz10PjE1PzE2OjA7dmFyIHI9TWF0aC5mbG9vcih0LzMyKSsxLG49dC0zMiooci0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZTw9MD9lLTE6ZSxyLG4pfX0pO3ZhciBvPXsyMDoiRnJ1aXRiYXQiLDIxOiJBbmNob3Z5In07bi5jYWxlbmRhcnMuZGlzY3dvcmxkPWF9LHsiLi4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzMzA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJFdGhpb3BpYW4iLGpkRXBvY2g6MTcyNDIyMC41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRXRoaW9waWFuIixlcG9jaHM6WyJCRUUiLCJFRSJdLG1vbnRoTmFtZXM6WyJNZXNrZXJlbSIsIlRpa2VtZXQiLCJIaWRhciIsIlRhaGVzYXMiLCJUaXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzZSIsIlBhZ3VtZSJdLG1vbnRoTmFtZXNTaG9ydDpbIk1lcyIsIlRpayIsIkhpZCIsIlRhaCIsIlRpciIsIlllayIsIk1lZyIsIk1pYSIsIkdlbiIsIlNlbiIsIkhhbSIsIk5laCIsIlBhZyJdLGRheU5hbWVzOlsiRWh1ZCIsIlNlZ25vIiwiTWFrc2Vnbm8iLCJJcm9iIiwiSGFtdXMiLCJBcmIiLCJLaWRhbWUiXSxkYXlOYW1lc1Nob3J0OlsiRWh1IiwiU2VnIiwiTWFrIiwiSXJvIiwiSGFtIiwiQXJiIiwiS2lkIl0sZGF5TmFtZXNNaW46WyJFaCIsIlNlIiwiTWEiLCJJciIsIkhhIiwiQXIiLCJLaSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5ldGhpb3BpYW49YX0seyIuLi9tYWluIjozNDEsIm9iamVjdC1hc3NpZ24iOjI0Mn1dLDMzMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJIZWJyZXciLGpkRXBvY2g6MzQ3OTk1LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjcsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSGVicmV3IixlcG9jaHM6WyJCQU0iLCJBTSJdLG1vbnRoTmFtZXM6WyJOaXNhbiIsIkl5YXIiLCJTaXZhbiIsIlRhbW11eiIsIkF2IiwiRWx1bCIsIlRpc2hyZWkiLCJDaGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciIsIkFkYXIgSUkiXSxtb250aE5hbWVzU2hvcnQ6WyJOaXMiLCJJeWEiLCJTaXYiLCJUYW0iLCJBdiIsIkVsdSIsIlRpcyIsIkNoZSIsIktpcyIsIlRldiIsIlNoZSIsIkFkYSIsIkFkMiJdLGRheU5hbWVzOlsiWW9tIFJpc2hvbiIsIllvbSBTaGVuaSIsIllvbSBTaGxpc2hpIiwiWW9tIFJldmknaSIsIllvbSBDaGFtaXNoaSIsIllvbSBTaGlzaGkiLCJZb20gU2hhYmJhdCJdLGRheU5hbWVzU2hvcnQ6WyJSaXMiLCJTaGUiLCJTaGwiLCJSZXYiLCJDaGEiLCJTaGkiLCJTaGEiXSxkYXlOYW1lc01pbjpbIlJpIiwiU2hlIiwiU2hsIiwiUmUiLCJDaCIsIlNoaSIsIlNoYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMuX2xlYXBZZWFyKGUueWVhcigpKX0sX2xlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiBvKDcqKHQ9dDwwP3QrMTp0KSsxLDE5KTw3fSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSx0aGlzLl9sZWFwWWVhcih0LnllYXI/dC55ZWFyKCk6dCk/MTM6MTJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdGhpcy50b0pEKC0xPT09dD8xOnQrMSw3LDEpLXRoaXMudG9KRCh0LDcsMSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMTI9PT1lJiZ0aGlzLmxlYXBZZWFyKHQpfHw4PT09ZSYmNT09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIoaSk/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIoaSklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShhKSt0aGlzLl9kZWxheTIoYSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3Iocz0xO3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpfWVsc2UgZm9yKHM9NztzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtyZXR1cm4gb30sX2RlbGF5MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKCgyMzUqdC0yMzQpLzE5KSxyPTEyMDg0KzEzNzUzKmUsbj0yOSplK01hdGguZmxvb3Ioci8yNTkyMCk7cmV0dXJuIG8oMyoobisxKSw3KTwzJiZuKyssbn0sX2RlbGF5MjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kZWxheTEodC0xKSxyPXRoaXMuX2RlbGF5MSh0KTtyZXR1cm4gdGhpcy5fZGVsYXkxKHQrMSktcj09MzU2PzI6ci1lPT0zODI/MTowfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O2Zvcih2YXIgZT1NYXRoLmZsb29yKDk4NDk2Kih0LXRoaXMuamRFcG9jaCkvMzU5NzUzNTEpLTE7dD49dGhpcy50b0pEKC0xPT09ZT8xOmUrMSw3LDEpOyllKys7Zm9yKHZhciByPXQ8dGhpcy50b0pEKGUsMSwxKT83OjE7dD50aGlzLnRvSkQoZSxyLHRoaXMuZGF5c0luTW9udGgoZSxyKSk7KXIrKzt2YXIgbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5oZWJyZXc9YX0seyIuLi9tYWluIjozNDEsIm9iamVjdC1hc3NpZ24iOjI0Mn1dLDMzMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IklzbGFtaWMiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IklzbGFtaWMiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgYWwtdGhhbmkiLCJKdW1hZGEgYWwtYXd3YWwiLCJKdW1hZGEgYWwtdGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLWFoYWQiLCJZYXdtIGFsLWl0aG5heW4iLCJZYXdtIGF0aC10aHVsYWF0aGFhJyIsIllhd20gYWwtYXJiaSdhYSciLCJZYXdtIGFsLWtoYW1cdTAxMmJzIiwiWWF3bSBhbC1qdW0nYSIsIllhd20gYXMtc2FidCJdLGRheU5hbWVzU2hvcnQ6WyJBaGEiLCJJdGgiLCJUaHUiLCJBcmIiLCJLaGEiLCJKdW0iLCJTYWIiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXQiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MzU1OjM1NH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCksdD10PD0wP3QrMTp0LChyPWkuZGF5KCkpK01hdGguY2VpbCgyOS41KihlLTEpKSszNTQqKHQtMSkrTWF0aC5mbG9vcigoMysxMSp0KS8zMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9TWF0aC5mbG9vcigoMzAqKHQtdGhpcy5qZEVwb2NoKSsxMDY0NikvMTA2MzEpO2U9ZTw9MD9lLTE6ZTt2YXIgcj1NYXRoLm1pbigxMixNYXRoLmNlaWwoKHQtMjktdGhpcy50b0pEKGUsMSwxKSkvMjkuNSkrMSksbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5pc2xhbWljPWF9LHsiLi4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJKdWxpYW4iLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ikp1bGlhbiIsZXBvY2hzOlsiQkMiLCJBRCJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCk8MD9lLnllYXIoKSsxOmUueWVhcigpKSU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7Ii4uL21haW4iOjM0MSwib2JqZWN0LWFzc2lnbiI6MjQyfV0sMzM0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJNYXlhbiIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJNYXlhbiIsZXBvY2hzOlsiIiwiIl0sbW9udGhOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sbW9udGhOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxkYXlOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc01pbjpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6IllZWVkubS5kIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6WyJQb3AiLCJVbyIsIlppcCIsIlpvdHoiLCJUemVjIiwiWHVsIiwiWWF4a2luIiwiTW9sIiwiQ2hlbiIsIllheCIsIlphYyIsIkNlaCIsIk1hYyIsIkthbmtpbiIsIk11YW4iLCJQYXgiLCJLYXlhYiIsIkN1bWt1IiwiVWF5ZWIiXSx0em9sa2luTW9udGhzOlsiSW1peCIsIklrIiwiQWtiYWwiLCJLYW4iLCJDaGljY2hhbiIsIkNpbWkiLCJNYW5payIsIkxhbWF0IiwiTXVsdWMiLCJPYyIsIkNodWVuIiwiRWIiLCJCZW4iLCJJeCIsIk1lbiIsIkNpYiIsIkNhYmFuIiwiRXR6bmFiIiwiQ2F1YWMiLCJBaGF1Il19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlKyIuIitNYXRoLmZsb29yKHQvMjApKyIuIit0JTIwfSxmb3JZZWFyOmZ1bmN0aW9uKHQpe2lmKCh0PXQuc3BsaXQoIi4iKSkubGVuZ3RoPDMpdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2U9MjAqZStufXJldHVybiBlfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxOH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLDB9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwzNjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMjB9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwhMH0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS50b0pEKCksYT10aGlzLl90b0hhYWIoaSksbz10aGlzLl90b1R6b2xraW4oaSk7cmV0dXJue2hhYWJNb250aE5hbWU6dGhpcy5sb2NhbC5oYWFiTW9udGhzW2FbMF0tMV0saGFhYk1vbnRoOmFbMF0saGFhYkRheTphWzFdLHR6b2xraW5EYXlOYW1lOnRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1tvWzBdLTFdLHR6b2xraW5EYXk6b1swXSx0em9sa2luVHJlY2VuYTpvWzFdfX0sX3RvSGFhYjpmdW5jdGlvbih0KXt2YXIgZT1vKCh0LT10aGlzLmpkRXBvY2gpKzgrMzQwLDM2NSk7cmV0dXJuW01hdGguZmxvb3IoZS8yMCkrMSxvKGUsMjApXX0sX3RvVHpvbGtpbjpmdW5jdGlvbih0KXtyZXR1cm5bcygodC09dGhpcy5qZEVwb2NoKSsyMCwyMCkscyh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIGkuZGF5KCkrMjAqaS5tb250aCgpKzM2MCppLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMubWF5YW49YX0seyIuLi9tYWluIjozNDEsIm9iamVjdC1hc3NpZ24iOjI0Mn1dLDMzNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyO3ZhciBvPW4uaW5zdGFuY2UoImdyZWdvcmlhbiIpO2koYS5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkTW9udGgpOyh0PWkueWVhcigpKTwwJiZ0Kys7Zm9yKHZhciBhPWkuZGF5KCkscz0xO3M8aS5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLG4uY2FsZW5kYXJzLm5hbmFrc2hhaGk9YX0seyIuLi9tYWluIjozNDEsIm9iamVjdC1hc3NpZ24iOjI0Mn1dLDMzNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT1uLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgYz10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcihjKSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZShjLDEsMSkuYWRkKG8sImQiKS50b0pEKCl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1uLmluc3RhbmNlKCkuZnJvbUpEKHQpLHI9ZS55ZWFyKCksaT1lLmRheU9mWWVhcigpLGE9cis1Njt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKGEpO2Zvcih2YXIgbz05LHM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVswXSxsPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tcysxO2k+bDspKytvPjEyJiYobz0xLGErKyksbCs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXTt2YXIgYz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLShsLWkpO3JldHVybiB0aGlzLm5ld0RhdGUoYSxvLGMpfSxfY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRheXNQZXJNb250aC5zbGljZSgwKTtlLnVuc2hpZnQoMTcpO2Zvcih2YXIgcj10LTE7cjx0KzI7cisrKXZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMmUzOlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDI6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwNDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA2OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDA5OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDEyOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxMzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTQ6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxNjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE4OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxOTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwMjM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDI3OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjk6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDMwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMV0sMjAzMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzEsMzEsMzEsMzEsMzEsMzFdLDIwMzI6WzE3LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSwyMDMzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzU6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDM2OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM5OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0MDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDE6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0MzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ1OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDc6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDUxOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDU0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMjksMzBdLDIwNTY6WzE3LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDU3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA1ODpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYwOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjI6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwyMDYzOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDY2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjA2NzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjg6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3MDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNzE6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NjpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNzc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDc4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwODA6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDgxOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODM6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg3OlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4ODpbMTYsMzAsMzEsMzIsMzIsMzAsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MTpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTI6WzE2LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDMwLDMwXSwyMDk2OlsxNywzMCwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA5NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDI5LDMwLDI5LDMwLDMwLDMxXSwyMDk5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwyOSwzMCwzMCwzMF0sMjEwMDpbMTcsMzEsMzIsMzEsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdfX0pLG4uY2FsZW5kYXJzLm5lcGFsaT1hfSx7Ii4uL21haW4iOjM0MSwib2JqZWN0LWFzc2lnbiI6MjQyfV0sMzM3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IlBlcnNpYW4iLGpkRXBvY2g6MTk0ODMyMC41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlBlcnNpYW4iLGVwb2NoczpbIkJQIiwiQVAiXSxtb250aE5hbWVzOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGF5IiwiQmFobWFuIiwiRXNmYW5kIl0sbW9udGhOYW1lc1Nob3J0OlsiRmFyIiwiT3JkIiwiS2hvIiwiVGlyIiwiTW9yIiwiU2hhIiwiTWVoIiwiQWJhIiwiQXphIiwiRGF5IiwiQmFoIiwiRXNmIl0sZGF5TmFtZXM6WyJZZWtzaGFtYmUiLCJEb3NoYW1iZSIsIlNlc2hhbWJlIiwiQ2hceGU2aGFyc2hhbWJlIiwiUGFuanNoYW1iZSIsIkpvbSdlIiwiU2hhbWJlIl0sZGF5TmFtZXNTaG9ydDpbIlllayIsIkRvIiwiU2UiLCJDaFx4ZTYiLCJQYW5qIiwiSm9tIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJZZSIsIkRvIiwiU2UiLCJDaCIsIlBhIiwiSm8iLCJTaCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDY4MiooKGUueWVhcigpLShlLnllYXIoKT4wPzQ3NDo0NzMpKSUyODIwKzQ3NCszOCklMjgxNjw2ODJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC0obi5kYXlPZldlZWsoKSsxKSU3LCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT10LSh0Pj0wPzQ3NDo0NzMpLHM9NDc0K28oYSwyODIwKTtyZXR1cm4gcisoZTw9Nz8zMSooZS0xKTozMCooZS0xKSs2KStNYXRoLmZsb29yKCg2ODIqcy0xMTApLzI4MTYpKzM2NSoocy0xKSsxMDI5OTgzKk1hdGguZmxvb3IoYS8yODIwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPSh0PU1hdGguZmxvb3IodCkrLjUpLXRoaXMudG9KRCg0NzUsMSwxKSxyPU1hdGguZmxvb3IoZS8xMDI5OTgzKSxuPW8oZSwxMDI5OTgzKSxpPTI4MjA7aWYoMTAyOTk4MiE9PW4pe3ZhciBhPU1hdGguZmxvb3Iobi8zNjYpLHM9byhuLDM2Nik7aT1NYXRoLmZsb29yKCgyMTM0KmErMjgxNipzKzI4MTUpLzEwMjg1MjIpK2ErMX12YXIgbD1pKzI4MjAqcis0NzQ7bD1sPD0wP2wtMTpsO3ZhciBjPXQtdGhpcy50b0pEKGwsMSwxKSsxLHU9Yzw9MTg2P01hdGguY2VpbChjLzMxKTpNYXRoLmNlaWwoKGMtNikvMzApLGY9dC10aGlzLnRvSkQobCx1LDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShsLHUsZil9fSksbi5jYWxlbmRhcnMucGVyc2lhbj1hLG4uY2FsZW5kYXJzLmphbGFsaT1hfSx7Ii4uL21haW4iOjM0MSwib2JqZWN0LWFzc2lnbiI6MjQyfV0sMzM4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiVGFpd2FuIixqZEVwb2NoOjI0MTk0MDIuNSx5ZWFyc09mZnNldDoxOTExLGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlRhaXdhbiIsZXBvY2hzOlsiQlJPQyIsIlJPQyJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGUueWVhcigpKTtyZXR1cm4gYS5sZWFwWWVhcih0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihpLnllYXIoKSk7cmV0dXJuIGEud2Vla09mWWVhcih0LGkubW9udGgoKSxpLmRheSgpKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdDJnWWVhcihpLnllYXIoKSk7cmV0dXJuIGEudG9KRCh0LGkubW9udGgoKSxpLmRheSgpKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9dGhpcy5fZzJ0WWVhcihlLnllYXIoKSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLGUubW9udGgoKSxlLmRheSgpKX0sX3QyZ1llYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX19KSxuLmNhbGVuZGFycy50YWl3YW49b30seyIuLi9tYWluIjozNDEsIm9iamVjdC1hc3NpZ24iOjI0Mn1dLDMzOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRoYWkiLGpkRXBvY2g6MTUyMzA5OC41LHllYXJzT2Zmc2V0OjU0MyxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUaGFpIixlcG9jaHM6WyJCQkUiLCJCRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGUueWVhcigpKTtyZXR1cm4gYS5sZWFwWWVhcih0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihpLnllYXIoKSk7cmV0dXJuIGEud2Vla09mWWVhcih0LGkubW9udGgoKSxpLmRheSgpKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdDJnWWVhcihpLnllYXIoKSk7cmV0dXJuIGEudG9KRCh0LGkubW9udGgoKSxpLmRheSgpKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9dGhpcy5fZzJ0WWVhcihlLnllYXIoKSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLGUubW9udGgoKSxlLmRheSgpKX0sX3QyZ1llYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX19KSxuLmNhbGVuZGFycy50aGFpPW99LHsiLi4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJVbW1BbFF1cmEiLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlVtbSBhbC1RdXJhIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIkFsLU11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIEFsLVRoYW5pIiwiSnVtYWRhIEFsLUF3d2FsIiwiSnVtYWRhIEFsLVRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1BaGFkIiwiWWF3bSBhbC1JdGhuYWluIiwiWWF3bSBhbC1UaGFsXHUwMTAxdGhcdTAxMDFcdTIwMTkiLCJZYXdtIGFsLUFyYmFcdTIwMThcdTAxMDFcdTIwMTkiLCJZYXdtIGFsLUtoYW1cdTAxMmJzIiwiWWF3bSBhbC1KdW1cdTIwMThhIiwiWWF3bSBhbC1TYWJ0Il0sZGF5TmFtZXNNaW46WyJBaCIsIkl0aCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiEwfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiAzNTU9PT10aGlzLmRheXNJblllYXIoZS55ZWFyKCkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTE7cjw9MTI7cisrKWUrPXRoaXMuZGF5c0luTW9udGgodCxyKTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKS50b0pEKCktMjRlNSsuNSxpPTAsYT0wO2E8by5sZW5ndGg7YSsrKXtpZihvW2FdPnIpcmV0dXJuIG9baV0tb1tpLTFdO2krK31yZXR1cm4gMzB9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSxhPTEyKihpLnllYXIoKS0xKStpLm1vbnRoKCktMTUyOTI7cmV0dXJuIGkuZGF5KCkrb1thLTFdLTErMjRlNS0uNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTI0ZTUrLjUscj0wLG49MDtuPG8ubGVuZ3RoJiYhKG9bbl0+ZSk7bisrKXIrKzt2YXIgaT1yKzE1MjkyLGE9TWF0aC5mbG9vcigoaS0xKS8xMikscz1hKzEsbD1pLTEyKmEsYz1lLW9bci0xXSsxO3JldHVybiB0aGlzLm5ld0RhdGUocyxsLGMpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuaXNWYWxpZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkmJihpPSh0PW51bGwhPXQueWVhcj90LnllYXI6dCk+PTEyNzYmJnQ8PTE1MDApLGl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuX3ZhbGlkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihhLnllYXI8MTI3Nnx8YS55ZWFyPjE1MDApdGhyb3cgaS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gYX19KSxuLmNhbGVuZGFycy51bW1hbHF1cmE9YTt2YXIgbz1bMjAsNTAsNzksMTA5LDEzOCwxNjgsMTk3LDIyNywyNTYsMjg2LDMxNSwzNDUsMzc0LDQwNCw0MzMsNDYzLDQ5Miw1MjIsNTUxLDU4MSw2MTEsNjQxLDY3MCw3MDAsNzI5LDc1OSw3ODgsODE4LDg0Nyw4NzcsOTA2LDkzNiw5NjUsOTk1LDEwMjQsMTA1NCwxMDgzLDExMTMsMTE0MiwxMTcyLDEyMDEsMTIzMSwxMjYwLDEyOTAsMTMyMCwxMzUwLDEzNzksMTQwOSwxNDM4LDE0NjgsMTQ5NywxNTI3LDE1NTYsMTU4NiwxNjE1LDE2NDUsMTY3NCwxNzA0LDE3MzMsMTc2MywxNzkyLDE4MjIsMTg1MSwxODgxLDE5MTAsMTk0MCwxOTY5LDE5OTksMjAyOCwyMDU4LDIwODcsMjExNywyMTQ2LDIxNzYsMjIwNSwyMjM1LDIyNjQsMjI5NCwyMzIzLDIzNTMsMjM4MywyNDEzLDI0NDIsMjQ3MiwyNTAxLDI1MzEsMjU2MCwyNTkwLDI2MTksMjY0OSwyNjc4LDI3MDgsMjczNywyNzY3LDI3OTYsMjgyNiwyODU1LDI4ODUsMjkxNCwyOTQ0LDI5NzMsMzAwMywzMDMyLDMwNjIsMzA5MSwzMTIxLDMxNTAsMzE4MCwzMjA5LDMyMzksMzI2OCwzMjk4LDMzMjcsMzM1NywzMzg2LDM0MTYsMzQ0NiwzNDc2LDM1MDUsMzUzNSwzNTY0LDM1OTQsMzYyMywzNjUzLDM2ODIsMzcxMiwzNzQxLDM3NzEsMzgwMCwzODMwLDM4NTksMzg4OSwzOTE4LDM5NDgsMzk3Nyw0MDA3LDQwMzYsNDA2Niw0MDk1LDQxMjUsNDE1NSw0MTg1LDQyMTQsNDI0NCw0MjczLDQzMDMsNDMzMiw0MzYyLDQzOTEsNDQyMSw0NDUwLDQ0ODAsNDUwOSw0NTM5LDQ1NjgsNDU5OCw0NjI3LDQ2NTcsNDY4Niw0NzE2LDQ3NDUsNDc3NSw0ODA0LDQ4MzQsNDg2Myw0ODkzLDQ5MjIsNDk1Miw0OTgxLDUwMTEsNTA0MCw1MDcwLDUwOTksNTEyOSw1MTU4LDUxODgsNTIxOCw1MjQ4LDUyNzcsNTMwNyw1MzM2LDUzNjYsNTM5NSw1NDI1LDU0NTQsNTQ4NCw1NTEzLDU1NDMsNTU3Miw1NjAyLDU2MzEsNTY2MSw1NjkwLDU3MjAsNTc0OSw1Nzc5LDU4MDgsNTgzOCw1ODY3LDU4OTcsNTkyNiw1OTU2LDU5ODUsNjAxNSw2MDQ0LDYwNzQsNjEwMyw2MTMzLDYxNjIsNjE5Miw2MjIxLDYyNTEsNjI4MSw2MzExLDYzNDAsNjM3MCw2Mzk5LDY0MjksNjQ1OCw2NDg4LDY1MTcsNjU0Nyw2NTc2LDY2MDYsNjYzNSw2NjY1LDY2OTQsNjcyNCw2NzUzLDY3ODMsNjgxMiw2ODQyLDY4NzEsNjkwMSw2OTMwLDY5NjAsNjk4OSw3MDE5LDcwNDgsNzA3OCw3MTA3LDcxMzcsNzE2Niw3MTk2LDcyMjUsNzI1NSw3Mjg0LDczMTQsNzM0NCw3Mzc0LDc0MDMsNzQzMyw3NDYyLDc0OTIsNzUyMSw3NTUxLDc1ODAsNzYxMCw3NjM5LDc2NjksNzY5OCw3NzI4LDc3NTcsNzc4Nyw3ODE2LDc4NDYsNzg3NSw3OTA1LDc5MzQsNzk2NCw3OTkzLDgwMjMsODA1Myw4MDgzLDgxMTIsODE0Miw4MTcxLDgyMDEsODIzMCw4MjYwLDgyODksODMxOSw4MzQ4LDgzNzgsODQwNyw4NDM3LDg0NjYsODQ5Niw4NTI1LDg1NTUsODU4NCw4NjE0LDg2NDMsODY3Myw4NzAyLDg3MzIsODc2MSw4NzkxLDg4MjEsODg1MCw4ODgwLDg5MDksODkzOCw4OTY4LDg5OTcsOTAyNyw5MDU2LDkwODYsOTExNSw5MTQ1LDkxNzUsOTIwNSw5MjM0LDkyNjQsOTI5Myw5MzIyLDkzNTIsOTM4MSw5NDEwLDk0NDAsOTQ3MCw5NDk5LDk1MjksOTU1OSw5NTg5LDk2MTgsOTY0OCw5Njc3LDk3MDYsOTczNiw5NzY1LDk3OTQsOTgyNCw5ODUzLDk4ODMsOTkxMyw5OTQzLDk5NzIsMTAwMDIsMTAwMzIsMTAwNjEsMTAwOTAsMTAxMjAsMTAxNDksMTAxNzgsMTAyMDgsMTAyMzcsMTAyNjcsMTAyOTcsMTAzMjYsMTAzNTYsMTAzODYsMTA0MTUsMTA0NDUsMTA0NzQsMTA1MDQsMTA1MzMsMTA1NjIsMTA1OTIsMTA2MjEsMTA2NTEsMTA2ODAsMTA3MTAsMTA3NDAsMTA3NzAsMTA3OTksMTA4MjksMTA4NTgsMTA4ODgsMTA5MTcsMTA5NDcsMTA5NzYsMTEwMDUsMTEwMzUsMTEwNjQsMTEwOTQsMTExMjQsMTExNTMsMTExODMsMTEyMTMsMTEyNDIsMTEyNzIsMTEzMDEsMTEzMzEsMTEzNjAsMTEzODksMTE0MTksMTE0NDgsMTE0NzgsMTE1MDcsMTE1MzcsMTE1NjcsMTE1OTYsMTE2MjYsMTE2NTUsMTE2ODUsMTE3MTUsMTE3NDQsMTE3NzQsMTE4MDMsMTE4MzIsMTE4NjIsMTE4OTEsMTE5MjEsMTE5NTAsMTE5ODAsMTIwMTAsMTIwMzksMTIwNjksMTIwOTksMTIxMjgsMTIxNTgsMTIxODcsMTIyMTYsMTIyNDYsMTIyNzUsMTIzMDQsMTIzMzQsMTIzNjQsMTIzOTMsMTI0MjMsMTI0NTMsMTI0ODMsMTI1MTIsMTI1NDIsMTI1NzEsMTI2MDAsMTI2MzAsMTI2NTksMTI2ODgsMTI3MTgsMTI3NDcsMTI3NzcsMTI4MDcsMTI4MzcsMTI4NjYsMTI4OTYsMTI5MjYsMTI5NTUsMTI5ODQsMTMwMTQsMTMwNDMsMTMwNzIsMTMxMDIsMTMxMzEsMTMxNjEsMTMxOTEsMTMyMjAsMTMyNTAsMTMyODAsMTMzMTAsMTMzMzksMTMzNjgsMTMzOTgsMTM0MjcsMTM0NTYsMTM0ODYsMTM1MTUsMTM1NDUsMTM1NzQsMTM2MDQsMTM2MzQsMTM2NjQsMTM2OTMsMTM3MjMsMTM3NTIsMTM3ODIsMTM4MTEsMTM4NDAsMTM4NzAsMTM4OTksMTM5MjksMTM5NTgsMTM5ODgsMTQwMTgsMTQwNDcsMTQwNzcsMTQxMDcsMTQxMzYsMTQxNjYsMTQxOTUsMTQyMjQsMTQyNTQsMTQyODMsMTQzMTMsMTQzNDIsMTQzNzIsMTQ0MDEsMTQ0MzEsMTQ0NjEsMTQ0OTAsMTQ1MjAsMTQ1NTAsMTQ1NzksMTQ2MDksMTQ2MzgsMTQ2NjcsMTQ2OTcsMTQ3MjYsMTQ3NTYsMTQ3ODUsMTQ4MTUsMTQ4NDQsMTQ4NzQsMTQ5MDQsMTQ5MzMsMTQ5NjMsMTQ5OTMsMTUwMjEsMTUwNTEsMTUwODEsMTUxMTAsMTUxNDAsMTUxNjksMTUxOTksMTUyMjgsMTUyNTgsMTUyODcsMTUzMTcsMTUzNDcsMTUzNzcsMTU0MDYsMTU0MzYsMTU0NjUsMTU0OTQsMTU1MjQsMTU1NTMsMTU1ODIsMTU2MTIsMTU2NDEsMTU2NzEsMTU3MDEsMTU3MzEsMTU3NjAsMTU3OTAsMTU4MjAsMTU4NDksMTU4NzgsMTU5MDgsMTU5MzcsMTU5NjYsMTU5OTYsMTYwMjUsMTYwNTUsMTYwODUsMTYxMTQsMTYxNDQsMTYxNzQsMTYyMDQsMTYyMzMsMTYyNjIsMTYyOTIsMTYzMjEsMTYzNTAsMTYzODAsMTY0MDksMTY0MzksMTY0NjgsMTY0OTgsMTY1MjgsMTY1NTgsMTY1ODcsMTY2MTcsMTY2NDYsMTY2NzYsMTY3MDUsMTY3MzQsMTY3NjQsMTY3OTMsMTY4MjMsMTY4NTIsMTY4ODIsMTY5MTIsMTY5NDEsMTY5NzEsMTcwMDEsMTcwMzAsMTcwNjAsMTcwODksMTcxMTgsMTcxNDgsMTcxNzcsMTcyMDcsMTcyMzYsMTcyNjYsMTcyOTUsMTczMjUsMTczNTUsMTczODQsMTc0MTQsMTc0NDQsMTc0NzMsMTc1MDIsMTc1MzIsMTc1NjEsMTc1OTEsMTc2MjAsMTc2NTAsMTc2NzksMTc3MDksMTc3MzgsMTc3NjgsMTc3OTgsMTc4MjcsMTc4NTcsMTc4ODYsMTc5MTYsMTc5NDUsMTc5NzUsMTgwMDQsMTgwMzQsMTgwNjMsMTgwOTMsMTgxMjIsMTgxNTIsMTgxODEsMTgyMTEsMTgyNDEsMTgyNzAsMTgzMDAsMTgzMzAsMTgzNTksMTgzODgsMTg0MTgsMTg0NDcsMTg0NzYsMTg1MDYsMTg1MzUsMTg1NjUsMTg1OTUsMTg2MjUsMTg2NTQsMTg2ODQsMTg3MTQsMTg3NDMsMTg3NzIsMTg4MDIsMTg4MzEsMTg4NjAsMTg4OTAsMTg5MTksMTg5NDksMTg5NzksMTkwMDgsMTkwMzgsMTkwNjgsMTkwOTgsMTkxMjcsMTkxNTYsMTkxODYsMTkyMTUsMTkyNDQsMTkyNzQsMTkzMDMsMTkzMzMsMTkzNjIsMTkzOTIsMTk0MjIsMTk0NTIsMTk0ODEsMTk1MTEsMTk1NDAsMTk1NzAsMTk1OTksMTk2MjgsMTk2NTgsMTk2ODcsMTk3MTcsMTk3NDYsMTk3NzYsMTk4MDYsMTk4MzYsMTk4NjUsMTk4OTUsMTk5MjQsMTk5NTQsMTk5ODMsMjAwMTIsMjAwNDIsMjAwNzEsMjAxMDEsMjAxMzAsMjAxNjAsMjAxOTAsMjAyMTksMjAyNDksMjAyNzksMjAzMDgsMjAzMzgsMjAzNjcsMjAzOTYsMjA0MjYsMjA0NTUsMjA0ODUsMjA1MTQsMjA1NDQsMjA1NzMsMjA2MDMsMjA2MzMsMjA2NjIsMjA2OTIsMjA3MjEsMjA3NTEsMjA3ODAsMjA4MTAsMjA4MzksMjA4NjksMjA4OTgsMjA5MjgsMjA5NTcsMjA5ODcsMjEwMTYsMjEwNDYsMjEwNzYsMjExMDUsMjExMzUsMjExNjQsMjExOTQsMjEyMjMsMjEyNTMsMjEyODIsMjEzMTIsMjEzNDEsMjEzNzEsMjE0MDAsMjE0MzAsMjE0NTksMjE0ODksMjE1MTksMjE1NDgsMjE1NzgsMjE2MDcsMjE2MzcsMjE2NjYsMjE2OTYsMjE3MjUsMjE3NTQsMjE3ODQsMjE4MTMsMjE4NDMsMjE4NzMsMjE5MDIsMjE5MzIsMjE5NjIsMjE5OTEsMjIwMjEsMjIwNTAsMjIwODAsMjIxMDksMjIxMzgsMjIxNjgsMjIxOTcsMjIyMjcsMjIyNTYsMjIyODYsMjIzMTYsMjIzNDYsMjIzNzUsMjI0MDUsMjI0MzQsMjI0NjQsMjI0OTMsMjI1MjIsMjI1NTIsMjI1ODEsMjI2MTEsMjI2NDAsMjI2NzAsMjI3MDAsMjI3MzAsMjI3NTksMjI3ODksMjI4MTgsMjI4NDgsMjI4NzcsMjI5MDYsMjI5MzYsMjI5NjUsMjI5OTQsMjMwMjQsMjMwNTQsMjMwODMsMjMxMTMsMjMxNDMsMjMxNzMsMjMyMDIsMjMyMzIsMjMyNjEsMjMyOTAsMjMzMjAsMjMzNDksMjMzNzksMjM0MDgsMjM0MzgsMjM0NjcsMjM0OTcsMjM1MjcsMjM1NTYsMjM1ODYsMjM2MTYsMjM2NDUsMjM2NzQsMjM3MDQsMjM3MzMsMjM3NjMsMjM3OTIsMjM4MjIsMjM4NTEsMjM4ODEsMjM5MTAsMjM5NDAsMjM5NzAsMjM5OTksMjQwMjksMjQwNTgsMjQwODgsMjQxMTcsMjQxNDcsMjQxNzYsMjQyMDYsMjQyMzUsMjQyNjUsMjQyOTQsMjQzMjQsMjQzNTMsMjQzODMsMjQ0MTMsMjQ0NDIsMjQ0NzIsMjQ1MDEsMjQ1MzEsMjQ1NjAsMjQ1OTAsMjQ2MTksMjQ2NDgsMjQ2NzgsMjQ3MDcsMjQ3MzcsMjQ3NjcsMjQ3OTYsMjQ4MjYsMjQ4NTYsMjQ4ODUsMjQ5MTUsMjQ5NDQsMjQ5NzQsMjUwMDMsMjUwMzIsMjUwNjIsMjUwOTEsMjUxMjEsMjUxNTAsMjUxODAsMjUyMTAsMjUyNDAsMjUyNjksMjUyOTksMjUzMjgsMjUzNTgsMjUzODcsMjU0MTYsMjU0NDYsMjU0NzUsMjU1MDUsMjU1MzQsMjU1NjQsMjU1OTQsMjU2MjQsMjU2NTMsMjU2ODMsMjU3MTIsMjU3NDIsMjU3NzEsMjU4MDAsMjU4MzAsMjU4NTksMjU4ODgsMjU5MTgsMjU5NDgsMjU5NzcsMjYwMDcsMjYwMzcsMjYwNjcsMjYwOTYsMjYxMjYsMjYxNTUsMjYxODQsMjYyMTQsMjYyNDMsMjYyNzIsMjYzMDIsMjYzMzIsMjYzNjEsMjYzOTEsMjY0MjEsMjY0NTEsMjY0ODAsMjY1MTAsMjY1MzksMjY1NjgsMjY1OTgsMjY2MjcsMjY2NTYsMjY2ODYsMjY3MTUsMjY3NDUsMjY3NzUsMjY4MDUsMjY4MzQsMjY4NjQsMjY4OTMsMjY5MjMsMjY5NTIsMjY5ODIsMjcwMTEsMjcwNDEsMjcwNzAsMjcwOTksMjcxMjksMjcxNTksMjcxODgsMjcyMTgsMjcyNDgsMjcyNzcsMjczMDcsMjczMzYsMjczNjYsMjczOTUsMjc0MjUsMjc0NTQsMjc0ODQsMjc1MTMsMjc1NDIsMjc1NzIsMjc2MDIsMjc2MzEsMjc2NjEsMjc2OTEsMjc3MjAsMjc3NTAsMjc3NzksMjc4MDksMjc4MzgsMjc4NjgsMjc4OTcsMjc5MjYsMjc5NTYsMjc5ODUsMjgwMTUsMjgwNDUsMjgwNzQsMjgxMDQsMjgxMzQsMjgxNjMsMjgxOTMsMjgyMjIsMjgyNTIsMjgyODEsMjgzMTAsMjgzNDAsMjgzNjksMjgzOTksMjg0MjgsMjg0NTgsMjg0ODgsMjg1MTcsMjg1NDcsMjg1NzcsMjg2MDcsMjg2MzYsMjg2NjUsMjg2OTUsMjg3MjQsMjg3NTQsMjg3ODMsMjg4MTMsMjg4NDMsMjg4NzIsMjg5MDEsMjg5MzEsMjg5NjAsMjg5OTAsMjkwMTksMjkwNDksMjkwNzgsMjkxMDgsMjkxMzcsMjkxNjcsMjkxOTYsMjkyMjYsMjkyNTUsMjkyODUsMjkzMTUsMjkzNDUsMjkzNzUsMjk0MDQsMjk0MzQsMjk0NjMsMjk0OTIsMjk1MjIsMjk1NTEsMjk1ODAsMjk2MTAsMjk2NDAsMjk2NjksMjk2OTksMjk3MjksMjk3NTksMjk3ODgsMjk4MTgsMjk4NDcsMjk4NzYsMjk5MDYsMjk5MzUsMjk5NjQsMjk5OTQsMzAwMjMsMzAwNTMsMzAwODIsMzAxMTIsMzAxNDEsMzAxNzEsMzAyMDAsMzAyMzAsMzAyNTksMzAyODksMzAzMTgsMzAzNDgsMzAzNzgsMzA0MDgsMzA0MzcsMzA0NjcsMzA0OTYsMzA1MjYsMzA1NTUsMzA1ODUsMzA2MTQsMzA2NDQsMzA2NzMsMzA3MDMsMzA3MzIsMzA3NjIsMzA3OTEsMzA4MjEsMzA4NTAsMzA4ODAsMzA5MDksMzA5MzksMzA5NjgsMzA5OTgsMzEwMjcsMzEwNTcsMzEwODYsMzExMTYsMzExNDUsMzExNzUsMzEyMDQsMzEyMzQsMzEyNjMsMzEyOTMsMzEzMjIsMzEzNTIsMzEzODEsMzE0MTEsMzE0NDEsMzE0NzEsMzE1MDAsMzE1MzAsMzE1NTksMzE1ODksMzE2MTgsMzE2NDgsMzE2NzYsMzE3MDYsMzE3MzYsMzE3NjYsMzE3OTUsMzE4MjUsMzE4NTQsMzE4ODQsMzE5MTMsMzE5NDMsMzE5NzIsMzIwMDIsMzIwMzEsMzIwNjEsMzIwOTAsMzIxMjAsMzIxNTAsMzIxODAsMzIyMDksMzIyMzksMzIyNjgsMzIyOTgsMzIzMjcsMzIzNTcsMzIzODYsMzI0MTYsMzI0NDUsMzI0NzUsMzI1MDQsMzI1MzQsMzI1NjMsMzI1OTMsMzI2MjIsMzI2NTIsMzI2ODEsMzI3MTEsMzI3NDAsMzI3NzAsMzI3OTksMzI4MjksMzI4NTgsMzI4ODgsMzI5MTcsMzI5NDcsMzI5NzYsMzMwMDYsMzMwMzUsMzMwNjUsMzMwOTQsMzMxMjQsMzMxNTMsMzMxODMsMzMyMTMsMzMyNDMsMzMyNzIsMzMzMDIsMzMzMzEsMzMzNjEsMzMzOTAsMzM0MjAsMzM0NTAsMzM0NzksMzM1MDksMzM1MzksMzM1NjgsMzM1OTgsMzM2MjcsMzM2NTcsMzM2ODYsMzM3MTYsMzM3NDUsMzM3NzUsMzM4MDQsMzM4MzQsMzM4NjMsMzM4OTMsMzM5MjIsMzM5NTIsMzM5ODEsMzQwMTEsMzQwNDAsMzQwNjksMzQwOTksMzQxMjgsMzQxNTgsMzQxODcsMzQyMTcsMzQyNDcsMzQyNzcsMzQzMDYsMzQzMzYsMzQzNjUsMzQzOTUsMzQ0MjQsMzQ0NTQsMzQ0ODMsMzQ1MTIsMzQ1NDIsMzQ1NzEsMzQ2MDEsMzQ2MzEsMzQ2NjAsMzQ2OTAsMzQ3MTksMzQ3NDksMzQ3NzgsMzQ4MDgsMzQ4MzcsMzQ4NjcsMzQ4OTYsMzQ5MjYsMzQ5NTUsMzQ5ODUsMzUwMTUsMzUwNDQsMzUwNzQsMzUxMDMsMzUxMzMsMzUxNjIsMzUxOTIsMzUyMjIsMzUyNTEsMzUyODAsMzUzMTAsMzUzNDAsMzUzNzAsMzUzOTksMzU0MjksMzU0NTgsMzU0ODgsMzU1MTcsMzU1NDcsMzU1NzYsMzU2MDUsMzU2MzUsMzU2NjUsMzU2OTQsMzU3MjMsMzU3NTMsMzU3ODIsMzU4MTEsMzU4NDEsMzU4NzEsMzU5MDEsMzU5MzAsMzU5NjAsMzU5ODksMzYwMTksMzYwNDgsMzYwNzgsMzYxMDcsMzYxMzYsMzYxNjYsMzYxOTUsMzYyMjUsMzYyNTQsMzYyODQsMzYzMTQsMzYzNDMsMzYzNzMsMzY0MDMsMzY0MzMsMzY0NjIsMzY0OTIsMzY1MjEsMzY1NTEsMzY1ODAsMzY2MTAsMzY2MzksMzY2NjksMzY2OTgsMzY3MjgsMzY3NTcsMzY3ODYsMzY4MTYsMzY4NDUsMzY4NzUsMzY5MDQsMzY5MzQsMzY5NjMsMzY5OTMsMzcwMjIsMzcwNTIsMzcwODEsMzcxMTEsMzcxNDEsMzcxNzAsMzcyMDAsMzcyMjksMzcyNTksMzcyODgsMzczMTgsMzczNDcsMzczNzcsMzc0MDYsMzc0MzYsMzc0NjUsMzc0OTUsMzc1MjQsMzc1NTQsMzc1ODQsMzc2MTMsMzc2NDMsMzc2NzIsMzc3MDEsMzc3MzEsMzc3NjAsMzc3OTAsMzc4MTksMzc4NDksMzc4NzgsMzc5MDgsMzc5MzgsMzc5NjcsMzc5OTcsMzgwMjcsMzgwNTYsMzgwODUsMzgxMTUsMzgxNDQsMzgxNzQsMzgyMDMsMzgyMzMsMzgyNjIsMzgyOTIsMzgzMjIsMzgzNTEsMzgzODEsMzg0MTAsMzg0NDAsMzg0NjksMzg0OTksMzg1MjgsMzg1NTgsMzg1ODcsMzg2MTcsMzg2NDYsMzg2NzYsMzg3MDUsMzg3MzUsMzg3NjQsMzg3OTQsMzg4MjMsMzg4NTMsMzg4ODIsMzg5MTIsMzg5NDEsMzg5NzEsMzkwMDEsMzkwMzAsMzkwNTksMzkwODksMzkxMTgsMzkxNDgsMzkxNzgsMzkyMDgsMzkyMzcsMzkyNjcsMzkyOTcsMzkzMjYsMzkzNTUsMzkzODUsMzk0MTQsMzk0NDQsMzk0NzMsMzk1MDMsMzk1MzIsMzk1NjIsMzk1OTIsMzk2MjEsMzk2NTAsMzk2ODAsMzk3MDksMzk3MzksMzk3NjgsMzk3OTgsMzk4MjcsMzk4NTcsMzk4ODYsMzk5MTYsMzk5NDYsMzk5NzUsNDAwMDUsNDAwMzUsNDAwNjQsNDAwOTQsNDAxMjMsNDAxNTMsNDAxODIsNDAyMTIsNDAyNDEsNDAyNzEsNDAzMDAsNDAzMzAsNDAzNTksNDAzODksNDA0MTgsNDA0NDgsNDA0NzcsNDA1MDcsNDA1MzYsNDA1NjYsNDA1OTUsNDA2MjUsNDA2NTUsNDA2ODUsNDA3MTQsNDA3NDQsNDA3NzMsNDA4MDMsNDA4MzIsNDA4NjIsNDA4OTIsNDA5MjEsNDA5NTEsNDA5ODAsNDEwMDksNDEwMzksNDEwNjgsNDEwOTgsNDExMjcsNDExNTcsNDExODYsNDEyMTYsNDEyNDUsNDEyNzUsNDEzMDQsNDEzMzQsNDEzNjQsNDEzOTMsNDE0MjIsNDE0NTIsNDE0ODEsNDE1MTEsNDE1NDAsNDE1NzAsNDE1OTksNDE2MjksNDE2NTgsNDE2ODgsNDE3MTgsNDE3NDgsNDE3NzcsNDE4MDcsNDE4MzYsNDE4NjUsNDE4OTQsNDE5MjQsNDE5NTMsNDE5ODMsNDIwMTIsNDIwNDIsNDIwNzIsNDIxMDIsNDIxMzEsNDIxNjEsNDIxOTAsNDIyMjAsNDIyNDksNDIyNzksNDIzMDgsNDIzMzcsNDIzNjcsNDIzOTcsNDI0MjYsNDI0NTYsNDI0ODUsNDI1MTUsNDI1NDUsNDI1NzQsNDI2MDQsNDI2MzMsNDI2NjIsNDI2OTIsNDI3MjEsNDI3NTEsNDI3ODAsNDI4MTAsNDI4MzksNDI4NjksNDI4OTksNDI5MjksNDI5NTgsNDI5ODgsNDMwMTcsNDMwNDYsNDMwNzYsNDMxMDUsNDMxMzUsNDMxNjQsNDMxOTQsNDMyMjMsNDMyNTMsNDMyODMsNDMzMTIsNDMzNDIsNDMzNzEsNDM0MDEsNDM0MzAsNDM0NjAsNDM0ODksNDM1MTksNDM1NDgsNDM1NzgsNDM2MDcsNDM2MzcsNDM2NjYsNDM2OTYsNDM3MjYsNDM3NTUsNDM3ODUsNDM4MTQsNDM4NDQsNDM4NzMsNDM5MDMsNDM5MzIsNDM5NjIsNDM5OTEsNDQwMjEsNDQwNTAsNDQwODAsNDQxMDksNDQxMzksNDQxNjksNDQxOTgsNDQyMjgsNDQyNTgsNDQyODcsNDQzMTcsNDQzNDYsNDQzNzUsNDQ0MDUsNDQ0MzQsNDQ0NjQsNDQ0OTMsNDQ1MjMsNDQ1NTMsNDQ1ODIsNDQ2MTIsNDQ2NDEsNDQ2NzEsNDQ3MDAsNDQ3MzAsNDQ3NTksNDQ3ODgsNDQ4MTgsNDQ4NDcsNDQ4NzcsNDQ5MDYsNDQ5MzYsNDQ5NjYsNDQ5OTYsNDUwMjUsNDUwNTUsNDUwODQsNDUxMTQsNDUxNDMsNDUxNzIsNDUyMDIsNDUyMzEsNDUyNjEsNDUyOTAsNDUzMjAsNDUzNTAsNDUzODAsNDU0MDksNDU0MzksNDU0NjgsNDU0OTgsNDU1MjcsNDU1NTYsNDU1ODYsNDU2MTUsNDU2NDQsNDU2NzQsNDU3MDQsNDU3MzMsNDU3NjMsNDU3OTMsNDU4MjMsNDU4NTIsNDU4ODIsNDU5MTEsNDU5NDAsNDU5NzAsNDU5OTksNDYwMjgsNDYwNTgsNDYwODgsNDYxMTcsNDYxNDcsNDYxNzcsNDYyMDYsNDYyMzYsNDYyNjUsNDYyOTUsNDYzMjQsNDYzNTQsNDYzODMsNDY0MTMsNDY0NDIsNDY0NzIsNDY1MDEsNDY1MzEsNDY1NjAsNDY1OTAsNDY2MjAsNDY2NDksNDY2NzksNDY3MDgsNDY3MzgsNDY3NjcsNDY3OTcsNDY4MjYsNDY4NTYsNDY4ODUsNDY5MTUsNDY5NDQsNDY5NzQsNDcwMDMsNDcwMzMsNDcwNjMsNDcwOTIsNDcxMjIsNDcxNTEsNDcxODEsNDcyMTAsNDcyNDAsNDcyNjksNDcyOTgsNDczMjgsNDczNTcsNDczODcsNDc0MTcsNDc0NDYsNDc0NzYsNDc1MDYsNDc1MzUsNDc1NjUsNDc1OTQsNDc2MjQsNDc2NTMsNDc2ODIsNDc3MTIsNDc3NDEsNDc3NzEsNDc4MDAsNDc4MzAsNDc4NjAsNDc4OTAsNDc5MTksNDc5NDksNDc5NzgsNDgwMDgsNDgwMzcsNDgwNjYsNDgwOTYsNDgxMjUsNDgxNTUsNDgxODQsNDgyMTQsNDgyNDQsNDgyNzMsNDgzMDMsNDgzMzMsNDgzNjIsNDgzOTIsNDg0MjEsNDg0NTAsNDg0ODAsNDg1MDksNDg1MzgsNDg1NjgsNDg1OTgsNDg2MjcsNDg2NTcsNDg2ODcsNDg3MTcsNDg3NDYsNDg3NzYsNDg4MDUsNDg4MzQsNDg4NjQsNDg4OTMsNDg5MjIsNDg5NTIsNDg5ODIsNDkwMTEsNDkwNDEsNDkwNzEsNDkxMDAsNDkxMzAsNDkxNjAsNDkxODksNDkyMTgsNDkyNDgsNDkyNzcsNDkzMDYsNDkzMzYsNDkzNjUsNDkzOTUsNDk0MjUsNDk0NTUsNDk0ODQsNDk1MTQsNDk1NDMsNDk1NzMsNDk2MDIsNDk2MzIsNDk2NjEsNDk2OTAsNDk3MjAsNDk3NDksNDk3NzksNDk4MDksNDk4MzgsNDk4NjgsNDk4OTgsNDk5MjcsNDk5NTcsNDk5ODYsNTAwMTYsNTAwNDUsNTAwNzUsNTAxMDQsNTAxMzMsNTAxNjMsNTAxOTIsNTAyMjIsNTAyNTIsNTAyODEsNTAzMTEsNTAzNDAsNTAzNzAsNTA0MDAsNTA0MjksNTA0NTksNTA0ODgsNTA1MTgsNTA1NDcsNTA1NzYsNTA2MDYsNTA2MzUsNTA2NjUsNTA2OTQsNTA3MjQsNTA3NTQsNTA3ODQsNTA4MTMsNTA4NDMsNTA4NzIsNTA5MDIsNTA5MzEsNTA5NjAsNTA5OTAsNTEwMTksNTEwNDksNTEwNzgsNTExMDgsNTExMzgsNTExNjcsNTExOTcsNTEyMjcsNTEyNTYsNTEyODYsNTEzMTUsNTEzNDUsNTEzNzQsNTE0MDMsNTE0MzMsNTE0NjIsNTE0OTIsNTE1MjIsNTE1NTIsNTE1ODIsNTE2MTEsNTE2NDEsNTE2NzAsNTE2OTksNTE3MjksNTE3NTgsNTE3ODcsNTE4MTYsNTE4NDYsNTE4NzYsNTE5MDYsNTE5MzYsNTE5NjUsNTE5OTUsNTIwMjUsNTIwNTQsNTIwODMsNTIxMTMsNTIxNDIsNTIxNzEsNTIyMDAsNTIyMzAsNTIyNjAsNTIyOTAsNTIzMTksNTIzNDksNTIzNzksNTI0MDgsNTI0MzgsNTI0NjcsNTI0OTcsNTI1MjYsNTI1NTUsNTI1ODUsNTI2MTQsNTI2NDQsNTI2NzMsNTI3MDMsNTI3MzMsNTI3NjIsNTI3OTIsNTI4MjIsNTI4NTEsNTI4ODEsNTI5MTAsNTI5MzksNTI5NjksNTI5OTgsNTMwMjgsNTMwNTcsNTMwODcsNTMxMTYsNTMxNDYsNTMxNzYsNTMyMDUsNTMyMzUsNTMyNjQsNTMyOTQsNTMzMjQsNTMzNTMsNTMzODMsNTM0MTIsNTM0NDEsNTM0NzEsNTM1MDAsNTM1MzAsNTM1NTksNTM1ODksNTM2MTksNTM2NDgsNTM2NzgsNTM3MDgsNTM3MzcsNTM3NjcsNTM3OTYsNTM4MjUsNTM4NTUsNTM4ODQsNTM5MTMsNTM5NDMsNTM5NzMsNTQwMDMsNTQwMzIsNTQwNjIsNTQwOTIsNTQxMjEsNTQxNTEsNTQxODAsNTQyMDksNTQyMzksNTQyNjgsNTQyOTcsNTQzMjcsNTQzNTcsNTQzODcsNTQ0MTYsNTQ0NDYsNTQ0NzYsNTQ1MDUsNTQ1MzUsNTQ1NjQsNTQ1OTMsNTQ2MjMsNTQ2NTIsNTQ2ODEsNTQ3MTEsNTQ3NDEsNTQ3NzAsNTQ4MDAsNTQ4MzAsNTQ4NTksNTQ4ODksNTQ5MTksNTQ5NDgsNTQ5NzcsNTUwMDcsNTUwMzYsNTUwNjYsNTUwOTUsNTUxMjUsNTUxNTQsNTUxODQsNTUyMTMsNTUyNDMsNTUyNzMsNTUzMDIsNTUzMzIsNTUzNjEsNTUzOTEsNTU0MjAsNTU0NTAsNTU0NzksNTU1MDgsNTU1MzgsNTU1NjcsNTU1OTcsNTU2MjcsNTU2NTcsNTU2ODYsNTU3MTYsNTU3NDUsNTU3NzUsNTU4MDQsNTU4MzQsNTU4NjMsNTU4OTIsNTU5MjIsNTU5NTEsNTU5ODEsNTYwMTEsNTYwNDAsNTYwNzAsNTYxMDAsNTYxMjksNTYxNTksNTYxODgsNTYyMTgsNTYyNDcsNTYyNzYsNTYzMDYsNTYzMzUsNTYzNjUsNTYzOTQsNTY0MjQsNTY0NTQsNTY0ODMsNTY1MTMsNTY1NDMsNTY1NzIsNTY2MDEsNTY2MzEsNTY2NjAsNTY2OTAsNTY3MTksNTY3NDksNTY3NzgsNTY4MDgsNTY4MzcsNTY4NjcsNTY4OTcsNTY5MjYsNTY5NTYsNTY5ODUsNTcwMTUsNTcwNDQsNTcwNzQsNTcxMDMsNTcxMzMsNTcxNjIsNTcxOTIsNTcyMjEsNTcyNTEsNTcyODAsNTczMTAsNTczNDAsNTczNjksNTczOTksNTc0MjksNTc0NTgsNTc0ODcsNTc1MTcsNTc1NDYsNTc1NzYsNTc2MDUsNTc2MzQsNTc2NjQsNTc2OTQsNTc3MjMsNTc3NTMsNTc3ODMsNTc4MTMsNTc4NDIsNTc4NzEsNTc5MDEsNTc5MzAsNTc5NTksNTc5ODksNTgwMTgsNTgwNDgsNTgwNzcsNTgxMDcsNTgxMzcsNTgxNjcsNTgxOTYsNTgyMjYsNTgyNTUsNTgyODUsNTgzMTQsNTgzNDMsNTgzNzMsNTg0MDIsNTg0MzIsNTg0NjEsNTg0OTEsNTg1MjEsNTg1NTEsNTg1ODAsNTg2MTAsNTg2MzksNTg2NjksNTg2OTgsNTg3MjcsNTg3NTcsNTg3ODYsNTg4MTYsNTg4NDUsNTg4NzUsNTg5MDUsNTg5MzQsNTg5NjQsNTg5OTQsNTkwMjMsNTkwNTMsNTkwODIsNTkxMTEsNTkxNDEsNTkxNzAsNTkyMDAsNTkyMjksNTkyNTksNTkyODgsNTkzMTgsNTkzNDgsNTkzNzcsNTk0MDcsNTk0MzYsNTk0NjYsNTk0OTUsNTk1MjUsNTk1NTQsNTk1ODQsNTk2MTMsNTk2NDMsNTk2NzIsNTk3MDIsNTk3MzEsNTk3NjEsNTk3OTEsNTk4MjAsNTk4NTAsNTk4NzksNTk5MDksNTk5MzksNTk5NjgsNTk5OTcsNjAwMjcsNjAwNTYsNjAwODYsNjAxMTUsNjAxNDUsNjAxNzQsNjAyMDQsNjAyMzQsNjAyNjQsNjAyOTMsNjAzMjMsNjAzNTIsNjAzODEsNjA0MTEsNjA0NDAsNjA0NjksNjA0OTksNjA1MjgsNjA1NTgsNjA1ODgsNjA2MTgsNjA2NDgsNjA2NzcsNjA3MDcsNjA3MzYsNjA3NjUsNjA3OTUsNjA4MjQsNjA4NTMsNjA4ODMsNjA5MTIsNjA5NDIsNjA5NzIsNjEwMDIsNjEwMzEsNjEwNjEsNjEwOTAsNjExMjAsNjExNDksNjExNzksNjEyMDgsNjEyMzcsNjEyNjcsNjEyOTYsNjEzMjYsNjEzNTYsNjEzODUsNjE0MTUsNjE0NDUsNjE0NzQsNjE1MDQsNjE1MzMsNjE1NjMsNjE1OTIsNjE2MjEsNjE2NTEsNjE2ODAsNjE3MTAsNjE3MzksNjE3NjksNjE3OTksNjE4MjgsNjE4NTgsNjE4ODgsNjE5MTcsNjE5NDcsNjE5NzYsNjIwMDYsNjIwMzUsNjIwNjQsNjIwOTQsNjIxMjMsNjIxNTMsNjIxODIsNjIyMTIsNjIyNDIsNjIyNzEsNjIzMDEsNjIzMzEsNjIzNjAsNjIzOTAsNjI0MTksNjI0NDgsNjI0NzgsNjI1MDcsNjI1MzcsNjI1NjYsNjI1OTYsNjI2MjUsNjI2NTUsNjI2ODUsNjI3MTUsNjI3NDQsNjI3NzQsNjI4MDMsNjI4MzIsNjI4NjIsNjI4OTEsNjI5MjEsNjI5NTAsNjI5ODAsNjMwMDksNjMwMzksNjMwNjksNjMwOTksNjMxMjgsNjMxNTcsNjMxODcsNjMyMTYsNjMyNDYsNjMyNzUsNjMzMDUsNjMzMzQsNjMzNjMsNjMzOTMsNjM0MjMsNjM0NTMsNjM0ODIsNjM1MTIsNjM1NDEsNjM1NzEsNjM2MDAsNjM2MzAsNjM2NTksNjM2ODksNjM3MTgsNjM3NDcsNjM3NzcsNjM4MDcsNjM4MzYsNjM4NjYsNjM4OTUsNjM5MjUsNjM5NTUsNjM5ODQsNjQwMTQsNjQwNDMsNjQwNzMsNjQxMDIsNjQxMzEsNjQxNjEsNjQxOTAsNjQyMjAsNjQyNDksNjQyNzksNjQzMDksNjQzMzksNjQzNjgsNjQzOTgsNjQ0MjcsNjQ0NTcsNjQ0ODYsNjQ1MTUsNjQ1NDUsNjQ1NzQsNjQ2MDMsNjQ2MzMsNjQ2NjMsNjQ2OTIsNjQ3MjIsNjQ3NTIsNjQ3ODIsNjQ4MTEsNjQ4NDEsNjQ4NzAsNjQ4OTksNjQ5MjksNjQ5NTgsNjQ5ODcsNjUwMTcsNjUwNDcsNjUwNzYsNjUxMDYsNjUxMzYsNjUxNjYsNjUxOTUsNjUyMjUsNjUyNTQsNjUyODMsNjUzMTMsNjUzNDIsNjUzNzEsNjU0MDEsNjU0MzEsNjU0NjAsNjU0OTAsNjU1MjAsNjU1NDksNjU1NzksNjU2MDgsNjU2MzgsNjU2NjcsNjU2OTcsNjU3MjYsNjU3NTUsNjU3ODUsNjU4MTUsNjU4NDQsNjU4NzQsNjU5MDMsNjU5MzMsNjU5NjMsNjU5OTIsNjYwMjIsNjYwNTEsNjYwODEsNjYxMTAsNjYxNDAsNjYxNjksNjYxOTksNjYyMjgsNjYyNTgsNjYyODcsNjYzMTcsNjYzNDYsNjYzNzYsNjY0MDUsNjY0MzUsNjY0NjUsNjY0OTQsNjY1MjQsNjY1NTMsNjY1ODMsNjY2MTIsNjY2NDEsNjY2NzEsNjY3MDAsNjY3MzAsNjY3NjAsNjY3ODksNjY4MTksNjY4NDksNjY4NzgsNjY5MDgsNjY5MzcsNjY5NjcsNjY5OTYsNjcwMjUsNjcwNTUsNjcwODQsNjcxMTQsNjcxNDMsNjcxNzMsNjcyMDMsNjcyMzMsNjcyNjIsNjcyOTIsNjczMjEsNjczNTEsNjczODAsNjc0MDksNjc0MzksNjc0NjgsNjc0OTcsNjc1MjcsNjc1NTcsNjc1ODcsNjc2MTcsNjc2NDYsNjc2NzYsNjc3MDUsNjc3MzUsNjc3NjQsNjc3OTMsNjc4MjMsNjc4NTIsNjc4ODIsNjc5MTEsNjc5NDEsNjc5NzEsNjhlMyw2ODAzMCw2ODA2MCw2ODA4OSw2ODExOSw2ODE0OCw2ODE3Nyw2ODIwNyw2ODIzNiw2ODI2Niw2ODI5NSw2ODMyNSw2ODM1NCw2ODM4NCw2ODQxNCw2ODQ0Myw2ODQ3Myw2ODUwMiw2ODUzMiw2ODU2MSw2ODU5MSw2ODYyMCw2ODY1MCw2ODY3OSw2ODcwOCw2ODczOCw2ODc2OCw2ODc5Nyw2ODgyNyw2ODg1Nyw2ODg4Niw2ODkxNiw2ODk0Niw2ODk3NSw2OTAwNCw2OTAzNCw2OTA2Myw2OTA5Miw2OTEyMiw2OTE1Miw2OTE4MSw2OTIxMSw2OTI0MCw2OTI3MCw2OTMwMCw2OTMzMCw2OTM1OSw2OTM4OCw2OTQxOCw2OTQ0Nyw2OTQ3Niw2OTUwNiw2OTUzNSw2OTU2NSw2OTU5NSw2OTYyNCw2OTY1NCw2OTY4NCw2OTcxMyw2OTc0Myw2OTc3Miw2OTgwMiw2OTgzMSw2OTg2MSw2OTg5MCw2OTkxOSw2OTk0OSw2OTk3OCw3MDAwOCw3MDAzOCw3MDA2Nyw3MDA5Nyw3MDEyNiw3MDE1Niw3MDE4Niw3MDIxNSw3MDI0NSw3MDI3NCw3MDMwMyw3MDMzMyw3MDM2Miw3MDM5Miw3MDQyMSw3MDQ1MSw3MDQ4MSw3MDUxMCw3MDU0MCw3MDU3MCw3MDU5OSw3MDYyOSw3MDY1OCw3MDY4Nyw3MDcxNyw3MDc0Niw3MDc3Niw3MDgwNSw3MDgzNSw3MDg2NCw3MDg5NCw3MDkyNCw3MDk1NCw3MDk4Myw3MTAxMyw3MTA0Miw3MTA3MSw3MTEwMSw3MTEzMCw3MTE1OSw3MTE4OSw3MTIxOCw3MTI0OCw3MTI3OCw3MTMwOCw3MTMzNyw3MTM2Nyw3MTM5Nyw3MTQyNiw3MTQ1NSw3MTQ4NSw3MTUxNCw3MTU0Myw3MTU3Myw3MTYwMiw3MTYzMiw3MTY2Miw3MTY5MSw3MTcyMSw3MTc1MSw3MTc4MSw3MTgxMCw3MTgzOSw3MTg2OSw3MTg5OCw3MTkyNyw3MTk1Nyw3MTk4Niw3MjAxNiw3MjA0Niw3MjA3NSw3MjEwNSw3MjEzNSw3MjE2NCw3MjE5NCw3MjIyMyw3MjI1Myw3MjI4Miw3MjMxMSw3MjM0MSw3MjM3MCw3MjQwMCw3MjQyOSw3MjQ1OSw3MjQ4OSw3MjUxOCw3MjU0OCw3MjU3Nyw3MjYwNyw3MjYzNyw3MjY2Niw3MjY5NSw3MjcyNSw3Mjc1NCw3Mjc4NCw3MjgxMyw3Mjg0Myw3Mjg3Miw3MjkwMiw3MjkzMSw3Mjk2MSw3Mjk5MSw3MzAyMCw3MzA1MCw3MzA4MCw3MzEwOSw3MzEzOSw3MzE2OCw3MzE5Nyw3MzIyNyw3MzI1Niw3MzI4Niw3MzMxNSw3MzM0NSw3MzM3NSw3MzQwNCw3MzQzNCw3MzQ2NCw3MzQ5Myw3MzUyMyw3MzU1Miw3MzU4MSw3MzYxMSw3MzY0MCw3MzY2OSw3MzY5OSw3MzcyOSw3Mzc1OCw3Mzc4OCw3MzgxOCw3Mzg0OCw3Mzg3Nyw3MzkwNyw3MzkzNiw3Mzk2NSw3Mzk5NSw3NDAyNCw3NDA1Myw3NDA4Myw3NDExMyw3NDE0Miw3NDE3Miw3NDIwMiw3NDIzMSw3NDI2MSw3NDI5MSw3NDMyMCw3NDM0OSw3NDM3OSw3NDQwOCw3NDQzNyw3NDQ2Nyw3NDQ5Nyw3NDUyNiw3NDU1Niw3NDU4Niw3NDYxNSw3NDY0NSw3NDY3NSw3NDcwNCw3NDczMyw3NDc2Myw3NDc5Miw3NDgyMiw3NDg1MSw3NDg4MSw3NDkxMCw3NDk0MCw3NDk2OSw3NDk5OSw3NTAyOSw3NTA1OCw3NTA4OCw3NTExNyw3NTE0Nyw3NTE3Niw3NTIwNiw3NTIzNSw3NTI2NCw3NTI5NCw3NTMyMyw3NTM1Myw3NTM4Myw3NTQxMiw3NTQ0Miw3NTQ3Miw3NTUwMSw3NTUzMSw3NTU2MCw3NTU5MCw3NTYxOSw3NTY0OCw3NTY3OCw3NTcwNyw3NTczNyw3NTc2Niw3NTc5Niw3NTgyNiw3NTg1Niw3NTg4NSw3NTkxNSw3NTk0NCw3NTk3NCw3NjAwMyw3NjAzMiw3NjA2Miw3NjA5MSw3NjEyMSw3NjE1MCw3NjE4MCw3NjIxMCw3NjIzOSw3NjI2OSw3NjI5OSw3NjMyOCw3NjM1OCw3NjM4Nyw3NjQxNiw3NjQ0Niw3NjQ3NSw3NjUwNSw3NjUzNCw3NjU2NCw3NjU5Myw3NjYyMyw3NjY1Myw3NjY4Miw3NjcxMiw3Njc0MSw3Njc3MSw3NjgwMSw3NjgzMCw3Njg1OSw3Njg4OSw3NjkxOCw3Njk0OCw3Njk3Nyw3NzAwNyw3NzAzNiw3NzA2Niw3NzA5Niw3NzEyNSw3NzE1NSw3NzE4NSw3NzIxNCw3NzI0Myw3NzI3Myw3NzMwMiw3NzMzMiw3NzM2MSw3NzM5MCw3NzQyMCw3NzQ1MCw3NzQ3OSw3NzUwOSw3NzUzOSw3NzU2OSw3NzU5OCw3NzYyNyw3NzY1Nyw3NzY4Niw3NzcxNSw3Nzc0NSw3Nzc3NCw3NzgwNCw3NzgzMyw3Nzg2Myw3Nzg5Myw3NzkyMyw3Nzk1Miw3Nzk4Miw3ODAxMSw3ODA0MSw3ODA3MCw3ODA5OSw3ODEyOSw3ODE1OCw3ODE4OCw3ODIxNyw3ODI0Nyw3ODI3Nyw3ODMwNyw3ODMzNiw3ODM2Niw3ODM5NSw3ODQyNSw3ODQ1NCw3ODQ4Myw3ODUxMyw3ODU0Miw3ODU3Miw3ODYwMSw3ODYzMSw3ODY2MSw3ODY5MCw3ODcyMCw3ODc1MCw3ODc3OSw3ODgwOCw3ODgzOCw3ODg2Nyw3ODg5Nyw3ODkyNiw3ODk1Niw3ODk4NSw3OTAxNSw3OTA0NCw3OTA3NCw3OTEwNCw3OTEzMyw3OTE2Myw3OTE5Miw3OTIyMiw3OTI1MSw3OTI4MSw3OTMxMCw3OTM0MCw3OTM2OSw3OTM5OSw3OTQyOCw3OTQ1OCw3OTQ4Nyw3OTUxNyw3OTU0Niw3OTU3Niw3OTYwNiw3OTYzNSw3OTY2NSw3OTY5NSw3OTcyNCw3OTc1Myw3OTc4Myw3OTgxMiw3OTg0MSw3OTg3MSw3OTkwMCw3OTkzMCw3OTk2MCw3OTk5MF19LHsiLi4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzNDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaSgpe3RoaXMucmVnaW9uYWxPcHRpb25zPVtdLHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXT17aW52YWxpZENhbGVuZGFyOiJDYWxlbmRhciB7MH0gbm90IGZvdW5kIixpbnZhbGlkRGF0ZToiSW52YWxpZCB7MH0gZGF0ZSIsaW52YWxpZE1vbnRoOiJJbnZhbGlkIHswfSBtb250aCIsaW52YWxpZFllYXI6IkludmFsaWQgezB9IHllYXIiLGRpZmZlcmVudENhbGVuZGFyczoiQ2Fubm90IG1peCB7MH0gYW5kIHsxfSBkYXRlcyJ9LHRoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdLHRoaXMuY2FsZW5kYXJzPXt9LHRoaXMuX2xvY2FsQ2Fscz17fX1mdW5jdGlvbiBhKHQsZSxyLG4pe2lmKHRoaXMuX2NhbGVuZGFyPXQsdGhpcy5feWVhcj1lLHRoaXMuX21vbnRoPXIsdGhpcy5fZGF5PW4sMD09PXRoaXMuX2NhbGVuZGFyLl92YWxpZGF0ZUxldmVsJiYhdGhpcy5fY2FsZW5kYXIuaXNWYWxpZCh0aGlzLl95ZWFyLHRoaXMuX21vbnRoLHRoaXMuX2RheSkpdGhyb3coYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiIwMDAwMDAiLnN1YnN0cmluZygwLGUtKHQ9IiIrdCkubGVuZ3RoKSt0fWZ1bmN0aW9uIHMoKXt0aGlzLnNob3J0WWVhckN1dG9mZj0iKzEwIn1mdW5jdGlvbiBsKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdF18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1uKGkucHJvdG90eXBlLHtpbnN0YW5jZTpmdW5jdGlvbih0LGUpe3Q9KHR8fCJncmVnb3JpYW4iKS50b0xvd2VyQ2FzZSgpLGU9ZXx8IiI7dmFyIHI9dGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdO2lmKCFyJiZ0aGlzLmNhbGVuZGFyc1t0XSYmKHI9bmV3IHRoaXMuY2FsZW5kYXJzW3RdKGUpLHRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXT1yKSwhcil0aHJvdyh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhcnx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRDYWxlbmRhcikucmVwbGFjZSgvXHswXH0vLHQpO3JldHVybiByfSxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuKG49KG51bGwhPXQmJnQueWVhcj90LmNhbGVuZGFyKCk6InN0cmluZyI9PXR5cGVvZiBuP3RoaXMuaW5zdGFuY2UobixpKTpuKXx8dGhpcy5pbnN0YW5jZSgpKS5uZXdEYXRlKHQsZSxyKX0sc3Vic3RpdHV0ZURpZ2l0czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfX0sc3Vic3RpdHV0ZUNoaW5lc2VEaWdpdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPSIiLGk9MDtyPjA7KXt2YXIgYT1yJTEwO249KDA9PT1hPyIiOnRbYV0rZVtpXSkrbixpKysscj1NYXRoLmZsb29yKHIvMTApfXJldHVybiAwPT09bi5pbmRleE9mKHRbMV0rZVsxXSkmJihuPW4uc3Vic3RyKDEpKSxufHx0WzBdfX19KSxuKGEucHJvdG90eXBlLHtuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubmV3RGF0ZShudWxsPT10P3RoaXM6dCxlLHIpfSx5ZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl95ZWFyOnRoaXMuc2V0KHQsInkiKX0sbW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21vbnRoOnRoaXMuc2V0KHQsIm0iKX0sZGF5OmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9kYXk6dGhpcy5zZXQodCwiZCIpfSxkYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fY2FsZW5kYXIuaXNWYWxpZCh0LGUscikpdGhyb3coYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7cmV0dXJuIHRoaXMuX3llYXI9dCx0aGlzLl9tb250aD1lLHRoaXMuX2RheT1yLHRoaXN9LGxlYXBZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpfSxlcG9jaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKX0sZm9ybWF0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpfSxtb250aE9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKX0sd2Vla09mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMpfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJblllYXIodGhpcyl9LGRheU9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJbk1vbnRoKHRoaXMpfSxkYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpfSx3ZWVrRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyl9LGV4dHJhSW5mbzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5leHRyYUluZm8odGhpcyl9LGFkZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5hZGQodGhpcyx0LGUpfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsdCxlKX0sY29tcGFyZVRvOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGVuZGFyLm5hbWUhPT10Ll9jYWxlbmRhci5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXHsxXH0vLHQuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3ZhciBlPXRoaXMuX3llYXIhPT10Ll95ZWFyP3RoaXMuX3llYXItdC5feWVhcjp0aGlzLl9tb250aCE9PXQuX21vbnRoP3RoaXMubW9udGhPZlllYXIoKS10Lm1vbnRoT2ZZZWFyKCk6dGhpcy5fZGF5LXQuX2RheTtyZXR1cm4gMD09PWU/MDplPDA/LTE6MX0sY2FsZW5kYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJ9LHRvSkQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQodCl9LHRvSlNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybih0aGlzLnllYXIoKTwwPyItIjoiIikrbyhNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrIi0iK28odGhpcy5tb250aCgpLDIpKyItIitvKHRoaXMuZGF5KCksMil9fSksbihzLnByb3RvdHlwZSx7X3ZhbGlkYXRlTGV2ZWw6MCxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnVsbD09dD90aGlzLnRvZGF5KCk6KHQueWVhciYmKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkscj10LmRheSgpLGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLG5ldyBhKHRoaXMsdCxlLHIpKX0sdG9kYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tSlNEYXRlKG5ldyBEYXRlKX0sZXBvY2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLnllYXIoKTwwP3RoaXMubG9jYWwuZXBvY2hzWzBdOnRoaXMubG9jYWwuZXBvY2hzWzFdfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybihlLnllYXIoKTwwPyItIjoiIikrbyhNYXRoLmFicyhlLnllYXIoKSksNCl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTJ9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4oci5tb250aCgpK3RoaXMubW9udGhzSW5ZZWFyKHIpLXRoaXMuZmlyc3RNb250aCkldGhpcy5tb250aHNJblllYXIocikrdGhpcy5taW5Nb250aH0sZnJvbU1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGUrdGhpcy5maXJzdE1vbnRoLTIqdGhpcy5taW5Nb250aCkldGhpcy5tb250aHNJblllYXIodCkrdGhpcy5taW5Nb250aDtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxyLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKSxyfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiB0aGlzLmxlYXBZZWFyKGUpPzM2NjozNjV9LGRheU9mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gbi50b0pEKCktdGhpcy5uZXdEYXRlKG4ueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKG4ueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuKE1hdGguZmxvb3IodGhpcy50b0pEKG4pKSsyKSV0aGlzLmRheXNJbldlZWsoKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx7fX0sYWRkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksdGhpcy5fY29ycmVjdEFkZCh0LHRoaXMuX2FkZCh0LGUsciksZSxyKX0sX2FkZDpmdW5jdGlvbih0LGUscil7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLCJkIj09PXJ8fCJ3Ij09PXIpe3ZhciBuPXQudG9KRCgpK2UqKCJ3Ij09PXI/dGhpcy5kYXlzSW5XZWVrKCk6MSksaT10LmNhbGVuZGFyKCkuZnJvbUpEKG4pO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sW2kueWVhcigpLGkubW9udGgoKSxpLmRheSgpXX10cnl7dmFyIGE9dC55ZWFyKCkrKCJ5Ij09PXI/ZTowKSxvPXQubW9udGhPZlllYXIoKSsoIm0iPT09cj9lOjApO2k9dC5kYXkoKTsieSI9PT1yPyh0Lm1vbnRoKCkhPT10aGlzLmZyb21Nb250aE9mWWVhcihhLG8pJiYobz10aGlzLm5ld0RhdGUoYSx0Lm1vbnRoKCksdGhpcy5taW5EYXkpLm1vbnRoT2ZZZWFyKCkpLG89TWF0aC5taW4obyx0aGlzLm1vbnRoc0luWWVhcihhKSksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpOiJtIj09PXImJighZnVuY3Rpb24odCl7Zm9yKDtvPHQubWluTW9udGg7KWEtLSxvKz10Lm1vbnRoc0luWWVhcihhKTtmb3IodmFyIGU9dC5tb250aHNJblllYXIoYSk7bz5lLTErdC5taW5Nb250aDspYSsrLG8tPWUsZT10Lm1vbnRoc0luWWVhcihhKX0odGhpcyksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpO3ZhciBzPVthLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbyksaV07cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxzfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX0sX2NvcnJlY3RBZGQ6ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0aGlzLmhhc1llYXJaZXJvfHwieSIhPT1uJiYibSIhPT1ufHwwIT09ZVswXSYmdC55ZWFyKCk+MD09ZVswXT4wKSl7dmFyIGk9e3k6WzEsMSwieSJdLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLCJtIl0sdzpbdGhpcy5kYXlzSW5XZWVrKCksdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdfVtuXSxhPXI8MD8tMToxO2U9dGhpcy5fYWRkKHQscippWzBdK2EqaVsxXSxpWzJdKX1yZXR1cm4gdC5kYXRlKGVbMF0sZVsxXSxlWzJdKX0sc2V0OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTt2YXIgbj0ieSI9PT1yP2U6dC55ZWFyKCksaT0ibSI9PT1yP2U6dC5tb250aCgpLGE9ImQiPT09cj9lOnQuZGF5KCk7cmV0dXJuInkiIT09ciYmIm0iIT09cnx8KGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKG4saSkpKSx0LmRhdGUobixpLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7dmFyIG49dGhpcy5oYXNZZWFyWmVyb3x8MCE9PXQ7aWYobil7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSx0aGlzLm1pbkRheSk7bj1lPj10aGlzLm1pbk1vbnRoJiZlLXRoaXMubWluTW9udGg8dGhpcy5tb250aHNJblllYXIoaSkmJnI+PXRoaXMubWluRGF5JiZyLXRoaXMubWluRGF5PHRoaXMuZGF5c0luTW9udGgoaSl9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxufSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gYy5pbnN0YW5jZSgpLmZyb21KRCh0aGlzLnRvSkQobikpLnRvSlNEYXRlKCl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbUpEKGMuaW5zdGFuY2UoKS5mcm9tSlNEYXRlKHQpLnRvSkQoKSl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixuKXtpZih0LnllYXIpe2lmKDA9PT10aGlzLl92YWxpZGF0ZUxldmVsJiZ0aGlzLm5hbWUhPT10LmNhbGVuZGFyKCkubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXHsxXH0vLHQuY2FsZW5kYXIoKS5sb2NhbC5uYW1lKTtyZXR1cm4gdH10cnl7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLDE9PT10aGlzLl92YWxpZGF0ZUxldmVsJiYhdGhpcy5pc1ZhbGlkKHQsZSxyKSl0aHJvdyBuLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxpfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX19KSxsLnByb3RvdHlwZT1uZXcgcyxuKGwucHJvdG90eXBlLHtuYW1lOiJHcmVnb3JpYW4iLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkdyZWdvcmlhbiIsZXBvY2hzOlsiQkNFIiwiQ0UiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJtbS9kZC95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09MCYmKHQlMTAwIT0wfHx0JTQwMD09MCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPDMmJihlKz0xMix0LS0pO3ZhciBpPU1hdGguZmxvb3IodC8xMDApLGE9Mi1pK01hdGguZmxvb3IoaS80KTtyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrcithLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1NYXRoLmZsb29yKChlLTE4NjcyMTYuMjUpLzM2NTI0LjI1KSxuPShyPWUrMStyLU1hdGguZmxvb3Ioci80KSkrMTUyNCxpPU1hdGguZmxvb3IoKG4tMTIyLjEpLzM2NS4yNSksYT1NYXRoLmZsb29yKDM2NS4yNSppKSxvPU1hdGguZmxvb3IoKG4tYSkvMzAuNjAwMSkscz1uLWEtTWF0aC5mbG9vcigzMC42MDAxKm8pLGw9by0obz4xMy41PzEzOjEpLGM9aS0obD4yLjU/NDcxNjo0NzE1KTtyZXR1cm4gYzw9MCYmYy0tLHRoaXMubmV3RGF0ZShjLGwscyl9LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLGk9bmV3IERhdGUobi55ZWFyKCksbi5tb250aCgpLTEsbi5kYXkoKSk7cmV0dXJuIGkuc2V0SG91cnMoMCksaS5zZXRNaW51dGVzKDApLGkuc2V0U2Vjb25kcygwKSxpLnNldE1pbGxpc2Vjb25kcygwKSxpLnNldEhvdXJzKGkuZ2V0SG91cnMoKT4xMj9pLmdldEhvdXJzKCkrMjowKSxpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5ld0RhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSsxLHQuZ2V0RGF0ZSgpKX19KTt2YXIgYz1lLmV4cG9ydHM9bmV3IGk7Yy5jZGF0ZT1hLGMuYmFzZUNhbGVuZGFyPXMsYy5jYWxlbmRhcnMuZ3JlZ29yaWFuPWx9LHsib2JqZWN0LWFzc2lnbiI6MjQyfV0sMzQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpLGk9dCgiLi9tYWluIik7bihpLnJlZ2lvbmFsT3B0aW9uc1siIl0se2ludmFsaWRBcmd1bWVudHM6IkludmFsaWQgYXJndW1lbnRzIixpbnZhbGlkRm9ybWF0OiJDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXIiLG1pc3NpbmdOdW1iZXJBdDoiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9Iix1bmtub3duTmFtZUF0OiJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkTGl0ZXJhbEF0OiJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkVGV4dDoiQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZCJ9KSxpLmxvY2FsPWkucmVnaW9uYWxPcHRpb25zWyIiXSxuKGkuY2RhdGUucHJvdG90eXBlLHtmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYoZT10LHQ9IiIpLHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUodHx8IiIsdGhpcyxlKX19KSxuKGkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSx7VU5JWF9FUE9DSDppLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLDEsMSkudG9KRCgpLFNFQ1NfUEVSX0RBWTo4NjQwMCxUSUNLU19FUE9DSDppLmluc3RhbmNlKCkuamRFcG9jaCxUSUNLU19QRVJfREFZOjg2NGU5LEFUT006Inl5eXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eXl5IixGVUxMOiJERCwgTU0gZCwgeXl5eSIsSVNPXzg2MDE6Inl5eXktbW0tZGQiLEpVTElBTjoiSiIsUkZDXzgyMjoiRCwgZCBNIHl5IixSRkNfODUwOiJERCwgZGQtTS15eSIsUkZDXzEwMzY6IkQsIGQgTSB5eSIsUkZDXzExMjM6IkQsIGQgTSB5eXl5IixSRkNfMjgyMjoiRCwgZCBNIHl5eXkiLFJTUzoiRCwgZCBNIHl5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5eXktbW0tZGQiLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHI9ZSxlPXQsdD0iIiksIWUpcmV0dXJuIiI7aWYoZS5jYWxlbmRhcigpIT09dGhpcyl0aHJvdyBpLmxvY2FsLmludmFsaWRGb3JtYXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRm9ybWF0O3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O2Zvcih2YXIgbixhLG8scyxsPShyPXJ8fHt9KS5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsYz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHU9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGY9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGg9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMscD0oci5jYWxjdWxhdGVXZWVrfHx0aGlzLmxvY2FsLmNhbGN1bGF0ZVdlZWssZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTt3K248dC5sZW5ndGgmJnQuY2hhckF0KHcrbik9PT1lOyluKys7cmV0dXJuIHcrPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSksZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0iIitlO2lmKHAodCxuKSlmb3IoO2kubGVuZ3RoPHI7KWk9IjAiK2k7cmV0dXJuIGl9LG09dGhpcyxnPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1P3UuY2FsbChtLHQscCgibSIpKTp4KGQoIm0iLHQubW9udGgoKSwyKSl9LHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iZnVuY3Rpb24iPT10eXBlb2YgaD9oLmNhbGwobSx0KTpoW3QubW9udGgoKS1tLm1pbk1vbnRoXToiZnVuY3Rpb24iPT10eXBlb2YgZj9mLmNhbGwobSx0KTpmW3QubW9udGgoKS1tLm1pbk1vbnRoXX0seT10aGlzLmxvY2FsLmRpZ2l0cyx4PWZ1bmN0aW9uKHQpe3JldHVybiByLmxvY2FsTnVtYmVycyYmeT95KHQpOnR9LGI9IiIsXz0hMSx3PTA7dzx0Lmxlbmd0aDt3KyspaWYoXykiJyIhPT10LmNoYXJBdCh3KXx8cCgiJyIpP2IrPXQuY2hhckF0KHcpOl89ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQodykpe2Nhc2UiZCI6Yis9eChkKCJkIixlLmRheSgpLDIpKTticmVhaztjYXNlIkQiOmIrPShuPSJEIixhPWUuZGF5T2ZXZWVrKCksbz1sLHM9YyxwKG4pP3NbYV06b1thXSk7YnJlYWs7Y2FzZSJvIjpiKz1kKCJvIixlLmRheU9mWWVhcigpLDMpO2JyZWFrO2Nhc2UidyI6Yis9ZCgidyIsZS53ZWVrT2ZZZWFyKCksMik7YnJlYWs7Y2FzZSJtIjpiKz1nKGUpO2JyZWFrO2Nhc2UiTSI6Yis9dihlLHAoIk0iKSk7YnJlYWs7Y2FzZSJ5IjpiKz1wKCJ5IiwyKT9lLnllYXIoKTooZS55ZWFyKCklMTAwPDEwPyIwIjoiIikrZS55ZWFyKCklMTAwO2JyZWFrO2Nhc2UiWSI6cCgiWSIsMiksYis9ZS5mb3JtYXRZZWFyKCk7YnJlYWs7Y2FzZSJKIjpiKz1lLnRvSkQoKTticmVhaztjYXNlIkAiOmIrPShlLnRvSkQoKS10aGlzLlVOSVhfRVBPQ0gpKnRoaXMuU0VDU19QRVJfREFZO2JyZWFrO2Nhc2UiISI6Yis9KGUudG9KRCgpLXRoaXMuVElDS1NfRVBPQ0gpKnRoaXMuVElDS1NfUEVSX0RBWTticmVhaztjYXNlIiciOnAoIiciKT9iKz0iJyI6Xz0hMDticmVhaztkZWZhdWx0OmIrPXQuY2hhckF0KHcpfXJldHVybiBifSxwYXJzZURhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PWUpdGhyb3cgaS5sb2NhbC5pbnZhbGlkQXJndW1lbnRzfHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZEFyZ3VtZW50cztpZigiIj09PShlPSJvYmplY3QiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZSsiIikpcmV0dXJuIG51bGw7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7dmFyIG49KHI9cnx8e30pLnNob3J0WWVhckN1dG9mZnx8dGhpcy5zaG9ydFllYXJDdXRvZmY7bj0ic3RyaW5nIiE9dHlwZW9mIG4/bjp0aGlzLnRvZGF5KCkueWVhcigpJTEwMCtwYXJzZUludChuLDEwKTtmb3IodmFyIGE9ci5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsbz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHM9ci5wYXJzZU1vbnRofHx0aGlzLmxvY2FsLnBhcnNlTW9udGgsbD1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsYz1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsdT1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxmPS0xLGg9LTEscD0tMSxkPS0xLG09LTEsZz0hMSx2PSExLHk9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTtNK248dC5sZW5ndGgmJnQuY2hhckF0KE0rbik9PT1lOyluKys7cmV0dXJuIE0rPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSx4PWZ1bmN0aW9uKHQscil7dmFyIG49eSh0LHIpLGE9WzIsMyxuPzQ6MixuPzQ6MiwxMCwxMSwyMF1bIm95WUpAISIuaW5kZXhPZih0KSsxXSxvPW5ldyBSZWdFeHAoIl4tP1xcZHsxLCIrYSsifSIpLHM9ZS5zdWJzdHJpbmcoQSkubWF0Y2gobyk7aWYoIXMpdGhyb3coaS5sb2NhbC5taXNzaW5nTnVtYmVyQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5taXNzaW5nTnVtYmVyQXQpLnJlcGxhY2UoL1x7MFx9LyxBKTtyZXR1cm4gQSs9c1swXS5sZW5ndGgscGFyc2VJbnQoc1swXSwxMCl9LGI9dGhpcyxfPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpe3koIm0iKTt2YXIgdD1sLmNhbGwoYixlLnN1YnN0cmluZyhBKSk7cmV0dXJuIEErPXQubGVuZ3RoLHR9cmV0dXJuIHgoIm0iKX0sdz1mdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIG89eSh0LGEpP246cixzPTA7czxvLmxlbmd0aDtzKyspaWYoZS5zdWJzdHIoQSxvW3NdLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW9bc10udG9Mb3dlckNhc2UoKSlyZXR1cm4gQSs9b1tzXS5sZW5ndGgscytiLm1pbk1vbnRoO3Rocm93KGkubG9jYWwudW5rbm93bk5hbWVBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVua25vd25OYW1lQXQpLnJlcGxhY2UoL1x7MFx9LyxBKX0sVD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB1KXt2YXIgdD15KCJNIik/dS5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpOmMuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4gdygiTSIsYyx1KX0saz1mdW5jdGlvbigpe2lmKGUuY2hhckF0KEEpIT09dC5jaGFyQXQoTSkpdGhyb3coaS5sb2NhbC51bmV4cGVjdGVkTGl0ZXJhbEF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZExpdGVyYWxBdCkucmVwbGFjZSgvXHswXH0vLEEpO0ErK30sQT0wLE09MDtNPHQubGVuZ3RoO00rKylpZih2KSInIiE9PXQuY2hhckF0KE0pfHx5KCInIik/aygpOnY9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoTSkpe2Nhc2UiZCI6ZD14KCJkIik7YnJlYWs7Y2FzZSJEIjp3KCJEIixhLG8pO2JyZWFrO2Nhc2UibyI6bT14KCJvIik7YnJlYWs7Y2FzZSJ3Ijp4KCJ3Iik7YnJlYWs7Y2FzZSJtIjpwPV8oKTticmVhaztjYXNlIk0iOnA9VCgpO2JyZWFrO2Nhc2UieSI6dmFyIFM9TTtnPSF5KCJ5IiwyKSxNPVMsaD14KCJ5IiwyKTticmVhaztjYXNlIlkiOmg9eCgiWSIsMik7YnJlYWs7Y2FzZSJKIjpmPXgoIkoiKSsuNSwiLiI9PT1lLmNoYXJBdChBKSYmKEErKyx4KCJKIikpO2JyZWFrO2Nhc2UiQCI6Zj14KCJAIikvdGhpcy5TRUNTX1BFUl9EQVkrdGhpcy5VTklYX0VQT0NIO2JyZWFrO2Nhc2UiISI6Zj14KCIhIikvdGhpcy5USUNLU19QRVJfREFZK3RoaXMuVElDS1NfRVBPQ0g7YnJlYWs7Y2FzZSIqIjpBPWUubGVuZ3RoO2JyZWFrO2Nhc2UiJyI6eSgiJyIpP2soKTp2PSEwO2JyZWFrO2RlZmF1bHQ6aygpfWlmKEE8ZS5sZW5ndGgpdGhyb3cgaS5sb2NhbC51bmV4cGVjdGVkVGV4dHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVuZXhwZWN0ZWRUZXh0O2lmKC0xPT09aD9oPXRoaXMudG9kYXkoKS55ZWFyKCk6aDwxMDAmJmcmJihoKz0tMT09PW4/MTkwMDp0aGlzLnRvZGF5KCkueWVhcigpLXRoaXMudG9kYXkoKS55ZWFyKCklMTAwLShoPD1uPzA6MTAwKSksInN0cmluZyI9PXR5cGVvZiBwJiYocD1zLmNhbGwodGhpcyxoLHApKSxtPi0xKXtwPTEsZD1tO2Zvcih2YXIgRT10aGlzLmRheXNJbk1vbnRoKGgscCk7ZD5FO0U9dGhpcy5kYXlzSW5Nb250aChoLHApKXArKyxkLT1FfXJldHVybiBmPi0xP3RoaXMuZnJvbUpEKGYpOnRoaXMubmV3RGF0ZShoLHAsZCl9LGRldGVybWluZURhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyJiYib2JqZWN0IiE9dHlwZW9mIHImJihpPW4sbj1yLHI9bnVsbCksInN0cmluZyIhPXR5cGVvZiBuJiYoaT1uLG49IiIpO3ZhciBhPXRoaXM7cmV0dXJuIGU9ZT9lLm5ld0RhdGUoKTpudWxsLHQ9bnVsbD09dD9lOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGEucGFyc2VEYXRlKG4sdCxpKX1jYXRjaCh0KXt9Zm9yKHZhciBlPSgodD10LnRvTG93ZXJDYXNlKCkpLm1hdGNoKC9eYy8pJiZyP3IubmV3RGF0ZSgpOm51bGwpfHxhLnRvZGF5KCksbz0vKFsrLV0/WzAtOV0rKVxzKihkfHd8bXx5KT8vZyxzPW8uZXhlYyh0KTtzOyllLmFkZChwYXJzZUludChzWzFdLDEwKSxzWzJdfHwiZCIpLHM9by5leGVjKHQpO3JldHVybiBlfSh0KToibnVtYmVyIj09dHlwZW9mIHQ/aXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wP2U6YS50b2RheSgpLmFkZCh0LCJkIik6YS5uZXdEYXRlKHQpfX0pfSx7Ii4vbWFpbiI6MzQxLCJvYmplY3QtYXNzaWduIjoyNDJ9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPVt7cGF0aDoiIixiYWNrb2ZmOjB9LHtwYXRoOiJNLTIuNCwtM1YzTDAuNiwwWiIsYmFja29mZjouNn0se3BhdGg6Ik0tMy43LC0yLjVWMi41TDEuMywwWiIsYmFja29mZjoxLjN9LHtwYXRoOiJNLTQuNDUsLTNMLTEuNjUsLTAuMlYwLjJMLTQuNDUsM0wxLjU1LDBaIixiYWNrb2ZmOjEuNTV9LHtwYXRoOiJNLTIuMiwtMi4yTC0wLjIsLTAuMlYwLjJMLTIuMiwyLjJMLTEuNCwzTDEuNiwwTC0xLjQsLTNaIixiYWNrb2ZmOjEuNn0se3BhdGg6Ik0tNC40LC0yLjFMLTAuNiwtMC4yVjAuMkwtNC40LDIuMUwtNCwzTDIsMEwtNCwtM1oiLGJhY2tvZmY6Mn0se3BhdGg6Ik0yLDBBMiwyIDAgMSwxIDAsLTJBMiwyIDAgMCwxIDIsMFoiLGJhY2tvZmY6MCxub1JvdGF0ZTohMH0se3BhdGg6Ik0yLDJWLTJILTJWMloiLGJhY2tvZmY6MCxub1JvdGF0ZTohMH1dfSx7fV0sMzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXJyb3dfcGF0aHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O3QoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7ZS5leHBvcnRzPW8oImFubm90YXRpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3Iixjb2xvckVkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJjZW50ZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVycGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaWRlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJlbmQiLCJzdGFydCJdLGV4dHJhczpbIm5vbmUiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMSxlZGl0VHlwZToiYXJyYXlkcmF3In0seGNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9fX0pfSx7Ii4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIjo0NjcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTU2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MCwiLi9hcnJvd19wYXRocyI6MzQzfV0sMzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vZHJhdyIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1pLmdldEZyb21JZCh0LGUueHJlZiksbj1pLmdldEZyb21JZCh0LGUueXJlZiksYT1pLmdldFJlZlR5cGUoZS54cmVmKSxvPWkuZ2V0UmVmVHlwZShlLnlyZWYpO2UuX2V4dHJlbWVzPXt9LCJyYW5nZSI9PT1hJiZzKGUsciksInJhbmdlIj09PW8mJnMoZSxuKX0pKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj1lLl9pZCxhPW4uY2hhckF0KDApLG89dFthXSxzPXRbImEiK2FdLGw9dFthKyJyZWYiXSxjPXRbImEiK2ErInJlZiJdLHU9dFsiXyIrYSsicGFkcGx1cyJdLGY9dFsiXyIrYSsicGFkbWludXMiXSxoPXt4OjEseTotMX1bYV0qdFthKyJzaGlmdCJdLHA9Myp0LmFycm93c2l6ZSp0LmFycm93d2lkdGh8fDAsZD1wK2gsbT1wLWgsZz0zKnQuc3RhcnRhcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLHY9ZytoLHk9Zy1oO2lmKGM9PT1sKXt2YXIgeD1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOmQscHBhZG1pbnVzOm19KSxiPWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKHMpXSx7cHBhZHBsdXM6TWF0aC5tYXgodSx2KSxwcGFkbWludXM6TWF0aC5tYXgoZix5KX0pO3I9e21pbjpbeC5taW5bMF0sYi5taW5bMF1dLG1heDpbeC5tYXhbMF0sYi5tYXhbMF1dfX1lbHNlIHY9cz92K3M6dix5PXM/eS1zOnkscj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsZCx2KSxwcGFkbWludXM6TWF0aC5tYXgoZixtLHkpfSk7dC5fZXh0cmVtZXNbbl09cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpcmV0dXJuIG4uc3luY09yQXN5bmMoW2Esb10sdCl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2RyYXciOjM1MH1dLDM0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3I7ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG8sbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxmPVtdLGg9W10scD1bXSxkPShlfHxbXSkubGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0oaT11W3JdKS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPGQ7bisrKWlmKGw9KG89ZVtuXSkueGF4aXMsYz1vLnlheGlzLGwuX2lkPT09aS54cmVmJiZjLl9pZD09PWkueXJlZiYmbC5kMnIoby54KT09PXMoaS5feGNsaWNrLGwpJiZjLmQycihvLnkpPT09cyhpLl95Y2xpY2ssYykpeyhpLnZpc2libGU/Im9ub3V0Ij09PWE/aDpwOmYpLnB1c2gocik7YnJlYWt9bj09PWQmJmkudmlzaWJsZSYmIm9ub3V0Ij09PWEmJmgucHVzaChyKX1yZXR1cm57b246ZixvZmY6aCxleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuImxvZyI9PT1lLnR5cGU/ZS5sMnIodCk6ZS5kMnIodCl9ZS5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpmdW5jdGlvbih0LGUpe3ZhciByPW8odCxlKTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH0sb25DbGljazpmdW5jdGlvbih0LGUpe3ZhciByLHMsbD1vKHQsZSksYz1sLm9uLHU9bC5vZmYuY29uY2F0KGwuZXhwbGljaXRPZmYpLGY9e30saD10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zO2lmKCFjLmxlbmd0aCYmIXUubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixoW2Nbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITApLG4uZXh0ZW5kRmxhdChmLHMuZ2V0VXBkYXRlT2JqKCkpO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCwiYW5ub3RhdGlvbnMiLGhbdVtyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMSksbi5leHRlbmRGbGF0KGYscy5nZXRVcGRhdGVPYmooKSk7cmV0dXJuIGkuY2FsbCgidXBkYXRlIix0LHt9LGYpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcmVnaXN0cnkiOjYzM31dLDM0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2EoIm9wYWNpdHkiKTt2YXIgbz1hKCJiZ2NvbG9yIikscz1hKCJib3JkZXJjb2xvciIpLGw9aS5vcGFjaXR5KHMpO2EoImJvcmRlcnBhZCIpO3ZhciBjPWEoImJvcmRlcndpZHRoIiksdT1hKCJzaG93YXJyb3ciKTtpZihhKCJ0ZXh0Iix1PyIgIjpyLl9kZmx0VGl0bGUuYW5ub3RhdGlvbiksYSgidGV4dGFuZ2xlIiksbi5jb2VyY2VGb250KGEsImZvbnQiLHIuZm9udCksYSgid2lkdGgiKSxhKCJhbGlnbiIpLGEoImhlaWdodCIpJiZhKCJ2YWxpZ24iKSx1KXt2YXIgZixoLHA9YSgiYXJyb3dzaWRlIik7LTEhPT1wLmluZGV4T2YoImVuZCIpJiYoZj1hKCJhcnJvd2hlYWQiKSxoPWEoImFycm93c2l6ZSIpKSwtMSE9PXAuaW5kZXhPZigic3RhcnQiKSYmKGEoInN0YXJ0YXJyb3doZWFkIixmKSxhKCJzdGFydGFycm93c2l6ZSIsaCkpLGEoImFycm93Y29sb3IiLGw/ZS5ib3JkZXJjb2xvcjppLmRlZmF1bHRMaW5lKSxhKCJhcnJvd3dpZHRoIiwyKihsJiZjfHwxKSksYSgic3RhbmRvZmYiKSxhKCJzdGFydHN0YW5kb2ZmIil9dmFyIGQ9YSgiaG92ZXJ0ZXh0IiksbT1yLmhvdmVybGFiZWx8fHt9O2lmKGQpe3ZhciBnPWEoImhvdmVybGFiZWwuYmdjb2xvciIsbS5iZ2NvbG9yfHwoaS5vcGFjaXR5KG8pP2kucmdiKG8pOmkuZGVmYXVsdExpbmUpKSx2PWEoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLG0uYm9yZGVyY29sb3J8fGkuY29udHJhc3QoZykpO24uY29lcmNlRm9udChhLCJob3ZlcmxhYmVsLmZvbnQiLHtmYW1pbHk6bS5mb250LmZhbWlseSxzaXplOm0uZm9udC5zaXplLGNvbG9yOm0uZm9udC5jb2xvcnx8dn0pfWEoImNhcHR1cmVldmVudHMiLCEhZCl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9jb2xvciI6MzYxfV0sMzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8e307dmFyIG89ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxzPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWw9dVtoXSxjPSJhbm5vdGF0aW9uc1siK2grIl0uIixsW2YrInJlZiJdPT09ZS5faWQmJnAoZiksbFsiYSIrZisicmVmIl09PT1lLl9pZCYmcCgiYSIrZik7ZnVuY3Rpb24gcCh0KXt2YXIgcj1sW3RdLHM9bnVsbDtzPW8/aShyLGUucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4ocyl8fChzPW51bGwpLGEoYyt0LHMpfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6NTI2LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sMzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX12YXIgbD1hKCJ2aXNpYmxlIiksYz1hKCJjbGlja3Rvc2hvdyIpO2lmKGx8fGMpe28odCxlLHIsYSk7Zm9yKHZhciB1PWUuc2hvd2Fycm93LGY9WyJ4IiwieSJdLGg9Wy0xMCwtMzBdLHA9e19mdWxsTGF5b3V0OnJ9LGQ9MDtkPDI7ZCsrKXt2YXIgbT1mW2RdLGc9aS5jb2VyY2VSZWYodCxlLHAsbSwiIiwicGFwZXIiKTtpZigicGFwZXIiIT09ZylpLmdldEZyb21JZChwLGcpLl9hbm5JbmRpY2VzLnB1c2goZS5faW5kZXgpO2lmKGkuY29lcmNlUG9zaXRpb24oZSxwLGEsZyxtLC41KSx1KXt2YXIgdj0iYSIrbSx5PWkuY29lcmNlUmVmKHQsZSxwLHYsInBpeGVsIixbInBpeGVsIiwicGFwZXIiXSk7InBpeGVsIiE9PXkmJnkhPT1nJiYoeT1lW3ZdPSJwaXhlbCIpO3ZhciB4PSJwaXhlbCI9PT15P2hbZF06LjQ7aS5jb2VyY2VQb3NpdGlvbihlLHAsYSx5LHYseCl9YShtKyJhbmNob3IiKSxhKG0rInNoaWZ0Iil9aWYobi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksdSYmbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSxjKXt2YXIgYj1hKCJ4Y2xpY2siKSxfPWEoInljbGljayIpO2UuX3hjbGljaz12b2lkIDA9PT1iP2UueDppLmNsZWFuUG9zaXRpb24oYixwLGUueHJlZiksZS5feWNsaWNrPXZvaWQgMD09PV8/ZS55OmkuY2xlYW5Qb3NpdGlvbihfLHAsZS55cmVmKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2F0dHJpYnV0ZXMiOjM0NCwiLi9jb21tb25fZGVmYXVsdHMiOjM0N31dLDM1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vY29sb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxmPXQoIi4uL2Z4IiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPWwuZ2V0RnJvbUlkKHQsci54cmVmKSxpPWwuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLHgodCxyLGUsITEsbixpKX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7dmFyIGE9aVtyXSxvPWlbcisicmVmIl0scz0tMSE9PXIuaW5kZXhPZigieSIpLGM9ImRvbWFpbiI9PT1sLmdldFJlZlR5cGUobyksdT1zP24uaDpuLnc7cmV0dXJuIHQ/Yz9hKyhzPy1lOmUpL3QuX2xlbmd0aDp0LnAycih0LnIycChhKStlKTphKyhzPy1lOmUpL3V9ZnVuY3Rpb24geCh0LGUscixhLHYseCl7dmFyIGIsXyx3PXQuX2Z1bGxMYXlvdXQsVD10Ll9mdWxsTGF5b3V0Ll9zaXplLGs9dC5fY29udGV4dC5lZGl0czthPyhiPSJhbm5vdGF0aW9uLSIrYSxfPWErIi5hbm5vdGF0aW9ucyIpOihiPSJhbm5vdGF0aW9uIixfPSJhbm5vdGF0aW9ucyIpO3ZhciBBPW0odC5sYXlvdXQsXyxlKSxNPUEubW9kaWZ5QmFzZSxTPUEubW9kaWZ5SXRlbSxFPUEuZ2V0VXBkYXRlT2JqO3cuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK2IrJ1tkYXRhLWluZGV4PSInK3IrJyJdJykucmVtb3ZlKCk7dmFyIEw9ImNsaXAiK3cuX3VpZCsiX2FubiIrcjtpZihlLl9pbnB1dCYmITEhPT1lLnZpc2libGUpe3ZhciBDPXt4Ont9LHk6e319LFA9K2UudGV4dGFuZ2xlfHwwLEk9dy5faW5mb2xheWVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoYiwhMCkuYXR0cigiZGF0YS1pbmRleCIsU3RyaW5nKHIpKS5zdHlsZSgib3BhY2l0eSIsZS5vcGFjaXR5KSxPPUkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi10ZXh0LWciLCEwKSx6PWtbZS5zaG93YXJyb3c/ImFubm90YXRpb25UYWlsIjoiYW5ub3RhdGlvblBvc2l0aW9uIl0sRD1lLmNhcHR1cmVldmVudHN8fGsuYW5ub3RhdGlvblRleHR8fHosUj1PLmFwcGVuZCgiZyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsRD8iYWxsIjpudWxsKS5jYWxsKHAsInBvaW50ZXIiKS5vbigiY2xpY2siLChmdW5jdGlvbigpe3QuX2RyYWdnaW5nPSExLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsWShuLmV2ZW50KSl9KSk7ZS5ob3ZlcnRleHQmJlIub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHI9ZS5ob3ZlcmxhYmVsLG49ci5mb250LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zi5sb25lSG92ZXIoe3gwOmkubGVmdC1hLmxlZnQseDE6aS5yaWdodC1hLmxlZnQseTooaS50b3AraS5ib3R0b20pLzItYS50b3AsdGV4dDplLmhvdmVydGV4dCxjb2xvcjpyLmJnY29sb3IsYm9yZGVyQ29sb3I6ci5ib3JkZXJjb2xvcixmb250RmFtaWx5Om4uZmFtaWx5LGZvbnRTaXplOm4uc2l6ZSxmb250Q29sb3I6bi5jb2xvcn0se2NvbnRhaW5lcjp3Ll9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjp3Ll9wYXBlci5ub2RlKCksZ2Q6dH0pfSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Zi5sb25lVW5ob3Zlcih3Ll9ob3ZlcmxheWVyLm5vZGUoKSl9KSk7dmFyIEY9ZS5ib3JkZXJ3aWR0aCxCPWUuYm9yZGVycGFkLE49RitCLGo9Ui5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJnIikuc3R5bGUoInN0cm9rZS13aWR0aCIsRisicHgiKS5jYWxsKGMuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYy5maWxsLGUuYmdjb2xvciksVT1lLndpZHRofHxlLmhlaWdodCxWPXcuX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrTCkuZGF0YShVP1swXTpbXSk7Vi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJhbm5jbGlwIiwhMCkuYXR0cigiaWQiLEwpLmFwcGVuZCgicmVjdCIpLFYuZXhpdCgpLnJlbW92ZSgpO3ZhciBIPWUuZm9udCxxPXcuX21ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQsdy5fbWV0YSk6ZS50ZXh0LEc9Ui5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KHEpO2suYW5ub3RhdGlvblRleHQ/Ry5jYWxsKGgubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpSLGdkOnR9KS5jYWxsKFcpLm9uKCJlZGl0IiwoZnVuY3Rpb24ocil7ZS50ZXh0PXIsdGhpcy5jYWxsKFcpLFMoInRleHQiLHIpLHYmJnYuYXV0b3JhbmdlJiZNKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSx4JiZ4LmF1dG9yYW5nZSYmTSh4Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsRSgpKX0pKTpHLmNhbGwoVyl9ZWxzZSBuLnNlbGVjdEFsbCgiIyIrTCkucmVtb3ZlKCk7ZnVuY3Rpb24gWSh0KXt2YXIgbj17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6dH07cmV0dXJuIGEmJihuLnN1YnBsb3RJZD1hKSxufWZ1bmN0aW9uIFcocil7cmV0dXJuIHIuY2FsbCh1LmZvbnQsSCkuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxoLmNvbnZlcnRUb1RzcGFucyhyLHQsWCkscn1mdW5jdGlvbiBYKCl7dmFyIHI9Ry5zZWxlY3RBbGwoImEiKTsxPT09ci5zaXplKCkmJnIudGV4dCgpPT09Ry50ZXh0KCkmJlIuaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOnIuYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpyLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKGoubm9kZSgpKTt2YXIgbj1SLnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksZj0hbi5lbXB0eSgpLG09dS5iQm94KChmP246Rykubm9kZSgpKSxiPW0ud2lkdGgsXz1tLmhlaWdodCxBPWUud2lkdGh8fGIsRD1lLmhlaWdodHx8XyxCPU1hdGgucm91bmQoQSsyKk4pLEg9TWF0aC5yb3VuZChEKzIqTik7ZnVuY3Rpb24gcSh0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfWZvcih2YXIgVz0hMSxYPVsieCIsInkiXSxaPTA7WjxYLmxlbmd0aDtaKyspe3ZhciBKLEssUSwkLHR0LGV0PVhbWl0scnQ9ZVtldCsicmVmIl18fGV0LG50PWVbImEiK2V0KyJyZWYiXSxpdD17eDp2LHk6eH1bZXRdLGF0PShQKygieCI9PT1ldD8wOi05MCkpKk1hdGguUEkvMTgwLG90PUIqTWF0aC5jb3MoYXQpLHN0PUgqTWF0aC5zaW4oYXQpLGx0PU1hdGguYWJzKG90KStNYXRoLmFicyhzdCksY3Q9ZVtldCsiYW5jaG9yIl0sdXQ9ZVtldCsic2hpZnQiXSooIngiPT09ZXQ/MTotMSksZnQ9Q1tldF0saHQ9bC5nZXRSZWZUeXBlKHJ0KTtpZihpdCYmImRvbWFpbiIhPT1odCl7dmFyIHB0PWl0LnIyZnJhY3Rpb24oZVtldF0pOyhwdDwwfHxwdD4xKSYmKG50PT09cnQ/KChwdD1pdC5yMmZyYWN0aW9uKGVbImEiK2V0XSkpPDB8fHB0PjEpJiYoVz0hMCk6Vz0hMCksSj1pdC5fb2Zmc2V0K2l0LnIycChlW2V0XSksJD0uNX1lbHNle3ZhciBkdD0iZG9tYWluIj09PWh0OyJ4Ij09PWV0PyhRPWVbZXRdLEo9ZHQ/aXQuX29mZnNldCtpdC5fbGVuZ3RoKlE6Sj1ULmwrVC53KlEpOihRPTEtZVtldF0sSj1kdD9pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgqUTpKPVQudCtULmgqUSksJD1lLnNob3dhcnJvdz8uNTpRfWlmKGUuc2hvd2Fycm93KXtmdC5oZWFkPUo7dmFyIG10PWVbImEiK2V0XTtpZih0dD1vdCpxKC41LGUueGFuY2hvciktc3QqcSguNSxlLnlhbmNob3IpLG50PT09cnQpe3ZhciBndD1sLmdldFJlZlR5cGUobnQpOyJkb21haW4iPT09Z3Q/KCJ5Ij09PWV0JiYobXQ9MS1tdCksZnQudGFpbD1pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgqbXQpOiJwYXBlciI9PT1ndD8ieSI9PT1ldD8obXQ9MS1tdCxmdC50YWlsPVQudCtULmgqbXQpOmZ0LnRhaWw9VC5sK1QudyptdDpmdC50YWlsPWl0Ll9vZmZzZXQraXQucjJwKG10KSxLPXR0fWVsc2UgZnQudGFpbD1KK210LEs9dHQrbXQ7ZnQudGV4dD1mdC50YWlsK3R0O3ZhciB2dD13WyJ4Ij09PWV0PyJ3aWR0aCI6ImhlaWdodCJdO2lmKCJwYXBlciI9PT1ydCYmKGZ0LmhlYWQ9by5jb25zdHJhaW4oZnQuaGVhZCwxLHZ0LTEpKSwicGl4ZWwiPT09bnQpe3ZhciB5dD0tTWF0aC5tYXgoZnQudGFpbC0zLGZ0LnRleHQpLHh0PU1hdGgubWluKGZ0LnRhaWwrMyxmdC50ZXh0KS12dDt5dD4wPyhmdC50YWlsKz15dCxmdC50ZXh0Kz15dCk6eHQ+MCYmKGZ0LnRhaWwtPXh0LGZ0LnRleHQtPXh0KX1mdC50YWlsKz11dCxmdC5oZWFkKz11dH1lbHNlIEs9dHQ9bHQqcSgkLGN0KSxmdC50ZXh0PUordHQ7ZnQudGV4dCs9dXQsdHQrPXV0LEsrPXV0LGVbIl8iK2V0KyJwYWRwbHVzIl09bHQvMitLLGVbIl8iK2V0KyJwYWRtaW51cyJdPWx0LzItSyxlWyJfIitldCsic2l6ZSJdPWx0LGVbIl8iK2V0KyJzaGlmdCJdPXR0fWlmKFcpUi5yZW1vdmUoKTtlbHNle3ZhciBidD0wLF90PTA7aWYoImxlZnQiIT09ZS5hbGlnbiYmKGJ0PShBLWIpKigiY2VudGVyIj09PWUuYWxpZ24/LjU6MSkpLCJ0b3AiIT09ZS52YWxpZ24mJihfdD0oRC1fKSooIm1pZGRsZSI9PT1lLnZhbGlnbj8uNToxKSksZiluLnNlbGVjdCgic3ZnIikuYXR0cih7eDpOK2J0LTEseTpOK190fSkuY2FsbCh1LnNldENsaXBVcmwsVT9MOm51bGwsdCk7ZWxzZXt2YXIgd3Q9TitfdC1tLnRvcCxUdD1OK2J0LW0ubGVmdDtHLmNhbGwoaC5wb3NpdGlvblRleHQsVHQsd3QpLmNhbGwodS5zZXRDbGlwVXJsLFU/TDpudWxsLHQpfVYuc2VsZWN0KCJyZWN0IikuY2FsbCh1LnNldFJlY3QsTixOLEEsRCksai5jYWxsKHUuc2V0UmVjdCxGLzIsRi8yLEItRixILUYpLFIuY2FsbCh1LnNldFRyYW5zbGF0ZSxNYXRoLnJvdW5kKEMueC50ZXh0LUIvMiksTWF0aC5yb3VuZChDLnkudGV4dC1ILzIpKSxPLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrUCsiLCIrQy54LnRleHQrIiwiK0MueS50ZXh0KyIpIn0pO3ZhciBrdCxBdD1mdW5jdGlvbihyLG4pe0kuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1hcnJvdy1nIikucmVtb3ZlKCk7dmFyIGw9Qy54LmhlYWQsZj1DLnkuaGVhZCxoPUMueC50YWlsK3IscD1DLnkudGFpbCtuLG09Qy54LnRleHQrcixiPUMueS50ZXh0K24sXz1vLnJvdGF0aW9uWFlNYXRyaXgoUCxtLGIpLHc9by5hcHBseTJEVHJhbnNmb3JtKF8pLEE9by5hcHBseTJEVHJhbnNmb3JtMihfKSxMPStqLmF0dHIoIndpZHRoIiksej0rai5hdHRyKCJoZWlnaHQiKSxEPW0tLjUqTCxGPUQrTCxCPWItLjUqeixOPUIreixVPVtbRCxCLEQsTl0sW0QsTixGLE5dLFtGLE4sRixCXSxbRixCLEQsQl1dLm1hcChBKTtpZighVS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KGwsZixsKzFlNixmKzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0pLCExKSl7VS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGgscCxsLGYsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGg9ZS54LHA9ZS55KX0pKTt2YXIgVj1lLmFycm93d2lkdGgsSD1lLmFycm93Y29sb3IscT1lLmFycm93c2lkZSxHPUkuYXBwZW5kKCJnIikuc3R5bGUoe29wYWNpdHk6Yy5vcGFjaXR5KEgpfSkuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdy1nIiwhMCksWT1HLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIitoKyIsIitwKyJMIitsKyIsIitmKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixWKyJweCIpLmNhbGwoYy5zdHJva2UsYy5yZ2IoSCkpO2lmKGcoWSxxLGUpLGsuYW5ub3RhdGlvblBvc2l0aW9uJiZZLm5vZGUoKS5wYXJlbnROb2RlJiYhYSl7dmFyIFc9bCxYPWY7aWYoZS5zdGFuZG9mZil7dmFyIFo9TWF0aC5zcXJ0KE1hdGgucG93KGwtaCwyKStNYXRoLnBvdyhmLXAsMikpO1crPWUuc3RhbmRvZmYqKGgtbCkvWixYKz1lLnN0YW5kb2ZmKihwLWYpL1p9dmFyIEosSyxRPUcuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdyIsITApLmNsYXNzZWQoImFubmRyYWciLCEwKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGgtVykrIiwiKyhwLVgpLHRyYW5zZm9ybTpzKFcsWCl9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixWKzYrInB4IikuY2FsbChjLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwoYy5maWxsLCJyZ2JhKDAsMCwwLDApIik7ZC5pbml0KHtlbGVtZW50OlEubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9dS5nZXRUcmFuc2xhdGUoUik7Sj10LngsSz10LnksdiYmdi5hdXRvcmFuZ2UmJk0odi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZNKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49dyhKLEspLGk9blswXSt0LGE9blsxXStyO1IuY2FsbCh1LnNldFRyYW5zbGF0ZSxpLGEpLFMoIngiLHkodix0LCJ4IixULGUpKSxTKCJ5Iix5KHgsciwieSIsVCxlKSksZS5heHJlZj09PWUueHJlZiYmUygiYXgiLHkodix0LCJheCIsVCxlKSksZS5heXJlZj09PWUueXJlZiYmUygiYXkiLHkoeCxyLCJheSIsVCxlKSksRy5hdHRyKCJ0cmFuc2Zvcm0iLHModCxyKSksTy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1ArIiwiK2krIiwiK2ErIikifSl9LGRvbmVGbjpmdW5jdGlvbigpe2kuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LEUoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfX19O2lmKGUuc2hvd2Fycm93JiZBdCgwLDApLHopZC5pbml0KHtlbGVtZW50OlIubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7a3Q9Ty5hdHRyKCJ0cmFuc2Zvcm0iKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49InBvaW50ZXIiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/UygiYXgiLHkodix0LCJheCIsVCxlKSk6UygiYXgiLGUuYXgrdCksZS5heXJlZj09PWUueXJlZj9TKCJheSIseSh4LHIsImF5IixULncsZSkpOlMoImF5IixlLmF5K3IpLEF0KHQscik7ZWxzZXtpZihhKXJldHVybjt2YXIgaSxvO2lmKHYpaT15KHYsdCwieCIsVCxlKTtlbHNle3ZhciBsPWUuX3hzaXplL1QudyxjPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9ULnctbC8yO2k9ZC5hbGlnbihjK3QvVC53LGwsMCwxLGUueGFuY2hvcil9aWYoeClvPXkoeCxyLCJ5IixULGUpO2Vsc2V7dmFyIHU9ZS5feXNpemUvVC5oLGY9ZS55LShlLl95c2hpZnQrZS55c2hpZnQpL1QuaC11LzI7bz1kLmFsaWduKGYtci9ULmgsdSwwLDEsZS55YW5jaG9yKX1TKCJ4IixpKSxTKCJ5IixvKSx2JiZ4fHwobj1kLmdldEN1cnNvcih2Py41OmkseD8uNTpvLGUueGFuY2hvcixlLnlhbmNob3IpKX1PLmF0dHIoe3RyYW5zZm9ybTpzKHQscikra3R9KSxwKFIsbil9LGNsaWNrRm46ZnVuY3Rpb24ocixuKXtlLmNhcHR1cmVldmVudHMmJnQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsWShuKSl9LGRvbmVGbjpmdW5jdGlvbigpe3AoUiksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsRSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmdih0LHIpO3JldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LGRyYXdPbmU6dixkcmF3UmF3Onh9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MTksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2NvbG9yIjozNjEsIi4uL2RyYWdlbGVtZW50IjozODAsIi4uL2RyYXdpbmciOjM4MywiLi4vZngiOjQwMSwiLi9kcmF3X2Fycm93X2hlYWQiOjM1MSwiQHBsb3RseS9kMyI6NTh9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vYXJyb3dfcGF0aHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJTY2FsZSxsPW8uc3RyUm90YXRlLGM9by5zdHJUcmFuc2xhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyx1LGYsaCxwPXQubm9kZSgpLGQ9YVtyLmFycm93aGVhZHx8MF0sbT1hW3Iuc3RhcnRhcnJvd2hlYWR8fDBdLGc9KHIuYXJyb3d3aWR0aHx8MSkqKHIuYXJyb3dzaXplfHwxKSx2PShyLmFycm93d2lkdGh8fDEpKihyLnN0YXJ0YXJyb3dzaXplfHwxKSx5PWUuaW5kZXhPZigic3RhcnQiKT49MCx4PWUuaW5kZXhPZigiZW5kIik+PTAsYj1kLmJhY2tvZmYqZytyLnN0YW5kb2ZmLF89bS5iYWNrb2ZmKnYrci5zdGFydHN0YW5kb2ZmO2lmKCJsaW5lIj09PXAubm9kZU5hbWUpe289e3g6K3QuYXR0cigieDEiKSx5Oit0LmF0dHIoInkxIil9LHU9e3g6K3QuYXR0cigieDIiKSx5Oit0LmF0dHIoInkyIil9O3ZhciB3PW8ueC11LngsVD1vLnktdS55O2lmKGg9KGY9TWF0aC5hdGFuMihULHcpKStNYXRoLlBJLGImJl8mJmIrXz5NYXRoLnNxcnQodyp3K1QqVCkpcmV0dXJuIHZvaWQgeigpO2lmKGIpe2lmKGIqYj53KncrVCpUKXJldHVybiB2b2lkIHooKTt2YXIgaz1iKk1hdGguY29zKGYpLEE9YipNYXRoLnNpbihmKTt1LngrPWssdS55Kz1BLHQuYXR0cih7eDI6dS54LHkyOnUueX0pfWlmKF8pe2lmKF8qXz53KncrVCpUKXJldHVybiB2b2lkIHooKTt2YXIgTT1fKk1hdGguY29zKGYpLFM9XypNYXRoLnNpbihmKTtvLngtPU0sby55LT1TLHQuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKCJwYXRoIj09PXAubm9kZU5hbWUpe3ZhciBFPXAuZ2V0VG90YWxMZW5ndGgoKSxMPSIiO2lmKEU8YitfKXJldHVybiB2b2lkIHooKTt2YXIgQz1wLmdldFBvaW50QXRMZW5ndGgoMCksUD1wLmdldFBvaW50QXRMZW5ndGgoLjEpO2Y9TWF0aC5hdGFuMihDLnktUC55LEMueC1QLngpLG89cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKF8sRSkpLEw9IjBweCwiK18rInB4LCI7dmFyIEk9cC5nZXRQb2ludEF0TGVuZ3RoKEUpLE89cC5nZXRQb2ludEF0TGVuZ3RoKEUtLjEpO2g9TWF0aC5hdGFuMihJLnktTy55LEkueC1PLngpLHU9cC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsRS1iKSksTCs9RS0oTD9fK2I6YikrInB4LCIrRSsicHgiLHQuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLEwpfWZ1bmN0aW9uIHooKXt0LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMHB4LDEwMHB4Iil9ZnVuY3Rpb24gRChlLGEsbyx1KXtlLnBhdGgmJihlLm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdChwLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmUucGF0aCx0cmFuc2Zvcm06YyhhLngsYS55KStsKDE4MCpvL01hdGguUEkpK3ModSl9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9eSYmRChtLG8sZix2KSx4JiZEKGQsdSxoLGcpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY29sb3IiOjM2MSwiLi9hcnJvd19wYXRocyI6MzQzLCJAcGxvdGx5L2QzIjo1OH1dLDM1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKSxpPXQoIi4vY2xpY2siKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImFubm90YXRpb25zIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6aS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmkub25DbGljayxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6NTYyLCIuL2F0dHJpYnV0ZXMiOjM0NCwiLi9jYWxjX2F1dG9yYW5nZSI6MzQ1LCIuL2NsaWNrIjozNDYsIi4vY29udmVydF9jb29yZHMiOjM0OCwiLi9kZWZhdWx0cyI6MzQ5LCIuL2RyYXciOjM1MH1dLDM1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPWkoYSgiYW5ub3RhdGlvbiIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6ImFueSJ9LHk6e3ZhbFR5cGU6ImFueSJ9LHo6e3ZhbFR5cGU6ImFueSJ9LGF4Ont2YWxUeXBlOiJudW1iZXIifSxheTp7dmFsVHlwZToibnVtYmVyIn0seGFuY2hvcjpuLnhhbmNob3IseHNoaWZ0Om4ueHNoaWZ0LHlhbmNob3I6bi55YW5jaG9yLHlzaGlmdDpuLnlzaGlmdCx0ZXh0Om4udGV4dCx0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsZm9udDpuLmZvbnQsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsb3BhY2l0eTpuLm9wYWNpdHksYWxpZ246bi5hbGlnbix2YWxpZ246bi52YWxpZ24sYmdjb2xvcjpuLmJnY29sb3IsYm9yZGVyY29sb3I6bi5ib3JkZXJjb2xvcixib3JkZXJwYWQ6bi5ib3JkZXJwYWQsYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aCxzaG93YXJyb3c6bi5zaG93YXJyb3csYXJyb3djb2xvcjpuLmFycm93Y29sb3IsYXJyb3doZWFkOm4uYXJyb3doZWFkLHN0YXJ0YXJyb3doZWFkOm4uc3RhcnRhcnJvd2hlYWQsYXJyb3dzaWRlOm4uYXJyb3dzaWRlLGFycm93c2l6ZTpuLmFycm93c2l6ZSxzdGFydGFycm93c2l6ZTpuLnN0YXJ0YXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsc3RhcnRzdGFuZG9mZjpuLnN0YXJ0c3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfSksImNhbGMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6MzQ0fV0sMzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGE9ZS5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZToibGluZWFyIixhdXRvcmFuZ2U6ITEscmFuZ2U6Wy0xLzAsMS8wXX07dC5feGE9e30sbi5leHRlbmRGbGF0KHQuX3hhLG8pLGkuc2V0Q29udmVydCh0Ll94YSksdC5feGEuX29mZnNldD1hLmwrci54WzBdKmEudyx0Ll94YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMSt0Ll9wZGF0YVswXS90Ll9wZGF0YVszXSkqYS53KihyLnhbMV0tci54WzBdKX0sdC5feWE9e30sbi5leHRlbmRGbGF0KHQuX3lhLG8pLGkuc2V0Q29udmVydCh0Ll95YSksdC5feWEuX29mZnNldD1hLnQrKDEtci55WzFdKSphLmgsdC5feWEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDEtdC5fcGRhdGFbMV0vdC5fcGRhdGFbM10pKmEuaCooci55WzFdLXIueVswXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKWEoZVtyXSx0KTt0LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrdC5pZCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5fV0sMzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1mdW5jdGlvbiBjKHQpe3ZhciBuPXQrImF4aXMiLGE9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gYS5fZnVsbExheW91dFtuXT1yW25dLGkuY29lcmNlUG9zaXRpb24oZSxhLGwsdCx0LC41KX1sKCJ2aXNpYmxlIikmJihvKHQsZSxhLmZ1bGxMYXlvdXQsbCksYygieCIpLGMoInkiKSxjKCJ6Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiLCJ6Il0pLGUueHJlZj0ieCIsZS55cmVmPSJ5IixlLnpyZWY9InoiLGwoInhhbmNob3IiKSxsKCJ5YW5jaG9yIiksbCgieHNoaWZ0IiksbCgieXNoaWZ0IiksZS5zaG93YXJyb3cmJihlLmF4cmVmPSJwaXhlbCIsZS5heXJlZj0icGl4ZWwiLGwoImF4IiwtMTApLGwoImF5IiwtMzApLG4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EodCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmwsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiOjM0NywiLi9hdHRyaWJ1dGVzIjozNTN9XSwzNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvZHJhdyIpLmRyYXdSYXcsaT10KCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiKSxhPVsieCIsInkiLCJ6Il07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dCxyPXQuZGF0YVNjYWxlLG89ZS5hbm5vdGF0aW9ucyxzPTA7czxvLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1vW3NdLGM9ITEsdT0wO3U8Mzt1Kyspe3ZhciBmPWFbdV0saD1sW2ZdLHA9ZVtmKyJheGlzIl0ucjJmcmFjdGlvbihoKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz90LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoIi5hbm5vdGF0aW9uLSIrdC5pZCsnW2RhdGEtaW5kZXg9IicrcysnIl0nKS5yZW1vdmUoKToobC5fcGRhdGE9aSh0LmdscGxvdC5jYW1lcmFQYXJhbXMsW2UueGF4aXMucjJsKGwueCkqclswXSxlLnlheGlzLnIybChsLnkpKnJbMV0sZS56YXhpcy5yMmwobC56KSpyWzJdXSksbih0LmdyYXBoRGl2LGwscyx0LmlkLGwuX3hhLGwuX3lhKSl9fX0seyIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiOjYwMiwiLi4vYW5ub3RhdGlvbnMvZHJhdyI6MzUwfV0sMzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOnQoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGE9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyh0KSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107YS50ZXN0KGwpJiYodFtsXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGkucHVzaFVuaXF1ZShlLl9iYXNlUGxvdE1vZHVsZXMsciksaS5wdXNoVW5pcXVlKGUuX3N1YnBsb3RzLmdsM2QsbCkpfX0sY29udmVydDp0KCIuL2NvbnZlcnQiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9hdHRyaWJ1dGVzIjozNTMsIi4vY29udmVydCI6MzU0LCIuL2RlZmF1bHRzIjozNTUsIi4vZHJhdyI6MzU2fV0sMzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSIpfSx7IndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIjozMjcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiOjMyOCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCI6MzI5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIjozMzAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciOjMzMSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiOjMzMiwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiI6MzMzLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iOjMzNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiOjMzNSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSI6MzM2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiI6MzM3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIjozMzgsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIjozMzksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiOjM0MCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiI6MzQxLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIjozNDJ9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxlbmRhcnMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5FUE9DSEpELHM9YS5PTkVEQVksbD17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmkuc29ydE9iamVjdEtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJncmVnb3JpYW4ifSxjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXt9O3JldHVybiBhW3JdPWwsaS5jb2VyY2UodCxlLGEscixuKX0sdT17ZDp7MDoiZGQiLCItIjoiZCJ9LGU6ezA6ImQiLCItIjoiZCJ9LGE6ezA6IkQiLCItIjoiRCJ9LEE6ezA6IkREIiwiLSI6IkREIn0sajp7MDoib28iLCItIjoibyJ9LFc6ezA6Ind3IiwiLSI6IncifSxtOnswOiJtbSIsIi0iOiJtIn0sYjp7MDoiTSIsIi0iOiJNIn0sQjp7MDoiTU0iLCItIjoiTU0ifSx5OnswOiJ5eSIsIi0iOiJ5eSJ9LFk6ezA6Inl5eXkiLCItIjoieXl5eSJ9LFU6IiMjIix3OiIjIyIsYzp7MDoiRCBNIGQgJVggeXl5eSIsIi0iOiJEIE0gZCAlWCB5eXl5In0seDp7MDoibW0vZGQveXl5eSIsIi0iOiJtbS9kZC95eXl5In19O3ZhciBmPXt9O2Z1bmN0aW9uIGgodCl7dmFyIGU9Zlt0XTtyZXR1cm4gZXx8KGU9Zlt0XT1uLmluc3RhbmNlKHQpKX1mdW5jdGlvbiBwKHQpe3JldHVybiBpLmV4dGVuZEZsYXQoe30sbCx7ZGVzY3JpcHRpb246dH0pfWZ1bmN0aW9uIGQodCl7cmV0dXJuIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2Ugd2l0aCBgIit0KyJgIGRhdGUgZGF0YS4ifXZhciBtPXt4Y2FsZW5kYXI6cChkKCJ4IikpfSxnPWkuZXh0ZW5kRmxhdCh7fSxtLHt5Y2FsZW5kYXI6cChkKCJ5IikpfSksdj1pLmV4dGVuZEZsYXQoe30sZyx7emNhbGVuZGFyOnAoZCgieiIpKX0pLHk9cChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGAiLCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yIiwiaW50ZXJwcmV0aW5nIGRhdGEgb24gdGhpcyBheGlzLCB0aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSB0cmFjZSIsIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgIl0uam9pbigiICIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY2FsZW5kYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpnLGJhcjpnLGJveDpnLGhlYXRtYXA6Zyxjb250b3VyOmcsaGlzdG9ncmFtOmcsaGlzdG9ncmFtMmQ6ZyxoaXN0b2dyYW0yZGNvbnRvdXI6ZyxzY2F0dGVyM2Q6dixzdXJmYWNlOnYsbWVzaDNkOnYsc2NhdHRlcmdsOmcsb2hsYzptLGNhbmRsZXN0aWNrOm19LGxheW91dDp7Y2FsZW5kYXI6cChbIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCIsImRpc3BsYXlpbmcgZGF0ZXMgdGhyb3VnaG91dCB0aGUgcGxvdC4iXS5qb2luKCIgIikpfSxzdWJwbG90czp7eGF4aXM6e2NhbGVuZGFyOnl9LHlheGlzOntjYWxlbmRhcjp5fSxzY2VuZTp7eGF4aXM6e2NhbGVuZGFyOnl9LHlheGlzOntjYWxlbmRhcjp5fSx6YXhpczp7Y2FsZW5kYXI6eX19LHBvbGFyOntyYWRpYWxheGlzOntjYWxlbmRhcjp5fX19LHRyYW5zZm9ybXM6e2ZpbHRlcjp7dmFsdWVjYWxlbmRhcjpwKFsiV0FSTklORzogQWxsIHRyYW5zZm9ybXMgYXJlIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIEFQSSBpbiBuZXh0IG1ham9yIHZlcnNpb24uIiwiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLiJdLmpvaW4oIiAiKSksdGFyZ2V0Y2FsZW5kYXI6cChbIldBUk5JTkc6IEFsbCB0cmFuc2Zvcm1zIGFyZSBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBUEkgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiIsIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhbiIsImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlIiwiY29ycmVzcG9uZGluZyB0cmFjZSBhdHRyaWJ1dGUgKGVnIGB4Y2FsZW5kYXJgKSBpZiBpdCBleGlzdHMsIiwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLiJdLmpvaW4oIiAiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmMsaGFuZGxlVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyljKHQsZSxyW2ldKyJjYWxlbmRhciIsbi5jYWxlbmRhcil9LENBTk9OSUNBTF9TVU5EQVk6e2NoaW5lc2U6IjIwMDAtMDEtMDIiLGNvcHRpYzoiMjAwMC0wMS0wMyIsZGlzY3dvcmxkOiIyMDAwLTAxLTAzIixldGhpb3BpYW46IjIwMDAtMDEtMDUiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMiIsanVsaWFuOiIyMDAwLTAxLTAzIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wNSIsbmVwYWxpOiIyMDAwLTAxLTA1IixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wNCIsdGhhaToiMjAwMC0wMS0wNCIsdW1tYWxxdXJhOiIxNDAwLTAxLTA2In0sQ0FOT05JQ0FMX1RJQ0s6e2NoaW5lc2U6IjIwMDAtMDEtMDEiLGNvcHRpYzoiMjAwMC0wMS0wMSIsZGlzY3dvcmxkOiIyMDAwLTAxLTAxIixldGhpb3BpYW46IjIwMDAtMDEtMDEiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMSIsanVsaWFuOiIyMDAwLTAxLTAxIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wMSIsbmVwYWxpOiIyMDAwLTAxLTAxIixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wMSIsdGhhaToiMjAwMC0wMS0wMSIsdW1tYWxxdXJhOiIxNDAwLTAxLTAxIn0sREZMVFJBTkdFOntjaGluZXNlOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxjb3B0aWM6WyIxNzAwLTAxLTAxIiwiMTcwMS0wMS0wMSJdLGRpc2N3b3JsZDpbIjE4MDAtMDEtMDEiLCIxODAxLTAxLTAxIl0sZXRoaW9waWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxoZWJyZXc6WyI1NzAwLTAxLTAxIiwiNTcwMS0wMS0wMSJdLGlzbGFtaWM6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGp1bGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sbWF5YW46WyI1MjAwLTAxLTAxIiwiNTIwMS0wMS0wMSJdLG5hbmFrc2hhaGk6WyIwNTAwLTAxLTAxIiwiMDUwMS0wMS0wMSJdLG5lcGFsaTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0scGVyc2lhbjpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0samFsYWxpOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSx0YWl3YW46WyIwMTAwLTAxLTAxIiwiMDEwMS0wMS0wMSJdLHRoYWk6WyIyNTAwLTAxLTAxIiwiMjUwMS0wMS0wMSJdLHVtbWFscXVyYTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl19LGdldENhbDpoLHdvcmxkQ2FsRm10OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhLGwsYyxmPU1hdGguZmxvb3IoKGUrLjA1KS9zKStvLHA9aChyKS5mcm9tSkQoZiksZD0wOy0xIT09KGQ9dC5pbmRleE9mKCIlIixkKSk7KSIwIj09PShuPXQuY2hhckF0KGQrMSkpfHwiLSI9PT1ufHwiXyI9PT1uPyhhPTMsaT10LmNoYXJBdChkKzIpLCJfIj09PW4mJihuPSItIikpOihpPW4sbj0iMCIsYT0yKSwobD11W2ldKT8oYz0iIyMiPT09bD8iIyMiOnAuZm9ybWF0RGF0ZShsW25dKSx0PXQuc3Vic3RyKDAsZCkrYyt0LnN1YnN0cihkK2EpLGQrPWMubGVuZ3RoKTpkKz1hO3JldHVybiB0fX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi9jYWxlbmRhcnMiOjM1OH1dLDM2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRzPVsiIzFmNzdiNCIsIiNmZjdmMGUiLCIjMmNhMDJjIiwiI2Q2MjcyOCIsIiM5NDY3YmQiLCIjOGM1NjRiIiwiI2UzNzdjMiIsIiM3ZjdmN2YiLCIjYmNiZDIyIiwiIzE3YmVjZiJdLHIuZGVmYXVsdExpbmU9IiM0NDQiLHIubGlnaHRMaW5lPSIjZWVlIixyLmJhY2tncm91bmQ9IiNmZmYiLHIuYm9yZGVyTGluZT0iI0JFQzhEOSIsci5saWdodEZyYWN0aW9uPTFlMy8xMX0se31dLDM2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliL2FycmF5IikuaXNUeXBlZEFycmF5LG89ZS5leHBvcnRzPXt9LHM9dCgiLi9hdHRyaWJ1dGVzIik7by5kZWZhdWx0cz1zLmRlZmF1bHRzO3ZhciBsPW8uZGVmYXVsdExpbmU9cy5kZWZhdWx0TGluZTtvLmxpZ2h0TGluZT1zLmxpZ2h0TGluZTt2YXIgYz1vLmJhY2tncm91bmQ9cy5iYWNrZ3JvdW5kO2Z1bmN0aW9uIHUodCl7aWYoaSh0KXx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQudHJpbSgpO2lmKCJyZ2IiIT09ZS5zdWJzdHIoMCwzKSlyZXR1cm4gdDt2YXIgcj1lLm1hdGNoKC9ecmdiYT9ccypcKChbXigpXSopXCkkLyk7aWYoIXIpcmV0dXJuIHQ7dmFyIG49clsxXS50cmltKCkuc3BsaXQoL1xzKltccyxdXHMqLyksYT0iYSI9PT1lLmNoYXJBdCgzKSYmND09PW4ubGVuZ3RoO2lmKCFhJiYzIT09bi5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe2lmKCFuW29dLmxlbmd0aClyZXR1cm4gdDtpZihuW29dPU51bWJlcihuW29dKSwhKG5bb10+PTApKXJldHVybiB0O2lmKDM9PT1vKW5bb10+MSYmKG5bb109MSk7ZWxzZSBpZihuW29dPj0xKXJldHVybiB0fXZhciBzPU1hdGgucm91bmQoMjU1Km5bMF0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsxXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzJdKTtyZXR1cm4gYT8icmdiYSgiK3MrIiwgIituWzNdKyIpIjoicmdiKCIrcysiKSJ9by50aW55UkdCPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZ2IoKTtyZXR1cm4icmdiKCIrTWF0aC5yb3VuZChlLnIpKyIsICIrTWF0aC5yb3VuZChlLmcpKyIsICIrTWF0aC5yb3VuZChlLmIpKyIpIn0sby5yZ2I9ZnVuY3Rpb24odCl7cmV0dXJuIG8udGlueVJHQihuKHQpKX0sby5vcGFjaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0P24odCkuZ2V0QWxwaGEoKTowfSxvLmFkZE9wYWNpdHk9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKHIucikrIiwgIitNYXRoLnJvdW5kKHIuZykrIiwgIitNYXRoLnJvdW5kKHIuYikrIiwgIitlKyIpIn0sby5jb21iaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO2lmKDE9PT1yLmEpcmV0dXJuIG4odCkudG9SZ2JTdHJpbmcoKTt2YXIgaT1uKGV8fGMpLnRvUmdiKCksYT0xPT09aS5hP2k6e3I6MjU1KigxLWkuYSkraS5yKmkuYSxnOjI1NSooMS1pLmEpK2kuZyppLmEsYjoyNTUqKDEtaS5hKStpLmIqaS5hfSxvPXtyOmEuciooMS1yLmEpK3IucipyLmEsZzphLmcqKDEtci5hKStyLmcqci5hLGI6YS5iKigxLXIuYSkrci5iKnIuYX07cmV0dXJuIG4obykudG9SZ2JTdHJpbmcoKX0sby5jb250cmFzdD1mdW5jdGlvbih0LGUscil7dmFyIGk9bih0KTtyZXR1cm4gMSE9PWkuZ2V0QWxwaGEoKSYmKGk9bihvLmNvbWJpbmUodCxjKSkpLChpLmlzRGFyaygpP2U/aS5saWdodGVuKGUpOmM6cj9pLmRhcmtlbihyKTpsKS50b1N0cmluZygpfSxvLnN0cm9rZT1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7c3Ryb2tlOm8udGlueVJHQihyKSwic3Ryb2tlLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxvLmZpbGw9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe2ZpbGw6by50aW55UkdCKHIpLCJmaWxsLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxvLmNsZWFuPWZ1bmN0aW9uKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGUscixuLGkscz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWlmKGk9dFtuPXNbZV1dLCJjb2xvciI9PT1uLnN1YnN0cihuLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGkpKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXT11KGlbcl0pO2Vsc2UgdFtuXT11KGkpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09bi5zdWJzdHIobi5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGkpKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShpW3JdKSYmKGlbcl1bMV09dShpW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbD1pWzBdO2lmKCFBcnJheS5pc0FycmF5KGwpJiZsJiYib2JqZWN0Ij09dHlwZW9mIGwpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylvLmNsZWFuKGlbcl0pfWVsc2UgaSYmIm9iamVjdCI9PXR5cGVvZiBpJiYhYShpKSYmby5jbGVhbihpKX19fSx7Ii4uLy4uL2xpYi9hcnJheSI6NDgwLCIuL2F0dHJpYnV0ZXMiOjM2MCwiZmFzdC1pc251bWVyaWMiOjE4NSx0aW55Y29sb3IyOjMwN31dLDM2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe29yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiJdLGRmbHQ6InYifSx0aGlja25lc3Ntb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6InBpeGVscyJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMwfSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjN9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSx4cGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTB9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXX0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsYWJlbG92ZXJmbG93OmEoe30sbi50aWNrbGFiZWxvdmVyZmxvdyx7fSksdGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGxlZnQiLCJpbnNpZGUgbGVmdCIsIm91dHNpZGUgcmlnaHQiLCJpbnNpZGUgcmlnaHQiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXSxkZmx0OiJvdXRzaWRlIn0sdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcix0aWNrbGFiZWxzdGVwOm4udGlja2xhYmVsc3RlcCxzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDpuLm1pbmV4cG9uZW50LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDppKHt9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdfX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6aSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0sImNvbG9yYmFycyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODB9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6ImNvbG9yYmFyIixjYmJnOiJjYmJnIixjYmZpbGw6ImNiZmlsbCIsY2JmaWxsczoiY2JmaWxscyIsY2JsaW5lOiJjYmxpbmUiLGNibGluZXM6ImNibGluZXMiLGNiYXhpczoiY2JheGlzIixjYnRpdGxldW5zaGlmdDoiY2J0aXRsZXVuc2hpZnQiLGNidGl0bGU6ImNidGl0bGUiLGNib3V0bGluZToiY2JvdXRsaW5lIixjcmlzcDoiY3Jpc3AiLGpzUGxhY2Vob2xkZXI6ImpzLXBsYWNlaG9sZGVyIn19fSx7fV0sMzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdT1pLm5ld0NvbnRhaW5lcihlLCJjb2xvcmJhciIpLGY9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBuLmNvZXJjZShmLHUsYyx0LGUpfXZhciBwPXIubWFyZ2lufHx7dDowLGI6MCxsOjAscjowfSxkPXIud2lkdGgtcC5sLXAucixtPXIuaGVpZ2h0LXAudC1wLmIsZz0idiI9PT1oKCJvcmllbnRhdGlvbiIpLHY9aCgidGhpY2tuZXNzbW9kZSIpO2goInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PXY/MzAvKGc/ZDptKTozMCk7dmFyIHk9aCgibGVubW9kZSIpO2goImxlbiIsImZyYWN0aW9uIj09PXk/MTpnP206ZCksaCgieCIsZz8xLjAyOi41KSxoKCJ4YW5jaG9yIixnPyJsZWZ0IjoiY2VudGVyIiksaCgieHBhZCIpLGgoInkiLGc/LjU6MS4wMiksaCgieWFuY2hvciIsZz8ibWlkZGxlIjoiYm90dG9tIiksaCgieXBhZCIpLG4ubm9uZU9yQWxsKGYsdSxbIngiLCJ5Il0pLGgoIm91dGxpbmVjb2xvciIpLGgoIm91dGxpbmV3aWR0aCIpLGgoImJvcmRlcmNvbG9yIiksaCgiYm9yZGVyd2lkdGgiKSxoKCJiZ2NvbG9yIik7dmFyIHg9bi5jb2VyY2UoZix1LHt0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoib3V0c2lkZSIsdmFsdWVzOmc/WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl06WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Il19fSwidGlja2xhYmVscG9zaXRpb24iKTtoKCJ0aWNrbGFiZWxvdmVyZmxvdyIsLTEhPT14LmluZGV4T2YoImluc2lkZSIpPyJoaWRlIHBhc3QgZG9tYWluIjoiaGlkZSBwYXN0IGRpdiIpLGEoZix1LGgsImxpbmVhciIpO3ZhciBiPXIuZm9udCxfPXtvdXRlclRpY2tzOiExLGZvbnQ6Yn07LTEhPT14LmluZGV4T2YoImluc2lkZSIpJiYoXy5iZ0NvbG9yPSJibGFjayIpLGwoZix1LGgsImxpbmVhciIsXykscyhmLHUsaCwibGluZWFyIixfKSxvKGYsdSxoLCJsaW5lYXIiLF8pLGgoInRpdGxlLnRleHQiLHIuX2RmbHRUaXRsZS5jb2xvcmJhcik7dmFyIHc9dS50aWNrZm9udCxUPW4uZXh0ZW5kRmxhdCh7fSx3LHtjb2xvcjpiLmNvbG9yLHNpemU6bi5iaWdGb250KHcuc2l6ZSl9KTtuLmNvZXJjZUZvbnQoaCwidGl0bGUuZm9udCIsVCksaCgidGl0bGUuc2lkZSIsZz8idG9wIjoicmlnaHQiKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiOjU2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NTc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NTc1LCIuL2F0dHJpYnV0ZXMiOjM2Mn1dLDM2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vbGliIiksdT1jLnN0clRyYW5zbGF0ZSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHA9dCgiLi4vZHJhd2luZyIpLGQ9dCgiLi4vY29sb3IiKSxtPXQoIi4uL3RpdGxlcyIpLGc9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdj10KCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiKS5mbGlwU2NhbGUseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLHg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIiksYj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx3PV8uTElORV9TUEFDSU5HLFQ9Xy5GUk9NX1RMLGs9Xy5GUk9NX0JSLEE9dCgiLi9jb25zdGFudHMiKS5jbjtlLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK0EuY29sb3JiYXIpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10Ll9mdWxsTGF5b3V0LG89dC5jYWxjZGF0YSxzPVtdO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGYodCx7X2ZpbGxjb2xvcjpudWxsLF9saW5lOntjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxfbGV2ZWxzOntzdGFydDpudWxsLGVuZDpudWxsLHNpemU6bnVsbH0sX2ZpbGxsZXZlbHM6bnVsbCxfZmlsbGdyYWRpZW50Om51bGwsX3pyYW5nZTpudWxsfSl9ZnVuY3Rpb24gYygpeyJmdW5jdGlvbiI9PXR5cGVvZiBpLmNhbGM/aS5jYWxjKHQsbixlKTooZS5fZmlsbGdyYWRpZW50PXIucmV2ZXJzZXNjYWxlP3Yoci5jb2xvcnNjYWxlKTpyLmNvbG9yc2NhbGUsZS5fenJhbmdlPVtyW2kubWluXSxyW2kubWF4XV0pfWZvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgaD1vW3VdLHA9KG49aFswXS50cmFjZSkuX21vZHVsZS5jb2xvcmJhcjtpZighMD09PW4udmlzaWJsZSYmcClmb3IodmFyIGQ9QXJyYXkuaXNBcnJheShwKSxtPWQ/cDpbcF0sZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT0oaT1tW2ddKS5jb250YWluZXI7KHI9eT9uW3ldOm4pJiZyLnNob3dzY2FsZSYmKChlPWwoci5jb2xvcmJhcikpLl9pZD0iY2IiK24udWlkKyhkJiZ5PyItIit5OiIiKSxlLl90cmFjZUluZGV4PW4uaW5kZXgsZS5fcHJvcFByZWZpeD0oeT95KyIuIjoiIikrImNvbG9yYmFyLiIsZS5fbWV0YT1uLl9tZXRhLGMoKSxzLnB1c2goZSkpfX1mb3IodmFyIHggaW4gYS5fY29sb3JBeGVzKWlmKChyPWFbeF0pLnNob3dzY2FsZSl7dmFyIGI9YS5fY29sb3JBeGVzW3hdOyhlPWwoci5jb2xvcmJhcikpLl9pZD0iY2IiK3gsZS5fcHJvcFByZWZpeD14KyIuY29sb3JiYXIuIixlLl9tZXRhPWEuX21ldGEsaT17bWluOiJjbWluIixtYXg6ImNtYXgifSwiaGVhdG1hcCIhPT1iWzBdJiYobj1iWzFdLGkuY2FsYz1uLl9tb2R1bGUuY29sb3JiYXIuY2FsYyksYygpLHMucHVzaChlKX1yZXR1cm4gc30odCksKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KSkuY2xhc3NlZChBLmNvbG9yYmFyLCEwKSxlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2MuZW5zdXJlU2luZ2xlKHIsInJlY3QiLEEuY2JiZyksYy5lbnN1cmVTaW5nbGUociwiZyIsQS5jYmZpbGxzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNibGluZXMpLGMuZW5zdXJlU2luZ2xlKHIsImciLEEuY2JheGlzLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoQS5jcmlzcCwhMCl9KSksYy5lbnN1cmVTaW5nbGUociwiZyIsQS5jYnRpdGxldW5zaGlmdCwoZnVuY3Rpb24odCl7dC5hcHBlbmQoImciKS5jbGFzc2VkKEEuY2J0aXRsZSwhMCl9KSksYy5lbnN1cmVTaW5nbGUociwicmVjdCIsQS5jYm91dGxpbmUpO3ZhciB2PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz0idiI9PT1lLm9yaWVudGF0aW9uLGw9ZS5sZW4saD1lLmxlbm1vZGUsdj1lLnRoaWNrbmVzcyxfPWUudGhpY2tuZXNzbW9kZSxNPWUub3V0bGluZXdpZHRoLFM9ZS5ib3JkZXJ3aWR0aCxFPWUuYmdjb2xvcixMPWUueGFuY2hvcixDPWUueWFuY2hvcixQPWUueHBhZCxJPWUueXBhZCxPPWUueCx6PW8/ZS55OjEtZS55LEQ9ci5fZnVsbExheW91dCxSPUQuX3NpemUsRj1lLl9maWxsY29sb3IsQj1lLl9saW5lLE49ZS50aXRsZSxqPU4uc2lkZSxVPWUuX3pyYW5nZXx8bi5leHRlbnQoKCJmdW5jdGlvbiI9PXR5cGVvZiBGP0Y6Qi5jb2xvcikuZG9tYWluKCkpLFY9ImZ1bmN0aW9uIj09dHlwZW9mIEIuY29sb3I/Qi5jb2xvcjpmdW5jdGlvbigpe3JldHVybiBCLmNvbG9yfSxIPSJmdW5jdGlvbiI9PXR5cGVvZiBGP0Y6ZnVuY3Rpb24oKXtyZXR1cm4gRn0scT1lLl9sZXZlbHMsRz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuX2xldmVscyxvPVtdLHM9W10sbD1hLmVuZCthLnNpemUvMTAwLGM9YS5zaXplLHU9MS4wMDEqclswXS0uMDAxKnJbMV0sZj0xLjAwMSpyWzFdLS4wMDEqclswXTtmb3IoaT0wO2k8MWU1JiYobj1hLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj51JiZuPGYmJm8ucHVzaChuKTtpZihlLl9maWxsZ3JhZGllbnQpcz1bMF07ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5fZmlsbGNvbG9yKXt2YXIgaD1lLl9maWxsbGV2ZWxzO2lmKGgpZm9yKGw9aC5lbmQraC5zaXplLzEwMCxjPWguc2l6ZSxpPTA7aTwxZTUmJihuPWguc3RhcnQraSpjLCEoYz4wP24+PWw6bjw9bCkpO2krKyluPnJbMF0mJm48clsxXSYmcy5wdXNoKG4pO2Vsc2Uocz1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQtYS5zaXplLzJ9KSkpLnB1c2goc1tzLmxlbmd0aC0xXSthLnNpemUpfWVsc2UgZS5fZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIGUuX2ZpbGxjb2xvciYmKHM9WzBdKTthLnNpemU8MCYmKG8ucmV2ZXJzZSgpLHMucmV2ZXJzZSgpKTtyZXR1cm57bGluZTpvLGZpbGw6c319KDAsZSxVKSxZPUcuZmlsbCxXPUcubGluZSxYPU1hdGgucm91bmQodiooImZyYWN0aW9uIj09PV8/bz9SLnc6Ui5oOjEpKSxaPVgvKG8/Ui53OlIuaCksSj1NYXRoLnJvdW5kKGwqKCJmcmFjdGlvbiI9PT1oP28/Ui5oOlIudzoxKSksSz1KLyhvP1IuaDpSLncpLFE9TWF0aC5yb3VuZChvP08qUi53K1A6eipSLmgrSSksJD17Y2VudGVyOi41LHJpZ2h0OjF9W0xdfHwwLHR0PXt0b3A6MSxtaWRkbGU6LjV9W0NdfHwwLGV0PW8/Ty0kKlo6ei10dCpaLHJ0PW8/ei10dCpLOk8tJCpLLG50PU1hdGgucm91bmQobz9SLmgqKDEtcnQpOlIudypydCk7ZS5fbGVuRnJhYz1LLGUuX3RoaWNrRnJhYz1aLGUuX3VGcmFjPWV0LGUuX3ZGcmFjPXJ0O3ZhciBpdD1lLl9heGlzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9InYiPT09ZS5vcmllbnRhdGlvbixhPXt0eXBlOiJsaW5lYXIiLHJhbmdlOnIsdGlja21vZGU6ZS50aWNrbW9kZSxudGlja3M6ZS5udGlja3MsdGljazA6ZS50aWNrMCxkdGljazplLmR0aWNrLHRpY2t2YWxzOmUudGlja3ZhbHMsdGlja3RleHQ6ZS50aWNrdGV4dCx0aWNrczplLnRpY2tzLHRpY2tsZW46ZS50aWNrbGVuLHRpY2t3aWR0aDplLnRpY2t3aWR0aCx0aWNrY29sb3I6ZS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ZS5zaG93dGlja2xhYmVscyx0aWNrbGFiZWxwb3NpdGlvbjplLnRpY2tsYWJlbHBvc2l0aW9uLHRpY2tsYWJlbG92ZXJmbG93OmUudGlja2xhYmVsb3ZlcmZsb3csdGlja2xhYmVsc3RlcDplLnRpY2tsYWJlbHN0ZXAsdGlja2ZvbnQ6ZS50aWNrZm9udCx0aWNrYW5nbGU6ZS50aWNrYW5nbGUsdGlja2Zvcm1hdDplLnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6ZS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDplLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmUuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OmUuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OmUuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDplLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ZS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmUudGlja3N1ZmZpeCx0aXRsZTplLnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIsc2lkZTppPyJyaWdodCI6ImJvdHRvbSIscG9zaXRpb246MX0sbz1pPyJ5IjoieCIscz17dHlwZToibGluZWFyIixfaWQ6bytlLl9pZH0sbD17bGV0dGVyOm8sZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsbm9UaWNrbGFiZWxtb2RlOiEwLGNhbGVuZGFyOm4uY2FsZW5kYXJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gYy5jb2VyY2UoYSxzLGIsdCxlKX1yZXR1cm4geShhLHMsdSxsLG4pLHgoYSxzLHUsbCksc30ocixlLFUpO2l0LnBvc2l0aW9uPVorKG8/TytQL1Iudzp6K0kvUi5oKTt2YXIgYXQ9LTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2Yoaik7byYmYXQmJihpdC50aXRsZS5zaWRlPWosaXQudGl0bGV4PU8rUC9SLncsaXQudGl0bGV5PXJ0KygidG9wIj09PU4uc2lkZT9LLUkvUi5oOkkvUi5oKSk7b3x8YXR8fChpdC50aXRsZS5zaWRlPWosaXQudGl0bGV5PXorSS9SLmgsaXQudGl0bGV4PXJ0K1AvUi53KTtpZihCLmNvbG9yJiYiYXV0byI9PT1lLnRpY2ttb2RlKXtpdC50aWNrbW9kZT0ibGluZWFyIixpdC50aWNrMD1xLnN0YXJ0O3ZhciBvdD1xLnNpemUsc3Q9Yy5jb25zdHJhaW4oSi81MCw0LDE1KSsxLGx0PShVWzFdLVVbMF0pLygoZS5udGlja3N8fHN0KSpvdCk7aWYobHQ+MSl7dmFyIGN0PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobHQpL01hdGguTE4xMCkpO290Kj1jdCpjLnJvdW5kVXAobHQvY3QsWzIsNSwxMF0pLChNYXRoLmFicyhxLnN0YXJ0KS9xLnNpemUrMWUtNiklMTwyZS02JiYoaXQudGljazA9MCl9aXQuZHRpY2s9b3R9aXQuZG9tYWluPW8/W3J0K0kvUi5oLHJ0K0stSS9SLmhdOltydCtQL1IudyxydCtLLVAvUi53XSxpdC5zZXRTY2FsZSgpLHQuYXR0cigidHJhbnNmb3JtIix1KE1hdGgucm91bmQoUi5sKSxNYXRoLnJvdW5kKFIudCkpKTt2YXIgdXQsZnQ9dC5zZWxlY3QoIi4iK0EuY2J0aXRsZXVuc2hpZnQpLmF0dHIoInRyYW5zZm9ybSIsdSgtTWF0aC5yb3VuZChSLmwpLC1NYXRoLnJvdW5kKFIudCkpKSxodD1pdC50aWNrbGFiZWxwb3NpdGlvbixwdD1pdC50aXRsZS5mb250LnNpemUsZHQ9dC5zZWxlY3QoIi4iK0EuY2JheGlzKSxtdD0wLGd0PTA7ZnVuY3Rpb24gdnQobixpKXt2YXIgYT17cHJvcENvbnRhaW5lcjppdCxwcm9wTmFtZTplLl9wcm9wUHJlZml4KyJ0aXRsZSIsdHJhY2VJbmRleDplLl90cmFjZUluZGV4LF9tZXRhOmUuX21ldGEscGxhY2Vob2xkZXI6RC5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnQuc2VsZWN0KCIuIitBLmNidGl0bGUpfSxvPSJoIj09PW4uY2hhckF0KDApP24uc3Vic3RyKDEpOiJoIituO3Quc2VsZWN0QWxsKCIuIitvKyIsLiIrbysiLW1hdGgtZ3JvdXAiKS5yZW1vdmUoKSxtLmRyYXcocixuLGYoYSxpfHx7fSkpfXJldHVybiBjLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgdCxlOyhvJiZhdHx8IW8mJiFhdCkmJigidG9wIj09PWomJih0PVArUi5sK1IudypPLGU9SStSLnQrUi5oKigxLXJ0LUspKzMrLjc1KnB0KSwiYm90dG9tIj09PWomJih0PVArUi5sK1IudypPLGU9SStSLnQrUi5oKigxLXJ0KS0zLS4yNSpwdCksInJpZ2h0Ij09PWomJihlPUkrUi50K1IuaCp6KzMrLjc1KnB0LHQ9UCtSLmwrUi53KnJ0KSx2dChpdC5faWQrInRpdGxlIix7YXR0cmlidXRlczp7eDp0LHk6ZSwidGV4dC1hbmNob3IiOm8/InN0YXJ0IjoibWlkZGxlIn19KSl9LGZ1bmN0aW9uKCl7aWYoIW8mJiFhdHx8byYmYXQpe3ZhciBhLGw9dC5zZWxlY3QoIi4iK0EuY2J0aXRsZSksZj1sLnNlbGVjdCgidGV4dCIpLGg9Wy1NLzIsTS8yXSxkPWwuc2VsZWN0KCIuaCIraXQuX2lkKyJ0aXRsZS1tYXRoLWdyb3VwIikubm9kZSgpLG09MTUuNjtpZihmLm5vZGUoKSYmKG09cGFyc2VJbnQoZi5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApKncpLGQ/KGE9cC5iQm94KGQpLGd0PWEud2lkdGgsKG10PWEuaGVpZ2h0KT5tJiYoaFsxXS09KG10LW0pLzIpKTpmLm5vZGUoKSYmIWYuY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpJiYoYT1wLmJCb3goZi5ub2RlKCkpLGd0PWEud2lkdGgsbXQ9YS5oZWlnaHQpLG8pe2lmKG10KXtpZihtdCs9NSwidG9wIj09PWopaXQuZG9tYWluWzFdLT1tdC9SLmgsaFsxXSo9LTE7ZWxzZXtpdC5kb21haW5bMF0rPW10L1IuaDt2YXIgdj1nLmxpbmVDb3VudChmKTtoWzFdKz0oMS12KSptfWwuYXR0cigidHJhbnNmb3JtIix1KGhbMF0saFsxXSkpLGl0LnNldFNjYWxlKCl9fWVsc2UgZ3QmJigicmlnaHQiPT09aiYmKGl0LmRvbWFpblswXSs9KGd0K3B0LzIpL1IudyksbC5hdHRyKCJ0cmFuc2Zvcm0iLHUoaFswXSxoWzFdKSksaXQuc2V0U2NhbGUoKSl9dC5zZWxlY3RBbGwoIi4iK0EuY2JmaWxscysiLC4iK0EuY2JsaW5lcykuYXR0cigidHJhbnNmb3JtIixvP3UoMCxNYXRoLnJvdW5kKFIuaCooMS1pdC5kb21haW5bMV0pKSk6dShNYXRoLnJvdW5kKFIudyppdC5kb21haW5bMF0pLDApKSxkdC5hdHRyKCJ0cmFuc2Zvcm0iLG8/dSgwLE1hdGgucm91bmQoLVIudCkpOnUoTWF0aC5yb3VuZCgtUi5sKSwwKSk7dmFyIHk9dC5zZWxlY3QoIi4iK0EuY2JmaWxscykuc2VsZWN0QWxsKCJyZWN0LiIrQS5jYmZpbGwpLmF0dHIoInN0eWxlIiwiIikuZGF0YShZKTt5LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChBLmNiZmlsbCwhMCkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKSx5LmV4aXQoKS5yZW1vdmUoKTt2YXIgeD1VLm1hcChpdC5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7eS5lYWNoKChmdW5jdGlvbih0LGEpe3ZhciBzPVswPT09YT9VWzBdOihZW2FdK1lbYS0xXSkvMixhPT09WS5sZW5ndGgtMT9VWzFdOihZW2FdK1lbYSsxXSkvMl0ubWFwKGl0LmMycCkubWFwKE1hdGgucm91bmQpO28mJihzWzFdPWMuY29uc3RyYWluKHNbMV0rKHNbMV0+c1swXSk/MTotMSx4WzBdLHhbMV0pKTt2YXIgbD1uLnNlbGVjdCh0aGlzKS5hdHRyKG8/IngiOiJ5IixRKS5hdHRyKG8/InkiOiJ4IixuLm1pbihzKSkuYXR0cihvPyJ3aWR0aCI6ImhlaWdodCIsTWF0aC5tYXgoWCwyKSkuYXR0cihvPyJoZWlnaHQiOiJ3aWR0aCIsTWF0aC5tYXgobi5tYXgocyktbi5taW4ocyksMikpO2lmKGUuX2ZpbGxncmFkaWVudClwLmdyYWRpZW50KGwscixlLl9pZCxvPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWxyZXZlcnNlZCIsZS5fZmlsbGdyYWRpZW50LCJmaWxsIik7ZWxzZXt2YXIgdT1IKHQpLnJlcGxhY2UoImUtIiwiIik7bC5hdHRyKCJmaWxsIixpKHUpLnRvSGV4U3RyaW5nKCkpfX0pKTt2YXIgYj10LnNlbGVjdCgiLiIrQS5jYmxpbmVzKS5zZWxlY3RBbGwoInBhdGguIitBLmNibGluZSkuZGF0YShCLmNvbG9yJiZCLndpZHRoP1c6W10pO2IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKEEuY2JsaW5lLCEwKSxiLmV4aXQoKS5yZW1vdmUoKSxiLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVEscj1NYXRoLnJvdW5kKGl0LmMycCh0KSkrQi53aWR0aC8yJTE7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iKyhvP2UrIiwiK3I6cisiLCIrZSkrKG8/ImgiOiJ2IikrWCkuY2FsbChwLmxpbmVHcm91cFN0eWxlLEIud2lkdGgsVih0KSxCLmRhc2gpfSkpLGR0LnNlbGVjdEFsbCgiZy4iK2l0Ll9pZCsidGljayxwYXRoIikucmVtb3ZlKCk7dmFyIF89UStYKyhNfHwwKS8yLSgib3V0c2lkZSI9PT1lLnRpY2tzPzE6MCksVD1zLmNhbGNUaWNrcyhpdCksaz1zLmdldFRpY2tTaWducyhpdClbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHIsaXQse3ZhbHM6Imluc2lkZSI9PT1pdC50aWNrcz9zLmNsaXBFbmRzKGl0LFQpOlQsbGF5ZXI6ZHQscGF0aDpzLm1ha2VUaWNrUGF0aChpdCxfLGspLHRyYW5zRm46cy5tYWtlVHJhbnNUaWNrRm4oaXQpfSkscy5kcmF3TGFiZWxzKHIsaXQse3ZhbHM6VCxsYXllcjpkdCx0cmFuc0ZuOnMubWFrZVRyYW5zVGlja0xhYmVsRm4oaXQpLGxhYmVsRm5zOnMubWFrZUxhYmVsRm5zKGl0LF8pfSl9LGZ1bmN0aW9uKCl7aWYobyYmIWF0fHwhbyYmYXQpe3ZhciB0LGksYT1pdC5wb3NpdGlvbnx8MCxzPWl0Ll9vZmZzZXQraXQuX2xlbmd0aC8yO2lmKCJyaWdodCI9PT1qKWk9cyx0PVIubCtSLncqYSsxMCtwdCooaXQuc2hvd3RpY2tsYWJlbHM/MTouNSk7ZWxzZSBpZih0PXMsImJvdHRvbSI9PT1qJiYoaT1SLnQrUi5oKmErMTArKC0xPT09aHQuaW5kZXhPZigiaW5zaWRlIik/aXQudGlja2ZvbnQuc2l6ZTowKSsoImludHNpZGUiIT09aXQudGlja3MmJmUudGlja2xlbnx8MCkpLCJ0b3AiPT09ail7dmFyIGw9Ti50ZXh0LnNwbGl0KCI8YnI+IikubGVuZ3RoO2k9Ui50K1IuaCphKzEwLVgtdypwdCpsfXZ0KChvPyJoIjoidiIpK2l0Ll9pZCsidGl0bGUiLHthdm9pZDp7c2VsZWN0aW9uOm4uc2VsZWN0KHIpLnNlbGVjdEFsbCgiZy4iK2l0Ll9pZCsidGljayIpLHNpZGU6aixvZmZzZXRUb3A6bz8wOlIudCxvZmZzZXRMZWZ0Om8/Ui5sOjAsbWF4U2hpZnQ6bz9ELndpZHRoOkQuaGVpZ2h0fSxhdHRyaWJ1dGVzOnt4OnQseTppLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOm8/LTkwOjAsb2Zmc2V0OjB9fSl9fSxhLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgbixzPVgrTS8yOy0xPT09aHQuaW5kZXhPZigiaW5zaWRlIikmJihuPXAuYkJveChkdC5ub2RlKCkpLHMrPW8/bi53aWR0aDpuLmhlaWdodCksdXQ9ZnQuc2VsZWN0KCJ0ZXh0Iik7dmFyIGM9MCxmPW8mJiJ0b3AiPT09aixtPSFvJiYicmlnaHQiPT09aixnPTA7aWYodXQubm9kZSgpJiYhdXQuY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpKXt2YXIgeSx4PWZ0LnNlbGVjdCgiLmgiK2l0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKTt4JiYobyYmYXR8fCFvJiYhYXQpPyhjPShuPXAuYkJveCh4KSkud2lkdGgseT1uLmhlaWdodCk6KGM9KG49cC5iQm94KGZ0Lm5vZGUoKSkpLnJpZ2h0LVIubC0obz9ROm50KSx5PW4uYm90dG9tLVIudC0obz9udDpRKSxvfHwidG9wIiE9PWp8fChzKz1uLmhlaWdodCxnPW4uaGVpZ2h0KSksbSYmKHV0LmF0dHIoInRyYW5zZm9ybSIsdShjLzIrcHQvMiwwKSksYyo9Mikscz1NYXRoLm1heChzLG8/Yzp5KX12YXIgYj0yKihvP1A6SSkrcytTK00vMix3PTA7IW8mJk4udGV4dCYmImJvdHRvbSI9PT1DJiZ6PD0wJiYoYis9dz1iLzIsZys9dyksRC5faENvbG9yYmFyTW92ZVRpdGxlPXcsRC5faENvbG9yYmFyTW92ZUNCVGl0bGU9Zzt2YXIgRj1TK007dC5zZWxlY3QoIi4iK0EuY2JiZykuYXR0cigieCIsKG8/UTpudCktRi8yLShvP1A6MCkpLmF0dHIoInkiLChvP250OlEpLShvP0o6SStnLXcpKS5hdHRyKG8/IndpZHRoIjoiaGVpZ2h0IixNYXRoLm1heChiLXcsMikpLmF0dHIobz8iaGVpZ2h0Ijoid2lkdGgiLE1hdGgubWF4KEorRiwyKSkuY2FsbChkLmZpbGwsRSkuY2FsbChkLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixTKTt2YXIgQj1tP01hdGgubWF4KGMtMTAsMCk6MDtpZih0LnNlbGVjdEFsbCgiLiIrQS5jYm91dGxpbmUpLmF0dHIoIngiLChvP1E6bnQrUCkrQikuYXR0cigieSIsKG8/bnQrSS1KOlEpKyhmP210OjApKS5hdHRyKG8/IndpZHRoIjoiaGVpZ2h0IixNYXRoLm1heChYLDIpKS5hdHRyKG8/ImhlaWdodCI6IndpZHRoIixNYXRoLm1heChKLShvPzIqSSttdDoyKlArQiksMikpLmNhbGwoZC5zdHJva2UsZS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJub25lIiwic3Ryb2tlLXdpZHRoIjpNfSksdC5hdHRyKCJ0cmFuc2Zvcm0iLHUoUi5sLShvPyQqYjowKSxSLnQtKG8/MDooMS10dCkqYi1nKSkpLCFvJiYoU3x8aShFKS5nZXRBbHBoYSgpJiYhaS5lcXVhbHMoRC5wYXBlcl9iZ2NvbG9yLEUpKSl7dmFyIFU9ZHQuc2VsZWN0QWxsKCJ0ZXh0IiksVj1VWzBdLmxlbmd0aCxIPXQuc2VsZWN0KCIuIitBLmNiYmcpLm5vZGUoKSxxPXAuYkJveChIKSxHPXAuZ2V0VHJhbnNsYXRlKHQpO1UuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj1WLTE7aWYoMD09PWV8fGU9PT1yKXt2YXIgbixpPXAuYkJveCh0aGlzKSxhPXAuZ2V0VHJhbnNsYXRlKHRoaXMpO2lmKGU9PT1yKXt2YXIgbz1pLnJpZ2h0K2EueDsobj1xLnJpZ2h0K0cueCtudC1TLTIrTy1vKT4wJiYobj0wKX1lbHNlIGlmKDA9PT1lKXt2YXIgcz1pLmxlZnQrYS54OyhuPXEubGVmdCtHLngrbnQrUysyLXMpPDAmJihuPTApfW4mJihWPDM/dGhpcy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rIiwwKSAiK3RoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSk6dGhpcy5zZXRBdHRyaWJ1dGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSl9fSkpfXZhciBZPXt9LFc9VFtMXSxaPWtbTF0sSz1UW0NdLGV0PWtbQ10scnQ9Yi1YO28/KCJwaXhlbHMiPT09aD8oWS55PXosWS50PUoqSyxZLmI9SipldCk6KFkudD1ZLmI9MCxZLnl0PXorbCpLLFkueWI9ei1sKmV0KSwicGl4ZWxzIj09PV8/KFkueD1PLFkubD1iKlcsWS5yPWIqWik6KFkubD1ydCpXLFkucj1ydCpaLFkueGw9Ty12KlcsWS54cj1PK3YqWikpOigicGl4ZWxzIj09PWg/KFkueD1PLFkubD1KKlcsWS5yPUoqWik6KFkubD1ZLnI9MCxZLnhsPU8rbCpXLFkueHI9Ty1sKlopLCJwaXhlbHMiPT09Xz8oWS55PTEteixZLnQ9YipLLFkuYj1iKmV0KTooWS50PXJ0KkssWS5iPXJ0KmV0LFkueXQ9ei12KkssWS55Yj16K3YqZXQpKSxhLmF1dG9NYXJnaW4ocixlLl9pZCxZKX1dLHIpfShyLGUsdCk7diYmdi50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKHYpLHQuX2NvbnRleHQuZWRpdHMuY29sb3JiYXJQb3NpdGlvbiYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxzPSJ2Ij09PWUub3JpZW50YXRpb24sYz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbit1KHIsbykpLGk9bC5hbGlnbigocz9lLl91RnJhYzplLl92RnJhYykrci9jLncscz9lLl90aGlja0ZyYWM6ZS5fbGVuRnJhYywwLDEsZS54YW5jaG9yKSxhPWwuYWxpZ24oKHM/ZS5fdkZyYWM6MS1lLl91RnJhYyktby9jLmgscz9lLl9sZW5GcmFjOmUuX3RoaWNrRnJhYywwLDEsZS55YW5jaG9yKTt2YXIgZj1sLmdldEN1cnNvcihpLGEsZS54YW5jaG9yLGUueWFuY2hvcik7aCh0LGYpfSxkb25lRm46ZnVuY3Rpb24oKXtpZihoKHQpLHZvaWQgMCE9PWkmJnZvaWQgMCE9PWEpe3ZhciBuPXt9O25bZS5fcHJvcFByZWZpeCsieCJdPWksbltlLl9wcm9wUHJlZml4KyJ5Il09YSx2b2lkIDAhPT1lLl90cmFjZUluZGV4P28uY2FsbCgiX2d1aVJlc3R5bGUiLHIsbixlLl90cmFjZUluZGV4KTpvLmNhbGwoIl9ndWlSZWxheW91dCIscixuKX19fSl9KHIsZSx0KX0pKSxlLmV4aXQoKS5lYWNoKChmdW5jdGlvbihlKXthLmF1dG9NYXJnaW4odCxlLl9pZCl9KSkucmVtb3ZlKCksZS5vcmRlcigpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MTksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NTUxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo1NjcsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2NvbG9yIjozNjEsIi4uL2NvbG9yc2NhbGUvaGVscGVycyI6MzcyLCIuLi9kcmFnZWxlbWVudCI6MzgwLCIuLi9kcmF3aW5nIjozODMsIi4uL3RpdGxlcyI6NDU5LCIuL2NvbnN0YW50cyI6MzYzLCJAcGxvdGx5L2QzIjo1OCx0aW55Y29sb3IyOjMwN31dLDM2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0LmNvbG9yYmFyKX19LHsiLi4vLi4vbGliIjo0OTh9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yYmFyIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLmRyYXcsaGFzQ29sb3JiYXI6dCgiLi9oYXNfY29sb3JiYXIiKX19LHsiLi9hdHRyaWJ1dGVzIjozNjIsIi4vZGVmYXVsdHMiOjM2NCwiLi9kcmF3IjozNjUsIi4vaGFzX2NvbG9yYmFyIjozNjZ9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29sb3JiYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksbz10KCIuL3NjYWxlcy5qcyIpLnNjYWxlczthKG8pO2Z1bmN0aW9uIHModCl7cmV0dXJuImAiK3QrImAifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8IiI7dmFyIHIsYT0oZT1lfHx7fSkuY0xldHRlcnx8ImMiLGw9KCJvbmx5SWZOdW1lcmljYWwiaW4gZT9lLm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKHQpLCJub1NjYWxlImluIGU/ZS5ub1NjYWxlOiJtYXJrZXIubGluZSI9PT10KSxjPSJzaG93U2NhbGVEZmx0ImluIGU/ZS5zaG93U2NhbGVEZmx0OiJ6Ij09PWEsdT0ic3RyaW5nIj09dHlwZW9mIGUuY29sb3JzY2FsZURmbHQ/b1tlLmNvbG9yc2NhbGVEZmx0XTpudWxsLGY9ZS5lZGl0VHlwZU92ZXJyaWRlfHwiIixoPXQ/dCsiLiI6IiI7ImNvbG9yQXR0ciJpbiBlPyhyPWUuY29sb3JBdHRyLGUuY29sb3JBdHRyKTpzKGgrKHI9e3o6InoiLGM6ImNvbG9yIn1bYV0pKTt2YXIgcD1hKyJhdXRvIixkPWErIm1pbiIsbT1hKyJtYXgiLGc9YSsibWlkIix2PShzKGgrcCkscyhoK2QpLHMoaCttKSx7fSk7dltkXT12W21dPXZvaWQgMDt2YXIgeT17fTt5W3BdPSExO3ZhciB4PXt9O3JldHVybiJjb2xvciI9PT1yJiYoeC5jb2xvcj17dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6Znx8InN0eWxlIn0sZS5hbmltJiYoeC5jb2xvci5hbmltPSEwKSkseFtwXT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHhbZF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmZ8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFttXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6Znx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W2ddPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHguY29sb3JzY2FsZT17dmFsVHlwZToiY29sb3JzY2FsZSIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6dSxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0seC5hdXRvY29sb3JzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSE9PWUuYXV0b0NvbG9yRGZsdCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LHgucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbHx8KHguc2hvd3NjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OmMsZWRpdFR5cGU6ImNhbGMifSx4LmNvbG9yYmFyPW4pLGUubm9Db2xvckF4aXN8fCh4LmNvbG9yYXhpcz17dmFsVHlwZToic3VicGxvdGlkIixyZWdleDppKCJjb2xvcmF4aXMiKSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSkseH19LHsiLi4vLi4vbGliL3JlZ2V4Ijo1MTUsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo1MjEsIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjM2MiwiLi9zY2FsZXMuanMiOjM3Nn1dLDM2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM9dC5fZnVsbExheW91dCxsPXIudmFscyxjPXIuY29udGFpbmVyU3RyLHU9Yz9pLm5lc3RlZFByb3BlcnR5KGUsYykuZ2V0KCk6ZSxmPWEodSksaD0hMSE9PWYuYXV0byxwPWYubWluLGQ9Zi5tYXgsbT1mLm1pZCxnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGwpfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIGkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGwpfTsodm9pZCAwPT09cD9wPWcoKTpoJiYocD11Ll9jb2xvckF4JiZuKHApP01hdGgubWluKHAsZygpKTpnKCkpLHZvaWQgMD09PWQ/ZD12KCk6aCYmKGQ9dS5fY29sb3JBeCYmbihkKT9NYXRoLm1heChkLHYoKSk6digpKSxoJiZ2b2lkIDAhPT1tJiYoZC1tPm0tcD9wPW0tKGQtbSk6ZC1tPG0tcCYmKGQ9bSsobS1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGYuX3N5bmMoIm1pbiIscCksZi5fc3luYygibWF4IixkKSxmLmF1dG9jb2xvcnNjYWxlKSYmKG89cCpkPDA/cy5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP3MuY29sb3JzY2FsZS5zZXF1ZW50aWFsOnMuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsZi5fc3luYygiY29sb3JzY2FsZSIsbykpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9oZWxwZXJzIjozNzIsImZhc3QtaXNudW1lcmljIjoxODV9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi9oZWxwZXJzIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPXRbIl8iK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsaS5jb250YWluZXIpLmdldCgpOnQ7aWYobylpZihvLmNvbG9yYXhpcylvLl9jb2xvckF4PWVbby5jb2xvcmF4aXNdO2Vsc2V7dmFyIHM9YShvKSxsPXMuYXV0bzsobHx8dm9pZCAwPT09cy5taW4pJiZyKG8saS5taW4pLChsfHx2b2lkIDA9PT1zLm1heCkmJnIobyxpLm1heCkscy5hdXRvY29sb3JzY2FsZSYmcihvLCJjb2xvcnNjYWxlIil9fWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9bC5fbW9kdWxlLmNvbG9yYmFyO2lmKGMpaWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKylvKGwsY1t1XSk7ZWxzZSBvKGwsYyk7aShsLCJtYXJrZXIubGluZSIpJiZvKGwse2NvbnRhaW5lcjoibWFya2VyLmxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0pfWZvcih2YXIgZiBpbiBlLl9jb2xvckF4ZXMpbyhlW2ZdLHttaW46ImNtaW4iLG1heDoiY21heCJ9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4vaGVscGVycyI6MzcyfV0sMzcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciIpLG89dCgiLi4vY29sb3JiYXIvZGVmYXVsdHMiKSxzPXQoIi4vc2NhbGVzIikuaXNWYWxpZCxsPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcztmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiBlP2kubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKXx8e306dH1lLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsdSxmLGgpe3ZhciBwPWgucHJlZml4LGQ9aC5jTGV0dGVyLG09Il9tb2R1bGUiaW4gcixnPWMoZSxwKSx2PWMocixwKSx5PWMoci5fdGVtcGxhdGV8fHt9LHApfHx7fSx4PWZ1bmN0aW9uKCl7cmV0dXJuIGRlbGV0ZSBlLmNvbG9yYXhpcyxkZWxldGUgci5jb2xvcmF4aXMsdChlLHIsdSxmLGgpfTtpZihtKXt2YXIgYj11Ll9jb2xvckF4ZXN8fHt9LF89ZihwKyJjb2xvcmF4aXMiKTtpZihfKXt2YXIgdz1sKHIsImNvbnRvdXIiKSYmaS5uZXN0ZWRQcm9wZXJ0eShyLCJjb250b3Vycy5jb2xvcmluZyIpLmdldCgpfHwiaGVhdG1hcCIsVD1iW19dO3JldHVybiB2b2lkKFQ/KFRbMl0ucHVzaCh4KSxUWzBdIT09dyYmKFRbMF09ITEsaS53YXJuKFsiSWdub3JpbmcgY29sb3JheGlzOiIsXywic2V0dGluZyIsImFzIGl0IGlzIGxpbmtlZCB0byBpbmNvbXBhdGlibGUgY29sb3JzY2FsZXMuIl0uam9pbigiICIpKSkpOmJbX109W3cscixbeF1dKX19dmFyIGs9Z1tkKyJtaW4iXSxBPWdbZCsibWF4Il0sTT1uKGspJiZuKEEpJiZrPEE7ZihwK2QrImF1dG8iLCFNKT9mKHArZCsibWlkIik6KGYocCtkKyJtaW4iKSxmKHArZCsibWF4IikpO3ZhciBTLEUsTD1nLmNvbG9yc2NhbGUsQz15LmNvbG9yc2NhbGU7KHZvaWQgMCE9PUwmJihTPSFzKEwpKSx2b2lkIDAhPT1DJiYoUz0hcyhDKSksZihwKyJhdXRvY29sb3JzY2FsZSIsUyksZihwKyJjb2xvcnNjYWxlIiksZihwKyJyZXZlcnNlc2NhbGUiKSwibWFya2VyLmxpbmUuIiE9PXApJiYocCYmbSYmKEU9YShnKSksZihwKyJzaG93c2NhbGUiLEUpJiYocCYmeSYmKHYuX3RlbXBsYXRlPXkpLG8oZyx2LHUpKSl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jb2xvcmJhci9kZWZhdWx0cyI6MzY0LCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiOjM2NiwiLi9zY2FsZXMiOjM3NiwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDM3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi9jb2xvciIpLGw9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkO3ZhciBjPVsic2hvd3NjYWxlIiwiYXV0b2NvbG9yc2NhbGUiLCJjb2xvcnNjYWxlIiwicmV2ZXJzZXNjYWxlIiwiY29sb3JiYXIiXSx1PVsibWluIiwibWF4IiwibWlkIiwiYXV0byJdO2Z1bmN0aW9uIGYodCl7dmFyIGUscixuLGk9dC5fY29sb3JBeCxhPWl8fHQsbz17fTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKW9bbj1jW3JdXT1hW25dO2lmKGkpZm9yKGU9ImMiLHI9MDtyPHUubGVuZ3RoO3IrKylvW249dVtyXV09YVsiYyIrbl07ZWxzZXt2YXIgcztmb3Iocj0wO3I8dS5sZW5ndGg7cisrKSgocz0iYyIrKG49dVtyXSkpaW4gYXx8KHM9InoiK24paW4gYSkmJihvW25dPWFbc10pO2U9cy5jaGFyQXQoMCl9cmV0dXJuIG8uX3N5bmM9ZnVuY3Rpb24odCxyKXt2YXIgbj0tMSE9PXUuaW5kZXhPZih0KT9lK3Q6dDthW25dPWFbIl8iK25dPXJ9LG99ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9Zih0KSxyPWUubWluLG49ZS5tYXgsaT1lLnJldmVyc2VzY2FsZT9wKGUuY29sb3JzY2FsZSk6ZS5jb2xvcnNjYWxlLGE9aS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD0wO2w8YTtsKyspe3ZhciBjPWlbbF07b1tsXT1yK2NbMF0qKG4tciksc1tsXT1jWzFdfXJldHVybntkb21haW46byxyYW5nZTpzfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPWUtMSxpPTA7bj49MDtuLS0saSsrKXt2YXIgYT10W25dO3JbaV09WzEtYVswXSxhWzFdXX1yZXR1cm4gcn1mdW5jdGlvbiBkKHQsZSl7ZT1lfHx7fTtmb3IodmFyIHI9dC5kb21haW4sbz10LnJhbmdlLGw9by5sZW5ndGgsYz1uZXcgQXJyYXkobCksdT0wO3U8bDt1Kyspe3ZhciBmPWkob1t1XSkudG9SZ2IoKTtjW3VdPVtmLnIsZi5nLGYuYixmLmFdfXZhciBoLHA9bi5zY2FsZS5saW5lYXIoKS5kb21haW4ocikucmFuZ2UoYykuY2xhbXAoITApLGQ9ZS5ub051bWVyaWNDaGVjayxnPWUucmV0dXJuQXJyYXk7cmV0dXJuKGg9ZCYmZz9wOmQ/ZnVuY3Rpb24odCl7cmV0dXJuIG0ocCh0KSl9Omc/ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cCh0KTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9OmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP20ocCh0KSk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfSkuZG9tYWluPXAuZG9tYWluLGgucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gb30saH1mdW5jdGlvbiBtKHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBpKGUpLnRvUmdiU3RyaW5nKCl9ZS5leHBvcnRzPXtoYXNDb2xvcnNjYWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lP28ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8e306dCxpPW5bcnx8ImNvbG9yIl0scz0hMTtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkpZm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspaWYoYShpW2NdKSl7cz0hMDticmVha31yZXR1cm4gby5pc1BsYWluT2JqZWN0KG4pJiYoc3x8ITA9PT1uLnNob3dzY2FsZXx8YShuLmNtaW4pJiZhKG4uY21heCl8fGwobi5jb2xvcnNjYWxlKXx8by5pc1BsYWluT2JqZWN0KG4uY29sb3JiYXIpKX0sZXh0cmFjdE9wdHM6ZixleHRyYWN0U2NhbGU6aCxmbGlwU2NhbGU6cCxtYWtlQ29sb3JTY2FsZUZ1bmM6ZCxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZChoKHQpLGUpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2NvbG9yIjozNjEsIi4vc2NhbGVzIjozNzYsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTg1LHRpbnljb2xvcjI6MzA3fV0sMzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JzY2FsZSIsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGV4dHJhY3RPcHRzOmkuZXh0cmFjdE9wdHMsZXh0cmFjdFNjYWxlOmkuZXh0cmFjdFNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxtYWtlQ29sb3JTY2FsZUZ1bmM6aS5tYWtlQ29sb3JTY2FsZUZ1bmMsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmkubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlfX0seyIuL2F0dHJpYnV0ZXMiOjM2OCwiLi9jYWxjIjozNjksIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjM3MCwiLi9kZWZhdWx0cyI6MzcxLCIuL2hlbHBlcnMiOjM3MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mzc0LCIuL2xheW91dF9kZWZhdWx0cyI6Mzc1LCIuL3NjYWxlcyI6Mzc2fV0sMzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL3NjYWxlcyIpLnNjYWxlcztlLmV4cG9ydHM9e2VkaXRUeXBlOiJjYWxjIixjb2xvcnNjYWxlOntlZGl0VHlwZToiY2FsYyIsc2VxdWVudGlhbDp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLlJlZHMsZWRpdFR5cGU6ImNhbGMifSxzZXF1ZW50aWFsbWludXM6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5CbHVlcyxlZGl0VHlwZToiY2FsYyJ9LGRpdmVyZ2luZzp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLlJkQnUsZWRpdFR5cGU6ImNhbGMifX0sY29sb3JheGlzOm4oe19pc1N1YnBsb3RPYmo6ITAsZWRpdFR5cGU6ImNhbGMifSxpKCIiLHtjb2xvckF0dHI6ImNvcnJlc3BvbmRpbmcgdHJhY2UgY29sb3IgYXJyYXkocykiLG5vQ29sb3JBeGlzOiEwLHNob3dTY2FsZURmbHQ6ITB9KSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi9hdHRyaWJ1dGVzIjozNjgsIi4vc2NhbGVzIjozNzZ9XSwzNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXIoImNvbG9yc2NhbGUuc2VxdWVudGlhbCIpLHIoImNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzIikscigiY29sb3JzY2FsZS5kaXZlcmdpbmciKTt2YXIgcyxsLGM9ZS5fY29sb3JBeGVzO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLGEuY29sb3JheGlzLHQsZSl9Zm9yKHZhciBmIGluIGMpe3ZhciBoPWNbZl07aWYoaFswXSlzPXRbZl18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsZiwiY29sb3JheGlzIikpLl9uYW1lPWYsbyhzLGwsZSx1LHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KTtlbHNle2Zvcih2YXIgcD0wO3A8aFsyXS5sZW5ndGg7cCsrKWhbMl1bcF0oKTtkZWxldGUgZS5fY29sb3JBeGVzW2ZdfX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4vZGVmYXVsdHMiOjM3MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Mzc0fV0sMzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKSxpPXtHcmV5czpbWzAsInJnYigwLDAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxZbEduQnU6W1swLCJyZ2IoOCwyOSw4OCkiXSxbLjEyNSwicmdiKDM3LDUyLDE0OCkiXSxbLjI1LCJyZ2IoMzQsOTQsMTY4KSJdLFsuMzc1LCJyZ2IoMjksMTQ1LDE5MikiXSxbLjUsInJnYig2NSwxODIsMTk2KSJdLFsuNjI1LCJyZ2IoMTI3LDIwNSwxODcpIl0sWy43NSwicmdiKDE5OSwyMzMsMTgwKSJdLFsuODc1LCJyZ2IoMjM3LDI0OCwyMTcpIl0sWzEsInJnYigyNTUsMjU1LDIxNykiXV0sR3JlZW5zOltbMCwicmdiKDAsNjgsMjcpIl0sWy4xMjUsInJnYigwLDEwOSw0NCkiXSxbLjI1LCJyZ2IoMzUsMTM5LDY5KSJdLFsuMzc1LCJyZ2IoNjUsMTcxLDkzKSJdLFsuNSwicmdiKDExNiwxOTYsMTE4KSJdLFsuNjI1LCJyZ2IoMTYxLDIxNywxNTUpIl0sWy43NSwicmdiKDE5OSwyMzMsMTkyKSJdLFsuODc1LCJyZ2IoMjI5LDI0NSwyMjQpIl0sWzEsInJnYigyNDcsMjUyLDI0NSkiXV0sWWxPclJkOltbMCwicmdiKDEyOCwwLDM4KSJdLFsuMTI1LCJyZ2IoMTg5LDAsMzgpIl0sWy4yNSwicmdiKDIyNywyNiwyOCkiXSxbLjM3NSwicmdiKDI1Miw3OCw0MikiXSxbLjUsInJnYigyNTMsMTQxLDYwKSJdLFsuNjI1LCJyZ2IoMjU0LDE3OCw3NikiXSxbLjc1LCJyZ2IoMjU0LDIxNywxMTgpIl0sWy44NzUsInJnYigyNTUsMjM3LDE2MCkiXSxbMSwicmdiKDI1NSwyNTUsMjA0KSJdXSxCbHVlcmVkOltbMCwicmdiKDAsMCwyNTUpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSZEJ1OltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYigxMDYsMTM3LDI0NykiXSxbLjUsInJnYigxOTAsMTkwLDE5MCkiXSxbLjYsInJnYigyMjAsMTcwLDEzMikiXSxbLjcsInJnYigyMzAsMTQ1LDkwKSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxSZWRzOltbMCwicmdiKDIyMCwyMjAsMjIwKSJdLFsuMiwicmdiKDI0NSwxOTUsMTU3KSJdLFsuNCwicmdiKDI0NSwxNjAsMTA1KSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxCbHVlczpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoNDAsNjAsMTkwKSJdLFsuNSwicmdiKDcwLDEwMCwyNDUpIl0sWy42LCJyZ2IoOTAsMTIwLDI0NSkiXSxbLjcsInJnYigxMDYsMTM3LDI0NykiXSxbMSwicmdiKDIyMCwyMjAsMjIwKSJdXSxQaWNuaWM6W1swLCJyZ2IoMCwwLDI1NSkiXSxbLjEsInJnYig1MSwxNTMsMjU1KSJdLFsuMiwicmdiKDEwMiwyMDQsMjU1KSJdLFsuMywicmdiKDE1MywyMDQsMjU1KSJdLFsuNCwicmdiKDIwNCwyMDQsMjU1KSJdLFsuNSwicmdiKDI1NSwyNTUsMjU1KSJdLFsuNiwicmdiKDI1NSwyMDQsMjU1KSJdLFsuNywicmdiKDI1NSwxNTMsMjU1KSJdLFsuOCwicmdiKDI1NSwxMDIsMjA0KSJdLFsuOSwicmdiKDI1NSwxMDIsMTAyKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmFpbmJvdzpbWzAsInJnYigxNTAsMCw5MCkiXSxbLjEyNSwicmdiKDAsMCwyMDApIl0sWy4yNSwicmdiKDAsMjUsMjU1KSJdLFsuMzc1LCJyZ2IoMCwxNTIsMjU1KSJdLFsuNSwicmdiKDQ0LDI1NSwxNTApIl0sWy42MjUsInJnYigxNTEsMjU1LDApIl0sWy43NSwicmdiKDI1NSwyMzQsMCkiXSxbLjg3NSwicmdiKDI1NSwxMTEsMCkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFBvcnRsYW5kOltbMCwicmdiKDEyLDUxLDEzMSkiXSxbLjI1LCJyZ2IoMTAsMTM2LDE4NikiXSxbLjUsInJnYigyNDIsMjExLDU2KSJdLFsuNzUsInJnYigyNDIsMTQzLDU2KSJdLFsxLCJyZ2IoMjE3LDMwLDMwKSJdXSxKZXQ6W1swLCJyZ2IoMCwwLDEzMSkiXSxbLjEyNSwicmdiKDAsNjAsMTcwKSJdLFsuMzc1LCJyZ2IoNSwyNTUsMjU1KSJdLFsuNjI1LCJyZ2IoMjU1LDI1NSwwKSJdLFsuODc1LCJyZ2IoMjUwLDAsMCkiXSxbMSwicmdiKDEyOCwwLDApIl1dLEhvdDpbWzAsInJnYigwLDAsMCkiXSxbLjMsInJnYigyMzAsMCwwKSJdLFsuNiwicmdiKDI1NSwyMTAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxCbGFja2JvZHk6W1swLCJyZ2IoMCwwLDApIl0sWy4yLCJyZ2IoMjMwLDAsMCkiXSxbLjQsInJnYigyMzAsMjEwLDApIl0sWy43LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWzEsInJnYigxNjAsMjAwLDI1NSkiXV0sRWFydGg6W1swLCJyZ2IoMCwwLDEzMCkiXSxbLjEsInJnYigwLDE4MCwxODApIl0sWy4yLCJyZ2IoNDAsMjEwLDQwKSJdLFsuNCwicmdiKDIzMCwyMzAsNTApIl0sWy42LCJyZ2IoMTIwLDcwLDIwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEVsZWN0cmljOltbMCwicmdiKDAsMCwwKSJdLFsuMTUsInJnYigzMCwwLDEwMCkiXSxbLjQsInJnYigxMjAsMCwxMDApIl0sWy42LCJyZ2IoMTYwLDkwLDApIl0sWy44LCJyZ2IoMjMwLDIwMCwwKSJdLFsxLCJyZ2IoMjU1LDI1MCwyMjApIl1dLFZpcmlkaXM6W1swLCIjNDQwMTU0Il0sWy4wNjI3NDUwOTgwMzkyMTU2OSwiIzQ4MTg2YSJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsIiM0NzJkN2IiXSxbLjE4ODIzNTI5NDExNzY0NzA2LCIjNDI0MDg2Il0sWy4yNTA5ODAzOTIxNTY4NjI3NCwiIzNiNTI4YiJdLFsuMzEzNzI1NDkwMTk2MDc4NCwiIzMzNjM4ZCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSwiIzJjNzI4ZSJdLFsuNDM5MjE1Njg2Mjc0NTA5OCwiIzI2ODI4ZSJdLFsuNTAxOTYwNzg0MzEzNzI1NSwiIzIxOTE4YyJdLFsuNTY0NzA1ODgyMzUyOTQxMiwiIzFmYTA4OCJdLFsuNjI3NDUwOTgwMzkyMTU2OSwiIzI4YWU4MCJdLFsuNjkwMTk2MDc4NDMxMzcyNSwiIzNmYmM3MyJdLFsuNzUyOTQxMTc2NDcwNTg4MiwiIzVlYzk2MiJdLFsuODE1Njg2Mjc0NTA5ODAzOSwiIzg0ZDQ0YiJdLFsuODc4NDMxMzcyNTQ5MDE5NiwiI2FkZGMzMCJdLFsuOTQxMTc2NDcwNTg4MjM1MywiI2Q4ZTIxOSJdLFsxLCIjZmRlNzI1Il1dLENpdmlkaXM6W1swLCJyZ2IoMCwzMiw3NikiXSxbLjA1ODgyNCwicmdiKDAsNDIsMTAyKSJdLFsuMTE3NjQ3LCJyZ2IoMCw1MiwxMTApIl0sWy4xNzY0NzEsInJnYigzOSw2MywxMDgpIl0sWy4yMzUyOTQsInJnYig2MCw3NCwxMDcpIl0sWy4yOTQxMTgsInJnYig3Niw4NSwxMDcpIl0sWy4zNTI5NDEsInJnYig5MSw5NSwxMDkpIl0sWy40MTE3NjUsInJnYigxMDQsMTA2LDExMikiXSxbLjQ3MDU4OCwicmdiKDExNywxMTcsMTE3KSJdLFsuNTI5NDEyLCJyZ2IoMTMxLDEyOSwxMjApIl0sWy41ODgyMzUsInJnYigxNDYsMTQwLDEyMCkiXSxbLjY0NzA1OSwicmdiKDE2MSwxNTIsMTE4KSJdLFsuNzA1ODgyLCJyZ2IoMTc2LDE2NSwxMTQpIl0sWy43NjQ3MDYsInJnYigxOTIsMTc3LDEwOSkiXSxbLjgyMzUyOSwicmdiKDIwOSwxOTEsMTAyKSJdLFsuODgyMzUzLCJyZ2IoMjI1LDIwNCw5MikiXSxbLjk0MTE3NiwicmdiKDI0MywyMTksNzkpIl0sWzEsInJnYigyNTUsMjMzLDY5KSJdXX0sYT1pLlJkQnU7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH1lLmV4cG9ydHM9e3NjYWxlczppLGRlZmF1bHRTY2FsZTphLGdldDpmdW5jdGlvbih0LGUpe2lmKGV8fChlPWEpLCF0KXJldHVybiBlO2Z1bmN0aW9uIHIoKXt0cnl7dD1pW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYocigpLCJzdHJpbmciPT10eXBlb2YgdCYmcigpKSxvKHQpP3Q6ZX0saXNWYWxpZDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09aVt0XXx8byh0KX19fSx7dGlueWNvbG9yMjozMDd9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9KHQtcikvKG4tciksbz1hK2UvKG4tcikscz0oYStvKS8yO3JldHVybiJsZWZ0Ij09PWl8fCJib3R0b20iPT09aT9hOiJjZW50ZXIiPT09aXx8Im1pZGRsZSI9PT1pP3M6InJpZ2h0Ij09PWl8fCJ0b3AiPT09aT9vOmE8Mi8zLXM/YTpvPjQvMy1zP286c319LHt9XSwzNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWyJzdy1yZXNpemUiLCJzLXJlc2l6ZSIsInNlLXJlc2l6ZSJdLFsidy1yZXNpemUiLCJtb3ZlIiwiZS1yZXNpemUiXSxbIm53LXJlc2l6ZSIsIm4tcmVzaXplIiwibmUtcmVzaXplIl1dO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gdD0ibGVmdCI9PT1yPzA6ImNlbnRlciI9PT1yPzE6InJpZ2h0Ij09PXI/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqdCksMCwyKSxlPSJib3R0b20iPT09YT8wOiJtaWRkbGUiPT09YT8xOiJ0b3AiPT09YT8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyplKSwwLDIpLGlbZV1bdF19fSx7Ii4uLy4uL2xpYiI6NDk4fV0sMzc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3Iuc2VsZWN0TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ibGFzc28iPT09dHx8InNlbGVjdCI9PT10fSxyLmRyYXdNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJkcmF3Y2xvc2VkcGF0aCI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR8fCJkcmF3bGluZSI9PT10fHwiZHJhd3JlY3QiPT09dHx8ImRyYXdjaXJjbGUiPT09dH0sci5vcGVuTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4iZHJhd2xpbmUiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fSxyLnJlY3RNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJzZWxlY3QiPT09dHx8ImRyYXdsaW5lIj09PXR8fCJkcmF3cmVjdCI9PT10fHwiZHJhd2NpcmNsZSI9PT10fSxyLmZyZWVNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJsYXNzbyI9PT10fHwiZHJhd2Nsb3NlZHBhdGgiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fSxyLnNlbGVjdGluZ09yRHJhd2luZz1mdW5jdGlvbih0KXtyZXR1cm4gci5mcmVlTW9kZSh0KXx8ci5yZWN0TW9kZSh0KX19LHt9XSwzODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksaT10KCJoYXMtaG92ZXIiKSxhPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vbGliIikucmVtb3ZlRWxlbWVudCxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPWUuZXhwb3J0cz17fTtsLmFsaWduPXQoIi4vYWxpZ24iKSxsLmdldEN1cnNvcj10KCIuL2N1cnNvciIpO3ZhciBjPXQoIi4vdW5ob3ZlciIpO2Z1bmN0aW9uIHUoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0iZHJhZ2NvdmVyIjt2YXIgZT10LnN0eWxlO3JldHVybiBlLnBvc2l0aW9uPSJmaXhlZCIsZS5sZWZ0PTAsZS5yaWdodD0wLGUudG9wPTAsZS5ib3R0b209MCxlLnpJbmRleD05OTk5OTk5OTksZS5iYWNrZ3JvdW5kPSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCxkb2N1bWVudC5ib2R5KX1sLnVuaG92ZXI9Yy53cmFwcGVkLGwudW5ob3ZlclJhdz1jLnJhdyxsLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGMsaCxwLGQsbSxnPXQuZ2Qsdj0xLHk9Zy5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LHg9dC5lbGVtZW50O2cuX21vdXNlRG93blRpbWV8fChnLl9tb3VzZURvd25UaW1lPTApLHguc3R5bGUucG9pbnRlckV2ZW50cz0iYWxsIix4Lm9ubW91c2Vkb3duPV8sYT8oeC5fb250b3VjaHN0YXJ0JiZ4LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHguX29udG91Y2hzdGFydCkseC5fb250b3VjaHN0YXJ0PV8seC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfLHtwYXNzaXZlOiExfSkpOngub250b3VjaHN0YXJ0PV87dmFyIGI9dC5jbGFtcEZufHxmdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguYWJzKHQpPHImJih0PTApLE1hdGguYWJzKGUpPHImJihlPTApLFt0LGVdfTtmdW5jdGlvbiBfKGEpe2cuX2RyYWdnZWQ9ITEsZy5fZHJhZ2dpbmc9ITA7dmFyIG89ZihhKTtlPW9bMF0scj1vWzFdLGQ9YS50YXJnZXQscD1hLG09Mj09PWEuYnV0dG9uc3x8YS5jdHJsS2V5LHZvaWQgMD09PWEuY2xpZW50WCYmdm9pZCAwPT09YS5jbGllbnRZJiYoYS5jbGllbnRYPWUsYS5jbGllbnRZPXIpLChuPShuZXcgRGF0ZSkuZ2V0VGltZSgpKS1nLl9tb3VzZURvd25UaW1lPHk/dis9MToodj0xLGcuX21vdXNlRG93blRpbWU9biksdC5wcmVwRm4mJnQucHJlcEZuKGEsZSxyKSxpJiYhbT8oaD11KCkpLnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KS5jdXJzb3I6aXx8KGg9ZG9jdW1lbnQsYz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmN1cnNvcixkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLmN1cnNvciksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsVCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFQpLCExIT09dC5kcmFnbW9kZSYmKGEucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHcpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdyx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiB3KG4pe24ucHJldmVudERlZmF1bHQoKTt2YXIgaT1mKG4pLGE9dC5taW5EcmFnfHxzLk1JTkRSQUcsbz1iKGlbMF0tZSxpWzFdLXIsYSksYz1vWzBdLHU9b1sxXTsoY3x8dSkmJihnLl9kcmFnZ2VkPSEwLGwudW5ob3ZlcihnLG4pKSxnLl9kcmFnZ2VkJiZ0Lm1vdmVGbiYmIW0mJihnLl9kcmFnZGF0YT17ZWxlbWVudDp4LGR4OmMsZHk6dX0sdC5tb3ZlRm4oYyx1KSl9ZnVuY3Rpb24gVChlKXtpZihkZWxldGUgZy5fZHJhZ2RhdGEsITEhPT10LmRyYWdtb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3KSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsVCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFQpLGk/byhoKTpjJiYoaC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPWMsYz1udWxsKSxnLl9kcmFnZ2luZyl7aWYoZy5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCktZy5fbW91c2VEb3duVGltZT55JiYodj1NYXRoLm1heCh2LTEsMSkpLGcuX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih2LHApLCFtKXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudCgiY2xpY2siLGUpfWNhdGNoKHQpe3ZhciBuPWYoZSk7KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRNb3VzZUV2ZW50KCJjbGljayIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9ZC5kaXNwYXRjaEV2ZW50KHIpfWcuX2RyYWdnaW5nPSExLGcuX2RyYWdnZWQ9ITF9ZWxzZSBnLl9kcmFnZ2VkPSExfX0sbC5jb3ZlclNsaXA9dX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTU2LCIuL2FsaWduIjozNzcsIi4vY3Vyc29yIjozNzgsIi4vdW5ob3ZlciI6MzgxLCJoYXMtaG92ZXIiOjIyMywiaGFzLXBhc3NpdmUtZXZlbnRzIjoyMjQsIm1vdXNlLWV2ZW50LW9mZnNldCI6MjM3fV0sMzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxpPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGE9dCgiLi4vLi4vbGliL2RvbSIpLmdldEdyYXBoRGl2LG89dCgiLi4vZngvY29uc3RhbnRzIikscz1lLmV4cG9ydHM9e307cy53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsodD1hKHQpKS5fZnVsbExheW91dCYmaS5jbGVhcih0Ll9mdWxsTGF5b3V0Ll91aWQrby5IT1ZFUklEKSxzLnJhdyh0LGUscil9LHMucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiF0Ll9kcmFnZ2VkJiYhMT09PW4udHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZWhvdmVyIixlKXx8KHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksdC5faG92ZXJkYXRhPXZvaWQgMCxlLnRhcmdldCYmaSYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7Ii4uLy4uL2xpYi9kb20iOjQ4NiwiLi4vLi4vbGliL2V2ZW50cyI6NDg3LCIuLi8uLi9saWIvdGhyb3R0bGUiOjUyNSwiLi4vZngvY29uc3RhbnRzIjozOTV9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kYXNoPXt2YWxUeXBlOiJzdHJpbmciLHZhbHVlczpbInNvbGlkIiwiZG90IiwiZGFzaCIsImxvbmdkYXNoIiwiZGFzaGRvdCIsImxvbmdkYXNoZG90Il0sZGZsdDoic29saWQiLGVkaXRUeXBlOiJzdHlsZSJ9LHIucGF0dGVybj17c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsIi8iLCJcXCIsIngiLCItIiwifCIsIisiLCIuIl0sZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGZpbGxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXBsYWNlIiwib3ZlcmxheSJdLGRmbHQ6InJlcGxhY2UiLGVkaXRUeXBlOiJzdHlsZSJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGZnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGZnb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUiLG1pbjowLG1heDoxfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6OCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHNvbGlkaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifX0se31dLDM4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoInRpbnljb2xvcjIiKSxsPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vY29sb3JzY2FsZSIpLGY9aS5zdHJUcmFuc2xhdGUsaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxwPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksZD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLG09dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGc9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSx2PXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLHg9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWUuZmlsbHBhdHRlcm4saT1uJiZ4LmdldFBhdHRlcm5BdHRyKG4uc2hhcGUsMCwiIik7aWYoaSl7dmFyIGE9eC5nZXRQYXR0ZXJuQXR0cihuLmJnY29sb3IsMCxudWxsKSxvPXguZ2V0UGF0dGVybkF0dHIobi5mZ2NvbG9yLDAsbnVsbCkscz1uLmZnb3BhY2l0eSxsPXguZ2V0UGF0dGVybkF0dHIobi5zaXplLDAsOCksdT14LmdldFBhdHRlcm5BdHRyKG4uc29saWRpdHksMCwuMyksZj1lLnVpZDt4LnBhdHRlcm4odCwicG9pbnQiLHIsZixpLGwsdSx2b2lkIDAsbi5maWxsbW9kZSxhLG8scyl9ZWxzZSBlLmZpbGxjb2xvciYmdC5jYWxsKGMuZmlsbCxlLmZpbGxjb2xvcil9eC5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2kuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZSkscisxJiZ0LnN0eWxlKCJmb250LXNpemUiLHIrInB4IiksbiYmdC5jYWxsKGMuZmlsbCxuKX0seC5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ4IixlKS5hdHRyKCJ5IixyKX0seC5zZXRTaXplPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIndpZHRoIixlKS5hdHRyKCJoZWlnaHQiLHIpfSx4LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwoeC5zZXRQb3NpdGlvbixlLHIpLmNhbGwoeC5zZXRTaXplLG4saSl9LHgudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5jMnAodC54KSxhPW4uYzJwKHQueSk7cmV0dXJuISEobyhpKSYmbyhhKSYmZS5ub2RlKCkpJiYoInRleHQiPT09ZS5ub2RlKCkubm9kZU5hbWU/ZS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKTplLmF0dHIoInRyYW5zZm9ybSIsZihpLGEpKSwhMCl9LHgudHJhbnNsYXRlUG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3gudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KSl9LHguaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoImRpc3BsYXkiLHIuaXNQdFdpdGhpblJhbmdlKHQsaSkmJm4uaXNQdFdpdGhpblJhbmdlKHQsYSk/bnVsbDoibm9uZSIpfSx4LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxvPWEueGNhbGVuZGFyLHM9YS55Y2FsZW5kYXIsYz1sLnRyYWNlSXMoYSwiYmFyLWxpa2UiKT8iLmJhcnRleHQiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwoYykuZWFjaCgoZnVuY3Rpb24odCl7eC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxuLnNlbGVjdCh0aGlzKSxyLGksbyxzKX0pKX0pKX19LHguY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJm8oZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx4LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAscz1pfHxhLmRhc2h8fCIiO2Muc3Ryb2tlKGUsbnx8YS5jb2xvcikseC5kYXNoTGluZShlLHMsbyl9LHgubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7bi5zZWxlY3QodGhpcykuY2FsbChjLnN0cm9rZSxyfHxhLmNvbG9yKS5jYWxsKHguZGFzaExpbmUscyxvKX0pKX0seC5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXguZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LHguZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0seC5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLnNlbGVjdCh0Lm5vZGUoKSk7Yih0LCgoci5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSxlKX0seC5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7dFswXS50cmFjZSYmYihyLHRbMF0udHJhY2UsZSl9KSl9O3ZhciBfPXQoIi4vc3ltYm9sX2RlZnMiKTt4LnN5bWJvbE5hbWVzPVtdLHguc3ltYm9sRnVuY3M9W10seC5zeW1ib2xOZWVkTGluZXM9e30seC5zeW1ib2xOb0RvdD17fSx4LnN5bWJvbE5vRmlsbD17fSx4LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoXykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9X1t0XSxyPWUubjt4LnN5bWJvbExpc3QucHVzaChyLFN0cmluZyhyKSx0LHIrMTAwLFN0cmluZyhyKzEwMCksdCsiLW9wZW4iKSx4LnN5bWJvbE5hbWVzW3JdPXQseC5zeW1ib2xGdW5jc1tyXT1lLmYsZS5uZWVkTGluZSYmKHguc3ltYm9sTmVlZExpbmVzW3JdPSEwKSxlLm5vRG90P3guc3ltYm9sTm9Eb3Rbcl09ITA6eC5zeW1ib2xMaXN0LnB1c2gocisyMDAsU3RyaW5nKHIrMjAwKSx0KyItZG90IixyKzMwMCxTdHJpbmcociszMDApLHQrIi1vcGVuLWRvdCIpLGUubm9GaWxsJiYoeC5zeW1ib2xOb0ZpbGxbcl09ITApfSkpO3ZhciB3PXguc3ltYm9sTmFtZXMubGVuZ3RoO2Z1bmN0aW9uIFQodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4geC5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwPyJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiOiIiKX14LnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZihvKHQpKXQ9K3Q7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSwodD14LnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj13fHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgaz17eDE6MSx4MjowLHkxOjAseTI6MH0sQT17eDE6MCx4MjowLHkxOjEseTI6MH0sTT1hKCJ+ZiIpLFM9e3JhZGlhbDp7bm9kZToicmFkaWFsR3JhZGllbnQifSxyYWRpYWxyZXZlcnNlZDp7bm9kZToicmFkaWFsR3JhZGllbnQiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6a30saG9yaXpvbnRhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6ayxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpBfSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6QSxyZXZlcnNlZDohMH19O3guZ3JhZGllbnQ9ZnVuY3Rpb24odCxlLHIsYSxvLGwpe2Zvcih2YXIgdT1vLmxlbmd0aCxmPVNbYV0saD1uZXcgQXJyYXkodSkscD0wO3A8dTtwKyspZi5yZXZlcnNlZD9oW3UtMS1wXT1bTSgxMDAqKDEtb1twXVswXSkpLG9bcF1bMV1dOmhbcF09W00oMTAwKm9bcF1bMF0pLG9bcF1bMV1dO3ZhciBkPWUuX2Z1bGxMYXlvdXQsbT0iZyIrZC5fdWlkKyItIityLGc9ZC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK20pLmRhdGEoW2EraC5qb2luKCI7IildLGkuaWRlbnRpdHkpO2cuZXhpdCgpLnJlbW92ZSgpLGcuZW50ZXIoKS5hcHBlbmQoZi5ub2RlKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2YuYXR0cnMmJnQuYXR0cihmLmF0dHJzKSx0LmF0dHIoImlkIixtKTt2YXIgZT10LnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoaCk7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9cyh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXSsiJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pKX0pKSx0LnN0eWxlKGwsUihtLGUpKS5zdHlsZShsKyItb3BhY2l0eSIsbnVsbCksdC5jbGFzc2VkKCJncmFkaWVudF9maWxsZWQiLCEwKX0seC5wYXR0ZXJuPWZ1bmN0aW9uKHQsZSxyLGEsbyxzLGwsdSxmLGgscCxkKXt2YXIgbT0ibGVnZW5kIj09PWU7dSYmKCJvdmVybGF5Ij09PWY/KGg9dSxwPWMuY29udHJhc3QoaCkpOihoPXZvaWQgMCxwPXUpKTt2YXIgZyx2LHkseCxiLF8sdyxULGssQSxNLFM9ci5fZnVsbExheW91dCxFPSJwIitTLl91aWQrIi0iK2EsTD17fTtzd2l0Y2gobyl7Y2FzZSIvIjpnPXMqTWF0aC5zcXJ0KDIpLHY9cypNYXRoLnNxcnQoMiksXz0icGF0aCIsTD17ZDp5PSJNLSIrZy80KyIsIit2LzQrImwiK2cvMisiLC0iK3YvMisiTTAsIit2KyJMIitnKyIsME0iK2cvNCozKyIsIit2LzQqNSsibCIrZy8yKyIsLSIrdi8yLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UiXFwiOmc9cypNYXRoLnNxcnQoMiksdj1zKk1hdGguc3FydCgyKSxfPSJwYXRoIixMPXtkOnk9Ik0iK2cvNCozKyIsLSIrdi80KyJsIitnLzIrIiwiK3YvMisiTTAsMEwiK2crIiwiK3YrIk0tIitnLzQrIiwiK3YvNCozKyJsIitnLzIrIiwiK3YvMixvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9bCpzKSsicHgifTticmVhaztjYXNlIngiOmc9cypNYXRoLnNxcnQoMiksdj1zKk1hdGguc3FydCgyKSx5PSJNLSIrZy80KyIsIit2LzQrImwiK2cvMisiLC0iK3YvMisiTTAsIit2KyJMIitnKyIsME0iK2cvNCozKyIsIit2LzQqNSsibCIrZy8yKyIsLSIrdi8yKyJNIitnLzQqMysiLC0iK3YvNCsibCIrZy8yKyIsIit2LzIrIk0wLDBMIitnKyIsIit2KyJNLSIrZy80KyIsIit2LzQqMysibCIrZy8yKyIsIit2LzIseD1zLXMqTWF0aC5zcXJ0KDEtbCksXz0icGF0aCIsTD17ZDp5LG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjp4KyJweCJ9O2JyZWFrO2Nhc2UifCI6Xz0icGF0aCIsXz0icGF0aCIsTD17ZDp5PSJNIisoZz1zKS8yKyIsMEwiK2cvMisiLCIrKHY9cyksb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PWwqcykrInB4In07YnJlYWs7Y2FzZSItIjpfPSJwYXRoIixfPSJwYXRoIixMPXtkOnk9Ik0wLCIrKHY9cykvMisiTCIrKGc9cykrIiwiK3YvMixvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9bCpzKSsicHgifTticmVhaztjYXNlIisiOl89InBhdGgiLHk9Ik0iKyhnPXMpLzIrIiwwTCIrZy8yKyIsIisodj1zKSsiTTAsIit2LzIrIkwiK2crIiwiK3YvMix4PXMtcypNYXRoLnNxcnQoMS1sKSxfPSJwYXRoIixMPXtkOnksb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOngrInB4In07YnJlYWs7Y2FzZSIuIjpnPXMsdj1zLGw8TWF0aC5QSS80P2I9TWF0aC5zcXJ0KGwqcypzL01hdGguUEkpOih3PWwsVD1NYXRoLlBJLzQsaz0xLEE9cy8yLE09cy9NYXRoLnNxcnQoMiksYj1BKyhNLUEpKih3LVQpLyhrLVQpKSxfPSJjaXJjbGUiLEw9e2N4OmcvMixjeTp2LzIscjpiLG9wYWNpdHk6ZCxmaWxsOnB9fXZhciBDPVtvfHwibm9TaCIsaHx8Im5vQmciLHB8fCJub0ZnIixzLGxdLmpvaW4oIjsiKSxQPVMuX2RlZnMuc2VsZWN0KCIucGF0dGVybnMiKS5zZWxlY3RBbGwoIiMiK0UpLmRhdGEoW0NdLGkuaWRlbnRpdHkpO1AuZXhpdCgpLnJlbW92ZSgpLFAuZW50ZXIoKS5hcHBlbmQoInBhdHRlcm4iKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKHQuYXR0cih7aWQ6RSx3aWR0aDpnKyJweCIsaGVpZ2h0OnYrInB4IixwYXR0ZXJuVW5pdHM6InVzZXJTcGFjZU9uVXNlIixwYXR0ZXJuVHJhbnNmb3JtOm0/InNjYWxlKDAuOCkiOiIifSksaCl7dmFyIGU9dC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFswXSk7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoe3dpZHRoOmcrInB4IixoZWlnaHQ6disicHgiLGZpbGw6aH0pfXZhciByPXQuc2VsZWN0QWxsKF8pLmRhdGEoWzBdKTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKF8pLmF0dHIoTCl9KSksdC5zdHlsZSgiZmlsbCIsUihFLHIpKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixudWxsKSx0LmNsYXNzZWQoInBhdHRlcm5fZmlsbGVkIiwhMCl9LHguaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJncmFkaWVudHMiKS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCksbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZ3JhZGllbnRfZmlsbGVkIikuY2xhc3NlZCgiZ3JhZGllbnRfZmlsbGVkIiwhMSl9LHguaW5pdFBhdHRlcm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aS5lbnN1cmVTaW5nbGUoZS5fZGVmcywiZyIsInBhdHRlcm5zIikuc2VsZWN0QWxsKCJwYXR0ZXJuIikucmVtb3ZlKCksbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGF0dGVybl9maWxsZWQiKS5jbGFzc2VkKCJwYXR0ZXJuX2ZpbGxlZCIsITEpfSx4LmdldFBhdHRlcm5BdHRyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U8dC5sZW5ndGg/dFtlXTpyOnR9LHgucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpPXgubWFrZVBvaW50U3R5bGVGbnMoZSk7dC5lYWNoKChmdW5jdGlvbih0KXt4LnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KSl9fSx4LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz1yLm1hcmtlcixzPW8ubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9vLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09by5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT14LnN5bWJvbE51bWJlcih0Lm14fHxvLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsVCh1LGwpKX12YXIgZixoLHAsZD0hMTtpZih0LnNvKXA9cy5vdXRsaWVyd2lkdGgsaD1zLm91dGxpZXJjb2xvcixmPW8ub3V0bGllcmNvbG9yO2Vsc2V7dmFyIG09KHN8fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxtKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxoPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmkuaXNBcnJheU9yVHlwZWRBcnJheShzLmNvbG9yKT9jLmRlZmF1bHRMaW5lOnMuY29sb3IsaS5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpJiYoZj1jLmRlZmF1bHRMaW5lLGQ9ITApLGY9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTpvLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChjLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsKHQuaXNCbGFuaz8wOnApKyJweCIpO3ZhciBnPW8uZ3JhZGllbnQsdj10Lm1ndDt2P2Q9ITA6dj1nJiZnLnR5cGUsaS5pc0FycmF5T3JUeXBlZEFycmF5KHYpJiYodj12WzBdLFNbdl18fCh2PTApKTt2YXIgeT1vLnBhdHRlcm4sYj15JiZ4LmdldFBhdHRlcm5BdHRyKHkuc2hhcGUsdC5pLCIiKTtpZih2JiYibm9uZSIhPT12KXt2YXIgXz10Lm1nYztfP2Q9ITA6Xz1nLmNvbG9yO3ZhciB3PXIudWlkO2QmJih3Kz0iLSIrdC5pKSx4LmdyYWRpZW50KGUsYSx3LHYsW1swLF9dLFsxLGZdXSwiZmlsbCIpfWVsc2UgaWYoYil7dmFyIGs9eC5nZXRQYXR0ZXJuQXR0cih5LmJnY29sb3IsdC5pLG51bGwpLEE9eC5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsdC5pLG51bGwpLE09eS5mZ29wYWNpdHksRT14LmdldFBhdHRlcm5BdHRyKHkuc2l6ZSx0LmksOCksTD14LmdldFBhdHRlcm5BdHRyKHkuc29saWRpdHksdC5pLC4zKSxDPXQubWNjfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaGFwZSl8fGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LmJnY29sb3IpfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaXplKXx8aS5pc0FycmF5T3JUeXBlZEFycmF5KHkuc29saWRpdHkpLFA9ci51aWQ7QyYmKFArPSItIit0LmkpLHgucGF0dGVybihlLCJwb2ludCIsYSxQLGIsRSxMLHQubWNjLHkuZmlsbG1vZGUsayxBLE0pfWVsc2UgYy5maWxsKGUsZik7cCYmYy5zdHJva2UoZSxoKX19LHgubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT14LnRyeUNvbG9yc2NhbGUociwiIiksZS5saW5lU2NhbGU9eC50cnlDb2xvcnNjYWxlKHIsImxpbmUiKSxsLnRyYWNlSXModCwic3ltYm9scyIpJiYoZS5tczJtcmM9Zy5pc0J1YmJsZSh0KT92KHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmkuZXh0ZW5kRmxhdChlLHgubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0seC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGE9dC5tYXJrZXJ8fHt9LG89ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGM9YS5vcGFjaXR5LHU9by5vcGFjaXR5LGY9cy5vcGFjaXR5LGg9dm9pZCAwIT09dSxwPXZvaWQgMCE9PWY7KGkuaXNBcnJheU9yVHlwZWRBcnJheShjKXx8aHx8cCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/aD91OmU6cD9mOm0qZX0pO3ZhciBkPWEuY29sb3IsZz1vLmNvbG9yLHY9cy5jb2xvcjsoZ3x8dikmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZDtyZXR1cm4gdC5zZWxlY3RlZD9nfHxlOnZ8fGV9KTt2YXIgeT1hLnNpemUseD1vLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gbC50cmFjZUlzKHQsInN5bWJvbHMiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LHM9aS5jb2xvcixsPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8cztyZXR1cm4gdC5zZWxlY3RlZD9sfHxlOnV8fChsP2U6Yy5hZGRPcGFjaXR5KGUsbSkpfSxlfSx4LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj14Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dC5zdHlsZSgib3BhY2l0eSIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXtjLmZpbGwodCxyLnNlbGVjdGVkQ29sb3JGbihlKSl9KSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLFQoeC5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSkpLGEubGVuZ3RoJiZ0LmVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSkpfX0seC50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9pLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yO2lmKChyLmNvbG9yc2NhbGV8fHIuX2NvbG9yQXgpJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkobikpcmV0dXJuIHUubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpfXJldHVybiBpLmlkZW50aXR5fTt2YXIgRT17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBMKHQsZSxyLGksYSl7dmFyIG89bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkscz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLGw9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGM9aT9pLy44KzE6MCx1PShoLmxpbmVDb3VudCh0KS0xKSpkKzEscD1FW2xdKmMsbT0uNzUqcitFW3NdKmMrKEVbc10tMSkqdSpyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIsbCksYXx8by5hdHRyKCJ0cmFuc2Zvcm0iLGYocCxtKSl9ZnVuY3Rpb24gQyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gbyhyKSYmcj4wP3I6MH14LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGE7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIG89eC5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7YT1vLnNlbGVjdGVkVGV4dENvbG9yRm59dmFyIHM9ZS50ZXh0dGVtcGxhdGUsbD1yLl9mdWxsTGF5b3V0O3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG89bi5zZWxlY3QodGhpcyksYz1zP2kuZXh0cmFjdE9wdGlvbih0LGUsInR4dCIsInRleHR0ZW1wbGF0ZSIpOmkuZXh0cmFjdE9wdGlvbih0LGUsInR4IiwidGV4dCIpO2lmKGN8fDA9PT1jKXtpZihzKXt2YXIgdT1lLl9tb2R1bGUuZm9ybWF0TGFiZWxzLGY9dT91KHQsZSxsKTp7fSxwPXt9O3kocCxlLHQuaSk7dmFyIGQ9ZS5fbWV0YXx8e307Yz1pLnRleHR0ZW1wbGF0ZVN0cmluZyhjLGYsbC5fZDNsb2NhbGUscCx0LGQpfXZhciBtPXQudHB8fGUudGV4dHBvc2l0aW9uLGc9Qyh0LGUpLHY9YT9hKHQpOnQudGN8fGUudGV4dGZvbnQuY29sb3I7by5jYWxsKHguZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxnLHYpLnRleHQoYykuY2FsbChoLmNvbnZlcnRUb1RzcGFucyxyKS5jYWxsKEwsbSxnLHQubXJjKX1lbHNlIG8ucmVtb3ZlKCl9KSl9fSx4LnNlbGVjdGVkVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1yLnNlbGVjdGVkVGV4dENvbG9yRm4odCksbz10LnRwfHxlLnRleHRwb3NpdGlvbixzPUModCxlKTtjLmZpbGwoaSxhKTt2YXIgdT1sLnRyYWNlSXMoZSwiYmFyLWxpa2UiKTtMKGksbyxzLHQubXJjMnx8dC5tcmMsdSl9KSl9fTtmdW5jdGlvbiBQKHQsZSxyLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSxjPU1hdGgucG93KGEqYStvKm8sLjI1KSx1PU1hdGgucG93KHMqcytsKmwsLjI1KSxmPSh1KnUqYS1jKmMqcykqaSxoPSh1KnUqby1jKmMqbCkqaSxwPTMqdSooYyt1KSxkPTMqYyooYyt1KTtyZXR1cm5bW24ucm91bmQoZVswXSsocCYmZi9wKSwyKSxuLnJvdW5kKGVbMV0rKHAmJmgvcCksMildLFtuLnJvdW5kKGVbMF0tKGQmJmYvZCksMiksbi5yb3VuZChlWzFdLShkJiZoL2QpLDIpXV19eC5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIik7dmFyIHIsbj0iTSIrdFswXSxpPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylpLnB1c2goUCh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz0iUSIraVswXVswXSsiICIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz0iQyIraVtyLTJdWzFdKyIgIitpW3ItMV1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJRIitpW3QubGVuZ3RoLTNdWzFdKyIgIit0W3QubGVuZ3RoLTFdfSx4LnNtb290aGNsb3NlZD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpKyJaIjt2YXIgcixuPSJNIit0WzBdLGk9dC5sZW5ndGgtMSxhPVtQKHRbaV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8aTtyKyspYS5wdXNoKFAodFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3IoYS5wdXNoKFAodFtpLTFdLHRbaV0sdFswXSxlKSkscj0xO3I8PWk7cisrKW4rPSJDIithW3ItMV1bMV0rIiAiK2Fbcl1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJDIithW2ldWzFdKyIgIithWzBdWzBdKyIgIit0WzBdKyJaIn07dmFyIEk9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK24ucm91bmQoZVswXSwyKSsiViIrbi5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVybiJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0saHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK24ucm91bmQoKHRbMF0rZVswXSkvMiwyKSsiViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LHZodjpmdW5jdGlvbih0LGUpe3JldHVybiJWIituLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrIkgiK24ucm91bmQoZVswXSwyKSsiViIrbi5yb3VuZChlWzFdLDIpfX0sTz1mdW5jdGlvbih0LGUpe3JldHVybiJMIituLnJvdW5kKGVbMF0sMikrIiwiK24ucm91bmQoZVsxXSwyKX07eC5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1JW3RdfHxPO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9Ik0iK24ucm91bmQodFswXVswXSwyKSsiLCIrbi5yb3VuZCh0WzBdWzFdLDIpLGk9MTtpPHQubGVuZ3RoO2krKylyKz1lKHRbaS0xXSx0W2ldKTtyZXR1cm4gcn19LHgubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PWkuZW5zdXJlU2luZ2xlQnlJZChuLnNlbGVjdCgiYm9keSIpLCJzdmciLCJqcy1wbG90bHktdGVzdGVyIiwoZnVuY3Rpb24odCl7dC5hdHRyKHAuc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pfSkpLGU9aS5lbnN1cmVTaW5nbGUodCwicGF0aCIsImpzLXJlZmVyZW5jZS1wb2ludCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZCIsIk0wLDBIMVYxSDBaIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOjAsZmlsbDoiYmxhY2sifSl9KSk7eC50ZXN0ZXI9dCx4LnRlc3RyZWY9ZX0seC5zYXZlZEJCb3hlcz17fTt2YXIgej0wO2Z1bmN0aW9uIEQodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5mb3JtYXR0ZWQiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZSgiZGF0YS1tYXRoIikrdC5nZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIikrdC5nZXRBdHRyaWJ1dGUoInN0eWxlIil9ZnVuY3Rpb24gUih0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPWUuX2NvbnRleHQsbj1yLl9leHBvcnRlZFBsb3Q/IiI6ci5fYmFzZVVybHx8IiI7cmV0dXJuIG4/InVybCgnIituKyIjIit0KyInKSI6InVybCgjIit0KyIpIn14LmJCb3g9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scztpZihyfHwocj1EKHQpKSxyKXtpZihhPXguc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxhKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgbD10LmNoaWxkTm9kZXNbMF07aWYocj1EKGwpKXt2YXIgYz0rbC5nZXRBdHRyaWJ1dGUoIngiKXx8MCx1PStsLmdldEF0dHJpYnV0ZSgieSIpfHwwLGY9bC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpO2lmKCFmKXt2YXIgcD14LmJCb3gobCwhMSxyKTtyZXR1cm4gYyYmKHAubGVmdCs9YyxwLnJpZ2h0Kz1jKSx1JiYocC50b3ArPXUscC5ib3R0b20rPXUpLHB9aWYocis9In4iK2MrIn4iK3UrIn4iK2YsYT14LnNhdmVkQkJveGVzW3JdKXJldHVybiBpLmV4dGVuZEZsYXQoe30sYSl9fWU/bz10OihzPXgudGVzdGVyLm5vZGUoKSxvPXQuY2xvbmVOb2RlKCEwKSxzLmFwcGVuZENoaWxkKG8pKSxuLnNlbGVjdChvKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmNhbGwoaC5wb3NpdGlvblRleHQsMCwwKTt2YXIgZD1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09eC50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxzLnJlbW92ZUNoaWxkKG8pO3ZhciBnPXtoZWlnaHQ6ZC5oZWlnaHQsd2lkdGg6ZC53aWR0aCxsZWZ0OmQubGVmdC1tLmxlZnQsdG9wOmQudG9wLW0udG9wLHJpZ2h0OmQucmlnaHQtbS5sZWZ0LGJvdHRvbTpkLmJvdHRvbS1tLnRvcH07cmV0dXJuIHo+PTFlNCYmKHguc2F2ZWRCQm94ZXM9e30sej0wKSxyJiYoeC5zYXZlZEJCb3hlc1tyXT1nKSx6KyssaS5leHRlbmRGbGF0KHt9LGcpfSx4LnNldENsaXBVcmw9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigiY2xpcC1wYXRoIixSKGUscikpfSx4LmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxidHJhbnNsYXRlXCgoLT9cZCpcLj9cZCopW14tXGRdKigtP1xkKlwuP1xkKilbXlxkXS4qLywoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pKS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwwLHk6K2VbMV18fDB9fSx4LnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MCxyPXJ8fDAsYT1hLnJlcGxhY2UoLyhcYnRyYW5zbGF0ZVwoLio/XCk7PykvLCIiKS50cmltKCksYT0oYSs9ZihlLHIpKS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfSx4LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDEseTorZVsxXXx8MX19LHguc2V0U2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsaT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGE9dFtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDEscj1yfHwxLGE9YS5yZXBsYWNlKC8oXGJzY2FsZVwoLio/XCk7PykvLCIiKS50cmltKCksYT0oYSs9InNjYWxlKCIrZSsiLCIrcisiKSIpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9O3ZhciBGPS9ccypzYy4qLzt4LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6InNjYWxlKCIrZSsiLCIrcisiKSI7dC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKEYsIiIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KX0pKX19O3ZhciBCPS90cmFuc2xhdGVcKFteKV0qXClccyokLzt4LnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dCYmdC5lYWNoKChmdW5jdGlvbigpe3ZhciB0LGk9bi5zZWxlY3QodGhpcyksYT1pLnNlbGVjdCgidGV4dCIpO2lmKGEubm9kZSgpKXt2YXIgbz1wYXJzZUZsb2F0KGEuYXR0cigieCIpfHwwKSxzPXBhcnNlRmxvYXQoYS5hdHRyKCJ5Iil8fDApLGw9KGkuYXR0cigidHJhbnNmb3JtIil8fCIiKS5tYXRjaChCKTt0PTE9PT1lJiYxPT09cj9bXTpbZihvLHMpLCJzY2FsZSgiK2UrIiwiK3IrIikiLGYoLW8sLXMpXSxsJiZ0LnB1c2gobCksaS5hdHRyKCJ0cmFuc2Zvcm0iLHQuam9pbigiIikpfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NDczLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6OTM5LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCIuLi9jb2xvciI6MzYxLCIuLi9jb2xvcnNjYWxlIjozNzMsIi4vc3ltYm9sX2RlZnMiOjM4NCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxODUsdGlueWNvbG9yMjozMDd9XSwzODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpO2UuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgiK2UrIlYiK3IrIkgtIitlKyJWIitlKyJILSIrcisiVi0iK2UrIkgtIitlKyJWLSIrcisiSCIrZSsiVi0iK2UrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOCp0L01hdGguc3FydCgyKSwyKSxyPSJsIitlKyIsIitlLGk9ImwiK2UrIiwtIitlLGE9ImwtIitlKyIsLSIrZSxvPSJsLSIrZSsiLCIrZTtyZXR1cm4iTTAsIitlK3IraSthK2krYStvK2ErbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsLSIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLC0iK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwiK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMLSIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZCh0LzIsMikrIiwtIitlKyJWIitlKyJMIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK2UrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK2UrIiwtIityKyJWIitlKyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSC0iK2UrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNLSIrZSsiLCIrcisiVi0iK2UrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm4iTSIrZSsiLCIrYSsiTCIrcisiLCIrbi5yb3VuZCguODA5KnQsMikrIkgtIityKyJMLSIrZSsiLCIrYSsiTDAsIitpKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIraSsiLC0iK3IrIlYiK3IrIkwwLCIrZSsiTC0iK2krIiwiK3IrIlYtIityKyJMMCwtIitlKyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIitpKyJIIityKyJMIitlKyIsMEwiK3IrIiwtIitpKyJILSIrcisiTC0iK2UrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIityKyJMIitlKyIsLSIrcisiViIrcisiTCIrcisiLCIrZSsiSC0iK3IrIkwtIitlKyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVybiJNIityKyIsIitsKyJIIitpKyJMIithKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4MiplLDIpKyJMLSIrbysiLCIrdSsiTC0iK2ErIiwiK2MrIkwtIitpKyIsIitsKyJILSIrcisiTDAsIitzKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVybiJNLSIraSsiLDBsLSIrcisiLC0iK2UrImgiK2krImwiK3IrIiwtIitlKyJsIityKyIsIitlKyJoIitpKyJsLSIrcisiLCIrZSsibCIrcisiLCIrZSsiaC0iK2krImwtIityKyIsIitlKyJsLSIrcisiLC0iK2UrImgtIitpKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLCIrcitvK2UrIiwiK3IrbysiMCwtIitpK28rIi0iK2UrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTSIrZSsiLC0iK3IrbysiLSIrZSsiLC0iK3IrbysiMCwiK2krbytlKyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwtIitlK2krIi0iK2UrIiwiK2UraStlKyIsIitlK2krZSsiLC0iK2UraSsiLSIrZSsiLC0iK2UrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCgxLjkqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsMCIraSsiMCwiK2UraStlKyIsMCIraSsiMCwtIitlK2krIi0iK2UrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJILSIrZSsiTCIrZSsiLC0iK2UrIkgtIitlKyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiVi0iK2UrIkwtIitlKyIsIitlKyJWLSIrZSsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNMCwtIitlKyJWIitlKyJNLSIrZSsiLDBIIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpLHI9bi5yb3VuZCguNjUqdCwyKTtyZXR1cm4iTSIrZSsiLDBMMCwiK2UrIkwtIitlKyIsMEwwLC0iK2UrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZSsiTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK2UrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLCIraSsiTDAsME0iK2UrIiwiK2krIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTSIraSsiLCIrZSsiTDAsME0iK2krIiwtIitlKyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitpKyIsIitlKyJMMCwwTS0iK2krIiwtIitlKyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImFycm93LXVwIjp7bjo0NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctZG93biI6e246NDYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLC0iK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1sZWZ0Ijp7bjo0NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTCIrZSsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LXJpZ2h0Ijp7bjo0OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1iYXItdXAiOntuOjQ5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNLSIrZSsiLDBIIitlKyJNMCwwTC0iK2UrIiwiK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItZG93biI6e246NTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0tIitlKyIsMEgiK2UrIk0wLDBMLSIrZSsiLC0iK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItbGVmdCI6e246NTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwiK2UrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItcmlnaHQiOntuOjUyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMLSIrZSsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH19fSx7IkBwbG90bHkvZDMiOjU4fV0sMzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDM4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVsiZXJyb3JfIitpXXx8e30sYz1bXTtpZihsLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGg9dFtmXSxwPWguaTtpZih2b2lkIDA9PT1wKXA9ZjtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWhbaV07aWYobihyLmMybChkKSkpe3ZhciBtPXUoZCxwKTtpZihuKG1bMF0pJiZuKG1bMV0pKXt2YXIgZz1oW2krInMiXT1kLW1bMF0sdj1oW2krImgiXT1kK21bMV07Yy5wdXNoKGcsdil9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsIngiKSxsKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vY29tcHV0ZV9lcnJvciI6Mzg3LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sMzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz0iZXJyb3JfIitsLmF4aXMsdT1vLm5ld0NvbnRhaW5lcihlLGMpLGY9dFtjXXx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLHUscyx0LGUpfWlmKCExIT09aCgidmlzaWJsZSIsdm9pZCAwIT09Zi5hcnJheXx8dm9pZCAwIT09Zi52YWx1ZXx8InNxcnQiPT09Zi50eXBlKSl7dmFyIHA9aCgidHlwZSIsImFycmF5ImluIGY/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1wJiYoZD1oKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PXA/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBmKSkpLCJkYXRhIj09PXA/KGgoImFycmF5IiksaCgidHJhY2VyZWYiKSxkfHwoaCgiYXJyYXltaW51cyIpLGgoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PXAmJiJjb25zdGFudCIhPT1wfHwoaCgidmFsdWUiKSxkfHxoKCJ2YWx1ZW1pbnVzIikpO3ZhciBtPSJjb3B5XyIrbC5pbmhlcml0KyJzdHlsZSI7aWYobC5pbmhlcml0KShlWyJlcnJvcl8iK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZoKG0sIShmLmNvbG9yfHxuKGYudGhpY2tuZXNzKXx8bihmLndpZHRoKSkpO2wuaW5oZXJpdCYmdVttXXx8KGgoImNvbG9yIixyKSxoKCJ0aGlja25lc3MiKSxoKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vYXR0cmlidXRlcyI6Mzg1LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sMzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBzPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIHMuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3pzdHlsZSxlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6aShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOnQoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4vYXR0cmlidXRlcyI6Mzg1LCIuL2NhbGMiOjM4NiwiLi9jb21wdXRlX2Vycm9yIjozODcsIi4vZGVmYXVsdHMiOjM4OCwiLi9wbG90IjozOTAsIi4vc3R5bGUiOjM5MX1dLDM5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ci54YXhpcyxjPXIueWF4aXMsdT1zJiZzLmR1cmF0aW9uPjA7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgZixoPWVbMF0udHJhY2UscD1oLmVycm9yX3h8fHt9LGQ9aC5lcnJvcl95fHx7fTtoLmlkcyYmKGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgbT1vLmhhc01hcmtlcnMoaCkmJmgubWFya2VyLm1heGRpc3BsYXllZD4wO2QudmlzaWJsZXx8cC52aXNpYmxlfHwoZT1bXSk7dmFyIGc9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmVycm9yYmFyIikuZGF0YShlLGYpO2lmKGcuZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fGcuc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnJlbW92ZSgpLGQudmlzaWJsZXx8Zy5zZWxlY3RBbGwoInBhdGgueWVycm9yIikucmVtb3ZlKCksZy5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIHY9Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7dSYmdi5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxhLnNldENsaXBVcmwoZyxyLmxheWVyQ2xpcElkLHQpLGcuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1mdW5jdGlvbih0LGUscil7dmFyIG49e3g6ZS5jMnAodC54KSx5OnIuYzJwKHQueSl9O3ZvaWQgMCE9PXQueWgmJihuLnloPXIuYzJwKHQueWgpLG4ueXM9ci5jMnAodC55cyksaShuLnlzKXx8KG4ubm9ZUz0hMCxuLnlzPXIuYzJwKHQueXMsITApKSk7dm9pZCAwIT09dC54aCYmKG4ueGg9ZS5jMnAodC54aCksbi54cz1lLmMycCh0LnhzKSxpKG4ueHMpfHwobi5ub1hTPSEwLG4ueHM9ZS5jMnAodC54cywhMCkpKTtyZXR1cm4gbn0odCxsLGMpO2lmKCFtfHx0LnZpcyl7dmFyIGEsbz1lLnNlbGVjdCgicGF0aC55ZXJyb3IiKTtpZihkLnZpc2libGUmJmkoci54KSYmaShyLnloKSYmaShyLnlzKSl7dmFyIGY9ZC53aWR0aDthPSJNIisoci54LWYpKyIsIityLnloKyJoIisyKmYrIm0tIitmKyIsMFYiK3IueXMsci5ub1lTfHwoYSs9Im0tIitmKyIsMGgiKzIqZiksIW8uc2l6ZSgpP289ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOnUmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxvLmF0dHIoImQiLGEpfWVsc2Ugby5yZW1vdmUoKTt2YXIgaD1lLnNlbGVjdCgicGF0aC54ZXJyb3IiKTtpZihwLnZpc2libGUmJmkoci55KSYmaShyLnhoKSYmaShyLnhzKSl7dmFyIGc9KHAuY29weV95c3R5bGU/ZDpwKS53aWR0aDthPSJNIityLnhoKyIsIisoci55LWcpKyJ2IisyKmcrIm0wLC0iK2crIkgiK3IueHMsci5ub1hTfHwoYSs9Im0wLC0iK2crInYiKzIqZyksIWguc2l6ZSgpP2g9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOnUmJihoPWgudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxoLmF0dHIoImQiLGEpfWVsc2UgaC5yZW1vdmUoKX19KSl9fSkpfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCIuLi9kcmF3aW5nIjozODMsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sMzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuZXJyb3JfeXx8e30sYT1lLmVycm9yX3h8fHt9LG89bi5zZWxlY3QodGhpcyk7by5zZWxlY3RBbGwoInBhdGgueWVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsci50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxyLmNvbG9yKSxhLmNvcHlfeXN0eWxlJiYoYT1yKSxvLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixhLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLGEuY29sb3IpfSkpfX0seyIuLi9jb2xvciI6MzYxLCJAcGxvdGx5L2QzIjo1OH1dLDM5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKS5ob3ZlcmxhYmVsLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtob3ZlcmxhYmVsOntiZ2NvbG9yOmEoe30saS5iZ2NvbG9yLHthcnJheU9rOiEwfSksYm9yZGVyY29sb3I6YSh7fSxpLmJvcmRlcmNvbG9yLHthcnJheU9rOiEwfSksZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLGFsaWduOmEoe30saS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6YSh7fSxpLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo0MDJ9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLCJwaWUtbGlrZSIpKXt2YXIgdT1pLnRyYWNlSXMoYywiMmRNYXAiKT9hOm4uZmlsbEFycmF5O3UoYy5ob3ZlcmluZm8sbCwiaGkiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUsbCwiaHQiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLGwsImhiZyIpLHUoYy5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLGwsImhiYyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxsLCJodHMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLGwsImh0YyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LGwsImh0ZiIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgsbCwiaG5sIiksdShjLmhvdmVybGFiZWwuYWxpZ24sbCwiaHRhIikpfX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzfV0sMzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2hvdmVyIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikodCx0Ll9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXt0LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czp0Ll9ob3ZlcmRhdGEsZXZlbnQ6ZX0pfXZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihhJiZhLnRoZW4/YS50aGVuKG8pOm8oKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vaG92ZXIiOjM5OH1dLDM5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOiJBcmlhbCwgc2Fucy1zZXJpZiIsSE9WRVJNSU5USU1FOjUwLEhPVkVSSUQ6Ii1ob3ZlciJ9fSx7fV0sMzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7ZS5ob3ZlcnRlbXBsYXRlJiYocy5uYW1lbGVuZ3RoPS0xKSxhKHQsZSwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0pLHMpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9hdHRyaWJ1dGVzIjozOTIsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6Mzk5fV0sMzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO3IuZ2V0U3VicGxvdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJwbG90fHx0LnhheGlzK3QueWF4aXN8fHQuZ2VvfSxyLmlzVHJhY2VJblN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7aWYoInNwbG9tIj09PXQudHlwZSl7Zm9yKHZhciBuPXQueGF4ZXN8fFtdLGk9dC55YXhlc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKC0xIT09ZS5pbmRleE9mKG5bYV0raVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT1lLmluZGV4T2Yoci5nZXRTdWJwbG90KHQpKX0sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6IngiPT09dC5jaGFyQXQoMCk/ZTpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCplPDB8fDA9PT10P3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dChyKSxpPWUocik7cmV0dXJuIE1hdGguc3FydChuKm4raSppKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGk9ImluZGV4ImluIHQ/dC5pbmRleDp0LnBvaW50TnVtYmVyLGE9e2RhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOml9O2lmKGUuX2luZGV4VG9Qb2ludHMpe3ZhciBvPWUuX2luZGV4VG9Qb2ludHNbaV07MT09PW8ubGVuZ3RoP2EucG9pbnRJbmRleD1vWzBdOmEucG9pbnRJbmRpY2VzPW99ZWxzZSBhLnBvaW50SW5kZXg9aTtyZXR1cm4gZS5fbW9kdWxlLmV2ZW50RGF0YT9hPWUuX21vZHVsZS5ldmVudERhdGEoYSx0LGUsbixpKTooInhWYWwiaW4gdD9hLng9dC54VmFsOiJ4ImluIHQmJihhLng9dC54KSwieVZhbCJpbiB0P2EueT10LnlWYWw6InkiaW4gdCYmKGEueT10LnkpLHQueGEmJihhLnhheGlzPXQueGEpLHQueWEmJihhLnlheGlzPXQueWEpLHZvaWQgMCE9PXQuekxhYmVsVmFsJiYoYS56PXQuekxhYmVsVmFsKSksci5hcHBlbmRBcnJheVBvaW50VmFsdWUoYSxlLGkpLGF9LHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9hcnJheUF0dHJzO2lmKGkpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1hKGwpO2lmKHZvaWQgMD09PXRbY10pe3ZhciB1PW8obi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLHIpO3ZvaWQgMCE9PXUmJih0W2NdPXUpfX19LHIuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9hcnJheUF0dHJzO2lmKGkpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1hKGwpO2lmKHZvaWQgMD09PXRbY10pe2Zvcih2YXIgdT1uLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCksZj1uZXcgQXJyYXkoci5sZW5ndGgpLGg9MDtoPHIubGVuZ3RoO2grKylmW2hdPW8odSxyW2hdKTt0W2NdPWZ9fX07dmFyIGk9e2lkczoiaWQiLGxvY2F0aW9uczoibG9jYXRpb24iLGxhYmVsczoibGFiZWwiLHZhbHVlczoidmFsdWUiLCJtYXJrZXIuY29sb3JzIjoiY29sb3IiLHBhcmVudHM6InBhcmVudCJ9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIGlbdF18fHR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFtlWzBdXSk/dFtlWzBdXVtlWzFdXTp2b2lkIDA6dFtlXX12YXIgcz17eDohMCx5OiEwfSxsPXsieCB1bmlmaWVkIjohMCwieSB1bmlmaWVkIjohMH07ci5pc1VuaWZpZWRIb3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhbFt0XX0sci5pc1hZaG92ZXI9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYhIXNbdF19fSx7Ii4uLy4uL2xpYiI6NDk4fV0sMzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCIuLi8uLi9saWIiKSxzPW8uc3RyVHJhbnNsYXRlLGw9by5zdHJSb3RhdGUsYz10KCIuLi8uLi9saWIvZXZlbnRzIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSxoPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2NvbG9yIiksZD10KCIuLi9kcmFnZWxlbWVudCIpLG09dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksdj10KCIuL2hlbHBlcnMiKSx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuLi9sZWdlbmQvZGVmYXVsdHMiKSxiPXQoIi4uL2xlZ2VuZC9kcmF3IiksXz15LllBTkdMRSx3PU1hdGguUEkqXy8xODAsVD0xL01hdGguc2luKHcpLGs9TWF0aC5jb3ModyksQT1NYXRoLnNpbih3KSxNPXkuSE9WRVJBUlJPV1NJWkUsUz15LkhPVkVSVEVYVFBBRCxFPXtib3g6ITAsb2hsYzohMCx2aW9saW46ITAsY2FuZGxlc3RpY2s6ITB9LEw9e3NjYXR0ZXI6ITAsc2NhdHRlcmdsOiEwLHNwbG9tOiEwfTtmdW5jdGlvbiBDKHQpe3JldHVyblt0LnRyYWNlLmluZGV4LHQuaW5kZXgsdC54MCx0LnkwLHQubmFtZSx0LmF0dHIsdC54YT90LnhhLl9pZDoiIix0LnlhP3QueWEuX2lkOiIiXS5qb2luKCIsIil9ci5ob3Zlcj1mdW5jdGlvbih0LGUscixhKXt0PW8uZ2V0R3JhcGhEaXYodCk7dmFyIHM9ZS50YXJnZXQ7by50aHJvdHRsZSh0Ll9mdWxsTGF5b3V0Ll91aWQreS5IT1ZFUklELHkuSE9WRVJNSU5USU1FLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscixhLHMpe3J8fChyPSJ4eSIpO3ZhciBsPUFycmF5LmlzQXJyYXkocik/cjpbcl0sdT10Ll9mdWxsTGF5b3V0LGg9dS5fcGxvdHN8fFtdLG09aFtyXSx5PXUuX2hhcygiY2FydGVzaWFuIik7aWYobSl7dmFyIHg9bS5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpO2w9bC5jb25jYXQoeCl9Zm9yKHZhciBiPWwubGVuZ3RoLF89bmV3IEFycmF5KGIpLHc9bmV3IEFycmF5KGIpLGs9ITEsQT0wO0E8YjtBKyspe3ZhciBNPWxbQV07aWYoaFtNXSlrPSEwLF9bQV09aFtNXS54YXhpcyx3W0FdPWhbTV0ueWF4aXM7ZWxzZXtpZighdVtNXXx8IXVbTV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitNKTt2YXIgUz11W01dLl9zdWJwbG90O19bQV09Uy54YXhpcyx3W0FdPVMueWF4aXN9fXZhciBQPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtQJiYhayYmKFA9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihQKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGQudW5ob3ZlclJhdyh0LGUpO3ZhciBPPXUuaG92ZXJkaXN0YW5jZTstMT09PU8mJihPPTEvMCk7dmFyIEI9dS5zcGlrZWRpc3RhbmNlOy0xPT09QiYmKEI9MS8wKTt2YXIgVixILHEsRyxZLFcsWCxaLEosSyxRLCQsdHQsZXQ9W10scnQ9W10sbnQ9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LGl0PSExO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKFA9ImFycmF5IixxPTA7cTxlLmxlbmd0aDtxKyspKFk9dC5jYWxjZGF0YVtlW3FdLmN1cnZlTnVtYmVyfHwwXSkmJihXPVlbMF0udHJhY2UsInNraXAiIT09WVswXS50cmFjZS5ob3ZlcmluZm8mJihydC5wdXNoKFkpLCJoIj09PVcub3JpZW50YXRpb24mJihpdD0hMCkpKTtlbHNle2ZvcihHPTA7Rzx0LmNhbGNkYXRhLmxlbmd0aDtHKyspWT10LmNhbGNkYXRhW0ddLCJza2lwIiE9PShXPVlbMF0udHJhY2UpLmhvdmVyaW5mbyYmdi5pc1RyYWNlSW5TdWJwbG90cyhXLGwpJiYocnQucHVzaChZKSwiaCI9PT1XLm9yaWVudGF0aW9uJiYoaXQ9ITApKTt2YXIgYXQsb3Q7aWYoIXMpYXQ9InhweCJpbiBlP2UueHB4Ol9bMF0uX2xlbmd0aC8yLG90PSJ5cHgiaW4gZT9lLnlweDp3WzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgc3Q9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthdD1lLmNsaWVudFgtc3QubGVmdCxvdD1lLmNsaWVudFktc3QudG9wLHUuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBsdD1vLmFwcGx5M0RUcmFuc2Zvcm0odS5faW52VHJhbnNmb3JtKShhdCxvdCk7aWYoYXQ9bHRbMF0sb3Q9bHRbMV0sYXQ8MHx8YXQ+X1swXS5fbGVuZ3RofHxvdDwwfHxvdD53WzBdLl9sZW5ndGgpcmV0dXJuIGQudW5ob3ZlclJhdyh0LGUpfWlmKGUucG9pbnRlclg9YXQrX1swXS5fb2Zmc2V0LGUucG9pbnRlclk9b3Qrd1swXS5fb2Zmc2V0LFY9Inh2YWwiaW4gZT92LmZsYXQobCxlLnh2YWwpOnYucDJjKF8sYXQpLEg9Inl2YWwiaW4gZT92LmZsYXQobCxlLnl2YWwpOnYucDJjKHcsb3QpLCFpKFZbMF0pfHwhaShIWzBdKSlyZXR1cm4gby53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLGUsdCksZC51bmhvdmVyUmF3KHQsZSl9dmFyIGN0PTEvMDtmdW5jdGlvbiB1dCh0LHIpe2ZvcihHPTA7RzxydC5sZW5ndGg7RysrKWlmKChZPXJ0W0ddKSYmWVswXSYmWVswXS50cmFjZSYmITA9PT0oVz1ZWzBdLnRyYWNlKS52aXNpYmxlJiYwIT09Vy5fbGVuZ3RoJiYtMT09PVsiY2FycGV0IiwiY29udG91cmNhcnBldCJdLmluZGV4T2YoVy5fbW9kdWxlLm5hbWUpKXtpZigic3Bsb20iPT09Vy50eXBlP1g9bFtaPTBdOihYPXYuZ2V0U3VicGxvdChXKSxaPWwuaW5kZXhPZihYKSksSj1QLHYuaXNVbmlmaWVkSG92ZXIoSikmJihKPUouY2hhckF0KDApKSwkPXtjZDpZLHRyYWNlOlcseGE6X1taXSx5YTp3W1pdLG1heEhvdmVyRGlzdGFuY2U6TyxtYXhTcGlrZURpc3RhbmNlOkIsaW5kZXg6ITEsZGlzdGFuY2U6TWF0aC5taW4oY3QsTyksc3Bpa2VEaXN0YW5jZToxLzAseFNwaWtlOnZvaWQgMCx5U3Bpa2U6dm9pZCAwLGNvbG9yOnAuZGVmYXVsdExpbmUsbmFtZTpXLm5hbWUseDA6dm9pZCAwLHgxOnZvaWQgMCx5MDp2b2lkIDAseTE6dm9pZCAwLHhMYWJlbFZhbDp2b2lkIDAseUxhYmVsVmFsOnZvaWQgMCx6TGFiZWxWYWw6dm9pZCAwLHRleHQ6dm9pZCAwfSx1W1hdJiYoJC5zdWJwbG90PXVbWF0uX3N1YnBsb3QpLHUuX3NwbG9tU2NlbmVzJiZ1Ll9zcGxvbVNjZW5lc1tXLnVpZF0mJigkLnNjZW5lPXUuX3NwbG9tU2NlbmVzW1cudWlkXSksdHQ9ZXQubGVuZ3RoLCJhcnJheSI9PT1KKXt2YXIgbj1lW0ddOyJwb2ludE51bWJlciJpbiBuPygkLmluZGV4PW4ucG9pbnROdW1iZXIsSj0iY2xvc2VzdCIpOihKPSIiLCJ4dmFsImluIG4mJihLPW4ueHZhbCxKPSJ4IiksInl2YWwiaW4gbiYmKFE9bi55dmFsLEo9Sj8iY2xvc2VzdCI6InkiKSl9ZWxzZSB2b2lkIDAhPT10JiZ2b2lkIDAhPT1yPyhLPXQsUT1yKTooSz1WW1pdLFE9SFtaXSk7aWYoMCE9PU8paWYoVy5fbW9kdWxlJiZXLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBhPVcuX21vZHVsZS5ob3ZlclBvaW50cygkLEssUSxKLHtmaW5pdGVSYW5nZTohMCxob3ZlckxheWVyOnUuX2hvdmVybGF5ZXJ9KTtpZihhKWZvcih2YXIgcyxjPTA7YzxhLmxlbmd0aDtjKyspcz1hW2NdLGkocy54MCkmJmkocy55MCkmJmV0LnB1c2goRChzLFApKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLFcpO2lmKCJjbG9zZXN0Ij09PVAmJmV0Lmxlbmd0aD50dCYmKGV0LnNwbGljZSgwLHR0KSxjdD1ldFswXS5kaXN0YW5jZSkseSYmMCE9PUImJjA9PT1ldC5sZW5ndGgpeyQuZGlzdGFuY2U9QiwkLmluZGV4PSExO3ZhciBmPVcuX21vZHVsZS5ob3ZlclBvaW50cygkLEssUSwiY2xvc2VzdCIse2hvdmVyTGF5ZXI6dS5faG92ZXJsYXllcn0pO2lmKGYmJihmPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGlrZURpc3RhbmNlPD1CfSkpKSxmJiZmLmxlbmd0aCl7dmFyIGgsZD1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnhhLnNwaWtlc25hcH0pKTtpZihkLmxlbmd0aCl7dmFyIG09ZFswXTtpKG0ueDApJiZpKG0ueTApJiYoaD1odChtKSwoIW50LnZMaW5lUG9pbnR8fG50LnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5oLnNwaWtlRGlzdGFuY2UpJiYobnQudkxpbmVQb2ludD1oKSl9dmFyIGc9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXMmJiJob3ZlcmVkIGRhdGEiIT09dC55YS5zcGlrZXNuYXB9KSk7aWYoZy5sZW5ndGgpe3ZhciB4PWdbMF07aSh4LngwKSYmaSh4LnkwKSYmKGg9aHQoeCksKCFudC5oTGluZVBvaW50fHxudC5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+aC5zcGlrZURpc3RhbmNlKSYmKG50LmhMaW5lUG9pbnQ9aCkpfX19fX1mdW5jdGlvbiBmdCh0LGUscil7Zm9yKHZhciBuLGk9bnVsbCxhPTEvMCxvPTA7bzx0Lmxlbmd0aDtvKyspbj10W29dLnNwaWtlRGlzdGFuY2UsciYmMD09PW8mJihuPS0xLzApLG48PWEmJm48PWUmJihpPXRbb10sYT1uKTtyZXR1cm4gaX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gdD97eGE6dC54YSx5YTp0LnlhLHg6dm9pZCAwIT09dC54U3Bpa2U/dC54U3Bpa2U6KHQueDArdC54MSkvMix5OnZvaWQgMCE9PXQueVNwaWtlP3QueVNwaWtlOih0LnkwK3QueTEpLzIsZGlzdGFuY2U6dC5kaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQuc3Bpa2VEaXN0YW5jZSxjdXJ2ZU51bWJlcjp0LnRyYWNlLmluZGV4LGNvbG9yOnQuY29sb3IscG9pbnROdW1iZXI6dC5pbmRleH06bnVsbH11dCgpO3ZhciBwdD17ZnVsbExheW91dDp1LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLGV2ZW50OmV9LGR0PXQuX3NwaWtlcG9pbnRzLG10PXt2TGluZVBvaW50Om50LnZMaW5lUG9pbnQsaExpbmVQb2ludDpudC5oTGluZVBvaW50fTt0Ll9zcGlrZXBvaW50cz1tdDt2YXIgZ3Q9ZnVuY3Rpb24oKXtldC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlLWUuZGlzdGFuY2V9KSksZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5jaGFyQXQoMCksbj1bXSxpPVtdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2cudHJhY2VJcyhzLnRyYWNlLCJiYXItbGlrZSIpfHxnLnRyYWNlSXMocy50cmFjZSwiYm94LXZpb2xpbiIpP2EucHVzaChzKTpzLnRyYWNlW3IrInBlcmlvZCJdP2kucHVzaChzKTpuLnB1c2gocyl9cmV0dXJuIG4uY29uY2F0KGkpLmNvbmNhdChhKX0oZXQsUCl9O2d0KCk7dmFyIHZ0PVAuY2hhckF0KDApLHl0PSgieCI9PT12dHx8InkiPT09dnQpJiZldFswXSYmTFtldFswXS50cmFjZS50eXBlXTtpZih5JiYwIT09QiYmMCE9PWV0Lmxlbmd0aCl7dmFyIHh0PWZ0KGV0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pKSxCLHl0KTtudC5oTGluZVBvaW50PWh0KHh0KTt2YXIgYnQ9ZnQoZXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSkpLEIseXQpO250LnZMaW5lUG9pbnQ9aHQoYnQpfWlmKDA9PT1ldC5sZW5ndGgpe3ZhciBfdD1kLnVuaG92ZXJSYXcodCxlKTtyZXR1cm4heXx8bnVsbD09PW50LmhMaW5lUG9pbnQmJm51bGw9PT1udC52TGluZVBvaW50fHxGKGR0KSYmUih0LG50LHB0KSxfdH15JiZGKGR0KSYmUih0LG50LHB0KTtpZih2LmlzWFlob3ZlcihKKSYmMCE9PWV0WzBdLmxlbmd0aCYmInNwbG9tIiE9PWV0WzBdLnRyYWNlLnR5cGUpe3ZhciB3dD1ldFswXSxUdD0oZXQ9RVt3dC50cmFjZS50eXBlXT9ldC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLmluZGV4PT09d3QudHJhY2UuaW5kZXh9KSk6W3d0XSkubGVuZ3RoLGt0PU4oIngiLHd0LHUpLEF0PU4oInkiLHd0LHUpO3V0KGt0LEF0KTt2YXIgTXQsU3Q9W10sRXQ9e30sTHQ9MCxDdD1mdW5jdGlvbih0KXt2YXIgZT1FW3QudHJhY2UudHlwZV0/Qyh0KTp0LnRyYWNlLmluZGV4O2lmKEV0W2VdKXt2YXIgcj1FdFtlXS0xLG49U3Rbcl07cj4wJiZNYXRoLmFicyh0LmRpc3RhbmNlKTxNYXRoLmFicyhuLmRpc3RhbmNlKSYmKFN0W3JdPXQpfWVsc2UgTHQrKyxFdFtlXT1MdCxTdC5wdXNoKHQpfTtmb3IoTXQ9MDtNdDxUdDtNdCsrKUN0KGV0W010XSk7Zm9yKE10PWV0Lmxlbmd0aC0xO010PlR0LTE7TXQtLSlDdChldFtNdF0pO2V0PVN0LGd0KCl9dmFyIFB0PXQuX2hvdmVyZGF0YSxJdD1bXSxPdD1qKHQpLHp0PVUodCk7Zm9yKHE9MDtxPGV0Lmxlbmd0aDtxKyspe3ZhciBEdD1ldFtxXSxSdD12Lm1ha2VFdmVudERhdGEoRHQsRHQudHJhY2UsRHQuY2QpO2lmKCExIT09RHQuaG92ZXJ0ZW1wbGF0ZSl7dmFyIEZ0PSExO0R0LmNkW0R0LmluZGV4XSYmRHQuY2RbRHQuaW5kZXhdLmh0JiYoRnQ9RHQuY2RbRHQuaW5kZXhdLmh0KSxEdC5ob3ZlcnRlbXBsYXRlPUZ0fHxEdC50cmFjZS5ob3ZlcnRlbXBsYXRlfHwhMX1pZihEdC54YSYmRHQueWEpe3ZhciBCdD1EdC54MCtEdC54YS5fb2Zmc2V0LE50PUR0LngxK0R0LnhhLl9vZmZzZXQsanQ9RHQueTArRHQueWEuX29mZnNldCxVdD1EdC55MStEdC55YS5fb2Zmc2V0LFZ0PU1hdGgubWluKEJ0LE50KSxIdD1NYXRoLm1heChCdCxOdCkscXQ9TWF0aC5taW4oanQsVXQpLEd0PU1hdGgubWF4KGp0LFV0KTtSdC5iYm94PXt4MDpWdCt6dCx4MTpIdCt6dCx5MDpxdCtPdCx5MTpHdCtPdH19RHQuZXZlbnREYXRhPVtSdF0sSXQucHVzaChSdCl9dC5faG92ZXJkYXRhPUl0O3ZhciBZdD0ieSI9PT1QJiYocnQubGVuZ3RoPjF8fGV0Lmxlbmd0aD4xKXx8ImNsb3Nlc3QiPT09UCYmaXQmJmV0Lmxlbmd0aD4xLFd0PXAuY29tYmluZSh1LnBsb3RfYmdjb2xvcnx8cC5iYWNrZ3JvdW5kLHUucGFwZXJfYmdjb2xvciksWHQ9SShldCx7Z2Q6dCxob3Zlcm1vZGU6UCxyb3RhdGVMYWJlbHM6WXQsYmdDb2xvcjpXdCxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlci5ub2RlKCksY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0pO3YuaXNVbmlmaWVkSG92ZXIoUCl8fCghZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHU9MCxmPTEsaD10LnNpemUoKSxwPW5ldyBBcnJheShoKSxkPTA7ZnVuY3Rpb24gbSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX10LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXRbZV0saT0ieCI9PT1uLl9pZC5jaGFyQXQoMCksYT1uLnJhbmdlOzA9PT1kJiZhJiZhWzBdPmFbMV0hPT1pJiYoZj0tMSkscFtkKytdPVt7ZGF0dW06dCx0cmFjZUluZGV4OnQudHJhY2UuaW5kZXgsZHA6MCxwb3M6dC5wb3MscG9zcmVmOnQucG9zcmVmLHNpemU6dC5ieSooaT9UOjEpLzIscG1pbjowLHBtYXg6aT9yLndpZHRoOnIuaGVpZ2h0fV19KSkscC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnBvc3JlZi1lWzBdLnBvc3JlZnx8ZiooZVswXS50cmFjZUluZGV4LXRbMF0udHJhY2VJbmRleCl9KSk7Zm9yKDshbiYmdTw9aDspe2Zvcih1Kyssbj0hMCxvPTA7bzxwLmxlbmd0aC0xOyl7dmFyIGc9cFtvXSx2PXBbbysxXSx5PWdbZy5sZW5ndGgtMV0seD12WzBdO2lmKChpPXkucG9zK3kuZHAreS5zaXplLXgucG9zLXguZHAreC5zaXplKT4uMDEmJnkucG1pbj09PXgucG1pbiYmeS5wbWF4PT09eC5wbWF4KXtmb3Iocz12Lmxlbmd0aC0xO3M+PTA7cy0tKXZbc10uZHArPWk7Zm9yKGcucHVzaC5hcHBseShnLHYpLHAuc3BsaWNlKG8rMSwxKSxjPTAscz1nLmxlbmd0aC0xO3M+PTA7cy0tKWMrPWdbc10uZHA7Zm9yKGE9Yy9nLmxlbmd0aCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pZ1tzXS5kcC09YTtuPSExfWVsc2UgbysrfXAuZm9yRWFjaChtKX1mb3Iobz1wLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYj1wW29dO2ZvcihzPWIubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBfPWJbc10sdz1fLmRhdHVtO3cub2Zmc2V0PV8uZHAsdy5kZWw9Xy5kZWx9fX0oWHQsWXQ/InhhIjoieWEiLHUpLHooWHQsWXQsdS5faW52U2NhbGVYLHUuX2ludlNjYWxlWSkpO2lmKHMmJnMudGFnTmFtZSl7dmFyIFp0PWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxJdCk7ZihuLnNlbGVjdChzKSxadD8icG9pbnRlciI6IiIpfWlmKCFzfHxhfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKXx8U3RyaW5nKGkucG9pbnROdW1iZXJzKSE9PVN0cmluZyhhLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxQdCkpcmV0dXJuO1B0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6UHR9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpfLHlheGVzOncseHZhbHM6Vix5dmFsczpIfSl9KHQsZSxyLGEscyl9KSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7QXJyYXkuaXNBcnJheSh0KXx8KHI9ITEsdD1bdF0pO3ZhciBpPWUuZ2QsYT1qKGkpLG89VShpKSxzPUkodC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPXQuX3gwfHx0LngwfHx0Lnh8fDAsbj10Ll94MXx8dC54MXx8dC54fHwwLHM9dC5feTB8fHQueTB8fHQueXx8MCxsPXQuX3kxfHx0LnkxfHx0Lnl8fDAsYz10LmV2ZW50RGF0YTtpZihjKXt2YXIgdT1NYXRoLm1pbihyLG4pLGY9TWF0aC5tYXgocixuKSxoPU1hdGgubWluKHMsbCksZD1NYXRoLm1heChzLGwpLG09dC50cmFjZTtpZihnLnRyYWNlSXMobSwiZ2wzZCIpKXt2YXIgdj1pLl9mdWxsTGF5b3V0W20uc2NlbmVdLl9zY2VuZS5jb250YWluZXIseT12Lm9mZnNldExlZnQseD12Lm9mZnNldFRvcDt1Kz15LGYrPXksaCs9eCxkKz14fWMuYmJveD17eDA6dStvLHgxOmYrbyx5MDpoK2EseTE6ZCthfSxlLmluT3V0X2Jib3gmJmUuaW5PdXRfYmJveC5wdXNoKGMuYmJveCl9ZWxzZSBjPSExO3JldHVybntjb2xvcjp0LmNvbG9yfHxwLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLG5hbWVMZW5ndGg6dC5uYW1lTGVuZ3RoLHRleHRBbGlnbjp0LnRleHRBbGlnbix0cmFjZTp0LnRyYWNlfHx7aW5kZXg6MCxob3ZlcmluZm86IiJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMSxldmVudERhdGE6Y319KSkse2dkOmksaG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fHAuYmFja2dyb3VuZCxjb250YWluZXI6bi5zZWxlY3QoZS5jb250YWluZXIpLG91dGVyQ29udGFpbmVyOmUub3V0ZXJDb250YWluZXJ8fGUuY29udGFpbmVyfSksbD0wLGM9MDtyZXR1cm4gcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSkuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10LnkwLXQuYnkvMjt0Lm9mZnNldD1uLTU8bD9sLW4rNTowLGw9bit0LmJ5K3Qub2Zmc2V0LHI9PT1lLmFuY2hvckluZGV4JiYoYz10Lm9mZnNldCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dC5vZmZzZXQtPWN9KSkseihzLCExLGkuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxpLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVkpLHI/czpzLm5vZGUoKX07dmFyIFA9LzxleHRyYT4oW1xzXFNdKik8XC9leHRyYT4vO2Z1bmN0aW9uIEkodCxlKXt2YXIgcj1lLmdkLGk9ci5fZnVsbExheW91dCxhPWUuaG92ZXJtb2RlLGM9ZS5yb3RhdGVMYWJlbHMsZj1lLmJnQ29sb3IsZD1lLmNvbnRhaW5lcixtPWUub3V0ZXJDb250YWluZXIsdz1lLmNvbW1vbkxhYmVsT3B0c3x8e307aWYoMD09PXQubGVuZ3RoKXJldHVybltbXV07dmFyIFQ9ZS5mb250RmFtaWx5fHx5LkhPVkVSRk9OVCxrPWUuZm9udFNpemV8fHkuSE9WRVJGT05UU0laRSxBPXRbMF0sRT1BLnhhLEw9QS55YSxQPWEuY2hhckF0KDApLEk9QVtQKyJMYWJlbCJdLHo9VihyLG0pLEQ9ei50b3AsUj16LndpZHRoLEY9ei5oZWlnaHQsQj12b2lkIDAhPT1JJiZBLmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1hfHwieSI9PT1hKTtpZihCKXt2YXIgTixqLFU9ITA7Zm9yKE49MDtOPHQubGVuZ3RoO04rKylpZihVJiZ2b2lkIDA9PT10W05dLnpMYWJlbCYmKFU9ITEpLGo9dFtOXS5ob3ZlcmluZm98fHRbTl0udHJhY2UuaG92ZXJpbmZvKXt2YXIgSD1BcnJheS5pc0FycmF5KGopP2o6ai5zcGxpdCgiKyIpO2lmKC0xPT09SC5pbmRleE9mKCJhbGwiKSYmLTE9PT1ILmluZGV4T2YoYSkpe0I9ITE7YnJlYWt9fVUmJihCPSExKX12YXIgcT1kLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoQj9bMF06W10pO2lmKHEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzdGV4dCIsITApLHEuZXhpdCgpLnJlbW92ZSgpLHEuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPW8uZW5zdXJlU2luZ2xlKHQsInBhdGgiLCIiLChmdW5jdGlvbih0KXt0LnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkpLGw9by5lbnN1cmVTaW5nbGUodCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz13LmJnY29sb3J8fHAuZGVmYXVsdExpbmUsZj13LmJvcmRlcmNvbG9yfHxwLmNvbnRyYXN0KGMpLGQ9cC5jb250cmFzdChjKSxtPXtmYW1pbHk6dy5mb250LmZhbWlseXx8VCxzaXplOncuZm9udC5zaXplfHxrLGNvbG9yOncuZm9udC5jb2xvcnx8ZH07ZS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSksbC50ZXh0KEkpLmNhbGwoaC5mb250LG0pLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLHQuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIGcsdix5PVYocixsLm5vZGUoKSk7aWYoIngiPT09YSl7dmFyIHg9InRvcCI9PT1FLnNpZGU/Ii0iOiIiO2wuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1FLnNpZGU/RC15LmJvdHRvbS1NLVM6RC15LnRvcCtNK1MpLGc9RS5fb2Zmc2V0KyhBLngwK0EueDEpLzIsdj1MLl9vZmZzZXQrKCJ0b3AiPT09RS5zaWRlPzA6TC5fbGVuZ3RoKTt2YXIgYj15LndpZHRoLzIrUztnPGI/KGc9YixlLmF0dHIoImQiLCJNLSIrKGItTSkrIiwwTC0iKyhiLTIqTSkrIiwiK3grTSsiSCIrKFMreS53aWR0aC8yKSsidiIreCsoMipTK3kuaGVpZ2h0KSsiSC0iK2IrIlYiK3grTSsiWiIpKTpnPmkud2lkdGgtYj8oZz1pLndpZHRoLWIsZS5hdHRyKCJkIiwiTSIrKGItTSkrIiwwTCIrYisiLCIreCtNKyJ2Iit4KygyKlMreS5oZWlnaHQpKyJILSIrYisiViIreCtNKyJIIisoYi0yKk0pKyJaIikpOmUuYXR0cigiZCIsIk0wLDBMIitNKyIsIit4K00rIkgiKyhTK3kud2lkdGgvMikrInYiK3grKDIqUyt5LmhlaWdodCkrIkgtIisoUyt5LndpZHRoLzIpKyJWIit4K00rIkgtIitNKyJaIil9ZWxzZXt2YXIgXyxDLFA7InJpZ2h0Ij09PUwuc2lkZT8oXz0ic3RhcnQiLEM9MSxQPSIiLGc9RS5fb2Zmc2V0K0UuX2xlbmd0aCk6KF89ImVuZCIsQz0tMSxQPSItIixnPUUuX29mZnNldCksdj1MLl9vZmZzZXQrKEEueTArQS55MSkvMixsLmF0dHIoInRleHQtYW5jaG9yIixfKSxlLmF0dHIoImQiLCJNMCwwTCIrUCtNKyIsIitNKyJWIisoUyt5LmhlaWdodC8yKSsiaCIrUCsoMipTK3kud2lkdGgpKyJWLSIrKFMreS5oZWlnaHQvMikrIkgiK1ArTSsiVi0iK00rIloiKTt2YXIgTyx6PXkuaGVpZ2h0LzIsUj1ELXkudG9wLXosRj0iY2xpcCIraS5fdWlkKyJjb21tb25sYWJlbCIrTC5faWQ7aWYoZzx5LndpZHRoKzIqUytNKXtPPSJNLSIrKE0rUykrIi0iK3orImgtIisoeS53aWR0aC1TKSsiViIreisiaCIrKHkud2lkdGgtUykrIloiO3ZhciBCPXkud2lkdGgtZytTO3UucG9zaXRpb25UZXh0KGwsQixSKSwiZW5kIj09PV8mJmwuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1oLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KHQudGV4dCgpKS5jYWxsKGguZm9udCxtKSxpPVYocixlLm5vZGUoKSk7TWF0aC5yb3VuZChpLndpZHRoKTxNYXRoLnJvdW5kKHkud2lkdGgpJiZ0LmF0dHIoIngiLEItaS53aWR0aCksZS5yZW1vdmUoKX0pKX1lbHNlIHUucG9zaXRpb25UZXh0KGwsQyooUytNKSxSKSxPPW51bGw7dmFyIE49aS5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitGKS5kYXRhKE8/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixGKS5hcHBlbmQoInBhdGgiKSxOLmV4aXQoKS5yZW1vdmUoKSxOLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE8pLGguc2V0Q2xpcFVybChsLE8/RjpudWxsLHIpfXQuYXR0cigidHJhbnNmb3JtIixzKGcsdikpfSkpLHYuaXNVbmlmaWVkSG92ZXIoYSkpe2Quc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpO3ZhciBHPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSIhPT10LmhvdmVyaW5mb30pKTtpZigwPT09Ry5sZW5ndGgpcmV0dXJuO3ZhciBZPWkuaG92ZXJsYWJlbCxXPVkuZm9udCxYPXtzaG93bGVnZW5kOiEwLGxlZ2VuZDp7dGl0bGU6e3RleHQ6SSxmb250Old9LGZvbnQ6VyxiZ2NvbG9yOlkuYmdjb2xvcixib3JkZXJjb2xvcjpZLmJvcmRlcmNvbG9yLGJvcmRlcndpZHRoOjEsdHJhY2Vncm91cGdhcDo3LHRyYWNlb3JkZXI6aS5sZWdlbmQ/aS5sZWdlbmQudHJhY2VvcmRlcjp2b2lkIDAsb3JpZW50YXRpb246InYifX0sWj17Zm9udDpXfTt4KFgsWixyLl9mdWxsRGF0YSk7dmFyIEo9Wi5sZWdlbmQ7Si5lbnRyaWVzPVtdO2Zvcih2YXIgSz0wO0s8Ry5sZW5ndGg7SysrKXt2YXIgUT1HW0tdO2lmKCJub25lIiE9PVEuaG92ZXJpbmZvKXt2YXIgJD1PKFEsITAsYSxpLEkpLHR0PSRbMF0sZXQ9JFsxXTtRLm5hbWU9ZXQsUS50ZXh0PSIiIT09ZXQ/ZXQrIiA6ICIrdHQ6dHQ7dmFyIHJ0PVEuY2RbUS5pbmRleF07cnQmJihydC5tYyYmKFEubWM9cnQubWMpLHJ0Lm1jYyYmKFEubWM9cnQubWNjKSxydC5tbGMmJihRLm1sYz1ydC5tbGMpLHJ0Lm1sY2MmJihRLm1sYz1ydC5tbGNjKSxydC5tbHcmJihRLm1sdz1ydC5tbHcpLHJ0Lm1yYyYmKFEubXJjPXJ0Lm1yYykscnQuZGlyJiYoUS5kaXI9cnQuZGlyKSksUS5fZGlzdGluY3Q9ITAsSi5lbnRyaWVzLnB1c2goW1FdKX19Si5lbnRyaWVzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0udHJhY2UuaW5kZXgtZVswXS50cmFjZS5pbmRleH0pKSxKLmxheWVyPWQsSi5faW5Ib3Zlcj0hMCxKLl9ncm91cFRpdGxlRm9udD1ZLmdyb3VwdGl0bGVmb250LGIocixKKTt2YXIgbnQsaXQsYXQsb3Qsc3Q9ZC5zZWxlY3QoImcubGVnZW5kIiksbHQ9VihyLHN0Lm5vZGUoKSksY3Q9bHQud2lkdGgrMipTLHV0PWx0LmhlaWdodCsyKlMsZnQ9R1swXSxodD0oZnQueDArZnQueDEpLzIscHQ9KGZ0LnkwK2Z0LnkxKS8yLGR0PSEoZy50cmFjZUlzKGZ0LnRyYWNlLCJiYXItbGlrZSIpfHxnLnRyYWNlSXMoZnQudHJhY2UsImJveC12aW9saW4iKSk7InkiPT09UD9kdD8oaXQ9cHQtUyxudD1wdCtTKTooaXQ9TWF0aC5taW4uYXBwbHkobnVsbCxHLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHQueTAsdC55MSl9KSkpLG50PU1hdGgubWF4LmFwcGx5KG51bGwsRy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LnkwLHQueTEpfSkpKSk6aXQ9bnQ9by5tZWFuKEcubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC55MCt0LnkxKS8yfSkpKS11dC8yLCJ4Ij09PVA/ZHQ/KGF0PWh0K1Msb3Q9aHQtUyk6KGF0PU1hdGgubWF4LmFwcGx5KG51bGwsRy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LngwLHQueDEpfSkpKSxvdD1NYXRoLm1pbi5hcHBseShudWxsLEcubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4odC54MCx0LngxKX0pKSkpOmF0PW90PW8ubWVhbihHLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQueDArdC54MSkvMn0pKSktY3QvMjt2YXIgbXQsZ3QsdnQ9RS5fb2Zmc2V0LHl0PUwuX29mZnNldDtyZXR1cm4gb3QrPXZ0LWN0LGl0Kz15dC11dCxtdD0oYXQrPXZ0KStjdDxSJiZhdD49MD9hdDpvdCtjdDxSJiZvdD49MD9vdDp2dCtjdDxSP3Z0OmF0LWh0PGh0LW90K2N0P1ItY3Q6MCxtdCs9UyxndD0obnQrPXl0KSt1dDxGJiZudD49MD9udDppdCt1dDxGJiZpdD49MD9pdDp5dCt1dDxGP3l0Om50LXB0PHB0LWl0K3V0P0YtdXQ6MCxndCs9UyxzdC5hdHRyKCJ0cmFuc2Zvcm0iLHMobXQtMSxndC0xKSksc3R9dmFyIHh0PWQuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCwoZnVuY3Rpb24odCl7cmV0dXJuIEModCl9KSk7cmV0dXJuIHh0LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwocC5maWxsLHAuYWRkT3BhY2l0eShmLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbChoLmZvbnQsVCxrKX0pKSx4dC5leGl0KCkucmVtb3ZlKCkseHQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbz10LmNvbG9yO0FycmF5LmlzQXJyYXkobykmJihvPW9bdC5ldmVudERhdGFbMF0ucG9pbnROdW1iZXJdKTt2YXIgZD10LmJnY29sb3J8fG8sbT1wLmNvbWJpbmUocC5vcGFjaXR5KGQpP2Q6cC5kZWZhdWx0TGluZSxmKSxnPXAuY29tYmluZShwLm9wYWNpdHkobyk/bzpwLmRlZmF1bHRMaW5lLGYpLHY9dC5ib3JkZXJDb2xvcnx8cC5jb250cmFzdChtKSx5PU8odCxCLGEsaSxJLGUpLHg9eVswXSxiPXlbMV0sdz1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChoLmZvbnQsdC5mb250RmFtaWx5fHxULHQuZm9udFNpemV8fGssdC5mb250Q29sb3J8fHYpLnRleHQoeCkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksQT1lLnNlbGVjdCgidGV4dC5uYW1lIiksRT0wLEw9MDtpZihiJiZiIT09eCl7QS5jYWxsKGguZm9udCx0LmZvbnRGYW1pbHl8fFQsdC5mb250U2l6ZXx8ayxnKS50ZXh0KGIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpO3ZhciBDPVYocixBLm5vZGUoKSk7RT1DLndpZHRoKzIqUyxMPUMuaGVpZ2h0KzIqU31lbHNlIEEucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTtlLnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOm0sc3Ryb2tlOnZ9KTt2YXIgUD10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMix6PXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLE49TWF0aC5hYnModC54MS10LngwKSxqPU1hdGguYWJzKHQueTEtdC55MCksVT1WKHIsdy5ub2RlKCkpLEg9VS53aWR0aC9pLl9pbnZTY2FsZVgscT1VLmhlaWdodC9pLl9pbnZTY2FsZVk7dC50eTA9KEQtVS50b3ApL2kuX2ludlNjYWxlWSx0LmJ4PUgrMipTLHQuYnk9TWF0aC5tYXgocSsyKlMsTCksdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9SCx0LnR4MndpZHRoPUUsdC5vZmZzZXQ9MDt2YXIgRyxZLFc9KEgrTStTK0UpKmkuX2ludlNjYWxlWDtpZihjKXQucG9zPVAsRz16K2ovMitXPD1GLFk9ei1qLzItVz49MCwidG9wIiE9PXQuaWRlYWxBbGlnbiYmR3x8IVk/Rz8oeis9ai8yLHQuYW5jaG9yPSJzdGFydCIpOnQuYW5jaG9yPSJtaWRkbGUiOih6LT1qLzIsdC5hbmNob3I9ImVuZCIpO2Vsc2UgaWYodC5wb3M9eixHPVArTi8yK1c8PVIsWT1QLU4vMi1XPj0wLCJsZWZ0IiE9PXQuaWRlYWxBbGlnbiYmR3x8IVkpaWYoRylQKz1OLzIsdC5hbmNob3I9InN0YXJ0IjtlbHNle3QuYW5jaG9yPSJtaWRkbGUiO3ZhciBYPVcvMixaPVArWC1SLEo9UC1YO1o+MCYmKFAtPVopLEo8MCYmKFArPS1KKX1lbHNlIFAtPU4vMix0LmFuY2hvcj0iZW5kIjt3LmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksRSYmQS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLGUuYXR0cigidHJhbnNmb3JtIixzKFAseikrKGM/bChfKToiIikpfSkpLHh0fWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe3ZhciBzPSIiLGw9IiI7dm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSYmKHQudHJhY2UuX21ldGEmJih0Lm5hbWU9by50ZW1wbGF0ZVN0cmluZyh0Lm5hbWUsdC50cmFjZS5fbWV0YSkpLHM9Qih0Lm5hbWUsdC5uYW1lTGVuZ3RoKSk7dmFyIGM9ci5jaGFyQXQoMCksdT0ieCI9PT1jPyJ5IjoieCI7dm9pZCAwIT09dC56TGFiZWw/KHZvaWQgMCE9PXQueExhYmVsJiYobCs9Ing6ICIrdC54TGFiZWwrIjxicj4iKSx2b2lkIDAhPT10LnlMYWJlbCYmKGwrPSJ5OiAiK3QueUxhYmVsKyI8YnI+IiksImNob3JvcGxldGgiIT09dC50cmFjZS50eXBlJiYiY2hvcm9wbGV0aG1hcGJveCIhPT10LnRyYWNlLnR5cGUmJihsKz0obD8iejogIjoiIikrdC56TGFiZWwpKTplJiZ0W2MrIkxhYmVsIl09PT1pP2w9dFt1KyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09dC50cmFjZS50eXBlJiYobD10LnlMYWJlbCk6bD12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsIXQudGV4dCYmMCE9PXQudGV4dHx8QXJyYXkuaXNBcnJheSh0LnRleHQpfHwobCs9KGw/Ijxicj4iOiIiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYobCs9KGw/Ijxicj4iOiIiKSt0LmV4dHJhVGV4dCksYSYmIiI9PT1sJiYhdC5ob3ZlcnRlbXBsYXRlJiYoIiI9PT1zJiZhLnJlbW92ZSgpLGw9cyk7dmFyIGY9dC5ob3ZlcnRlbXBsYXRlfHwhMTtpZihmKXt2YXIgaD10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQ7dFtjKyJMYWJlbCJdIT09aSYmKGhbYysib3RoZXIiXT1oW2MrIlZhbCJdLGhbYysib3RoZXJMYWJlbCJdPWhbYysiTGFiZWwiXSksbD0obD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoZixoLG4uX2QzbG9jYWxlLHQuZXZlbnREYXRhWzBdfHx7fSx0LnRyYWNlLl9tZXRhKSkucmVwbGFjZShQLChmdW5jdGlvbihlLHIpe3JldHVybiBzPUIocix0Lm5hbWVMZW5ndGgpLCIifSkpfXJldHVybltsLHNdfWZ1bmN0aW9uIHoodCxlLHIsaSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdCppfTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBpPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxzPXQuYW5jaG9yLGw9ImVuZCI9PT1zPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3NdLGY9YyooTStTKSxwPWYrYyoodC50eHdpZHRoK1MpLGQ9MCxtPXQub2Zmc2V0LGc9Im1pZGRsZSI9PT1zO2cmJihmLT10LnR4MndpZHRoLzIscCs9dC50eHdpZHRoLzIrUyksZSYmKG0qPS1BLGQ9dC5vZmZzZXQqayksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixnPyJNLSIrYSh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrbyhtLXQuYnkvMikrImgiK2EodC5ieCkrInYiK28odC5ieSkrImgtIithKHQuYngpKyJaIjoiTTAsMEwiK2EobCpNK2QpKyIsIitvKE0rbSkrInYiK28odC5ieS8yLU0pKyJoIithKGwqdC5ieCkrInYtIitvKHQuYnkpKyJIIithKGwqTStkKSsiViIrbyhtLU0pKyJaIik7dmFyIHY9ZCtmLHk9bSt0LnR5MC10LmJ5LzIrUyx4PXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1zPyhpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2PWc/LXQuYngvMi10LnR4MndpZHRoLzIrUzotdC5ieC1TKToicmlnaHQiPT09eCYmImVuZCIhPT1zJiYoaS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLHY9Zz90LmJ4LzItdC50eDJ3aWR0aC8yLVM6dC5ieCtTKSksaS5jYWxsKHUucG9zaXRpb25UZXh0LGEodiksbyh5KSksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGEocCtjKlMrZCksbyhtK3QudHkwLXQuYnkvMitTKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGguc2V0UmVjdCxhKHArKGMtMSkqdC50eDJ3aWR0aC8yK2QpLG8obS10LmJ5LzItMSksYSh0LnR4MndpZHRoKSxvKHQuYnkrMikpKX0pKX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOm0uaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCxuLnhob3ZlcmZvcm1hdCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6bS5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsLG4ueWhvdmVyZm9ybWF0KSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgZj1tLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitmKyIgLyAtIittLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitmLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgaD1tLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitoKyIgLyAtIittLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitoLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgcD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuLGksbz1yLmNvbnRhaW5lcixzPXIuZnVsbExheW91dCxsPXMuX3NpemUsYz1yLmV2ZW50LHU9ISFlLmhMaW5lUG9pbnQsZj0hIWUudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGZ8fHUpe3ZhciBkPXAuY29tYmluZShzLnBsb3RfYmdjb2xvcixzLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciBnLHYseT1lLmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGk9eSYmeS55YSkuc3Bpa2VzbmFwPyhnPWMucG9pbnRlclgsdj1jLnBvaW50ZXJZKTooZz1uLl9vZmZzZXQreS54LHY9aS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWEucmVhZGFiaWxpdHkoeS5jb2xvcixkKTwxLjU/cC5jb250cmFzdChkKTp5LmNvbG9yLHc9aS5zcGlrZW1vZGUsVD1pLnNwaWtldGhpY2tuZXNzLGs9aS5zcGlrZWNvbG9yfHxfLEE9bS5nZXRQeFBvc2l0aW9uKHQsaSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9QSxiPWcpLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIE09aS5fY291bnRlckRvbWFpbk1pbixTPWkuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09aS5hbmNob3ImJihNPU1hdGgubWluKE0saS5wb3NpdGlvbiksUz1NYXRoLm1heChTLGkucG9zaXRpb24pKSx4PWwubCtNKmwudyxiPWwubCtTKmwud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCxzdHJva2U6aywic3Ryb2tlLWRhc2hhcnJheSI6aC5kYXNoU3R5bGUoaS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OkErKCJyaWdodCIhPT1pLnNpZGU/VDotVCksY3k6dixyOlQsZmlsbDprfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZil7dmFyIEUsTCxDPWUudkxpbmVQb2ludDtuPUMmJkMueGEsaT1DJiZDLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KEU9Yy5wb2ludGVyWCxMPWMucG9pbnRlclkpOihFPW4uX29mZnNldCtDLngsTD1pLl9vZmZzZXQrQy55KTt2YXIgUCxJLE89YS5yZWFkYWJpbGl0eShDLmNvbG9yLGQpPDEuNT9wLmNvbnRyYXN0KGQpOkMuY29sb3Isej1uLnNwaWtlbW9kZSxEPW4uc3Bpa2V0aGlja25lc3MsUj1uLnNwaWtlY29sb3J8fE8sRj1tLmdldFB4UG9zaXRpb24odCxuKTtpZigtMSE9PXouaW5kZXhPZigidG9heGlzIil8fC0xIT09ei5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT16LmluZGV4T2YoInRvYXhpcyIpJiYoUD1GLEk9TCksLTEhPT16LmluZGV4T2YoImFjcm9zcyIpKXt2YXIgQj1uLl9jb3VudGVyRG9tYWluTWluLE49bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEI9TWF0aC5taW4oQixuLnBvc2l0aW9uKSxOPU1hdGgubWF4KE4sbi5wb3NpdGlvbikpLFA9bC50KygxLU4pKmwuaCxJPWwudCsoMS1CKSpsLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6UCx5MjpJLCJzdHJva2Utd2lkdGgiOkQsc3Ryb2tlOlIsInN0cm9rZS1kYXNoYXJyYXkiOmguZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpQLHkyOkksInN0cm9rZS13aWR0aCI6RCsyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PXouaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpFLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0Q6LUQpLHI6RCxmaWxsOlJ9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdS5wbGFpblRleHQodHx8IiIse2xlbjplLGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX1mdW5jdGlvbiBOKHQsZSxyKXt2YXIgbj1lW3QrImEiXSxpPWVbdCsiVmFsIl0sYT1lLmNkWzBdO2lmKCJjYXRlZ29yeSI9PT1uLnR5cGUpaT1uLl9jYXRlZ29yaWVzTWFwW2ldO2Vsc2UgaWYoImRhdGUiPT09bi50eXBlKXt2YXIgbz1lLnRyYWNlW3QrInBlcmlvZGFsaWdubWVudCJdO2lmKG8pe3ZhciBzPWUuY2RbZS5pbmRleF0sbD1zW3QrIlN0YXJ0Il07dm9pZCAwPT09bCYmKGw9c1t0XSk7dmFyIGM9c1t0KyJFbmQiXTt2b2lkIDA9PT1jJiYoYz1zW3RdKTt2YXIgdT1jLWw7ImVuZCI9PT1vP2krPXU6Im1pZGRsZSI9PT1vJiYoaSs9dS8yKX1pPW4uZDJjKGkpfXJldHVybiBhJiZhLnQmJmEudC5wb3NMZXR0ZXI9PT1uLl9pZCYmKCJncm91cCIhPT1yLmJveG1vZGUmJiJncm91cCIhPT1yLnZpb2xpbm1vZGV8fChpKz1hLnQuZFBvcykpLGl9ZnVuY3Rpb24gaih0KXtyZXR1cm4gdC5vZmZzZXRUb3ArdC5jbGllbnRUb3B9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gdC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdH1mdW5jdGlvbiBWKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1uLngsYT1uLnkscz1pK24ud2lkdGgsbD1hK24uaGVpZ2h0LGM9by5hcHBseTNEVHJhbnNmb3JtKHIuX2ludlRyYW5zZm9ybSkoaSxhKSx1PW8uYXBwbHkzRFRyYW5zZm9ybShyLl9pbnZUcmFuc2Zvcm0pKHMsbCksZj1jWzBdLGg9Y1sxXSxwPXVbMF0sZD11WzFdO3JldHVybnt4OmYseTpoLHdpZHRoOnAtZixoZWlnaHQ6ZC1oLHRvcDpNYXRoLm1pbihoLGQpLGxlZnQ6TWF0aC5taW4oZixwKSxyaWdodDpNYXRoLm1heChmLHApLGJvdHRvbTpNYXRoLm1heChoLGQpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9ldmVudHMiOjQ4NywiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6NTA5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vY29sb3IiOjM2MSwiLi4vZHJhZ2VsZW1lbnQiOjM4MCwiLi4vZHJhd2luZyI6MzgzLCIuLi9sZWdlbmQvZGVmYXVsdHMiOjQxMywiLi4vbGVnZW5kL2RyYXciOjQxNCwiLi9jb25zdGFudHMiOjM5NSwiLi9oZWxwZXJzIjozOTcsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTg1LHRpbnljb2xvcjI6MzA3fV0sMzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vaGVscGVycyIpLmlzVW5pZmllZEhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtvPW98fHt9O3ZhciBzPWUubGVnZW5kO2Z1bmN0aW9uIGwodCl7by5mb250W3RdfHwoby5mb250W3RdPXM/ZS5sZWdlbmQuZm9udFt0XTplLmZvbnRbdF0pfWUmJmEoZS5ob3Zlcm1vZGUpJiYoby5mb250fHwoby5mb250PXt9KSxsKCJzaXplIiksbCgiZmFtaWx5IiksbCgiY29sb3IiKSxzPyhvLmJnY29sb3J8fChvLmJnY29sb3I9aS5jb21iaW5lKGUubGVnZW5kLmJnY29sb3IsZS5wYXBlcl9iZ2NvbG9yKSksby5ib3JkZXJjb2xvcnx8KG8uYm9yZGVyY29sb3I9ZS5sZWdlbmQuYm9yZGVyY29sb3IpKTpvLmJnY29sb3J8fChvLmJnY29sb3I9ZS5wYXBlcl9iZ2NvbG9yKSkscigiaG92ZXJsYWJlbC5iZ2NvbG9yIixvLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLG8uYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsby5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixvLmZvbnQpLHIoImhvdmVybGFiZWwuYWxpZ24iLG8uYWxpZ24pfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY29sb3IiOjM2MSwiLi9oZWxwZXJzIjozOTd9XSw0MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06bi5jb2VyY2UodCxlLGkscixhKX1yZXR1cm4gcigiY2xpY2ttb2RlIikscigiaG92ZXJtb2RlIil9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo0MDJ9XSw0MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9kcmFnZWxlbWVudCIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImZ4Iixjb25zdGFudHM6dCgiLi9jb25zdGFudHMiKSxzY2hlbWE6e2xheW91dDpzfSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6cyxzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0czp0KCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGdldERpc3RhbmNlRnVuY3Rpb246by5nZXREaXN0YW5jZUZ1bmN0aW9uLGdldENsb3Nlc3Q6by5nZXRDbG9zZXN0LGluYm94Om8uaW5ib3gscXVhZHJhdHVyZTpvLnF1YWRyYXR1cmUsYXBwZW5kQXJyYXlQb2ludFZhbHVlOm8uYXBwZW5kQXJyYXlQb2ludFZhbHVlLGNhc3RIb3Zlck9wdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX0sY2FzdEhvdmVyaW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsKGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KSl9LGhvdmVyOmwuaG92ZXIsdW5ob3ZlcjphLnVuaG92ZXIsbG9uZUhvdmVyOmwubG9uZUhvdmVyLGxvbmVVbmhvdmVyOmZ1bmN0aW9uKHQpe3ZhciBlPWkuaXNEM1NlbGVjdGlvbih0KT90Om4uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9LGNsaWNrOnQoIi4vY2xpY2siKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2RyYWdlbGVtZW50IjozODAsIi4vYXR0cmlidXRlcyI6MzkyLCIuL2NhbGMiOjM5MywiLi9jbGljayI6Mzk0LCIuL2NvbnN0YW50cyI6Mzk1LCIuL2RlZmF1bHRzIjozOTYsIi4vaGVscGVycyI6Mzk3LCIuL2hvdmVyIjozOTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjQwMiwiLi9sYXlvdXRfZGVmYXVsdHMiOjQwMywiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIjo0MDQsIkBwbG90bHkvZDMiOjU4fV0sNDAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPWkoe2VkaXRUeXBlOiJub25lIn0pO2EuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsYS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3b3BlbnBhdGgiLCJkcmF3bGluZSIsImRyYXdyZWN0IiwiZHJhd2NpcmNsZSIsIm9yYml0IiwidHVybnRhYmxlIiwhMV0sZGZsdDoiem9vbSIsZWRpdFR5cGU6Im1vZGViYXIifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIngiLCJ5IiwiY2xvc2VzdCIsITEsInggdW5pZmllZCIsInkgdW5pZmllZCJdLGRmbHQ6ImNsb3Nlc3QiLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MjAsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDotMSxlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxmb250OmEsZ3JvdXB0aXRsZWZvbnQ6aSh7ZWRpdFR5cGU6Im5vbmUifSksYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToibm9uZSJ9LG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjE1LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxzZWxlY3RkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImgiLCJ2IiwiZCIsImFueSJdLGRmbHQ6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4vY29uc3RhbnRzIjozOTV9XSw0MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuL2hvdmVybW9kZV9kZWZhdWx0cyIpLG89dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEodCxlKSYmKHIoImhvdmVyZGlzdGFuY2UiKSxyKCJzcGlrZWRpc3RhbmNlIikpLCJzZWxlY3QiPT09cigiZHJhZ21vZGUiKSYmcigic2VsZWN0ZGlyZWN0aW9uIik7dmFyIHM9ZS5faGFzKCJtYXBib3giKSxsPWUuX2hhcygiZ2VvIiksYz1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoOyJ6b29tIj09PWUuZHJhZ21vZGUmJigoc3x8bCkmJjE9PT1jfHxzJiZsJiYyPT09YykmJihlLmRyYWdtb2RlPSJwYW4iKSxvKHQsZSxyKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5ncm91cHRpdGxlZm9udCIsZS5ob3ZlcmxhYmVsLmZvbnQpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjozOTksIi4vaG92ZXJtb2RlX2RlZmF1bHRzIjo0MDAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjQwMn1dLDQwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLChmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSkpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjozOTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjQwMn1dLDQwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLmlkUmVnZXgscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD17cm93czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxyb3dvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIHRvIGJvdHRvbSIsImJvdHRvbSB0byB0b3AiXSxkZmx0OiJ0b3AgdG8gYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGNvbHVtbnM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0sc3VicGxvdHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2koInh5IikudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHhheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueC50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seWF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby55LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRlcGVuZGVudCIsImNvdXBsZWQiXSxkZmx0OiJjb3VwbGVkIixlZGl0VHlwZToicGxvdCJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImdyaWQiLGVkaXRUeXBlOiJwbG90Iixub0dyaWRDZWxsOiEwfSx7fSkseHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJvdHRvbSIsImJvdHRvbSBwbG90IiwidG9wIHBsb3QiLCJ0b3AiXSxkZmx0OiJib3R0b20gcGxvdCIsZWRpdFR5cGU6InBsb3QifSx5c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImxlZnQgcGxvdCIsInJpZ2h0IHBsb3QiLCJyaWdodCJdLGRmbHQ6ImxlZnQgcGxvdCIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9O2Z1bmN0aW9uIGModCxlLHIpe3ZhciBuPWVbcisiYXhlcyJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrImdhcCIscikscz1lKCJkb21haW4uIit0KTtlKHQrInNpZGUiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksZj11KigxLW8pLGg9MDtoPGk7aCsrKXt2YXIgcD1jK3UqaDtsW2E/aS0xLWg6aF09W3AscCtmXX1yZXR1cm4gbH1mdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPSIifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJncmlkIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUsciwieCIpLGE9YyhlLHIsInkiKTtpZih0LmdyaWR8fGl8fGEpe3ZhciBvLGYsaD1BcnJheS5pc0FycmF5KHIuc3VicGxvdHMpJiZBcnJheS5pc0FycmF5KHIuc3VicGxvdHNbMF0pLHA9QXJyYXkuaXNBcnJheShpKSxkPUFycmF5LmlzQXJyYXkoYSksbT1wJiZpIT09ci54YXhlcyYmZCYmYSE9PXIueWF4ZXM7aD8obz1yLnN1YnBsb3RzLmxlbmd0aCxmPXIuc3VicGxvdHNbMF0ubGVuZ3RoKTooZCYmKG89YS5sZW5ndGgpLHAmJihmPWkubGVuZ3RoKSk7dmFyIGc9cy5uZXdDb250YWluZXIoZSwiZ3JpZCIpLHY9aygicm93cyIsbykseT1rKCJjb2x1bW5zIixmKTtpZih2Knk+MSl7aWYoIWgmJiFwJiYhZCkiaW5kZXBlbmRlbnQiPT09aygicGF0dGVybiIpJiYoaD0hMCk7Zy5faGFzU3VicGxvdEdyaWQ9aDt2YXIgeCxiLF89InRvcCB0byBib3R0b20iPT09aygicm93b3JkZXIiKSx3PWg/LjI6LjEsVD1oPy4zOi4xO20mJmUuX3NwbG9tR3JpZERmbHQmJih4PWUuX3NwbG9tR3JpZERmbHQueHNpZGUsYj1lLl9zcGxvbUdyaWREZmx0LnlzaWRlKSxnLl9kb21haW5zPXt4OnUoIngiLGssdyx4LHkpLHk6dSgieSIsayxULGIsdixfKX19ZWxzZSBkZWxldGUgZS5ncmlkfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UocixnLGwsdCxlKX19LGNvbnRlbnREZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPWUuZ3JpZDtpZihyJiZyLl9kb21haW5zKXt2YXIgbixpLGEsbyxzLGwsdSxoPXQuZ3JpZHx8e30scD1lLl9zdWJwbG90cyxkPXIuX2hhc1N1YnBsb3RHcmlkLG09ci5yb3dzLGc9ci5jb2x1bW5zLHY9ImluZGVwZW5kZW50Ij09PXIucGF0dGVybix5PXIuX2F4aXNNYXA9e307aWYoZCl7dmFyIHg9aC5zdWJwbG90c3x8W107bD1yLnN1YnBsb3RzPW5ldyBBcnJheShtKTt2YXIgYj0xO2ZvcihuPTA7bjxtO24rKyl7dmFyIF89bFtuXT1uZXcgQXJyYXkoZyksdz14W25dfHxbXTtmb3IoaT0wO2k8ZztpKyspaWYodj8ocz0xPT09Yj8ieHkiOiJ4IitiKyJ5IitiLGIrKyk6cz13W2ldLF9baV09IiIsLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKHMpKXtpZih1PXMuaW5kZXhPZigieSIpLGE9cy5zbGljZSgwLHUpLG89cy5zbGljZSh1KSx2b2lkIDAhPT15W2FdJiZ5W2FdIT09aXx8dm9pZCAwIT09eVtvXSYmeVtvXSE9PW4pY29udGludWU7X1tpXT1zLHlbYV09aSx5W29dPW59fX1lbHNle3ZhciBUPWMoZSxoLCJ4Iiksaz1jKGUsaCwieSIpO3IueGF4ZXM9ZihULHAueGF4aXMsZyx5LCJ4Iiksci55YXhlcz1mKGsscC55YXhpcyxtLHksInkiKX12YXIgQT1yLl9hbmNob3JzPXt9LE09InRvcCB0byBib3R0b20iPT09ci5yb3dvcmRlcjtmb3IodmFyIFMgaW4geSl7dmFyIEUsTCxDLFA9Uy5jaGFyQXQoMCksST1yW1ArInNpZGUiXTtpZihJLmxlbmd0aDw4KUFbU109ImZyZWUiO2Vsc2UgaWYoIngiPT09UCl7aWYoInQiPT09SS5jaGFyQXQoMCk9PT1NPyhFPTAsTD0xLEM9bSk6KEU9bS0xLEw9LTEsQz0tMSksZCl7dmFyIE89eVtTXTtmb3Iobj1FO24hPT1DO24rPUwpaWYoKHM9bFtuXVtPXSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UoMCx1KT09PVMpKXtBW1NdPXMuc2xpY2UodSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09QztuKz1MKWlmKG89ci55YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoUytvKSl7QVtTXT1vO2JyZWFrfX1lbHNlIGlmKCJsIj09PUkuY2hhckF0KDApPyhFPTAsTD0xLEM9Zyk6KEU9Zy0xLEw9LTEsQz0tMSksZCl7dmFyIHo9eVtTXTtmb3Iobj1FO24hPT1DO24rPUwpaWYoKHM9bFt6XVtuXSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UodSk9PT1TKSl7QVtTXT1zLnNsaWNlKDAsdSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09QztuKz1MKWlmKGE9ci54YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoYStTKSl7QVtTXT1hO2JyZWFrfX19fX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9yZWdleCI6NTE1LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjU1NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo1Nzl9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O3QoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7ZS5leHBvcnRzPWkoImltYWdlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc291cmNlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImNvbnRhaW4iLCJzdHJldGNoIl0sZGZsdDoiY29udGFpbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seTp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIjo0NjcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTU2fV0sNDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8e307dmFyIG89ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxzPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuaW1hZ2VzLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylpZihjPSJpbWFnZXNbIitoKyJdLiIsKGw9dVtoXSlbZisicmVmIl09PT1lLl9pZCl7dmFyIHA9bFtmXSxkPWxbInNpemUiK2ZdLG09bnVsbCxnPW51bGw7aWYobyl7bT1pKHAsZS5yYW5nZSk7dmFyIHY9ZC9NYXRoLnBvdygxMCxtKS8yO2c9MipNYXRoLmxvZyh2K01hdGguc3FydCgxK3YqdikpL01hdGguTE4xMH1lbHNlIGc9KG09TWF0aC5wb3coMTAscCkpKihNYXRoLnBvdygxMCxkLzIpLU1hdGgucG93KDEwLC1kLzIpKTtuKG0pP24oZyl8fChnPW51bGwpOihtPW51bGwsZz1udWxsKSxhKGMrZixtKSxhKGMrInNpemUiK2YsZyl9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo1MjYsImZhc3QtaXNudW1lcmljIjoxODV9XSw0MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9dmFyIHM9YSgic291cmNlIik7aWYoIWEoInZpc2libGUiLCEhcykpcmV0dXJuIGU7YSgibGF5ZXIiKSxhKCJ4YW5jaG9yIiksYSgieWFuY2hvciIpLGEoInNpemV4IiksYSgic2l6ZXkiKSxhKCJzaXppbmciKSxhKCJvcGFjaXR5Iik7Zm9yKHZhciBsPXtfZnVsbExheW91dDpyfSxjPVsieCIsInkiXSx1PTA7dTwyO3UrKyl7dmFyIGY9Y1t1XSxoPWkuY29lcmNlUmVmKHQsZSxsLGYsInBhcGVyIix2b2lkIDApO2lmKCJwYXBlciIhPT1oKWkuZ2V0RnJvbUlkKGwsaCkuX2ltZ0luZGljZXMucHVzaChlLl9pbmRleCk7aS5jb2VyY2VQb3NpdGlvbihlLGwsYSxoLGYsMCl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOnN9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2F0dHJpYnV0ZXMiOjQwNn1dLDQwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9kcmF3aW5nIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGw9dC5fZnVsbExheW91dCxjPVtdLHU9e30sZj1bXTtmb3Iocj0wO3I8bC5pbWFnZXMubGVuZ3RoO3IrKyl7dmFyIGg9bC5pbWFnZXNbcl07aWYoaC52aXNpYmxlKWlmKCJiZWxvdyI9PT1oLmxheWVyJiYicGFwZXIiIT09aC54cmVmJiYicGFwZXIiIT09aC55cmVmKXtlPW8ucmVmMmlkKGgueHJlZikrby5yZWYyaWQoaC55cmVmKTt2YXIgcD1sLl9wbG90c1tlXTtpZighcCl7Zi5wdXNoKGgpO2NvbnRpbnVlfXAubWFpbnBsb3QmJihlPXAubWFpbnBsb3QuaWQpLHVbZV18fCh1W2VdPVtdKSx1W2VdLnB1c2goaCl9ZWxzZSJhYm92ZSI9PT1oLmxheWVyP2MucHVzaChoKTpmLnB1c2goaCl9dmFyIGQ9e2xlZnQ6e3NpemluZzoieE1pbiIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOiJ4TWlkIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOiJ4TWF4IixvZmZzZXQ6LTF9fSxtPXt0b3A6e3NpemluZzoiWU1pbiIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOiJZTWlkIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzoiWU1heCIsb2Zmc2V0Oi0xfX07ZnVuY3Rpb24gZyhlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0aGlzLl9pbWdTcmMhPT1lLnNvdXJjZSlpZihyLmF0dHIoInhtbG5zIixzLnN2ZyksZS5zb3VyY2UmJiJkYXRhOiI9PT1lLnNvdXJjZS5zbGljZSgwLDUpKXIuYXR0cigieGxpbms6aHJlZiIsZS5zb3VyY2UpLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZTtlbHNle3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBJbWFnZTtmdW5jdGlvbiBpKCl7ci5yZW1vdmUoKSx0KCl9dGhpcy5pbWc9bixuLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxuLm9uZXJyb3I9aSxuLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSx0KCl9LHIub24oImVycm9yIixpKSxuLnNyYz1lLnNvdXJjZSx0aGlzLl9pbWdTcmM9ZS5zb3VyY2V9LmJpbmQodGhpcykpO3QuX3Byb21pc2VzLnB1c2goaSl9fWZ1bmN0aW9uIHYoZSl7dmFyIHIsbyxzPW4uc2VsZWN0KHRoaXMpLGM9YS5nZXRGcm9tSWQodCxlLnhyZWYpLHU9YS5nZXRGcm9tSWQodCxlLnlyZWYpLGY9ImRvbWFpbiI9PT1hLmdldFJlZlR5cGUoZS54cmVmKSxoPSJkb21haW4iPT09YS5nZXRSZWZUeXBlKGUueXJlZikscD1sLl9zaXplO3I9dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIGUueHJlZiYmZj9jLl9sZW5ndGgqZS5zaXpleDpNYXRoLmFicyhjLmwycChlLnNpemV4KS1jLmwycCgwKSk6ZS5zaXpleCpwLncsbz12b2lkIDAhPT11PyJzdHJpbmciPT10eXBlb2YgZS55cmVmJiZoP3UuX2xlbmd0aCplLnNpemV5Ok1hdGguYWJzKHUubDJwKGUuc2l6ZXkpLXUubDJwKDApKTplLnNpemV5KnAuaDt2YXIgZyx2LHk9cipkW2UueGFuY2hvcl0ub2Zmc2V0LHg9byptW2UueWFuY2hvcl0ub2Zmc2V0LGI9ZFtlLnhhbmNob3JdLnNpemluZyttW2UueWFuY2hvcl0uc2l6aW5nO3N3aXRjaChnPXZvaWQgMCE9PWM/InN0cmluZyI9PXR5cGVvZiBlLnhyZWYmJmY/Yy5fbGVuZ3RoKmUueCtjLl9vZmZzZXQ6Yy5yMnAoZS54KStjLl9vZmZzZXQ6ZS54KnAudytwLmwsZys9eSx2PXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiBlLnlyZWYmJmg/dS5fbGVuZ3RoKigxLWUueSkrdS5fb2Zmc2V0OnUucjJwKGUueSkrdS5fb2Zmc2V0OnAuaC1lLnkqcC5oK3AudCx2Kz14LGUuc2l6aW5nKXtjYXNlImZpbGwiOmIrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Yj0ibm9uZSJ9cy5hdHRyKHt4OmcseTp2LHdpZHRoOnIsaGVpZ2h0Om8scHJlc2VydmVBc3BlY3RSYXRpbzpiLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIF89KGMmJiJkb21haW4iIT09YS5nZXRSZWZUeXBlKGUueHJlZik/Yy5faWQ6IiIpKyh1JiYiZG9tYWluIiE9PWEuZ2V0UmVmVHlwZShlLnlyZWYpP3UuX2lkOiIiKTtpLnNldENsaXBVcmwocyxfPyJjbGlwIitsLl91aWQrXzpudWxsLHQpfXZhciB5PWwuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShmKSx4PWwuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShjKTt5LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHguZW50ZXIoKS5hcHBlbmQoImltYWdlIikseS5leGl0KCkucmVtb3ZlKCkseC5leGl0KCkucmVtb3ZlKCkseS5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpLHguZWFjaCgoZnVuY3Rpb24odCl7Zy5iaW5kKHRoaXMpKHQpLHYuYmluZCh0aGlzKSh0KX0pKTt2YXIgYj1PYmplY3Qua2V5cyhsLl9wbG90cyk7Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7ZT1iW3JdO3ZhciBfPWwuX3Bsb3RzW2VdO2lmKF8uaW1hZ2VsYXllcil7dmFyIHc9Xy5pbWFnZWxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKHVbZV18fFtdKTt3LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHcuZXhpdCgpLnJlbW92ZSgpLHcuZWFjaCgoZnVuY3Rpb24odCl7Zy5iaW5kKHRoaXMpKHQpLHYuYmluZCh0aGlzKSh0KX0pKX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1MywiLi4vZHJhd2luZyI6MzgzLCJAcGxvdGx5L2QzIjo1OH1dLDQxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiaW1hZ2VzIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJpbWFnZXMiKSxkcmF3OnQoIi4vZHJhdyIpLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo1NjIsIi4vYXR0cmlidXRlcyI6NDA2LCIuL2NvbnZlcnRfY29vcmRzIjo0MDcsIi4vZGVmYXVsdHMiOjQwOCwiLi9kcmF3Ijo0MDl9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxncm91cHRpdGxlZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjMwLGRmbHQ6MzAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1jbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlIixlZGl0VHlwZToibGVnZW5kIn0saXRlbWRvdWJsZWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGVvdGhlcnMiLGVkaXRUeXBlOiJsZWdlbmQifSxncm91cGNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGVpdGVtIiwidG9nZ2xlZ3JvdXAiXSxkZmx0OiJ0b2dnbGVncm91cCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MCwiLi4vY29sb3IvYXR0cmlidXRlcyI6MzYwfV0sNDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHNjcm9sbEJhckVudGVyQXR0cnM6e3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0sdGl0bGVQYWQ6MixpdGVtR2FwOjV9fSx7fV0sNDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZj10LmxlZ2VuZHx8e30saD1hLm5ld0NvbnRhaW5lcihlLCJsZWdlbmQiKTtmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGkuY29lcmNlKGYsaCxzLHQsZSl9Zm9yKHZhciBkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dS5faW5wdXQsbj11O3JldHVybiBpLmNvZXJjZShyLG4sbyx0LGUpfSxtPWUuZm9udHx8e30sZz1pLmNvZXJjZUZvbnQocCwiZ3JvdXB0aXRsZWZvbnQiLGkuZXh0ZW5kRmxhdCh7fSxtLHtzaXplOk1hdGgucm91bmQoMS4xKm0uc2l6ZSl9KSksdj0wLHk9ITEseD0ibm9ybWFsIixiPTA7YjxyLmxlbmd0aDtiKyspKHU9cltiXSkudmlzaWJsZSYmKCh1LnNob3dsZWdlbmR8fHUuX2RmbHRTaG93TGVnZW5kJiYhKHUuX21vZHVsZSYmdS5fbW9kdWxlLmF0dHJpYnV0ZXMmJnUuX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQmJiExPT09dS5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZC5kZmx0KSkmJih2KyssdS5zaG93bGVnZW5kJiYoeT0hMCwobi50cmFjZUlzKHUsInBpZS1saWtlIil8fCEwPT09dS5faW5wdXQuc2hvd2xlZ2VuZCkmJnYrKyksaS5jb2VyY2VGb250KGQsImxlZ2VuZGdyb3VwdGl0bGUuZm9udCIsZykpLChuLnRyYWNlSXModSwiYmFyIikmJiJzdGFjayI9PT1lLmJhcm1vZGV8fC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YodS5maWxsKSkmJih4PWMuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnh9KT8iZ3JvdXBlZCtyZXZlcnNlZCI6InJldmVyc2VkIiksdm9pZCAwIT09dS5sZWdlbmRncm91cCYmIiIhPT11LmxlZ2VuZGdyb3VwJiYoeD1jLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6eH0pPyJyZXZlcnNlZCtncm91cGVkIjoiZ3JvdXBlZCIpKTt2YXIgXz1pLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIseSYmdj4xKTtpZighMT09PV8mJihlLmxlZ2VuZD12b2lkIDApLCghMSE9PV98fGYudWlyZXZpc2lvbikmJihwKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLCExIT09Xykpe3AoImJnY29sb3IiLGUucGFwZXJfYmdjb2xvcikscCgiYm9yZGVyY29sb3IiKSxwKCJib3JkZXJ3aWR0aCIpO3ZhciB3LFQsayxBPWkuY29lcmNlRm9udChwLCJmb250IixlLmZvbnQpLE09ImgiPT09cCgib3JpZW50YXRpb24iKTtpZihNPyh3PTAsbi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikodC54YXhpcyk/KFQ9MS4xLGs9ImJvdHRvbSIpOihUPS0uMSxrPSJ0b3AiKSk6KHc9MS4wMixUPTEsaz0iYXV0byIpLHAoInRyYWNlb3JkZXIiLHgpLGMuaXNHcm91cGVkKGUubGVnZW5kKSYmcCgidHJhY2Vncm91cGdhcCIpLHAoIml0ZW1zaXppbmciKSxwKCJpdGVtd2lkdGgiKSxwKCJpdGVtY2xpY2siKSxwKCJpdGVtZG91YmxlY2xpY2siKSxwKCJncm91cGNsaWNrIikscCgieCIsdykscCgieGFuY2hvciIpLHAoInkiLFQpLHAoInlhbmNob3IiLGspLHAoInZhbGlnbiIpLGkubm9uZU9yQWxsKGYsaCxbIngiLCJ5Il0pLHAoInRpdGxlLnRleHQiKSl7cCgidGl0bGUuc2lkZSIsTT8ibGVmdCI6InRvcCIpO3ZhciBTPWkuZXh0ZW5kRmxhdCh7fSxBLHtzaXplOmkuYmlnRm9udChBLnNpemUpfSk7aS5jb2VyY2VGb250KHAsInRpdGxlLmZvbnQiLFMpfX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjYwNSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9hdHRyaWJ1dGVzIjo0MTEsIi4vaGVscGVycyI6NDE3fV0sNDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vY29sb3IiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi9oYW5kbGVfY2xpY2siKSxwPXQoIi4vY29uc3RhbnRzIiksZD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksbT1kLkxJTkVfU1BBQ0lORyxnPWQuRlJPTV9UTCx2PWQuRlJPTV9CUix5PXQoIi4vZ2V0X2xlZ2VuZF9kYXRhIikseD10KCIuL3N0eWxlIiksYj10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9ci5kYXRhKClbMF1bMF0udHJhY2UsbD17ZXZlbnQ6aSxub2RlOnIubm9kZSgpLGN1cnZlTnVtYmVyOmEuaW5kZXgsZXhwYW5kZWRJbmRleDphLl9leHBhbmRlZEluZGV4LGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dCxmcmFtZXM6dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxjb25maWc6dC5fY29udGV4dCxmdWxsRGF0YTp0Ll9mdWxsRGF0YSxmdWxsTGF5b3V0OnQuX2Z1bGxMYXlvdXR9O2lmKGEuX2dyb3VwJiYobC5ncm91cD1hLl9ncm91cCksby50cmFjZUlzKGEsInBpZS1saWtlIikmJihsLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRjbGljayIsbCkpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dCYmaChyLHQsbil9KSx0Ll9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXkpO2Vsc2UgaWYoMj09PW4pe2UuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KGUuX2NsaWNrVGltZW91dCksdC5fbGVnZW5kTW91c2VEb3duVGltZT0wLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kZG91YmxlY2xpY2siLGwpJiZoKHIsdCxuKX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG4sYSxzPXQuZGF0YSgpWzBdWzBdLGw9cy50cmFjZSx1PW8udHJhY2VJcyhsLCJwaWUtbGlrZSIpLGg9IXIuX2luSG92ZXImJmUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIXUsZD1yLl9tYXhOYW1lTGVuZ3RoO3MuZ3JvdXBUaXRsZT8obj1zLmdyb3VwVGl0bGUudGV4dCxhPXMuZ3JvdXBUaXRsZS5mb250KTooYT1yLmZvbnQsci5lbnRyaWVzP249cy50ZXh0OihuPXU/cy5sYWJlbDpsLm5hbWUsbC5fbWV0YSYmKG49aS50ZW1wbGF0ZVN0cmluZyhuLGwuX21ldGEpKSkpO3ZhciBtPWkuZW5zdXJlU2luZ2xlKHQsInRleHQiLCJsZWdlbmR0ZXh0Iik7bS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChjLmZvbnQsYSkudGV4dChoP1QobixkKTpuKTt2YXIgZz1yLml0ZW13aWR0aCsyKnAuaXRlbUdhcDtmLnBvc2l0aW9uVGV4dChtLGcsMCksaD9tLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpufSkuY2FsbChBLHQsZSxyKS5vbigiZWRpdCIsKGZ1bmN0aW9uKG4pe3RoaXMudGV4dChUKG4sZCkpLmNhbGwoQSx0LGUscik7dmFyIGE9cy50cmFjZS5fZnVsbElucHV0fHx7fSxjPXt9O2lmKG8uaGFzVHJhbnNmb3JtKGEsImdyb3VwYnkiKSl7dmFyIHU9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKGEsImdyb3VwYnkiKSxmPXVbdS5sZW5ndGgtMV0saD1pLmtleWVkQ29udGFpbmVyKGEsInRyYW5zZm9ybXNbIitmKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKTtoLnNldChzLnRyYWNlLl9ncm91cCxuKSxjPWguY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBjLm5hbWU9bjtyZXR1cm4gby5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxjLGwuaW5kZXgpfSkpOkEobSx0LGUscil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPU1hdGgubWF4KDQsZSk7aWYodCYmdC50cmltKCkubGVuZ3RoPj1yLzIpcmV0dXJuIHQ7Zm9yKHZhciBuPXItKHQ9dHx8IiIpLmxlbmd0aDtuPjA7bi0tKXQrPSIgIjtyZXR1cm4gdH1mdW5jdGlvbiBrKHQsZSl7dmFyIHIsYT1lLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXksbz0xLHM9aS5lbnN1cmVTaW5nbGUodCwicmVjdCIsImxlZ2VuZHRvZ2dsZSIsKGZ1bmN0aW9uKHQpe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8dC5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksdC5jYWxsKHUuZmlsbCwicmdiYSgwLDAsMCwwKSIpfSkpO2UuX2NvbnRleHQuc3RhdGljUGxvdHx8KHMub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8YT9vKz0xOihvPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pKSxzLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+YSYmKG89TWF0aC5tYXgoby0xLDEpKSxfKGUscix0LG8sbi5ldmVudCl9fSkpKX1mdW5jdGlvbiBBKHQsZSxyLG4saSl7bi5faW5Ib3ZlciYmdC5hdHRyKCJkYXRhLW5vdGV4IiwhMCksZi5jb252ZXJ0VG9Uc3BhbnModCxyLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmRhdGEoKVswXVswXTtpZighci5faW5Ib3ZlciYmaSYmIWkudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBhPXQuc2VsZWN0KCJnW2NsYXNzKj1tYXRoLWdyb3VwXSIpLG89YS5ub2RlKCk7cnx8KHI9ZS5fZnVsbExheW91dC5sZWdlbmQpO3ZhciBzLGw9ci5ib3JkZXJ3aWR0aDtzPTE9PT1uP3IudGl0bGUuZm9udDppLmdyb3VwVGl0bGU/aS5ncm91cFRpdGxlLmZvbnQ6ci5mb250O3ZhciB1LGgsZD1zLnNpemUqbTtpZihvKXt2YXIgZz1jLmJCb3gobyk7dT1nLmhlaWdodCxoPWcud2lkdGgsMT09PW4/Yy5zZXRUcmFuc2xhdGUoYSxsLGwrLjc1KnUpOmMuc2V0VHJhbnNsYXRlKGEsMCwuMjUqdSl9ZWxzZXt2YXIgdj10LnNlbGVjdCgxPT09bj8iLmxlZ2VuZHRpdGxldGV4dCI6Ii5sZWdlbmR0ZXh0IikseT1mLmxpbmVDb3VudCh2KSx4PXYubm9kZSgpO2lmKHU9ZCp5LGg9eD9jLmJCb3goeCkud2lkdGg6MCwxPT09bikibGVmdCI9PT1yLnRpdGxlLnNpZGUmJihoKz0yKnAuaXRlbUdhcCksZi5wb3NpdGlvblRleHQodixsK3AudGl0bGVQYWQsbCtkKTtlbHNle3ZhciBiPTIqcC5pdGVtR2FwK3IuaXRlbXdpZHRoO2kuZ3JvdXBUaXRsZSYmKGI9cC5pdGVtR2FwLGgtPXIuaXRlbXdpZHRoKSxmLnBvc2l0aW9uVGV4dCh2LGIsLWQqKCh5LTEpLzItLjMpKX19MT09PW4/KHIuX3RpdGxlV2lkdGg9aCxyLl90aXRsZUhlaWdodD11KTooaS5saW5lSGVpZ2h0PWQsaS5oZWlnaHQ9TWF0aC5tYXgodSwxNikrMyxpLndpZHRoPWgpfShlLHIsbixpKX0pKX1mdW5jdGlvbiBNKHQpe3JldHVybiBpLmlzUmlnaHRBbmNob3IodCk/InJpZ2h0IjppLmlzQ2VudGVyQW5jaG9yKHQpPyJjZW50ZXIiOiJsZWZ0In1mdW5jdGlvbiBTKHQpe3JldHVybiBpLmlzQm90dG9tQW5jaG9yKHQpPyJib3R0b20iOmkuaXNNaWRkbGVBbmNob3IodCk/Im1pZGRsZSI6InRvcCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChlPXQuX2Z1bGxMYXlvdXQubGVnZW5kfHx7fSksZnVuY3Rpb24odCxlKXt2YXIgcixzLGY9dC5fZnVsbExheW91dCxoPSJsZWdlbmQiK2YuX3VpZCxkPWUuX2luSG92ZXI7ZD8ocj1lLmxheWVyLGgrPSItaG92ZXIiKTpyPWYuX2luZm9sYXllcjtpZighcilyZXR1cm47dC5fbGVnZW5kTW91c2VEb3duVGltZXx8KHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCk7aWYoZCl7aWYoIWUuZW50cmllcylyZXR1cm47cz15KGUuZW50cmllcyxlKX1lbHNle2lmKCF0LmNhbGNkYXRhKXJldHVybjtzPWYuc2hvd2xlZ2VuZCYmeSh0LmNhbGNkYXRhLGUpfXZhciBtPWYuaGlkZGVubGFiZWxzfHxbXTtpZighKGR8fGYuc2hvd2xlZ2VuZCYmcy5sZW5ndGgpKXJldHVybiByLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLGYuX3RvcGRlZnMuc2VsZWN0KCIjIitoKS5yZW1vdmUoKSxhLmF1dG9NYXJnaW4odCwibGVnZW5kIik7dmFyIFQ9aS5lbnN1cmVTaW5nbGUociwiZyIsImxlZ2VuZCIsKGZ1bmN0aW9uKHQpe2R8fHQuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxFPWkuZW5zdXJlU2luZ2xlQnlJZChmLl90b3BkZWZzLCJjbGlwUGF0aCIsaCwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKX0pKSxMPWkuZW5zdXJlU2luZ2xlKFQsInJlY3QiLCJiZyIsKGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO0wuY2FsbCh1LnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCxlLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEM9aS5lbnN1cmVTaW5nbGUoVCwiZyIsInNjcm9sbGJveCIpLFA9ZS50aXRsZTtpZihlLl90aXRsZVdpZHRoPTAsZS5fdGl0bGVIZWlnaHQ9MCxQLnRleHQpe3ZhciBJPWkuZW5zdXJlU2luZ2xlKEMsInRleHQiLCJsZWdlbmR0aXRsZXRleHQiKTtJLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGMuZm9udCxQLmZvbnQpLnRleHQoUC50ZXh0KSxBKEksQyx0LGUsMSl9ZWxzZSBDLnNlbGVjdEFsbCgiLmxlZ2VuZHRpdGxldGV4dCIpLnJlbW92ZSgpO3ZhciBPPWkuZW5zdXJlU2luZ2xlKFQsInJlY3QiLCJzY3JvbGxiYXIiLChmdW5jdGlvbih0KXt0LmF0dHIocC5zY3JvbGxCYXJFbnRlckF0dHJzKS5jYWxsKHUuZmlsbCxwLnNjcm9sbEJhckNvbG9yKX0pKSx6PUMuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEocyk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksei5leGl0KCkucmVtb3ZlKCk7dmFyIEQ9ei5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShpLmlkZW50aXR5KTtELmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSxELmV4aXQoKS5yZW1vdmUoKSxELnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsInBpZS1saWtlIik/LTEhPT1tLmluZGV4T2YodFswXS5sYWJlbCk/LjU6MToibGVnZW5kb25seSI9PT1lLnZpc2libGU/LjU6MX0pKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwodyx0LGUpfSkpLmNhbGwoeCx0LGUpLmVhY2goKGZ1bmN0aW9uKCl7ZHx8bi5zZWxlY3QodGhpcykuY2FsbChrLHQpfSkpLGkuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0O2l8fChpPWEubGVnZW5kKTt2YXIgbz1hLl9zaXplLHM9Yi5pc1ZlcnRpY2FsKGkpLGw9Yi5pc0dyb3VwZWQoaSksdT1pLmJvcmRlcndpZHRoLGY9Mip1LGg9cC5pdGVtR2FwLGQ9aS5pdGVtd2lkdGgrMipoLG09MioodStoKSxnPVMoaSksdj1pLnk8MHx8MD09PWkueSYmInRvcCI9PT1nLHk9aS55PjF8fDE9PT1pLnkmJiJib3R0b20iPT09Zyx4PWkudHJhY2Vncm91cGdhcDtpLl9tYXhIZWlnaHQ9TWF0aC5tYXgodnx8eT9hLmhlaWdodC8yOm8uaCwzMCk7dmFyIF89MDtpLl93aWR0aD0wLGkuX2hlaWdodD0wO3ZhciB3PWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49dC50aXRsZS5zaWRlO24mJigtMSE9PW4uaW5kZXhPZigibGVmdCIpJiYoZT10Ll90aXRsZVdpZHRoKSwtMSE9PW4uaW5kZXhPZigidG9wIikmJihyPXQuX3RpdGxlSGVpZ2h0KSk7cmV0dXJuW2Uscl19KGkpO2lmKHMpci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLHUrd1swXSx1K3dbMV0raS5faGVpZ2h0K2UvMitoKSxpLl9oZWlnaHQrPWUsaS5fd2lkdGg9TWF0aC5tYXgoaS5fd2lkdGgsdFswXS53aWR0aCl9KSksXz1kK2kuX3dpZHRoLGkuX3dpZHRoKz1oK2QrZixpLl9oZWlnaHQrPW0sbCYmKGUuZWFjaCgoZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsZSppLnRyYWNlZ3JvdXBnYXApfSkpLGkuX2hlaWdodCs9KGkuX2xncm91cHNMZW5ndGgtMSkqaS50cmFjZWdyb3VwZ2FwKTtlbHNle3ZhciBUPU0oaSksaz1pLng8MHx8MD09PWkueCYmInJpZ2h0Ij09PVQsQT1pLng+MXx8MT09PWkueCYmImxlZnQiPT09VCxFPXl8fHYsTD1hLndpZHRoLzI7aS5fbWF4V2lkdGg9TWF0aC5tYXgoaz9FJiYibGVmdCI9PT1UP28ubCtvLnc6TDpBP0UmJiJyaWdodCI9PT1UP28ucitvLnc6TDpvLncsMipkKTt2YXIgQz0wLFA9MDtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ud2lkdGgrZDtDPU1hdGgubWF4KEMsZSksUCs9ZX0pKSxfPW51bGw7dmFyIEk9MDtpZihsKXt2YXIgTz0wLHo9MCxEPTA7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PTAsZT0wO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1yWzBdLndpZHRoLGk9clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx3WzBdLHdbMV0rdStoK2kvMitlKSxlKz1pLHQ9TWF0aC5tYXgodCxkK24pfSkpO3ZhciByPXQraDt6PjAmJnIrdSt6PmkuX21heFdpZHRoPyhJPU1hdGgubWF4KEkseiksej0wLEQrPU8reCxPPWUpOk89TWF0aC5tYXgoTyxlKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHosRCkseis9cn0pKSxpLl93aWR0aD1NYXRoLm1heChJLHopK3UsaS5faGVpZ2h0PUQrTyttfWVsc2V7dmFyIFI9ci5zaXplKCksRj1QK2YrKFItMSkqaDxpLl9tYXhXaWR0aCxCPTAsTj0wLGo9MCxVPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLmhlaWdodCxyPWQrdFswXS53aWR0aCxuPShGP3I6QykraDtuK3UrTi1oPj1pLl9tYXhXaWR0aCYmKEk9TWF0aC5tYXgoSSxVKSxOPTAsais9QixpLl9oZWlnaHQrPUIsQj0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHdbMF0rdStOLHdbMV0rdStqK2UvMitoKSxVPU4rcitoLE4rPW4sQj1NYXRoLm1heChCLGUpfSkpLEY/KGkuX3dpZHRoPU4rZixpLl9oZWlnaHQ9QittKTooaS5fd2lkdGg9TWF0aC5tYXgoSSxVKStmLGkuX2hlaWdodCs9QittKX19aS5fd2lkdGg9TWF0aC5jZWlsKE1hdGgubWF4KGkuX3dpZHRoK3dbMF0saS5fdGl0bGVXaWR0aCsyKih1K3AudGl0bGVQYWQpKSksaS5faGVpZ2h0PU1hdGguY2VpbChNYXRoLm1heChpLl9oZWlnaHQrd1sxXSxpLl90aXRsZUhlaWdodCsyKih1K3AuaXRlbUdhcCkpKSxpLl9lZmZIZWlnaHQ9TWF0aC5taW4oaS5faGVpZ2h0LGkuX21heEhlaWdodCk7dmFyIFY9dC5fY29udGV4dC5lZGl0cyxIPVYubGVnZW5kVGV4dHx8Vi5sZWdlbmRQb3NpdGlvbjtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpLHI9dFswXS5oZWlnaHQsaT1IP2Q6X3x8ZCt0WzBdLndpZHRoO3N8fChpKz1oLzIpLGMuc2V0UmVjdChlLDAsLXIvMixpLHIpfSkpfSh0LHosRCxlKX0sZnVuY3Rpb24oKXt2YXIgcyx1LG0seSx4PWYuX3NpemUsYj1lLmJvcmRlcndpZHRoO2lmKCFkKXtpZihmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPU0oZSksbj1TKGUpO3JldHVybiBhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCpnW3JdLHI6ZS5fd2lkdGgqdltyXSxiOmUuX2VmZkhlaWdodCp2W25dLHQ6ZS5fZWZmSGVpZ2h0Kmdbbl19KX0odCkpcmV0dXJuO3ZhciB3PXgubCt4LncqZS54LWdbTShlKV0qZS5fd2lkdGgsaz14LnQreC5oKigxLWUueSktZ1tTKGUpXSplLl9lZmZIZWlnaHQ7aWYoZi5tYXJnaW4uYXV0b2V4cGFuZCl7dmFyIEE9dyxQPWs7dz1pLmNvbnN0cmFpbih3LDAsZi53aWR0aC1lLl93aWR0aCksaz1pLmNvbnN0cmFpbihrLDAsZi5oZWlnaHQtZS5fZWZmSGVpZ2h0KSx3IT09QSYmaS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueCB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIiksayE9PVAmJmkubG9nKCJDb25zdHJhaW4gbGVnZW5kLnkgdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpfWMuc2V0VHJhbnNsYXRlKFQsdyxrKX1pZihPLm9uKCIuZHJhZyIsbnVsbCksVC5vbigid2hlZWwiLG51bGwpLGR8fGUuX2hlaWdodDw9ZS5fbWF4SGVpZ2h0fHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBJPWUuX2VmZkhlaWdodDtkJiYoST1lLl9oZWlnaHQpLEwuYXR0cih7d2lkdGg6ZS5fd2lkdGgtYixoZWlnaHQ6SS1iLHg6Yi8yLHk6Yi8yfSksYy5zZXRUcmFuc2xhdGUoQywwLDApLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiLGhlaWdodDpJLTIqYix4OmIseTpifSksYy5zZXRDbGlwVXJsKEMsaCx0KSxjLnNldFJlY3QoTywwLDAsMCwwKSxkZWxldGUgZS5fc2Nyb2xsWX1lbHNle3ZhciB6LEQsUixGPU1hdGgubWF4KHAuc2Nyb2xsQmFyTWluSGVpZ2h0LGUuX2VmZkhlaWdodCplLl9lZmZIZWlnaHQvZS5faGVpZ2h0KSxCPWUuX2VmZkhlaWdodC1GLTIqcC5zY3JvbGxCYXJNYXJnaW4sTj1lLl9oZWlnaHQtZS5fZWZmSGVpZ2h0LGo9Qi9OLFU9TWF0aC5taW4oZS5fc2Nyb2xsWXx8MCxOKTtMLmF0dHIoe3dpZHRoOmUuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDplLl9lZmZIZWlnaHQtYix4OmIvMix5OmIvMn0pLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OmUuX2VmZkhlaWdodC0yKmIseDpiLHk6YitVfSksYy5zZXRDbGlwVXJsKEMsaCx0KSxxKFUsRixqKSxULm9uKCJ3aGVlbCIsKGZ1bmN0aW9uKCl7cShVPWkuY29uc3RyYWluKGUuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvQipOLDAsTiksRixqKSwwIT09VSYmVSE9PU4mJm4uZXZlbnQucHJldmVudERlZmF1bHQoKX0pKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50O3o9InRvdWNoc3RhcnQiPT09dC50eXBlP3QuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTp0LmNsaWVudFksUj1VfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OzI9PT10LmJ1dHRvbnN8fHQuY3RybEtleXx8KEQ9InRvdWNobW92ZSI9PT10LnR5cGU/dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOnQuY2xpZW50WSxxKFU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPShyLWUpL2ordDtyZXR1cm4gaS5jb25zdHJhaW4obiwwLE4pfShSLHosRCksRixqKSl9KSk7Ty5jYWxsKFYpO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNoc3RhcnQiPT09dC50eXBlJiYoej10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksUj1VKX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsidG91Y2htb3ZlIj09PXQudHlwZSYmKEQ9dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZLHEoVT1mdW5jdGlvbih0LGUscil7dmFyIG49KGUtcikvait0O3JldHVybiBpLmNvbnN0cmFpbihuLDAsTil9KFIseixEKSxGLGopKX0pKTtDLmNhbGwoSCl9ZnVuY3Rpb24gcShyLG4saSl7ZS5fc2Nyb2xsWT10Ll9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1yLGMuc2V0VHJhbnNsYXRlKEMsMCwtciksYy5zZXRSZWN0KE8sZS5fd2lkdGgscC5zY3JvbGxCYXJNYXJnaW4rcippLHAuc2Nyb2xsQmFyV2lkdGgsbiksRS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ5IixiK3IpfXQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24mJihULmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50OlQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoVCk7bT10LngseT10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPW0rdCxpPXkrcjtjLnNldFRyYW5zbGF0ZShULG4saSkscz1sLmFsaWduKG4sMCx4LmwseC5sK3gudyxlLnhhbmNob3IpLHU9bC5hbGlnbihpLDAseC50K3guaCx4LnQsZS55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09cyYmdm9pZCAwIT09dSYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQseyJsZWdlbmQueCI6cywibGVnZW5kLnkiOnV9KX0sY2xpY2tGbjpmdW5jdGlvbihlLG4pe3ZhciBpPXIuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmZpbHRlcigoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmNsaWVudFg+PXQubGVmdCYmbi5jbGllbnRYPD10LnJpZ2h0JiZuLmNsaWVudFk+PXQudG9wJiZuLmNsaWVudFk8PXQuYm90dG9tfSkpO2kuc2l6ZSgpPjAmJl8odCxULGksZSxuKX19KSl9XSx0KX0odCxlKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2V2ZW50cyI6NDg3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjYxNCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vY29sb3IiOjM2MSwiLi4vZHJhZ2VsZW1lbnQiOjM4MCwiLi4vZHJhd2luZyI6MzgzLCIuL2NvbnN0YW50cyI6NDEyLCIuL2dldF9sZWdlbmRfZGF0YSI6NDE1LCIuL2hhbmRsZV9jbGljayI6NDE2LCIuL2hlbHBlcnMiOjQxNywiLi9zdHlsZSI6NDE5LCJAcGxvdGx5L2QzIjo1OH1dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPWUuX2luSG92ZXIscz1pLmlzR3JvdXBlZChlKSxsPWkuaXNSZXZlcnNlZChlKSxjPXt9LHU9W10sZj0hMSxoPXt9LHA9MCxkPTA7ZnVuY3Rpb24gbSh0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT11LmluZGV4T2YodCk/KHUucHVzaCh0KSxmPSEwLGNbdF09W3JdKTpjW3RdLnB1c2gocik7ZWxzZXt2YXIgbj0ifn5pIitwO3UucHVzaChuKSxjW25dPVtyXSxwKyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBnPXRbcl0sdj1nWzBdLHk9di50cmFjZSx4PXkubGVnZW5kZ3JvdXA7aWYob3x8eS52aXNpYmxlJiZ5LnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHksInBpZS1saWtlIikpZm9yKGhbeF18fChoW3hdPXt9KSxhPTA7YTxnLmxlbmd0aDthKyspe3ZhciBiPWdbYV0ubGFiZWw7aFt4XVtiXXx8KG0oeCx7bGFiZWw6Yixjb2xvcjpnW2FdLmNvbG9yLGk6Z1thXS5pLHRyYWNlOnkscHRzOmdbYV0ucHRzfSksaFt4XVtiXT0hMCxkPU1hdGgubWF4KGQsKGJ8fCIiKS5sZW5ndGgpKX1lbHNlIG0oeCx2KSxkPU1hdGgubWF4KGQsKHkubmFtZXx8IiIpLmxlbmd0aCl9aWYoIXUubGVuZ3RoKXJldHVybltdO3ZhciBfPSFmfHwhcyx3PVtdO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBUPWNbdVtyXV07Xz93LnB1c2goVFswXSk6dy5wdXNoKFQpfWZvcihfJiYodz1bd10pLHI9MDtyPHcubGVuZ3RoO3IrKyl7dmFyIGs9MS8wO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspe3ZhciBBPXdbcl1bYV0udHJhY2UubGVnZW5kcmFuaztrPkEmJihrPUEpfXdbcl1bMF0uX2dyb3VwTWluUmFuaz1rLHdbcl1bMF0uX3ByZUdyb3VwU29ydD1yfXZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHJhY2UubGVnZW5kcmFuay1lLnRyYWNlLmxlZ2VuZHJhbmt8fHQuX3ByZVNvcnQtZS5fcHJlU29ydH07Zm9yKHcuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0WzBdLl9wcmVHcm91cFNvcnQ9ZX0pKSx3LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0uX2dyb3VwTWluUmFuay1lWzBdLl9ncm91cE1pblJhbmt8fHRbMF0uX3ByZUdyb3VwU29ydC1lWzBdLl9wcmVHcm91cFNvcnR9KSkscj0wO3I8dy5sZW5ndGg7cisrKXt3W3JdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5fcHJlU29ydD1lfSkpLHdbcl0uc29ydChNKTt2YXIgUz13W3JdWzBdLnRyYWNlLEU9bnVsbDtmb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXt2YXIgTD13W3JdW2FdLnRyYWNlLmxlZ2VuZGdyb3VwdGl0bGU7aWYoTCYmTC50ZXh0KXtFPUwsbyYmKEwuZm9udD1lLl9ncm91cFRpdGxlRm9udCk7YnJlYWt9fWlmKGwmJndbcl0ucmV2ZXJzZSgpLEUpe3ZhciBDPSExO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspaWYobi50cmFjZUlzKHdbcl1bYV0udHJhY2UsInBpZS1saWtlIikpe0M9ITA7YnJlYWt9d1tyXS51bnNoaWZ0KHtpOi0xLGdyb3VwVGl0bGU6RSxub0NsaWNrOkMsdHJhY2U6e3Nob3dsZWdlbmQ6Uy5zaG93bGVnZW5kLGxlZ2VuZGdyb3VwOlMubGVnZW5kZ3JvdXAsdmlzaWJsZToidG9nZ2xlaXRlbSI9PT1lLmdyb3VwY2xpY2t8fFMudmlzaWJsZX19KX1mb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXdbcl1bYV09W3dbcl1bYV1dfXJldHVybiBlLl9sZ3JvdXBzTGVuZ3RoPXcubGVuZ3RoLGUuX21heE5hbWVMZW5ndGg9ZCx3fX0seyIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2hlbHBlcnMiOjQxN31dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljayx1PW8ubGVnZW5kLmdyb3VwY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09bCYmInRvZ2dsZW90aGVycyI9PT1jJiZhJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKGUsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGE9ITEpOmE9ITEsMT09PXI/cz1sOjI9PT1yJiYocz1jKSxzKXt2YXIgZj0idG9nZ2xlZ3JvdXAiPT09dSxoPW8uaGlkZGVubGFiZWxzP28uaGlkZGVubGFiZWxzLnNsaWNlKCk6W10scD10LmRhdGEoKVswXVswXTtpZighcC5ncm91cFRpdGxlfHwhcC5ub0NsaWNrKXt2YXIgZCxtLGcsdix5LHg9ZS5fZnVsbERhdGEsYj1wLnRyYWNlLF89Yi5sZWdlbmRncm91cCx3PXt9LFQ9W10saz1bXSxBPVtdO2lmKGkudHJhY2VJcyhiLCJwaWUtbGlrZSIpKXt2YXIgTT1wLmxhYmVsLFM9aC5pbmRleE9mKE0pOyJ0b2dnbGUiPT09cz8tMT09PVM/aC5wdXNoKE0pOmguc3BsaWNlKFMsMSk6InRvZ2dsZW90aGVycyI9PT1zJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKHQpe00hPT10LmxhYmVsJiZoLnB1c2godC5sYWJlbCl9KSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PVMmJihoPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsaCl9ZWxzZXt2YXIgRSxMPV8mJl8ubGVuZ3RoLEM9W107aWYoTClmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKShFPXhbZF0pLnZpc2libGUmJkUubGVnZW5kZ3JvdXA9PT1fJiZDLnB1c2goZCk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgUDtzd2l0Y2goYi52aXNpYmxlKXtjYXNlITA6UD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOlA9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpQPSEwfWlmKEwpaWYoZilmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKSExIT09eFtkXS52aXNpYmxlJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyYmaih4W2RdLFApO2Vsc2UgaihiLFApO2Vsc2UgaihiLFApfWVsc2UgaWYoInRvZ2dsZW90aGVycyI9PT1zKXt2YXIgSSxPLHosRCxSPSEwO2ZvcihkPTA7ZDx4Lmxlbmd0aDtkKyspaWYoST14W2RdPT09Yix6PSEwIT09eFtkXS5zaG93bGVnZW5kLCEoSXx8enx8KE89TCYmeFtkXS5sZWdlbmRncm91cD09PV8pfHwhMCE9PXhbZF0udmlzaWJsZXx8aS50cmFjZUlzKHhbZF0sIm5vdExlZ2VuZElzb2xhdGFibGUiKSkpe1I9ITE7YnJlYWt9Zm9yKGQ9MDtkPHgubGVuZ3RoO2QrKylpZighMSE9PXhbZF0udmlzaWJsZSYmIWkudHJhY2VJcyh4W2RdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGIudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpqKHhbZF0sITApO2JyZWFrO2Nhc2UhMDpEPSEhUnx8ImxlZ2VuZG9ubHkiLEk9eFtkXT09PWIsej0hMCE9PXhbZF0uc2hvd2xlZ2VuZCYmIXhbZF0ubGVnZW5kZ3JvdXAsTz1JfHxMJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyxqKHhbZF0sISghTyYmIXopfHxEKX19Zm9yKGQ9MDtkPGsubGVuZ3RoO2QrKylpZihnPWtbZF0pe3ZhciBGPWcuY29uc3RydWN0VXBkYXRlKCksQj1PYmplY3Qua2V5cyhGKTtmb3IobT0wO208Qi5sZW5ndGg7bSsrKXY9QlttXSwod1t2XT13W3ZdfHxbXSlbQVtkXV09Rlt2XX1mb3IoeT1PYmplY3Qua2V5cyh3KSxkPTA7ZDx5Lmxlbmd0aDtkKyspZm9yKHY9eVtkXSxtPTA7bTxULmxlbmd0aDttKyspd1t2XS5oYXNPd25Qcm9wZXJ0eShtKXx8KHdbdl1bbV09dm9pZCAwKTtpLmNhbGwoIl9ndWlSZXN0eWxlIixlLHcsVCl9fX19ZnVuY3Rpb24gTih0LGUscil7dmFyIG49VC5pbmRleE9mKHQpLGk9d1tlXTtyZXR1cm4gaXx8KGk9d1tlXT1bXSksLTE9PT1ULmluZGV4T2YodCkmJihULnB1c2godCksbj1ULmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBqKHQsZSl7aWYoIXAuZ3JvdXBUaXRsZXx8Zil7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9a1tyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSxrW3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLEFbci5pbmRleF09TihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtOKHIuaW5kZXgsInZpc2libGUiLGMpfX19fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzM31dLDQxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJncm91cGVkIil9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigicmV2ZXJzZWQiKX19LHt9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6NDExLCIuL2RlZmF1bHRzIjo0MTMsIi4vZHJhdyI6NDE0LCIuL3N0eWxlIjo0MTl9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5zdHJUcmFuc2xhdGUscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4oZT8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyh0PyIiOiJyZXZlcnNlZCIpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuY29udG91cnMsbj11Lmhhc0xpbmVzKGUpLGk9dS5oYXNNYXJrZXJzKGUpLGE9ZS52aXNpYmxlJiZlLmZpbGwmJiJub25lIiE9PWUuZmlsbCxvPSExLHM9ITE7aWYocil7dmFyIGw9ci5jb2xvcmluZzsibGluZXMiPT09bD9vPSEwOm49Im5vbmUiPT09bHx8ImhlYXRtYXAiPT09bHx8ci5zaG93bGluZXMsImNvbnN0cmFpbnQiPT09ci50eXBlP2E9Ij0iIT09ci5fb3BlcmF0aW9uOiJmaWxsIiE9PWwmJiJoZWF0bWFwIiE9PWx8fChzPSEwKX1yZXR1cm57c2hvd01hcmtlcjppLHNob3dMaW5lOm4sc2hvd0ZpbGw6YSxzaG93R3JhZGllbnRMaW5lOm8sc2hvd0dyYWRpZW50RmlsbDpzLGFueUxpbmU6bnx8byxhbnlGaWxsOmF8fHN9fWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiB0JiZhLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZTp0PnI/cjp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHY9ZS5fZnVsbExheW91dDtyfHwocj12LmxlZ2VuZCk7dmFyIHk9ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyx4PXIuaXRlbXdpZHRoLGI9KHgrMipwLml0ZW1HYXApLzIsXz1vKGIsMCksdz1mdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4geT9uOk1hdGgubWluKGkscil9O2Z1bmN0aW9uIFQodCxhLG8pe3ZhciB1PXRbMF0udHJhY2UsZj11Lm1hcmtlcnx8e30saD1mLmxpbmV8fHt9LHA9bz91LnZpc2libGUmJnUudHlwZT09PW86aS50cmFjZUlzKHUsImJhciIpLGQ9bi5zZWxlY3QoYSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK28pLmRhdGEocD9bdF06W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK28sITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIixfKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxvPXcoYS5tbHcsZi5saW5lLDUsMik7aS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpO3ZhciBwPWEubWNjO2lmKCFyLl9pbkhvdmVyJiYibWMiaW4gYSl7dmFyIGQ9YyhmKSxtPWQubWlkO3ZvaWQgMD09PW0mJihtPShkLm1heCtkLm1pbikvMikscD1zLnRyeUNvbG9yc2NhbGUoZiwiIikobSl9dmFyIHY9cHx8YS5tY3x8Zi5jb2xvcix5PWYucGF0dGVybix4PXkmJnMuZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSwwLCIiKTtpZih4KXt2YXIgYj1zLmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvciwwLG51bGwpLF89cy5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsMCxudWxsKSxUPXkuZmdvcGFjaXR5LGs9Zyh5LnNpemUsOCwxMCksQT1nKHkuc29saWRpdHksLjUsMSksTT0ibGVnZW5kLSIrdS51aWQ7aS5jYWxsKHMucGF0dGVybiwibGVnZW5kIixlLE0seCxrLEEscCx5LmZpbGxtb2RlLGIsXyxUKX1lbHNlIGkuY2FsbChsLmZpbGwsdik7byYmbC5zdHJva2UoaSxhLm1sY3x8aC5jb2xvcil9KSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjppLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksYy5leGl0KCkucmVtb3ZlKCksYy5zaXplKCkpe3ZhciB1PShzLm1hcmtlcnx8e30pLmxpbmUscD13KGgodS53aWR0aCxvLnB0cyksdSw1LDIpLGQ9YS5taW5FeHRlbmQocyx7bWFya2VyOntsaW5lOnt3aWR0aDpwfX19KTtkLm1hcmtlci5saW5lLmNvbG9yPXUuY29sb3I7dmFyIG09YS5taW5FeHRlbmQobyx7dHJhY2U6ZH0pO2YoYyxtLGQpfX10LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSwiZyIsImxheWVycyIpO2kuc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIHM9ci52YWxpZ24sbD10WzBdLmxpbmVIZWlnaHQsYz10WzBdLmhlaWdodDtpZigibWlkZGxlIiE9PXMmJmwmJmMpe3ZhciB1PXt0b3A6MSxib3R0b206LTF9W3NdKiguNSoobC1jKzMpKTtpLmF0dHIoInRyYW5zZm9ybSIsbygwLHUpKX1lbHNlIGkuYXR0cigidHJhbnNmb3JtIixudWxsKTtpLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgZj1pLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksZi5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaT10WzBdLnRyYWNlLG89W107aWYoaS52aXNpYmxlKXN3aXRjaChpLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6bz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOm89W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOm89W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOm89W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpvPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKG8pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciB1LGY9bi5zZWxlY3QodGhpcyksaD1jKGkpLHA9aC5jb2xvcnNjYWxlLG09aC5yZXZlcnNlc2NhbGU7aWYocCl7aWYoIXIpe3ZhciBnPXAubGVuZ3RoO3U9MD09PW8/cFttP2ctMTowXVsxXToxPT09bz9wW20/MDpnLTFdWzFdOnBbTWF0aC5mbG9vcigoZy0xKS8yKV1bMV19fWVsc2V7dmFyIHY9aS52ZXJ0ZXhjb2xvcnx8aS5mYWNlY29sb3J8fGkuY29sb3I7dT1hLmlzQXJyYXlPclR5cGVkQXJyYXkodik/dltvXXx8dlswXTp2fWYuYXR0cigiZCIsdFswXSksdT9mLmNhbGwobC5maWxsLHUpOmYuY2FsbCgoZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciBuPSJsZWdlbmRmaWxsLSIraS51aWQ7cy5ncmFkaWVudCh0LGUsbixkKG0sInJhZGlhbCI9PT1yKSxwLCJmaWxsIil9fSkpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0id2F0ZXJmYWxsIj09PWUudHlwZTtpZih0WzBdLl9kaXN0aW5jdCYmcil7dmFyIGk9dFswXS50cmFjZVt0WzBdLmRpcl0ubWFya2VyO3JldHVybiB0WzBdLm1jPWkuY29sb3IsdFswXS5tbHc9aS5saW5lLndpZHRoLHRbMF0ubWxjPWkubGluZS5jb2xvcixUKHQsdGhpcywid2F0ZXJmYWxsIil9dmFyIGE9W107ZS52aXNpYmxlJiZyJiYoYT10WzBdLmhhc1RvdGFscz9bWyJpbmNyZWFzaW5nIiwiTS02LC02VjZIMFoiXSxbInRvdGFscyIsIk02LDZIMEwtNiwtNkgtMFoiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SDBaIl1dOltbImluY3JlYXNpbmciLCJNLTYsLTZWNkg2WiJdLFsiZGVjcmVhc2luZyIsIk02LDZWLTZILTZaIl1dKTt2YXIgbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZHdhdGVyZmFsbCIpLmRhdGEoYSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHdhdGVyZmFsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT13KHZvaWQgMCxpLmxpbmUsNSwyKTtyLmF0dHIoImQiLHRbMV0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChsLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKGwuc3Ryb2tlLGkubGluZS5jb2xvcil9KSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7VCh0LHRoaXMsImZ1bm5lbCIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe1QodCx0aGlzKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10WzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKHIudmlzaWJsZSYmaS50cmFjZUlzKHIsImJveC12aW9saW4iKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1sLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09bC5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBpPXcodm9pZCAwLHIubGluZSw1LDIpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsaSsicHgiKS5jYWxsKGwuZmlsbCxyLmZpbGxjb2xvciksaSYmbC5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9YS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOnk/MTI6YS5jb25zdHJhaW4oci5tYXJrZXIuc2l6ZSwyLDE2KSxzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9fSk7by5jYWxsKHMucG9pbnRTdHlsZSxjLGUpfX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXtrKHQsdGhpcywiZnVubmVsYXJlYSIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2sodCx0aGlzLCJwaWUiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLG89bSh0KSxsPW8uc2hvd0ZpbGwsZj1vLnNob3dMaW5lLGg9by5zaG93R3JhZGllbnRMaW5lLHA9by5zaG93R3JhZGllbnRGaWxsLGc9by5hbnlGaWxsLHY9by5hbnlMaW5lLHk9dFswXSxiPXkudHJhY2UsXz1jKGIpLFQ9Xy5jb2xvcnNjYWxlLGs9Xy5yZXZlcnNlc2NhbGUsQT11Lmhhc01hcmtlcnMoYil8fCFnPyJNNSwwIjp2PyJNNSwtMiI6Ik01LC0zIixNPW4uc2VsZWN0KHRoaXMpLFM9TS5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShsfHxwP1t0XTpbXSk7aWYoUy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImQiLEErImgiK3grInY2aC0iK3grInoiKS5jYWxsKChmdW5jdGlvbih0KXtpZih0LnNpemUoKSlpZihsKXMuZmlsbEdyb3VwU3R5bGUodCxlKTtlbHNle3ZhciByPSJsZWdlbmRmaWxsLSIrYi51aWQ7cy5ncmFkaWVudCh0LGUscixkKGspLFQsImZpbGwiKX19KSksZnx8aCl7dmFyIEU9dyh2b2lkIDAsYi5saW5lLDEwLDUpO2k9YS5taW5FeHRlbmQoYix7bGluZTp7d2lkdGg6RX19KSxyPVthLm1pbkV4dGVuZCh5LHt0cmFjZTppfSldfXZhciBMPU0uc2VsZWN0KCIubGVnZW5kbGluZXMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGZ8fGg/W3JdOltdKTtMLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLEwuZXhpdCgpLnJlbW92ZSgpLEwuYXR0cigiZCIsQSsoaD8ibCIreCsiLDAuMDAwMSI6ImgiK3gpKS5jYWxsKGY/cy5saW5lR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9ImxlZ2VuZGxpbmUtIitiLnVpZDtzLmxpbmVHcm91cFN0eWxlKHQpLHMuZ3JhZGllbnQodCxlLHIsZChrKSxULCJzdHJva2UiKX19KX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLG89bSh0KSxsPW8uYW55RmlsbCxjPW8uYW55TGluZSxmPW8uc2hvd0xpbmUsaD1vLnNob3dNYXJrZXIscD10WzBdLGQ9cC50cmFjZSxnPSFoJiYhYyYmIWwmJnUuaGFzVGV4dChkKTtmdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPWEubmVzdGVkUHJvcGVydHkoZCx0KS5nZXQoKSxvPWEuaXNBcnJheU9yVHlwZWRBcnJheShpKSYmZT9lKGkpOmk7aWYoeSYmbyYmdm9pZCAwIT09biYmKG89bikscil7aWYobzxyWzBdKXJldHVybiByWzBdO2lmKG8+clsxXSlyZXR1cm4gclsxXX1yZXR1cm4gb31mdW5jdGlvbiB4KHQpe3JldHVybiBwLl9kaXN0aW5jdCYmcC5pbmRleCYmdFtwLmluZGV4XT90W3AuaW5kZXhdOnRbMF19aWYoaHx8Z3x8Zil7dmFyIGI9e30sdz17fTtpZihoKXtiLm1jPXYoIm1hcmtlci5jb2xvciIseCksYi5teD12KCJtYXJrZXIuc3ltYm9sIix4KSxiLm1vPXYoIm1hcmtlci5vcGFjaXR5IixhLm1lYW4sWy4yLDFdKSxiLm1sYz12KCJtYXJrZXIubGluZS5jb2xvciIseCksYi5tbHc9digibWFya2VyLmxpbmUud2lkdGgiLGEubWVhbixbMCw1XSwyKSx3Lm1hcmtlcj17c2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifTt2YXIgVD12KCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSwxMik7Yi5tcz1ULHcubWFya2VyLnNpemU9VH1mJiYody5saW5lPXt3aWR0aDp2KCJsaW5lLndpZHRoIix4LFswLDEwXSw1KX0pLGcmJihiLnR4PSJBYSIsYi50cD12KCJ0ZXh0cG9zaXRpb24iLHgpLGIudHM9MTAsYi50Yz12KCJ0ZXh0Zm9udC5jb2xvciIseCksYi50Zj12KCJ0ZXh0Zm9udC5mYW1pbHkiLHgpKSxyPVthLm1pbkV4dGVuZChwLGIpXSwoaT1hLm1pbkV4dGVuZChkLHcpKS5zZWxlY3RlZHBvaW50cz1udWxsLGkudGV4dHRlbXBsYXRlPW51bGx9dmFyIGs9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLEE9ay5zZWxlY3RBbGwoInBhdGguc2NhdHRlcnB0cyIpLmRhdGEoaD9yOltdKTtBLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgic2NhdHRlcnB0cyIsITApLmF0dHIoInRyYW5zZm9ybSIsXyksQS5leGl0KCkucmVtb3ZlKCksQS5jYWxsKHMucG9pbnRTdHlsZSxpLGUpLGgmJihyWzBdLm1yYz0zKTt2YXIgTT1rLnNlbGVjdEFsbCgiZy5wb2ludHRleHQiKS5kYXRhKGc/cjpbXSk7TS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50dGV4dCIsITApLmFwcGVuZCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsXyksTS5leGl0KCkucmVtb3ZlKCksTS5zZWxlY3RBbGwoInRleHQiKS5jYWxsKHMudGV4dFBvaW50U3R5bGUsaSxlKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRjYW5kbGUiKS5kYXRhKGUudmlzaWJsZSYmImNhbmRsZXN0aWNrIj09PWUudHlwZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGNhbmRsZSIsITApLmF0dHIoImQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBILThNLTgsNlYtNkg4WiI6Ik0xNSwwSDhNOCwtNlY2SC04WiJ9KSkuYXR0cigidHJhbnNmb3JtIixfKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxvPXcodm9pZCAwLGEubGluZSw1LDIpO2kuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKGwuZmlsbCxhLmZpbGxjb2xvciksbyYmbC5zdHJva2UoaSxhLmxpbmUuY29sb3IpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZG9obGMiKS5kYXRhKGUudmlzaWJsZSYmIm9obGMiPT09ZS50eXBlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kb2hsYyIsITApLmF0dHIoImQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBIME0tOCwtNlYwIjoiTTE1LDBIME04LDZWMCJ9KSkuYXR0cigidHJhbnNmb3JtIixfKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxvPXcodm9pZCAwLGEubGluZSw1LDIpO2kuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChzLmRhc2hMaW5lLGEubGluZS5kYXNoLG8pLG8mJmwuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pKX0pKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyI6OTAxLCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSI6OTA3LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCIuLi9jb2xvciI6MzYxLCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vZHJhd2luZyI6MzgzLCIuL2NvbnN0YW50cyI6NDEyLCJAcGxvdGx5L2QzIjo1OH1dLDQyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17ZWRpdFR5cGU6Im1vZGViYXIiLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgiLGVkaXRUeXBlOiJtb2RlYmFyIn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sYWRkOnt2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDoiIixlZGl0VHlwZToibW9kZWJhciJ9LHJlbW92ZTp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6IiIsZWRpdFR5cGU6Im1vZGViYXIifX19LHsiLi9jb25zdGFudHMiOjQyMn1dLDQyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxzPXQoIi4uL3NoYXBlcy9kcmF3IikuZXJhc2VBY3RpdmVTaGFwZSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5fLHU9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGYodCxlKXt2YXIgcixpLG89ZS5jdXJyZW50VGFyZ2V0LHM9by5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGw9by5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLGM9dC5fZnVsbExheW91dCx1PXt9LGY9YS5saXN0KHQsbnVsbCwhMCksaD1jLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkO2lmKCJ6b29tIj09PXMpe3ZhciBwLGQ9ImluIj09PWw/LjU6MixtPSgxK2QpLzIsZz0oMS1kKS8yO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYoIShyPWZbaV0pLmZpeGVkcmFuZ2UpaWYocD1yLl9uYW1lLCJhdXRvIj09PWwpdVtwKyIuYXV0b3JhbmdlIl09ITA7ZWxzZSBpZigicmVzZXQiPT09bCl7aWYodm9pZCAwPT09ci5fcmFuZ2VJbml0aWFsKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2V7dmFyIHY9ci5fcmFuZ2VJbml0aWFsLnNsaWNlKCk7dVtwKyIucmFuZ2VbMF0iXT12WzBdLHVbcCsiLnJhbmdlWzFdIl09dlsxXX12b2lkIDAhPT1yLl9zaG93U3Bpa2VJbml0aWFsJiYodVtwKyIuc2hvd3NwaWtlcyJdPXIuX3Nob3dTcGlrZUluaXRpYWwsIm9uIiE9PWh8fHIuX3Nob3dTcGlrZUluaXRpYWx8fChoPSJvZmYiKSl9ZWxzZXt2YXIgeT1bci5yMmwoci5yYW5nZVswXSksci5yMmwoci5yYW5nZVsxXSldLHg9W20qeVswXStnKnlbMV0sbSp5WzFdK2cqeVswXV07dVtwKyIucmFuZ2VbMF0iXT1yLmwycih4WzBdKSx1W3ArIi5yYW5nZVsxXSJdPXIubDJyKHhbMV0pfX1lbHNlImhvdmVybW9kZSIhPT1zfHwieCIhPT1sJiYieSIhPT1sfHwobD1jLl9pc0hvcml6PyJ5IjoieCIsby5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixsKSksdVtzXT1sO2MuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aCxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCx1KX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2R8fFtdLHM9e30sbD1pLnNwbGl0KCIuIiksYz0wO2M8by5sZW5ndGg7YysrKXNbb1tjXSsiLiIrbFsxXV09YTt2YXIgdT0icGFuIj09PWE/YToiem9vbSI7cy5kcmFnbW9kZT11LG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHMpfWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT0icmVzZXRMYXN0U2F2ZSI9PT1yLGE9InJlc2V0RGVmYXVsdCI9PT1yLG89dC5fZnVsbExheW91dCxzPW8uX3N1YnBsb3RzLmdsM2R8fFtdLGw9e30sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgdSxmPXNbY10saD1mKyIuY2FtZXJhIixwPWYrIi5hc3BlY3RyYXRpbyIsZD1mKyIuYXNwZWN0bW9kZSIsbT1vW2ZdLl9zY2VuZTtpPyhsW2grIi51cCJdPW0udmlld0luaXRpYWwudXAsbFtoKyIuZXllIl09bS52aWV3SW5pdGlhbC5leWUsbFtoKyIuY2VudGVyIl09bS52aWV3SW5pdGlhbC5jZW50ZXIsdT0hMCk6YSYmKGxbaCsiLnVwIl09bnVsbCxsW2grIi5leWUiXT1udWxsLGxbaCsiLmNlbnRlciJdPW51bGwsdT0hMCksdSYmKGxbcCsiLngiXT1tLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLngsbFtwKyIueSJdPW0udmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueSxsW3ArIi56Il09bS52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby56LGxbZF09bS52aWV3SW5pdGlhbC5hc3BlY3Rtb2RlKX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxsKX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5fcHJldmlvdXNWYWwsaT10Ll9mdWxsTGF5b3V0LGE9aS5fc3VicGxvdHMuZ2wzZHx8W10sbz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLHM9e30sbD17fTtpZihuKWw9bixyLl9wcmV2aW91c1ZhbD1udWxsO2Vsc2V7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj1pW3VdLGg9dSsiLmhvdmVybW9kZSI7c1toXT1mLmhvdmVybW9kZSxsW2hdPSExO2Zvcih2YXIgcD0wO3A8MztwKyspe3ZhciBkPW9bcF0sbT11KyIuIitkKyIuc2hvd3NwaWtlcyI7bFttXT0hMSxzW21dPWZbZF0uc2hvd3NwaWtlc319ci5fcHJldmlvdXNWYWw9c31yZXR1cm4gbH1mdW5jdGlvbiBtKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nZW98fFtdLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoInpvb20iPT09aSl7dmFyIGY9dS5wcm9qZWN0aW9uLnNjYWxlLGg9ImluIj09PWE/MipmOi41KmY7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYysiLnByb2plY3Rpb24uc2NhbGUiLGgpfX0icmVzZXQiPT09aSYmeCh0LCJnZW8iKX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIWUuaG92ZXJtb2RlJiYoZS5faGFzKCJjYXJ0ZXNpYW4iKT9lLl9pc0hvcml6PyJ5IjoieCI6ImNsb3Nlc3QiKX1mdW5jdGlvbiB2KHQpe3ZhciBlPWcodCk7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsImhvdmVybW9kZSIsZSl9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLm1hcGJveHx8W10sbz17fSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1pW2xdLnpvb20sdT0iaW4iPT09cj8xLjA1KmM6Yy8xLjA1O29bbCsiLnpvb20iXT11fW4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LG8pfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3N1YnBsb3RzW2VdfHxbXSxhPXt9LG89MDtvPGkubGVuZ3RoO28rKylmb3IodmFyIHM9aVtvXSxsPXJbc10uX3N1YnBsb3Qudmlld0luaXRpYWwsYz1PYmplY3Qua2V5cyhsKSx1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBmPWNbdV07YVtzKyIuIitmXT1sW2ZdfW4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGEpfXUudG9JbWFnZT17bmFtZToidG9JbWFnZSIsdGl0bGU6ZnVuY3Rpb24odCl7dmFyIGU9KHQuX2NvbnRleHQudG9JbWFnZUJ1dHRvbk9wdGlvbnN8fHt9KS5mb3JtYXR8fCJwbmciO3JldHVybiBjKHQsInBuZyI9PT1lPyJEb3dubG9hZCBwbG90IGFzIGEgcG5nIjoiRG93bmxvYWQgcGxvdCIpfSxpY29uOm8uY2FtZXJhLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRleHQudG9JbWFnZUJ1dHRvbk9wdGlvbnMscj17Zm9ybWF0OmUuZm9ybWF0fHwicG5nIn07bC5ub3RpZmllcihjKHQsIlRha2luZyBzbmFwc2hvdCAtIHRoaXMgbWF5IHRha2UgYSBmZXcgc2Vjb25kcyIpLCJsb25nIiksInN2ZyIhPT1yLmZvcm1hdCYmbC5pc0lFKCkmJihsLm5vdGlmaWVyKGModCwiSUUgb25seSBzdXBwb3J0cyBzdmcuICBDaGFuZ2luZyBmb3JtYXQgdG8gc3ZnLiIpLCJsb25nIiksci5mb3JtYXQ9InN2ZyIpLFsiZmlsZW5hbWUiLCJ3aWR0aCIsImhlaWdodCIsInNjYWxlIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dCBpbiBlJiYoclt0XT1lW3RdKX0pKSxuLmNhbGwoImRvd25sb2FkSW1hZ2UiLHQscikudGhlbigoZnVuY3Rpb24oZSl7bC5ub3RpZmllcihjKHQsIlNuYXBzaG90IHN1Y2NlZWRlZCIpKyIgLSAiK2UsImxvbmciKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtsLm5vdGlmaWVyKGModCwiU29ycnksIHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCEiKSwibG9uZyIpfSkpfX0sdS5zZW5kRGF0YVRvQ2xvdWQ9e25hbWU6InNlbmREYXRhVG9DbG91ZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRWRpdCBpbiBDaGFydCBTdHVkaW8iKX0saWNvbjpvLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1LmVkaXRJbkNoYXJ0U3R1ZGlvPXtuYW1lOiJlZGl0SW5DaGFydFN0dWRpbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRWRpdCBpbiBDaGFydCBTdHVkaW8iKX0saWNvbjpvLnBlbmNpbCxjbGljazpmdW5jdGlvbih0KXtpLnNlbmREYXRhVG9DbG91ZCh0KX19LHUuem9vbTJkPXtuYW1lOiJ6b29tMmQiLF9jYXQ6Inpvb20iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiem9vbSIsaWNvbjpvLnpvb21ib3gsY2xpY2s6Zn0sdS5wYW4yZD17bmFtZToicGFuMmQiLF9jYXQ6InBhbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUGFuIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpvLnBhbixjbGljazpmfSx1LnNlbGVjdDJkPXtuYW1lOiJzZWxlY3QyZCIsX2NhdDoic2VsZWN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpvLnNlbGVjdGJveCxjbGljazpmfSx1Lmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLF9jYXQ6Imxhc3NvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJMYXNzbyBTZWxlY3QiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoibGFzc28iLGljb246by5sYXNzbyxjbGljazpmfSx1LmRyYXdjbG9zZWRwYXRoPXtuYW1lOiJkcmF3Y2xvc2VkcGF0aCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBjbG9zZWQgZnJlZWZvcm0iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2Nsb3NlZHBhdGgiLGljb246by5kcmF3Y2xvc2VkcGF0aCxjbGljazpmfSx1LmRyYXdvcGVucGF0aD17bmFtZToiZHJhd29wZW5wYXRoIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IG9wZW4gZnJlZWZvcm0iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd29wZW5wYXRoIixpY29uOm8uZHJhd29wZW5wYXRoLGNsaWNrOmZ9LHUuZHJhd2xpbmU9e25hbWU6ImRyYXdsaW5lIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGxpbmUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2xpbmUiLGljb246by5kcmF3bGluZSxjbGljazpmfSx1LmRyYXdyZWN0PXtuYW1lOiJkcmF3cmVjdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyByZWN0YW5nbGUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd3JlY3QiLGljb246by5kcmF3cmVjdCxjbGljazpmfSx1LmRyYXdjaXJjbGU9e25hbWU6ImRyYXdjaXJjbGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgY2lyY2xlIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdjaXJjbGUiLGljb246by5kcmF3Y2lyY2xlLGNsaWNrOmZ9LHUuZXJhc2VzaGFwZT17bmFtZToiZXJhc2VzaGFwZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRXJhc2UgYWN0aXZlIHNoYXBlIil9LGljb246by5lcmFzZXNoYXBlLGNsaWNrOnN9LHUuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIixfY2F0OiJ6b29taW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazpmfSx1Lnpvb21PdXQyZD17bmFtZToiem9vbU91dDJkIixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6Zn0sdS5hdXRvU2NhbGUyZD17bmFtZToiYXV0b1NjYWxlMmQiLF9jYXQ6ImF1dG9zY2FsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiQXV0b3NjYWxlIil9LGF0dHI6Inpvb20iLHZhbDoiYXV0byIsaWNvbjpvLmF1dG9zY2FsZSxjbGljazpmfSx1LnJlc2V0U2NhbGUyZD17bmFtZToicmVzZXRTY2FsZTJkIixfY2F0OiJyZXNldHNjYWxlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCBheGVzIil9LGF0dHI6Inpvb20iLHZhbDoicmVzZXQiLGljb246by5ob21lLGNsaWNrOmZ9LHUuaG92ZXJDbG9zZXN0Q2FydGVzaWFuPXtuYW1lOiJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLF9jYXQ6ImhvdmVyY2xvc2VzdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmfSx1LmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIixfY2F0OiJob3ZlckNvbXBhcmUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkNvbXBhcmUgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej8ieSI6IngifSxpY29uOm8udG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6Im5lIixjbGljazpmfSx1Lnpvb20zZD17bmFtZToiem9vbTNkIixfY2F0OiJ6b29tIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmh9LHUucGFuM2Q9e25hbWU6InBhbjNkIixfY2F0OiJwYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlBhbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJwYW4iLGljb246by5wYW4sY2xpY2s6aH0sdS5vcmJpdFJvdGF0aW9uPXtuYW1lOiJvcmJpdFJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJPcmJpdGFsIHJvdGF0aW9uIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Im9yYml0IixpY29uOm9bIjNkX3JvdGF0ZSJdLGNsaWNrOmh9LHUudGFibGVSb3RhdGlvbj17bmFtZToidGFibGVSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVHVybnRhYmxlIHJvdGF0aW9uIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InR1cm50YWJsZSIsaWNvbjpvWyJ6LWF4aXMiXSxjbGljazpofSx1LnJlc2V0Q2FtZXJhRGVmYXVsdDNkPXtuYW1lOiJyZXNldENhbWVyYURlZmF1bHQzZCIsX2NhdDoicmVzZXRDYW1lcmFEZWZhdWx0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIpfSxhdHRyOiJyZXNldERlZmF1bHQiLGljb246by5ob21lLGNsaWNrOnB9LHUucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLF9jYXQ6InJlc2V0Q2FtZXJhTGFzdFNhdmUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0IGNhbWVyYSB0byBsYXN0IHNhdmUiKX0sYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjpvLm1vdmllLGNsaWNrOnB9LHUuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscil9fSx1Lnpvb21Jbkdlbz17bmFtZToiem9vbUluR2VvIixfY2F0OiJ6b29taW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazptfSx1Lnpvb21PdXRHZW89e25hbWU6Inpvb21PdXRHZW8iLF9jYXQ6Inpvb21vdXQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm8uem9vbV9taW51cyxjbGljazptfSx1LnJlc2V0R2VvPXtuYW1lOiJyZXNldEdlbyIsX2NhdDoicmVzZXQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0Iil9LGF0dHI6InJlc2V0Iix2YWw6bnVsbCxpY29uOm8uYXV0b3NjYWxlLGNsaWNrOm19LHUuaG92ZXJDbG9zZXN0R2VvPXtuYW1lOiJob3ZlckNsb3Nlc3RHZW8iLF9jYXQ6ImhvdmVyY2xvc2VzdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSx1LmhvdmVyQ2xvc2VzdEdsMmQ9e25hbWU6ImhvdmVyQ2xvc2VzdEdsMmQiLF9jYXQ6ImhvdmVyY2xvc2VzdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSx1LmhvdmVyQ2xvc2VzdFBpZT17bmFtZToiaG92ZXJDbG9zZXN0UGllIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUucmVzZXRWaWV3U2Fua2V5PXtuYW1lOiJyZXNldFNhbmtleUdyb3VwIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGljb246by5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17Im5vZGUuZ3JvdXBzIjpbXSwibm9kZS54IjpbXSwibm9kZS55IjpbXX0scj0wO3I8dC5fZnVsbERhdGEubGVuZ3RoO3IrKyl7dmFyIGk9dC5fZnVsbERhdGFbcl0uX3ZpZXdJbml0aWFsO2VbIm5vZGUuZ3JvdXBzIl0ucHVzaChpLm5vZGUuZ3JvdXBzLnNsaWNlKCkpLGVbIm5vZGUueCJdLnB1c2goaS5ub2RlLnguc2xpY2UoKSksZVsibm9kZS55Il0ucHVzaChpLm5vZGUueS5zbGljZSgpKX1uLmNhbGwoInJlc3R5bGUiLHQsZSl9fSx1LnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWQodCxlKTtyLmhvdmVybW9kZT1nKHQpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS5yZXNldFZpZXdzPXtuYW1lOiJyZXNldFZpZXdzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3cyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0IiksZih0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIikscCh0LGUpLHgodCwiZ2VvIikseCh0LCJtYXBib3giKX19LHUudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIFNwaWtlIExpbmVzIil9LGljb246by5zcGlrZWxpbmUsYXR0cjoiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQiLHZhbDoib24iLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkO2UuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Im9uIj09PXI/Im9mZiI6Im9uIixuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxmdW5jdGlvbih0KXtmb3IodmFyIGU9Im9uIj09PXQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQscj1hLmxpc3QodCxudWxsLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtuW28uX25hbWUrIi5zaG93c3Bpa2VzIl09ISFlfHxvLl9zaG93U3Bpa2VJbml0aWFsfXJldHVybiBufSh0KSl9fSx1LnJlc2V0Vmlld01hcGJveD17bmFtZToicmVzZXRWaWV3TWFwYm94IixfY2F0OiJyZXNldFZpZXciLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0IHZpZXciKX0sYXR0cjoicmVzZXQiLGljb246by5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe3godCwibWFwYm94Iil9fSx1Lnpvb21Jbk1hcGJveD17bmFtZToiem9vbUluTWFwYm94IixfY2F0OiJ6b29taW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazp5fSx1Lnpvb21PdXRNYXBib3g9e25hbWU6Inpvb21PdXRNYXBib3giLF9jYXQ6Inpvb21vdXQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm8uem9vbV9taW51cyxjbGljazp5fX0seyIuLi8uLi9mb250cy9wbG90aWNvbiI6NDc3LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3NoYXBlcy9kcmF3Ijo0NDV9XSw0MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9idXR0b25zIiksaT1PYmplY3Qua2V5cyhuKSxhPVsiZHJhd2xpbmUiLCJkcmF3b3BlbnBhdGgiLCJkcmF3Y2xvc2VkcGF0aCIsImRyYXdjaXJjbGUiLCJkcmF3cmVjdCIsImVyYXNlc2hhcGUiXSxvPVsidjFob3Zlcm1vZGUiLCJob3ZlcmNsb3Nlc3QiLCJob3ZlcmNvbXBhcmUiLCJ0b2dnbGVob3ZlciIsInRvZ2dsZXNwaWtlbGluZXMiXS5jb25jYXQoYSkscz1bXTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtpZigtMT09PW8uaW5kZXhPZih0Ll9jYXR8fHQubmFtZSkpe3ZhciBlPXQubmFtZSxyPSh0Ll9jYXR8fHQubmFtZSkudG9Mb3dlckNhc2UoKTstMT09PXMuaW5kZXhPZihlKSYmcy5wdXNoKGUpLC0xPT09cy5pbmRleE9mKHIpJiZzLnB1c2gocil9fShuW3RdKX0pKSxzLnNvcnQoKSxlLmV4cG9ydHM9e0RSQVdfTU9ERVM6YSxiYWNrQnV0dG9uczpvLGZvcmVCdXR0b25zOnN9fSx7Ii4vYnV0dG9ucyI6NDIxfV0sNDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubW9kZWJhcnx8e30scz1hLm5ld0NvbnRhaW5lcihlLCJtb2RlYmFyIik7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBuLmNvZXJjZShyLHMsbyx0LGUpfWwoIm9yaWVudGF0aW9uIiksbCgiYmdjb2xvciIsaS5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciBjPWkuY29udHJhc3QoaS5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtsKCJjb2xvciIsaS5hZGRPcGFjaXR5KGMsLjMpKSxsKCJhY3RpdmVjb2xvciIsaS5hZGRPcGFjaXR5KGMsLjcpKSxsKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLGwoImFkZCIpLGwoInJlbW92ZSIpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4LCIuLi9jb2xvciI6MzYxLCIuL2F0dHJpYnV0ZXMiOjQyMH1dLDQyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibW9kZWJhciIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksbWFuYWdlOnQoIi4vbWFuYWdlIil9fSx7Ii4vYXR0cmlidXRlcyI6NDIwLCIuL2RlZmF1bHRzIjo0MjMsIi4vbWFuYWdlIjo0MjV9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixzPXQoIi4vbW9kZWJhciIpLGw9dCgiLi9idXR0b25zIiksYz10KCIuL2NvbnN0YW50cyIpLkRSQVdfTU9ERVM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9jb250ZXh0LHU9ZS5fbW9kZUJhcjtpZihyLmRpc3BsYXlNb2RlQmFyfHxyLndhdGVybWFyayl7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb0FkZCkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTt2YXIgZixoPXIubW9kZUJhckJ1dHRvbnM7Zj1BcnJheS5pc0FycmF5KGgpJiZoLmxlbmd0aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9dFtlXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1sW2ldKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9ucyogY29uZmlndXJhdGlvbiBvcHRpb25zIiwiaW52YWxpZCBidXR0b24gbmFtZSJdLmpvaW4oIiAiKSk7dFtlXVtuXT1sW2ldfX1yZXR1cm4gdH0oaCk6IXIuZGlzcGxheU1vZGVCYXImJnIud2F0ZXJtYXJrP1tdOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxzPXQuX2NvbnRleHQ7ZnVuY3Rpb24gdSh0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiEwfWVsc2V7dmFyIHI9ZS5uYW1lLG49ZS5fY2F0fHxlLm5hbWU7aWYocj09PXR8fG49PT10LnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9cmV0dXJuITF9dmFyIGY9ZS5tb2RlYmFyLmFkZDsic3RyaW5nIj09dHlwZW9mIGYmJihmPVtmXSk7dmFyIGg9ZS5tb2RlYmFyLnJlbW92ZTsic3RyaW5nIj09dHlwZW9mIGgmJihoPVtoXSk7dmFyIHA9cy5tb2RlQmFyQnV0dG9uc1RvQWRkLmNvbmNhdChmLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUubGVuZ3RoO2UrKylpZih1KHQscy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0pKSksZD1zLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUuY29uY2F0KGguZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHMubW9kZUJhckJ1dHRvbnNUb0FkZC5sZW5ndGg7ZSsrKWlmKHUodCxzLm1vZGVCYXJCdXR0b25zVG9BZGRbZV0pKXJldHVybiExO3JldHVybiEwfSkpKSxtPWUuX2hhcygiY2FydGVzaWFuIiksZz1lLl9oYXMoImdsM2QiKSx2PWUuX2hhcygiZ2VvIikseT1lLl9oYXMoInBpZSIpLHg9ZS5faGFzKCJmdW5uZWxhcmVhIiksYj1lLl9oYXMoImdsMmQiKSxfPWUuX2hhcygidGVybmFyeSIpLHc9ZS5faGFzKCJtYXBib3giKSxUPWUuX2hhcygicG9sYXIiKSxrPWUuX2hhcygic21pdGgiKSxBPWUuX2hhcygic2Fua2V5IiksTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSxudWxsLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspaWYoIWVbcl0uZml4ZWRyYW5nZSlyZXR1cm4hMTtyZXR1cm4hMH0oZSksUz1vKGUuaG92ZXJtb2RlKSxFPVtdO2Z1bmN0aW9uIEwodCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLGk9bFtuXSxhPWkubmFtZS50b0xvd2VyQ2FzZSgpLG89KGkuX2NhdHx8aS5uYW1lKS50b0xvd2VyQ2FzZSgpLHM9ITEsYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgdT1kW2NdLnRvTG93ZXJDYXNlKCk7aWYodT09PWF8fHU9PT1vKXtzPSEwO2JyZWFrfX1zfHxlLnB1c2gobFtuXSl9RS5wdXNoKGUpfX12YXIgQz1bInRvSW1hZ2UiXTtzLnNob3dFZGl0SW5DaGFydFN0dWRpbz9DLnB1c2goImVkaXRJbkNoYXJ0U3R1ZGlvIik6cy5zaG93U2VuZFRvQ2xvdWQmJkMucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7TChDKTt2YXIgUD1bXSxJPVtdLE89W10sej1bXTsobXx8Ynx8eXx8eHx8XykrditnK3crVCtrPjE/KEk9WyJ0b2dnbGVIb3ZlciJdLE89WyJyZXNldFZpZXdzIl0pOnY/KFA9WyJ6b29tSW5HZW8iLCJ6b29tT3V0R2VvIl0sST1bImhvdmVyQ2xvc2VzdEdlbyJdLE89WyJyZXNldEdlbyJdKTpnPyhJPVsiaG92ZXJDbG9zZXN0M2QiXSxPPVsicmVzZXRDYW1lcmFEZWZhdWx0M2QiLCJyZXNldENhbWVyYUxhc3RTYXZlM2QiXSk6dz8oUD1bInpvb21Jbk1hcGJveCIsInpvb21PdXRNYXBib3giXSxJPVsidG9nZ2xlSG92ZXIiXSxPPVsicmVzZXRWaWV3TWFwYm94Il0pOmI/ST1bImhvdmVyQ2xvc2VzdEdsMmQiXTp5P0k9WyJob3ZlckNsb3Nlc3RQaWUiXTpBPyhJPVsiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0sTz1bInJlc2V0Vmlld1NhbmtleSJdKTpJPVsidG9nZ2xlSG92ZXIiXTttJiYoST1bInRvZ2dsZVNwaWtlbGluZXMiLCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSk7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCFhLnRyYWNlSXModFtlXSwibm9Ib3ZlciIpKXJldHVybiExO3JldHVybiEwfShyKXx8UykmJihJPVtdKTshbSYmIWJ8fE18fChQPVsiem9vbUluMmQiLCJ6b29tT3V0MmQiLCJhdXRvU2NhbGUyZCJdLCJyZXNldFZpZXdzIiE9PU9bMF0mJihPPVsicmVzZXRTY2FsZTJkIl0pKTtnP3o9WyJ6b29tM2QiLCJwYW4zZCIsIm9yYml0Um90YXRpb24iLCJ0YWJsZVJvdGF0aW9uIl06KG18fGIpJiYhTXx8Xz96PVsiem9vbTJkIiwicGFuMmQiXTp3fHx2P3o9WyJwYW4yZCJdOlQmJih6PVsiem9vbTJkIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9ITEscj0wO3I8dC5sZW5ndGgmJiFlO3IrKyl7dmFyIG49dFtyXTtuLl9tb2R1bGUmJm4uX21vZHVsZS5zZWxlY3RQb2ludHMmJihhLnRyYWNlSXMobiwic2NhdHRlci1saWtlIik/KGkuaGFzTWFya2VycyhuKXx8aS5oYXNUZXh0KG4pKSYmKGU9ITApOmEudHJhY2VJcyhuLCJib3gtdmlvbGluIikmJiJhbGwiIT09bi5ib3hwb2ludHMmJiJhbGwiIT09bi5wb2ludHN8fChlPSEwKSl9cmV0dXJuIGV9KShyKSYmei5wdXNoKCJzZWxlY3QyZCIsImxhc3NvMmQiKTt2YXIgRD1bXSxSPWZ1bmN0aW9uKHQpey0xPT09RC5pbmRleE9mKHQpJiYtMSE9PUkuaW5kZXhPZih0KSYmRC5wdXNoKHQpfTtpZihBcnJheS5pc0FycmF5KHApKXtmb3IodmFyIEY9W10sQj0wO0I8cC5sZW5ndGg7QisrKXt2YXIgTj1wW0JdOyJzdHJpbmciPT10eXBlb2YgTj8oTj1OLnRvTG93ZXJDYXNlKCksLTEhPT1jLmluZGV4T2YoTik/KGUuX2hhcygibWFwYm94Iil8fGUuX2hhcygiY2FydGVzaWFuIikpJiZ6LnB1c2goTik6InRvZ2dsZXNwaWtlbGluZXMiPT09Tj9SKCJ0b2dnbGVTcGlrZWxpbmVzIik6InRvZ2dsZWhvdmVyIj09PU4/UigidG9nZ2xlSG92ZXIiKToiaG92ZXJjb21wYXJlIj09PU4/UigiaG92ZXJDb21wYXJlQ2FydGVzaWFuIik6ImhvdmVyY2xvc2VzdCI9PT1OPyhSKCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iKSxSKCJob3ZlckNsb3Nlc3RHZW8iKSxSKCJob3ZlckNsb3Nlc3QzZCIpLFIoImhvdmVyQ2xvc2VzdEdsMmQiKSxSKCJob3ZlckNsb3Nlc3RQaWUiKSk6InYxaG92ZXJtb2RlIj09PU4mJihSKCJ0b2dnbGVIb3ZlciIpLFIoImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIpLFIoImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIpLFIoImhvdmVyQ2xvc2VzdEdlbyIpLFIoImhvdmVyQ2xvc2VzdDNkIiksUigiaG92ZXJDbG9zZXN0R2wyZCIpLFIoImhvdmVyQ2xvc2VzdFBpZSIpKSk6Ri5wdXNoKE4pfXA9Rn1yZXR1cm4gTCh6KSxMKFAuY29uY2F0KE8pKSxMKEQpLGZ1bmN0aW9uKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9KEUscCl9KHQpLHU/dS51cGRhdGUodCxmKTplLl9tb2RlQmFyPXModCxmKX1lbHNlIHUmJih1LmRlc3Ryb3koKSxkZWxldGUgZS5fbW9kZUJhcil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCIuLi9meC9oZWxwZXJzIjozOTcsIi4vYnV0dG9ucyI6NDIxLCIuL2NvbnN0YW50cyI6NDIyLCIuL21vZGViYXIiOjQyNn1dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9mb250cy9wbG90aWNvbiIpLHM9dCgiLi4vLi4vdmVyc2lvbiIpLnZlcnNpb24sbD1uZXcgRE9NUGFyc2VyO2Z1bmN0aW9uIGModCl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5lbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudXBkYXRlKHQuZ3JhcGhJbmZvLHQuYnV0dG9ucyksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KX12YXIgdT1jLnByb3RvdHlwZTt1LnVwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuZ3JhcGhJbmZvPXQ7dmFyIHI9dGhpcy5ncmFwaEluZm8uX2NvbnRleHQsbj10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxpPSJtb2RlYmFyLSIrbi5fdWlkO3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIixpKSx0aGlzLl91aWQ9aSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJtb2RlYmFyIiwiaG92ZXIiPT09ci5kaXNwbGF5TW9kZUJhciYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPSIgbW9kZWJhci0taG92ZXIgZWFzZS1iZyIpLCJ2Ij09PW4ubW9kZWJhci5vcmllbnRhdGlvbiYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPSIgdmVydGljYWwiLGU9ZS5yZXZlcnNlKCkpO3ZhciBvPW4ubW9kZWJhcixzPSJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyPyIuanMtcGxvdGx5LXBsb3QgLnBsb3RseTpob3ZlciAiOiIiO2EuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZShpKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSxzKyIjIitpKyIgLm1vZGViYXItZ3JvdXAiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK28uYmdjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksIiMiK2krIiAubW9kZWJhci1idG4gLmljb24gcGF0aCIsImZpbGw6ICIrby5jb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksIiMiK2krIiAubW9kZWJhci1idG46aG92ZXIgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksIiMiK2krIiAubW9kZWJhci1idG4uYWN0aXZlIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uYWN0aXZlY29sb3IpO3ZhciBsPSF0aGlzLmhhc0J1dHRvbnMoZSksYz10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvLHU9dGhpcy5sb2NhbGUhPT1yLmxvY2FsZTtpZih0aGlzLmxvY2FsZT1yLmxvY2FsZSwobHx8Y3x8dSkmJih0aGlzLnJlbW92ZUFsbEJ1dHRvbnMoKSx0aGlzLnVwZGF0ZUJ1dHRvbnMoZSksci53YXRlcm1hcmt8fHIuZGlzcGxheWxvZ28pKXt2YXIgZj10aGlzLmdldExvZ28oKTtyLndhdGVybWFyayYmKGYuY2xhc3NOYW1lPWYuY2xhc3NOYW1lKyIgd2F0ZXJtYXJrIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uP3RoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUoZix0aGlzLmVsZW1lbnQuY2hpbGROb2Rlc1swXSk6dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGYpLHRoaXMuaGFzTG9nbz0hMH10aGlzLnVwZGF0ZUFjdGl2ZUJ1dHRvbigpfSx1LnVwZGF0ZUJ1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmJ1dHRvbnM9dCx0aGlzLmJ1dHRvbkVsZW1lbnRzPVtdLHRoaXMuYnV0dG9uc05hbWVzPVtdLHRoaXMuYnV0dG9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1lLmNyZWF0ZUdyb3VwKCk7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT1lLmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSksZS5lbGVtZW50LmFwcGVuZENoaWxkKHIpfSkpfSx1LmNyZWF0ZUdyb3VwPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuY2xhc3NOYW1lPSJtb2RlYmFyLWdyb3VwIix0fSx1LmNyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3Iuc2V0QXR0cmlidXRlKCJyZWwiLCJ0b29sdGlwIiksci5jbGFzc05hbWU9Im1vZGViYXItYnRuIjt2YXIgaT10LnRpdGxlO3ZvaWQgMD09PWk/aT10Lm5hbWU6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkodGhpcy5ncmFwaEluZm8pKSwoaXx8MD09PWkpJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsaSksdm9pZCAwIT09dC5hdHRyJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIix0LmF0dHIpO3ZhciBhPXQudmFsO2lmKHZvaWQgMCE9PWEmJigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGE9YSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsYSkpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNsaWNrKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnY2xpY2snIGZ1bmN0aW9uIGluIGJ1dHRvbiBjb25maWciKTtyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSkpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIsdC50b2dnbGV8fCExKSx0LnRvZ2dsZSYmbi5zZWxlY3QocikuY2xhc3NlZCgiYWN0aXZlIiwhMCk7dmFyIHM9dC5pY29uO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzP3IuYXBwZW5kQ2hpbGQocygpKTpyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihzfHxvLnF1ZXN0aW9uKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtZ3Jhdml0eSIsdC5ncmF2aXR5fHwibiIpLHJ9LHUuY3JlYXRlSWNvbj1mdW5jdGlvbih0KXt2YXIgZSxyPWkodC5oZWlnaHQpP051bWJlcih0LmhlaWdodCk6dC5hc2NlbnQtdC5kZXNjZW50LG49Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtpZih0LnBhdGgpeyhlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJzdmciKSkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbMCwwLHQud2lkdGgscl0uam9pbigiICIpKSxlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpY29uIik7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInBhdGgiKTthLnNldEF0dHJpYnV0ZSgiZCIsdC5wYXRoKSx0LnRyYW5zZm9ybT9hLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0LnRyYW5zZm9ybSk6dm9pZCAwIT09dC5hc2NlbnQmJmEuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJtYXRyaXgoMSAwIDAgLTEgMCAiK3QuYXNjZW50KyIpIiksZS5hcHBlbmRDaGlsZChhKX10LnN2ZyYmKGU9bC5wYXJzZUZyb21TdHJpbmcodC5zdmcsImFwcGxpY2F0aW9uL3htbCIpLmNoaWxkTm9kZXNbMF0pO3JldHVybiBlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMWVtIiksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMWVtIiksZX0sdS51cGRhdGVBY3RpdmVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQscj12b2lkIDAhPT10P3QuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKTpudWxsO3RoaXMuYnV0dG9uRWxlbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLHM9InRydWUiPT09dC5nZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIiksbD1uLnNlbGVjdCh0KTtpZihzKW89PT1yJiZsLmNsYXNzZWQoImFjdGl2ZSIsIWwuY2xhc3NlZCgiYWN0aXZlIikpO2Vsc2V7dmFyIGM9bnVsbD09PW8/bzphLm5lc3RlZFByb3BlcnR5KGUsbykuZ2V0KCk7bC5jbGFzc2VkKCJhY3RpdmUiLGM9PT1pKX19KSl9LHUuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LHUuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3RseS5jb20vIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsYS5fKHRoaXMuZ3JhcGhJbmZvLCJQcm9kdWNlZCB3aXRoIFBsb3RseS5qcyIpKyIgKHYiK3MrIikiKSxlLmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LHUucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSx1LmRlc3Ryb3k9ZnVuY3Rpb24oKXthLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSksYS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgYyh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoaS5lbGVtZW50KS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0IiwhMCkudGV4dCgiUFJJVkFURSIpLGl9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjo0NzcsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi92ZXJzaW9uIjoxMTE4LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDQyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPSgwLHQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSkoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzdGVwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJtb250aCIsInllYXIiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiYWxsIl0sZGZsdDoibW9udGgiLGVkaXRUeXBlOiJwbG90In0sc3RlcG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJhY2t3YXJkIiwidG9kYXRlIl0sZGZsdDoiYmFja3dhcmQiLGVkaXRUeXBlOiJwbG90In0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sYnV0dG9uczphLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJwbG90In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7ZWRpdFR5cGU6InBsb3QifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6InBsb3QifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MH1dLDQyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3lQYWQ6LjAyLG1pbkJ1dHRvbldpZHRoOjMwLHJ4OjMscnk6MyxsaWdodEFtb3VudDoyNSxkYXJrQW1vdW50OjEwfX0se31dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkuY2FsZW5kYXI7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscy5idXR0b25zLHIsaSl9aWYobygidmlzaWJsZSIpKXt2YXIgbD1vKCJzdGVwIik7ImFsbCIhPT1sJiYoIWF8fCJncmVnb3JpYW4iPT09YXx8Im1vbnRoIiE9PWwmJiJ5ZWFyIiE9PWw/bygic3RlcG1vZGUiKTplLnN0ZXBtb2RlPSJiYWNrd2FyZCIsbygiY291bnQiKSksbygibGFiZWwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsZil7dmFyIGg9dC5yYW5nZXNlbGVjdG9yfHx7fSxwPWEubmV3Q29udGFpbmVyKGUsInJhbmdlc2VsZWN0b3IiKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG4uY29lcmNlKGgscCxzLHQsZSl9aWYoZCgidmlzaWJsZSIsbyhoLHAse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjLGNhbGVuZGFyOmZ9KS5sZW5ndGg+MCkpe3ZhciBtPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSkpLGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPWVbblthXV0uZG9tYWluO28mJihpPU1hdGgubWF4KG9bMV0saSkpfXJldHVyblt0LmRvbWFpblswXSxpK2wueVBhZF19KGUscix1KTtkKCJ4IixtWzBdKSxkKCJ5IixtWzFdKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxkKCJ4YW5jaG9yIiksZCgieWFuY2hvciIpLG4uY29lcmNlRm9udChkLCJmb250IixyLmZvbnQpO3ZhciBnPWQoImJnY29sb3IiKTtkKCJhY3RpdmVjb2xvciIsaS5jb250cmFzdChnLGwubGlnaHRBbW91bnQsbC5kYXJrQW1vdW50KSksZCgiYm9yZGVyY29sb3IiKSxkKCJib3JkZXJ3aWR0aCIpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDQsIi4uL2NvbG9yIjozNjEsIi4vYXR0cmlidXRlcyI6NDI3LCIuL2NvbnN0YW50cyI6NDI4fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zdHJUcmFuc2xhdGUsdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHA9aC5MSU5FX1NQQUNJTkcsZD1oLkZST01fVEwsbT1oLkZST01fQlIsZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9nZXRfdXBkYXRlX29iamVjdCIpO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJzZWxlY3Rvci1yZWN0IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSk7bi5hdHRyKHtyeDpnLnJ4LHJ5Omcucnl9KSxuLmNhbGwoby5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChvLmZpbGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNBY3RpdmV8fGUuX2lzSG92ZXJlZD90LmFjdGl2ZWNvbG9yOnQuYmdjb2xvcn0oZSxyKSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe2wuZW5zdXJlU2luZ2xlKHQsInRleHQiLCJzZWxlY3Rvci10ZXh0IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpfSkpLmNhbGwocy5mb250LGUuZm9udCkudGV4dChmdW5jdGlvbih0LGUpe2lmKHQubGFiZWwpcmV0dXJuIGU/bC50ZW1wbGF0ZVN0cmluZyh0LmxhYmVsLGUpOnQubGFiZWw7cmV0dXJuImFsbCI9PT10LnN0ZXA/ImFsbCI6dC5jb3VudCt0LnN0ZXAuY2hhckF0KDApfShyLG4uX2Z1bGxMYXlvdXQuX21ldGEpKS5jYWxsKChmdW5jdGlvbih0KXt1LmNvbnZlcnRUb1RzcGFucyh0LG4pfSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIucmFuZ2VzZWxlY3RvciIpLmRhdGEoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWYubGlzdCh0LCJ4IiwhMCkscj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5yYW5nZXNlbGVjdG9yJiZpLnJhbmdlc2VsZWN0b3IudmlzaWJsZSYmci5wdXNoKGkpfXJldHVybiByfSh0KSx5KTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmFuZ2VzZWxlY3RvciIsITApLGUuZXhpdCgpLnJlbW92ZSgpLGUuc3R5bGUoe2N1cnNvcjoicG9pbnRlciIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLGY9by5yYW5nZXNlbGVjdG9yLGg9ci5zZWxlY3RBbGwoImcuYnV0dG9uIikuZGF0YShsLmZpbHRlclZpc2libGUoZi5idXR0b25zKSk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT12KG8sZSk7ZS5faXNBY3RpdmU9ZnVuY3Rpb24odCxlLHIpe2lmKCJhbGwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh4LGYsZSksci5jYWxsKGIsZixlLHQpLHIub24oImNsaWNrIiwoZnVuY3Rpb24oKXt0Ll9kcmFnZ2VkfHxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX0pKSxyLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeCxmLGUpfSkpLHIub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITEsci5jYWxsKHgsZixlKX0pKX0pKSxmdW5jdGlvbih0LGUscixpLG8pe3ZhciBmPTAsaD0wLHY9ci5ib3JkZXJ3aWR0aDtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGU9ci5mb250LnNpemUqcCxpPU1hdGgubWF4KGUqdS5saW5lQ291bnQodCksMTYpKzM7aD1NYXRoLm1heChoLGkpfSkpLGUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCIuc2VsZWN0b3ItcmVjdCIpLGk9dC5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKnAsbD11LmxpbmVDb3VudChpKSxkPU1hdGgubWF4KGErMTAsZy5taW5CdXR0b25XaWR0aCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGModitmLHYpKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6ZCxoZWlnaHQ6aH0pLHUucG9zaXRpb25UZXh0KGksZC8yLGgvMi0obC0xKSpvLzIrMyksZis9ZCs1fSkpO3ZhciB5PXQuX2Z1bGxMYXlvdXQuX3NpemUseD15LmwreS53KnIueCxiPXkudCt5LmgqKDEtci55KSxfPSJsZWZ0IjtsLmlzUmlnaHRBbmNob3IocikmJih4LT1mLF89InJpZ2h0Iik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHgtPWYvMixfPSJjZW50ZXIiKTt2YXIgdz0idG9wIjtsLmlzQm90dG9tQW5jaG9yKHIpJiYoYi09aCx3PSJib3R0b20iKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoYi09aC8yLHc9Im1pZGRsZSIpO2Y9TWF0aC5jZWlsKGYpLGg9TWF0aC5jZWlsKGgpLHg9TWF0aC5yb3VuZCh4KSxiPU1hdGgucm91bmQoYiksYS5hdXRvTWFyZ2luKHQsaSsiLXJhbmdlLXNlbGVjdG9yIix7eDpyLngseTpyLnksbDpmKmRbX10scjpmKm1bX10sYjpoKm1bd10sdDpoKmRbd119KSxvLmF0dHIoInRyYW5zZm9ybSIsYyh4LGIpKX0odCxoLGYsby5fbmFtZSxyKX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi8uLi9wbG90cy9wbG90cyI6NjE0LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jb2xvciI6MzYxLCIuLi9kcmF3aW5nIjozODMsIi4vY29uc3RhbnRzIjo0MjgsIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjQzMSwiQHBsb3RseS9kMyI6NTh9XSw0MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtdGltZSIpLGk9dCgiLi4vLi4vbGliIikudGl0bGVDYXNlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX25hbWUsYT17fTtpZigiYWxsIj09PWUuc3RlcClhW3IrIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciBvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT10LnJhbmdlLG89bmV3IERhdGUodC5yMmwoYVsxXSkpLHM9ZS5zdGVwLGw9blsidXRjIitpKHMpXSxjPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK2wub2Zmc2V0KG8sLWMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIHU9bC5vZmZzZXQobywtYyk7cj10LmwycigrbC5jZWlsKHUpKX12YXIgZj1hWzFdO3JldHVybltyLGZdfSh0LGUpO2FbcisiLnJhbmdlWzBdIl09b1swXSxhW3IrIi5yYW5nZVsxXSJdPW9bMV19cmV0dXJuIGF9fSx7Ii4uLy4uL2xpYiI6NDk4LCJkMy10aW1lIjoxMTZ9XSw0MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2VsZWN0b3IiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNlbGVjdG9yOnQoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NDI3LCIuL2RlZmF1bHRzIjo0MjksIi4vZHJhdyI6NDMwfV0sNDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX19LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi4xNSxtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MH1dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5saXN0LGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmdldEF1dG9SYW5nZSxhPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQsIngiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPWVbcl0scz1vW2EubmFtZV07cyYmcy52aXNpYmxlJiZzLmF1dG9yYW5nZSYmKHMuX2lucHV0LmF1dG9yYW5nZT0hMCxzLl9pbnB1dC5yYW5nZT1zLnJhbmdlPWkodCxvKSl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuL2NvbnN0YW50cyI6NDM1fV0sNDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmFuZ2VzbGlkZXIiLGNvbnRhaW5lckNsYXNzTmFtZToicmFuZ2VzbGlkZXItY29udGFpbmVyIixiZ0NsYXNzTmFtZToicmFuZ2VzbGlkZXItYmciLHJhbmdlUGxvdENsYXNzTmFtZToicmFuZ2VzbGlkZXItcmFuZ2VwbG90IixtYXNrTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbiIsbWFza01heENsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgiLHNsaWRlQm94Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1zbGlkZWJveCIsZ3JhYmJlck1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1taW4iLGdyYWJBcmVhTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW4iLGhhbmRsZU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1pbiIsZ3JhYmJlck1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXgiLGdyYWJBcmVhTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXgiLGhhbmRsZU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1heCIsbWFza01pbk9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWluLW9wcC1heGlzIixtYXNrTWF4T3BwQXhpc0NsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgtb3BwLWF4aXMiLG1hc2tDb2xvcjoicmdiYSgwLDAsMCwwLjQpIixtYXNrT3BwQXhpc0NvbG9yOiJyZ2JhKDAsMCwwLDAuMikiLHNsaWRlQm94RmlsbDoidHJhbnNwYXJlbnQiLHNsaWRlQm94Q3Vyc29yOiJldy1yZXNpemUiLGdyYWJBcmVhRmlsbDoidHJhbnNwYXJlbnQiLGdyYWJBcmVhQ3Vyc29yOiJjb2wtcmVzaXplIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXRbcl0sYz1lW3JdO2lmKGwucmFuZ2VzbGlkZXJ8fGUuX3JlcXVlc3RSYW5nZXNsaWRlcltjLl9pZF0pe24uaXNQbGFpbk9iamVjdChsLnJhbmdlc2xpZGVyKXx8KGwucmFuZ2VzbGlkZXI9e30pO3ZhciB1LGYsaD1sLnJhbmdlc2xpZGVyLHA9aS5uZXdDb250YWluZXIoYywicmFuZ2VzbGlkZXIiKTtpZihfKCJ2aXNpYmxlIikpe18oImJnY29sb3IiLGUucGxvdF9iZ2NvbG9yKSxfKCJib3JkZXJjb2xvciIpLF8oImJvcmRlcndpZHRoIiksXygidGhpY2tuZXNzIiksXygiYXV0b3JhbmdlIiwhYy5pc1ZhbGlkUmFuZ2UoaC5yYW5nZSkpLF8oInJhbmdlIik7dmFyIGQ9ZS5fc3VicGxvdHM7aWYoZClmb3IodmFyIG09ZC5jYXJ0ZXNpYW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIoMCx0LmluZGV4T2YoInkiKSk9PT1hLm5hbWUyaWQocil9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIodC5pbmRleE9mKCJ5IiksdC5sZW5ndGgpfSkpLGc9bi5zaW1wbGVNYXAobSxhLmlkMm5hbWUpLHY9MDt2PGcubGVuZ3RoO3YrKyl7dmFyIHk9Z1t2XTt1PWhbeV18fHt9LGY9aS5uZXdDb250YWluZXIocCx5LCJ5YXhpcyIpO3ZhciB4LGI9ZVt5XTt1LnJhbmdlJiZiLmlzVmFsaWRSYW5nZSh1LnJhbmdlKSYmKHg9ImZpeGVkIiksIm1hdGNoIiE9PXcoInJhbmdlbW9kZSIseCkmJncoInJhbmdlIixiLnJhbmdlLnNsaWNlKCkpfXAuX2lucHV0PWh9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoaCxwLG8sdCxlKX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsZixzLHQsZSl9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1MywiLi9hdHRyaWJ1dGVzIjo0MzMsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo0NDB9XSw0Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPW8uc3RyVHJhbnNsYXRlLGw9dCgiLi4vZHJhd2luZyIpLGM9dCgiLi4vY29sb3IiKSx1PXQoIi4uL3RpdGxlcyIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksZD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksbT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5iZ0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGM9LW4uX29mZnNldFNoaWZ0LHU9bC5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06cyhjLGMpLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOnV9KX1mdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQ7by5lbnN1cmVTaW5nbGVCeUlkKGkuX3RvcGRlZnMsImNsaXBQYXRoIixuLl9jbGlwSWQsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJyZWN0IikuYXR0cih7eDowLHk6MH0pfSkpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHR9KX1mdW5jdGlvbiB5KHQsZSxyLGkpe3ZhciBzLGM9ZS5jYWxjZGF0YSx1PXQuc2VsZWN0QWxsKCJnLiIrbS5yYW5nZVBsb3RDbGFzc05hbWUpLmRhdGEoci5fc3VicGxvdHNXaXRoLG8uaWRlbnRpdHkpO3UuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiBtLnJhbmdlUGxvdENsYXNzTmFtZSsiICIrdH0pKS5jYWxsKGwuc2V0Q2xpcFVybCxpLl9jbGlwSWQsZSksdS5vcmRlcigpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgbD1uLnNlbGVjdCh0aGlzKSx1PTA9PT1vLHA9aC5nZXRGcm9tSWQoZSx0LCJ5IiksZD1wLl9uYW1lLG09aVtkXSxnPXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTppLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6aS5fd2lkdGgsaGVpZ2h0OmkuX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19LF9jb250ZXh0OmUuX2NvbnRleHR9O3IucmFuZ2VicmVha3MmJihnLmxheW91dC54YXhpcy5yYW5nZWJyZWFrcz1yLnJhbmdlYnJlYWtzKSxnLmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOiJtYXRjaCIhPT1tLnJhbmdlbW9kZT9tLnJhbmdlLnNsaWNlKCk6cC5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnAuY2FsZW5kYXJ9LHAucmFuZ2VicmVha3MmJihnLmxheW91dFtkXS5yYW5nZWJyZWFrcz1wLnJhbmdlYnJlYWtzKSxhLnN1cHBseURlZmF1bHRzKGcpO3ZhciB2PWcuX2Z1bGxMYXlvdXQueGF4aXMseT1nLl9mdWxsTGF5b3V0W2RdO3YuY2xlYXJDYWxjKCksdi5zZXRTY2FsZSgpLHkuY2xlYXJDYWxjKCkseS5zZXRTY2FsZSgpO3ZhciB4PXtpZDp0LHBsb3Rncm91cDpsLHhheGlzOnYseWF4aXM6eSxpc1JhbmdlUGxvdDohMH07dT9zPXg6KHgubWFpbnBsb3Q9Inh5Iix4Lm1haW5wbG90aW5mbz1zKSxmLnJhbmdlUGxvdChlLHgsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTthLnhheGlzK2EueWF4aXM9PT1lJiZyLnB1c2goaSl9cmV0dXJuIHJ9KGMsdCkpfSkpfWZ1bmN0aW9uIHgodCxlLHIsbixpKXsoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoYy5maWxsLG0ubWFza0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLm1hc2tNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGMuZmlsbCxtLm1hc2tDb2xvciksIm1hdGNoIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0ubWFza01pbk9wcEF4aXNDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoIndpZHRoIixuLl93aWR0aCkuY2FsbChjLmZpbGwsbS5tYXNrT3BwQXhpc0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLnN0eWxlKCJib3JkZXItdG9wIixtLm1hc2tPcHBCb3JkZXIpLmNhbGwoYy5maWxsLG0ubWFza09wcEF4aXNDb2xvcikpfWZ1bmN0aW9uIGIodCxlLHIsbil7ZS5fY29udGV4dC5zdGF0aWNQbG90fHxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLnNsaWRlQm94Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxjdXJzb3I6bS5zbGlkZUJveEN1cnNvciwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6bS5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsImciLG0uZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LCJnIixtLmdyYWJiZXJNYXhDbGFzc05hbWUpLHM9e3g6MCx3aWR0aDptLmhhbmRsZVdpZHRoLHJ4Om0uaGFuZGxlUmFkaXVzLGZpbGw6Yy5iYWNrZ3JvdW5kLHN0cm9rZTpjLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOm0uaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxsPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX07by5lbnN1cmVTaW5nbGUoaSwicmVjdCIsbS5oYW5kbGVNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pKS5hdHRyKGwpLG8uZW5zdXJlU2luZ2xlKGEsInJlY3QiLG0uaGFuZGxlTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIocyl9KSkuYXR0cihsKTt2YXIgdT17d2lkdGg6bS5ncmFiQXJlYVdpZHRoLHg6MCx5OjAsZmlsbDptLmdyYWJBcmVhRmlsbCxjdXJzb3I6ZS5fY29udGV4dC5zdGF0aWNQbG90P3ZvaWQgMDptLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixtLmdyYWJBcmVhTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIodSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLG8uZW5zdXJlU2luZ2xlKGEsInJlY3QiLG0uZ3JhYkFyZWFNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fcmFuZ2VTbGlkZXJEYXRhLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGw9clthXVttLm5hbWVdO2wuX2NsaXBJZD1sLl9pZCsiLSIrZS5fdWlkfXZhciBjPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIittLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5fbmFtZX0pKTtjLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10W20ubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoIiMiK3IuX2NsaXBJZCkucmVtb3ZlKCl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoJiYoYy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobS5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksYy5lYWNoKChmdW5jdGlvbihyKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxsPXJbbS5uYW1lXSxjPWVbaC5pZDJuYW1lKHIuYW5jaG9yKV0sZj1sW2guaWQybmFtZShyLmFuY2hvcildO2lmKGwucmFuZ2Upe3ZhciB3LFQ9by5zaW1wbGVNYXAobC5yYW5nZSxyLnIybCksaz1vLnNpbXBsZU1hcChyLnJhbmdlLHIucjJsKTt3PWtbMF08a1sxXT9bTWF0aC5taW4oVFswXSxrWzBdKSxNYXRoLm1heChUWzFdLGtbMV0pXTpbTWF0aC5tYXgoVFswXSxrWzBdKSxNYXRoLm1pbihUWzFdLGtbMV0pXSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPW8uc2ltcGxlTWFwKHcsci5sMnIpfXIuY2xlYW5SYW5nZSgicmFuZ2VzbGlkZXIucmFuZ2UiKTt2YXIgQT1lLl9zaXplLE09ci5kb21haW47bC5fd2lkdGg9QS53KihNWzFdLU1bMF0pO3ZhciBTPU1hdGgucm91bmQoQS5sK0EudypNWzBdKSxFPU1hdGgucm91bmQoQS50K0EuaCooMS1yLl9jb3VudGVyRG9tYWluTWluKSsoImJvdHRvbSI9PT1yLnNpZGU/ci5fZGVwdGg6MCkrbC5fb2Zmc2V0U2hpZnQrbS5leHRyYVBhZCk7YS5hdHRyKCJ0cmFuc2Zvcm0iLHMoUyxFKSksbC5fcmw9by5zaW1wbGVNYXAobC5yYW5nZSxyLnIybCk7dmFyIEw9bC5fcmxbMF0sQz1sLl9ybFsxXSxQPUMtTDtpZihsLnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdC9sLl93aWR0aCpQK0x9LGwuZDJwPWZ1bmN0aW9uKHQpe3JldHVybih0LUwpL1AqbC5fd2lkdGh9LHIucmFuZ2VicmVha3Mpe3ZhciBJPXIubG9jYXRlQnJlYWtzKEwsQyk7aWYoSS5sZW5ndGgpe3ZhciBPLHosRD0wO2ZvcihPPTA7TzxJLmxlbmd0aDtPKyspRCs9KHo9SVtPXSkubWF4LXoubWluO3ZhciBSPWwuX3dpZHRoLyhDLUwtRCksRj1bLVIqTF07Zm9yKE89MDtPPEkubGVuZ3RoO08rKyl6PUlbT10sRi5wdXNoKEZbRi5sZW5ndGgtMV0tUiooei5tYXgtei5taW4pKTtmb3IobC5kMnA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUZbMF0scj0wO3I8SS5sZW5ndGg7cisrKXt2YXIgbj1JW3JdO2lmKHQ+PW4ubWF4KWU9RltyKzFdO2Vsc2UgaWYodDxuLm1pbilicmVha31yZXR1cm4gZStSKnR9LE89MDtPPEkubGVuZ3RoO08rKykoej1JW09dKS5wbWluPWwuZDJwKHoubWluKSx6LnBtYXg9bC5kMnAoei5tYXgpO2wucDJkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1GWzBdLHI9MDtyPEkubGVuZ3RoO3IrKyl7dmFyIG49SVtyXTtpZih0Pj1uLnBtYXgpZT1GW3IrMV07ZWxzZSBpZih0PG4ucG1pbilicmVha31yZXR1cm4odC1lKS9SfX19aWYoIm1hdGNoIiE9PWYucmFuZ2Vtb2RlKXt2YXIgQj1jLnIybChmLnJhbmdlWzBdKSxOPWMucjJsKGYucmFuZ2VbMV0pLUI7bC5kMnBPcHBBeGlzPWZ1bmN0aW9uKHQpe3JldHVybih0LUIpL04qbC5faGVpZ2h0fX1hLmNhbGwoZyx0LHIsbCkuY2FsbCh2LHQscixsKS5jYWxsKHksdCxyLGwpLmNhbGwoeCx0LHIsbCxmKS5jYWxsKGIsdCxyLGwpLmNhbGwoXyx0LHIsbCksZnVuY3Rpb24odCxlLHIsYSl7aWYoZS5fY29udGV4dC5zdGF0aWNQbG90KXJldHVybjt2YXIgcz10LnNlbGVjdCgicmVjdC4iK20uc2xpZGVCb3hDbGFzc05hbWUpLm5vZGUoKSxsPXQuc2VsZWN0KCJyZWN0LiIrbS5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLGM9dC5zZWxlY3QoInJlY3QuIittLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7ZnVuY3Rpb24gdSgpe3ZhciB1PW4uZXZlbnQsZj11LnRhcmdldCxoPXUuY2xpZW50WHx8dS50b3VjaGVzWzBdLmNsaWVudFgsbT1oLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsZz1hLmQycChyLl9ybFswXSksdj1hLmQycChyLl9ybFsxXSkseT1wLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUscCx4LGI9Kyh0LmNsaWVudFh8fHQudG91Y2hlc1swXS5jbGllbnRYKS1oO3N3aXRjaChmKXtjYXNlIHM6eD0iZXctcmVzaXplIix1PWcrYixwPXYrYjticmVhaztjYXNlIGw6eD0iY29sLXJlc2l6ZSIsdT1nK2IscD12O2JyZWFrO2Nhc2UgYzp4PSJjb2wtcmVzaXplIix1PWcscD12K2I7YnJlYWs7ZGVmYXVsdDp4PSJldy1yZXNpemUiLHU9bSxwPW0rYn1pZihwPHUpe3ZhciBfPXA7cD11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PXAsZChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsci5fbmFtZSsiLnJhbmdlIixbcyxsXSl9KSl9KDAsZSxyLGEpfWZ1bmN0aW9uIGIoKXt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixiKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseCksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsYiksby5yZW1vdmVFbGVtZW50KHkpfXRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix4KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixiKSx5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixiKX10Lm9uKCJtb3VzZWRvd24iLHUpLHQub24oInRvdWNoc3RhcnQiLHUpfShhLHQscixsKSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIGw9bS5oYW5kbGVXaWR0aC8yO2Z1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl93aWR0aCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX2hlaWdodCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gby5jb25zdHJhaW4odCwtbCxuLl93aWR0aCtsKX12YXIgaD1jKG4uZDJwKHIuX3JsWzBdKSkscD1jKG4uZDJwKHIuX3JsWzFdKSk7aWYodC5zZWxlY3QoInJlY3QuIittLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJ3aWR0aCIscC1oKSx0LnNlbGVjdCgicmVjdC4iK20ubWFza01pbkNsYXNzTmFtZSkuYXR0cigid2lkdGgiLGgpLHQuc2VsZWN0KCJyZWN0LiIrbS5tYXNrTWF4Q2xhc3NOYW1lKS5hdHRyKCJ4IixwKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgtcCksIm1hdGNoIiE9PWEucmFuZ2Vtb2RlKXt2YXIgZD1uLl9oZWlnaHQtdShuLmQycE9wcEF4aXMoaS5fcmxbMV0pKSxnPW4uX2hlaWdodC11KG4uZDJwT3BwQXhpcyhpLl9ybFswXSkpO3Quc2VsZWN0KCJyZWN0LiIrbS5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigiaGVpZ2h0IixkKS5hdHRyKCJ3aWR0aCIscC1oKSx0LnNlbGVjdCgicmVjdC4iK20ubWFza01heE9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoInkiLGcpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0LWcpLmF0dHIoIndpZHRoIixwLWgpLHQuc2VsZWN0KCJyZWN0LiIrbS5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieSIsZCkuYXR0cigiaGVpZ2h0IixnLWQpfXZhciB2PU1hdGgucm91bmQoZihoLWwpKS0uNSx5PU1hdGgucm91bmQoZihwLWwpKSsuNTt0LnNlbGVjdCgiZy4iK20uZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIixzKHYsLjUpKSx0LnNlbGVjdCgiZy4iK20uZ3JhYmJlck1heENsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIixzKHksLjUpKX0oYSwwLHIsbCxjLGYpLCJib3R0b20iPT09ci5zaWRlJiZ1LmRyYXcodCxyLl9pZCsidGl0bGUiLHtwcm9wQ29udGFpbmVyOnIscHJvcE5hbWU6ci5fbmFtZSsiLnRpdGxlIixwbGFjZWhvbGRlcjplLl9kZmx0VGl0bGUueCxhdHRyaWJ1dGVzOnt4OnIuX29mZnNldCtyLl9sZW5ndGgvMix5OkUrbC5faGVpZ2h0K2wuX29mZnNldFNoaWZ0KzEwKzEuNSpyLnRpdGxlLmZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSkpKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjUxOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi8uLi9wbG90cy9wbG90cyI6NjE0LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jb2xvciI6MzYxLCIuLi9kcmFnZWxlbWVudCI6MzgwLCIuLi9kcmF3aW5nIjozODMsIi4uL3RpdGxlcyI6NDU5LCIuL2NvbnN0YW50cyI6NDM1LCJAcGxvdGx5L2QzIjo1OH1dLDQzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcscz1hLm5hbWU7ZnVuY3Rpb24gbCh0KXt2YXIgZT10JiZ0W3NdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9bCxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sIngiLCEwKSxyPXQubWFyZ2luLGk9W107aWYoIXQuX2hhcygiZ2wyZCIpKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGwobykpe2kucHVzaChvKTt2YXIgYz1vW3NdO2MuX2lkPXMrby5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWVbc10sbD1lLl9pZC5jaGFyQXQoMCksYz0wLHU9MDsiYm90dG9tIj09PWUuc2lkZSYmKGM9ZS5fZGVwdGgsZS50aXRsZS50ZXh0IT09ci5fZGZsdFRpdGxlW2xdJiYodT0xLjUqZS50aXRsZS5mb250LnNpemUrMTArbi5fb2Zmc2V0U2hpZnQsdSs9KGUudGl0bGUudGV4dC5tYXRjaChpLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoKmUudGl0bGUuZm9udC5zaXplKm8pKTtyZXR1cm57eDowLHk6ZS5fY291bnRlckRvbWFpbk1pbixsOjAscjowLHQ6MCxiOm4uX2hlaWdodCtjK01hdGgubWF4KHIubWFyZ2luLmIsdSkscGFkOmEuZXh0cmFQYWQrMipuLl9vZmZzZXRTaGlmdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuL2NvbnN0YW50cyI6NDM1fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL29wcGF4aXNfYXR0cmlidXRlcyIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2xpZGVyIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzbGlkZXI6bi5leHRlbmRGbGF0KHt9LGkse3lheGlzOmF9KX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3OnQoIi4vZHJhdyIpLGlzVmlzaWJsZTpvLmlzVmlzaWJsZSxtYWtlRGF0YTpvLm1ha2VEYXRhLGF1dG9NYXJnaW5PcHRzOm8uYXV0b01hcmdpbk9wdHN9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2F0dHJpYnV0ZXMiOjQzMywiLi9jYWxjX2F1dG9yYW5nZSI6NDM0LCIuL2RlZmF1bHRzIjo0MzYsIi4vZHJhdyI6NDM3LCIuL2hlbHBlcnMiOjQzOCwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjQ0MH1dLDQ0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc1N1YnBsb3RPYmo6ITAscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiZml4ZWQiLCJtYXRjaCJdLGRmbHQ6Im1hdGNoIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn19LHt9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9cygic2hhcGUiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0pLGRhc2g6byh7fSxhLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NDY3LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyLCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjozNDQsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6MzgyfV0sNDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKCJwaXhlbCI9PT1lKXt2YXIgZj1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0saD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxmKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGYpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxtPWg+MD9oK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDptLHBwYWRtaW51czp1P206ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxmLGg9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChmPXModVtjXSkpPGgmJihoPWYpLGY+cCYmKHA9ZikpKTtyZXR1cm4gcD49aD9baCxwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxmLGg9cltvXTtoLl9leHRyZW1lcz17fTt2YXIgcD1pLmdldFJlZlR5cGUoaC54cmVmKSxkPWkuZ2V0UmVmVHlwZShoLnlyZWYpO2lmKCJwYXBlciIhPT1oLnhyZWYmJiJkb21haW4iIT09cCl7dmFyIG09InBpeGVsIj09PWgueHNpemVtb2RlP2gueGFuY2hvcjpoLngwLGc9InBpeGVsIj09PWgueHNpemVtb2RlP2gueGFuY2hvcjpoLngxOyhmPXUoYz1pLmdldEZyb21JZCh0LGgueHJlZiksbSxnLGgucGF0aCxhLnBhcmFtSXNYKSkmJihoLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxmLHMoaCkpKX1pZigicGFwZXIiIT09aC55cmVmJiYiZG9tYWluIiE9PWQpe3ZhciB2PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MCx5PSJwaXhlbCI9PT1oLnlzaXplbW9kZT9oLnlhbmNob3I6aC55MTsoZj11KGM9aS5nZXRGcm9tSWQodCxoLnlyZWYpLHYseSxoLnBhdGgsYS5wYXJhbUlzWSkpJiYoaC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsZixsKGgpKSl9fX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4vY29uc3RhbnRzIjo0NDMsIi4vaGVscGVycyI6NDUyfV0sNDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxzLF0rL2cscGFyYW1Jc1g6e006ezA6ITAsZHJhd246MH0sTDp7MDohMCxkcmF3bjowfSxIOnswOiEwLGRyYXduOjB9LFY6e30sUTp7MDohMCwyOiEwLGRyYXduOjJ9LEM6ezA6ITAsMjohMCw0OiEwLGRyYXduOjR9LFQ6ezA6ITAsZHJhd246MH0sUzp7MDohMCwyOiEwLGRyYXduOjJ9LFo6e319LHBhcmFtSXNZOntNOnsxOiEwLGRyYXduOjF9LEw6ezE6ITAsZHJhd246MX0sSDp7fSxWOnswOiEwLGRyYXduOjB9LFE6ezE6ITAsMzohMCxkcmF3bjozfSxDOnsxOiEwLDM6ITAsNTohMCxkcmF3bjo1fSxUOnsxOiEwLGRyYXduOjF9LFM6ezE6ITAsMzohMCxkcmF3bjo1fSxaOnt9fSxudW1QYXJhbXM6e006MixMOjIsSDoxLFY6MSxROjQsQzo2LFQ6MixTOjQsWjowfX19LHt9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pZihhKCJ2aXNpYmxlIikpe3ZhciBsPWEoInBhdGgiKSxjPWEoInR5cGUiLGw/InBhdGgiOiJyZWN0Iik7InBhdGgiIT09ZS50eXBlJiZkZWxldGUgZS5wYXRoLGEoImVkaXRhYmxlIiksYSgibGF5ZXIiKSxhKCJvcGFjaXR5IiksYSgiZmlsbGNvbG9yIiksYSgiZmlsbHJ1bGUiKSxhKCJsaW5lLndpZHRoIikmJihhKCJsaW5lLmNvbG9yIiksYSgibGluZS5kYXNoIikpO2Zvcih2YXIgdT1hKCJ4c2l6ZW1vZGUiKSxmPWEoInlzaXplbW9kZSIpLGg9WyJ4IiwieSJdLHA9MDtwPDI7cCsrKXt2YXIgZCxtLGcsdj1oW3BdLHk9disiYW5jaG9yIix4PSJ4Ij09PXY/dTpmLGI9e19mdWxsTGF5b3V0OnJ9LF89aS5jb2VyY2VSZWYodCxlLGIsdix2b2lkIDAsInBhcGVyIik7aWYoInJhbmdlIj09PWkuZ2V0UmVmVHlwZShfKT8oKGQ9aS5nZXRGcm9tSWQoYixfKSkuX3NoYXBlSW5kaWNlcy5wdXNoKGUuX2luZGV4KSxnPXMucmFuZ2VUb1NoYXBlUG9zaXRpb24oZCksbT1zLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGQpKTptPWc9bi5pZGVudGl0eSwicGF0aCIhPT1jKXt2YXIgdz12KyIwIixUPXYrIjEiLGs9dFt3XSxBPXRbVF07dFt3XT1tKHRbd10sITApLHRbVF09bSh0W1RdLCEwKSwicGl4ZWwiPT09eD8oYSh3LDApLGEoVCwxMCkpOihpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8sdywuMjUpLGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyxULC43NSkpLGVbd109ZyhlW3ddKSxlW1RdPWcoZVtUXSksdFt3XT1rLHRbVF09QX1pZigicGl4ZWwiPT09eCl7dmFyIE09dFt5XTt0W3ldPW0odFt5XSwhMCksaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLHksLjI1KSxlW3ldPWcoZVt5XSksdFt5XT1NfX0icGF0aCI9PT1jP2EoInBhdGgiKTpuLm5vbmVPckFsbCh0LGUsWyJ4MCIsIngxIiwieTAiLCJ5MSJdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6InNoYXBlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2F0dHJpYnV0ZXMiOjQ0MSwiLi9oZWxwZXJzIjo0NTJ9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIikucmVhZFBhdGhzLHM9dCgiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyT3V0bGluZUNvbnRyb2xsZXJzLGM9dCgiLi4vY29sb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxmPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixoPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuL2NvbnN0YW50cyIpLG09dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2Zvcih2YXIgciBpbiBlLl9zaGFwZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3Bsb3RzKXt2YXIgbj1lLl9wbG90c1tyXS5zaGFwZWxheWVyO24mJm4uc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCl9Zm9yKHZhciBpPTA7aTxlLnNoYXBlcy5sZW5ndGg7aSsrKWUuc2hhcGVzW2ldLnZpc2libGUmJngodCxpKX1mdW5jdGlvbiB2KHQpe3JldHVybiEhdC5fZnVsbExheW91dC5fZHJhd2luZ31mdW5jdGlvbiB5KHQpe3JldHVybiF0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb259ZnVuY3Rpb24geCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrZSsnIl0nKS5yZW1vdmUoKTt2YXIgcj1tLm1ha2VPcHRpb25zQW5kUGxvdGluZm8odCxlKSxsPXIub3B0aW9ucyx4PXIucGxvdGluZm87aWYobC5faW5wdXQmJiExIT09bC52aXNpYmxlKWlmKCJiZWxvdyIhPT1sLmxheWVyKWsodC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1sLnhyZWZ8fCJwYXBlciI9PT1sLnlyZWYpayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7aWYoeC5faGFkUGxvdGluZm8paygoeC5tYWlucGxvdGluZm98fHgpLnNoYXBlbGF5ZXIpO2Vsc2Ugayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpfWZ1bmN0aW9uIGsocil7dmFyIGs9Xyh0LGwpLEE9eyJkYXRhLWluZGV4IjplLCJmaWxsLXJ1bGUiOmwuZmlsbHJ1bGUsZDprfSxNPWwub3BhY2l0eSxTPWwuZmlsbGNvbG9yLEU9bC5saW5lLndpZHRoP2wubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIsTD1sLmxpbmUud2lkdGgsQz1sLmxpbmUuZGFzaDtMfHwhMCE9PWwuZWRpdGFibGV8fChMPTUsQz0ic29saWQiKTt2YXIgUD0iWiIhPT1rW2subGVuZ3RoLTFdLEk9eSh0KSYmbC5lZGl0YWJsZSYmdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD09PWU7SSYmKFM9UD8icmdiYSgwLDAsMCwwKSI6dC5fZnVsbExheW91dC5hY3RpdmVzaGFwZS5maWxsY29sb3IsTT10Ll9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLm9wYWNpdHkpO3ZhciBPLHo9ci5hcHBlbmQoInBhdGgiKS5hdHRyKEEpLnN0eWxlKCJvcGFjaXR5IixNKS5jYWxsKGMuc3Ryb2tlLEUpLmNhbGwoYy5maWxsLFMpLmNhbGwodS5kYXNoTGluZSxDLEwpO2lmKGIoeix0LGwpLChJfHx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24pJiYoTz1mKHQubGF5b3V0LCJzaGFwZXMiLGwpKSxJKXt6LnN0eWxlKHtjdXJzb3I6Im1vdmUifSk7dmFyIEQ9e2VsZW1lbnQ6ei5ub2RlKCkscGxvdGluZm86eCxnZDp0LGVkaXRIZWxwZXJzOk8saXNBY3RpdmVTaGFwZTohMH0sUj1vKGssdCk7cyhSLHosRCl9ZWxzZSB0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24/ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLGYsZyx5LHgsVCxrLEEsTSxTLEUsTCxDLFAsSSxPLHo9InBpeGVsIj09PXIueHNpemVtb2RlLEQ9InBpeGVsIj09PXIueXNpemVtb2RlLFI9ImxpbmUiPT09ci50eXBlLEY9InBhdGgiPT09ci50eXBlLEI9bC5tb2RpZnlJdGVtLE49YS5nZXRGcm9tSWQodCxyLnhyZWYpLGo9YS5nZXRSZWZUeXBlKHIueHJlZiksVT1hLmdldEZyb21JZCh0LHIueXJlZiksVj1hLmdldFJlZlR5cGUoci55cmVmKSxIPW0uZ2V0RGF0YVRvUGl4ZWwodCxOLCExLGopLHE9bS5nZXREYXRhVG9QaXhlbCh0LFUsITAsViksRz1tLmdldFBpeGVsVG9EYXRhKHQsTiwhMSxqKSxZPW0uZ2V0UGl4ZWxUb0RhdGEodCxVLCEwLFYpLFc9Uj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1zLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZS5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOnQsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgaT17ImZpbGwtb3BhY2l0eSI6IjAifSxhPU1hdGgubWF4KHQvMiwxMCk7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4Ono/SChyLnhhbmNob3IpK3IueDA6SChyLngwKSxjeTpEP3Eoci55YW5jaG9yKS1yLnkwOnEoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6ej9IKHIueGFuY2hvcikrci54MTpIKHIueDEpLGN5OkQ/cShyLnlhbmNob3IpLXIueTE6cShyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6ZSxYPXtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKG4pe2lmKHYodCkpcmV0dXJuO3omJih4PUgoci54YW5jaG9yKSk7RCYmKFQ9cShyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/ST1yLnBhdGg6KGM9ej9yLngwOkgoci54MCksZj1EP3IueTA6cShyLnkwKSxnPXo/ci54MTpIKHIueDEpLHk9RD9yLnkxOnEoci55MSkpO2M8Zz8oTT1jLEM9IngwIixTPWcsUD0ieDEiKTooTT1nLEM9IngxIixTPWMsUD0ieDAiKTshRCYmZjx5fHxEJiZmPnk/KGs9ZixFPSJ5MCIsQT15LEw9InkxIik6KGs9eSxFPSJ5MSIsQT1mLEw9InkwIik7WihuKSxRKHMsciksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUueHJlZixpPWUueXJlZixvPWEuZ2V0RnJvbUlkKHIsbikscz1hLmdldEZyb21JZChyLGkpLGw9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwobCs9bik7InBhcGVyIj09PWl8fHMuYXV0b3JhbmdlfHwobCs9aSk7dS5zZXRDbGlwVXJsKHQsbD8iY2xpcCIrci5fZnVsbExheW91dC5fdWlkK2w6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPSJtb3ZlIj09PU8/SjpLLFguYWx0S2V5PW4uYWx0S2V5fSxkb25lRm46ZnVuY3Rpb24oKXtpZih2KHQpKXJldHVybjtwKGUpLCQocyksYihlLHQsciksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbC5nZXRVcGRhdGVPYmooKSl9LGNsaWNrRm46ZnVuY3Rpb24oKXtpZih2KHQpKXJldHVybjskKHMpfX07ZnVuY3Rpb24gWihyKXtpZih2KHQpKU89bnVsbDtlbHNlIGlmKFIpTz0icGF0aCI9PT1yLnRhcmdldC50YWdOYW1lPyJtb3ZlIjoic3RhcnQtcG9pbnQiPT09ci50YXJnZXQuYXR0cmlidXRlc1siZGF0YS1saW5lLXBvaW50Il0udmFsdWU/InJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50IjoicmVzaXplLW92ZXItZW5kLXBvaW50IjtlbHNle3ZhciBuPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ucmlnaHQtbi5sZWZ0LGE9bi5ib3R0b20tbi50b3Asbz1yLmNsaWVudFgtbi5sZWZ0LHM9ci5jbGllbnRZLW4udG9wLGw9IUYmJmk+MTAmJmE+MTAmJiFyLnNoaWZ0S2V5P2guZ2V0Q3Vyc29yKG8vaSwxLXMvYSk6Im1vdmUiO3AoZSxsKSxPPWwuc3BsaXQoIi0iKVswXX19ZnVuY3Rpb24gSihuLGkpe2lmKCJwYXRoIj09PXIudHlwZSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxsPWE7ej9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhIKHQpK24pfSxOJiYiZGF0ZSI9PT1OLnR5cGUmJihvPW0uZW5jb2RlRGF0ZShvKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KGw9ZnVuY3Rpb24odCl7cmV0dXJuIFkocSh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYobD1tLmVuY29kZURhdGUobCkpKSxCKCJwYXRoIixyLnBhdGg9dyhJLG8sbCkpfWVsc2Ugej9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKTooQigieDAiLHIueDA9RyhjK24pKSxCKCJ4MSIsci54MT1HKGcrbikpKSxEP0IoInlhbmNob3IiLHIueWFuY2hvcj1ZKFQraSkpOihCKCJ5MCIsci55MD1ZKGYraSkpLEIoInkxIixyLnkxPVkoeStpKSkpO2UuYXR0cigiZCIsXyh0LHIpKSxRKHMscil9ZnVuY3Rpb24gSyhuLGkpe2lmKEYpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEsbD1hO3o/QigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcoSCh0KStuKX0sTiYmImRhdGUiPT09Ti50eXBlJiYobz1tLmVuY29kZURhdGUobykpKSxEP0IoInlhbmNob3IiLHIueWFuY2hvcj1ZKFQraSkpOihsPWZ1bmN0aW9uKHQpe3JldHVybiBZKHEodCkraSl9LFUmJiJkYXRlIj09PVUudHlwZSYmKGw9bS5lbmNvZGVEYXRlKGwpKSksQigicGF0aCIsci5wYXRoPXcoSSxvLGwpKX1lbHNlIGlmKFIpe2lmKCJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI9PT1PKXt2YXIgdT1jK24saD1EP2YtaTpmK2k7QigieDAiLHIueDA9ej91OkcodSkpLEIoInkwIixyLnkwPUQ/aDpZKGgpKX1lbHNlIGlmKCJyZXNpemUtb3Zlci1lbmQtcG9pbnQiPT09Tyl7dmFyIHA9ZytuLGQ9RD95LWk6eStpO0IoIngxIixyLngxPXo/cDpHKHApKSxCKCJ5MSIsci55MT1EP2Q6WShkKSl9fWVsc2V7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1PLmluZGV4T2YodCl9LGI9digibiIpLGo9digicyIpLFY9digidyIpLFc9digiZSIpLFg9Yj9rK2k6ayxaPWo/QStpOkEsSj1WP00rbjpNLEs9Vz9TK246UztEJiYoYiYmKFg9ay1pKSxqJiYoWj1BLWkpKSwoIUQmJlotWD4xMHx8RCYmWC1aPjEwKSYmKEIoRSxyW0VdPUQ/WDpZKFgpKSxCKEwscltMXT1EP1o6WShaKSkpLEstSj4xMCYmKEIoQyxyW0NdPXo/SjpHKEopKSxCKFAscltQXT16P0s6RyhLKSkpfWUuYXR0cigiZCIsXyh0LHIpKSxRKHMscil9ZnVuY3Rpb24gUSh0LGUpeyh6fHxEKSYmZnVuY3Rpb24oKXt2YXIgcj0icGF0aCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2ZpbGw6IiNmZmYiLCJmaWxsLXJ1bGUiOiJldmVub2RkIixzdHJva2U6IiMwMDAiLCJzdHJva2Utd2lkdGgiOjF9KS5jbGFzc2VkKCJ2aXN1YWwtY3VlIiwhMCk7dmFyIGE9SCh6P2UueGFuY2hvcjppLm1pZFJhbmdlKHI/W2UueDAsZS54MV06bS5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZC5wYXJhbUlzWCkpKSxvPXEoRD9lLnlhbmNob3I6aS5taWRSYW5nZShyP1tlLnkwLGUueTFdOm0uZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGQucGFyYW1Jc1kpKSk7aWYoYT1tLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhhLDEpLG89bS5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcobywxKSx6JiZEKXt2YXIgcz0iTSIrKGEtMS0xKSsiLCIrKG8tMS0xKSsiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaIjtuLmF0dHIoImQiLHMpfWVsc2UgaWYoeil7dmFyIGw9Ik0iKyhhLTEtMSkrIiwiKyhvLTktMSkrInYxOCBoMiB2LTE4IFoiO24uYXR0cigiZCIsbCl9ZWxzZXt2YXIgYz0iTSIrKGEtOS0xKSsiLCIrKG8tMS0xKSsiaDE4IHYyIGgtMTggWiI7bi5hdHRyKCJkIixjKX19KCl9ZnVuY3Rpb24gJCh0KXt0LnNlbGVjdEFsbCgiLnZpc3VhbC1jdWUiKS5yZW1vdmUoKX1oLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCx6LGwsZSxyLE8pOiEwPT09bC5lZGl0YWJsZSYmei5zdHlsZSgicG9pbnRlci1ldmVudHMiLFB8fGMub3BhY2l0eShTKSpNPD0uNT8ic3Ryb2tlIjoiYWxsIik7ei5ub2RlKCkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCF5KHQpKXJldHVybjt2YXIgcj0rZS5ub2RlKCkuZ2V0QXR0cmlidXRlKCJkYXRhLWluZGV4Iik7aWYocj49MCl7aWYocj09PXQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpcmV0dXJuIHZvaWQgVCh0KTt0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PXIsdC5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlPVQsZyh0KX19KHQseil9KSl9fWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShyLnhyZWYrci55cmVmKS5yZXBsYWNlKC9wYXBlci9nLCIiKS5yZXBsYWNlKC9beHl6XVsxLTldKiAqZG9tYWluL2csIiIpO3Uuc2V0Q2xpcFVybCh0LG4/ImNsaXAiK2UuX2Z1bGxMYXlvdXQuX3VpZCtuOm51bGwsZSl9ZnVuY3Rpb24gXyh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGYsaD1lLnR5cGUscD1hLmdldFJlZlR5cGUoZS54cmVmKSxnPWEuZ2V0UmVmVHlwZShlLnlyZWYpLHY9YS5nZXRGcm9tSWQodCxlLnhyZWYpLHk9YS5nZXRGcm9tSWQodCxlLnlyZWYpLHg9dC5fZnVsbExheW91dC5fc2l6ZTtpZih2PyJkb21haW4iPT09cD9uPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5fbGVuZ3RoKnR9OihyPW0uc2hhcGVQb3NpdGlvblRvUmFuZ2Uodiksbj1mdW5jdGlvbih0KXtyZXR1cm4gdi5fb2Zmc2V0K3YucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4geC5sK3gudyp0fSx5PyJkb21haW4iPT09Zz9zPWZ1bmN0aW9uKHQpe3JldHVybiB5Ll9vZmZzZXQreS5fbGVuZ3RoKigxLXQpfToobz1tLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHkpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHkuX29mZnNldCt5LnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIHgudCt4LmgqKDEtdCl9LCJwYXRoIj09PWgpcmV0dXJuIHYmJiJkYXRlIj09PXYudHlwZSYmKG49bS5kZWNvZGVEYXRlKG4pKSx5JiYiZGF0ZSI9PT15LnR5cGUmJihzPW0uZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxhPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShkLnNlZ21lbnRSRSwoZnVuY3Rpb24odCl7dmFyIG49MCxjPXQuY2hhckF0KDApLHU9ZC5wYXJhbUlzWFtjXSxmPWQucGFyYW1Jc1lbY10saD1kLm51bVBhcmFtc1tjXSxwPXQuc3Vic3RyKDEpLnJlcGxhY2UoZC5wYXJhbVJFLChmdW5jdGlvbih0KXtyZXR1cm4gdVtuXT90PSJwaXhlbCI9PT1hP2UocykrTnVtYmVyKHQpOmUodCk6ZltuXSYmKHQ9InBpeGVsIj09PW8/cihsKS1OdW1iZXIodCk6cih0KSksKytuPmgmJih0PSJYIiksdH0pKTtyZXR1cm4gbj5oJiYocD1wLnJlcGxhY2UoL1tccyxdKlguKi8sIiIpLGkubG9nKCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCAiK3QpKSxjK3B9KSl9KGUsbixzKTtpZigicGl4ZWwiPT09ZS54c2l6ZW1vZGUpe3ZhciBiPW4oZS54YW5jaG9yKTtsPWIrZS54MCxjPWIrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoInBpeGVsIj09PWUueXNpemVtb2RlKXt2YXIgXz1zKGUueWFuY2hvcik7dT1fLWUueTAsZj1fLWUueTF9ZWxzZSB1PXMoZS55MCksZj1zKGUueTEpO2lmKCJsaW5lIj09PWgpcmV0dXJuIk0iK2wrIiwiK3UrIkwiK2MrIiwiK2Y7aWYoInJlY3QiPT09aClyZXR1cm4iTSIrbCsiLCIrdSsiSCIrYysiViIrZisiSCIrbCsiWiI7dmFyIHc9KGwrYykvMixUPSh1K2YpLzIsaz1NYXRoLmFicyh3LWwpLEE9TWF0aC5hYnMoVC11KSxNPSJBIitrKyIsIitBLFM9dytrKyIsIitUO3JldHVybiJNIitTK00rIiAwIDEsMSAiKyh3KyIsIisoVC1BKSkrTSsiIDAgMCwxICIrUysiWiJ9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuIHQucmVwbGFjZShkLnNlZ21lbnRSRSwoZnVuY3Rpb24odCl7dmFyIG49MCxpPXQuY2hhckF0KDApLGE9ZC5wYXJhbUlzWFtpXSxvPWQucGFyYW1Jc1lbaV0scz1kLm51bVBhcmFtc1tpXTtyZXR1cm4gaSt0LnN1YnN0cigxKS5yZXBsYWNlKGQucGFyYW1SRSwoZnVuY3Rpb24odCl7cmV0dXJuIG4+PXN8fChhW25dP3Q9ZSh0KTpvW25dJiYodD1yKHQpKSxuKyspLHR9KSl9KSl9ZnVuY3Rpb24gVCh0KXt5KHQpJiYodC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmKGwodCksZGVsZXRlIHQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgsZyh0KSkpfWUuZXhwb3J0cz17ZHJhdzpnLGRyYXdPbmU6eCxlcmFzZUFjdGl2ZVNoYXBlOmZ1bmN0aW9uKHQpe2lmKCF5KHQpKXJldHVybjtsKHQpO3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgscj0odC5sYXlvdXR8fHt9KS5zaGFwZXN8fFtdO2lmKGU8ci5sZW5ndGgpe2Zvcih2YXIgaT1bXSxhPTA7YTxyLmxlbmd0aDthKyspYSE9PWUmJmkucHVzaChyW2FdKTtkZWxldGUgdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCx7c2hhcGVzOml9KX19fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3NldGN1cnNvciI6NTE5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6NTYwLCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jb2xvciI6MzYxLCIuLi9kcmFnZWxlbWVudCI6MzgwLCIuLi9kcmF3aW5nIjozODMsIi4vY29uc3RhbnRzIjo0NDMsIi4vZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIjo0NDksIi4vZHJhd19uZXdzaGFwZS9oZWxwZXJzIjo0NTAsIi4vaGVscGVycyI6NDUyfV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e25ld3NoYXBlOntsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo0LGVkaXRUeXBlOiJub25lIn0sZGFzaDppKHt9LG4se2RmbHQ6InNvbGlkIixlZGl0VHlwZToibm9uZSJ9KSxlZGl0VHlwZToibm9uZSJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJub25lIn0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6Im5vbmUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToibm9uZSJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJub25lIn0sZHJhd2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3J0aG8iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJkaWFnb25hbCJdLGRmbHQ6ImRpYWdvbmFsIixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sYWN0aXZlc2hhcGU6e2ZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYigyNTUsMCwyNTUpIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjozODJ9XSw0NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDSVJDTEVfU0lERVM6MzIsaTAwMDowLGkwOTA6OCxpMTgwOjE2LGkyNzA6MjQsY29zNDU6TWF0aC5jb3MoTWF0aC5QSS80KSxzaW40NTpNYXRoLnNpbihNYXRoLlBJLzQpLFNRUlQyOk1hdGguc3FydCgyKX19LHt9XSw0NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIoIm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24iKSxyKCJuZXdzaGFwZS5sYXllciIpLHIoIm5ld3NoYXBlLmZpbGxjb2xvciIpLHIoIm5ld3NoYXBlLmZpbGxydWxlIikscigibmV3c2hhcGUub3BhY2l0eSIpLHIoIm5ld3NoYXBlLmxpbmUud2lkdGgiKSl7dmFyIGk9KHR8fHt9KS5wbG90X2JnY29sb3J8fCIjRkZGIjtyKCJuZXdzaGFwZS5saW5lLmNvbG9yIixuLmNvbnRyYXN0KGkpKSxyKCJuZXdzaGFwZS5saW5lLmRhc2giKX1yKCJhY3RpdmVzaGFwZS5maWxsY29sb3IiKSxyKCJhY3RpdmVzaGFwZS5vcGFjaXR5Iil9fSx7Ii4uLy4uL2NvbG9yIjozNjF9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhZ2VsZW1lbnQiKSxpPXQoIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5kcmF3TW9kZSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5pMDAwLGw9by5pMDkwLGM9by5pMTgwLHU9by5pMjcwLGY9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsaD10KCIuL2hlbHBlcnMiKSxwPWgucG9pbnRzU2hhcGVSZWN0YW5nbGUsZD1oLnBvaW50c1NoYXBlRWxsaXBzZSxtPWgud3JpdGVQYXRocyxnPXQoIi4vbmV3c2hhcGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLG8saCl7aHx8KGg9MCk7dmFyIHY9by5nZDtmdW5jdGlvbiB5KCl7dChlLHIsbyxoKyspLGQoZVswXSkmJngoe3JlZHJhd2luZzohMH0pfWZ1bmN0aW9uIHgodCl7by5pc0FjdGl2ZVNoYXBlPSExO3ZhciBlPWcocixvKTtPYmplY3Qua2V5cyhlKS5sZW5ndGgmJmEuY2FsbCgodHx8e30pLnJlZHJhd2luZz8icmVsYXlvdXQiOiJfZ3VpUmVsYXlvdXQiLHYsZSl9dmFyIGIsXyx3LFQsayxBPW8uaXNBY3RpdmVTaGFwZSxNPXYuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixTPW8uZHJhZ21vZGU7KGkoUyk/di5fZnVsbExheW91dC5fZHJhd2luZz0hMDp2Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiZmKHYpLHIuYXR0cigiZCIsbShlKSksQSYmIWgpJiYoaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3Rbcl09W107Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3Rbcl1baV09W107Zm9yKHZhciBhPTA7YTxuW2ldLmxlbmd0aDthKyspdFtyXVtpXVthXT1uW2ldW2FdfX1yZXR1cm4gdH0oW10sZSksZnVuY3Rpb24odCl7Yj1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxhPSFwKGkpJiZkKGkpO2Jbcl09W107Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoIloiIT09aVtvXVswXSYmKCFhfHxvPT09c3x8bz09PWx8fG89PT1jfHxvPT09dSkpe3ZhciBmPWlbb11bMV0saD1pW29dWzJdLG09dC5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCkuYXR0cigiZGF0YS1pIixyKS5hdHRyKCJkYXRhLWoiLG8pLmF0dHIoImN4IixmKS5hdHRyKCJjeSIsaCkuYXR0cigiciIsNCkuc3R5bGUoeyJtaXgtYmxlbmQtbW9kZSI6Imx1bWlub3NpdHkiLGZpbGw6ImJsYWNrIixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoxfSk7YltyXVtvXT17ZWxlbWVudDptLm5vZGUoKSxnZDp2LHByZXBGbjpFLGRvbmVGbjpDLGNsaWNrRm46UH0sbi5pbml0KGJbcl1bb10pfX19KE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lLWNvbnRyb2xsZXJzIikpLGZ1bmN0aW9uKCl7aWYoXz1bXSwhZS5sZW5ndGgpcmV0dXJuO19bMF09e2VsZW1lbnQ6clswXVswXSxnZDp2LHByZXBGbjpPLGRvbmVGbjp6fSxuLmluaXQoX1swXSl9KCkpO2Z1bmN0aW9uIEUodCl7dz0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIiksVD0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1qIiksYlt3XVtUXS5tb3ZlRm49TH1mdW5jdGlvbiBMKHQscil7aWYoZS5sZW5ndGgpe3ZhciBuPWtbd11bVF1bMV0saT1rW3ddW1RdWzJdLGE9ZVt3XSxvPWEubGVuZ3RoO2lmKHAoYSkpe2Zvcih2YXIgcz0wO3M8bztzKyspaWYocyE9PVQpe3ZhciBsPWFbc107bFsxXT09PWFbVF1bMV0mJihsWzFdPW4rdCksbFsyXT09PWFbVF1bMl0mJihsWzJdPWkrcil9aWYoYVtUXVsxXT1uK3QsYVtUXVsyXT1pK3IsIXAoYSkpZm9yKHZhciBjPTA7YzxvO2MrKylmb3IodmFyIHU9MDt1PGFbY10ubGVuZ3RoO3UrKylhW2NdW3VdPWtbd11bY11bdV19ZWxzZSBhW1RdWzFdPW4rdCxhW1RdWzJdPWkrcjt5KCl9fWZ1bmN0aW9uIEMoKXt4KCl9ZnVuY3Rpb24gUCh0LHIpe2lmKDI9PT10KXt3PStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPStyLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKTt2YXIgbj1lW3ddO3Aobil8fGQobil8fGZ1bmN0aW9uKCl7aWYoZS5sZW5ndGgmJmVbd10mJmVbd10ubGVuZ3RoKXtmb3IodmFyIHQ9W10scj0wO3I8ZVt3XS5sZW5ndGg7cisrKXIhPT1UJiZ0LnB1c2goZVt3XVtyXSk7dC5sZW5ndGg+MSYmKDIhPT10Lmxlbmd0aHx8IloiIT09dFsxXVswXSkmJigwPT09VCYmKHRbMF1bMF09Ik0iKSxlW3ddPXQseSgpLHgoKSl9fSgpfX1mdW5jdGlvbiBJKHQscil7IWZ1bmN0aW9uKHQscil7aWYoZS5sZW5ndGgpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPTA7aTxlW25dLmxlbmd0aDtpKyspZm9yKHZhciBhPTA7YSsyPGVbbl1baV0ubGVuZ3RoO2ErPTIpZVtuXVtpXVthKzFdPWtbbl1baV1bYSsxXSt0LGVbbl1baV1bYSsyXT1rW25dW2ldW2ErMl0rcn0odCxyKSx5KCl9ZnVuY3Rpb24gTyh0KXsodz0rdC5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIikpfHwodz0wKSxfW3ddLm1vdmVGbj1JfWZ1bmN0aW9uIHooKXt4KCl9fX0seyIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjU2MCwiLi4vLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vLi4vZHJhZ2VsZW1lbnQiOjM4MCwiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzc5LCIuL2NvbnN0YW50cyI6NDQ3LCIuL2hlbHBlcnMiOjQ1MCwiLi9uZXdzaGFwZXMiOjQ1MX1dLDQ1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS1zdmctcGF0aCIpLGk9dCgiLi9jb25zdGFudHMiKSxhPWkuQ0lSQ0xFX1NJREVTLG89aS5TUVJUMixzPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksbD1zLnAycixjPXMucjJwLHU9WzAsMyw0LDUsNiwxLDJdLGY9WzAsMyw0LDEsMl07ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lWzFdLXRbMV0sbj1lWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1yLndyaXRlUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoIWUpcmV0dXJuIk0wLDBaIjtmb3IodmFyIHI9IiIsbj0wO248ZTtuKyspZm9yKHZhciBpPXRbbl0ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgbz10W25dW2FdWzBdO2lmKCJaIj09PW8pcis9IloiO2Vsc2UgZm9yKHZhciBzPXRbbl1bYV0ubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1sOyJRIj09PW98fCJTIj09PW8/Yz1mW2xdOiJDIj09PW8mJihjPXVbbF0pLHIrPXRbbl1bYV1bY10sbD4wJiZsPHMtMSYmKHIrPSIsIil9fXJldHVybiByfSxyLnJlYWRQYXRocz1mdW5jdGlvbih0LGUscixpKXt2YXIgbyxzLHUsZj1uKHQpLGg9W10scD0tMSxkPTAsbT0wLGc9ZnVuY3Rpb24oKXtzPWQsdT1tfTtnKCk7Zm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciB5LHgsYixfLHc9W10sVD1mW3ZdWzBdLGs9VDtzd2l0Y2goVCl7Y2FzZSJNIjpwKyssaFtwXT1bXSxkPStmW3ZdWzFdLG09K2Zbdl1bMl0sdy5wdXNoKFtrLGQsbV0pLGcoKTticmVhaztjYXNlIlEiOmNhc2UiUyI6eT0rZlt2XVsxXSxiPStmW3ZdWzJdLGQ9K2Zbdl1bM10sbT0rZlt2XVs0XSx3LnB1c2goW2ssZCxtLHksYl0pO2JyZWFrO2Nhc2UiQyI6eT0rZlt2XVsxXSxiPStmW3ZdWzJdLHg9K2Zbdl1bM10sXz0rZlt2XVs0XSxkPStmW3ZdWzVdLG09K2Zbdl1bNl0sdy5wdXNoKFtrLGQsbSx5LGIseCxfXSk7YnJlYWs7Y2FzZSJUIjpjYXNlIkwiOmQ9K2Zbdl1bMV0sbT0rZlt2XVsyXSx3LnB1c2goW2ssZCxtXSk7YnJlYWs7Y2FzZSJIIjprPSJMIixkPStmW3ZdWzFdLHcucHVzaChbayxkLG1dKTticmVhaztjYXNlIlYiOms9IkwiLG09K2Zbdl1bMV0sdy5wdXNoKFtrLGQsbV0pO2JyZWFrO2Nhc2UiQSI6az0iTCI7dmFyIEE9K2Zbdl1bMV0sTT0rZlt2XVsyXTsrZlt2XVs0XXx8KEE9LUEsTT0tTSk7dmFyIFM9ZC1BLEU9bTtmb3Iobz0xO288PWEvMjtvKyspe3ZhciBMPTIqTWF0aC5QSSpvL2E7dy5wdXNoKFtrLFMrQSpNYXRoLmNvcyhMKSxFK00qTWF0aC5zaW4oTCldKX1icmVhaztjYXNlIloiOmQ9PT1zJiZtPT09dXx8KGQ9cyxtPXUsdy5wdXNoKFtrLGQsbV0pKX1mb3IodmFyIEM9KHJ8fHt9KS5kb21haW4sUD1lLl9mdWxsTGF5b3V0Ll9zaXplLEk9ciYmInBpeGVsIj09PXIueHNpemVtb2RlLE89ciYmInBpeGVsIj09PXIueXNpemVtb2RlLHo9ITE9PT1pLEQ9MDtEPHcubGVuZ3RoO0QrKyl7Zm9yKG89MDtvKzI8NztvKz0yKXt2YXIgUj13W0RdW28rMV0sRj13W0RdW28rMl07dm9pZCAwIT09UiYmdm9pZCAwIT09RiYmKGQ9UixtPUYsciYmKHIueGF4aXMmJnIueGF4aXMucDJyPyh6JiYoUi09ci54YXhpcy5fb2Zmc2V0KSxSPUk/YyhyLnhheGlzLHIueGFuY2hvcikrUjpsKHIueGF4aXMsUikpOih6JiYoUi09UC5sKSxDP1I9Qy54WzBdK1IvUC53OlIvPVAudyksci55YXhpcyYmci55YXhpcy5wMnI/KHomJihGLT1yLnlheGlzLl9vZmZzZXQpLEY9Tz9jKHIueWF4aXMsci55YW5jaG9yKS1GOmwoci55YXhpcyxGKSk6KHomJihGLT1QLnQpLEY9Qz9DLnlbMV0tRi9QLmg6MS1GL1AuaCkpLHdbRF1bbysxXT1SLHdbRF1bbysyXT1GKX1oW3BdLnB1c2god1tEXS5zbGljZSgpKX19cmV0dXJuIGh9LHIucG9pbnRzU2hhcGVSZWN0YW5nbGU9ZnVuY3Rpb24odCl7aWYoNSE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZT0xO2U8MztlKyspe2lmKCFoKHRbMF1bZV0tdFsxXVtlXSx0WzNdW2VdLXRbMl1bZV0pKXJldHVybiExO2lmKCFoKHRbMF1bZV0tdFszXVtlXSx0WzFdW2VdLXRbMl1bZV0pKXJldHVybiExfXJldHVybiEoIWgodFswXVsxXSx0WzFdWzFdKSYmIWgodFswXVsxXSx0WzNdWzFdKSkmJiEhKHAodFswXSx0WzFdKSpwKHRbMF0sdFszXSkpfSxyLnBvaW50c1NoYXBlRWxsaXBzZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlIT09YSsxKXJldHVybiExO2U9YTtmb3IodmFyIHI9MDtyPGU7cisrKXt2YXIgbj0oMiplLXIpJWUsaT0oZS8yK24pJWUsbz0oZS8yK3IpJWU7aWYoIWgocCh0W3JdLHRbb10pLHAodFtuXSx0W2ldKSkpcmV0dXJuITF9cmV0dXJuITB9LHIuaGFuZGxlRWxsaXBzZT1mdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuW2Usbl07dmFyIGk9ci5lbGxpcHNlT3Zlcih7eDA6ZVswXSx5MDplWzFdLHgxOm5bMF0seTE6blsxXX0pLHM9KGkueDEraS54MCkvMixsPShpLnkxK2kueTApLzIsYz0oaS54MS1pLngwKS8yLHU9KGkueTEtaS55MCkvMjtjfHwoYz11Lz1vKSx1fHwodT1jLz1vKTtmb3IodmFyIGY9W10saD0wO2g8YTtoKyspe3ZhciBwPTIqaCpNYXRoLlBJL2E7Zi5wdXNoKFtzK2MqTWF0aC5jb3MocCksbCt1Kk1hdGguc2luKHApXSl9cmV0dXJuIGZ9LHIuZWxsaXBzZU92ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC54MCxyPXQueTAsbj10LngxLGk9dC55MSxhPW4tZSxzPWktcixsPSgoZS09YSkrbikvMixjPSgoci09cykraSkvMjtyZXR1cm57eDA6bC0oYSo9bykseTA6Yy0ocyo9bykseDE6bCthLHkxOmMrc319fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjo1NjEsIi4vY29uc3RhbnRzIjo0NDcsInBhcnNlLXN2Zy1wYXRoIjoyNDV9XSw0NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLGk9bi5kcmF3TW9kZSxhPW4ub3Blbk1vZGUsbz10KCIuL2NvbnN0YW50cyIpLHM9by5pMDAwLGw9by5pMDkwLGM9by5pMTgwLHU9by5pMjcwLGY9by5jb3M0NSxoPW8uc2luNDUscD10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyIpLGQ9cC5wMnIsbT1wLnIycCxnPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LHY9dCgiLi9oZWxwZXJzIikseT12LnJlYWRQYXRocyx4PXYud3JpdGVQYXRocyxiPXYuZWxsaXBzZU92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGgpe3ZhciByPXRbMF1bMF07aWYocil7dmFyIG49ci5nZXRBdHRyaWJ1dGUoImQiKSxvPWUuZ2QscD1vLl9mdWxsTGF5b3V0Lm5ld3NoYXBlLHY9ZS5wbG90aW5mbyxfPXYueGF4aXMsdz12LnlheGlzLFQ9ISF2LmRvbWFpbnx8IXYueGF4aXMsaz0hIXYuZG9tYWlufHwhdi55YXhpcyxBPWUuaXNBY3RpdmVTaGFwZSxNPWUuZHJhZ21vZGUsUz0oby5sYXlvdXR8fHt9KS5zaGFwZXN8fFtdO2lmKCFpKE0pJiZ2b2lkIDAhPT1BKXt2YXIgRT1vLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4O2lmKEU8Uy5sZW5ndGgpc3dpdGNoKG8uX2Z1bGxMYXlvdXQuc2hhcGVzW0VdLnR5cGUpe2Nhc2UicmVjdCI6TT0iZHJhd3JlY3QiO2JyZWFrO2Nhc2UiY2lyY2xlIjpNPSJkcmF3Y2lyY2xlIjticmVhaztjYXNlImxpbmUiOk09ImRyYXdsaW5lIjticmVhaztjYXNlInBhdGgiOnZhciBMPVNbRV0ucGF0aHx8IiI7TT0iWiI9PT1MW0wubGVuZ3RoLTFdPyJkcmF3Y2xvc2VkcGF0aCI6ImRyYXdvcGVucGF0aCJ9fXZhciBDLFA9YShNKSxJPXkobixvLHYsQSksTz17ZWRpdGFibGU6ITAseHJlZjpUPyJwYXBlciI6Xy5faWQseXJlZjprPyJwYXBlciI6dy5faWQsbGF5ZXI6cC5sYXllcixvcGFjaXR5OnAub3BhY2l0eSxsaW5lOntjb2xvcjpwLmxpbmUuY29sb3Isd2lkdGg6cC5saW5lLndpZHRoLGRhc2g6cC5saW5lLmRhc2h9fTtpZihQfHwoTy5maWxsY29sb3I9cC5maWxsY29sb3IsTy5maWxscnVsZT1wLmZpbGxydWxlKSwxPT09SS5sZW5ndGgmJihDPUlbMF0pLEMmJiJkcmF3cmVjdCI9PT1NKU8udHlwZT0icmVjdCIsTy54MD1DWzBdWzFdLE8ueTA9Q1swXVsyXSxPLngxPUNbMl1bMV0sTy55MT1DWzJdWzJdO2Vsc2UgaWYoQyYmImRyYXdsaW5lIj09PU0pTy50eXBlPSJsaW5lIixPLngwPUNbMF1bMV0sTy55MD1DWzBdWzJdLE8ueDE9Q1sxXVsxXSxPLnkxPUNbMV1bMl07ZWxzZSBpZihDJiYiZHJhd2NpcmNsZSI9PT1NKXtPLnR5cGU9ImNpcmNsZSI7dmFyIHo9Q1tzXVsxXSxEPUNbbF1bMV0sUj1DW2NdWzFdLEY9Q1t1XVsxXSxCPUNbc11bMl0sTj1DW2xdWzJdLGo9Q1tjXVsyXSxVPUNbdV1bMl0sVj12LnhheGlzJiYoImRhdGUiPT09di54YXhpcy50eXBlfHwibG9nIj09PXYueGF4aXMudHlwZSksSD12LnlheGlzJiYoImRhdGUiPT09di55YXhpcy50eXBlfHwibG9nIj09PXYueWF4aXMudHlwZSk7ViYmKHo9bSh2LnhheGlzLHopLEQ9bSh2LnhheGlzLEQpLFI9bSh2LnhheGlzLFIpLEY9bSh2LnhheGlzLEYpKSxIJiYoQj1tKHYueWF4aXMsQiksTj1tKHYueWF4aXMsTiksaj1tKHYueWF4aXMsaiksVT1tKHYueWF4aXMsVSkpO3ZhciBxPShEK0YpLzIsRz0oQitqKS8yLFk9Yih7eDA6cSx5MDpHLHgxOnErKEYtRCtSLXopLzIqZix5MTpHKyhVLU4rai1CKS8yKmh9KTtWJiYoWS54MD1kKHYueGF4aXMsWS54MCksWS54MT1kKHYueGF4aXMsWS54MSkpLEgmJihZLnkwPWQodi55YXhpcyxZLnkwKSxZLnkxPWQodi55YXhpcyxZLnkxKSksTy54MD1ZLngwLE8ueTA9WS55MCxPLngxPVkueDEsTy55MT1ZLnkxfWVsc2UgTy50eXBlPSJwYXRoIixfJiZ3JiZmdW5jdGlvbih0LGUscil7dmFyIG49ImRhdGUiPT09ZS50eXBlLGk9ImRhdGUiPT09ci50eXBlO2lmKCFuJiYhaSlyZXR1cm4gdDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzKzI8dFthXVtvXS5sZW5ndGg7cys9MiluJiYodFthXVtvXVtzKzFdPXRbYV1bb11bcysxXS5yZXBsYWNlKCIgIiwiXyIpKSxpJiYodFthXVtvXVtzKzJdPXRbYV1bb11bcysyXS5yZXBsYWNlKCIgIiwiXyIpKX0oSSxfLHcpLE8ucGF0aD14KEkpLEM9bnVsbDtnKG8pO2Zvcih2YXIgVz1lLmVkaXRIZWxwZXJzLFg9KFd8fHt9KS5tb2RpZnlJdGVtLFo9W10sSj0wO0o8Uy5sZW5ndGg7SisrKXt2YXIgSz1vLl9mdWxsTGF5b3V0LnNoYXBlc1tKXTtpZihaW0pdPUsuX2lucHV0LHZvaWQgMCE9PUEmJko9PT1vLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4KXt2YXIgUT1PO3N3aXRjaChLLnR5cGUpe2Nhc2UibGluZSI6Y2FzZSJyZWN0IjpjYXNlImNpcmNsZSI6WCgieDAiLFEueDApLFgoIngxIixRLngxKSxYKCJ5MCIsUS55MCksWCgieTEiLFEueTEpO2JyZWFrO2Nhc2UicGF0aCI6WCgicGF0aCIsUS5wYXRoKX19fXJldHVybiB2b2lkIDA9PT1BPyhaLnB1c2goTyksWik6Vz9XLmdldFVwZGF0ZU9iaigpOnt9fX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6NTYwLCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyI6NTYxLCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIjozNzksIi4vY29uc3RhbnRzIjo0NDcsIi4vaGVscGVycyI6NDUwfV0sNDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT1lW3QuY2hhckF0KDApXS5kcmF3bjtpZih2b2lkIDAhPT1hKXt2YXIgbz10LnN1YnN0cigxKS5tYXRjaChuLnBhcmFtUkUpOyFvfHxvLmxlbmd0aDxhfHxyLnB1c2goaS5jbGVhbk51bWJlcihvW2FdKSl9fSkpLHJ9LHIuZ2V0RGF0YVRvUGl4ZWw9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpaWYoImRvbWFpbiI9PT1pKWE9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xlbmd0aCoobj8xLXQ6dCkrZS5fb2Zmc2V0fTtlbHNle3ZhciBzPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7YT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKHModCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihhPXIuZGVjb2RlRGF0ZShhKSl9ZWxzZSBhPW4/ZnVuY3Rpb24odCl7cmV0dXJuIG8udCtvLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBvLmwrby53KnR9O3JldHVybiBhfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLG89dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKWlmKCJkb21haW4iPT09aSlhPWZ1bmN0aW9uKHQpe3ZhciByPSh0LWUuX29mZnNldCkvZS5fbGVuZ3RoO3JldHVybiBuPzEtcjpyfTtlbHNle3ZhciBzPXIucmFuZ2VUb1NoYXBlUG9zaXRpb24oZSk7YT1mdW5jdGlvbih0KXtyZXR1cm4gcyhlLnAycih0LWUuX29mZnNldCkpfX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gMS0odC1vLnQpL28uaH06ZnVuY3Rpb24odCl7cmV0dXJuKHQtby5sKS9vLnd9O3JldHVybiBhfSxyLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PT1NYXRoLnJvdW5kKGUlMiksbj1NYXRoLnJvdW5kKHQpO3JldHVybiByP24rLjU6bn0sci5tYWtlT3B0aW9uc0FuZFBsb3RpbmZvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5zaGFwZXNbZV18fHt9LG49dC5fZnVsbExheW91dC5fcGxvdHNbci54cmVmK3IueXJlZl07cmV0dXJuISFuP24uX2hhZFBsb3RpbmZvPSEwOihuPXt9LHIueHJlZiYmInBhcGVyIiE9PXIueHJlZiYmKG4ueGF4aXM9dC5fZnVsbExheW91dFtyLnhyZWYrImF4aXMiXSksci55cmVmJiYicGFwZXIiIT09ci55cmVmJiYobi55YXhpcz10Ll9mdWxsTGF5b3V0W3IueXJlZisiYXhpcyJdKSksbi54c2l6ZW1vZGU9ci54c2l6ZW1vZGUsbi55c2l6ZW1vZGU9ci55c2l6ZW1vZGUsbi54YW5jaG9yPXIueGFuY2hvcixuLnlhbmNob3I9ci55YW5jaG9yLHtvcHRpb25zOnIscGxvdGluZm86bn19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2NvbnN0YW50cyI6NDQzfV0sNDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseURyYXdOZXdTaGFwZURlZmF1bHRzOnQoIi4vZHJhd19uZXdzaGFwZS9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoInNoYXBlcyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo1NjIsIi4vYXR0cmlidXRlcyI6NDQxLCIuL2NhbGNfYXV0b3JhbmdlIjo0NDIsIi4vZGVmYXVsdHMiOjQ0NCwiLi9kcmF3Ijo0NDUsIi4vZHJhd19uZXdzaGFwZS9kZWZhdWx0cyI6NDQ4fV0sNDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4vY29uc3RhbnRzIiksdT1sKCJzdGVwIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmcifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJzbGlkZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyYWN0aW9uIiwicGl4ZWxzIl0sZGZsdDoiZnJhY3Rpb24ifSxsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30se3Q6e2RmbHQ6MjB9fSkseGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cy50cmFuc2l0aW9uLmVhc2luZy52YWx1ZXMsZGZsdDoiY3ViaWMtaW4tb3V0In19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCZ0NvbG9yfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnRpY2tMZW5ndGh9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMubWlub3JUaWNrTGVuZ3RofX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4LCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6NTQzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MCwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjYxMywiLi9jb25zdGFudHMiOjQ1NX1dLDQ1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InNsaWRlcnMiLGNvbnRhaW5lckNsYXNzTmFtZToic2xpZGVyLWNvbnRhaW5lciIsZ3JvdXBDbGFzc05hbWU6InNsaWRlci1ncm91cCIsaW5wdXRBcmVhQ2xhc3M6InNsaWRlci1pbnB1dC1hcmVhIixyYWlsUmVjdENsYXNzOiJzbGlkZXItcmFpbC1yZWN0IixyYWlsVG91Y2hSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXRvdWNoLXJlY3QiLGdyaXBSZWN0Q2xhc3M6InNsaWRlci1ncmlwLXJlY3QiLHRpY2tSZWN0Q2xhc3M6InNsaWRlci10aWNrLXJlY3QiLGlucHV0UHJveHlDbGFzczoic2xpZGVyLWlucHV0LXByb3h5IixsYWJlbHNDbGFzczoic2xpZGVyLWxhYmVscyIsbGFiZWxHcm91cENsYXNzOiJzbGlkZXItbGFiZWwtZ3JvdXAiLGxhYmVsQ2xhc3M6InNsaWRlci1sYWJlbCIsY3VycmVudFZhbHVlQ2xhc3M6InNsaWRlci1jdXJyZW50LXZhbHVlIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6InNsaWRlci1hY3RpdmUtaW5kZXgiLGF1dG9NYXJnaW5JZFJvb3Q6InNsaWRlci0iLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjoiI2JlYzhkOSIscmFpbEJnQ29sb3I6IiNmOGZhZmMiLHJhaWxJbnNldDo4LHN0ZXBJbnNldDoxMCxncmlwUmFkaXVzOjEwLGdyaXBXaWR0aDoyMCxncmlwSGVpZ2h0OjIwLGdyaXBCb3JkZXI6MjAsZ3JpcEJvcmRlcldpZHRoOjEsZ3JpcEJvcmRlckNvbG9yOiIjYmVjOGQ5IixncmlwQmdDb2xvcjoiI2Y2ZjhmYSIsZ3JpcEJnQWN0aXZlQ29sb3I6IiNkYmRkZTAiLGxhYmVsUGFkZGluZzo4LGxhYmVsT2Zmc2V0OjAsdGlja1dpZHRoOjEsdGlja0NvbG9yOiIjMzMzIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6IiMzMzMiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDQ1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKCJ2aXNpYmxlIikpe2UuX3N0ZXBDb3VudD1sO3ZhciBmPWUuX3Zpc2libGVTdGVwcz1uLmZpbHRlclZpc2libGUocyk7KHNbbygiYWN0aXZlIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWZbMF0uX2luZGV4KSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygibGVuIiksbygibGVubW9kZSIpLG8oInBhZC50IiksbygicGFkLnIiKSxvKCJwYWQuYiIpLG8oInBhZC5sIiksbi5jb2VyY2VGb250KG8sImZvbnQiLHIuZm9udCksbygiY3VycmVudHZhbHVlLnZpc2libGUiKSYmKG8oImN1cnJlbnR2YWx1ZS54YW5jaG9yIiksbygiY3VycmVudHZhbHVlLnByZWZpeCIpLG8oImN1cnJlbnR2YWx1ZS5zdWZmaXgiKSxvKCJjdXJyZW50dmFsdWUub2Zmc2V0Iiksbi5jb2VyY2VGb250KG8sImN1cnJlbnR2YWx1ZS5mb250IixlLmZvbnQpKSxvKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbygidHJhbnNpdGlvbi5lYXNpbmciKSxvKCJiZ2NvbG9yIiksbygiYWN0aXZlYmdjb2xvciIpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSxvKCJ0aWNrbGVuIiksbygidGlja3dpZHRoIiksbygidGlja2NvbG9yIiksbygibWlub3J0aWNrbGVuIil9fWZ1bmN0aW9uIGModCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aWYoInNraXAiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExKXtyKCJtZXRob2QiKSxyKCJhcmdzIik7dmFyIGk9cigibGFiZWwiLCJzdGVwLSIrZS5faW5kZXgpO3IoInZhbHVlIixpKSxyKCJleGVjdXRlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuL2F0dHJpYnV0ZXMiOjQ1NCwiLi9jb25zdGFudHMiOjQ1NX1dLDQ1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikscD1oLkxJTkVfU1BBQ0lORyxkPWguRlJPTV9UTCxtPWguRlJPTV9CUjtmdW5jdGlvbiBnKHQpe3JldHVybiBmLmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24geSh0LGUpe3ZhciByPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2YubGFiZWxHcm91cENsYXNzKS5kYXRhKGUuX3Zpc2libGVTdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBhPTAsbD0wO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9XyhuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGk9by5iQm94KHIpO2w9TWF0aC5tYXgobCxpLmhlaWdodCksYT1NYXRoLm1heChhLGkud2lkdGgpfX0pKSxyLnJlbW92ZSgpO3ZhciB1PWUuX2RpbXM9e307dS5pbnB1dEFyZWFXaWR0aD1NYXRoLm1heChmLnJhaWxXaWR0aCxmLmdyaXBIZWlnaHQpO3ZhciBoPXQuX2Z1bGxMYXlvdXQuX3NpemU7dS5seD1oLmwraC53KmUueCx1Lmx5PWgudCtoLmgqKDEtZS55KSwiZnJhY3Rpb24iPT09ZS5sZW5tb2RlP3Uub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChoLncqZS5sZW4pOnUub3V0ZXJMZW5ndGg9ZS5sZW4sdS5pbnB1dEFyZWFTdGFydD0wLHUuaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQodS5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciBwPSh1LmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLHY9YStmLmxhYmVsUGFkZGluZztpZih1LmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKHYvcCkpLHUubGFiZWxIZWlnaHQ9bCx1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsdS5jdXJyZW50VmFsdWVIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsdS5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB5PW8udGVzdGVyLmFwcGVuZCgiZyIpO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9eCh5LGUsdC5sYWJlbCksbj1yLm5vZGUoKSYmby5iQm94KHIubm9kZSgpKXx8e3dpZHRoOjAsaGVpZ2h0OjB9LGk9Yy5saW5lQ291bnQocik7dS5jdXJyZW50VmFsdWVNYXhXaWR0aD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZU1heFdpZHRoLE1hdGguY2VpbChuLndpZHRoKSksdS5jdXJyZW50VmFsdWVIZWlnaHQ9TWF0aC5tYXgodS5jdXJyZW50VmFsdWVIZWlnaHQsTWF0aC5jZWlsKG4uaGVpZ2h0KSksdS5jdXJyZW50VmFsdWVNYXhMaW5lcz1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZU1heExpbmVzLGkpfSkpLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9dS5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHkucmVtb3ZlKCl9dS5oZWlnaHQ9dS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtmLnRpY2tPZmZzZXQrZS50aWNrbGVuK2YubGFiZWxPZmZzZXQrdS5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIGI9ImxlZnQiO3MuaXNSaWdodEFuY2hvcihlKSYmKHUubHgtPXUub3V0ZXJMZW5ndGgsYj0icmlnaHQiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYodS5seC09dS5vdXRlckxlbmd0aC8yLGI9ImNlbnRlciIpO3ZhciB3PSJ0b3AiO3MuaXNCb3R0b21BbmNob3IoZSkmJih1Lmx5LT11LmhlaWdodCx3PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYodS5seS09dS5oZWlnaHQvMix3PSJtaWRkbGUiKSx1Lm91dGVyTGVuZ3RoPU1hdGguY2VpbCh1Lm91dGVyTGVuZ3RoKSx1LmhlaWdodD1NYXRoLmNlaWwodS5oZWlnaHQpLHUubHg9TWF0aC5yb3VuZCh1Lmx4KSx1Lmx5PU1hdGgucm91bmQodS5seSk7dmFyIFQ9e3k6ZS55LGI6dS5oZWlnaHQqbVt3XSx0OnUuaGVpZ2h0KmRbd119OyJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/KFQubD0wLFQueGw9ZS54LWUubGVuKmRbYl0sVC5yPTAsVC54cj1lLngrZS5sZW4qbVtiXSk6KFQueD1lLngsVC5sPXUub3V0ZXJMZW5ndGgqZFtiXSxULnI9dS5vdXRlckxlbmd0aCptW2JdKSxpLmF1dG9NYXJnaW4odCxnKGUpLFQpfWZ1bmN0aW9uIHgodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGksYT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWEuaW5wdXRBcmVhTGVuZ3RoLWYuY3VycmVudFZhbHVlSW5zZXQtYS5jdXJyZW50VmFsdWVNYXhXaWR0aCxpPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSphLmlucHV0QXJlYUxlbmd0aCxpPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj1mLmN1cnJlbnRWYWx1ZUluc2V0LGk9ImxlZnQifXZhciBsPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYubGFiZWxDbGFzcywoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOmksImRhdGEtbm90ZXgiOjF9KX0pKSx1PWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKXUrPXI7ZWxzZXt2YXIgaD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Ll9tZXRhO2QmJihoPXMudGVtcGxhdGVTdHJpbmcoaCxkKSksdSs9aH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJih1Kz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGwuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dCh1KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgbT1jLmxpbmVDb3VudChsKSxnPShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtbSkqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKnA7cmV0dXJuIGMucG9zaXRpb25UZXh0KGwsbixnKSxsfX1mdW5jdGlvbiBiKHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLmdyaXBSZWN0Q2xhc3MsKGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKS5hdHRyKHt3aWR0aDpmLmdyaXBXaWR0aCxoZWlnaHQ6Zi5ncmlwSGVpZ2h0LHJ4OmYuZ3JpcFJhZGl1cyxyeTpmLmdyaXBSYWRpdXN9KS5jYWxsKGEuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsci5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixmLmxhYmVsQ2xhc3MsKGZ1bmN0aW9uKHQpe3QuYXR0cih7InRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pfSkpLGk9ZS5zdGVwLmxhYmVsLGE9ci5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7cmV0dXJuIGEmJihpPXMudGVtcGxhdGVTdHJpbmcoaSxhKSksbi5jYWxsKG8uZm9udCxyLmZvbnQpLnRleHQoaSkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyxyLl9nZCksbn1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9cy5lbnN1cmVTaW5nbGUodCwiZyIsZi5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoImcuIitmLmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYubGFiZWxHcm91cENsYXNzLCEwKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO3IuY2FsbChfLHQsZSksby5zZXRUcmFuc2xhdGUocixFKGUsdC5mcmFjdGlvbiksZi50aWNrT2Zmc2V0K2UudGlja2xlbitlLmZvbnQuc2l6ZSpwK2YubGFiZWxPZmZzZXQraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KSl9ZnVuY3Rpb24gVCh0LGUscixuLGkpe3ZhciBhPU1hdGgucm91bmQobiooci5fc3RlcENvdW50LTEpKSxvPXIuX3Zpc2libGVTdGVwc1thXS5faW5kZXg7byE9PXIuYWN0aXZlJiZrKHQsZSxyLG8sITAsaSl9ZnVuY3Rpb24gayh0LGUscixuLGEsbyl7dmFyIHM9ci5hY3RpdmU7ci5hY3RpdmU9bix1KHQubGF5b3V0LGYubmFtZSxyKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixuKTt2YXIgbD1yLnN0ZXBzW3IuYWN0aXZlXTtlLmNhbGwoUyxyLG8pLGUuY2FsbCh4LHIpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmNoYW5nZSIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246YSxwcmV2aW91c0FjdGl2ZTpzfSksbCYmbC5tZXRob2QmJmEmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9YSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1vKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6YSxkb1RyYW5zaXRpb246b30sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpKX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1yLm5vZGUoKSxvPW4uc2VsZWN0KGUpO2Z1bmN0aW9uIHMoKXtyZXR1cm4gci5kYXRhKClbMF19ZnVuY3Rpb24gbCgpe3ZhciB0PXMoKTtlLmVtaXQoInBsb3RseV9zbGlkZXJzdGFydCIse3NsaWRlcjp0fSk7dmFyIGw9ci5zZWxlY3QoIi4iK2YuZ3JpcFJlY3RDbGFzcyk7bi5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxuLmV2ZW50LnByZXZlbnREZWZhdWx0KCksbC5jYWxsKGEuZmlsbCx0LmFjdGl2ZWJnY29sb3IpO3ZhciBjPUwodCxuLm1vdXNlKGkpWzBdKTtmdW5jdGlvbiB1KCl7dmFyIHQ9cygpLGE9TCh0LG4ubW91c2UoaSlbMF0pO1QoZSxyLHQsYSwhMSl9ZnVuY3Rpb24gaCgpe3ZhciB0PXMoKTt0Ll9kcmFnZ2luZz0hMSxsLmNhbGwoYS5maWxsLHQuYmdjb2xvciksby5vbigibW91c2V1cCIsbnVsbCksby5vbigibW91c2Vtb3ZlIixudWxsKSxvLm9uKCJ0b3VjaGVuZCIsbnVsbCksby5vbigidG91Y2htb3ZlIixudWxsKSxlLmVtaXQoInBsb3RseV9zbGlkZXJlbmQiLHtzbGlkZXI6dCxzdGVwOnQuc3RlcHNbdC5hY3RpdmVdfSl9VChlLHIsdCxjLCEwKSx0Ll9kcmFnZ2luZz0hMCxvLm9uKCJtb3VzZW1vdmUiLHUpLG8ub24oInRvdWNobW92ZSIsdSksby5vbigibW91c2V1cCIsaCksby5vbigidG91Y2hlbmQiLGgpfXQub24oIm1vdXNlZG93biIsbCksdC5vbigidG91Y2hzdGFydCIsbCl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJyZWN0LiIrZi50aWNrUmVjdENsYXNzKS5kYXRhKGUuX3Zpc2libGVTdGVwcyksaT1lLl9kaW1zO3IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKGYudGlja1JlY3RDbGFzcywhMCksci5leGl0KCkucmVtb3ZlKCksci5hdHRyKHt3aWR0aDplLnRpY2t3aWR0aCsicHgiLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLHIuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgcz1yJWkubGFiZWxTdHJpZGU9PTAsbD1uLnNlbGVjdCh0aGlzKTtsLmF0dHIoe2hlaWdodDpzP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoYS5maWxsLGUudGlja2NvbG9yKSxvLnNldFRyYW5zbGF0ZShsLEUoZSxyLyhlLl9zdGVwQ291bnQtMSkpLS41KmUudGlja3dpZHRoLChzP2YudGlja09mZnNldDpmLm1pbm9yVGlja09mZnNldCkraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KSl9ZnVuY3Rpb24gUyh0LGUscil7Zm9yKHZhciBuPXQuc2VsZWN0KCJyZWN0LiIrZi5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1FKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cigidHJhbnNmb3JtIixsKG8tLjUqZi5ncmlwV2lkdGgsZS5fZGltcy5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCkpfX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9dC5fZGltcztyZXR1cm4gci5pbnB1dEFyZWFTdGFydCtmLnN0ZXBJbnNldCsoci5pbnB1dEFyZWFMZW5ndGgtMipmLnN0ZXBJbnNldCkqTWF0aC5taW4oMSxNYXRoLm1heCgwLGUpKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dC5fZGltcztyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLChlLWYuc3RlcEluc2V0LXIuaW5wdXRBcmVhU3RhcnQpLyhyLmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0LTIqci5pbnB1dEFyZWFTdGFydCkpKX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1yLl9kaW1zLGk9cy5lbnN1cmVTaW5nbGUodCwicmVjdCIsZi5yYWlsVG91Y2hSZWN0Q2xhc3MsKGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLGYudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoIm9wYWNpdHkiLDApLG8uc2V0VHJhbnNsYXRlKGksMCxuLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiBQKHQsZSl7dmFyIHI9ZS5fZGltcyxuPXIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5yYWlsSW5zZXQsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6Zi5yYWlsV2lkdGgscng6Zi5yYWlsUmFkaXVzLHJ5OmYucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxvLnNldFRyYW5zbGF0ZShpLGYucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLWYucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbZi5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrZi5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2Z1bmN0aW9uIHMoZSl7ZS5fY29tbWFuZE9ic2VydmVyJiYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb21tYW5kT2JzZXJ2ZXIpLGkuYXV0b01hcmdpbih0LGcoZSkpfWlmKGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIiksYS5leGl0KCkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitmLmdyb3VwQ2xhc3NOYW1lKS5lYWNoKHMpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9YS5zZWxlY3RBbGwoImcuIitmLmdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIsdik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5ncm91cENsYXNzTmFtZSwhMCksbC5leGl0KCkuZWFjaChzKS5yZW1vdmUoKTtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIHU9cltjXTt5KHQsdSl9bC5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTshZnVuY3Rpb24odCl7dmFyIGU9dC5fZGltcztlLmxhYmVsU3RlcHM9W107Zm9yKHZhciByPXQuX3N0ZXBDb3VudCxuPTA7bjxyO24rPWUubGFiZWxTdHJpZGUpZS5sYWJlbFN0ZXBzLnB1c2goe2ZyYWN0aW9uOm4vKHItMSksc3RlcDp0Ll92aXNpYmxlU3RlcHNbbl19KX0oZSksaS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuX3Zpc2libGVTdGVwcywoZnVuY3Rpb24oZSl7dmFyIG49ci5kYXRhKClbMF07bi5hY3RpdmUhPT1lLmluZGV4JiYobi5fZHJhZ2dpbmd8fGsodCxyLG4sZS5pbmRleCwhMSwhMCkpfSkpLGZ1bmN0aW9uKHQsZSxyKXsoci5zdGVwc1tyLmFjdGl2ZV18fHt9KS52aXNpYmxlfHwoci5hY3RpdmU9ci5fdmlzaWJsZVN0ZXBzWzBdLl9pbmRleCk7ZS5jYWxsKHgscikuY2FsbChQLHIpLmNhbGwodyxyKS5jYWxsKE0scikuY2FsbChDLHQscikuY2FsbChiLHQscik7dmFyIG49ci5fZGltcztvLnNldFRyYW5zbGF0ZShlLG4ubHgrci5wYWQubCxuLmx5K3IucGFkLnQpLGUuY2FsbChTLHIsITEpLGUuY2FsbCh4LHIpfSh0LG4uc2VsZWN0KHRoaXMpLGUpfSkpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjYxNCwiLi4vY29sb3IiOjM2MSwiLi4vZHJhd2luZyI6MzgzLCIuL2NvbnN0YW50cyI6NDU1LCJAcGxvdGx5L2QzIjo1OH1dLDQ1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOm4ubmFtZSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjQ1NCwiLi9jb25zdGFudHMiOjQ1NSwiLi9kZWZhdWx0cyI6NDU2LCIuL2RyYXciOjQ1N31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXMuc3RyVHJhbnNsYXRlLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vY29sb3IiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk9QUE9TSVRFX1NJREUsZD0vIFtYWV1bMC05XSogLztlLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCxlLHIpe3ZhciBtLGc9ci5wcm9wQ29udGFpbmVyLHY9ci5wcm9wTmFtZSx5PXIucGxhY2Vob2xkZXIseD1yLnRyYWNlSW5kZXgsYj1yLmF2b2lkfHx7fSxfPXIuYXR0cmlidXRlcyx3PXIudHJhbnNmb3JtLFQ9ci5jb250YWluZXJHcm91cCxrPXQuX2Z1bGxMYXlvdXQsQT0xLE09ITEsUz1nLnRpdGxlLEU9KFMmJlMudGV4dD9TLnRleHQ6IiIpLnRyaW0oKSxMPVMmJlMuZm9udD9TLmZvbnQ6e30sQz1MLmZhbWlseSxQPUwuc2l6ZSxJPUwuY29sb3I7InRpdGxlLnRleHQiPT09dj9tPSJ0aXRsZVRleHQiOi0xIT09di5pbmRleE9mKCJheGlzIik/bT0iYXhpc1RpdGxlVGV4dCI6di5pbmRleE9mKCEwKSYmKG09ImNvbG9yYmFyVGl0bGVUZXh0Iik7dmFyIE89dC5fY29udGV4dC5lZGl0c1ttXTsiIj09PUU/QT0wOkUucmVwbGFjZShkLCIgJSAiKT09PXkucmVwbGFjZShkLCIgJSAiKSYmKEE9LjIsTT0hMCxPfHwoRT0iIikpLHIuX21ldGE/RT1zLnRlbXBsYXRlU3RyaW5nKEUsci5fbWV0YSk6ay5fbWV0YSYmKEU9cy50ZW1wbGF0ZVN0cmluZyhFLGsuX21ldGEpKTt2YXIgeixEPUV8fE87VHx8KFQ9cy5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIiwiZy0iK2UpLHo9ay5faENvbG9yYmFyTW92ZVRpdGxlKTt2YXIgUj1ULnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoRD9bMF06W10pO2lmKFIuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxSLnRleHQoRSkuYXR0cigiY2xhc3MiLGUpLFIuZXhpdCgpLnJlbW92ZSgpLCFEKXJldHVybiBUO2Z1bmN0aW9uIEYodCl7cy5zeW5jT3JBc3luYyhbQixOXSx0KX1mdW5jdGlvbiBCKGUpe3ZhciByO3JldHVybiF3JiZ6JiYodz17fSksdz8ocj0iIix3LnJvdGF0ZSYmKHIrPSJyb3RhdGUoIitbdy5yb3RhdGUsXy54LF8ueV0rIikiKSwody5vZmZzZXR8fHopJiYocis9bCgwLCh3Lm9mZnNldHx8MCktKHp8fDApKSkpOnI9bnVsbCxlLmF0dHIoInRyYW5zZm9ybSIsciksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjpDLCJmb250LXNpemUiOm4ucm91bmQoUCwyKSsicHgiLGZpbGw6dS5yZ2IoSSksb3BhY2l0eTpBKnUub3BhY2l0eShJKSwiZm9udC13ZWlnaHQiOmEuZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gTih0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZihiJiZiLnNlbGVjdGlvbiYmYi5zaWRlJiZFKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9cFtiLnNpZGVdLGE9ImxlZnQiPT09Yi5zaWRlfHwidG9wIj09PWIuc2lkZT8tMToxLG89aShiLnBhZCk/Yi5wYWQ6Mix1PWMuYkJveChlLm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0Omsud2lkdGgsYm90dG9tOmsuaGVpZ2h0fSxoPWIubWF4U2hpZnR8fGEqKGZbYi5zaWRlXS11W2Iuc2lkZV0pLGQ9MDtpZihoPDApZD1oO2Vsc2V7dmFyIG09Yi5vZmZzZXRMZWZ0fHwwLGc9Yi5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1tLHUucmlnaHQtPW0sdS50b3AtPWcsdS5ib3R0b20tPWcsYi5zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1jLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxvKSYmKGQ9TWF0aC5tYXgoZCxhKih0W2Iuc2lkZV0tdVtyXSkrbykpfSkpLGQ9TWF0aC5taW4oaCxkKX1pZihkPjB8fGg8MCl7dmFyIHY9e2xlZnQ6Wy1kLDBdLHJpZ2h0OltkLDBdLHRvcDpbMCwtZF0sYm90dG9tOlswLGRdfVtiLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIixsKHZbMF0sdlsxXSkpfX19cmV0dXJuIFIuY2FsbChGKSxPJiYoRT9SLm9uKCIub3BhY2l0eSIsbnVsbCk6KEE9MCxNPSEwLFIudGV4dCh5KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLlNIT1dfUExBQ0VIT0xERVIpLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpKSxSLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx2LGUseCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdixlKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoRil9KSkub24oImlucHV0IiwoZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChmLnBvc2l0aW9uVGV4dCxfLngsXy55KX0pKSksUi5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsTSksVH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NDczLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2NvbG9yIjozNjEsIi4uL2RyYXdpbmciOjM4MywiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGFyZ3MyOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo2MTMsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MH1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJhcmdzMiIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0NCwiLi9hdHRyaWJ1dGVzIjo0NjAsIi4vY29uc3RhbnRzIjo0NjF9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuL3Njcm9sbGJveCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpPT09ZS5faW5kZXh9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMpe2UuYWN0aXZlPW8sYyh0LmxheW91dCxmLm5hbWUsZSkuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbyksImJ1dHRvbnMiPT09ZS50eXBlP3YodCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoaS5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsIi0xIiksZyh0LG4saSxhLGUpLHN8fHYodCxuLGksYSxlKSl9ZnVuY3Rpb24gZyh0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsImciLGYuaGVhZGVyQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxmLmJsYW5rSGVhZGVyT3B0cyxoPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKE0saSxoLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaGVhZGVyQXJyb3dDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoZi5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkpLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1mLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitmLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLHYodCxlLHIsbixpKX0pKSxhLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2EuY2FsbCh3KX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7YS5jYWxsKFQsaSl9KSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIHYodCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpfShyKSYmImJ1dHRvbnMiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPSJkcm9wZG93biI9PT1vLnR5cGU/Zi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpmLmJ1dHRvbkNsYXNzTmFtZSx1PXIuc2VsZWN0QWxsKCJnLiIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGg9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTsiZHJvcGRvd24iPT09by50eXBlPyhoLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIikscC50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5yZW1vdmUoKSk6cC5yZW1vdmUoKTt2YXIgZD0wLGc9MCx2PW8uX2RpbXMseD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7ImRyb3Bkb3duIj09PW8udHlwZSYmKHg/Zz12LmhlYWRlckhlaWdodCtmLmdhcEJ1dHRvbkhlYWRlcjpkPXYuaGVhZGVyV2lkdGgrZi5nYXBCdXR0b25IZWFkZXIpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJ1cCI9PT1vLmRpcmVjdGlvbiYmKGc9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLXYub3BlbkhlaWdodCksImRyb3Bkb3duIj09PW8udHlwZSYmImxlZnQiPT09by5kaXJlY3Rpb24mJihkPS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi12Lm9wZW5XaWR0aCk7dmFyIGI9e3g6di5seCtkK28ucGFkLmwseTp2Lmx5K2crby5wYWQudCx5UGFkOmYuZ2FwQnV0dG9uLHhQYWQ6Zi5nYXBCdXR0b24saW5kZXg6MH0saz17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoTSxvLGIpLGMub24oImNsaWNrIiwoZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChzLmV4ZWN1dGUmJihzLmFyZ3MyJiZvLmFjdGl2ZT09PWw/KG0odCxvLDAsZSxyLGEsLTEpLGkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MyKSk6KG0odCxvLDAsZSxyLGEsbCksaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncykpKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pKSxjLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2MuY2FsbCh3KX0pKSxjLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Yy5jYWxsKFQsbyksdS5jYWxsKF8sbyl9KSl9KSksdS5jYWxsKF8sbykseD8oay53PU1hdGgubWF4KHYub3BlbldpZHRoLHYuaGVhZGVyV2lkdGgpLGsuaD1iLnktay50KTooay53PWIueC1rLmwsay5oPU1hdGgubWF4KHYub3BlbkhlaWdodCx2LmhlYWRlckhlaWdodCkpLGsuZGlyZWN0aW9uPW8uZGlyZWN0aW9uLGEmJih1LnNpemUoKT9mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9aS5kaXJlY3Rpb24sdT0idXAiPT09Y3x8ImRvd24iPT09YyxoPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9aC5oZWlnaHRzW2xdK2YuZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1oLndpZHRoc1tsXStmLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKTtuLnZiYXImJm4udmJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpfSgwLDAsMCxhLG8sayk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSkpO3ImJnQudmJhci50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuaXRlbVJlY3RDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6Zi5yeCxyeTpmLnJ5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5pdGVtVGV4dENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KX0pKSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Ll9tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSxjKSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZi5hY3RpdmVDb2xvcil9KSl9ZnVuY3Rpb24gdyh0KXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuaG92ZXJDb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShzLmZpbHRlclZpc2libGUoZS5idXR0b25zKSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO2EuZWFjaCgoZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGg9cy5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHA9aC5ub2RlKCkmJm8uYkJveChoLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2YudGV4dFBhZFgsZi5taW5XaWR0aCksbT1lLmZvbnQuc2l6ZSp1LGc9bC5saW5lQ291bnQoaCksdj1NYXRoLm1heChtKmcsZi5taW5IZWlnaHQpK2YudGV4dE9mZnNldFk7dj1NYXRoLmNlaWwodiksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09dixyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLHYpLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPXYrZi5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz12K2YuZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2YuZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2YuZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCx2KSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSksYz9yLnRvdGFsSGVpZ2h0LT1mLmdhcEJ1dHRvbjpyLnRvdGFsV2lkdGgtPWYuZ2FwQnV0dG9uLHIuaGVhZGVyV2lkdGg9ci53aWR0aDErZi5hcnJvd1BhZFgsci5oZWFkZXJIZWlnaHQ9ci5oZWlnaHQxLCJkcm9wZG93biI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9Zi5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWYuYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBoPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgbT0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09aCxtPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihyLmx4LT1oLzIsbT0iY2VudGVyIik7dmFyIGc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsZz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKHIubHktPXAvMixnPSJtaWRkbGUiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxBKGUpLHt4OmUueCx5OmUueSxsOmgqKHtyaWdodDoxLGNlbnRlcjouNX1bbV18fDApLHI6aCooe2xlZnQ6MSxjZW50ZXI6LjV9W21dfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W2ddfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W2ddfHwwKX0pfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBNKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoIi4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHM9ZS5ib3JkZXJ3aWR0aCxjPXIuaW5kZXgsaD1lLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQscytyLngscytyLnkpO3ZhciBwPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9oLmhlaWdodHNbY106aC5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/aC53aWR0aDE6aC53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIG09ZS5mb250LnNpemUqdSxnPShsLmxpbmVDb3VudChhKS0xKSptLzI7bC5wb3NpdGlvblRleHQoYSxmLnRleHRPZmZzZXRYLGQvMi1nK2YudGV4dE9mZnNldFkpLHA/ci55Kz1oLmhlaWdodHNbY10rci55UGFkOnIueCs9aC53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsZXx8Ii0xIikuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtmLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LEEoZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksby5leGl0KCkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGYuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciB5PXJbdV07ayh0LHkpfXZhciB4PSJ1cGRhdGVtZW51cyIrZS5fdWlkLGI9bmV3IGgodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkpLnJlbW92ZSgpLGwuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT0iZHJvcGRvd24iPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLChmdW5jdGlvbihuKXttKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSksImRyb3Bkb3duIj09PWUudHlwZT8oZyh0LHIsYyxiLGUpLGQoYyxlKSYmdih0LHIsYyxiLGUpKTp2KHQscixudWxsLG51bGwsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NjYsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4LCIuLi8uLi9wbG90cy9wbG90cyI6NjE0LCIuLi9jb2xvciI6MzYxLCIuLi9kcmF3aW5nIjozODMsIi4vY29uc3RhbnRzIjo0NjEsIi4vc2Nyb2xsYm94Ijo0NjUsIkBwbG90bHkvZDMiOjU4fV0sNDY0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzQ1OF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vYXR0cmlidXRlcyI6NDYwLCIuL2NvbnN0YW50cyI6NDYxLCIuL2RlZmF1bHRzIjo0NjIsIi4vZHJhdyI6NDYzLGR1cDo0NTh9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXM7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYm94LWJnIikuZGF0YShbMF0pLHRoaXMuYmcuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkub24oIndoZWVsIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYm94LWJnIiwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cih7b3BhY2l0eTowLHg6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0pfXMuYmFyV2lkdGg9MixzLmJhckxlbmd0aD0yMCxzLmJhclJhZGl1cz0yLHMuYmFyUGFkPTEscy5iYXJDb2xvcj0iIzgwOEJBNCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxmLGgscCxkPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyxnPXRoaXMucG9zaXRpb24udCx2PXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9ImRvd24iPT09eSxiPSJsZWZ0Ij09PXksXz0idXAiPT09eSx3PW0sVD12O3h8fGJ8fCJyaWdodCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249ImRvd24iLHg9ITApLHh8fF8/KGY9KHU9ZCkrdyx4PyhoPWcsVD0ocD1NYXRoLm1pbihoK1QsYykpLWgpOlQ9KHA9ZytUKS0oaD1NYXRoLm1heChwLVQsMCkpKToocD0oaD1nKStULGI/dz0oZj1kK3cpLSh1PU1hdGgubWF4KGYtdywwKSk6KHU9ZCx3PShmPU1hdGgubWluKHUrdyxsKSktdSkpLHRoaXMuX2JveD17bDp1LHQ6aCx3OncsaDpUfTt2YXIgaz1tPncsQT1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLE09cy5iYXJXaWR0aCsyKnMuYmFyUGFkLFM9ZCxFPWcrdjtFK00+YyYmKEU9Yy1NKTt2YXIgTD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWwiKS5kYXRhKGs/WzBdOltdKTtMLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEwuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItaG9yaXpvbnRhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLGs/KHRoaXMuaGJhcj1MLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6QSxoZWlnaHQ6TX0pLHRoaXMuX2hiYXJYTWluPVMrQS8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1BKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBDPXY+VCxQPXMuYmFyV2lkdGgrMipzLmJhclBhZCxJPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTz1kK20sej1nO08rUD5sJiYoTz1sLVApO3ZhciBEPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItdmVydGljYWwiKS5kYXRhKEM/WzBdOltdKTtELmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItdmVydGljYWwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxDPyh0aGlzLnZiYXI9RC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4Ok8seTp6LHdpZHRoOlAsaGVpZ2h0Okl9KSx0aGlzLl92YmFyWU1pbj16K0kvMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PVQtSSk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEY9dS0uNSxCPUM/ZitQKy41OmYrLjUsTj1oLS41LGo9az9wK00rLjU6cCsuNSxVPW8uX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitSKS5kYXRhKGt8fEM/WzBdOltdKTtpZihVLmV4aXQoKS5yZW1vdmUoKSxVLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixSKS5hcHBlbmQoInJlY3QiKSxrfHxDPyh0aGlzLl9jbGlwUmVjdD1VLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6TWF0aC5mbG9vcihGKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEIpLU1hdGguZmxvb3IoRiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUix0aGlzLmdkKSx0aGlzLmJnLmF0dHIoe3g6ZCx5Omcsd2lkdGg6bSxoZWlnaHQ6dn0pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksa3x8Qyl7dmFyIFY9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFYpO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxuLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7ayYmdGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKSxDJiZ0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKEgpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksdGhpcy5oYmFyJiYodGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY29sb3IiOjM2MSwiLi4vZHJhd2luZyI6MzgzLCJAcGxvdGx5L2QzIjo1OH1dLDQ2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZST01fQkw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LEZST01fVEw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MSxtaWRkbGU6LjUsdG9wOjB9LEZST01fQlI6e2xlZnQ6MSxjZW50ZXI6LjUscmlnaHQ6MCxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LExJTkVfU1BBQ0lORzoxLjMsQ0FQX1NISUZUOi43LE1JRF9TSElGVDouMzUsT1BQT1NJVEVfU0lERTp7bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifX19LHt9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtheGlzUmVmRGVzY3JpcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVyblsiSWYgc2V0IHRvIGEiLHQsImF4aXMgaWQgKGUuZy4gKiIrdCsiKiBvciIsIioiK3QrIjIqKSwgdGhlIGAiK3QrImAgcG9zaXRpb24gcmVmZXJzIHRvIGEiLHQsImNvb3JkaW5hdGUuIElmIHNldCB0byAqcGFwZXIqLCB0aGUgYCIrdCsiYCIsInBvc2l0aW9uIHJlZmVycyB0byB0aGUgZGlzdGFuY2UgZnJvbSB0aGUiLGUsIm9mIHRoZSBwbG90dGluZyIsImFyZWEgaW4gbm9ybWFsaXplZCBjb29yZGluYXRlcyB3aGVyZSAqMCogKCoxKikgY29ycmVzcG9uZHMgdG8gdGhlIixlLCIoIityKyIpLiBJZiBzZXQgdG8gYSIsdCwiYXhpcyBJRCBmb2xsb3dlZCBieSIsIipkb21haW4qIChzZXBhcmF0ZWQgYnkgYSBzcGFjZSksIHRoZSBwb3NpdGlvbiBiZWhhdmVzIGxpa2UgZm9yIiwiKnBhcGVyKiwgYnV0IHJlZmVycyB0byB0aGUgZGlzdGFuY2UgaW4gZnJhY3Rpb25zIG9mIHRoZSBkb21haW4iLCJsZW5ndGggZnJvbSB0aGUiLGUsIm9mIHRoZSBkb21haW4gb2YgdGhhdCBheGlzOiBlLmcuLCIsIioiK3QrIjIgZG9tYWluKiByZWZlcnMgdG8gdGhlIGRvbWFpbiBvZiB0aGUgc2Vjb25kIix0LCIgYXhpcyBhbmQgYSIsdCwicG9zaXRpb24gb2YgMC41IHJlZmVycyB0byB0aGUiLCJwb2ludCBiZXR3ZWVuIHRoZSIsZSwiYW5kIHRoZSIsciwib2YgdGhlIGRvbWFpbiBvZiB0aGUiLCJzZWNvbmQiLHQsImF4aXMuIl0uam9pbigiICIpfX19LHt9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtJTkNSRUFTSU5HOntDT0xPUjoiIzNEOTk3MCIsU1lNQk9MOiJcdTI1YjIifSxERUNSRUFTSU5HOntDT0xPUjoiI0ZGNDEzNiIsU1lNQk9MOiJcdTI1YmMifX19LHt9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWZvcm1hdC90cmVlL3YxLjQuNSNkMy1mb3JtYXQiLERBVEVfRk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy10aW1lLWZvcm1hdC90cmVlL3YyLjIuMyNsb2NhbGVfZm9ybWF0In19LHt9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbIj0iLCIhPSIsIjwiLCI+PSIsIj4iLCI8PSJdLENPTVBBUklTT05fT1BTMjpbIj0iLCI8IiwiPj0iLCI+IiwiPD0iXSxJTlRFUlZBTF9PUFM6WyJbXSIsIigpIiwiWykiLCIoXSIsIl1bIiwiKSgiLCJdKCIsIilbIl0sU0VUX09QUzpbInt9IiwifXsiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7Ij0iOiI9IiwiPCI6IjwiLCI8PSI6IjwiLCI+IjoiPiIsIj49IjoiPiIsIltdIjoiW10iLCIoKSI6IltdIiwiWykiOiJbXSIsIihdIjoiW10iLCJdWyI6Il1bIiwiKSgiOiJdWyIsIl0oIjoiXVsiLCIpWyI6Il1bIn19fSx7fV0sNDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjaXJjbGU6Ilx1MjVjZiIsImNpcmNsZS1vcGVuIjoiXHUyNWNiIixzcXVhcmU6Ilx1MjVhMCIsInNxdWFyZS1vcGVuIjoiXHUyNWExIixkaWFtb25kOiJcdTI1YzYiLCJkaWFtb25kLW9wZW4iOiJcdTI1YzciLGNyb3NzOiIrIix4OiJcdTI3NGMifX0se31dLDQ3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERFU0VMRUNURElNOi4yfX0se31dLDQ3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JBRE5VTTp2b2lkIDAsRlBfU0FGRToxZS00Kk51bWJlci5NQVhfVkFMVUUsT05FTUFYWUVBUjozMTYyMjRlNSxPTkVBVkdZRUFSOjMxNTU3NmU1LE9ORU1JTllFQVI6MzE1MzZlNixPTkVNQVhRVUFSVEVSOjc5NDg4ZTUsT05FQVZHUVVBUlRFUjo3ODg5NGU1LE9ORU1JTlFVQVJURVI6NzY4OTZlNSxPTkVNQVhNT05USDoyNjc4NGU1LE9ORUFWR01PTlRIOjI2Mjk4ZTUsT05FTUlOTU9OVEg6MjQxOTJlNSxPTkVXRUVLOjYwNDhlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6Ljk5OTk5OSxMT0dfQ0xJUDoxMCxNSU5VU19TSUdOOiJcdTIyMTIifX0se31dLDQ3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsci5zdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyLnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZywieG1sbnM6eGxpbmsiOnIueGxpbmt9fSx7fV0sNDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj10KCIuL3ZlcnNpb24iKS52ZXJzaW9uLHQoIm5hdGl2ZS1wcm9taXNlLW9ubHkiKSx0KCIuLi9idWlsZC9wbG90Y3NzIik7Zm9yKHZhciBuPXQoIi4vcmVnaXN0cnkiKSxpPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixhPXQoIi4vcGxvdF9hcGkiKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiXyIhPT1sLmNoYXJBdCgwKSYmKHJbbF09YVtsXSksaSh7bW9kdWxlVHlwZToiYXBpTWV0aG9kIixuYW1lOmwsZm46YVtsXX0pfWkodCgiLi90cmFjZXMvc2NhdHRlciIpKSxpKFt0KCIuL2NvbXBvbmVudHMvbGVnZW5kIiksdCgiLi9jb21wb25lbnRzL2Z4IiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiKSx0KCIuL2NvbXBvbmVudHMvc2hhcGVzIiksdCgiLi9jb21wb25lbnRzL2ltYWdlcyIpLHQoIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyIpLHQoIi4vY29tcG9uZW50cy9zbGlkZXJzIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiKSx0KCIuL2NvbXBvbmVudHMvZ3JpZCIpLHQoIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSx0KCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHQoIi4vY29tcG9uZW50cy9jb2xvcmJhciIpLHQoIi4vY29tcG9uZW50cy9tb2RlYmFyIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSx3aW5kb3cuUGxvdGx5TG9jYWxlcyYmQXJyYXkuaXNBcnJheSh3aW5kb3cuUGxvdGx5TG9jYWxlcykmJihpKHdpbmRvdy5QbG90bHlMb2NhbGVzKSxkZWxldGUgd2luZG93LlBsb3RseUxvY2FsZXMpLHIuSWNvbnM9dCgiLi9mb250cy9wbG90aWNvbiIpO3ZhciBjPXQoIi4vY29tcG9uZW50cy9meCIpLHU9dCgiLi9wbG90cy9wbG90cyIpO3IuUGxvdHM9e3Jlc2l6ZTp1LnJlc2l6ZSxncmFwaEpzb246dS5ncmFwaEpzb24sc2VuZERhdGFUb0Nsb3VkOnUuc2VuZERhdGFUb0Nsb3VkfSxyLkZ4PXtob3ZlcjpjLmhvdmVyLHVuaG92ZXI6Yy51bmhvdmVyLGxvbmVIb3ZlcjpjLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpjLmxvbmVVbmhvdmVyfSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6MzUyLCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6MzU3LCIuL2NvbXBvbmVudHMvY29sb3JiYXIiOjM2NywiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi9jb21wb25lbnRzL2Vycm9yYmFycyI6Mzg5LCIuL2NvbXBvbmVudHMvZngiOjQwMSwiLi9jb21wb25lbnRzL2dyaWQiOjQwNSwiLi9jb21wb25lbnRzL2ltYWdlcyI6NDEwLCIuL2NvbXBvbmVudHMvbGVnZW5kIjo0MTgsIi4vY29tcG9uZW50cy9tb2RlYmFyIjo0MjQsIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIjo0MzIsIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciI6NDM5LCIuL2NvbXBvbmVudHMvc2hhcGVzIjo0NTMsIi4vY29tcG9uZW50cy9zbGlkZXJzIjo0NTgsIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyI6NDY0LCIuL2ZvbnRzL3Bsb3RpY29uIjo0NzcsIi4vbG9jYWxlLWVuIjo1MjksIi4vbG9jYWxlLWVuLXVzIjo1MjgsIi4vcGxvdF9hcGkiOjUzMywiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NTM3LCIuL3Bsb3RzL3Bsb3RzIjo2MTQsIi4vcmVnaXN0cnkiOjYzMywiLi9zbmFwc2hvdCI6NjM4LCIuL3RyYWNlcy9zY2F0dGVyIjo5MzQsIi4vdmVyc2lvbiI6MTExOCwibmF0aXZlLXByb21pc2Utb25seSI6MjQwfV0sNDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dW5kbzp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtODU3IDM1MHEwLTg3LTM0LTE2NnQtOTEtMTM3LTEzNy05Mi0xNjYtMzRxLTk2IDAtMTgzIDQxdC0xNDcgMTE0cS00IDYtNCAxM3Q1IDExbDc2IDc3cTYgNSAxNCA1IDktMSAxMy03IDQxLTUzIDEwMC04MnQxMjYtMjlxNTggMCAxMTAgMjN0OTIgNjEgNjEgOTEgMjIgMTExLTIyIDExMS02MSA5MS05MiA2MS0xMTAgMjNxLTU1IDAtMTA1LTIwdC05MC01N2w3Ny03N3ExNy0xNiA4LTM4LTEwLTIzLTMzLTIzaC0yNTBxLTE1IDAtMjUgMTF0LTExIDI1djI1MHEwIDI0IDIyIDMzIDIyIDEwIDM5LThsNzItNzJxNjAgNTcgMTM3IDg4dDE1OSAzMXE4NyAwIDE2Ni0zNHQxMzctOTIgOTEtMTM3IDM0LTE2NnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGhvbWU6e3dpZHRoOjkyOC42LGhlaWdodDoxZTMscGF0aDoibTc4NiAyOTZ2LTI2N3EwLTE1LTExLTI2dC0yNS0xMGgtMjE0djIxNGgtMTQzdi0yMTRoLTIxNHEtMTUgMC0yNSAxMHQtMTEgMjZ2MjY3cTAgMSAwIDJ0MCAybDMyMSAyNjQgMzIxLTI2NHExLTEgMS00eiBtMTI0IDM5bC0zNC00MXEtNS01LTEyLTZoLTJxLTcgMC0xMiAzbC0zODYgMzIyLTM4Ni0zMjJxLTctNC0xMy00LTcgMi0xMiA3bC0zNSA0MXEtNCA1LTMgMTN0NiAxMmw0MDEgMzM0cTE4IDE1IDQyIDE1dDQzLTE1bDEzNi0xMTR2MTA5cTAgOCA1IDEzdDEzIDVoMTA3cTggMCAxMy01dDUtMTN2LTIyN2wxMjItMTAycTUtNSA2LTEydC00LTEzeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sImNhbWVyYS1yZXRybyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21ib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scGFuOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMTAwMCAzNTBsLTE4NyAxODggMC0xMjUtMjUwIDAgMCAyNTAgMTI1IDAtMTg4IDE4Ny0xODctMTg3IDEyNSAwIDAtMjUwLTI1MCAwIDAgMTI1LTE4OC0xODggMTg2LTE4NyAwIDEyNSAyNTIgMCAwLTI1MC0xMjUgMCAxODctMTg4IDE4OCAxODgtMTI1IDAgMCAyNTAgMjUwIDAgMC0xMjYgMTg3IDE4OHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fcGx1czp7d2lkdGg6ODc1LGhlaWdodDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tX21pbnVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTI1MCA4NTBsLTE4NyAwLTYzIDAgMC02MiAwLTE4OCA2MyAwIDAgMTg4IDE4NyAwIDAgNjJ6IG02ODggMGwtMTg4IDAgMC02MiAxODggMCAwLTE4OCA2MiAwIDAgMTg4IDAgNjItNjIgMHogbS04NzUtOTM4bDAgMTg4LTYzIDAgMC0xODggMC02MiA2MyAwIDE4NyAwIDAgNjItMTg3IDB6IG04NzUgMTg4bDAtMTg4LTE4OCAwIDAtNjIgMTg4IDAgNjIgMCAwIDYyIDAgMTg4LTYyIDB6IG0tMTI1IDE4OGwtMSAwLTkzLTk0LTE1NiAxNTYgMTU2IDE1NiA5Mi05MyAyIDAgMCAyNTAtMjUwIDAgMC0yIDkzLTkyLTE1Ni0xNTYtMTU2IDE1NiA5NCA5MiAwIDItMjUwIDAgMC0yNTAgMCAwIDkzIDkzIDE1Ny0xNTYtMTU3LTE1Ni05MyA5NCAwIDAgMC0yNTAgMjUwIDAgMCAwLTk0IDkzIDE1NiAxNTcgMTU2LTE1Ny05My05MyAwIDAgMjUwIDAgMCAyNTB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx0b29sdGlwX2Jhc2ljOnt3aWR0aDoxNTAwLGhlaWdodDoxZTMscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfY29tcGFyZTp7d2lkdGg6MTEyNSxoZWlnaHQ6MWUzLHBhdGg6Im0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLGhlaWdodDoxZTMscGF0aDoibTAtMTBoMTgydi0xNDBoLTE4MnYxNDB6IG0yMjggMTQ2aDE4M3YtMjg2aC0xODN2Mjg2eiBtMjI1IDcxNGgxODJ2LTEwMDBoLTE4MnYxMDAweiBtMjI1LTI4NWgxODJ2LTcxNWgtMTgydjcxNXogbTIyNSAxNDJoMTgzdi04NTdoLTE4M3Y4NTd6IG0yMzEtNDI4aDE4MnYtNDI5aC0xODJ2NDI5eiBtMjI1LTI5MWgxODN2LTEzOGgtMTgzdjEzOHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCJ6LWF4aXMiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCIzZF9yb3RhdGUiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTIyIDY2MGMtNSA0LTkgNy0xNCAxMS0zNTkgMjYzLTU4MC0zMS01ODAtMzFsLTEwMiAyOCA1OC00MDBjMCAxIDEgMSAyIDIgMTE4IDEwOCAzNTEgMjQ5IDM1MSAyNDlzLTYyIDI3LTEwMCA0MmM4OCA4MyAyMjIgMTgzIDM0NyAxMjIgMTYtOCAzMC0xNyA0NC0yNy0yIDEtNCAyLTYgNHogbTM2LTMyOWMwIDAgNjQgMjI5LTg4IDI5Ni02MiAyNy0xMjQgMTQtMTc1LTExIDE1Ny03OCAyMjUtMjA4IDI0OS0yNjYgOC0xOSAxMS0zMSAxMS0zMSAyIDUgNiAxNSAxMSAzMi01LTEzLTgtMjAtOC0yMHogbS03NzUtMjM5YzcwLTMxIDExNy01MCAxOTgtMzItMTIxIDgwLTE5OSAzNDYtMTk5IDM0NmwtOTYtMTUtNTgtMTJjMCAwIDU1LTIyNiAxNTUtMjg3eiBtNjAzIDEzM2wtMzE3LTEzOWMwIDAgNC00IDE5LTE0IDctNSAyNC0xNSAyNC0xNXMtMTc3LTE0Ny0zODkgNGMyMzUtMjg3IDUzNi0xMTIgNTM2LTExMmwzMS0yMiAxMDAgMjk5LTQtMXogbS0yOTgtMTUzYzYtNCAxNC05IDI0LTE1IDAgMC0xNyAxMC0yNCAxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGNhbWVyYTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUwMCA0NTBjLTgzIDAtMTUwLTY3LTE1MC0xNTAgMC04MyA2Ny0xNTAgMTUwLTE1MCA4MyAwIDE1MCA2NyAxNTAgMTUwIDAgODMtNjcgMTUwLTE1MCAxNTB6IG00MDAgMTUwaC0xMjBjLTE2IDAtMzQgMTMtMzkgMjlsLTMxIDkzYy02IDE1LTIzIDI4LTQwIDI4aC0zNDBjLTE2IDAtMzQtMTMtMzktMjhsLTMxLTk0Yy02LTE1LTIzLTI4LTQwLTI4aC0xMjBjLTU1IDAtMTAwLTQ1LTEwMC0xMDB2LTQ1MGMwLTU1IDQ1LTEwMCAxMDAtMTAwaDgwMGM1NSAwIDEwMCA0NSAxMDAgMTAwdjQ1MGMwIDU1LTQ1IDEwMC0xMDAgMTAweiBtLTQwMC01NTBjLTEzOCAwLTI1MCAxMTItMjUwIDI1MCAwIDEzOCAxMTIgMjUwIDI1MCAyNTAgMTM4IDAgMjUwLTExMiAyNTAtMjUwIDAtMTM4LTExMi0yNTAtMjUwLTI1MHogbTM2NSAzODBjLTE5IDAtMzUgMTYtMzUgMzUgMCAxOSAxNiAzNSAzNSAzNSAxOSAwIDM1LTE2IDM1LTM1IDAtMTktMTYtMzUtMzUtMzV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxtb3ZpZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scXVlc3Rpb246e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTUwMCA4MnYxMDdxMCA4LTUgMTN0LTEzIDVoLTEwN3EtOCAwLTEzLTV0LTUtMTN2LTEwN3EwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzeiBtMTQzIDM3NXEwIDQ5LTMxIDkxdC03NyA2NS05NSAyM3EtMTM2IDAtMjA3LTExOS05LTE0IDQtMjRsNzQtNTVxNC00IDEwLTQgOSAwIDE0IDcgMzAgMzggNDggNTEgMTkgMTQgNDggMTQgMjcgMCA0OC0xNXQyMS0zM3EwLTIxLTExLTM0dC0zOC0yNXEtMzUtMTYtNjUtNDh0LTI5LTcwdi0yMHEwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzcTAgMTAgMTIgMjd0MzAgMjhxMTggMTAgMjggMTZ0MjUgMTkgMjUgMjcgMTYgMzQgNyA0NXogbTIxNC0xMDdxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01OC0yMTYgNTgtMTU1IDE1Ni01OCAyMTUgNTggMjE1IDE1NSAxNTYgMjE2IDU4IDIxNS01OCAxNTYtMTU2IDU3LTIxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRpc2s6e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTIxNC03aDQyOXYyMTRoLTQyOXYtMjE0eiBtNTAwIDBoNzJ2NTAwcTAgOC02IDIxdC0xMSAyMGwtMTU3IDE1NnEtNSA2LTE5IDEydC0yMiA1di0yMzJxMC0yMi0xNS0zOHQtMzgtMTZoLTMyMnEtMjIgMC0zNyAxNnQtMTYgMzh2MjMyaC03MnYtNzE0aDcydjIzMnEwIDIyIDE2IDM4dDM3IDE2aDQ2NXEyMiAwIDM4LTE2dDE1LTM4di0yMzJ6IG0tMjE0IDUxOHYxNzhxMCA4LTUgMTN0LTEzIDVoLTEwN3EtNyAwLTEzLTV0LTUtMTN2LTE3OHEwLTggNS0xM3QxMy01aDEwN3E3IDAgMTMgNXQ1IDEzeiBtMzU3LTE4di01MThxMC0yMi0xNS0zOHQtMzgtMTZoLTc1MHEtMjMgMC0zOCAxNnQtMTYgMzh2NzUwcTAgMjIgMTYgMzh0MzggMTZoNTE3cTIzIDAgNTAtMTJ0NDItMjZsMTU2LTE1N3ExNi0xNSAyNy00MnQxMS00OXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRyYXdvcGVucGF0aDp7d2lkdGg6NzAsaGVpZ2h0OjcwLHBhdGg6Ik0zMy4yMSw4NS42NWE3LjMxLDcuMzEsMCwwLDEtMi41OS0uNDhjLTguMTYtMy4xMS05LjI3LTE5LjgtOS44OC00MS4zLS4xLTMuNTgtLjE5LTYuNjgtLjM1LTktLjE1LTIuMS0uNjctMy40OC0xLjQzLTMuNzktMi4xMy0uODgtNy45MSwyLjMyLTEyLDUuODZMMywzMi4zOGMxLjg3LTEuNjQsMTEuNTUtOS42NiwxOC4yNy02LjksMi4xMy44Nyw0Ljc1LDMuMTQsNS4xNyw5LC4xNywyLjQzLjI2LDUuNTkuMzYsOS4yNWEyMjQuMTcsMjI0LjE3LDAsMCwwLDEuNSwyMy40YzEuNTQsMTAuNzYsNCwxMi4yMiw0LjQ4LDEyLjQuODQuMzIsMi43OS0uNDYsNS43Ni0zLjU5TDQzLDgwLjA3QzQxLjUzLDgxLjU3LDM3LjY4LDg1LjY0LDMzLjIxLDg1LjY1Wk03NC44MSw2OWExMS4zNCwxMS4zNCwwLDAsMCw2LjA5LTYuNzJMODcuMjYsNDQuNSw3NC43MiwzMiw1Ni45LDM4LjM1Yy0yLjM3Ljg2LTUuNTcsMy40Mi02LjYxLDZMMzguNjUsNzIuMTRsOC40Miw4LjQzWk01NSw0Ni4yN2E3LjkxLDcuOTEsMCwwLDEsMy42NC0zLjE3bDE0LjgtNS4zLDgsOEw3Ni4xMSw2MC42bC0uMDYuMTlhNi4zNyw2LjM3LDAsMCwxLTMsMy40M0w0OC4yNSw3NC41OSw0NC42Miw3MVptMTYuNTcsNy44MkE2LjksNi45LDAsMSwwLDY0LjY0LDYxLDYuOTEsNi45MSwwLDAsMCw3MS41NCw1NC4wOVptLTQuMDUsMGEyLjg1LDIuODUsMCwxLDEtMi44NS0yLjg1QTIuODYsMi44NiwwLDAsMSw2Ny40OSw1NC4wOVptLTQuMTMsNS4yMkw2MC41LDU2LjQ1LDQ0LjI2LDcyLjdsMi44NiwyLjg2Wk05Ny44MywzNS42Nyw4NC4xNCwyMmwtOC41Nyw4LjU3TDg5LjI2LDQ0LjI0Wm0tMTMuNjktOCw4LDgtMi44NSwyLjg1LTgtOFoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTE1IC0xNSkifSxkcmF3Y2xvc2VkcGF0aDp7d2lkdGg6OTAsaGVpZ2h0OjkwLHBhdGg6Ik04OC40MSwyMS4xMmEyNi41NiwyNi41NiwwLDAsMC0zNi4xOCwwbC0yLjA3LDItMi4wNy0yYTI2LjU3LDI2LjU3LDAsMCwwLTM2LjE4LDAsMjMuNzQsMjMuNzQsMCwwLDAsMCwzNC44TDQ4LDkwLjEyYTMuMjIsMy4yMiwwLDAsMCw0LjQyLDBsMzYtMzQuMjFhMjMuNzMsMjMuNzMsMCwwLDAsMC0zNC43OVpNODQsNTEuMjQsNTAuMTYsODMuMzUsMTYuMzUsNTEuMjVhMTcuMjgsMTcuMjgsMCwwLDEsMC0yNS40NywyMCwyMCwwLDAsMSwyNy4zLDBsNC4yOSw0LjA3YTMuMjMsMy4yMywwLDAsMCw0LjQ0LDBsNC4yOS00LjA3YTIwLDIwLDAsMCwxLDI3LjMsMCwxNy4yNywxNy4yNywwLDAsMSwwLDI1LjQ2Wk02Ni43Niw0Ny42OGgtMzN2Ni45MWgzM1pNNTMuMzUsMzVINDYuNDRWNjhoNi45MVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTUgLTUpIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOiJtMTAxOCA1MzhjLTM2IDIwNy0yOTAgMzM2LTU2OCAyODYtMjc3LTQ4LTQ3My0yNTYtNDM2LTQ2MyAxMC01NyAzNi0xMDggNzYtMTUxLTEzLTY2IDExLTEzNyA2OC0xODMgMzQtMjggNzUtNDEgMTE0LTQybC01NS03MCAwIDBjLTItMS0zLTItNC0zLTEwLTE0LTgtMzQgNS00NSAxNC0xMSAzNC04IDQ1IDQgMSAxIDIgMyAyIDVsMCAwIDExMyAxNDBjMTYgMTEgMzEgMjQgNDUgNDAgNCAzIDYgNyA4IDExIDQ4LTMgMTAwIDAgMTUxIDkgMjc4IDQ4IDQ3MyAyNTUgNDM2IDQ2MnogbS02MjQtMzc5Yy04MCAxNC0xNDkgNDgtMTk3IDk2IDQyIDQyIDEwOSA0NyAxNTYgOSAzMy0yNiA0Ny02NiA0MS0xMDV6IG0tMTg3LTc0Yy0xOSAxNi0zMyAzNy0zOSA2MCA1MC0zMiAxMDktNTUgMTc0LTY4LTQyLTI1LTk1LTI0LTEzNSA4eiBtMzYwIDc1Yy0zNC03LTY5LTktMTAyLTggOCA2Mi0xNiAxMjgtNjggMTcwLTczIDU5LTE3NSA1NC0yNDQtNS05IDIwLTE2IDQwLTIwIDYxLTI4IDE1OSAxMjEgMzE3IDMzMyAzNTRzNDA3LTYwIDQzNC0yMTdjMjgtMTU5LTEyMS0zMTgtMzMzLTM1NXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNlbGVjdGJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRyYXdsaW5lOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTYwLjY0LDYyLjNhMTEuMjksMTEuMjksMCwwLDAsNi4wOS02LjcybDYuMzUtMTcuNzJMNjAuNTQsMjUuMzFsLTE3LjgyLDYuNGMtMi4zNi44Ni01LjU3LDMuNDEtNi42LDZMMjQuNDgsNjUuNWw4LjQyLDguNDJaTTQwLjc5LDM5LjYzYTcuODksNy44OSwwLDAsMSwzLjY1LTMuMTdsMTQuNzktNS4zMSw4LDhMNjEuOTQsNTRsLS4wNi4xOWE2LjQ0LDYuNDQsMCwwLDEtMywzLjQzTDM0LjA3LDY4bC0zLjYyLTMuNjNabTE2LjU3LDcuODFhNi45LDYuOSwwLDEsMC02Ljg5LDYuOUE2LjksNi45LDAsMCwwLDU3LjM2LDQ3LjQ0Wm0tNCwwYTIuODYsMi44NiwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDUzLjMyLDQ3LjQ0Wm0tNC4xMyw1LjIyTDQ2LjMzLDQ5LjgsMzAuMDgsNjYuMDVsMi44NiwyLjg2Wk04My42NSwyOSw3MCwxNS4zNCw2MS40LDIzLjksNzUuMDksMzcuNTlaTTcwLDIxLjA2bDgsOC0yLjg0LDIuODUtOC04Wk04Nyw4MC40OUgxMC42N1Y4N0g4N1oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTE1IC0xNSkifSxkcmF3cmVjdDp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik03OCwyMlY3OUgyMVYyMkg3OG05LTlIMTJWODhIODdWMTNaTTY4LDQ2LjIySDMxVjU0SDY4Wk01MywzMkg0NS4yMlY2OUg1M1oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxkcmF3Y2lyY2xlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTUwLDg0LjcyQzI2Ljg0LDg0LjcyLDgsNjkuMjgsOCw1MC4zUzI2Ljg0LDE1Ljg3LDUwLDE1Ljg3LDkyLDMxLjMxLDkyLDUwLjMsNzMuMTYsODQuNzIsNTAsODQuNzJabTAtNjAuNTljLTE4LjYsMC0zMy43NCwxMS43NC0zMy43NCwyNi4xN1MzMS40LDc2LjQ2LDUwLDc2LjQ2LDgzLjc0LDY0LjcyLDgzLjc0LDUwLjMsNjguNiwyNC4xMyw1MCwyNC4xM1ptMTcuMTUsMjJoLTM0djcuMTFoMzRabS0xMy44LTEzSDQ2LjI0djM0aDcuMTFaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sZXJhc2VzaGFwZTp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik04Mi43Nyw3OEgzMS44NUw2LDQ5LjU3LDMxLjg1LDIxLjE0SDgyLjc3YTguNzIsOC43MiwwLDAsMSw4LjY1LDguNzdWNjkuMjRBOC43Miw4LjcyLDAsMCwxLDgyLjc3LDc4Wk0zNS40Niw2OS44NEg4Mi43N2EuNTcuNTcsMCwwLDAsLjQ5LS42VjI5LjkxYS41Ny41NywwLDAsMC0uNDktLjYxSDM1LjQ2TDE3LDQ5LjU3Wm0zMi42OC0zNC43LTI0LDI0LDUsNSwyNC0yNFptLTE5LC41My01LDUsMjQsMjQsNS01WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApIn0scGVuY2lsOnt3aWR0aDoxNzkyLGhlaWdodDoxNzkyLHBhdGg6Ik00OTEgMTUzNmw5MS05MS0yMzUtMjM1LTkxIDkxdjEwN2gxMjh2MTI4aDEwN3ptNTIzLTkyOHEwLTIyLTIyLTIyLTEwIDAtMTcgN2wtNTQyIDU0MnEtNyA3LTcgMTcgMCAyMiAyMiAyMiAxMCAwIDE3LTdsNTQyLTU0MnE3LTcgNy0xN3ptLTU0LTE5Mmw0MTYgNDE2LTgzMiA4MzJoLTQxNnYtNDE2em02ODMgOTZxMCA1My0zNyA5MGwtMTY2IDE2Ni00MTYtNDE2IDE2Ni0xNjVxMzYtMzggOTAtMzggNTMgMCA5MSAzOGwyMzUgMjM0cTM3IDM5IDM3IDkxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAwIDEpIn0sbmV3cGxvdGx5bG9nbzp7bmFtZToibmV3cGxvdGx5bG9nbyIsc3ZnOiI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMzZjRmNzU7fSAuY2xzLTIge2ZpbGw6ICM4MGNmYmU7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz4ifX19LHt9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pc0xlZnRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImxlZnQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueDw9MS8zfSxyLmlzQ2VudGVyQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJjZW50ZXIiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD4xLzMmJnQueDwyLzN9LHIuaXNSaWdodEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4icmlnaHQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD49Mi8zfSxyLmlzVG9wQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT49Mi8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9LHIuaXNCb3R0b21BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PD0xLzN9fSx7fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbW9kIiksaT1uLm1vZCxhPW4ubW9kSGFsZixvPU1hdGguUEkscz0yKm87ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKT5zLTFlLTE0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gYShlLXQscyl9ZnVuY3Rpb24gdSh0LGUpe2lmKGwoZSkpcmV0dXJuITA7dmFyIHIsbjtlWzBdPGVbMV0/KHI9ZVswXSxuPWVbMV0pOihyPWVbMV0sbj1lWzBdKSwocj1pKHIscykpPihuPWkobixzKSkmJihuKz1zKTt2YXIgYT1pKHQscyksbz1hK3M7cmV0dXJuIGE+PXImJmE8PW58fG8+PXImJm88PW59ZnVuY3Rpb24gZih0LGUscixuLGksYSxjKXtpPWl8fDAsYT1hfHwwO3ZhciB1LGYsaCxwLGQsbT1sKFtyLG5dKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkraSxhLXQqTWF0aC5zaW4oZSldfW0/KHU9MCxmPW8saD1zKTpyPG4/KHU9cixoPW4pOih1PW4saD1yKSx0PGU/KHA9dCxkPWUpOihwPWUsZD10KTt2YXIgdix5PU1hdGguYWJzKGgtdSk8PW8/MDoxO2Z1bmN0aW9uIHgodCxlLHIpe3JldHVybiJBIitbdCx0XSsiICIrWzAseSxyXSsiICIrZyh0LGUpfXJldHVybiBtP3Y9bnVsbD09PXA/Ik0iK2coZCx1KSt4KGQsZiwwKSt4KGQsaCwwKSsiWiI6Ik0iK2cocCx1KSt4KHAsZiwwKSt4KHAsaCwwKSsiWk0iK2coZCx1KSt4KGQsZiwxKSt4KGQsaCwxKSsiWiI6bnVsbD09PXA/KHY9Ik0iK2coZCx1KSt4KGQsaCwwKSxjJiYodis9IkwwLDBaIikpOnY9Ik0iK2cocCx1KSsiTCIrZyhkLHUpK3goZCxoLDApKyJMIitnKHAsaCkreChwLHUsMSkrIloiLHZ9ZS5leHBvcnRzPXtkZWcycmFkOmZ1bmN0aW9uKHQpe3JldHVybiB0LzE4MCpvfSxyYWQyZGVnOmZ1bmN0aW9uKHQpe3JldHVybiB0L28qMTgwfSxhbmdsZURlbHRhOmMsYW5nbGVEaXN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKGModCxlKSl9LGlzRnVsbENpcmNsZTpsLGlzQW5nbGVJbnNpZGVTZWN0b3I6dSxpc1B0SW5zaWRlU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiEhdShlLG4pJiYoclswXTxyWzFdPyhpPXJbMF0sYT1yWzFdKTooaT1yWzFdLGE9clswXSksdD49aSYmdDw9YSk7dmFyIGksYX0scGF0aEFyYzpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmKG51bGwsdCxlLHIsbixpLDApfSxwYXRoU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGYobnVsbCx0LGUscixuLGksMSl9LHBhdGhBbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gZih0LGUscixuLGksYSwxKX19fSx7Ii4vbW9kIjo1MDV9XSw0ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49QXJyYXkuaXNBcnJheSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlcjp7aXNWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxhPSJ1bmRlZmluZWQiPT10eXBlb2YgRGF0YVZpZXc/ZnVuY3Rpb24oKXt9OkRhdGFWaWV3O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQpfHxvKHQpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKHModCkpe2lmKHModFswXSkpe2Zvcih2YXIgbj1yLGk9MDtpPHQubGVuZ3RoO2krKyluPWUobix0W2ldLmxlbmd0aCk7cmV0dXJuIG59cmV0dXJuIHQubGVuZ3RofXJldHVybiAwfXIuaXNUeXBlZEFycmF5PW8sci5pc0FycmF5T3JUeXBlZEFycmF5PXMsci5pc0FycmF5MUQ9ZnVuY3Rpb24odCl7cmV0dXJuIXModFswXSl9LHIuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8KHQ9W10pLHQubGVuZ3RoPWUsdH0sci5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaSxhLG8scyxsLGM9W10sdT0hMCxmPTA7Zm9yKHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKShvPShpPWFyZ3VtZW50c1tyXSkubGVuZ3RoKSYmKGU/Yy5wdXNoKGkpOihlPWksYT1vKSxuKGkpP3Q9ITE6KHU9ITEsZj90IT09aS5jb25zdHJ1Y3RvciYmKHQ9ITEpOnQ9aS5jb25zdHJ1Y3RvciksZis9byk7aWYoIWYpcmV0dXJuW107aWYoIWMubGVuZ3RoKXJldHVybiBlO2lmKHUpcmV0dXJuIGUuY29uY2F0LmFwcGx5KGUsYyk7aWYodCl7Zm9yKChzPW5ldyB0KGYpKS5zZXQoZSkscj0wO3I8Yy5sZW5ndGg7cisrKWk9Y1tyXSxzLnNldChpLGEpLGErPWkubGVuZ3RoO3JldHVybiBzfWZvcihzPW5ldyBBcnJheShmKSxsPTA7bDxlLmxlbmd0aDtsKyspc1tsXT1lW2xdO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe2ZvcihpPWNbcl0sbD0wO2w8aS5sZW5ndGg7bCsrKXNbYStsXT1pW2xdO2ErPWx9cmV0dXJuIHN9LHIubWF4Um93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5tYXgsMCl9LHIubWluUm93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5taW4sMS8wKX19LHt9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT0vXlsnIiUsJCNccyddK3xbLCBdfFsnIiUsJCNccyddKyQvZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnJlcGxhY2UoYSwiIikpLG4odCk/TnVtYmVyKHQpOml9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9nbGNhbnZhcyYmZS5fZ2xjYW52YXMuc2l6ZSgpJiZlLl9nbGNhbnZhcy5lYWNoKChmdW5jdGlvbih0KXt0LnJlZ2wmJnQucmVnbC5jbGVhcih7Y29sb3I6ITAsZGVwdGg6ITB9KX0pKX19LHt9XSw0ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSxkZWxldGUgdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcil9fSx7fV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikscz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sYz10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLHU9dCgiLi9yZWdleCIpLmNvdW50ZXIsZj10KCIuL21vZCIpLm1vZEhhbGYsaD10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBwKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZoKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtoKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZigiLyI9PT1pLmNoYXJBdCgwKSYmIi8iPT09aS5jaGFyQXQoaS5sZW5ndGgtMSkpe2lmKG5ldyBSZWdFeHAoaS5zdWJzdHIoMSxpLmxlbmd0aC0yKSkudGVzdCh0KSlyZXR1cm4hMH1lbHNlIGlmKHQ9PT1yW25dKXJldHVybiEwfXJldHVybiExfX0sYm9vbGVhbjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyEwPT09dHx8ITE9PT10P2Uuc2V0KHQpOmUuc2V0KHIpfX0sbnVtYmVyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXshbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LGludGVnZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpe3QlMXx8IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxzdHJpbmc6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9Im51bWJlciI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmlzVmFsaWQoKX0pKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvLmdldCh0LHIpKX19LGFuZ2xlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ImF1dG8iPT09dD9lLnNldCgiYXV0byIpOm4odCk/ZS5zZXQoZigrdCwzNjApKTplLnNldChyKX19LHN1YnBsb3RpZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5yZWdleHx8dShyKTsic3RyaW5nIj09dHlwZW9mIHQmJmkudGVzdCh0KT9lLnNldCh0KTplLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdDtyZXR1cm4gdD09PXJ8fCJzdHJpbmciPT10eXBlb2YgdCYmISF1KHIpLnRlc3QodCl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKC0xPT09KG4uZXh0cmFzfHxbXSkuaW5kZXhPZih0KSl7Zm9yKHZhciBpPXQuc3BsaXQoIisiKSxhPTA7YTxpLmxlbmd0aDspe3ZhciBvPWlbYV07LTE9PT1uLmZsYWdzLmluZGV4T2Yobyl8fGkuaW5kZXhPZihvKTxhP2kuc3BsaWNlKGEsMSk6YSsrfWkubGVuZ3RoP2Uuc2V0KGkuam9pbigiKyIpKTplLnNldChyKX1lbHNlIGUuc2V0KHQpO2Vsc2UgZS5zZXQocil9fSxhbnk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT10P2Uuc2V0KHIpOmUuc2V0KHQpfX0saW5mb19hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLG4saSl7ZnVuY3Rpb24gYSh0LGUsbil7dmFyIGksYT17c2V0OmZ1bmN0aW9uKHQpe2k9dH19O3JldHVybiB2b2lkIDA9PT1uJiYobj1lLmRmbHQpLHIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKHQsYSxuLGUpLGl9dmFyIG89Mj09PWkuZGltZW5zaW9uc3x8IjEtMiI9PT1pLmRpbWVuc2lvbnMmJkFycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFswXSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHMsbCxjLHUsZixoLHA9aS5pdGVtcyxkPVtdLG09QXJyYXkuaXNBcnJheShwKSxnPW0mJm8mJkFycmF5LmlzQXJyYXkocFswXSksdj1vJiZtJiYhZyx5PW0mJiF2P3AubGVuZ3RoOnQubGVuZ3RoO2lmKG49QXJyYXkuaXNBcnJheShuKT9uOltdLG8pZm9yKHM9MDtzPHk7cysrKWZvcihkW3NdPVtdLGM9QXJyYXkuaXNBcnJheSh0W3NdKT90W3NdOltdLGY9dj9wLmxlbmd0aDptP3Bbc10ubGVuZ3RoOmMubGVuZ3RoLGw9MDtsPGY7bCsrKXU9dj9wW2xdOm0/cFtzXVtsXTpwLHZvaWQgMCE9PShoPWEoY1tsXSx1LChuW3NdfHxbXSlbbF0pKSYmKGRbc11bbF09aCk7ZWxzZSBmb3Iocz0wO3M8eTtzKyspdm9pZCAwIT09KGg9YSh0W3NdLG0/cFtzXTpwLG5bc10pKSYmKGRbc109aCk7ZS5zZXQoZCl9ZWxzZSBlLnNldChuKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciByPWUuaXRlbXMsbj1BcnJheS5pc0FycmF5KHIpLGk9Mj09PWUuZGltZW5zaW9ucztpZighZS5mcmVlTGVuZ3RoJiZ0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKGkpe2lmKCFBcnJheS5pc0FycmF5KHRbYV0pfHwhZS5mcmVlTGVuZ3RoJiZ0W2FdLmxlbmd0aCE9PXJbYV0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288dFthXS5sZW5ndGg7bysrKWlmKCFwKHRbYV1bb10sbj9yW2FdW29dOnIpKXJldHVybiExfWVsc2UgaWYoIXAodFthXSxuP3JbYV06cikpcmV0dXJuITE7cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1jKG4saSkuZ2V0KCkscz1jKHQsaSksbD1jKGUsaSksdT1zLmdldCgpLGY9ZS5fdGVtcGxhdGU7aWYodm9pZCAwPT09dSYmZiYmKHU9YyhmLGkpLmdldCgpLGY9MCksdm9pZCAwPT09YSYmKGE9by5kZmx0KSxvLmFycmF5T2smJmgodSkpcmV0dXJuIGwuc2V0KHUpLHU7dmFyIGQ9ci52YWxPYmplY3RNZXRhW28udmFsVHlwZV0uY29lcmNlRnVuY3Rpb247ZCh1LGwsYSxvKTt2YXIgbT1sLmdldCgpO3JldHVybiBmJiZtPT09YSYmIXAodSxvKSYmKGQodT1jKGYsaSkuZ2V0KCksbCxhLG8pLG09bC5nZXQoKSksbX0sci5jb2VyY2UyPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89Yyh0LGkpLHM9ci5jb2VyY2UodCxlLG4saSxhKSxsPW8uZ2V0KCk7cmV0dXJuIG51bGwhPWwmJnN9LHIuY29lcmNlRm9udD1mdW5jdGlvbih0LGUscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9dChlKyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPXQoZSsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj10KGUrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VQYXR0ZXJuPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQoZSsiLnNoYXBlIikpe3QoZSsiLnNvbGlkaXR5IiksdChlKyIuc2l6ZSIpO3ZhciBpPSJvdmVybGF5Ij09PXQoZSsiLmZpbGxtb2RlIik7aWYoIW4pe3ZhciBhPXQoZSsiLmJnY29sb3IiLGk/cjp2b2lkIDApO3QoZSsiLmZnY29sb3IiLGk/cy5jb250cmFzdChhKTpyKX10KGUrIi5mZ29wYWNpdHkiLGk/LjU6MSl9fSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbih0LGUsbil7dmFyIGksbz1lLl9tb2R1bGUuYXR0cmlidXRlcyxzPW8uaG92ZXJpbmZvP286YSxsPXMuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz0iYWxsIj09PWwuZGZsdD9sLmZsYWdzLnNsaWNlKCk6bC5kZmx0LnNwbGl0KCIrIik7Yy5zcGxpY2UoYy5pbmRleE9mKCJuYW1lIiksMSksaT1jLmpvaW4oIisiKX1yZXR1cm4gci5jb2VyY2UodCxlLHMsImhvdmVyaW5mbyIsaSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbih0LGUpe2lmKHQubWFya2VyKXt2YXIgcixuLGk9dC5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1pKWgoaSl8fHQuc2VsZWN0ZWR8fHQudW5zZWxlY3RlZHx8KHI9aSxuPWwqaSksZSgic2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLHIpLGUoInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLG4pfX0sci52YWxpZGF0ZT1wfSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6Mzc2LCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzMsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi9hcnJheSI6NDgwLCIuL21vZCI6NTA1LCIuL25lc3RlZF9wcm9wZXJ0eSI6NTA2LCIuL3JlZ2V4Ijo1MTUsImZhc3QtaXNudW1lcmljIjoxODUsdGlueWNvbG9yMjozMDd9XSw0ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoImQzLXRpbWUtZm9ybWF0IikudGltZUZvcm1hdCxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuL2xvZ2dlcnMiKSxsPXQoIi4vbW9kIikubW9kLGM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHU9Yy5CQUROVU0sZj1jLk9ORURBWSxoPWMuT05FSE9VUixwPWMuT05FTUlOLGQ9Yy5PTkVTRUMsbT1jLkVQT0NISkQsZz10KCIuLi9yZWdpc3RyeSIpLHY9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQseT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGQpKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQoOj9cZFxkKT8pPyk/KT8pPyk/XHMqJC9tLHg9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkaT8pKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQoOj9cZFxkKT8pPyk/KT8pPyk/XHMqJC9tLGI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO2Z1bmN0aW9uIF8odCl7cmV0dXJuIHQmJmcuY29tcG9uZW50c1JlZ2lzdHJ5LmNhbGVuZGFycyYmInN0cmluZyI9PXR5cGVvZiB0JiYiZ3JlZ29yaWFuIiE9PXR9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBTdHJpbmcodCtNYXRoLnBvdygxMCxlKSkuc3Vic3RyKDEpfXIuZGF0ZVRpY2swPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gXyh0KT9lP2cuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfU1VOREFZIilbdF06Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9USUNLIilbdF06ZT8iMjAwMC0wMS0wMiI6IjIwMDAtMDEtMDEifSh0LCEhZSk7aWYoZTwyKXJldHVybiBuO3ZhciBpPXIuZGF0ZVRpbWUybXMobix0KTtyZXR1cm4gaSs9ZiooZS0xKSxyLm1zMkRhdGVUaW1lKGksMCx0KX0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIF8odCk/Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkRGTFRSQU5HRSIpW3RdOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRUaW1lfSxyLmRhdGVUaW1lMm1zPWZ1bmN0aW9uKHQsZSl7aWYoci5pc0pTRGF0ZSh0KSl7dmFyIGE9dC5nZXRUaW1lem9uZU9mZnNldCgpKnAsbz0odC5nZXRVVENNaW51dGVzKCktdC5nZXRNaW51dGVzKCkpKnArKHQuZ2V0VVRDU2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKSpkKyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLXQuZ2V0TWlsbGlzZWNvbmRzKCkpO2lmKG8pe3ZhciBzPTMqcDthPWEtcy8yK2woby1hK3MvMixzKX1yZXR1cm4odD1OdW1iZXIodCktYSk+PW4mJnQ8PWk/dDp1fWlmKCJzdHJpbmciIT10eXBlb2YgdCYmIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiB1O3Q9U3RyaW5nKHQpO3ZhciBjPV8oZSksdj10LmNoYXJBdCgwKTshY3x8IkciIT09diYmImciIT09dnx8KHQ9dC5zdWJzdHIoMSksZT0iIik7dmFyIHc9YyYmImNoaW5lc2UiPT09ZS5zdWJzdHIoMCw3KSxUPXQubWF0Y2godz94OnkpO2lmKCFUKXJldHVybiB1O3ZhciBrPVRbMV0sQT1UWzNdfHwiMSIsTT1OdW1iZXIoVFs1XXx8MSksUz1OdW1iZXIoVFs3XXx8MCksRT1OdW1iZXIoVFs5XXx8MCksTD1OdW1iZXIoVFsxMV18fDApO2lmKGMpe2lmKDI9PT1rLmxlbmd0aClyZXR1cm4gdTt2YXIgQztrPU51bWJlcihrKTt0cnl7dmFyIFA9Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGUpO2lmKHcpe3ZhciBJPSJpIj09PUEuY2hhckF0KEEubGVuZ3RoLTEpO0E9cGFyc2VJbnQoQSwxMCksQz1QLm5ld0RhdGUoayxQLnRvTW9udGhJbmRleChrLEEsSSksTSl9ZWxzZSBDPVAubmV3RGF0ZShrLE51bWJlcihBKSxNKX1jYXRjaCh0KXtyZXR1cm4gdX1yZXR1cm4gQz8oQy50b0pEKCktbSkqZitTKmgrRSpwK0wqZDp1fWs9Mj09PWsubGVuZ3RoPyhOdW1iZXIoaykrMmUzLWIpJTEwMCtiOk51bWJlcihrKSxBLT0xO3ZhciBPPW5ldyBEYXRlKERhdGUuVVRDKDJlMyxBLE0sUyxFKSk7cmV0dXJuIE8uc2V0VVRDRnVsbFllYXIoayksTy5nZXRVVENNb250aCgpIT09QXx8Ty5nZXRVVENEYXRlKCkhPT1NP3U6Ty5nZXRUaW1lKCkrTCpkfSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoIi05OTk5IiksaT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTkiKSxyLmlzRGF0ZVRpbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kYXRlVGltZTJtcyh0LGUpIT09dX07dmFyIFQ9OTAqZixrPTMqaCxBPTUqcDtmdW5jdGlvbiBNKHQsZSxyLG4saSl7aWYoKGV8fHJ8fG58fGkpJiYodCs9IiAiK3coZSwyKSsiOiIrdyhyLDIpLChufHxpKSYmKHQrPSI6Iit3KG4sMiksaSkpKXtmb3IodmFyIGE9NDtpJTEwPT0wOylhLT0xLGkvPTEwO3QrPSIuIit3KGksYSl9cmV0dXJuIHR9ci5tczJEYXRlVGltZT1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0fHwhKHQ+PW4mJnQ8PWkpKXJldHVybiB1O2V8fChlPTApO3ZhciBhLG8scyxjLHkseCxiPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSksdz1NYXRoLnJvdW5kKHQtYi8xMCk7aWYoXyhyKSl7dmFyIFM9TWF0aC5mbG9vcih3L2YpK20sRT1NYXRoLmZsb29yKGwodCxmKSk7dHJ5e2E9Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLmZyb21KRChTKS5mb3JtYXREYXRlKCJ5eXl5LW1tLWRkIil9Y2F0Y2godCl7YT12KCJHJVktJW0tJWQiKShuZXcgRGF0ZSh3KSl9aWYoIi0iPT09YS5jaGFyQXQoMCkpZm9yKDthLmxlbmd0aDwxMTspYT0iLTAiK2Euc3Vic3RyKDEpO2Vsc2UgZm9yKDthLmxlbmd0aDwxMDspYT0iMCIrYTtvPWU8VD9NYXRoLmZsb29yKEUvaCk6MCxzPWU8VD9NYXRoLmZsb29yKEUlaC9wKTowLGM9ZTxrP01hdGguZmxvb3IoRSVwL2QpOjAseT1lPEE/RSVkKjEwK2I6MH1lbHNlIHg9bmV3IERhdGUodyksYT12KCIlWS0lbS0lZCIpKHgpLG89ZTxUP3guZ2V0VVRDSG91cnMoKTowLHM9ZTxUP3guZ2V0VVRDTWludXRlcygpOjAsYz1lPGs/eC5nZXRVVENTZWNvbmRzKCk6MCx5PWU8QT8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gTShhLG8scyxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24odCl7aWYoISh0Pj1uK2YmJnQ8PWktZikpcmV0dXJuIHU7dmFyIGU9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQodC1lLzEwKSk7cmV0dXJuIE0oYSgiJVktJW0tJWQiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKStlKX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PT11KXJldHVybiBlO2lmKHIuaXNKU0RhdGUodCl8fCJudW1iZXIiPT10eXBlb2YgdCYmaXNGaW5pdGUodCkpe2lmKF8obikpcmV0dXJuIHMuZXJyb3IoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsbikpcmV0dXJuIHMuZXJyb3IoInVucmVjb2duaXplZCBkYXRlIix0KSxlO3JldHVybiB0fTt2YXIgUz0vJVxkP2YvZyxFPS8laC9nLEw9ezE6IjEiLDI6IjEiLDM6IjIiLDQ6IjIifTtmdW5jdGlvbiBDKHQsZSxyLG4pe3Q9dC5yZXBsYWNlKFMsKGZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWluKCt0LmNoYXJBdCgxKXx8Niw2KTtyZXR1cm4oZS8xZTMlMSsyKS50b0ZpeGVkKHIpLnN1YnN0cigyKS5yZXBsYWNlKC8wKyQvLCIiKXx8IjAifSkpO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZih0PXQucmVwbGFjZShFLChmdW5jdGlvbigpe3JldHVybiBMW3IoIiVxIikoaSldfSkpLF8obikpdHJ5e3Q9Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIndvcmxkQ2FsRm10IikodCxlLG4pfWNhdGNoKHQpe3JldHVybiJJbnZhbGlkIn1yZXR1cm4gcih0KShpKX12YXIgUD1bNTksNTkuOSw1OS45OSw1OS45OTksNTkuOTk5OV07ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpPV8oaSkmJmksIWUpaWYoInkiPT09cillPWEueWVhcjtlbHNlIGlmKCJtIj09PXIpZT1hLm1vbnRoO2Vsc2V7aWYoImQiIT09cilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1sKHQrLjA1LGYpLG49dyhNYXRoLmZsb29yKHIvaCksMikrIjoiK3cobChNYXRoLmZsb29yKHIvcCksNjApLDIpO2lmKCJNIiE9PWUpe28oZSl8fChlPTApO3ZhciBpPSgxMDArTWF0aC5taW4obCh0L2QsNjApLFBbZV0pKS50b0ZpeGVkKGUpLnN1YnN0cigxKTtlPjAmJihpPWkucmVwbGFjZSgvMCskLywiIikucmVwbGFjZSgvW1wuXSQvLCIiKSksbis9IjoiK2l9cmV0dXJuIG59KHQscikrIlxuIitDKGEuZGF5TW9udGhZZWFyLHQsbixpKTtlPWEuZGF5TW9udGgrIlxuIithLnllYXJ9cmV0dXJuIEMoZSx0LG4saSl9O3ZhciBJPTMqZjtyLmluY3JlbWVudE1vbnRoPWZ1bmN0aW9uKHQsZSxyKXtyPV8ocikmJnI7dmFyIG49bCh0LGYpO2lmKHQ9TWF0aC5yb3VuZCh0LW4pLHIpdHJ5e3ZhciBpPU1hdGgucm91bmQodC9mKSttLGE9Zy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLG89YS5mcm9tSkQoaSk7cmV0dXJuIGUlMTI/YS5hZGQobyxlLCJtIik6YS5hZGQobyxlLzEyLCJ5IiksKG8udG9KRCgpLW0pKmYrbn1jYXRjaChlKXtzLmVycm9yKCJpbnZhbGlkIG1zICIrdCsiIGluIGNhbGVuZGFyICIrcil9dmFyIGM9bmV3IERhdGUodCtJKTtyZXR1cm4gYy5zZXRVVENNb250aChjLmdldFVUQ01vbnRoKCkrZSkrbi1JfSxyLmZpbmRFeGFjdERhdGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9MCxzPTAsbD0wLGM9XyhlKSYmZy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGUpLHU9MDt1PHQubGVuZ3RoO3UrKylpZihuPXRbdV0sbyhuKSl7aWYoIShuJWYpKWlmKGMpdHJ5ezE9PT0ocj1jLmZyb21KRChuL2YrbSkpLmRheSgpPzE9PT1yLm1vbnRoKCk/aSsrOmErKzpzKyt9Y2F0Y2godCl7fWVsc2UgMT09PShyPW5ldyBEYXRlKG4pKS5nZXRVVENEYXRlKCk/MD09PXIuZ2V0VVRDTW9udGgoKT9pKys6YSsrOnMrK31lbHNlIGwrKztzKz1hKz1pO3ZhciBoPXQubGVuZ3RoLWw7cmV0dXJue2V4YWN0WWVhcnM6aS9oLGV4YWN0TW9udGhzOmEvaCxleGFjdERheXM6cy9ofX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi9yZWdpc3RyeSI6NjMzLCIuL2xvZ2dlcnMiOjUwMiwiLi9tb2QiOjUwNSwiZDMtdGltZS1mb3JtYXQiOjExNSwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDQ4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vbWF0cml4Iiksbz10KCJnbC1tYXQ0Iik7ZnVuY3Rpb24gcyh0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj0icGxvdGx5LmpzLXN0eWxlLSIrdCxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pO2F8fCgoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoImlkIixuKSxhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKSk7dmFyIG89YS5zaGVldDtvLmluc2VydFJ1bGU/by5pbnNlcnRSdWxlKGUrInsiK3IrIn0iLDApOm8uYWRkUnVsZT9vLmFkZFJ1bGUoZSxyLDApOmkud2FybigiYWRkU3R5bGVSdWxlIGZhaWxlZCIpfWZ1bmN0aW9uIGModCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxyPWUuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbW96LXRyYW5zZm9ybSIpfHxlLmdldFByb3BlcnR5VmFsdWUoIi1tcy10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItby10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKTtyZXR1cm4ibm9uZSI9PT1yP251bGw6ci5yZXBsYWNlKCJtYXRyaXgiLCIiKS5yZXBsYWNlKCIzZCIsIiIpLnNsaWNlKDEsLTEpLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4rdH0pKX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1bXTtmKHQpOyllLnB1c2godCksdD10LnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdCYmKHQgaW5zdGFuY2VvZiBFbGVtZW50fHx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpfWUuZXhwb3J0cz17Z2V0R3JhcGhEaXY6ZnVuY3Rpb24odCl7dmFyIGU7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihudWxsPT09KGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpKXRocm93IG5ldyBFcnJvcigiTm8gRE9NIGVsZW1lbnQgd2l0aCBpZCAnIit0KyInIGV4aXN0cyBvbiB0aGUgcGFnZS4iKTtyZXR1cm4gZX1pZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiRE9NIGVsZW1lbnQgcHJvdmlkZWQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH0saXNQbG90RGl2OmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoImpzLXBsb3RseS1wbG90Iil9LHJlbW92ZUVsZW1lbnQ6cyxhZGRTdHlsZVJ1bGU6ZnVuY3Rpb24odCxlKXtsKCJnbG9iYWwiLHQsZSl9LGFkZFJlbGF0ZWRTdHlsZVJ1bGU6bCxkZWxldGVSZWxhdGVkU3R5bGVSdWxlOmZ1bmN0aW9uKHQpe3ZhciBlPSJwbG90bHkuanMtc3R5bGUtIit0LHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7ciYmcyhyKX0sZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeDpmdW5jdGlvbih0KXt2YXIgZT11KHQpLHI9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWModCk7aWYoZSl7dmFyIG49YS5jb252ZXJ0Q3NzTWF0cml4KGUpO3I9by5tdWx0aXBseShyLHIsbil9fSkpLHJ9LGdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXg6YyxnZXRFbGVtZW50QW5kQW5jZXN0b3JzOnUsZXF1YWxEb21SZWN0czpmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlJiZ0Lng9PT1lLngmJnQueT09PWUueSYmdC50b3A9PT1lLnRvcCYmdC5sZWZ0PT09ZS5sZWZ0JiZ0LnJpZ2h0PT09ZS5yaWdodCYmdC5ib3R0b209PT1lLmJvdHRvbX19fSx7Ii4vbG9nZ2VycyI6NTAyLCIuL21hdHJpeCI6NTA0LCJAcGxvdGx5L2QzIjo1OCwiZ2wtbWF0NCI6MjA1fV0sNDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXtpbml0OmZ1bmN0aW9uKHQpe2lmKHQuX2V2IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgZT1uZXcgbixyPW5ldyBuO3JldHVybiB0Ll9ldj1lLHQuX2ludGVybmFsRXY9cix0Lm9uPWUub24uYmluZChlKSx0Lm9uY2U9ZS5vbmNlLmJpbmQoZSksdC5yZW1vdmVMaXN0ZW5lcj1lLnJlbW92ZUxpc3RlbmVyLmJpbmQoZSksdC5yZW1vdmVBbGxMaXN0ZW5lcnM9ZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChlKSx0Ll9pbnRlcm5hbE9uPXIub24uYmluZChyKSx0Ll9pbnRlcm5hbE9uY2U9ci5vbmNlLmJpbmQociksdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcj1yLnJlbW92ZUxpc3RlbmVyLmJpbmQociksdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnM9ci5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChyKSx0LmVtaXQ9ZnVuY3Rpb24obixpKXsidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6MTgxfV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGEodCxlLHIsbyl7dmFyIHMsbCxjLHUsZixoLHA9dFswXSxkPXQubGVuZ3RoO2lmKDI9PT1kJiZpKHApJiZpKHRbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH0odFsxXSxwKSlyZXR1cm4gcDtwLnNwbGljZSgwLHAubGVuZ3RoKX1mb3IodmFyIG09MTttPGQ7bSsrKWZvcihsIGluIHM9dFttXSljPXBbbF0sdT1zW2xdLG8mJmkodSk/cFtsXT11OmUmJnUmJihuKHUpfHwoZj1pKHUpKSk/KGY/KGY9ITEsaD1jJiZpKGMpP2M6W10pOmg9YyYmbihjKT9jOnt9LHBbbF09YShbaCx1XSxlLHIsbykpOih2b2lkIDAhPT11fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6NDk5fV0sNDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw0OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9pOm4pLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmEucHVzaChzKX1yZXR1cm4gYX19LHt9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiY291bnRyeS1yZWdleCIpLGE9dCgiQHR1cmYvYXJlYSIpLG89dCgiQHR1cmYvY2VudHJvaWQiKSxzPXQoIkB0dXJmL2Jib3giKSxsPXQoIi4vaWRlbnRpdHkiKSxjPXQoIi4vbG9nZ2VycyIpLHU9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxmPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksaD10KCIuL3BvbHlnb24iKSxwPU9iamVjdC5rZXlzKGkpLGQ9eyJJU08tMyI6bCwiVVNBLXN0YXRlcyI6bCwiY291bnRyeSBuYW1lcyI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDtlKyspe3ZhciByPXBbZV07aWYobmV3IFJlZ0V4cChpW3JdKS50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBjLmxvZygiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogIit0KyIuIiksITF9fTtmdW5jdGlvbiBtKHQpe3ZhciBlPXQuZ2VvanNvbixyPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LG49InN0cmluZyI9PXR5cGVvZiBlP3JbZV06ZTtyZXR1cm4gdShuKT9uOihjLmVycm9yKCJPb3BzIC4uLiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIGZldGNoaW5nICIrZSksITEpfWUuZXhwb3J0cz17bG9jYXRpb25Ub0ZlYXR1cmU6ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIG4saSxhLG89ZFt0XShlKTtpZihvKXtpZigiVVNBLXN0YXRlcyI9PT10KWZvcihuPVtdLGE9MDthPHIubGVuZ3RoO2ErKykoaT1yW2FdKS5wcm9wZXJ0aWVzJiZpLnByb3BlcnRpZXMuZ3UmJiJVU0EiPT09aS5wcm9wZXJ0aWVzLmd1JiZuLnB1c2goaSk7ZWxzZSBuPXI7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylpZigoaT1uW2FdKS5pZD09PW8pcmV0dXJuIGk7Yy5sb2coWyJMb2NhdGlvbiB3aXRoIGlkIixvLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uIl0uam9pbigiICIpKX1yZXR1cm4hMX0sZmVhdHVyZTJwb2x5Z29uczpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuZ2VvbWV0cnksbz1hLmNvb3JkaW5hdGVzLHM9dC5pZCxsPVtdO2Z1bmN0aW9uIGModCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXN3aXRjaChlPSJSVVMiPT09c3x8IkZKSSI9PT1zP2Z1bmN0aW9uKHQpe3ZhciBlO2lmKG51bGw9PT1jKHQpKWU9dDtlbHNlIGZvcihlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKWVbaV09W3RbaV1bMF08MD90W2ldWzBdKzM2MDp0W2ldWzBdLHRbaV1bMV1dO2wucHVzaChoLnRlc3RlcihlKSl9OiJBVEEiPT09cz9mdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKG51bGw9PT1lKXJldHVybiBsLnB1c2goaC50ZXN0ZXIodCkpO3ZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCsxKSxuPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpPmU/cltuKytdPVt0W2ldWzBdKzM2MCx0W2ldWzFdXTppPT09ZT8ocltuKytdPXRbaV0scltuKytdPVt0W2ldWzBdLC05MF0pOnJbbisrXT10W2ldO3ZhciBhPWgudGVzdGVyKHIpO2EucHRzLnBvcCgpLGwucHVzaChhKX06ZnVuY3Rpb24odCl7bC5wdXNoKGgudGVzdGVyKHQpKX0sYS50eXBlKXtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylmb3Iobj0wO248b1tyXS5sZW5ndGg7bisrKWUob1tyXVtuXSk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3Iocj0wO3I8by5sZW5ndGg7cisrKWUob1tyXSl9cmV0dXJuIGx9LGdldFRyYWNlR2VvanNvbjptLGV4dHJhY3RUcmFjZUZlYXR1cmU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW0oZSk7aWYoIXIpcmV0dXJuITE7dmFyIG4saT17fSxzPVtdO2ZvcihuPTA7bjxlLl9sZW5ndGg7bisrKXt2YXIgbD10W25dOyhsLmxvY3x8MD09PWwubG9jKSYmKGlbbC5sb2NdPWwpfWZ1bmN0aW9uIHUodCl7dmFyIHI9Zih0LGUuZmVhdHVyZWlka2V5fHwiaWQiKS5nZXQoKSxuPWlbcl07aWYobil7dmFyIGw9dC5nZW9tZXRyeTtpZigiUG9seWdvbiI9PT1sLnR5cGV8fCJNdWx0aVBvbHlnb24iPT09bC50eXBlKXt2YXIgdT17dHlwZToiRmVhdHVyZSIsaWQ6cixnZW9tZXRyeTpsLHByb3BlcnRpZXM6e319O3UucHJvcGVydGllcy5jdD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuZ2VvbWV0cnk7aWYoIk11bHRpUG9seWdvbiI9PT1yLnR5cGUpZm9yKHZhciBuPXIuY29vcmRpbmF0ZXMsaT0wLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOm5bc119LGM9YS5kZWZhdWx0KGwpO2M+aSYmKGk9YyxlPWwpfWVsc2UgZT1yO3JldHVybiBvLmRlZmF1bHQoZSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXN9KHUpLG4uZkluPXQsbi5mT3V0PXUscy5wdXNoKHUpfWVsc2UgYy5sb2coWyJMb2NhdGlvbiIsbi5sb2MsImRvZXMgbm90IGhhdmUgYSB2YWxpZCBHZW9KU09OIGdlb21ldHJ5LiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKlBvbHlnb24qIGFuZCAqTXVsdGlQb2x5Z29uKiBnZW9tZXRyaWVzLiJdLmpvaW4oIiAiKSl9ZGVsZXRlIGlbcl19c3dpdGNoKHIudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGg9ci5mZWF0dXJlcztmb3Iobj0wO248aC5sZW5ndGg7bisrKXUoaFtuXSk7YnJlYWs7Y2FzZSJGZWF0dXJlIjp1KHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGMud2FybihbIkludmFsaWQgR2VvSlNPTiB0eXBlIiwoci50eXBlfHwibm9uZSIpKyIuIiwiVHJhY2VzIHdpdGggbG9jYXRpb25tb2RlICpnZW9qc29uLWlkKiBvbmx5IHN1cHBvcnQiLCIqRmVhdHVyZUNvbGxlY3Rpb24qIGFuZCAqRmVhdHVyZSogdHlwZXMuIl0uam9pbigiICIpKSwhMX1mb3IodmFyIHAgaW4gaSljLmxvZyhbIkxvY2F0aW9uICoiK3ArIioiLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgZmVhdHVyZSB3aXRoIGlkLWtleSIsIioiK2UuZmVhdHVyZWlka2V5KyIqLiJdLmpvaW4oIiAiKSk7cmV0dXJuIHN9LGZldGNoVHJhY2VHZW9EYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LHI9W107ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7bi5qc29uKHQsKGZ1bmN0aW9uKG4sYSl7aWYobil7ZGVsZXRlIGVbdF07dmFyIG89NDA0PT09bi5zdGF0dXM/J0dlb0pTT04gYXQgVVJMICInK3QrJyIgZG9lcyBub3QgZXhpc3QuJzoiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdDtyZXR1cm4gaShuZXcgRXJyb3IobykpfXJldHVybiBlW3RdPWEscihhKX0pKX0pKX1mdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt2YXIgaT0wLGE9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7cmV0dXJuIGVbdF0mJiJwZW5kaW5nIiE9PWVbdF0/KGNsZWFySW50ZXJ2YWwoYSkscihlW3RdKSk6aT4xMDA/KGNsZWFySW50ZXJ2YWwoYSksbigiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdCkpOnZvaWQgaSsrfSksNTApfSkpfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLnRyYWNlLmdlb2pzb247InN0cmluZyI9PXR5cGVvZiBzJiYoZVtzXT8icGVuZGluZyI9PT1lW3NdJiZyLnB1c2goYShzKSk6KGVbc109InBlbmRpbmciLHIucHVzaChpKHMpKSkpfXJldHVybiByfSxjb21wdXRlQmJveDpmdW5jdGlvbih0KXtyZXR1cm4gcy5kZWZhdWx0KHQpfX19LHsiLi9pZGVudGl0eSI6NDk2LCIuL2lzX3BsYWluX29iamVjdCI6NDk5LCIuL2xvZ2dlcnMiOjUwMiwiLi9uZXN0ZWRfcHJvcGVydHkiOjUwNiwiLi9wb2x5Z29uIjo1MTAsIkBwbG90bHkvZDMiOjU4LCJAdHVyZi9hcmVhIjo2MSwiQHR1cmYvYmJveCI6NjIsIkB0dXJmL2NlbnRyb2lkIjo2MywiY291bnRyeS1yZWdleCI6ODl9XSw0OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzR9XSw0OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiLi9tb2QiKS5tb2Q7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPWktdCx1PW8taSxmPW4tZSxoPWEtZSxwPXMtYSxkPWwqcC11KmY7aWYoMD09PWQpcmV0dXJuIG51bGw7dmFyIG09KGMqcC11KmgpL2QsZz0oYypmLWwqaCkvZDtyZXR1cm4gZzwwfHxnPjF8fG08MHx8bT4xP251bGw6e3g6dCtsKm0seTplK2YqbX19ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPW4qdCtpKmU7aWYoYTwwKXJldHVybiBuKm4raSppO2lmKGE+cil7dmFyIG89bi10LHM9aS1lO3JldHVybiBvKm8rcypzfXZhciBsPW4qZS1pKnQ7cmV0dXJuIGwqbC9yfXIuc2VnbWVudHNJbnRlcnNlY3Q9cyxyLnNlZ21lbnREaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGksYSxvLGMpe2lmKHModCxlLHIsbixpLGEsbyxjKSlyZXR1cm4gMDt2YXIgdT1yLXQsZj1uLWUsaD1vLWkscD1jLWEsZD11KnUrZipmLG09aCpoK3AqcCxnPU1hdGgubWluKGwodSxmLGQsaS10LGEtZSksbCh1LGYsZCxvLXQsYy1lKSxsKGgscCxtLHQtaSxlLWEpLGwoaCxwLG0sci1pLG4tYSkpO3JldHVybiBNYXRoLnNxcnQoZyl9LHIuZ2V0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLHMpe2lmKHQ9PT1pJiZzPT09YXx8KG49e30saT10LGE9cyksbltyXSlyZXR1cm4gbltyXTt2YXIgbD10LmdldFBvaW50QXRMZW5ndGgobyhyLXMvMixlKSksYz10LmdldFBvaW50QXRMZW5ndGgobyhyK3MvMixlKSksdT1NYXRoLmF0YW4oKGMueS1sLnkpLyhjLngtbC54KSksZj10LmdldFBvaW50QXRMZW5ndGgobyhyLGUpKSxoPXt4Oig0KmYueCtsLngrYy54KS82LHk6KDQqZi55K2wueStjLnkpLzYsdGhldGE6dX07cmV0dXJuIG5bcl09aCxofSxyLmNsZWFyTG9jYXRpb25DYWNoZT1mdW5jdGlvbigpe2k9bnVsbH0sci5nZXRWaXNpYmxlU2VnbWVudD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUubGVmdCxvPWUucmlnaHQscz1lLnRvcCxsPWUuYm90dG9tLGM9MCx1PXQuZ2V0VG90YWxMZW5ndGgoKSxmPXU7ZnVuY3Rpb24gaChlKXt2YXIgcj10LmdldFBvaW50QXRMZW5ndGgoZSk7MD09PWU/bj1yOmU9PT11JiYoaT1yKTt2YXIgYz1yLng8YT9hLXIueDpyLng+bz9yLngtbzowLGY9ci55PHM/cy1yLnk6ci55Pmw/ci55LWw6MDtyZXR1cm4gTWF0aC5zcXJ0KGMqYytmKmYpfWZvcih2YXIgcD1oKGMpO3A7KXtpZigoYys9cCtyKT5mKXJldHVybjtwPWgoYyl9Zm9yKHA9aChmKTtwOyl7aWYoYz4oZi09cCtyKSlyZXR1cm47cD1oKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOnUsaXNDbG9zZWQ6MD09PWMmJmY9PT11JiZNYXRoLmFicyhuLngtaS54KTwuMSYmTWF0aC5hYnMobi55LWkueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9KG49bnx8e30pLnBhdGhMZW5ndGh8fHQuZ2V0VG90YWxMZW5ndGgoKSxsPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT10LmdldFBvaW50QXRMZW5ndGgoMClbcl0+dC5nZXRQb2ludEF0TGVuZ3RoKHMpW3JdPy0xOjEsZj0wLGg9MCxwPXM7ZjxjOyl7aWYoaT0oaCtwKS8yLG89KGE9dC5nZXRQb2ludEF0TGVuZ3RoKGkpKVtyXS1lLE1hdGguYWJzKG8pPGwpcmV0dXJuIGE7dSpvPjA/cD1pOmg9aSxmKyt9cmV0dXJuIGF9fSx7Ii4vbW9kIjo1MDV9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5kZWZhdWx0TGluZSxsPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5LGM9YShzKTtmdW5jdGlvbiB1KHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGYodCl7aWYobih0KSlyZXR1cm4gYzt2YXIgZT1hKHQpO3JldHVybiBlLmxlbmd0aD9lOmN9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbih0KT90OjF9ZS5leHBvcnRzPXtmb3JtYXRDb2xvcjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxzLHAsZCxtPXQuY29sb3IsZz1sKG0pLHY9bChlKSx5PW8uZXh0cmFjdE9wdHModCkseD1bXTtpZihuPXZvaWQgMCE9PXkuY29sb3JzY2FsZT9vLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZSh0KTpmLGk9Zz9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdP2M6YShuKHRbZV0pKX06ZixzPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT8xOmgodFtlXSl9OmgsZ3x8dilmb3IodmFyIGI9MDtiPHI7YisrKXA9aShtLGIpLGQ9cyhlLGIpLHhbYl09dShwLGQpO2Vsc2UgeD11KGEobSksZSk7cmV0dXJuIHh9LHBhcnNlQ29sb3JTY2FsZTpmdW5jdGlvbih0KXt2YXIgZT1vLmV4dHJhY3RPcHRzKHQpLHI9ZS5jb2xvcnNjYWxlO3JldHVybiBlLnJldmVyc2VzY2FsZSYmKHI9by5mbGlwU2NhbGUoZS5jb2xvcnNjYWxlKSksci5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1pKHRbMV0pLnRvUmdiKCk7cmV0dXJue2luZGV4OmUscmdiOltyLnIsci5nLHIuYixyLmFdfX0pKX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi9hcnJheSI6NDgwLCJjb2xvci1ub3JtYWxpemUiOjg0LCJmYXN0LWlzbnVtZXJpYyI6MTg1LHRpbnljb2xvcjI6MzA3fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6NDk2fV0sNDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw0OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9MS9NYXRoLmFicyhlKSxuPXI+MT8ocip0K3IqZSkvcjp0K2UsaT1TdHJpbmcobikubGVuZ3RoO2lmKGk+MTYpe3ZhciBhPVN0cmluZyhlKS5sZW5ndGg7aWYoaT49U3RyaW5nKHQpLmxlbmd0aCthKXt2YXIgbz1wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKDEyKTstMT09PW8uaW5kZXhPZigiZSsiKSYmKG49K28pfX1yZXR1cm4gbn19LHt9XSw0OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJkMy1mb3JtYXQiKS5mb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGw9cy5GUF9TQUZFLGM9LWwsdT1zLkJBRE5VTSxmPWUuZXhwb3J0cz17fTtmLmFkanVzdEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8L15cZFsuXVxkZi8udGVzdCh0KXx8L1suXVxkJS8udGVzdCh0KT90OiIwLmYiPT09dD8ifmYiOi9eXGQlLy50ZXN0KHQpPyJ+JSI6L15cZHMvLnRlc3QodCk/In5zIjohL15bfiwuMCRdLy50ZXN0KHQpJiYvWyZmcHNdLy50ZXN0KHQpPyJ+Iit0OnR9O3ZhciBoPXt9O2Yud2FybkJhZEZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aFtlXXx8KGhbZV09MSxmLndhcm4oJ2VuY291bnRlcmVkIGJhZCBmb3JtYXQ6ICInK2UrJyInKSl9LGYubm9Gb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX0sZi5udW1iZXJGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9YShmLmFkanVzdEZvcm1hdCh0KSl9Y2F0Y2goZSl7cmV0dXJuIGYud2FybkJhZEZvcm1hdCh0KSxmLm5vRm9ybWF0fXJldHVybiBlfSxmLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksZi5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGYucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGYuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGYudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGYucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBwPXQoIi4vYXJyYXkiKTtmLmlzVHlwZWRBcnJheT1wLmlzVHlwZWRBcnJheSxmLmlzQXJyYXlPclR5cGVkQXJyYXk9cC5pc0FycmF5T3JUeXBlZEFycmF5LGYuaXNBcnJheTFEPXAuaXNBcnJheTFELGYuZW5zdXJlQXJyYXk9cC5lbnN1cmVBcnJheSxmLmNvbmNhdD1wLmNvbmNhdCxmLm1heFJvd0xlbmd0aD1wLm1heFJvd0xlbmd0aCxmLm1pblJvd0xlbmd0aD1wLm1pblJvd0xlbmd0aDt2YXIgZD10KCIuL21vZCIpO2YubW9kPWQubW9kLGYubW9kSGFsZj1kLm1vZEhhbGY7dmFyIG09dCgiLi9jb2VyY2UiKTtmLnZhbE9iamVjdE1ldGE9bS52YWxPYmplY3RNZXRhLGYuY29lcmNlPW0uY29lcmNlLGYuY29lcmNlMj1tLmNvZXJjZTIsZi5jb2VyY2VGb250PW0uY29lcmNlRm9udCxmLmNvZXJjZVBhdHRlcm49bS5jb2VyY2VQYXR0ZXJuLGYuY29lcmNlSG92ZXJpbmZvPW0uY29lcmNlSG92ZXJpbmZvLGYuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1tLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksZi52YWxpZGF0ZT1tLnZhbGlkYXRlO3ZhciBnPXQoIi4vZGF0ZXMiKTtmLmRhdGVUaW1lMm1zPWcuZGF0ZVRpbWUybXMsZi5pc0RhdGVUaW1lPWcuaXNEYXRlVGltZSxmLm1zMkRhdGVUaW1lPWcubXMyRGF0ZVRpbWUsZi5tczJEYXRlVGltZUxvY2FsPWcubXMyRGF0ZVRpbWVMb2NhbCxmLmNsZWFuRGF0ZT1nLmNsZWFuRGF0ZSxmLmlzSlNEYXRlPWcuaXNKU0RhdGUsZi5mb3JtYXREYXRlPWcuZm9ybWF0RGF0ZSxmLmluY3JlbWVudE1vbnRoPWcuaW5jcmVtZW50TW9udGgsZi5kYXRlVGljazA9Zy5kYXRlVGljazAsZi5kZmx0UmFuZ2U9Zy5kZmx0UmFuZ2UsZi5maW5kRXhhY3REYXRlcz1nLmZpbmRFeGFjdERhdGVzLGYuTUlOX01TPWcuTUlOX01TLGYuTUFYX01TPWcuTUFYX01TO3ZhciB2PXQoIi4vc2VhcmNoIik7Zi5maW5kQmluPXYuZmluZEJpbixmLnNvcnRlckFzYz12LnNvcnRlckFzYyxmLnNvcnRlckRlcz12LnNvcnRlckRlcyxmLmRpc3RpbmN0VmFscz12LmRpc3RpbmN0VmFscyxmLnJvdW5kVXA9di5yb3VuZFVwLGYuc29ydD12LnNvcnQsZi5maW5kSW5kZXhPZk1pbj12LmZpbmRJbmRleE9mTWluLGYuc29ydE9iamVjdEtleXM9dCgiLi9zb3J0X29iamVjdF9rZXlzIik7dmFyIHk9dCgiLi9zdGF0cyIpO2YuYWdnTnVtcz15LmFnZ051bXMsZi5sZW49eS5sZW4sZi5tZWFuPXkubWVhbixmLm1lZGlhbj15Lm1lZGlhbixmLm1pZFJhbmdlPXkubWlkUmFuZ2UsZi52YXJpYW5jZT15LnZhcmlhbmNlLGYuc3RkZXY9eS5zdGRldixmLmludGVycD15LmludGVycDt2YXIgeD10KCIuL21hdHJpeCIpO2YuaW5pdDJkQXJyYXk9eC5pbml0MmRBcnJheSxmLnRyYW5zcG9zZVJhZ2dlZD14LnRyYW5zcG9zZVJhZ2dlZCxmLmRvdD14LmRvdCxmLnRyYW5zbGF0aW9uTWF0cml4PXgudHJhbnNsYXRpb25NYXRyaXgsZi5yb3RhdGlvbk1hdHJpeD14LnJvdGF0aW9uTWF0cml4LGYucm90YXRpb25YWU1hdHJpeD14LnJvdGF0aW9uWFlNYXRyaXgsZi5hcHBseTNEVHJhbnNmb3JtPXguYXBwbHkzRFRyYW5zZm9ybSxmLmFwcGx5MkRUcmFuc2Zvcm09eC5hcHBseTJEVHJhbnNmb3JtLGYuYXBwbHkyRFRyYW5zZm9ybTI9eC5hcHBseTJEVHJhbnNmb3JtMixmLmNvbnZlcnRDc3NNYXRyaXg9eC5jb252ZXJ0Q3NzTWF0cml4LGYuaW52ZXJzZVRyYW5zZm9ybU1hdHJpeD14LmludmVyc2VUcmFuc2Zvcm1NYXRyaXg7dmFyIGI9dCgiLi9hbmdsZXMiKTtmLmRlZzJyYWQ9Yi5kZWcycmFkLGYucmFkMmRlZz1iLnJhZDJkZWcsZi5hbmdsZURlbHRhPWIuYW5nbGVEZWx0YSxmLmFuZ2xlRGlzdD1iLmFuZ2xlRGlzdCxmLmlzRnVsbENpcmNsZT1iLmlzRnVsbENpcmNsZSxmLmlzQW5nbGVJbnNpZGVTZWN0b3I9Yi5pc0FuZ2xlSW5zaWRlU2VjdG9yLGYuaXNQdEluc2lkZVNlY3Rvcj1iLmlzUHRJbnNpZGVTZWN0b3IsZi5wYXRoQXJjPWIucGF0aEFyYyxmLnBhdGhTZWN0b3I9Yi5wYXRoU2VjdG9yLGYucGF0aEFubnVsdXM9Yi5wYXRoQW5udWx1czt2YXIgXz10KCIuL2FuY2hvcl91dGlscyIpO2YuaXNMZWZ0QW5jaG9yPV8uaXNMZWZ0QW5jaG9yLGYuaXNDZW50ZXJBbmNob3I9Xy5pc0NlbnRlckFuY2hvcixmLmlzUmlnaHRBbmNob3I9Xy5pc1JpZ2h0QW5jaG9yLGYuaXNUb3BBbmNob3I9Xy5pc1RvcEFuY2hvcixmLmlzTWlkZGxlQW5jaG9yPV8uaXNNaWRkbGVBbmNob3IsZi5pc0JvdHRvbUFuY2hvcj1fLmlzQm90dG9tQW5jaG9yO3ZhciB3PXQoIi4vZ2VvbWV0cnkyZCIpO2Yuc2VnbWVudHNJbnRlcnNlY3Q9dy5zZWdtZW50c0ludGVyc2VjdCxmLnNlZ21lbnREaXN0YW5jZT13LnNlZ21lbnREaXN0YW5jZSxmLmdldFRleHRMb2NhdGlvbj13LmdldFRleHRMb2NhdGlvbixmLmNsZWFyTG9jYXRpb25DYWNoZT13LmNsZWFyTG9jYXRpb25DYWNoZSxmLmdldFZpc2libGVTZWdtZW50PXcuZ2V0VmlzaWJsZVNlZ21lbnQsZi5maW5kUG9pbnRPblBhdGg9dy5maW5kUG9pbnRPblBhdGg7dmFyIFQ9dCgiLi9leHRlbmQiKTtmLmV4dGVuZEZsYXQ9VC5leHRlbmRGbGF0LGYuZXh0ZW5kRGVlcD1ULmV4dGVuZERlZXAsZi5leHRlbmREZWVwQWxsPVQuZXh0ZW5kRGVlcEFsbCxmLmV4dGVuZERlZXBOb0FycmF5cz1ULmV4dGVuZERlZXBOb0FycmF5czt2YXIgaz10KCIuL2xvZ2dlcnMiKTtmLmxvZz1rLmxvZyxmLndhcm49ay53YXJuLGYuZXJyb3I9ay5lcnJvcjt2YXIgQT10KCIuL3JlZ2V4Iik7Zi5jb3VudGVyUmVnZXg9QS5jb3VudGVyO3ZhciBNPXQoIi4vdGhyb3R0bGUiKTtmLnRocm90dGxlPU0udGhyb3R0bGUsZi50aHJvdHRsZURvbmU9TS5kb25lLGYuY2xlYXJUaHJvdHRsZT1NLmNsZWFyO3ZhciBTPXQoIi4vZG9tIik7ZnVuY3Rpb24gRSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1mLmdldEdyYXBoRGl2PVMuZ2V0R3JhcGhEaXYsZi5pc1Bsb3REaXY9Uy5pc1Bsb3REaXYsZi5yZW1vdmVFbGVtZW50PVMucmVtb3ZlRWxlbWVudCxmLmFkZFN0eWxlUnVsZT1TLmFkZFN0eWxlUnVsZSxmLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9Uy5hZGRSZWxhdGVkU3R5bGVSdWxlLGYuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZT1TLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUsZi5nZXRGdWxsVHJhbnNmb3JtTWF0cml4PVMuZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCxmLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXg9Uy5nZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4LGYuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycz1TLmdldEVsZW1lbnRBbmRBbmNlc3RvcnMsZi5lcXVhbERvbVJlY3RzPVMuZXF1YWxEb21SZWN0cyxmLmNsZWFyUmVzcG9uc2l2ZT10KCIuL2NsZWFyX3Jlc3BvbnNpdmUiKSxmLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj10KCIuL3ByZXNlcnZlX2RyYXdpbmdfYnVmZmVyIiksZi5tYWtlVHJhY2VHcm91cHM9dCgiLi9tYWtlX3RyYWNlX2dyb3VwcyIpLGYuXz10KCIuL2xvY2FsaXplIiksZi5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksZi5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksZi5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxmLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGYuaW5jcmVtZW50PXQoIi4vaW5jcmVtZW50IiksZi5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGYuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpPyh0PU51bWJlcih0KSk+bHx8dDxjP3U6dDp1fSxmLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYobyh0KSYmdD49MCYmdCUxPT0wKX0sZi5ub29wPXQoIi4vbm9vcCIpLGYuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGYucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGYuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxsPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQobCl9fSxmLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxmLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxmLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGYuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sZi5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT1lKHRbc10scixuLGkpO3JldHVybiBvfSxmLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciBjPXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrbDtjJiYobz1NYXRoLnBvdyhuLGMpLGw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2wpO3ZhciB1PXBhcnNlSW50KGwsbik7cmV0dXJuIGUmJmVbbF18fHUhPT0xLzAmJnU+PU1hdGgucG93KDIscik/aT4xMD8oZi53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIiksbCk6dChlLHIsbiwoaXx8MCkrMSk6bH0sZi5PcHRpb25Db250cm9sPWZ1bmN0aW9uKHQsZSl7dHx8KHQ9e30pLGV8fChlPSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIitlXT10LHJ9LGYuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sZi5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBmLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpO3JldHVybiByJiZyKGUpfSxmLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxmLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxmLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288YTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1pP24ocyk6c319LGYubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYubWVyZ2VBcnJheSh0LGUsciwoZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGlzRmluaXRlKGUpJiZlPjA/ZTowfSkpfSxmLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGYuaWRlbnRpdHksZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sZi5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8Zi5pZGVudGl0eTt2YXIgaT1mLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGYuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZmLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGYuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9Zi5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxmLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49RShvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aWYoZi5pc0luZGV4KGwpfHxmLmlzQXJyYXlPclR5cGVkQXJyYXkobCkmJmYuaXNJbmRleChsWzBdKSYmZi5pc0luZGV4KGxbMV0pKXt2YXIgYz1uP25bbF06bCx1PXI/cltjXTpjO3ZvaWQgMCE9PShpPXUpJiZpPHQubGVuZ3RoJiYodFt1XS5zZWxlY3RlZD0xKX19fSxmLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1FKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGYuaXNJbmRleChvKSl7dmFyIHM9bltvXTtmLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGYuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWYubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxmLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspYT10W2k9b1tuXV0sIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhJiYoIm1vZHVsZSI9PT1pP3JbaV09YTpBcnJheS5pc0FycmF5KGEpP3JbaV09ImNvbG9yc2NhbGUiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOmYuaXNUeXBlZEFycmF5KGEpP3JbaV09YS5zdWJhcnJheSgwLDMpOnJbaV09YSYmIm9iamVjdCI9PXR5cGVvZiBhP2YubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKSJvYmplY3QiPT10eXBlb2YoYT1lW2k9b1tuXV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGYudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxmLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGYuaXNJRT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT13aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9O3ZhciBMPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2YuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIEM9L2lQYWR8aVBob25lfGlQb2QvO2YuaXNJT1M9ZnVuY3Rpb24oKXtyZXR1cm4gQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFA9L0ZpcmVmb3hcLyhcZCspXC5cZCsvO2YuZ2V0RmlyZWZveFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgdD1QLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO2lmKHQmJjI9PT10Lmxlbmd0aCl7dmFyIGU9cGFyc2VJbnQodFsxXSk7aWYoIWlzTmFOKGUpKXJldHVybiBlfXJldHVybiBudWxsfSxmLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuLnNlbGVjdGlvbn0sZi5lbnN1cmVTaW5nbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsocj8iLiIrcjoiIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGYuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyIjIityKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5hdHRyKCJpZCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxmLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O3ZhciBJPS9eKFteXFtcLl0rKVwuKC4rKT8vLE89L14oW15cLl0rKVxbKFswLTldKylcXShcLik/KC4rKT8vO2YuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKEkpKT8oaT10W3JdLG49ZVsxXSxkZWxldGUgdFtyXSx0W25dPWYuZXh0ZW5kRGVlcE5vQXJyYXlzKHRbbl18fHt9LGYub2JqZWN0RnJvbVBhdGgocixmLmV4cGFuZE9iamVjdFBhdGhzKGkpKVtuXSkpOihlPXIubWF0Y2goTykpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGYuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sZi5vYmplY3RGcm9tUGF0aChzLGYuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1mLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWYuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxmLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfSxmLlRFTVBMQVRFX1NUUklOR19SRUdFWD0vJXsoW15ccyV7fTpdKikoWzp8XHxdW159XSopP30vZzt2YXIgej0vXlx3KiQvO2YudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGYuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbih0LG4pe3ZhciBpO3JldHVybiB6LnRlc3Qobik/aT1lW25dOihyW25dPXJbbl18fGYubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQsaT1yW25dKCkpLGYuaXNWYWxpZFRleHRWYWx1ZShpKT9pOiIifSkpfTt2YXIgRD17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2YuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KEQsYXJndW1lbnRzKX07dmFyIFI9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2YudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoUixhcmd1bWVudHMpfTt2YXIgRj0vXls6fFx8XS87ZnVuY3Rpb24gQih0LGUscil7dmFyIG49dGhpcyxhPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIG89e307cmV0dXJuIHQucmVwbGFjZShmLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxzLGwpe3ZhciBjLHUsaCxwPSJfeG90aGVyIj09PXN8fCJfeW90aGVyIj09PXMsZD0iX3hvdGhlcl8iPT09c3x8Il95b3RoZXJfIj09PXMsbT0ieG90aGVyXyI9PT1zfHwieW90aGVyXyI9PT1zLGc9InhvdGhlciI9PT1zfHwieW90aGVyIj09PXN8fHB8fG18fGQsdj1zO2lmKChwfHxkKSYmKHY9di5zdWJzdHJpbmcoMSkpLChtfHxkKSYmKHY9di5zdWJzdHJpbmcoMCx2Lmxlbmd0aC0xKSksZyl7aWYodm9pZCAwPT09KGM9ZVt2XSkpcmV0dXJuIiJ9ZWxzZSBmb3IoaD0zO2g8YS5sZW5ndGg7aCsrKWlmKHU9YVtoXSl7aWYodS5oYXNPd25Qcm9wZXJ0eSh2KSl7Yz11W3ZdO2JyZWFrfWlmKHoudGVzdCh2KXx8KGM9Zi5uZXN0ZWRQcm9wZXJ0eSh1LHYpLmdldCgpLChjPW9bdl18fGYubmVzdGVkUHJvcGVydHkodSx2KS5nZXQoKSkmJihvW3ZdPWMpKSx2b2lkIDAhPT1jKWJyZWFrfWlmKHZvaWQgMD09PWMmJm4pcmV0dXJuIG4uY291bnQ8bi5tYXgmJihmLndhcm4oIlZhcmlhYmxlICciK3YrIicgaW4gIituLm5hbWUrIiBjb3VsZCBub3QgYmUgZm91bmQhIiksYz10KSxuLmNvdW50PT09bi5tYXgmJmYud2FybigiVG9vIG1hbnkgIituLm5hbWUrIiB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIiksbi5jb3VudCsrLHQ7aWYobCl7dmFyIHk7aWYoIjoiPT09bFswXSYmKGM9KHk9cj9yLm51bWJlckZvcm1hdDpmLm51bWJlckZvcm1hdCkobC5yZXBsYWNlKEYsIiIpKShjKSksInwiPT09bFswXSl7eT1yP3IudGltZUZvcm1hdDppO3ZhciB4PWYuZGF0ZVRpbWUybXMoYyk7Yz1mLmZvcm1hdERhdGUoeCxsLnJlcGxhY2UoRiwiIiksITEseSl9fWVsc2V7dmFyIGI9disiTGFiZWwiO2UuaGFzT3duUHJvcGVydHkoYikmJihjPWVbYl0pfXJldHVybiBnJiYoYz0iKCIrYysiKSIsKHB8fGQpJiYoYz0iICIrYyksKG18fGQpJiYoYys9IiAiKSksY30pKX1mLnN1YnBsb3RTb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSsxLG49MCxpPTAsYT0wO2E8cjthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKXx8MCxzPWUuY2hhckNvZGVBdChhKXx8MCxsPW8+PTQ4JiZvPD01NyxjPXM+PTQ4JiZzPD01NztpZihsJiYobj0xMCpuK28tNDgpLGMmJihpPTEwKmkrcy00OCksIWx8fCFjKXtpZihuIT09aSlyZXR1cm4gbi1pO2lmKG8hPT1zKXJldHVybiBvLXN9fXJldHVybiBpLW59O3ZhciBOPTJlOTtmLnNlZWRQc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXtOPTJlOX0sZi5wc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXt2YXIgdD1OO3JldHVybiBOPSg2OTA2OSpOKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoTi10KTw0Mjk0OTY3Mjk/Zi5wc2V1ZG9SYW5kb20oKTpOLzQyOTQ5NjcyOTZ9LGYuZmlsbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0saT1mLmV4dHJhY3RPcHRpb24odCxlLCJodHgiLCJob3ZlcnRleHQiKTtpZihmLmlzVmFsaWRUZXh0VmFsdWUoaSkpcmV0dXJuIG4oaSk7dmFyIGE9Zi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGYuaXNWYWxpZFRleHRWYWx1ZShhKT9uKGEpOnZvaWQgMH0sZi5pc1ZhbGlkVGV4dFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dH0sZi5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7ZT1lfHwwO2Zvcih2YXIgcj0oTWF0aC5yb3VuZCgxMDAqdCpNYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coLjEsZSkpLnRvRml4ZWQoZSkrIiUiLG49MDtuPGU7bisrKS0xIT09ci5pbmRleE9mKCIuIikmJihyPShyPXIucmVwbGFjZSgiMCUiLCIlIikpLnJlcGxhY2UoIi4lIiwiJSIpKTtyZXR1cm4gcn0sZi5pc0hpZGRlbj1mdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfSxmLnN0clRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fHxlPyJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIjoiIn0sZi5zdHJSb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InJvdGF0ZSgiK3QrIikiOiIifSxmLnN0clNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dD8ic2NhbGUoIit0KyIpIjoiIn0sZi5nZXRUZXh0VHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9DZW50ZXIscj10LnRleHRYLG49dC50ZXh0WSxpPXQudGFyZ2V0WCxhPXQudGFyZ2V0WSxvPXQuYW5jaG9yWHx8MCxzPXQuYW5jaG9yWXx8MCxsPXQucm90YXRlLGM9dC5zY2FsZTtyZXR1cm4gYz9jPjEmJihjPTEpOmM9MCxmLnN0clRyYW5zbGF0ZShpLWMqKHIrbyksYS1jKihuK3MpKStmLnN0clNjYWxlKGMpKyhsPyJyb3RhdGUoIitsKyhlPyIiOiIgIityKyIgIituKSsiKSI6IiIpfSxmLmVuc3VyZVVuaWZvcm1Gb250U2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWYuZXh0ZW5kRmxhdCh7fSxlKTtyZXR1cm4gci5zaXplPU1hdGgubWF4KGUuc2l6ZSx0Ll9mdWxsTGF5b3V0LnVuaWZvcm10ZXh0Lm1pbnNpemV8fDApLHJ9LGYuam9pbjI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjE/dC5zbGljZSgwLC0xKS5qb2luKGUpK3IrdFtuLTFdOnQuam9pbihlKX0sZi5iaWdGb250PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDEuMip0KX07dmFyIGo9Zi5nZXRGaXJlZm94VmVyc2lvbigpLFU9bnVsbCE9PWomJmo8ODY7Zi5nZXRQb3NpdGlvbkZyb21EM0V2ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFU/W24uZXZlbnQubGF5ZXJYLG4uZXZlbnQubGF5ZXJZXTpbbi5ldmVudC5vZmZzZXRYLG4uZXZlbnQub2Zmc2V0WV19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi9hbmNob3JfdXRpbHMiOjQ3OCwiLi9hbmdsZXMiOjQ3OSwiLi9hcnJheSI6NDgwLCIuL2NsZWFuX251bWJlciI6NDgxLCIuL2NsZWFyX3Jlc3BvbnNpdmUiOjQ4MywiLi9jb2VyY2UiOjQ4NCwiLi9kYXRlcyI6NDg1LCIuL2RvbSI6NDg2LCIuL2V4dGVuZCI6NDg4LCIuL2ZpbHRlcl91bmlxdWUiOjQ4OSwiLi9maWx0ZXJfdmlzaWJsZSI6NDkwLCIuL2dlb21ldHJ5MmQiOjQ5MywiLi9pZGVudGl0eSI6NDk2LCIuL2luY3JlbWVudCI6NDk3LCIuL2lzX3BsYWluX29iamVjdCI6NDk5LCIuL2tleWVkX2NvbnRhaW5lciI6NTAwLCIuL2xvY2FsaXplIjo1MDEsIi4vbG9nZ2VycyI6NTAyLCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo1MDMsIi4vbWF0cml4Ijo1MDQsIi4vbW9kIjo1MDUsIi4vbmVzdGVkX3Byb3BlcnR5Ijo1MDYsIi4vbm9vcCI6NTA3LCIuL25vdGlmaWVyIjo1MDgsIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiOjUxMiwiLi9wdXNoX3VuaXF1ZSI6NTEzLCIuL3JlZ2V4Ijo1MTUsIi4vcmVsYXRpdmVfYXR0ciI6NTE2LCIuL3JlbGlua19wcml2YXRlIjo1MTcsIi4vc2VhcmNoIjo1MTgsIi4vc29ydF9vYmplY3Rfa2V5cyI6NTIxLCIuL3N0YXRzIjo1MjIsIi4vdGhyb3R0bGUiOjUyNSwiLi90b19sb2dfcmFuZ2UiOjUyNiwiQHBsb3RseS9kMyI6NTgsImQzLWZvcm1hdCI6MTA3LCJkMy10aW1lLWZvcm1hdCI6MTE1LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KS5oYXNPd25Qcm9wZXJ0eSgiaGFzT3duUHJvcGVydHkiKX19LHt9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW58fChjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lKSxofSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBoO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGguc2V0KHQsbnVsbCk7aWYoZil7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gaH0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lKyJbIitpKyJdIixzW2ldPygxJmNbaV0mJihvW3QrIi4iK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCsiLiIrYV09Zj80JmNbaV0/bnVsbDpzW2ldW2FdOjQmY1tpXT9udWxsOm4oc1tpXSxhKS5nZXQoKSkpOm9bdF09bnVsbDtyZXR1cm4gb319O3JldHVybiBofX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6NTA2fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2NvbnRleHQubG9jYWxlLGk9MDtpPDI7aSsrKXtmb3IodmFyIGE9dC5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgcz0oYVtyXXx8e30pLmRpY3Rpb25hcnk7aWYocyl7dmFyIGw9c1tlXTtpZihsKXJldHVybiBsfWE9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0seyIuLi9yZWdpc3RyeSI6NjMzfV0sNTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxpPXQoIi4vbm90aWZpZXIiKSxhPWUuZXhwb3J0cz17fTthLmxvZz1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4xKXt2YXIgZT1bIkxPRzoiXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZS5wdXNoKGFyZ3VtZW50c1t0XSk7Y29uc29sZS50cmFjZS5hcHBseShjb25zb2xlLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxhLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjApe3ZhciBlPVsiRVJST1I6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO2NvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxlKX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspci5wdXNoKGFyZ3VtZW50c1t0XSk7aShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo1MzYsIi4vbm90aWZpZXIiOjUwOH1dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10LnNlbGVjdEFsbCgiZy4iK3IucmVwbGFjZSgvXHMvZywiLiIpKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHIpLGkub3JkZXIoKTt2YXIgYT10LmNsYXNzZWQoInJhbmdlcGxvdCIpPyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIjtyZXR1cm4gaS5lYWNoKChmdW5jdGlvbih0KXt0WzBdW2FdPW4uc2VsZWN0KHRoaXMpfSkpLGl9fSx7IkBwbG90bHkvZDMiOjU4fV0sNTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1hdDQiKTtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5M0RUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdLGVbMl18fDBdO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sblsyXSwxXSkuc2xpY2UoMCwzKX19LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19LHIuY29udmVydENzc01hdHJpeD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10Lmxlbmd0aDtpZigxNj09PWUpcmV0dXJuIHQ7aWYoNj09PWUpcmV0dXJuW3RbMF0sdFsxXSwwLDAsdFsyXSx0WzNdLDAsMCwwLDAsMSwwLHRbNF0sdFs1XSwwLDFdfXJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXX0sci5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBuLmludmVydChlLHQpLFtbZVswXSxlWzFdLGVbMl0sZVszXV0sW2VbNF0sZVs1XSxlWzZdLGVbN11dLFtlWzhdLGVbOV0sZVsxMF0sZVsxMV1dLFtlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV1dfX0seyJnbC1tYXQ0IjoyMDV9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw1MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuLG8scyxsLGM9dDtmb3Iocz0wO3M8ZS5sZW5ndGgtMTtzKyspe2lmKC0xPT09KHI9ZVtzXSkpe2ZvcihuPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09YShjW2xdLGUuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKG49ITEpO3JldHVybiBuP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIHImJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tyXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tlW3NdXSkpcmV0dXJuIG99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGM9ZS5zcGxpdCgiLiIpO3M8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssYy5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6bCh0LGMsZSksZ2V0OmEodCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBvPS8oXnxcLilhcmdzXFsvO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKG8pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxvLGw9dCxoPSIiLHA9W1t0LGhdXSxkPXMobixyKTtmb3Iobz0wO288ZS5sZW5ndGgtMTtvKyspe2lmKCJudW1iZXIiPT10eXBlb2YoYT1lW29dKSYmIWkobCkpdGhyb3ciYXJyYXkgaW5kZXggYnV0IGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkiO2lmKC0xPT09YSl7aWYoZD0hdShsLGUuc2xpY2UobysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighZihsLGEsZVtvKzFdLGQpKWJyZWFrO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW2FdKXx8bnVsbD09PWwpdGhyb3ciY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3QiO2g9YyhoLGEpLHAucHVzaChbbCxoXSl9aWYoZCl7aWYobz09PWUubGVuZ3RoLTEmJihkZWxldGUgbFtlW29dXSxBcnJheS5pc0FycmF5KGwpJiYrZVtvXT09bC5sZW5ndGgtMSkpZm9yKDtsLmxlbmd0aCYmdm9pZCAwPT09bFtsLmxlbmd0aC0xXTspbC5wb3AoKX1lbHNlIGxbZVtvXV09bn19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj0iWyIrZSsiXSI6dCYmKHI9Ii4iK2UpLHQrcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLG89aShyKSxjPSEwLHU9cixoPW4ucmVwbGFjZSgiLTEiLDApLHA9IW8mJnMocixoKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyloPW4ucmVwbGFjZSgiLTEiLGEpLG8mJihwPXModT1yW2Elci5sZW5ndGhdLGgpKSxwJiYoYz0hMSksZih0LGEsZCxwKSYmbCh0W2FdLGUsbi5yZXBsYWNlKCItMSIsYSkpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHsiLi9hcnJheSI6NDgwLCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw1MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTtpLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtpLnRyYW5zaXRpb24oKS5jYWxsKHMpfSkpO2Zvcih2YXIgYT1pLmFwcGVuZCgicCIpLG89dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxsPTA7bDxvLmxlbmd0aDtsKyspbCYmYS5hcHBlbmQoImJyIiksYS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bbF0pOyJzdGljayI9PT1lP2kudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSkpfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHsiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo1MTl9XSw1MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+cykmJighZXx8IWwodCkpfTpmdW5jdGlvbih0LGUpe3ZhciBsPXRbMF0sYz10WzFdO2lmKGw9PT1pfHxsPG58fGw+YXx8Yz09PWl8fGM8b3x8Yz5zKXJldHVybiExO3ZhciB1LGYsaCxwLGQsbT1yLmxlbmd0aCxnPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8bTt1KyspaWYoZj1nLGg9dixnPXJbdV1bMF0sdj1yW3VdWzFdLCEobDwocD1NYXRoLm1pbihmLGcpKXx8bD5NYXRoLm1heChmLGcpfHxjPk1hdGgubWF4KGgsdikpKWlmKGM8TWF0aC5taW4oaCx2KSlsIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPWc9PT1mP2M6aCsobC1mKSoodi1oKS8oZy1mKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZsIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDpjLGRlZ2VuZXJhdGU6dX19LGEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfSxhLmZpbHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPVt0WzBdXSxuPTAsaT0wO2Z1bmN0aW9uIG8obyl7dC5wdXNoKG8pO3ZhciBzPXIubGVuZ3RoLGw9bjtyLnNwbGljZShpKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxhLmlzU2VnbWVudEJlbnQodCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZvKHQucG9wKCkpO3JldHVybnthZGRQdDpvLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4vbWF0cml4Ijo1MDR9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQscz0hMDtyZXR1cm4gby5fZ2xjYW52YXMuZWFjaCgoZnVuY3Rpb24obil7aWYobi5yZWdsKW4ucmVnbC5wcmVsb2FkQ2FjaGVkQ29kZShhKTtlbHNlIGlmKCFuLnBpY2t8fG8uX2hhcygicGFyY29vcmRzIikpe3RyeXtuLnJlZ2w9aSh7Y2FudmFzOnRoaXMsYXR0cmlidXRlczp7YW50aWFsaWFzOiFuLnBpY2sscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwfSxwaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb3x8ci5kZXZpY2VQaXhlbFJhdGlvLGV4dGVuc2lvbnM6ZXx8W10sY2FjaGVkQ29kZTphfHx7fX0pfWNhdGNoKHQpe3M9ITF9bi5yZWdsfHwocz0hMSkscyYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjpuLmtleX0pfSksITEpfX0pKSxzfHxuKHtjb250YWluZXI6by5fZ2xjb250YWluZXIubm9kZSgpfSksc319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjUyMCxyZWdsOjI3OH1dLDUxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiaXMtbW9iaWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciIT10eXBlb2YoZT10JiZ0Lmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT90LnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciB0OyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gdH0oKSkpcmV0dXJuITA7dmFyIHI9aSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50IjplfX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGE9ZS5zcGxpdCgiICIpLG89MTtvPGEubGVuZ3RoO28rKyl7aWYoLTEhPT1hW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgcz1vLTE7cz4tMTtzLS0pe3ZhciBsPWFbc107aWYoIlZlcnNpb24vIj09PWwuc3Vic3RyKDAsOCkpe3ZhciBjPWwuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxODUsImlzLW1vYmlsZSI6MjI5fV0sNTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHsiLi4vbGliIjo0OTgsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo1MzZ9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHwiIikrKHI/IiI6IiQiKSxhPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChhKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2kpOm5ldyBSZWdFeHAoYSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIraSl9fSx7fV0sNTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGk9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw1MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBhIGluIHIpe3ZhciBvPXJbYV0scz1lW2FdO2lmKHMhPT1vKWlmKCJfIj09PWEuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWF8fCJpZHMiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHsiLi9hcnJheSI6NDgwLCIuL2lzX3BsYWluX29iamVjdCI6NDk5fV0sNTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vaWRlbnRpdHkiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLG8sZj0wLGg9ZS5sZW5ndGgscD0wLGQ9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3Iobz1kPj0wP3I/czpsOnI/dTpjLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtmPGgmJnArKzwxMDA7KW8oZVthPU1hdGguZmxvb3IoKGYraCkvMildLHQpP2Y9YSsxOmg9YTtyZXR1cm4gcD45MCYmaS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxyLnNvcnRlckRlcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLXR9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5zbGljZSgpO2ZvcihuLnNvcnQoci5zb3J0ZXJBc2MpLGU9bi5sZW5ndGgtMTtlPi0xJiZuW2VdPT09bztlLS0pO2Zvcih2YXIgaSxhPW5bZV0tblswXXx8MSxzPWEvKGV8fDEpLzFlNCxsPVtdLGM9MDtjPD1lO2MrKyl7dmFyIHU9bltjXSxmPXUtaTt2b2lkIDA9PT1pPyhsLnB1c2godSksaT11KTpmPnMmJihhPU1hdGgubWluKGEsZiksbC5wdXNoKHUpLGk9dSl9cmV0dXJue3ZhbHM6bCxtaW5EaWZmOmF9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuL2lkZW50aXR5Ijo0OTYsIi4vbG9nZ2VycyI6NTAyLCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSkpLGUmJnQuY2xhc3NlZCgiY3Vyc29yLSIrZSwhMCl9fSx7fV0sNTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0ibm8td2ViZ2wiLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlWyJiYWNrZ3JvdW5kLWNvbG9yIl09bi5saWdodExpbmUsci5zdHlsZVsiei1pbmRleCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gYS50ZXh0Q29udGVudD0iV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mbyIsYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGEuc3R5bGUudG9wPSI1MCUiLGEuc3R5bGUubGVmdD0iNTAlIixhLnN0eWxlLmhlaWdodD0iMzAlIixhLnN0eWxlLndpZHRoPSI1MCUiLGEuc3R5bGUubWFyZ2luPSItMTUlIDAgMCAtMjUlIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9IiNGRkZGRkYiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbigiaHR0cHM6Ly9nZXQud2ViZ2wub3JnIil9LCExfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjF9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5zb3J0KCl9fSx7fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9KSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9KSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLm1lZGlhbj1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycChlLC41KX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NDgwLCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjo4NH1dLDUyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxtKXt2YXIgTT10LnRleHQoKSxTPSF0LmF0dHIoImRhdGEtbm90ZXgiKSYmZSYmZS5fY29udGV4dC50eXBlc2V0TWF0aCYmInVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiZNLm1hdGNoKGwpLEM9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUMuZW1wdHkoKSl7dmFyIFA9dC5hdHRyKCJjbGFzcyIpP3QuYXR0cigiY2xhc3MiKS5zcGxpdCgiICIpWzBdOiJ0ZXh0IjtyZXR1cm4gUCs9Ii1tYXRoIixDLnNlbGVjdEFsbCgic3ZnLiIrUCkucmVtb3ZlKCksQy5zZWxlY3RBbGwoImcuIitQKyItZ3JvdXAiKS5yZW1vdmUoKSx0LnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6TSwiZGF0YS1tYXRoIjoiTiJ9KSxTPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Quc3R5bGUoImRpc3BsYXkiLCJub25lIik7dmFyIHI9cGFyc2VJbnQodC5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApLG89e2ZvbnRTaXplOnJ9OyFmdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGwsaD1wYXJzZUludCgoTWF0aEpheC52ZXJzaW9ufHwiIikuc3BsaXQoIi4iKVswXSk7aWYoMiE9PWgmJjMhPT1oKXJldHVybiB2b2lkIGkud2FybigiTm8gTWF0aEpheCB2ZXJzaW9uOiIsTWF0aEpheC52ZXJzaW9uKTt2YXIgcD1mdW5jdGlvbigpe3ZhciByPSJtYXRoLW91dHB1dC0iK2kucmFuZHN0cih7fSw2NCksYT0obD1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cih7aWQ6cn0pLnN0eWxlKHt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtc2l6ZSI6ZS5mb250U2l6ZSsicHgifSkudGV4dCh0LnJlcGxhY2UoYywiXFxsdCAiKS5yZXBsYWNlKHUsIlxcZ3QgIikpKS5ub2RlKCk7cmV0dXJuIDI9PT1oP01hdGhKYXguSHViLlR5cGVzZXQoYSk6TWF0aEpheC50eXBlc2V0KFthXSl9LGQ9ZnVuY3Rpb24oKXt2YXIgZT1sLnNlbGVjdCgyPT09aD8iLk1hdGhKYXhfU1ZHIjoiLk1hdGhKYXgiKSxhPSFlLmVtcHR5KCkmJmwuc2VsZWN0KCJzdmciKS5ub2RlKCk7aWYoYSl7dmFyIG8scz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO289Mj09PWg/bi5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTplLnNlbGVjdCgiZGVmcyIpLHIoZSxvLHMpfWVsc2UgaS5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLHQpLHIoKTtsLnJlbW92ZSgpfTsyPT09aD9NYXRoSmF4Lkh1Yi5RdWV1ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbz1pLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxzPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHRleDJqYXg6e2lubGluZU1hdGg6Zn0sZGlzcGxheUFsaWduOiJsZWZ0In0pfSksKGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oYT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSkscCxkLChmdW5jdGlvbigpe2lmKCJTVkciIT09YSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoYSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSkpOjM9PT1oJiYobz1pLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5jb25maWcpLE1hdGhKYXguY29uZmlnLnRleHx8KE1hdGhKYXguY29uZmlnLnRleD17fSksTWF0aEpheC5jb25maWcudGV4LmlubGluZU1hdGg9Ziwic3ZnIiE9PShhPU1hdGhKYXguY29uZmlnLnN0YXJ0dXAub3V0cHV0KSYmKE1hdGhKYXguY29uZmlnLnN0YXJ0dXAub3V0cHV0PSJzdmciKSxNYXRoSmF4LnN0YXJ0dXAuZGVmYXVsdFJlYWR5KCksTWF0aEpheC5zdGFydHVwLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtwKCksZCgpLCJzdmciIT09YSYmKE1hdGhKYXguY29uZmlnLnN0YXJ0dXAub3V0cHV0PWEpLE1hdGhKYXguY29uZmlnPW99KSkpfShTWzJdLG8sKGZ1bmN0aW9uKG4saSxvKXtDLnNlbGVjdEFsbCgic3ZnLiIrUCkucmVtb3ZlKCksQy5zZWxlY3RBbGwoImcuIitQKyItZ3JvdXAiKS5yZW1vdmUoKTt2YXIgcz1uJiZuLnNlbGVjdCgic3ZnIik7aWYoIXN8fCFzLm5vZGUoKSlyZXR1cm4gSSgpLHZvaWQgZSgpO3ZhciBsPUMuYXBwZW5kKCJnIikuY2xhc3NlZChQKyItZ3JvdXAiLCEwKS5hdHRyKHsicG9pbnRlci1ldmVudHMiOiJub25lIiwiZGF0YS11bmZvcm1hdHRlZCI6TSwiZGF0YS1tYXRoIjoiWSJ9KTtsLm5vZGUoKS5hcHBlbmRDaGlsZChzLm5vZGUoKSksaSYmaS5ub2RlKCkmJnMubm9kZSgpLmluc2VydEJlZm9yZShpLm5vZGUoKS5jbG9uZU5vZGUoITApLHMubm9kZSgpLmZpcnN0Q2hpbGQpO3ZhciBjPW8ud2lkdGgsdT1vLmhlaWdodDtzLmF0dHIoe2NsYXNzOlAsaGVpZ2h0OnUscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gbWVldCJ9KS5zdHlsZSh7b3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7dmFyIGY9dC5ub2RlKCkuc3R5bGUuZmlsbHx8ImJsYWNrIixoPXMuc2VsZWN0KCJnIik7aC5hdHRyKHtmaWxsOmYsc3Ryb2tlOmZ9KTt2YXIgcD1oLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXAud2lkdGgsZz1wLmhlaWdodDsoZD5jfHxnPnUpJiYocy5zdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKSxkPShwPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS53aWR0aCxnPXAuaGVpZ2h0KTt2YXIgdj0rdC5hdHRyKCJ4IikseT0rdC5hdHRyKCJ5IikseD0tKHJ8fHQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkvNDtpZigieSI9PT1QWzBdKWwuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLHYseV0rIikiK2EoLWQvMix4LWcvMil9KTtlbHNlIGlmKCJsIj09PVBbMF0peT14LWcvMjtlbHNlIGlmKCJhIj09PVBbMF0mJjAhPT1QLmluZGV4T2YoImF0aXRsZSIpKXY9MCx5PXg7ZWxzZXt2YXIgYj10LmF0dHIoInRleHQtYW5jaG9yIik7di09ZCooIm1pZGRsZSI9PT1iPy41OiJlbmQiPT09Yj8xOjApLHk9eSt4LWcvMn1zLmF0dHIoe3g6dix5Onl9KSxtJiZtLmNhbGwodCxsKSxlKGwpfSkpfSkpKTpJKCksdH1mdW5jdGlvbiBJKCl7Qy5lbXB0eSgpfHwoUD10LmF0dHIoImNsYXNzIikrIi1tYXRoIixDLnNlbGVjdCgic3ZnLiIrUCkucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZShnLCIgIik7dmFyIHIsYT0hMSxsPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsInRzcGFuIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqcysiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxyPWU7dmFyIGk9bDtpZihsPVt7bm9kZTplfV0saS5sZW5ndGg+MSlmb3IodmFyIGE9MTthPGkubGVuZ3RoO2ErKylmKGlbYV0pfWZ1bmN0aW9uIGYodCl7dmFyIGUsaT10LnR5cGUsYT17fTtpZigiYSI9PT1pKXtlPSJhIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKGE9eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PXN8fCJfIiE9PXMuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6cywieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKGEub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihhLnN0eWxlPXQuc3R5bGUpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZyxlKTtpZigic3VwIj09PWl8fCJzdWIiPT09aSl7bShyLCJcdTIwMGIiKSxyLmFwcGVuZENoaWxkKGYpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTttKGgsIlx1MjAwYiIpLG4uc2VsZWN0KGgpLmF0dHIoImR5IixkW2ldKSxhLmR5PXBbaV0sci5hcHBlbmRDaGlsZChmKSxyLmFwcGVuZENoaWxkKGgpfWVsc2Ugci5hcHBlbmRDaGlsZChmKTtuLnNlbGVjdChmKS5hdHRyKGEpLHI9dC5ub2RlPWYsbC5wdXNoKHQpfWZ1bmN0aW9uIG0odCxlKXt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiBNKHQpe2lmKDEhPT1sLmxlbmd0aCl7dmFyIG49bC5wb3AoKTt0IT09bi50eXBlJiZpLmxvZygiU3RhcnQgdGFnIDwiK24udHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8Iit0KyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLGUpLHI9bFtsLmxlbmd0aC0xXS5ub2RlfWVsc2UgaS5sb2coIklnbm9yaW5nIHVuZXhwZWN0ZWQgZW5kIHRhZyA8LyIrdCsiPi4iLGUpfXgudGVzdChlKT91KCk6KHI9dCxsPVt7bm9kZTp0fV0pO2Zvcih2YXIgUz1lLnNwbGl0KHYpLEM9MDtDPFMubGVuZ3RoO0MrKyl7dmFyIFA9U1tDXSxJPVAubWF0Y2goeSksTz1JJiZJWzJdLnRvTG93ZXJDYXNlKCksej1oW09dO2lmKCJiciI9PT1PKXUoKTtlbHNlIGlmKHZvaWQgMD09PXopbShyLEUoUCkpO2Vsc2UgaWYoSVsxXSlNKE8pO2Vsc2V7dmFyIEQ9SVs0XSxSPXt0eXBlOk99LEY9ayhELGIpO2lmKEY/KEY9Ri5yZXBsYWNlKEEsIiQxIGZpbGw6IikseiYmKEYrPSI7Iit6KSk6eiYmKEY9eiksRiYmKFIuc3R5bGU9RiksImEiPT09Tyl7YT0hMDt2YXIgQj1rKEQsXyk7aWYoQil7dmFyIE49TChCKTtOJiYoUi5ocmVmPU4sUi50YXJnZXQ9ayhELHcpfHwiX2JsYW5rIixSLnBvcHVwPWsoRCxUKSl9fWYoUil9fXJldHVybiBhfSh0Lm5vZGUoKSxNKSYmdC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxyLnBvc2l0aW9uVGV4dCh0KSxtJiZtLmNhbGwodCl9fTt2YXIgYz0vKDx8Jmx0O3wmIzYwOykvZyx1PS8oPnwmZ3Q7fCYjNjI7KS9nO3ZhciBmPVtbIiQiLCIkIl0sWyJcXCgiLCJcXCkiXV07dmFyIGg9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxwPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LGQ9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxtPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86IiwiIix2b2lkIDAsIjoiXSxnPXIuTkVXTElORVM9LyhcclxuP3xcbikvZyx2PS8oPFtePD5dKj4pLyx5PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseD0vPGJyKFxzKy4qKT8+L2k7ci5CUl9UQUdfQUxMPS88YnIoXHMrLiopPz4vZ2k7dmFyIGI9LyhefFtccyInXSlzdHlsZVxzKj1ccyooIihbXiJdKik7PyJ8JyhbXiddKik7PycpL2ksXz0vKF58W1xzIiddKWhyZWZccyo9XHMqKCIoW14iXSopInwnKFteJ10qKScpL2ksdz0vKF58W1xzIiddKXRhcmdldFxzKj1ccyooIihbXiJcc10qKSJ8JyhbXidcc10qKScpL2ksVD0vKF58W1xzIiddKXBvcHVwXHMqPVxzKigiKFtcdz0sXSopInwnKFtcdz0sXSopJykvaTtmdW5jdGlvbiBrKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmRShuKX12YXIgQT0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PShlPWV8fHt9KS5sZW4mJi0xIT09ZS5sZW4/ZS5sZW46MS8wLG49dm9pZCAwIT09ZS5hbGxvd2VkVGFncz9lLmFsbG93ZWRUYWdzOlsiYnIiXSxpPSIuLi4iLmxlbmd0aCxhPXQuc3BsaXQodiksbz1bXSxzPSIiLGw9MCxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj11Lm1hdGNoKHkpLGg9ZiYmZlsyXS50b0xvd2VyQ2FzZSgpO2lmKGgpLTEhPT1uLmluZGV4T2YoaCkmJihvLnB1c2godSkscz1oKTtlbHNle3ZhciBwPXUubGVuZ3RoO2lmKGwrcDxyKW8ucHVzaCh1KSxsKz1wO2Vsc2UgaWYobDxyKXt2YXIgZD1yLWw7cyYmKCJiciIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKSsiLi4uIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9IiJ9fXJldHVybiBvLmpvaW4oIiIpfTt2YXIgTT17bXU6Ilx1MDNiYyIsYW1wOiImIixsdDoiPCIsZ3Q6Ij4iLG5ic3A6Ilx4YTAiLHRpbWVzOiJceGQ3IixwbHVzbW46Ilx4YjEiLGRlZzoiXHhiMCJ9LFM9LyYoI1xkK3wjeFtcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5yZXBsYWNlKFMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKCIjIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfSgieCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pKX1mdW5jdGlvbiBMKHQpe3ZhciBlPWVuY29kZVVSSShkZWNvZGVVUkkodCkpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJlZj10LG4uaHJlZj1lO3ZhciBpPXIucHJvdG9jb2wsYT1uLnByb3RvY29sO3JldHVybi0xIT09bS5pbmRleE9mKGkpJiYtMSE9PW0uaW5kZXhPZihhKT9lOiIifWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGEsbyxzPXIuaG9yaXpvbnRhbEFsaWduLGw9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixjPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGE9ImJvdHRvbSI9PT1sP2Z1bmN0aW9uKCl7cmV0dXJuIGMuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3ArKGMuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBjLnRvcH0sbz0icmlnaHQiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLmxlZnQrKGMud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0fSxmdW5jdGlvbigpe249dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHQ9bygpLXUubGVmdCxlPWEoKS11LnRvcCxzPXIuZ2R8fHt9O2lmKHIuZ2Qpe3MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHMpO3ZhciBsPWkuYXBwbHkzRFRyYW5zZm9ybShzLl9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKHQsZSk7dD1sWzBdLGU9bFsxXX1yZXR1cm4gdGhpcy5zdHlsZSh7dG9wOmUrInB4IixsZWZ0OnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLnNhbml0aXplSFRNTD1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShnLCIgIik7Zm9yKHZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxyPWUsaT1bXSxhPXQuc3BsaXQodiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cy5tYXRjaCh5KSxjPWwmJmxbMl0udG9Mb3dlckNhc2UoKTtpZihjIGluIGgpaWYobFsxXSlpLmxlbmd0aCYmKHI9aS5wb3AoKSk7ZWxzZXt2YXIgdT1sWzRdLGY9ayh1LGIpLHA9Zj97c3R5bGU6Zn06e307aWYoImEiPT09Yyl7dmFyIGQ9ayh1LF8pO2lmKGQpe3ZhciBtPUwoZCk7aWYobSl7cC5ocmVmPW07dmFyIHg9ayh1LHcpO3gmJihwLnRhcmdldD14KX19fXZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYyk7ci5hcHBlbmRDaGlsZChUKSxuLnNlbGVjdChUKS5hdHRyKHApLHI9VCxpLnB1c2goVCl9ZWxzZSByLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEUocykpKX1yZXR1cm4gZS5pbm5lckhUTUx9LHIubGluZUNvdW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoIngiLGUpLG89aSgieSIscik7InRleHQiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5hdHRyKHt4OmEseTpvfSl9KSl9O3IubWFrZVRleHRTaGFkb3c9ZnVuY3Rpb24odCl7dmFyIGU9IjFweCAiLHI9IjFweCAiLG49IjFweCAiO3JldHVybiBlK3Irbit0KyIsIC0iK2UrIi0iK3Irbit0KyIsICIrZSsiLSIrcituK3QrIiwgLSIrZStyK24rdH0sci5tYWtlRWRpdGFibGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdkLGk9ZS5kZWxlZ2F0ZSxhPW4uZGlzcGF0Y2goImVkaXQiLCJpbnB1dCIsImNhbmNlbCIpLG89aXx8dDtpZih0LnN0eWxlKHsicG9pbnRlci1ldmVudHMiOmk/Im5vbmUiOiJhbGwifSksMSE9PXQuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiYm9vIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKSxzPXQubm9kZSgpLnN0eWxlLGM9cGFyc2VGbG9hdChzLmZvbnRTaXplfHwxMiksdT1lLnRleHQ7dm9pZCAwPT09dSYmKHU9dC5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpzLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fHMuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQodSkuY2FsbChDKHQsaSxlKSkub24oImJsdXIiLChmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkpLm9uKCJmb2N1cyIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSkpfSkpLm9uKCJrZXl1cCIsKGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pKS5vbigia2V5ZG93biIsKGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pKS5jYWxsKGwpfSgpLHQuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBpLHM9by5hdHRyKCJjbGFzcyIpOyhpPXM/Ii4iK3Muc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbigiY2xpY2siLHMpLG4ucmViaW5kKHQsYSwib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi9saWIiOjQ5OCwiQHBsb3RseS9kMyI6NTh9XSw1MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSksZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjU4MiwidG9wb2pzb24tY2xpZW50IjozMTB9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sNTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjYzM31dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109aChzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1oKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGYodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6NDk4fV0sNTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsZj1sLmdldEZyb21UcmFjZSxoPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbiwhMCkpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBtKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIGcodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiB2KHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LG09T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtpZihhJiZhLnRlc3QoZykpe3ZhciB2PXRbZ107di5hbmNob3ImJiJmcmVlIiE9PXYuYW5jaG9yJiYodi5hbmNob3I9dSh2LmFuY2hvcikpLHYub3ZlcmxheWluZyYmKHYub3ZlcmxheWluZz11KHYub3ZlcmxheWluZykpLHYudHlwZXx8KHYuaXNkYXRlP3YudHlwZT0iZGF0ZSI6di5pc2xvZz92LnR5cGU9ImxvZyI6ITE9PT12LmlzZGF0ZSYmITE9PT12LmlzbG9nJiYodi50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PXYuYXV0b3JhbmdlJiYidG96ZXJvIiE9PXYuYXV0b3JhbmdlfHwodi5hdXRvcmFuZ2U9ITAsdi5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSB2LmlzbG9nLGRlbGV0ZSB2LmlzZGF0ZSxkZWxldGUgdi5jYXRlZ29yaWVzLHkodiwiZG9tYWluIikmJmRlbGV0ZSB2LmRvbWFpbix2b2lkIDAhPT12LmF1dG90aWNrJiYodm9pZCAwPT09di50aWNrbW9kZSYmKHYudGlja21vZGU9di5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSB2LmF1dG90aWNrKSxkKHYpfWVsc2UgaWYobCYmbC50ZXN0KGcpKXtkKHRbZ10ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3QoZykpe3ZhciB4PXRbZ107ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3QoZykpe3ZhciBiPXRbZ10sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxUPV9bMV0saz1fWzJdLEE9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPVRbbl0raypBWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OlRbMF0seTpUWzFdLHo6VFsyXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEw9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEw7ZSsrKXt2YXIgQz10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoQykmJihwKEMsInhyZWYiKSxwKEMsInlyZWYiKSl9dmFyIFA9QXJyYXkuaXNBcnJheSh0LmltYWdlcyk/dC5pbWFnZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPFA7ZSsrKXt2YXIgST10LmltYWdlc1tlXTtvLmlzUGxhaW5PYmplY3QoSSkmJihwKEksInhyZWYiKSxwKEksInlyZWYiKSl9dmFyIE89dC5sZWdlbmQ7cmV0dXJuIE8mJihPLng+Mz8oTy54PTEuMDIsTy54YW5jaG9yPSJsZWZ0Iik6Ty54PC0yJiYoTy54PS0uMDIsTy54YW5jaG9yPSJyaWdodCIpLE8ueT4zPyhPLnk9MS4wMixPLnlhbmNob3I9ImJvdHRvbSIpOk8ueTwtMiYmKE8ueT0tLjAyLE8ueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxmPWkuZXJyb3JfeS5jb2xvcnx8KGgoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhaChpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGgoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhaChpLCJwaWUtbGlrZSIpJiYhaChpLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPXYoaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj12KGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgVD0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLGs9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPW0oaS5pbmNyZWFzaW5nKSxNPW0oaS5kZWNyZWFzaW5nKTtpZighMSE9PUEmJiExIT09TSl7dmFyIFM9ZyhBLE0sVCxrKTtTJiYoaS5uYW1lPVMpfWVsc2UhQSYmIU18fGkubmFtZXx8KGkubmFtZT1BfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgTD1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChMKSlzd2l0Y2goTC50eXBlKXtjYXNlImZpbHRlciI6TC5maWx0ZXJzcmMmJihMLnRhcmdldD1MLmZpbHRlcnNyYyxkZWxldGUgTC5maWx0ZXJzcmMpLEwuY2FsZW5kYXImJihMLnZhbHVlY2FsZW5kYXJ8fChMLnZhbHVlY2FsZW5kYXI9TC5jYWxlbmRhciksZGVsZXRlIEwuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoTC5zdHlsZXM9TC5zdHlsZXN8fEwuc3R5bGUsTC5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEwuc3R5bGVzKSl7dmFyIEM9TC5zdHlsZXMsUD1PYmplY3Qua2V5cyhDKTtMLnN0eWxlcz1bXTtmb3IodmFyIEk9MDtJPFAubGVuZ3RoO0krKylMLnN0eWxlcy5wdXNoKHt0YXJnZXQ6UFtJXSx2YWx1ZTpDW1BbSV1dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oInRyYWNlIGluZGV4ICgiLGVbaV0sIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbigiLiIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFwuW15cW1xdXC5dK3xcW1teXFtcXVwuXStcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bIngiLCJ5IiwieiJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9Zih0LGksX1thXSk7aWYocyYmImxvZyIhPT1zLnR5cGUpe3ZhciBsPXMuX25hbWUsYz1zLl9pZC5zdWJzdHIoMSk7aWYoInNjZW5lIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jKyIuIitsfXZhciB1PWwrIi50eXBlIjt2b2lkIDA9PT1yW2xdJiZ2b2lkIDA9PT1yW3VdJiZvLm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHUpLnNldChudWxsKX19fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uL2xpYiI6NDk4LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1MywiLi4vcGxvdHMvcGxvdHMiOjYxNCwiLi4vcmVnaXN0cnkiOjYzMywiZmFzdC1pc251bWVyaWMiOjE4NSwiZ2wtbWF0NC9mcm9tUXVhdCI6MTk1fV0sNTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGxvdF9hcGkiKTtyLl9kb1Bsb3Q9bi5fZG9QbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5fZ3VpUmVzdHlsZT1uLl9ndWlSZXN0eWxlLHIuX2d1aVJlbGF5b3V0PW4uX2d1aVJlbGF5b3V0LHIuX2d1aVVwZGF0ZT1uLl9ndWlVcGRhdGUsci5fc3RvcmVEaXJlY3RHVUlFZGl0PW4uX3N0b3JlRGlyZWN0R1VJRWRpdCxyLnJlYWN0PW4ucmVhY3Qsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLmFkZEZyYW1lcz1uLmFkZEZyYW1lcyxyLmRlbGV0ZUZyYW1lcz1uLmRlbGV0ZUZyYW1lcyxyLmFuaW1hdGU9bi5hbmltYXRlLHIuc2V0UGxvdENvbmZpZz1uLnNldFBsb3RDb25maWcsci50b0ltYWdlPXQoIi4vdG9faW1hZ2UiKSxyLnZhbGlkYXRlPXQoIi4vdmFsaWRhdGUiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi4vc25hcHNob3QvZG93bmxvYWQiKTt2YXIgaT10KCIuL3RlbXBsYXRlX2FwaSIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHsiLi4vc25hcHNob3QvZG93bmxvYWQiOjYzNSwiLi9wbG90X2FwaSI6NTM1LCIuL3RlbXBsYXRlX2FwaSI6NTQwLCIuL3RvX2ltYWdlIjo1NDEsIi4vdmFsaWRhdGUiOjU0Mn1dLDUzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksaT10KCIuLi9saWIvbm9vcCIpLGE9dCgiLi4vbGliL2xvZ2dlcnMiKSxvPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2Mscz10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsbix1KXt2YXIgZj1lLmFzdHIsaD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhdyIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhd09uZSIpLG09bi5yZXBsb3R8fG4ucmVjYWxjfHxoPT09aXx8cD09PWksZz10LmxheW91dCx2PXQuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixmKTt2YXIgeT1yWyIiXVsiIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGYseSksITA7ZS5zZXQoeSl9cmV0dXJuIW0mJihoKGcsdikscCh0KSwhMCl9dmFyIHgsYixfLHcsVCxrLEEsTSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEw9RXx8W10sQz11KHYsZikuZ2V0KCksUD1bXSxJPS0xLE89TC5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxUPU9iamVjdC5rZXlzKHcpLGs9d1siIl0sQT1sKGspLF88MHx8Xz5MLmxlbmd0aC0oQT8wOjEpKWEud2FybigiaW5kZXggb3V0IG9mIHJhbmdlIixmLF8pO2Vsc2UgaWYodm9pZCAwIT09aylULmxlbmd0aD4xJiZhLndhcm4oIkluc2VydGlvbiAmIHJlbW92YWwgYXJlIGluY29tcGF0aWJsZSB3aXRoIGVkaXRzIHRvIHRoZSBzYW1lIGluZGV4LiIsZixfKSxjKGspP1AucHVzaChfKTpBPygiYWRkIj09PWsmJihrPXt9KSxMLnNwbGljZShfLDAsayksQyYmQy5zcGxpY2UoXywwLHt9KSk6YS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZSIsZixfLGspLC0xPT09SSYmKEk9Xyk7ZWxzZSBmb3IoYj0wO2I8VC5sZW5ndGg7YisrKU09ZisiWyIrXysiXS4iLHUoTFtfXSxUW2JdLE0pLnNldCh3W1RbYl1dKTtmb3IoeD1QLmxlbmd0aC0xO3g+PTA7eC0tKUwuc3BsaWNlKFBbeF0sMSksQyYmQy5zcGxpY2UoUFt4XSwxKTtpZihMLmxlbmd0aD9FfHxlLnNldChMKTplLnNldChudWxsKSxtKXJldHVybiExO2lmKGgoZyx2KSxkIT09aSl7dmFyIHo7aWYoLTE9PT1JKXo9UztlbHNle2ZvcihPPU1hdGgubWF4KEwubGVuZ3RoLE8pLHo9W10seD0wO3g8Uy5sZW5ndGgmJiEoKF89U1t4XSk+PUkpO3grKyl6LnB1c2goXyk7Zm9yKHg9STt4PE87eCsrKXoucHVzaCh4KX1mb3IoeD0wO3g8ei5sZW5ndGg7eCsrKWQodCx6W3hdKX1lbHNlIHAodCk7cmV0dXJuITB9fSx7Ii4uL2xpYi9pc19wbGFpbl9vYmplY3QiOjQ5OSwiLi4vbGliL2xvZ2dlcnMiOjUwMiwiLi4vbGliL25vb3AiOjUwNywiLi4vbGliL3NlYXJjaCI6NTE4LCIuLi9yZWdpc3RyeSI6NjMzLCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCI6NTMwfV0sNTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJoYXMtaG92ZXIiKSxvPXQoIi4uL2xpYiIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoIi4uL2xpYi9ldmVudHMiKSxjPXQoIi4uL2xpYi9xdWV1ZSIpLHU9dCgiLi4vcmVnaXN0cnkiKSxmPXQoIi4vcGxvdF9zY2hlbWEiKSxoPXQoIi4uL3Bsb3RzL3Bsb3RzIikscD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbT10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksZz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHY9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx5PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCx4PXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLGI9dCgiLi9tYW5hZ2VfYXJyYXlzIiksXz10KCIuL2hlbHBlcnMiKSx3PXQoIi4vc3Vicm91dGluZXMiKSxUPXQoIi4vZWRpdF90eXBlcyIpLGs9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLkFYX05BTUVfUEFUVEVSTixBPTA7ZnVuY3Rpb24gTSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudC0tOnQuZW1pdCgicGxvdGx5X2FmdGVycGxvdCIpfWZ1bmN0aW9uIFModCxlKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoImJhY2tncm91bmQiLGUpfWNhdGNoKHQpe28uZXJyb3IodCl9fWZ1bmN0aW9uIEUodCxlKXtTKHQsbS5jb21iaW5lKGUsIndoaXRlIikpfWZ1bmN0aW9uIEwodCxlKXtpZighdC5fY29udGV4dCl7dC5fY29udGV4dD1vLmV4dGVuZERlZXAoe30seCk7dmFyIHI9bi5zZWxlY3QoImJhc2UiKTt0Ll9jb250ZXh0Ll9iYXNlVXJsPXIuc2l6ZSgpJiZyLmF0dHIoImhyZWYiKT93aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdOiIifXZhciBpLHMsbCxjPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKHM9T2JqZWN0LmtleXMoZSksaT0wO2k8cy5sZW5ndGg7aSsrKSJlZGl0YWJsZSIhPT0obD1zW2ldKSYmImVkaXRzIiE9PWwmJmwgaW4gYyYmKCJzZXRCYWNrZ3JvdW5kIj09PWwmJiJvcGFxdWUiPT09ZVtsXT9jW2xdPUU6Y1tsXT1lW2xdKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFjLnBsb3RHbFBpeGVsUmF0aW8mJihjLnBsb3RHbFBpeGVsUmF0aW89Yy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgdT1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PXUpZm9yKGMuZWRpdGFibGU9dSxzPU9iamVjdC5rZXlzKGMuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKyljLmVkaXRzW3NbaV1dPXU7aWYoZS5lZGl0cylmb3Iocz1PYmplY3Qua2V5cyhlLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspKGw9c1tpXSlpbiBjLmVkaXRzJiYoYy5lZGl0c1tsXT1lLmVkaXRzW2xdKTtjLl9leHBvcnRlZFBsb3Q9ZS5fZXhwb3J0ZWRQbG90fWMuc3RhdGljUGxvdCYmKGMuZWRpdGFibGU9ITEsYy5lZGl0cz17fSxjLmF1dG9zaXphYmxlPSExLGMuc2Nyb2xsWm9vbT0hMSxjLmRvdWJsZUNsaWNrPSExLGMuc2hvd1RpcHM9ITEsYy5zaG93TGluaz0hMSxjLmRpc3BsYXlNb2RlQmFyPSExKSwiaG92ZXIiIT09Yy5kaXNwbGF5TW9kZUJhcnx8YXx8KGMuZGlzcGxheU1vZGVCYXI9ITApLCJ0cmFuc3BhcmVudCIhPT1jLnNldEJhY2tncm91bmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnNldEJhY2tncm91bmR8fChjLnNldEJhY2tncm91bmQ9UyksYy5faGFzWmVyb0hlaWdodD1jLl9oYXNaZXJvSGVpZ2h0fHwwPT09dC5jbGllbnRIZWlnaHQsYy5faGFzWmVyb1dpZHRoPWMuX2hhc1plcm9XaWR0aHx8MD09PXQuY2xpZW50V2lkdGg7dmFyIGY9Yy5zY3JvbGxab29tLGg9Yy5fc2Nyb2xsWm9vbT17fTtpZighMD09PWYpaC5jYXJ0ZXNpYW49MSxoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTE7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGYpe3ZhciBwPWYuc3BsaXQoIisiKTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKWhbcFtpXV09MX1lbHNlITEhPT1mJiYoaC5nbDNkPTEsaC5nZW89MSxoLm1hcGJveD0xKX1mdW5jdGlvbiBDKHQsZSl7dmFyIHIsbixpPWUrMSxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKG49dFtyXSk8MD9hLnB1c2goaStuKTphLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG4saTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtpZigoaT1lW25dKSE9PXBhcnNlSW50KGksMTApKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiAiK3IrIiBtdXN0IGJlIGludGVnZXJzIik7aWYoaT49dC5kYXRhLmxlbmd0aHx8aTwtdC5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IocisiIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBmb3IgZ2QuZGF0YS4iKTtpZihlLmluZGV4T2YoaSxuKzEpPi0xfHxpPj0wJiZlLmluZGV4T2YoLXQuZGF0YS5sZW5ndGgraSk+LTF8fGk8MCYmZS5pbmRleE9mKHQuZGF0YS5sZW5ndGgraSk+LTEpdGhyb3cgbmV3IEVycm9yKCJlYWNoIGluZGV4IGluICIrcisiIG11c3QgYmUgdW5pcXVlLiIpfX1mdW5jdGlvbiBJKHQsZSxyKXtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksUCh0LGUsImN1cnJlbnRJbmRpY2VzIiksdm9pZCAwPT09cnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSx2b2lkIDAhPT1yJiZQKHQsciwibmV3SW5kaWNlcyIpLHZvaWQgMCE9PXImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBPKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiBQKHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGYsaD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUMocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspe2lmKGE9dC5kYXRhW3JbbV1dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bbV0sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrbSsiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtmPWg/bltkXVttXTpuLGkoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXS5wcm9wLHA9bFtmXS5tYXhwLGQ9YShsW2ZdLnRhcmdldCxsW2ZdLmluc2VydCxwKTtoLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbaC5hc3RyXSl8fChjW2guYXN0cl09W10pLGNbaC5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtoLmFzdHJdKXx8KHVbaC5hc3RyXT1bXSksdVtoLmFzdHJdLnB1c2gobFtmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIHoodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gRCh0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPV8uY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1OKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJl8uY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIuX2RvUGxvdCk6KGYucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoaC5kb0NhbGNkYXRhKHQpLEgoZikpLHUuc3R5bGUmJmYucHVzaCh3LmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaCh3LmRvQ29sb3JCYXJzKSxmLnB1c2goTSkpLGYucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLGMuYWRkKHQsRCxbdCxsLnVuZG9pdCxsLnRyYWNlc10sRCxbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZix0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZXN0eWxlIixsLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBSKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtCKChufHwiIikrcixpLmdldCgpLGUsdCksYShlKX0saX06c31mdW5jdGlvbiBCKHQsZSxyLG4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZTpbXSxhPUFycmF5LmlzQXJyYXkocik/cjpbXSxzPU1hdGgubWF4KGkubGVuZ3RoLGEubGVuZ3RoKSxsPTA7bDxzO2wrKylCKHQrIlsiK2wrIl0iLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGY9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBoIGluIGYpQih0KyIuIitoLGNbaF0sdVtoXSxuKX1lbHNlIHZvaWQgMD09PW5bdF0mJihuW3RdPVIoZSkpfWZ1bmN0aW9uIE4odCxlLHIpe3ZhciBuLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGM9aS5fZ3VpRWRpdGluZyxkPUYoaS5fcHJlR1VJLGMpLG09by5leHRlbmREZWVwQWxsKHt9LGUpO2ooZSk7dmFyIGcsdj1ULnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oKXt9KSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1wLmlkMm5hbWUodCk7LTE9PT1nLmluZGV4T2YoZSkmJmcucHVzaChlKX1mdW5jdGlvbiBrKHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIEEodCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBNKHQpe2Zvcih2YXIgZT10O2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0uX2lucHV0PT09bFt0XSlyZXR1cm4gYVtlXX1mdW5jdGlvbiBTKG4sYSxvKXtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaCgoZnVuY3Rpb24odCl7Uyh0LGEsbyl9KSk7ZWxzZSBpZighKG4gaW4gZSkmJiFfLmhhc1BhcmVudChlLG4pKXt2YXIgcztpZigiTEFZT1VUIj09PW4uc3Vic3RyKDAsNikpcz1kKHQubGF5b3V0LG4ucmVwbGFjZSgiTEFZT1VUIiwiIikpO2Vsc2V7dmFyIHU9cltvXTtzPUYoaS5fdHJhY2VQcmVHVUlbTSh1KS5fZnVsbElucHV0LnVpZF0sYykobFt1XSxuKX1uIGluIHh8fCh4W25dPWIoKSksdm9pZCAwPT09eFtuXVtvXSYmKHhbbl1bb109UihzLmdldCgpKSksdm9pZCAwIT09YSYmcy5zZXQoYSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhW2VdW3RdfX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiExPT09ZT9hW3Jbbl1dW3RdOm51bGx9fWZvcih2YXIgQyBpbiBlKXtpZihfLmhhc1BhcmVudChlLEMpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0MrIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFAsSSxPLHosRCxCLE49ZVtDXTtpZigiYXV0b2JpbngiIT09QyYmImF1dG9iaW55IiE9PUN8fChDPUMuY2hhckF0KEMubGVuZ3RoLTEpKyJiaW5zIixOPUFycmF5LmlzQXJyYXkoTik/Ti5tYXAoTChDKSk6ITE9PT1OP3IubWFwKEUoQykpOm51bGwpLHlbQ109TiwiTEFZT1VUIiE9PUMuc3Vic3RyKDAsNikpe2Zvcih4W0NdPWIoKSxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKFA9bFtyW25dXSxJPU0ocltuXSksej0oTz1GKGkuX3RyYWNlUHJlR1VJW0kuX2Z1bGxJbnB1dC51aWRdLGMpKFAsQykpLmdldCgpLHZvaWQgMCE9PShEPUFycmF5LmlzQXJyYXkoTik/TltuJU4ubGVuZ3RoXTpOKSl7dmFyIFU9Ty5wYXJ0c1tPLnBhcnRzLmxlbmd0aC0xXSxWPUMuc3Vic3RyKDAsQy5sZW5ndGgtVS5sZW5ndGgtMSksSD1WP1YrIi4iOiIiLHE9Vj9zKEksVikuZ2V0KCk6STtpZigoQj1mLmdldFRyYWNlVmFsT2JqZWN0KEksTy5wYXJ0cykpJiZCLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBHIGluIEIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoQyxHKSxCLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PVUmJiJsZW5tb2RlIiE9PVV8fHo9PT1EfHwiZnJhY3Rpb24iIT09RCYmInBpeGVscyIhPT1EfHwhcSl7aWYoInR5cGUiPT09QyYmKCJwaWUiPT09RCE9KCJwaWUiPT09eil8fCJmdW5uZWxhcmVhIj09PUQhPSgiZnVubmVsYXJlYSI9PT16KSkpe3ZhciBZPSJ4IixXPSJ5IjsiYmFyIiE9PUQmJiJiYXIiIT09enx8ImgiIT09UC5vcmllbnRhdGlvbnx8KFk9InkiLFc9IngiKSxvLnN3YXBBdHRycyhQLFsiPyIsIj9zcmMiXSwibGFiZWxzIixZKSxvLnN3YXBBdHRycyhQLFsiZD8iLCI/MCJdLCJsYWJlbCIsWSksby5zd2FwQXR0cnMoUCxbIj8iLCI/c3JjIl0sInZhbHVlcyIsVyksInBpZSI9PT16fHwiZnVubmVsYXJlYSI9PT16PyhzKFAsIm1hcmtlci5jb2xvciIpLnNldChzKFAsIm1hcmtlci5jb2xvcnMiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCkpOnUudHJhY2VJcyhQLCJjYXJ0ZXNpYW4iKSYmcyhQLCJtYXJrZXIuY29sb3JzIikuc2V0KHMoUCwibWFya2VyLmNvbG9yIikuZ2V0KCkpfX1lbHNle3ZhciBYPWkuX3NpemUsWj1xLm9yaWVudCxKPSJ0b3AiPT09Wnx8ImJvdHRvbSI9PT1aO2lmKCJ0aGlja25lc3Ntb2RlIj09PVUpe3ZhciBLPUo/WC5oOlgudztTKEgrInRoaWNrbmVzcyIscS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1EPzEvSzpLKSxuKX1lbHNle3ZhciBRPUo/WC53OlguaDtTKEgrImxlbiIscS5sZW4qKCJmcmFjdGlvbiI9PT1EPzEvUTpRKSxuKX19eFtDXVtuXT1SKHopO2lmKC0xIT09WyJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb24iLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpKXtpZigib3JpZW50YXRpb24iPT09Qyl7Ty5zZXQoRCk7dmFyICQ9UC54JiYhUC55PyJoIjoidiI7aWYoKE8uZ2V0KCl8fCQpPT09SS5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1DJiYoUC5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0kub3JpZW50YXRpb25dKTtfLnN3YXBYWURhdGEoUCksdi5jYWxjPXYuY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09aC5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2YoTy5wYXJ0c1swXSk/KF8ubWFuYWdlQXJyYXlDb250YWluZXJzKE8sRCx4KSx2LmNhbGM9ITApOihCP0IuYXJyYXlPayYmIXUudHJhY2VJcyhJLCJyZWdsIikmJihvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCl8fG8uaXNBcnJheU9yVHlwZWRBcnJheSh6KSk/di5jYWxjPSEwOlQudXBkYXRlKHYsQik6di5jYWxjPSEwLE8uc2V0KEQpKX19aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpJiZwLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PUMpe3ZhciB0dD1zKHQubGF5b3V0LCJob3Zlcm1vZGUiKSxldD10dC5nZXQoKTsieCI9PT1ldD90dC5zZXQoInkiKToieSI9PT1ldD90dC5zZXQoIngiKToieCB1bmlmaWVkIj09PWV0P3R0LnNldCgieSB1bmlmaWVkIik6InkgdW5pZmllZCI9PT1ldCYmdHQuc2V0KCJ4IHVuaWZpZWQiKX1pZigtMSE9PVsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZihDKSl7Zm9yKGc9W10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcnQ9bFtyW25dXTt1LnRyYWNlSXMocnQsImNhcnRlc2lhbiIpJiYodyhydC54YXhpc3x8IngiKSx3KHJ0LnlheGlzfHwieSIpKX1TKGcubWFwKGspLCEwLDApLFMoZy5tYXAoQSksWzAsMV0sMCl9fWVsc2UgTz1kKHQubGF5b3V0LEMucmVwbGFjZSgiTEFZT1VUIiwiIikpLHhbQ109W1IoTy5nZXQoKSldLE8uc2V0KEFycmF5LmlzQXJyYXkoTik/TlswXTpOKSx2LmNhbGM9ITB9cmV0dXJuKHYuY2FsY3x8di5wbG90KSYmKHYuZnVsbFJlcGxvdD0hMCkse2ZsYWdzOnYsdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFttLHJdKX19ZnVuY3Rpb24gaih0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleCgiYXhpcyIsIi50aXRsZSIsITEsITEpLGE9L2NvbG9yYmFyXC50aXRsZSQvLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylyPXNbZV0sbj10W3JdLCJ0aXRsZSIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHwic3RyaW5nIiE9dHlwZW9mIG4mJiJudW1iZXIiIT10eXBlb2Ygbj9yLmluZGV4T2YoInRpdGxlZm9udCIpPi0xJiYtMT09PXIuaW5kZXhPZigiZ3JvdXB0aXRsZWZvbnQiKT9sKHIsci5yZXBsYWNlKCJ0aXRsZWZvbnQiLCJ0aXRsZS5mb250IikpOnIuaW5kZXhPZigidGl0bGVwb3NpdGlvbiIpPi0xP2wocixyLnJlcGxhY2UoInRpdGxlcG9zaXRpb24iLCJ0aXRsZS5wb3NpdGlvbiIpKTpyLmluZGV4T2YoInRpdGxlc2lkZSIpPi0xP2wocixyLnJlcGxhY2UoInRpdGxlc2lkZSIsInRpdGxlLnNpZGUiKSk6ci5pbmRleE9mKCJ0aXRsZW9mZnNldCIpPi0xJiZsKHIsci5yZXBsYWNlKCJ0aXRsZW9mZnNldCIsInRpdGxlLm9mZnNldCIpKTpsKHIsci5yZXBsYWNlKCJ0aXRsZSIsInRpdGxlLnRleHQiKSk7ZnVuY3Rpb24gbChlLHIpe3Rbcl09dFtlXSxkZWxldGUgdFtlXX19ZnVuY3Rpb24gVSh0LGUscil7dD1vLmdldEdyYXBoRGl2KHQpLF8uY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIG49e307aWYoInN0cmluZyI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybigiUmVsYXlvdXQgZmFpbC4iLGUsciksUHJvbWlzZS5yZWplY3QoKTtuPW8uZXh0ZW5kRmxhdCh7fSxlKX1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBpPVcodCxuKSxhPWkuZmxhZ3M7YS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApO3ZhciBzPVtoLnByZXZpb3VzUHJvbWlzZXNdO2EubGF5b3V0UmVwbG90P3MucHVzaCh3LmxheW91dFJlcGxvdCk6T2JqZWN0LmtleXMobikubGVuZ3RoJiYoVih0LGEsaSl8fGguc3VwcGx5RGVmYXVsdHModCksYS5sZWdlbmQmJnMucHVzaCh3LmRvTGVnZW5kKSxhLmxheW91dHN0eWxlJiZzLnB1c2gody5sYXlvdXRTdHlsZXMpLGEuYXhyYW5nZSYmSChzLGkucmFuZ2VzQWx0ZXJlZCksYS50aWNrcyYmcy5wdXNoKHcuZG9UaWNrc1JlbGF5b3V0KSxhLm1vZGViYXImJnMucHVzaCh3LmRvTW9kZUJhciksYS5jYW1lcmEmJnMucHVzaCh3LmRvQ2FtZXJhKSxhLmNvbG9yYmFycyYmcy5wdXNoKHcuZG9Db2xvckJhcnMpLHMucHVzaChNKSkscy5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxVLFt0LGkudW5kb2l0XSxVLFt0LGkucmVkb2l0XSk7dmFyIGw9by5zeW5jT3JBc3luYyhzLHQpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSksbC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaS5ldmVudERhdGEpLHR9KSl9ZnVuY3Rpb24gVih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZighZS5heHJhbmdlKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCJheHJhbmdlIiE9PWkmJmVbaV0pcmV0dXJuITE7Zm9yKHZhciBhIGluIHIucmFuZ2VzQWx0ZXJlZCl7dmFyIG89cC5pZDJuYW1lKGEpLHM9dC5sYXlvdXRbb10sbD1uW29dO2lmKGwuYXV0b3JhbmdlPXMuYXV0b3JhbmdlLHMucmFuZ2UmJihsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltwLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gSCh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9cC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksLTEhPT0oYS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpJiZhLl9hbmNob3JBeGlzJiZyLnB1c2goYS5fYW5jaG9yQXhpcy5faWQpLGEuX21hdGNoR3JvdXApZm9yKHZhciBvIGluIGEuX21hdGNoR3JvdXApZVtvXXx8ci5wdXNoKG8pO2EuYXV0b21hcmdpbiYmKG49ITEpfXJldHVybiBwLmRyYXcodCxyLHtza2lwVGl0bGU6bn0pfTpmdW5jdGlvbih0KXtyZXR1cm4gcC5kcmF3KHQsInJlZHJhdyIpfTt0LnB1c2goeSx3LmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMscix3LmRyYXdEYXRhLHcuZmluYWxEcmF3KX12YXIgcT0vXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLyxHPS9eW3h5el1heGlzWzAtOV0qXC5hdXRvcmFuZ2UkLyxZPS9eW3h5el1heGlzWzAtOV0qXC5kb21haW4oXFtbMHwxXVxdKT8kLztmdW5jdGlvbiBXKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxoPUYobC5fcHJlR1VJLGMpLGQ9T2JqZWN0LmtleXMoZSksbT1wLmxpc3QodCksZz1vLmV4dGVuZERlZXBBbGwoe30sZSksdj17fTtmb3IoaihlKSxkPU9iamVjdC5rZXlzKGUpLG49MDtuPGQubGVuZ3RoO24rKylpZigwPT09ZFtuXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihpPTA7aTxtLmxlbmd0aDtpKyspe3ZhciB5PW1baV0uX2lkLnN1YnN0cigxKSx4PS0xIT09eS5pbmRleE9mKCJzY2VuZSIpP3krIi4iOiIiLHc9ZFtuXS5yZXBsYWNlKCJhbGxheGVzIix4K21baV0uX25hbWUpO2Vbd118fChlW3ddPWVbZFtuXV0pfWRlbGV0ZSBlW2Rbbl1dfXZhciBBPVQubGF5b3V0RmxhZ3MoKSxNPXt9LFM9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKChmdW5jdGlvbih0KXtFKHQscil9KSk7ZWxzZSBpZighKHQgaW4gZSkmJiFfLmhhc1BhcmVudChlLHQpKXt2YXIgbj1oKGEsdCk7dCBpbiBTfHwoU1t0XT1SKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEwsQz17fTtmdW5jdGlvbiBQKHQpe3ZhciBlPXAubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiBDW2VdPTEsZX1mb3IodmFyIEkgaW4gZSl7aWYoXy5oYXNQYXJlbnQoZSxJKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitJKyIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO2Zvcih2YXIgTz1oKGEsSSksej1lW0ldLEQ9Ty5wYXJ0cy5sZW5ndGgtMTtEPjAmJiJzdHJpbmciIT10eXBlb2YgTy5wYXJ0c1tEXTspRC0tO3ZhciBCPU8ucGFydHNbRF0sTj1PLnBhcnRzW0QtMV0rIi4iK0IsVT1PLnBhcnRzLnNsaWNlKDAsRCkuam9pbigiLiIpLFY9cyh0LmxheW91dCxVKS5nZXQoKSxIPXMobCxVKS5nZXQoKSxXPU8uZ2V0KCk7aWYodm9pZCAwIT09eil7TVtJXT16LFNbSV09InJldmVyc2UiPT09Qj96OlIoVyk7dmFyIFo9Zi5nZXRMYXlvdXRWYWxPYmplY3QobCxPLnBhcnRzKTtpZihaJiZaLmltcGxpZWRFZGl0cyYmbnVsbCE9PXopZm9yKHZhciBKIGluIFouaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoSSxKKSxaLmltcGxpZWRFZGl0c1tKXSk7aWYoLTEhPT1bIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihJKSlpZih6KXtFKCJhdXRvc2l6ZSIsbnVsbCk7dmFyIEs9ImhlaWdodCI9PT1JPyJ3aWR0aCI6ImhlaWdodCI7RShLLGxbS10pfWVsc2UgbFtJXT10Ll9pbml0aWFsQXV0b1NpemVbSV07ZWxzZSBpZigiYXV0b3NpemUiPT09SSlFKCJ3aWR0aCIsej9udWxsOmwud2lkdGgpLEUoImhlaWdodCIsej9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKE4ubWF0Y2gocSkpUChOKSxzKGwsVSsiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoTi5tYXRjaChHKSl7UChOKSxzKGwsVSsiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBRPXMobCxVKS5nZXQoKTtRLl9pbnB1dERvbWFpbiYmKFEuX2lucHV0LmRvbWFpbj1RLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIE4ubWF0Y2goWSkmJnMobCxVKyIuX2lucHV0RG9tYWluIikuc2V0KG51bGwpO2lmKCJ0eXBlIj09PUIpe0w9Vjt2YXIgJD0ibGluZWFyIj09PUgudHlwZSYmImxvZyI9PT16LHR0PSJsb2ciPT09SC50eXBlJiYibGluZWFyIj09PXo7aWYoJHx8dHQpe2lmKEwmJkwucmFuZ2UpaWYoSC5hdXRvcmFuZ2UpJCYmKEwucmFuZ2U9TC5yYW5nZVsxXT5MLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBldD1MLnJhbmdlWzBdLHJ0PUwucmFuZ2VbMV07JD8oZXQ8PTAmJnJ0PD0wJiZFKFUrIi5hdXRvcmFuZ2UiLCEwKSxldDw9MD9ldD1ydC8xZTY6cnQ8PTAmJihydD1ldC8xZTYpLEUoVSsiLnJhbmdlWzBdIixNYXRoLmxvZyhldCkvTWF0aC5MTjEwKSxFKFUrIi5yYW5nZVsxXSIsTWF0aC5sb2cocnQpL01hdGguTE4xMCkpOihFKFUrIi5yYW5nZVswXSIsTWF0aC5wb3coMTAsZXQpKSxFKFUrIi5yYW5nZVsxXSIsTWF0aC5wb3coMTAscnQpKSl9ZWxzZSBFKFUrIi5hdXRvcmFuZ2UiLCEwKTtBcnJheS5pc0FycmF5KGwuX3N1YnBsb3RzLnBvbGFyKSYmbC5fc3VicGxvdHMucG9sYXIubGVuZ3RoJiZsW08ucGFydHNbMF1dJiYicmFkaWFsYXhpcyI9PT1PLnBhcnRzWzFdJiZkZWxldGUgbFtPLnBhcnRzWzBdXS5fc3VicGxvdC52aWV3SW5pdGlhbFsicmFkaWFsYXhpcy5yYW5nZSJdLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEgseixFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsSCx6LEUpfWVsc2UgRShVKyIuYXV0b3JhbmdlIiwhMCksRShVKyIucmFuZ2UiLG51bGwpO3MobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCl9ZWxzZSBpZihCLm1hdGNoKGspKXt2YXIgbnQ9cyhsLEkpLmdldCgpLGl0PSh6fHx7fSkudHlwZTtpdCYmIi0iIT09aXR8fChpdD0ibGluZWFyIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsbnQsaXQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImNvbnZlcnRDb29yZHMiKSh0LG50LGl0LEUpfXZhciBhdD1iLmNvbnRhaW5lckFycmF5TWF0Y2goSSk7aWYoYXQpe3I9YXQuYXJyYXksbj1hdC5pbmRleDt2YXIgb3Q9YXQucHJvcGVydHksc3Q9Wnx8e2VkaXRUeXBlOiJjYWxjIn07IiIhPT1uJiYiIj09PW90JiYoYi5pc0FkZFZhbCh6KT9TW0ldPW51bGw6Yi5pc1JlbW92ZVZhbCh6KT9TW0ldPShzKGEscikuZ2V0KCl8fFtdKVtuXTpvLndhcm4oInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZSIsZSkpLFQudXBkYXRlKEEsc3QpLHZbcl18fCh2W3JdPXt9KTt2YXIgbHQ9dltyXVtuXTtsdHx8KGx0PXZbcl1bbl09e30pLGx0W290XT16LGRlbGV0ZSBlW0ldfWVsc2UicmV2ZXJzZSI9PT1CPyhWLnJhbmdlP1YucmFuZ2UucmV2ZXJzZSgpOihFKFUrIi5hdXRvcmFuZ2UiLCEwKSxWLnJhbmdlPVsxLDBdKSxILmF1dG9yYW5nZT9BLmNhbGM9ITA6QS5wbG90PSEwKToobC5faGFzKCJzY2F0dGVyLWxpa2UiKSYmbC5faGFzKCJyZWdsIikmJiJkcmFnbW9kZSI9PT1JJiYoImxhc3NvIj09PXp8fCJzZWxlY3QiPT09eikmJiJsYXNzbyIhPT1XJiYic2VsZWN0IiE9PVd8fGwuX2hhcygiZ2wyZCIpP0EucGxvdD0hMDpaP1QudXBkYXRlKEEsWik6QS5jYWxjPSEwLE8uc2V0KHopKX19Zm9yKHIgaW4gdil7Yi5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcyh0LGgoYSxyKSx2W3JdLEEsaCl8fChBLnBsb3Q9ITApfWZvcih2YXIgY3QgaW4gQyl7dmFyIHV0PShMPXAuZ2V0RnJvbUlkKHQsY3QpKSYmTC5fY29uc3RyYWludEdyb3VwO2lmKHV0KWZvcih2YXIgZnQgaW4gQS5jYWxjPSEwLHV0KUNbZnRdfHwocC5nZXRGcm9tSWQodCxmdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX1yZXR1cm4oWCh0KXx8ZS5oZWlnaHR8fGUud2lkdGgpJiYoQS5wbG90PSEwKSwoQS5wbG90fHxBLmNhbGMpJiYoQS5sYXlvdXRSZXBsb3Q9ITApLHtmbGFnczpBLHJhbmdlc0FsdGVyZWQ6Qyx1bmRvaXQ6UyxyZWRvaXQ6TSxldmVudERhdGE6Z319ZnVuY3Rpb24gWCh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O3JldHVybiB0LmxheW91dC5hdXRvc2l6ZSYmaC5wbG90QXV0b1NpemUodCx0LmxheW91dCxlKSxlLndpZHRoIT09cnx8ZS5oZWlnaHQhPT1ufWZ1bmN0aW9uIFoodCxlLG4saSl7dD1vLmdldEdyYXBoRGl2KHQpLF8uY2xlYXJQcm9taXNlUXVldWUodCksby5pc1BsYWluT2JqZWN0KGUpfHwoZT17fSksby5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXMoZSkubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBhPV8uY29lcmNlVHJhY2VJbmRpY2VzKHQsaSkscz1OKHQsby5leHRlbmRGbGF0KHt9LGUpLGEpLGw9cy5mbGFncyx1PVcodCxvLmV4dGVuZEZsYXQoe30sbikpLGY9dS5mbGFnczsobC5jYWxjfHxmLmNhbGMpJiYodC5jYWxjZGF0YT12b2lkIDApLGwuY2xlYXJBeGlzVHlwZXMmJl8uY2xlYXJBeGlzVHlwZXModCxhLG4pO3ZhciBwPVtdO2YubGF5b3V0UmVwbG90P3AucHVzaCh3LmxheW91dFJlcGxvdCk6bC5mdWxsUmVwbG90P3AucHVzaChyLl9kb1Bsb3QpOihwLnB1c2goaC5wcmV2aW91c1Byb21pc2VzKSxWKHQsZix1KXx8aC5zdXBwbHlEZWZhdWx0cyh0KSxsLnN0eWxlJiZwLnB1c2gody5kb1RyYWNlU3R5bGUpLChsLmNvbG9yYmFyc3x8Zi5jb2xvcmJhcnMpJiZwLnB1c2gody5kb0NvbG9yQmFycyksZi5sZWdlbmQmJnAucHVzaCh3LmRvTGVnZW5kKSxmLmxheW91dHN0eWxlJiZwLnB1c2gody5sYXlvdXRTdHlsZXMpLGYuYXhyYW5nZSYmSChwLHUucmFuZ2VzQWx0ZXJlZCksZi50aWNrcyYmcC5wdXNoKHcuZG9UaWNrc1JlbGF5b3V0KSxmLm1vZGViYXImJnAucHVzaCh3LmRvTW9kZUJhciksZi5jYW1lcmEmJnAucHVzaCh3LmRvQ2FtZXJhKSxwLnB1c2goTSkpLHAucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLGMuYWRkKHQsWixbdCxzLnVuZG9pdCx1LnVuZG9pdCxzLnRyYWNlc10sWixbdCxzLnJlZG9pdCx1LnJlZG9pdCxzLnRyYWNlc10pO3ZhciBkPW8uc3luY09yQXN5bmMocCx0KTtyZXR1cm4gZCYmZC50aGVufHwoZD1Qcm9taXNlLnJlc29sdmUodCkpLGQudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSkpfWZ1bmN0aW9uIEoodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITA7dmFyIHI9dC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGUuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITEscn19dmFyIEs9W3twYXR0ZXJuOi9eaGlkZGVubGFiZWxzLyxhdHRyOiJsZWdlbmQudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKCh4fHkpYXhpc1xkKilcLigoYXV0byk/cmFuZ2V8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L2F4aXNcZCpcLnNob3dzcGlrZXMkLyxhdHRyOiJtb2RlYmFyLnVpcmV2aXNpb24ifSx7cGF0dGVybjovKGhvdmVyfGRyYWcpbW9kZSQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNjZW5lXGQqKVwuY2FtZXJhL30se3BhdHRlcm46L14oZ2VvXGQqKVwuKHByb2plY3Rpb258Y2VudGVyfGZpdGJvdW5kcykvfSx7cGF0dGVybjovXih0ZXJuYXJ5XGQqXC5bYWJjXWF4aXMpXC4obWlufHRpdGxlXC50ZXh0KSQvfSx7cGF0dGVybjovXihwb2xhclxkKlwucmFkaWFsYXhpcylcLigoYXV0byk/cmFuZ2V8YW5nbGV8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L14ocG9sYXJcZCpcLmFuZ3VsYXJheGlzKVwucm90YXRpb24vfSx7cGF0dGVybjovXihtYXBib3hcZCopXC4oY2VudGVyfHpvb218YmVhcmluZ3xwaXRjaCkvfSx7cGF0dGVybjovXmxlZ2VuZFwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXihzaGFwZXN8YW5ub3RhdGlvbnMpLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXnRpdGxlXC50ZXh0JC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dLFE9W3twYXR0ZXJuOi9ec2VsZWN0ZWRwb2ludHMkLyxhdHRyOiJzZWxlY3Rpb25yZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKXZpc2libGUkLyxhdHRyOiJsZWdlbmQudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eZGltZW5zaW9uc1xbXGQrXF1cLmNvbnN0cmFpbnRyYW5nZS99LHtwYXR0ZXJuOi9ebm9kZVwuKHh8eXxncm91cHMpL30se3BhdHRlcm46L15sZXZlbCQvfSx7cGF0dGVybjovKF58dmFsdWVcLiluYW1lJC99LHtwYXR0ZXJuOi9jb2xvcmJhclwudGl0bGVcLnRleHQkL30se3BhdHRlcm46L2NvbG9yYmFyXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9XTtmdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT10Lm1hdGNoKG4ucGF0dGVybik7aWYoaSl7dmFyIGE9aVsxXXx8IiI7cmV0dXJue2hlYWQ6YSx0YWlsOnQuc3Vic3RyKGEubGVuZ3RoKzEpLGF0dHI6bi5hdHRyfX19fWZ1bmN0aW9uIHR0KHQsZSl7dmFyIHI9cyhlLHQpLmdldCgpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7dmFyIG49dC5zcGxpdCgiLiIpO2ZvcihuLnBvcCgpO24ubGVuZ3RoPjE7KWlmKG4ucG9wKCksdm9pZCAwIT09KHI9cyhlLG4uam9pbigiLiIpKyIudWlyZXZpc2lvbiIpLmdldCgpKSlyZXR1cm4gcjtyZXR1cm4gZS51aXJldmlzaW9ufWZ1bmN0aW9uIGV0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5fZnVsbElucHV0LnVpZD09PXQpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gcnQodCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0udWlkPT09dClyZXR1cm4gbjtyZXR1cm4hZVtyXXx8ZVtyXS51aWQ/LTE6cn1mdW5jdGlvbiBudCh0LGUpe3ZhciByPW8uaXNQbGFpbk9iamVjdCh0KSxuPUFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHJ8fG4/KHImJm8uaXNQbGFpbk9iamVjdChlKXx8biYmQXJyYXkuaXNBcnJheShlKSkmJkpTT04uc3RyaW5naWZ5KHQpPT09SlNPTi5zdHJpbmdpZnkoZSk6dD09PWV9ZnVuY3Rpb24gaXQodCxlLHIsbil7dmFyIGksYSxsLGM9bi5nZXRWYWxPYmplY3QsdT1uLmZsYWdzLGY9bi5pbW11dGFibGUsaD1uLmluQXJyYXkscD1uLmFycmF5SW5kZXg7ZnVuY3Rpb24gZCgpe3ZhciB0PWkuZWRpdFR5cGU7aCYmLTEhPT10LmluZGV4T2YoImFycmF5ZHJhdyIpP28ucHVzaFVuaXF1ZSh1LmFycmF5c1toXSxwKTooVC51cGRhdGUodSxpKSwibm9uZSIhPT10JiZ1Lm5DaGFuZ2VzKyssbi50cmFuc2l0aW9uJiZpLmFuaW0mJnUubkNoYW5nZXNBbmltKyssKHEudGVzdChsKXx8Ry50ZXN0KGwpKSYmKHUucmFuZ2VzQWx0ZXJlZFtyWzBdXT0xKSxZLnRlc3QobCkmJnMoZSwiX2lucHV0RG9tYWluIikuc2V0KG51bGwpLCJkYXRhcmV2aXNpb24iPT09YSYmKHUubmV3RGF0YVJldmlzaW9uPTEpKX1mdW5jdGlvbiBtKHQpe3JldHVybiJkYXRhX2FycmF5Ij09PXQudmFsVHlwZXx8dC5hcnJheU9rfWZvcihhIGluIHQpe2lmKHUuY2FsYyYmIW4udHJhbnNpdGlvbilyZXR1cm47dmFyIGc9dFthXSx2PWVbYV0seT1yLmNvbmNhdChhKTtpZihsPXkuam9pbigiLiIpLCJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZyYmZyE9PXYpe2lmKCgidGljazAiPT09YXx8ImR0aWNrIj09PWEpJiYiZ2VvIiE9PXJbMF0pe3ZhciB4PWUudGlja21vZGU7aWYoImF1dG8iPT09eHx8ImFycmF5Ij09PXh8fCF4KWNvbnRpbnVlfWlmKCgicmFuZ2UiIT09YXx8IWUuYXV0b3JhbmdlKSYmKCJ6bWluIiE9PWEmJiJ6bWF4IiE9PWF8fCJjb250b3VyY2FycGV0IiE9PWUudHlwZSkmJihpPWMoeSkpJiYoIWkuX2NvbXBhcmVBc0pTT058fEpTT04uc3RyaW5naWZ5KGcpIT09SlNPTi5zdHJpbmdpZnkodikpKXt2YXIgYixfPWkudmFsVHlwZSx3PW0oaSksaz1BcnJheS5pc0FycmF5KGcpLEE9QXJyYXkuaXNBcnJheSh2KTtpZihrJiZBKXt2YXIgTT0iX2lucHV0XyIrYSxTPXRbTV0sRT1lW01dO2lmKEFycmF5LmlzQXJyYXkoUykmJlM9PT1FKWNvbnRpbnVlfWlmKHZvaWQgMD09PXYpdyYmaz91LmNhbGM9ITA6ZCgpO2Vsc2UgaWYoaS5faXNMaW5rZWRUb0FycmF5KXt2YXIgTD1bXSxDPSExO2h8fCh1LmFycmF5c1thXT1MKTt2YXIgUD1NYXRoLm1pbihnLmxlbmd0aCx2Lmxlbmd0aCksST1NYXRoLm1heChnLmxlbmd0aCx2Lmxlbmd0aCk7aWYoUCE9PUkpe2lmKCJhcnJheWRyYXciIT09aS5lZGl0VHlwZSl7ZCgpO2NvbnRpbnVlfUM9ITB9Zm9yKGI9MDtiPFA7YisrKWl0KGdbYl0sdltiXSx5LmNvbmNhdChiKSxvLmV4dGVuZEZsYXQoe2luQXJyYXk6YSxhcnJheUluZGV4OmJ9LG4pKTtpZihDKWZvcihiPVA7YjxJO2IrKylMLnB1c2goYil9ZWxzZSFfJiZvLmlzUGxhaW5PYmplY3QoZyk/aXQoZyx2LHksbik6dz9rJiZBPyhmJiYodS5jYWxjPSEwKSwoZnx8bi5uZXdEYXRhUmV2aXNpb24pJiZkKCkpOmshPT1BP3UuY2FsYz0hMDpkKCk6ayYmQSYmZy5sZW5ndGg9PT12Lmxlbmd0aCYmU3RyaW5nKGcpPT09U3RyaW5nKHYpfHxkKCl9fX1mb3IoYSBpbiBlKWlmKCEoYSBpbiB0KSYmIl8iIT09YS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBlW2FdKXtpZihtKGk9YyhyLmNvbmNhdChhKSkpJiZBcnJheS5pc0FycmF5KGVbYV0pKXJldHVybiB2b2lkKHUuY2FsYz0hMCk7ZCgpfX1mdW5jdGlvbiBhdCh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighby5lcXVhbERvbVJlY3RzKHIsZS5fbGFzdEJCb3gpKXt2YXIgbj1lLl9pbnZUcmFuc2Zvcm09by5pbnZlcnNlVHJhbnNmb3JtTWF0cml4KG8uZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCh0KSk7ZS5faW52U2NhbGVYPU1hdGguc3FydChuWzBdWzBdKm5bMF1bMF0rblswXVsxXSpuWzBdWzFdK25bMF1bMl0qblswXVsyXSksZS5faW52U2NhbGVZPU1hdGguc3FydChuWzFdWzBdKm5bMV1bMF0rblsxXVsxXSpuWzFdWzFdK25bMV1bMl0qblsxXVsyXSksZS5fbGFzdEJCb3g9cn19ci5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWguc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGEsdSl7ZnVuY3Rpb24gZigpe24uX2N1cnJlbnRGcmFtZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlKCk7dmFyIGU9bi5fY3VycmVudEZyYW1lPW4uX2ZyYW1lUXVldWUuc2hpZnQoKTtpZihlKXt2YXIgcj1lLm5hbWU/ZS5uYW1lLnRvU3RyaW5nKCk6bnVsbDt0Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU9cixuLl9sYXN0RnJhbWVBdD1EYXRlLm5vdygpLG4uX3RpbWVUb05leHQ9ZS5mcmFtZU9wdHMuZHVyYXRpb24saC50cmFuc2l0aW9uKHQsZS5mcmFtZS5kYXRhLGUuZnJhbWUubGF5b3V0LF8uY29lcmNlVHJhY2VJbmRpY2VzKHQsZS5mcmFtZS50cmFjZXMpLGUuZnJhbWVPcHRzLGUudHJhbnNpdGlvbk9wdHMpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pKSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmYoKX07ZSgpfXZhciBkLG0sZz0wO2Z1bmN0aW9uIHYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/Zz49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW2ddOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksZysrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTp2KG8uZXh0ZW5kRmxhdCh7fSxlKSl9KTtlbHNlIGlmKHh8fC0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKG09bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhtLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOlN0cmluZyhtLm5hbWUpLGRhdGE6dih7bmFtZTptLm5hbWV9KX0pO2Vsc2UgaWYoYilmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgdz1lW2RdOy0xIT09WyJudW1iZXIiLCJzdHJpbmciXS5pbmRleE9mKHR5cGVvZiB3KT8odz1TdHJpbmcodykseS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6dyxkYXRhOnYoe25hbWU6d30pfSkpOm8uaXNQbGFpbk9iamVjdCh3KSYmeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6dihvLmV4dGVuZEZsYXQoe30sdykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShtPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbbS5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiAiJyttLmRhdGEubmFtZSsnIicpLHZvaWQgdSgpOy0xIT09WyJuZXh0IiwiaW1tZWRpYXRlIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdCgicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkIixbXSl9fSgpLCJyZXZlcnNlIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgVD10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYoVCYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZigiYnluYW1lIj09PShtPXlbZF0pLnR5cGUmJm0ubmFtZT09PVQpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIEE9W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKyltPXlbZF0sKCJieW5hbWUiIT09eVtkXS50eXBlfHxkPmspJiZBLnB1c2gobSk7eT1BfX15Lmxlbmd0aD4wP2Z1bmN0aW9uKGUpe2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvO289ImJ5bmFtZSI9PT1lW2ldLnR5cGU/aC5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgZj1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24sZi5kdXJhdGlvbik7dmFyIG09e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmYsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihtLm9uQ29tcGxldGU9YyhhLDIpLG0ub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKG0pfSJpbW1lZGlhdGUiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSxhKCkpfSkpfSxyLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLG51bGw9PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90bHkuY29tL2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbixpLGEscyxsPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsdT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zIitlKTt2YXIgZj1sLmxlbmd0aCsyKmUubGVuZ3RoLHA9W10sZD17fTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKG8uaXNQbGFpbk9iamVjdChlW25dKSl7dmFyIG09ZVtuXS5uYW1lLGc9KHVbbV18fGRbbV18fHt9KS5uYW1lLHY9ZVtuXS5uYW1lLHk9dVtnXXx8ZFtnXTtnJiZ2JiYibnVtYmVyIj09dHlwZW9mIHYmJnkmJkE8NSYmKEErKyxvLndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgIicrKHVbZ118fGRbZ10pLm5hbWUrJyIgd2l0aCBhIGZyYW1lIHdob3NlIG5hbWUgb2YgdHlwZSAibnVtYmVyIiBhbHNvIGVxdWF0ZXMgdG8gIicrZysnIi4gVGhpcyBpcyB2YWxpZCBidXQgbWF5IHBvdGVudGlhbGx5IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBzaW5jZSBhbGwgcGxvdGx5LmpzIGZyYW1lIG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzdHJpbmdzLicpLDU9PT1BJiZvLndhcm4oImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSBvZiB0aGVzZSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC4iKSksZFttXT17bmFtZTptfSxwLnB1c2goe2ZyYW1lOmguc3VwcGx5RnJhbWVEZWZhdWx0cyhlW25dKSxpbmRleDpyJiZ2b2lkIDAhPT1yW25dJiZudWxsIT09cltuXT9yW25dOmYrbn0pfXAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKCJudW1iZXIiPT10eXBlb2YoaT1wW25dLmZyYW1lKS5uYW1lJiZvLndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksXysrfXZhciB3PWgubW9kaWZ5RnJhbWVzLFQ9aC5tb2RpZnlGcmFtZXMsaz1bdCxiXSxNPVt0LHhdO3JldHVybiBjJiZjLmFkZCh0LHcsayxULE0pLGgubW9kaWZ5RnJhbWVzKHQseCl9LHIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgpKS5zb3J0KCkscj1lLmxlbmd0aC0xO3I+PTA7ci0tKW49ZVtyXSxhLnB1c2goe3R5cGU6ImRlbGV0ZSIsaW5kZXg6bn0pLHMudW5zaGlmdCh7dHlwZToiaW5zZXJ0IixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgbD1oLm1vZGlmeUZyYW1lcyx1PWgubW9kaWZ5RnJhbWVzLGY9W3Qsc10scD1bdCxhXTtyZXR1cm4gYyYmYy5hZGQodCxsLGYsdSxwKSxoLm1vZGlmeUZyYW1lcyh0LGEpfSxyLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGEscyxsPVtdLHU9ci5kZWxldGVUcmFjZXMsZj10LGg9W2UsbF0scD1bZSxuXTtmb3IoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZih2b2lkIDA9PT1yfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHZvaWQgMCE9PXImJnIubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpZiBpbmRpY2VzIGlzIHNwZWNpZmllZCwgdHJhY2VzLmxlbmd0aCBtdXN0IGVxdWFsIGluZGljZXMubGVuZ3RoIil9KGUsbixpKSxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG49bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSksXy5jbGVhbkRhdGEobiksYT0wO2E8bi5sZW5ndGg7YSsrKWUuZGF0YS5wdXNoKG5bYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKC1uLmxlbmd0aCthKTtpZih2b2lkIDA9PT1pKXJldHVybiBzPXIucmVkcmF3KGUpLGMuYWRkKGUsdSxoLGYscCkscztBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO3RyeXtJKGUsbCxpKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtbi5sZW5ndGgsbi5sZW5ndGgpLHR9cmV0dXJuIGMuc3RhcnRTZXF1ZW5jZShlKSxjLmFkZChlLHUsaCxmLHApLHM9ci5tb3ZlVHJhY2VzKGUsbCxpKSxjLnN0b3BTZXF1ZW5jZShlKSxzfSxyLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbil7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBpLGEscz1bXSxsPXIuYWRkVHJhY2VzLHU9dCxmPVtlLHMsbl0saD1bZSxuXTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksUChlLG4sImluZGljZXMiKSwobj1DKG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxmLHUsaCkscH0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz16KHQsZSk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0KSxpLnNldChlLnN1YmFycmF5KDAsbCksdC5sZW5ndGgpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aCx1PXQubGVuZ3RoLWM7bi5zZXQodC5zdWJhcnJheSh1KSksbi5zZXQoZSxjKSxpLnNldCh0LnN1YmFycmF5KDAsdSkpfWVsc2Ugbj10LmNvbmNhdChlKSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UoMCxuLmxlbmd0aC1yKTpbXTtyZXR1cm5bbixpXX12YXIgbD1PKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxzKSx1PXIucmVkcmF3KGUpLGY9W2UsbC51cGRhdGUsaSxsLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLGYsdCxhcmd1bWVudHMpLHV9LHIubW92ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbixpKXt2YXIgYSxzPVtdLGw9W10sdT10LGY9dCxoPVtlPW8uZ2V0R3JhcGhEaXYoZSksaSxuXSxwPVtlLG4saV07aWYoSShlLG4saSksbj1BcnJheS5pc0FycmF5KG4pP246W25dLHZvaWQgMD09PWkpZm9yKGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaCgtbi5sZW5ndGgrYSk7Zm9yKGk9QXJyYXkuaXNBcnJheShpKT9pOltpXSxuPUMobixlLmRhdGEubGVuZ3RoLTEpLGk9QyhpLGUuZGF0YS5sZW5ndGgtMSksYT0wO2E8ZS5kYXRhLmxlbmd0aDthKyspLTE9PT1uLmluZGV4T2YoYSkmJnMucHVzaChlLmRhdGFbYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKHtuZXdJbmRleDppW2FdLHRyYWNlOmUuZGF0YVtuW2FdXX0pO2ZvcihsLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pKSxhPTA7YTxsLmxlbmd0aDthKz0xKXMuc3BsaWNlKGxbYV0ubmV3SW5kZXgsMCxsW2FdLnRyYWNlKTtlLmRhdGE9czt2YXIgZD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSx1LGgsZixwKSxkfSxyLnByZXBlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9eihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19dmFyIGw9TyhlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEscyksdT1yLnJlZHJhdyhlKSxmPVtlLGwudXBkYXRlLGksbC5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIuZXh0ZW5kVHJhY2VzLGYsdCxhcmd1bWVudHMpLHV9LHIubmV3UGxvdD1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdD1vLmdldEdyYXBoRGl2KHQpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhfHxbXSx0Ll9mdWxsTGF5b3V0fHx7fSksaC5wdXJnZSh0KSxyLl9kb1Bsb3QodCxlLG4saSl9LHIuX2RvUGxvdD1mdW5jdGlvbih0LGUsaSxhKXt2YXIgcztpZih0PW8uZ2V0R3JhcGhEaXYodCksbC5pbml0KHQpLG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGM9ZTtlPWMuZGF0YSxpPWMubGF5b3V0LGE9Yy5jb25maWcscz1jLmZyYW1lc31pZighMT09PWwudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZXBsb3QiLFtlLGksYV0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fGl8fG8uaXNQbG90RGl2KHQpfHxvLndhcm4oIkNhbGxpbmcgX2RvUGxvdCBhcyBpZiByZWRyYXdpbmcgYnV0IHRoaXMgY29udGFpbmVyIGRvZXNuJ3QgeWV0IGhhdmUgYSBwbG90LiIsdCksTCh0LGEpLGl8fChpPXt9KSxuLnNlbGVjdCh0KS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIsITApLGQubWFrZVRlc3RlcigpLEFycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpfHwodC5fcHJvbWlzZXM9W10pO3ZhciBmPTA9PT0odC5kYXRhfHxbXSkubGVuZ3RoJiZBcnJheS5pc0FycmF5KGUpO0FycmF5LmlzQXJyYXkoZSkmJihfLmNsZWFuRGF0YShlKSxmP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWZ8fCh0LmxheW91dD1fLmNsZWFuTGF5b3V0KGkpKSxoLnN1cHBseURlZmF1bHRzKHQpO3ZhciBtPXQuX2Z1bGxMYXlvdXQseT1tLl9oYXMoImNhcnRlc2lhbiIpO20uX3JlcGxvdHRpbmc9ITAsKGZ8fG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXIpJiYoIWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9dC5fZnVsbExheW91dDtpZihyLl9jYWxjSW52ZXJzZVRyYW5zZm9ybT1hdCxyLl9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KSxyLl9jb250YWluZXI9ZS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5nbC1jb250YWluZXIiKS5kYXRhKFt7fV0pLHIuX2dsY29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJnbC1jb250YWluZXIiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLnJlbW92ZSgpLHIuX3BhcGVyZGl2LnNlbGVjdCgiLm1vZGViYXItY29udGFpbmVyIikucmVtb3ZlKCksci5fcGFwZXI9ci5fcGFwZXJkaXYuaW5zZXJ0KCJzdmciLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX3RvcHBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl9tb2RlYmFyZGl2PXIuX3BhcGVyZGl2LmFwcGVuZCgiZGl2IiksZGVsZXRlIHIuX21vZGVCYXIsci5faG92ZXJwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksIXIuX3VpZCl7dmFyIGk9e307bi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSksci5fdWlkPW8ucmFuZHN0cihpKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIodi5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwidG9wZGVmcy0iK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX2JnTGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmdsYXllciIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImRyYWdsYXllciIsITApO3ZhciBhPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWJlbG93IiwhMCk7ci5faW1hZ2VMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJjYXJ0ZXNpYW5sYXllciIsITApLHIuX3BvbGFybGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9sYXJsYXllciIsITApLHIuX3NtaXRobGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgic21pdGhsYXllciIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXJuYXJ5bGF5ZXIiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnZW9sYXllciIsITApLHIuX2Z1bm5lbGFyZWFsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJmdW5uZWxhcmVhbGF5ZXIiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwaWVsYXllciIsITApLHIuX2ljaWNsZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImljaWNsZWxheWVyIiwhMCksci5fdHJlZW1hcGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyZWVtYXBsYXllciIsITApLHIuX3N1bmJ1cnN0bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgic3VuYnVyc3RsYXllciIsITApLHIuX2luZGljYXRvcmxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZGljYXRvcmxheWVyIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2xpbWFnZXMiLCEwKTt2YXIgcz1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5faW5mb2xheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZm9sYXllciIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJtZW51bGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl9ob3ZlcnBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhvdmVybGF5ZXIiLCEwKSxyLl9tb2RlYmFyZGl2LmNsYXNzZWQoIm1vZGViYXItY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgidG9wIiwiMHB4Iikuc3R5bGUoInJpZ2h0IiwiMHB4IiksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9KHQpLG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXImJmRlbGV0ZSBtLl9zaG91bGRDcmVhdGVCZ0xheWVyKSxkLmluaXRHcmFkaWVudHModCksZC5pbml0UGF0dGVybnModCksZiYmcC5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgeD0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7eCYmaC5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgYj0wO2I8dC5jYWxjZGF0YS5sZW5ndGg7YisrKXQuY2FsY2RhdGFbYl1bMF0udHJhY2U9dC5fZnVsbERhdGFbYl07dC5fY29udGV4dC5yZXNwb25zaXZlP3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXJ8fCh0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyPWZ1bmN0aW9uKCl7by5pc0hpZGRlbih0KXx8aC5yZXNpemUodCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpKTpvLmNsZWFyUmVzcG9uc2l2ZSh0KTt2YXIgVD1vLmV4dGVuZEZsYXQoe30sbS5fc2l6ZSksaz0wO2Z1bmN0aW9uIEEoKXtpZihoLmNsZWFyQXV0b01hcmdpbklkcyh0KSx3LmRyYXdNYXJnaW5QdXNoZXJzKHQpLHAuYWxsb3dBdXRvTWFyZ2luKHQpLG0uX2hhcygicGllIikpZm9yKHZhciBlPXQuX2Z1bGxEYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTsicGllIj09PW4udHlwZSYmbi5hdXRvbWFyZ2luJiZoLmFsbG93QXV0b01hcmdpbih0LCJwaWUuIituLnVpZCsiLmF1dG9tYXJnaW4iKX1yZXR1cm4gaC5kb0F1dG9NYXJnaW4odCksaC5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIFMoKXt0Ll90cmFuc2l0aW9uaW5nfHwody5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLGYmJnAuc2F2ZVJhbmdlSW5pdGlhbCh0KSx1LmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJjYWxjQXV0b3JhbmdlIikodCkpfXZhciBFPVtoLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZihzKXJldHVybiByLmFkZEZyYW1lcyh0LHMpfSxmdW5jdGlvbiBlKCl7Zm9yKHZhciByPW0uX2Jhc2VQbG90TW9kdWxlcyxuPTA7bjxyLmxlbmd0aDtuKyspcltuXS5kcmF3RnJhbWV3b3JrJiZyW25dLmRyYXdGcmFtZXdvcmsodCk7IW0uX2dsY2FudmFzJiZtLl9oYXMoImdsIikmJihtLl9nbGNhbnZhcz1tLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5kYXRhKFt7a2V5OiJjb250ZXh0TGF5ZXIiLGNvbnRleHQ6ITAscGljazohMX0se2tleToiZm9jdXNMYXllciIsY29udGV4dDohMSxwaWNrOiExfSx7a2V5OiJwaWNrTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMH1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSksbS5fZ2xjYW52YXMuZW50ZXIoKS5hcHBlbmQoImNhbnZhcyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImdsLWNhbnZhcyBnbC1jYW52YXMtIit0LmtleS5yZXBsYWNlKCJMYXllciIsIiIpfSkpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KSk7dmFyIGk9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvO2lmKG0uX2dsY2FudmFzKXttLl9nbGNhbnZhcy5hdHRyKCJ3aWR0aCIsbS53aWR0aCppKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KmkpLnN0eWxlKCJ3aWR0aCIsbS53aWR0aCsicHgiKS5zdHlsZSgiaGVpZ2h0IixtLmhlaWdodCsicHgiKTt2YXIgYT1tLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihhJiYoTWF0aC5mbG9vcihtLndpZHRoKmkpIT09YS5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRofHxNYXRoLmZsb29yKG0uaGVpZ2h0KmkpIT09YS5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCkpe3ZhciBzPSJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy4iO2lmKCFrKXJldHVybiBvLmxvZyhzKyIgQ2xlYXJpbmcgZ3JhcGggYW5kIHBsb3R0aW5nIGFnYWluLiIpLGguY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLG0pLGguc3VwcGx5RGVmYXVsdHModCksbT10Ll9mdWxsTGF5b3V0LGguZG9DYWxjZGF0YSh0KSxrKyssZSgpO28uZXJyb3Iocyl9fXJldHVybiJoIj09PW0ubW9kZWJhci5vcmllbnRhdGlvbj9tLl9tb2RlYmFyZGl2LnN0eWxlKCJoZWlnaHQiLG51bGwpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTptLl9tb2RlYmFyZGl2LnN0eWxlKCJ3aWR0aCIsbnVsbCkuc3R5bGUoImhlaWdodCIsbS5oZWlnaHQrInB4IiksaC5wcmV2aW91c1Byb21pc2VzKHQpfSxBLGZ1bmN0aW9uKCl7aWYoaC5kaWRNYXJnaW5DaGFuZ2UoVCxtLl9zaXplKSlyZXR1cm4gby5zeW5jT3JBc3luYyhbQSx3LmxheW91dFN0eWxlc10sdCl9XTt5JiZFLnB1c2goKGZ1bmN0aW9uKCl7aWYoeClyZXR1cm4gby5zeW5jT3JBc3luYyhbdS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImNhbGNBdXRvcmFuZ2UiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjYWxjQXV0b3JhbmdlIiksU10sdCk7UygpfSkpLEUucHVzaCh3LmxheW91dFN0eWxlcykseSYmRS5wdXNoKChmdW5jdGlvbigpe3JldHVybiBwLmRyYXcodCxmPyIiOiJyZWRyYXciKX0pLChmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlJiZVKHQsdC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSkudGhlbigoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlPXZvaWQgMH0pKX0pKSxFLnB1c2gody5kcmF3RGF0YSx3LmZpbmFsRHJhdyxnLGguYWRkTGlua3MsaC5yZWhvdmVyLGgucmVkcmFnLGguZG9BdXRvTWFyZ2luLChmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlJiZmJiZwLnNhdmVSYW5nZUluaXRpYWwodCwhMCl9KSxoLnByZXZpb3VzUHJvbWlzZXMpO3ZhciBDPW8uc3luY09yQXN5bmMoRSx0KTtyZXR1cm4gQyYmQy50aGVufHwoQz1Qcm9taXNlLnJlc29sdmUoKSksQy50aGVuKChmdW5jdGlvbigpe3JldHVybiBNKHQpLHR9KSl9LHIucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9LHI9dC5fZnVsbERhdGF8fFtdO3JldHVybiBoLmNsZWFuUGxvdChbXSx7fSxyLGUpLGgucHVyZ2UodCksbC5wdXJnZSh0KSxlLl9jb250YWluZXImJmUuX2NvbnRhaW5lci5yZW1vdmUoKSxkZWxldGUgdC5fY29udGV4dCx0fSxyLnJlYWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLGw7dD1vLmdldEdyYXBoRGl2KHQpLF8uY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIGM9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZjJiZwKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIG09ITE7aWYoaSl7dmFyIGc9by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLEwodCxpKSxtPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKWlmKCJfIiE9PW4uY2hhckF0KDApKXt2YXIgaT1lW25dLGE9cltuXTtpZihpIT09YSlpZihvLmlzUGxhaW5PYmplY3QoaSkmJm8uaXNQbGFpbk9iamVjdChhKSl7aWYodChpLGEpKXJldHVybiEwfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaSl8fCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoaVtzXSE9PWFbc10pe2lmKCFvLmlzUGxhaW5PYmplY3QoaVtzXSl8fCFvLmlzUGxhaW5PYmplY3QoYVtzXSkpcmV0dXJuITA7aWYodChpW3NdLGFbc10pKXJldHVybiEwfX19fShnLHQuX2NvbnRleHQpfXQuZGF0YT1lfHxbXSxfLmNsZWFuRGF0YSh0LmRhdGEpLHQubGF5b3V0PW58fHt9LF8uY2xlYW5MYXlvdXQodC5sYXlvdXQpLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbCxjLHUsZixoLHAsZCxtLGc9bi5fcHJlR1VJLHY9W10seT17fSx4PXt9O2ZvcihpIGluIGcpe2lmKHU9JChpLEspKXtpZihkPXUuaGVhZCxtPXUudGFpbCxhPXUuYXR0cnx8ZCsiLnVpcmV2aXNpb24iLChjPShsPXMobixhKS5nZXQoKSkmJnR0KGEsZSkpJiZjPT09bCl7aWYobnVsbD09PShmPWdbaV0pJiYoZj12b2lkIDApLG50KHA9KGg9cyhlLGkpKS5nZXQoKSxmKSl7dm9pZCAwPT09cCYmImF1dG9yYW5nZSI9PT1tJiZ2LnB1c2goZCksaC5zZXQoUihzKG4saSkuZ2V0KCkpKTtjb250aW51ZX1pZigiYXV0b3JhbmdlIj09PW18fCJyYW5nZVsiPT09bS5zdWJzdHIoMCw2KSl7dmFyIGI9Z1tkKyIucmFuZ2VbMF0iXSxfPWdbZCsiLnJhbmdlWzFdIl0sdz1nW2QrIi5hdXRvcmFuZ2UiXTtpZih3fHxudWxsPT09dyYmbnVsbD09PWImJm51bGw9PT1fKXtpZighKGQgaW4geSkpe3ZhciBUPXMoZSxkKS5nZXQoKTt5W2RdPVQmJihULmF1dG9yYW5nZXx8ITEhPT1ULmF1dG9yYW5nZSYmKCFULnJhbmdlfHwyIT09VC5yYW5nZS5sZW5ndGgpKX1pZih5W2RdKXtoLnNldChSKHMobixpKS5nZXQoKSkpO2NvbnRpbnVlfX19fX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2kpO2RlbGV0ZSBnW2ldLHUmJiJyYW5nZVsiPT09dS50YWlsLnN1YnN0cigwLDYpJiYoeFt1LmhlYWRdPTEpfWZvcih2YXIgaz0wO2s8di5sZW5ndGg7aysrKXt2YXIgQT12W2tdO2lmKHhbQV0pe3ZhciBNPXMoZSxBKS5nZXQoKTtNJiZkZWxldGUgTS5hdXRvcmFuZ2V9fXZhciBTPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgRSBpbiBTKXt2YXIgTCxDPVNbRV0sUD1udWxsO2ZvcihpIGluIEMpe2lmKCFQKXt2YXIgST1ldChFLHIpO2lmKEk8MCl7ZGVsZXRlIFNbRV07YnJlYWt9dmFyIE89cnQoRSx0LChMPXJbSV0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKE88MCl7ZGVsZXRlIFNbRV07YnJlYWt9UD10W09dfWlmKHU9JChpLFEpKXtpZih1LmF0dHI/Yz0obD1zKG4sdS5hdHRyKS5nZXQoKSkmJnR0KHUuYXR0cixlKToobD1MLnVpcmV2aXNpb24sdm9pZCAwPT09KGM9UC51aXJldmlzaW9uKSYmKGM9ZS51aXJldmlzaW9uKSksYyYmYz09PWwmJihudWxsPT09KGY9Q1tpXSkmJihmPXZvaWQgMCksbnQocD0oaD1zKFAsaSkpLmdldCgpLGYpKSl7aC5zZXQoUihzKEwsaSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIitpKyIgaW4gdHJhY2UgdWlkICIrRSk7ZGVsZXRlIENbaV19fX0odC5kYXRhLHQubGF5b3V0LGMscCksaC5zdXBwbHlEZWZhdWx0cyh0LHtza2lwVXBkYXRlQ2FsYzohMH0pO3ZhciB2PXQuX2Z1bGxEYXRhLHk9dC5fZnVsbExheW91dCx4PXZvaWQgMD09PXkuZGF0YXJldmlzaW9uLGI9eS50cmFuc2l0aW9uLGs9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1ULmxheW91dEZsYWdzKCk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZi5nZXRMYXlvdXRWYWxPYmplY3Qocix0KX1hLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsaXQoZSxyLFtdLHtnZXRWYWxPYmplY3Q6byxmbGFnczphLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxnZDp0fSksKGEucGxvdHx8YS5jYWxjKSYmKGEubGF5b3V0UmVwbG90PSEwKTtpJiZhLm5DaGFuZ2VzJiZhLm5DaGFuZ2VzQW5pbSYmKGEuYW5pbT1hLm5DaGFuZ2VzPT09YS5uQ2hhbmdlc0FuaW0/ImFsbCI6InNvbWUiKTtyZXR1cm4gYX0odCxwLHkseCxiKSxBPWsubmV3RGF0YVJldmlzaW9uLFM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWUubGVuZ3RoPT09ci5sZW5ndGg7aWYoIWkmJiFvKXJldHVybntmdWxsUmVwbG90OiEwLGNhbGM6ITB9O3ZhciBzLGwsYz1ULnRyYWNlRmxhZ3MoKTtjLmFycmF5cz17fSxjLm5DaGFuZ2VzPTAsYy5uQ2hhbmdlc0FuaW09MDt2YXIgdT17Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPWYuZ2V0VHJhY2VWYWxPYmplY3QobCx0KTtyZXR1cm4hbC5fbW9kdWxlLmFuaW1hdGFibGUmJmUuYW5pbSYmKGUuYW5pbT0hMSksZX0sZmxhZ3M6YyxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksbmV3RGF0YVJldmlzaW9uOmEsZ2Q6dH0scD17fTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKHJbc10pe2lmKGw9cltzXS5fZnVsbElucHV0LGguaGFzTWFrZXNEYXRhVHJhbnNmb3JtKGwpJiYobD1yW3NdKSxwW2wudWlkXSljb250aW51ZTtwW2wudWlkXT0xLGl0KGVbc10uX2Z1bGxJbnB1dCxsLFtdLHUpfShjLmNhbGN8fGMucGxvdCkmJihjLmZ1bGxSZXBsb3Q9ITApO2kmJmMubkNoYW5nZXMmJmMubkNoYW5nZXNBbmltJiYoYy5hbmltPWMubkNoYW5nZXM9PT1jLm5DaGFuZ2VzQW5pbSYmbz8iYWxsIjoic29tZSIpO3JldHVybiBjfSh0LGMsdix4LGIsQSk7aWYoWCh0KSYmKGsubGF5b3V0UmVwbG90PSEwKSxTLmNhbGN8fGsuY2FsYyl7dC5jYWxjZGF0YT12b2lkIDA7Zm9yKHZhciBFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpLEM9MDtDPEUubGVuZ3RoO0MrKyl7dmFyIFA9RVtDXSxJPVAuc3Vic3RyaW5nKDAsNSk7aWYoInhheGlzIj09PUl8fCJ5YXhpcyI9PT1JKXt2YXIgTz15W1BdLl9lbXB0eUNhdGVnb3JpZXM7TyYmTygpfX19ZWxzZSBoLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLHYpO3ZhciB6PVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxoLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLHoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gci5hZGRGcmFtZXModCxhKX0pKSkseS50cmFuc2l0aW9uJiYhbSYmKFMuYW5pbXx8ay5hbmltKSlrLnRpY2tzJiZ6LnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGguZG9DYWxjZGF0YSh0KSx3LmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksei5wdXNoKChmdW5jdGlvbigpe3JldHVybiBoLnRyYW5zaXRpb25Gcm9tUmVhY3QodCxTLGsscCl9KSk7ZWxzZSBpZihTLmZ1bGxSZXBsb3R8fGsubGF5b3V0UmVwbG90fHxtKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCx6LnB1c2goci5fZG9QbG90KTtlbHNle2Zvcih2YXIgRCBpbiBrLmFycmF5cyl7dmFyIEY9ay5hcnJheXNbRF07aWYoRi5sZW5ndGgpe3ZhciBCPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEQsImRyYXdPbmUiKTtpZihCIT09by5ub29wKWZvcih2YXIgTj0wO048Ri5sZW5ndGg7TisrKUIodCxGW05dKTtlbHNle3ZhciBqPXUuZ2V0Q29tcG9uZW50TWV0aG9kKEQsImRyYXciKTtpZihqPT09by5ub29wKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGRyYXcgY29tcG9uZW50czogIitEKTtqKHQpfX19ei5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksUy5zdHlsZSYmei5wdXNoKHcuZG9UcmFjZVN0eWxlKSwoUy5jb2xvcmJhcnN8fGsuY29sb3JiYXJzKSYmei5wdXNoKHcuZG9Db2xvckJhcnMpLGsubGVnZW5kJiZ6LnB1c2gody5kb0xlZ2VuZCksay5sYXlvdXRzdHlsZSYmei5wdXNoKHcubGF5b3V0U3R5bGVzKSxrLmF4cmFuZ2UmJkgoeiksay50aWNrcyYmei5wdXNoKHcuZG9UaWNrc1JlbGF5b3V0KSxrLm1vZGViYXImJnoucHVzaCh3LmRvTW9kZUJhciksay5jYW1lcmEmJnoucHVzaCh3LmRvQ2FtZXJhKSx6LnB1c2goTSl9ei5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksKGw9by5zeW5jT3JBc3luYyh6LHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVhY3QiLHtkYXRhOmUsbGF5b3V0Om59KSx0fSkpfSxyLnJlZHJhdz1mdW5jdGlvbih0KXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3JldHVybiBfLmNsZWFuRGF0YSh0LmRhdGEpLF8uY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIuX2RvUGxvdCh0KS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWRyYXciKSx0fSkpfSxyLnJlbGF5b3V0PVUsci5yZXN0eWxlPUQsci5zZXRQbG90Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoeCx0KX0sci51cGRhdGU9WixyLl9ndWlSZWxheW91dD1KKFUpLHIuX2d1aVJlc3R5bGU9SihEKSxyLl9ndWlVcGRhdGU9SihaKSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXtCKG4scyh0LG4pLmdldCgpLHJbbl0sZSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi9saWIiOjQ5OCwiLi4vbGliL2V2ZW50cyI6NDg3LCIuLi9saWIvcXVldWUiOjUxNCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTU2LCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiOjU1OSwiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCI6NTcwLCIuLi9wbG90cy9wbG90cyI6NjE0LCIuLi9yZWdpc3RyeSI6NjMzLCIuL2VkaXRfdHlwZXMiOjUzMSwiLi9oZWxwZXJzIjo1MzIsIi4vbWFuYWdlX2FycmF5cyI6NTM0LCIuL3Bsb3RfY29uZmlnIjo1MzYsIi4vcGxvdF9zY2hlbWEiOjUzNywiLi9zdWJyb3V0aW5lcyI6NTM5LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE4NSwiaGFzLWhvdmVyIjoyMjN9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHR5cGVzZXRNYXRoOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxwbG90bHlTZXJ2ZXJVUkw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGVkaXRzOnthbm5vdGF0aW9uUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYXhpc1RpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbEZyYW1lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiY2FydGVzaWFuIiwiZ2wzZCIsImdlbyIsIm1hcGJveCJdLGV4dHJhczpbITAsITFdLGRmbHQ6ImdsM2QrZ2VvK21hcGJveCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJyZXNldCIsImF1dG9zaXplIiwicmVzZXQrYXV0b3NpemUiXSxkZmx0OiJyZXNldCthdXRvc2l6ZSJ9LGRvdWJsZUNsaWNrRGVsYXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozMDAsbWluOjB9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93VGlwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IkVkaXQgY2hhcnQiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZToiYW55IixkZmx0OiExfSxkaXNwbGF5TW9kZUJhcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG92ZXIiLCEwLCExXSxkZmx0OiJob3ZlciJ9LHNob3dTZW5kVG9DbG91ZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hvd0VkaXRJbkNoYXJ0U3R1ZGlvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sdG9JbWFnZUJ1dHRvbk9wdGlvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdEdsUGl4ZWxSYXRpbzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDoidHJhbnNwYXJlbnQifSx0b3BvanNvblVSTDp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLGRmbHQ6Imh0dHBzOi8vY2RuLnBsb3QubHkvIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpudWxsfSxsb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjF9LG5vdGlmeU9uTG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDowfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSxnbG9iYWxUcmFuc2Zvcm1zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJlbi1VUyJ9LGxvY2FsZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sNTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIiksbD10KCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmNvbmZpZ0F0dHJpYnV0ZXMsdT10KCIuL2VkaXRfdHlwZXMiKSxmPWkuZXh0ZW5kRGVlcEFsbCxoPWkuaXNQbGFpbk9iamVjdCxwPWkuaXNBcnJheU9yVHlwZWRBcnJheSxkPWkubmVzdGVkUHJvcGVydHksbT1pLnZhbE9iamVjdE1ldGEsZz1bIl9pc1N1YnBsb3RPYmoiLCJfaXNMaW5rZWRUb0FycmF5IiwiX2FycmF5QXR0clJlZ2V4cHMiLCJfZGVwcmVjYXRlZCJdO2Z1bmN0aW9uIHYodCxlLHIpe2lmKCF0KXJldHVybiExO2lmKHQuX2lzTGlua2VkVG9BcnJheSlpZih5KGVbcl0pKXIrKztlbHNlIGlmKHI8ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZighaChuKSlicmVhaztpZih0PW4scj09PWUubGVuZ3RoLTEpYnJlYWs7aWYodC5faXNMaW5rZWRUb0FycmF5KXtpZigheShlWysrcl0pKXJldHVybiExfWVsc2UgaWYoImluZm9fYXJyYXkiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIXkoaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIXkobykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiB5KHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiB4KCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGYocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpe2lmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKyl3KHIsZSxlLmF0dHJbaV0pO2Vsc2UgdyhyLGUsInN1YnBsb3QiPT09ZS5hdHRyP2UubmFtZTplLmF0dHIpfWZvcih0IGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgYT0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKGEmJihhLnN1YnBsb3RzfHxhLmxheW91dCkpe3ZhciBzPWEuc3VicGxvdHM7aWYocyYmcy54YXhpcyYmIXMueWF4aXMpZm9yKHZhciBsIGluIHMueGF4aXMpZGVsZXRlIHIueWF4aXNbbF19ZWxzZSJjb2xvcnNjYWxlIj09PWUubmFtZT9mKHIsZS5sYXlvdXRBdHRyaWJ1dGVzKTplLmxheW91dEF0dHJpYnV0ZXMmJlQocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX1mdW5jdGlvbiBiKCl7dmFyIHQ9e2ZyYW1lczpmKHt9LHMpfTtyZXR1cm4gXyh0KSx0LmZyYW1lc31mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpPyEwIT09dC5hcnJheU9rJiYiZGF0YV9hcnJheSIhPT10LnZhbFR5cGV8fChuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOmgodCkmJih0LnJvbGU9Im9iamVjdCIpfSkpfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbj10Ll9pc0xpbmtlZFRvQXJyYXk7biYmKGRlbGV0ZSB0Ll9pc0xpbmtlZFRvQXJyYXkscltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCIpfX0pKX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoaChlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1kKHQsciksaT1mKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aS5faXNTdWJwbG90T2JqPSEwLG4uc2V0KGkpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWQodCxyKTtuLnNldChmKG4uZ2V0KCl8fHt9LGUpKX1yLklTX1NVQlBMT1RfT0JKPSJfaXNTdWJwbG90T2JqIixyLklTX0xJTktFRF9UT19BUlJBWT0iX2lzTGlua2VkVG9BcnJheSIsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPWcsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsaTtlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLGk9ZS5iYXNlUGxvdE1vZHVsZTt2YXIgbz17dHlwZTpudWxsfSxzPWYoe30sYSksbD1mKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChsLChmdW5jdGlvbih0LGUscixuLGkpe2QocyxpKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZkKGwsaSkuc2V0KHZvaWQgMCl9KSksZihvLHMpLG4udHJhY2VJcyh0LCJub09wYWNpdHkiKSYmZGVsZXRlIG8ub3BhY2l0eTtuLnRyYWNlSXModCwic2hvd0xlZ2VuZCIpfHwoZGVsZXRlIG8uc2hvd2xlZ2VuZCxkZWxldGUgby5sZWdlbmRncm91cCk7bi50cmFjZUlzKHQsIm5vSG92ZXIiKSYmKGRlbGV0ZSBvLmhvdmVyaW5mbyxkZWxldGUgby5ob3ZlcmxhYmVsKTtlLnNlbGVjdFBvaW50c3x8ZGVsZXRlIG8uc2VsZWN0ZWRwb2ludHM7ZihvLGwpLGkuYXR0cmlidXRlcyYmZihvLGkuYXR0cmlidXRlcyk7by50eXBlPXQ7dmFyIGM9e21ldGE6ZS5tZXRhfHx7fSxjYXRlZ29yaWVzOmUuY2F0ZWdvcmllc3x8e30sYW5pbWF0YWJsZTpCb29sZWFuKGUuYW5pbWF0YWJsZSksdHlwZTp0LGF0dHJpYnV0ZXM6XyhvKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgdT17fTtmKHUsZS5sYXlvdXRBdHRyaWJ1dGVzKSxjLmxheW91dEF0dHJpYnV0ZXM9Xyh1KX1lLmFuaW1hdGFibGV8fHIuY3Jhd2woYywoZnVuY3Rpb24odCl7ci5pc1ZhbE9iamVjdCh0KSYmImFuaW0iaW4gdCYmZGVsZXRlIHQuYW5pbX0pKTtyZXR1cm4gY30oZSl9KSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9Zih7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9bi5jb21wb25lbnRzUmVnaXN0cnlbZV07aS5zY2hlbWEmJmkuc2NoZW1hLnRyYW5zZm9ybXMmJmkuc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKGkuc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goKGZ1bmN0aW9uKGUpe1QocixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSkpfSkpLHthdHRyaWJ1dGVzOl8ocil9fSh0KX0pKSx7ZGVmczp7dmFsT2JqZWN0czptLG1ldGFLZXlzOmcuY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczp1LnRyYWNlcyxsYXlvdXQ6dS5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOnQsbGF5b3V0OngoKSx0cmFuc2Zvcm1zOmUsZnJhbWVzOmIoKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fCIiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl07aWYoLTE9PT1nLmluZGV4T2Yobikpe3ZhciBzPShpP2krIi4iOiIiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxoKG8pJiYiaW1wbGllZEVkaXRzIiE9PW4mJnIuY3Jhd2wobyxlLGErMSxzKX19KSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT1bXSxvPVtdLHM9W107ZnVuY3Rpb24gbCh0LHIsYSxsKXtvPW8uc2xpY2UoMCxsKS5jb25jYXQoW3JdKSxzPXMuc2xpY2UoMCxsKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJigiZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09b1tsLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBsPWVbb1tyXV0sYz1hK29bcl07aWYocj09PW8ubGVuZ3RoLTEpcChsKSYmaS5wdXNoKG4rYyk7ZWxzZSBpZihzW3JdKXtpZihBcnJheS5pc0FycmF5KGwpKWZvcih2YXIgdT0wO3U8bC5sZW5ndGg7dSsrKWgobFt1XSkmJnQobFt1XSxyKzEsYysiWyIrdSsiXS4iKX1lbHNlIGgobCkmJnQobCxyKzEsYysiLiIpfShlLDAsIiIpfWU9dCxuPSIiLHIuY3Jhd2woYSxsKSx0Ll9tb2R1bGUmJnQuX21vZHVsZS5hdHRyaWJ1dGVzJiZyLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGwpO3ZhciBjPXQudHJhbnNmb3JtcztpZihjKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGQ9Zi5fbW9kdWxlO2QmJihuPSJ0cmFuc2Zvcm1zWyIrdSsiXS4iLGU9ZixyLmNyYXdsKGQuYXR0cmlidXRlcyxsKSl9cmV0dXJuIGl9LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89ZVswXSxzPTE7aWYoInRyYW5zZm9ybXMiPT09byl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhLnRyYW5zZm9ybXM7dmFyIGw9dC50cmFuc2Zvcm1zO2lmKCFBcnJheS5pc0FycmF5KGwpfHwhbC5sZW5ndGgpcmV0dXJuITE7dmFyIGM9ZVsxXTtpZigheShjKXx8Yz49bC5sZW5ndGgpcmV0dXJuITE7aT0ocj0obi50cmFuc2Zvcm1zUmVnaXN0cnlbbFtjXS50eXBlXXx8e30pLmF0dHJpYnV0ZXMpJiZyW2VbMl1dLHM9M31lbHNle3ZhciB1PXQuX21vZHVsZTtpZih1fHwodT0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIXUpcmV0dXJuITE7aWYoIShpPShyPXUuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgZj11LmJhc2VQbG90TW9kdWxlO2YmJmYuYXR0cmlidXRlcyYmKGk9Zi5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4gdihpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgZj10Ll9tb2R1bGVzO2lmKGYpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylpZigocz1mW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpe2lmKCJjb2xvcnNjYWxlIj09PShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5uYW1lJiYwPT09ZS5pbmRleE9mKCJjb2xvcmF4aXMiKSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzW2VdO2lmKCFhLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzfXJldHVybiBlIGluIG8mJm9bZV19KHQsZVswXSksZSwxKX19LHsiLi4vbGliIjo0OTgsIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo1NDMsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyI6NTgxLCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6NjA1LCIuLi9yZWdpc3RyeSI6NjMzLCIuL2VkaXRfdHlwZXMiOjUzMSwiLi9wbG90X2NvbmZpZyI6NTM2fV0sNTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1hLnRlbXBsYXRlaXRlbW5hbWU9e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzTGlua2VkVG9BcnJheT10LGUubmFtZT1hLm5hbWUsZS50ZW1wbGF0ZWl0ZW1uYW1lPWEudGVtcGxhdGVpdGVtbmFtZSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW3MoZSldLGE9biYmbltlXTtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aHx8KGE9W10pO3ZhciBsPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lLnRlbXBsYXRlaXRlbW5hbWU9dC50ZW1wbGF0ZWl0ZW1uYW1lO2lmKCFvKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1pLGU7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbc107aWYoYy5uYW1lPT09bilyZXR1cm4gbFtuXT0xLGUuX3RlbXBsYXRlPWMsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgcj1hW2VdLG49ci5uYW1lO2lmKG8obikmJiFsW25dKXt2YXIgaT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2kudGVtcGxhdGVpdGVtbmFtZT1yLnRlbXBsYXRlaXRlbW5hbWUsdC5wdXNoKGkpLGxbbl09MX19cmV0dXJuIHR9fX0sci5hcnJheURlZmF1bHRLZXk9cyxyLmFycmF5RWRpdG9yPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0obi5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHxbXSkubGVuZ3RoLGE9ci5faW5kZXgsbz1hPj1pJiYoci5faW5wdXR8fHt9KS5fdGVtcGxhdGVpdGVtbmFtZTtvJiYoYT1pKTt2YXIgcyxsPWUrIlsiK2ErIl0iO2Z1bmN0aW9uIGMoKXtzPXt9LG8mJihzW2xdPXt9LHNbbF0udGVtcGxhdGVpdGVtbmFtZT1vKX1mdW5jdGlvbiB1KHQsZSl7bz9uLm5lc3RlZFByb3BlcnR5KHNbbF0sdCkuc2V0KGUpOnNbbCsiLiIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9cztyZXR1cm4gYygpLHR9cmV0dXJuIGMoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe3NbdF09ZX0sbW9kaWZ5SXRlbTp1LGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmdShlLHIpO3ZhciBpPWYoKTtmb3IodmFyIGEgaW4gaSluLm5lc3RlZFByb3BlcnR5KHQsYSkuc2V0KGlbYV0pfX19fSx7Ii4uL2xpYiI6NDk4LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDV9XSw1Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksbT1kLmVuZm9yY2UsZz1kLmNsZWFuLHY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlO2Z1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dWzBdLGE9cltuXVsxXTtpZighKGlbMF0+PXRbMV18fGlbMV08PXRbMF0pJiYoYVswXTxlWzFdJiZhWzFdPmVbMF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHgodCl7dmFyIGUsaSxzLHUsZCxtLGc9dC5fZnVsbExheW91dCx2PWcuX3NpemUseD12LnAsXz1oLmxpc3QodCwiIiwhMCk7aWYoZy5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoPyIxMDAlIjpnLndpZHRoKyJweCIsaGVpZ2h0OnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9IZWlnaHQmJiF0LmxheW91dC5oZWlnaHQ/IjEwMCUiOmcuaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLGcud2lkdGgsZy5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LGcucGFwZXJfYmdjb2xvciksci5kcmF3TWFpblRpdGxlKHQpLGYubWFuYWdlKHQpLCFnLl9oYXMoImNhcnRlc2lhbiIpKXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCk7ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXgtbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3grbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCt4K246ZS5fb2Zmc2V0LXgtbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPF8ubGVuZ3RoO2UrKyl7dmFyIGs9KHU9X1tlXSkuX2FuY2hvckF4aXM7dS5fbGluZXBvc2l0aW9ucz17fSx1Ll9sdz1jLmNyaXNwUm91bmQodCx1LmxpbmV3aWR0aCwxKSx1Ll9tYWluTGluZVBvc2l0aW9uPVQodSxrLHUuc2lkZSksdS5fbWFpbk1pcnJvclBvc2l0aW9uPXUubWlycm9yJiZrP1QodSxrLHAuT1BQT1NJVEVfU0lERVt1LnNpZGVdKTpudWxsfXZhciBBPVtdLE09W10sUz1bXSxFPTE9PT1sLm9wYWNpdHkoZy5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShnLnBsb3RfYmdjb2xvcikmJmcucGFwZXJfYmdjb2xvcj09PWcucGxvdF9iZ2NvbG9yO2ZvcihpIGluIGcuX3Bsb3RzKWlmKChzPWcuX3Bsb3RzW2ldKS5tYWlucGxvdClzLmJnJiZzLmJnLnJlbW92ZSgpLHMuYmc9dm9pZCAwO2Vsc2V7dmFyIEw9cy54YXhpcy5kb21haW4sQz1zLnlheGlzLmRvbWFpbixQPXMucGxvdGdyb3VwO2lmKHkoTCxDLFMpKXt2YXIgST1QLm5vZGUoKSxPPXMuYmc9by5lbnN1cmVTaW5nbGUoUCwicmVjdCIsImJnIik7SS5pbnNlcnRCZWZvcmUoTy5ub2RlKCksSS5jaGlsZE5vZGVzWzBdKSxNLnB1c2goaSl9ZWxzZSBQLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLFMucHVzaChbTCxDXSksRXx8KEEucHVzaChpKSxNLnB1c2goaSkpfXZhciB6LEQsUixGLEIsTixqLFUsVixILHEsRyxZLFc9Zy5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoQSk7Zm9yKFcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLFcuZXhpdCgpLnJlbW92ZSgpLFcuZWFjaCgoZnVuY3Rpb24odCl7Zy5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSksZT0wO2U8TS5sZW5ndGg7ZSsrKXM9Zy5fcGxvdHNbTVtlXV0sZD1zLnhheGlzLG09cy55YXhpcyxzLmJnJiZ2b2lkIDAhPT1kLl9vZmZzZXQmJnZvaWQgMCE9PW0uX29mZnNldCYmcy5iZy5jYWxsKGMuc2V0UmVjdCxkLl9vZmZzZXQteCxtLl9vZmZzZXQteCxkLl9sZW5ndGgrMip4LG0uX2xlbmd0aCsyKngpLmNhbGwobC5maWxsLGcucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKTtpZighZy5faGFzT25seUxhcmdlU3Bsb21zKWZvcihpIGluIGcuX3Bsb3RzKXtzPWcuX3Bsb3RzW2ldLGQ9cy54YXhpcyxtPXMueWF4aXM7dmFyIFgsWixKPXMuY2xpcElkPSJjbGlwIitnLl91aWQraSsicGxvdCIsSz1vLmVuc3VyZVNpbmdsZUJ5SWQoZy5fY2xpcHMsImNsaXBQYXRoIixKLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KSk7cy5jbGlwUmVjdD1LLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmQuX2xlbmd0aCxoZWlnaHQ6bS5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUocy5wbG90LGQuX29mZnNldCxtLl9vZmZzZXQpLHMuX2hhc0NsaXBPbkF4aXNGYWxzZT8oWD1udWxsLFo9Sik6KFg9SixaPW51bGwpLGMuc2V0Q2xpcFVybChzLnBsb3QsWCx0KSxzLmxheWVyQ2xpcElkPVp9ZnVuY3Rpb24gUSh0KXtyZXR1cm4iTSIreisiLCIrdCsiSCIrRH1mdW5jdGlvbiAkKHQpe3JldHVybiJNIitkLl9vZmZzZXQrIiwiK3QrImgiK2QuX2xlbmd0aH1mdW5jdGlvbiB0dCh0KXtyZXR1cm4iTSIrdCsiLCIrVSsiViIran1mdW5jdGlvbiBldCh0KXtyZXR1cm4iTSIrdCsiLCIrbS5fb2Zmc2V0KyJ2IittLl9sZW5ndGh9ZnVuY3Rpb24gcnQodCxlLHIpe2lmKCF0LnNob3dsaW5lfHxpIT09dC5fbWFpblN1YnBsb3QpcmV0dXJuIiI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gZy5fcGxvdHMpe3M9Zy5fcGxvdHNbaV0sZD1zLnhheGlzLG09cy55YXhpczt2YXIgbnQ9Ik0wLDAiO2IoZCxpKSYmKEI9dyhkLCJsZWZ0IixtLF8pLHo9ZC5fb2Zmc2V0LShCP3grQjowKSxOPXcoZCwicmlnaHQiLG0sXyksRD1kLl9vZmZzZXQrZC5fbGVuZ3RoKyhOP3grTjowKSxSPVQoZCxtLCJib3R0b20iKSxGPVQoZCxtLCJ0b3AiKSwhKFk9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1kLm1pcnJvciYmImFsbCIhPT1kLm1pcnJvcnx8KGQuX2xpbmVwb3NpdGlvbnNbaV09W1IsRl0pLG50PXJ0KGQsUSwkKSxZJiZkLnNob3dsaW5lJiYoImFsbCI9PT1kLm1pcnJvcnx8ImFsbHRpY2tzIj09PWQubWlycm9yKSYmKG50Kz1RKFIpK1EoRikpLHMueGxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLGQuX2x3KyJweCIpLmNhbGwobC5zdHJva2UsZC5zaG93bGluZT9kLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxzLnhsaW5lcy5hdHRyKCJkIixudCk7dmFyIGl0PSJNMCwwIjtiKG0saSkmJihxPXcobSwiYm90dG9tIixkLF8pLGo9bS5fb2Zmc2V0K20uX2xlbmd0aCsocT94OjApLEc9dyhtLCJ0b3AiLGQsXyksVT1tLl9vZmZzZXQtKEc/eDowKSxWPVQobSxkLCJsZWZ0IiksSD1UKG0sZCwicmlnaHQiKSwhKFk9IW0uX2FuY2hvckF4aXN8fGkhPT1tLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1tLm1pcnJvciYmImFsbCIhPT1tLm1pcnJvcnx8KG0uX2xpbmVwb3NpdGlvbnNbaV09W1YsSF0pLGl0PXJ0KG0sdHQsZXQpLFkmJm0uc2hvd2xpbmUmJigiYWxsIj09PW0ubWlycm9yfHwiYWxsdGlja3MiPT09bS5taXJyb3IpJiYoaXQrPXR0KFYpK3R0KEgpKSxzLnlsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixtLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLG0uc2hvd2xpbmU/bS5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy55bGluZXMuYXR0cigiZCIsaXQpfXJldHVybiBoLm1ha2VDbGlwUGF0aHModCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gdyh0LGUscixuKXtpZihfKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmXyh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7c3dpdGNoKCJzdGFydCI9PT1lP2k9ci5wYWQubDoiZW5kIj09PWUmJihpPS1yLnBhZC5yKSxyLnhyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLmwrbi53KnIueCtpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2lmKCIwZW0iIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrImVtIiYmKGk9ci5wYWQudCk6aT0tci5wYWQuYiwiYXV0byI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC5oZWlnaHQtdC5oZWlnaHQqci55K2l9fXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix4XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9Im1pZGRsZSI7by5pc1JpZ2h0QW5jaG9yKGUpP3I9ImVuZCI6by5pc0xlZnRBbmNob3IoZSkmJihyPSJzdGFydCIpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj0iMGVtIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrImVtIjpvLmlzTWlkZGxlQW5jaG9yKGUpJiYocj1wLk1JRF9TSElGVCsiZW0iKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUudGV4dCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLnBsb3QsYXR0cmlidXRlczp7eDpUKGUscikseTprKGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxpLmNhbGwoIl9kb1Bsb3QiLHQsIiIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gaC5kcmF3KHQsInJlZHJhdyIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2YubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zY2VuZS5zZXRWaWV3cG9ydChpKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtzKHQpO2Zvcih2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXMsbz0wO288bi5sZW5ndGg7bysrKW5bb10ucGxvdCh0KTtyZXR1cm4gci5yZWRyYXdSZWdsVHJhY2VzKHQpLGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSh0KSxlLl9yZXBsb3R0aW5nPSExLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5yZWRyYXdSZWdsVHJhY2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoZS5faGFzKCJyZWdsIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJjAhPT1sLl9sZW5ndGgmJigic3Bsb20iPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6InNjYXR0ZXJnbCI9PT1sLnR5cGU/by5wdXNoVW5pcXVlKGEsbC54YXhpcytsLnlheGlzKToic2NhdHRlcnBvbGFyZ2wiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWgubGlzdCh0LCIiLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKylpZighblsoZT1yW2ldKS5faWRdKXtuW2UuX2lkXT0xLGcodCxlKSx2KHQsZSk7dmFyIGE9ZS5fbWF0Y2hHcm91cDtpZihhKWZvcih2YXIgbyBpbiBhKXt2YXIgcz1oLmdldEZyb21JZCh0LG8pO3YodCxzLGUucmFuZ2UpLG5bb109MX19bSh0KX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNsaWRlcnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInVwZGF0ZW1lbnVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo0MjQsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo0NTksIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vbGliIjo0OTgsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NDgyLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NTU3LCIuLi9wbG90cy9wbG90cyI6NjE0LCIuLi9yZWdpc3RyeSI6NjMzLCJAcGxvdGx5L2QzIjo1OH1dLDU0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10scD1tKHQsYyxhKSxkPW0odCxjLG8pLGc9cihkKTtpZighZyl7dmFyIHY9ZihjKTt2IT09YyYmKGc9cihkPW0odCx2LG8pKSl9aWYoKCFzfHxzIT09ZykmJiEoIWd8fGcuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09Zy52YWxUeXBlfHxnLmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCFnLnZhbFR5cGUmJmkodSkpaCh1LGUscixwLGQpO2Vsc2UgaWYoZy5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIFQ9dy5uYW1lO2lmKFQpYltUXXx8KGgodyxlLHIsbSh1LHgscCksbSh1LHgsZCkpLHgrKyxiW1RdPTEpO2Vsc2UgaWYoIXkpe3ZhciBrPW0odCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxBPW0odSx4LHApO2godyxlLHIsQSxtKHUseCxkKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLEEpO24ubmVzdGVkUHJvcGVydHkoZSxrKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLHApLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrIlsiK2UrIl0iOnIrIi4iK2U6ZX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gdih0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlImRhdGEiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuIjticmVhaztjYXNlImxheW91dCI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LiI7YnJlYWs7Y2FzZSJtaXNzaW5nIjplPXQucGF0aD8iVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgaXRlbSAiK3QucGF0aCsiIHdpdGggbmFtZSAiK3QudGVtcGxhdGVpdGVtbmFtZToiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgIit0LmluZGV4KyIsIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiLiI7YnJlYWs7Y2FzZSJ1bnVzZWQiOmU9dC5wYXRoPyJUaGUgdGVtcGxhdGUgaXRlbSBhdCAiK3QucGF0aCsiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuIjp0LmRhdGFDb3VudD8iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgbm90IHVzZWQuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIjoiVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuIjticmVhaztjYXNlInJldXNlZCI6ZT0iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIn1yZXR1cm4gdC5tc2c9ZSx0fXIubWFrZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3Q9bi5pc1BsYWluT2JqZWN0KHQpP3Q6bi5nZXRHcmFwaERpdih0KSx0PW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30se2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLG8uc3VwcGx5RGVmYXVsdHModCk7dmFyIGU9dC5kYXRhfHxbXSxyPXQubGF5b3V0fHx7fTtyLl9iYXNlUGxvdE1vZHVsZXM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHIuX21vZHVsZXM9dC5fZnVsbExheW91dC5fbW9kdWxlczt2YXIgYT17ZGF0YTp7fSxsYXlvdXQ6e319O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9e307aCh0LGUsZC5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scywidHlwZSIpLGk9YS5kYXRhW3JdO2l8fChpPWEuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSkpLGgocixhLmxheW91dCxwLmJpbmQobnVsbCxyKSksZGVsZXRlIGEubGF5b3V0LnRlbXBsYXRlO3ZhciBsPXIudGVtcGxhdGU7aWYoaShsKSl7dmFyIGYsbSxnLHYseSx4LGI9bC5sYXlvdXQ7aShiKSYmdShiLGEubGF5b3V0KTt2YXIgXz1sLmRhdGE7aWYoaShfKSl7Zm9yKG0gaW4gYS5kYXRhKWlmKGc9X1ttXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeD0oeT1hLmRhdGFbbV0pLmxlbmd0aCx2PWcubGVuZ3RoLGY9MDtmPHg7ZisrKXUoZ1tmJXZdLHlbZl0pO2ZvcihmPXg7Zjx2O2YrKyl5LnB1c2gobi5leHRlbmREZWVwKHt9LGdbZl0pKX1mb3IobSBpbiBfKW0gaW4gYS5kYXRhfHwoYS5kYXRhW21dPW4uZXh0ZW5kRGVlcChbXSxfW21dKSl9fXJldHVybiBhfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGg9ci5fZnVsbExheW91dCxwPXIuX2Z1bGxEYXRhLGQ9e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSYmaShlW25dKSl7dmFyIGEsbz1mKG4pLHM9W107Zm9yKGE9MDthPHIubGVuZ3RoO2ErKylzLnB1c2gobShlLG4sclthXSkpLG8hPT1uJiZzLnB1c2gobShlLG8sclthXSkpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspZFtzW2FdXT0xO3QoZVtuXSxzKX19KGgsWyJsYXlvdXQiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZpKGVbbl0pKXt2YXIgYT1tKGUsbixyKTtkW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDphfSl9fShzLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgXz1wW2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gbCl7dmFyIHc9bFt5XS5sZW5ndGgsVD14W3ldfHwwO3c+VD91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSk6VD53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPW0oZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJmcoYSkmJnQoYSxvKX19KHtkYXRhOnAsbGF5b3V0Omh9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAodil9fSx7Ii4uL2xpYiI6NDk4LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4vcGxvdF9jb25maWciOjUzNiwiLi9wbG90X3NjaGVtYSI6NTM3LCIuL3Bsb3RfdGVtcGxhdGUiOjUzOH1dLDU0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9wbG90X2FwaSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vc25hcHNob3QvaGVscGVycyIpLGw9dCgiLi4vc25hcHNob3QvdG9zdmciKSxjPXQoIi4uL3NuYXBzaG90L3N2Z3RvaW1nIiksdT10KCIuLi92ZXJzaW9uIikudmVyc2lvbixmPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIiwiZnVsbC1qc29uIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLHAsZDtmdW5jdGlvbiBtKHQpe3JldHVybiEodCBpbiBlKXx8by52YWxpZGF0ZShlW3RdLGZbdF0pfWlmKGU9ZXx8e30sby5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30scD10LmNvbmZpZ3x8e30sZD17fSk6KHQ9by5nZXRHcmFwaERpdih0KSxyPW8uZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9by5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxwPXQuX2NvbnRleHQsZD10Ll9mdWxsTGF5b3V0fHx7fSksIW0oIndpZHRoIikmJm51bGwhPT1lLndpZHRofHwhbSgiaGVpZ2h0IikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighbSgiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJFeHBvcnQgZm9ybWF0IGlzIG5vdCAiK28uam9pbjIoZi5mb3JtYXQudmFsdWVzLCIsICIsIiBvciAiKSsiLiIpO3ZhciBnPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gby5jb2VyY2UoZSxnLGYsdCxyKX12YXIgeT12KCJmb3JtYXQiKSx4PXYoIndpZHRoIiksYj12KCJoZWlnaHQiKSxfPXYoInNjYWxlIiksdz12KCJzZXRCYWNrZ3JvdW5kIiksVD12KCJpbWFnZURhdGFPbmx5Iiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsay5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBBPW8uZXh0ZW5kRmxhdCh7fSxoKTt4P0Eud2lkdGg9eDpudWxsPT09ZS53aWR0aCYmbihkLndpZHRoKSYmKEEud2lkdGg9ZC53aWR0aCksYj9BLmhlaWdodD1iOm51bGw9PT1lLmhlaWdodCYmbihkLmhlaWdodCkmJihBLmhlaWdodD1kLmhlaWdodCk7dmFyIE09by5leHRlbmRGbGF0KHt9LHAse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOnd9KSxTPXMuZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBFKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQscy5nZXREZWxheShrLl9mdWxsTGF5b3V0KSl9KSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXt2YXIgcj1sKGsseSxfKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsZj1rLl9mdWxsTGF5b3V0LmhlaWdodDtmdW5jdGlvbiBoKCl7aS5wdXJnZShrKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGspfWlmKCJmdWxsLWpzb24iPT09eSl7dmFyIHA9YS5ncmFwaEpzb24oaywhMSwia2VlcGRhdGEiLCJvYmplY3QiLCEwLCEwKTtyZXR1cm4gcC52ZXJzaW9uPXUscD1KU09OLnN0cmluZ2lmeShwKSxoKCksdChUP3A6cy5lbmNvZGVKU09OKHApKX1pZihoKCksInN2ZyI9PT15KXJldHVybiB0KFQ/cjpzLmVuY29kZVNWRyhyKSk7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZC5pZD1vLnJhbmRzdHIoKSxjKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpmLHNjYWxlOl8sY2FudmFzOmQsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe2kubmV3UGxvdChrLHIsQSxNKS50aGVuKFMpLnRoZW4oRSkudGhlbihMKS50aGVuKChmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBUP3QucmVwbGFjZShzLklNQUdFX1VSTF9QUkVGSVgsIiIpOnR9KGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZSh0KX0pKX0pKX19LHsiLi4vbGliIjo0OTgsIi4uL3Bsb3RzL3Bsb3RzIjo2MTQsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjYzNywiLi4vc25hcHNob3Qvc3ZndG9pbWciOjYzOSwiLi4vc25hcHNob3QvdG9zdmciOjY0MSwiLi4vdmVyc2lvbiI6MTExOCwiLi9wbG90X2FwaSI6NTM1LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYoInRyYW5zZm9ybXMiIT09cCl7dmFyIHY9by5zbGljZSgpO3YucHVzaChwKTt2YXIgeT10W3BdLHg9ZVtwXSxiPWcocixwKSxfPShifHx7fSkudmFsVHlwZSx3PSJpbmZvX2FycmF5Ij09PV8sVD0iY29sb3JzY2FsZSI9PT1fLGs9KGJ8fHt9KS5pdGVtcztpZihtKHIscCkpaWYocyh5KSYmcyh4KSYmImFueSIhPT1fKXUoeSx4LGIsaSxhLHYpO2Vsc2UgaWYodyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIEEsTSxTLEUsTCxDPXgubGVuZ3RoLFA9QXJyYXkuaXNBcnJheShrKTtpZihQJiYoQz1NYXRoLm1pbihDLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoTT0wO008QztNKyspaWYobCh5W01dKSl7eVtNXS5sZW5ndGg+eFtNXS5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoTSx4W01dLmxlbmd0aCkpKTt2YXIgST14W01dLmxlbmd0aDtmb3IoQT0wO0E8KFA/TWF0aC5taW4oSSxrW01dLmxlbmd0aCk6SSk7QSsrKVM9UD9rW01dW0FdOmssRT15W01dW0FdLEw9eFtNXVtBXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSxBKSxFLEwpKTppLnB1c2goZCgidmFsdWUiLGEsdi5jb25jYXQoTSxBKSxFKSl9ZWxzZSBpLnB1c2goZCgiYXJyYXkiLGEsdi5jb25jYXQoTSkseVtNXSkpO2Vsc2UgZm9yKE09MDtNPEM7TSsrKVM9UD9rW01dOmssRT15W01dLEw9eFtNXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSksRSxMKSk6aS5wdXNoKGQoInZhbHVlIixhLHYuY29uY2F0KE0pLEUpKX1lbHNlIGlmKGIuaXRlbXMmJiF3JiZsKHkpKXt2YXIgTyx6LEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUj1bXTtmb3IoTz0wO088eC5sZW5ndGg7TysrKXt2YXIgRj14W09dLl9pbmRleHx8TztpZigoej12LnNsaWNlKCkpLnB1c2goRikscyh5W0ZdKSYmcyh4W09dKSl7Ui5wdXNoKEYpO3ZhciBCPXlbRl0sTj14W09dO3MoQikmJiExIT09Qi52aXNpYmxlJiYhMT09PU4udmlzaWJsZT9pLnB1c2goZCgiaW52aXNpYmxlIixhLHopKTp1KEIsTixELGksYSx6KX19Zm9yKE89MDtPPHkubGVuZ3RoO08rKykoej12LnNsaWNlKCkpLnB1c2goTykscyh5W09dKT8tMT09PVIuaW5kZXhPZihPKSYmaS5wdXNoKGQoInVudXNlZCIsYSx6KSk6aS5wdXNoKGQoIm9iamVjdCIsYSx6LHlbT10pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKGQoIm9iamVjdCIsYSx2LHkpKTpjKHkpfHwhYyh4KXx8d3x8VD9wIGluIGU/bi52YWxpZGF0ZSh5LGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdix5LHgpKTppLnB1c2goZCgidmFsdWUiLGEsdix5KSk6aS5wdXNoKGQoInVudXNlZCIsYSx2LHkpKTppLnB1c2goZCgiYXJyYXkiLGEsdix5KSk7ZWxzZSBpLnB1c2goZCgic2NoZW1hIixhLHYpKX19cmV0dXJuIGl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KTt2YXIgcixjLGg9YS5nZXQoKSxwPVtdLG09e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8obS5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihtLmRhdGE9W10scj1bXSxwLnB1c2goZCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhtLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKToobS5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJnAucHVzaChkKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMobSk7Zm9yKHZhciBnPW0uX2Z1bGxEYXRhLHY9ci5sZW5ndGgseT0wO3k8djt5Kyspe3ZhciB4PXJbeV0sYj1bImRhdGEiLHldO2lmKHMoeCkpe3ZhciBfPWdbeV0sdz1fLnR5cGUsVD1oLnRyYWNlc1t3XS5hdHRyaWJ1dGVzO1QudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt3XX0sITE9PT1fLnZpc2libGUmJiExIT09eC52aXNpYmxlJiZwLnB1c2goZCgiaW52aXNpYmxlIixiKSksdSh4LF8sVCxwLGIpO3ZhciBrPXgudHJhbnNmb3JtcyxBPV8udHJhbnNmb3JtcztpZihrKXtsKGspfHxwLnB1c2goZCgiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIFM9WyJ0cmFuc2Zvcm1zIixNXSxFPWtbTV0udHlwZTtpZihzKGtbTV0pKXt2YXIgTD1oLnRyYW5zZm9ybXNbRV0/aC50cmFuc2Zvcm1zW0VdLmF0dHJpYnV0ZXM6e307TC50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW01dLEFbTV0sTCxwLGIsUyl9ZWxzZSBwLnB1c2goZCgib2JqZWN0IixiLFMpKX19fWVsc2UgcC5wdXNoKGQoIm9iamVjdCIsYikpfXZhciBDPW0uX2Z1bGxMYXlvdXQsUD1mKGgsZyk7cmV0dXJuIHUoYyxDLFAscCwibGF5b3V0IiksMD09PXAubGVuZ3RoP3ZvaWQgMDpwfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpwKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6cCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIHAodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltwKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/cCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltwKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gZCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXkoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFt5KGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHkodCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjQ5OCwiLi4vcGxvdHMvcGxvdHMiOjYxNCwiLi9wbG90X2NvbmZpZyI6NTM2LCIuL3Bsb3Rfc2NoZW1hIjo1Mzd9XSw1NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDU0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBtPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8bTthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjQ5OCwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4fV0sNTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXB0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZHJhbms6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxZTMsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToic3R5bGUifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LGlkczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6MzkyLCIuL2ZvbnRfYXR0cmlidXRlcyI6NTgwfV0sNTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPWkuZGF0ZVRpbWUybXMsbz1pLmluY3JlbWVudE1vbnRoLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRIO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZigiZGF0ZSIhPT1lLnR5cGUpcmV0dXJue3ZhbHM6aX07dmFyIGw9dFtyKyJwZXJpb2RhbGlnbm1lbnQiXTtpZighbClyZXR1cm57dmFsczppfTt2YXIgYyx1PXRbcisicGVyaW9kIl07aWYobih1KSl7aWYoKHU9K3UpPD0wKXJldHVybnt2YWxzOml9fWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB1JiYiTSI9PT11LmNoYXJBdCgwKSl7dmFyIGY9K3Uuc3Vic3RyaW5nKDEpO2lmKCEoZj4wJiZNYXRoLnJvdW5kKGYpPT09ZikpcmV0dXJue3ZhbHM6aX07Yz1mfWZvcih2YXIgaD1lLmNhbGVuZGFyLHA9InN0YXJ0Ij09PWwsZD0iZW5kIj09PWwsbT10W3IrInBlcmlvZDAiXSxnPWEobSxoKXx8MCx2PVtdLHk9W10seD1bXSxiPWkubGVuZ3RoLF89MDtfPGI7XysrKXt2YXIgdyxULGssQT1pW19dO2lmKGMpe2Zvcih3PU1hdGgucm91bmQoKEEtZykvKGMqcykpLGs9byhnLGMqdyxoKTtrPkE7KWs9byhrLC1jLGgpO2Zvcig7azw9QTspaz1vKGssYyxoKTtUPW8oaywtYyxoKX1lbHNle2ZvcihrPWcrKHc9TWF0aC5yb3VuZCgoQS1nKS91KSkqdTtrPkE7KWstPXU7Zm9yKDtrPD1BOylrKz11O1Q9ay11fXZbX109cD9UOmQ/azooVCtrKS8yLHlbX109VCx4W19dPWt9cmV0dXJue3ZhbHM6dixzdGFydHM6eSxlbmRzOnh9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9fX0se31dLDU0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuRlBfU0FGRSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vYXhpc19pZHMiKSx1PWMuZ2V0RnJvbUlkLGY9Yy5pc0xpbmtlZDtmdW5jdGlvbiBoKHQsZSl7dmFyIHIsbixpPVtdLG89dC5fZnVsbExheW91dCxzPWQobyxlLDApLGw9ZChvLGUsMSksYz1tKHQsZSksdT1jLm1pbixmPWMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWYubGVuZ3RoKXJldHVybiBhLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgaD11WzBdLnZhbCxnPWZbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmaD09PWc7cisrKWg9TWF0aC5taW4oaCx1W3JdLnZhbCk7Zm9yKHI9MTtyPGYubGVuZ3RoJiZoPT09ZztyKyspZz1NYXRoLm1heChnLGZbcl0udmFsKTt2YXIgdj0hMTtpZihlLnJhbmdlKXt2YXIgeT1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2PXlbMV08eVswXX0icmV2ZXJzZWQiPT09ZS5hdXRvcmFuZ2UmJih2PSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgeCxiLF8sdyxULGssQT1lLnJhbmdlbW9kZSxNPSJ0b3plcm8iPT09QSxTPSJub25uZWdhdGl2ZSI9PT1BLEU9ZS5fbGVuZ3RoLEw9RS8xMCxDPTA7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylmb3IoeD11W3JdLG49MDtuPGYubGVuZ3RoO24rKykoaz0oYj1mW25dKS52YWwteC52YWwtcChlLHgudmFsLGIudmFsKSk+MCYmKChUPUUtcyh4KS1sKGIpKT5MP2svVD5DJiYoXz14LHc9YixDPWsvVCk6ay9FPkMmJihfPXt2YWw6eC52YWwsbm9wYWQ6MX0sdz17dmFsOmIudmFsLG5vcGFkOjF9LEM9ay9FKSk7aWYoaD09PWcpe3ZhciBQPWgtMSxJPWgrMTtpZihNKWlmKDA9PT1oKWk9WzAsMV07ZWxzZXt2YXIgTz0oaD4wP2Y6dSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGwoZSkpfSksMCksej1oLygxLU1hdGgubWluKC41LE8vRSkpO2k9aD4wP1swLHpdOlt6LDBdfWVsc2UgaT1TP1tNYXRoLm1heCgwLFApLE1hdGgubWF4KDEsSSldOltQLEldfWVsc2UgTT8oXy52YWw+PTAmJihfPXt2YWw6MCxub3BhZDoxfSksdy52YWw8PTAmJih3PXt2YWw6MCxub3BhZDoxfSkpOlMmJihfLnZhbC1DKnMoXyk8MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDoxLG5vcGFkOjF9KSksQz0ody52YWwtXy52YWwtcChlLHgudmFsLGIudmFsKSkvKEUtcyhfKS1sKHcpKSxpPVtfLnZhbC1DKnMoXyksdy52YWwrQypsKHcpXTtyZXR1cm4gdiYmaS5yZXZlcnNlKCksYS5zaW1wbGVNYXAoaSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj0wO2lmKHQucmFuZ2VicmVha3MpZm9yKHZhciBpPXQubG9jYXRlQnJlYWtzKGUsciksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO24rPW8ubWF4LW8ubWlufXJldHVybiBufWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBpPS4wNSplLl9sZW5ndGgsbz1lLl9hbmNob3JBeGlzfHx7fTtpZigtMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIil8fC0xIT09KG8udGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSl7dmFyIHM9InJldmVyc2VkIj09PWUuYXV0b3JhbmdlO2lmKCFzKXt2YXIgYz1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtzPWNbMV08Y1swXX1zJiYocj0hcil9dmFyIHU9MDtyZXR1cm4gZih0LGUuX2lkKXx8KHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPTAsbz0ieCI9PT1lLl9pZC5jaGFyQXQoMCk7Zm9yKHZhciBzIGluIHQuX3Bsb3RzKXt2YXIgYz10Ll9wbG90c1tzXTtpZihlLl9pZD09PWMueGF4aXMuX2lkfHxlLl9pZD09PWMueWF4aXMuX2lkKXt2YXIgdT0obz9jLnlheGlzOmMueGF4aXMpfHx7fTtpZigtMSE9PSh1LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJighciYmKCJsZWZ0Ij09PXUuc2lkZXx8ImJvdHRvbSI9PT11LnNpZGUpfHxyJiYoInRvcCI9PT11LnNpZGV8fCJyaWdodCI9PT11LnNpZGUpKSl7aWYodS5fdmFscyl7dmFyIGY9YS5kZWcycmFkKHUuX3RpY2tBbmdsZXNbdS5faWQrInRpY2siXXx8MCksaD1NYXRoLmFicyhNYXRoLmNvcyhmKSkscD1NYXRoLmFicyhNYXRoLnNpbihmKSk7aWYoIXUuX3ZhbHNbMF0uYmIpe3ZhciBkPXUuX2lkKyJ0aWNrIjt1Ll9zZWxlY3Rpb25zW2RdLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Uuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSYmKHQuYmI9bC5iQm94KGUubm9kZSgpKSl9KSl9Zm9yKHZhciBtPTA7bTx1Ll92YWxzLmxlbmd0aDttKyspe3ZhciBnPXUuX3ZhbHNbbV0uYmI7aWYoZyl7dmFyIHY9NitnLndpZHRoLHk9NitnLmhlaWdodDtpPU1hdGgubWF4KGksbz9NYXRoLm1heCh2KmgseSpwKTpNYXRoLm1heCh5KmgsdipwKSl9fX0iaW5zaWRlIj09PXUudGlja3MmJiJpbnNpZGUiPT09dS50aWNrbGFiZWxwb3NpdGlvbiYmKGkrPXUudGlja2xlbnx8MCl9fX1yZXR1cm4gaX0odCxlLHIpKSxpPU1hdGgubWF4KHUsaSksImRvbWFpbiI9PT1lLmNvbnN0cmFpbiYmZS5faW5wdXREb21haW4mJihpKj0oZS5faW5wdXREb21haW5bMV0tZS5faW5wdXREb21haW5bMF0pLyhlLmRvbWFpblsxXS1lLmRvbWFpblswXSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vcGFkPzA6dC5wYWQrKHQuZXh0cmFwYWQ/aTp1KX19ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6aCxtYWtlUGFkRm46ZCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUscil7aWYoZS5zZXRTY2FsZSgpLGUuYXV0b3JhbmdlKXtlLnJhbmdlPXI/ci5zbGljZSgpOmgodCxlKSxlLl9yPWUucmFuZ2Uuc2xpY2UoKSxlLl9ybD1hLnNpbXBsZU1hcChlLl9yLGUucjJsKTt2YXIgbj1lLl9pbnB1dCxpPXt9O2lbZS5fYXR0cisiLnJhbmdlIl09ZS5yYW5nZSxpW2UuX2F0dHIrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxzLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKSxuLnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxuLmF1dG9yYW5nZT1lLmF1dG9yYW5nZX12YXIgbz1lLl9hbmNob3JBeGlzO2lmKG8mJm8ucmFuZ2VzbGlkZXIpe3ZhciBsPW8ucmFuZ2VzbGlkZXJbZS5fbmFtZV07bCYmImF1dG8iPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPWgodCxlKSksby5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09YS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBuLGEscyxsLGMsdSxmLGgscCxkPVtdLG09W10seT1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSksdz0ibG9nIj09PXQudHlwZSxUPSExLGs9ci52cGFkTGluZWFyaXplZHx8ITE7ZnVuY3Rpb24gQSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBUPSEwLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIE09QSgodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLFM9QSgodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLEU9QShyLnZwYWRwbHVzfHxyLnZwYWQpLEw9QShyLnZwYWRtaW51c3x8ci52cGFkKTtpZighVCl7aWYoaD0xLzAscD0tMS8wLHcpZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+MCYmKGg9YSksYT5wJiZhPG8mJihwPWEpO2Vsc2UgZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+LW8mJihoPWEpLGE+cCYmYTxvJiYocD1hKTtlPVtoLHBdLHk9Mn12YXIgQz17dG96ZXJvOl8sZXh0cmFwYWQ6Yn07ZnVuY3Rpb24gUChyKXtzPWVbcl0saShzKSYmKHU9TShyKSxmPVMociksaz8obD10LmMybChzKS1MKHIpLGM9dC5jMmwocykrRShyKSk6KGg9cy1MKHIpLHA9cytFKHIpLHcmJmg8cC8xMCYmKGg9cC8xMCksbD10LmMybChoKSxjPXQuYzJsKHApKSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkseChsKSYmZyhkLGwsZixDKSx4KGMpJiZ2KG0sYyx1LEMpKX12YXIgST1NYXRoLm1pbig2LHkpO2ZvcihuPTA7bjxJO24rKylQKG4pO2ZvcihuPXktMTtuPj1JO24tLSlQKG4pO3JldHVybnttaW46ZCxtYXg6bSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczptfTtmdW5jdGlvbiBtKHQsZSxyKXt2YXIgbixpLGEsbz1lLl9pZCxzPXQuX2Z1bGxEYXRhLGw9dC5fZnVsbExheW91dCxjPVtdLGY9W107ZnVuY3Rpb24gaCh0LGUpe2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPXRbZVtuXV0scz0oci5fZXh0cmVtZXN8fHt9KVtvXTtpZighMD09PXIudmlzaWJsZSYmcyl7Zm9yKGk9MDtpPHMubWluLmxlbmd0aDtpKyspYT1zLm1pbltpXSxnKGMsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8cy5tYXgubGVuZ3RoO2krKylhPXMubWF4W2ldLHYoZixhLnZhbCxhLnBhZCx7ZXh0cmFwYWQ6YS5leHRyYXBhZH0pfX19aWYoaChzLGUuX3RyYWNlSW5kaWNlcyksaChsLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksaChsLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSksZS5fbWF0Y2hHcm91cCYmIXIpZm9yKHZhciBwIGluIGUuX21hdGNoR3JvdXApaWYocCE9PWUuX2lkKXt2YXIgZD11KHQscCkseT1tKHQsZCwhMCkseD1lLl9sZW5ndGgvZC5fbGVuZ3RoO2ZvcihpPTA7aTx5Lm1pbi5sZW5ndGg7aSsrKWE9eS5taW5baV0sZyhjLGEudmFsLGEucGFkKngse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8eS5tYXgubGVuZ3RoO2krKylhPXkubWF4W2ldLHYoZixhLnZhbCxhLnBhZCp4LHtleHRyYXBhZDphLmV4dHJhcGFkfSl9cmV0dXJue21pbjpjLG1heDpmfX1mdW5jdGlvbiBnKHQsZSxyLG4pe3kodCxlLHIsbixiKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3kodCxlLHIsbixfKX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiB4KHQpe3JldHVybiBpKHQpJiZNYXRoLmFicyh0KTxvfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQ+PWV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2F4aXNfaWRzIjo1NTMsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4vY2xlYW5fdGlja3MiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxnPW0uT05FTUFYWUVBUix2PW0uT05FQVZHWUVBUix5PW0uT05FTUlOWUVBUix4PW0uT05FTUFYUVVBUlRFUixiPW0uT05FQVZHUVVBUlRFUixfPW0uT05FTUlOUVVBUlRFUix3PW0uT05FTUFYTU9OVEgsVD1tLk9ORUFWR01PTlRILGs9bS5PTkVNSU5NT05USCxBPW0uT05FV0VFSyxNPW0uT05FREFZLFM9TS8yLEU9bS5PTkVIT1VSLEw9bS5PTkVNSU4sQz1tLk9ORVNFQyxQPW0uTUlOVVNfU0lHTixJPW0uQkFETlVNLE89e0s6Inplcm9saW5lIn0sej17SzoiZ3JpZGxpbmUiLEw6InBhdGgifSxEPXtLOiJ0aWNrIixMOiJwYXRoIn0sUj17SzoidGljayIsTDoidGV4dCJ9LEY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLEI9Ri5NSURfU0hJRlQsTj1GLkNBUF9TSElGVCxqPUYuTElORV9TUEFDSU5HLFU9Ri5PUFBPU0lURV9TSURFLFY9ZS5leHBvcnRzPXt9O1Yuc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIEg9dCgiLi9heGlzX2F1dG90eXBlIikscT10KCIuL2F4aXNfaWRzIiksRz1xLmlkU29ydCxZPXEuaXNMaW5rZWQ7Vi5pZDJuYW1lPXEuaWQybmFtZSxWLm5hbWUyaWQ9cS5uYW1lMmlkLFYuY2xlYW5JZD1xLmNsZWFuSWQsVi5saXN0PXEubGlzdCxWLmxpc3RJZHM9cS5saXN0SWRzLFYuZ2V0RnJvbUlkPXEuZ2V0RnJvbUlkLFYuZ2V0RnJvbVRyYWNlPXEuZ2V0RnJvbVRyYWNlO3ZhciBXPXQoIi4vYXV0b3JhbmdlIik7Vi5nZXRBdXRvUmFuZ2U9Vy5nZXRBdXRvUmFuZ2UsVi5maW5kRXh0cmVtZXM9Vy5maW5kRXh0cmVtZXM7ZnVuY3Rpb24gWCh0KXt2YXIgZT0xZS00Kih0WzFdLXRbMF0pO3JldHVyblt0WzBdLWUsdFsxXStlXX1WLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fCgic3RyaW5nIj09dHlwZW9mIGE/YTphWzBdKSksYXx8KGE9aSksbD1sLmNvbmNhdChsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQrIiBkb21haW4ifSkpKSx1W2NdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5jb25jYXQoYT8ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmE6W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LFYuZ2V0UmVmVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90OiJwYXBlciI9PT10PyJwYXBlciI6InBpeGVsIj09PXQ/InBpeGVsIjovKCBkb21haW4pJC8udGVzdCh0KT8iZG9tYWluIjoicmFuZ2UifSxWLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsO2lmKCJyYW5nZSIhPT1WLmdldFJlZlR5cGUobikpbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPVYuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LFYuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpWLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sVi5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxWLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW1YuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIFo9Vi5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOkgobix2b2lkIDAse2F1dG90eXBlbnVtYmVyczp0Ll9mdWxsTGF5b3V0LmF1dG90eXBlbnVtYmVyc30pLF9jYXRlZ29yaWVzOltdfSxWLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Vi5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfToiaWRzIj09PWE/e2QyYzpLLGMyZDpLfTp7ZDJjOkosYzJkOkp9fTtmdW5jdGlvbiBKKHQpe3JldHVybit0fWZ1bmN0aW9uIEsodCl7cmV0dXJuIFN0cmluZyh0KX1mdW5jdGlvbiBRKHQpe3JldHVybit0LnN1YnN0cmluZygxKX1WLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gWih0LGUscixuKS5kMmN9LFYuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LFYubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxWLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Vi5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxWLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVYubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxWLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LFYuc2V0Q29udmVydChsKSxvPW8mJmQuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPWQudGljazAodm9pZCAwLGwudHlwZSxhKTtlbHNle3ZhciBmO2lmKHIpZj0odS1jKS9yO2Vsc2V7dmFyIGg9cy5kaXN0aW5jdFZhbHModCkscD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGgubWluRGlmZikvTWF0aC5MTjEwKSksbT1wKnMucm91bmRVcChoLm1pbkRpZmYvcCxbLjksMS45LDQuOSw5LjldLCEwKTtmPU1hdGgubWF4KG0sMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksaShmKXx8KGY9MSl9Vi5hdXRvVGlja3MobCxmKX12YXIgZyx2PWwuZHRpY2sseT1WLnRpY2tJbmNyZW1lbnQoVi50aWNrRmlyc3QobCksdiwicmV2ZXJzZSIsYSk7aWYoIm51bWJlciI9PXR5cGVvZiB2KWc9KHk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0lMT09MD9sKys6aShlW2ZdKXx8YysrLHUoZVtmXSkmJm8rKyx1KGVbZl0rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLWM7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8dShuKXx8dShhKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh5LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXkpL3YpKSp2O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1WLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Kk06YS5leGFjdE1vbnRocz4uOD90PVYudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Kk06dC09Uzt2YXIgbD1WLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fSh5LHQsdixjLGEpKSxnPXksMDtnPD11OylnPVYudGlja0luY3JlbWVudChnLHYsITEsYSk7cmV0dXJue3N0YXJ0OmUuYzJyKHksMCxhKSxlbmQ6ZS5jMnIoZywwLGEpLHNpemU6dixfZGF0YVNwYW46dS1jfX0sVi5wcmVwVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYodC5fZHRpY2tJbml0PXQuZHRpY2ssdC5fdGljazBJbml0PXQudGljazAsImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciBuLGE9dC5udGlja3M7YXx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8obj10LnRpY2tmb250P3MuYmlnRm9udCh0LnRpY2tmb250LnNpemV8fDEyKToxNSxhPXQuX2xlbmd0aC9uKToobj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsYT1zLmNvbnN0cmFpbih0Ll9sZW5ndGgvbiw0LDkpKzEpLCJyYWRpYWxheGlzIj09PXQuX25hbWUmJihhKj0yKSksImFycmF5Ij09PXQudGlja21vZGUmJihhKj0xMDApLHQuX3JvdWdoRFRpY2s9TWF0aC5hYnMoclsxXS1yWzBdKS9hLFYuYXV0b1RpY2tzKHQsdC5fcm91Z2hEVGljayksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZSYmZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcigpe3JldHVybiEoaSh0LmR0aWNrKXx8Ik0iIT09dC5kdGljay5jaGFyQXQoMCkpfXZhciBuPXIoKSxhPVYuZ2V0VGlja0Zvcm1hdCh0KTtpZihhKXt2YXIgbz10Ll9kdGlja0luaXQhPT10LmR0aWNrOy8lW2ZMUXNTTVhdLy50ZXN0KGEpfHwoLyVbSEldLy50ZXN0KGEpPyhlPUUsbyYmIW4mJnQuZHRpY2s8RSYmKHQuZHRpY2s9RSkpOi8lcC8udGVzdChhKT8oZT1TLG8mJiFuJiZ0LmR0aWNrPFMmJih0LmR0aWNrPVMpKTovJVtBYWRlanV3eF0vLnRlc3QoYSk/KGU9TSxvJiYhbiYmdC5kdGljazxNJiYodC5kdGljaz1NKSk6LyVbVVZXXS8udGVzdChhKT8oZT1BLG8mJiFuJiZ0LmR0aWNrPEEmJih0LmR0aWNrPUEpKTovJVtCYm1dLy50ZXN0KGEpPyhlPVQsbyYmKG4/USh0LmR0aWNrKTwxOnQuZHRpY2s8aykmJih0LmR0aWNrPSJNMSIpKTovJVtxXS8udGVzdChhKT8oZT1iLG8mJihuP1EodC5kdGljayk8Mzp0LmR0aWNrPF8pJiYodC5kdGljaz0iTTMiKSk6LyVbWXldLy50ZXN0KGEpJiYoZT12LG8mJihuP1EodC5kdGljayk8MTI6dC5kdGljazx5KSYmKHQuZHRpY2s9Ik0xMiIpKSl9KG49cigpKSYmdC50aWNrMD09PXQuX2Rvd1RpY2swJiYodC50aWNrMD10Ll9yYXdUaWNrMCk7dC5fZGVmaW5lZERlbHRhPWV9KHQpLHQudGljazB8fCh0LnRpY2swPSJkYXRlIj09PXQudHlwZT8iMjAwMC0wMS0wMSI6MCksImRhdGUiPT09dC50eXBlJiZ0LmR0aWNrPC4xJiYodC5kdGljaz0uMSksc3QodCl9LFYuY2FsY1RpY2tzPWZ1bmN0aW9uKHQsZSl7Vi5wcmVwVGlja3ModCxlKTt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYoImFycmF5Ij09PXQudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja3ZhbHMscj10LnRpY2t0ZXh0LG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPVgocy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkpLGE9TWF0aC5taW4oaVswXSxpWzFdKSxvPU1hdGgubWF4KGlbMF0saVsxXSksbD0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgYz0iY2F0ZWdvcnkiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsOyJsb2ciPT09dC50eXBlJiYiTCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz0iTCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBmPWMoZVt1XSk7Zj5hJiZmPG8mJih2b2lkIDA9PT1yW3VdP25bbF09Vi50aWNrVGV4dCh0LGYpOm5bbF09bHQodCxmLFN0cmluZyhyW3VdKSksbCsrKX1sPGUubGVuZ3RoJiZuLnNwbGljZShsLGUubGVuZ3RoLWwpO3QucmFuZ2VicmVha3MmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXNrQnJlYWtzKGUueCkhPT1JfSkpKTtyZXR1cm4gbn0odCk7dmFyIG49WChyKSxhPW5bMF0sbz1uWzFdLGw9clsxXTxyWzBdLGM9TWF0aC5taW4oclswXSxyWzFdKSx1PU1hdGgubWF4KHJbMF0sclsxXSksZj1pKHQuZHRpY2spLGg9ImxvZyI9PT10LnR5cGUmJiEoZnx8IkwiPT09dC5kdGljay5jaGFyQXQoMCkpLHA9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7aWYodC5fdG1pbj1WLnRpY2tGaXJzdCh0LGUpLHQuX3RtaW48YSE9PWwpcmV0dXJuW107ImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwobz1sP01hdGgubWF4KC0uNSxvKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxvKSk7dmFyIGQ9dC5fdG1pbjt0LnJhbmdlYnJlYWtzJiZ0Ll90aWNrMEluaXQhPT10LnRpY2swJiYoZD1NdChkLHQpLGx8fChkPVYudGlja0luY3JlbWVudChkLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpKSxwJiYoZD1WLnRpY2tJbmNyZW1lbnQoZCx0LmR0aWNrLCFsLHQuY2FsZW5kYXIpKTt2YXIgbSxMPXQudGlja2xhYmVsc3RlcCxDPU1hdGgubWF4KDFlMyx0Ll9sZW5ndGh8fDApLFA9W10sTz1udWxsO2Y/bT10LmR0aWNrOiJkYXRlIj09PXQudHlwZT8ic3RyaW5nIj09dHlwZW9mIHQuZHRpY2smJiJNIj09PXQuZHRpY2suY2hhckF0KDApJiYobT1UKnQuZHRpY2suc3Vic3RyaW5nKDEpKTptPXQuX3JvdWdoRFRpY2s7Zm9yKHZhciB6LEQsUj1NYXRoLnJvdW5kKCh0LnIybChkKS10LnIybCh0LnRpY2swKSkvbSktMTtsP2Q+PW86ZDw9bztkPVYudGlja0luY3JlbWVudChkLHQuZHRpY2ssbCx0LmNhbGVuZGFyKSl7aWYoUisrLHQucmFuZ2VicmVha3MmJiFsKXtpZihkPGEpY29udGludWU7aWYodC5tYXNrQnJlYWtzKGQpPT09SSYmTXQoZCx0KT49dSlicmVha31pZihQLmxlbmd0aD5DfHxkPT09TylicmVhaztPPWQ7dmFyIEY9ITE7aCYmZCE9PSgwfGQpJiYoRj0hMCk7dmFyIEI9e21pbm9yOkYsdmFsdWU6ZH07TD4xJiZSJUwmJihCLnNraXBMYWJlbD0hMCksUC5wdXNoKEIpfWlmKHAmJmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXS52YWx1ZSxhPW4sbz1uKzE7bjx0Lmxlbmd0aC0xPyhhPW4sbz1uKzEpOm4+MD8oYT1uLTEsbz1uKTooYT1uLG89bik7dmFyIHMsbD10W2FdLnZhbHVlLGM9dFtvXS52YWx1ZSx1PU1hdGguYWJzKGMtbCksZj1yfHx1LGg9MDtmPj15P2g9dT49eSYmdTw9Zz91OnY6cj09PWImJmY+PV8/aD11Pj1fJiZ1PD14P3U6YjpmPj1rP2g9dT49ayYmdTw9dz91OlQ6cj09PUEmJmY+PUE/aD1BOmY+PU0/aD1NOnI9PT1TJiZmPj1TP2g9UzpyPT09RSYmZj49RSYmKGg9RSksaD49dSYmKGg9dSxzPSEwKTt2YXIgcD1pK2g7aWYoZS5yYW5nZWJyZWFrcyYmaD4wKXtmb3IodmFyIGQ9MCxtPTA7bTw4NDttKyspe3ZhciBMPShtKy41KS84NDtlLm1hc2tCcmVha3MoaSooMS1MKStMKnApIT09SSYmZCsrfShoKj1kLzg0KXx8KHRbbl0uZHJvcD0hMCkscyYmdT5BJiYoaD11KX0oaD4wfHwwPT09bikmJih0W25dLnBlcmlvZFg9aStoLzIpfX0oUCx0LHQuX2RlZmluZWREZWx0YSksdC5yYW5nZWJyZWFrcyl7dmFyIE49InkiPT09dC5faWQuY2hhckF0KDApLGo9MTsiYXV0byI9PT10LnRpY2ttb2RlJiYoaj10LnRpY2tmb250P3QudGlja2ZvbnQuc2l6ZToxMik7dmFyIFU9TmFOO2Zvcih6PVAubGVuZ3RoLTE7ej4tMTt6LS0paWYoUFt6XS5kcm9wKVAuc3BsaWNlKHosMSk7ZWxzZXtQW3pdLnZhbHVlPU10KFBbel0udmFsdWUsdCk7dmFyIEg9dC5jMnAoUFt6XS52YWx1ZSk7KE4/VT5ILWo6VTxIK2opP1Auc3BsaWNlKGw/eisxOnosMSk6VT1IfX1BdCh0KSYmMzYwPT09TWF0aC5hYnMoclsxXS1yWzBdKSYmUC5wb3AoKSx0Ll90bWF4PShQW1AubGVuZ3RoLTFdfHx7fSkudmFsdWUsdC5fcHJldkRhdGVIZWFkPSIiLHQuX2luQ2FsY1RpY2tzPSEwO3ZhciBxLEcsWT1mdW5jdGlvbihlKXtlLnRleHQ9IiAiLHQuX3ByZXZEYXRlSGVhZD1EfSxXPVtdO2Zvcih6PTA7ejxQLmxlbmd0aDt6Kyspe3ZhciBaPVBbel0ubWlub3IsSj1QW3pdLnZhbHVlO0Q9dC5fcHJldkRhdGVIZWFkLHE9Vi50aWNrVGV4dCh0LEosITEsWiksdm9pZCAwIT09KEc9UFt6XS5wZXJpb2RYKSYmKHEucGVyaW9kWD1HLChHPnV8fEc8YykmJihHPnUmJihxLnBlcmlvZFg9dSksRzxjJiYocS5wZXJpb2RYPWMpLFkocSkpKSxQW3pdLnNraXBMYWJlbCYmWShxKSxXLnB1c2gocSl9cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLFd9O3ZhciAkPVsyLDUsMTBdLHR0PVsxLDIsMyw2LDEyXSxldD1bMSwyLDUsMTAsMTUsMzBdLHJ0PVsxLDIsMyw3LDE0XSxudD1bLS4wNDYsMCwuMzAxLC40NzcsLjYwMiwuNjk5LC43NzgsLjg0NSwuOTAzLC45NTQsMV0saXQ9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLGF0PVsxNSwzMCw0NSw5MCwxODBdO2Z1bmN0aW9uIG90KHQsZSxyKXtyZXR1cm4gZSpzLnJvdW5kVXAodC9lLHIpfWZ1bmN0aW9uIHN0KHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsaShlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT0xKSwiY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fCh0Ll90aWNrcm91bmQ9bnVsbCksImRhdGUiPT09dC50eXBlKXt2YXIgcj10LnIybCh0LnRpY2swKSxuPXQubDJyKHIpLnJlcGxhY2UoLyheLXxpKS9nLCIiKSxhPW4ubGVuZ3RoO2lmKCJNIj09PVN0cmluZyhlKS5jaGFyQXQoMCkpYT4xMHx8IjAxLTAxIiE9PW4uc3Vic3RyKDUpP3QuX3RpY2tyb3VuZD0iZCI6dC5fdGlja3JvdW5kPStlLnN1YnN0cigxKSUxMj09MD8ieSI6Im0iO2Vsc2UgaWYoZT49TSYmYTw9MTB8fGU+PTE1Kk0pdC5fdGlja3JvdW5kPSJkIjtlbHNlIGlmKGU+PUwmJmE8PTE2fHxlPj1FKXQuX3RpY2tyb3VuZD0iTSI7ZWxzZSBpZihlPj1DJiZhPD0xOXx8ZT49TCl0Ll90aWNrcm91bmQ9IlMiO2Vsc2V7dmFyIG89dC5sMnIocitlKS5yZXBsYWNlKC9eLS8sIiIpLmxlbmd0aDt0Ll90aWNrcm91bmQ9TWF0aC5tYXgoYSxvKS0yMCx0Ll90aWNrcm91bmQ8MCYmKHQuX3RpY2tyb3VuZD00KX19ZWxzZSBpZihpKGUpfHwiTCI9PT1lLmNoYXJBdCgwKSl7dmFyIHM9dC5yYW5nZS5tYXAodC5yMmR8fE51bWJlcik7aShlKXx8KGU9TnVtYmVyKGUuc3Vic3RyKDEpKSksdC5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKTt2YXIgbD1NYXRoLm1heChNYXRoLmFicyhzWzBdKSxNYXRoLmFicyhzWzFdKSksYz1NYXRoLmZsb29yKE1hdGgubG9nKGwpL01hdGguTE4xMCsuMDEpLHU9dm9pZCAwPT09dC5taW5leHBvbmVudD8zOnQubWluZXhwb25lbnQ7TWF0aC5hYnMoYyk+dSYmKHV0KHQuZXhwb25lbnRmb3JtYXQpJiYhZnQoYyk/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgoYy0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9Yyl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBsdCh0LGUscil7dmFyIG49dC50aWNrZm9udHx8e307cmV0dXJue3g6ZSxkeDowLGR5OjAsdGV4dDpyfHwiIixmb250U2l6ZTpuLnNpemUsZm9udDpuLmZhbWlseSxmb250Q29sb3I6bi5jb2xvcn19Vi5hdXRvVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LE1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKSl9aWYoImRhdGUiPT09dC50eXBlKXt0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsMCk7dmFyIGE9MiplO2lmKGE+dillLz12LHI9bigxMCksdC5kdGljaz0iTSIrMTIqb3QoZSxyLCQpO2Vsc2UgaWYoYT5UKWUvPVQsdC5kdGljaz0iTSIrb3QoZSwxLHR0KTtlbHNlIGlmKGE+TSl7dC5kdGljaz1vdChlLE0sdC5faGFzRGF5T2ZXZWVrQnJlYWtzP1sxLDIsNywxNF06cnQpO3ZhciBvPVYuZ2V0VGlja0Zvcm1hdCh0KSxsPSJwZXJpb2QiPT09dC50aWNrbGFiZWxtb2RlO2wmJih0Ll9yYXdUaWNrMD10LnRpY2swKSwvJVt1VlddLy50ZXN0KG8pP3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwyKTp0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsMSksbCYmKHQuX2Rvd1RpY2swPXQudGljazApfWVsc2UgYT5FP3QuZHRpY2s9b3QoZSxFLHR0KTphPkw/dC5kdGljaz1vdChlLEwsZXQpOmE+Qz90LmR0aWNrPW90KGUsQyxldCk6KHI9bigxMCksdC5kdGljaz1vdChlLHIsJCkpfWVsc2UgaWYoImxvZyI9PT10LnR5cGUpe3QudGljazA9MDt2YXIgYz1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihlPi43KXQuZHRpY2s9TWF0aC5jZWlsKGUpO2Vsc2UgaWYoTWF0aC5hYnMoY1sxXS1jWzBdKTwxKXt2YXIgdT0xLjUqTWF0aC5hYnMoKGNbMV0tY1swXSkvZSk7ZT1NYXRoLmFicyhNYXRoLnBvdygxMCxjWzFdKS1NYXRoLnBvdygxMCxjWzBdKSkvdSxyPW4oMTApLHQuZHRpY2s9IkwiK290KGUsciwkKX1lbHNlIHQuZHRpY2s9ZT4uMz8iRDIiOiJEMSJ9ZWxzZSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTpBdCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPW90KGUscixhdCkpOih0LnRpY2swPTAscj1uKDEwKSx0LmR0aWNrPW90KGUsciwkKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiYic3RyaW5nIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBmPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLCJheC5kdGljayBlcnJvcjogIitTdHJpbmcoZil9fSxWLnRpY2tJbmNyZW1lbnQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cj8tMToxO2lmKGkoZSkpcmV0dXJuIHMuaW5jcmVtZW50KHQsbyplKTt2YXIgbD1lLmNoYXJBdCgwKSxjPW8qTnVtYmVyKGUuc3Vic3RyKDEpKTtpZigiTSI9PT1sKXJldHVybiBzLmluY3JlbWVudE1vbnRoKHQsYyxhKTtpZigiTCI9PT1sKXJldHVybiBNYXRoLmxvZyhNYXRoLnBvdygxMCx0KStjKS9NYXRoLkxOMTA7aWYoIkQiPT09bCl7dmFyIHU9IkQyIj09PWU/aXQ6bnQsZj10Ky4wMSpvLGg9cy5yb3VuZFVwKHMubW9kKGYsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihmKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGgpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKGUpfSxWLnRpY2tGaXJzdD1mdW5jdGlvbih0LGUpe3ZhciByPXQucjJsfHxOdW1iZXIsYT1zLnNpbXBsZU1hcCh0LnJhbmdlLHIsdm9pZCAwLHZvaWQgMCxlKSxvPWFbMV08YVswXSxsPW8/TWF0aC5mbG9vcjpNYXRoLmNlaWwsYz1YKGEpWzBdLHU9dC5kdGljayxmPXIodC50aWNrMCk7aWYoaSh1KSl7dmFyIGg9bCgoYy1mKS91KSp1K2Y7cmV0dXJuImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwoaD1zLmNvbnN0cmFpbihoLDAsdC5fY2F0ZWdvcmllcy5sZW5ndGgtMSkpLGh9dmFyIHA9dS5jaGFyQXQoMCksZD1OdW1iZXIodS5zdWJzdHIoMSkpO2lmKCJNIj09PXApe2Zvcih2YXIgbSxnLHYseT0wLHg9Zjt5PDEwOyl7aWYoKChtPVYudGlja0luY3JlbWVudCh4LHUsbyx0LmNhbGVuZGFyKSktYykqKHgtYyk8PTApcmV0dXJuIG8/TWF0aC5taW4oeCxtKTpNYXRoLm1heCh4LG0pO2c9KGMtKHgrbSkvMikvKG0teCksdj1wKyhNYXRoLmFicyhNYXRoLnJvdW5kKGcpKXx8MSkqZCx4PVYudGlja0luY3JlbWVudCh4LHYsZzwwPyFvOm8sdC5jYWxlbmRhcikseSsrfXJldHVybiBzLmVycm9yKCJ0aWNrRmlyc3QgZGlkIG5vdCBjb252ZXJnZSIsdCkseH1pZigiTCI9PT1wKXJldHVybiBNYXRoLmxvZyhsKChNYXRoLnBvdygxMCxjKS1mKS9kKSpkK2YpL01hdGguTE4xMDtpZigiRCI9PT1wKXt2YXIgYj0iRDIiPT09dT9pdDpudCxfPXMucm91bmRVcChzLm1vZChjLDEpLGIsbyk7cmV0dXJuIE1hdGguZmxvb3IoYykrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxfKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyh1KX0sVi50aWNrVGV4dD1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxvPWx0KHQsZSksbD0iYXJyYXkiPT09dC50aWNrbW9kZSxjPXJ8fGwsdT10LnR5cGUsZj0iY2F0ZWdvcnkiPT09dT90LmQybF9ub2FkZDp0LmQybDtpZihsJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgaD1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxwPShNYXRoLmFicyhoWzFdLWhbMF0pLSh0Ll9sQnJlYWtzfHwwKSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLWYodC50aWNrdmFsc1thXSkpPHApO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfWZ1bmN0aW9uIGQobil7aWYodm9pZCAwPT09bilyZXR1cm4hMDtpZihyKXJldHVybiJub25lIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm4iYWxsIiE9PW4mJmUhPT1pfXZhciBtPXI/Im5ldmVyIjoibm9uZSIhPT10LmV4cG9uZW50Zm9ybWF0JiZkKHQuc2hvd2V4cG9uZW50KT8iaGlkZSI6IiI7aWYoImRhdGUiPT09dT9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxWLmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OiJtIixtOiJkIixkOiJNIixNOiJTIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoIlxuIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKCIwMDowMDowMCI9PT1jfHwiMDA6MDAiPT09Yz8oYz1sLGw9IiIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLywiIikpKTtpZihsKWlmKHIpImQiPT09YT9jKz0iLCAiK2w6Yz1sKyhjPyIsICIrYzoiIik7ZWxzZSBpZih0Ll9pbkNhbGNUaWNrcyYmdC5fcHJldkRhdGVIZWFkPT09bCl7dmFyIGY9U3QodCksaD10Ll90cnVlU2lkZXx8dC5zaWRlOyghZiYmInRvcCI9PT1ofHxmJiYiYm90dG9tIj09PWgpJiYoYys9Ijxicj4gIil9ZWxzZSB0Ll9wcmV2RGF0ZUhlYWQ9bCxjKz0iPGJyPiIrbDtlLnRleHQ9Y30odCxvLHIsYyk6ImxvZyI9PT11P2Z1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89dC5kdGljayxsPWUueCxjPXQudGlja2Zvcm1hdCx1PSJzdHJpbmciPT10eXBlb2YgbyYmby5jaGFyQXQoMCk7Im5ldmVyIj09PWEmJihhPSIiKTtuJiYiTCIhPT11JiYobz0iTDMiLHU9IkwiKTtpZihjfHwiTCI9PT11KWUudGV4dD1odChNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHwiRCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGY9TWF0aC5yb3VuZChsKSxoPU1hdGguYWJzKGYpLHA9dC5leHBvbmVudGZvcm1hdDsicG93ZXIiPT09cHx8dXQocCkmJmZ0KGYpPyhlLnRleHQ9MD09PWY/MToxPT09Zj8iMTAiOiIxMDxzdXA+IisoZj4xPyIiOlApK2grIjwvc3VwPiIsZS5mb250U2l6ZSo9MS4yNSk6KCJlIj09PXB8fCJFIj09PXApJiZoPjI/ZS50ZXh0PSIxIitwKyhmPjA/IisiOlApK2g6KGUudGV4dD1odChNYXRoLnBvdygxMCxsKSx0LCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09byYmInkiPT09dC5faWQuY2hhckF0KDApJiYoZS5keS09ZS5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT11KXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoIkQxIj09PXQuZHRpY2spe3ZhciBkPVN0cmluZyhlLnRleHQpLmNoYXJBdCgwKTsiMCIhPT1kJiYiMSIhPT1kfHwoInkiPT09dC5faWQuY2hhckF0KDApP2UuZHgtPWUuZm9udFNpemUvNDooZS5keSs9ZS5mb250U2l6ZS8yLGUuZHgrPSh0LnJhbmdlWzFdPnQucmFuZ2VbMF0/MTotMSkqZS5mb250U2l6ZSoobDwwPy41Oi4yNSkpKX19KHQsbywwLGMsbSk6ImNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpO2UudGV4dD1TdHJpbmcocil9KHQsbyk6Im11bHRpY2F0ZWdvcnkiPT09dT9mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5yb3VuZChlLngpLGk9dC5fY2F0ZWdvcmllc1tuXXx8W10sYT12b2lkIDA9PT1pWzFdPyIiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/IiI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rIiAtICIrYTooZS50ZXh0PWEsZS50ZXh0Mj1vKX0odCxvLHIpOkF0KHQpP2Z1bmN0aW9uKHQsZSxyLG4saSl7aWYoInJhZGlhbnMiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PWh0KGUueCx0LGksbik7ZWxzZXt2YXIgYT1lLngvMTgwO2lmKDA9PT1hKWUudGV4dD0iMCI7ZWxzZXt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciByPTE7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1odChzLmRlZzJyYWQoZS54KSx0LGksbik7ZWxzZXt2YXIgbD1lLng8MDsxPT09b1sxXT8xPT09b1swXT9lLnRleHQ9Ilx1MDNjMCI6ZS50ZXh0PW9bMF0rIlx1MDNjMCI6ZS50ZXh0PVsiPHN1cD4iLG9bMF0sIjwvc3VwPiIsIlx1MjA0NCIsIjxzdWI+IixvWzFdLCI8L3N1Yj4iLCJcdTAzYzAiXS5qb2luKCIiKSxsJiYoZS50ZXh0PVArZS50ZXh0KX19fX0odCxvLHIsYyxtKTpmdW5jdGlvbih0LGUscixuLGkpeyJuZXZlciI9PT1pP2k9IiI6ImFsbCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihpPSJoaWRlIik7ZS50ZXh0PWh0KGUueCx0LGksbil9KHQsbywwLGMsbSksbnx8KHQudGlja3ByZWZpeCYmIWQodC5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9dC50aWNrcHJlZml4K28udGV4dCksdC50aWNrc3VmZml4JiYhZCh0LnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9dC50aWNrc3VmZml4KSksImJvdW5kYXJpZXMiPT09dC50aWNrc29ufHx0LnNob3dkaXZpZGVycyl7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+PTAmJnI8PXQuX2xlbmd0aD9lOm51bGx9O28ueGJuZD1bZyhvLngtLjUpLGcoby54K3QuZHRpY2stLjUpXX1yZXR1cm4gb30sVi5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbih0LGUscil7ciYmKHQ9cy5leHRlbmRGbGF0KHt9LHQse2hvdmVyZm9ybWF0OnJ9KSk7dmFyIG49QXJyYXkuaXNBcnJheShlKT9lWzBdOmUsaT1BcnJheS5pc0FycmF5KGUpP2VbMV06dm9pZCAwO2lmKHZvaWQgMCE9PWkmJmkhPT1uKXJldHVybiBWLmhvdmVyTGFiZWxUZXh0KHQsbixyKSsiIC0gIitWLmhvdmVyTGFiZWxUZXh0KHQsaSxyKTt2YXIgYT0ibG9nIj09PXQudHlwZSYmbjw9MCxvPVYudGlja1RleHQodCx0LmMybChhPy1uOm4pLCJob3ZlciIpLnRleHQ7cmV0dXJuIGE/MD09PW4/IjAiOlArbzpvfTt2YXIgY3Q9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIHV0KHQpe3JldHVybiJTSSI9PT10fHwiQiI9PT10fWZ1bmN0aW9uIGZ0KHQpe3JldHVybiB0PjE0fHx0PC0xNX1mdW5jdGlvbiBodCh0LGUscixuKXt2YXIgYT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1WLmdldFRpY2tGb3JtYXQoZSksZj1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDpsLG1pbmV4cG9uZW50OmUubWluZXhwb25lbnQsZHRpY2s6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5kdGljazppKHQpJiZNYXRoLmFicyh0KXx8MSxyYW5nZToibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLnJhbmdlLm1hcChlLnIyZCk6WzAsdHx8MV19O3N0KGgpLG89KE51bWJlcihoLl90aWNrcm91bmQpfHwwKSs0LGM9aC5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csUCk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBtPW87bTwwO20rKyl0Kz0iMCJ9ZWxzZXt2YXIgZz0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO2cmJih0PXQuc3Vic3RyKDAsZytvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxmKX1jJiYiaGlkZSIhPT1sJiYodXQobCkmJmZ0KGMpJiYobD0icG93ZXIiKSxwPWM8MD9QKy1jOiJwb3dlciIhPT1sPyIrIitjOlN0cmluZyhjKSwiZSI9PT1sfHwiRSI9PT1sP3QrPWwrcDoicG93ZXIiPT09bD90Kz0iXHhkNzEwPHN1cD4iK3ArIjwvc3VwPiI6IkIiPT09bCYmOT09PWM/dCs9IkIiOnV0KGwpJiYodCs9Y3RbYy8zKzVdKSk7cmV0dXJuIGE/UCt0OnR9ZnVuY3Rpb24gcHQodCxlKXtmb3IodmFyIHI9W10sbj17fSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07blthLnRleHQyXT9uW2EudGV4dDJdLnB1c2goYS54KTpuW2EudGV4dDJdPVthLnhdfWZvcih2YXIgbyBpbiBuKXIucHVzaChsdCh0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdm9pZCAwIT09dC5wZXJpb2RYP3QucGVyaW9kWDp0Lnh9ZnVuY3Rpb24gbXQodCl7cmV0dXJuW3QudGV4dCx0LngsdC5heEluZm8sdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3JdLmpvaW4oIl8iKX1mdW5jdGlvbiBndCh0KXt2YXIgZT10LnRpdGxlLmZvbnQuc2l6ZSxyPSh0LnRpdGxlLnRleHQubWF0Y2goYy5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aDtyZXR1cm4gdC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKT9yP2UqKE4rcipqKTplKk46cj9lKihyKzEpKmo6ZX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24geXQodCl7dmFyIGU9bi5zZWxlY3QodCkscj1lLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpO3JldHVybiByLmVtcHR5KCk/ZS5zZWxlY3QoInRleHQiKTpyfWZ1bmN0aW9uIHh0KHQpe3JldHVybiB0Ll9pZCsiLmF1dG9tYXJnaW4ifWZ1bmN0aW9uIGJ0KHQpe3JldHVybiB4dCh0KSsiLm1pcnJvciJ9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIHQuX2lkKyIucmFuZ2VzbGlkZXIifWZ1bmN0aW9uIHd0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiBUdCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChWLmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChWLmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhwKSx1PVsiYW5jaG9yIiwiZG9tYWluIiwib3ZlcmxheWluZyIsInBvc2l0aW9uIiwic2lkZSIsInRpY2thbmdsZSIsImVkaXRUeXBlIl0sZj1bImxpbmVhciIsImxvZyJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPWNbbl0sZD1hWzBdW2hdLG09b1swXVtoXSxnPSEwLHY9ITEseT0hMTtpZigiXyIhPT1oLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKGgpKXtmb3IoaT0xO2k8YS5sZW5ndGgmJmc7aSsrKXt2YXIgeD1hW2ldW2hdOyJ0eXBlIj09PWgmJi0xIT09Zi5pbmRleE9mKGQpJiYtMSE9PWYuaW5kZXhPZih4KSYmZCE9PXg/dj0hMDp4IT09ZCYmKGc9ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmZztpKyspe3ZhciBiPW9baV1baF07InR5cGUiPT09aCYmLTEhPT1mLmluZGV4T2YobSkmJi0xIT09Zi5pbmRleE9mKGIpJiZtIT09Yj95PSEwOm9baV1baF0hPT1tJiYoZz0hMSl9ZyYmKHYmJihsW2FbMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9ImxpbmVhciIpLGt0KGwsaCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGt0KHQsZSxyLG4saSl7dmFyIGEsbz1zLm5lc3RlZFByb3BlcnR5LGw9byh0W3JbMF0uX25hbWVdLGUpLmdldCgpLGM9byh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrIi4iK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lKyIuIitlKS5zZXQobCl9ZnVuY3Rpb24gQXQodCl7cmV0dXJuImFuZ3VsYXJheGlzIj09PXQuX2lkfWZ1bmN0aW9uIE10KHQsZSl7Zm9yKHZhciByPWUuX3JhbmdlYnJlYWtzLmxlbmd0aCxuPTA7bjxyO24rKyl7dmFyIGk9ZS5fcmFuZ2VicmVha3Nbbl07aWYodD49aS5taW4mJnQ8aS5tYXgpcmV0dXJuIGkubWF4fXJldHVybiB0fWZ1bmN0aW9uIFN0KHQpe3JldHVybi0xIT09KHQudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKX1mdW5jdGlvbiBFdCh0LGUpe1N0KHQuX2FuY2hvckF4aXN8fHt9KSYmdC5faGlkZUNvdW50ZXJBeGlzSW5zaWRlVGlja0xhYmVscyYmdC5faGlkZUNvdW50ZXJBeGlzSW5zaWRlVGlja0xhYmVscyhlKX1WLmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90Ok51bWJlcih0LnJlcGxhY2UoIk0iLCIiKSkqVH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9WyJMIiwiRCJdO2lmKHR5cGVvZiB0PT10eXBlb2YgZSl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0LWU7dmFyIG49ci5pbmRleE9mKHQuY2hhckF0KDApKSxpPXIuaW5kZXhPZihlLmNoYXJBdCgwKSk7cmV0dXJuIG49PT1pP051bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csIiIpKS1OdW1iZXIoZS5yZXBsYWNlKC8oTHxEKS9nLCIiKSk6bi1pfXJldHVybiJudW1iZXIiPT10eXBlb2YgdD8xOi0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1udWxsPT09ZVswXSxuPW51bGw9PT1lWzFdLGk9dSh0LGVbMF0pPj0wLGE9dSh0LGVbMV0pPD0wO3JldHVybihyfHxpKSYmKG58fGEpfWlmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlImRhdGUiOmNhc2UibGluZWFyIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmKGk9dC5kdGljayxhPW4uZHRpY2tyYW5nZSxvPXZvaWQgMCxzPXZvaWQgMCxsPXZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWFbMF0sbD1hWzFdLCghcyYmIm51bWJlciIhPXR5cGVvZiBzfHxvKHMpPD1vKGkpKSYmKCFsJiYibnVtYmVyIiE9dHlwZW9mIGx8fG8obCk+PW8oaSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2UibG9nIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmZih0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LFYuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPWU/Vi5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGkuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN1YnN0cigxKS5zcGxpdCgieSIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoInkiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSksaX0sVi5maW5kU3VicGxvdHNXaXRoQXhpcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUmVnRXhwKCJ4Ij09PWUuX2lkLmNoYXJBdCgwKT8iXiIrZS5faWQrInkiOmUuX2lkKyIkIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LFYubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKCFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciByLGksYT17X29mZnNldDowLF9sZW5ndGg6ZS53aWR0aCxfaWQ6IiJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOmUuaGVpZ2h0LF9pZDoiIn0scz1WLmxpc3QodCwieCIsITApLGw9Vi5saXN0KHQsInkiLCEwKSxjPVtdO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKGMucHVzaCh7eDpzW3JdLHk6b30pLGk9MDtpPGwubGVuZ3RoO2krKykwPT09ciYmYy5wdXNoKHt4OmEseTpsW2ldfSksYy5wdXNoKHt4OnNbcl0seTpsW2ldfSk7dmFyIHU9ZS5fY2xpcHMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KSk7dS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuImNsaXAiK2UuX3VpZCt0LnguX2lkK3QueS5faWR9KSkuYXBwZW5kKCJyZWN0IiksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KSl9fSxWLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQ7InJlZHJhdyI9PT1lJiZuLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1uLl9wbG90c1tlXTtpZihyKXt2YXIgaT1yLnhheGlzLGE9ci55YXhpcztyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljayIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2syIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2syIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIuZ3JpZGxheWVyJiZyLmdyaWRsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxyLnplcm9saW5lbGF5ZXImJnIuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2kuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIrYS5faWQrInRpdGxlIikucmVtb3ZlKCl9fSkpO3ZhciBpPWUmJiJyZWRyYXciIT09ZT9lOlYubGlzdElkcyh0KTtyZXR1cm4gcy5zeW5jT3JBc3luYyhpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIG49Vi5nZXRGcm9tSWQodCxlKSxpPVYuZHJhd09uZSh0LG4scik7cmV0dXJuIG4uX3I9bi5yYW5nZS5zbGljZSgpLG4uX3JsPXMuc2ltcGxlTWFwKG4uX3Isbi5yMmwpLGl9fX0pKSl9LFYuZHJhd09uZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxsO3I9cnx8e30sZS5zZXRTY2FsZSgpO3ZhciBjPXQuX2Z1bGxMYXlvdXQscD1lLl9pZCxkPXAuY2hhckF0KDApLG09Vi5jb3VudGVyTGV0dGVyKHApLGc9Yy5fcGxvdHNbZS5fbWFpblN1YnBsb3RdO2lmKGcpe3ZhciB2PWdbZCsiYXhpc2xheWVyIl0seT1lLl9tYWluTGluZVBvc2l0aW9uLHg9ZS5fbWFpbk1pcnJvclBvc2l0aW9uLGI9ZS5fdmFscz1WLmNhbGNUaWNrcyhlKSxfPVtlLm1pcnJvcix5LHhdLmpvaW4oIl8iKTtmb3Iobj0wO248Yi5sZW5ndGg7bisrKWJbbl0uYXhJbmZvPV87ZS5fc2VsZWN0aW9ucz17fSxlLl90aWNrQW5nbGVzJiYoZS5fcHJldlRpY2tBbmdsZXM9ZS5fdGlja0FuZ2xlcyksZS5fdGlja0FuZ2xlcz17fSxlLl9kZXB0aD1udWxsO3ZhciB3PXt9O2lmKGUudmlzaWJsZSl7dmFyIFQsayxBPVYubWFrZVRyYW5zVGlja0ZuKGUpLE09Vi5tYWtlVHJhbnNUaWNrTGFiZWxGbihlKSxTPSJpbnNpZGUiPT09ZS50aWNrcyxFPSJvdXRzaWRlIj09PWUudGlja3M7aWYoImJvdW5kYXJpZXMiPT09ZS50aWNrc29uKXt2YXIgTD1mdW5jdGlvbih0LGUpe3ZhciByLG49W10saT1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmbi5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKGUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWkoZVtyXSwwKTtpKGVbci0xXSwxKX1yZXR1cm4gbn0oMCxiKTtrPVYuY2xpcEVuZHMoZSxMKSxUPVM/azpMfWVsc2Ugaz1WLmNsaXBFbmRzKGUsYiksVD1TJiYicGVyaW9kIiE9PWUudGlja2xhYmVsbW9kZT9rOmI7dmFyIEM9ZS5fZ3JpZFZhbHM9ayxQPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdLGE9ZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0ueDxlWzBdLngsbz1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmaS5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKHQuc2hvd2RpdmlkZXJzJiZlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGw9ZVtyXTtsLnRleHQyIT09biYmbyhsLGE/MTowKSxuPWwudGV4dDJ9byhlW3ItMV0sYT8wOjEpfXJldHVybiBpfShlLGIpO2lmKCFjLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciBJPWUuX3N1YnBsb3RzV2l0aCxPPXt9O2ZvcihuPTA7bjxJLmxlbmd0aDtuKyspe2k9SVtuXTt2YXIgej0obD1jLl9wbG90c1tpXSlbbSsiYXhpcyJdLEQ9ei5fbWFpbkF4aXMuX2lkO2lmKCFPW0RdKXtPW0RdPTE7dmFyIFI9IngiPT09ZD8iTTAsIit6Ll9vZmZzZXQrInYiK3ouX2xlbmd0aDoiTSIrei5fb2Zmc2V0KyIsMGgiK3ouX2xlbmd0aDtWLmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOnosbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KCIuIitwKSxwYXRoOlIsdHJhbnNGbjpBfSksVi5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczp6LGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOlIsdHJhbnNGbjpBfSl9fX12YXIgRj1WLmdldFRpY2tTaWducyhlKSxCPVtdO2lmKGUudGlja3Mpe3ZhciBOLEgscSxHPVYubWFrZVRpY2tQYXRoKGUseSxGWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oTj1WLm1ha2VUaWNrUGF0aChlLHgsRlszXSksSD1HK04pOihOPSIiLEg9RyksZS5zaG93ZGl2aWRlcnMmJkUmJiJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIFk9e307Zm9yKG49MDtuPFAubGVuZ3RoO24rKylZW1Bbbl0ueF09MTtxPWZ1bmN0aW9uKHQpe3JldHVybiBZW3QueF0/TjpIfX1lbHNlIHE9SDtWLmRyYXdUaWNrcyh0LGUse3ZhbHM6VCxsYXllcjp2LHBhdGg6cSx0cmFuc0ZuOkF9KSwiYWxsdGlja3MiPT09ZS5taXJyb3ImJihCPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KSl9Zm9yKG49MDtuPEIubGVuZ3RoO24rKyl7aT1CW25dLGw9Yy5fcGxvdHNbaV07dmFyIFc9ZS5fbGluZXBvc2l0aW9uc1tpXXx8W10sWD1WLm1ha2VUaWNrUGF0aChlLFdbMF0sRlswXSkrVi5tYWtlVGlja1BhdGgoZSxXWzFdLEZbMV0pO1YuZHJhd1RpY2tzKHQsZSx7dmFsczpULGxheWVyOmxbZCsiYXhpc2xheWVyIl0scGF0aDpYLHRyYW5zRm46QX0pfXZhciBaPVtdO2lmKFoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gVi5kcmF3TGFiZWxzKHQsZSx7dmFsczpiLGxheWVyOnYscGxvdGluZm86bCx0cmFuc0ZuOk0sbGFiZWxGbnM6Vi5tYWtlTGFiZWxGbnMoZSx5KX0pfSkpLCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSl7dmFyIEo9e3g6Mix5OjEwfVtkXTtaLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHI9e3g6ImhlaWdodCIseToid2lkdGgifVtkXSxuPVEoKVtyXStKKyhlLl90aWNrQW5nbGVzW3ArInRpY2siXT9lLnRpY2tmb250LnNpemUqajowKTtyZXR1cm4gVi5kcmF3TGFiZWxzKHQsZSx7dmFsczpwdChlLGIpLGxheWVyOnYsY2xzOnArInRpY2syIixyZXBvc2l0aW9uT25VcGRhdGU6ITAsc2Vjb25kYXJ5OiEwLHRyYW5zRm46QSxsYWJlbEZuczpWLm1ha2VMYWJlbEZucyhlLHkrbipGWzRdKX0pfSkpLFoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZGVwdGg9Rls0XSooUSgidGljazIiKVtlLnNpZGVdLXkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9pZCsiZGl2aWRlciIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxtdCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsMSkuY2FsbChmLnN0cm9rZSxlLmRpdmlkZXJjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS5kaXZpZGVyd2lkdGgsMSkrInB4IiksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKX0odCxlLHt2YWxzOlAsbGF5ZXI6dixwYXRoOlYubWFrZVRpY2tQYXRoKGUseSxGWzRdLGUuX2RlcHRoKSx0cmFuc0ZuOkF9KX0pKX1lbHNlIGUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikmJloucHVzaCgoZnVuY3Rpb24oKXtlLl9kZXB0aD1GWzRdKihRKClbZS5zaWRlXS15KX0pKTt2YXIgSz1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShlKTtyZXR1cm4gWi5wdXNoKChmdW5jdGlvbigpe3ZhciByLG4saSxzLGw9ZS5zaWRlLmNoYXJBdCgwKSx1PVVbZS5zaWRlXS5jaGFyQXQoMCksZj1WLmdldFB4UG9zaXRpb24odCxlKSxoPUU/ZS50aWNrbGVuOjA7aWYoKGUuYXV0b21hcmdpbnx8SykmJigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU/cj1RKCJ0aWNrMiIpOihyPVEoKSwieCI9PT1kJiYiYiI9PT1sJiYoZS5fZGVwdGg9TWF0aC5tYXgoci53aWR0aD4wP3IuYm90dG9tLWY6MCxoKSkpKSxlLmF1dG9tYXJnaW4pe249e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcD1bMCwxXTtpZigieCI9PT1kKXtpZigiYiI9PT1sP25bbF09ZS5fZGVwdGg6KG5bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci53aWR0aD4wP2Ytci50b3A6MCxoKSxwLnJldmVyc2UoKSksci53aWR0aD4wKXt2YXIgZz1yLnJpZ2h0LShlLl9vZmZzZXQrZS5fbGVuZ3RoKTtnPjAmJihuLnhyPTEsbi5yPWcpO3ZhciB2PWUuX29mZnNldC1yLmxlZnQ7dj4wJiYobi54bD0wLG4ubD12KX19ZWxzZSBpZigibCI9PT1sP25bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9mLXIubGVmdDowLGgpOihuW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIuaGVpZ2h0PjA/ci5yaWdodC1mOjAsaCkscC5yZXZlcnNlKCkpLHIuaGVpZ2h0PjApe3ZhciB5PXIuYm90dG9tLShlLl9vZmZzZXQrZS5fbGVuZ3RoKTt5PjAmJihuLnliPTAsbi5iPXkpO3ZhciB4PWUuX29mZnNldC1yLnRvcDt4PjAmJihuLnl0PTEsbi50PXgpfW5bbV09ImZyZWUiPT09ZS5hbmNob3I/ZS5wb3NpdGlvbjplLl9hbmNob3JBeGlzLmRvbWFpbltwWzBdXSxlLnRpdGxlLnRleHQhPT1jLl9kZmx0VGl0bGVbZF0mJihuW2xdKz1ndChlKSsoZS50aXRsZS5zdGFuZG9mZnx8MCkpLGUubWlycm9yJiYiZnJlZSIhPT1lLmFuY2hvciYmKChpPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH0pW3VdPWUubGluZXdpZHRoLGUubWlycm9yJiYhMCE9PWUubWlycm9yJiYoaVt1XSs9aCksITA9PT1lLm1pcnJvcnx8InRpY2tzIj09PWUubWlycm9yP2lbbV09ZS5fYW5jaG9yQXhpcy5kb21haW5bcFsxXV06ImFsbCIhPT1lLm1pcnJvciYmImFsbHRpY2tzIiE9PWUubWlycm9yfHwoaVttXT1bZS5fY291bnRlckRvbWFpbk1pbixlLl9jb3VudGVyRG9tYWluTWF4XVtwWzFdXSkpfUsmJihzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImF1dG9NYXJnaW5PcHRzIikodCxlKSksYS5hdXRvTWFyZ2luKHQseHQoZSksbiksYS5hdXRvTWFyZ2luKHQsYnQoZSksaSksYS5hdXRvTWFyZ2luKHQsX3QoZSkscyl9KSksci5za2lwVGl0bGV8fEsmJiJib3R0b20iPT09ZS5zaWRlfHxaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0LGk9ZS5faWQsYT1pLmNoYXJBdCgwKSxvPWUudGl0bGUuZm9udC5zaXplO2lmKGUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikpcj1lLl9kZXB0aCtlLnRpdGxlLnN0YW5kb2ZmK2d0KGUpO2Vsc2V7dmFyIHM9U3QoZSk7aWYoIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlKXI9ZS5fZGVwdGg7ZWxzZXt2YXIgbD0xLjUqbztzJiYobD0uNSpvLCJvdXRzaWRlIj09PWUudGlja3MmJihsKz1lLnRpY2tsZW4pKSxyPTEwK2wrKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9c3x8KHIrPSJ4Ij09PWE/InRvcCI9PT1lLnNpZGU/byooZS5zaG93dGlja2xhYmVscz8xOjApOm8qKGUuc2hvd3RpY2tsYWJlbHM/MS41Oi41KToicmlnaHQiPT09ZS5zaWRlP28qKGUuc2hvd3RpY2tsYWJlbHM/MTouNSk6byooZS5zaG93dGlja2xhYmVscz8uNTowKSl9dmFyIGMsZixwLGQsbT1WLmdldFB4UG9zaXRpb24odCxlKTsieCI9PT1hPyhmPWUuX29mZnNldCtlLl9sZW5ndGgvMixwPSJ0b3AiPT09ZS5zaWRlP20tcjptK3IpOihwPWUuX29mZnNldCtlLl9sZW5ndGgvMixmPSJyaWdodCI9PT1lLnNpZGU/bStyOm0tcixjPXtyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9KTtpZigibXVsdGljYXRlZ29yeSIhPT1lLnR5cGUpe3ZhciBnPWUuX3NlbGVjdGlvbnNbZS5faWQrInRpY2siXTtpZihkPXtzZWxlY3Rpb246ZyxzaWRlOmUuc2lkZX0sZyYmZy5ub2RlKCkmJmcubm9kZSgpLnBhcmVudE5vZGUpe3ZhciB2PWguZ2V0VHJhbnNsYXRlKGcubm9kZSgpLnBhcmVudE5vZGUpO2Qub2Zmc2V0TGVmdD12LngsZC5vZmZzZXRUb3A9di55fWUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikmJihkLnBhZD0wKX1yZXR1cm4gdS5kcmF3KHQsaSsidGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6ZS5fbmFtZSsiLnRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOm4uX2RmbHRUaXRsZVthXSxhdm9pZDpkLHRyYW5zZm9ybTpjLGF0dHJpYnV0ZXM6e3g6Zix5OnAsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0odCxlKX0pKSxzLnN5bmNPckFzeW5jKFopfX1mdW5jdGlvbiBRKHQpe3ZhciByPXArKHR8fCJ0aWNrIik7cmV0dXJuIHdbcl18fCh3W3JdPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE7dC5fc2VsZWN0aW9uc1tlXS5zaXplKCk/KHI9MS8wLG49LTEvMCxpPTEvMCxhPS0xLzAsdC5fc2VsZWN0aW9uc1tlXS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXl0KHRoaXMpLGU9aC5iQm94KHQubm9kZSgpLnBhcmVudE5vZGUpO3I9TWF0aC5taW4ocixlLnRvcCksbj1NYXRoLm1heChuLGUuYm90dG9tKSxpPU1hdGgubWluKGksZS5sZWZ0KSxhPU1hdGgubWF4KGEsZS5yaWdodCl9KSkpOihyPTAsbj0wLGk9MCxhPTApO3JldHVybnt0b3A6cixib3R0b206bixsZWZ0OmkscmlnaHQ6YSxoZWlnaHQ6bi1yLHdpZHRoOmEtaX19KGUscikpLHdbcl19fSxWLmdldFRpY2tTaWducz1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj17eDoidG9wIix5OiJyaWdodCJ9W2VdLG49dC5zaWRlPT09cj8xOi0xLGk9Wy0xLDEsbiwtbl07cmV0dXJuImluc2lkZSIhPT10LnRpY2tzPT0oIngiPT09ZSkmJihpPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSksdC5zaWRlJiZpLnB1c2goe2w6LTEsdDotMSxyOjEsYjoxfVt0LnNpZGUuY2hhckF0KDApXSksaX0sVi5tYWtlVHJhbnNUaWNrRm49ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dC5faWQuY2hhckF0KDApP2Z1bmN0aW9uKGUpe3JldHVybiBsKHQuX29mZnNldCt0LmwycChlLngpLDApfTpmdW5jdGlvbihlKXtyZXR1cm4gbCgwLHQuX29mZnNldCt0LmwycChlLngpKX19LFYubWFrZVRyYW5zVGlja0xhYmVsRm49ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIscj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWUuaW5kZXhPZih0KX0sbj1yKCJ0b3AiKSxpPXIoImxlZnQiKSxhPXIoInJpZ2h0Iiksbz1yKCJib3R0b20iKSxzPXIoImluc2lkZSIpLGw9b3x8aXx8bnx8YTtpZighbCYmIXMpcmV0dXJuWzAsMF07dmFyIGM9dC5zaWRlLHU9bD8odC50aWNrd2lkdGh8fDApLzI6MCxmPTMsaD10LnRpY2tmb250P3QudGlja2ZvbnQuc2l6ZToxMjsob3x8bikmJih1Kz1oKk4sZis9KHQubGluZXdpZHRofHwwKS8yKTsoaXx8YSkmJih1Kz0odC5saW5ld2lkdGh8fDApLzIsZis9Myk7cyYmInRvcCI9PT1jJiYoZi09aCooMS1OKSk7KGl8fG4pJiYodT0tdSk7ImJvdHRvbSIhPT1jJiYicmlnaHQiIT09Y3x8KGY9LWYpO3JldHVybltsP3U6MCxzP2Y6MF19KHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIngiPT09dC5faWQuY2hhckF0KDApP2Z1bmN0aW9uKGUpe3JldHVybiBsKHIrdC5fb2Zmc2V0K3QubDJwKGR0KGUpKSxuKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGwobixyK3QuX29mZnNldCt0LmwycChkdChlKSkpfX0sVi5tYWtlVGlja1BhdGg9ZnVuY3Rpb24odCxlLHIsbil7bj12b2lkIDAhPT1uP246dC50aWNrbGVuO3ZhciBpPXQuX2lkLmNoYXJBdCgwKSxhPSh0LmxpbmV3aWR0aHx8MSkvMjtyZXR1cm4ieCI9PT1pPyJNMCwiKyhlK2EqcikrInYiK24qcjoiTSIrKGUrYSpyKSsiLDBoIituKnJ9LFYubWFrZUxhYmVsRm5zPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnRpY2tsYWJlbHBvc2l0aW9ufHwiIixhPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09bi5pbmRleE9mKHQpfSxvPWEoInRvcCIpLGw9YSgibGVmdCIpLGM9YSgicmlnaHQiKSx1PWEoImJvdHRvbSIpfHxsfHxvfHxjLGY9YSgiaW5zaWRlIiksaD0iaW5zaWRlIj09PW4mJiJpbnNpZGUiPT09dC50aWNrc3x8IWYmJiJvdXRzaWRlIj09PXQudGlja3MmJiJib3VuZGFyaWVzIiE9PXQudGlja3NvbixwPTAsZD0wLG09aD90LnRpY2tsZW46MDtpZihmP20qPS0xOnUmJihtPTApLGgmJihwKz1tLHIpKXt2YXIgZz1zLmRlZzJyYWQocik7cD1tKk1hdGguY29zKGcpKzEsZD1tKk1hdGguc2luKGcpfXQuc2hvd3RpY2tsYWJlbHMmJihofHx0LnNob3dsaW5lKSYmKHArPS4yKnQudGlja2ZvbnQuc2l6ZSk7dmFyIHYseSx4LGIsXyx3PXtsYWJlbFN0YW5kb2ZmOnArPSh0LmxpbmV3aWR0aHx8MSkvMiooZj8tMToxKSxsYWJlbFNoaWZ0OmR9LFQ9MCxrPXQuc2lkZSxBPXQuX2lkLmNoYXJBdCgwKSxNPXQudGlja2FuZ2xlO2lmKCJ4Ij09PUEpYj0oXz0hZiYmImJvdHRvbSI9PT1rfHxmJiYidG9wIj09PWspPzE6LTEsZiYmKGIqPS0xKSx2PWQqYix5PWUrcCpiLHg9Xz8xOi0uMiw5MD09PU1hdGguYWJzKE0pJiYoZj94Kz1COng9LTkwPT09TSYmImJvdHRvbSI9PT1rP046OTA9PT1NJiYidG9wIj09PWs/QjouNSxUPUIvMiooTS85MCkpLHcueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K3YrVCp0LmZvbnRTaXplfSx3LnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keSt5K3QuZm9udFNpemUqeH0sdy5hbmNob3JGbj1mdW5jdGlvbih0LGUpe2lmKHUpe2lmKGwpcmV0dXJuImVuZCI7aWYoYylyZXR1cm4ic3RhcnQifXJldHVybiBpKGUpJiYwIT09ZSYmMTgwIT09ZT9lKmI8MCE9PWY/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0sdy5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHI8LTYwfHxyPjYwPy0uNSpuOiJ0b3AiPT09dC5zaWRlIT09Zj8tbjowfTtlbHNlIGlmKCJ5Ij09PUEpe2lmKGI9KF89IWYmJiJsZWZ0Ij09PWt8fGYmJiJyaWdodCI9PT1rKT8xOi0xLGYmJihiKj0tMSksdj1wLHk9ZCpiLHg9MCxmfHw5MCE9PU1hdGguYWJzKE0pfHwoeD0tOTA9PT1NJiYibGVmdCI9PT1rfHw5MD09PU0mJiJyaWdodCI9PT1rP046LjUpLGYpe3ZhciBTPWkoTSk/K006MDtpZigwIT09Uyl7dmFyIEU9cy5kZWcycmFkKFMpO1Q9TWF0aC5hYnMoTWF0aC5zaW4oRSkpKk4qYix4PTB9fXcueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K2UtKHYrdC5mb250U2l6ZSp4KSpiK1QqdC5mb250U2l6ZX0sdy55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkreSt0LmZvbnRTaXplKkJ9LHcuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShlKSYmOTA9PT1NYXRoLmFicyhlKT8ibWlkZGxlIjpfPyJlbmQiOiJzdGFydCJ9LHcuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJyaWdodCI9PT10LnNpZGUmJihyKj0tMSkscjwtMzA/LW46cjwzMD8tLjUqbjowfX1yZXR1cm4gd30sVi5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrInRpY2siLGk9ci52YWxzOyJwZXJpb2QiPT09ZS50aWNrbGFiZWxtb2RlJiYoaT1pLnNsaWNlKCkpLnNoaWZ0KCk7dmFyIGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGUudGlja3M/aTpbXSxtdCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ0aWNrcyIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuY2FsbChmLnN0cm9rZSxlLnRpY2tjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS50aWNrd2lkdGgsMSkrInB4IikuYXR0cigiZCIsci5wYXRoKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksRXQoZSxbRF0pLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pfSxWLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkKyJncmlkIixpPXIudmFscyxhPXIuY291bnRlckF4aXM7aWYoITE9PT1lLnNob3dncmlkKWk9W107ZWxzZSBpZihhJiZWLnNob3VsZFNob3daZXJvTGluZSh0LGUsYSkpZm9yKHZhciBvPSJhcnJheSI9PT1lLnRpY2ttb2RlLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXS54O2lmKG8/IWw6TWF0aC5hYnMobCk8ZS5kdGljay8xMDApe2lmKGk9aS5zbGljZSgwLHMpLmNvbmNhdChpLnNsaWNlKHMrMSkpLCFvKWJyZWFrO3MtLX19dmFyIGM9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGksbXQpO2MuZXhpdCgpLnJlbW92ZSgpLGMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCksZS5fZ3c9aC5jcmlzcFJvdW5kKHQsZS5ncmlkd2lkdGgsMSksYy5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKGYuc3Ryb2tlLGUuZ3JpZGNvbG9yfHwiI2RkZCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuX2d3KyJweCIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxFdChlLFt6XSksImZ1bmN0aW9uIj09dHlwZW9mIHIucGF0aCYmYy5hdHRyKCJkIixyLnBhdGgpfSxWLmRyYXdaZXJvTGluZT1mdW5jdGlvbih0LGUscil7cj1yfHxyO3ZhciBuPWUuX2lkKyJ6bCIsaT1WLnNob3VsZFNob3daZXJvTGluZSh0LGUsci5jb3VudGVyQXhpcyksYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaT9be3g6MCxpZDplLl9pZH1dOltdKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoInpsIiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKS5lYWNoKChmdW5jdGlvbigpe3IubGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gRyh0LmlkLGUuaWQpfSkpfSkpLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbChmLnN0cm9rZSxlLnplcm9saW5lY29sb3J8fGYuZGVmYXVsdExpbmUpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUuemVyb2xpbmV3aWR0aCxlLl9nd3x8MSkrInB4Iikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEV0KGUsW09dKX0sVi5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZCx1PW8uY2hhckF0KDApLGY9ci5jbHN8fG8rInRpY2siLHA9ci52YWxzLGQ9ci5sYWJlbEZucyxtPXIuc2Vjb25kYXJ5PzA6ZS50aWNrYW5nbGUsZz0oZS5fcHJldlRpY2tBbmdsZXN8fHt9KVtmXSx2PXIubGF5ZXIuc2VsZWN0QWxsKCJnLiIrZikuZGF0YShlLnNob3d0aWNrbGFiZWxzP3A6W10sbXQpLHk9W107ZnVuY3Rpb24geCh0LGEpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG89bi5zZWxlY3QodGhpcykscz1vLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLHU9ZC5hbmNob3JGbih0LGEpLGY9ci50cmFuc0ZuLmNhbGwoby5ub2RlKCksdCkrKGkoYSkmJjAhPSthPyIgcm90YXRlKCIrYSsiLCIrZC54Rm4odCkrIiwiKyhkLnlGbih0KS10LmZvbnRTaXplLzIpKyIpIjoiIikscD1jLmxpbmVDb3VudChvKSxtPWoqdC5mb250U2l6ZSxnPWQuaGVpZ2h0Rm4odCxpKGEpPythOjAsKHAtMSkqbSk7aWYoZyYmKGYrPWwoMCxnKSkscy5lbXB0eSgpKXt2YXIgdj1vLnNlbGVjdCgidGV4dCIpO3YuYXR0cih7dHJhbnNmb3JtOmYsInRleHQtYW5jaG9yIjp1fSksdi5zdHlsZSgib3BhY2l0eSIsMSksZS5fYWRqdXN0VGlja0xhYmVsc092ZXJmbG93JiZlLl9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3coKX1lbHNle3ZhciB5PWguYkJveChzLm5vZGUoKSkud2lkdGgqe2VuZDotLjUsc3RhcnQ6LjV9W3VdO3MuYXR0cigidHJhbnNmb3JtIixmK2woeSwwKSl9fSkpfXYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXQuX3Byb21pc2VzLmxlbmd0aDtyLmNhbGwoYy5wb3NpdGlvblRleHQsZC54Rm4oZSksZC55Rm4oZSkpLmNhbGwoaC5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KSx0Ll9wcm9taXNlc1tpXT95LnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbigoZnVuY3Rpb24oKXt4KHIsbSl9KSkpOngocixtKX0pKSxFdChlLFtSXSksdi5leGl0KCkucmVtb3ZlKCksci5yZXBvc2l0aW9uT25VcGRhdGUmJnYuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuY2FsbChjLnBvc2l0aW9uVGV4dCxkLnhGbih0KSxkLnlGbih0KSl9KSksZS5fYWRqdXN0VGlja0xhYmVsc092ZXJmbG93PWZ1bmN0aW9uKCl7dmFyIHI9ZS50aWNrbGFiZWxvdmVyZmxvdztpZihyJiYiYWxsb3ciIT09cil7dmFyIGk9LTEhPT1yLmluZGV4T2YoImhpZGUiKSxvPSJ4Ij09PWUuX2lkLmNoYXJBdCgwKSxsPTAsYz1vP3QuX2Z1bGxMYXlvdXQud2lkdGg6dC5fZnVsbExheW91dC5oZWlnaHQ7aWYoLTEhPT1yLmluZGV4T2YoImRvbWFpbiIpKXt2YXIgdT1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtsPWUubDJwKHVbMF0pK2UuX29mZnNldCxjPWUubDJwKHVbMV0pK2UuX29mZnNldH12YXIgZj1NYXRoLm1pbihsLGMpLHA9TWF0aC5tYXgobCxjKSxkPWUuc2lkZSxtPTEvMCxnPS0xLzA7Zm9yKHZhciB5IGluIHYuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoci5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKS5lbXB0eSgpKXt2YXIgYT1oLmJCb3goci5ub2RlKCkpLHM9MDtvPyhhLnJpZ2h0PnB8fGEubGVmdDxmKSYmKHM9MSk6KGEuYm90dG9tPnB8fGEudG9wKyhlLnRpY2thbmdsZT8wOnQuZm9udFNpemUvNCk8ZikmJihzPTEpO3ZhciBsPXIuc2VsZWN0KCJ0ZXh0Iik7cz9pJiZsLnN0eWxlKCJvcGFjaXR5IiwwKToobC5zdHlsZSgib3BhY2l0eSIsMSksbT0iYm90dG9tIj09PWR8fCJyaWdodCI9PT1kP01hdGgubWluKG0sbz9hLnRvcDphLmxlZnQpOi0xLzAsZz0idG9wIj09PWR8fCJsZWZ0Ij09PWQ/TWF0aC5tYXgoZyxvP2EuYm90dG9tOmEucmlnaHQpOjEvMCl9fSkpLGEuX3Bsb3RzKXt2YXIgeD1hLl9wbG90c1t5XTtpZihlLl9pZD09PXgueGF4aXMuX2lkfHxlLl9pZD09PXgueWF4aXMuX2lkKXt2YXIgYj1vP3gueWF4aXM6eC54YXhpcztiJiYoYlsiX3Zpc2libGVMYWJlbE1pbl8iK2UuX2lkXT1tLGJbIl92aXNpYmxlTGFiZWxNYXhfIitlLl9pZF09Zyl9fX19LGUuX2hpZGVDb3VudGVyQXhpc0luc2lkZVRpY2tMYWJlbHM9ZnVuY3Rpb24odCl7dmFyIHI9IngiPT09ZS5faWQuY2hhckF0KDApLGk9W107Zm9yKHZhciBvIGluIGEuX3Bsb3RzKXt2YXIgcz1hLl9wbG90c1tvXTtlLl9pZCE9PXMueGF4aXMuX2lkJiZlLl9pZCE9PXMueWF4aXMuX2lkfHxpLnB1c2gocj9zLnlheGlzOnMueGF4aXMpfWkuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtyJiZTdChyKSYmKHR8fFtPLHosRCxSXSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG89InRpY2siPT09dC5LJiYidGV4dCI9PT10LkwmJiJwZXJpb2QiPT09ZS50aWNrbGFiZWxtb2RlLHM9YS5fcGxvdHNbZS5fbWFpblN1YnBsb3RdOyh0Lks9PT1PLks/cy56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgiLiIrZS5faWQrInpsIik6dC5LPT09ei5LP3MuZ3JpZGxheWVyLnNlbGVjdEFsbCgiLiIrZS5faWQpOnNbZS5faWQuY2hhckF0KDApKyJheGlzbGF5ZXIiXSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLnNlbGVjdCh0aGlzKTt0LkwmJihhPWEuc2VsZWN0QWxsKHQuTCkpLGEuZWFjaCgoZnVuY3Rpb24oYSl7dmFyIHM9ZS5sMnAobz9kdChhKTphLngpK2UuX29mZnNldCxsPW4uc2VsZWN0KHRoaXMpO3M8ZVsiX3Zpc2libGVMYWJlbE1heF8iK3IuX2lkXSYmcz5lWyJfdmlzaWJsZUxhYmVsTWluXyIrci5faWRdP2wuc3R5bGUoImRpc3BsYXkiLCJub25lIik6InRpY2siIT09dC5LfHxpfHxsLnN0eWxlKCJkaXNwbGF5IixudWxsKX0pKX0pKX0pKX0pKX0seCh2LGcrMT9nOm0pO3ZhciBiPW51bGw7ZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbZl09dik7dmFyIF89W2Z1bmN0aW9uKCl7cmV0dXJuIHkubGVuZ3RoJiZQcm9taXNlLmFsbCh5KX1dO2UuYXV0b21hcmdpbiYmYS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCYmOTA9PT1nPyhiPTkwLF8ucHVzaCgoZnVuY3Rpb24oKXt4KHYsZyl9KSkpOl8ucHVzaCgoZnVuY3Rpb24oKXtpZih4KHYsbSkscC5sZW5ndGgmJiJ4Ij09PXUmJiFpKG0pJiYoImxvZyIhPT1lLnR5cGV8fCJEIiE9PVN0cmluZyhlLmR0aWNrKS5jaGFyQXQoMCkpKXtiPTA7dmFyIHQsbj0wLGE9W107aWYodi5lYWNoKChmdW5jdGlvbih0KXtuPU1hdGgubWF4KG4sdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxpPXl0KHRoaXMpLG89aC5iQm94KGkubm9kZSgpKTthLnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDpyLW8ud2lkdGgvMixyaWdodDpyK28ud2lkdGgvMisyLHdpZHRoOm8ud2lkdGgrMn0pfSkpLCJib3VuZGFyaWVzIiE9PWUudGlja3NvbiYmIWUuc2hvd2RpdmlkZXJzfHxyLnNlY29uZGFyeSl7dmFyIG89cC5sZW5ndGgsbD1NYXRoLmFicygocFtvLTFdLngtcFswXS54KSplLl9tKS8oby0xKSxjPWUudGlja2xhYmVscG9zaXRpb258fCIiLGY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1jLmluZGV4T2YodCl9LGQ9ZigidG9wIiksZz1mKCJsZWZ0IikseT1mKCJyaWdodCIpLF89ZigiYm90dG9tIil8fGd8fGR8fHk/KGUudGlja3dpZHRofHwwKSs2OjAsdz1sPDIuNSpufHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGV8fCJyZWFsYXhpcyI9PT1lLl9uYW1lO2Zvcih0PTA7dDxhLmxlbmd0aC0xO3QrKylpZihzLmJCb3hJbnRlcnNlY3QoYVt0XSxhW3QrMV0sXykpe2I9dz85MDozMDticmVha319ZWxzZXt2YXIgVD0yO2ZvcihlLnRpY2tzJiYoVCs9ZS50aWNrd2lkdGgvMiksdD0wO3Q8YS5sZW5ndGg7dCsrKXt2YXIgaz1wW3RdLnhibmQsQT1hW3RdO2lmKG51bGwhPT1rWzBdJiZBLmxlZnQtZS5sMnAoa1swXSk8VHx8bnVsbCE9PWtbMV0mJmUubDJwKGtbMV0pLUEucmlnaHQ8VCl7Yj05MDticmVha319fWImJngodixiKX19KSksZS5fdGlja0FuZ2xlcyYmXy5wdXNoKChmdW5jdGlvbigpe2UuX3RpY2tBbmdsZXNbZl09bnVsbD09PWI/aShtKT9tOjA6Yn0pKTt2YXIgdz1lLl9hbmNob3JBeGlzO3cmJncuYXV0b3JhbmdlJiZTdChlKSYmIVkoYSxlLl9pZCkmJihhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlfHwoYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT17fSksYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZVt3Ll9uYW1lKyIuYXV0b3JhbmdlIl09dy5hdXRvcmFuZ2UsXy5wdXNoKChmdW5jdGlvbigpe3YuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj15dCh0aGlzKTtuLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkmJihlLl92YWxzW3JdLmJiPWguYkJveChuLm5vZGUoKSkpfSkpfSkpKTt2YXIgVD1zLnN5bmNPckFzeW5jKF8pO3JldHVybiBUJiZULnRoZW4mJnQuX3Byb21pc2VzLnB1c2goVCksVH0sVi5nZXRQeFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0Ll9zaXplLGk9ZS5faWQuY2hhckF0KDApLGE9ZS5zaWRlO3JldHVybiJmcmVlIiE9PWUuYW5jaG9yP3I9ZS5fYW5jaG9yQXhpczoieCI9PT1pP3I9e19vZmZzZXQ6bi50KygxLShlLnBvc2l0aW9ufHwwKSkqbi5oLF9sZW5ndGg6MH06InkiPT09aSYmKHI9e19vZmZzZXQ6bi5sKyhlLnBvc2l0aW9ufHwwKSpuLncsX2xlbmd0aDowfSksInRvcCI9PT1hfHwibGVmdCI9PT1hP3IuX29mZnNldDoiYm90dG9tIj09PWF8fCJyaWdodCI9PT1hP3IuX29mZnNldCtyLl9sZW5ndGg6dm9pZCAwfSxWLnNob3VsZFNob3daZXJvTGluZT1mdW5jdGlvbih0LGUscil7dmFyIG49cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cmV0dXJuIG5bMF0qblsxXTw9MCYmZS56ZXJvbGluZSYmKCJsaW5lYXIiPT09ZS50eXBlfHwiLSI9PT1lLnR5cGUpJiYhKGUucmFuZ2VicmVha3MmJmUubWFza0JyZWFrcygwKT09PUkpJiYodnQoZSwwKXx8IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuX21haW5BeGlzO2lmKCFpKXJldHVybjt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQuY2hhckF0KDApLHM9Vi5jb3VudGVyTGV0dGVyKGUuX2lkKSxsPWUuX29mZnNldCsoTWF0aC5hYnMoblswXSk8TWF0aC5hYnMoblsxXSk9PSgieCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGk9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBhIGluIGkpaWYobihpW2FdWzBdKXx8bihpW2FdWzFdKSlyZXR1cm4hMH12YXIgdT1hLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgZj1WLmxpc3QodCxzKSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYocC5fbWFpbkF4aXM9PT1pJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsaT1lLl9pZC5jaGFyQXQoMCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZihvLnRyYWNlSXMocywiYmFyLWxpa2UiKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LFYuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2dCh0LGUueCl9KSl9LFYuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1WLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmKGEuYWxsb3dBdXRvTWFyZ2luKHQseHQobikpLG4ubWlycm9yJiZhLmFsbG93QXV0b01hcmdpbih0LGJ0KG4pKSksby5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikobikmJmEuYWxsb3dBdXRvTWFyZ2luKHQsX3QobikpfX0sVi5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248aS5sZW5ndGg7bisrKS0xPT09aVtuXS54LmluZGV4T2YobykmJi0xPT09aVtuXS55LmluZGV4T2Yocyl8fGEucHVzaChuKTtpZihhLmxlbmd0aCl7dmFyIGwsYz1pW2FbMF1dO2lmKGEubGVuZ3RoPjEpZm9yKG49MTtuPGEubGVuZ3RoO24rKylsPWlbYVtuXV0sd3QoYy54LGwueCksd3QoYy55LGwueSk7d3QoYy54LFtvXSksd3QoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKylUdCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NDU5LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NjYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9wbG90cyI6NjE0LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2F1dG9yYW5nZSI6NTQ4LCIuL2F4aXNfYXV0b3R5cGUiOjU1MCwiLi9heGlzX2lkcyI6NTUzLCIuL2NsZWFuX3RpY2tzIjo1NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi9zZXRfY29udmVydCI6NTcxLCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89aS5pc0FycmF5T3JUeXBlZEFycmF5LHM9aS5pc0RhdGVUaW1lLGw9aS5jbGVhbk51bWJlcixjPU1hdGgucm91bmQ7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBlP24odCk6Im51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGgubWF4KDEsKHQtMSkvMWUzKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQsaD1yLm5vTXVsdGlDYXRlZ29yeTtpZihvKGkpJiYhaS5sZW5ndGgpcmV0dXJuIi0iO2lmKCFoJiZmdW5jdGlvbih0KXtyZXR1cm4gbyh0WzBdKSYmbyh0WzFdKX0oaSkpcmV0dXJuIm11bHRpY2F0ZWdvcnkiO2lmKGgmJkFycmF5LmlzQXJyYXkoaVswXSkpe2Zvcih2YXIgcD1bXSxkPTA7ZDxpLmxlbmd0aDtkKyspaWYobyhpW2RdKSlmb3IodmFyIG09MDttPGlbZF0ubGVuZ3RoO20rKylwLnB1c2goaVtkXVttXSk7aT1wfWlmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9ZihyKSxhPTAsbz0wLGw9e30sdT0wO3U8cjt1Kz1pKXt2YXIgaD1jKHUpLHA9dFtoXSxkPVN0cmluZyhwKTtsW2RdfHwobFtkXT0xLHMocCxlKSYmYSsrLG4ocCkmJm8rKyl9cmV0dXJuIGE+MipvfShpLGUpKXJldHVybiJkYXRlIjt2YXIgZz0ic3RyaWN0IiE9PXIuYXV0b3R5cGVudW1iZXJzO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWYociksaT0wLG89MCxzPXt9LHU9MDt1PHI7dSs9bil7dmFyIGg9Yyh1KSxwPXRbaF0sZD1TdHJpbmcocCk7aWYoIXNbZF0pe3NbZF09MTt2YXIgbT10eXBlb2YgcDsiYm9vbGVhbiI9PT1tP28rKzooZT9sKHApIT09YToibnVtYmVyIj09PW0pP2krKzoic3RyaW5nIj09PW0mJm8rK319cmV0dXJuIG8+MippfShpLGcpPyJjYXRlZ29yeSI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodSh0W25dLGUpKXJldHVybiEwO3JldHVybiExfShpLGcpPyJsaW5lYXIiOiItIn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDU1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxmPXQoIi4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpLGg9dCgiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLHA9dCgiLi9saW5lX2dyaWRfZGVmYXVsdHMiKSxkPXQoIi4vc2V0X2NvbnZlcnQiKSxtPXQoIi4vY29uc3RhbnRzIikuV0VFS0RBWV9QQVRURVJOLGc9dCgiLi9jb25zdGFudHMiKS5IT1VSX1BBVFRFUk47ZnVuY3Rpb24gdih0LGUscil7ZnVuY3Rpb24gaShyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUscy5yYW5nZWJyZWFrcyxyLG4pfWlmKGkoImVuYWJsZWQiKSl7dmFyIG89aSgiYm91bmRzIik7aWYobyYmby5sZW5ndGg+PTIpe3ZhciBsLGMsdT0iIjtpZigyPT09by5sZW5ndGgpZm9yKGw9MDtsPDI7bCsrKWlmKGM9eChvW2xdKSl7dT1tO2JyZWFrfXZhciBmPWkoInBhdHRlcm4iLHUpO2lmKGY9PT1tKWZvcihsPTA7bDwyO2wrKykoYz14KG9bbF0pKSYmKGUuYm91bmRzW2xdPW9bbF09Yy0xKTtpZihmKWZvcihsPTA7bDwyO2wrKylzd2l0Y2goYz1vW2xdLGYpe2Nhc2UgbTppZighbihjKSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2lmKChjPStjKSE9PU1hdGguZmxvb3IoYyl8fGM8MHx8Yz49NylyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2UuYm91bmRzW2xdPW9bbF09YzticmVhaztjYXNlIGc6aWYoIW4oYykpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpZigoYz0rYyk8MHx8Yz4yNClyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2UuYm91bmRzW2xdPW9bbF09Y31pZighMT09PXIuYXV0b3JhbmdlKXt2YXIgaD1yLnJhbmdlO2lmKGhbMF08aFsxXSl7aWYob1swXTxoWzBdJiZvWzFdPmhbMV0pcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKX1lbHNlIGlmKG9bMF0+aFswXSYmb1sxXTxoWzFdKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSl9fWVsc2V7dmFyIHA9aSgidmFsdWVzIik7aWYoIXB8fCFwLmxlbmd0aClyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2koImR2YWx1ZSIpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sZyl7dmFyIHkseD1uLmxldHRlcixiPW4uZm9udHx8e30sXz1uLnNwbG9tU3Rhc2h8fHt9LHc9cigidmlzaWJsZSIsIW4udmlzaWJsZURmbHQpLFQ9ZS5fdGVtcGxhdGV8fHt9LGs9ZS50eXBlfHxULnR5cGV8fCItIjsiZGF0ZSI9PT1rJiYoaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsbi5jYWxlbmRhciksbi5ub1RpY2tsYWJlbG1vZGV8fCh5PXIoInRpY2tsYWJlbG1vZGUiKSkpO3ZhciBBPSIiO24ubm9UaWNrbGFiZWxwb3NpdGlvbiYmIm11bHRpY2F0ZWdvcnkiIT09a3x8KEE9YS5jb2VyY2UodCxlLHt0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoib3V0c2lkZSIsdmFsdWVzOiJwZXJpb2QiPT09eT9bIm91dHNpZGUiLCJpbnNpZGUiXToieCI9PT14P1sib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCJdOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdfX0sInRpY2tsYWJlbHBvc2l0aW9uIikpLG4ubm9UaWNrbGFiZWxvdmVyZmxvd3x8cigidGlja2xhYmVsb3ZlcmZsb3ciLC0xIT09QS5pbmRleE9mKCJpbnNpZGUiKT8iaGlkZSBwYXN0IGRvbWFpbiI6ImNhdGVnb3J5Ij09PWt8fCJtdWx0aWNhdGVnb3J5Ij09PWs/ImFsbG93IjoiaGlkZSBwYXN0IGRpdiIpLGQoZSxnKTt2YXIgTT0hZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSk7TSYmbi5yZXZlcnNlRGZsdCYmKE09InJldmVyc2VkIiksIXIoImF1dG9yYW5nZSIsTSl8fCJsaW5lYXIiIT09ayYmIi0iIT09a3x8cigicmFuZ2Vtb2RlIikscigicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxoKHQsZSxyLG4pLCJjYXRlZ29yeSI9PT1rfHxuLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0Iik7dmFyIFM9cigiY29sb3IiKSxFPVMhPT1zLmNvbG9yLmRmbHQ/UzpiLmNvbG9yLEw9Xy5sYWJlbHx8Zy5fZGZsdFRpdGxlW3hdO2lmKGYodCxlLHIsayxuKSwhdylyZXR1cm4gZTtyKCJ0aXRsZS50ZXh0IixMKSxhLmNvZXJjZUZvbnQociwidGl0bGUuZm9udCIse2ZhbWlseTpiLmZhbWlseSxzaXplOmEuYmlnRm9udChiLnNpemUpLGNvbG9yOkV9KSxsKHQsZSxyLGspLHUodCxlLHIsayxuKSxjKHQsZSxyLG4pLHAodCxlLHIse2RmbHRDb2xvcjpTLGJnQ29sb3I6bi5iZ0NvbG9yLHNob3dHcmlkOm4uc2hvd0dyaWQsYXR0cmlidXRlczpzfSksKGUuc2hvd2xpbmV8fGUudGlja3MpJiZyKCJtaXJyb3IiKSxuLmF1dG9tYXJnaW4mJnIoImF1dG9tYXJnaW4iKTt2YXIgQyxQPSJtdWx0aWNhdGVnb3J5Ij09PWs7bi5ub1RpY2tzb258fCJjYXRlZ29yeSIhPT1rJiYhUHx8IWUudGlja3MmJiFlLnNob3dncmlkfHwoUCYmKEM9ImJvdW5kYXJpZXMiKSwiYm91bmRhcmllcyI9PT1yKCJ0aWNrc29uIixDKSYmZGVsZXRlIGUudGlja2xhYmVscG9zaXRpb24pO1AmJihyKCJzaG93ZGl2aWRlcnMiKSYmKHIoImRpdmlkZXJjb2xvciIpLHIoImRpdmlkZXJ3aWR0aCIpKSk7aWYoImRhdGUiPT09aylpZihvKHQsZSx7bmFtZToicmFuZ2VicmVha3MiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czp2fSksZS5yYW5nZWJyZWFrcy5sZW5ndGgpe2Zvcih2YXIgST0wO0k8ZS5yYW5nZWJyZWFrcy5sZW5ndGg7SSsrKWlmKGUucmFuZ2VicmVha3NbSV0ucGF0dGVybj09PW0pe2UuX2hhc0RheU9mV2Vla0JyZWFrcz0hMDticmVha31pZihkKGUsZyksZy5faGFzKCJzY2F0dGVyZ2wiKXx8Zy5faGFzKCJzcGxvbSIpKWZvcih2YXIgTz0wO088bi5kYXRhLmxlbmd0aDtPKyspe3ZhciB6PW4uZGF0YVtPXTsic2NhdHRlcmdsIiE9PXoudHlwZSYmInNwbG9tIiE9PXoudHlwZXx8KHoudmlzaWJsZT0hMSxhLndhcm4oei50eXBlKyIgdHJhY2VzIGRvIG5vdCB3b3JrIG9uIGF4ZXMgd2l0aCByYW5nZWJyZWFrcy4gU2V0dGluZyB0cmFjZSAiK3ouaW5kZXgrIiB0byBgdmlzaWJsZTogZmFsc2VgLiIpKX19ZWxzZSBkZWxldGUgZS5yYW5nZWJyZWFrcztyZXR1cm4gZX07dmFyIHk9e3N1bjoxLG1vbjoyLHR1ZTozLHdlZDo0LHRodTo1LGZyaTo2LHNhdDo3fTtmdW5jdGlvbiB4KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4geVt0LnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCldfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDQsIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjU1NCwiLi9jb25zdGFudHMiOjU1NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTY0LCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NTY2LCIuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiOjU2OCwiLi9zZXRfY29udmVydCI6NTcxLCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3MywiLi90aWNrX21hcmtfZGVmYXVsdHMiOjU3NCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo1NzUsImZhc3QtaXNudW1lcmljIjoxODV9XSw1NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKSxpPW4uRk9STUFUX0xJTkssYT1uLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblsiU2V0cyB0aGUgIit0KyIgZm9ybWF0dGluZyBydWxlIisoZT8iZm9yIGAiK2UrImAgIjoiIiksInVzaW5nIGQzIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZXMiLCJ3aGljaCBhcmUgdmVyeSBzaW1pbGFyIHRvIHRob3NlIGluIFB5dGhvbi4gRm9yIG51bWJlcnMsIHNlZTogIitpKyIuIl0uam9pbigiICIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LGUpK1siIEFuZCBmb3IgZGF0ZXMgc2VlOiAiK2ErIi4iLCJXZSBhZGQgdHdvIGl0ZW1zIHRvIGQzJ3MgZGF0ZSBmb3JtYXR0ZXI6IiwiKiVoKiBmb3IgaGFsZiBvZiB0aGUgeWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyIGFzIHdlbGwgYXMiLCIqJXtufWYqIGZvciBmcmFjdGlvbmFsIHNlY29uZHMiLCJ3aXRoIG4gZGlnaXRzLiBGb3IgZXhhbXBsZSwgKjIwMTYtMTAtMTMgMDk6MTU6MjMuNDU2KiB3aXRoIHRpY2tmb3JtYXQiLCIqJUh+JU1+JVMuJTJmKiB3b3VsZCBkaXNwbGF5ICowOX4xNX4yMy40NioiXS5qb2luKCIgIil9ZS5leHBvcnRzPXtheGlzSG92ZXJGb3JtYXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIixkZXNjcmlwdGlvbjooZT9vOnMpKCJob3ZlciB0ZXh0Iix0KStbIkJ5IGRlZmF1bHQgdGhlIHZhbHVlcyBhcmUgZm9ybWF0dGVkIHVzaW5nICIrKGU/ImdlbmVyaWMgbnVtYmVyIGZvcm1hdCI6ImAiK3QrImF4aXMuaG92ZXJmb3JtYXRgIikrIi4iXS5qb2luKCIgIil9fSxkZXNjcmlwdGlvbk9ubHlOdW1iZXJzOm8sZGVzY3JpcHRpb25XaXRoRGF0ZXM6c319LHsiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjQ2OX1dLDU1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSl7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXVt0XSlyZXR1cm4hMDtyZXR1cm4hMX1yLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3BsaXQoIiAiKVswXS5zdWJzdHIoMSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApKyJheGlzIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUscil7dmFyIG49LyggZG9tYWluKSQvLnRlc3QodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSYmKCFufHxyKSl7dmFyIGE9dC5zcGxpdCgiICIpWzBdLnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLCIiKTtyZXR1cm4iMSI9PT1hJiYoYT0iIiksdC5jaGFyQXQoMCkrYSsobiYmcj8iIGRvbWFpbiI6IiIpfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4gZT12b2lkIDA9PT1lfHwic3RyaW5nIiE9dHlwZW9mIGU/ZTplLnJlcGxhY2UoIiBkb21haW4iLCIiKSwieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIucmVmMmlkPWZ1bmN0aW9uKHQpe3JldHVybiEhL15beHl6XS8udGVzdCh0KSYmdC5zcGxpdCgiICIpWzBdfSxyLmlzTGlua2VkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoZSx0Ll9heGlzTWF0Y2hHcm91cHMpfHxhKGUsdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMpfX0seyIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2NvbnN0YW50cyI6NTU2fV0sNTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZigiY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9ImFycmF5Iik7dmFyIHMsbD1yKCJjYXRlZ29yeW9yZGVyIixpKTsiYXJyYXkiPT09bCYmKHM9cigiY2F0ZWdvcnlhcnJheSIpKSxvfHwiYXJyYXkiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpLCJ0cmFjZSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPVtdOiJhcnJheSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYSsiYXhpcyJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksImNhdGVnb3J5IGFzY2VuZGluZyI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXM6ImNhdGVnb3J5IGRlc2NlbmRpbmciPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDU1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLk9ORURBWSxzPWEuT05FV0VFSztyLmR0aWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImxvZyI9PT1lLGk9ImRhdGUiPT09ZSxhPSJjYXRlZ29yeSI9PT1lLHM9aT9vOjE7aWYoIXQpcmV0dXJuIHM7aWYobih0KSlyZXR1cm4odD1OdW1iZXIodCkpPD0wP3M6YT9NYXRoLm1heCgxLE1hdGgucm91bmQodCkpOmk/TWF0aC5tYXgoLjEsdCk6dDtpZigic3RyaW5nIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJiJNIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiYiTCI9PT1sfHxyJiYiRCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiJkYXRlIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyLGElcz09MD8xOjApKToiRDEiIT09YSYmIkQyIiE9PWE/bih0KT9OdW1iZXIodCk6MDp2b2lkIDB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIsIiggZG9tYWluKT8iKSx5Om4oInkiLCIoIGRvbWFpbik/Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qKCBkb21haW4pPyQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLEhPVVJfUEFUVEVSTjoiaG91ciIsV0VFS0RBWV9QQVRURVJOOiJkYXkgb2Ygd2VlayIsTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImltYWdlbGF5ZXIiLCJoZWF0bWFwbGF5ZXIiLCJjb250b3VyY2FycGV0bGF5ZXIiLCJjb250b3VybGF5ZXIiLCJmdW5uZWxsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxjbGlwT25BeGlzRmFsc2VRdWVyeTpbIi5zY2F0dGVybGF5ZXIiLCIuYmFybGF5ZXIiLCIuZnVubmVsbGF5ZXIiLCIud2F0ZXJmYWxsbGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NTE1fV0sNTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdXRvcmFuZ2UiKSxhPXQoIi4vYXhpc19pZHMiKS5pZDJuYW1lLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9zY2FsZV96b29tIiksbD10KCIuL3NldF9jb252ZXJ0IiksYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9ci5heElkcyxzPXIubGF5b3V0T3V0LGw9ci5oYXNJbWFnZSxjPXMuX2F4aXNDb25zdHJhaW50R3JvdXBzLHU9cy5fYXhpc01hdGNoR3JvdXBzLGY9ZS5faWQsbT1mLmNoYXJBdCgwKSxnPSgocy5fc3Bsb21BeGVzfHx7fSlbbV18fHt9KVtmXXx8e30sdj1lLl9pZCx5PSJ4Ij09PXYuY2hhckF0KDApO2Z1bmN0aW9uIHgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9tYXRjaEdyb3VwPW51bGwsZS5fY29uc3RyYWludEdyb3VwPW51bGwseCgiY29uc3RyYWluIixsPyJkb21haW4iOiJyYW5nZSIpLG4uY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6eT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDp5PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpO3ZhciBiLF8sdz1lLnR5cGUsVD1bXTtmb3IoYj0wO2I8aS5sZW5ndGg7YisrKXtpZigoXz1pW2JdKSE9PXYpc1thKF8pXS50eXBlPT09dyYmVC5wdXNoKF8pfXZhciBrPXAoYyx2KTtpZihrKXt2YXIgQT1bXTtmb3IoYj0wO2I8VC5sZW5ndGg7YisrKWtbXz1UW2JdXXx8QS5wdXNoKF8pO1Q9QX12YXIgTSxTLEU9VC5sZW5ndGg7RSYmKHQubWF0Y2hlc3x8Zy5tYXRjaGVzKSYmKE09bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VCxkZmx0Oi0xIT09VC5pbmRleE9mKGcubWF0Y2hlcyk/Zy5tYXRjaGVzOnZvaWQgMH19LCJtYXRjaGVzIikpO3ZhciBMPWwmJiF5P2UuYW5jaG9yOnZvaWQgMDtpZihFJiYhTSYmKHQuc2NhbGVhbmNob3J8fEwpJiYoUz1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VH19LCJzY2FsZWFuY2hvciIsTCkpLE0pe2UuX21hdGNoR3JvdXA9ZCh1LHYsTSwxKTt2YXIgQz1zW2EoTSldLFA9aChzLGUpL2gocyxDKTt5IT09KCJ4Ij09PU0uY2hhckF0KDApKSYmKFA9KHk/IngiOiJ5IikrUCksZChjLHYsTSxQKX1lbHNlIHQubWF0Y2hlcyYmLTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLm1hdGNoZXM6ICInK3QubWF0Y2hlcysnIiB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wJyk7aWYoUyl7dmFyIEk9eCgic2NhbGVyYXRpbyIpO0l8fChJPWUuc2NhbGVyYXRpbz0xKSxkKGMsdixTLEkpfWVsc2UgdC5zY2FsZWFuY2hvciYmLTEhPT1pLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoaXMgYXhpcyBkZWNsYXJlcyBhICptYXRjaGVzKiBjb25zdHJhaW50LicpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1lLmRvbWFpbjtyZXR1cm4gcnx8KHI9dFthKGUub3ZlcmxheWluZyldLmRvbWFpbiksclsxXS1yWzBdfWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdW2VdKXJldHVybiB0W3JdO3JldHVybiBudWxsfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPXAodCxlKTtudWxsPT09Yz8oKGM9e30pW2VdPTEsbD10Lmxlbmd0aCx0LnB1c2goYykpOmw9dC5pbmRleE9mKGMpO3ZhciB1PU9iamVjdC5rZXlzKGMpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobz10W2ldLGkhPT1sJiZvW3JdKXt2YXIgZj1vW3JdO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspb1tzPXVbYV1dPW0oZixtKG4sY1tzXSkpO3JldHVybiB2b2lkIHQuc3BsaWNlKGwsMSl9aWYoMSE9PW4pZm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIGg9dVthXTtjW2hdPW0obixjW2hdKX1jW3JdPTF9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4saT0iIixhPSIiOyJzdHJpbmciPT10eXBlb2YgdCYmKHI9KGk9dC5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCx0PSt0LnN1YnN0cihyKSksInN0cmluZyI9PXR5cGVvZiBlJiYobj0oYT1lLm1hdGNoKC9eW3h5XSovKVswXSkubGVuZ3RoLGU9K2Uuc3Vic3RyKG4pKTt2YXIgbz10KmU7cmV0dXJuIHJ8fG4/ciYmbiYmaS5jaGFyQXQoMCkhPT1hLmNoYXJBdCgwKT9yPT09bj9vOihyPm4/aS5zdWJzdHIobik6YS5zdWJzdHIocikpK286aSthK3QqZTpvfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9ZS5fc2l6ZSxuPXIuaC9yLncsaT17fSxhPU9iamVjdC5rZXlzKHQpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXRbc107aWYoInN0cmluZyI9PXR5cGVvZiBsKXt2YXIgYz1sLm1hdGNoKC9eW3h5XSovKVswXSx1PWMubGVuZ3RoO2w9K2wuc3Vic3RyKHUpO2Zvcih2YXIgZj0ieSI9PT1jLmNoYXJBdCgwKT9uOjEvbixoPTA7aDx1O2grKylsKj1mfWlbc109bH1yZXR1cm4gaX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC5faW5wdXREb21haW4sbj11W3QuY29uc3RyYWludG93YXJkXSxpPXJbMF0rKHJbMV0tclswXSkqbjt0LmRvbWFpbj10Ll9pbnB1dC5kb21haW49W2krKHJbMF0taSkvZSxpKyhyWzFdLWkpL2VdLHQuc2V0U2NhbGUoKX1yLmhhbmRsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvLHMsYyx1LGgscCxkLG09ci5heElkcyxnPXIuYXhIYXNJbWFnZSx2PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLHk9ZS5fYXhpc01hdGNoR3JvdXBzPVtdO2ZvcihpPTA7aTxtLmxlbmd0aDtpKyspZih1PXRbYz1hKG1baV0pXSxoPWVbY10se2F4SWRzOm0sbGF5b3V0T3V0OmUsaGFzSW1hZ2U6Z1tjXX0pO2Z1bmN0aW9uIHgodCxyKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihzIGluIG89dFtpXSllW2EocyldW3JdPW99Zm9yKHgoeSwiX21hdGNoR3JvdXAiKSxpPTA7aTx2Lmxlbmd0aDtpKyspZm9yKHMgaW4gbz12W2ldKWlmKChoPWVbYShzKV0pLmZpeGVkcmFuZ2Upe2Zvcih2YXIgYiBpbiBvKXt2YXIgXz1hKGIpOyExPT09KHRbX118fHt9KS5maXhlZHJhbmdlJiZuLndhcm4oImZpeGVkcmFuZ2Ugd2FzIHNwZWNpZmllZCBhcyBmYWxzZSBmb3IgYXhpcyAiK18rIiBidXQgd2FzIG92ZXJyaWRkZW4gYmVjYXVzZSBhbm90aGVyIGF4aXMgaW4gaXRzIGNvbnN0cmFpbnQgZ3JvdXAgaGFzIGZpeGVkcmFuZ2UgdHJ1ZSIpLGVbX10uZml4ZWRyYW5nZT0hMH1icmVha31mb3IoaT0wO2k8di5sZW5ndGg7KXtmb3IocyBpbiBvPXZbaV0peyhoPWVbYShzKV0pLl9tYXRjaEdyb3VwJiZPYmplY3Qua2V5cyhoLl9tYXRjaEdyb3VwKS5sZW5ndGg9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGgmJih2LnNwbGljZShpLDEpLGktLSk7YnJlYWt9aSsrfXgodiwiX2NvbnN0cmFpbnRHcm91cCIpO3ZhciB3PVsiY29uc3RyYWluIiwicmFuZ2UiLCJhdXRvcmFuZ2UiLCJyYW5nZW1vZGUiLCJyYW5nZWJyZWFrcyIsImNhdGVnb3J5b3JkZXIiLCJjYXRlZ29yeWFycmF5Il0sVD0hMSxrPSExO2Z1bmN0aW9uIEEoKXtkPWhbcF0sInJhbmdlYnJlYWtzIj09PXAmJihrPWguX2hhc0RheU9mV2Vla0JyZWFrcyl9Zm9yKGk9MDtpPHkubGVuZ3RoO2krKyl7bz15W2ldO2Zvcih2YXIgTT0wO008dy5sZW5ndGg7TSsrKXt2YXIgUztmb3IocyBpbiBwPXdbTV0sZD1udWxsLG8paWYodT10W2M9YShzKV0saD1lW2NdLHAgaW4gaCl7aWYoIWgubWF0Y2hlcyYmKFM9aCxwIGluIHUpKXtBKCk7YnJlYWt9bnVsbD09PWQmJnAgaW4gdSYmQSgpfWlmKCJyYW5nZSI9PT1wJiZkJiYoVD0hMCksImF1dG9yYW5nZSI9PT1wJiZudWxsPT09ZCYmVCYmKGQ9ITEpLG51bGw9PT1kJiZwIGluIFMmJihkPVNbcF0pLG51bGwhPT1kKWZvcihzIGluIG8pKGg9ZVthKHMpXSlbcF09InJhbmdlIj09PXA/ZC5zbGljZSgpOmQsInJhbmdlYnJlYWtzIj09PXAmJihoLl9oYXNEYXlPZldlZWtCcmVha3M9ayxsKGgsZSkpfX19LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxsLHUsZixoLHA9dC5fZnVsbExheW91dCxkPXAuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXtuPWcoZFtlXSxwKTt2YXIgbT1PYmplY3Qua2V5cyhuKSx5PTEvMCx4PTAsYj0xLzAsXz17fSx3PXt9LFQ9ITE7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKyl3W289bVtyXV09bD1wW2EobyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxfW29dPXU9TWF0aC5hYnMobC5fbSkvbltvXSx5PU1hdGgubWluKHksdSksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKFQ9ITApO2lmKCEoeT5jKngpfHxUKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW289bVtyXV0sZj0obD13W29dKS5jb25zdHJhaW4sdSE9PWJ8fCJkb21haW4iPT09ZilpZihoPXUvYiwicmFuZ2UiPT09ZilzKGwsaCk7ZWxzZXt2YXIgaz1sLl9pbnB1dERvbWFpbixBPShsLmRvbWFpblsxXS1sLmRvbWFpblswXSkvKGtbMV0ta1swXSksTT0obC5yMmwobC5yYW5nZVsxXSktbC5yMmwobC5yYW5nZVswXSkpLyhsLnIybChsLl9pbnB1dFJhbmdlWzFdKS1sLnIybChsLl9pbnB1dFJhbmdlWzBdKSk7aWYoKGgvPUEpKk08MSl7bC5kb21haW49bC5faW5wdXQuZG9tYWluPWsuc2xpY2UoKSxzKGwsaCk7Y29udGludWV9aWYoTTwxJiYobC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1sLl9pbnB1dFJhbmdlLnNsaWNlKCksaCo9TSksbC5hdXRvcmFuZ2Upe3ZhciBTPWwucjJsKGwucmFuZ2VbMF0pLEU9bC5yMmwobC5yYW5nZVsxXSksTD0oUytFKS8yLEM9TCxQPUwsST1NYXRoLmFicyhFLUwpLE89TC1JKmgqMS4wMDAxLHo9TCtJKmgqMS4wMDAxLEQ9aS5tYWtlUGFkRm4ocCxsLDApLFI9aS5tYWtlUGFkRm4ocCxsLDEpO3YobCxoKTt2YXIgRixCLE49TWF0aC5hYnMobC5fbSksaj1pLmNvbmNhdEV4dHJlbWVzKHQsbCksVT1qLm1pbixWPWoubWF4O2ZvcihCPTA7QjxVLmxlbmd0aDtCKyspKEY9VVtCXS52YWwtRChVW0JdKS9OKT5PJiZGPEMmJihDPUYpO2ZvcihCPTA7QjxWLmxlbmd0aDtCKyspKEY9VltCXS52YWwrUihWW0JdKS9OKTx6JiZGPlAmJihQPUYpO2gvPShQLUMpLygyKkkpLEM9bC5sMnIoQyksUD1sLmwycihQKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPVM8RT9bQyxQXTpbUCxDXX12KGwsaCl9fX0sci5nZXRBeGlzR3JvdXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fYXhpc01hdGNoR3JvdXBzLG49MDtuPHIubGVuZ3RoO24rKyl7aWYocltuXVtlXSlyZXR1cm4iZyIrbn1yZXR1cm4gZX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi9hdXRvcmFuZ2UiOjU0OCwiLi9heGlzX2lkcyI6NTUzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjQsIi4vc2NhbGVfem9vbSI6NTY5LCIuL3NldF9jb252ZXJ0Ijo1NzF9XSw1NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoInRpbnljb2xvcjIiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPWkuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4vYXhlcyIpLG09dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LnNlbGVjdGluZ09yRHJhd2luZyx4PXYuZnJlZU1vZGUsYj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9UTCxfPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLHc9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLFQ9dCgiLi4vcGxvdHMiKSxrPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsQT10KCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsTT10KCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFM9dCgiLi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLEU9dCgiLi9zY2FsZV96b29tIiksTD10KCIuL2NvbnN0YW50cyIpLEM9TC5NSU5EUkFHLFA9TC5NSU5aT09NLEk9ITA7ZnVuY3Rpb24gTyh0LGUscixuKXt2YXIgYT1pLmVuc3VyZVNpbmdsZSh0LmRyYWdsYXllcixlLHIsKGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsdC5pZCl9KSk7cmV0dXJuIGEuY2FsbChtLG4pLGEubm9kZSgpfWZ1bmN0aW9uIHoodCxlLHIsaSxhLG8scyl7dmFyIGw9Tyh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKGguc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIFIodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKWlmKG8ucmFuZ2VicmVha3Mpe3ZhciBzPSJ5Ij09PW8uX2lkLmNoYXJBdCgwKSxsPXM/MS1lOmUsYz1zPzEtcjpyO25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIoby5wMmwobCpvLl9sZW5ndGgpKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKG8ucDJsKGMqby5fbGVuZ3RoKSl9ZWxzZXt2YXIgdT1vLl9ybFswXSxmPW8uX3JsWzFdLXU7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycih1K2YqZSksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycih1K2Yqcil9fWlmKGkmJmkubGVuZ3RoKXt2YXIgaD0oZSsoMS1yKSkvMjtSKGksaCwxLWgsbixbXSl9fWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZighbi5maXhlZHJhbmdlKWlmKG4ucmFuZ2VicmVha3Mpe3ZhciBpPW4uX2xlbmd0aCxhPShuLnAybCgwK2UpLW4ucDJsKDApKyhuLnAybChpK2UpLW4ucDJsKGkpKSkvMjtuLnJhbmdlPVtuLmwycihuLl9ybFswXS1hKSxuLmwycihuLl9ybFsxXS1hKV19ZWxzZSBuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldfX1mdW5jdGlvbiBCKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gTih0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIixjKHIsbikpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBqKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmYuYmFja2dyb3VuZCxzdHJva2U6Zi5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsYyhlLHIpKS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBVKHQsZSxyLG4saSxhKXt0LmF0dHIoImQiLG4rIk0iK3IubCsiLCIrci50KyJ2IityLmgrImgiK3Iudysidi0iK3IuaCsiaC0iK3IudysiWiIpLFYodCxlLGksYSl9ZnVuY3Rpb24gVih0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLG4+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIEgodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBxKHQpe0kmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKGkubm90aWZpZXIoaS5fKHQsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxJPSExKX1mdW5jdGlvbiBHKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLFApLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFkodCxlLHIsbixhKXtmb3IodmFyIG8scyxsLGMsdT0hMSxmPXt9LGg9e30scD0oYXx8e30pLnhhSGFzaCxkPShhfHx7fSkueWFIYXNoLG09MDttPGUubGVuZ3RoO20rKyl7dmFyIGc9ZVttXTtmb3IobyBpbiByKWlmKGdbb10pe2ZvcihsIGluIGcpYSYmKHBbbF18fGRbbF0pfHwoIngiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGZbbF09byk7Zm9yKHMgaW4gbilhJiYocFtzXXx8ZFtzXSl8fCFnW3NdfHwodT0hMCl9Zm9yKHMgaW4gbilpZihnW3NdKWZvcihjIGluIGcpYSYmKHBbY118fGRbY10pfHwoIngiPT09Yy5jaGFyQXQoMCk/cjpuKVtjXXx8KGhbY109cyl9dSYmKGkuZXh0ZW5kRmxhdChmLGgpLGg9e30pO3ZhciB2PXt9LHk9W107Zm9yKGwgaW4gZil7dmFyIHg9ayh0LGwpO3kucHVzaCh4KSx2W3guX2lkXT14fXZhciBiPXt9LF89W107Zm9yKGMgaW4gaCl7dmFyIHc9ayh0LGMpO18ucHVzaCh3KSxiW3cuX2lkXT13fXJldHVybnt4YUhhc2g6dix5YUhhc2g6Yix4YXhlczp5LHlheGVzOl8seExpbmtzOmYseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6dX19ZnVuY3Rpb24gVyh0LGUpe2lmKHMpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjt0Ll9vbndoZWVsJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIocix0Ll9vbndoZWVsKSx0Ll9vbndoZWVsPWUsdC5hZGRFdmVudExpc3RlbmVyKHIsZSx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09dC5vbndoZWVsP3Qub253aGVlbD1lOnZvaWQgMCE9PXQub25tb3VzZXdoZWVsP3Qub25tb3VzZXdoZWVsPWU6dC5pc0FkZGVkV2hlZWxFdmVudHx8KHQuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZSx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBYKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLHMsYyxmLG0sdil7dmFyIEksTyxWLFosSixLLFEsJCx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdCxjdCx1dCxmdCxodCxwdCxkdCxtdD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsZ3Q9bSt2PT09Im5zZXciLHZ0PTE9PT0obSt2KS5sZW5ndGg7ZnVuY3Rpb24geXQoKXtpZihJPWUueGF4aXMsTz1lLnlheGlzLHR0PUkuX2xlbmd0aCxldD1PLl9sZW5ndGgsUT1JLl9vZmZzZXQsJD1PLl9vZmZzZXQsKFY9e30pW0kuX2lkXT1JLChaPXt9KVtPLl9pZF09TyxtJiZ2KWZvcih2YXIgcj1lLm92ZXJsYXlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS54YXhpcztWW2kuX2lkXT1pO3ZhciBhPXJbbl0ueWF4aXM7WlthLl9pZF09YX1KPVgoViksSz1YKFopLGl0PUQoSix2KSxhdD1EKEssbSksb3Q9IWF0JiYhaXQsbnQ9WSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNNYXRjaEdyb3VwcyxWLFopO3ZhciBvPShydD1ZKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsVixaLG50KSkuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkO3N0PXZ8fG8sbHQ9bXx8bzt2YXIgcz10Ll9mdWxsTGF5b3V0O2N0PXMuX2hhcygic2NhdHRlcmdsIiksdXQ9cy5faGFzKCJzcGxvbSIpLGZ0PXMuX2hhcygic3ZnIil9eXQoKTt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybiJwb2ludGVyIjtpZigibnNldyI9PT10KXJldHVybiByPyIiOiJwYW4iPT09ZT8ibW92ZSI6ImNyb3NzaGFpciI7cmV0dXJuIHQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSJ9KGF0K2l0LHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsZ3QpLGJ0PXooZSxtK3YrImRyYWciLHh0LHIscyxjLGYpO2lmKG90JiYhZ3QpcmV0dXJuIGJ0Lm9ubW91c2Vkb3duPW51bGwsYnQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsYnQ7dmFyIF90LHd0LFR0LGt0LEF0LE10LFN0LEV0LEx0LEN0LFB0PXtlbGVtZW50OmJ0LGdkOnQscGxvdGluZm86ZX07ZnVuY3Rpb24gSXQoKXtQdC5wbG90aW5mby5zZWxlY3Rpb249ITEsTSh0KX1mdW5jdGlvbiBPdCh0LHIpe3ZhciBpPVB0LmdkO2lmKGkuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApaS5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKGkpO2Vsc2V7dmFyIG89aS5fZnVsbExheW91dC5jbGlja21vZGU7aWYoSChpKSwyIT09dHx8dnR8fHF0KCksZ3Qpby5pbmRleE9mKCJzZWxlY3QiKT4tMSYmUyhyLGksSixLLGUuaWQsUHQpLG8uaW5kZXhPZigiZXZlbnQiKT4tMSYmcC5jbGljayhpLHIsZS5pZCk7ZWxzZSBpZigxPT09dCYmdnQpe3ZhciBzPW0/TzpJLGM9InMiPT09bXx8InciPT09dj8wOjEsZj1zLl9uYW1lKyIucmFuZ2VbIitjKyJdIixoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LnJhbmdlW2VdLGk9TWF0aC5hYnMobi10LnJhbmdlWzEtZV0pO3JldHVybiJkYXRlIj09PXQudHlwZT9uOiJsb2ciPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhpKS9NYXRoLkxOMTApKSszLGEoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQsYSgiLiIrU3RyaW5nKHIpKyJnIikobikpfShzLGMpLGQ9ImxlZnQiLGc9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjttPyhnPSJuIj09PW0/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKGQ9InJpZ2h0IikpOiJlIj09PXYmJihkPSJyaWdodCIpLGkuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KGJ0KS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDppLGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOmkuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhoKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOmQsdmVydGljYWxBbGlnbjpnfSkub24oImVkaXQiLChmdW5jdGlvbih0KXt2YXIgZT1zLmQycih0KTt2b2lkIDAhPT1lJiZsLmNhbGwoIl9ndWlSZWxheW91dCIsaSxmLGUpfSkpfX19ZnVuY3Rpb24genQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4odHQscHQqZStfdCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihldCxkdCpyK3d0KSksYT1NYXRoLmFicyhuLV90KSxvPU1hdGguYWJzKGktd3QpO2Z1bmN0aW9uIHMoKXtTdD0iIixUdC5yPVR0LmwsVHQudD1UdC5iLEx0LmF0dHIoImQiLCJNMCwwWiIpfWlmKFR0Lmw9TWF0aC5taW4oX3QsbiksVHQucj1NYXRoLm1heChfdCxuKSxUdC50PU1hdGgubWluKHd0LGkpLFR0LmI9TWF0aC5tYXgod3QsaSkscnQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5QfHxvPlA/KFN0PSJ4eSIsYS90dD5vL2V0PyhvPWEqZXQvdHQsd3Q+aT9UdC50PXd0LW86VHQuYj13dCtvKTooYT1vKnR0L2V0LF90Pm4/VHQubD1fdC1hOlR0LnI9X3QrYSksTHQuYXR0cigiZCIsRyhUdCkpKTpzKCk7ZWxzZSBpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPlB8fG8+UCl7U3Q9Inh5Ijt2YXIgbD1NYXRoLm1pbihUdC5sL3R0LChldC1UdC5iKS9ldCksYz1NYXRoLm1heChUdC5yL3R0LChldC1UdC50KS9ldCk7VHQubD1sKnR0LFR0LnI9Yyp0dCxUdC5iPSgxLWwpKmV0LFR0LnQ9KDEtYykqZXQsTHQuYXR0cigiZCIsRyhUdCkpfWVsc2UgcygpO2Vsc2UhYXR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxDKSxQKT9hPEN8fCFpdD9zKCk6KFR0LnQ9MCxUdC5iPWV0LFN0PSJ4IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtUC0uNSkrImgtM3YiKygyKlArMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1QLS41KSsiaDN2IisoMipQKzEpKyJoLTNaIn0oVHQsd3QpKSk6IWl0fHxhPE1hdGgubWluKC42Km8sUCk/KFR0Lmw9MCxUdC5yPXR0LFN0PSJ5IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisoZS1QLS41KSsiLCIrKHQudC0uNSkrInYtM2giKygyKlArMSkrInYzWk0iKyhlLVAtLjUpKyIsIisodC5iKy41KSsidjNoIisoMipQKzEpKyJ2LTNaIn0oVHQsX3QpKSk6KFN0PSJ4eSIsTHQuYXR0cigiZCIsRyhUdCkpKTtUdC53PVR0LnItVHQubCxUdC5oPVR0LmItVHQudCxTdCYmKEN0PSEwKSx0Ll9kcmFnZ2VkPUN0LFUoRXQsTHQsVHQsQXQsTXQsa3QpLER0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KSxNdD0hMH1mdW5jdGlvbiBEdCgpe2h0PXt9LCJ4eSIhPT1TdCYmIngiIT09U3R8fChSKEosVHQubC90dCxUdC5yL3R0LGh0LHJ0LnhheGVzKSxWdCgieCIsaHQpKSwieHkiIT09U3QmJiJ5IiE9PVN0fHwoUihLLChldC1UdC5iKS9ldCwoZXQtVHQudCkvZXQsaHQscnQueWF4ZXMpLFZ0KCJ5IixodCkpfWZ1bmN0aW9uIFJ0KCl7RHQoKSxIKHQpLEd0KCkscSh0KX1QdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVB0LmRyYWdtb2RlLHM9dC5fZnVsbExheW91dC5kcmFnbW9kZTtzIT09YSYmKFB0LmRyYWdtb2RlPXMpLHl0KCkscHQ9dC5fZnVsbExheW91dC5faW52U2NhbGVYLGR0PXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxvdHx8KGd0P2Uuc2hpZnRLZXk/InBhbiI9PT1zP3M9Inpvb20iOnkocyl8fChzPSJwYW4iKTplLmN0cmxLZXkmJihzPSJwYW4iKTpzPSJwYW4iKSx4KHMpP1B0Lm1pbkRyYWc9MTpQdC5taW5EcmFnPXZvaWQgMCx5KHMpPyhQdC54YXhlcz1KLFB0LnlheGVzPUssQShlLHIsbixQdCxzKSk6KFB0LmNsaWNrRm49T3QseShhKSYmSXQoKSxvdHx8KCJ6b29tIj09PXM/KFB0Lm1vdmVGbj16dCxQdC5kb25lRm49UnQsUHQubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT1idC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtfdD1yLWEubGVmdCx3dD1uLWEudG9wLHQuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBzPWkuYXBwbHkzRFRyYW5zZm9ybSh0Ll9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKF90LHd0KTtfdD1zWzBdLHd0PXNbMV0sVHQ9e2w6X3QscjpfdCx3OjAsdDp3dCxiOnd0LGg6MH0sa3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6byh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksTXQ9ITEsU3Q9Inh5IixDdD0hMSxFdD1OKG10LGt0LFEsJCxBdD0iTTAsMEgiK3R0KyJWIitldCsiSDBWMCIpLEx0PWoobXQsUSwkKX0oMCxyLG4pKToicGFuIj09PXMmJihQdC5tb3ZlRm49VXQsUHQuZG9uZUZuPUd0KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2lmKGUmJmUuZWxlbWVudD09PWJ0KXt2YXIgcj10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO3kocil8fCh5dCgpLFl0KFswLDAsdHQsZXRdKSxQdC5tb3ZlRm4oZS5keCxlLmR5KSl9fX0sZy5pbml0KFB0KTt2YXIgRnQ9WzAsMCx0dCxldF0sQnQ9bnVsbCxOdD1MLlJFRFJBV0RFTEFZLGp0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBVdChlLHIpe2lmKGUqPXB0LHIqPWR0LCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLCJldyI9PT1pdHx8Im5zIj09PWF0KXt2YXIgbj1pdD8tZTowLGk9YXQ/LXI6MDtpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7aWYoaXQmJmF0KXt2YXIgYT0oZS90dC1yL2V0KS8yO249LShlPWEqdHQpLGk9LShyPS1hKmV0KX1hdD9uPS1pKnR0L2V0Omk9LW4qZXQvdHR9cmV0dXJuIGl0JiYoRihKLGUpLFZ0KCJ4IikpLGF0JiYoRihLLHIpLFZ0KCJ5IikpLFl0KFtuLGksdHQsZXRdKSxIdCgpLHZvaWQgdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KX12YXIgbyxzLGw9InciPT09aXQ9PSgibiI9PT1hdCk/MTotMTtpZihpdCYmYXQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQpKXt2YXIgYz0oZS90dCtsKnIvZXQpLzI7ZT1jKnR0LHI9bCpjKmV0fWlmKCJ3Ij09PWl0P2U9cChKLDAsZSk6ImUiPT09aXQ/ZT1wKEosMSwtZSk6aXR8fChlPTApLCJuIj09PWF0P3I9cChLLDEscik6InMiPT09YXQ/cj1wKEssMCwtcik6YXR8fChyPTApLG89InciPT09aXQ/ZTowLHM9Im4iPT09YXQ/cjowLHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYhbnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZpdCYmYXQmJmw+MCl7dmFyIHU7aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFpdCYmMT09PWF0Lmxlbmd0aCl7Zm9yKHU9MDt1PEoubGVuZ3RoO3UrKylKW3VdLnJhbmdlPUpbdV0uX3Iuc2xpY2UoKSxFKEpbdV0sMS1yL2V0KTtvPShlPXIqdHQvZXQpLzJ9aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFhdCYmMT09PWl0Lmxlbmd0aCl7Zm9yKHU9MDt1PEsubGVuZ3RoO3UrKylLW3VdLnJhbmdlPUtbdV0uX3Iuc2xpY2UoKSxFKEtbdV0sMS1lL3R0KTtzPShyPWUqZXQvdHQpLzJ9fW50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZhdHx8VnQoIngiKSxudC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmaXR8fFZ0KCJ5Iik7dmFyIGY9dHQtZSxoPWV0LXI7IW50LmlzU3VicGxvdENvbnN0cmFpbmVkfHxpdCYmYXR8fChpdD8ocz1vPzA6ZSpldC90dCxoPWYqZXQvdHQpOihvPXM/MDpyKnR0L2V0LGY9aCp0dC9ldCkpLFl0KFtvLHMsZixoXSksSHQoKSx0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpfWZ1bmN0aW9uIHAodCxlLHIpe2Zvcih2YXIgbixpLGE9MS1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpZighcy5maXhlZHJhbmdlKXtuPXMsaT1zLl9ybFthXSsocy5fcmxbZV0tcy5fcmxbYV0pL0Ioci9zLl9sZW5ndGgpO3ZhciBsPXMubDJyKGkpOyExIT09bCYmdm9pZCAwIT09bCYmKHMucmFuZ2VbZV09bCl9fXJldHVybiBuLl9sZW5ndGgqKG4uX3JsW2VdLWkpLyhuLl9ybFtlXS1uLl9ybFthXSl9fWZ1bmN0aW9uIFZ0KHQsZSl7Zm9yKHZhciByPW50LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OksseTpKfVt0XTpudFt0KyJheGVzIl0sbj1udC5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpKLHk6S31bdF06W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89YS5faWQscz1udC54TGlua3Nbb118fG50LnlMaW5rc1tvXSxsPW5bMF18fFZbc118fFpbc107bCYmKGU/KGVbYS5fbmFtZSsiLnJhbmdlWzBdIl09ZVtsLl9uYW1lKyIucmFuZ2VbMF0iXSxlW2EuX25hbWUrIi5yYW5nZVsxXSJdPWVbbC5fbmFtZSsiLnJhbmdlWzFdIl0pOmEucmFuZ2U9bC5yYW5nZS5zbGljZSgpKX19ZnVuY3Rpb24gSHQoKXt2YXIgZSxyPVtdO2Z1bmN0aW9uIG4odCl7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmZpeGVkcmFuZ2V8fHIucHVzaCh0W2VdLl9pZCl9Zm9yKHN0JiYobihKKSxuKHJ0LnhheGVzKSxuKG50LnhheGVzKSksbHQmJihuKEspLG4ocnQueWF4ZXMpLG4obnQueWF4ZXMpKSxodD17fSxlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV0sYT1rKHQsaSk7ZC5kcmF3T25lKHQsYSx7c2tpcFRpdGxlOiEwfSksaHRbYS5fbmFtZSsiLnJhbmdlWzBdIl09YS5yYW5nZVswXSxodFthLl9uYW1lKyIucmFuZ2VbMV0iXT1hLnJhbmdlWzFdfWQucmVkcmF3Q29tcG9uZW50cyh0LHIpfWZ1bmN0aW9uIHF0KCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtpdCYmKHI9ci5jb25jYXQoSikpLGF0JiYocj1yLmNvbmNhdChLKSksbnQueGF4ZXMmJihyPXIuY29uY2F0KG50LnhheGVzKSksbnQueWF4ZXMmJihyPXIuY29uY2F0KG50LnlheGVzKSk7dmFyIG4saSxhLG89e307aWYoInJlc2V0K2F1dG9zaXplIj09PWUpZm9yKGU9ImF1dG9zaXplIixpPTA7aTxyLmxlbmd0aDtpKyspaWYoKG49cltpXSkuX3JhbmdlSW5pdGlhbCYmKG4ucmFuZ2VbMF0hPT1uLl9yYW5nZUluaXRpYWxbMF18fG4ucmFuZ2VbMV0hPT1uLl9yYW5nZUluaXRpYWxbMV0pfHwhbi5fcmFuZ2VJbml0aWFsJiYhbi5hdXRvcmFuZ2Upe2U9InJlc2V0IjticmVha31pZigiYXV0b3NpemUiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChvW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZWxzZSBpZigicmVzZXQiPT09ZSlmb3IoKGl0fHxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHJ0LnhheGVzKSksYXQmJiFydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQocnQueWF4ZXMpKSxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKGl0P2F0fHwocj1yLmNvbmNhdChLKSk6cj1yLmNvbmNhdChKKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLG9bbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxvW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0pOm9bbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbyl9fWZ1bmN0aW9uIEd0KCl7WXQoWzAsMCx0dCxldF0pLGkuc3luY09yQXN5bmMoW1QucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaHQpfV0sdCl9ZnVuY3Rpb24gWXQoZSl7dmFyIHIsbixhLG8scz10Ll9mdWxsTGF5b3V0LGM9cy5fcGxvdHMsdT1zLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYodXQmJmwuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLGN0KWZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPWkuc2ltcGxlTWFwKGEucmFuZ2UsYS5yMmwpLHA9aS5zaW1wbGVNYXAoby5yYW5nZSxvLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigodXR8fGN0KSYmKF8odCksdyh0KSksZnQpe3ZhciBkPWVbMl0vSS5fbGVuZ3RoLGc9ZVszXS9PLl9sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7YT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXM7dmFyIHkseCxiLFQsaz0oc3R8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWEuZml4ZWRyYW5nZSYmVlthLl9pZF0sQT0obHR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIW8uZml4ZWRyYW5nZSYmWltvLl9pZF07aWYoaz8oeT1kLGI9dnx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZVswXTpadChhLHkpKTpudC54YUhhc2hbYS5faWRdPyh5PWQsYj1lWzBdKmEuX2xlbmd0aC9JLl9sZW5ndGgpOm50LnlhSGFzaFthLl9pZF0/KHk9ZyxiPSJucyI9PT1hdD8tZVsxXSphLl9sZW5ndGgvTy5fbGVuZ3RoOlp0KGEseSx7bjoidG9wIixzOiJib3R0b20ifVthdF0pKTpiPVh0KGEseT1XdChhLGQsZykpLEE/KHg9ZyxUPW18fG50LmlzU3VicGxvdENvbnN0cmFpbmVkP2VbMV06WnQobyx4KSk6bnQueWFIYXNoW28uX2lkXT8oeD1nLFQ9ZVsxXSpvLl9sZW5ndGgvTy5fbGVuZ3RoKTpudC54YUhhc2hbby5faWRdPyh4PWQsVD0iZXciPT09aXQ/LWVbMF0qby5fbGVuZ3RoL0kuX2xlbmd0aDpadChvLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1baXRdKSk6VD1YdChvLHg9V3QobyxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgTT1hLl9vZmZzZXQtYi95LFM9by5fb2Zmc2V0LVQveDtuLmNsaXBSZWN0LmNhbGwoaC5zZXRUcmFuc2xhdGUsYixUKS5jYWxsKGguc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbChoLnNldFRyYW5zbGF0ZSxNLFMpLmNhbGwoaC5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KGguc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksaC5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksaC5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBXdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOnN0JiZydC54YUhhc2hbdC5faWRdP2U6bHQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZD9ydC54YUhhc2g6cnQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLEUodCxlKSxadCh0LGUpKTowfWZ1bmN0aW9uIFp0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmJbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gbS5sZW5ndGgqdi5sZW5ndGghPTEmJlcoYnQsKGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHx0Ll9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihJdCgpLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIGUuc3RvcFByb3BhZ2F0aW9uKCk7eXQoKSxjbGVhclRpbWVvdXQoQnQpO3ZhciByPS1lLmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9ZS53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4sYT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLG89anQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9KGUuY2xpZW50WC1vLmxlZnQpL28ud2lkdGgsbD0oby5ib3R0b20tZS5jbGllbnRZKS9vLmhlaWdodDtpZihzdCl7Zm9yKHZ8fChzPS41KSxuPTA7bjxKLmxlbmd0aDtuKyspYyhKW25dLHMsYSk7VnQoIngiKSxGdFsyXSo9YSxGdFswXSs9RnRbMl0qcyooMS9hLTEpfWlmKGx0KXtmb3IobXx8KGw9LjUpLG49MDtuPEsubGVuZ3RoO24rKyljKEtbbl0sbCxhKTtWdCgieSIpLEZ0WzNdKj1hLEZ0WzFdKz1GdFszXSooMS1sKSooMS9hLTEpfVl0KEZ0KSxIdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCksQnQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0JiYoRnQ9WzAsMCx0dCxldF0sR3QoKSl9KSxOdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgaS5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1pLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoYSsoZS1hKSpyKX0pKX19fSkpLGJ0fSxtYWtlRHJhZ2dlcjpPLG1ha2VSZWN0RHJhZ2dlcjp6LG1ha2Vab29tYm94Ok4sbWFrZUNvcm5lcnM6aix1cGRhdGVab29tYm94OlUseHlDb3JuZXJzOkcsdHJhbnNpdGlvblpvb21ib3g6VixyZW1vdmVab29tYm94Okgsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6cSxhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpXfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4MCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjozNzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NDgyLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MTksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6NTM5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9wbG90cyI6NjE0LCIuL2F4ZXMiOjU0OSwiLi9heGlzX2lkcyI6NTUzLCIuL2NvbnN0YW50cyI6NTU2LCIuL3NjYWxlX3pvb20iOjU2OSwiLi9zZWxlY3QiOjU3MCwiQHBsb3RseS9kMyI6NTgsImhhcy1wYXNzaXZlLWV2ZW50cyI6MjI0LHRpbnljb2xvcjI6MzA3fV0sNTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoKGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmdC5fZnVsbExheW91dC5fcGxvdHNbcl0mJmkuaG92ZXIodCxlLHIpfSxpLmhvdmVyKHQsZSxyKSx0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9dSx0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9cn0sdS5vbm1vdXNlb3V0PWZ1bmN0aW9uKGUpe3QuX2RyYWdnaW5nfHwodC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGwsYS51bmhvdmVyKHQsZSkpfSx0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMmJihzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJlIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsInMiLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsImUiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBmPW8uX21haW5MaW5lUG9zaXRpb247InRvcCI9PT1vLnNpZGUmJihmLT1sKSxzKHQsbixvLl9vZmZzZXQrLjEqby5fbGVuZ3RoLGYsLjgqby5fbGVuZ3RoLGwsIiIsImV3Iikscyh0LG4sby5fb2Zmc2V0LGYsLjEqby5fbGVuZ3RoLGwsIiIsInciKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGYsLjEqby5fbGVuZ3RoLGwsIiIsImUiKX1pZihyPT09Yy5fbWFpblN1YnBsb3Qpe3ZhciBoPWMuX21haW5MaW5lUG9zaXRpb247InJpZ2h0IiE9PWMuc2lkZSYmKGgtPWwpLHModCxuLGgsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbixoLGMuX29mZnNldCsuOSpjLl9sZW5ndGgsbCwuMSpjLl9sZW5ndGgsInMiLCIiKSxzKHQsbixoLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCwibiIsIiIpfX19KSk7dmFyIG89ZS5faG92ZXJsYXllci5ub2RlKCk7by5vbm1vdXNlbW92ZT1mdW5jdGlvbihyKXtyLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5ob3Zlcih0LHIsZS5faG92ZXJzdWJwbG90KX0sby5vbmNsaWNrPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmNsaWNrKHQsZSl9LG8ub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLm9ubW91c2Vkb3duKGUpfSxyLnVwZGF0ZUZ4KHQpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9InBhbiI9PT1lLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIjtvKGUuX2RyYWdnZXJzLHIpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODAsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vbGliL3NldGN1cnNvciI6NTE5LCIuL2NvbnN0YW50cyI6NTU2LCIuL2RyYWdib3giOjU1OCwiQHBsb3RseS9kMyI6NTh9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbGVhck91dGxpbmVDb250cm9sbGVyczpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoIi5vdXRsaW5lLWNvbnRyb2xsZXJzIikucmVtb3ZlKCl9LGNsZWFyU2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCksdC5fZnVsbExheW91dC5fZHJhd2luZz0hMX19fSx7fV0sNTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZTtmdW5jdGlvbiBpKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LnAyZChlKTtjYXNlImRhdGUiOnJldHVybiB0LnAycihlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5wMnIoZSl9fWUuZXhwb3J0cz17cDJyOmkscjJwOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LmQycChlKTtjYXNlImRhdGUiOnJldHVybiB0LnIycChlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5yMnAoZSl9fSxheFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBpKHQscltlXSl9fSxnZXRUcmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuIG4odC54YXhpcy5fb2Zmc2V0LHQueWF4aXMuX29mZnNldCl9fX0seyIuLi8uLi9saWIiOjQ5OH1dLDU2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPWVbdF07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IodmFyIHM9bi5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbixsPXMuaWRSZWdleCxjPXIuX3N1YnBsb3RzLHU9Yy54YXhpcyxmPWMueWF4aXMsaD1jLmNhcnRlc2lhbixwPXIuX2hhcygiY2FydGVzaWFuIil8fHIuX2hhcygiZ2wyZCIpLGQ9MDtkPG8ubGVuZ3RoO2QrKyl7dmFyIG09b1tkXTtpZihpLmlzUGxhaW5PYmplY3QobSkpe3ZhciBnPWEuY2xlYW5JZChtLnhyZWYsIngiLCExKSx2PWEuY2xlYW5JZChtLnlyZWYsInkiLCExKSx5PWwueC50ZXN0KGcpLHg9bC55LnRlc3Qodik7aWYoeXx8eCl7cHx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxzKTt2YXIgYj0hMTt5JiYtMT09PXUuaW5kZXhPZihnKSYmKHUucHVzaChnKSxiPSEwKSx4JiYtMT09PWYuaW5kZXhPZih2KSYmKGYucHVzaCh2KSxiPSEwKSxiJiZ5JiZ4JiZoLnB1c2goZyt2KX19fX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2F4aXNfaWRzIjo1NTN9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxjPXQoIi4vYXhpc19pZHMiKSx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGg9YS5lbnN1cmVTaW5nbGU7ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKHQsZSxyLChmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSkpfWZ1bmN0aW9uIGQodCxlLHIsYSxvKXtmb3IodmFyIGMsZixoLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsbT1kLl9tb2R1bGVzLGc9W10sdj1bXSx5PTA7eTxtLmxlbmd0aDt5Kyspe3ZhciB4PShjPW1beV0pLm5hbWUsYj1pLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrImxheWVyIix3PWMucGxvdDtoPShmPWwocix3KSlbMF0scj1mWzFdLGgubGVuZ3RoJiZnLnB1c2goe2k6cC5pbmRleE9mKF8pLGNsYXNzTmFtZTpfLHBsb3RNZXRob2Q6dyxjZE1vZHVsZTpofSksYi56b29tU2NhbGUmJnYucHVzaCgiLiIrXyl9fWcuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pKTt2YXIgVD1lLnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEoZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkpO2lmKFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pKS5jbGFzc2VkKCJtbGF5ZXIiLCEwKS5jbGFzc2VkKCJyYW5nZXBsb3QiLGUuaXNSYW5nZVBsb3QpLFQuZXhpdCgpLnJlbW92ZSgpLFQub3JkZXIoKSxULmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGw9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKHQsZSxyLmNkTW9kdWxlLGksYSxvKSwtMT09PXUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuaW5kZXhPZigiLiIrbCkmJnMuc2V0Q2xpcFVybChpLGUubGF5ZXJDbGlwSWQsdCl9KSksZC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9aS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGg9bChyLGMpWzBdLGMucGxvdCh0LGUsaCkpLCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJihlLl9oYXNDbGlwT25BeGlzRmFsc2UmJihlLmNsaXBPbkF4aXNGYWxzZVRyYWNlcz1lLnBsb3Quc2VsZWN0QWxsKHUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpKSx2Lmxlbmd0aCkpe3ZhciBrPWUucGxvdC5zZWxlY3RBbGwodi5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIik7ZS56b29tU2NhbGVQdHM9ay5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLnpvb21TY2FsZVR4dD1rLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9ZS5wbG90Z3JvdXAsbj1lLmlkLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS54YXhpcy5sYXllcl0sYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnlheGlzLmxheWVyXSxvPXQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZihlLm1haW5wbG90KXt2YXIgcz1lLm1haW5wbG90aW5mbyxsPXMucGxvdGdyb3VwLGY9bisiLXgiLGQ9bisiLXkiO2UuZ3JpZGxheWVyPXMuZ3JpZGxheWVyLGUuemVyb2xpbmVsYXllcj1zLnplcm9saW5lbGF5ZXIsaChzLm92ZXJsaW5lc0JlbG93LCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGQpLGgocy5vdmVyYXhlc0JlbG93LCJnIixmKSxoKHMub3ZlcmF4ZXNCZWxvdywiZyIsZCksZS5wbG90PWgocy5vdmVycGxvdCwiZyIsbiksaChzLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGQpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixmKSxoKHMub3ZlcmF4ZXNBYm92ZSwiZyIsZCksZS54bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIitpKS5zZWxlY3QoIi4iK2YpLGUueWxpbmVzPWwuc2VsZWN0KCIub3ZlcmxpbmVzLSIrYSkuc2VsZWN0KCIuIitkKSxlLnhheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55YXhpc2xheWVyPWwuc2VsZWN0KCIub3ZlcmF4ZXMtIithKS5zZWxlY3QoIi4iK2QpfWVsc2UgaWYobyllLnhsaW5lcz1oKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1oKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLnhheGlzbGF5ZXI9aChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGUueWF4aXNsYXllcj1oKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIik7ZWxzZXt2YXIgbT1oKHIsImciLCJsYXllci1zdWJwbG90Iik7ZS5zaGFwZWxheWVyPWgobSwiZyIsInNoYXBlbGF5ZXIiKSxlLmltYWdlbGF5ZXI9aChtLCJnIiwiaW1hZ2VsYXllciIpLGUuZ3JpZGxheWVyPWgociwiZyIsImdyaWRsYXllciIpLGUuemVyb2xpbmVsYXllcj1oKHIsImciLCJ6ZXJvbGluZWxheWVyIiksaChyLCJwYXRoIiwieGxpbmVzLWJlbG93IiksaChyLCJwYXRoIiwieWxpbmVzLWJlbG93IiksZS5vdmVybGluZXNCZWxvdz1oKHIsImciLCJvdmVybGluZXMtYmVsb3ciKSxoKHIsImciLCJ4YXhpc2xheWVyLWJlbG93IiksaChyLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLGUub3ZlcmF4ZXNCZWxvdz1oKHIsImciLCJvdmVyYXhlcy1iZWxvdyIpLGUucGxvdD1oKHIsImciLCJwbG90IiksZS5vdmVycGxvdD1oKHIsImciLCJvdmVycGxvdCIpLGUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUub3ZlcmxpbmVzQWJvdmU9aChyLCJnIiwib3ZlcmxpbmVzLWFib3ZlIiksaChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSxlLm92ZXJheGVzQWJvdmU9aChyLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSxlLnhsaW5lcz1yLnNlbGVjdCgiLnhsaW5lcy0iK2kpLGUueWxpbmVzPXIuc2VsZWN0KCIueWxpbmVzLSIrYSksZS54YXhpc2xheWVyPXIuc2VsZWN0KCIueGF4aXNsYXllci0iK2kpLGUueWF4aXNsYXllcj1yLnNlbGVjdCgiLnlheGlzbGF5ZXItIithKX1vfHwocChlLmdyaWRsYXllciwiZyIsZS54YXhpcy5faWQpLHAoZS5ncmlkbGF5ZXIsImciLGUueWF4aXMuX2lkKSxlLmdyaWRsYXllci5zZWxlY3RBbGwoImciKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLnNvcnQoYy5pZFNvcnQpKSxlLnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLGUueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gZyh0LGUpe2lmKHQpe3ZhciByPXt9O2Zvcih2YXIgaSBpbiB0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksdihpLGUpLHJbaV09ITB9KSksZS5fcGxvdHMpZm9yKHZhciBhPWUuX3Bsb3RzW2ldLm92ZXJsYXlzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiB2KHQsZSl7ZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiNjbGlwIitlLl91aWQrdCsicGxvdCIpLnJlbW92ZSgpfXIubmFtZT0iY2FydGVzaWFuIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLmZpbmFsaXplU3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbz1lLl9zdWJwbG90cyxzPW8ueGF4aXMsbD1vLnlheGlzLGY9by5jYXJ0ZXNpYW4saD1mLmNvbmNhdChvLmdsMmR8fFtdKSxwPXt9LGQ9e307Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7dmFyIG09aFtyXS5zcGxpdCgieSIpO3BbbVswXV09MSxkWyJ5IittWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoaT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoaSl8fChpPSJ5IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSksZFtpXXx8KGRbaV09MSxhLnB1c2hVbmlxdWUobCxpKSkpO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspZFtpPWxbcl1dfHwobj0odFtjLmlkMm5hbWUoaSldfHx7fSkuYW5jaG9yLHUuaWRSZWdleC54LnRlc3Qobil8fChuPSJ4IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSkscFtuXXx8KHBbbl09MSxhLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFoLmxlbmd0aCl7Zm9yKHZhciBnIGluIG49IiIsaT0iIix0KXtpZih1LmF0dHJSZWdleC50ZXN0KGcpKSJ4Ij09PWcuY2hhckF0KDApPyghbnx8K2cuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPWcpOighaXx8K2cuc3Vic3RyKDUpPCtpLnN1YnN0cig1KSkmJihpPWcpfW49bj9jLm5hbWUyaWQobik6IngiLGk9aT9jLm5hbWUyaWQoaSk6InkiLHMucHVzaChuKSxsLnB1c2goaSksZi5wdXNoKG4raSl9fSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0LG89YS5fc3VicGxvdHMuY2FydGVzaWFuLHM9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxpPTA7aTxzLmxlbmd0aDtpKyspZS5wdXNoKGkpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbCxjPW9baV0sdT1hLl9wbG90c1tjXSxmPVtdLGg9MDtoPHMubGVuZ3RoO2grKyl7dmFyIHA9c1toXSxtPXBbMF0udHJhY2U7bS54YXhpcyttLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihtLmluZGV4KXx8bS5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihtLmZpbGwpJiYtMT09PWYuaW5kZXhPZihsKSYmZi5wdXNoKGwpLGYucHVzaChwKSksbD1wKX1kKHQsdSxmLHIsbil9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGg9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoZiYmIWgpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgbT1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYobSYmIXkpZyhuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcyxkZWxldGUgbi5fYXhpc01hdGNoR3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGE9MDthPHUuY2FydGVzaWFuLmxlbmd0aDthKyspe3ZhciB4PXUuY2FydGVzaWFuW2FdO2lmKCFsW3hdKXt2YXIgYj0iLiIreCsiLC4iK3grIi14LC4iK3grIi15IjtuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoYikucmVtb3ZlKCksdih4LG4pfX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuX3N1YnBsb3RzLmNhcnRlc2lhbixjPWwubGVuZ3RoLHU9W10sZj1bXTtmb3IoZT0wO2U8YztlKyspe249bFtlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIGg9YS5fbWFpbkF4aXMscD1vLl9tYWluQXhpcyxkPWguX2lkK3AuX2lkLG09cy5fcGxvdHNbZF07aS5vdmVybGF5cz1bXSxkIT09biYmbT8oaS5tYWlucGxvdD1kLGkubWFpbnBsb3RpbmZvPW0sZi5wdXNoKG4pKTooaS5tYWlucGxvdD12b2lkIDAsaS5tYWlucGxvdGluZm89dm9pZCAwLHUucHVzaChuKSl9Zm9yKGU9MDtlPGYubGVuZ3RoO2UrKyluPWZbZV0sKGk9cy5fcGxvdHNbbl0pLm1haW5wbG90aW5mby5vdmVybGF5cy5wdXNoKGkpO3ZhciBnPXUuY29uY2F0KGYpLHY9bmV3IEFycmF5KGMpO2ZvcihlPTA7ZTxjO2UrKyl7bj1nW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgeT1bbixhLmxheWVyLG8ubGF5ZXIsYS5vdmVybGF5aW5nfHwiIixvLm92ZXJsYXlpbmd8fCIiXTtmb3Iocj0wO3I8aS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChpLm92ZXJsYXlzW3JdLmlkKTt2W2VdPXl9cmV0dXJuIHZ9KHQpLGk9ZS5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLmRhdGEocixTdHJpbmcpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pKSxpLm9yZGVyKCksaS5leGl0KCkuY2FsbChnLGUpLGkuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9clswXSxhPWUuX3Bsb3RzW2ldO2EucGxvdGdyb3VwPW4uc2VsZWN0KHRoaXMpLG0odCxhKSxhLmRyYWdsYXllcj1oKGUuX2RyYWdnZXJzLCJnIixpKX0pKX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe20odCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMuc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuc3R5bGUuaGVpZ2h0fSl9KSl9LHIudXBkYXRlRng9dCgiLi9ncmFwaF9pbnRlcmFjdCIpLnVwZGF0ZUZ4fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vZ2V0X2RhdGEiOjU4OCwiLi4vcGxvdHMiOjYxNCwiLi9hdHRyaWJ1dGVzIjo1NDcsIi4vYXhpc19pZHMiOjU1MywiLi9jb25zdGFudHMiOjU1NiwiLi9ncmFwaF9pbnRlcmFjdCI6NTU5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjQsIi4vbGF5b3V0X2RlZmF1bHRzIjo1NjUsIi4vdHJhbnNpdGlvbl9heGVzIjo1NzYsIkBwbG90bHkvZDMiOjU4fV0sNTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25XaXRoRGF0ZXMsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FREFZLHU9dCgiLi9jb25zdGFudHMiKSxmPXUuSE9VUl9QQVRURVJOLGg9dS5XRUVLREFZX1BBVFRFUk47ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LGZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sbWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2VicmVha3M6cygicmFuZ2VicmVhayIse2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxib3VuZHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltoLGYsIiJdLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOiJjYWxjIixpdGVtczp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9fSxkdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6Y30sZWRpdFR5cGU6ImNhbGMifSksdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja2xhYmVsc3RlcDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3M6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCIiXSxlZGl0VHlwZToidGlja3MifSx0aWNrc29uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYWJlbHMiLCJib3VuZGFyaWVzIl0sZGZsdDoibGFiZWxzIixlZGl0VHlwZToidGlja3MifSx0aWNrbGFiZWxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnN0YW50IiwicGVyaW9kIl0sZGZsdDoiaW5zdGFudCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGxlZnQiLCJpbnNpZGUgbGVmdCIsIm91dHNpZGUgcmlnaHQiLCJpbnNpZGUgcmlnaHQiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXSxkZmx0OiJvdXRzaWRlIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tsYWJlbG92ZXJmbG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGxvdyIsImhpZGUgcGFzdCBkaXYiLCJoaWRlIHBhc3QgZG9tYWluIl0sZWRpdFR5cGU6ImNhbGMifSxtaXJyb3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInRpY2tzIiwhMSwiYWxsIiwiYWxsdGlja3MiXSxkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1LGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibW9kZWJhciJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om51bGwsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OiJkYXNoIixlZGl0VHlwZToibm9uZSJ9KSxzcGlrZW1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInRvYXhpcyIsImFjcm9zcyIsIm1hcmtlciJdLGRmbHQ6InRvYXhpcyIsZWRpdFR5cGU6Im5vbmUifSxzcGlrZXNuYXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRhdGEiLCJjdXJzb3IiLCJob3ZlcmVkIGRhdGEiXSxkZmx0OiJob3ZlcmVkIGRhdGEiLGVkaXRUeXBlOiJub25lIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pbmV4cG9uZW50Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxtaW46MCxlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIixkZXNjcmlwdGlvbjpsKCJ0aWNrIGxhYmVsIil9LHRpY2tmb3JtYXRzdG9wczpzKCJ0aWNrZm9ybWF0c3RvcCIse2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sZHRpY2tyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyJ9XSxlZGl0VHlwZToidGlja3MifSx2YWx1ZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9KSxob3ZlcmZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIixkZXNjcmlwdGlvbjpsKCJob3ZlciB0ZXh0Iil9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2RpdmlkZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGRpdmlkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsdS5pZFJlZ2V4LngudG9TdHJpbmcoKSx1LmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sb3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsdS5pZFJlZ2V4LngudG9TdHJpbmcoKSx1LmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhYm92ZSB0cmFjZXMiLCJiZWxvdyB0cmFjZXMiXSxkZmx0OiJhYm92ZSB0cmFjZXMiLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJwbG90In0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiLCJ0b3RhbCBhc2NlbmRpbmciLCJ0b3RhbCBkZXNjZW5kaW5nIiwibWluIGFzY2VuZGluZyIsIm1pbiBkZXNjZW5kaW5nIiwibWF4IGFzY2VuZGluZyIsIm1heCBkZXNjZW5kaW5nIiwic3VtIGFzY2VuZGluZyIsInN1bSBkZXNjZW5kaW5nIiwibWVhbiBhc2NlbmRpbmciLCJtZWFuIGRlc2NlbmRpbmciLCJtZWRpYW4gYXNjZW5kaW5nIiwibWVkaWFuIGRlc2NlbmRpbmciXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e2F1dG90aWNrOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjozODIsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuL2NvbnN0YW50cyI6NTU2fV0sNTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIsbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybW9kZV9kZWZhdWx0cyIpLHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9dCgiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXQoIi4vdHlwZV9kZWZhdWx0cyIpLGY9dCgiLi9heGlzX2RlZmF1bHRzIiksaD10KCIuL2NvbnN0cmFpbnRzIikscD10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZD10KCIuL2F4aXNfaWRzIiksbT1kLmlkMm5hbWUsZz1kLm5hbWUyaWQsdj10KCIuL2NvbnN0YW50cyIpLkFYX0lEX1BBVFRFUk4seT10KCIuLi8uLi9yZWdpc3RyeSIpLHg9eS50cmFjZUlzLGI9eS5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24gXyh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgeSx3LFQ9ZS5hdXRvdHlwZW51bWJlcnMsaz17fSxBPXt9LE09e30sUz17fSxFPXt9LEw9e30sQz17fSxQPXt9LEk9e30sTz17fTtmb3IoeT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgej1yW3ldO2lmKHgoeiwiY2FydGVzaWFuIil8fHgoeiwiZ2wyZCIpKXt2YXIgRCxSO2lmKHoueGF4aXMpRD1tKHoueGF4aXMpLF8oayxELHopO2Vsc2UgaWYoei54YXhlcylmb3Iodz0wO3c8ei54YXhlcy5sZW5ndGg7dysrKV8oayxtKHoueGF4ZXNbd10pLHopO2lmKHoueWF4aXMpUj1tKHoueWF4aXMpLF8oayxSLHopO2Vsc2UgaWYoei55YXhlcylmb3Iodz0wO3c8ei55YXhlcy5sZW5ndGg7dysrKV8oayxtKHoueWF4ZXNbd10pLHopO2lmKCJmdW5uZWwiPT09ei50eXBlPyJoIj09PXoub3JpZW50YXRpb24/KEQmJihBW0RdPSEwKSxSJiYoQ1tSXT0hMCkpOlImJihNW1JdPSEwKToiaW1hZ2UiPT09ei50eXBlPyhSJiYoUFtSXT0hMCksRCYmKFBbRF09ITApKTooUiYmKEVbUl09ITAsTFtSXT0hMCkseCh6LCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09ei50eXBlfHx6Ll9jaGVhdGVyKXx8RCYmKFNbRF09ITApKSwiY2FycGV0Ij09PXoudHlwZSYmei5fY2hlYXRlciYmRCYmKEFbRF09ITApLHgoeiwiMmRNYXAiKSYmKElbRF09ITAsSVtSXT0hMCkseCh6LCJvcmllbnRlZCIpKU9bImgiPT09ei5vcmllbnRhdGlvbj9SOkRdPSEwfX12YXIgRj1lLl9zdWJwbG90cyxCPUYueGF4aXMsTj1GLnlheGlzLGo9bi5zaW1wbGVNYXAoQixtKSxVPW4uc2ltcGxlTWFwKE4sbSksVj1qLmNvbmNhdChVKSxIPWkuYmFja2dyb3VuZDtCLmxlbmd0aCYmTi5sZW5ndGgmJihIPW4uY29lcmNlKHQsZSxsLCJwbG90X2JnY29sb3IiKSk7dmFyIHEsRyxZLFcsWCxaPWkuY29tYmluZShILGUucGFwZXJfYmdjb2xvcik7ZnVuY3Rpb24gSigpe3ZhciB0PWtbcV18fFtdO1guX3RyYWNlSW5kaWNlcz10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksWC5fYW5uSW5kaWNlcz1bXSxYLl9zaGFwZUluZGljZXM9W10sWC5faW1nSW5kaWNlcz1bXSxYLl9zdWJwbG90c1dpdGg9W10sWC5fY291bnRlckF4ZXM9W10sWC5fbmFtZT1YLl9hdHRyPXEsWC5faWQ9R31mdW5jdGlvbiBLKHQsZSl7cmV0dXJuIG4uY29lcmNlKFcsWCxjLHQsZSl9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBuLmNvZXJjZTIoVyxYLGMsdCxlKX1mdW5jdGlvbiAkKHQpe3JldHVybiJ4Ij09PXQ/TjpCfWZ1bmN0aW9uIHR0KGUscil7Zm9yKHZhciBuPSJ4Ij09PWU/ajpVLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChnKG8pKX1yZXR1cm4gaX12YXIgZXQ9e3g6JCgieCIpLHk6JCgieSIpfSxydD1ldC54LmNvbmNhdChldC55KSxudD17fSxpdD1bXTtmdW5jdGlvbiBhdCgpe3ZhciB0PVcubWF0Y2hlczt2LnRlc3QodCkmJi0xPT09cnQuaW5kZXhPZih0KSYmKG50W3RdPVcudHlwZSxpdD1PYmplY3Qua2V5cyhudCkpfXZhciBvdD1vKHQsZSksc3Q9YShvdCk7Zm9yKHk9MDt5PFYubGVuZ3RoO3krKyl7cT1WW3ldLEc9ZyhxKSxZPXEuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W3FdKXx8KHRbcV09e30pLFc9dFtxXSxYPXMubmV3Q29udGFpbmVyKGUscSxZKyJheGlzIiksSigpO3ZhciBsdD0ieCI9PT1ZJiYhU1txXSYmQVtxXXx8InkiPT09WSYmIUVbcV0mJk1bcV0sY3Q9InkiPT09WSYmKCFMW3FdJiZDW3FdfHxQW3FdKSx1dD17bGV0dGVyOlksZm9udDplLmZvbnQsb3V0ZXJUaWNrczpJW3FdLHNob3dHcmlkOiFPW3FdLGRhdGE6a1txXXx8W10sYmdDb2xvcjpaLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCx2aXNpYmxlRGZsdDpsdCxyZXZlcnNlRGZsdDpjdCxhdXRvdHlwZW51bWJlcnNEZmx0OlQsc3Bsb21TdGFzaDooKGUuX3NwbG9tQXhlc3x8e30pW1ldfHx7fSlbR119O0soInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksdShXLFgsSyx1dCksZihXLFgsSyx1dCxlKTt2YXIgZnQ9c3QmJlk9PT1vdC5jaGFyQXQoMCksaHQ9USgic3Bpa2Vjb2xvciIsc3Q/WC5jb2xvcjp2b2lkIDApLHB0PVEoInNwaWtldGhpY2tuZXNzIixzdD8xLjU6dm9pZCAwKSxkdD1RKCJzcGlrZWRhc2giLHN0PyJkb3QiOnZvaWQgMCksbXQ9USgic3Bpa2Vtb2RlIixzdD8iYWNyb3NzIjp2b2lkIDApLGd0PVEoInNwaWtlc25hcCIpO0soInNob3dzcGlrZXMiLCEhKGZ0fHxodHx8cHR8fGR0fHxtdHx8Z3QpKXx8KGRlbGV0ZSBYLnNwaWtlY29sb3IsZGVsZXRlIFguc3Bpa2V0aGlja25lc3MsZGVsZXRlIFguc3Bpa2VkYXNoLGRlbGV0ZSBYLnNwaWtlbW9kZSxkZWxldGUgWC5zcGlrZXNuYXApLHAoVyxYLEsse2xldHRlcjpZLGNvdW50ZXJBeGVzOmV0W1ldLG92ZXJsYXlhYmxlQXhlczp0dChZLHEpLGdyaWQ6ZS5ncmlkfSksSygidGl0bGUuc3RhbmRvZmYiKSxhdCgpLFguX2lucHV0PVd9Zm9yKHk9MDt5PGl0Lmxlbmd0aDspe0c9aXRbeSsrXSxZPShxPW0oRykpLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtxXSl8fCh0W3FdPXt9KSxXPXRbcV0sWD1zLm5ld0NvbnRhaW5lcihlLHEsWSsiYXhpcyIpLEooKTt2YXIgdnQ9e2xldHRlcjpZLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6SVtxXSxzaG93R3JpZDohT1txXSxkYXRhOltdLGJnQ29sb3I6WixjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6ITEscmV2ZXJzZURmbHQ6ITEsYXV0b3R5cGVudW1iZXJzRGZsdDpULHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtZXXx8e30pW0ddfTtLKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLFgudHlwZT1udFtHXXx8ImxpbmVhciIsZihXLFgsSyx2dCxlKSxwKFcsWCxLLHtsZXR0ZXI6WSxjb3VudGVyQXhlczpldFtZXSxvdmVybGF5YWJsZUF4ZXM6dHQoWSxxKSxncmlkOmUuZ3JpZH0pLEsoImZpeGVkcmFuZ2UiKSxhdCgpLFguX2lucHV0PVd9dmFyIHl0PWIoInJhbmdlc2xpZGVyIiwiaGFuZGxlRGVmYXVsdHMiKSx4dD1iKCJyYW5nZXNlbGVjdG9yIiwiaGFuZGxlRGVmYXVsdHMiKTtmb3IoeT0wO3k8ai5sZW5ndGg7eSsrKXE9alt5XSxXPXRbcV0sWD1lW3FdLHl0KHQsZSxxKSwiZGF0ZSI9PT1YLnR5cGUmJnh0KFcsWCxlLFUsWC5jYWxlbmRhciksSygiZml4ZWRyYW5nZSIpO2Zvcih5PTA7eTxVLmxlbmd0aDt5Kyspe3E9VVt5XSxXPXRbcV0sWD1lW3FdO3ZhciBidD1lW20oWC5hbmNob3IpXTtLKCJmaXhlZHJhbmdlIixiKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGJ0KSl9aC5oYW5kbGVEZWZhdWx0cyh0LGUse2F4SWRzOnJ0LmNvbmNhdChpdCkuc29ydChkLmlkU29ydCksYXhIYXNJbWFnZTpQfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIjo0MDAsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo2MDUsIi4vYXhpc19kZWZhdWx0cyI6NTUxLCIuL2F4aXNfaWRzIjo1NTMsIi4vY29uc3RhbnRzIjo1NTYsIi4vY29uc3RyYWludHMiOjU1NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTY0LCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo1NjcsIi4vdHlwZV9kZWZhdWx0cyI6NTc3fV0sNTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5saWdodEZyYWN0aW9uLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPShvPW98fHt9KS5kZmx0Q29sb3I7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBhLmNvZXJjZTIodCxlLG8uYXR0cmlidXRlcyxyLG4pfXZhciBjPWwoImxpbmVjb2xvciIscyksdT1sKCJsaW5ld2lkdGgiKTtyKCJzaG93bGluZSIsby5zaG93TGluZXx8ISFjfHwhIXUpfHwoZGVsZXRlIGUubGluZWNvbG9yLGRlbGV0ZSBlLmxpbmV3aWR0aCk7dmFyIGY9bCgiZ3JpZGNvbG9yIixuKHMsby5iZ0NvbG9yLG8uYmxlbmR8fGkpLnRvUmdiU3RyaW5nKCkpLGg9bCgiZ3JpZHdpZHRoIik7aWYocigic2hvd2dyaWQiLG8uc2hvd0dyaWR8fCEhZnx8ISFoKXx8KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkd2lkdGgpLCFvLm5vWmVyb0xpbmUpe3ZhciBwPWwoInplcm9saW5lY29sb3IiLHMpLGQ9bCgiemVyb2xpbmV3aWR0aCIpO3IoInplcm9saW5lIixvLnNob3dHcmlkfHwhIXB8fCEhZCl8fChkZWxldGUgZS56ZXJvbGluZWNvbG9yLGRlbGV0ZSBlLnplcm9saW5ld2lkdGgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjAsIi4uLy4uL2xpYiI6NDk4LHRpbnljb2xvcjI6MzA3fV0sNTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdT1hLmNvdW50ZXJBeGVzfHxbXSxmPWEub3ZlcmxheWFibGVBeGVzfHxbXSxoPWEubGV0dGVyLHA9YS5ncmlkO3AmJihzPXAuX2RvbWFpbnNbaF1bcC5fYXhpc01hcFtlLl9pZF1dLG89cC5fYW5jaG9yc1tlLl9pZF0scyYmKGw9cFtoKyJzaWRlIl0uc3BsaXQoIiAiKVswXSxjPXAuZG9tYWluW2hdWyJyaWdodCI9PT1sfHwidG9wIj09PWw/MTowXSkpLHM9c3x8WzAsMV0sbz1vfHwobih0LnBvc2l0aW9uKT8iZnJlZSI6dVswXXx8ImZyZWUiKSxsPWx8fCgieCI9PT1oPyJib3R0b20iOiJsZWZ0IiksYz1jfHwwLCJmcmVlIj09PWkuY29lcmNlKHQsZSx7YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIl0uY29uY2F0KHUpLGRmbHQ6b319LCJhbmNob3IiKSYmcigicG9zaXRpb24iLGMpLGkuY29lcmNlKHQsZSx7c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWg/WyJib3R0b20iLCJ0b3AiXTpbImxlZnQiLCJyaWdodCJdLGRmbHQ6bH19LCJzaWRlIik7dmFyIGQ9ITE7aWYoZi5sZW5ndGgmJihkPWkuY29lcmNlKHQsZSx7b3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0uY29uY2F0KGYpLGRmbHQ6ITF9fSwib3ZlcmxheWluZyIpKSwhZCl7dmFyIG09cigiZG9tYWluIixzKTttWzBdPm1bMV0tMS80MDk2JiYoZS5kb21haW49cyksaS5ub25lT3JBbGwodC5kb21haW4sZS5kb21haW4scyl9cmV0dXJuIHIoImxheWVyIiksZX19LHsiLi4vLi4vbGliIjo0OTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw1Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zaG93X2RmbHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthfHwoYT17fSk7dmFyIG89YS50aWNrU3VmZml4RGZsdCxzPW4odCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIscykscigidGlja3N1ZmZpeCIsbykmJnIoInNob3d0aWNrc3VmZml4IixzKX19LHsiLi9zaG93X2RmbHQiOjU3Mn1dLDU2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldLHQuc2V0U2NhbGUoKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2fV0sNTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvbHlib29sanMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKS5kYXNoU3R5bGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5tYWtlRXZlbnREYXRhLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksdT1jLmZyZWVNb2RlLGY9Yy5yZWN0TW9kZSxoPWMuZHJhd01vZGUscD1jLm9wZW5Nb2RlLGQ9Yy5zZWxlY3RNb2RlLG09dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5oYW5kbGVFbGxpcHNlLHY9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiKSx5PXQoIi4uLy4uL2xpYiIpLHg9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxiPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLF89dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCx3PXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLFQ9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGs9dCgiLi9jb25zdGFudHMiKSxBPWsuTUlOU0VMRUNULE09eC5maWx0ZXIsUz14LnRlc3RlcixFPXQoIi4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCxMPXQoIi4vaGVscGVycyIpLEM9TC5wMnIsUD1MLmF4VmFsdWUsST1MLmdldFRyYW5zZm9ybTtmdW5jdGlvbiBPKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGYsaCxkLGcsdix5PWUuX2hvdmVyZGF0YSx4PWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoImV2ZW50Iik+LTEsYj1bXTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkuaXNBcnJheSh0KSYmITAhPT10WzBdLmhvdmVyT25Cb3h9KHkpKXtGKHQsZSxhKTt2YXIgXz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9LTEsbz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxpLmZ1bGxEYXRhLl9leHBhbmRlZEluZGV4PT09ci5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleCl7aWYoITA9PT1pLmhvdmVyT25Cb3gpYnJlYWs7dm9pZCAwIT09aS5wb2ludE51bWJlcj9hPWkucG9pbnROdW1iZXI6dm9pZCAwIT09aS5iaW5OdW1iZXImJihhPWkuYmluTnVtYmVyLG89aS5wb2ludE51bWJlcnMpO2JyZWFrfXJldHVybntwb2ludE51bWJlcjphLHBvaW50TnVtYmVyczpvLHNlYXJjaEluZm86cn19KHkscz1OKGUscixuLGkpKTtpZihfLnBvaW50TnVtYmVycy5sZW5ndGg+MD9mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKHI9dFtpXSkuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMmJnIuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjAmJmEucHVzaChyKTtpZigxPT09YS5sZW5ndGgmJmFbMF09PT1lLnNlYXJjaEluZm8mJihuPWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPT09ZS5wb2ludE51bWJlcnMubGVuZ3RoKXtmb3IoaT0wO2k8ZS5wb2ludE51bWJlcnMubGVuZ3RoO2krKylpZihuLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoZS5wb2ludE51bWJlcnNbaV0pPDApcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHMsXyk6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGU9dFtuXSwocj1lLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyl7aWYoci5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MSlyZXR1cm4hMTtpZigoaSs9ci5zZWxlY3RlZHBvaW50cy5sZW5ndGgpPjEpcmV0dXJuITF9cmV0dXJuIDE9PT1pfShzKSYmKGg9aihfKSkpe2ZvcihvJiZvLnJlbW92ZSgpLHY9MDt2PHMubGVuZ3RoO3YrKykobD1zW3ZdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhsLCExKTtVKGUscyksQihhKSx4JiZlLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZXtmb3IoZD10LnNoaWZ0S2V5JiYodm9pZCAwIT09aD9oOmooXykpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oXy5wb2ludE51bWJlcixfLnNlYXJjaEluZm8sZCksdT1SKGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksdj0wO3Y8cy5sZW5ndGg7disrKWlmKGY9VihzW3ZdLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbdl0sdSksc1t2XSksYi5sZW5ndGgpZm9yKHZhciB3PTA7dzxmLmxlbmd0aDt3KyspYi5wdXNoKGZbd10pO2Vsc2UgYj1mO2lmKFUoZSxzLGc9e3BvaW50czpifSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyl7dmFyIFQ9YS5tZXJnZWRQb2x5Z29ucyxrPXAoYS5kcmFnbW9kZSk7bShIKFQsayksbyxhKX14JiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZyl9fX1mdW5jdGlvbiB6KHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIEQodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9eih0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9eih0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZih6KHRbb10pKWUucHVzaChEKHRbb10pKTtlbHNle3ZhciBzPXgudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gRih0LGUscil7ZS5fZnVsbExheW91dC5fZHJhd2luZz0hMTt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPXIuZHJhZ21vZGUsbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxzPSh0LnNoaWZ0S2V5fHx0LmFsdEtleSkmJiEoaChhKSYmcChhKSk7byYmcyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOnMmJmkuc2VsZWN0aW9ufHxCKHIpLG98fChFKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQih0KXt2YXIgZT10LmRyYWdtb2RlLHI9dC5wbG90aW5mbyxuPXQuZ2Q7aWYobi5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmbi5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKG4pLGgoZSkpe3ZhciBhPW4uX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZS0iK3IuaWQpO2lmKGEmJm4uX2Z1bGxMYXlvdXQuX2RyYXdpbmcpe3ZhciBvPXYoYSx0KTtvJiZpLmNhbGwoIl9ndWlSZWxheW91dCIsbix7c2hhcGVzOm99KSxuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX1yLnNlbGVjdGlvbj17fSxyLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxyLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIE4odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLGM9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKTtmb3Iobz0wO288dC5jYWxjZGF0YS5sZW5ndGg7bysrKWlmKCEwPT09KGE9KGk9dC5jYWxjZGF0YVtvXSlbMF0udHJhY2UpLnZpc2libGUmJmEuX21vZHVsZSYmYS5fbW9kdWxlLnNlbGVjdFBvaW50cylpZighbnx8YS5zdWJwbG90IT09biYmYS5nZW8hPT1uKWlmKCJzcGxvbSI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9aChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKCJzYW5rZXkiPT09YS50eXBlKXt2YXIgZj1oKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGgoYS5fbW9kdWxlLGksXyh0LGEueGF4aXMpLF8odCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGgoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gaih0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgZj11W25dLGg9Zi5kYXRhLHA9Zi5mdWxsRGF0YTtmLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShoLnNlbGVjdGVkcG9pbnRzLGYucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KHAuc2VsZWN0ZWRwb2ludHMsZi5wb2ludEluZGljZXMpKTooaC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmcC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIGQ9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKGQ9ITApO3ZhciBtPWEuX21vZHVsZSxnPW0uc3R5bGVPblNlbGVjdHx8bS5zdHlsZTtnJiYoZyh0LG8sb1swXS5ub2RlMyksb1swXS5ub2RlUmFuZ2VQbG90MyYmZyh0LG8sb1swXS5ub2RlUmFuZ2VQbG90MykpfWQmJih3KHQpLFQodCkpfWZ1bmN0aW9uIFYodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1sKHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBIKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7cltuXT1bXTtmb3IodmFyIGk9MDtpPHRbbl0ubGVuZ3RoO2krKyl7cltuXVtpXT1bXSxyW25dW2ldWzBdPWk/IkwiOiJNIjtmb3IodmFyIGE9MDthPHRbbl1baV0ubGVuZ3RoO2ErKylyW25dW2ldLnB1c2godFtuXVtpXVthXSl9ZXx8cltuXS5wdXNoKFsiWiIscltuXVswXVsxXSxyW25dWzBdWzJdXSl9cmV0dXJuIHJ9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIGM9dShsKSx2PWYobCkseD1wKGwpLF89aChsKSx3PWQobCksVD0iZHJhd2NpcmNsZSI9PT1sLEU9ImRyYXdsaW5lIj09PWx8fFQsTD1pLmdkLHo9TC5fZnVsbExheW91dCxEPXouX3pvb21sYXllcixqPWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxxPWkucGxvdGluZm8sRz1JKHEpLFk9ZS1qLmxlZnQsVz1yLWoudG9wO3ouX2NhbGNJbnZlcnNlVHJhbnNmb3JtKEwpO3ZhciBYPXkuYXBwbHkzRFRyYW5zZm9ybSh6Ll9pbnZUcmFuc2Zvcm0pKFksVyk7WT1YWzBdLFc9WFsxXTt2YXIgWixKLEssUSwkLHR0LGV0LHJ0PXouX2ludlNjYWxlWCxudD16Ll9pbnZTY2FsZVksaXQ9WSxhdD1XLG90PSJNIitZKyIsIitXLHN0PWkueGF4ZXNbMF0uX2xlbmd0aCxsdD1pLnlheGVzWzBdLl9sZW5ndGgsY3Q9aS54YXhlcy5jb25jYXQoaS55YXhlcyksdXQ9dC5hbHRLZXkmJiEoaChsKSYmeCk7Rih0LEwsaSksYyYmKFo9TShbW1ksV11dLGsuQkVORFBYKSk7dmFyIGZ0PUQuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lLSIrcS5pZCkuZGF0YShfP1swXTpbMSwyXSksaHQ9ei5uZXdzaGFwZTtmdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdC1vdXRsaW5lIHNlbGVjdC1vdXRsaW5lLSIrdCsiIHNlbGVjdC1vdXRsaW5lLSIrcS5pZH0pKS5zdHlsZShfP3tvcGFjaXR5Omh0Lm9wYWNpdHkvMixmaWxsOng/dm9pZCAwOmh0LmZpbGxjb2xvcixzdHJva2U6aHQubGluZS5jb2xvciwic3Ryb2tlLWRhc2hhcnJheSI6YShodC5saW5lLmRhc2gsaHQubGluZS53aWR0aCksInN0cm9rZS13aWR0aCI6aHQubGluZS53aWR0aCsicHgifTp7fSkuYXR0cigiZmlsbC1ydWxlIixodC5maWxscnVsZSkuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEhXykuYXR0cigidHJhbnNmb3JtIixHKS5hdHRyKCJkIixvdCsiWiIpO3ZhciBwdCxkdD1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6by5iYWNrZ3JvdW5kLHN0cm9rZTpvLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjF9KS5hdHRyKCJ0cmFuc2Zvcm0iLEcpLmF0dHIoImQiLCJNMCwwWiIpLG10PXouX3VpZCtrLlNFTEVDVElELGd0PVtdLHZ0PU4oTCxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90KTtmdW5jdGlvbiB5dCh0LGUpe3JldHVybiB0LWV9cHQ9cS5maWxsUmFuZ2VJdGVtcz9xLmZpbGxSYW5nZUl0ZW1zOnY/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2ZvcigkPTA7JDxjdC5sZW5ndGg7JCsrKXt2YXIgbj1jdFskXSxpPW4uX2lkLmNoYXJBdCgwKTtyW24uX2lkXT1bQyhuLGVbaSsibWluIl0pLEMobixlW2krIm1heCJdKV0uc29ydCh5dCl9fTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5sYXNzb1BvaW50cz17fTtmb3IoJD0wOyQ8Y3QubGVuZ3RoOyQrKyl7dmFyIGk9Y3RbJF07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoUChpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe2l0PU1hdGgubWF4KDAsTWF0aC5taW4oc3QscnQqdCtZKSksYXQ9TWF0aC5tYXgoMCxNYXRoLm1pbihsdCxudCplK1cpKTt2YXIgcj1NYXRoLmFicyhpdC1ZKSxhPU1hdGguYWJzKGF0LVcpO2lmKHYpe3ZhciBvLHMsbDtpZih3KXt2YXIgdT16LnNlbGVjdGRpcmVjdGlvbjtzd2l0Y2gobz0iYW55Ij09PXU/YTxNYXRoLm1pbiguNipyLEEpPyJoIjpyPE1hdGgubWluKC42KmEsQSk/InYiOiJkIjp1KXtjYXNlImgiOnM9VD9sdC8yOjAsbD1sdDticmVhaztjYXNlInYiOnM9VD9zdC8yOjAsbD1zdH19aWYoXylzd2l0Y2goei5uZXdzaGFwZS5kcmF3ZGlyZWN0aW9uKXtjYXNlInZlcnRpY2FsIjpvPSJoIixzPVQ/bHQvMjowLGw9bHQ7YnJlYWs7Y2FzZSJob3Jpem9udGFsIjpvPSJ2IixzPVQ/c3QvMjowLGw9c3Q7YnJlYWs7Y2FzZSJvcnRobyI6cjxhPyhvPSJoIixzPVcsbD1hdCk6KG89InYiLHM9WSxsPWl0KTticmVhaztkZWZhdWx0Om89ImQifSJoIj09PW8/KChRPUU/ZyhULFtpdCxzXSxbaXQsbF0pOltbWSxzXSxbWSxsXSxbaXQsbF0sW2l0LHNdXSkueG1pbj1FP2l0Ok1hdGgubWluKFksaXQpLFEueG1heD1FP2l0Ok1hdGgubWF4KFksaXQpLFEueW1pbj1NYXRoLm1pbihzLGwpLFEueW1heD1NYXRoLm1heChzLGwpLGR0LmF0dHIoImQiLCJNIitRLnhtaW4rIiwiKyhXLUEpKyJoLTR2IisyKkErImg0Wk0iKyhRLnhtYXgtMSkrIiwiKyhXLUEpKyJoNHYiKzIqQSsiaC00WiIpKToidiI9PT1vPygoUT1FP2coVCxbcyxhdF0sW2wsYXRdKTpbW3MsV10sW3MsYXRdLFtsLGF0XSxbbCxXXV0pLnhtaW49TWF0aC5taW4ocyxsKSxRLnhtYXg9TWF0aC5tYXgocyxsKSxRLnltaW49RT9hdDpNYXRoLm1pbihXLGF0KSxRLnltYXg9RT9hdDpNYXRoLm1heChXLGF0KSxkdC5hdHRyKCJkIiwiTSIrKFktQSkrIiwiK1EueW1pbisidi00aCIrMipBKyJ2NFpNIisoWS1BKSsiLCIrKFEueW1heC0xKSsidjRoIisyKkErInYtNFoiKSk6ImQiPT09byYmKChRPUU/ZyhULFtZLFddLFtpdCxhdF0pOltbWSxXXSxbWSxhdF0sW2l0LGF0XSxbaXQsV11dKS54bWluPU1hdGgubWluKFksaXQpLFEueG1heD1NYXRoLm1heChZLGl0KSxRLnltaW49TWF0aC5taW4oVyxhdCksUS55bWF4PU1hdGgubWF4KFcsYXQpLGR0LmF0dHIoImQiLCJNMCwwWiIpKX1lbHNlIGMmJihaLmFkZFB0KFtpdCxhdF0pLFE9Wi5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhLPWZ1bmN0aW9uKHQsZSxyKXtpZihyKXJldHVybiBuLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9ucztyZXR1cm4gbi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLFEsdXQpLFEuc3VidHJhY3Q9dXQsSj1SKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW1FdKSkpOihLPVtRXSxKPVMoUSkpLG0oSChLLHgpLGZ0LGkpLHcmJmIudGhyb3R0bGUobXQsay5TRUxFQ1RERUxBWSwoZnVuY3Rpb24oKXt2YXIgdDtndD1bXTt2YXIgZSxyPVtdO2ZvcigkPTA7JDx2dC5sZW5ndGg7JCsrKWlmKGU9KHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCxKKSxyLnB1c2goZSksdD1WKGUsdHQpLGd0Lmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylndC5wdXNoKHRbbl0pO2Vsc2UgZ3Q9dDtVKEwsdnQsZXQ9e3BvaW50czpndH0pLHB0KGV0LFEsWiksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixldCl9KSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe2lmKGR0LnJlbW92ZSgpLEwuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApTC5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKEwpO2Vsc2UgaWYoIV8pe3ZhciByPXouY2xpY2ttb2RlO2IuZG9uZShtdCkudGhlbigoZnVuY3Rpb24oKXtpZihiLmNsZWFyKG10KSwyPT09dCl7Zm9yKGZ0LnJlbW92ZSgpLCQ9MDskPHZ0Lmxlbmd0aDskKyspKHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCwhMSk7VShMLHZ0KSxCKGkpLEwuZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNlIHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJk8oZSxMLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxmdCksImV2ZW50Ij09PXImJkwuZW1pdCgicGxvdGx5X3NlbGVjdGVkIix2b2lkIDApO3MuY2xpY2soTCxlKX0pKS5jYXRjaCh5LmVycm9yKX19LGkuZG9uZUZuPWZ1bmN0aW9uKCl7ZHQucmVtb3ZlKCksYi5kb25lKG10KS50aGVuKChmdW5jdGlvbigpe2IuY2xlYXIobXQpLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixldCksUSYmaS5zZWxlY3Rpb25EZWZzJiYoUS5zdWJ0cmFjdD11dCxpLnNlbGVjdGlvbkRlZnMucHVzaChRKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxLKSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKGd0KX0pKS5jYXRjaCh5LmVycm9yKSxfJiZCKGkpfX0sY2xlYXJTZWxlY3Q6RSxjbGVhclNlbGVjdGlvbnNDYWNoZTpCLHNlbGVjdE9uQ2xpY2s6T319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjM3OSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6NDQ5LCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjQ1MCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiOjQ1MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NDgyLCIuLi8uLi9saWIvcG9seWdvbiI6NTEwLCIuLi8uLi9saWIvdGhyb3R0bGUiOjUyNSwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjUzOSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9heGlzX2lkcyI6NTUzLCIuL2NvbnN0YW50cyI6NTU2LCIuL2hhbmRsZV9vdXRsaW5lIjo1NjAsIi4vaGVscGVycyI6NTYxLHBvbHlib29sanM6MjQ5fV0sNTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LGE9dCgiLi4vLi4vbGliIiksbz1hLm51bWJlckZvcm1hdCxzPXQoImZhc3QtaXNudW1lcmljIiksbD1hLmNsZWFuTnVtYmVyLGM9YS5tczJEYXRlVGltZSx1PWEuZGF0ZVRpbWUybXMsZj1hLmVuc3VyZU51bWJlcixoPWEuaXNBcnJheU9yVHlwZWRBcnJheSxwPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxkPXAuRlBfU0FGRSxtPXAuQkFETlVNLGc9cC5MT0dfQ0xJUCx2PXAuT05FV0VFSyx5PXAuT05FREFZLHg9cC5PTkVIT1VSLGI9cC5PTkVNSU4sXz1wLk9ORVNFQyx3PXQoIi4vYXhpc19pZHMiKSxUPXQoIi4vY29uc3RhbnRzIiksaz1ULkhPVVJfUEFUVEVSTixBPVQuV0VFS0RBWV9QQVRURVJOO2Z1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIG51bGwhPXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10Ll9pZHx8IngiLHA9ci5jaGFyQXQoMCk7ZnVuY3Rpb24gRShlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmcqTWF0aC5hYnMobi1pKSl9cmV0dXJuIG19ZnVuY3Rpb24gTChlLHIsbixpKXtpZigoaXx8e30pLm1zVVRDJiZzKGUpKXJldHVybitlO3ZhciBvPXUoZSxufHx0LmNhbGVuZGFyKTtpZihvPT09bSl7aWYoIXMoZSkpcmV0dXJuIG07ZT0rZTt2YXIgbD1NYXRoLmZsb29yKDEwKmEubW9kKGUrLjA1LDEpKSxjPU1hdGgucm91bmQoZS1sLzEwKTtvPXUobmV3IERhdGUoYykpK2wvMTB9cmV0dXJuIG99ZnVuY3Rpb24gQyhlLHIsbil7cmV0dXJuIGMoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gSShlKXtpZihTKGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goIm51bWJlciI9PXR5cGVvZiBlP1N0cmluZyhlKTplKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gbX1mdW5jdGlvbiBPKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24geih0KXt2YXIgZT1PKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6cyh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gcyh0KT8rdDpPKHQpfWZ1bmN0aW9uIFIodCxlLHIpe3JldHVybiBuLnJvdW5kKHIrZSp0LDIpfWZ1bmN0aW9uIEYodCxlLHIpe3JldHVybih0LXIpL2V9dmFyIEI9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSk/UihlLHQuX20sdC5fYik6bX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gRihlLHQuX20sdC5fYil9O2lmKHQucmFuZ2VicmVha3Mpe3ZhciBqPSJ5Ij09PXA7Qj1mdW5jdGlvbihlKXtpZighcyhlKSlyZXR1cm4gbTt2YXIgcj10Ll9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIFIoZSx0Ll9tLHQuX2IpO3ZhciBuPWo7dC5yYW5nZVswXT50LnJhbmdlWzFdJiYobj0hbik7Zm9yKHZhciBpPW4/LTE6MSxhPWkqZSxvPTAsbD0wO2w8cjtsKyspe3ZhciBjPWkqdC5fcmFuZ2VicmVha3NbbF0ubWluLHU9aSp0Ll9yYW5nZWJyZWFrc1tsXS5tYXg7aWYoYTxjKWJyZWFrO2lmKCEoYT51KSl7bz1hPChjK3UpLzI/bDpsKzE7YnJlYWt9bz1sKzF9dmFyIGY9dC5fQltvXXx8MDtyZXR1cm4gaXNGaW5pdGUoZik/UihlLHQuX20yLGYpOjB9LE49ZnVuY3Rpb24oZSl7dmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBGKGUsdC5fbSx0Ll9iKTtmb3IodmFyIG49MCxpPTA7aTxyJiYhKGU8dC5fcmFuZ2VicmVha3NbaV0ucG1pbik7aSsrKWU+dC5fcmFuZ2VicmVha3NbaV0ucG1heCYmKG49aSsxKTtyZXR1cm4gRihlLHQuX20yLHQuX0Jbbl0pfX10LmMybD0ibG9nIj09PXQudHlwZT9FOmYsdC5sMmM9ImxvZyI9PT10LnR5cGU/TTpmLHQubDJwPUIsdC5wMmw9Tix0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBCKEUodCxlKSl9OkIsdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9Ok4sLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPWwsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Zix0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobChlKSl9LHQucDJkPXQucDJyPU4sdC5jbGVhblBvcz1mKToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRShsKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gTShsKHQpKX0sdC5kMmM9dC5yMmw9bCx0LmMyZD10Lmwycj1mLHQuYzJyPUUsdC5sMmQ9TSx0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChsKGUpKX0sdC5wMnI9Tix0LmNsZWFuUG9zPWYpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1MLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPUMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChMKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQyhOKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUsbSx0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPUksdC5yMmQ9dC5jMmQ9dC5sMmQ9UCx0LmQycj10LmQybF9ub2FkZD16LHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPUQoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj1mLHQucjJsPUQsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0KSl9LHQucjJwPXQuZDJwLHQucDJyPU4sdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9KToibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD1QLHQuZDJyPXQuZDJsX25vYWRkPXosdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9eihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1PLHQubDJyPXQuYzJyPWYsdC5yMmw9eix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gUChOKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Tix0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLG8scz10Ll90cmFjZUluZGljZXMsbD10Ll9tYXRjaEdyb3VwO2lmKGwmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IodmFyIGMgaW4gbClpZihjIT09cil7dmFyIHU9ZVt3LmlkMm5hbWUoYyldO3M9cy5jb25jYXQodS5fdHJhY2VJbmRpY2VzKX12YXIgZj1bWzAse31dLFswLHt9XV0sZD1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKHAgaW4gbSl7dmFyIGc9bVtwXSx2PW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoZyk7aWYoaChnWzBdKSYmaChnWzFdKSlmb3Iobz0wO288djtvKyspe3ZhciB5PWdbMF1bb10seD1nWzFdW29dO1MoeSkmJlMoeCkmJihkLnB1c2goW3kseF0pLHkgaW4gZlswXVsxXXx8KGZbMF1bMV1beV09ZlswXVswXSsrKSx4IGluIGZbMV1bMV18fChmWzFdWzFdW3hdPWZbMV1bMF0rKykpfX19Zm9yKGQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj1mWzBdWzFdLG49clt0WzBdXS1yW2VbMF1dO2lmKG4pcmV0dXJuIG47dmFyIGk9ZlsxXVsxXTtyZXR1cm4gaVt0WzFdXS1pW2VbMV1dfSkpLGk9MDtpPGQubGVuZ3RoO2krKylJKGRbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPSJyYW5nZSIpO3ZhciBuLGksbz1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYoaT0oaT0iZGF0ZSI9PT10LnR5cGU/YS5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09cD9ULkRGTFRSQU5HRVk6InJlYWxheGlzIj09PXQuX25hbWU/WzAsMV06ci5kZmx0UmFuZ2V8fFQuREZMVFJBTkdFWCkuc2xpY2UoKSwidG96ZXJvIiE9PXQucmFuZ2Vtb2RlJiYibm9ubmVnYXRpdmUiIT09dC5yYW5nZW1vZGV8fChpWzBdPTApLG8mJjI9PT1vLmxlbmd0aClmb3IoImRhdGUiIT09dC50eXBlfHx0LmF1dG9yYW5nZXx8KG9bMF09YS5jbGVhbkRhdGUob1swXSxtLHQuY2FsZW5kYXIpLG9bMV09YS5jbGVhbkRhdGUob1sxXSxtLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFhLmlzRGF0ZVRpbWUob1tuXSx0LmNhbGVuZGFyKSl7dFtlXT1pO2JyZWFrfWlmKHQucjJsKG9bMF0pPT09dC5yMmwob1sxXSkpe3ZhciBsPWEuY29uc3RyYWluKHQucjJsKG9bMF0pLGEuTUlOX01TKzFlMyxhLk1BWF9NUy0xZTMpO29bMF09dC5sMnIobC0xZTMpLG9bMV09dC5sMnIobCsxZTMpO2JyZWFrfX1lbHNle2lmKCFzKG9bbl0pKXtpZighcyhvWzEtbl0pKXt0W2VdPWk7YnJlYWt9b1tuXT1vWzEtbl0qKG4/MTA6LjEpfWlmKG9bbl08LWQ/b1tuXT0tZDpvW25dPmQmJihvW25dPWQpLG9bMF09PT1vWzFdKXt2YXIgYz1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqb1swXSkpO29bMF0tPWMsb1sxXSs9Y319ZWxzZSBhLm5lc3RlZFByb3BlcnR5KHQsZSkuc2V0KGkpfSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5vdmVybGF5aW5nKXt2YXIgaT13LmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sdC5vdmVybGF5aW5nKTt0LmRvbWFpbj1pLmRvbWFpbn12YXIgYT1yJiZ0Ll9yPyJfciI6InJhbmdlIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzLGwsYz10LnIybCh0W2FdWzBdLG8pLHU9dC5yMmwodFthXVsxXSxvKSxmPSJ5Ij09PXA7aWYoKGY/KHQuX29mZnNldD1uLnQrKDEtdC5kb21haW5bMV0pKm4uaCx0Ll9sZW5ndGg9bi5oKih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGMtdSksdC5fYj0tdC5fbSp1KToodC5fb2Zmc2V0PW4ubCt0LmRvbWFpblswXSpuLncsdC5fbGVuZ3RoPW4udyoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyh1LWMpLHQuX2I9LXQuX20qYyksdC5fcmFuZ2VicmVha3M9W10sdC5fbEJyZWFrcz0wLHQuX20yPTAsdC5fQj1bXSx0LnJhbmdlYnJlYWtzKSYmKHQuX3JhbmdlYnJlYWtzPXQubG9jYXRlQnJlYWtzKE1hdGgubWluKGMsdSksTWF0aC5tYXgoYyx1KSksdC5fcmFuZ2VicmVha3MubGVuZ3RoKSl7Zm9yKHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9sQnJlYWtzKz1NYXRoLmFicyhsLm1heC1sLm1pbik7dmFyIGg9ZjtjPnUmJihoPSFoKSxoJiZ0Ll9yYW5nZWJyZWFrcy5yZXZlcnNlKCk7dmFyIGQ9aD8tMToxO2Zvcih0Ll9tMj1kKnQuX2xlbmd0aC8oTWF0aC5hYnModS1jKS10Ll9sQnJlYWtzKSx0Ll9CLnB1c2goLXQuX20yKihmP3U6YykpLHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9CLnB1c2godC5fQlt0Ll9CLmxlbmd0aC0xXS1kKnQuX20yKihsLm1heC1sLm1pbikpO2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKShsPXQuX3JhbmdlYnJlYWtzW3NdKS5wbWluPUIobC5taW4pLGwucG1heD1CKGwubWF4KX1pZighaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIil9LHQubWFza0JyZWFrcz1mdW5jdGlvbihlKXt2YXIgcixuLGksbyxzLGM9dC5yYW5nZWJyZWFrc3x8W107Yy5fY2FjaGVkUGF0dGVybnN8fChjLl9jYWNoZWRQYXR0ZXJucz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS5ib3VuZHM/YS5zaW1wbGVNYXAoZS5ib3VuZHMsZS5wYXR0ZXJuP2w6dC5kMmMpOm51bGx9KSkpLGMuX2NhY2hlZFZhbHVlc3x8KGMuX2NhY2hlZFZhbHVlcz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS52YWx1ZXM/YS5zaW1wbGVNYXAoZS52YWx1ZXMsdC5kMmMpLnNvcnQoYS5zb3J0ZXJBc2MpOm51bGx9KSkpO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2lmKGYuZW5hYmxlZClpZihmLmJvdW5kcyl7dmFyIGg9Zi5wYXR0ZXJuO3N3aXRjaChuPShyPWMuX2NhY2hlZFBhdHRlcm5zW3VdKVswXSxpPXJbMV0saCl7Y2FzZSBBOm89KHM9bmV3IERhdGUoZSkpLmdldFVUQ0RheSgpLG4+aSYmKGkrPTcsbzxuJiYobys9NykpO2JyZWFrO2Nhc2UgazpvPShzPW5ldyBEYXRlKGUpKS5nZXRVVENIb3VycygpKyhzLmdldFVUQ01pbnV0ZXMoKS82MCtzLmdldFVUQ1NlY29uZHMoKS8zNjAwK3MuZ2V0VVRDTWlsbGlzZWNvbmRzKCkvMzZlNSksbj5pJiYoaSs9MjQsbzxuJiYobys9MjQpKTticmVhaztjYXNlIiI6bz1lfWlmKG8+PW4mJm88aSlyZXR1cm4gbX1lbHNlIGZvcih2YXIgcD1jLl9jYWNoZWRWYWx1ZXNbdV0sZD0wO2Q8cC5sZW5ndGg7ZCsrKWlmKGk9KG49cFtkXSkrZi5kdmFsdWUsZT49biYmZTxpKXJldHVybiBtfXJldHVybiBlfSx0LmxvY2F0ZUJyZWFrcz1mdW5jdGlvbihlLHIpe3ZhciBuLGksbyxzLGM9W107aWYoIXQucmFuZ2VicmVha3MpcmV0dXJuIGM7dmFyIHU9dC5yYW5nZWJyZWFrcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGF0dGVybj09PUEmJmUucGF0dGVybj09PWs/LTE6ZS5wYXR0ZXJuPT09QSYmdC5wYXR0ZXJuPT09az8xOjB9KSksZj1mdW5jdGlvbih0LG4pe2lmKCh0PWEuY29uc3RyYWluKHQsZSxyKSkhPT0obj1hLmNvbnN0cmFpbihuLGUscikpKXtmb3IodmFyIGk9ITAsbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgcz1jW29dO3Q8cy5tYXgmJm4+PXMubWluJiYodDxzLm1pbiYmKHMubWluPXQpLG4+cy5tYXgmJihzLm1heD1uKSxpPSExKX1pJiZjLnB1c2goe21pbjp0LG1heDpufSl9fTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dO2lmKGguZW5hYmxlZClpZihoLmJvdW5kcyl7dmFyIHA9ZSxkPXI7aC5wYXR0ZXJuJiYocD1NYXRoLmZsb29yKHApKSxvPShpPWEuc2ltcGxlTWFwKGguYm91bmRzLGgucGF0dGVybj9sOnQucjJsKSlbMF0scz1pWzFdO3ZhciBtLGcsdz1uZXcgRGF0ZShwKTtzd2l0Y2goaC5wYXR0ZXJuKXtjYXNlIEE6Zz12LG09KHMtbysoczxvPzc6MCkpKnkscCs9byp5LSh3LmdldFVUQ0RheSgpKnkrdy5nZXRVVENIb3VycygpKngrdy5nZXRVVENNaW51dGVzKCkqYit3LmdldFVUQ1NlY29uZHMoKSpfK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2Nhc2UgazpnPXksbT0ocy1vKyhzPG8/MjQ6MCkpKngscCs9byp4LSh3LmdldFVUQ0hvdXJzKCkqeCt3LmdldFVUQ01pbnV0ZXMoKSpiK3cuZ2V0VVRDU2Vjb25kcygpKl8rdy5nZXRVVENNaWxsaXNlY29uZHMoKSk7YnJlYWs7ZGVmYXVsdDpwPU1hdGgubWluKGlbMF0saVsxXSksbT1nPShkPU1hdGgubWF4KGlbMF0saVsxXSkpLXB9Zm9yKHZhciBUPXA7VDxkO1QrPWcpZihULFQrbSl9ZWxzZSBmb3IodmFyIE09YS5zaW1wbGVNYXAoaC52YWx1ZXMsdC5kMmMpLFM9MDtTPE0ubGVuZ3RoO1MrKylmKG89TVtTXSxzPW8raC5kdmFsdWUpfXJldHVybiBjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWluLWUubWlufSkpLGN9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscixuKXt2YXIgaSxvLHMsbCxjPXQudHlwZSx1PSJkYXRlIj09PWMmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKGk9ZVtyXSxsPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoaSksYS5pc1R5cGVkQXJyYXkoaSkmJigibGluZWFyIj09PWN8fCJsb2ciPT09Yykpe2lmKGw9PT1pLmxlbmd0aClyZXR1cm4gaTtpZihpLnN1YmFycmF5KXJldHVybiBpLnN1YmFycmF5KDAsbCl9aWYoIm11bHRpY2F0ZWdvcnkiPT09YylyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPU8oW2ksYV0pfXJldHVybiByfShpLGwpO2ZvcihvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPXQuZDJjKGlbc10sMCx1LG4pfWVsc2V7dmFyIGY9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsdSk6MCxoPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3IoaT1lW3t4OiJ5Iix5OiJ4In1bcl1dLGw9ZS5fbGVuZ3RofHxpLmxlbmd0aCxvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPWYrcypofWlmKHQucmFuZ2VicmVha3MpZm9yKHM9MDtzPGw7cysrKW9bc109dC5tYXNrQnJlYWtzKG9bc10pO3JldHVybiBvfSx0LmlzVmFsaWRSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZzKHQucjJsKGVbMF0pKSYmcyh0LnIybChlWzFdKSl9LHQuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jMmwoZVtwXSxudWxsLHIpLGk9dC5yMmwodC5yYW5nZVswXSksYT10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4gaTxhP2k8PW4mJm48PWE6YTw9biYmbjw9aX0sdC5fZW1wdHlDYXRlZ29yaWVzPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciByPXQuX21hdGNoR3JvdXA7aWYocil7dmFyIG49bnVsbCxpPW51bGw7Zm9yKHZhciBhIGluIHIpe3ZhciBvPWVbdy5pZDJuYW1lKGEpXTtpZihvLl9jYXRlZ29yaWVzKXtuPW8uX2NhdGVnb3JpZXMsaT1vLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1uJiZpPyh0Ll9jYXRlZ29yaWVzPW4sdC5fY2F0ZWdvcmllc01hcD1pKTp0Ll9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIHQuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgcz0wO3M8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO3MrKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW3NdKX0sdC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKHQuX2VtcHR5Q2F0ZWdvcmllcygpLHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaT0wO2k8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2krKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW2ldKTtuPW4uY29uY2F0KHQuX3RyYWNlSW5kaWNlcyk7dmFyIGE9dC5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gYSlpZihyIT09byl7dmFyIHM9ZVt3LmlkMm5hbWUobyldO3MuX2NhdGVnb3JpZXM9dC5fY2F0ZWdvcmllcyxzLl9jYXRlZ29yaWVzTWFwPXQuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChzLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgVT1lLl9kM2xvY2FsZTsiZGF0ZSI9PT10LnR5cGUmJih0Ll9kYXRlRm9ybWF0PVU/VS50aW1lRm9ybWF0OmksdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1VP1UubnVtYmVyRm9ybWF0Om8sZGVsZXRlIHQuX21pbkR0aWNrLGRlbGV0ZSB0Ll9mb3JjZVRpY2swfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuL2F4aXNfaWRzIjo1NTMsIi4vY29uc3RhbnRzIjo1NTYsIkBwbG90bHkvZDMiOjU4LCJkMy10aW1lLWZvcm1hdCI6MTE1LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkpO2lmKGUuZXZlcnkoKGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pKXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfX0se31dLDU3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5jb250cmFzdCxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4vc2hvd19kZmx0Iikscz10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBsKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS50aWNrZm9ybWF0c3RvcHMscixpKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMsdSl7dXx8KHU9e30pO3ZhciBmPW8odCk7aWYocigic2hvd3RpY2tsYWJlbHMiKSl7dmFyIGg9dS5mb250fHx7fSxwPWUuY29sb3IsZD0tMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIik/aSh1LmJnQ29sb3IpOnAmJnAhPT1hLmNvbG9yLmRmbHQ/cDpoLmNvbG9yO2lmKG4uY29lcmNlRm9udChyLCJ0aWNrZm9udCIse2ZhbWlseTpoLmZhbWlseSxzaXplOmguc2l6ZSxjb2xvcjpkfSksdS5ub1RpY2tsYWJlbHN0ZXB8fCJtdWx0aWNhdGVnb3J5Ij09PWN8fCJsb2ciPT09Y3x8cigidGlja2xhYmVsc3RlcCIpLHUubm9Bbmd8fHIoInRpY2thbmdsZSIpLCJjYXRlZ29yeSIhPT1jKXt2YXIgbT1yKCJ0aWNrZm9ybWF0Iik7cyh0LGUse25hbWU6InRpY2tmb3JtYXRzdG9wcyIsaW5jbHVzaW9uQXR0cjoiZW5hYmxlZCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGh8fGRlbGV0ZSBlLnRpY2tmb3JtYXRzdG9wcyx1Lm5vRXhwfHxtfHwiZGF0ZSI9PT1jfHwocigic2hvd2V4cG9uZW50IixmKSxyKCJleHBvbmVudGZvcm1hdCIpLHIoIm1pbmV4cG9uZW50Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9saWIiOjQ5OCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi9zaG93X2RmbHQiOjU3Mn1dLDU3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjR9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyKXt2YXIgbj10W3JdO3JldHVybiB2b2lkIDAhPT1uP246KGUuX3RlbXBsYXRlfHx7fSlbcl19dmFyIHM9bygidGljazAiKSxsPW8oImR0aWNrIiksYz1vKCJ0aWNrdmFscyIpLHU9cigidGlja21vZGUiLGkoYyk/ImFycmF5IjpsPyJsaW5lYXIiOiJhdXRvIik7aWYoImF1dG8iPT09dSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09dSl7dmFyIGY9ZS5kdGljaz1uLmR0aWNrKGwsYSk7ZS50aWNrMD1uLnRpY2swKHMsYSxlLmNhbGVuZGFyLGYpfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4vY2xlYW5fdGlja3MiOjU1NX1dLDU3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIHUsZixoLHA7bCYmKHU9bCgpKTt2YXIgZD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShwKSxwPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89YS5wbG90aW5mby54YXhpcyxzPWEucGxvdGluZm8ueWF4aXM7YS54cjAmJihyW28uX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYocltzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKW0oZVt0XS5wbG90aW5mbyl9KSl9KCl9KSksZj1EYXRlLm5vdygpLHA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC1mKS9yLmR1cmF0aW9uKSxvPWQoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLWY+ci5kdXJhdGlvbj8oIWZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEucGxvdGluZm8ueGF4aXMscz1hLnBsb3RpbmZvLnlheGlzO2EueHIxJiYocltvLl9uYW1lKyIucmFuZ2UiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbcy5fbmFtZSsiLnJhbmdlIl09YS55cjEuc2xpY2UoKSl9dSYmdSgpLGkuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyltKGVbdF0ucGxvdGluZm8pfSkpfSgpLHA9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKG8uc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKG8uc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiBnKGUscil7dmFyIG49ZS5wbG90aW5mbyxpPW4ueGF4aXMsbD1uLnlheGlzLGM9aS5fbGVuZ3RoLHU9bC5fbGVuZ3RoLGY9ISFlLnhyMSxoPSEhZS55cjEscD1bXTtpZihmKXt2YXIgZD1hLnNpbXBsZU1hcChlLnhyMCxpLnIybCksbT1hLnNpbXBsZU1hcChlLnhyMSxpLnIybCksZz1kWzFdLWRbMF0sdj1tWzFdLW1bMF07cFswXT0oZFswXSooMS1yKStyKm1bMF0tZFswXSkvKGRbMV0tZFswXSkqYyxwWzJdPWMqKDEtcityKnYvZyksaS5yYW5nZVswXT1pLmwycihkWzBdKigxLXIpK3IqbVswXSksaS5yYW5nZVsxXT1pLmwycihkWzFdKigxLXIpK3IqbVsxXSl9ZWxzZSBwWzBdPTAscFsyXT1jO2lmKGgpe3ZhciB5PWEuc2ltcGxlTWFwKGUueXIwLGwucjJsKSx4PWEuc2ltcGxlTWFwKGUueXIxLGwucjJsKSxiPXlbMV0teVswXSxfPXhbMV0teFswXTtwWzFdPSh5WzFdKigxLXIpK3IqeFsxXS15WzFdKS8oeVswXS15WzFdKSp1LHBbM109dSooMS1yK3IqXy9iKSxsLnJhbmdlWzBdPWkubDJyKHlbMF0qKDEtcikrcip4WzBdKSxsLnJhbmdlWzFdPWwubDJyKHlbMV0qKDEtcikrcip4WzFdKX1lbHNlIHBbMV09MCxwWzNdPXU7cy5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSkscy5kcmF3T25lKHQsbCx7c2tpcFRpdGxlOiEwfSkscy5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLGwuX2lkXSk7dmFyIHc9Zj9jL3BbMl06MSxUPWg/dS9wWzNdOjEsaz1mP3BbMF06MCxBPWg/cFsxXTowLE09Zj9wWzBdL3BbMl0qYzowLFM9aD9wWzFdL3BbM10qdTowLEU9aS5fb2Zmc2V0LU0sTD1sLl9vZmZzZXQtUztuLmNsaXBSZWN0LmNhbGwoby5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKG8uc2V0U2NhbGUsMS93LDEvVCksbi5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxMKS5jYWxsKG8uc2V0U2NhbGUsdyxUKSxvLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL3csMS9UKSxvLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL3csMS9UKX1zLnJlZHJhd0NvbXBvbmVudHModCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9heGVzIjo1NDksIkBwbG90bHkvZDMiOjU4fV0sNTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3IoImF1dG90eXBlbnVtYmVycyIscy5hdXRvdHlwZW51bWJlcnNEZmx0KSwiLSI9PT1yKCJ0eXBlIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByLHM9dC5faWQsbD1zLmNoYXJBdCgwKTstMSE9PXMuaW5kZXhPZigic2NlbmUiKSYmKHM9bCk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxzLGwpO2lmKCFjKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWMudHlwZSYmbD09PXt2OiJ5IixoOiJ4In1bYy5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciB1PWwrImNhbGVuZGFyIixmPWNbdV0saD17bm9NdWx0aUNhdGVnb3J5OiFuKGMsImNhcnRlc2lhbiIpfHxuKGMsIm5vTXVsdGlDYXRlZ29yeSIpfTsiYm94Ij09PWMudHlwZSYmYy5faGFzUHJlQ29tcFN0YXRzJiZsPT09e2g6IngiLHY6InkifVtjLm9yaWVudGF0aW9ufHwidiJdJiYoaC5ub011bHRpQ2F0ZWdvcnk9ITApO2lmKGguYXV0b3R5cGVudW1iZXJzPXQuYXV0b3R5cGVudW1iZXJzLG8oYyxsKSl7dmFyIHA9YShjKSxkPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBtPWVbcl07bihtLCJib3gtdmlvbGluIikmJihtW2wrImF4aXMiXXx8bCk9PT1zJiYodm9pZCAwIT09bVtwXT9kLnB1c2gobVtwXVswXSk6dm9pZCAwIT09bS5uYW1lP2QucHVzaChtLm5hbWUpOmQucHVzaCgidGV4dCIpLG1bdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09Yy50eXBlKXt2YXIgZz1jLmRpbWVuc2lvbnNbYy5fYXhlc0RpbVtzXV07Zy52aXNpYmxlJiYodC50eXBlPWkoZy52YWx1ZXMsZixoKSl9ZWxzZSB0LnR5cGU9aShjW2xdfHxbY1tsKyIwIl1dLGYsaCl9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2F4aXNfYXV0b3R5cGUiOjU1MH1dLDU3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsKGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0pLCIiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSwic3RyaW5nIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobywoZnVuY3Rpb24oZSxuLGkpe3ZhciBhLG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1pLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPXI/cltjXTpjfWVsc2Ugbz1pLGE9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspb1tmXT11fW8ubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTpvfSl9KSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSkpfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxmPTA7Zjx1Lmxlbmd0aDtmKyspdC5faW50ZXJuYWxPbih1W2ZdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgZj1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1mLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1mWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGg9MDtoPGEudHJhY2VzLmxlbmd0aDtoKyspaWYoYS50cmFjZXNbaF0hPT1zLnRyYWNlc1toXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9ZlswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWZbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gYS5hcHBseShudWxsLG8pLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pKX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjQ5OCwiLi4vcmVnaXN0cnkiOjYzM31dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXZhciBjPXIoImRvbWFpbi54IixpKSx1PXIoImRvbWFpbi55IixhKTtjWzBdPGNbMV18fCh0LmRvbWFpbi54PWkuc2xpY2UoKSksdVswXTx1WzFdfHwodC5kb21haW4ueT1hLnNsaWNlKCkpfX0seyIuLi9saWIvZXh0ZW5kIjo0ODh9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGVkaXRUeXBlOmV9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXV0b1NpemUmJihuLnNpemUuZGZsdD0iYXV0byIpLHQuYXV0b0NvbG9yJiYobi5jb2xvci5kZmx0PSJhdXRvIiksdC5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sNTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucHJvak5hbWVzPXthaXJ5OiJhaXJ5IixhaXRvZmY6ImFpdG9mZiIsImFsYmVycyB1c2EiOiJhbGJlcnNVc2EiLGFsYmVyczoiYWxiZXJzIixhdWd1c3Q6ImF1Z3VzdCIsImF6aW11dGhhbCBlcXVhbCBhcmVhIjoiYXppbXV0aGFsRXF1YWxBcmVhIiwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjoiYXppbXV0aGFsRXF1aWRpc3RhbnQiLGJha2VyOiJiYWtlciIsYmVydGluMTk1MzoiYmVydGluMTk1MyIsYm9nZ3M6ImJvZ2dzIixib25uZToiYm9ubmUiLGJvdHRvbWxleToiYm90dG9tbGV5Iixicm9tbGV5OiJicm9tbGV5Iixjb2xsaWdub246ImNvbGxpZ25vbiIsImNvbmljIGNvbmZvcm1hbCI6ImNvbmljQ29uZm9ybWFsIiwiY29uaWMgZXF1YWwgYXJlYSI6ImNvbmljRXF1YWxBcmVhIiwiY29uaWMgZXF1aWRpc3RhbnQiOiJjb25pY0VxdWlkaXN0YW50IixjcmFpZzoiY3JhaWciLGNyYXN0ZXI6ImNyYXN0ZXIiLCJjeWxpbmRyaWNhbCBlcXVhbCBhcmVhIjoiY3lsaW5kcmljYWxFcXVhbEFyZWEiLCJjeWxpbmRyaWNhbCBzdGVyZW9ncmFwaGljIjoiY3lsaW5kcmljYWxTdGVyZW9ncmFwaGljIixlY2tlcnQxOiJlY2tlcnQxIixlY2tlcnQyOiJlY2tlcnQyIixlY2tlcnQzOiJlY2tlcnQzIixlY2tlcnQ0OiJlY2tlcnQ0IixlY2tlcnQ1OiJlY2tlcnQ1IixlY2tlcnQ2OiJlY2tlcnQ2IixlaXNlbmxvaHI6ImVpc2VubG9ociIsZXF1aXJlY3Rhbmd1bGFyOiJlcXVpcmVjdGFuZ3VsYXIiLGZhaGV5OiJmYWhleSIsImZvdWNhdXQgc2ludXNvaWRhbCI6ImZvdWNhdXRTaW51c29pZGFsIixmb3VjYXV0OiJmb3VjYXV0IixnaW56YnVyZzQ6ImdpbnpidXJnNCIsZ2luemJ1cmc1OiJnaW56YnVyZzUiLGdpbnpidXJnNjoiZ2luemJ1cmc2IixnaW56YnVyZzg6ImdpbnpidXJnOCIsZ2luemJ1cmc5OiJnaW56YnVyZzkiLGdub21vbmljOiJnbm9tb25pYyIsImdyaW5nb3J0ZW4gcXVpbmN1bmNpYWwiOiJncmluZ29ydGVuUXVpbmN1bmNpYWwiLGdyaW5nb3J0ZW46ImdyaW5nb3J0ZW4iLGd1eW91OiJndXlvdSIsaGFtbWVyOiJoYW1tZXIiLGhpbGw6ImhpbGwiLGhvbW9sb3NpbmU6ImhvbW9sb3NpbmUiLGh1Zm5hZ2VsOiJodWZuYWdlbCIsaHlwZXJlbGxpcHRpY2FsOiJoeXBlcmVsbGlwdGljYWwiLGthdnJheXNraXk3OiJrYXZyYXlza2l5NyIsbGFncmFuZ2U6ImxhZ3JhbmdlIixsYXJyaXZlZToibGFycml2ZWUiLGxhc2tvd3NraToibGFza293c2tpIixsb3hpbXV0aGFsOiJsb3hpbXV0aGFsIixtZXJjYXRvcjoibWVyY2F0b3IiLG1pbGxlcjoibWlsbGVyIixtb2xsd2VpZGU6Im1vbGx3ZWlkZSIsIm10IGZsYXQgcG9sYXIgcGFyYWJvbGljIjoibXRGbGF0UG9sYXJQYXJhYm9saWMiLCJtdCBmbGF0IHBvbGFyIHF1YXJ0aWMiOiJtdEZsYXRQb2xhclF1YXJ0aWMiLCJtdCBmbGF0IHBvbGFyIHNpbnVzb2lkYWwiOiJtdEZsYXRQb2xhclNpbnVzb2lkYWwiLCJuYXR1cmFsIGVhcnRoIjoibmF0dXJhbEVhcnRoIiwibmF0dXJhbCBlYXJ0aDEiOiJuYXR1cmFsRWFydGgxIiwibmF0dXJhbCBlYXJ0aDIiOiJuYXR1cmFsRWFydGgyIiwibmVsbCBoYW1tZXIiOiJuZWxsSGFtbWVyIixuaWNvbG9zaToibmljb2xvc2kiLG9ydGhvZ3JhcGhpYzoib3J0aG9ncmFwaGljIixwYXR0ZXJzb246InBhdHRlcnNvbiIsInBlaXJjZSBxdWluY3VuY2lhbCI6InBlaXJjZVF1aW5jdW5jaWFsIixwb2x5Y29uaWM6InBvbHljb25pYyIsInJlY3Rhbmd1bGFyIHBvbHljb25pYyI6InJlY3Rhbmd1bGFyUG9seWNvbmljIixyb2JpbnNvbjoicm9iaW5zb24iLHNhdGVsbGl0ZToic2F0ZWxsaXRlIiwic2ludSBtb2xsd2VpZGUiOiJzaW51TW9sbHdlaWRlIixzaW51c29pZGFsOiJzaW51c29pZGFsIixzdGVyZW9ncmFwaGljOiJzdGVyZW9ncmFwaGljIix0aW1lczoidGltZXMiLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoidHJhbnN2ZXJzZU1lcmNhdG9yIiwidmFuIGRlciBncmludGVuIjoidmFuRGVyR3JpbnRlbiIsInZhbiBkZXIgZ3JpbnRlbjIiOiJ2YW5EZXJHcmludGVuMiIsInZhbiBkZXIgZ3JpbnRlbjMiOiJ2YW5EZXJHcmludGVuMyIsInZhbiBkZXIgZ3JpbnRlbjQiOiJ2YW5EZXJHcmludGVuNCIsd2FnbmVyNDoid2FnbmVyNCIsd2FnbmVyNjoid2FnbmVyNiIsd2llY2hlbDoid2llY2hlbCIsIndpbmtlbCB0cmlwZWwiOiJ3aW5rZWwzIix3aW5rZWwzOiJ3aW5rZWwzIn0sci5heGVzTmFtZXM9WyJsb25heGlzIiwibGF0YXhpcyJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsImF6aW11dGhhbCBlcXVhbCBhcmVhIjozNjAsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6MzYwLCJjb25pYyBjb25mb3JtYWwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsInRyYW5zdmVyc2UgbWVyY2F0b3IiOjE4MCwiKiI6MzYwfSxyLmxhdGF4aXNTcGFuPXsiY29uaWMgY29uZm9ybWFsIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSwiKiI6MTgwfSxyLnNjb3BlRGVmYXVsdHM9e3dvcmxkOntsb25heGlzUmFuZ2U6Wy0xODAsMTgwXSxsYXRheGlzUmFuZ2U6Wy05MCw5MF0scHJvalR5cGU6ImVxdWlyZWN0YW5ndWxhciIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOiJhbGJlcnMgdXNhIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbMTUsMCwwXSxwcm9qUGFyYWxsZWxzOlswLDYwXX0sYXNpYTp7bG9uYXhpc1JhbmdlOlsyMiwxNjBdLGxhdGF4aXNSYW5nZTpbLTE1LDU1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSwibm9ydGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNDVdLGxhdGF4aXNSYW5nZTpbNSw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LCJzb3V0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfX0sci5jbGlwUGFkPS4wMDEsci5wcmVjaXNpb249LjEsci5sYW5kQ29sb3I9IiNGMERDODIiLHIud2F0ZXJDb2xvcj0iIzMzOTlGRiIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXsiSVNPLTMiOiJjb3VudHJpZXMiLCJVU0Etc3RhdGVzIjoic3VidW5pdHMiLCJjb3VudHJ5IG5hbWVzIjoiY291bnRyaWVzIn0sci5zcGhlcmVTVkc9e3R5cGU6IlNwaGVyZSJ9LHIuZmlsbExheWVycz17b2NlYW46MSxsYW5kOjEsbGFrZXM6MX0sci5saW5lTGF5ZXJzPXtzdWJ1bml0czoxLGNvdW50cmllczoxLGNvYXN0bGluZXM6MSxyaXZlcnM6MSxmcmFtZToxfSxyLmxheWVycz1bImJnIiwib2NlYW4iLCJsYW5kIiwibGFrZXMiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJmcm9udHBsb3QiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9WyJiZyIsIm9jZWFuIiwibGFuZCIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsInJpdmVycyIsImxha2VzIiwiZnJvbnRwbG90Il0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46Im9jZWFuIixsYW5kOiJsYW5kIixsYWtlczoibGFrZSIsc3VidW5pdHM6InN1YnVuaXQiLGNvdW50cmllczoiY291bnRyeSIsY29hc3RsaW5lczoiY29hc3RsaW5lIixyaXZlcnM6InJpdmVyIixmcmFtZToiZnJhbWUifX0se31dLDU4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1nZW8iKSxhPWkuZ2VvUGF0aCxvPWkuZ2VvRGlzdGFuY2Uscz10KCJkMy1nZW8tcHJvamVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4uL3Bsb3RzIiksbT10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmdldEF1dG9SYW5nZSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHg9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssXz10KCIuL3pvb20iKSx3PXQoIi4vY29uc3RhbnRzIiksVD10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIiksaz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKSxBPXQoInRvcG9qc29uLWNsaWVudCIpLmZlYXR1cmU7ZnVuY3Rpb24gTSh0KXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMudG9wb2pzb25VUkw9dC50b3BvanNvblVSTCx0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdCx0aGlzLnRvcG9qc29uTmFtZT1udWxsLHRoaXMudG9wb2pzb249bnVsbCx0aGlzLnByb2plY3Rpb249bnVsbCx0aGlzLnNjb3BlPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXZhciBTPU0ucHJvdG90eXBlO2Z1bmN0aW9uIEUodCxlKXt2YXIgcj13LmNsaXBQYWQsbj10WzBdK3IsaT10WzFdLXIsYT1lWzBdK3Isbz1lWzFdLXI7bj4wJiZpPDAmJihpKz0zNjApO3ZhciBzPShpLW4pLzQ7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltbW24sYV0sW24sb10sW24rcyxvXSxbbisyKnMsb10sW24rMypzLG9dLFtpLG9dLFtpLGFdLFtpLXMsYV0sW2ktMipzLGFdLFtpLTMqcyxhXSxbbixhXV1dfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNKHQpfSxTLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9W10sbz0hMTtmb3IodmFyIHMgaW4gdy5sYXllck5hbWVUb0FkamVjdGl2ZSlpZigiZnJhbWUiIT09cyYmaVsic2hvdyIrc10pe289ITA7YnJlYWt9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspaWYodFswXVswXS50cmFjZS5sb2NhdGlvbm1vZGUpe289ITA7YnJlYWt9aWYobyl7dmFyIGM9ay5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbCE9PW4udG9wb2pzb24mJmM9PT1uLnRvcG9qc29uTmFtZXx8KG4udG9wb2pzb25OYW1lPWMsdm9pZCAwPT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXSYmYS5wdXNoKG4uZmV0Y2hUb3BvanNvbigpKSl9YT1hLmNvbmNhdChULmZldGNoVHJhY2VHZW9EYXRhKHQpKSxyLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7UHJvbWlzZS5hbGwoYSkudGhlbigoZnVuY3Rpb24oKXtuLnRvcG9qc29uPVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0sbi51cGRhdGUodCxlKSxyKCl9KSkuY2F0Y2goaSl9KSkpfSxTLmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9ay5nZXRUb3BvanNvblBhdGgodC50b3BvanNvblVSTCx0LnRvcG9qc29uTmFtZSk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe24uanNvbihlLChmdW5jdGlvbihuLGEpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP2kobmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLGUsIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSkpOmkobmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0IixlXS5qb2luKCIgIikpKTtQbG90bHlHZW9Bc3NldHMudG9wb2pzb25bdC50b3BvanNvbk5hbWVdPWEscigpfSkpfSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTsiY2hvcm9wbGV0aCI9PT1hLnR5cGUmJih0aGlzLmhhc0Nob3JvcGxldGg9ITApLCEwPT09YS52aXNpYmxlJiZhLl9sZW5ndGg+MCYmYS5fbW9kdWxlLmNhbGNHZW9KU09OKGksZSl9aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbih0LGUpKXt0aGlzLnZpZXdJbml0aWFsJiZ0aGlzLnNjb3BlPT09ci5zY29wZXx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy5zY29wZT1yLnNjb3BlLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxkLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgbz10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PW8uc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1vLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9by5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIHM9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1zLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSxTLnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyYXBoRGl2LG49ZVt0aGlzLmlkXSxsPWUuX3NpemUsdT1uLmRvbWFpbixmPW4ucHJvamVjdGlvbixoPW4ubG9uYXhpcyxwPW4ubGF0YXhpcyxkPWguX2F4LG09cC5fYXgsdj10aGlzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5wcm9qZWN0aW9uLHI9ZS50eXBlLG49dy5wcm9qTmFtZXNbcl07bj0iZ2VvIitjLnRpdGxlQ2FzZShuKTtmb3IodmFyIGw9KGlbbl18fHNbbl0pKCksdT10Ll9pc1NhdGVsbGl0ZT8xODAqTWF0aC5hY29zKDEvZS5kaXN0YW5jZSkvTWF0aC5QSTp0Ll9pc0NsaXBwZWQ/dy5sb25heGlzU3BhbltyXS8yOm51bGwsZj1bImNlbnRlciIsInJvdGF0ZSIsInBhcmFsbGVscyIsImNsaXBFeHRlbnQiXSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0P2w6W119LHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGQ9ZltwXTsiZnVuY3Rpb24iIT10eXBlb2YgbFtkXSYmKGxbZF09aCl9bC5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXtpZihudWxsPT09bCh0KSlyZXR1cm4hMDtpZih1KXt2YXIgZT1sLnJvdGF0ZSgpO3JldHVybiBvKHQsWy1lWzBdLC1lWzFdXSk+dSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sbC5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGEoKS5wcm9qZWN0aW9uKGwpfSxsLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbC5nZXRQYXRoKCkuYm91bmRzKHQpfSxsLnByZWNpc2lvbih3LnByZWNpc2lvbiksdC5faXNTYXRlbGxpdGUmJmwudGlsdChlLnRpbHQpLmRpc3RhbmNlKGUuZGlzdGFuY2UpO3UmJmwuY2xpcEFuZ2xlKHUtdy5jbGlwUGFkKTtyZXR1cm4gbH0obikseT1bW2wubCtsLncqdS54WzBdLGwudCtsLmgqKDEtdS55WzFdKV0sW2wubCtsLncqdS54WzFdLGwudCtsLmgqKDEtdS55WzBdKV1dLHg9bi5jZW50ZXJ8fHt9LGI9Zi5yb3RhdGlvbnx8e30sXz1oLnJhbmdlfHxbXSxUPXAucmFuZ2V8fFtdO2lmKG4uZml0Ym91bmRzKXtkLl9sZW5ndGg9eVsxXVswXS15WzBdWzBdLG0uX2xlbmd0aD15WzFdWzFdLXlbMF1bMV0sZC5yYW5nZT1nKHIsZCksbS5yYW5nZT1nKHIsbSk7dmFyIGs9KGQucmFuZ2VbMF0rZC5yYW5nZVsxXSkvMixBPShtLnJhbmdlWzBdK20ucmFuZ2VbMV0pLzI7aWYobi5faXNTY29wZWQpeD17bG9uOmssbGF0OkF9O2Vsc2UgaWYobi5faXNDbGlwcGVkKXt4PXtsb246ayxsYXQ6QX0sYj17bG9uOmssbGF0OkEscm9sbDpiLnJvbGx9O3ZhciBNPWYudHlwZSxTPXcubG9uYXhpc1NwYW5bTV0vMnx8MTgwLEw9dy5sYXRheGlzU3BhbltNXS8yfHw5MDtfPVtrLVMsaytTXSxUPVtBLUwsQStMXX1lbHNlIHg9e2xvbjprLGxhdDpBfSxiPXtsb246ayxsYXQ6Yi5sYXQscm9sbDpiLnJvbGx9fXYuY2VudGVyKFt4Lmxvbi1iLmxvbix4LmxhdC1iLmxhdF0pLnJvdGF0ZShbLWIubG9uLC1iLmxhdCxiLnJvbGxdKS5wYXJhbGxlbHMoZi5wYXJhbGxlbHMpO3ZhciBDPUUoXyxUKTt2LmZpdEV4dGVudCh5LEMpO3ZhciBQPXRoaXMuYm91bmRzPXYuZ2V0Qm91bmRzKEMpLEk9dGhpcy5maXRTY2FsZT12LnNjYWxlKCksTz12LnRyYW5zbGF0ZSgpO2lmKG4uZml0Ym91bmRzKXt2YXIgej12LmdldEJvdW5kcyhFKGQucmFuZ2UsbS5yYW5nZSkpLEQ9TWF0aC5taW4oKFBbMV1bMF0tUFswXVswXSkvKHpbMV1bMF0telswXVswXSksKFBbMV1bMV0tUFswXVsxXSkvKHpbMV1bMV0telswXVsxXSkpO2lzRmluaXRlKEQpP3Yuc2NhbGUoRCpJKTpjLndhcm4oIlNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyIrdGhpcy5pZCsiZml0Ym91bmRzIGNvbXB1dGF0aW9ucy4iKX1lbHNlIHYuc2NhbGUoZi5zY2FsZSpJKTt2YXIgUj10aGlzLm1pZFB0PVsoUFswXVswXStQWzFdWzBdKS8yLChQWzBdWzFdK1BbMV1bMV0pLzJdO2lmKHYudHJhbnNsYXRlKFtPWzBdKyhSWzBdLU9bMF0pLE9bMV0rKFJbMV0tT1sxXSldKS5jbGlwRXh0ZW50KFApLG4uX2lzQWxiZXJzVXNhKXt2YXIgRj12KFt4Lmxvbix4LmxhdF0pLEI9di50cmFuc2xhdGUoKTt2LnRyYW5zbGF0ZShbQlswXS0oRlswXS1CWzBdKSxCWzFdLShGWzFdLUJbMV0pXSl9fSxTLnVwZGF0ZUJhc2VMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci50b3BvanNvbixhPXIubGF5ZXJzLG89ci5iYXNlUGF0aHM7ZnVuY3Rpb24gcyh0KXtyZXR1cm4ibG9uYXhpcyI9PT10fHwibGF0YXhpcyI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuIEJvb2xlYW4ody5saW5lTGF5ZXJzW3RdKX1mdW5jdGlvbiBjKHQpe3JldHVybiBCb29sZWFuKHcuZmlsbExheWVyc1t0XSl9dmFyIHU9KHRoaXMuaGFzQ2hvcm9wbGV0aD93LmxheWVyc0ZvckNob3JvcGxldGg6dy5sYXllcnMpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGwodCl8fGModCk/ZVsic2hvdyIrdF06IXModCl8fGVbdF0uc2hvd2dyaWR9KSkscD1yLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEodSxTdHJpbmcpO3AuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSBhW3RdLGRlbGV0ZSBvW3RdLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YVt0XT1uLnNlbGVjdCh0aGlzKTsiYmciPT09dD9yLmJnUmVjdD1lLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpOnModCk/b1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpOiJiYWNrcGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxheWVyIiwhMCk6ImZyb250cGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6bCh0KT9vW3RdPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKTpjKHQpJiYob1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2UiLCJub25lIikpfSkpLHAub3JkZXIoKSxwLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPW9bcl0sYT13LmxheWVyTmFtZVRvQWRqZWN0aXZlW3JdOyJmcmFtZSI9PT1yP24uZGF0dW0ody5zcGhlcmVTVkcpOmwocil8fGMocik/bi5kYXR1bShBKGksaS5vYmplY3RzW3JdKSk6cyhyKSYmbi5kYXR1bShmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89ZVt0XSxzPXcuc2NvcGVEZWZhdWx0c1tlLnNjb3BlXTsibG9uYXhpcyI9PT10PyhuPXMubG9uYXhpc1JhbmdlLGk9cy5sYXRheGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVyblt0LGVdfSk6ImxhdGF4aXMiPT09dCYmKG49cy5sYXRheGlzUmFuZ2UsaT1zLmxvbmF4aXNSYW5nZSxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UsdF19KTt2YXIgbD17dHlwZToibGluZWFyIixyYW5nZTpbblswXSxuWzFdLTFlLTZdLHRpY2swOm8udGljazAsZHRpY2s6by5kdGlja307bS5zZXRDb252ZXJ0KGwscik7dmFyIGM9bS5jYWxjVGlja3MobCk7ZS5pc1Njb3BlZHx8ImxvbmF4aXMiIT09dHx8Yy5wb3AoKTtmb3IodmFyIHU9Yy5sZW5ndGgsZj1uZXcgQXJyYXkodSksaD0wO2g8dTtoKyspZm9yKHZhciBwPWNbaF0ueCxkPWZbaF09W10sZz1pWzBdO2c8aVsxXSsyLjU7Zys9Mi41KWQucHVzaChhKHAsZykpO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmZ9fShyLGUsdCkpLmNhbGwoZi5zdHJva2UsZVtyXS5ncmlkY29sb3IpLmNhbGwoaC5kYXNoTGluZSwiIixlW3JdLmdyaWR3aWR0aCksbChyKT9uLmNhbGwoZi5zdHJva2UsZVthKyJjb2xvciJdKS5jYWxsKGguZGFzaExpbmUsIiIsZVthKyJ3aWR0aCJdKTpjKHIpJiZuLmNhbGwoZi5maWxsLGVbYSsiY29sb3IiXSl9KSl9LFMudXBkYXRlRGltcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYm91bmRzLG49KGUuZnJhbWV3aWR0aHx8MCkvMixpPXJbMF1bMF0tbixhPXJbMF1bMV0tbixvPXJbMV1bMF0taStuLHM9clsxXVsxXS1hK247aC5zZXRSZWN0KHRoaXMuY2xpcFJlY3QsaSxhLG8scyksdGhpcy5iZ1JlY3QuY2FsbChoLnNldFJlY3QsaSxhLG8scykuY2FsbChmLmZpbGwsZS5iZ2NvbG9yKSx0aGlzLnhheGlzLl9vZmZzZXQ9aSx0aGlzLnhheGlzLl9sZW5ndGg9byx0aGlzLnlheGlzLl9vZmZzZXQ9YSx0aGlzLnlheGlzLl9sZW5ndGg9c30sUy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLmdyYXBoRGl2LGE9ci5iZ1JlY3Qsbz10LmRyYWdtb2RlLHM9dC5jbGlja21vZGU7aWYoIXIuaXNTdGF0aWMpe3ZhciB1OyJzZWxlY3QiPT09bz91PWZ1bmN0aW9uKHQsZSl7KHQucmFuZ2U9e30pW3IuaWRdPVtoKFtlLnhtaW4sZS55bWluXSksaChbZS54bWF4LGUueW1heF0pXX06Imxhc3NvIj09PW8mJih1PWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAoaCl9KTt2YXIgZj17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6aSxwbG90aW5mbzp7aWQ6ci5pZCx4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXMsZmlsbFJhbmdlSXRlbXM6dX0seGF4ZXM6W3IueGF4aXNdLHlheGVzOltyLnlheGlzXSxzdWJwbG90OnIuaWQsY2xpY2tGbjpmdW5jdGlvbih0KXsyPT09dCYmeChpKX19OyJwYW4iPT09bz8oYS5ub2RlKCkub25tb3VzZWRvd249bnVsbCxhLmNhbGwoXyhyLGUpKSxhLm9uKCJkYmxjbGljay56b29tIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnZpZXdJbml0aWFsLGU9e307Zm9yKHZhciBuIGluIHQpZVtyLmlkKyIuIituXT10W25dO2wuY2FsbCgiX2d1aVJlbGF5b3V0IixpLGUpLGkuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKX0pKSxpLl9jb250ZXh0Ll9zY3JvbGxab29tLmdlb3x8YS5vbigid2hlZWwuem9vbSIsbnVsbCkpOiJzZWxlY3QiIT09byYmImxhc3NvIiE9PW98fChhLm9uKCIuem9vbSIsbnVsbCksZi5wcmVwRm49ZnVuY3Rpb24odCxlLHIpe3kodCxlLHIsZixvKX0sdi5pbml0KGYpKSxhLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQoYy5nZXRQb3NpdGlvbkZyb21EM0V2ZW50KCkpO2lmKCF0KXJldHVybiB2LnVuaG92ZXIoaSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxwLmhvdmVyKGksbi5ldmVudCxyLmlkKX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7aS5fZHJhZ2dpbmd8fHYudW5ob3ZlcihpLG4uZXZlbnQpfSkpLGEub24oImNsaWNrIiwoZnVuY3Rpb24oKXsic2VsZWN0IiE9PW8mJiJsYXNzbyIhPT1vJiYocy5pbmRleE9mKCJzZWxlY3QiKT4tMSYmYihuLmV2ZW50LGksW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGYpLHMuaW5kZXhPZigiZXZlbnQiKT4tMSYmcC5jbGljayhpLG4uZXZlbnQpKX0pKX1mdW5jdGlvbiBoKHQpe3JldHVybiByLnByb2plY3Rpb24uaW52ZXJ0KFt0WzBdK3IueGF4aXMuX29mZnNldCx0WzFdK3IueWF4aXMuX29mZnNldF0pfX0sUy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZ3JhcGhEaXYscj1lLl9mdWxsTGF5b3V0LGk9ImNsaXAiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGkpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwoaC5zZXRDbGlwVXJsLGksZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVsxXX19LHQubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sbS5zZXRDb252ZXJ0KHQubW9ja0F4aXMscil9LFMuc2F2ZVZpZXdJbml0aWFsPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jZW50ZXJ8fHt9LG49dC5wcm9qZWN0aW9uLGk9bi5yb3RhdGlvbnx8e307dGhpcy52aWV3SW5pdGlhbD17Zml0Ym91bmRzOnQuZml0Ym91bmRzLCJwcm9qZWN0aW9uLnNjYWxlIjpuLnNjYWxlfSxlPXQuX2lzU2NvcGVkP3siY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0fTp0Ll9pc0NsaXBwZWQ/eyJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6aS5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjppLmxhdH06eyJjZW50ZXIubG9uIjpyLmxvbiwiY2VudGVyLmxhdCI6ci5sYXQsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjppLmxvbn0sYy5leHRlbmRGbGF0KHRoaXMudmlld0luaXRpYWwsZSl9LFMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByP3UoclswXSxyWzFdKTpudWxsfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpPyJub25lIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoImQiLHIpO2Zvcih0IGluIHRoaXMuZGF0YVBhdGhzKXRoaXMuZGF0YVBhdGhzW3RdLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSkpO2Zvcih0IGluIHRoaXMuZGF0YVBvaW50cyl0aGlzLmRhdGFQb2ludHNbdF0uYXR0cigiZGlzcGxheSIsaSkuYXR0cigidHJhbnNmb3JtIixuKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTEsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NTI3LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4uL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjU3MCwiLi4vcGxvdHMiOjYxNCwiLi9jb25zdGFudHMiOjU4MiwiLi96b29tIjo1ODcsIkBwbG90bHkvZDMiOjU4LCJkMy1nZW8iOjEwOSwiZDMtZ2VvLXByb2plY3Rpb24iOjEwOCwidG9wb2pzb24tY2xpZW50IjozMTB9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL2dlbyIpLG89ImdlbyIscz1pKG8pLGw9e307bC5nZW89e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpvLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOm8sbmFtZTpvLGlkUm9vdDpvLGlkUmVnZXg6cyxhdHRyUmVnZXg6cyxhdHRyaWJ1dGVzOmwsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzLmdlbyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9YSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdlbyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc3VicGxvdC51cGRhdGVGeChlLGkpfX0sY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdlb3x8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMuZnJhbWV3b3JrLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSl9fX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo1ODgsIi4vZ2VvIjo1ODMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU4NSwiLi9sYXlvdXRfZGVmYXVsdHMiOjU4Nn1dLDU4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxsPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkdGljazp7dmFsVHlwZToibnVtYmVyIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6ImdlbyJ9LHt9KSxmaXRib3VuZHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsImxvY2F0aW9ucyIsImdlb2pzb24iXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzKGEuc2NvcGVEZWZhdWx0cyksZGZsdDoid29ybGQifSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyhhLnByb2pOYW1lcyl9LHJvdGF0aW9uOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn0scm9sbDp7dmFsVHlwZToibnVtYmVyIn19LHRpbHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkaXN0YW5jZTp7dmFsVHlwZToibnVtYmVyIixtaW46MS4wMDEsZGZsdDoyfSxwYXJhbGxlbHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn19LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOiJib29sZWFuIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvYXN0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5sYW5kQ29sb3J9LHNob3dvY2Vhbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxha2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLndhdGVyQ29sb3J9LHJpdmVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOiJib29sZWFuIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb3VudHJ5d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHN1YnVuaXR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGZyYW1ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6bCxsYXRheGlzOmx9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MCwiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjUyMSwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi9kb21haW4iOjU3OSwiLi9jb25zdGFudHMiOjU4Mn1dLDU4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9by5heGVzTmFtZXM7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgcz1hKGkuZnVsbERhdGEsImdlbyIsaS5pZCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKSxjPXIoInJlc29sdXRpb24iKSx1PXIoInNjb3BlIiksZj1vLnNjb3BlRGVmYXVsdHNbdV0saD1yKCJwcm9qZWN0aW9uLnR5cGUiLGYucHJvalR5cGUpLHA9ZS5faXNBbGJlcnNVc2E9ImFsYmVycyB1c2EiPT09aDtwJiYodT1lLnNjb3BlPSJ1c2EiKTt2YXIgZD1lLl9pc1Njb3BlZD0id29ybGQiIT09dSxtPWUuX2lzU2F0ZWxsaXRlPSJzYXRlbGxpdGUiPT09aCxnPWUuX2lzQ29uaWM9LTEhPT1oLmluZGV4T2YoImNvbmljIil8fCJhbGJlcnMiPT09aCx2PWUuX2lzQ2xpcHBlZD0hIW8ubG9uYXhpc1NwYW5baF07aWYoITE9PT10LnZpc2libGUpe3ZhciB5PW4uZXh0ZW5kRGVlcCh7fSxlLl90ZW1wbGF0ZSk7eS5zaG93Y29hc3RsaW5lcz0hMSx5LnNob3djb3VudHJpZXM9ITEseS5zaG93ZnJhbWU9ITEseS5zaG93bGFrZXM9ITEseS5zaG93bGFuZD0hMSx5LnNob3dvY2Vhbj0hMSx5LnNob3dyaXZlcnM9ITEseS5zaG93c3VidW5pdHM9ITEseS5sb25heGlzJiYoeS5sb25heGlzLnNob3dncmlkPSExKSx5LmxhdGF4aXMmJih5LmxhdGF4aXMuc2hvd2dyaWQ9ITEpLGUuX3RlbXBsYXRlPXl9Zm9yKHZhciB4PXIoInZpc2libGUiKSxiPTA7YjxsLmxlbmd0aDtiKyspe3ZhciBfLHc9bFtiXSxUPVszMCwxMF1bYl07aWYoZClfPWZbdysiUmFuZ2UiXTtlbHNle3ZhciBrPW9bdysiU3BhbiJdLEE9KGtbaF18fGtbIioiXSkvMixNPXIoInByb2plY3Rpb24ucm90YXRpb24uIit3LnN1YnN0cigwLDMpLGYucHJvalJvdGF0ZVtiXSk7Xz1bTS1BLE0rQV19dmFyIFM9cih3KyIucmFuZ2UiLF8pO3IodysiLnRpY2swIikscih3KyIuZHRpY2siLFQpLHIodysiLnNob3dncmlkIiwhIXgmJnZvaWQgMCkmJihyKHcrIi5ncmlkY29sb3IiKSxyKHcrIi5ncmlkd2lkdGgiKSksZVt3XS5fYXg9e3R5cGU6ImxpbmVhciIsX2lkOncuc2xpY2UoMCwzKSxfdHJhY2VJbmRpY2VzOnMsc2V0U2NhbGU6bi5pZGVudGl0eSxjMmw6bi5pZGVudGl0eSxyMmw6bi5pZGVudGl0eSxhdXRvcmFuZ2U6ITAscmFuZ2U6Uy5zbGljZSgpLF9tOjEsX2lucHV0Ont9fX12YXIgRT1lLmxvbmF4aXMucmFuZ2UsTD1lLmxhdGF4aXMucmFuZ2UsQz1FWzBdLFA9RVsxXTtDPjAmJlA8MCYmKFArPTM2MCk7dmFyIEksTyx6LEQ9KEMrUCkvMjtpZighcCl7dmFyIFI9ZD9mLnByb2pSb3RhdGU6W0QsMCwwXTtJPXIoInByb2plY3Rpb24ucm90YXRpb24ubG9uIixSWzBdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsUlsxXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5yb2xsIixSWzJdKSxyKCJzaG93Y29hc3RsaW5lcyIsIWQmJngpJiYocigiY29hc3RsaW5lY29sb3IiKSxyKCJjb2FzdGxpbmV3aWR0aCIpKSxyKCJzaG93b2NlYW4iLCEheCYmdm9pZCAwKSYmcigib2NlYW5jb2xvciIpfShwPyhPPS05Ni42LHo9MzguNyk6KE89ZD9EOkksej0oTFswXStMWzFdKS8yKSxyKCJjZW50ZXIubG9uIixPKSxyKCJjZW50ZXIubGF0Iix6KSxtJiYocigicHJvamVjdGlvbi50aWx0IikscigicHJvamVjdGlvbi5kaXN0YW5jZSIpKSxnKSYmcigicHJvamVjdGlvbi5wYXJhbGxlbHMiLGYucHJvalBhcmFsbGVsc3x8WzAsNjBdKTtyKCJwcm9qZWN0aW9uLnNjYWxlIikscigic2hvd2xhbmQiLCEheCYmdm9pZCAwKSYmcigibGFuZGNvbG9yIikscigic2hvd2xha2VzIiwhIXgmJnZvaWQgMCkmJnIoImxha2Vjb2xvciIpLHIoInNob3dyaXZlcnMiLCEheCYmdm9pZCAwKSYmKHIoInJpdmVyY29sb3IiKSxyKCJyaXZlcndpZHRoIikpLHIoInNob3djb3VudHJpZXMiLGQmJiJ1c2EiIT09dSYmeCkmJihyKCJjb3VudHJ5Y29sb3IiKSxyKCJjb3VudHJ5d2lkdGgiKSksKCJ1c2EiPT09dXx8Im5vcnRoIGFtZXJpY2EiPT09dSYmNTA9PT1jKSYmKHIoInNob3dzdWJ1bml0cyIseCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLGR8fHIoInNob3dmcmFtZSIseCkmJihyKCJmcmFtZWNvbG9yIikscigiZnJhbWV3aWR0aCIpKSxyKCJiZ2NvbG9yIikscigiZml0Ym91bmRzIikmJihkZWxldGUgZS5wcm9qZWN0aW9uLnNjYWxlLGQ/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCk6dj8oZGVsZXRlIGUuY2VudGVyLmxvbixkZWxldGUgZS5jZW50ZXIubGF0LGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubG9uLGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubGF0LGRlbGV0ZSBlLmxvbmF4aXMucmFuZ2UsZGVsZXRlIGUubGF0YXhpcy5yYW5nZSk6KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZToiZ2VvIixhdHRyaWJ1dGVzOnMsaGFuZGxlRGVmYXVsdHM6YyxmdWxsRGF0YTpyLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2dldF9kYXRhIjo1ODgsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjYyNywiLi9jb25zdGFudHMiOjU4MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTg1fV0sNTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGY9e30saD17fTtmdW5jdGlvbiBwKHQsZSl7ZltuKyIuIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxmKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGhbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSkscCgiZml0Ym91bmRzIiwhMSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGgpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCk7dmFyIHI9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6clswXSwiZ2VvLmNlbnRlci5sYXQiOnJbMV19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZih0LGUsaSl9KSkscn1mdW5jdGlvbiBwKHQsZSl7dmFyIHIsaSxhLG8scyxoLHAsZCxtLGc9dSgwLGUpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIHkocil7dmFyIG49ZS5yb3RhdGUoKSxpPWUuaW52ZXJ0KHQubWlkUHQpO3IoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtblswXSkscigiY2VudGVyLmxvbiIsaVswXSkscigiY2VudGVyLmxhdCIsaVsxXSl9cmV0dXJuIGcub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWUudHJhbnNsYXRlKCksbz1pLHM9dihyKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7aWYoaD1uLm1vdXNlKHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciByPXYodCk7aWYoIXIpcmV0dXJuITA7dmFyIG49ZShyKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT4yfHxNYXRoLmFicyhuWzFdLXRbMV0pPjJ9KHIpKXJldHVybiBnLnNjYWxlKGUuc2NhbGUoKSksdm9pZCBnLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFthWzBdLG4uZXZlbnQudHJhbnNsYXRlWzFdXSkscz92KGgpJiYoZD12KGgpLHA9W29bMF0rKGRbMF0tc1swXSksaVsxXSxpWzJdXSxlLnJvdGF0ZShwKSxvPXApOnM9dihyPWgpLG09ITAsdC5yZW5kZXIoKTt2YXIgbD1lLnJvdGF0ZSgpLGM9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6Y1swXSwiZ2VvLmNlbnRlci5sYXQiOmNbMV0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LWxbMF19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksbSYmZih0LGUseSl9KSksZ31mdW5jdGlvbiBkKHQsZSl7dmFyIHIsaT17cjplLnJvdGF0ZSgpLGs6ZS5zY2FsZSgpfSxhPXUoMCxlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9W107Zm9yKDsrK2U8cjspaS5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGE9bi5kaXNwYXRjaC5hcHBseShudWxsLGkpO3JldHVybiBhLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvO3RyeXtvPWkuc291cmNlRXZlbnQ9bi5ldmVudCxpLnRhcmdldD10LG4uZXZlbnQ9aSxhW2kudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e24uZXZlbnQ9b319fSxhfShhLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpLHM9MCxoPWEub247ZnVuY3Rpb24gcCh0KXtzKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBkKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gYih0KXstLXN8fHQoe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gXyh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtclswXSksdCgicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLC1yWzFdKX1yZXR1cm4gYS5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKTt2YXIgdD1uLm1vdXNlKHRoaXMpLHM9ZS5yb3RhdGUoKSxjPXMsdT1lLnRyYW5zbGF0ZSgpLGY9ZyhzKTtyPW0oZSx0KSxoLmNhbGwoYSwiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIGE9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihtKGUsYSkpe2Uucm90YXRlKHMpLnRyYW5zbGF0ZSh1KTt2YXIgbD1tKGUsYSksaD15KHIsbCkscD1UKHYoZixoKSksZz1pLnI9eChwLHIsYyk7aXNGaW5pdGUoZ1swXSkmJmlzRmluaXRlKGdbMV0pJiZpc0Zpbml0ZShnWzJdKXx8KGc9YyksZS5yb3RhdGUoZyksYz1nfX1lbHNlIHI9bShlLHQ9YSk7ZChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkscChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGguY2FsbChhLCJ6b29tIixudWxsKSxiKG8ub2YodGhpcyxhcmd1bWVudHMpKSxmKHQsZSxfKX0pKS5vbigiem9vbS5yZWRyYXciLChmdW5jdGlvbigpe3QucmVuZGVyKCk7dmFyIHI9ZS5yb3RhdGUoKTt0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIseyJnZW8ucHJvamVjdGlvbi5zY2FsZSI6ZS5zY2FsZSgpL3QuZml0U2NhbGUsImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LXJbMF0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6LXJbMV19KX0pKSxuLnJlYmluZChhLG8sIm9uIil9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qbyxyPXRbMV0qbyxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfShyKX1mdW5jdGlvbiBnKHQpe3ZhciBlPS41KnRbMF0qbyxyPS41KnRbMV0qbyxuPS41KnRbMl0qbyxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSkscz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKTtyZXR1cm5bYSpsKnUraSpzKmMsaSpsKnUtYSpzKmMsYSpzKnUraSpsKmMsYSpsKmMtaSpzKnVdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdLG89ZVswXSxzPWVbMV0sbD1lWzJdLGM9ZVszXTtyZXR1cm5bcipvLW4qcy1pKmwtYSpjLHIqcytuKm8raSpjLWEqbCxyKmwtbipjK2kqbythKnMscipjK24qbC1pKnMrYSpvXX1mdW5jdGlvbiB5KHQsZSl7aWYodCYmZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KGsocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxrKHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX19ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dyhlLDIsdFswXSk7bj13KG4sMSx0WzFdKSxuPXcobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0sZj1uWzFdLGg9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGYpPmQ/KGE9KGY+MD85MDotOTApLXAsaT0wKTooYT1NYXRoLmFzaW4oZi9kKSpzLXAsaT1NYXRoLnNxcnQoZCpkLWYqZikpO3ZhciBtPTE4MC1hLTIqcCxnPShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLGkpKSpzLHY9KE1hdGguYXRhbjIoaCx1KS1NYXRoLmF0YW4yKGMsLWkpKSpzO3JldHVybiBiKHJbMF0sclsxXSxhLGcpPD1iKHJbMF0sclsxXSxtLHYpP1thLGcsclsyXV06W20sdixyWzJdXX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPV8oci10KSxhPV8obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1yKm8saT10LnNsaWNlKCksYT0wPT09ZT8xOjAscz0yPT09ZT8xOjIsbD1NYXRoLmNvcyhuKSxjPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qbC10W3NdKmMsaVtzXT10W3NdKmwrdFthXSpjLGl9ZnVuY3Rpb24gVCh0KXtyZXR1cm5bTWF0aC5hdGFuMigyKih0WzBdKnRbMV0rdFsyXSp0WzNdKSwxLTIqKHRbMV0qdFsxXSt0WzJdKnRbMl0pKSpzLE1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLDIqKHRbMF0qdFsyXS10WzNdKnRbMV0pKSkpKnMsTWF0aC5hdGFuMigyKih0WzBdKnRbM10rdFsxXSp0WzJdKSwxLTIqKHRbMl0qdFsyXSt0WzNdKnRbM10pKSpzXX1mdW5jdGlvbiBrKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9oOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCJAcGxvdGx5L2QzIjo1OH1dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO3IuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIWkpcmV0dXJuW107Zm9yKHZhciBhPWkuYXR0cixvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsWzBdLnRyYWNlW2FdPT09ciYmby5wdXNoKGwpfXJldHVybiBvfSxyLmdldE1vZHVsZUNhbGNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdO2lmKCEocj0ic3RyaW5nIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2ksdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2kucHVzaChzKTphLnB1c2gocykpfXJldHVybltpLGFdfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBhLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoImdsMmQiPT09ZSl7dmFyIHU9ci5tYXRjaChpKTtvPSJ4Iit1WzFdLHM9InkiK3VbMl19Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspYT10W2ZdLCJnbDJkIj09PWUmJm4udHJhY2VJcyhhLCJnbDJkIik/YVtsWzBdXT09PW8mJmFbbFsxXV09PT1zJiZjLnB1c2goYSk6YVtsXT09PXImJmMucHVzaChhKTtyZXR1cm4gY319LHsiLi4vcmVnaXN0cnkiOjYzMywiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo1NTZ9XSw1ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtY2hhbmdlIiksaT10KCJtb3VzZS13aGVlbCIpLGE9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iiksbz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5wbG90PWUsdGhpcy5tb3VzZUxpc3RlbmVyPW51bGwsdGhpcy53aGVlbExpc3RlbmVyPW51bGwsdGhpcy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdGhpcy5sYXN0UG9zPVswLDBdLHRoaXMuYm94RW5hYmxlZD0hMSx0aGlzLmJveEluaXRlZD0hMSx0aGlzLmJveFN0YXJ0PVswLDBdLHRoaXMuYm94RW5kPVswLDBdLHRoaXMuZHJhZ1N0YXJ0PVswLDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vdXNlQ29udGFpbmVyLHI9dC5nbHBsb3QsYz1uZXcgbChlLHIpO2Z1bmN0aW9uIHUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiBmKGUsbixpKXt2YXIgYSxzLGw9dC5jYWxjRGF0YUJveCgpLGY9ci52aWV3Qm94LGg9Yy5sYXN0UG9zWzBdLHA9Yy5sYXN0UG9zWzFdLGQ9by5NSU5EUkFHKnIucGl4ZWxSYXRpbyxtPW8uTUlOWk9PTSpyLnBpeGVsUmF0aW87ZnVuY3Rpb24gZyhlLHIsbil7dmFyIGk9TWF0aC5taW4ocixuKSxhPU1hdGgubWF4KHIsbik7aSE9PWE/KGxbZV09aSxsW2UrMl09YSxjLmRhdGFCb3g9bCx0LnNldFJhbmdlcyhsKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9c3dpdGNoKG4qPXIucGl4ZWxSYXRpbyxpKj1yLnBpeGVsUmF0aW8saT1mWzNdLWZbMV0taSx0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6aWYoZSl7dmFyIHY9bi8oZlsyXS1mWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oZlszXS1mWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT12LGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPXYsYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxtLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8bTtpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJihnKDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJihnKDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oaC1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxmKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLChmdW5jdGlvbih0KXt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7ZigwLHJbMF0sclsxXSksZigxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtmKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2YoMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSwoZnVuY3Rpb24oZSxuKXtpZighdC5zY3JvbGxab29tKXJldHVybiExO3ZhciBpPXQuY2FsY0RhdGFCb3goKSxhPXIudmlld0JveCxvPWMubGFzdFBvc1swXSxzPWMubGFzdFBvc1sxXSxsPU1hdGguZXhwKDUqbi8oYVszXS1hWzFdKSksZj1vLyhhWzJdLWFbMF0pKihpWzJdLWlbMF0pK2lbMF0saD1zLyhhWzNdLWFbMV0pKihpWzNdLWlbMV0pK2lbMV07cmV0dXJuIGlbMF09KGlbMF0tZikqbCtmLGlbMl09KGlbMl0tZikqbCtmLGlbMV09KGlbMV0taCkqbCtoLGlbM109KGlbM10taCkqbCtoLHQuc2V0UmFuZ2VzKGkpLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCksITB9KSwhMCksY319LHsiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NTU2LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjIyNCwibW91c2UtY2hhbmdlIjoyMzYsIm1vdXNlLWV2ZW50LW9mZnNldCI6MjM3LCJtb3VzZS13aGVlbCI6MjM5fV0sNTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gYSh0KXt0aGlzLnNjZW5lPXQsdGhpcy5nbD10LmdsLHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zY3JlZW5Cb3g9WzAsMCwxLDFdLHRoaXMudmlld0JveD1bMCwwLDEsMV0sdGhpcy5kYXRhQm94PVstMSwtMSwxLDFdLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITEsITEsITEsITFdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsxLDEsMSwxXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tzPVtbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxzPVsieCIsInkiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9IiIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PSJzYW5zLXNlcmlmIix0aGlzLnRpdGxlU2l6ZT0xOCx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsLjVdLFswLDAsMCwuNV1dLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgbz1hLnByb3RvdHlwZSxzPVsieGF4aXMiLCJ5YXhpcyJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxmLGgscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxoPTA7aDwyOysraCl7dmFyIGQ9KGU9c1toXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT8iIjpyLnRpdGxlLnRleHQscD0wO3A8PTI7cCs9Mil0aGlzLmxhYmVsRW5hYmxlW2grcF09ITEsdGhpcy5sYWJlbHNbaCtwXT1uLHRoaXMubGFiZWxDb2xvcltoK3BdPWkoci50aXRsZS5mb250LmNvbG9yKSx0aGlzLmxhYmVsRm9udFtoK3BdPXIudGl0bGUuZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbaCtwXT1yLnRpdGxlLmZvbnQuc2l6ZSx0aGlzLmxhYmVsUGFkW2grcF09dGhpcy5nZXRMYWJlbFBhZChlLHIpLHRoaXMudGlja0VuYWJsZVtoK3BdPSExLHRoaXMudGlja0NvbG9yW2grcF09aSgoci50aWNrZm9udHx8e30pLmNvbG9yKSx0aGlzLnRpY2tBbmdsZVtoK3BdPSJhdXRvIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtoK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2grcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbaCtwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbaCtwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbaCtwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltoK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2grcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoImFsbCIpOiEhYSxmPWM/ImFsbHRpY2tzIj09PWE6LTEhPT1TdHJpbmcoYSkuaW5kZXhPZigidGlja3MiKSxvP3RoaXMubGFiZWxFbmFibGVbaF09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbaCsyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbaF09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2grMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2hdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoKzJdPXIuc2hvd2xpbmUpLChvfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaF09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtoKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbaF09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbaF09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2hdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbaF09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbaF09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtoXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/ImJvdHRvbSI9PT1yOiJ5YXhpcyI9PT10PyJsZWZ0Ij09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1yOiJ5YXhpcyI9PT10PyJyaWdodCI9PT1yOnZvaWQgMH0sby5nZXRMYWJlbFBhZD1mdW5jdGlvbih0LGUpe3ZhciByPWUudGl0bGUuZm9udC5zaXplLG49ZS5zaG93dGlja2xhYmVscztyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDoieWF4aXMiPT09dD8icmlnaHQiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm4ib3V0c2lkZSI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuImluc2lkZSI9PT10LnRpY2tzPy1lOmV9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyMywiLi4vY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCl7dmFyIGM9dSh0LCJnbDJkIixvKTswPT09Yy5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGE9aS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjphLHg6MCx5OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxpLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo0MDIsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0NzUsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vY2FydGVzaWFuIjo1NjMsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo1NDcsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjU1NiwiLi4vZ2V0X2RhdGEiOjU4OCwiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYwNSwiLi9zY2VuZTJkIjo1OTJ9XSw1OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfcGxvdDJkLGM9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfc3Bpa2VzMmQsdT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zZWxlY3RfYm94LGY9dCgid2ViZ2wtY29udGV4dCIpLGg9dCgiLi9jb252ZXJ0IikscD10KCIuL2NhbWVyYSIpLGQ9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIiksbT10KCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxnPW0uZW5mb3JjZSx2PW0uY2xlYW4seT10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UseD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxiPXguZHJhd01vZGUsXz14LnNlbGVjdE1vZGUsdz1bInhheGlzIiwieWF4aXMiXSxUPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ZnVuY3Rpb24gayh0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuc2Nyb2xsWm9vbT10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbix0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy51cGRhdGVSZWZzKGUpLHRoaXMubWFrZUZyYW1ld29yaygpLHRoaXMuc3RvcHBlZHx8KHRoaXMuZ2xwbG90T3B0aW9ucz1oKHRoaXMpLHRoaXMuZ2xwbG90T3B0aW9ucy5tZXJnZShlKSx0aGlzLmdscGxvdD1sKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5jYW1lcmE9cCh0aGlzKSx0aGlzLnRyYWNlcz17fSx0aGlzLnNwaWtlcz1jKHRoaXMuZ2xwbG90KSx0aGlzLnNlbGVjdEJveD11KHRoaXMuZ2xwbG90LHtpbm5lckZpbGw6ITEsb3V0ZXJGaWxsOiEwfSksdGhpcy5sYXN0QnV0dG9uU3RhdGU9MCx0aGlzLnBpY2tSZXN1bHQ9bnVsbCx0aGlzLmlzTW91c2VPdmVyPSEwLHRoaXMuc3RvcHBlZD0hMSx0aGlzLnJlZHJhdz10aGlzLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlZHJhdygpKX1lLmV4cG9ydHM9azt2YXIgQT1rLnByb3RvdHlwZTtBLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaT1mKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1pfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1mb2N1cyIpLGU9Zih7Y2FudmFzOnQscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMH0pO2lmKCFlKXJldHVybiBkKHRoaXMpLHZvaWQodGhpcy5zdG9wcGVkPSEwKTt0aGlzLmNhbnZhcz10LHRoaXMuZ2w9ZX12YXIgcj10aGlzLmNhbnZhcztyLnN0eWxlLndpZHRoPSIxMDAlIixyLnN0eWxlLmhlaWdodD0iMTAwJSIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLnVwZGF0ZVNpemUocik7dmFyIGE9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLmhlaWdodD0iMTAwJSIsYS5zdHlsZVsiei1pbmRleCJdPTIwLGEuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLXBpY2siKTt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKGEpLHMuYXBwZW5kQ2hpbGQobyk7dmFyIGw9dGhpcztvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSExLGwudW5ob3ZlcigpfSkpLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSkpfSxBLnRvSW1hZ2U9ZnVuY3Rpb24odCl7dHx8KHQ9InBuZyIpLHRoaXMuc3RvcHBlZD0hMCx0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmNsZWFyQ29sb3IoMSwxLDEsMCksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5zZXREaXJ0eSgpLHRoaXMuZ2xwbG90LmRyYXcoKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtmLndpZHRoPXIsZi5oZWlnaHQ9aTt2YXIgaCxwPWYuZ2V0Q29udGV4dCgiMmQiKSxkPXAuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7c3dpdGNoKGQuZGF0YS5zZXQoYSkscC5wdXRJbWFnZURhdGEoZCwwLDApLHQpe2Nhc2UianBlZyI6aD1mLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6aD1mLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6aD1mLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksaH0sQS51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuY2FudmFzKTt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLmZ1bGxMYXlvdXQsbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0wfE1hdGguY2VpbChlKm4pLG89MHxNYXRoLmNlaWwoZSppKTtyZXR1cm4gdC53aWR0aD09PWEmJnQuaGVpZ2h0PT09b3x8KHQud2lkdGg9YSx0LmhlaWdodD1vKSx0fSxBLmNvbXB1dGVUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLnhheGlzLnNldFNjYWxlKCksdGhpcy55YXhpcy5zZXRTY2FsZSgpO2Zvcih2YXIgdD1bby5jYWxjVGlja3ModGhpcy54YXhpcyksby5jYWxjVGlja3ModGhpcy55YXhpcyldLGU9MDtlPDI7KytlKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7KytyKXRbZV1bcl0udGV4dD10W2VdW3JdLnRleHQrIiI7cmV0dXJuIHR9LEEudXBkYXRlUmVmcz1mdW5jdGlvbih0KXt0aGlzLmZ1bGxMYXlvdXQ9dDt2YXIgZT10aGlzLmlkLm1hdGNoKFQpLHI9InhheGlzIitlWzFdLG49InlheGlzIitlWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSxBLnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dCxpPXt9LG89aVtlLl9uYW1lKyIucmFuZ2UiXT1lLnJhbmdlLnNsaWNlKCkscz1pW3IuX25hbWUrIi5yYW5nZSJdPXIucmFuZ2Uuc2xpY2UoKTtpW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxpW3IuX25hbWUrIi5hdXRvcmFuZ2UiXT1yLmF1dG9yYW5nZSxhLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKTt2YXIgbD1uW2UuX25hbWVdO2wucmFuZ2U9byxsLmF1dG9yYW5nZT1lLmF1dG9yYW5nZTt2YXIgYz1uW3IuX25hbWVdO2MucmFuZ2U9cyxjLmF1dG9yYW5nZT1yLmF1dG9yYW5nZSxpLmxhc3RJbnB1dFRpbWU9dGhpcy5jYW1lcmEubGFzdElucHV0VGltZSx0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaSl9LEEuY2FtZXJhQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FtZXJhO3RoaXMuZ2xwbG90LnNldERhdGFCb3godGhpcy5jYWxjRGF0YUJveCgpKTt2YXIgZT10aGlzLmNvbXB1dGVUaWNrTWFya3MoKTsoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDI7KytyKXt2YXIgbj10W3JdLGk9ZVtyXTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKWlmKG5bYV0ueCE9PWlbYV0ueClyZXR1cm4hMH1yZXR1cm4hMX0pKGUsdGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzKSYmKHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcz1lLHRoaXMuZ2xwbG90T3B0aW9ucy5kYXRhQm94PXQuZGF0YUJveCx0aGlzLmdscGxvdC51cGRhdGUodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmhhbmRsZUFubm90YXRpb25zKCkpfSxBLmhhbmRsZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLmZ1bGxMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24ueHJlZj09PXRoaXMueGF4aXMuX2lkJiZuLnlyZWY9PT10aGlzLnlheGlzLl9pZCYmYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKHQscil9fSxBLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmdscGxvdCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pKSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LEEucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnIuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpcyxfc2l6ZTpyLl9zaXplfX07dihzLHRoaXMueGF4aXMpLHYocyx0aGlzLnlheGlzKTt2YXIgbCxjLHU9ci5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLGg9dGhpcy55YXhpcy5kb21haW47Zm9yKG8udmlld0JveD1bdS5sK2ZbMF0qdS53LHUuYitoWzBdKnUuaCxpLXUuci0oMS1mWzFdKSp1LncsYS11LnQtKDEtaFsxXSkqdS5oXSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLndpZHRoPXUudyooZlsxXS1mWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2ZbMF0qdS53KyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS50b3A9dS50KygxLWhbMV0pKnUuaCsicHgiLGM9MDtjPDI7KytjKShsPXRoaXNbd1tjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7ZyhzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LEEuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LEEuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LEEudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSkpfSxBLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe18odCl8fGIodCk/KHRoaXMucGlja0NhbnZhcy5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIpOih0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj0icGFuIj09PXQ/Im1vdmUiOiJ6b29tIj09PXQ/ImNyb3NzaGFpciI6bnVsbH0sQS5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O3MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSxBLmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxsPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmInpvb20iPT09aS5kcmFnbW9kZSl7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMDtmb3IodmFyIGM9dGhpcy5zZWxlY3RCb3guc2VsZWN0Qm94PVtNYXRoLm1pbihlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1pbihlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKSxNYXRoLm1heChlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1heChlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKV0sdT0wO3U8Mjt1KyspZS5ib3hTdGFydFt1XT09PWUuYm94RW5kW3VdJiYoY1t1XT10LmRhdGFCb3hbdV0sY1t1KzJdPXQuZGF0YUJveFt1KzJdKTt0LnNldERpcnR5KCl9ZWxzZSBpZighZS5wYW5uaW5nJiZ0aGlzLmlzTW91c2VPdmVyKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSExO3ZhciBmPWkuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixwPXRoaXMueWF4aXMuZG9tYWluLGQ9KGE9dC5waWNrKG8vdC5waXhlbFJhdGlvK2YubCtoWzBdKmYudyxsL3QucGl4ZWxSYXRpby0oZi50KygxLXBbMV0pKmYuaCkpKSYmYS5vYmplY3QuX3RyYWNlLmhhbmRsZVBpY2soYSk7aWYoZCYmbiYmdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2NsaWNrIiksYSYmInNraXAiIT09YS5vYmplY3QuX3RyYWNlLmhvdmVyaW5mbyYmaS5ob3Zlcm1vZGUmJmQmJighdGhpcy5sYXN0UGlja1Jlc3VsdHx8dGhpcy5sYXN0UGlja1Jlc3VsdC50cmFjZVVpZCE9PWQudHJhY2UudWlkfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFswXSE9PWQuZGF0YUNvb3JkWzBdfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFsxXSE9PWQuZGF0YUNvb3JkWzFdKSl7dmFyIG09ZDt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpkLnRyYWNlP2QudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOmQuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksbS5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihkLCJwbG90bHlfaG92ZXIiKTt2YXIgZz10aGlzLmZ1bGxEYXRhW20udHJhY2UuaW5kZXhdfHx7fSx2PW0ucG9pbnRJbmRleCx5PXMuY2FzdEhvdmVyaW5mbyhnLGksdik7aWYoeSYmImFsbCIhPT15KXt2YXIgeD15LnNwbGl0KCIrIik7LTE9PT14LmluZGV4T2YoIngiKSYmKG0udHJhY2VDb29yZFswXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ5IikmJihtLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieiIpJiYobS50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInRleHQiKSYmKG0udGV4dExhYmVsPXZvaWQgMCksLTE9PT14LmluZGV4T2YoIm5hbWUiKSYmKG0ubmFtZT12b2lkIDApfXMubG9uZUhvdmVyKHt4Om0uc2NyZWVuQ29vcmRbMF0seTptLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ4YXhpcyIsbS50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieWF4aXMiLG0udHJhY2VDb29yZFsxXSksekxhYmVsOm0udHJhY2VDb29yZFsyXSx0ZXh0Om0udGV4dExhYmVsLG5hbWU6bS5uYW1lLGNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiYmdjb2xvciIpfHxtLmNvbG9yLGJvcmRlckNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImFsaWduIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LEEudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSxBLmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLCJob3ZlciIpLnRleHR9fX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMTksIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzc5LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NTIwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjU1NiwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo1NTcsIi4vY2FtZXJhIjo1ODksIi4vY29udmVydCI6NTkwLCJ3ZWJnbC1jb250ZXh0IjozMjZ9XSw1OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ociwiZ2wzZCIscyksYz1lW3NdLHU9Yy5jYW1lcmEsZj1jLl9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9ZiksZi52aWV3SW5pdGlhbHx8KGYudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxmLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc2NlbmUudXBkYXRlRngoZS5kcmFnbW9kZSxlLmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo0MDIsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0NzUsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uL2dldF9kYXRhIjo1ODgsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjU5NCwiLi9sYXlvdXQvZGVmYXVsdHMiOjU5OCwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjU5OSwiLi9zY2VuZSI6NjAzfV0sNTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOnt0ZXh0OmkudGl0bGUudGV4dCxmb250OmkudGl0bGUuZm9udH0sdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6YSh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGFuaW06ITF9KSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6aS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NH1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F4aXNfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZjtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixvLHQsZSl9Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBkPWNbcF07dT10W2RdfHx7fSwoZj1hLm5ld0NvbnRhaW5lcihlLGQpKS5faWQ9ZFswXStyLnNjZW5lLGYuX25hbWU9ZCxzKHUsZixoLHIpLGwodSxmLGgse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLG5vVGlja3NvbjohMCxub1RpY2tsYWJlbG1vZGU6ITAsbm9UaWNrbGFiZWxzdGVwOiEwLG5vVGlja2xhYmVscG9zaXRpb246ITAsbm9UaWNrbGFiZWxvdmVyZmxvdzohMCxiZ0NvbG9yOnIuYmdDb2xvcixjYWxlbmRhcjpyLmNhbGVuZGFyfSxyLmZ1bGxMYXlvdXQpLGgoImdyaWRjb2xvciIsbihmLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGgoInRpdGxlLnRleHQiLGRbMF0pLGYuc2V0U2NhbGU9aS5ub29wLGgoInNob3dzcGlrZXMiKSYmKGgoInNwaWtlc2lkZXMiKSxoKCJzcGlrZXRoaWNrbmVzcyIpLGgoInNwaWtlY29sb3IiLGYuY29sb3IpKSxoKCJzaG93YXhlc2xhYmVscyIpLGgoInNob3diYWNrZ3JvdW5kIikmJmgoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo0OTgsIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjU1MSwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiOjU3NywiLi9heGlzX2F0dHJpYnV0ZXMiOjU5NSx0aW55Y29sb3IyOjMwN31dLDU5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bIk9wZW4gU2FucyIsIk9wZW4gU2FucyIsIk9wZW4gU2FucyJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5fbWV0YT9pLnRlbXBsYXRlU3RyaW5nKG8udGl0bGUudGV4dCx0Ll9tZXRhKTpvLnRpdGxlLnRleHQsImZvbnQiaW4gby50aXRsZSYmKG8udGl0bGUuZm9udC5jb2xvciYmKHRoaXMubGFiZWxDb2xvcltyXT1uKG8udGl0bGUuZm9udC5jb2xvcikpLG8udGl0bGUuZm9udC5mYW1pbHkmJih0aGlzLmxhYmVsRm9udFtyXT1vLnRpdGxlLmZvbnQuZmFtaWx5KSxvLnRpdGxlLmZvbnQuc2l6ZSYmKHRoaXMubGFiZWxTaXplW3JdPW8udGl0bGUuZm9udC5zaXplKSksInNob3dsaW5lImluIG8mJih0aGlzLmxpbmVFbmFibGVbcl09by5zaG93bGluZSksImxpbmVjb2xvciJpbiBvJiYodGhpcy5saW5lQ29sb3Jbcl09bihvLmxpbmVjb2xvcikpLCJsaW5ld2lkdGgiaW4gbyYmKHRoaXMubGluZVdpZHRoW3JdPW8ubGluZXdpZHRoKSwic2hvd2dyaWQiaW4gbyYmKHRoaXMuZ3JpZEVuYWJsZVtyXT1vLnNob3dncmlkKSwiZ3JpZGNvbG9yImluIG8mJih0aGlzLmdyaWRDb2xvcltyXT1uKG8uZ3JpZGNvbG9yKSksImdyaWR3aWR0aCJpbiBvJiYodGhpcy5ncmlkV2lkdGhbcl09by5ncmlkd2lkdGgpLCJsb2ciPT09by50eXBlP3RoaXMuemVyb0VuYWJsZVtyXT0hMToiemVyb2xpbmUiaW4gbyYmKHRoaXMuemVyb0VuYWJsZVtyXT1vLnplcm9saW5lKSwiemVyb2xpbmVjb2xvciJpbiBvJiYodGhpcy56ZXJvTGluZUNvbG9yW3JdPW4oby56ZXJvbGluZWNvbG9yKSksInplcm9saW5ld2lkdGgiaW4gbyYmKHRoaXMuemVyb0xpbmVXaWR0aFtyXT1vLnplcm9saW5ld2lkdGgpLCJ0aWNrcyJpbiBvJiZvLnRpY2tzP3RoaXMubGluZVRpY2tFbmFibGVbcl09ITA6dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMSwidGlja2xlbiJpbiBvJiYodGhpcy5saW5lVGlja0xlbmd0aFtyXT10aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbcl09by50aWNrbGVuKSwidGlja2NvbG9yImluIG8mJih0aGlzLmxpbmVUaWNrQ29sb3Jbcl09bihvLnRpY2tjb2xvcikpLCJ0aWNrd2lkdGgiaW4gbyYmKHRoaXMubGluZVRpY2tXaWR0aFtyXT1vLnRpY2t3aWR0aCksInRpY2thbmdsZSJpbiBvJiYodGhpcy50aWNrQW5nbGVbcl09ImF1dG8iPT09by50aWNrYW5nbGU/LTM2MDA6TWF0aC5QSSotby50aWNrYW5nbGUvMTgwKSwic2hvd3RpY2tsYWJlbHMiaW4gbyYmKHRoaXMudGlja0VuYWJsZVtyXT1vLnNob3d0aWNrbGFiZWxzKSwidGlja2ZvbnQiaW4gbyYmKG8udGlja2ZvbnQuY29sb3ImJih0aGlzLnRpY2tDb2xvcltyXT1uKG8udGlja2ZvbnQuY29sb3IpKSxvLnRpY2tmb250LmZhbWlseSYmKHRoaXMudGlja0ZvbnRbcl09by50aWNrZm9udC5mYW1pbHkpLG8udGlja2ZvbnQuc2l6ZSYmKHRoaXMudGlja1NpemVbcl09by50aWNrZm9udC5zaXplKSksIm1pcnJvciJpbiBvPy0xIT09WyJ0aWNrcyIsImFsbCIsImFsbHRpY2tzIl0uaW5kZXhPZihvLm1pcnJvcik/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITAsdGhpcy5saW5lTWlycm9yW3JdPSEwKTohMD09PW8ubWlycm9yPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMCk6KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSExKTp0aGlzLmxpbmVNaXJyb3Jbcl09ITEsInNob3diYWNrZ3JvdW5kImluIG8mJiExIT09by5zaG93YmFja2dyb3VuZD8odGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSEwLHRoaXMuYmFja2dyb3VuZENvbG9yW3JdPW4oby5iYWNrZ3JvdW5kY29sb3IpKTp0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpOih0aGlzLnRpY2tFbmFibGVbcl09ITEsdGhpcy5sYWJlbEVuYWJsZVtyXT0hMSx0aGlzLmxpbmVFbmFibGVbcl09ITEsdGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMSx0aGlzLmdyaWRFbmFibGVbcl09ITEsdGhpcy56ZXJvRW5hYmxlW3JdPSExLHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbztyZXR1cm4gci5tZXJnZSh0LGUpLHJ9fSx7Ii4uLy4uLy4uL2xpYiI6NDk4LCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjN9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliIiksaT10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO2Z1bmN0aW9uIHUodCxlLHIsbil7Zm9yKHZhciBvPXIoImJnY29sb3IiKSxsPWkuY29tYmluZShvLG4ucGFwZXJfYmdjb2xvciksdT1bInVwIiwiY2VudGVyIiwiZXllIl0sZj0wO2Y8dS5sZW5ndGg7ZisrKXIoImNhbWVyYS4iK3VbZl0rIi54IikscigiY2FtZXJhLiIrdVtmXSsiLnkiKSxyKCJjYW1lcmEuIit1W2ZdKyIueiIpO3IoImNhbWVyYS5wcm9qZWN0aW9uLnR5cGUiKTt2YXIgaD0hIXIoImFzcGVjdHJhdGlvLngiKSYmISFyKCJhc3BlY3RyYXRpby55IikmJiEhcigiYXNwZWN0cmF0aW8ueiIpLHA9cigiYXNwZWN0bW9kZSIsaD8ibWFudWFsIjoiYXV0byIpO2h8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSwibWFudWFsIj09PXAmJihlLmFzcGVjdG1vZGU9ImF1dG8iKSx0LmFzcGVjdG1vZGU9ZS5hc3BlY3Rtb2RlKTt2YXIgZD1jKG4uZnVsbERhdGEsImdsM2QiLG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZCxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixhdXRvdHlwZW51bWJlcnNEZmx0Om4uYXV0b3R5cGVudW1iZXJzRGZsdCxmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbik7dmFyIG09bi5nZXREZmx0RnJvbUxheW91dCgiZHJhZ21vZGUiKTtpZighMSE9PW0mJiFtKWlmKG09Im9yYml0Iix0LmNhbWVyYSYmdC5jYW1lcmEudXApe3ZhciBnPXQuY2FtZXJhLnVwLngsdj10LmNhbWVyYS51cC55LHk9dC5jYW1lcmEudXAuejswIT09eSYmKGcmJnYmJnk/eS9NYXRoLnNxcnQoZypnK3Yqdit5KnkpPi45OTkmJihtPSJ0dXJudGFibGUiKTptPSJ0dXJudGFibGUiKX1lbHNlIG09InR1cm50YWJsZSI7cigiZHJhZ21vZGUiLG0pLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO28odCxlLHIse3R5cGU6ImdsM2QiLGF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czp1LGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmZ1bmN0aW9uKGUpe2lmKCFpKXJldHVybiBuLnZhbGlkYXRlKHRbZV0sbFtlXSk/dFtlXTp2b2lkIDB9LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uLy4uL2xpYiI6NDk4LCIuLi8uLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi8uLi9nZXRfZGF0YSI6NTg4LCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo2MjcsIi4vYXhpc19kZWZhdWx0cyI6NTk2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1OTl9XSw1OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm57eDp7dmFsVHlwZToibnVtYmVyIixkZmx0OnQsZWRpdFR5cGU6ImNhbWVyYSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDplLGVkaXRUeXBlOiJjYW1lcmEifSx6Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6cixlZGl0VHlwZToiY2FtZXJhIn0sZWRpdFR5cGU6ImNhbWVyYSJ9fWUuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oInNjZW5lIiwiLmFubm90YXRpb25zIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToicGxvdCJ9LGNhbWVyYTp7dXA6YShzKDAsMCwxKSx7fSksY2VudGVyOmEocygwLDAsMCkse30pLGV5ZTphKHMoMS4yNSwxLjI1LDEuMjUpLHt9KSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJzcGVjdGl2ZSIsIm9ydGhvZ3JhcGhpYyJdLGRmbHQ6InBlcnNwZWN0aXZlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbWVyYSJ9LGRvbWFpbjppKHtuYW1lOiJzY2VuZSIsZWRpdFR5cGU6InBsb3QifSksYXNwZWN0bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImN1YmUiLCJkYXRhIiwibWFudWFsIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7ImFzcGVjdHJhdGlvLngiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueSI6dm9pZCAwLCJhc3BlY3RyYXRpby56Ijp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7YXNwZWN0bW9kZToibWFudWFsIn19LHhheGlzOm4seWF4aXM6bix6YXhpczpuLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxlZGl0VHlwZToicGxvdCJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvc2VzdCIsITFdLGRmbHQ6ImNsb3Nlc3QiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJwbG90IixfZGVwcmVjYXRlZDp7Y2FtZXJhcG9zaXRpb246e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYW1lcmEifX19fSx7Ii4uLy4uLy4uL2xpYiI6NDk4LCIuLi8uLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL2RvbWFpbiI6NTc5LCIuL2F4aXNfYXR0cmlidXRlcyI6NTk1fV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxpPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gYSgpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWEucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbaVtlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPW4oci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7cmV0dXJuIGUubWVyZ2UodCksZX19LHsiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTIzfV0sNjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5heGVzT3B0aW9ucyxyPXQuZ2xwbG90LmF4ZXNQaXhlbHMscz10LmZ1bGxTY2VuZUxheW91dCxsPVtbXSxbXSxbXV0sYz0wO2M8MzsrK2Mpe3ZhciB1PXNbYVtjXV07aWYodS5fbGVuZ3RoPShyW2NdLmhpLXJbY10ubG8pKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQvdC5kYXRhU2NhbGVbY10sTWF0aC5hYnModS5fbGVuZ3RoKT09PTEvMHx8aXNOYU4odS5fbGVuZ3RoKSlsW2NdPVtdO2Vsc2V7dS5faW5wdXRfcmFuZ2U9dS5yYW5nZS5zbGljZSgpLHUucmFuZ2VbMF09cltjXS5sby90LmRhdGFTY2FsZVtjXSx1LnJhbmdlWzFdPXJbY10uaGkvdC5kYXRhU2NhbGVbY10sdS5fbT0xLyh0LmRhdGFTY2FsZVtjXSpyW2NdLnBpeGVsc1BlckRhdGFVbml0KSx1LnJhbmdlWzBdPT09dS5yYW5nZVsxXSYmKHUucmFuZ2VbMF0tPTEsdS5yYW5nZVsxXSs9MSk7dmFyIGY9dS50aWNrbW9kZTtpZigiYXV0byI9PT11LnRpY2ttb2RlKXt1LnRpY2ttb2RlPSJsaW5lYXIiO3ZhciBoPXUubnRpY2tzfHxpLmNvbnN0cmFpbih1Ll9sZW5ndGgvNDAsNCw5KTtuLmF1dG9UaWNrcyh1LE1hdGguYWJzKHUucmFuZ2VbMV0tdS5yYW5nZVswXSkvaCl9Zm9yKHZhciBwPW4uY2FsY1RpY2tzKHUse21zVVRDOiEwfSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1mfX1lLnRpY2tzPWw7Zm9yKGM9MDtjPDM7KytjKXtvW2NdPS41Kih0LmdscGxvdC5ib3VuZHNbMF1bY10rdC5nbHBsb3QuYm91bmRzWzFdW2NdKTtmb3IoZD0wO2Q8MjsrK2QpZS5ib3VuZHNbZF1bY109dC5nbHBsb3QuYm91bmRzW2RdW2NdfXQuY29udG91ckxldmVscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX0obCl9O3ZhciBuPXQoIi4uLy4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbz1bMCwwLDBdfSx7Ii4uLy4uLy4uL2xpYiI6NDk4LCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyI6NTQ5fV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LnByb2plY3Rpb24sbih0LnZpZXcsbih0Lm1vZGVsLFtlWzBdLGVbMV0sZVsyXSwxXSkpKX19LHt9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX3Bsb3QzZCxvPWEuY3JlYXRlQ2FtZXJhLHM9YS5jcmVhdGVTY2VuZSxsPXQoIndlYmdsLWNvbnRleHQiKSxjPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLHU9dCgiLi4vLi4vcmVnaXN0cnkiKSxmPXQoIi4uLy4uL2xpYiIpLGg9Zi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSxwPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZz10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSx2PXQoIi4vcHJvamVjdCIpLHk9dCgiLi9sYXlvdXQvY29udmVydCIpLHg9dCgiLi9sYXlvdXQvc3Bpa2VzIiksYj10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PSIwcHgiLGkuc3R5bGUud2lkdGg9aS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGkuc3R5bGVbInotaW5kZXgiXT0yMCxpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz15KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9eChlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKX12YXIgdz1fLnByb3RvdHlwZTt3LnByZXBhcmVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e2NhbnZhczp0aGlzLmNhbnZhcyxnbDp0aGlzLmdsLGdsT3B0aW9uczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOmgscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0sY29udGFpbmVyOnRoaXMuY29udGFpbmVyLGF4ZXM6dGhpcy5heGVzT3B0aW9ucyxzcGlrZXM6dGhpcy5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDp0aGlzLmNhbWVyYSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb307aWYodGhpcy5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0LmdsPWksdC5jYW52YXM9bn1yZXR1cm4gdH07dmFyIFQ9ITA7dy50cnlDcmVhdGVQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcmVwYXJlT3B0aW9ucygpLGU9ITA7dHJ5e3RoaXMuZ2xwbG90PXModCl9Y2F0Y2gocil7aWYodGhpcy5zdGF0aWNNb2RlfHwhVHx8aCllPSExO2Vsc2V7Zi53YXJuKFsid2ViZ2wgc2V0dXAgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byIsImZhbHNlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBjb25maWcuIiwiVGhlIG1vYmlsZS90YWJsZXQgZGV2aWNlIG1heSBub3QgYmUgZGV0ZWN0ZWQgYnkgaXMtbW9iaWxlIG1vZHVsZS4iLCJFbmFibGluZyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaW4gc2Vjb25kIGF0dGVtcHQgdG8gY3JlYXRlIHdlYmdsIHNjZW5lLi4uIl0uam9pbigiICIpKTt0cnl7aD10LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ITAsdGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtoPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hMSxlPSExfX19cmV0dXJuIFQ9ITEsZX0sdy5pbml0aWFsaXplR0xDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsZT0ib3J0aG9ncmFwaGljIj09PXQucHJvamVjdGlvbi50eXBlO3RoaXMuY2FtZXJhPW8odGhpcy5jb250YWluZXIse2NlbnRlcjpbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLGV5ZTpbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLHVwOlt0LnVwLngsdC51cC55LHQudXAuel0sX29ydGhvOmUsem9vbU1pbjouMDEsem9vbU1heDoxMDAsbW9kZToib3JiaXQifSl9LHcuaW5pdGlhbGl6ZUdMUGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodC5pbml0aWFsaXplR0xDYW1lcmEoKSwhdC50cnlDcmVhdGVQbG90KCkpcmV0dXJuIGcodCk7dC50cmFjZXM9e30sdC5tYWtlNHRoRGltZW5zaW9uKCk7dmFyIGU9dC5ncmFwaERpdixyPWUubGF5b3V0LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gdC5pc0NhbWVyYUNoYW5nZWQocikmJihlW3QuaWQrIi5jYW1lcmEiXT10LmdldENhbWVyYSgpKSx0LmlzQXNwZWN0Q2hhbmdlZChyKSYmKGVbdC5pZCsiLmFzcGVjdHJhdGlvIl09dC5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSwibWFudWFsIiE9PXJbdC5pZF0uYXNwZWN0bW9kZSYmKHQuZnVsbFNjZW5lTGF5b3V0LmFzcGVjdG1vZGU9clt0LmlkXS5hc3BlY3Rtb2RlPWVbdC5pZCsiLmFzcGVjdG1vZGUiXT0ibWFudWFsIikpLGV9LGk9ZnVuY3Rpb24odCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSl7dmFyIGU9bigpO3Quc2F2ZUxheW91dChyKSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dCIsZSl9fTtyZXR1cm4gdC5nbHBsb3QuY2FudmFzJiYodC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLChmdW5jdGlvbigpe2kodCl9KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwoZnVuY3Rpb24ocil7aWYoZS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkKXtpZih0LmNhbWVyYS5fb3J0aG8pe3ZhciBuPXIuZGVsdGFYPnIuZGVsdGFZPzEuMToxLzEuMSxhPXQuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCk7dC5nbHBsb3Quc2V0QXNwZWN0cmF0aW8oe3g6biphLngseTpuKmEueSx6Om4qYS56fSl9aSh0KX19KSwhIWMmJntwYXNzaXZlOiExfSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSYmMCE9PXQuY2FtZXJhLm1vdXNlTGlzdGVuZXIuYnV0dG9ucyl7dmFyIGU9bigpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixlKX19KSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsKGZ1bmN0aW9uKHIpe2UmJmUuZW1pdCYmZS5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OnIsbGF5ZXI6dC5pZH0pfSksITEpKSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbigpe3QucmVuZGVyKCl9LCEwfSx3LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuZ3JhcGhEaXYsbj1lLnN2Z0NvbnRhaW5lcixpPWUuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBhPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxvPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxzPWkud2lkdGgqYSxsPWkuaGVpZ2h0Km87bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwICIrcysiICIrbCksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscyksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGwpLGIoZSksZS5nbHBsb3QuYXhlcy51cGRhdGUoZS5heGVzT3B0aW9ucyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKGUudHJhY2VzKSx1PW51bGwsaD1lLmdscGxvdC5zZWxlY3Rpb24sbT0wO208Yy5sZW5ndGg7KyttKSJza2lwIiE9PSh0PWUudHJhY2VzW2NbbV1dKS5kYXRhLmhvdmVyaW5mbyYmdC5oYW5kbGVQaWNrKGgpJiYodT10KSx0LnNldENvbnRvdXJMZXZlbHMmJnQuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIGcodCxyLG4pe3ZhciBpPWUuZnVsbFNjZW5lTGF5b3V0W3QrImF4aXMiXTtyZXR1cm4ibG9nIiE9PWkudHlwZSYmKHI9aS5kMmwocikpLHAuaG92ZXJMYWJlbFRleHQoaSxyLG4pfWlmKG51bGwhPT11KXt2YXIgeT12KGUuZ2xwbG90LmNhbWVyYVBhcmFtcyxoLmRhdGFDb29yZGluYXRlKTt0PXUuZGF0YTt2YXIgeCxfPXIuX2Z1bGxEYXRhW3QuaW5kZXhdLHc9aC5pbmRleCxUPXt4TGFiZWw6ZygieCIsaC50cmFjZUNvb3JkaW5hdGVbMF0sdC54aG92ZXJmb3JtYXQpLHlMYWJlbDpnKCJ5IixoLnRyYWNlQ29vcmRpbmF0ZVsxXSx0Lnlob3ZlcmZvcm1hdCksekxhYmVsOmcoInoiLGgudHJhY2VDb29yZGluYXRlWzJdLHQuemhvdmVyZm9ybWF0KX0saz1kLmNhc3RIb3ZlcmluZm8oXyxlLmZ1bGxMYXlvdXQsdyksQT0oa3x8IiIpLnNwbGl0KCIrIiksTT1rJiYiYWxsIj09PWs7Xy5ob3ZlcnRlbXBsYXRlfHxNfHwoLTE9PT1BLmluZGV4T2YoIngiKSYmKFQueExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInkiKSYmKFQueUxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInoiKSYmKFQuekxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoInRleHQiKSYmKGgudGV4dExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoIm5hbWUiKSYmKHUubmFtZT12b2lkIDApKTt2YXIgUz1bXTsiY29uZSI9PT10LnR5cGV8fCJzdHJlYW10dWJlIj09PXQudHlwZT8oVC51TGFiZWw9ZygieCIsaC50cmFjZUNvb3JkaW5hdGVbM10sdC51aG92ZXJmb3JtYXQpLChNfHwtMSE9PUEuaW5kZXhPZigidSIpKSYmUy5wdXNoKCJ1OiAiK1QudUxhYmVsKSxULnZMYWJlbD1nKCJ5IixoLnRyYWNlQ29vcmRpbmF0ZVs0XSx0LnZob3ZlcmZvcm1hdCksKE18fC0xIT09QS5pbmRleE9mKCJ2IikpJiZTLnB1c2goInY6ICIrVC52TGFiZWwpLFQud0xhYmVsPWcoInoiLGgudHJhY2VDb29yZGluYXRlWzVdLHQud2hvdmVyZm9ybWF0KSwoTXx8LTEhPT1BLmluZGV4T2YoInciKSkmJlMucHVzaCgidzogIitULndMYWJlbCksVC5ub3JtTGFiZWw9aC50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKE18fC0xIT09QS5pbmRleE9mKCJub3JtIikpJiZTLnB1c2goIm5vcm06ICIrVC5ub3JtTGFiZWwpLCJzdHJlYW10dWJlIj09PXQudHlwZSYmKFQuZGl2ZXJnZW5jZUxhYmVsPWgudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChNfHwtMSE9PUEuaW5kZXhPZigiZGl2ZXJnZW5jZSIpKSYmUy5wdXNoKCJkaXZlcmdlbmNlOiAiK1QuZGl2ZXJnZW5jZUxhYmVsKSksaC50ZXh0TGFiZWwmJlMucHVzaChoLnRleHRMYWJlbCkseD1TLmpvaW4oIjxicj4iKSk6Imlzb3N1cmZhY2UiPT09dC50eXBlfHwidm9sdW1lIj09PXQudHlwZT8oVC52YWx1ZUxhYmVsPXAuaG92ZXJMYWJlbFRleHQoZS5fbW9ja0F4aXMsZS5fbW9ja0F4aXMuZDJsKGgudHJhY2VDb29yZGluYXRlWzNdKSx0LnZhbHVlaG92ZXJmb3JtYXQpLFMucHVzaCgidmFsdWU6ICIrVC52YWx1ZUxhYmVsKSxoLnRleHRMYWJlbCYmUy5wdXNoKGgudGV4dExhYmVsKSx4PVMuam9pbigiPGJyPiIpKTp4PWgudGV4dExhYmVsO3ZhciBFPXt4OmgudHJhY2VDb29yZGluYXRlWzBdLHk6aC50cmFjZUNvb3JkaW5hdGVbMV0sejpoLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOl8uX2lucHV0LGZ1bGxEYXRhOl8sY3VydmVOdW1iZXI6Xy5pbmRleCxwb2ludE51bWJlcjp3fTtkLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShFLF8sdyksdC5fbW9kdWxlLmV2ZW50RGF0YSYmKEU9Xy5fbW9kdWxlLmV2ZW50RGF0YShFLGgsXyx7fSx3KSk7dmFyIEw9e3BvaW50czpbRV19O2lmKGUuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSl7dmFyIEM9W107ZC5sb25lSG92ZXIoe3RyYWNlOl8seDooLjUrLjUqeVswXS95WzNdKSpzLHk6KC41LS41KnlbMV0veVszXSkqbCx4TGFiZWw6VC54TGFiZWwseUxhYmVsOlQueUxhYmVsLHpMYWJlbDpULnpMYWJlbCx0ZXh0OngsbmFtZTp1Lm5hbWUsY29sb3I6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJiZ2NvbG9yIil8fHUuY29sb3IsYm9yZGVyQ29sb3I6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJmb250LmZhbWlseSIpLGZvbnRTaXplOmQuY2FzdEhvdmVyT3B0aW9uKF8sdywiZm9udC5zaXplIiksZm9udENvbG9yOmQuY2FzdEhvdmVyT3B0aW9uKF8sdywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOmQuY2FzdEhvdmVyT3B0aW9uKF8sdywiYWxpZ24iKSxob3ZlcnRlbXBsYXRlOmYuY2FzdE9wdGlvbihfLHcsImhvdmVydGVtcGxhdGUiKSxob3ZlcnRlbXBsYXRlTGFiZWxzOmYuZXh0ZW5kRmxhdCh7fSxFLFQpLGV2ZW50RGF0YTpbRV19LHtjb250YWluZXI6bixnZDpyLGluT3V0X2Jib3g6Q30pLEUuYmJveD1DWzBdfWguYnV0dG9ucyYmaC5kaXN0YW5jZTw1P3IuZW1pdCgicGxvdGx5X2NsaWNrIixMKTpyLmVtaXQoInBsb3RseV9ob3ZlciIsTCksdGhpcy5vbGRFdmVudERhdGE9TH1lbHNlIGQubG9uZVVuaG92ZXIobiksdGhpcy5vbGRFdmVudERhdGEmJnIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHRoaXMub2xkRXZlbnREYXRhKSx0aGlzLm9sZEV2ZW50RGF0YT12b2lkIDA7ZS5kcmF3QW5ub3RhdGlvbnMoZSl9LHcucmVjb3ZlckNvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuZ2xwbG90LmRpc3Bvc2UoKTt2YXIgZT1mdW5jdGlvbigpe3QuZ2xwbG90LmdsLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk6dC5pbml0aWFsaXplR0xQbG90KCk/dC5wbG90LmFwcGx5KHQsdC5wbG90QXJncyk6Zi5lcnJvcigiQ2F0YXN0cm9waGljIGFuZCB1bnJlY292ZXJhYmxlIFdlYkdMIGVycm9yLiBDb250ZXh0IGxvc3QuIil9O3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX07dmFyIGs9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBBKHQsZSxyKXtmb3IodmFyIG49dC5mdWxsU2NlbmVMYXlvdXQsaT0wO2k8MztpKyspe3ZhciBhPWtbaV0sbz1hLmNoYXJBdCgwKSxzPW5bYV0sbD1lW29dLGM9ZVtvKyJjYWxlbmRhciJdLHU9ZVsiXyIrbysibGVuZ3RoIl07aWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKWZvcih2YXIgaCxwPTA7cDwodXx8bC5sZW5ndGgpO3ArKylpZihmLmlzQXJyYXlPclR5cGVkQXJyYXkobFtwXSkpZm9yKHZhciBkPTA7ZDxsW3BdLmxlbmd0aDsrK2QpaD1zLmQybChsW3BdW2RdLDAsYyksIWlzTmFOKGgpJiZpc0Zpbml0ZShoKSYmKHJbMF1baV09TWF0aC5taW4oclswXVtpXSxoKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0saCkpO2Vsc2UgaD1zLmQybChsW3BdLDAsYyksIWlzTmFOKGgpJiZpc0Zpbml0ZShoKSYmKHJbMF1baV09TWF0aC5taW4oclswXVtpXSxoKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0saCkpO2Vsc2UgclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLDApLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSx1LTEpfX13LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO3RoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5heGVzT3B0aW9ucy5tZXJnZShlLGMpLHRoaXMuc3Bpa2VPcHRpb25zLm1lcmdlKGMpLHRoaXMuc2V0Vmlld3BvcnQoYyksdGhpcy51cGRhdGVGeChjLmRyYWdtb2RlLGMuaG92ZXJtb2RlKSx0aGlzLmNhbWVyYS5lbmFibGVXaGVlbD10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2QsdGhpcy5nbHBsb3Quc2V0Q2xlYXJDb2xvcihtKGMuYmdjb2xvcikpLHRoaXMuc2V0Q29udmVydChzKSx0P0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk6dD1bXTt2YXIgZj1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmQSh0aGlzLG4sZik7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZnVsbFNjZW5lTGF5b3V0LG49ci5hbm5vdGF0aW9uc3x8W10saT0wO2k8MztpKyspZm9yKHZhciBhPWtbaV0sbz1hLmNoYXJBdCgwKSxzPXJbYV0sbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdO2lmKGMudmlzaWJsZSl7dmFyIHU9cy5yMmwoY1tvXSk7IWlzTmFOKHUpJiZpc0Zpbml0ZSh1KSYmKGVbMF1baV09TWF0aC5taW4oZVswXVtpXSx1KSxlWzFdW2ldPU1hdGgubWF4KGVbMV1baV0sdSkpfX19KHRoaXMsZik7dmFyIGg9WzEsMSwxXTtmb3Iobz0wO288MzsrK28pZlsxXVtvXT09PWZbMF1bb10/aFtvXT0xOmhbb109MS8oZlsxXVtvXS1mWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9aCx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYwIT09bi5fbGVuZ3RoJiYoKGk9dGhpcy50cmFjZXNbbi51aWRdKT9pLmRhdGEudHlwZT09PW4udHlwZT9pLnVwZGF0ZShuKTooaS5kaXNwb3NlKCksaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgcD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8cC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09cFthXSYmITA9PT10W29dLnZpc2libGUmJjAhPT10W29dLl9sZW5ndGgpY29udGludWUgdDsoaT10aGlzLnRyYWNlc1twW2FdXSkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1twW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmRhdGEuaW5kZXgtZS5fdHJhY2UuZGF0YS5pbmRleH0pKTt2YXIgZCxnPVtbMCwwLDBdLFswLDAsMF1dLHY9W10seT17fTtmb3IoYT0wO2E8MzsrK2Epe2lmKChsPShzPWNba1thXV0pLnR5cGUpaW4geT8oeVtsXS5hY2MqPWhbYV0seVtsXS5jb3VudCs9MSk6eVtsXT17YWNjOmhbYV0sY291bnQ6MX0scy5hdXRvcmFuZ2Upe2dbMF1bYV09MS8wLGdbMV1bYV09LTEvMDt2YXIgeD10aGlzLmdscGxvdC5vYmplY3RzLGI9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLF89cy5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIHc9eFtvXSxUPXcuYm91bmRzLE09dy5fdHJhY2UuZGF0YS5fcGFkfHwwOyJFcnJvckJhcnMiPT09dy5jb25zdHJ1Y3Rvci5uYW1lJiZzLl9sb3dlckxvZ0Vycm9yQm91bmQ/Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLHMuX2xvd2VyTG9nRXJyb3JCb3VuZCk6Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLFRbMF1bYV0vaFthXS1NKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sVFsxXVthXS9oW2FdK00pfWZvcihvPTA7bzxiLmxlbmd0aDtvKyspe3ZhciBTPWJbb107aWYoUy52aXNpYmxlKXt2YXIgRT1zLnIybChTW19dKTtnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sRSksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLEUpfX1pZigicmFuZ2Vtb2RlImluIHMmJiJ0b3plcm8iPT09cy5yYW5nZW1vZGUmJihnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sMCksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLDApKSxnWzBdW2FdPmdbMV1bYV0pZ1swXVthXT0tMSxnWzFdW2FdPTE7ZWxzZXt2YXIgTD1nWzFdW2FdLWdbMF1bYV07Z1swXVthXS09TC8zMixnWzFdW2FdKz1MLzMyfWlmKCJyZXZlcnNlZCI9PT1zLmF1dG9yYW5nZSl7dmFyIEM9Z1swXVthXTtnWzBdW2FdPWdbMV1bYV0sZ1sxXVthXT1DfX1lbHNle3ZhciBQPXMucmFuZ2U7Z1swXVthXT1zLnIybChQWzBdKSxnWzFdW2FdPXMucjJsKFBbMV0pfWdbMF1bYV09PT1nWzFdW2FdJiYoZ1swXVthXS09MSxnWzFdW2FdKz0xKSx2W2FdPWdbMV1bYV0tZ1swXVthXSx0aGlzLmdscGxvdC5zZXRCb3VuZHMoYSx7bWluOmdbMF1bYV0qaFthXSxtYXg6Z1sxXVthXSpoW2FdfSl9dmFyIEk9Yy5hc3BlY3Rtb2RlO2lmKCJjdWJlIj09PUkpZD1bMSwxLDFdO2Vsc2UgaWYoIm1hbnVhbCI9PT1JKXt2YXIgTz1jLmFzcGVjdHJhdGlvO2Q9W08ueCxPLnksTy56XX1lbHNle2lmKCJhdXRvIiE9PUkmJiJkYXRhIiE9PUkpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciB6PVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgRD15W2w9KHM9Y1trW2FdXSkudHlwZV07elthXT1NYXRoLnBvdyhELmFjYywxL0QuY291bnQpL2hbYV19ZD0iZGF0YSI9PT1JfHxNYXRoLm1heC5hcHBseShudWxsLHopL01hdGgubWluLmFwcGx5KG51bGwseik8PTQ/ejpbMSwxLDFdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9ZFswXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PWRbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1kWzJdLHRoaXMuZ2xwbG90LnNldEFzcGVjdHJhdGlvKGMuYXNwZWN0cmF0aW8pLHRoaXMudmlld0luaXRpYWwuYXNwZWN0cmF0aW98fCh0aGlzLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvPXt4OmMuYXNwZWN0cmF0aW8ueCx5OmMuYXNwZWN0cmF0aW8ueSx6OmMuYXNwZWN0cmF0aW8uen0pLHRoaXMudmlld0luaXRpYWwuYXNwZWN0bW9kZXx8KHRoaXMudmlld0luaXRpYWwuYXNwZWN0bW9kZT1jLmFzcGVjdG1vZGUpO3ZhciBSPWMuZG9tYWlufHxudWxsLEY9ZS5fc2l6ZXx8bnVsbDtpZihSJiZGKXt2YXIgQj10aGlzLmNvbnRhaW5lci5zdHlsZTtCLnBvc2l0aW9uPSJhYnNvbHV0ZSIsQi5sZWZ0PUYubCtSLnhbMF0qRi53KyJweCIsQi50b3A9Ri50KygxLVIueVsxXSkqRi5oKyJweCIsQi53aWR0aD1GLncqKFIueFsxXS1SLnhbMF0pKyJweCIsQi5oZWlnaHQ9Ri5oKihSLnlbMV0tUi55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nbHBsb3QmJih0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuZ2xwbG90PW51bGwpfSx3LmdldENhbWVyYT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmNhbWVyYS52aWV3LnJlY2FsY01hdHJpeCh0aGlzLmNhbWVyYS52aWV3Lmxhc3RUKCkpLHt1cDp7eDoodD10aGlzLmNhbWVyYSkudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvPyJvcnRob2dyYXBoaWMiOiJwZXJzcGVjdGl2ZSJ9fX0sdy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuY2FtZXJhO3RoaXMuY2FtZXJhLmxvb2tBdC5hcHBseSh0aGlzLFtbKGU9cikuZXllLngsZS5leWUueSxlLmV5ZS56XSxbZS5jZW50ZXIueCxlLmNlbnRlci55LGUuY2VudGVyLnpdLFtlLnVwLngsZS51cC55LGUudXAuel1dKSx0aGlzLmdscGxvdC5zZXRBc3BlY3RyYXRpbyh0LmFzcGVjdHJhdGlvKSwib3J0aG9ncmFwaGljIj09PXIucHJvamVjdGlvbi50eXBlIT09dGhpcy5jYW1lcmEuX29ydGhvJiYodGhpcy5nbHBsb3QucmVkcmF3KCksdGhpcy5nbHBsb3QuY2xlYXJSR0JBKCksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuaW5pdGlhbGl6ZUdMUGxvdCgpKX0sdy5pc0NhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDYW1lcmEoKSxyPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuY2FtZXJhIikuZ2V0KCk7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT1bInVwIiwiY2VudGVyIiwiZXllIl0sYT1bIngiLCJ5IiwieiJdO3JldHVybiBlW2lbcl1dJiZ0W2lbcl1dW2Fbbl1dPT09ZVtpW3JdXVthW25dXX12YXIgaT0hMTtpZih2b2lkIDA9PT1yKWk9ITA7ZWxzZXtmb3IodmFyIGE9MDthPDM7YSsrKWZvcih2YXIgbz0wO288MztvKyspaWYoIW4oZSxyLGEsbykpe2k9ITA7YnJlYWt9KCFyLnByb2plY3Rpb258fGUucHJvamVjdGlvbiYmZS5wcm9qZWN0aW9uLnR5cGUhPT1yLnByb2plY3Rpb24udHlwZSkmJihpPSEwKX1yZXR1cm4gaX0sdy5pc0FzcGVjdENoYW5nZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSxyPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKS5nZXQoKTtyZXR1cm4gdm9pZCAwPT09cnx8ci54IT09ZS54fHxyLnkhPT1lLnl8fHIueiE9PWUuen0sdy5zYXZlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXRoaXMuZnVsbExheW91dCxsPXRoaXMuaXNDYW1lcmFDaGFuZ2VkKHQpLGM9dGhpcy5pc0FzcGVjdENoYW5nZWQodCksaD1sfHxjO2lmKGgpe3ZhciBwPXt9O2lmKGwmJihlPXRoaXMuZ2V0Q2FtZXJhKCksbj0ocj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmNhbWVyYSIpKS5nZXQoKSxwW3RoaXMuaWQrIi5jYW1lcmEiXT1uKSxjJiYoaT10aGlzLmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLG89KGE9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpKS5nZXQoKSxwW3RoaXMuaWQrIi5hc3BlY3RyYXRpbyJdPW8pLHUuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsdCxzLl9wcmVHVUkscCksbClyLnNldChlKSxmLm5lc3RlZFByb3BlcnR5KHMsdGhpcy5pZCsiLmNhbWVyYSIpLnNldChlKTtpZihjKWEuc2V0KGkpLGYubmVzdGVkUHJvcGVydHkocyx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKS5zZXQoaSksdGhpcy5nbHBsb3QucmVkcmF3KCl9cmV0dXJuIGh9LHcudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNhbWVyYTtpZihyKWlmKCJvcmJpdCI9PT10KXIubW9kZT0ib3JiaXQiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSI7ZWxzZSBpZigidHVybnRhYmxlIj09PXQpe3IudXA9WzAsMCwxXSxyLm1vZGU9InR1cm50YWJsZSIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjt2YXIgbj10aGlzLmdyYXBoRGl2LGk9bi5fZnVsbExheW91dCxhPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxvPWEudXAueCxzPWEudXAueSxsPWEudXAuejtpZihsL01hdGguc3FydChvKm8rcypzK2wqbCk8Ljk5OSl7dmFyIGM9dGhpcy5pZCsiLmNhbWVyYS51cCIsaD17eDowLHk6MCx6OjF9LHA9e307cFtjXT1oO3ZhciBkPW4ubGF5b3V0O3UuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsZCxpLl9wcmVHVUkscCksYS51cD1oLGYubmVzdGVkUHJvcGVydHkoZCxjKS5zZXQoaCl9fWVsc2Ugci5rZXlCaW5kaW5nTW9kZT10O3RoaXMuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZT1lfSx3LnRvSW1hZ2U9ZnVuY3Rpb24odCl7dHx8KHQ9InBuZyIpLHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXItMTtuPGk7KytuLC0taSlmb3IodmFyIGE9MDthPGU7KythKWZvcih2YXIgbz0wO288NDsrK28pe3ZhciBzPTQqKGUqbithKStvLGw9NCooZSppK2EpK28sYz10W3NdO3Rbc109dFtsXSx0W2xdPWN9fShhLHIsaSksZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248cjsrK24pZm9yKHZhciBpPTA7aTxlOysraSl7dmFyIGE9NCooZSpuK2kpLG89dFthKzNdO2lmKG8+MClmb3IodmFyIHM9MjU1L28sbD0wO2w8MzsrK2wpdFthK2xdPU1hdGgubWluKHMqdFthK2xdLDI1NSl9fShhLHIsaSk7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7by53aWR0aD1yLG8uaGVpZ2h0PWk7dmFyIHMsbD1vLmdldENvbnRleHQoIjJkIiksYz1sLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChjLmRhdGEuc2V0KGEpLGwucHV0SW1hZ2VEYXRhKGMsMCwwKSx0KXtjYXNlImpwZWciOnM9by50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOnM9by50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0OnM9by50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLHN9LHcuc2V0Q29udmVydD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Mzt0Kyspe3ZhciBlPXRoaXMuZnVsbFNjZW5lTGF5b3V0W2tbdF1dO3Auc2V0Q29udmVydChlLHRoaXMuZnVsbExheW91dCksZS5zZXRTY2FsZT1mLm5vb3B9fSx3Lm1ha2U0dGhEaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2Ll9mdWxsTGF5b3V0O3RoaXMuX21vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LHAuc2V0Q29udmVydCh0aGlzLl9tb2NrQXhpcyx0KX0sZS5leHBvcnRzPV99LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTE5LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjUyMCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2xheW91dC9jb252ZXJ0Ijo1OTcsIi4vbGF5b3V0L3NwaWtlcyI6NjAwLCIuL2xheW91dC90aWNrX21hcmtzIjo2MDEsIi4vcHJvamVjdCI6NjAyLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjIyNCwid2ViZ2wtY29udGV4dCI6MzI2fV0sNjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDYwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGE9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxzPXQoIi4vcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOmwocyh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6YS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxzZWxlY3Rpb25yZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbmV3c2hhcGU6by5uZXdzaGFwZSxhY3RpdmVzaGFwZTpvLmFjdGl2ZXNoYXBlLG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRyYW5zaXRpb246bCh7fSxpLnRyYW5zaXRpb24se2VkaXRUeXBlOiJub25lIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjAsIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyI6NDQ2LCIuLi9saWIvZXh0ZW5kIjo0ODgsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjU0MywiLi9mb250X2F0dHJpYnV0ZXMiOjU4MCwiLi9wYWRfYXR0cmlidXRlcyI6NjEzfV0sNjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksaT0nXHhhOSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLGE9WydceGE5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NhcnRvLmNvbS8iPkNhcnRvPC9hPicsaV0uam9pbigiICIpLG89WydNYXAgdGlsZXMgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4nLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPicsInwiLCdEYXRhIGJ5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PRGJMPC9hPiddLmpvaW4oIiAiKSxzPXsib3Blbi1zdHJlZXQtbWFwIjp7aWQ6Im9zbSIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktb3NtLXRpbGVzIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjppLHRpbGVzOlsiaHR0cHM6Ly9hLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwiaHR0cHM6Ly9iLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1vc20tdGlsZXMiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktb3NtLXRpbGVzIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwid2hpdGUtYmciOntpZDoid2hpdGUtYmciLHZlcnNpb246OCxzb3VyY2VzOnt9LGxheWVyczpbe2lkOiJ3aGl0ZS1iZyIsdHlwZToiYmFja2dyb3VuZCIscGFpbnQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0ZGRkZGRiJ9LG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1wb3NpdHJvbiI6e2lkOiJjYXJ0by1wb3NpdHJvbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tcG9zaXRyb24iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktY2FydG8tcG9zaXRyb24iLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tcG9zaXRyb24iLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1kYXJrbWF0dGVyIjp7aWQ6ImNhcnRvLWRhcmttYXR0ZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvZGFya19hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4tdGVycmFpbiI6e2lkOiJzdGFtZW4tdGVycmFpbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRlcnJhaW4iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOm8sdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10b25lciI6e2lkOiJzdGFtZW4tdG9uZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi10b25lciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246byx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdG9uZXIve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdG9uZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXRvbmVyIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXdhdGVyY29sb3IiOntpZDoic3RhbWVuLXdhdGVyY29sb3IiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjpbJ01hcCB0aWxlcyBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPicsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+JywifCIsJ0RhdGEgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wIj5DQyBCWSBTQTwvYT4nXS5qb2luKCIgIiksdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3dhdGVyY29sb3Ive3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsbWluem9vbTowLG1heHpvb206MjJ9XX19LGw9bihzKTtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMS4xMC4xIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsc3R5bGVWYWx1ZXNNYXBib3g6WyJiYXNpYyIsInN0cmVldHMiLCJvdXRkb29ycyIsImxpZ2h0IiwiZGFyayIsInNhdGVsbGl0ZSIsInNhdGVsbGl0ZS1zdHJlZXRzIl0sc3R5bGVWYWx1ZURmbHQ6ImJhc2ljIixzdHlsZXNOb25NYXBib3g6cyxzdHlsZVZhbHVlc05vbk1hcGJveDpsLHRyYWNlTGF5ZXJQcmVmaXg6InBsb3RseS10cmFjZS1sYXllci0iLGxheW91dExheWVyUHJlZml4OiJwbG90bHktbGF5b3V0LWxheWVyLSIsd3JvbmdWZXJzaW9uRXJyb3JNc2c6WyJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvbiIsIlBsZWFzZSBpbnN0YWxsIG1hcGJveC1nbEAxLjEwLjEuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5uZXdQbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1pc3NpbmdTdHlsZUVycm9yTXNnOlsiTm8gdmFsaWQgbWFwYm94IHN0eWxlIGZvdW5kLCBwbGVhc2Ugc2V0IGBtYXBib3guc3R5bGVgIHRvIG9uZSBvZjoiLGwuam9pbigiLCAiKSwib3IgcmVnaXN0ZXIgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIHVzZSBhIE1hcGJveC1zZXJ2ZWQgc3R5bGUuIl0uam9pbigiXG4iKSxtdWx0aXBsZVRva2Vuc0Vycm9yTXNnOlsiU2V0IG11bHRpcGxlIG1hcGJveCBhY2Nlc3MgdG9rZW4gYWNyb3NzIGRpZmZlcmVudCBtYXBib3ggc3VicGxvdCwiLCJ1c2luZyBmaXJzdCB0b2tlbiBmb3VuZCBhcyBtYXBib3gtZ2wgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGVhY2Nlc3MgdG9rZW5zIG9uIHRoZSBzYW1lIHBhZ2UuIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixtYXBib3hMb2dvOntwYXRoMDoibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IixwYXRoMToiTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiLHBhdGgyOiJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiLHBvbHlnb246IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQifSxzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZTsiLGNhbmFyeToiYmFja2dyb3VuZC1jb2xvcjpzYWxtb247IiwiY3RybC1ib3R0b20tbGVmdCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IGJvdHRvbTogMDsgbGVmdDogMDsiLCJjdHJsLWJvdHRvbS1yaWdodCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IHJpZ2h0OiAwOyBib3R0b206IDA7IixjdHJsOiJjbGVhcjogYm90aDsgcG9pbnRlci1ldmVudHM6IGF1dG87IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOjJweCIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIiOiJwYWRkaW5nOiAycHggMjRweCAycHggNHB4OyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBtYXJnaW4tdG9wOiA2cHg7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOidjb250ZW50OiAiIjsgY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIlM0UgJTNDcGF0aCBmaWxsPSIlMjMzMzMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTBhNiw2IDAgMSwwIDEyLDBhNiw2IDAgMSwwIC0xMiwwIE05LDdhMSwxIDAgMSwwIDIsMGExLDEgMCAxLDAgLTIsMCBNOSwxMGExLDEgMCAxLDEgMiwwbDAsM2ExLDEgMCAxLDEgLTIsMCIvJTNFICUzQy9zdmclM0VcJyk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTJweDsnLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IjoibWluLWhlaWdodDogMjBweDsgcGFkZGluZzogMDsgbWFyZ2luOiAxMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggM3B4OyIsImN0cmwtYm90dG9tLXJpZ2h0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyByaWdodDogMCIsImN0cmwtYm90dG9tLWxlZnQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IGxlZnQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDAgMTBweCAxMHB4OyBmbG9hdDogbGVmdDsiLCJjdHJsLWJvdHRvbS1yaWdodCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAxMHB4IDEwcHggMDsgZmxvYXQ6IHJpZ2h0OyIsImN0cmwtYXR0cmliIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYSI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGE6aG92ZXIiOiJjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiwiY3RybC1hdHRyaWIgLm1hcGJveC1pbXByb3ZlLW1hcCI6ImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMnB4OyIsImF0dHJpYi1lbXB0eSI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1sb2dvIjonZGlzcGxheTpibG9jazsgd2lkdGg6IDIxcHg7IGhlaWdodDogMjFweDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JTNFICUzQ3N2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDIxIDIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMSAyMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiJTNFJTNDZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMDEpIiUzRSUzQ3BhdGggZD0ibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0NwYXRoIGQ9Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcGF0aCBkPSJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0Nwb2x5Z29uIHBvaW50cz0iMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwnKSd9fX0seyIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6NTIxfV0sNjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bIiIsIiJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2UidG9wIjpjWzBdPSJ0b3AiLHVbMV09LWw7YnJlYWs7Y2FzZSJib3R0b20iOmNbMF09ImJvdHRvbSIsdVsxXT1sfXN3aXRjaChhKXtjYXNlImxlZnQiOmNbMV09InJpZ2h0Iix1WzBdPS1zO2JyZWFrO2Nhc2UicmlnaHQiOmNbMV09ImxlZnQiLHVbMF09c31yZXR1cm57YW5jaG9yOmNbMF0mJmNbMV0/Yy5qb2luKCItIik6Y1swXT9jWzBdOmNbMV0/Y1sxXToiY2VudGVyIixvZmZzZXQ6dX19fSx7Ii4uLy4uL2xpYiI6NDk4fV0sNjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbC9kaXN0L21hcGJveC1nbC11bm1pbmlmaWVkIiksaT10KCIuLi8uLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89aS5zdHJTY2FsZSxzPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxjPXQoIkBwbG90bHkvZDMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuL21hcGJveCIpLHA9ci5jb25zdGFudHM9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC0xIT09cC5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpfHwwPT09dC5pbmRleE9mKCJtYXBib3g6Ly8iKSl9ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09cC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKHAud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPVtdLGE9W10sbz0hMSxzPSExLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cltlW2xdXSx1PWMuYWNjZXNzdG9rZW47ZChjLnN0eWxlKSYmKHU/aS5wdXNoVW5pcXVlKG4sdSk6KGQoYy5faW5wdXQuc3R5bGUpJiYoaS5lcnJvcigiVXNlcyBNYXBib3ggbWFwIHN0eWxlLCBidXQgZGlkIG5vdCBzZXQgYW4gYWNjZXNzIHRva2VuLiIpLG89ITApLHM9ITApKSx1JiZpLnB1c2hVbmlxdWUoYSx1KX1pZihzKXt2YXIgZj1vP3Aubm9BY2Nlc3NUb2tlbkVycm9yTXNnOnAubWlzc2luZ1N0eWxlRXJyb3JNc2c7dGhyb3cgaS5lcnJvcihmKSxuZXcgRXJyb3IoZil9cmV0dXJuIG4ubGVuZ3RoPyhuLmxlbmd0aD4xJiZpLndhcm4ocC5tdWx0aXBsZVRva2Vuc0Vycm9yTXNnKSxuWzBdKTooYS5sZW5ndGgmJmkubG9nKFsiTGlzdGVkIG1hcGJveCBhY2Nlc3MgdG9rZW4ocykiLGEuam9pbigiLCIpLCJidXQgZGlkIG5vdCB1c2UgYSBNYXBib3ggbWFwIHN0eWxlLCBpZ25vcmluZyB0b2tlbihzKS4iXS5qb2luKCIgIikpLCIiKX0odCxhKTtuLmFjY2Vzc1Rva2VuPW87Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF0sdT1zKHIsIm1hcGJveCIsYyksZj1lW2NdLG09Zi5fc3VicGxvdDttfHwobT1uZXcgaCh0LGMpLGVbY10uX3N1YnBsb3Q9bSksbS52aWV3SW5pdGlhbHx8KG0udmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30sZi5jZW50ZXIpLHpvb206Zi56b29tLGJlYXJpbmc6Zi5iZWFyaW5nLHBpdGNoOmYucGl0Y2h9KSxtLnBsb3QodSxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZVtyW2ldXSxoPXMuZG9tYWluLGQ9cy5fc3VicGxvdC50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpkLHg6bi5sK24udypoLnhbMF0seTpuLnQrbi5oKigxLWgueVsxXSksd2lkdGg6bi53KihoLnhbMV0taC54WzBdKSxoZWlnaHQ6bi5oKihoLnlbMV0taC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3ZhciBtPWMuc2VsZWN0KHMuX3N1YnBsb3QuZGl2KTtpZighKG51bGw9PT1tLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtbG9nbyIpLm5vZGUoKS5vZmZzZXRQYXJlbnQpKXt2YXIgZz1lLl9nbGltYWdlcy5hcHBlbmQoImciKTtnLmF0dHIoInRyYW5zZm9ybSIsYShuLmwrbi53KmgueFswXSsxMCxuLnQrbi5oKigxLWgueVswXSktMzEpKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMCkuc3R5bGUoe29wYWNpdHk6LjksZmlsbDoiI2ZmZmZmZiIsImVuYWJsZS1iYWNrZ3JvdW5kIjoibmV3In0pLGcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgxKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMikuc3R5bGUoIm9wYWNpdHkiLC4zNSkuc3R5bGUoImVuYWJsZS1iYWNrZ3JvdW5kIiwibmV3IiksZy5hcHBlbmQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHAubWFwYm94TG9nby5wb2x5Z29uKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSl9dmFyIHY9bS5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWF0dHJpYiIpLnRleHQoKS5yZXBsYWNlKCJJbXByb3ZlIHRoaXMgbWFwIiwiIikseT1lLl9nbGltYWdlcy5hcHBlbmQoImciKSx4PXkuYXBwZW5kKCJ0ZXh0Iik7eC50ZXh0KHYpLmNsYXNzZWQoInN0YXRpYy1hdHRyaWJ1dGlvbiIsITApLmF0dHIoeyJmb250LXNpemUiOjEyLCJmb250LWZhbWlseSI6IkFyaWFsIixjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjc1KSIsInRleHQtYW5jaG9yIjoiZW5kIiwiZGF0YS11bmZvcm1hdHRlZCI6dn0pO3ZhciBiPXUuYkJveCh4Lm5vZGUoKSksXz1uLncqKGgueFsxXS1oLnhbMF0pO2lmKGIud2lkdGg+Xy8yKXt2YXIgdz12LnNwbGl0KCJ8Iikuam9pbigiPGJyPiIpO3gudGV4dCh3KS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix3KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGI9dS5iQm94KHgubm9kZSgpKX14LmF0dHIoInRyYW5zZm9ybSIsYSgtMyw4LWIuaGVpZ2h0KSkseS5pbnNlcnQoInJlY3QiLCIuc3RhdGljLWF0dHJpYnV0aW9uIikuYXR0cih7eDotYi53aWR0aC02LHk6LWIuaGVpZ2h0LTMsd2lkdGg6Yi53aWR0aCs2LGhlaWdodDpiLmhlaWdodCszLGZpbGw6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkifSk7dmFyIFQ9MTtiLndpZHRoKzY+XyYmKFQ9Xy8oYi53aWR0aCs2KSk7dmFyIGs9W24ubCtuLncqaC54WzFdLG4udCtuLmgqKDEtaC55WzBdKV07eS5hdHRyKCJ0cmFuc2Zvcm0iLGEoa1swXSxrWzFdKStvKFQpKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zdWJwbG90LnVwZGF0ZUZ4KGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0NzUsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU4OCwiLi9jb25zdGFudHMiOjYwNiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjEwLCIuL2xheW91dF9kZWZhdWx0cyI6NjExLCIuL21hcGJveCI6NjEyLCJAcGxvdGx5L2QzIjo1OCwibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiOjIzNH1dLDYwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLnNhbml0aXplSFRNTCxhPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSxvPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc3VicGxvdD10LHRoaXMudWlkPXQudWlkKyItIitlLHRoaXMuaW5kZXg9ZSx0aGlzLmlkU291cmNlPSJzb3VyY2UtIit0aGlzLnVpZCx0aGlzLmlkTGF5ZXI9by5sYXlvdXRMYXllclByZWZpeCt0aGlzLnVpZCx0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQpe2lmKCF0LnZpc2libGUpcmV0dXJuITE7dmFyIGU9dC5zb3VyY2U7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoInN0cmluZyIhPXR5cGVvZiBlW3JdfHwwPT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wfWZ1bmN0aW9uIHUodCl7dmFyIGU9e30scj17fTtzd2l0Y2godC50eXBlKXtjYXNlImNpcmNsZSI6bi5leHRlbmRGbGF0KHIseyJjaXJjbGUtcmFkaXVzIjp0LmNpcmNsZS5yYWRpdXMsImNpcmNsZS1jb2xvciI6dC5jb2xvciwiY2lyY2xlLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UibGluZSI6bi5leHRlbmRGbGF0KHIseyJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5LCJsaW5lLWRhc2hhcnJheSI6dC5saW5lLmRhc2h9KTticmVhaztjYXNlImZpbGwiOm4uZXh0ZW5kRmxhdChyLHsiZmlsbC1jb2xvciI6dC5jb2xvciwiZmlsbC1vdXRsaW5lLWNvbG9yIjp0LmZpbGwub3V0bGluZWNvbG9yLCJmaWxsLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2Uic3ltYm9sIjp2YXIgaT10LnN5bWJvbCxvPWEoaS50ZXh0cG9zaXRpb24saS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUseyJpY29uLWltYWdlIjppLmljb24rIi0xNSIsImljb24tc2l6ZSI6aS5pY29uc2l6ZS8xMCwidGV4dC1maWVsZCI6aS50ZXh0LCJ0ZXh0LXNpemUiOmkudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOm8uYW5jaG9yLCJ0ZXh0LW9mZnNldCI6by5vZmZzZXQsInN5bWJvbC1wbGFjZW1lbnQiOmkucGxhY2VtZW50fSksbi5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjppLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UicmFzdGVyIjpuLmV4dGVuZEZsYXQocix7InJhc3Rlci1mYWRlLWR1cmF0aW9uIjowLCJyYXN0ZXItb3BhY2l0eSI6dC5vcGFjaXR5fSl9cmV0dXJue2xheW91dDplLHBhaW50OnJ9fWwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3SW1hZ2UodCk/dGhpcy51cGRhdGVJbWFnZSh0KTp0aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnJlbW92ZUxheWVyKCksdGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSk6dGhpcy5uZWVkc05ld0xheWVyKHQpP3RoaXMudXBkYXRlTGF5ZXIodCk6dGhpcy51cGRhdGVTdHlsZSh0KToodGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSksdGhpcy52aXNpYmxlPWModCl9LGwubmVlZHNOZXdJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJiJpbWFnZSI9PT10aGlzLnNvdXJjZVR5cGUmJiJpbWFnZSI9PT10LnNvdXJjZXR5cGUmJih0aGlzLnNvdXJjZSE9PXQuc291cmNlfHxKU09OLnN0cmluZ2lmeSh0aGlzLmNvb3JkaW5hdGVzKSE9PUpTT04uc3RyaW5naWZ5KHQuY29vcmRpbmF0ZXMpKX0sbC5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHxKU09OLnN0cmluZ2lmeSh0aGlzLnNvdXJjZSkhPT1KU09OLnN0cmluZ2lmeSh0LnNvdXJjZSl8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxsLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dGhpcy5zdWJwbG90LmJlbG93TG9va3VwWyJsYXlvdXQtIit0aGlzLmluZGV4XX0sbC5sb29rdXBCZWxvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdfSxsLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpLnVwZGF0ZUltYWdlKHt1cmw6dC5zb3VyY2UsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc30pO3ZhciBlPXRoaXMuZmluZEZvbGxvd2luZ01hcGJveExheWVySWQodGhpcy5sb29rdXBCZWxvdygpKTtudWxsIT09ZSYmdGhpcy5zdWJwbG90Lm1hcC5tb3ZlTGF5ZXIodGhpcy5pZExheWVyLGUpfSxsLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3QubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLGModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsYT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09cj9lPSJzdHJpbmciPT10eXBlb2Ygbj8idXJsIjoidGlsZXMiOiJyYXN0ZXIiPT09cj8oZT0idGlsZXMiLGEudGlsZVNpemU9MjU2KToiaW1hZ2UiPT09ciYmKGU9InVybCIsYS5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzKTthW2VdPW4sdC5zb3VyY2VhdHRyaWJ1dGlvbiYmKGEuYXR0cmlidXRpb249aSh0LnNvdXJjZWF0dHJpYnV0aW9uKSk7cmV0dXJuIGF9KHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxsLmZpbmRGb2xsb3dpbmdNYXBib3hMYXllcklkPWZ1bmN0aW9uKHQpe2lmKCJ0cmFjZXMiPT09dClmb3IodmFyIGU9dGhpcy5zdWJwbG90LmdldE1hcExheWVycygpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIG4mJjA9PT1uLmluZGV4T2Yoby50cmFjZUxheWVyUHJlZml4KSl7dD1uO2JyZWFrfX1yZXR1cm4gdH0sbC51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj11KHQpLG49dGhpcy5sb29rdXBCZWxvdygpLGk9dGhpcy5maW5kRm9sbG93aW5nTWFwYm94TGF5ZXJJZChuKTt0aGlzLnJlbW92ZUxheWVyKCksYyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSxpKSx0aGlzLmxheWVyVHlwZT10LnR5cGUsdGhpcy5iZWxvdz1ufSxsLnVwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe2lmKGModCkpe3ZhciBlPXUodCk7dGhpcy5zdWJwbG90LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0UGFpbnRQcm9wZXJ0eSIsZS5wYWludCl9fSxsLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHModCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuL2NvbnN0YW50cyI6NjA2LCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo2MDd9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikudGV4dHBvc2l0aW9uLGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi9jb25zdGFudHMiKSxmPW8oe30pO2YuZmFtaWx5LmRmbHQ9Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiLChlLmV4cG9ydHM9bCh7X2FycmF5QXR0clJlZ2V4cHM6W24uY291bnRlclJlZ2V4KCJtYXBib3giLCIubGF5ZXJzIiwhMCldLGRvbWFpbjphKHtuYW1lOiJtYXBib3gifSksYWNjZXNzdG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOiJhbnkiLHZhbHVlczp1LnN0eWxlVmFsdWVzTWFwYm94LmNvbmNhdCh1LnN0eWxlVmFsdWVzTm9uTWFwYm94KSxkZmx0OnUuc3R5bGVWYWx1ZURmbHR9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH19LHpvb206e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXllcnM6YygibGF5ZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzb3VyY2V0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJnZW9qc29uIiwidmVjdG9yIiwicmFzdGVyIiwiaW1hZ2UiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzb3VyY2VhdHRyaWJ1dGlvbjp7dmFsVHlwZToic3RyaW5nIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwibGluZSIsImZpbGwiLCJzeW1ib2wiLCJyYXN0ZXIiXSxkZmx0OiJjaXJjbGUifSxjb29yZGluYXRlczp7dmFsVHlwZToiYW55In0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbWluem9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZToibnVtYmVyIixkZmx0OjE1fX0sbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHBsYWNlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG9pbnQiLCJsaW5lIiwibGluZS1jZW50ZXIiXSxkZmx0OiJwb2ludCJ9LHRleHRmb250OmYsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyLCIuLi9kb21haW4iOjU3OSwiLi4vZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4vY29uc3RhbnRzIjo2MDZ9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksYT10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3IoImFjY2Vzc3Rva2VuIixuLmFjY2Vzc1Rva2VuKSxyKCJzdHlsZSIpLHIoImNlbnRlci5sb24iKSxyKCJjZW50ZXIubGF0Iikscigiem9vbSIpLHIoImJlYXJpbmciKSxyKCJwaXRjaCIpLGEodCxlLHtuYW1lOiJsYXllcnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSksZS5faW5wdXQ9dH1mdW5jdGlvbiBsKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsby5sYXllcnMscixpKX1pZihyKCJ2aXNpYmxlIikpe3ZhciBpLGE9cigic291cmNldHlwZSIpLHM9InJhc3RlciI9PT1hfHwiaW1hZ2UiPT09YTtyKCJzb3VyY2UiKSxyKCJzb3VyY2VhdHRyaWJ1dGlvbiIpLCJ2ZWN0b3IiPT09YSYmcigic291cmNlbGF5ZXIiKSwiaW1hZ2UiPT09YSYmcigiY29vcmRpbmF0ZXMiKSxzJiYoaT0icmFzdGVyIik7dmFyIGw9cigidHlwZSIsaSk7cyYmInJhc3RlciIhPT1sJiYobD1lLnR5cGU9InJhc3RlciIsbi5sb2coIlNvdXJjZSB0eXBlcyAqcmFzdGVyKiBhbmQgKmltYWdlKiBtdXN0IGRyYXduICpyYXN0ZXIqIGxheWVyIHR5cGUuIikpLHIoImJlbG93IikscigiY29sb3IiKSxyKCJvcGFjaXR5IikscigibWluem9vbSIpLHIoIm1heHpvb20iKSwiY2lyY2xlIj09PWwmJnIoImNpcmNsZS5yYWRpdXMiKSwibGluZSI9PT1sJiYocigibGluZS53aWR0aCIpLHIoImxpbmUuZGFzaCIpKSwiZmlsbCI9PT1sJiZyKCJmaWxsLm91dGxpbmVjb2xvciIpLCJzeW1ib2wiPT09bCYmKHIoInN5bWJvbC5pY29uIikscigic3ltYm9sLmljb25zaXplIikscigic3ltYm9sLnRleHQiKSxuLmNvZXJjZUZvbnQociwic3ltYm9sLnRleHRmb250Iikscigic3ltYm9sLnRleHRwb3NpdGlvbiIpLHIoInN5bWJvbC5wbGFjZW1lbnQiKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZToibWFwYm94IixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246InkiLGFjY2Vzc1Rva2VuOmUuX21hcGJveEFjY2Vzc1Rva2VufSl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0NCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6NjI3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MTB9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxmPXUucmVjdE1vZGUsaD11LmRyYXdNb2RlLHA9dS5zZWxlY3RNb2RlLGQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsbT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsZz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3Rpb25zQ2FjaGUsdj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIGIodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj10Ll9jb250ZXh0O3RoaXMuY29udGFpbmVyPXIuX2dsY29udGFpbmVyLm5vZGUoKSx0aGlzLmlzU3RhdGljPW4uc3RhdGljUGxvdCx0aGlzLnVpZD1yLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKHIpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXSx0aGlzLmJlbG93TG9va3VwPXt9LHRoaXMuZHJhZ2dpbmc9ITEsdGhpcy53aGVlbGluZz0hMX12YXIgXz1iLnByb3RvdHlwZTtfLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9e30saS5sYXllckxpc3Q9W10pLG49aS5tYXA/bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS51cGRhdGVNYXAodCxlLHIsbil9KSk6bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSksci5wdXNoKG4pfSxfLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixpKXt2YXIgbz10aGlzLHM9ZVtvLmlkXSxsPW8uc3R5bGVPYmo9VChzLnN0eWxlKTtvLmFjY2Vzc1Rva2VuPXMuYWNjZXNzdG9rZW47dmFyIGM9by5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6by5kaXYsc3R5bGU6bC5zdHlsZSxjZW50ZXI6QShzLmNlbnRlciksem9vbTpzLnpvb20sYmVhcmluZzpzLmJlYXJpbmcscGl0Y2g6cy5waXRjaCxpbnRlcmFjdGl2ZTohby5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6by5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITF9KS5hZGRDb250cm9sKG5ldyBuLkF0dHJpYnV0aW9uQ29udHJvbCh7Y29tcGFjdDohMH0pKTtjLl9jYW52YXMuc3R5bGUubGVmdD0iMHB4IixjLl9jYW52YXMuc3R5bGUudG9wPSIwcHgiLG8ucmVqZWN0T25FcnJvcihpKSxvLmlzU3RhdGljfHxvLmluaXRGeCh0LGUpO3ZhciB1PVtdO3UucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7Yy5vbmNlKCJsb2FkIix0KX0pKSksdT11LmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbCh1KS50aGVuKChmdW5jdGlvbigpe28uZmlsbEJlbG93TG9va3VwKHQsZSksby51cGRhdGVEYXRhKHQpLG8udXBkYXRlTGF5b3V0KGUpLG8ucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKGkpfSxfLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLG89aS5tYXAscz1lW3RoaXMuaWRdO2kucmVqZWN0T25FcnJvcihuKTt2YXIgbD1bXSxjPVQocy5zdHlsZSk7SlNPTi5zdHJpbmdpZnkoaS5zdHlsZU9iaikhPT1KU09OLnN0cmluZ2lmeShjKSYmKGkuc3R5bGVPYmo9YyxvLnNldFN0eWxlKGMuc3R5bGUpLGkudHJhY2VIYXNoPXt9LGwucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7by5vbmNlKCJzdHlsZWRhdGEiLHQpfSkpKSksbD1sLmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbChsKS50aGVuKChmdW5jdGlvbigpe2kuZmlsbEJlbG93TG9va3VwKHQsZSksaS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKG4pfSxfLmZpbGxCZWxvd0xvb2t1cD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1lW3RoaXMuaWRdLmxheWVycyxhPXRoaXMuYmVsb3dMb29rdXA9e30sbz0hMTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgcz10W3JdWzBdLnRyYWNlLGw9cy5fbW9kdWxlOyJzdHJpbmciPT10eXBlb2Ygcy5iZWxvdz9uPXMuYmVsb3c6bC5nZXRCZWxvdyYmKG49bC5nZXRCZWxvdyhzLHRoaXMpKSwiIj09PW4mJihvPSEwKSxhWyJ0cmFjZS0iK3MudWlkXT1ufHwiIn1mb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgYz1pW3JdO249InN0cmluZyI9PXR5cGVvZiBjLmJlbG93P2MuYmVsb3c6bz8idHJhY2VzIjoiIixhWyJsYXlvdXQtIityXT1ufXZhciB1LGYsaD17fTtmb3IodSBpbiBhKWhbbj1hW3VdXT9oW25dLnB1c2godSk6aFtuXT1bdV07Zm9yKG4gaW4gaCl7dmFyIHA9aFtuXTtpZihwLmxlbmd0aD4xKWZvcihyPTA7cjxwLmxlbmd0aDtyKyspMD09PSh1PXBbcl0pLmluZGV4T2YoInRyYWNlLSIpPyhmPXUuc3BsaXQoInRyYWNlLSIpWzFdLHRoaXMudHJhY2VIYXNoW2ZdJiYodGhpcy50cmFjZUhhc2hbZl0uYmVsb3c9bnVsbCkpOjA9PT11LmluZGV4T2YoImxheW91dC0iKSYmKGY9dS5zcGxpdCgibGF5b3V0LSIpWzFdLHRoaXMubGF5ZXJMaXN0W2ZdJiYodGhpcy5sYXllckxpc3RbZl0uYmVsb3c9bnVsbCkpfX07dmFyIHc9e2Nob3JvcGxldGhtYXBib3g6MCxkZW5zaXR5bWFwYm94OjEsc2NhdHRlcm1hcGJveDoyfTtmdW5jdGlvbiBUKHQpe3ZhciBlPXt9O3JldHVybiBpLmlzUGxhaW5PYmplY3QodCk/KGUuaWQ9dC5pZCxlLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8oZS5pZD10LC0xIT09eS5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpP2Uuc3R5bGU9ayh0KTp5LnN0eWxlc05vbk1hcGJveFt0XT9lLnN0eWxlPXkuc3R5bGVzTm9uTWFwYm94W3RdOmUuc3R5bGU9dCk6KGUuaWQ9eS5zdHlsZVZhbHVlRGZsdCxlLnN0eWxlPWsoeS5zdHlsZVZhbHVlRGZsdCkpLGUudHJhbnNpdGlvbj17ZHVyYXRpb246MCxkZWxheTowfSxlfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHkuc3R5bGVVcmxQcmVmaXgrdCsiLSIreS5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBBKHQpe3JldHVyblt0Lmxvbix0LmxhdF19Xy51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2gsbz10LnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gd1t0WzBdLnRyYWNlLnR5cGVdLXdbZVswXS50cmFjZS50eXBlXX0pKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXt2YXIgcz1vW25dLGw9ITE7KGU9YVsocj1zWzBdLnRyYWNlKS51aWRdKSYmKGUudHlwZT09PXIudHlwZT8oZS51cGRhdGUocyksbD0hMCk6ZS5kaXNwb3NlKCkpLCFsJiZyLl9tb2R1bGUmJihhW3IudWlkXT1yLl9tb2R1bGUucGxvdCh0aGlzLHMpKX12YXIgYz1PYmplY3Qua2V5cyhhKTt0OmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciB1PWNbbl07Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZih1PT09KHI9dFtpXVswXS50cmFjZSkudWlkKWNvbnRpbnVlIHQ7KGU9YVt1XSkuZGlzcG9zZSgpLGRlbGV0ZSBhW3VdfX0sXy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj10W3RoaXMuaWRdO3RoaXMuZHJhZ2dpbmd8fHRoaXMud2hlZWxpbmd8fChlLnNldENlbnRlcihBKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSksdGhpcy51cGRhdGVMYXllcnModCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKSx0aGlzLmdkLl9jb250ZXh0Ll9zY3JvbGxab29tLm1hcGJveD9lLnNjcm9sbFpvb20uZW5hYmxlKCk6ZS5zY3JvbGxab29tLmRpc2FibGUoKX0sXy5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbigicmVuZGVyIiwoZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZigicmVuZGVyIixyKSxzZXRUaW1lb3V0KHQsMTApKX0pKX0sXy5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcih5Lm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoImVycm9yIixyKSxlLm9uY2UoInN0eWxlLmVycm9yIixyKSxlLm9uY2UoInNvdXJjZS5lcnJvciIsciksZS5vbmNlKCJ0aWxlLmVycm9yIixyKSxlLm9uY2UoImxheWVyLmVycm9yIixyKX0sXy5jcmVhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueH19LGUueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpLGUubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0scy5zZXRDb252ZXJ0KGUubW9ja0F4aXMsdCl9LF8uaW5pdEZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLm1hcDtmdW5jdGlvbiBhKCl7Yy5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyKX1mdW5jdGlvbiBzKCl7dmFyIHQ9ci5nZXRWaWV3KCk7bi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQodCkpfWkub24oIm1vdmVlbmQiLChmdW5jdGlvbih0KXtpZihyLm1hcCl7dmFyIGU9bi5fZnVsbExheW91dDtpZih0Lm9yaWdpbmFsRXZlbnR8fHIud2hlZWxpbmcpe3ZhciBpPWVbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxlLl9wcmVHVUksci5nZXRWaWV3RWRpdHMoaSkpO3ZhciBhPXIuZ2V0VmlldygpO2kuX2lucHV0LmNlbnRlcj1pLmNlbnRlcj1hLmNlbnRlcixpLl9pbnB1dC56b29tPWkuem9vbT1hLnpvb20saS5faW5wdXQuYmVhcmluZz1pLmJlYXJpbmc9YS5iZWFyaW5nLGkuX2lucHV0LnBpdGNoPWkucGl0Y2g9YS5waXRjaCxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9dC5vcmlnaW5hbEV2ZW50JiYibW91c2V1cCI9PT10Lm9yaWdpbmFsRXZlbnQudHlwZT9yLmRyYWdnaW5nPSExOnIud2hlZWxpbmcmJihyLndoZWVsaW5nPSExKSxlLl9yZWhvdmVyJiZlLl9yZWhvdmVyKCl9fSkpLGkub24oIndoZWVsIiwoZnVuY3Rpb24oKXtyLndoZWVsaW5nPSEwfSkpLGkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9W3Qub3JpZ2luYWxFdmVudC5vZmZzZXRYLHQub3JpZ2luYWxFdmVudC5vZmZzZXRZXTt0LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gaS51bnByb2plY3QoYSkubG5nfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiBpLnVucHJvamVjdChhKS5sYXR9LG4uX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXtuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yLmlkJiZuLl9mdWxsTGF5b3V0W3IuaWRdJiZjLmhvdmVyKG4sdCxyLmlkKX0sYy5ob3ZlcihuLHQsci5pZCksbi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXIuaWR9KSksaS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtyLmRyYWdnaW5nPSEwLGEoKX0pKSxpLm9uKCJ6b29tc3RhcnQiLGEpLGkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbH0pKSxpLm9uKCJkcmFnIixzKSxpLm9uKCJ6b29tIixzKSxpLm9uKCJkYmxjbGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5fZnVsbExheW91dFtyLmlkXTtvLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLG4ubGF5b3V0LG4uX2Z1bGxMYXlvdXQuX3ByZUdVSSxyLmdldFZpZXdFZGl0cyh0KSk7dmFyIGU9ci52aWV3SW5pdGlhbDtpLnNldENlbnRlcihBKGUuY2VudGVyKSksaS5zZXRab29tKGUuem9vbSksaS5zZXRCZWFyaW5nKGUuYmVhcmluZyksaS5zZXRQaXRjaChlLnBpdGNoKTt2YXIgYT1yLmdldFZpZXcoKTt0Ll9pbnB1dC5jZW50ZXI9dC5jZW50ZXI9YS5jZW50ZXIsdC5faW5wdXQuem9vbT10Lnpvb209YS56b29tLHQuX2lucHV0LmJlYXJpbmc9dC5iZWFyaW5nPWEuYmVhcmluZyx0Ll9pbnB1dC5waXRjaD10LnBpdGNoPWEucGl0Y2gsbi5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLG4uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKGEpKX0pKSxyLmNsZWFyU2VsZWN0PWZ1bmN0aW9uKCl7ZyhyLmRyYWdPcHRpb25zKSxtKHIuZHJhZ09wdGlvbnMuZ2QpfSxyLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpLmluZGV4T2YoInNlbGVjdCIpPi0xJiZ2KGUub3JpZ2luYWxFdmVudCxuLFtyLnhheGlzXSxbci55YXhpc10sci5pZCx0KSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJmMuY2xpY2sobixlLm9yaWdpbmFsRXZlbnQpfX19LF8udXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubWFwLG49ZS5nZDtpZighZS5pc1N0YXRpYyl7dmFyIGEsbz10LmRyYWdtb2RlO2E9ZihvKT9mdW5jdGlvbih0LHIpeyh0LnJhbmdlPXt9KVtlLmlkXT1bYyhbci54bWluLHIueW1pbl0pLGMoW3IueG1heCxyLnltYXhdKV19OmZ1bmN0aW9uKHQscixuKXsodC5sYXNzb1BvaW50cz17fSlbZS5pZF09bi5maWx0ZXJlZC5tYXAoYyl9O3ZhciBzPWUuZHJhZ09wdGlvbnM7ZS5kcmFnT3B0aW9ucz1pLmV4dGVuZERlZXAoc3x8e30se2RyYWdtb2RlOnQuZHJhZ21vZGUsZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLGRvbWFpbjp0W2UuaWRdLmRvbWFpbix4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMsZmlsbFJhbmdlSXRlbXM6YX0seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXSxzdWJwbG90OmUuaWR9KSxyLm9mZigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikscChvKXx8aChvKT8oci5kcmFnUGFuLmRpc2FibGUoKSxyLm9uKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZHJhZ09wdGlvbnMucHJlcEZuPWZ1bmN0aW9uKHQscixuKXtkKHQscixuLGUuZHJhZ09wdGlvbnMsbyl9LGwuaW5pdChlLmRyYWdPcHRpb25zKSk6KHIuZHJhZ1Bhbi5lbmFibGUoKSxyLm9mZigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KSxlLmRpdi5vbm1vdXNlZG93bj1udWxsLGUub25DbGlja0luUGFuSGFuZGxlcj1lLm9uQ2xpY2tJblBhbkZuKGUuZHJhZ09wdGlvbnMpLHIub24oImNsaWNrIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpKX1mdW5jdGlvbiBjKHQpe3ZhciByPWUubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bci5sbmcsci5sYXRdfX0sXy51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pKyJweCIsbi5oZWlnaHQ9ci5oKihlLnlbMV0tZS55WzBdKSsicHgiLG4ubGVmdD1yLmwrZS54WzBdKnIudysicHgiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCsicHgiLHRoaXMueGF4aXMuX29mZnNldD1yLmwrZS54WzBdKnIudyx0aGlzLnhheGlzLl9sZW5ndGg9ci53KihlLnhbMV0tZS54WzBdKSx0aGlzLnlheGlzLl9vZmZzZXQ9ci50KygxLWUueVsxXSkqci5oLHRoaXMueWF4aXMuX2xlbmd0aD1yLmgqKGUueVsxXS1lLnlbMF0pfSxfLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbdGhpcy5pZF0ubGF5ZXJzLG49dGhpcy5sYXllckxpc3Q7aWYoci5sZW5ndGghPT1uLmxlbmd0aCl7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdLmRpc3Bvc2UoKTtmb3Iobj10aGlzLmxheWVyTGlzdD1bXSxlPTA7ZTxyLmxlbmd0aDtlKyspbi5wdXNoKHgodGhpcyxlLHJbZV0pKX1lbHNlIGZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbltlXS51cGRhdGUocltlXSl9LF8uZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5tYXAucmVtb3ZlKCksdGhpcy5tYXA9bnVsbCx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmRpdikpfSxfLnRvSW1hZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAuc3RvcCgpLHRoaXMubWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpfSxfLnNldE9wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXRoaXMubWFwW2VdKHQsbixyW25dKX0sXy5nZXRNYXBMYXllcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAuZ2V0U3R5bGUoKS5sYXllcnN9LF8uYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm1hcDtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCIiPT09ZSlyZXR1cm4gdm9pZCByLmFkZExheWVyKHQsZSk7Zm9yKHZhciBuPXRoaXMuZ2V0TWFwTGF5ZXJzKCksYT0wO2E8bi5sZW5ndGg7YSsrKWlmKGU9PT1uW2FdLmlkKXJldHVybiB2b2lkIHIuYWRkTGF5ZXIodCxlKTtpLndhcm4oWyJUcnlpbmcgdG8gYWRkIGxheWVyIHdpdGggKmJlbG93KiB2YWx1ZSIsZSwicmVmZXJlbmNpbmcgYSBsYXllciB0aGF0IGRvZXMgbm90IGV4aXN0Iiwib3IgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3QuIl0uam9pbigiICIpKX1yLmFkZExheWVyKHQpfSxfLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxfLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCkscj17bG9uOmUubG5nLGxhdDplLmxhdH0sbj10LmdldENhbnZhcygpLGk9cGFyc2VJbnQobi5zdHlsZS53aWR0aCksYT1wYXJzZUludChuLnN0eWxlLmhlaWdodCk7cmV0dXJue2NlbnRlcjpyLHpvb206dC5nZXRab29tKCksYmVhcmluZzp0LmdldEJlYXJpbmcoKSxwaXRjaDp0LmdldFBpdGNoKCksX2Rlcml2ZWQ6e2Nvb3JkaW5hdGVzOlt0LnVucHJvamVjdChbMCwwXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFtpLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2ksYV0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbMCxhXSkudG9BcnJheSgpXX19fSxfLmdldFZpZXdFZGl0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5pZCxyPVsiY2VudGVyIiwiem9vbSIsImJlYXJpbmciLCJwaXRjaCJdLG49e30saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO25bZSsiLiIrYV09dFthXX1yZXR1cm4gbn0sXy5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5nZXRWaWV3RWRpdHModCk7cmV0dXJuIHJbZSsiLl9kZXJpdmVkIl09dC5fZGVyaXZlZCxyfSxlLmV4cG9ydHM9Yn0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODAsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzc5LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTEsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjU3MCwiLi9jb25zdGFudHMiOjYwNiwiLi9sYXllcnMiOjYwOSwibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiOjIzNH1dLDYxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sZWRpdFR5cGU6ZX19fSx7fV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudGltZUZvcm1hdExvY2FsZSxhPXQoImQzLWZvcm1hdCIpLmZvcm1hdExvY2FsZSxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuLi9yZWdpc3RyeSIpLGw9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxjPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSx1PXQoIi4uL2xpYiIpLGY9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxwPXQoIi4vY2FydGVzaWFuL2F4aXNfaWRzIiksZD10KCIuL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LG09dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGc9dCgiLi9mcmFtZV9hdHRyaWJ1dGVzIiksdj10KCIuLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLHk9dS5yZWxpbmtQcml2YXRlS2V5cyx4PXUuXyxiPWUuZXhwb3J0cz17fTt1LmV4dGVuZEZsYXQoYixzKSxiLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksYi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPWIuYWxsVHlwZXMsYi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSxiLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGIuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgXz1iLnRyYW5zZm9ybXNSZWdpc3RyeSx3PXQoIi4vY29tbWFuZCIpO2IuZXhlY3V0ZUFQSUNvbW1hbmQ9dy5leGVjdXRlQVBJQ29tbWFuZCxiLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9dy5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLGIubWFuYWdlQ29tbWFuZE9ic2VydmVyPXcubWFuYWdlQ29tbWFuZE9ic2VydmVyLGIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPXcuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLGIucmVkcmF3VGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD11LmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQmJihzLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCkscy5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxzLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikodCksZShiLnByZXZpb3VzUHJvbWlzZXModCkpKX0pLDMwMCl9KSl9LGIucmVzaXplPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9dS5nZXRHcmFwaERpdih0KTt2YXIgcj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt0JiYhdS5pc0hpZGRlbih0KXx8bihuZXcgRXJyb3IoIlJlc2l6ZSBtdXN0IGJlIHBhc3NlZCBhIGRpc3BsYXllZCBwbG90IGRpdiBlbGVtZW50LiIpKSx0Ll9yZWRyYXdUaW1lciYmY2xlYXJUaW1lb3V0KHQuX3JlZHJhd1RpbWVyKSx0Ll9yZXNvbHZlUmVzaXplJiYoZT10Ll9yZXNvbHZlUmVzaXplKSx0Ll9yZXNvbHZlUmVzaXplPXIsdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fHUuaXNIaWRkZW4odCkpcih0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciBlPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLHMuY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbigoZnVuY3Rpb24oKXt0LmNoYW5nZWQ9ZSx0Ll9yZXNvbHZlUmVzaXplPT09ciYmKGRlbGV0ZSB0Ll9yZXNvbHZlUmVzaXplLHIodCkpfSkpfX0pLDEwMCl9KSk7cmV0dXJuIGUmJmUocikscn0sYi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oKGZ1bmN0aW9uKCl7dC5fcHJvbWlzZXM9W119KSl9LGIuYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPXUuZW5zdXJlU2luZ2xlKGUuX3BhcGVyLCJ0ZXh0IiwianMtcGxvdC1saW5rLWNvbnRhaW5lciIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6Zi5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1saW5rLXRvLXRvb2wiLCEwKSx0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1saW5rLXNwYWNlciIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLXNvdXJjZWxpbmtzIiwhMCl9KSl9KSksaT1yLm5vZGUoKSxhPXt5OmUuX3BhcGVyLmF0dHIoImhlaWdodCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbInRleHQtYW5jaG9yIl09InN0YXJ0IixhLng9NSk6KGFbInRleHQtYW5jaG9yIl09ImVuZCIsYS54PWUuX3BhcGVyLmF0dHIoIndpZHRoIiktNyksci5hdHRyKGEpO3ZhciBvPXIuc2VsZWN0KCIuanMtbGluay10by10b29sIikscz1yLnNlbGVjdCgiLmpzLWxpbmstc3BhY2VyIiksbD1yLnNlbGVjdCgiLmpzLXNvdXJjZWxpbmtzIik7dC5fY29udGV4dC5zaG93U291cmNlcyYmdC5fY29udGV4dC5zaG93U291cmNlcyh0KSx0Ll9jb250ZXh0LnNob3dMaW5rJiZmdW5jdGlvbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7Yi5zZW5kRGF0YVRvQ2xvdWQodCl9KSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoIi8iKSxpPXdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7ci5hdHRyKHsieGxpbms6eGxpbms6c2hvdyI6Im5ldyIsInhsaW5rOnhsaW5rOmhyZWYiOiIvIituWzJdLnNwbGl0KCIuIilbMF0rIi8iK25bMV0raX0pfX0odCxvKSxzLnRleHQoby50ZXh0KCkmJmwudGV4dCgpPyIgLSAiOiIiKX19LGIuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3ZhciBlPSh3aW5kb3cuUExPVExZRU5WfHx7fSkuQkFTRV9VUkx8fHQuX2NvbnRleHQucGxvdGx5U2VydmVyVVJMO2lmKGUpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciByPW4uc2VsZWN0KHQpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJoaWRkZW5mb3JtIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksaT1yLmFwcGVuZCgiZm9ybSIpLmF0dHIoe2FjdGlvbjplKyIvZXh0ZXJuYWwiLG1ldGhvZDoicG9zdCIsdGFyZ2V0OiJfYmxhbmsifSk7cmV0dXJuIGkuYXBwZW5kKCJpbnB1dCIpLmF0dHIoe3R5cGU6InRleHQiLG5hbWU6ImRhdGEifSkubm9kZSgpLnZhbHVlPWIuZ3JhcGhKc29uKHQsITEsImtlZXBkYXRhIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoInBsb3RseV9hZnRlcmV4cG9ydCIpLCExfX07dmFyIFQ9WyJkYXlzIiwic2hvcnREYXlzIiwibW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RzIiwiZGF0ZVRpbWUiLCJkYXRlIiwidGltZSIsImRlY2ltYWwiLCJ0aG91c2FuZHMiLCJncm91cGluZyIsImN1cnJlbmN5Il0saz1bInllYXIiLCJtb250aCIsImRheU1vbnRoIiwiZGF5TW9udGhZZWFyIl07ZnVuY3Rpb24gQSh0LGUpe3ZhciByPXQuX2NvbnRleHQubG9jYWxlO3J8fChyPSJlbi1VUyIpO3ZhciBuPSExLGk9e307ZnVuY3Rpb24gYSh0KXtmb3IodmFyIHI9ITAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lbb118fCh0W29dP2lbb109dFtvXTpyPSExKX1yJiYobj0hMCl9Zm9yKHZhciBvPTA7bzwyO28rKyl7Zm9yKHZhciBsPXQuX2NvbnRleHQubG9jYWxlcyxjPTA7YzwyO2MrKyl7dmFyIHU9KGxbcl18fHt9KS5mb3JtYXQ7aWYodSYmKGEodSksbikpYnJlYWs7bD1zLmxvY2FsZVJlZ2lzdHJ5fXZhciBmPXIuc3BsaXQoIi0iKVswXTtpZihufHxmPT09cilicmVhaztyPWZ9cmV0dXJuIG58fGEocy5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKSxpPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGE9IiIsbz0iIixzPSIiO2lmKGkmJihzPWkuX21haW5BeGlzLl9pZCxhPW4/dC5faWQrczpzK3QuX2lkKSwhYXx8IWUuX3Bsb3RzW2FdKXthPSIiO2Zvcih2YXIgbD10Ll9jb3VudGVyQXhlcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY10sZj1uP3QuX2lkK3U6dSt0Ll9pZDtvfHwobz1mKTt2YXIgaD1wLmdldEZyb21JZChyLHUpO2lmKHMmJmgub3ZlcmxheWluZz09PXMpe2E9ZjticmVha319fXJldHVybiBhfHxvfWZ1bmN0aW9uIFModCl7dmFyIGU9dC50cmFuc2Zvcm1zO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9bi5fbW9kdWxlfHxfW24udHlwZV07aWYoaSYmaS5tYWtlc0RhdGEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRSh0LGUscixuKXtmb3IodmFyIGk9dC50cmFuc2Zvcm1zLGE9W3RdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxsPV9bcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGE9bC50cmFuc2Zvcm0oYSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gYX1mdW5jdGlvbiBMKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmInB4Ij09PXQuc3Vic3RyKHQubGVuZ3RoLTIpJiZwYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5tYXJnaW47aWYoIXQuX3NpemUpe3ZhciByPXQuX3NpemU9e2w6TWF0aC5yb3VuZChlLmwpLHI6TWF0aC5yb3VuZChlLnIpLHQ6TWF0aC5yb3VuZChlLnQpLGI6TWF0aC5yb3VuZChlLmIpLHA6TWF0aC5yb3VuZChlLnBhZCl9O3Iudz1NYXRoLnJvdW5kKHQud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQodC5oZWlnaHQpLXIudC1yLmJ9dC5fcHVzaG1hcmdpbnx8KHQuX3B1c2htYXJnaW49e30pLHQuX3B1c2htYXJnaW5JZHN8fCh0Ll9wdXNobWFyZ2luSWRzPXt9KX1iLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSYmZS5za2lwVXBkYXRlQ2FsYyxuPXQuX2Z1bGxMYXlvdXR8fHt9O2lmKG4uX3NraXBEZWZhdWx0cylkZWxldGUgbi5fc2tpcERlZmF1bHRzO2Vsc2V7dmFyIG8sbD10Ll9mdWxsTGF5b3V0PXt9LGM9dC5sYXlvdXR8fHt9LGY9dC5fZnVsbERhdGF8fFtdLGg9dC5fZnVsbERhdGE9W10scD10LmRhdGF8fFtdLG09dC5jYWxjZGF0YXx8W10sZz10Ll9jb250ZXh0fHx7fTt0Ll90cmFuc2l0aW9uRGF0YXx8Yi5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSxsLl9kZmx0VGl0bGU9e3Bsb3Q6eCh0LCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIikseDp4KHQsIkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpLHk6eCh0LCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiKSxjb2xvcmJhcjp4KHQsIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiKSxhbm5vdGF0aW9uOngodCwibmV3IHRleHQiKX0sbC5fdHJhY2VXb3JkPXgodCwidHJhY2UiKTt2YXIgdj1BKHQsVCk7aWYobC5fbWFwYm94QWNjZXNzVG9rZW49Zy5tYXBib3hBY2Nlc3NUb2tlbixuLl9pbml0aWFsQXV0b1NpemVJc0RvbmUpe3ZhciBfPW4ud2lkdGgsdz1uLmhlaWdodDtiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMsbCx2KSxjLndpZHRofHwobC53aWR0aD1fKSxjLmhlaWdodHx8KGwuaGVpZ2h0PXcpLGIuc2FuaXRpemVNYXJnaW5zKGwpfWVsc2V7Yi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLGwsdik7dmFyIE09IWMud2lkdGh8fCFjLmhlaWdodCxTPWwuYXV0b3NpemUsRT1nLmF1dG9zaXphYmxlO00mJihTfHxFKT9iLnBsb3RBdXRvU2l6ZSh0LGMsbCk6TSYmYi5zYW5pdGl6ZU1hcmdpbnMobCksIVMmJk0mJihjLndpZHRoPWwud2lkdGgsYy5oZWlnaHQ9bC5oZWlnaHQpfWwuX2QzbG9jYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVjaW1hbD1lLmNoYXJBdCgwKSx0LnRob3VzYW5kcz1lLmNoYXJBdCgxKSx7bnVtYmVyRm9ybWF0OmZ1bmN0aW9uKGUpe3RyeXtlPWEodCkuZm9ybWF0KHUuYWRqdXN0Rm9ybWF0KGUpKX1jYXRjaCh0KXtyZXR1cm4gdS53YXJuQmFkRm9ybWF0KGUpLHUubm9Gb3JtYXR9cmV0dXJuIGV9LHRpbWVGb3JtYXQ6aSh0KS51dGNGb3JtYXR9fSh2LGwuc2VwYXJhdG9ycyksbC5fZXh0cmFGb3JtYXQ9QSh0LGspLGwuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxsLl9kYXRhTGVuZ3RoPXAubGVuZ3RoLGwuX21vZHVsZXM9W10sbC5fdmlzaWJsZU1vZHVsZXM9W10sbC5fYmFzZVBsb3RNb2R1bGVzPVtdO3ZhciBMPWwuX3N1YnBsb3RzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPXMuY29sbGVjdGFibGVTdWJwbG90VHlwZXMsbj17fTtpZighcil7cj1bXTt2YXIgaT1zLnN1YnBsb3RzUmVnaXN0cnk7Zm9yKHZhciBhIGluIGkpe3ZhciBvPWlbYV0uYXR0cjtpZihvJiYoci5wdXNoKGEpLEFycmF5LmlzQXJyYXkobykpKWZvcihlPTA7ZTxvLmxlbmd0aDtlKyspdS5wdXNoVW5pcXVlKHIsb1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxQPWwuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxJPWwuX3NwbG9tU3VicGxvdHM9e307bC5fc3Bsb21HcmlkRGZsdD17fSxsLl9zY2F0dGVyU3RhY2tPcHRzPXt9LGwuX2ZpcnN0U2NhdHRlcj17fSxsLl9hbGlnbm1lbnRPcHRzPXt9LGwuX2NvbG9yQXhlcz17fSxsLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30sbC5fdHJhY2VVaWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5fZnVsbElucHV0O28hPT1uJiZhLnB1c2gobyksbj1vfXZhciBzPWEubGVuZ3RoLGw9bmV3IEFycmF5KGkpLGM9e307ZnVuY3Rpb24gZih0LGUpe2xbZV09dCxjW3RdPTF9ZnVuY3Rpb24gaCh0LGUpe2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdCYmIWNbdF0pcmV0dXJuIGYodCxlKSwhMH1mb3Iocj0wO3I8aTtyKyspe3ZhciBwPWVbcl0udWlkOyJudW1iZXIiPT10eXBlb2YgcCYmKHA9U3RyaW5nKHApKSxoKHAscil8fChyPHMmJmgoYVtyXS51aWQscil8fGYodS5yYW5kc3RyKGMpLHIpKX1yZXR1cm4gbH0oZixwKSxsLl9nbG9iYWxUcmFuc2Zvcm1zPSh0Ll9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3JtcyxiLnN1cHBseURhdGFEZWZhdWx0cyhwLGgsYyxsKTt2YXIgTz1PYmplY3Qua2V5cyhQLngpLHo9T2JqZWN0LmtleXMoUC55KTtpZihPLmxlbmd0aD4xJiZ6Lmxlbmd0aD4xKXtmb3Iocy5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKShjLGwpLG89MDtvPE8ubGVuZ3RoO28rKyl1LnB1c2hVbmlxdWUoTC54YXhpcyxPW29dKTtmb3Iobz0wO288ei5sZW5ndGg7bysrKXUucHVzaFVuaXF1ZShMLnlheGlzLHpbb10pO2Zvcih2YXIgRCBpbiBJKXUucHVzaFVuaXF1ZShMLmNhcnRlc2lhbixEKX1pZihsLl9oYXM9Yi5faGFzUGxvdFR5cGUuYmluZChsKSxmLmxlbmd0aD09PWgubGVuZ3RoKWZvcihvPTA7bzxoLmxlbmd0aDtvKyspeShoW29dLGZbb10pO2Iuc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHMoYyxsLGgsdC5fdHJhbnNpdGlvbkRhdGEpO3ZhciBSPWwuX3Zpc2libGVNb2R1bGVzLEY9W107Zm9yKG89MDtvPFIubGVuZ3RoO28rKyl7dmFyIEI9UltvXS5jcm9zc1RyYWNlRGVmYXVsdHM7QiYmdS5wdXNoVW5pcXVlKEYsQil9Zm9yKG89MDtvPEYubGVuZ3RoO28rKylGW29dKGgsbCk7bC5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1sLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09bC5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJk8ubGVuZ3RoPjE1JiZ6Lmxlbmd0aD4xNSYmMD09PWwuc2hhcGVzLmxlbmd0aCYmMD09PWwuaW1hZ2VzLmxlbmd0aCxiLmxpbmtTdWJwbG90cyhoLGwsZixuKSxiLmNsZWFuUGxvdChoLGwsZixuKTt2YXIgTj0hKCFuLl9oYXN8fCFuLl9oYXMoImdsMmQiKSksaj0hKCFsLl9oYXN8fCFsLl9oYXMoImdsMmQiKSksVT0hKCFuLl9oYXN8fCFuLl9oYXMoImNhcnRlc2lhbiIpKXx8TixWPSEoIWwuX2hhc3x8IWwuX2hhcygiY2FydGVzaWFuIikpfHxqO1UmJiFWP24uX2JnTGF5ZXIucmVtb3ZlKCk6ViYmIVUmJihsLl9zaG91bGRDcmVhdGVCZ0xheWVyPSEwKSxuLl96b29tbGF5ZXImJiF0Ll9kcmFnZ2luZyYmZCh7X2Z1bGxMYXlvdXQ6bn0pLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXTtlLm1ldGEmJihyPWUuX21ldGE9e21ldGE6ZS5tZXRhLGxheW91dDp7bWV0YTplLm1ldGF9fSk7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07YS5tZXRhP25bYS5pbmRleF09YS5fbWV0YT17bWV0YTphLm1ldGF9OmUubWV0YSYmKGEuX21ldGE9e21ldGE6ZS5tZXRhfSksZS5tZXRhJiYoYS5fbWV0YS5sYXlvdXQ9e21ldGE6ZS5tZXRhfSl9bi5sZW5ndGgmJihyfHwocj1lLl9tZXRhPXt9KSxyLmRhdGE9bil9KGgsbCkseShsLG4pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcnNjYWxlIiwiY3Jvc3NUcmFjZURlZmF1bHRzIikoaCxsKSxsLl9wcmVHVUl8fChsLl9wcmVHVUk9e30pLGwuX3RyYWNlUHJlR1VJfHwobC5fdHJhY2VQcmVHVUk9e30pO3ZhciBILHE9bC5fdHJhY2VQcmVHVUksRz17fTtmb3IoSCBpbiBxKUdbSF09Im9sZCI7Zm9yKG89MDtvPGgubGVuZ3RoO28rKylHW0g9aFtvXS5fZnVsbElucHV0LnVpZF18fChxW0hdPXt9KSxHW0hdPSJuZXciO2ZvcihIIGluIEcpIm9sZCI9PT1HW0hdJiZkZWxldGUgcVtIXTtDKGwpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsIm1ha2VEYXRhIikobCkscnx8bS5sZW5ndGghPT1oLmxlbmd0aHx8Yi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGMobSxoKX19LGIuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT0odFtyXXx8W10pWzBdO2lmKGkmJmkudHJhY2Upe3ZhciBhPWkudHJhY2U7aWYoYS5faGFzQ2FsY1RyYW5zZm9ybSl7dmFyIG8scyxsLGM9YS5fYXJyYXlBdHRycztmb3Iobz0wO288Yy5sZW5ndGg7bysrKXM9Y1tvXSxsPXUubmVzdGVkUHJvcGVydHkoYSxzKS5nZXQoKS5zbGljZSgpLHUubmVzdGVkUHJvcGVydHkobixzKS5zZXQobCl9aS50cmFjZT1ufX19LGIuY3JlYXRlVHJhbnNpdGlvbkRhdGE9ZnVuY3Rpb24odCl7dC5fdHJhbnNpdGlvbkRhdGF8fCh0Ll90cmFuc2l0aW9uRGF0YT17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXM9W10pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2h8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcnx8KHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyPTApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3N8fCh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzPVtdKX0sYi5faGFzUGxvdFR5cGU9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspaWYocltlXS5uYW1lPT09dClyZXR1cm4hMDt2YXIgbj10aGlzLl9tb2R1bGVzfHxbXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgaT1uW2VdLm5hbWU7aWYoaT09PXQpcmV0dXJuITA7dmFyIGE9cy5tb2R1bGVzW2ldO2lmKGEmJmEuY2F0ZWdvcmllc1t0XSlyZXR1cm4hMH1yZXR1cm4hMX0sYi5jbGVhblBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtzLmNsZWFuJiZzLmNsZWFuKHQsZSxyLG4pfXZhciBsPW4uX2hhcyYmbi5faGFzKCJnbCIpLGM9ZS5faGFzJiZlLl9oYXMoImdsIik7bCYmIWMmJnZvaWQgMCE9PW4uX2dsY29udGFpbmVyJiYobi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksbi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIubm8td2ViZ2wiKS5yZW1vdmUoKSxuLl9nbGNhbnZhcz1udWxsKTt2YXIgdT0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBmPXJbaV0udWlkO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspe2lmKGY9PT10W2FdLnVpZCljb250aW51ZSB0fXUmJm4uX2luZm9sYXllci5zZWxlY3QoIi5jYiIrZikucmVtb3ZlKCl9fSxiLmxpbmtTdWJwbG90cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fcGxvdHN8fHt9LGw9ZS5fcGxvdHM9e30sYz1lLl9zdWJwbG90cyxmPXtfZnVsbERhdGE6dCxfZnVsbExheW91dDplfSxoPWMuY2FydGVzaWFuLmNvbmNhdChjLmdsMmR8fFtdKTtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKXt2YXIgZCxtPWhbaV0sZz1vW21dLHY9cC5nZXRGcm9tSWQoZixtLCJ4IikseT1wLmdldEZyb21JZChmLG0sInkiKTtmb3IoZz9kPWxbbV09ZzooZD1sW21dPXt9KS5pZD1tLHYuX2NvdW50ZXJBeGVzLnB1c2goeS5faWQpLHkuX2NvdW50ZXJBeGVzLnB1c2godi5faWQpLHYuX3N1YnBsb3RzV2l0aC5wdXNoKG0pLHkuX3N1YnBsb3RzV2l0aC5wdXNoKG0pLGQueGF4aXM9dixkLnlheGlzPXksZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHg9dFthXTtpZih4LnhheGlzPT09ZC54YXhpcy5faWQmJngueWF4aXM9PT1kLnlheGlzLl9pZCYmITE9PT14LmNsaXBvbmF4aXMpe2QuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319fXZhciBiLF89cC5saXN0KGYsbnVsbCwhMCk7Zm9yKGk9MDtpPF8ubGVuZ3RoO2krKyl7dmFyIHc9bnVsbDsoYj1fW2ldKS5vdmVybGF5aW5nJiYodz1wLmdldEZyb21JZChmLGIub3ZlcmxheWluZykpJiZ3Lm92ZXJsYXlpbmcmJihiLm92ZXJsYXlpbmc9ITEsdz1udWxsKSxiLl9tYWluQXhpcz13fHxiLHcmJihiLmRvbWFpbj13LmRvbWFpbi5zbGljZSgpKSxiLl9hbmNob3JBeGlzPSJmcmVlIj09PWIuYW5jaG9yP251bGw6cC5nZXRGcm9tSWQoZixiLmFuY2hvcil9Zm9yKGk9MDtpPF8ubGVuZ3RoO2krKylpZigoYj1fW2ldKS5fY291bnRlckF4ZXMuc29ydChwLmlkU29ydCksYi5fc3VicGxvdHNXaXRoLnNvcnQodS5zdWJwbG90U29ydCksYi5fbWFpblN1YnBsb3Q9TShiLGUpLGIuX2NvdW50ZXJBeGVzLmxlbmd0aCYmKGIuc3Bpa2Vtb2RlJiYtMSE9PWIuc3Bpa2Vtb2RlLmluZGV4T2YoImFjcm9zcyIpfHxiLmF1dG9tYXJnaW4mJmIubWlycm9yJiYiZnJlZSIhPT1iLmFuY2hvcnx8cy5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoYikpKXt2YXIgVD0xLGs9MDtmb3IoYT0wO2E8Yi5fY291bnRlckF4ZXMubGVuZ3RoO2ErKyl7dmFyIEE9cC5nZXRGcm9tSWQoZixiLl9jb3VudGVyQXhlc1thXSk7VD1NYXRoLm1pbihULEEuZG9tYWluWzBdKSxrPU1hdGgubWF4KGssQS5kb21haW5bMV0pfVQ8ayYmKGIuX2NvdW50ZXJEb21haW5NaW49VCxiLl9jb3VudGVyRG9tYWluTWF4PWspfX0sYi5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtmb3Iocj1bXSwoZT10Ll9tb2R1bGUuX2NvbG9yQXR0cnMpfHwodC5fbW9kdWxlLl9jb2xvckF0dHJzPWU9W10sbC5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcywoZnVuY3Rpb24odCxuLGksYSl7clthXT1uLHIubGVuZ3RoPWErMSwiY29sb3IiPT09dC52YWxUeXBlJiZ2b2lkIDA9PT10LmRmbHQmJmUucHVzaChyLmpvaW4oIi4iKSl9KSkpLG49MDtuPGUubGVuZ3RoO24rKyl7dS5uZXN0ZWRQcm9wZXJ0eSh0LCJfaW5wdXQuIitlW25dKS5nZXQoKXx8dS5uZXN0ZWRQcm9wZXJ0eSh0LGVbbl0pLnNldChudWxsKX19LGIuc3VwcGx5RGF0YURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxsPW4uX21vZHVsZXMsZj1uLl92aXNpYmxlTW9kdWxlcyxoPW4uX2Jhc2VQbG90TW9kdWxlcyxwPTAsZD0wO2Z1bmN0aW9uIG0odCl7ZS5wdXNoKHQpO3ZhciByPXQuX21vZHVsZTtyJiYodS5wdXNoVW5pcXVlKGwsciksITA9PT10LnZpc2libGUmJnUucHVzaFVuaXF1ZShmLHIpLHUucHVzaFVuaXF1ZShoLHQuX21vZHVsZS5iYXNlUGxvdE1vZHVsZSkscCsrLCExIT09dC5faW5wdXQudmlzaWJsZSYmZCsrKX1uLl90cmFuc2Zvcm1Nb2R1bGVzPVtdO3ZhciBnPXt9LHY9W10seD0oci50ZW1wbGF0ZXx8e30pLmRhdGF8fHt9LF89Yy50cmFjZVRlbXBsYXRlcih4KTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXtpZihvPXRbaV0sKGE9Xy5uZXdUcmFjZShvKSkudWlkPW4uX3RyYWNlVWlkc1tpXSxiLnN1cHBseVRyYWNlRGVmYXVsdHMobyxhLGQsbixpKSxhLmluZGV4PWksYS5faW5wdXQ9byxhLl9leHBhbmRlZEluZGV4PXAsYS50cmFuc2Zvcm1zJiZhLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgdz0hMSE9PW8udmlzaWJsZSYmITE9PT1hLnZpc2libGUsVD1FKGEsZSxyLG4pLGs9MDtrPFQubGVuZ3RoO2srKyl7dmFyIEE9VFtrXSxNPXtfdGVtcGxhdGU6YS5fdGVtcGxhdGUsdHlwZTphLnR5cGUsdWlkOmEudWlkK2t9O3cmJiExPT09QS52aXNpYmxlJiZkZWxldGUgQS52aXNpYmxlLGIuc3VwcGx5VHJhY2VEZWZhdWx0cyhBLE0scCxuLGkpLHkoTSxBKSxNLmluZGV4PWksTS5faW5wdXQ9byxNLl9mdWxsSW5wdXQ9YSxNLl9leHBhbmRlZEluZGV4PXAsTS5fZXhwYW5kZWRJbnB1dD1BLG0oTSl9ZWxzZSBhLl9mdWxsSW5wdXQ9YSxhLl9leHBhbmRlZElucHV0PWEsbShhKTtzLnRyYWNlSXMoYSwiY2FycGV0QXhpcyIpJiYoZ1thLmNhcnBldF09YSkscy50cmFjZUlzKGEsImNhcnBldERlcGVuZGVudCIpJiZ2LnB1c2goaSl9Zm9yKGk9MDtpPHYubGVuZ3RoO2krKylpZigoYT1lW3ZbaV1dKS52aXNpYmxlKXt2YXIgUz1nW2EuY2FycGV0XTthLl9jYXJwZXQ9UyxTJiZTLnZpc2libGU/KGEueGF4aXM9Uy54YXhpcyxhLnlheGlzPVMueWF4aXMpOmEudmlzaWJsZT0hMX19LGIuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsbil7cmV0dXJuIHUuY29lcmNlKHR8fHt9LHIsbSxlLG4pfWlmKG4oIm1vZGUiKSxuKCJkaXJlY3Rpb24iKSxuKCJmcm9tY3VycmVudCIpLEFycmF5LmlzQXJyYXkodC5mcmFtZSkpZm9yKHIuZnJhbWU9W10sZT0wO2U8dC5mcmFtZS5sZW5ndGg7ZSsrKXIuZnJhbWVbZV09Yi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWVbZV18fHt9KTtlbHNlIHIuZnJhbWU9Yi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSxlPTA7ZTx0LnRyYW5zaXRpb24ubGVuZ3RoO2UrKylyLnRyYW5zaXRpb25bZV09Yi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9uW2VdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249Yi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LGIuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHUuY29lcmNlKHR8fHt9LGUsbS5mcmFtZSxyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoInJlZHJhdyIpLGV9LGIuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30sZSxtLnRyYW5zaXRpb24scixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJlYXNpbmciKSxlfSxiLnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiB1LmNvZXJjZSh0LGUsZyxyLG4pfXJldHVybiByKCJncm91cCIpLHIoIm5hbWUiKSxyKCJ0cmFjZXMiKSxyKCJiYXNlZnJhbWUiKSxyKCJkYXRhIikscigibGF5b3V0IiksZX0sYi5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1uLmNvbG9yd2F5fHxmLmRlZmF1bHRzLGw9b1tyJW8ubGVuZ3RoXTtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIHUuY29lcmNlKHQsZSxiLmF0dHJpYnV0ZXMscixuKX12YXIgaD1jKCJ2aXNpYmxlIik7YygidHlwZSIpLGMoIm5hbWUiLG4uX3RyYWNlV29yZCsiICIraSksYygidWlyZXZpc2lvbiIsbi51aXJldmlzaW9uKTt2YXIgcD1iLmdldE1vZHVsZShlKTtpZihlLl9tb2R1bGU9cCxwKXt2YXIgZD1wLmJhc2VQbG90TW9kdWxlLG09ZC5hdHRyLGc9ZC5hdHRyaWJ1dGVzO2lmKG0mJmcpe3ZhciB2PW4uX3N1YnBsb3RzLHk9IiI7aWYoaHx8ImdsMmQiIT09ZC5uYW1lKXtpZihBcnJheS5pc0FycmF5KG0pKWZvcihhPTA7YTxtLmxlbmd0aDthKyspe3ZhciB4PW1bYV0sXz11LmNvZXJjZSh0LGUsZyx4KTt2W3hdJiZ1LnB1c2hVbmlxdWUodlt4XSxfKSx5Kz1ffWVsc2UgeT11LmNvZXJjZSh0LGUsZyxtKTt2W2QubmFtZV0mJnUucHVzaFVuaXF1ZSh2W2QubmFtZV0seSl9fX1yZXR1cm4gaCYmKGMoImN1c3RvbWRhdGEiKSxjKCJpZHMiKSxjKCJtZXRhIikscy50cmFjZUlzKGUsInNob3dMZWdlbmQiKT8odS5jb2VyY2UodCxlLHAuYXR0cmlidXRlcy5zaG93bGVnZW5kP3AuYXR0cmlidXRlczpiLmF0dHJpYnV0ZXMsInNob3dsZWdlbmQiKSxjKCJsZWdlbmRncm91cCIpLGMoImxlZ2VuZGdyb3VwdGl0bGUudGV4dCIpLGMoImxlZ2VuZHJhbmsiKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMCk6ZS5fZGZsdFNob3dMZWdlbmQ9ITEscCYmcC5zdXBwbHlEZWZhdWx0cyh0LGUsbCxuKSxzLnRyYWNlSXMoZSwibm9PcGFjaXR5Iil8fGMoIm9wYWNpdHkiKSxzLnRyYWNlSXMoZSwibm90TGVnZW5kSXNvbGF0YWJsZSIpJiYoZS52aXNpYmxlPSEhZS52aXNpYmxlKSxzLnRyYWNlSXMoZSwibm9Ib3ZlciIpfHwoZS5ob3ZlcnRlbXBsYXRlfHx1LmNvZXJjZUhvdmVyaW5mbyh0LGUsbiksInBhcmNhdHMiIT09ZS50eXBlJiZzLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSxsLG4pKSxwJiZwLnNlbGVjdFBvaW50cyYmYygic2VsZWN0ZWRwb2ludHMiKSxiLnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsZSxuKSksZX0sYi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm09UyxiLnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtpZihlLl9sZW5ndGh8fFModCkpe3ZhciBuPXIuX2dsb2JhbFRyYW5zZm9ybXN8fFtdLGk9ci5fdHJhbnNmb3JtTW9kdWxlc3x8W107aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpfHwwIT09bi5sZW5ndGgpZm9yKHZhciBhPXQudHJhbnNmb3Jtc3x8W10sbz1uLmNvbmNhdChhKSxzPWUudHJhbnNmb3Jtcz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjLGY9b1tsXSxoPWYudHlwZSxwPV9baF0sZD0hKGYuX21vZHVsZSYmZi5fbW9kdWxlPT09cCksbT1wJiYiZnVuY3Rpb24iPT10eXBlb2YgcC50cmFuc2Zvcm07cHx8dS53YXJuKCJVbnJlY29nbml6ZWQgdHJhbnNmb3JtIHR5cGUgIitoKyIuIikscCYmcC5zdXBwbHlEZWZhdWx0cyYmKGR8fG0pPygoYz1wLnN1cHBseURlZmF1bHRzKGYsZSxyLHQpKS50eXBlPWgsYy5fbW9kdWxlPXAsdS5wdXNoVW5pcXVlKGkscCkpOmM9dS5leHRlbmRGbGF0KHt9LGYpLHMucHVzaChjKX19fSxiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIHUuY29lcmNlKHQsZSxiLmxheW91dEF0dHJpYnV0ZXMscixuKX12YXIgaT10LnRlbXBsYXRlO3UuaXNQbGFpbk9iamVjdChpKSYmKGUudGVtcGxhdGU9aSxlLl90ZW1wbGF0ZT1pLmxheW91dCxlLl9kYXRhVGVtcGxhdGU9aS5kYXRhKSxuKCJhdXRvdHlwZW51bWJlcnMiKTt2YXIgYT11LmNvZXJjZUZvbnQobiwiZm9udCIpLG89YS5zaXplO3UuY29lcmNlRm9udChuLCJ0aXRsZS5mb250Iix1LmV4dGVuZEZsYXQoe30sYSx7c2l6ZTpNYXRoLnJvdW5kKDEuNCpvKX0pKSxuKCJ0aXRsZS50ZXh0IixlLl9kZmx0VGl0bGUucGxvdCksbigidGl0bGUueHJlZiIpLG4oInRpdGxlLnlyZWYiKSxuKCJ0aXRsZS54IiksbigidGl0bGUueSIpLG4oInRpdGxlLnhhbmNob3IiKSxuKCJ0aXRsZS55YW5jaG9yIiksbigidGl0bGUucGFkLnQiKSxuKCJ0aXRsZS5wYWQuciIpLG4oInRpdGxlLnBhZC5iIiksbigidGl0bGUucGFkLmwiKSxuKCJ1bmlmb3JtdGV4dC5tb2RlIikmJm4oInVuaWZvcm10ZXh0Lm1pbnNpemUiKSxuKCJhdXRvc2l6ZSIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSx0LndpZHRoJiZ0LmhlaWdodCYmYi5zYW5pdGl6ZU1hcmdpbnMoZSkscy5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh0LGUpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKTt2YXIgbD1uKCJ1aXJldmlzaW9uIik7bigiZWRpdHJldmlzaW9uIixsKSxuKCJzZWxlY3Rpb25yZXZpc2lvbiIsbCkscy5nZXRDb21wb25lbnRNZXRob2QoIm1vZGViYXIiLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpKHQsZSkscy5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsInN1cHBseURyYXdOZXdTaGFwZURlZmF1bHRzIikodCxlLG4pLG4oIm1ldGEiKSx1LmlzUGxhaW5PYmplY3QodC50cmFuc2l0aW9uKSYmKG4oInRyYW5zaXRpb24uZHVyYXRpb24iKSxuKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG4oInRyYW5zaXRpb24ub3JkZXJpbmciKSkscy5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzIikodCxlLG4pfSxiLnBsb3RBdXRvU2l6ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXQuX2NvbnRleHR8fHt9LHM9YS5mcmFtZU1hcmdpbnMsbD11LmlzUGxvdERpdih0KTtpZihsJiZ0LmVtaXQoInBsb3RseV9hdXRvc2l6ZSIpLGEuZmlsbEZyYW1lKW49d2luZG93LmlubmVyV2lkdGgsaT13aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtlbHNle3ZhciBjPWw/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307aWYobj1MKGMud2lkdGgpfHxMKGMubWF4V2lkdGgpfHxyLndpZHRoLGk9TChjLmhlaWdodCl8fEwoYy5tYXhIZWlnaHQpfHxyLmhlaWdodCxvKHMpJiZzPjApe3ZhciBmPTEtMipzO249TWF0aC5yb3VuZChmKm4pLGk9TWF0aC5yb3VuZChmKmkpfX12YXIgaD1iLmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHA9Yi5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxoJiYobj1oKSxpPHAmJihpPXApO3ZhciBkPSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsbT0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWkpPjE7KG18fGQpJiYoZCYmKHIud2lkdGg9biksbSYmKHIuaGVpZ2h0PWkpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0Oml9KSxiLnNhbml0aXplTWFyZ2lucyhyKX0sYi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8sbD1zLmNvbXBvbmVudHNSZWdpc3RyeSxjPWUuX2Jhc2VQbG90TW9kdWxlcyxmPXMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gbCkobz1sW2ldKS5pbmNsdWRlQmFzZVBsb3QmJm8uaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBoIGluIGMubGVuZ3RofHxjLnB1c2goZiksZS5faGFzKCJjYXJ0ZXNpYW4iKSYmKHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwiY29udGVudERlZmF1bHRzIikodCxlKSxmLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbaF0uc29ydCh1LnN1YnBsb3RTb3J0KTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKShvPWNbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspKG89cFthXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmby5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBsKShvPWxbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sYi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLGUuX2dsY29udGFpbmVyLnJlbW92ZSgpLGUuX2dsY2FudmFzPW51bGwpLGUuX21vZGVCYXImJmUuX21vZGVCYXIuZGVzdHJveSgpLHQuX3RyYW5zaXRpb25EYXRhJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MubGVuZ3RoPTApLHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmKSksdS5jbGVhclRocm90dGxlKCksdS5jbGVhclJlc3BvbnNpdmUodCksZGVsZXRlIHQuZGF0YSxkZWxldGUgdC5sYXlvdXQsZGVsZXRlIHQuX2Z1bGxEYXRhLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0LGRlbGV0ZSB0LmNhbGNkYXRhLGRlbGV0ZSB0LmVtcHR5LGRlbGV0ZSB0LmZpZCxkZWxldGUgdC51bmRvcXVldWUsZGVsZXRlIHQudW5kb251bSxkZWxldGUgdC5hdXRvcGxheSxkZWxldGUgdC5jaGFuZ2VkLGRlbGV0ZSB0Ll9wcm9taXNlcyxkZWxldGUgdC5fcmVkcmF3VGltZXIsZGVsZXRlIHQuX2htbHVtY291bnQsZGVsZXRlIHQuX2htcGl4Y291bnQsZGVsZXRlIHQuX3RyYW5zaXRpb25EYXRhLGRlbGV0ZSB0Ll90cmFuc2l0aW9uaW5nLGRlbGV0ZSB0Ll9pbml0aWFsQXV0b1NpemUsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24sZGVsZXRlIHQuX2RyYWdnaW5nLGRlbGV0ZSB0Ll9kcmFnZ2VkLGRlbGV0ZSB0Ll9kcmFnZGF0YSxkZWxldGUgdC5faG92ZXJkYXRhLGRlbGV0ZSB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MsZGVsZXRlIHQuX2VkaXRpbmcsZGVsZXRlIHQuX21vdXNlRG93blRpbWUsZGVsZXRlIHQuX2xlZ2VuZE1vdXNlRG93blRpbWUsdC5yZW1vdmVBbGxMaXN0ZW5lcnMmJnQucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LGIuc3R5bGU9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0Ll92aXNpYmxlTW9kdWxlcyxuPVtdO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV07aS5zdHlsZSYmdS5wdXNoVW5pcXVlKG4saS5zdHlsZSl9Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKHQpfSxiLnNhbml0aXplTWFyZ2lucz1mdW5jdGlvbih0KXtpZih0JiZ0Lm1hcmdpbil7dmFyIGUscj10LndpZHRoLG49dC5oZWlnaHQsaT10Lm1hcmdpbixhPXItKGkubCtpLnIpLG89bi0oaS50K2kuYik7YTwwJiYoZT0oci0xKS8oaS5sK2kuciksaS5sPU1hdGguZmxvb3IoZSppLmwpLGkucj1NYXRoLmZsb29yKGUqaS5yKSksbzwwJiYoZT0obi0xKS8oaS50K2kuYiksaS50PU1hdGguZmxvb3IoZSppLnQpLGkuYj1NYXRoLmZsb29yKGUqaS5iKSl9fSxiLmNsZWFyQXV0b01hcmdpbklkcz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzPXt9fSxiLmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbih0LGUpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHNbZV09MX07Yi5hdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9bi53aWR0aCxhPW4uaGVpZ2h0LG89bi5tYXJnaW4scz11LmNvbnN0cmFpbihpLW8ubC1vLnIsMiw2NCksbD11LmNvbnN0cmFpbihhLW8udC1vLmIsMiw2NCksYz1NYXRoLm1heCgwLGktcyksZj1NYXRoLm1heCgwLGEtbCksaD1uLl9wdXNobWFyZ2luLHA9bi5fcHVzaG1hcmdpbklkcztpZighMSE9PW8uYXV0b2V4cGFuZCl7aWYocil7dmFyIGQ9ci5wYWQ7aWYodm9pZCAwPT09ZCYmKGQ9TWF0aC5taW4oMTIsby5sLG8ucixvLnQsby5iKSksYyl7dmFyIG09KHIubCtyLnIpL2M7bT4xJiYoci5sLz1tLHIuci89bSl9aWYoZil7dmFyIGc9KHIudCtyLmIpL2Y7Zz4xJiYoci50Lz1nLHIuYi89Zyl9dmFyIHY9dm9pZCAwIT09ci54bD9yLnhsOnIueCx5PXZvaWQgMCE9PXIueHI/ci54cjpyLngseD12b2lkIDAhPT1yLnl0P3IueXQ6ci55LF89dm9pZCAwIT09ci55Yj9yLnliOnIueTtoW2VdPXtsOnt2YWw6dixzaXplOnIubCtkfSxyOnt2YWw6eSxzaXplOnIucitkfSxiOnt2YWw6XyxzaXplOnIuYitkfSx0Ont2YWw6eCxzaXplOnIudCtkfX0scFtlXT0xfWVsc2UgZGVsZXRlIGhbZV0sZGVsZXRlIHBbZV07aWYoIW4uX3JlcGxvdHRpbmcpcmV0dXJuIGIuZG9BdXRvTWFyZ2luKHQpfX0sYi5kb0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUud2lkdGgsbj1lLmhlaWdodDtlLl9zaXplfHwoZS5fc2l6ZT17fSksQyhlKTt2YXIgaT1lLl9zaXplLGE9ZS5tYXJnaW4sbD11LmV4dGVuZEZsYXQoe30saSksYz1hLmwsZj1hLnIsaD1hLnQsZD1hLmIsbT1lLl9wdXNobWFyZ2luLGc9ZS5fcHVzaG1hcmdpbklkcztpZighMSE9PWUubWFyZ2luLmF1dG9leHBhbmQpe2Zvcih2YXIgdiBpbiBtKWdbdl18fGRlbGV0ZSBtW3ZdO2Zvcih2YXIgeSBpbiBtLmJhc2U9e2w6e3ZhbDowLHNpemU6Y30scjp7dmFsOjEsc2l6ZTpmfSx0Ont2YWw6MSxzaXplOmh9LGI6e3ZhbDowLHNpemU6ZH19LG0pe3ZhciB4PW1beV0ubHx8e30sXz1tW3ldLmJ8fHt9LHc9eC52YWwsVD14LnNpemUsaz1fLnZhbCxBPV8uc2l6ZTtmb3IodmFyIE0gaW4gbSl7aWYobyhUKSYmbVtNXS5yKXt2YXIgUz1tW01dLnIudmFsLEU9bVtNXS5yLnNpemU7aWYoUz53KXt2YXIgTD0oVCpTKyhFLXIpKncpLyhTLXcpLFA9KEUqKDEtdykrKFQtcikqKDEtUykpLyhTLXcpO0wrUD5jK2YmJihjPUwsZj1QKX19aWYobyhBKSYmbVtNXS50KXt2YXIgST1tW01dLnQudmFsLE89bVtNXS50LnNpemU7aWYoST5rKXt2YXIgej0oQSpJKyhPLW4pKmspLyhJLWspLEQ9KE8qKDEtaykrKEEtbikqKDEtSSkpLyhJLWspO3orRD5kK2gmJihkPXosaD1EKX19fX19dmFyIFI9dS5jb25zdHJhaW4oci1hLmwtYS5yLDIsNjQpLEY9dS5jb25zdHJhaW4obi1hLnQtYS5iLDIsNjQpLEI9TWF0aC5tYXgoMCxyLVIpLE49TWF0aC5tYXgoMCxuLUYpO2lmKEIpe3ZhciBqPShjK2YpL0I7aj4xJiYoYy89aixmLz1qKX1pZihOKXt2YXIgVT0oZCtoKS9OO1U+MSYmKGQvPVUsaC89VSl9aWYoaS5sPU1hdGgucm91bmQoYyksaS5yPU1hdGgucm91bmQoZiksaS50PU1hdGgucm91bmQoaCksaS5iPU1hdGgucm91bmQoZCksaS5wPU1hdGgucm91bmQoYS5wYWQpLGkudz1NYXRoLnJvdW5kKHIpLWkubC1pLnIsaS5oPU1hdGgucm91bmQobiktaS50LWkuYiwhZS5fcmVwbG90dGluZyYmYi5kaWRNYXJnaW5DaGFuZ2UobCxpKSl7Il9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50ImluIGU/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCsrOmUuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ9MTt2YXIgVj0zKigxK09iamVjdC5rZXlzKGcpLmxlbmd0aCk7aWYoZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudDxWKXJldHVybiBzLmNhbGwoIl9kb1Bsb3QiLHQpO2UuX3NpemU9bCx1Lndhcm4oIlRvbyBtYW55IGF1dG8tbWFyZ2luIHJlZHJhd3MuIil9IWZ1bmN0aW9uKHQpe3ZhciBlPXAubGlzdCh0LCIiLCEwKTtbIl9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3ciLCJfaGlkZUNvdW50ZXJBeGlzSW5zaWRlVGlja0xhYmVscyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdW3RdO24mJm4oKX19KSl9KHQpfTt2YXIgUD1bImwiLCJyIiwidCIsImIiLCJwIiwidyIsImgiXTtmdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj0hMTt2YXIgaT1bYi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEsZnVuY3Rpb24odCl7dmFyIGU9UHJvbWlzZS5yZXNvbHZlKCk7aWYoIXQpcmV0dXJuIGU7Zm9yKDt0Lmxlbmd0aDspZT1lLnRoZW4odC5zaGlmdCgpKTtyZXR1cm4gZX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyl9LHIucHJlcGFyZUZuLGIucmVob3ZlcixmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW5nIixbXSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkpe3QuX3RyYW5zaXRpb25pbmc9ITAsZS5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe249ITB9KSksci5yZWRyYXcmJnQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKCJyZWRyYXciLHQpfSkpLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXt0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW50ZXJydXB0ZWQiLFtdKX0pKTt2YXIgYT0wLG89MDtmdW5jdGlvbiBsKCl7cmV0dXJuIGErKyxmdW5jdGlvbigpe28rKyxufHxvIT09YXx8ZnVuY3Rpb24oZSl7aWYoIXQuX3RyYW5zaXRpb25EYXRhKXJldHVybjsoZnVuY3Rpb24odCl7aWYodClmb3IoO3QubGVuZ3RoOyl0LnNoaWZ0KCl9KSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBzLmNhbGwoInJlZHJhdyIsdCl9KSkudGhlbigoZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmVkIixbXSl9KSkudGhlbihlKX0oaSl9fXIucnVuRm4obCksc2V0VGltZW91dChsKCkpfSkpfV0sYT11LnN5bmNPckFzeW5jKGksdCk7cmV0dXJuIGEmJmEudGhlbnx8KGE9UHJvbWlzZS5yZXNvbHZlKCkpLGEudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX1iLmRpZE1hcmdpbkNoYW5nZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8UC5sZW5ndGg7cisrKXt2YXIgbj1QW3JdLGk9dFtuXSxhPWVbbl07aWYoIW8oaSl8fE1hdGguYWJzKGEtaSk+MSlyZXR1cm4hMH1yZXR1cm4hMX0sYi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpLGEpeyhpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJmIuc3VwcGx5RGVmYXVsdHModCk7dmFyIG89aT90Ll9mdWxsRGF0YTp0LmRhdGEscz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQsbD0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzO2Z1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gZT8iX2Z1bmN0aW9uXyI6bnVsbDtpZih1LmlzUGxhaW5PYmplY3QodCkpe3ZhciBuLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZigtMT09PVsiXyIsIlsiXS5pbmRleE9mKGEuY2hhckF0KDApKSlpZigiZnVuY3Rpb24iIT10eXBlb2YgdFthXSl7aWYoImtlZXBkYXRhIj09PXIpe2lmKCJzcmMiPT09YS5zdWJzdHIoYS5sZW5ndGgtMykpcmV0dXJufWVsc2UgaWYoImtlZXBzdHJlYW0iPT09cil7aWYoInN0cmluZyI9PXR5cGVvZihuPXRbYSsic3JjIl0pJiZuLmluZGV4T2YoIjoiKT4wJiYhdS5pc1BsYWluT2JqZWN0KHQuc3RyZWFtKSlyZXR1cm59ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFthKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApcmV0dXJuO2lbYV09Yyh0W2FdLGUpfWVsc2UgZSYmKGlbYV09Il9mdW5jdGlvbiIpfSkpLGl9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZSl9KSk6dS5pc1R5cGVkQXJyYXkodCk/dS5zaW1wbGVNYXAodCx1LmlkZW50aXR5KTp1LmlzSlNEYXRlKHQpP3UubXMyRGF0ZVRpbWVMb2NhbCgrdCk6dH12YXIgZj17ZGF0YToob3x8W10pLm1hcCgoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KSl9O2lmKCFlJiYoZi5sYXlvdXQ9YyhzKSxpKSl7dmFyIGg9cy5fc2l6ZTtmLmxheW91dC5jb21wdXRlZD17bWFyZ2luOntiOmguYixsOmgubCxyOmgucix0OmgudH19fXJldHVybiBsJiYoZi5mcmFtZXM9YyhsKSksYSYmKGYuY29uZmlnPWModC5fY29udGV4dCwhMCkpLCJvYmplY3QiPT09bj9mOkpTT04uc3RyaW5naWZ5KGYpfSxiLm1vZGlmeUZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspc3dpdGNoKChuPWVbcl0pLnR5cGUpe2Nhc2UicmVwbGFjZSI6aT1uLnZhbHVlO3ZhciBzPShhW24uaW5kZXhdfHx7fSkubmFtZSxsPWkubmFtZTthW24uaW5kZXhdPW9bbF09aSxsIT09cyYmKGRlbGV0ZSBvW3NdLG9bbF09aSk7YnJlYWs7Y2FzZSJpbnNlcnQiOm9bKGk9bi52YWx1ZSkubmFtZV09aSxhLnNwbGljZShuLmluZGV4LDAsaSk7YnJlYWs7Y2FzZSJkZWxldGUiOmRlbGV0ZSBvWyhpPWFbbi5pbmRleF0pLm5hbWVdLGEuc3BsaWNlKG4uaW5kZXgsMSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxiLmNvbXB1dGVGcmFtZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighZSl0aHJvdyBuZXcgRXJyb3IoImNvbXB1dGVGcmFtZSBtdXN0IGJlIGdpdmVuIGEgc3RyaW5nIGZyYW1lIG5hbWUiKTt2YXIgcz1vW2UudG9TdHJpbmcoKV07aWYoIXMpcmV0dXJuITE7Zm9yKHZhciBsPVtzXSxjPVtzLm5hbWVdO3MuYmFzZWZyYW1lJiYocz1vW3MuYmFzZWZyYW1lLnRvU3RyaW5nKCldKSYmLTE9PT1jLmluZGV4T2Yocy5uYW1lKTspbC5wdXNoKHMpLGMucHVzaChzLm5hbWUpO2Zvcih2YXIgdT17fTtzPWwucG9wKCk7KWlmKHMubGF5b3V0JiYodS5sYXlvdXQ9Yi5leHRlbmRMYXlvdXQodS5sYXlvdXQscy5sYXlvdXQpKSxzLmRhdGEpe2lmKHUuZGF0YXx8KHUuZGF0YT1bXSksIShuPXMudHJhY2VzKSlmb3Iobj1bXSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyluW3JdPXI7Zm9yKHUudHJhY2VzfHwodS50cmFjZXM9W10pLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW51bGwhPShpPW5bcl0pJiYoLTE9PT0oYT11LnRyYWNlcy5pbmRleE9mKGkpKSYmKGE9dS5kYXRhLmxlbmd0aCx1LnRyYWNlc1thXT1pKSx1LmRhdGFbYV09Yi5leHRlbmRUcmFjZSh1LmRhdGFbYV0scy5kYXRhW3JdKSl9cmV0dXJuIHV9LGIucmVjb21wdXRlRnJhbWVIYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoPXt9LHI9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aSYmaS5uYW1lJiYoZVtpLm5hbWVdPWkpfX0sYi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsZj11LmV4dGVuZERlZXBOb0FycmF5cyh7fSxlfHx7fSksaD11LmV4cGFuZE9iamVjdFBhdGhzKGYpLHA9e307aWYociYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKyl2b2lkIDA9PT0oaT0obj11Lm5lc3RlZFByb3BlcnR5KGgsclthXSkpLmdldCgpKT91Lm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KG51bGwpOihuLnNldChudWxsKSx1Lm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KGkpKTtpZih0PXUuZXh0ZW5kRGVlcE5vQXJyYXlzKHR8fHt9LGgpLHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspaWYobD11Lm5lc3RlZFByb3BlcnR5KHAsclthXSkuZ2V0KCkpe2ZvcihjPShzPXUubmVzdGVkUHJvcGVydHkodCxyW2FdKSkuZ2V0KCksQXJyYXkuaXNBcnJheShjKXx8KGM9W10scy5zZXQoYykpLG89MDtvPGwubGVuZ3RoO28rKyl7dmFyIGQ9bFtvXTtjW29dPW51bGw9PT1kP251bGw6Yi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyhjW29dLGQpfXMuc2V0KGMpfXJldHVybiB0fSxiLmRhdGFBcnJheUNvbnRhaW5lcnM9WyJ0cmFuc2Zvcm1zIiwiZGltZW5zaW9ucyJdLGIubGF5b3V0QXJyYXlDb250YWluZXJzPXMubGF5b3V0QXJyYXlDb250YWluZXJzLGIuZXh0ZW5kVHJhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsYi5kYXRhQXJyYXlDb250YWluZXJzKX0sYi5leHRlbmRMYXlvdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsYi5sYXlvdXRBcnJheUNvbnRhaW5lcnMpfSxiLnRyYW5zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXtyZWRyYXc6aS5yZWRyYXd9LHM9e30sbD1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLGE9bi5zbGljZSgwLGkpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIGM9YVtvXSxmPXQuX2Z1bGxEYXRhW2NdLl9tb2R1bGU7aWYoZil7aWYoZi5hbmltYXRhYmxlKXt2YXIgaD1mLmJhc2VQbG90TW9kdWxlLm5hbWU7c1toXXx8KHNbaF09W10pLHNbaF0ucHVzaChjKX10LmRhdGFbYVtvXV09Yi5leHRlbmRUcmFjZSh0LmRhdGFbYVtvXV0sZVtvXSl9fXZhciBwPXUuZXhwYW5kT2JqZWN0UGF0aHModS5leHRlbmREZWVwTm9BcnJheXMoe30scikpLGQ9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgbSBpbiBwKWQudGVzdChtKSYmZGVsZXRlIHBbbV0ucmFuZ2U7Yi5leHRlbmRMYXlvdXQodC5sYXlvdXQscCksZGVsZXRlIHQuY2FsY2RhdGEsYi5zdXBwbHlEZWZhdWx0cyh0KSxiLmRvQ2FsY2RhdGEodCk7dmFyIGc9dS5leHBhbmRPYmplY3RQYXRocyhyKTtpZihnKXt2YXIgdj10Ll9mdWxsTGF5b3V0Ll9wbG90cztmb3IodmFyIHkgaW4gdil7dmFyIHg9dlt5XSxfPXgueGF4aXMsdz14LnlheGlzLFQ9Xy5yYW5nZS5zbGljZSgpLGs9dy5yYW5nZS5zbGljZSgpLEE9bnVsbCxNPW51bGwsUz1udWxsLEU9bnVsbDtBcnJheS5pc0FycmF5KGdbXy5fbmFtZSsiLnJhbmdlIl0pP0E9Z1tfLl9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbXy5fbmFtZV18fHt9KS5yYW5nZSkmJihBPWdbXy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksQXJyYXkuaXNBcnJheShnW3cuX25hbWUrIi5yYW5nZSJdKT9NPWdbdy5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChnW3cuX25hbWVdfHx7fSkucmFuZ2UpJiYoTT1nW3cuX25hbWVdLnJhbmdlLnNsaWNlKCkpLFQmJkEmJihfLnIybChUWzBdKSE9PV8ucjJsKEFbMF0pfHxfLnIybChUWzFdKSE9PV8ucjJsKEFbMV0pKSYmKFM9e3hyMDpULHhyMTpBfSksayYmTSYmKHcucjJsKGtbMF0pIT09dy5yMmwoTVswXSl8fHcucjJsKGtbMV0pIT09dy5yMmwoTVsxXSkpJiYoRT17eXIwOmsseXIxOk19KSwoU3x8RSkmJmwucHVzaCh1LmV4dGVuZEZsYXQoe3Bsb3RpbmZvOnh9LFMsRSkpfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24oZSl7dmFyIG4saSxvPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxjPWwubGVuZ3RoO2lmKHIpZm9yKGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldLnRyYW5zaXRpb25BeGVzJiZvW2ldLnRyYW5zaXRpb25BeGVzKHQsbCxhLGUpO2Zvcih2YXIgZiBpbiBjPygobj11LmV4dGVuZEZsYXQoe30sYSkpLmR1cmF0aW9uPTAsZGVsZXRlIHMuY2FydGVzaWFuKTpuPWEscyl7dmFyIGg9c1tmXTt0Ll9mdWxsRGF0YVtoWzBdXS5fbW9kdWxlLmJhc2VQbG90TW9kdWxlLnBsb3QodCxoLG4sZSl9fSxJKHQsYSxvKX0sYi50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSwic29tZSI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksInNvbWUiPT09ci5hbmltJiYoby5yZWRyYXc9ITApLHQpe3ZhciBsPXRbYV0sYz1sLnhheGlzLGY9bC55YXhpcyxoPW5bYy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxwPW5bZi5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxkPWMucmFuZ2Uuc2xpY2UoKSxtPWYucmFuZ2Uuc2xpY2UoKTtjLnNldFNjYWxlKCksZi5zZXRTY2FsZSgpO3ZhciBnPW51bGwsdj1udWxsO2MucjJsKGhbMF0pPT09Yy5yMmwoZFswXSkmJmMucjJsKGhbMV0pPT09Yy5yMmwoZFsxXSl8fChnPXt4cjA6aCx4cjE6ZH0pLGYucjJsKHBbMF0pPT09Zi5yMmwobVswXSkmJmYucjJsKHBbMV0pPT09Zi5yMmwobVsxXSl8fCh2PXt5cjA6cCx5cjE6bX0pLChnfHx2KSYmcy5wdXNoKHUuZXh0ZW5kRmxhdCh7cGxvdGluZm86bH0sZyx2KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpLG8sbD10Ll9mdWxsRGF0YSxjPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxmPVtdLGg9MDtoPGwubGVuZ3RoO2grKylmLnB1c2goaCk7ZnVuY3Rpb24gcCgpe2lmKHQuX2Z1bGxMYXlvdXQpZm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspY1tlXS50cmFuc2l0aW9uQXhlcyYmY1tlXS50cmFuc2l0aW9uQXhlcyh0LHMsbixyKX1mdW5jdGlvbiBkKCl7aWYodC5fZnVsbExheW91dClmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnBsb3QodCxvLGkscil9cy5sZW5ndGgmJmUuYW5pbT8idHJhY2VzIGZpcnN0Ij09PWEub3JkZXJpbmc/KG49dS5leHRlbmRGbGF0KHt9LGEse2R1cmF0aW9uOjB9KSxvPWYsaT1hLHNldFRpbWVvdXQocCxhLmR1cmF0aW9uKSxkKCkpOihuPWEsbz1udWxsLGk9dS5leHRlbmRGbGF0KHt9LGEse2R1cmF0aW9uOjB9KSxzZXRUaW1lb3V0KGQsbi5kdXJhdGlvbikscCgpKTpzLmxlbmd0aD8obj1hLHAoKSk6ZS5hbmltJiYobz1mLGk9YSxkKCkpfSxJKHQsYSxvKX0sYi5kb0NhbGNkYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz1wLmxpc3QodCksYz10Ll9mdWxsRGF0YSxmPXQuX2Z1bGxMYXlvdXQsZD1uZXcgQXJyYXkoYy5sZW5ndGgpLG09KHQuY2FsY2RhdGF8fFtdKS5zbGljZSgpO2Zvcih0LmNhbGNkYXRhPWQsZi5fbnVtQm94ZXM9MCxmLl9udW1WaW9saW5zPTAsZi5fdmlvbGluU2NhbGVHcm91cFN0YXRzPXt9LHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAsZi5fcGllY29sb3JtYXA9e30sZi5fc3VuYnVyc3Rjb2xvcm1hcD17fSxmLl90cmVlbWFwY29sb3JtYXA9e30sZi5faWNpY2xlY29sb3JtYXA9e30sZi5fZnVubmVsYXJlYWNvbG9ybWFwPXt9LGk9MDtpPGMubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihpKSYmKGRbaV09bVtpXSk7Zm9yKGk9MDtpPGMubGVuZ3RoO2krKykocj1jW2ldKS5fYXJyYXlBdHRycz1sLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIGc9Zi5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspby5wdXNoKGZbZ1tpXV0ucmFkaWFsYXhpcyxmW2dbaV1dLmFuZ3VsYXJheGlzKTtmb3IodmFyIHYgaW4gZi5fY29sb3JBeGVzKXt2YXIgeT1mW3ZdOyExIT09eS5jYXV0byYmKGRlbGV0ZSB5LmNtaW4sZGVsZXRlIHkuY21heCl9dmFyIHg9ITE7ZnVuY3Rpb24gYihlKXtpZihyPWNbZV0sbj1yLl9tb2R1bGUsITA9PT1yLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYobiYmbi5jYWxjKXt2YXIgaT1uLmNhbGModCxyKTtpWzBdJiZpWzBdLnQmJmlbMF0udC5fc2NlbmUmJmRlbGV0ZSBpWzBdLnQuX3NjZW5lLmRpcnR5fWZvcihhPTA7YTxyLnRyYW5zZm9ybXMubGVuZ3RoO2ErKyl7dmFyIG89ci50cmFuc2Zvcm1zW2FdOyhuPV9bby50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseD0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLG8pKX19fWZ1bmN0aW9uIHcoZSxpKXtpZihyPWNbZV0sISEobj1yLl9tb2R1bGUpLmlzQ29udGFpbmVyPT09aSl7dmFyIG89W107aWYoITA9PT1yLnZpc2libGUmJjAhPT1yLl9sZW5ndGgpe2RlbGV0ZSByLl9pbmRleFRvUG9pbnRzO3ZhciBzPXIudHJhbnNmb3Jtc3x8W107Zm9yKGE9cy5sZW5ndGgtMTthPj0wO2EtLSlpZihzW2FdLmVuYWJsZWQpe3IuX2luZGV4VG9Qb2ludHM9c1thXS5faW5kZXhUb1BvaW50czticmVha31uJiZuLmNhbGMmJihvPW4uY2FsYyh0LHIpKX1BcnJheS5pc0FycmF5KG8pJiZvWzBdfHwobz1be3g6aCx5Omh9XSksb1swXS50fHwob1swXS50PXt9KSxvWzBdLnRyYWNlPXIsZFtlXT1vfX1mb3IoeihvLGMsZiksaT0wO2k8Yy5sZW5ndGg7aSsrKXcoaSwhMCk7Zm9yKGk9MDtpPGMubGVuZ3RoO2krKyliKGkpO2Zvcih4JiZ6KG8sYyxmKSxpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCEwKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKXcoaSwhMSk7RCh0KTt2YXIgVD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8sbD1bXTtmdW5jdGlvbiBjKHQscixuKXt2YXIgaT1yLl9pZC5jaGFyQXQoMCk7aWYoImhpc3RvZ3JhbTJkY29udG91ciI9PT10KXt2YXIgYT1yLl9jb3VudGVyQXhlc1swXSxvPXAuZ2V0RnJvbUlkKGUsYSkscz0ieCI9PT1pfHwieCI9PT1hJiYiY2F0ZWdvcnkiPT09by50eXBlLGw9InkiPT09aXx8InkiPT09YSYmImNhdGVnb3J5Ij09PW8udHlwZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXR8fDA9PT1lfHxzJiZ0PT09bltlXS5sZW5ndGgtMXx8bCYmZT09PW4ubGVuZ3RoLTE/LTE6KCJ5Ij09PWk/ZTp0KS0xfX1yZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4ieSI9PT1pP2U6dH19dmFyIGY9e21pbjpmdW5jdGlvbih0KXtyZXR1cm4gdS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCl9LG1heDpmdW5jdGlvbih0KXtyZXR1cm4gdS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCl9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdS5hZ2dOdW1zKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSxudWxsLHQpfSx0b3RhbDpmdW5jdGlvbih0KXtyZXR1cm4gdS5hZ2dOdW1zKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSxudWxsLHQpfSxtZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB1Lm1lYW4odCl9LG1lZGlhbjpmdW5jdGlvbih0KXtyZXR1cm4gdS5tZWRpYW4odCl9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaD10W3JdO2lmKCJjYXRlZ29yeSI9PT1oLnR5cGUpe3ZhciBkPWguY2F0ZWdvcnlvcmRlci5tYXRjaChPKTtpZihkKXt2YXIgbT1kWzFdLGc9ZFsyXSx2PWguX2lkLmNoYXJBdCgwKSx5PSJ4Ij09PXYseD1bXTtmb3Iobj0wO248aC5fY2F0ZWdvcmllcy5sZW5ndGg7bisrKXgucHVzaChbaC5fY2F0ZWdvcmllc1tuXSxbXV0pO2ZvcihuPTA7bjxoLl90cmFjZUluZGljZXMubGVuZ3RoO24rKyl7dmFyIGI9aC5fdHJhY2VJbmRpY2VzW25dLF89ZS5fZnVsbERhdGFbYl07aWYoITA9PT1fLnZpc2libGUpe3ZhciB3PV8udHlwZTtzLnRyYWNlSXMoXywiaGlzdG9ncmFtIikmJihkZWxldGUgXy5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgXy5feWF1dG9CaW5GaW5pc2hlZCk7dmFyIFQ9InNwbG9tIj09PXcsaz0ic2NhdHRlcmdsIj09PXcsQT1lLmNhbGNkYXRhW2JdO2ZvcihpPTA7aTxBLmxlbmd0aDtpKyspe3ZhciBNLFMsRT1BW2ldO2lmKFQpe3ZhciBMPV8uX2F4ZXNEaW1baC5faWRdO2lmKCF5KXt2YXIgQz1fLl9kaWFnW0xdWzBdO0MmJihoPWUuX2Z1bGxMYXlvdXRbcC5pZDJuYW1lKEMpXSl9dmFyIFA9RS50cmFjZS5kaW1lbnNpb25zW0xdLnZhbHVlcztmb3IoYT0wO2E8UC5sZW5ndGg7YSsrKWZvcihNPWguX2NhdGVnb3JpZXNNYXBbUFthXV0sbz0wO288RS50cmFjZS5kaW1lbnNpb25zLmxlbmd0aDtvKyspaWYobyE9PUwpe3ZhciBJPUUudHJhY2UuZGltZW5zaW9uc1tvXTt4W01dWzFdLnB1c2goSS52YWx1ZXNbYV0pfX1lbHNlIGlmKGspe2ZvcihhPTA7YTxFLnQueC5sZW5ndGg7YSsrKXk/KE09RS50LnhbYV0sUz1FLnQueVthXSk6KE09RS50LnlbYV0sUz1FLnQueFthXSkseFtNXVsxXS5wdXNoKFMpO0UudCYmRS50Ll9zY2VuZSYmZGVsZXRlIEUudC5fc2NlbmUuZGlydHl9ZWxzZSBpZihFLmhhc093blByb3BlcnR5KCJ6Iikpe1M9RS56O3ZhciB6PWMoXy50eXBlLGgsUyk7Zm9yKGE9MDthPFMubGVuZ3RoO2ErKylmb3Iobz0wO288U1thXS5sZW5ndGg7bysrKShNPXoobyxhKSkrMSYmeFtNXVsxXS5wdXNoKFNbYV1bb10pfWVsc2UgZm9yKHZvaWQgMD09PShNPUUucCkmJihNPUVbdl0pLHZvaWQgMD09PShTPUUucykmJihTPUUudiksdm9pZCAwPT09UyYmKFM9eT9FLnk6RS54KSxBcnJheS5pc0FycmF5KFMpfHwoUz12b2lkIDA9PT1TP1tdOltTXSksYT0wO2E8Uy5sZW5ndGg7YSsrKXhbTV1bMV0ucHVzaChTW2FdKX19fWguX2NhdGVnb3JpZXNWYWx1ZT14O3ZhciBEPVtdO2ZvcihuPTA7bjx4Lmxlbmd0aDtuKyspRC5wdXNoKFt4W25dWzBdLGZbbV0oeFtuXVsxXSldKTtELnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMV0tZVsxXX0pKSxoLl9jYXRlZ29yaWVzQWdncmVnYXRlZFZhbHVlPUQsaC5faW5pdGlhbENhdGVnb3JpZXM9RC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLCJkZXNjZW5kaW5nIj09PWcmJmguX2luaXRpYWxDYXRlZ29yaWVzLnJldmVyc2UoKSxsPWwuY29uY2F0KGguc29ydEJ5SW5pdGlhbENhdGVnb3JpZXMoKSl9fX1yZXR1cm4gbH0obyx0KTtpZihULmxlbmd0aCl7Zm9yKGYuX251bUJveGVzPTAsZi5fbnVtVmlvbGlucz0wLGk9MDtpPFQubGVuZ3RoO2krKyl3KFRbaV0sITApO2ZvcihpPTA7aTxULmxlbmd0aDtpKyspdyhUW2ldLCExKTtEKHQpfXMuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsImNhbGMiKSh0KSxzLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiY2FsYyIpKHQpfTt2YXIgTz0vKHRvdGFsfHN1bXxtaW58bWF4fG1lYW58bWVkaWFuKSAoYXNjZW5kaW5nfGRlc2NlbmRpbmcpLztmdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QuY2xlYXJDYWxjKCksIm11bHRpY2F0ZWdvcnkiPT09dC50eXBlJiZ0LnNldHVwTXVsdGlDYXRlZ29yeShlKSxuW3QuX2lkXT0xfXUuc2ltcGxlTWFwKHQsaSk7Zm9yKHZhciBhPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sbz0wO288YS5sZW5ndGg7bysrKWZvcih2YXIgcyBpbiBhW29dKW5bc118fGkocltwLmlkMm5hbWUocyldKX1mdW5jdGlvbiBEKHQpe3ZhciBlLHIsbixpPXQuX2Z1bGxMYXlvdXQsYT1pLl92aXNpYmxlTW9kdWxlcyxvPXt9O2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl0sbD1zLmNyb3NzVHJhY2VDYWxjO2lmKGwpe3ZhciBjPXMuYmFzZVBsb3RNb2R1bGUubmFtZTtvW2NdP3UucHVzaFVuaXF1ZShvW2NdLGwpOm9bY109W2xdfX1mb3IobiBpbiBvKXt2YXIgZj1vW25dLGg9aS5fc3VicGxvdHNbbl07aWYoQXJyYXkuaXNBcnJheShoKSlmb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKXt2YXIgcD1oW2VdLGQ9ImNhcnRlc2lhbiI9PT1uP2kuX3Bsb3RzW3BdOmlbcF07Zm9yKHI9MDtyPGYubGVuZ3RoO3IrKylmW3JdKHQsZCxwKX1lbHNlIGZvcihyPTA7cjxmLmxlbmd0aDtyKyspZltyXSh0KX19Yi5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sYi5yZWRyYWc9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVkcmFnJiZ0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcoKX0sYi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLnRyYWNlSGFzaCxvPXt9O2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV0sbD1zWzBdLnRyYWNlO2wudmlzaWJsZSYmKG9bbC50eXBlXT1vW2wudHlwZV18fFtdLG9bbC50eXBlXS5wdXNoKHMpKX1mb3IodmFyIGMgaW4gYSlpZighb1tjXSl7dmFyIGY9YVtjXVswXTtmWzBdLnRyYWNlLnZpc2libGU9ITEsb1tjXT1bZl19Zm9yKHZhciBoIGluIG8pe3ZhciBwPW9baF07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxlLHUuZmlsdGVyVmlzaWJsZShwKSxuKX1lLnRyYWNlSGFzaD1vfSxiLnBsb3RCYXNlUGxvdD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZ2V0TW9kdWxlKHQpLG89dihlLmNhbGNkYXRhLGEpWzBdO2EucGxvdChlLG8sbixpKX0sYi5jbGVhbkJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aS5faGFzJiZpLl9oYXModCksbz1yLl9oYXMmJnIuX2hhcyh0KTthJiYhbyYmaVsiXyIrdCsibGF5ZXIiXS5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uL2xpYiI6NDk4LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NTM3LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uL3Bsb3RzL2dldF9kYXRhIjo1ODgsIi4uL3JlZ2lzdHJ5Ijo2MzMsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjU0MywiLi9hdHRyaWJ1dGVzIjo1NDUsIi4vY2FydGVzaWFuL2F4aXNfaWRzIjo1NTMsIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo1NjAsIi4vY29tbWFuZCI6NTc4LCIuL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjU4MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjA1LCJAcGxvdGx5L2QzIjo1OCwiZDMtZm9ybWF0IjoxMDcsImQzLXRpbWUtZm9ybWF0IjoxMTUsImZhc3QtaXNudW1lcmljIjoxODV9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyOiJzdWJwbG90IixuYW1lOiJwb2xhciIsYXhpc05hbWVzOlsiYW5ndWxhcmF4aXMiLCJyYWRpYWxheGlzIl0sYXhpc05hbWUyZGF0YUFycmF5Onthbmd1bGFyYXhpczoidGhldGEiLHJhZGlhbGF4aXM6InIifSxsYXllck5hbWVzOlsiZHJhZ2xheWVyIiwicGxvdGJnIiwiYmFja3Bsb3QiLCJhbmd1bGFyLWdyaWQiLCJyYWRpYWwtZ3JpZCIsImZyb250cGxvdCIsImFuZ3VsYXItbGluZSIsInJhZGlhbC1saW5lIiwiYW5ndWxhci1heGlzIiwicmFkaWFsLWF4aXMiXSxyYWRpYWxEcmFnQm94U2l6ZTo1MCxhbmd1bGFyRHJhZ0JveFNpemU6MzAsY29ybmVyTGVuOjI1LGNvcm5lckhhbGZXaWR0aDoyLE1JTkRSQUc6OCxNSU5aT09NOjIwLE9GRkVER0U6MjB9fSx7fV0sNjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXIsYT1uLmZpbmRJbmRleE9mTWluLG89bi5pc0FuZ2xlSW5zaWRlU2VjdG9yLHM9bi5hbmdsZURlbHRhLGw9bi5hbmdsZURpc3Q7ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxhLG89blswXSxzPW5bMV0sbD1mKE1hdGguc2luKGUpLU1hdGguc2luKHQpKSxjPWYoTWF0aC5jb3MoZSktTWF0aC5jb3ModCkpLHU9TWF0aC50YW4ociksaD1mKDEvdSkscD1sL2MsZD1zLXAqbztyZXR1cm4gaD9sJiZjP2E9dSooaT1kLyh1LXApKTpjPyhpPXMqaCxhPXMpOihpPW8sYT1vKnUpOmwmJmM/KGk9MCxhPWQpOmM/KGk9MCxhPXMpOmk9YT1OYU4sW2ksYV19ZnVuY3Rpb24gdSh0LGUscixpKXtyZXR1cm4gbi5pc0Z1bGxDaXJjbGUoW2Uscl0pP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKzEpO2ZvcihyPTA7cjxuO3IrKyl7dmFyIGE9ZVtyXTtpW3JdPVt0Kk1hdGguY29zKGEpLHQqTWF0aC5zaW4oYSldfXJldHVybiBpW3JdPWlbMF0uc2xpY2UoKSxpfSh0LGkpOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBzLHUsZj1pLmxlbmd0aCxoPVtdO2Z1bmN0aW9uIHAoZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV19ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIGModCxlLHIscCh0KSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbi5tb2QodCxmKX1mdW5jdGlvbiBnKHQpe3JldHVybiBvKHQsW2Uscl0pfXZhciB2PWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIGcodCk/bCh0LGUpOjEvMH0pKSx5PWQoaVt2XSxpW20odi0xKV0sZSk7Zm9yKGgucHVzaCh5KSxzPXYsdT0wO3U8ZjtzKyssdSsrKXt2YXIgeD1pW20ocyldO2lmKCFnKHgpKWJyZWFrO2gucHVzaChwKHgpKX12YXIgYj1hKGksKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpP2wodCxyKToxLzB9KSksXz1kKGlbYl0saVttKGIrMSldLHIpO3JldHVybiBoLnB1c2goXyksaC5wdXNoKFswLDBdKSxoLnB1c2goaFswXS5zbGljZSgpKSxofSh0LGUscixpKX1mdW5jdGlvbiBmKHQpe3JldHVybiBNYXRoLmFicyh0KT4xZS0xMD90OjB9ZnVuY3Rpb24gaCh0LGUscil7ZT1lfHwwLHI9cnx8MDtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspe3ZhciBvPXRbYV07aVthXT1bZStvWzBdLHItb1sxXV19cmV0dXJuIGl9ZS5leHBvcnRzPXtpc1B0SW5zaWRlUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGEpe2lmKCFvKGUsbikpcmV0dXJuITE7dmFyIHMsbDtyWzBdPHJbMV0/KHM9clswXSxsPXJbMV0pOihzPXJbMV0sbD1yWzBdKTt2YXIgYz1pKHUocyxuWzBdLG5bMV0sYSkpLGY9aSh1KGwsblswXSxuWzFdLGEpKSxoPVt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldO3JldHVybiBmLmNvbnRhaW5zKGgpJiYhYy5jb250YWlucyhoKX0sZmluZFBvbHlnb25PZmZzZXQ6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTEvMCxhPTEvMCxvPXUodCxlLHIsbikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2k9TWF0aC5taW4oaSxsWzBdKSxhPU1hdGgubWluKGEsLWxbMV0pfXJldHVybltpLGFdfSxmaW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLChmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pKSxpPW4ubW9kKHIrMSxlLmxlbmd0aCk7cmV0dXJuW2Vbcl0sZVtpXV19LGZpbmRJbnRlcnNlY3Rpb25YWTpjLGZpbmRYWWF0TGVuZ3RoOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPS1lKnIsYT1lKmUrMSxvPTIqKGUqaS1yKSxzPWkqaStyKnItdCp0LGw9TWF0aC5zcXJ0KG8qby00KmEqcyksYz0oLW8rbCkvKDIqYSksdT0oLW8tbCkvKDIqYSk7cmV0dXJuW1tjLGUqYytpK25dLFt1LGUqdStpK25dXX0sY2xhbXBUaW55OmYscGF0aFBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiJNIitoKHUodCxlLHIsbiksaSxhKS5qb2luKCJMIil9LHBhdGhQb2x5Z29uQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsO3Q8ZT8ocz10LGw9ZSk6KHM9ZSxsPXQpO3ZhciBjPWgodShzLHIsbixpKSxhLG8pO3JldHVybiJNIitoKHUobCxyLG4saSksYSxvKS5yZXZlcnNlKCkuam9pbigiTCIpKyJNIitjLmpvaW4oIkwiKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvcG9seWdvbiI6NTEwfV0sNjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LGE9dCgiLi9wb2xhciIpLG89dCgiLi9jb25zdGFudHMiKSxzPW8uYXR0cixsPW8ubmFtZSxjPWkobCksdT17fTt1W3NdPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6bCxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpzLG5hbWU6bCxpZFJvb3Q6bCxpZFJlZ2V4OmMsYXR0clJlZ2V4OmMsYXR0cmlidXRlczp1LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tsXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uKHIsbCxzKSx1PWVbc10uX3N1YnBsb3Q7dXx8KHU9YSh0LHMpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbbF18fFtdLGE9bi5faGFzJiZuLl9oYXMoImdsIiksbz1lLl9oYXMmJmUuX2hhcygiZ2wiKSxzPWEmJiFvLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxmPW5bdV0uX3N1YnBsb3Q7aWYoIWVbdV0mJmYpZm9yKHZhciBoIGluIGYuZnJhbWV3b3JrLnJlbW92ZSgpLGYubGF5ZXJzWyJyYWRpYWwtYXhpcy10aXRsZSJdLnJlbW92ZSgpLGYuY2xpcFBhdGhzKWYuY2xpcFBhdGhzW2hdLnJlbW92ZSgpO3MmJmYuX3NjZW5lJiYoZi5fc2NlbmUuZGVzdHJveSgpLGYuX3NjZW5lPW51bGwpfX0sdG9TVkc6dCgiLi4vY2FydGVzaWFuIikudG9TVkd9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9jYXJ0ZXNpYW4iOjU2MywiLi4vZ2V0X2RhdGEiOjU4OCwiLi9jb25zdGFudHMiOjYxNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjE4LCIuL2xheW91dF9kZWZhdWx0cyI6NjE5LCIuL3BvbGFyIjo2MjB9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9cyh7Y29sb3I6aS5jb2xvcixzaG93bGluZTpvKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOm8oe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGh9LCJwbG90IiwiZnJvbS1yb290IiksYz1zKHt0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcix0aWNrbGFiZWxzdGVwOmkudGlja2xhYmVsc3RlcCxzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDppLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmkudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDppLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LCJwbG90IiwiZnJvbS1yb290IiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXX0pLGF1dG90eXBlbnVtYmVyczppLmF1dG90eXBlbnVtYmVycyxhdXRvcmFuZ2U6byh7fSxpLmF1dG9yYW5nZSx7ZWRpdFR5cGU6InBsb3QifSkscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3plcm8iLCJub25uZWdhdGl2ZSIsIm5vcm1hbCJdLGRmbHQ6InRvemVybyIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTpvKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sZWRpdFR5cGU6InBsb3QifSksY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXSxkZmx0OiJjbG9ja3dpc2UiLGVkaXRUeXBlOiJwbG90In0sdGl0bGU6e3RleHQ6byh7fSxpLnRpdGxlLnRleHQse2VkaXRUeXBlOiJwbG90IixkZmx0OiIifSksZm9udDpvKHt9LGkudGl0bGUuZm9udCx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6InBsb3QifSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07byh1LGwsYyk7dmFyIGY9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRoZXRhdW5pdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFucyIsImRlZ3JlZXMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYyJ9LHBlcmlvZDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnRlcmNsb2Nrd2lzZSIsImNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn07byhmLGwsYyksZS5leHBvcnRzPXtkb21haW46YSh7bmFtZToicG9sYXIiLGVkaXRUeXBlOiJwbG90In0pLHNlY3Rvcjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwzNjBdLGVkaXRUeXBlOiJwbG90In0saG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxyYWRpYWxheGlzOnUsYW5ndWxhcmF4aXM6Zixncmlkc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmN1bGFyIiwibGluZWFyIl0sZGZsdDoiY2lyY3VsYXIiLGVkaXRUeXBlOiJwbG90In0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjAsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NTY0LCIuLi9kb21haW4iOjU3OX1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbD10KCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLHU9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxmPXQoIi4uL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiKSxkPXQoIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIiksbT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksZz10KCIuL3NldF9jb252ZXJ0Iiksdj10KCIuL2NvbnN0YW50cyIpLHk9di5heGlzTmFtZXM7ZnVuY3Rpb24geCh0LGUscixvKXt2YXIgZD1yKCJiZ2NvbG9yIik7by5iZ0NvbG9yPWkuY29tYmluZShkLG8ucGFwZXJfYmdjb2xvcik7dmFyIHg9cigic2VjdG9yIik7cigiaG9sZSIpO3ZhciBfLHc9cyhvLmZ1bGxEYXRhLHYubmFtZSxvLmlkKSxUPW8ubGF5b3V0T3V0O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gcihfKyIuIit0LGUpfWZvcih2YXIgQT0wO0E8eS5sZW5ndGg7QSsrKXtfPXlbQV0sbi5pc1BsYWluT2JqZWN0KHRbX10pfHwodFtfXT17fSk7dmFyIE09dFtfXSxTPWEubmV3Q29udGFpbmVyKGUsXyk7Uy5faWQ9Uy5fbmFtZT1fLFMuX2F0dHI9by5pZCsiLiIrXyxTLl90cmFjZUluZGljZXM9dy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSkpO3ZhciBFPXYuYXhpc05hbWUyZGF0YUFycmF5W19dLEw9YihNLFMsayx3LEUsbyk7aChNLFMsayx7YXhEYXRhOncsZGF0YUF0dHI6RX0pO3ZhciBDPWsoInZpc2libGUiKTtzd2l0Y2goZyhTLGUsVCksaygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxTLl9tPTEsXyl7Y2FzZSJyYWRpYWxheGlzIjp2YXIgUD1rKCJhdXRvcmFuZ2UiLCFTLmlzVmFsaWRSYW5nZShNLnJhbmdlKSk7TS5hdXRvcmFuZ2U9UCwhUHx8ImxpbmVhciIhPT1MJiYiLSIhPT1MfHxrKCJyYW5nZW1vZGUiKSwicmV2ZXJzZWQiPT09UCYmKFMuX209LTEpLGsoInJhbmdlIiksUy5jbGVhblJhbmdlKCJyYW5nZSIse2RmbHRSYW5nZTpbMCwxXX0pO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOmlmKCJkYXRlIj09PUwpe24ubG9nKCJQb2xhciBwbG90cyBkbyBub3Qgc3VwcG9ydCBkYXRlIGFuZ3VsYXIgYXhlcyB5ZXQuIik7Zm9yKHZhciBJPTA7STx3Lmxlbmd0aDtJKyspd1tJXS52aXNpYmxlPSExO0w9TS50eXBlPVMudHlwZT0ibGluZWFyIn1rKCJsaW5lYXIiPT09TD8idGhldGF1bml0IjoicGVyaW9kIik7dmFyIE89aygiZGlyZWN0aW9uIik7aygicm90YXRpb24iLHtjb3VudGVyY2xvY2t3aXNlOjAsY2xvY2t3aXNlOjkwfVtPXSl9aWYoZihNLFMsayxTLnR5cGUse3RpY2tTdWZmaXhEZmx0OiJkZWdyZWVzIj09PVMudGhldGF1bml0PyJceGIwIjp2b2lkIDB9KSxDKXt2YXIgeixELFIsRixCPW8uZm9udHx8e307RD0oej1rKCJjb2xvciIpKT09PU0uY29sb3I/ejpCLmNvbG9yLFI9Qi5zaXplLEY9Qi5mYW1pbHksbChNLFMsayxTLnR5cGUpLHUoTSxTLGssUy50eXBlLHtmb250Ontjb2xvcjpELHNpemU6UixmYW1pbHk6Rn19KSxjKE0sUyxrLHtvdXRlclRpY2tzOiEwfSkscChNLFMsayx7ZGZsdENvbG9yOnosYmdDb2xvcjpvLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOm1bX119KSxrKCJsYXllciIpLCJyYWRpYWxheGlzIj09PV8mJihrKCJzaWRlIiksaygiYW5nbGUiLHhbMF0pLGsoInRpdGxlLnRleHQiKSxuLmNvZXJjZUZvbnQoaywidGl0bGUuZm9udCIse2NvbG9yOkQsc2l6ZTpuLmJpZ0ZvbnQoUiksZmFtaWx5OkZ9KSl9ImNhdGVnb3J5IiE9PUwmJmsoImhvdmVyZm9ybWF0IiksUy5faW5wdXQ9TX0iY2F0ZWdvcnkiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKCJncmlkc2hhcGUiKX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhKXt2YXIgbz1yKCJhdXRvdHlwZW51bWJlcnMiLGEuYXV0b3R5cGVudW1iZXJzRGZsdCk7aWYoIi0iPT09cigidHlwZSIpKXtmb3IodmFyIHMsbD0wO2w8bi5sZW5ndGg7bCsrKWlmKG5bbF0udmlzaWJsZSl7cz1uW2xdO2JyZWFrfXMmJnNbaV0mJihlLnR5cGU9ZChzW2ldLCJncmVnb3JpYW4iLHtub011bHRpQ2F0ZWdvcnk6ITAsYXV0b3R5cGVudW1iZXJzOm99KSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOnYubmFtZSxhdHRyaWJ1dGVzOm0saGFuZGxlRGVmYXVsdHM6eCxmb250OmUuZm9udCxhdXRvdHlwZW51bWJlcnNEZmx0OmUuYXV0b3R5cGVudW1iZXJzLHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGZ1bGxEYXRhOnIsbGF5b3V0T3V0OmV9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTM4LCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NTUwLCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjU1NCwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NTY2LCIuLi9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTY4LCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NTczLCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo1NzQsIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo1NzUsIi4uL2dldF9kYXRhIjo1ODgsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjYyNywiLi9jb25zdGFudHMiOjYxNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjE4LCIuL3NldF9jb252ZXJ0Ijo2MjF9XSw2MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJSb3RhdGUsbD1vLnN0clRyYW5zbGF0ZSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vcGxvdHMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxkPXQoIi4vc2V0X2NvbnZlcnQiKSxtPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZSxnPXQoIi4uL2NhcnRlc2lhbi9kcmFnYm94Iiksdj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IikseT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IikseD10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsXz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx3PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxUPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxrPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLEE9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLE09dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxTPXQoIi4vY29uc3RhbnRzIiksRT10KCIuL2hlbHBlcnMiKSxMPXQoIi4uL3NtaXRoL2hlbHBlcnMiKSxDPUwuc21pdGgsUD1MLnJlYWN0YW5jZUFyYyxJPUwucmVzaXN0YW5jZUFyYyxPPUwuc21pdGhUcmFuc2Zvcm0sej1vLl8sRD1vLm1vZCxSPW8uZGVnMnJhZCxGPW8ucmFkMmRlZztmdW5jdGlvbiBCKHQsZSxyKXt0aGlzLmlzU21pdGg9cnx8ITEsdGhpcy5pZD1lLHRoaXMuZ2Q9dCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9bnVsbCx0aGlzLnZhbmdsZXM9bnVsbCx0aGlzLnJhZGlhbEF4aXNBbmdsZT1udWxsLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuY2xpcFBhdGhzPXt9LHRoaXMuY2xpcElkcz17fSx0aGlzLnZpZXdJbml0aWFsPXt9O3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT0iY2xpcCIrbi5fdWlkK2U7dGhpcy5jbGlwSWRzLmZvclRyYWNlcz1pKyItZm9yLXRyYWNlcyIsdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzPW4uX2NsaXBzLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsdGhpcy5jbGlwSWRzLmZvclRyYWNlcyksdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzLmFwcGVuZCgicGF0aCIpLHRoaXMuZnJhbWV3b3JrPW5bIl8iKyhyPyJzbWl0aCI6InBvbGFyIikrImxheWVyIl0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGUpLHRoaXMuZ2V0SG9sZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1NtaXRoPzA6dC5ob2xlfSx0aGlzLmdldFNlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1NtaXRoP1swLDM2MF06dC5zZWN0b3J9LHRoaXMuZ2V0UmFkaWFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU21pdGg/dC5yZWFsYXhpczp0LnJhZGlhbGF4aXN9LHRoaXMuZ2V0QW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1NtaXRoP3QuaW1hZ2luYXJ5YXhpczp0LmFuZ3VsYXJheGlzfSxyfHwodGhpcy5yYWRpYWxUaWNrTGF5b3V0PW51bGwsdGhpcy5hbmd1bGFyVGlja0xheW91dD1udWxsKX12YXIgTj1CLnByb3RvdHlwZTtmdW5jdGlvbiBqKHQpe3ZhciBlPXQudGlja3MrU3RyaW5nKHQudGlja2xlbikrU3RyaW5nKHQuc2hvd3RpY2tsYWJlbHMpO3JldHVybiJzaWRlImluIHQmJihlKz10LnNpZGUpLGV9ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBlW28uZmluZEluZGV4T2ZNaW4oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIG8uYW5nbGVEaXN0KHQsZSl9KSldfWZ1bmN0aW9uIFYodCxlLHIpe3JldHVybiBlPyh0LmF0dHIoImRpc3BsYXkiLG51bGwpLHQuYXR0cihyKSk6dCYmdC5hdHRyKCJkaXNwbGF5Iiwibm9uZSIpLHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IEIodCxlLHIpfSxOLnBsb3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVt0aGlzLmlkXSxuPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7aWYoITE9PT10W2ldWzBdLnRyYWNlLmNsaXBvbmF4aXMpe249ITA7YnJlYWt9fXRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT1uLHRoaXMudXBkYXRlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVMYXlvdXQoZSxyKSxmLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdkLHRoaXMsdCxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksdGhpcy5pc1NtaXRoJiYoZGVsZXRlIHIucmVhbGF4aXMucmFuZ2UsZGVsZXRlIHIuaW1hZ2luYXJ5YXhpcy5yYW5nZSl9LE4udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pc1NtaXRoLGk9dGhpcy5sYXllcnMsYT10aGlzLmdldFJhZGlhbChlKSxvPXRoaXMuZ2V0QW5ndWxhcihlKSxzPVMubGF5ZXJOYW1lcyxsPXMuaW5kZXhPZigiZnJvbnRwbG90IiksYz1zLnNsaWNlKDAsbCksdT0iYmVsb3cgdHJhY2VzIj09PW8ubGF5ZXIsZj0iYmVsb3cgdHJhY2VzIj09PWEubGF5ZXI7dSYmYy5wdXNoKCJhbmd1bGFyLWxpbmUiKSxmJiZjLnB1c2goInJhZGlhbC1saW5lIiksdSYmYy5wdXNoKCJhbmd1bGFyLWF4aXMiKSxmJiZjLnB1c2goInJhZGlhbC1heGlzIiksYy5wdXNoKCJmcm9udHBsb3QiKSx1fHxjLnB1c2goImFuZ3VsYXItbGluZSIpLGZ8fGMucHVzaCgicmFkaWFsLWxpbmUiKSx1fHxjLnB1c2goImFuZ3VsYXItYXhpcyIpLGZ8fGMucHVzaCgicmFkaWFsLWF4aXMiKTt2YXIgaD0ocj8ic21pdGgiOiJwb2xhciIpKyJzdWJsYXllciIscD10aGlzLmZyYW1ld29yay5zZWxlY3RBbGwoIi4iK2gpLmRhdGEoYyxTdHJpbmcpO3AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiBoKyIgIit0fSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWlbdF09bi5zZWxlY3QodGhpcyk7c3dpdGNoKHQpe2Nhc2UiZnJvbnRwbG90IjpyfHxlLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhcmxheWVyIiwhMCksZS5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKTticmVhaztjYXNlImJhY2twbG90IjplLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk7YnJlYWs7Y2FzZSJwbG90YmciOmkuYmc9ZS5hcHBlbmQoInBhdGgiKTticmVhaztjYXNlInJhZGlhbC1ncmlkIjpjYXNlImFuZ3VsYXItZ3JpZCI6ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlInJhZGlhbC1saW5lIjplLmFwcGVuZCgibGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2JyZWFrO2Nhc2UiYW5ndWxhci1saW5lIjplLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpfX0pKSxwLm9yZGVyKCl9LE4udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsbj10Ll9zaXplLGk9dGhpcy5nZXRSYWRpYWwoZSksYT10aGlzLmdldEFuZ3VsYXIoZSksbz1lLmRvbWFpbi54LHM9ZS5kb21haW4ueTt0aGlzLnhPZmZzZXQ9bi5sK24udypvWzBdLHRoaXMueU9mZnNldD1uLnQrbi5oKigxLXNbMV0pO3ZhciBmPXRoaXMueExlbmd0aD1uLncqKG9bMV0tb1swXSksaD10aGlzLnlMZW5ndGg9bi5oKihzWzFdLXNbMF0pLHA9dGhpcy5nZXRTZWN0b3IoZSk7dGhpcy5zZWN0b3JJblJhZD1wLm1hcChSKTt2YXIgZCxtLGcsdix5LHg9dGhpcy5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPUQoYSwzNjApLGw9cytvLGM9TWF0aC5jb3MoUihzKSksdT1NYXRoLnNpbihSKHMpKSxmPU1hdGguY29zKFIobCkpLGg9TWF0aC5zaW4oUihsKSk7aT1zPD05MCYmbD49OTB8fHM+OTAmJmw+PTQ1MD8xOnU8PTAmJmg8PTA/MDpNYXRoLm1heCh1LGgpO2U9czw9MTgwJiZsPj0xODB8fHM+MTgwJiZsPj01NDA/LTE6Yz49MCYmZj49MD8wOk1hdGgubWluKGMsZik7cj1zPD0yNzAmJmw+PTI3MHx8cz4yNzAmJmw+PTYzMD8tMTp1Pj0wJiZoPj0wPzA6TWF0aC5taW4odSxoKTtuPWw+PTM2MD8xOmM8PTAmJmY8PTA/MDpNYXRoLm1heChjLGYpO3JldHVybltlLHIsbixpXX0ocCksYj14WzJdLXhbMF0sXz14WzNdLXhbMV0sdz1oL2YsVD1NYXRoLmFicyhfL2IpO3c+VD8oZD1mLHk9KGgtKG09ZipUKSkvbi5oLzIsZz1bb1swXSxvWzFdXSx2PVtzWzBdK3ksc1sxXS15XSk6KG09aCx5PShmLShkPWgvVCkpL24udy8yLGc9W29bMF0reSxvWzFdLXldLHY9W3NbMF0sc1sxXV0pLHRoaXMueExlbmd0aDI9ZCx0aGlzLnlMZW5ndGgyPW0sdGhpcy54RG9tYWluMj1nLHRoaXMueURvbWFpbjI9djt2YXIgayxBPXRoaXMueE9mZnNldDI9bi5sK24udypnWzBdLE09dGhpcy55T2Zmc2V0Mj1uLnQrbi5oKigxLXZbMV0pLFM9dGhpcy5yYWRpdXM9ZC9iLEU9dGhpcy5pbm5lclJhZGl1cz10aGlzLmdldEhvbGUoZSkqUyxMPXRoaXMuY3g9QS1TKnhbMF0sQz10aGlzLmN5PU0rUyp4WzNdLFA9dGhpcy5jeHg9TC1BLEk9dGhpcy5jeXk9Qy1NLE89aS5zaWRlOyJjb3VudGVyY2xvY2t3aXNlIj09PU8/KGs9TyxPPSJ0b3AiKToiY2xvY2t3aXNlIj09PU8mJihrPU8sTz0iYm90dG9tIiksdGhpcy5yYWRpYWxBeGlzPXRoaXMubW9ja0F4aXModCxlLGkse19pZDoieCIsc2lkZTpPLF90cnVlU2lkZTprLGRvbWFpbjpbRS9uLncsUy9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciB6PXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKFAsSSkpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsbChBLE0pKS5jYWxsKHUuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKEwsQykpLmNhbGwoYy5maWxsLGUuYmdjb2xvcil9LE4ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHt9LHIsbik7cmV0dXJuIGQoaSxlLHQpLGl9LE4ubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1uLmlzU21pdGgsYT1yLl9pZCxzPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7cChzLHQpO3ZhciBsPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBzLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9bFthXSxpPW4ucmFkaWFsQXhpcy5fcmwsbz0oaVsxXS1pWzBdKS8oMS1uLmdldEhvbGUoZSkpO3MucmFuZ2U9W3RbclswXV0qbyx0W3JbMV1dKm9dfSxzLmlzUHRXaXRoaW5SYW5nZT0ieCIhPT1hfHxpP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9LHMuc2V0UmFuZ2UoKSxzLnNldFNjYWxlKCksc30sTi5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT10aGlzLmdldFJhZGlhbChlKTttKHIsbik7dmFyIGE9bi5yYW5nZTtpLnJhbmdlPWEuc2xpY2UoKSxpLl9pbnB1dC5yYW5nZT1hLnNsaWNlKCksbi5fcmw9W24ucjJsKGFbMF0sbnVsbCwiZ3JlZ29yaWFuIiksbi5yMmwoYVsxXSxudWxsLCJncmVnb3JpYW4iKV19LE4udXBkYXRlUmFkaWFsQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyx1PXIuaW5uZXJSYWRpdXMsZj1yLmN4LHA9ci5jeSxkPXIuZ2V0UmFkaWFsKGUpLG09RChyLmdldFNlY3RvcihlKVswXSwzNjApLGc9ci5yYWRpYWxBeGlzLHY9dTxhLHk9ci5pc1NtaXRoO3l8fChyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5hbmdsZSIsZC5hbmdsZSksci5maWxsVmlld0luaXRpYWxLZXkoInJhZGlhbGF4aXMucmFuZ2UiLGcucmFuZ2Uuc2xpY2UoKSksZy5zZXRHZW9tZXRyeSgpKSwiYXV0byI9PT1nLnRpY2thbmdsZSYmbT45MCYmbTw9MjcwJiYoZy50aWNrYW5nbGU9MTgwKTt2YXIgeD15P2Z1bmN0aW9uKHQpe3ZhciBlPU8ocixDKFt0LngsMF0pKTtyZXR1cm4gbChlWzBdLWYsZVsxXS1wKX06ZnVuY3Rpb24odCl7cmV0dXJuIGwoZy5sMnAodC54KSt1LDApfSxiPXk/ZnVuY3Rpb24odCl7cmV0dXJuIEkocix0LngsLTEvMCwxLzApfTpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGcucjJwKHQueCkrdSl9LF89aihkKTtpZihyLnJhZGlhbFRpY2tMYXlvdXQhPT1fJiYoaVsicmFkaWFsLWF4aXMiXS5zZWxlY3RBbGwoIi54dGljayIpLnJlbW92ZSgpLHIucmFkaWFsVGlja0xheW91dD1fKSx2KXtnLnNldFNjYWxlKCk7dmFyIHc9MCxUPXk/KGcudGlja3ZhbHN8fFtdKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGgudGlja1RleHQoZyx0LCEwLCExKX0pKTpoLmNhbGNUaWNrcyhnKSxrPXk/VDpoLmNsaXBFbmRzKGcsVCksQT1oLmdldFRpY2tTaWducyhnKVsyXTt5JiYoKCJ0b3AiPT09Zy50aWNrcyYmImJvdHRvbSI9PT1nLnNpZGV8fCJib3R0b20iPT09Zy50aWNrcyYmInRvcCI9PT1nLnNpZGUpJiYoQT0tQSksInRvcCI9PT1nLnRpY2tzJiYidG9wIj09PWcuc2lkZSYmKHc9LWcudGlja2xlbiksImJvdHRvbSI9PT1nLnRpY2tzJiYiYm90dG9tIj09PWcuc2lkZSYmKHc9Zy50aWNrbGVuKSksaC5kcmF3VGlja3MobixnLHt2YWxzOlQsbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOmgubWFrZVRpY2tQYXRoKGcsMCxBKSx0cmFuc0ZuOngsY3Jpc3A6ITF9KSxoLmRyYXdHcmlkKG4sZyx7dmFsczprLGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpiLHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksaC5kcmF3TGFiZWxzKG4sZyx7dmFsczpULGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp4LGxhYmVsRm5zOmgubWFrZUxhYmVsRm5zKGcsdyl9KX12YXIgTT1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/RihVKFIoZC5hbmdsZSksci52YW5nbGVzKSk6ZC5hbmdsZSxTPWwoZixwKSxFPVMrcygtTSk7VihpWyJyYWRpYWwtYXhpcyJdLHYmJihkLnNob3d0aWNrbGFiZWxzfHxkLnRpY2tzKSx7dHJhbnNmb3JtOkV9KSxWKGlbInJhZGlhbC1ncmlkIl0sdiYmZC5zaG93Z3JpZCx7dHJhbnNmb3JtOnk/IiI6U30pLFYoaVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKSx2JiZkLnNob3dsaW5lLHt4MTp5Py1hOnUseTE6MCx4MjphLHkyOjAsdHJhbnNmb3JtOkV9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGQubGluZXdpZHRoKS5jYWxsKGMuc3Ryb2tlLGQubGluZWNvbG9yKX0sTi51cGRhdGVSYWRpYWxBeGlzVGl0bGU9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmlzU21pdGgpe3ZhciBuPXRoaXMuZ2QsaT10aGlzLnJhZGl1cyxhPXRoaXMuY3gsbz10aGlzLmN5LHM9dGhpcy5nZXRSYWRpYWwoZSksbD10aGlzLmlkKyJ0aXRsZSIsYz0wO2lmKHMudGl0bGUpe3ZhciBmPXUuYkJveCh0aGlzLmxheWVyc1sicmFkaWFsLWF4aXMiXS5ub2RlKCkpLmhlaWdodCxoPXMudGl0bGUuZm9udC5zaXplLHA9cy5zaWRlO2M9InRvcCI9PT1wP2g6ImNvdW50ZXJjbG9ja3dpc2UiPT09cD8tKGYrLjQqaCk6ZisuOCpofXZhciBkPXZvaWQgMCE9PXI/cjp0aGlzLnJhZGlhbEF4aXNBbmdsZSxtPVIoZCksZz1NYXRoLmNvcyhtKSx2PU1hdGguc2luKG0pLHk9YStpLzIqZytjKnYsYj1vLWkvMip2K2MqZzt0aGlzLmxheWVyc1sicmFkaWFsLWF4aXMtdGl0bGUiXT14LmRyYXcobixsLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6dGhpcy5pZCsiLnJhZGlhbGF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOnoobiwiQ2xpY2sgdG8gZW50ZXIgcmFkaWFsIGF4aXMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnkseTpiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi1kfX0pfX0sTi51cGRhdGVBbmd1bGFyQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyx1PXIuaW5uZXJSYWRpdXMsZj1yLmN4LHA9ci5jeSxkPXIuZ2V0QW5ndWxhcihlKSxtPXIuYW5ndWxhckF4aXMsZz1yLmlzU21pdGg7Z3x8KHIuZmlsbFZpZXdJbml0aWFsS2V5KCJhbmd1bGFyYXhpcy5yb3RhdGlvbiIsZC5yb3RhdGlvbiksbS5zZXRHZW9tZXRyeSgpLG0uc2V0U2NhbGUoKSk7dmFyIHY9Zz9mdW5jdGlvbih0KXt2YXIgZT1PKHIsQyhbMCx0LnhdKSk7cmV0dXJuIE1hdGguYXRhbjIoZVswXS1mLGVbMV0tcCktTWF0aC5QSS8yfTpmdW5jdGlvbih0KXtyZXR1cm4gbS50MmcodC54KX07ImxpbmVhciI9PT1tLnR5cGUmJiJyYWRpYW5zIj09PW0udGhldGF1bml0JiYobS50aWNrMD1GKG0udGljazApLG0uZHRpY2s9RihtLmR0aWNrKSk7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZithKk1hdGguY29zKHQpLHAtYSpNYXRoLnNpbih0KSl9LHg9Zz9mdW5jdGlvbih0KXt2YXIgZT1PKHIsQyhbMCx0LnhdKSk7cmV0dXJuIGwoZVswXSxlWzFdKX06ZnVuY3Rpb24odCl7cmV0dXJuIHkodih0KSl9LGI9Zz9mdW5jdGlvbih0KXt2YXIgZT1PKHIsQyhbMCx0LnhdKSksbj1NYXRoLmF0YW4yKGVbMF0tZixlWzFdLXApLU1hdGguUEkvMjtyZXR1cm4gbChlWzBdLGVbMV0pK3MoLUYobikpfTpmdW5jdGlvbih0KXt2YXIgZT12KHQpO3JldHVybiB5KGUpK3MoLUYoZSkpfSxfPWc/ZnVuY3Rpb24odCl7cmV0dXJuIFAocix0LngsMCwxLzApfTpmdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4iTSIrW2YrdSpyLHAtdSpuXSsiTCIrW2YrYSpyLHAtYSpuXX0sdz1oLm1ha2VMYWJlbEZucyhtLDApLmxhYmVsU3RhbmRvZmYsVD17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPXYodCk7cmV0dXJuIE1hdGguY29zKGUpKnd9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSoodyt0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpNKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9dih0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYodCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0saz1qKGQpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT1rJiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIittLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9ayk7dmFyIEEsUz1nP1sxLzBdLmNvbmNhdChtLnRpY2t2YWxzfHxbXSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaC50aWNrVGV4dChtLHQsITAsITEpfSkpOmguY2FsY1RpY2tzKG0pO2lmKGcmJihTWzBdLnRleHQ9Ilx1MjIxZSIsU1swXS5mb250U2l6ZSo9MS43NSksImxpbmVhciI9PT1lLmdyaWRzaGFwZT8oQT1TLm1hcCh2KSxvLmFuZ2xlRGVsdGEoQVswXSxBWzFdKTwwJiYoQT1BLnNsaWNlKCkucmV2ZXJzZSgpKSk6QT1udWxsLHIudmFuZ2xlcz1BLCJjYXRlZ29yeSI9PT1tLnR5cGUmJihTPVMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gby5pc0FuZ2xlSW5zaWRlU2VjdG9yKHYodCksci5zZWN0b3JJblJhZCl9KSkpLG0udmlzaWJsZSl7dmFyIEU9Imluc2lkZSI9PT1tLnRpY2tzPy0xOjEsTD0obS5saW5ld2lkdGh8fDEpLzI7aC5kcmF3VGlja3MobixtLHt2YWxzOlMsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scGF0aDoiTSIrRSpMKyIsMGgiK0UqbS50aWNrbGVuLHRyYW5zRm46YixjcmlzcDohMX0pLGguZHJhd0dyaWQobixtLHt2YWxzOlMsbGF5ZXI6aVsiYW5ndWxhci1ncmlkIl0scGF0aDpfLHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksaC5kcmF3TGFiZWxzKG4sbSx7dmFsczpTLGxheWVyOmlbImFuZ3VsYXItYXhpcyJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOngsbGFiZWxGbnM6VH0pfVYoaVsiYW5ndWxhci1saW5lIl0uc2VsZWN0KCJwYXRoIiksZC5zaG93bGluZSx7ZDpyLnBhdGhTdWJwbG90KCksdHJhbnNmb3JtOmwoZixwKX0pLmF0dHIoInN0cm9rZS13aWR0aCIsZC5saW5ld2lkdGgpLmNhbGwoYy5zdHJva2UsZC5saW5lY29sb3IpfSxOLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dGhpcy5nZC5fY29udGV4dC5zdGF0aWNQbG90fHwoIXRoaXMuaXNTbWl0aCYmKHRoaXMudXBkYXRlQW5ndWxhckRyYWcodCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwwKSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDEpKSx0aGlzLnVwZGF0ZUhvdmVyQW5kTWFpbkRyYWcodCkpfSxOLnVwZGF0ZUhvdmVyQW5kTWFpbkRyYWc9ZnVuY3Rpb24odCl7dmFyIGUscixzPXRoaXMsYz1zLmlzU21pdGgsdT1zLmdkLGY9cy5sYXllcnMsaD10Ll96b29tbGF5ZXIscD1TLk1JTlpPT00sZD1TLk9GRkVER0UsbT1zLnJhZGl1cyx4PXMuaW5uZXJSYWRpdXMsVD1zLmN4LGs9cy5jeSxBPXMuY3h4LE09cy5jeXksTD1zLnNlY3RvckluUmFkLEM9cy52YW5nbGVzLFA9cy5yYWRpYWxBeGlzLEk9RS5jbGFtcFRpbnksTz1FLmZpbmRYWWF0TGVuZ3RoLHo9RS5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzLEQ9Uy5jb3JuZXJIYWxmV2lkdGgsUj1TLmNvcm5lckxlbi8yLEY9Zy5tYWtlRHJhZ2dlcihmLCJwYXRoIiwibWFpbmRyYWciLCJjcm9zc2hhaXIiKTtuLnNlbGVjdChGKS5hdHRyKCJkIixzLnBhdGhTdWJwbG90KCkpLmF0dHIoInRyYW5zZm9ybSIsbChULGspKSxGLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3kuaG92ZXIodSx0LHMuaWQpLHUuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1GLHUuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1zLmlkfSxGLm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7dS5fZHJhZ2dpbmd8fHYudW5ob3Zlcih1LHQpfTt2YXIgQixOLGosVSxWLEgscSxHLFksVz17ZWxlbWVudDpGLGdkOnUsc3VicGxvdDpzLmlkLHBsb3RpbmZvOntpZDpzLmlkLHhheGlzOnMueGF4aXMseWF4aXM6cy55YXhpc30seGF4ZXM6W3MueGF4aXNdLHlheGVzOltzLnlheGlzXX07ZnVuY3Rpb24gWCh0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSl9ZnVuY3Rpb24gWih0LGUpe3JldHVybiBYKHQtQSxlLU0pfWZ1bmN0aW9uIEoodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihNLWUsdC1BKX1mdW5jdGlvbiBLKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbigtZSldfWZ1bmN0aW9uIFEodCxlKXtpZigwPT09dClyZXR1cm4gcy5wYXRoU2VjdG9yKDIqRCk7dmFyIHI9Ui90LG49ZS1yLGk9ZStyLGE9TWF0aC5tYXgoMCxNYXRoLm1pbih0LG0pKSxvPWEtRCxsPWErRDtyZXR1cm4iTSIrSyhvLG4pKyJBIitbbyxvXSsiIDAsMCwwICIrSyhvLGkpKyJMIitLKGwsaSkrIkEiK1tsLGxdKyIgMCwwLDEgIitLKGwsbikrIloifWZ1bmN0aW9uICQodCxlLHIpe2lmKDA9PT10KXJldHVybiBzLnBhdGhTZWN0b3IoMipEKTt2YXIgbixpLGE9Syh0LGUpLG89Syh0LHIpLGw9SSgoYVswXStvWzBdKS8yKSxjPUkoKGFbMV0rb1sxXSkvMik7aWYobCYmYyl7dmFyIHU9Yy9sLGY9LTEvdSxoPU8oRCx1LGwsYyk7bj1PKFIsZixoWzBdWzBdLGhbMF1bMV0pLGk9TyhSLGYsaFsxXVswXSxoWzFdWzFdKX1lbHNle3ZhciBwLGQ7Yz8ocD1SLGQ9RCk6KHA9RCxkPVIpLG49W1tsLXAsYy1kXSxbbCtwLGMtZF1dLGk9W1tsLXAsYytkXSxbbCtwLGMrZF1dfXJldHVybiJNIituLmpvaW4oIkwiKSsiTCIraS5yZXZlcnNlKCkuam9pbigiTCIpKyJaIn1mdW5jdGlvbiB0dCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsbSkseCksdDxkP3Q9MDptLXQ8ZD90PW06ZTxkP2U9MDptLWU8ZCYmKGU9bSksTWF0aC5hYnMoZS10KT5wPyh0PGU/KGo9dCxVPWUpOihqPWUsVT10KSwhMCk6KGo9bnVsbCxVPW51bGwsITEpfWZ1bmN0aW9uIGV0KHQsZSl7dD10fHxWLGU9ZXx8Ik0wLDBaIixHLmF0dHIoImQiLHQpLFkuYXR0cigiZCIsZSksZy50cmFuc2l0aW9uWm9vbWJveChHLFksSCxxKSxIPSEwO3ZhciByPXt9O290KHIpLHUuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyKX1mdW5jdGlvbiBydCh0LG4pe3ZhciBpLGEsbz1CKyh0Kj1lKSxsPU4rKG4qPXIpLGM9WihCLE4pLHU9TWF0aC5taW4oWihvLGwpLG0pLGY9SihCLE4pO3R0KGMsdSkmJihpPVYrcy5wYXRoU2VjdG9yKFUpLGomJihpKz1zLnBhdGhTZWN0b3IoaikpLGE9UShqLGYpK1EoVSxmKSksZXQoaSxhKX1mdW5jdGlvbiBudCh0LGUscixuKXt2YXIgaT1FLmZpbmRJbnRlcnNlY3Rpb25YWShyLG4scixbdC1BLE0tZV0pO3JldHVybiBYKGlbMF0saVsxXSl9ZnVuY3Rpb24gaXQodCxlKXt2YXIgcixuLGk9Qit0LGE9TitlLG89SihCLE4pLGw9SihpLGEpLGM9eihvLEMpLHU9eihsLEMpO3R0KG50KEIsTixjWzBdLGNbMV0pLE1hdGgubWluKG50KGksYSx1WzBdLHVbMV0pLG0pKSYmKHI9VitzLnBhdGhTZWN0b3IoVSksaiYmKHIrPXMucGF0aFNlY3RvcihqKSksbj1bJChqLGNbMF0sY1sxXSksJChVLGNbMF0sY1sxXSldLmpvaW4oIiAiKSksZXQocixuKX1mdW5jdGlvbiBhdCgpe2lmKGcucmVtb3ZlWm9vbWJveCh1KSxudWxsIT09aiYmbnVsbCE9PVUpe3ZhciB0PXt9O290KHQpLGcuc2hvd0RvdWJsZUNsaWNrTm90aWZpZXIodSksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHUsdCl9fWZ1bmN0aW9uIG90KHQpe3ZhciBlPVAuX3JsLHI9KGVbMV0tZVswXSkvKDEteC9tKS9tLG49W2VbMF0rKGoteCkqcixlWzBdKyhVLXgpKnJdO3Rbcy5pZCsiLnJhZGlhbGF4aXMucmFuZ2UiXT1ufWZ1bmN0aW9uIHN0KHQsZSl7dmFyIHI9dS5fZnVsbExheW91dC5jbGlja21vZGU7aWYoZy5yZW1vdmVab29tYm94KHUpLDI9PT10KXt2YXIgbj17fTtmb3IodmFyIGkgaW4gcy52aWV3SW5pdGlhbCluW3MuaWQrIi4iK2ldPXMudmlld0luaXRpYWxbaV07dS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix1LG4pfXIuaW5kZXhPZigic2VsZWN0Iik+LTEmJjE9PT10JiZfKGUsdSxbcy54YXhpc10sW3MueWF4aXNdLHMuaWQsVyksci5pbmRleE9mKCJldmVudCIpPi0xJiZ5LmNsaWNrKHUsZSxzLmlkKX1XLnByZXBGbj1mdW5jdGlvbih0LG4sYSl7dmFyIGw9dS5fZnVsbExheW91dC5kcmFnbW9kZSxmPUYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dS5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odSk7dmFyIHA9dS5fZnVsbExheW91dC5faW52VHJhbnNmb3JtO2U9dS5fZnVsbExheW91dC5faW52U2NhbGVYLHI9dS5fZnVsbExheW91dC5faW52U2NhbGVZO3ZhciBkPW8uYXBwbHkzRFRyYW5zZm9ybShwKShuLWYubGVmdCxhLWYudG9wKTtpZihCPWRbMF0sTj1kWzFdLEMpe3ZhciB2PUUuZmluZFBvbHlnb25PZmZzZXQobSxMWzBdLExbMV0sQyk7Qis9QSt2WzBdLE4rPU0rdlsxXX1zd2l0Y2gobCl7Y2FzZSJ6b29tIjpXLmNsaWNrRm49c3QsY3x8KFcubW92ZUZuPUM/aXQ6cnQsVy5kb25lRm49YXQsZnVuY3Rpb24oKXtqPW51bGwsVT1udWxsLFY9cy5wYXRoU3VicGxvdCgpLEg9ITE7dmFyIHQ9dS5fZnVsbExheW91dFtzLmlkXTtxPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwoRz1nLm1ha2Vab29tYm94KGgscSxULGssVikpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSxZPWcubWFrZUNvcm5lcnMoaCxULGspLHcodSl9KCkpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlImxhc3NvIjpiKHQsbixhLFcsbCl9fSx2LmluaXQoVyl9LE4udXBkYXRlUmFkaWFsRHJhZz1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcyxjPWkuZ2QsdT1pLmxheWVycyxmPWkucmFkaXVzLGg9aS5pbm5lclJhZGl1cyxwPWkuY3gsZD1pLmN5LG09aS5yYWRpYWxBeGlzLHk9Uy5yYWRpYWxEcmFnQm94U2l6ZSx4PXkvMjtpZihtLnZpc2libGUpe3ZhciBiLF8sVCxNPVIoaS5yYWRpYWxBeGlzQW5nbGUpLEU9bS5fcmwsTD1FWzBdLEM9RVsxXSxQPUVbcl0sST0uNzUqKEVbMV0tRVswXSkvKDEtaS5nZXRIb2xlKGUpKS9mO3I/KGI9cCsoZit4KSpNYXRoLmNvcyhNKSxfPWQtKGYreCkqTWF0aC5zaW4oTSksVD0icmFkaWFsZHJhZyIpOihiPXArKGgteCkqTWF0aC5jb3MoTSksXz1kLShoLXgpKk1hdGguc2luKE0pLFQ9InJhZGlhbGRyYWctaW5uZXIiKTt2YXIgTyx6LEQsQj1nLm1ha2VSZWN0RHJhZ2dlcih1LFQsImNyb3NzaGFpciIsLXgsLXgseSx5KSxOPXtlbGVtZW50OkIsZ2Q6Y307VihuLnNlbGVjdChCKSxtLnZpc2libGUmJmg8Zix7dHJhbnNmb3JtOmwoYixfKX0pLE4ucHJlcEZuPWZ1bmN0aW9uKCl7Tz1udWxsLHo9bnVsbCxEPW51bGwsTi5tb3ZlRm49aixOLmRvbmVGbj1ILHcoYyl9LE4uY2xhbXBGbj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSk8Uy5NSU5EUkFHJiYodD0wLGU9MCksW3QsZV19LHYuaW5pdChOKX1mdW5jdGlvbiBqKHQsZSl7aWYoTylPKHQsZSk7ZWxzZXt2YXIgbj1bdCwtZV0sYT1bTWF0aC5jb3MoTSksTWF0aC5zaW4oTSldLHM9TWF0aC5hYnMoby5kb3QobixhKS9NYXRoLnNxcnQoby5kb3QobixuKSkpO2lzTmFOKHMpfHwoTz1zPC41P3E6Ryl9dmFyIGw9e307IWZ1bmN0aW9uKHQpe251bGwhPT16P3RbaS5pZCsiLnJhZGlhbGF4aXMuYW5nbGUiXT16Om51bGwhPT1EJiYodFtpLmlkKyIucmFkaWFsYXhpcy5yYW5nZVsiK3IrIl0iXT1EKX0obCksYy5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGwpfWZ1bmN0aW9uIEgoKXtudWxsIT09ej9hLmNhbGwoIl9ndWlSZWxheW91dCIsYyxpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSIseik6bnVsbCE9PUQmJmEuY2FsbCgiX2d1aVJlbGF5b3V0IixjLGkuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSIsRCl9ZnVuY3Rpb24gcSh0LGUpe2lmKDAhPT1yKXt2YXIgbj1iK3QsYT1fK2U7ej1NYXRoLmF0YW4yKGQtYSxuLXApLGkudmFuZ2xlcyYmKHo9VSh6LGkudmFuZ2xlcykpLHo9Rih6KTt2YXIgbz1sKHAsZCkrcygteik7dVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLG8pLHVbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixvKTt2YXIgYz1pLmdkLl9mdWxsTGF5b3V0LGY9Y1tpLmlkXTtpLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShjLGYseil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKE0pLE1hdGguc2luKE0pXSk7aWYoRD1QLUkqbixJPjA9PShyP0Q+TDpEPEMpKXt2YXIgcz1jLl9mdWxsTGF5b3V0LGw9c1tpLmlkXTttLnJhbmdlW3JdPUQsbS5fcmxbcl09RCxpLnVwZGF0ZVJhZGlhbEF4aXMocyxsKSxpLnhheGlzLnNldFJhbmdlKCksaS54YXhpcy5zZXRTY2FsZSgpLGkueWF4aXMuc2V0UmFuZ2UoKSxpLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBmIGluIGkudHJhY2VIYXNoKXt2YXIgaD1pLnRyYWNlSGFzaFtmXSxwPW8uZmlsdGVyVmlzaWJsZShoKTtoWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChjLGkscCxsKSxhLnRyYWNlSXMoZiwiZ2wiKSYmcC5sZW5ndGgmJih1PSEwKX11JiYoayhjKSxBKGMpKX1lbHNlIEQ9bnVsbH19LE4udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsaT1lLmxheWVycyxjPWUucmFkaXVzLGY9ZS5hbmd1bGFyQXhpcyxoPWUuY3gscD1lLmN5LGQ9ZS5jeHgsbT1lLmN5eSx5PVMuYW5ndWxhckRyYWdCb3hTaXplLHg9Zy5tYWtlRHJhZ2dlcihpLCJwYXRoIiwiYW5ndWxhcmRyYWciLCJtb3ZlIiksYj17ZWxlbWVudDp4LGdkOnJ9O2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gTWF0aC5hdGFuMihtK3ktZSx0LWQteSl9bi5zZWxlY3QoeCkuYXR0cigiZCIsZS5wYXRoQW5udWx1cyhjLGMreSkpLmF0dHIoInRyYW5zZm9ybSIsbChoLHApKS5jYWxsKFQsIm1vdmUiKTt2YXIgTSxFLEwsQyxQLEksTz1pLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLHo9Ty5zZWxlY3RBbGwoIi5wb2ludCIpLEQ9Ty5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKTtmdW5jdGlvbiBSKGMsZyl7dmFyIHY9ZS5nZC5fZnVsbExheW91dCx5PXZbZS5pZF0seD1fKE0rYyp0Ll9pbnZTY2FsZVgsRStnKnQuX2ludlNjYWxlWSksYj1GKHgtSSk7aWYoQz1MK2IsaS5mcm9udHBsb3QuYXR0cigidHJhbnNmb3JtIixsKGUueE9mZnNldDIsZS55T2Zmc2V0MikrcyhbLWIsZCxtXSkpLGUudmFuZ2xlcyl7UD1lLnJhZGlhbEF4aXNBbmdsZStiO3ZhciB3PWwoaCxwKStzKC1iKSxUPWwoaCxwKStzKC1QKTtpLmJnLmF0dHIoInRyYW5zZm9ybSIsdyksaVsicmFkaWFsLWdyaWQiXS5hdHRyKCJ0cmFuc2Zvcm0iLHcpLGlbInJhZGlhbC1heGlzIl0uYXR0cigidHJhbnNmb3JtIixUKSxpWyJyYWRpYWwtbGluZSJdLnNlbGVjdCgibGluZSIpLmF0dHIoInRyYW5zZm9ybSIsVCksZS51cGRhdGVSYWRpYWxBeGlzVGl0bGUodix5LFApfWVsc2UgZS5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsbChkLG0pK3MoYikpO3ouZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXUuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixsKGUueCxlLnkpK3MoW2JdKSl9KSksRC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoInRleHQiKSxyPXUuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixzKFtiLGUuYXR0cigieCIpLGUuYXR0cigieSIpXSkrbChyLngsci55KSl9KSksZi5yb3RhdGlvbj1vLm1vZEhhbGYoQywzNjApLGUudXBkYXRlQW5ndWxhckF4aXModix5KSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgUz0hMTtmb3IodmFyIFIgaW4gZS50cmFjZUhhc2gpaWYoYS50cmFjZUlzKFIsImdsIikpe3ZhciBOPWUudHJhY2VIYXNoW1JdLGo9by5maWx0ZXJWaXNpYmxlKE4pO05bMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxqLHkpLGoubGVuZ3RoJiYoUz0hMCl9UyYmKGsociksQShyKSk7dmFyIFU9e307QihVKSxyLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsVSl9ZnVuY3Rpb24gQih0KXt0W2UuaWQrIi5hbmd1bGFyYXhpcy5yb3RhdGlvbiJdPUMsZS52YW5nbGVzJiYodFtlLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPVApfWZ1bmN0aW9uIE4oKXtELnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHQ9e307Qih0KSxhLmNhbGwoIl9ndWlSZWxheW91dCIscix0KX1iLnByZXBGbj1mdW5jdGlvbihuLGksYSl7dmFyIHM9dFtlLmlkXTtMPXMuYW5ndWxhcmF4aXMucm90YXRpb247dmFyIGw9eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtNPWktbC5sZWZ0LEU9YS1sLnRvcCxyLl9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybShyKTt2YXIgYz1vLmFwcGx5M0RUcmFuc2Zvcm0odC5faW52VHJhbnNmb3JtKShNLEUpO009Y1swXSxFPWNbMV0sST1fKE0sRSksYi5tb3ZlRm49UixiLmRvbmVGbj1OLHcocil9LGUudmFuZ2xlcyYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiYoYi5wcmVwRm49by5ub29wLFQobi5zZWxlY3QoeCksbnVsbCkpLHYuaW5pdChiKX0sTi5pc1B0SW5zaWRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNTbWl0aClyZXR1cm4hMDt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzLG49dGhpcy5hbmd1bGFyQXhpcy5jMmcodC50aGV0YSksaT10aGlzLnJhZGlhbEF4aXMsYT1pLmMybCh0LnIpLHM9aS5fcmw7cmV0dXJuKHI/RS5pc1B0SW5zaWRlUG9seWdvbjpvLmlzUHRJbnNpZGVTZWN0b3IpKGEsbixzLGUscil9LE4ucGF0aEFyYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0UucGF0aFBvbHlnb246by5wYXRoQXJjKSh0LGVbMF0sZVsxXSxyKX0sTi5wYXRoU2VjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/RS5wYXRoUG9seWdvbjpvLnBhdGhTZWN0b3IpKHQsZVswXSxlWzFdLHIpfSxOLnBhdGhBbm51bHVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zZWN0b3JJblJhZCxuPXRoaXMudmFuZ2xlcztyZXR1cm4obj9FLnBhdGhQb2x5Z29uQW5udWx1czpvLnBhdGhBbm51bHVzKSh0LGUsclswXSxyWzFdLG4pfSxOLnBhdGhTdWJwbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbm5lclJhZGl1cyxlPXRoaXMucmFkaXVzO3JldHVybiB0P3RoaXMucGF0aEFubnVsdXModCxlKTp0aGlzLnBhdGhTZWN0b3IoZSl9LE4uZmlsbFZpZXdJbml0aWFsS2V5PWZ1bmN0aW9uKHQsZSl7dCBpbiB0aGlzLnZpZXdJbml0aWFsfHwodGhpcy52aWV3SW5pdGlhbFt0XT1lKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo0NTksIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NDgyLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MTksIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo1MzksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjU0OCwiLi4vY2FydGVzaWFuL2RyYWdib3giOjU1OCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NTcwLCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjU3MSwiLi4vcGxvdHMiOjYxNCwiLi4vc21pdGgvaGVscGVycyI6NjIzLCIuL2NvbnN0YW50cyI6NjE1LCIuL2hlbHBlcnMiOjYxNiwiLi9zZXRfY29udmVydCI6NjIxLCJAcGxvdGx5L2QzIjo1OCx0aW55Y29sb3IyOjMwN31dLDYyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGE9bi5kZWcycmFkLG89bi5yYWQyZGVnO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGkodCxyKSx0Ll9pZCl7Y2FzZSJ4IjpjYXNlInJhZGlhbGF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPWUuX3N1YnBsb3Q7dC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXQuX3JsWzBdLG49dC5fcmxbMV0saT1yLmlubmVyUmFkaXVzLGE9KHIucmFkaXVzLWkpLyhuLWUpLG89aS9hLHM9ZT5uP2Z1bmN0aW9uKHQpe3JldHVybiB0PD0wfTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MH07dC5jMmc9ZnVuY3Rpb24ocil7dmFyIG49dC5jMmwociktZTtyZXR1cm4ocyhuKT9uOjApK299LHQuZzJjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmwyYyhyK2Utbyl9LHQuZzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0KmF9LHQuYzJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmcycCh0LmMyZyhlKSl9fX0odCxlKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjohZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGU7aWYoImxpbmVhciI9PT1yKXt2YXIgaT10LmQyYyxzPXQuYzJkO3QuZDJjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuImRlZ3JlZXMiPT09ZT9hKHQpOnR9KGkodCksZSl9LHQuYzJkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP28odCk6dH0odCxlKSl9fXQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUsaSl7dmFyIGEsbyxzPWVbaV0sbD1lLl9sZW5ndGgsYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5kMmMocixlLnRoZXRhdW5pdCl9O2lmKHMpe2lmKG4uaXNUeXBlZEFycmF5KHMpJiYibGluZWFyIj09PXIpe2lmKGw9PT1zLmxlbmd0aClyZXR1cm4gcztpZihzLnN1YmFycmF5KXJldHVybiBzLnN1YmFycmF5KDAsbCl9Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109YyhzW29dKX1lbHNle3ZhciB1PWkrIjAiLGY9ImQiK2ksaD11IGluIGU/YyhlW3VdKTowLHA9ZVtmXT9jKGVbZl0pOih0LnBlcmlvZHx8MipNYXRoLlBJKS9sO2ZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWgrbypwfXJldHVybiBhfSx0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGkscyxsLGMsdT1lLnNlY3RvcixmPXUubWFwKGEpLGg9e2Nsb2Nrd2lzZTotMSxjb3VudGVyY2xvY2t3aXNlOjF9W3QuZGlyZWN0aW9uXSxwPWEodC5yb3RhdGlvbiksZD1mdW5jdGlvbih0KXtyZXR1cm4gaCp0K3B9LG09ZnVuY3Rpb24odCl7cmV0dXJuKHQtcCkvaH07c3dpdGNoKHIpe2Nhc2UibGluZWFyIjpzPWk9bi5pZGVudGl0eSxjPWEsbD1vLHQucmFuZ2U9bi5pc0Z1bGxDaXJjbGUoZik/W3VbMF0sdVswXSszNjBdOmYubWFwKG0pLm1hcChvKTticmVhaztjYXNlImNhdGVnb3J5Ijp2YXIgZz10Ll9jYXRlZ29yaWVzLmxlbmd0aCx2PXQucGVyaW9kP01hdGgubWF4KHQucGVyaW9kLGcpOmc7MD09PXYmJih2PTEpLHM9Yz1mdW5jdGlvbih0KXtyZXR1cm4gMip0Kk1hdGguUEkvdn0saT1sPWZ1bmN0aW9uKHQpe3JldHVybiB0KnYvTWF0aC5QSS8yfSx0LnJhbmdlPVswLHZdfXQuYzJnPWZ1bmN0aW9uKHQpe3JldHVybiBkKHModCkpfSx0LmcyYz1mdW5jdGlvbih0KXtyZXR1cm4gaShtKHQpKX0sdC50Mmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQoYyh0KSl9LHQuZzJ0PWZ1bmN0aW9uKHQpe3JldHVybiBsKG0odCkpfX19KHQsZSl9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo1NzF9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyOiJzdWJwbG90IixuYW1lOiJzbWl0aCIsYXhpc05hbWVzOlsicmVhbGF4aXMiLCJpbWFnaW5hcnlheGlzIl0sYXhpc05hbWUyZGF0YUFycmF5OntpbWFnaW5hcnlheGlzOiJpbWFnIixyZWFsYXhpczoicmVhbCJ9fX0se31dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH1mdW5jdGlvbiBpKHQpe3ZhciBlPXRbMF0scj10WzFdO2lmKCFpc0Zpbml0ZShlKXx8IWlzRmluaXRlKHIpKXJldHVyblsxLDBdO3ZhciBuPShlKzEpKihlKzEpK3IqcjtyZXR1cm5bKGUqZStyKnItMSkvbiwyKnIvbl19ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybltyKnQucmFkaXVzK3QuY3gsLW4qdC5yYWRpdXMrdC5jeV19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBlKnQucmFkaXVzfWUuZXhwb3J0cz17c21pdGg6aSxyZWFjdGFuY2VBcmM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIHM9YSh0LGkoW3IsZV0pKSxsPXNbMF0sYz1zWzFdLHU9YSh0LGkoW24sZV0pKSxmPXVbMF0saD11WzFdO2lmKDA9PT1lKXJldHVyblsiTSIrbCsiLCIrYywiTCIrZisiLCIraF0uam9pbigiICIpO3ZhciBwPW8odCwxL01hdGguYWJzKGUpKTtyZXR1cm5bIk0iK2wrIiwiK2MsIkEiK3ArIiwiK3ArIiAwIDAsIisoZTwwPzE6MCkrIiAiK2YrIiwiK2hdLmpvaW4oIiAiKX0scmVzaXN0YW5jZUFyYzpmdW5jdGlvbih0LGUscixzKXt2YXIgbD1vKHQsMS8oZSsxKSksYz1hKHQsaShbZSxyXSkpLHU9Y1swXSxmPWNbMV0saD1hKHQsaShbZSxzXSkpLHA9aFswXSxkPWhbMV07aWYobihyKSE9PW4ocykpe3ZhciBtPWEodCxpKFtlLDBdKSk7cmV0dXJuWyJNIit1KyIsIitmLCJBIitsKyIsIitsKyIgMCAwLCIrKDA8cj8wOjEpKyIgIittWzBdKyIsIittWzFdLCJBIitsKyIsIitsKyIgMCAwLCIrKHM8MD8wOjEpK3ArIiwiK2RdLmpvaW4oIiAiKX1yZXR1cm5bIk0iK3UrIiwiK2YsIkEiK2wrIiwiK2wrIiAwIDAsIisoczxyPzA6MSkrIiAiK3ArIiwiK2RdLmpvaW4oIiAiKX0sc21pdGhUcmFuc2Zvcm06YX19LHt9XSw2MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuLi9wb2xhci9wb2xhciIpLG89dCgiLi9jb25zdGFudHMiKSxzPW8uYXR0cixsPW8ubmFtZSxjPWkobCksdT17fTt1W3NdPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6bCxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpzLG5hbWU6bCxpZFJvb3Q6bCxpZFJlZ2V4OmMsYXR0clJlZ2V4OmMsYXR0cmlidXRlczp1LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tsXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uKHIsbCxzKSx1PWVbc10uX3N1YnBsb3Q7dXx8KHU9YSh0LHMsITApLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbbF18fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7aWYoIWVbb10mJnMpZm9yKHZhciBjIGluIHMuZnJhbWV3b3JrLnJlbW92ZSgpLHMuY2xpcFBhdGhzKXMuY2xpcFBhdGhzW2NdLnJlbW92ZSgpfX0sdG9TVkc6dCgiLi4vY2FydGVzaWFuIikudG9TVkd9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9jYXJ0ZXNpYW4iOjU2MywiLi4vZ2V0X2RhdGEiOjU4OCwiLi4vcG9sYXIvcG9sYXIiOjYyMCwiLi9jb25zdGFudHMiOjYyMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjI1LCIuL2xheW91dF9kZWZhdWx0cyI6NjI2fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPXMoe2NvbG9yOmkuY29sb3Isc2hvd2xpbmU6byh7fSxpLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDpvKHt9LGkuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6aS5ncmlkY29sb3IsZ3JpZHdpZHRoOmkuZ3JpZHdpZHRofSwicGxvdCIsImZyb20tcm9vdCIpLGM9cyh7dGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOm8oe30saS50aWNrd2lkdGgse2RmbHQ6Mn0pLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDppLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmkudGlja3N1ZmZpeCx0aWNrZm9udDppLnRpY2tmb250LHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PW8oe3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0aWNrdmFsczp7ZGZsdDpbLjIsLjUsMSwyLDVdLHZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0sdGlja2FuZ2xlOm8oe30saS50aWNrYW5nbGUse2RmbHQ6OTB9KSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwiIl0sZWRpdFR5cGU6InRpY2tzIn0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbCxjKSxmPW8oe3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSx0aWNrczppLnRpY2tzLGVkaXRUeXBlOiJjYWxjIn0sbCxjKTtlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJzbWl0aCIsZWRpdFR5cGU6InBsb3QifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90IixkZmx0Om4uYmFja2dyb3VuZH0scmVhbGF4aXM6dSxpbWFnaW5hcnlheGlzOmYsZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjQsIi4uL2RvbWFpbiI6NTc5fV0sNjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGM9dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHU9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxmPXQoIi4uL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHA9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGQ9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksbT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9Zy5heGlzTmFtZXMseT0obj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnJldmVyc2UoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpLmNvbmNhdChbMF0pLmNvbmNhdCh0KX0saT1TdHJpbmcsYT17fSxmdW5jdGlvbih0KXt2YXIgZT1pP2kodCk6dDtpZihlIGluIGEpcmV0dXJuIGFbZV07dmFyIHI9bih0KTtyZXR1cm4gYVtlXT1yLHJ9KTtmdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPXIoImJnY29sb3IiKTtuLmJnQ29sb3I9cy5jb21iaW5lKGksbi5wYXBlcl9iZ2NvbG9yKTt2YXIgYSxjPXUobi5mdWxsRGF0YSxnLm5hbWUsbi5pZCkseD1uLmxheW91dE91dDtmdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHIoYSsiLiIrdCxlKX1mb3IodmFyIF89MDtfPHYubGVuZ3RoO18rKyl7YT12W19dLG8uaXNQbGFpbk9iamVjdCh0W2FdKXx8KHRbYV09e30pO3ZhciB3PXRbYV0sVD1sLm5ld0NvbnRhaW5lcihlLGEpO1QuX2lkPVQuX25hbWU9YSxULl9hdHRyPW4uaWQrIi4iK2EsVC5fdHJhY2VJbmRpY2VzPWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKTt2YXIgaz1iKCJ2aXNpYmxlIik7aWYoVC50eXBlPSJsaW5lYXIiLGQoVCx4KSxmKHcsVCxiLFQudHlwZSksayl7dmFyIEEsTSxTLEUsTD0icmVhbGF4aXMiPT09YTtpZihMJiZiKCJzaWRlIiksTCliKCJ0aWNrdmFscyIpO2Vsc2UgYigidGlja3ZhbHMiLHkoZS5yZWFsYXhpcy50aWNrdmFsc3x8bS5yZWFsYXhpcy50aWNrdmFscy5kZmx0KSk7dmFyIEM9bi5mb250fHx7fTtrJiYoTT0oQT1iKCJjb2xvciIpKT09PXcuY29sb3I/QTpDLmNvbG9yLFM9Qy5zaXplLEU9Qy5mYW1pbHkpLGgodyxULGIsVC50eXBlLHtub1RpY2tsYWJlbHN0ZXA6ITAsbm9Bbmc6IUwsbm9FeHA6ITAsZm9udDp7Y29sb3I6TSxzaXplOlMsZmFtaWx5OkV9fSksby5jb2VyY2UyKHQsZSxtLGErIi50aWNrbGVuIiksby5jb2VyY2UyKHQsZSxtLGErIi50aWNrd2lkdGgiKSxvLmNvZXJjZTIodCxlLG0sYSsiLnRpY2tjb2xvciIsZS5jb2xvciksYigidGlja3MiKXx8KGRlbGV0ZSBlW2FdLnRpY2tsZW4sZGVsZXRlIGVbYV0udGlja3dpZHRoLGRlbGV0ZSBlW2FdLnRpY2tjb2xvcikscCh3LFQsYix7ZGZsdENvbG9yOkEsYmdDb2xvcjpuLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOm1bYV19KSxiKCJsYXllciIpfWIoImhvdmVyZm9ybWF0IiksZGVsZXRlIFQudHlwZSxULl9pbnB1dD13fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2ModCxlLHIse25vVWlyZXZpc2lvbjohMCx0eXBlOmcubmFtZSxhdHRyaWJ1dGVzOm0saGFuZGxlRGVmYXVsdHM6eCxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NTY2LCIuLi9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTY4LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjU3MSwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3MywiLi4vZ2V0X2RhdGEiOjU4OCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6NjI3LCIuL2NvbnN0YW50cyI6NjIyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MjV9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGM9by50eXBlLHU9by5hdHRyaWJ1dGVzLGY9by5oYW5kbGVEZWZhdWx0cyxoPW8ucGFydGl0aW9ufHwieCIscD1lLl9zdWJwbG90c1tjXSxkPXAubGVuZ3RoLG09ZCYmcFswXS5yZXBsYWNlKC9cZCskLywiIik7ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBuLmNvZXJjZShzLGwsdSx0LGUpfWZvcih2YXIgdj0wO3Y8ZDt2Kyspe3ZhciB5PXBbdl07cz10W3ldP3RbeV06dFt5XT17fSxsPWkubmV3Q29udGFpbmVyKGUseSxtKSxvLm5vVWlyZXZpc2lvbnx8ZygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKTt2YXIgeD17fTt4W2hdPVt2L2QsKHYrMSkvZF0sYShsLGUsZyx4KSxvLmlkPXksZihzLGwsZyxvKX19fSx7Ii4uL2xpYiI6NDk4LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4vZG9tYWluIjo1Nzl9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL2RvY3MiKTtuLkZPUk1BVF9MSU5LLG4uREFURV9GT1JNQVRfTElOSztmdW5jdGlvbiBpKHQpe3ZhciBlPXQuZGVzY3JpcHRpb24/IiAiK3QuZGVzY3JpcHRpb246IiIscj10LmtleXN8fFtdO2lmKHIubGVuZ3RoPjApe2Zvcih2YXIgbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbltpXT0iYCIrcltpXSsiYCI7ZSs9IkZpbmFsbHksIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgaGFzIGFjY2VzcyB0byAiLGU9MT09PXIubGVuZ3RoPyJ2YXJpYWJsZSAiK25bMF06InZhcmlhYmxlcyAiK24uc2xpY2UoMCwtMSkuam9pbigiLCAiKSsiIGFuZCAiK24uc2xpY2UoLTEpKyIuIn1yZXR1cm4gZX1yLmhvdmVydGVtcGxhdGVBdHRycz1mdW5jdGlvbih0LGUpe3Q9dHx8e307aShlPWV8fHt9KTt2YXIgcj17dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOnQuZWRpdFR5cGV8fCJub25lIn07cmV0dXJuITEhPT10LmFycmF5T2smJihyLmFycmF5T2s9ITApLHJ9LHIudGV4dHRlbXBsYXRlQXR0cnM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9O2koZT1lfHx7fSk7dmFyIHI9e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZTp0LmVkaXRUeXBlfHwiY2FsYyJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoci5hcnJheU9rPSEwKSxyfX0seyIuLi9jb25zdGFudHMvZG9jcyI6NDY5fV0sNjI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXg7ci5uYW1lPSJ0ZXJuYXJ5Ijt2YXIgbz1yLmF0dHI9InN1YnBsb3QiO3IuaWRSb290PSJ0ZXJuYXJ5IixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YSgidGVybmFyeSIpLChyLmF0dHJpYnV0ZXM9e30pW29dPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InRlcm5hcnkiLGVkaXRUeXBlOiJjYWxjIn0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLCJ0ZXJuYXJ5IixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzWyJhLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImItdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYy10aXRsZSJdLnJlbW92ZSgpKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTg4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MzAsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MzEsIi4vdGVybmFyeSI6NjMyfV0sNjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD17dGl0bGU6e3RleHQ6YS50aXRsZS50ZXh0LGZvbnQ6YS50aXRsZS5mb250fSxjb2xvcjphLmNvbG9yLHRpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOnMoe30sYS5udGlja3Mse2RmbHQ6NixtaW46MX0pLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHRpY2tsYWJlbHN0ZXA6YS50aWNrbGFiZWxzdGVwLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmEubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6YS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDphLnRpY2tmb250LHRpY2thbmdsZTphLnRpY2thbmdsZSx0aWNrZm9ybWF0OmEudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6YS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6YS5ob3ZlcmZvcm1hdCxzaG93bGluZTpzKHt9LGEuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6YS5saW5lY29sb3IsbGluZXdpZHRoOmEubGluZXdpZHRoLHNob3dncmlkOnMoe30sYS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjphLmdyaWRjb2xvcixncmlkd2lkdGg6YS5ncmlkd2lkdGgsbGF5ZXI6YS5sYXllcixtaW46e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfSxfZGVwcmVjYXRlZDp7dGl0bGU6YS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6YS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxjPWUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZToidGVybmFyeSJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjB9LGFheGlzOmwsYmF4aXM6bCxjYXhpczpsfSwicGxvdCIsImZyb20tcm9vdCIpO2MudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGMuYWF4aXMudWlyZXZpc2lvbj1jLmJheGlzLnVpcmV2aXNpb249Yy5jYXhpcy51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjAsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi4vZG9tYWluIjo1Nzl9XSw2MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi4vY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksZj10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksaD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikscD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIGQodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBmPTA7ZjxwLmxlbmd0aDtmKyspcz10W289cFtmXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sbShzLGwsYSxlKTt2YXIgaD1lLmFheGlzLGQ9ZS5iYXhpcyxnPWUuY2F4aXM7aC5taW4rZC5taW4rZy5taW4+PXUmJihoLm1pbj0wLGQubWluPTAsZy5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT1oW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgcD1vKCJjb2xvciIpLGQ9cCE9PWkuY29sb3IuZGZsdD9wOnIuZm9udC5jb2xvcixtPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz0iQ29tcG9uZW50ICIrbSx2PW8oInRpdGxlLnRleHQiLGcpO2UuX2hvdmVydGl0bGU9dj09PWc/djptLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTphLmJpZ0ZvbnQoci5mb250LnNpemUpLGNvbG9yOmR9KSxvKCJtaW4iKSx1KHQsZSxvLCJsaW5lYXIiKSxsKHQsZSxvLCJsaW5lYXIiKSxzKHQsZSxvLCJsaW5lYXIiKSxjKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbygic2hvd3RpY2tsYWJlbHMiKSYmKGEuY29lcmNlRm9udChvLCJ0aWNrZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6ZH0pLG8oInRpY2thbmdsZSIpLG8oInRpY2tmb3JtYXQiKSksZih0LGUsbyx7ZGZsdENvbG9yOnAsYmdDb2xvcjpyLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOml9KSxvKCJob3ZlcmZvcm1hdCIpLG8oImxheWVyIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOiJ0ZXJuYXJ5IixhdHRyaWJ1dGVzOmgsaGFuZGxlRGVmYXVsdHM6ZCxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjU2NiwiLi4vY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiOjU2OCwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3MywiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NTc0LCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NTc1LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo2MjcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYzMH1dLDYzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPW8uXyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxwPXQoIi4uL3Bsb3RzIiksZD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LmZyZWVNb2RlLHg9di5yZWN0TW9kZSxiPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksXz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx3PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLFQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGs9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0aW9uc0NhY2hlLEE9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIE0odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPU07dmFyIFM9TS5wcm90b3R5cGU7Uy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sUy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLHAuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKGMuZmlsbCxyLmJnY29sb3IpfSxTLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRbdGhpcy5pZF0sbj10aGlzLmNsaXBJZD0iY2xpcCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixuLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcywiY2xpcFBhdGgiLGksKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLCJnIix0aGlzLmlkKSx0aGlzLnVwZGF0ZUxheWVycyhyKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuYmFja3Bsb3QsbixlKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuZ3JpZHMsbixlKX0sUy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllcnMscj1bImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiZ3JpZHMiXTsiYmVsb3cgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKSxyLnB1c2goImZyb250cGxvdCIpLCJhYm92ZSB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpO3ZhciBpPXRoaXMucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoImcudG9wbGV2ZWwiKS5kYXRhKHIsU3RyaW5nKSxhPVsiYWdyaWQiLCJiZ3JpZCIsImNncmlkIl07aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtlW3RdPXIsImZyb250cGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6ImJhY2twbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApOiJwbG90YmciPT09dD9yLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpOiJhbGluZSI9PT10fHwiYmxpbmUiPT09dHx8ImNsaW5lIj09PXQ/ci5hcHBlbmQoInBhdGgiKToiZ3JpZHMiPT09dCYmYS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JpZCAiK3QsITApfSkpfSkpLGkub3JkZXIoKX07dmFyIEU9TWF0aC5zcXJ0KDQvMyk7Uy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLGwscD10aGlzLGQ9dC5kb21haW4sbT0oZC54WzBdK2QueFsxXSkvMixnPShkLnlbMF0rZC55WzFdKS8yLHY9ZC54WzFdLWQueFswXSx5PWQueVsxXS1kLnlbMF0seD12KmUudyxiPXkqZS5oLF89dC5zdW0sdz10LmFheGlzLm1pbixUPXQuYmF4aXMubWluLGs9dC5jYXhpcy5taW47eD5FKmI/aT0oYT1iKSpFOmE9KGk9eCkvRSxvPXYqaS94LGw9eSphL2Iscj1lLmwrZS53Km0taS8yLG49ZS50K2UuaCooMS1nKS1hLzIscC54MD1yLHAueTA9bixwLnc9aSxwLmg9YSxwLnN1bT1fLHAueGF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3crMiprLV8sXy13LTIqVF0sZG9tYWluOlttLW8vMixtK28vMl0sX2lkOiJ4In0sZihwLnhheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueGF4aXMuc2V0U2NhbGUoKSxwLnhheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hPj1wLmFheGlzLnJhbmdlWzBdJiZ0LmE8PXAuYWF4aXMucmFuZ2VbMV0mJnQuYj49cC5iYXhpcy5yYW5nZVsxXSYmdC5iPD1wLmJheGlzLnJhbmdlWzBdJiZ0LmM+PXAuY2F4aXMucmFuZ2VbMV0mJnQuYzw9cC5jYXhpcy5yYW5nZVswXX0scC55YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbdyxfLVQta10sZG9tYWluOltnLWwvMixnK2wvMl0sX2lkOiJ5In0sZihwLnlheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueWF4aXMuc2V0U2NhbGUoKSxwLnlheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgQT1wLnlheGlzLmRvbWFpblswXSxNPXAuYWF4aXM9aCh7fSx0LmFheGlzLHtyYW5nZTpbdyxfLVQta10sc2lkZToibGVmdCIsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihNLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLE0uc2V0U2NhbGUoKTt2YXIgUz1wLmJheGlzPWgoe30sdC5iYXhpcyx7cmFuZ2U6W18tdy1rLFRdLHNpZGU6ImJvdHRvbSIsZG9tYWluOnAueGF4aXMuZG9tYWluLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6IngiLF9sZW5ndGg6aX0pO2YoUyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxTLnNldFNjYWxlKCk7dmFyIEw9cC5jYXhpcz1oKHt9LHQuY2F4aXMse3JhbmdlOltfLXctVCxrXSxzaWRlOiJyaWdodCIsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihMLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLEwuc2V0U2NhbGUoKTt2YXIgQz0iTSIrcisiLCIrKG4rYSkrImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWYuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQykscC5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpO3ZhciBQPSJNMCwiK2ErImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixQKTt2YXIgST1zKHIsbik7cC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLEkpLHAuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIE89cyhyLVMuX29mZnNldCxuK2EpO3AubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsTykscC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgej1zKHIraS8yLG4pKyJyb3RhdGUoMzApIitzKDAsLU0uX29mZnNldCk7cC5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIix6KSxwLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLHopO3ZhciBEPXMocitpLzIsbikrInJvdGF0ZSgtMzApIitzKDAsLUwuX29mZnNldCk7cC5sYXllcnMuY2F4aXMuYXR0cigidHJhbnNmb3JtIixEKSxwLmxheWVycy5jZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEQpLHAuZHJhd0F4ZXMoITApLHAubGF5ZXJzLmFsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE0uc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJsIitpLzIrIiwtIithOiJNMCwwIikuY2FsbChjLnN0cm9rZSxNLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoTS5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmJsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLFMuc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJoIitpOiJNMCwwIikuY2FsbChjLnN0cm9rZSxTLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoUy5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmNsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwuc2hvd2xpbmU/Ik0iKyhyK2kvMikrIiwiK24rImwiK2kvMisiLCIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsTC5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEwubGluZXdpZHRofHwwKSsicHgiKSxwLmdyYXBoRGl2Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHAuaW5pdEludGVyYWN0aW9ucygpLHUuc2V0Q2xpcFVybChwLmxheWVycy5mcm9udHBsb3QscC5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6cC5jbGlwSWQscC5ncmFwaERpdil9LFMuZHJhd0F4ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRoaXMuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsbj10aGlzLmxheWVycyxpPXRoaXMuYWF4aXMsYT10aGlzLmJheGlzLG89dGhpcy5jYXhpcztpZih0aGlzLmRyYXdBeChpKSx0aGlzLmRyYXdBeChhKSx0aGlzLmRyYXdBeChvKSx0KXt2YXIgcz1NYXRoLm1heChpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZS8yOjAsKG8uc2hvd3RpY2tsYWJlbHM/Ljc1Km8udGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09by50aWNrcz8uODcqby50aWNrbGVuOjApKSxjPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztuWyJhLXRpdGxlIl09Yi5kcmF3KGUsImEiK3Ise3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTp0aGlzLmlkKyIuYWF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEEgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53LzIseTp0aGlzLnkwLWkudGl0bGUuZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLG5bImItdGl0bGUiXT1iLmRyYXcoZSwiYiIrcix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOnRoaXMuaWQrIi5iYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6bChlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQiB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MC1jLHk6dGhpcy55MCt0aGlzLmgrLjgzKmEudGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJjLXRpdGxlIl09Yi5kcmF3KGUsImMiK3Ise3Byb3BDb250YWluZXI6byxwcm9wTmFtZTp0aGlzLmlkKyIuY2F4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53K2MseTp0aGlzLnkwK3RoaXMuaCsuODMqby50aXRsZS5mb250LnNpemUrYywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfX0sUy5kcmF3QXg9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmdyYXBoRGl2LG49dC5fbmFtZSxpPW4uY2hhckF0KDApLGE9dC5faWQscz10aGlzLmxheWVyc1tuXSxsPWkrInRpY2tMYXlvdXQiLGM9KGU9dCkudGlja3MrU3RyaW5nKGUudGlja2xlbikrU3RyaW5nKGUuc2hvd3RpY2tsYWJlbHMpO3RoaXNbbF0hPT1jJiYocy5zZWxlY3RBbGwoIi4iK2ErInRpY2siKS5yZW1vdmUoKSx0aGlzW2xdPWMpLHQuc2V0U2NhbGUoKTt2YXIgdT1kLmNhbGNUaWNrcyh0KSxmPWQuY2xpcEVuZHModCx1KSxoPWQubWFrZVRyYW5zVGlja0ZuKHQpLHA9ZC5nZXRUaWNrU2lnbnModClbMl0sbT1vLmRlZzJyYWQoMzApLGc9cCoodC5saW5ld2lkdGh8fDEpLzIsdj1wKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPSJiIj09PWk/Ik0wLCIrZysibCIrTWF0aC5zaW4obSkqdisiLCIrTWF0aC5jb3MobSkqdjoiTSIrZysiLDBsIitNYXRoLmNvcyhtKSp2KyIsIistTWF0aC5zaW4obSkqdixfPXthOiJNMCwwbCIreCsiLC0iK3kvMixiOiJNMCwwbC0iK3kvMisiLC0iK3gsYzoiTTAsMGwtIit4KyIsIit5LzJ9W2ldO2QuZHJhd1RpY2tzKHIsdCx7dmFsczoiaW5zaWRlIj09PXQudGlja3M/Zjp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46aCxjcmlzcDohMX0pLGQuZHJhd0dyaWQocix0LHt2YWxzOmYsbGF5ZXI6dGhpcy5sYXllcnNbaSsiZ3JpZCJdLHBhdGg6Xyx0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxkLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmgsbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgTD1BLk1JTlpPT00vMisuODcsQz0ibS0wLjg3LC41aCIrTCsidjNoLSIrKEwrNS4yKSsibCIrKEwvMisyLjYpKyIsLSIrKC44NypMKzQuNSkrImwyLjYsMS41bC0iK0wvMisiLCIrLjg3KkwrIloiLFA9Im0wLjg3LC41aC0iK0wrInYzaCIrKEwrNS4yKSsibC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLTIuNiwxLjVsIitMLzIrIiwiKy44NypMKyJaIixJPSJtMCwxbCIrTC8yKyIsIisuODcqTCsibDIuNiwtMS41bC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLSIrKEwvMisyLjYpKyIsIisoLjg3KkwrNC41KSsibDIuNiwxLjVsIitMLzIrIiwtIisuODcqTCsiWiIsTz0hMDtmdW5jdGlvbiB6KHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9Uy5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2sodGhpcy5kcmFnT3B0aW9ucyksVCh0aGlzLmRyYWdPcHRpb25zLmdkKX0sUy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sZixoLHAsZCx2LGIsVCxrLE09dGhpcyxTPU0ubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5ub2RlKCksTD1NLmdyYXBoRGl2LEQ9TC5fZnVsbExheW91dC5fem9vbWxheWVyO2Z1bmN0aW9uIFIodCl7dmFyIGU9e307cmV0dXJuIGVbTS5pZCsiLmFheGlzLm1pbiJdPXQuYSxlW00uaWQrIi5iYXhpcy5taW4iXT10LmIsZVtNLmlkKyIuY2F4aXMubWluIl09dC5jLGV9ZnVuY3Rpb24gRih0LGUpe3ZhciByPUwuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO3ooTCksMj09PXQmJihMLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUih7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJjE9PT10JiZ3KGUsTCxbTS54YXhpc10sW00ueWF4aXNdLE0uaWQsTS5kcmFnT3B0aW9ucyksci5pbmRleE9mKCJldmVudCIpPi0xJiZnLmNsaWNrKEwsZSxNLmlkKX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIDEtZS9NLmh9ZnVuY3Rpb24gTih0LGUpe3JldHVybiAxLSh0KyhNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gaih0LGUpe3JldHVybih0LShNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gVShpLGEpe3ZhciBvPXIraSp0LHM9bithKmUsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsQigwLG4pLEIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLE4ocixuKSxOKG8scykpKSx1PU1hdGgubWF4KDAsTWF0aC5taW4oMSxqKHIsbiksaihvLHMpKSksbT0obC8yK3UpKk0udyxnPSgxLWwvMi1jKSpNLncseT0obStnKS8yLHg9Zy1tLF89KDEtbCkqTS5oLHc9Xy14L0U7eDxBLk1JTlpPT00/KHA9ZixULmF0dHIoImQiLHYpLGsuYXR0cigiZCIsIk0wLDBaIikpOihwPXthOmYuYStsKmgsYjpmLmIrYypoLGM6Zi5jK3UqaH0sVC5hdHRyKCJkIix2KyJNIittKyIsIitfKyJIIitnKyJMIit5KyIsIit3KyJMIittKyIsIitfKyJaIiksay5hdHRyKCJkIiwiTSIrcisiLCIrbisibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrbSsiLCIrXytDKyJNIitnKyIsIitfK1ArIk0iK3krIiwiK3crSSkpLGJ8fChULnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsZD4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxrLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxiPSEwKSxMLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsUihwKSl9ZnVuY3Rpb24gVigpe3ooTCkscCE9PWYmJihhLmNhbGwoIl9ndWlSZWxheW91dCIsTCxSKHApKSxPJiZMLmRhdGEmJkwuX2NvbnRleHQuc2hvd1RpcHMmJihvLm5vdGlmaWVyKGwoTCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLE89ITEpKX1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9dC9NLnhheGlzLl9tLG49ZS9NLnlheGlzLl9tLGk9WyhwPXthOmYuYS1uLGI6Zi5iKyhyK24pLzIsYzpmLmMtKHItbikvMn0pLmEscC5iLHAuY10uc29ydChvLnNvcnRlckFzYyksYT1pLmluZGV4T2YocC5hKSxsPWkuaW5kZXhPZihwLmIpLGM9aS5pbmRleE9mKHAuYyk7aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLHA9e2E6aVthXSxiOmlbbF0sYzppW2NdfSxlPShmLmEtcC5hKSpNLnlheGlzLl9tLHQ9KGYuYy1wLmMtZi5iK3AuYikqTS54YXhpcy5fbSk7dmFyIGg9cyhNLngwK3QsTS55MCtlKTtNLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsaCk7dmFyIGQ9cygtdCwtZSk7TS5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixkKSxNLmFheGlzLnJhbmdlPVtwLmEsTS5zdW0tcC5iLXAuY10sTS5iYXhpcy5yYW5nZT1bTS5zdW0tcC5hLXAuYyxwLmJdLE0uY2F4aXMucmFuZ2U9W00uc3VtLXAuYS1wLmIscC5jXSxNLmRyYXdBeGVzKCExKSxNLl9oYXNDbGlwT25BeGlzRmFsc2UmJk0ucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLE0pLEwuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixSKHApKX1mdW5jdGlvbiBxKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUihwKSl9dGhpcy5kcmFnT3B0aW9ucz17ZWxlbWVudDpTLGdkOkwscGxvdGluZm86e2lkOk0uaWQsZG9tYWluOkwuX2Z1bGxMYXlvdXRbTS5pZF0uZG9tYWluLHhheGlzOk0ueGF4aXMseWF4aXM6TS55YXhpc30sc3VicGxvdDpNLmlkLHByZXBGbjpmdW5jdGlvbihhLGwsdSl7TS5kcmFnT3B0aW9ucy54YXhlcz1bTS54YXhpc10sTS5kcmFnT3B0aW9ucy55YXhlcz1bTS55YXhpc10sdD1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsZT1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVk7dmFyIG09TS5kcmFnT3B0aW9ucy5kcmFnbW9kZT1MLl9mdWxsTGF5b3V0LmRyYWdtb2RlO3kobSk/TS5kcmFnT3B0aW9ucy5taW5EcmFnPTE6TS5kcmFnT3B0aW9ucy5taW5EcmFnPXZvaWQgMCwiem9vbSI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1VLE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPVYsZnVuY3Rpb24odCxlLGEpe3ZhciBsPVMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cj1lLWwubGVmdCxuPWEtbC50b3AsTC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0oTCk7dmFyIHU9TC5fZnVsbExheW91dC5faW52VHJhbnNmb3JtLG09by5hcHBseTNEVHJhbnNmb3JtKHUpKHIsbik7cj1tWzBdLG49bVsxXSxmPXthOk0uYWF4aXMucmFuZ2VbMF0sYjpNLmJheGlzLnJhbmdlWzFdLGM6TS5jYXhpcy5yYW5nZVsxXX0scD1mLGg9TS5hYXhpcy5yYW5nZVsxXS1mLmEsZD1pKE0uZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbTS5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksdj0iTTAsIitNLmgrIkwiK00udy8yKyIsIDBMIitNLncrIiwiK00uaCsiWiIsYj0hMSxUPUQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmQ+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsdiksaz1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoImQiLCJNMCwwWiIpLE0uY2xlYXJTZWxlY3QoTCl9KDAsbCx1KSk6InBhbiI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1ILE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPXEsZj17YTpNLmFheGlzLnJhbmdlWzBdLGI6TS5iYXhpcy5yYW5nZVsxXSxjOk0uY2F4aXMucmFuZ2VbMV19LHA9ZixNLmNsZWFyU2VsZWN0KEwpKTooeChtKXx8eShtKSkmJl8oYSxsLHUsTS5kcmFnT3B0aW9ucyxtKX19LFMub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3ZlcihMLHQsTS5pZCksTC5fZnVsbExheW91dC5fbGFzdGhvdmVyPVMsTC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PU0uaWR9LFMub25tb3VzZW91dD1mdW5jdGlvbih0KXtMLl9kcmFnZ2luZ3x8bS51bmhvdmVyKEwsdCl9LG0uaW5pdCh0aGlzLmRyYWdPcHRpb25zKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODAsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzc5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vY29tcG9uZW50cy9meCI6NDAxLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NDU5LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo1NTYsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjU3MCwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo1NzEsIi4uL3Bsb3RzIjo2MTQsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6MzA3fV0sNjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2xvZ2dlcnMiKSxpPXQoIi4vbGliL25vb3AiKSxhPXQoIi4vbGliL3B1c2hfdW5pcXVlIiksbz10KCIuL2xpYi9pc19wbGFpbl9vYmplY3QiKSxzPXQoIi4vbGliL2RvbSIpLmFkZFN0eWxlUnVsZSxsPXQoIi4vbGliL2V4dGVuZCIpLGM9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIiksdT10KCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksZj1sLmV4dGVuZEZsYXQsaD1sLmV4dGVuZERlZXBBbGw7ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lm5hbWUsaT10LmNhdGVnb3JpZXMsYT10Lm1ldGE7aWYoci5tb2R1bGVzW2VdKW4ubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coIlBsb3QgdHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpYihpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxsPTA7bDxpLmxlbmd0aDtsKyspb1tpW2xdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtsXV09ITA7Zm9yKHZhciBjIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KXkoYyxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJmYoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKTt2YXIgdT10LmJhc2VQbG90TW9kdWxlLGg9dS5uYW1lO2lmKCJtYXBib3giPT09aCl7dmFyIHA9dS5jb25zdGFudHMuc3R5bGVSdWxlcztmb3IodmFyIGQgaW4gcClzKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubWFwYm94Z2wtIitkLHBbZF0pfSJnZW8iIT09aCYmIm1hcGJveCIhPT1ofHx2b2lkIDA9PT10eXBlb2Ygd2luZG93fHx2b2lkIDAhPT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHwod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KX19ZnVuY3Rpb24gZCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9dC5uYW1lO2Zvcih2YXIgbiBpbiByLmNvbXBvbmVudHNSZWdpc3RyeVtlXT10LHQubGF5b3V0QXR0cmlidXRlcyYmKHQubGF5b3V0QXR0cmlidXRlcy5faXNMaW5rZWRUb0FycmF5JiZhKHIubGF5b3V0QXJyYXlDb250YWluZXJzLGUpLHYodCkpLHIubW9kdWxlcyl5KGUsbik7Zm9yKHZhciBpIGluIHIuc3VicGxvdHNSZWdpc3RyeSliKGUsaSk7Zm9yKHZhciBvIGluIHIudHJhbnNmb3Jtc1JlZ2lzdHJ5KXgoZSxvKTt0LnNjaGVtYSYmdC5zY2hlbWEubGF5b3V0JiZoKHUsdC5zY2hlbWEubGF5b3V0KX1mdW5jdGlvbiBtKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7Zm9yKHZhciBzIGluIGkmJmEmJm4ubG9nKFtlKyIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIiwiUGxlYXNlIG5vdGUgdGhhdCBhbGwgKnRyYW5zZm9ybSogbWV0aG9kcyBhcmUgZXhlY3V0ZWQiLCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiJdLmpvaW4oIiAiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJm4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KCItIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIHkodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmgoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZoKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIGIodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89InN1YnBsb3QiPT09aS5hdHRyP2kubmFtZTppLmF0dHI7QXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7dmFyIHM9bi5zdWJwbG90c1tvXTthJiZzJiZoKGEscyl9fWZ1bmN0aW9uIF8odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpwKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjptKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpkKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW18odCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1fKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbYy50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9kb20iOjQ4NiwiLi9saWIvZXh0ZW5kIjo0ODgsIi4vbGliL2lzX3BsYWluX29iamVjdCI6NDk5LCIuL2xpYi9sb2dnZXJzIjo1MDIsIi4vbGliL25vb3AiOjUwNywiLi9saWIvcHVzaF91bmlxdWUiOjUxMywiLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjYwNX1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT1pLmV4dGVuZEZsYXQsbz1pLmV4dGVuZERlZXA7ZnVuY3Rpb24gcyh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSJ0aGVtZXNfX3RodW1iIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZTp7dGV4dDoiIn0sc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2UidGh1bWJuYWlsIjplPXt0aXRsZTp7dGV4dDoiIn0saGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOiIiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbD10LmRhdGEsYz10LmxheW91dCx1PW8oW10sbCksZj1vKHt9LGMscyhlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKGYud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJihmLmhlaWdodD1lLmhlaWdodCksInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzc3x8InRoZW1lc19fdGh1bWIiPT09ZS50aWxlQ2xhc3Mpe2YuYW5ub3RhdGlvbnM9W107dmFyIHA9T2JqZWN0LmtleXMoZik7Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKylpPXBbcl0sWyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXS5pbmRleE9mKGkuc2xpY2UoMCw1KSk+LTEmJihmW3Bbcl1dLnRpdGxlPXt0ZXh0OiIifSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7dmFyIGQ9dVtyXTtkLnNob3dzY2FsZT0hMSxkLm1hcmtlciYmKGQubWFya2VyLnNob3dzY2FsZT0hMSksbi50cmFjZUlzKGQsInBpZS1saWtlIikmJihkLnRleHRwb3NpdGlvbj0ibm9uZSIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZi5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBtPU9iamVjdC5rZXlzKGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pKTtpZihtLmxlbmd0aCl7dmFyIGc9e307Zm9yKCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3MmJihnPXt0aXRsZTp7dGV4dDoiIn0sc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB2PWZbbVtyXV07di54YXhpc3x8KHYueGF4aXM9e30pLHYueWF4aXN8fCh2LnlheGlzPXt9KSx2LnpheGlzfHwodi56YXhpcz17fSksYSh2LnhheGlzLGcpLGEodi55YXhpcyxnKSxhKHYuemF4aXMsZyksdi5fc2NlbmU9bnVsbH19dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS50aWxlQ2xhc3MmJih5LmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIHg9e2dkOnksdGQ6eSxsYXlvdXQ6ZixkYXRhOnUsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm4idHJhbnNwYXJlbnQiIT09ZS5zZXRCYWNrZ3JvdW5kJiYoeC5jb25maWcuc2V0QmFja2dyb3VuZD1lLnNldEJhY2tncm91bmR8fCJvcGFxdWUiKSx4LmdkLmRlZmF1bHRMYXlvdXQ9cyhlLnRpbGVDbGFzcykseH19LHsiLi4vbGliIjo0OTgsIi4uL3JlZ2lzdHJ5Ijo2MzN9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS90b19pbWFnZSIpLGE9dCgiLi9maWxlc2F2ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuLmlzUGxhaW5PYmplY3QodCl8fChyPW4uZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fCJwbmciLGUud2lkdGg9ZS53aWR0aHx8bnVsbCxlLmhlaWdodD1lLmhlaWdodHx8bnVsbCxlLmltYWdlRGF0YU9ubHk9ITAsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbCl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZsKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLG4uaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZsKG5ldyBFcnJvcihvLk1TR19JRV9CQURfRk9STUFUKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGM9aSh0LGUpLHU9ZS5maWxlbmFtZXx8dC5mbnx8Im5ld3Bsb3QiO3UrPSIuIitlLmZvcm1hdC5yZXBsYWNlKCItIiwiLiIpLGMudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGEodCx1LGUuZm9ybWF0KX0pKS50aGVuKChmdW5jdGlvbih0KXtzKHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxsKHQpfSkpfSkpfX0seyIuLi9saWIiOjQ5OCwiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjU0MSwiLi9maWxlc2F2ZXIiOjYzNiwiLi9oZWxwZXJzIjo2Mzd9XSw2MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxvPSJkb3dubG9hZCJpbiBhO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxsKXt2YXIgYyx1O2lmKG4uaXNJRSgpKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyxlKSxjPW51bGwscyhlKTtpZihvKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LHIpLHU9aS5jcmVhdGVPYmplY3RVUkwoYyksYS5ocmVmPXUsYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSksaS5yZXZva2VPYmplY3RVUkwodSksYz1udWxsLHMoZSk7aWYobi5pc1NhZmFyaSgpKXt2YXIgZj0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGkub2N0ZXRTdHJlYW0oZitlbmNvZGVVUklDb21wb25lbnQodCkpLHMoZSl9bChuZXcgRXJyb3IoImRvd25sb2FkIGVycm9yIikpfSkpfX0seyIuLi9saWIiOjQ5OCwiLi9oZWxwZXJzIjo2Mzd9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0sci5lbmNvZGVTVkc9ZnVuY3Rpb24odCl7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudCh0KX0sci5lbmNvZGVKU09OPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmFwcGxpY2F0aW9uL2pzb24sIitlbmNvZGVVUklDb21wb25lbnQodCl9O3ZhciBpPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkw7ci5jcmVhdGVPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY3JlYXRlT2JqZWN0VVJMKHQpfSxyLnJldm9rZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZva2VPYmplY3RVUkwodCl9LHIuY3JlYXRlQmxvYj1mdW5jdGlvbih0LGUpe2lmKCJzdmciPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04In0pO2lmKCJmdWxsLWpzb24iPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04In0pO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheUJ1ZmZlcihlKSxuPW5ldyBVaW50OEFycmF5KHIpLGk9MDtpPGU7aSsrKW5baV09dC5jaGFyQ29kZUF0KGkpO3JldHVybiByfSh3aW5kb3cuYXRvYih0KSk7cmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbcl0se3R5cGU6ImltYWdlLyIrZX0pfSxyLm9jdGV0U3RyZWFtPWZ1bmN0aW9uKHQpe2RvY3VtZW50LmxvY2F0aW9uLmhyZWY9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIit0fSxyLklNQUdFX1VSTF9QUkVGSVg9L15kYXRhOmltYWdlXC9cdys7YmFzZTY0LC8sci5NU0dfSUVfQkFEX0ZPUk1BVD0iU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIn0seyIuLi9yZWdpc3RyeSI6NjMzfV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dCgiLi9jbG9uZXBsb3QiKSx0b1NWRzp0KCIuL3Rvc3ZnIiksc3ZnVG9JbWc6dCgiLi9zdmd0b2ltZyIpLHRvSW1hZ2U6dCgiLi90b2ltYWdlIiksZG93bmxvYWRJbWFnZTp0KCIuL2Rvd25sb2FkIil9O2UuZXhwb3J0cz1pfSx7Ii4vY2xvbmVwbG90Ijo2MzQsIi4vZG93bmxvYWQiOjYzNSwiLi9oZWxwZXJzIjo2MzcsIi4vc3ZndG9pbWciOjYzOSwiLi90b2ltYWdlIjo2NDAsIi4vdG9zdmciOjY0MX1dLDYzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGksbyl7dmFyIHM9d2luZG93LkltYWdlLGw9dC5zdmcsYz10LmZvcm1hdHx8InBuZyI7aWYobi5pc0lFKCkmJiJzdmciIT09Yyl7dmFyIHU9bmV3IEVycm9yKGEuTVNHX0lFX0JBRF9GT1JNQVQpO3JldHVybiBvKHUpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLHUpfXZhciBmLGgscD10LmNhbnZhcyxkPXQuc2NhbGV8fDEsbT10LndpZHRofHwzMDAsZz10LmhlaWdodHx8MTUwLHY9ZCptLHk9ZCpnLHg9cC5nZXRDb250ZXh0KCIyZCIpLGI9bmV3IHM7InN2ZyI9PT1jfHxuLmlzU2FmYXJpKCk/aD1hLmVuY29kZVNWRyhsKTooZj1hLmNyZWF0ZUJsb2IobCwic3ZnIiksaD1hLmNyZWF0ZU9iamVjdFVSTChmKSkscC53aWR0aD12LHAuaGVpZ2h0PXksYi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goZj1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGgpLCJzdmciIT09YyYmeC5kcmF3SW1hZ2UoYiwwLDAsdix5KSxjKXtjYXNlImpwZWciOnI9cC50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlInBuZyI6cj1wLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7YnJlYWs7Y2FzZSJ3ZWJwIjpyPXAudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7Y2FzZSJzdmciOnI9aDticmVhaztkZWZhdWx0OnZhciBuPSJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIjtpZihvKG5ldyBFcnJvcihuKSksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGIub25lcnJvcj1mdW5jdGlvbihyKXtpZihmPW51bGwsYS5yZXZva2VPYmplY3RVUkwoaCksbyhyKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixyKX0sYi5zcmM9aH0pKTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo0OTgsIi4vaGVscGVycyI6NjM3LGV2ZW50czoxODF9XSw2NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxmPXUuZ2Q7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTt2YXIgaD1vLmdldFJlZHJhd0Z1bmMoZik7cmV0dXJuIGkuY2FsbCgiX2RvUGxvdCIsZix1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oaCkudGhlbigoZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9bChmKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2YmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3IuZW1pdCgiZXJyb3IiLHQpfSkpLHJ9fSx7Ii4uL2xpYiI6NDk4LCIuLi9yZWdpc3RyeSI6NjMzLCIuL2Nsb25lcGxvdCI6NjM0LCIuL2hlbHBlcnMiOjYzNywiLi9zdmd0b2ltZyI6NjM5LCIuL3Rvc3ZnIjo2NDEsZXZlbnRzOjE4MX1dLDY0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxsPS8iL2csYz1uZXcgUmVnRXhwKCcoIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRCIpJywiZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZj10Ll9mdWxsTGF5b3V0LGg9Zi5fcGFwZXIscD1mLl90b3BwYXBlcixkPWYud2lkdGgsbT1mLmhlaWdodDtoLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmNhbGwoYS5zZXRSZWN0LDAsMCxkLG0pLmNhbGwoby5maWxsLGYucGFwZXJfYmdjb2xvcik7dmFyIGc9Zi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IodT0wO3U8Zy5sZW5ndGg7dSsrKXt2YXIgdj1nW3VdO3YudG9TVkcmJnYudG9TVkcodCl9aWYocCl7dmFyIHk9cC5ub2RlKCkuY2hpbGROb2Rlcyx4PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpO2Zvcih1PTA7dTx4Lmxlbmd0aDt1Kyspe3ZhciBiPXhbdV07Yi5jaGlsZE5vZGVzLmxlbmd0aCYmaC5ub2RlKCkuYXBwZW5kQ2hpbGQoYil9fWYuX2RyYWdnZXJzJiZmLl9kcmFnZ2Vycy5yZW1vdmUoKSxoLm5vZGUoKS5zdHlsZS5iYWNrZ3JvdW5kPSIiLGguc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOm51bGwsImRhdGEtbWF0aCI6bnVsbH0pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJiJub25lIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignIicpJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX1lbHNlIHQucmVtb3ZlKCl9KSksaC5zZWxlY3RBbGwoIi5ncmFkaWVudF9maWxsZWQsLnBhdHRlcm5fZmlsbGVkIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXRoaXMuc3R5bGUuZmlsbDtlJiYtMSE9PWUuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJmaWxsIixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpO3ZhciByPXRoaXMuc3R5bGUuc3Ryb2tlO3ImJi0xIT09ci5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoInN0cm9rZSIsci5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX0pKSwicGRmIiE9PWUmJiJlcHMiIT09ZXx8aC5zZWxlY3RBbGwoIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMCksaC5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnMiLHMuc3ZnKSxoLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxuczp4bGluayIscy54bGluayksInN2ZyI9PT1lJiZyJiYoaC5hdHRyKCJ3aWR0aCIscipkKSxoLmF0dHIoImhlaWdodCIsciptKSxoLmF0dHIoInZpZXdCb3giLCIwIDAgIitkKyIgIittKSk7dmFyIF89KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoaC5ub2RlKCkpO3JldHVybiBfPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLChmdW5jdGlvbih0KXtyZXR1cm4iJmx0OyI9PT10PyImIzYwOyI6IiZydDsiPT09dD8iJiM2MjsiOi0xIT09dC5pbmRleE9mKCI8Iil8fC0xIT09dC5pbmRleE9mKCI+Iik/IiI6ZS5odG1sKHQpLnRleHQoKX0pKTtyZXR1cm4gZS5yZW1vdmUoKSxyfShfKSxfPShfPV8ucmVwbGFjZSgvJig/IVx3Kzt8XCNbMC05XSs7fCBcI3hbMC05QS1GXSs7KS9nLCImYW1wOyIpKS5yZXBsYWNlKGMsIiciKSxpLmlzSUUoKSYmKF89KF89KF89Xy5yZXBsYWNlKC8iL2dpLCInIikpLnJlcGxhY2UoLyhcKCcjKShbXiddKikoJ1wpKS9naSwnKCIjJDIiKScpKS5yZXBsYWNlKC8oXFwnKS9naSwnIicpKSxffX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDc1LCIuLi9saWIiOjQ5OCwiQHBsb3RseS9kMyI6NTh9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsIm1vIiwhMCksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7YSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NDk4fV0sNjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikucGF0dGVybixmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9bCh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToic3R5bGUifSkscD1mKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MH0pLGQ9Zih7d2lkdGg6cCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlci5saW5lIikpLG09Zih7bGluZTpkLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikse29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0scGF0dGVybjp1fSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOm8oe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzfSksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxpbnNpZGV0ZXh0YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJlbmQiLCJtaWRkbGUiLCJzdGFydCJdLGRmbHQ6ImVuZCIsZWRpdFR5cGU6InBsb3QifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmYoe30saCx7fSksaW5zaWRldGV4dGZvbnQ6Zih7fSxoLHt9KSxvdXRzaWRldGV4dGZvbnQ6Zih7fSxoLHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6Zih7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOm0sb2Zmc2V0Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGFsaWdubWVudGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4uc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi51bnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNjgsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjozODIsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjIsIi4vY29uc3RhbnRzIjo2NDV9XSw2NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxtPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPXttc1VUQzohKCFlLmJhc2UmJjAhPT1lLmJhc2UpfTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWQubWFrZUNhbGNkYXRhKGUsIngiLGcpLHU9bS5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9aShlLG0sInkiLHUpLGg9ISFlLnlwZXJpb2RhbGlnbm1lbnQscD0ieSIpOihyPW0ubWFrZUNhbGNkYXRhKGUsInkiLGcpLHU9ZC5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9aShlLGQsIngiLHUpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQscD0ieCIpLGM9Zi52YWxzO2Zvcih2YXIgdj1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCkseT1uZXcgQXJyYXkodikseD0wO3g8djt4KyspeVt4XT17cDpjW3hdLHM6clt4XX0saCYmKHlbeF0ub3JpZ19wPXVbeF0seVt4XVtwKyJFbmQiXT1mLmVuZHNbeF0seVt4XVtwKyJTdGFydCJdPWYuc3RhcnRzW3hdKSxlLmlkcyYmKHlbeF0uaWQ9U3RyaW5nKGUuaWRzW3hdKSk7cmV0dXJuIGEoZSwibWFya2VyIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGEoZSwibWFya2VyLmxpbmUiKSYmbyh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLHMoeSxlKSxsKHksZSkseX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjQsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo2NDJ9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtURVhUUEFEOjMsZXZlbnREYXRhS2V5czpbInZhbHVlIiwibGFiZWwiXX19LHt9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKS5nZXRBeGlzR3JvdXAsYz10KCIuL3NpZXZlLmpzIik7ZnVuY3Rpb24gdSh0LGUscixvLHUpe2lmKG8ubGVuZ3RoKXt2YXIgYixfLHcsVDtzd2l0Y2goZnVuY3Rpb24odCxlKXt2YXIgcixhO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvLHM9ZVtyXSxsPXNbMF0udHJhY2UsYz0iZnVubmVsIj09PWwudHlwZT9sLl9iYXNlOmwuYmFzZSx1PSJoIj09PWwub3JpZW50YXRpb24/bC54Y2FsZW5kYXI6bC55Y2FsZW5kYXIsZj0iY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH06dC5kMmM7aWYoaShjKSl7Zm9yKGE9MDthPE1hdGgubWluKGMubGVuZ3RoLHMubGVuZ3RoKTthKyspbz1mKGNbYV0sMCx1KSxuKG8pPyhzW2FdLmI9K28sc1thXS5oYXNCPTEpOnNbYV0uYj0wO2Zvcig7YTxzLmxlbmd0aDthKyspc1thXS5iPTB9ZWxzZXtvPWYoYywwLHUpO3ZhciBoPW4obyk7Zm9yKG89aD9vOjAsYT0wO2E8cy5sZW5ndGg7YSsrKXNbYV0uYj1vLGgmJihzW2FdLmhhc0I9MSl9fX0ocixvKSx1Lm1vZGUpe2Nhc2Uib3ZlcmxheSI6ZihlLHIsbyx1KTticmVhaztjYXNlImdyb3VwIjpmb3IoYj1bXSxfPVtdLHc9MDt3PG8ubGVuZ3RoO3crKyl2b2lkIDA9PT0oVD1vW3ddKVswXS50cmFjZS5vZmZzZXQ/Xy5wdXNoKFQpOmIucHVzaChUKTtfLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1uZXcgYyhuLHtwb3NBeGlzOmUsc2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpLm5vcm19KTsoZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQuX2Z1bGxMYXlvdXQsYT1yLnBvc2l0aW9ucyxvPXIuZGlzdGluY3RQb3NpdGlvbnMscz1yLm1pbkRpZmYsYz1yLnRyYWNlcyx1PWMubGVuZ3RoLGY9YS5sZW5ndGghPT1vLmxlbmd0aCxoPXMqKDEtbi5nYXApLGc9bChpLGUuX2lkKStjWzBdWzBdLnRyYWNlLm9yaWVudGF0aW9uLHY9aS5fYWxpZ25tZW50T3B0c1tnXXx8e30seT0wO3k8dTt5Kyspe3ZhciB4LGIsXz1jW3ldLHc9X1swXS50cmFjZSxUPXZbdy5hbGlnbm1lbnRncm91cF18fHt9LGs9T2JqZWN0LmtleXMoVC5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsQT0oeD1rP2gvazpmP2gvdTpoKSooMS0obi5ncm91cGdhcHx8MCkpO2I9az8oKDIqdy5fb2Zmc2V0SW5kZXgrMS1rKSp4LUEpLzI6Zj8oKDIqeSsxLXUpKngtQSkvMjotQS8yO3ZhciBNPV9bMF0udDtNLmJhcndpZHRoPUEsTS5wb2Zmc2V0PWIsTS5iYXJncm91cHdpZHRoPWgsTS5iYXJkZWx0YT1zfXIuYmluV2lkdGg9Y1swXVswXS50LmJhcndpZHRoLzEwMCxwKHIpLGQoZSxyKSxtKGUscixmKX0pKHQsZSxvLGkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudHJhY2VzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZih2b2lkIDA9PT1pWzBdLnRyYWNlLmJhc2UpZm9yKHZhciBvPW5ldyBjKFtpXSx7cG9zQXhpczplLHNlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtpZihsLnAhPT1hKXt2YXIgdT1vLnB1dChsLnAsbC5iK2wucyk7dSYmKGwuYj11KX19fX0obyxlKSxpLm5vcm0/KHYobykseShyLG8saSkpOmcocixvKX0odCxlLHIsXyx1KSxiLmxlbmd0aCYmZihlLHIsYix1KTticmVhaztjYXNlInN0YWNrIjpjYXNlInJlbGF0aXZlIjpmb3IoYj1bXSxfPVtdLHc9MDt3PG8ubGVuZ3RoO3crKyl2b2lkIDA9PT0oVD1vW3ddKVswXS50cmFjZS5iYXNlP18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89bmV3IGMobix7cG9zQXhpczplLHNlcE5lZ1ZhbDoicmVsYXRpdmUiPT09aS5tb2RlLG92ZXJsYXBOb01lcmdlOiEoaS5ub3JtfHwic3RhY2siPT09aS5tb2RlfHwicmVsYXRpdmUiPT09aS5tb2RlKX0pO2goZSxvLGkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sbCxjLHUsZj14KHQpLGg9ZS50cmFjZXM7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKylpZihuPWhbbF0sImZ1bm5lbCI9PT0oaT1uWzBdLnRyYWNlKS50eXBlKWZvcihjPTA7YzxuLmxlbmd0aDtjKyspKHU9bltjXSkucyE9PWEmJmUucHV0KHUucCwtLjUqdS5zKTtmb3IobD0wO2w8aC5sZW5ndGg7bCsrKXtuPWhbbF0saT1uWzBdLnRyYWNlLG89ImZ1bm5lbCI9PT1pLnR5cGU7dmFyIHA9W107Zm9yKGM9MDtjPG4ubGVuZ3RoO2MrKylpZigodT1uW2NdKS5zIT09YSl7dmFyIGQ7ZD1vP3Uuczp1LnMrdS5iO3ZhciBtPWUucHV0KHUucCxkKSxnPW0rZDt1LmI9bSx1W2ZdPWcsci5ub3JtfHwocC5wdXNoKGcpLHUuaGFzQiYmcC5wdXNoKG0pKX1yLm5vcm18fChpLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxwLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0ocixvLGkpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKWZvcih2YXIgdT1uW2xdLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIHA9dVtmXTtpZihwLnMhPT1hKXAuYitwLnM9PT1vLmdldChwLnAscC5zKSYmKHAuX291dG1vc3Q9ITApfWkubm9ybSYmeShyLG8saSl9KDAsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBmPTFlNC8oYy1sKSxoPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGYqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBtPWFbaV0sZz1tW29dLW0udy8yO2lmKG4oZykpe3ZhciB2PW1bb10rbS53LzIseT1oKG0ucCk7c1t5XT9zW3ldPVtNYXRoLm1pbihnLHNbeV1bMF0pLE1hdGgubWF4KHYsc1t5XVsxXSldOnNbeV09W2csdl19bS5wMD1tLnArKGQ/cFtpXTpwKSxtLnAxPW0ucDArbS53LG0uczA9bS5iLG0uczE9bS5zMCttLnN9fX0obyxlKX19ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPW5ldyBjKFthXSx7cG9zQXhpczp0LHNlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohbi5ub3JtfSk7aCh0LG8sbiksbi5ub3JtPyh2KG8pLHkoZSxvLG4pKTpnKGUsbyl9fWZ1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj1lLm1pbkRpZmYsaT1lLnRyYWNlcyxhPW4qKDEtci5nYXApLG89YSooMS0oci5ncm91cGdhcHx8MCkpLHM9LW8vMixsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF1bMF0udDtjLmJhcndpZHRoPW8sYy5wb2Zmc2V0PXMsYy5iYXJncm91cHdpZHRoPWEsYy5iYXJkZWx0YT1ufWUuYmluV2lkdGg9aVswXVswXS50LmJhcndpZHRoLzEwMCxwKGUpLGQodCxlKSxtKHQsZSl9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsZj1jLl9vZmZzZXR8fGMub2Zmc2V0LGg9dS5wb2Zmc2V0O2lmKGkoZikpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWgpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChoKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWYmJih1LnBvZmZzZXQ9Zik7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBtPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKyluKG1bcl0pfHwobVtyXT1kKTtmb3Iocj1tLmxlbmd0aDtyPHMubGVuZ3RoO3IrKyltLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1tLHZvaWQgMD09PWYpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCsoZC1tW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWYmJih1LnBvZmZzZXQ9aCsoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS50cmFjZXMsbj14KHQpLGk9MDtpPHIubGVuZ3RoO2krKylmb3IodmFyIGE9cltpXSxvPWFbMF0udCxzPW8ucG9mZnNldCxsPUFycmF5LmlzQXJyYXkocyksYz1vLmJhcndpZHRoLHU9QXJyYXkuaXNBcnJheShjKSxmPTA7ZjxhLmxlbmd0aDtmKyspe3ZhciBoPWFbZl0scD1oLnc9dT9jW2ZdOmM7aFtuXT1oLnArKGw/c1tmXTpzKStwLzJ9fWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPWUudHJhY2VzLGk9ZS5taW5EaWZmLzI7cy5taW5EdGljayh0LGUubWluRGlmZixlLmRpc3RpbmN0UG9zaXRpb25zWzBdLHIpO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbyxsLGMsdSxmPW5bYV0saD1mWzBdLHA9aC50cmFjZSxkPVtdO2Zvcih1PTA7dTxmLmxlbmd0aDt1KyspbD0obz1mW3VdKS5wLWksYz1vLnAraSxkLnB1c2gobCxjKTtpZihwLndpZHRofHxwLm9mZnNldCl7dmFyIG09aC50LGc9bS5wb2Zmc2V0LHY9bS5iYXJ3aWR0aCx5PUFycmF5LmlzQXJyYXkoZykseD1BcnJheS5pc0FycmF5KHYpO2Zvcih1PTA7dTxmLmxlbmd0aDt1Kyspe289Zlt1XTt2YXIgYj15P2dbdV06ZyxfPXg/dlt1XTp2O2M9KGw9by5wK2IpK18sZC5wdXNoKGwsYyl9fXAuX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGQse3BhZGRlZDohMX0pfX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspe2Zvcih2YXIgYT1yW2ldLG89YVswXS50cmFjZSxsPVtdLGM9ITEsdT0wO3U8YS5sZW5ndGg7dSsrKXt2YXIgZj1hW3VdLGg9Zi5iLHA9aCtmLnM7ZltuXT1wLGwucHVzaChwKSxmLmhhc0ImJmwucHVzaChoKSxmLmhhc0ImJmYuYnx8KGM9ITApfW8uX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGwse3RvemVybzpjLHBhZGRlZDohMH0pfX1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT10LnRyYWNlcyxyPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO28ucyE9PWEmJnQucHV0KG8ucCxvLmIrby5zKX19ZnVuY3Rpb24geSh0LGUscil7dmFyIGk9ZS50cmFjZXMsbz14KHQpLGw9ImZyYWN0aW9uIj09PXIubm9ybT8xOjEwMCxjPWwvMWU5LHU9dC5sMmModC5jMmwoMCkpLGY9InN0YWNrIj09PXIubW9kZT9sOnU7ZnVuY3Rpb24gaChlKXtyZXR1cm4gbih0LmMybChlKSkmJihlPHUtY3x8ZT5mK2N8fCFuKHUpKX1mb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7Zm9yKHZhciBkPWlbcF0sbT1kWzBdLnRyYWNlLGc9W10sdj0hMSx5PSExLGI9MDtiPGQubGVuZ3RoO2IrKyl7dmFyIF89ZFtiXTtpZihfLnMhPT1hKXt2YXIgdz1NYXRoLmFicyhsL2UuZ2V0KF8ucCxfLnMpKTtfLmIqPXcsXy5zKj13O3ZhciBUPV8uYixrPVQrXy5zO19bb109ayxnLnB1c2goaykseT15fHxoKGspLF8uaGFzQiYmKGcucHVzaChUKSx5PXl8fGgoVCkpLF8uaGFzQiYmXy5ifHwodj0hMCl9fW0uX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGcse3RvemVybzp2LHBhZGRlZDp5fSl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuX2lkLmNoYXJBdCgwKX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUueGF4aXMsbj1lLnlheGlzLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPVtdLGM9W10sZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgaD1hW2ZdO2lmKCEwPT09aC52aXNpYmxlJiZvLnRyYWNlSXMoaCwiYmFyIikmJmgueGF4aXM9PT1yLl9pZCYmaC55YXhpcz09PW4uX2lkJiYoImgiPT09aC5vcmllbnRhdGlvbj9sLnB1c2goc1tmXSk6Yy5wdXNoKHNbZl0pLGguX2NvbXB1dGVQaCkpZm9yKHZhciBwPXQuY2FsY2RhdGFbZl0sZD0wO2Q8cC5sZW5ndGg7ZCsrKSJmdW5jdGlvbiI9PXR5cGVvZiBwW2RdLnBoMCYmKHBbZF0ucGgwPXBbZF0ucGgwKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBwW2RdLnBoMSYmKHBbZF0ucGgxPXBbZF0ucGgxKCkpfXZhciBtPXt4Q2F0OiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZSx5Q2F0OiJjYXRlZ29yeSI9PT1uLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PW4udHlwZSxtb2RlOmkuYmFybW9kZSxub3JtOmkuYmFybm9ybSxnYXA6aS5iYXJnYXAsZ3JvdXBnYXA6aS5iYXJncm91cGdhcH07dSh0LHIsbixjLG0pLHUodCxuLHIsbCxtKX0sc2V0R3JvdXBQb3NpdGlvbnM6dX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo1NTcsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vc2lldmUuanMiOjY1NiwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLGw9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLHU9dCgiLi9hdHRyaWJ1dGVzIiksZj1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djoieCIsaDoieSJ9W2ldKyJheGlzIl0sbz1jKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGw9bigiYWxpZ25tZW50Z3JvdXAiKSx1PXNbb107dXx8KHU9c1tvXT17fSk7dmFyIGY9dVtsXTtmP2YudHJhY2VzLnB1c2goZSk6Zj11W2xdPXt0cmFjZXM6W2VdLGFsaWdubWVudEluZGV4Ok9iamVjdC5rZXlzKHUpLmxlbmd0aCxvZmZzZXRHcm91cHM6e319O3ZhciBoPW4oIm9mZnNldGdyb3VwIikscD1mLm9mZnNldEdyb3VwcyxkPXBbaF07aCYmKGR8fChkPXBbaF09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIHAodCxlLHIsaSxhLG8pe3ZhciBzPSEoITE9PT0obz1vfHx7fSkubW9kdWxlSGFzU2VsZWN0ZWQpLGw9ISghMT09PW8ubW9kdWxlSGFzVW5zZWxlY3RlZCksYz0hKCExPT09by5tb2R1bGVIYXNDb25zdHJhaW4pLHU9ISghMT09PW8ubW9kdWxlSGFzQ2xpcG9uYXhpcyksaD0hKCExPT09by5tb2R1bGVIYXNUZXh0YW5nbGUpLHA9ISghMT09PW8ubW9kdWxlSGFzSW5zaWRlYW5jaG9yKSxkPSEhby5oYXNQYXRoYmFyLG09QXJyYXkuaXNBcnJheShhKXx8ImF1dG8iPT09YSxnPW18fCJpbnNpZGUiPT09YSx2PW18fCJvdXRzaWRlIj09PWE7aWYoZ3x8dil7dmFyIHk9ZihpLCJ0ZXh0Zm9udCIsci5mb250KSx4PW4uZXh0ZW5kRmxhdCh7fSx5KSxiPSEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcik7aWYoYiYmZGVsZXRlIHguY29sb3IsZihpLCJpbnNpZGV0ZXh0Zm9udCIseCksZCl7dmFyIF89bi5leHRlbmRGbGF0KHt9LHkpO2ImJmRlbGV0ZSBfLmNvbG9yLGYoaSwicGF0aGJhci50ZXh0Zm9udCIsXyl9diYmZihpLCJvdXRzaWRldGV4dGZvbnQiLHkpLHMmJmkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksbCYmaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGMmJmkoImNvbnN0cmFpbnRleHQiKSx1JiZpKCJjbGlwb25heGlzIiksaCYmaSgidGV4dGFuZ2xlIiksaSgidGV4dHRlbXBsYXRlIil9ZyYmcCYmaSgiaW5zaWRldGV4dGFuY2hvciIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsdSxyLGkpfWlmKG8odCxlLGMsZikpe3ModCxlLGMsZiksZigieGhvdmVyZm9ybWF0IiksZigieWhvdmVyZm9ybWF0IiksZigib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxmKCJiYXNlIiksZigib2Zmc2V0IiksZigid2lkdGgiKSxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPWYoInRleHRwb3NpdGlvbiIpO3AodCxlLGMsZixoLHttb2R1bGVIYXNTZWxlY3RlZDohMCxtb2R1bGVIYXNVbnNlbGVjdGVkOiEwLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSxsKHQsZSxmLHIsYyk7dmFyIGQ9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixtPWEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO20odCxlLGR8fGkuZGVmYXVsdExpbmUse2F4aXM6InkifSksbSh0LGUsZHx8aS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscix1LHQpfWlmKCJncm91cCI9PT1lLmJhcm1vZGUpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspImJhciI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsaCgwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aCxoYW5kbGVUZXh0OnB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NTU3LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjo5NDksIi4vYXR0cmlidXRlcyI6NjQzLCIuL3N0eWxlX2RlZmF1bHRzIjo2NTh9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCJoIj09PXIub3JpZW50YXRpb24/KHQubGFiZWw9dC55LHQudmFsdWU9dC54KToodC5sYWJlbD10LngsdC52YWx1ZT10LnkpLHR9fSx7fV0sNjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuY29lcmNlU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZigoIm51bWJlciI9PXR5cGVvZiBlfHwhMD09PWUpJiYhdC5zdHJpY3QpcmV0dXJuIFN0cmluZyhlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VOdW1iZXI9ZnVuY3Rpb24odCxlLHIpe2lmKG4oZSkpe2U9K2U7dmFyIGk9dC5taW4sYT10Lm1heDtpZighKHZvaWQgMCE9PWkmJmU8aXx8dm9pZCAwIT09YSYmZT5hKSlyZXR1cm4gZX1yZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VDb2xvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGkoZSkuaXNWYWxpZCgpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VFbnVtZXJhdGVkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5jb2VyY2VOdW1iZXImJihlPStlKSwtMSE9PXQudmFsdWVzLmluZGV4T2YoZSk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmdldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aCYmKHI9dFtlXSk6cj10LHJ9LHIuZ2V0TGluZVdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA8ZS5tbHc/ZS5tbHc6YSh0Lm1hcmtlci5saW5lLndpZHRoKT8wOnQubWFya2VyLmxpbmUud2lkdGh9fSx7Ii4uLy4uL2xpYiI6NDk4LCJmYXN0LWlzbnVtZXJpYyI6MTg1LHRpbnljb2xvcjI6MzA3fV0sNjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxzPXQoIi4vaGVscGVycyIpLmdldExpbmVXaWR0aCxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIHUodCxlLHIsaSxhKXt2YXIgcyx1LGYsaCxwLGQsbSxnPXQuY2Qsdj1nWzBdLnRyYWNlLHk9Z1swXS50LHg9ImNsb3Nlc3QiPT09aSxiPSJ3YXRlcmZhbGwiPT09di50eXBlLF89dC5tYXhIb3ZlckRpc3RhbmNlLHc9dC5tYXhTcGlrZURpc3RhbmNlOyJoIj09PXYub3JpZW50YXRpb24/KHM9cix1PWUsZj0ieSIsaD0ieCIscD16LGQ9SSk6KHM9ZSx1PXIsZj0ieCIsaD0ieSIsZD16LHA9SSk7dmFyIFQ9dltmKyJwZXJpb2QiXSxrPXh8fFQ7ZnVuY3Rpb24gQSh0KXtyZXR1cm4gUyh0LC0xKX1mdW5jdGlvbiBNKHQpe3JldHVybiBTKHQsMSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudztyZXR1cm4gdFtmXStlKnIvMn1mdW5jdGlvbiBFKHQpe3JldHVybiB0W2YrIkVuZCJdLXRbZisiU3RhcnQiXX12YXIgTD14P0E6VD9mdW5jdGlvbih0KXtyZXR1cm4gdC5wLUUodCkvMn06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKEEodCksdC5wLXkuYmFyZGVsdGEvMil9LEM9eD9NOlQ/ZnVuY3Rpb24odCl7cmV0dXJuIHQucCtFKHQpLzJ9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmRlbHRhLzIpfTtmdW5jdGlvbiBQKHQsZSxyKXtyZXR1cm4gYS5maW5pdGVSYW5nZSYmKHI9MCksbi5pbmJveCh0LXMsZS1zLHIrTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL20pLTEpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIFAoTCh0KSxDKHQpLF8pfWZ1bmN0aW9uIE8odCl7dmFyIGU9dFtoXTtpZihiKXt2YXIgcj1NYXRoLmFicyh0LnJhd1MpfHwwO3U+MD9lKz1yOnU8MCYmKGUtPXIpfXJldHVybiBlfWZ1bmN0aW9uIHoodCl7dmFyIGU9dSxyPXQuYixpPU8odCk7cmV0dXJuIG4uaW5ib3goci1lLGktZSxfKyhpLWUpLyhpLXIpLTEpfXZhciBEPXRbZisiYSJdLFI9dFtoKyJhIl07bT1NYXRoLmFicyhELnIyYyhELnJhbmdlWzFdKS1ELnIyYyhELnJhbmdlWzBdKSk7dmFyIEY9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGkscCxkLChmdW5jdGlvbih0KXtyZXR1cm4ocCh0KStkKHQpKS8yfSkpO2lmKG4uZ2V0Q2xvc2VzdChnLEYsdCksITEhPT10LmluZGV4JiZnW3QuaW5kZXhdLnAhPT1jKXtrfHwoTD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oQSh0KSx0LnAteS5iYXJncm91cHdpZHRoLzIpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgQj1nW3QuaW5kZXhdLE49di5iYXNlP0IuYitCLnM6Qi5zO3RbaCsiMCJdPXRbaCsiMSJdPVIuYzJwKEJbaF0sITApLHRbaCsiTGFiZWxWYWwiXT1OO3ZhciBqPXkuZXh0ZW50c1t5LmV4dGVudHMucm91bmQoQi5wKV07dFtmKyIwIl09RC5jMnAoeD9MKEIpOmpbMF0sITApLHRbZisiMSJdPUQuYzJwKHg/QyhCKTpqWzFdLCEwKTt2YXIgVT12b2lkIDAhPT1CLm9yaWdfcDtyZXR1cm4gdFtmKyJMYWJlbFZhbCJdPVU/Qi5vcmlnX3A6Qi5wLHQubGFiZWxMYWJlbD1sKEQsdFtmKyJMYWJlbFZhbCJdLHZbZisiaG92ZXJmb3JtYXQiXSksdC52YWx1ZUxhYmVsPWwoUix0W2grIkxhYmVsVmFsIl0sdltoKyJob3ZlcmZvcm1hdCJdKSx0LmJhc2VMYWJlbD1sKFIsQi5iLHZbaCsiaG92ZXJmb3JtYXQiXSksdC5zcGlrZURpc3RhbmNlPShmdW5jdGlvbih0KXt2YXIgZT11LHI9dC5iLGk9Tyh0KTtyZXR1cm4gbi5pbmJveChyLWUsaS1lLHcrKGktZSkvKGktciktMSl9KEIpK2Z1bmN0aW9uKHQpe3JldHVybiBQKEEodCksTSh0KSx3KX0oQikpLzIsdFtmKyJTcGlrZSJdPUQuYzJwKEIucCwhMCksbyhCLHYsdCksdC5ob3ZlcnRlbXBsYXRlPXYuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9cyh0LGUpO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXUodCxlLHIsbixhKTtpZihvKXt2YXIgcz1vLmNkLGw9c1swXS50cmFjZSxjPXNbby5pbmRleF07cmV0dXJuIG8uY29sb3I9ZihsLGMpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShjLGwsbyksW29dfX0saG92ZXJPbkJhcnM6dSxnZXRUcmFjZUNvbG9yOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6NDAxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2hlbHBlcnMiOjY0OX1dLDY1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGFycmF5c1RvQ2FsY2RhdGE6dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLGFuaW1hdGFibGU6ITAsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDAsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo2NDIsIi4vYXR0cmlidXRlcyI6NjQzLCIuL2NhbGMiOjY0NCwiLi9jcm9zc190cmFjZV9jYWxjIjo2NDYsIi4vZGVmYXVsdHMiOjY0NywiLi9ldmVudF9kYXRhIjo2NDgsIi4vaG92ZXIiOjY1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjUyLCIuL2xheW91dF9kZWZhdWx0cyI6NjUzLCIuL3Bsb3QiOjY1NCwiLi9zZWxlY3QiOjY1NSwiLi9zdHlsZSI6NjU3fV0sNjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiLCJyZWxhdGl2ZSJdLGRmbHQ6Imdyb3VwIixlZGl0VHlwZToiY2FsYyJ9LGJhcm5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxiYXJncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw2NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIHMocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLG8scixuKX1mb3IodmFyIGw9ITEsYz0hMSx1PSExLGY9e30saD1zKCJiYXJtb2RlIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdO2lmKG4udHJhY2VJcyhkLCJiYXIiKSYmZC52aXNpYmxlKXtpZihsPSEwLCJncm91cCI9PT1oKXt2YXIgbT1kLnhheGlzK2QueWF4aXM7ZlttXSYmKHU9ITApLGZbbV09ITB9aWYoZC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWQudHlwZSkiY2F0ZWdvcnkiIT09aS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LGRbInYiPT09ZC5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKS50eXBlJiYoYz0hMCl9fWw/KCJvdmVybGF5IiE9PWgmJnMoImJhcm5vcm0iKSxzKCJiYXJnYXAiLGMmJiF1PzA6LjIpLHMoImJhcmdyb3VwZ2FwIikpOmRlbGV0ZSBlLmJhcm1vZGV9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTJ9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tUZXh0LGY9dCgiLi91bmlmb3JtX3RleHQiKSxoPWYucmVjb3JkTWluVGV4dFNpemUscD1mLmNsZWFyTWluVGV4dFNpemUsZD10KCIuL3N0eWxlIiksbT10KCIuL2hlbHBlcnMiKSxnPXQoIi4vY29uc3RhbnRzIiksdj10KCIuL2F0dHJpYnV0ZXMiKSx5PXYudGV4dCx4PXYudGV4dHBvc2l0aW9uLGI9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLF89Zy5URVhUUEFEO2Z1bmN0aW9uIHcodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gVCh0KXtpZih0LmlkcylyZXR1cm4gd31mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHQ8ZT8xOi0xfWZ1bmN0aW9uIEEodCxlLHIsbil7dmFyIGk7cmV0dXJuIWUudW5pZm9ybXRleHQubW9kZSYmTShyKT8obiYmKGk9bigpKSx0LnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2kmJmkoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe2kmJmkoKX0pKSk6dH1mdW5jdGlvbiBNKHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gUyh0KXtyZXR1cm4iYXV0byI9PT10PzA6dH1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9TWF0aC5QSS8xODAqZSxuPU1hdGguYWJzKE1hdGguc2luKHIpKSxpPU1hdGguYWJzKE1hdGguY29zKHIpKTtyZXR1cm57eDp0LndpZHRoKmkrdC5oZWlnaHQqbix5OnQud2lkdGgqbit0LmhlaWdodCppfX1mdW5jdGlvbiBMKHQsZSxyLG4saSxhKXt2YXIgbz0hIWEuaXNIb3Jpem9udGFsLHM9ISFhLmNvbnN0cmFpbmVkLGw9YS5hbmdsZXx8MCxjPWEuYW5jaG9yfHwiZW5kIix1PSJlbmQiPT09YyxmPSJzdGFydCI9PT1jLGg9KChhLmxlZnRUb1JpZ2h0fHwwKSsxKS8yLHA9MS1oLGQ9aS53aWR0aCxtPWkuaGVpZ2h0LGc9TWF0aC5hYnMoZS10KSx2PU1hdGguYWJzKG4tcikseT1nPjIqXyYmdj4yKl8/XzowO2ctPTIqeSx2LT0yKnk7dmFyIHg9UyhsKTsiYXV0byIhPT1sfHxkPD1nJiZtPD12fHwhKGQ+Z3x8bT52KXx8KGQ+dnx8bT5nKSYmZDxtPT1nPHZ8fCh4Kz05MCk7dmFyIGI9RShpLHgpLHc9MTtzJiYodz1NYXRoLm1pbigxLGcvYi54LHYvYi55KSk7dmFyIFQ9aS5sZWZ0KnAraS5yaWdodCpoLEE9KGkudG9wK2kuYm90dG9tKS8yLE09KHQrXykqcCsoZS1fKSpoLEw9KHIrbikvMixDPTAsUD0wO2lmKGZ8fHUpe3ZhciBJPShvP2IueDpiLnkpLzIsTz1vP2sodCxlKTprKHIsbik7bz9mPyhNPXQrTyp5LEM9LU8qSSk6KE09ZS1PKnksQz1PKkkpOmY/KEw9citPKnksUD0tTypJKTooTD1uLU8qeSxQPU8qSSl9cmV0dXJue3RleHRYOlQsdGV4dFk6QSx0YXJnZXRYOk0sdGFyZ2V0WTpMLGFuY2hvclg6QyxhbmNob3JZOlAsc2NhbGU6dyxyb3RhdGU6eH19ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSxyLGYsZyx2KXt2YXIgdz1lLnhheGlzLEM9ZS55YXhpcyxQPXQuX2Z1bGxMYXlvdXQ7Z3x8KGc9e21vZGU6UC5iYXJtb2RlLG5vcm06UC5iYXJtb2RlLGdhcDpQLmJhcmdhcCxncm91cGdhcDpQLmJhcmdyb3VwZ2FwfSxwKCJiYXIiLFApKTt2YXIgST1hLm1ha2VUcmFjZUdyb3VwcyhmLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYz1uLnNlbGVjdCh0aGlzKSxmPXJbMF0udHJhY2UscD0id2F0ZXJmYWxsIj09PWYudHlwZSxJPSJmdW5uZWwiPT09Zi50eXBlLE89ImJhciI9PT1mLnR5cGV8fEksej0wO3AmJmYuY29ubmVjdG9yLnZpc2libGUmJiJiZXR3ZWVuIj09PWYuY29ubmVjdG9yLm1vZGUmJih6PWYuY29ubmVjdG9yLmxpbmUud2lkdGgvMik7dmFyIEQ9ImgiPT09Zi5vcmllbnRhdGlvbixSPU0oZyksRj1hLmVuc3VyZVNpbmdsZShjLCJnIiwicG9pbnRzIiksQj1UKGYpLE49Ri5zZWxlY3RBbGwoImcucG9pbnQiKS5kYXRhKGEuaWRlbnRpdHksQik7Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50IiwhMCksTi5leGl0KCkucmVtb3ZlKCksTi5lYWNoKChmdW5jdGlvbihjLHApe3ZhciBULE0sST1uLnNlbGVjdCh0aGlzKSxGPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10sbz1uP2U6cixzPW4/cjplO3JldHVybiBpWzBdPW8uYzJwKHQuczAsITApLGFbMF09cy5jMnAodC5wMCwhMCksaVsxXT1vLmMycCh0LnMxLCEwKSxhWzFdPXMuYzJwKHQucDEsITApLG4/W2ksYV06W2EsaV19KGMsdyxDLEQpLEI9RlswXVswXSxOPUZbMF1bMV0saj1GWzFdWzBdLFU9RlsxXVsxXSxWPTA9PShEP04tQjpVLWopO2lmKFYmJk8mJm0uZ2V0TGluZVdpZHRoKGYsYykmJihWPSExKSxWfHwoVj0hKGkoQikmJmkoTikmJmkoaikmJmkoVSkpKSxjLmlzQmxhbms9VixWJiYoRD9OPUI6VT1qKSx6JiYhViYmKEQ/KEItPWsoQixOKSp6LE4rPWsoQixOKSp6KTooai09ayhqLFUpKnosVSs9ayhqLFUpKnopKSwid2F0ZXJmYWxsIj09PWYudHlwZSl7aWYoIVYpe3ZhciBIPWZbYy5kaXJdLm1hcmtlcjtUPUgubGluZS53aWR0aCxNPUguY29sb3J9fWVsc2UgVD1tLmdldExpbmVXaWR0aChmLGMpLE09Yy5tY3x8Zi5tYXJrZXIuY29sb3I7ZnVuY3Rpb24gcSh0KXt2YXIgZT1uLnJvdW5kKFQvMiUxLDIpO3JldHVybiAwPT09Zy5nYXAmJjA9PT1nLmdyb3VwZ2FwP24ucm91bmQoTWF0aC5yb3VuZCh0KS1lLDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEc9cy5vcGFjaXR5KE0pPDF8fFQ+LjAxP3E6ZnVuY3Rpb24odCxlLHIpe3JldHVybiByJiZ0PT09ZT90Ok1hdGguYWJzKHQtZSk+PTI/cSh0KTp0PmU/TWF0aC5jZWlsKHQpOk1hdGguZmxvb3IodCl9O0I9RyhCLE4sRCksTj1HKE4sQixEKSxqPUcoaixVLCFEKSxVPUcoVSxqLCFEKX12YXIgWT1BKGEuZW5zdXJlU2luZ2xlKEksInBhdGgiKSxQLGcsdik7aWYoWS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLGlzTmFOKChOLUIpKihVLWopKXx8ViYmdC5fY29udGV4dC5zdGF0aWNQbG90PyJNMCwwWiI6Ik0iK0IrIiwiK2orIlYiK1UrIkgiK04rIlYiK2orIloiKS5jYWxsKGwuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpLCFQLnVuaWZvcm10ZXh0Lm1vZGUmJlIpe3ZhciBXPWwubWFrZVBvaW50U3R5bGVGbnMoZik7bC5zaW5nbGVQb2ludFN0eWxlKGMsWSxmLFcsdCl9IWZ1bmN0aW9uKHQsZSxyLG4saSxzLGMsZixwLGcsdil7dmFyIHcsVD1lLnhheGlzLE09ZS55YXhpcyxDPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gUChlLHIsbil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKGUsInRleHQiKS50ZXh0KHIpLmF0dHIoe2NsYXNzOiJiYXJ0ZXh0IGJhcnRleHQtIit3LCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGwuZm9udCxuKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpfXZhciBJPW5bMF0udHJhY2UsTz0iaCI9PT1JLm9yaWVudGF0aW9uLHo9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPWVbMF0udHJhY2U7bz1zLnRleHR0ZW1wbGF0ZT9mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPWVbMF0udHJhY2Uscz1hLmNhc3RPcHRpb24obyxyLCJ0ZXh0dGVtcGxhdGUiKTtpZighcylyZXR1cm4iIjt2YXIgbCxjLGYsaCxwPSJoaXN0b2dyYW0iPT09by50eXBlLGQ9IndhdGVyZmFsbCI9PT1vLnR5cGUsbT0iZnVubmVsIj09PW8udHlwZSxnPSJoIj09PW8ub3JpZW50YXRpb247Zz8obD0ieSIsYz1pLGY9IngiLGg9bik6KGw9IngiLGM9bixmPSJ5IixoPWkpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHUoaCxoLmMybCh0KSwhMCkudGV4dH12YXIgeT1lW3JdLHg9e307eC5sYWJlbD15LnAseC5sYWJlbExhYmVsPXhbbCsiTGFiZWwiXT0oXz15LnAsdShjLGMuYzJsKF8pLCEwKS50ZXh0KTt2YXIgXzt2YXIgdz1hLmNhc3RPcHRpb24obyx5LmksInRleHQiKTsoMD09PXd8fHcpJiYoeC50ZXh0PXcpO3gudmFsdWU9eS5zLHgudmFsdWVMYWJlbD14W2YrIkxhYmVsIl09dih5LnMpO3ZhciBUPXt9O2IoVCxvLHkuaSksKHB8fHZvaWQgMD09PVQueCkmJihULng9Zz94LnZhbHVlOngubGFiZWwpOyhwfHx2b2lkIDA9PT1ULnkpJiYoVC55PWc/eC5sYWJlbDp4LnZhbHVlKTsocHx8dm9pZCAwPT09VC54TGFiZWwpJiYoVC54TGFiZWw9Zz94LnZhbHVlTGFiZWw6eC5sYWJlbExhYmVsKTsocHx8dm9pZCAwPT09VC55TGFiZWwpJiYoVC55TGFiZWw9Zz94LmxhYmVsTGFiZWw6eC52YWx1ZUxhYmVsKTtkJiYoeC5kZWx0YT0reS5yYXdTfHx5LnMseC5kZWx0YUxhYmVsPXYoeC5kZWx0YSkseC5maW5hbD15LnYseC5maW5hbExhYmVsPXYoeC5maW5hbCkseC5pbml0aWFsPXguZmluYWwteC5kZWx0YSx4LmluaXRpYWxMYWJlbD12KHguaW5pdGlhbCkpO20mJih4LnZhbHVlPXkucyx4LnZhbHVlTGFiZWw9dih4LnZhbHVlKSx4LnBlcmNlbnRJbml0aWFsPXkuYmVnUix4LnBlcmNlbnRJbml0aWFsTGFiZWw9YS5mb3JtYXRQZXJjZW50KHkuYmVnUikseC5wZXJjZW50UHJldmlvdXM9eS5kaWZSLHgucGVyY2VudFByZXZpb3VzTGFiZWw9YS5mb3JtYXRQZXJjZW50KHkuZGlmUikseC5wZXJjZW50VG90YWw9eS5zdW1SLHgucGVyY2VuVG90YWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQoeS5zdW1SKSk7dmFyIGs9YS5jYXN0T3B0aW9uKG8seS5pLCJjdXN0b21kYXRhIik7ayYmKHguY3VzdG9tZGF0YT1rKTtyZXR1cm4gYS50ZXh0dGVtcGxhdGVTdHJpbmcocyx4LHQuX2QzbG9jYWxlLFQseCxvLl9tZXRhfHx7fSl9KHQsZSxyLG4saSk6cy50ZXh0aW5mbz9mdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLnRyYWNlLG89ImgiPT09aS5vcmllbnRhdGlvbixzPSJ3YXRlcmZhbGwiPT09aS50eXBlLGw9ImZ1bm5lbCI9PT1pLnR5cGU7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdShvP3I6biwrdCwhMCkudGV4dH12YXIgZixoPWkudGV4dGluZm8scD10W2VdLGQ9aC5zcGxpdCgiKyIpLG09W10sZz1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWQuaW5kZXhPZih0KX07ZygibGFiZWwiKSYmbS5wdXNoKCh2PXRbZV0ucCx1KG8/bjpyLHYsITApLnRleHQpKTt2YXIgdjtnKCJ0ZXh0IikmJigwPT09KGY9YS5jYXN0T3B0aW9uKGkscC5pLCJ0ZXh0IikpfHxmKSYmbS5wdXNoKGYpO2lmKHMpe3ZhciB5PStwLnJhd1N8fHAucyx4PXAudixiPXgteTtnKCJpbml0aWFsIikmJm0ucHVzaChjKGIpKSxnKCJkZWx0YSIpJiZtLnB1c2goYyh5KSksZygiZmluYWwiKSYmbS5wdXNoKGMoeCkpfWlmKGwpe2coInZhbHVlIikmJm0ucHVzaChjKHAucykpO3ZhciBfPTA7ZygicGVyY2VudCBpbml0aWFsIikmJl8rKyxnKCJwZXJjZW50IHByZXZpb3VzIikmJl8rKyxnKCJwZXJjZW50IHRvdGFsIikmJl8rKzt2YXIgdz1fPjE7ZygicGVyY2VudCBpbml0aWFsIikmJihmPWEuZm9ybWF0UGVyY2VudChwLmJlZ1IpLHcmJihmKz0iIG9mIGluaXRpYWwiKSxtLnB1c2goZikpLGcoInBlcmNlbnQgcHJldmlvdXMiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuZGlmUiksdyYmKGYrPSIgb2YgcHJldmlvdXMiKSxtLnB1c2goZikpLGcoInBlcmNlbnQgdG90YWwiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuc3VtUiksdyYmKGYrPSIgb2YgdG90YWwiKSxtLnB1c2goZikpfXJldHVybiBtLmpvaW4oIjxicj4iKX0oZSxyLG4saSk6bS5nZXRWYWx1ZShzLnRleHQscik7cmV0dXJuIG0uY29lcmNlU3RyaW5nKHksbyl9KEMsbixpLFQsTSk7dz1mdW5jdGlvbih0LGUpe3ZhciByPW0uZ2V0VmFsdWUodC50ZXh0cG9zaXRpb24sZSk7cmV0dXJuIG0uY29lcmNlRW51bWVyYXRlZCh4LHIpfShJLGkpO3ZhciBEPSJzdGFjayI9PT1nLm1vZGV8fCJyZWxhdGl2ZSI9PT1nLm1vZGUsUj1uW2ldLEY9IUR8fFIuX291dG1vc3Q7aWYoIXp8fCJub25lIj09PXd8fChSLmlzQmxhbmt8fHM9PT1jfHxmPT09cCkmJigiYXV0byI9PT13fHwiaW5zaWRlIj09PXcpKXJldHVybiB2b2lkIHIuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCk7dmFyIEI9Qy5mb250LE49ZC5nZXRCYXJDb2xvcihuW2ldLEkpLGo9ZC5nZXRJbnNpZGVUZXh0Rm9udChJLGksQixOKSxVPWQuZ2V0T3V0c2lkZVRleHRGb250KEksaSxCKSxWPXIuZGF0dW0oKTtPPyJsb2ciPT09VC50eXBlJiZWLnMwPD0wJiYocz1ULnJhbmdlWzBdPFQucmFuZ2VbMV0/MDpULl9sZW5ndGgpOiJsb2ciPT09TS50eXBlJiZWLnMwPD0wJiYoZj1NLnJhbmdlWzBdPE0ucmFuZ2VbMV0/TS5fbGVuZ3RoOjApO3ZhciBILHEsRyxZLFcsWD1NYXRoLmFicyhjLXMpLTIqXyxaPU1hdGguYWJzKHAtZiktMipfOyJvdXRzaWRlIj09PXcmJihGfHxSLmhhc0J8fCh3PSJpbnNpZGUiKSk7aWYoImF1dG8iPT09dylpZihGKXt3PSJpbnNpZGUiLFc9YS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxqKSxIPVAocix6LFcpLHE9bC5iQm94KEgubm9kZSgpKSxHPXEud2lkdGgsWT1xLmhlaWdodDt2YXIgSj1HPD1YJiZZPD1aLEs9Rzw9WiYmWTw9WCxRPU8/WD49RyooWi9ZKTpaPj1ZKihYL0cpO0c+MCYmWT4wJiYoSnx8S3x8USk/dz0iaW5zaWRlIjoodz0ib3V0c2lkZSIsSC5yZW1vdmUoKSxIPW51bGwpfWVsc2Ugdz0iaW5zaWRlIjtpZighSCl7Vz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PXc/VTpqKTt2YXIgJD0oSD1QKHIseixXKSkuYXR0cigidHJhbnNmb3JtIik7aWYoSC5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxxPWwuYkJveChILm5vZGUoKSksRz1xLndpZHRoLFk9cS5oZWlnaHQsSC5hdHRyKCJ0cmFuc2Zvcm0iLCQpLEc8PTB8fFk8PTApcmV0dXJuIHZvaWQgSC5yZW1vdmUoKX12YXIgdHQsZXQscnQ9SS50ZXh0YW5nbGU7Im91dHNpZGUiPT09dz8oZXQ9ImJvdGgiPT09SS5jb25zdHJhaW50ZXh0fHwib3V0c2lkZSI9PT1JLmNvbnN0cmFpbnRleHQsdHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHM9ISFhLmlzSG9yaXpvbnRhbCxsPSEhYS5jb25zdHJhaW5lZCxjPWEuYW5nbGV8fDAsdT1pLndpZHRoLGY9aS5oZWlnaHQsaD1NYXRoLmFicyhlLXQpLHA9TWF0aC5hYnMobi1yKTtvPXM/cD4yKl8/XzowOmg+MipfP186MDt2YXIgZD0xO2wmJihkPXM/TWF0aC5taW4oMSxwL2YpOk1hdGgubWluKDEsaC91KSk7dmFyIG09UyhjKSxnPUUoaSxtKSx2PShzP2cueDpnLnkpLzIseT0oaS5sZWZ0K2kucmlnaHQpLzIseD0oaS50b3AraS5ib3R0b20pLzIsYj0odCtlKS8yLHc9KHIrbikvMixUPTAsQT0wLE09cz9rKGUsdCk6ayhyLG4pO3M/KGI9ZS1NKm8sVD1NKnYpOih3PW4rTSpvLEE9LU0qdik7cmV0dXJue3RleHRYOnksdGV4dFk6eCx0YXJnZXRYOmIsdGFyZ2V0WTp3LGFuY2hvclg6VCxhbmNob3JZOkEsc2NhbGU6ZCxyb3RhdGU6bX19KHMsYyxmLHAscSx7aXNIb3Jpem9udGFsOk8sY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnR9KSk6KGV0PSJib3RoIj09PUkuY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1JLmNvbnN0cmFpbnRleHQsdHQ9TChzLGMsZixwLHEse2lzSG9yaXpvbnRhbDpPLGNvbnN0cmFpbmVkOmV0LGFuZ2xlOnJ0LGFuY2hvcjpJLmluc2lkZXRleHRhbmNob3J9KSk7dHQuZm9udFNpemU9Vy5zaXplLGgoImhpc3RvZ3JhbSI9PT1JLnR5cGU/ImJhciI6SS50eXBlLHR0LEMpLFIudHJhbnNmb3JtPXR0LEEoSCxDLGcsdikuYXR0cigidHJhbnNmb3JtIixhLmdldFRleHRUcmFuc2Zvcm0odHQpKX0odCxlLEkscixwLEIsTixqLFUsZyx2KSxlLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChjLEkuc2VsZWN0KCJ0ZXh0IiksdyxDLGYueGNhbGVuZGFyLGYueWNhbGVuZGFyKX0pKTt2YXIgaj0hMT09PWYuY2xpcG9uYXhpcztsLnNldENsaXBVcmwoYyxqP251bGw6ZS5sYXllckNsaXBJZCx0KX0pKTtjLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsSSxlLGcpfSx0b01vdmVJbnNpZGVCYXI6TH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9hdHRyaWJ1dGVzIjo2NDMsIi4vY29uc3RhbnRzIjo2NDUsIi4vaGVscGVycyI6NjQ5LCIuL3N0eWxlIjo2NTcsIi4vdW5pZm9ybV90ZXh0Ijo2NTksIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT1lLmMycChuP3QuczA6dC5wMCwhMCksbz1lLmMycChuP3QuczE6dC5wMSwhMCkscz1yLmMycChuP3QucDA6dC5zMCwhMCksbD1yLmMycChuP3QucDE6dC5zMSwhMCk7cmV0dXJuIGk/WyhhK28pLzIsKHMrbCkvMl06bj9bbywocytsKS8yXTpbKGErbykvMixsXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPWlbMF0udHJhY2UsbD0iZnVubmVsIj09PXMudHlwZSxjPSJoIj09PXMub3JpZW50YXRpb24sdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgZj1pW3JdLGg9ImN0ImluIGY/Zi5jdDpuKGYsYSxvLGMsbCk7ZS5jb250YWlucyhoLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6cix4OmEuYzJkKGYueCkseTpvLmMyZChmLnkpfSksZi5zZWxlY3RlZD0xKTpmLnNlbGVjdGVkPTB9cmV0dXJuIHV9fSx7fV0sNjU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmRpc3RpbmN0VmFscyxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bihhKTt0aGlzLmRpc3RpbmN0UG9zaXRpb25zPXUudmFscywxPT09dS52YWxzLmxlbmd0aCYmciE9PTEvMD90aGlzLm1pbkRpZmY9cjp0aGlzLm1pbkRpZmY9TWF0aC5taW4odS5taW5EaWZmLHIpO3ZhciBmPShlLnBvc0F4aXN8fHt9KS50eXBlOyJjYXRlZ29yeSIhPT1mJiYibXVsdGljYXRlZ29yeSIhPT1mfHwodGhpcy5taW5EaWZmPTEpLHRoaXMuYmluV2lkdGg9dGhpcy5taW5EaWZmLHRoaXMuYmlucz17fX1hLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSksbj10aGlzLmJpbnNbcl18fDA7cmV0dXJuIHRoaXMuYmluc1tyXT1uK2Usbn0sYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpO3JldHVybiB0aGlzLmJpbnNbcl18fDB9LGEucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU8MCYmdGhpcy5zZXBOZWdWYWw/InYiOiJeIikrKHRoaXMub3ZlcmxhcE5vTWVyZ2U/dDpNYXRoLnJvdW5kKHQvdGhpcy5iaW5XaWR0aCkpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4fV0sNjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9yZWdpc3RyeSIpLGw9dCgiLi91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9dCgiLi9hdHRyaWJ1dGVzIiksdT1jLnRleHRmb250LGY9Yy5pbnNpZGV0ZXh0Zm9udCxoPWMub3V0c2lkZXRleHRmb250LHA9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gZCh0LGUscil7YS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZSxyKSxtKHQsZSxyKX1mdW5jdGlvbiBtKHQsZSxyKXt0LnNlbGVjdEFsbCgidGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHM9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocixnKGksdCxlLHIpKTthLmZvbnQoaSxzKX0pKX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW4uX2Z1bGxMYXlvdXQuZm9udCxhPXIudGV4dGZvbnQ7aWYodC5jbGFzc2VkKCJiYXJ0ZXh0LWluc2lkZSIpKXt2YXIgbz1fKGUscik7YT15KHIsZS5pLGksbyl9ZWxzZSB0LmNsYXNzZWQoImJhcnRleHQtb3V0c2lkZSIpJiYoYT14KHIsZS5pLGkpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gYih1LHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBhPXYodCxlLHIpO3JldHVybih2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udHx8dm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnQuY29sb3J8fEFycmF5LmlzQXJyYXkodC50ZXh0Zm9udC5jb2xvcikmJnZvaWQgMD09PXQudGV4dGZvbnQuY29sb3JbZV0pJiYoYT17Y29sb3I6aS5jb250cmFzdChuKSxmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemV9KSxiKGYsdC5pbnNpZGV0ZXh0Zm9udCxlLGEpfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXYodCxlLHIpO3JldHVybiBiKGgsdC5vdXRzaWRldGV4dGZvbnQsZSxuKX1mdW5jdGlvbiBiKHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9cC5nZXRWYWx1ZShlLmZhbWlseSxyKSxhPXAuZ2V0VmFsdWUoZS5zaXplLHIpLG89cC5nZXRWYWx1ZShlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6cC5jb2VyY2VTdHJpbmcodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTpwLmNvZXJjZU51bWJlcih0LnNpemUsYSxuLnNpemUpLGNvbG9yOnAuY29lcmNlQ29sb3IodC5jb2xvcixvLG4uY29sb3IpfX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIndhdGVyZmFsbCI9PT1lLnR5cGU/ZVt0LmRpcl0ubWFya2VyLmNvbG9yOnQubWNjfHx0Lm1jfHxlLm1hcmtlci5jb2xvcn1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5iYXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO2wodCxlLCJiYXIiKTt2YXIgcj1lLnNpemUoKSxpPXQuX2Z1bGxMYXlvdXQ7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkuZWFjaCgoZnVuY3Rpb24odCl7KCJzdGFjayI9PT1pLmJhcm1vZGUmJnI+MXx8MD09PWkuYmFyZ2FwJiYwPT09aS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaCgoZnVuY3Rpb24oZSl7ZChuLnNlbGVjdCh0aGlzKSxlWzBdLnRyYWNlLHQpfSkpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKGUpfSxzdHlsZVRleHRQb2ludHM6bSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lWzBdLnRyYWNlO2kuc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24odCxlLHIpe2Euc2VsZWN0ZWRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZSksZnVuY3Rpb24odCxlLHIpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGkscz1uLnNlbGVjdCh0aGlzKTtpZih0LnNlbGVjdGVkKXtpPW8uZW5zdXJlVW5pZm9ybUZvbnRTaXplKHIsZyhzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pKX0odC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfShyLGksdCk6KGQocixpLHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHIpKX0sZ2V0SW5zaWRlVGV4dEZvbnQ6eSxnZXRPdXRzaWRlVGV4dEZvbnQ6eCxnZXRCYXJDb2xvcjpfLHJlc2l6ZVRleHQ6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vYXR0cmlidXRlcyI6NjQzLCIuL2hlbHBlcnMiOjY0OSwiLi91bmlmb3JtX3RleHQiOjY1OSwiQHBsb3RseS9kMyI6NTh9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9saWIiKS5jb2VyY2VQYXR0ZXJuO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe3ZhciBjPXIoIm1hcmtlci5jb2xvciIscyksdT1pKHQsIm1hcmtlciIpO3UmJmEodCxlLGwscix7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLmNvbG9yIixuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLGwscix7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUud2lkdGgiKSxyKCJtYXJrZXIub3BhY2l0eSIpLG8ociwibWFya2VyLnBhdHRlcm4iLGMsdSkscigic2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vbGliIjo0OTh9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4iXyIrdCsiVGV4dF9taW5zaXplIn1lLmV4cG9ydHM9e3JlY29yZE1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSxyKXtpZihyLnVuaWZvcm10ZXh0Lm1vZGUpe3ZhciBuPWEodCksaT1yLnVuaWZvcm10ZXh0Lm1pbnNpemUsbz1lLnNjYWxlKmUuZm9udFNpemU7ZS5oaWRlPW88aSxyW25dPXJbbl18fDEvMCxlLmhpZGV8fChyW25dPU1hdGgubWluKHJbbl0sTWF0aC5tYXgobyxpKSkpfX0sY2xlYXJNaW5UZXh0U2l6ZTpmdW5jdGlvbih0LGUpe2VbYSh0KV09dm9pZCAwfSxyZXNpemVUZXh0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YVsiXyIrcisiVGV4dF9taW5zaXplIl07aWYobyl7dmFyIHMsbD0iaGlkZSI9PT1hLnVuaWZvcm10ZXh0Lm1vZGU7c3dpdGNoKHIpe2Nhc2UiZnVubmVsYXJlYSI6Y2FzZSJwaWUiOmNhc2Uic3VuYnVyc3QiOnM9Imcuc2xpY2UiO2JyZWFrO2Nhc2UidHJlZW1hcCI6Y2FzZSJpY2ljbGUiOnM9Imcuc2xpY2UsIGcucGF0aGJhciI7YnJlYWs7ZGVmYXVsdDpzPSJnLnBvaW50cyA+IGcucG9pbnQifWUuc2VsZWN0QWxsKHMpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhbnNmb3JtO2UmJihlLnNjYWxlPWwmJmUuaGlkZT8wOm8vZS5mb250U2l6ZSxuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGkuZ2V0VGV4dFRyYW5zZm9ybShlKSkpfSkpfX19fSx7Ii4uLy4uL2xpYiI6NDk4LCJAcGxvdGx5L2QzIjo1OH1dLDY2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3I6YS5yLHRoZXRhOmEudGhldGEscjA6YS5yMCxkcjphLmRyLHRoZXRhMDphLnRoZXRhMCxkdGhldGE6YS5kdGhldGEsdGhldGF1bml0OmEudGhldGF1bml0LGJhc2U6aSh7fSxvLmJhc2Use30pLG9mZnNldDppKHt9LG8ub2Zmc2V0LHt9KSx3aWR0aDppKHt9LG8ud2lkdGgse30pLHRleHQ6aSh7fSxvLnRleHQse30pLGhvdmVydGV4dDppKHt9LG8uaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6by5tYXJrZXIsaG92ZXJpbmZvOmEuaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9iYXIvYXR0cmlidXRlcyI6NjQzLCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyI6OTk3fV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxtPWYsZz0wO2c8aDtnKyspcFtnXT17cDptW2ddLHM6ZFtnXX07ZnVuY3Rpb24gdih0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYodigid2lkdGgiKSx2KCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh0LGgsZixpLHttb2RlOmUuYmFybW9kZSxub3JtOmUuYmFybm9ybSxnYXA6ZS5iYXJnYXAsZ3JvdXBnYXA6ZS5iYXJncm91cGdhcH0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjY0MiwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjY0NiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6OTI0fV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsYT10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUscyxsKT8obCgidGhldGF1bml0IiksbCgiYmFzZSIpLGwoIm9mZnNldCIpLGwoIndpZHRoIiksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKSxhKHQsZSxsLHIscyksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsbCkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6NjU4LCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiOjk5OSwiLi9hdHRyaWJ1dGVzIjo2NjB9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9iYXIvaG92ZXIiKS5nZXRUcmFjZUNvbG9yLG89aS5maWxsVGV4dCxzPXQoIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciIpLm1ha2VIb3ZlclBvaW50VGV4dCxsPXQoIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiKS5pc1B0SW5zaWRlUG9seWdvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPXQuY2QsdT1jWzBdLnRyYWNlLGY9dC5zdWJwbG90LGg9Zi5yYWRpYWxBeGlzLHA9Zi5hbmd1bGFyQXhpcyxkPWYudmFuZ2xlcyxtPWQ/bDppLmlzUHRJbnNpZGVTZWN0b3IsZz10Lm1heEhvdmVyRGlzdGFuY2Usdj1wLl9wZXJpb2R8fDIqTWF0aC5QSSx5PU1hdGguYWJzKGguZzJwKE1hdGguc3FydChlKmUrcipyKSkpLHg9TWF0aC5hdGFuMihyLGUpO2gucmFuZ2VbMF0+aC5yYW5nZVsxXSYmKHgrPU1hdGguUEkpO2lmKG4uZ2V0Q2xvc2VzdChjLChmdW5jdGlvbih0KXtyZXR1cm4gbSh5LHgsW3QucnAwLHQucnAxXSxbdC50aGV0YWcwLHQudGhldGFnMV0sZCk/ZytNYXRoLm1pbigxLE1hdGguYWJzKHQudGhldGFnMS10LnRoZXRhZzApL3YpLTErKHQucnAxLXkpLyh0LnJwMS10LnJwMCktMToxLzB9KSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxmLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPSJsZWZ0IiksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NDAxLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6NjE2LCIuLi9iYXIvaG92ZXIiOjY1MCwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIjoxMDAxfV0sNjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJhcnBvbGFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJwb2xhciIsImJhciIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIiksc3R5bGU6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo2MTcsIi4uL2Jhci9zZWxlY3QiOjY1NSwiLi4vYmFyL3N0eWxlIjo2NTcsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDAsIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxZTMsIi4vYXR0cmlidXRlcyI6NjYwLCIuL2NhbGMiOjY2MSwiLi9kZWZhdWx0cyI6NjYyLCIuL2hvdmVyIjo2NjMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY2NSwiLi9sYXlvdXRfZGVmYXVsdHMiOjY2NiwiLi9wbG90Ijo2Njd9XSw2NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMSxtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDY2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhyLG8pe3JldHVybiBuLmNvZXJjZSh0W2FdfHx7fSxlW2FdLGkscixvKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTsiYmFycG9sYXIiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmKG9bYT1jLnN1YnBsb3RdfHwocygiYmFybW9kZSIpLHMoImJhcmdhcCIpLG9bYV09MSkpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY2NX1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPWUueGF4aXMsYz1lLnlheGlzLHU9ZS5yYWRpYWxBeGlzLGY9ZS5hbmd1bGFyQXhpcyxoPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY3h4LHI9dC5jeXk7aWYodC52YW5nbGVzKXJldHVybiBmdW5jdGlvbihuLGksbyxsKXt2YXIgYyx1O2EuYW5nbGVEZWx0YShvLGwpPjA/KGM9byx1PWwpOihjPWwsdT1vKTt2YXIgZj1bcy5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzKGMsdC52YW5nbGVzKVswXSwoYyt1KS8yLHMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyh1LHQudmFuZ2xlcylbMV1dO3JldHVybiBzLnBhdGhQb2x5Z29uQW5udWx1cyhuLGksYyx1LGYsZSxyKX07cmV0dXJuIGZ1bmN0aW9uKHQsbixpLG8pe3JldHVybiBhLnBhdGhBbm51bHVzKHQsbixpLG8sZSxyKX19KGUpLHA9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5iYXJsYXllciIpO2EubWFrZVRyYWNlR3JvdXBzKHAsciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1hLmVuc3VyZVNpbmdsZShyLCJnIiwicG9pbnRzIikuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5KTtzLmVudGVyKCkuYXBwZW5kKCJnIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLmNsYXNzZWQoInBvaW50IiwhMCkscy5leGl0KCkucmVtb3ZlKCkscy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyPW4uc2VsZWN0KHRoaXMpLG89dC5ycDA9dS5jMnAodC5zMCkscz10LnJwMT11LmMycCh0LnMxKSxwPXQudGhldGFnMD1mLmMyZyh0LnAwKSxkPXQudGhldGFnMT1mLmMyZyh0LnAxKTtpZihpKG8pJiZpKHMpJiZpKHApJiZpKGQpJiZvIT09cyYmcCE9PWQpe3ZhciBtPXUuYzJnKHQuczEpLGc9KHArZCkvMjt0LmN0PVtsLmMycChtKk1hdGguY29zKGcpKSxjLmMycChtKk1hdGguc2luKGcpKV0sZT1oKG8scyxwLGQpfWVsc2UgZT0iTTAsMFoiO2EuZW5zdXJlU2luZ2xlKHIsInBhdGgiKS5hdHRyKCJkIixlKX0pKSxvLnNldENsaXBVcmwocixlLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsLHQpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiOjYxNiwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9Yy5saW5lO2UuZXhwb3J0cz17eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0seHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSxuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scTE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWVkaWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHEzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGxvd2VyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdXBwZXJmZW5jZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxub3RjaGVkOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LG5vdGNod2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjI1LGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hzcGFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGJveHBvaW50czp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwib3V0bGllcnMiLCJzdXNwZWN0ZWRvdXRsaWVycyIsITFdLGVkaXRUeXBlOiJjYWxjIn0saml0dGVyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0scG9pbnRwb3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDoyLGVkaXRUeXBlOiJjYWxjIn0sYm94bWVhbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwic2QiLCExXSxlZGl0VHlwZToiY2FsYyJ9LG1lYW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc2Q6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxdWFydGlsZW1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiZXhjbHVzaXZlIiwiaW5jbHVzaXZlIl0sZGZsdDoibGluZWFyIixlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7b3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLCAwLCAwLCAwKSIsZWRpdFR5cGU6InN0eWxlIn0sc3ltYm9sOmwoe30sYy5zeW1ib2wse2FycmF5T2s6ITEsZWRpdFR5cGU6InBsb3QifSksb3BhY2l0eTpsKHt9LGMub3BhY2l0eSx7YXJyYXlPazohMSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0pLHNpemU6bCh7fSxjLnNpemUse2FycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSksY29sb3I6bCh7fSxjLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSxsaW5lOntjb2xvcjpsKHt9LHUuY29sb3Ise2FycmF5T2s6ITEsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDpsKHt9LHUud2lkdGgse2FycmF5T2s6ITEsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9KSxvdXRsaWVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxvdXRsaWVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6bi5maWxsY29sb3Isd2hpc2tlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxvZmZzZXRncm91cDppLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOmkuYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6bi51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTpzKHt9KSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJib3hlcyIsInBvaW50cyJdLGRmbHQ6ImJveGVzK3BvaW50cyIsZWRpdFR5cGU6InN0eWxlIn19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vYmFyL2F0dHJpYnV0ZXMiOjY0MywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbD1vLl87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx5LHgsYixfLHcsVD10Ll9mdWxsTGF5b3V0LGs9aS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLEE9aS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLE09W10sUz0idmlvbGluIj09PWUudHlwZT8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiOyJoIj09PWUub3JpZW50YXRpb24/KHk9ayx4PSJ4IixiPUEsXz0ieSIsdz0hIWUueXBlcmlvZGFsaWdubWVudCk6KHk9QSx4PSJ5IixiPWssXz0ieCIsdz0hIWUueHBlcmlvZGFsaWdubWVudCk7dmFyIEUsTCxDLFAsSSxPLHo9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsbD1lKyIwImluIHQsYz0iZCIrZSBpbiB0O2lmKGUgaW4gdHx8bCYmYyl7dmFyIHU9ci5tYWtlQ2FsY2RhdGEodCxlKTtyZXR1cm5bYSh0LHIsZSx1KS52YWxzLHVdfXM9bD90W2UrIjAiXToibmFtZSJpbiB0JiYoImNhdGVnb3J5Ij09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpfHxvLmlzRGF0ZVRpbWUodC5uYW1lKSYmImRhdGUiPT09ci50eXBlKT90Lm5hbWU6aTtmb3IodmFyIGY9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjX2p1c3RfaW5kaWNlcyhzKTpyLmQyYyhzLDAsdFtlKyJjYWxlbmRhciJdKSxoPXQuX2xlbmd0aCxwPW5ldyBBcnJheShoKSxkPTA7ZDxoO2QrKylwW2RdPWY7cmV0dXJuW3BdfShlLF8sYixUW1NdKSxEPXpbMF0sUj16WzFdLEY9by5kaXN0aW5jdFZhbHMoRCxiKSxCPUYudmFscyxOPUYubWluRGlmZi8yLGo9ImFsbCI9PT0oZS5ib3hwb2ludHN8fGUucG9pbnRzKT9vLmlkZW50aXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0LnY8RS5sZnx8dC52PkUudWZ9O2lmKGUuX2hhc1ByZUNvbXBTdGF0cyl7dmFyIFU9ZVt4XSxWPWZ1bmN0aW9uKHQpe3JldHVybiB5LmQyYygoZVt0XXx8W10pW3JdKX0sSD0xLzAscT0tMS8wO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKXt2YXIgRz1EW3JdO2lmKG4oRykpe2lmKChFPXt9KS5wb3M9RVtfXT1HLHcmJlImJihFLm9yaWdfcD1SW3JdKSxFLnExPVYoInExIiksRS5tZWQ9VigibWVkaWFuIiksRS5xMz1WKCJxMyIpLEw9W10sVSYmby5pc0FycmF5T3JUeXBlZEFycmF5KFVbcl0pKWZvcihjPTA7YzxVW3JdLmxlbmd0aDtjKyspKE89eS5kMmMoVVtyXVtjXSkpIT09cyYmKHUoST17djpPLGk6W3IsY119LGUsW3IsY10pLEwucHVzaChJKSk7aWYoRS5wdHM9TC5zb3J0KGYpLFA9KEM9RVt4XT1MLm1hcChoKSkubGVuZ3RoLEUubWVkIT09cyYmRS5xMSE9PXMmJkUucTMhPT1zJiZFLm1lZD49RS5xMSYmRS5xMz49RS5tZWQpe3ZhciBZPVYoImxvd2VyZmVuY2UiKTtFLmxmPVkhPT1zJiZZPD1FLnExP1k6cChFLEMsUCk7dmFyIFc9VigidXBwZXJmZW5jZSIpO0UudWY9VyE9PXMmJlc+PUUucTM/VzpkKEUsQyxQKTt2YXIgWD1WKCJtZWFuIik7RS5tZWFuPVghPT1zP1g6UD9vLm1lYW4oQyxQKTooRS5xMStFLnEzKS8yO3ZhciBaPVYoInNkIik7RS5zZD1YIT09cyYmWj49MD9aOlA/by5zdGRldihDLFAsRS5tZWFuKTpFLnEzLUUucTEsRS5sbz1tKEUpLEUudW89ZyhFKTt2YXIgSj1WKCJub3RjaHNwYW4iKTtKPUohPT1zJiZKPjA/Sjp2KEUsUCksRS5sbj1FLm1lZC1KLEUudW49RS5tZWQrSjt2YXIgSz1FLmxmLFE9RS51ZjtlLmJveHBvaW50cyYmQy5sZW5ndGgmJihLPU1hdGgubWluKEssQ1swXSksUT1NYXRoLm1heChRLENbUC0xXSkpLGUubm90Y2hlZCYmKEs9TWF0aC5taW4oSyxFLmxuKSxRPU1hdGgubWF4KFEsRS51bikpLEUubWluPUssRS5tYXg9UX1lbHNle3ZhciAkO28ud2FybihbIkludmFsaWQgaW5wdXQgLSBtYWtlIHN1cmUgdGhhdCBxMSA8PSBtZWRpYW4gPD0gcTMiLCJxMSA9ICIrRS5xMSwibWVkaWFuID0gIitFLm1lZCwicTMgPSAiK0UucTNdLmpvaW4oIlxuIikpLCQ9RS5tZWQhPT1zP0UubWVkOkUucTEhPT1zP0UucTMhPT1zPyhFLnExK0UucTMpLzI6RS5xMTpFLnEzIT09cz9FLnEzOjAsRS5tZWQ9JCxFLnExPUUucTM9JCxFLmxmPUUudWY9JCxFLm1lYW49RS5zZD0kLEUubG49RS51bj0kLEUubWluPUUubWF4PSR9SD1NYXRoLm1pbihILEUubWluKSxxPU1hdGgubWF4KHEsRS5tYXgpLEUucHRzMj1MLmZpbHRlcihqKSxNLnB1c2goRSl9fWUuX2V4dHJlbWVzW3kuX2lkXT1pLmZpbmRFeHRyZW1lcyh5LFtILHFdLHtwYWRkZWQ6ITB9KX1lbHNle3ZhciB0dD15Lm1ha2VDYWxjZGF0YShlLHgpLGV0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIrMSksaT0wO2k8cjtpKyspbltpXT10W2ldLWU7cmV0dXJuIG5bcl09dFtyLTFdK2Usbn0oQixOKSxydD1CLmxlbmd0aCxudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09W107cmV0dXJuIGV9KHJ0KTtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKylpZihPPXR0W3JdLG4oTykpe3ZhciBpdD1vLmZpbmRCaW4oRFtyXSxldCk7aXQ+PTAmJml0PHJ0JiYodShJPXt2Ok8saTpyfSxlLHIpLG50W2l0XS5wdXNoKEkpKX12YXIgYXQ9MS8wLG90PS0xLzAsc3Q9ZS5xdWFydGlsZW1ldGhvZCxsdD0iZXhjbHVzaXZlIj09PXN0LGN0PSJpbmNsdXNpdmUiPT09c3Q7Zm9yKHI9MDtyPHJ0O3IrKylpZihudFtyXS5sZW5ndGg+MCl7dmFyIHV0LGZ0O2lmKChFPXt9KS5wb3M9RVtfXT1CW3JdLEw9RS5wdHM9bnRbcl0uc29ydChmKSxQPShDPUVbeF09TC5tYXAoaCkpLmxlbmd0aCxFLm1pbj1DWzBdLEUubWF4PUNbUC0xXSxFLm1lYW49by5tZWFuKEMsUCksRS5zZD1vLnN0ZGV2KEMsUCxFLm1lYW4pLEUubWVkPW8uaW50ZXJwKEMsLjUpLFAlMiYmKGx0fHxjdCkpbHQ/KHV0PUMuc2xpY2UoMCxQLzIpLGZ0PUMuc2xpY2UoUC8yKzEpKTpjdCYmKHV0PUMuc2xpY2UoMCxQLzIrMSksZnQ9Qy5zbGljZShQLzIpKSxFLnExPW8uaW50ZXJwKHV0LC41KSxFLnEzPW8uaW50ZXJwKGZ0LC41KTtlbHNlIEUucTE9by5pbnRlcnAoQywuMjUpLEUucTM9by5pbnRlcnAoQywuNzUpO0UubGY9cChFLEMsUCksRS51Zj1kKEUsQyxQKSxFLmxvPW0oRSksRS51bz1nKEUpO3ZhciBodD12KEUsUCk7RS5sbj1FLm1lZC1odCxFLnVuPUUubWVkK2h0LGF0PU1hdGgubWluKGF0LEUubG4pLG90PU1hdGgubWF4KG90LEUudW4pLEUucHRzMj1MLmZpbHRlcihqKSxNLnB1c2goRSl9ZS5fZXh0cmVtZXNbeS5faWRdPWkuZmluZEV4dHJlbWVzKHksZS5ub3RjaGVkP3R0LmNvbmNhdChbYXQsb3RdKTp0dCx7cGFkZGVkOiEwfSl9cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXS5wdHN8fFtdLGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXS5pXT1hO28udGFnU2VsZWN0ZWQobixlLGkpfX0oTSxlKSxNLmxlbmd0aD4wPyhNWzBdLnQ9e251bTpUW1NdLGRQb3M6Tixwb3NMZXR0ZXI6Xyx2YWxMZXR0ZXI6eCxsYWJlbHM6e21lZDpsKHQsIm1lZGlhbjoiKSxtaW46bCh0LCJtaW46IikscTE6bCh0LCJxMToiKSxxMzpsKHQsInEzOiIpLG1heDpsKHQsIm1heDoiKSxtZWFuOiJzZCI9PT1lLmJveG1lYW4/bCh0LCJtZWFuIFx4YjEgXHUwM2MzOiIpOmwodCwibWVhbjoiKSxsZjpsKHQsImxvd2VyIGZlbmNlOiIpLHVmOmwodCwidXBwZXIgZmVuY2U6Iil9fSxUW1NdKyssTSk6W3t0OntlbXB0eTohMH19XX07dmFyIGM9e3RleHQ6InR4Iixob3ZlcnRleHQ6Imh0eCJ9O2Z1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgbiBpbiBjKW8uaXNBcnJheU9yVHlwZWRBcnJheShlW25dKSYmKEFycmF5LmlzQXJyYXkocik/by5pc0FycmF5T3JUeXBlZEFycmF5KGVbbl1bclswXV0pJiYodFtjW25dXT1lW25dW3JbMF1dW3JbMV1dKTp0W2Nbbl1dPWVbbl1bcl0pfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC52LWUudn1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnZ9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIDA9PT1yP3QucTE6TWF0aC5taW4odC5xMSxlW01hdGgubWluKG8uZmluZEJpbigyLjUqdC5xMS0xLjUqdC5xMyxlLCEwKSsxLHItMSldKX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gMD09PXI/dC5xMzpNYXRoLm1heCh0LnEzLGVbTWF0aC5tYXgoby5maW5kQmluKDIuNSp0LnEzLTEuNSp0LnExLGUpLDApXSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gNCp0LnExLTMqdC5xM31mdW5jdGlvbiBnKHQpe3JldHVybiA0KnQucTMtMyp0LnExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gMD09PWU/MDoxLjU3Kih0LnEzLXQucTEpL01hdGguc3FydChlKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCxvPVsidiIsImgiXTtmdW5jdGlvbiBzKHQsZSxyLG8pe3ZhciBzLGwsYyx1PWUuY2FsY2RhdGEsZj1lLl9mdWxsTGF5b3V0LGg9by5faWQscD1oLmNoYXJBdCgwKSxkPVtdLG09MDtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWZvcihjPXVbcltzXV0sbD0wO2w8Yy5sZW5ndGg7bCsrKWQucHVzaChvLmMybChjW2xdLnBvcywhMCkpLG0rPShjW2xdLnB0czJ8fFtdKS5sZW5ndGg7aWYoZC5sZW5ndGgpe3ZhciBnPWkuZGlzdGluY3RWYWxzKGQpOyJjYXRlZ29yeSIhPT1vLnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PW8udHlwZXx8KGcubWluRGlmZj0xKTt2YXIgdj1nLm1pbkRpZmYvMjtuLm1pbkR0aWNrKG8sZy5taW5EaWZmLGcudmFsc1swXSwhMCk7dmFyIHk9ZlsidmlvbGluIj09PXQ/Il9udW1WaW9saW5zIjoiX251bUJveGVzIl0seD0iZ3JvdXAiPT09Zlt0KyJtb2RlIl0mJnk+MSxiPTEtZlt0KyJnYXAiXSxfPTEtZlt0KyJncm91cGdhcCJdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspe3ZhciB3LFQsayxBLE0sUyxFPShjPXVbcltzXV0pWzBdLnRyYWNlLEw9Y1swXS50LEM9RS53aWR0aCxQPUUuc2lkZTtpZihDKXc9VD1BPUMvMixrPTA7ZWxzZSBpZih3PXYseCl7dmFyIEk9YShmLG8uX2lkKStFLm9yaWVudGF0aW9uLE89KGYuX2FsaWdubWVudE9wdHNbSV18fHt9KVtFLmFsaWdubWVudGdyb3VwXXx8e30sej1PYmplY3Qua2V5cyhPLm9mZnNldEdyb3Vwc3x8e30pLmxlbmd0aCxEPXp8fHk7VD13KmIqXy9ELGs9Mip3KigoKHo/RS5fb2Zmc2V0SW5kZXg6TC5udW0pKy41KS9ELS41KSpiLEE9dypiL0R9ZWxzZSBUPXcqYipfLGs9MCxBPXc7TC5kUG9zPXcsTC5iUG9zPWssTC5iZFBvcz1ULEwud0hvdmVyPUE7dmFyIFIsRixCLE4saixVLFY9aytULEg9Qm9vbGVhbihDKTtpZigicG9zaXRpdmUiPT09UD8oTT13KihDPzE6LjUpLFI9VixTPVI9ayk6Im5lZ2F0aXZlIj09PVA/KE09Uj1rLFM9dyooQz8xOi41KSxGPVYpOihNPVM9dyxSPUY9ViksKEUuYm94cG9pbnRzfHxFLnBvaW50cykmJm0+MCl7dmFyIHE9RS5wb2ludHBvcyxHPUUuaml0dGVyLFk9RS5tYXJrZXIuc2l6ZS8yLFc9MDtxK0c+PTAmJigoVz1WKihxK0cpKT5NPyhIPSEwLGo9WSxCPVcpOlc+UiYmKGo9WSxCPU0pKSxXPD1NJiYoQj1NKTt2YXIgWD0wO3EtRzw9MCYmKChYPS1WKihxLUcpKT5TPyhIPSEwLFU9WSxOPVgpOlg+RiYmKFU9WSxOPVMpKSxYPD1TJiYoTj1TKX1lbHNlIEI9TSxOPVM7dmFyIFo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKVpbbF09Y1tsXS5wb3M7RS5fZXh0cmVtZXNbaF09bi5maW5kRXh0cmVtZXMobyxaLHtwYWRkZWQ6SCx2cGFkbWludXM6Tix2cGFkcGx1czpCLHZwYWRMaW5lYXJpemVkOiEwLHBwYWRtaW51czp7eDpVLHk6an1bcF0scHBhZHBsdXM6e3g6aix5OlV9W3BdfSl9fX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGk9ZS55YXhpcyxhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgbD1vW2FdLGM9ImgiPT09bD9pOm4sdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBoPXJbZl0scD1oWzBdLnQsZD1oWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwiYm94IiE9PWQudHlwZSYmImNhbmRsZXN0aWNrIiE9PWQudHlwZXx8cC5lbXB0eXx8KGQub3JpZW50YXRpb258fCJ2IikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGYpfXMoImJveCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NTU3fV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIikscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHUodCxlLHIsYSl7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO3JldHVybiB0JiZ0Lmxlbmd0aCYmKGUrPTEsbi5pc0FycmF5T3JUeXBlZEFycmF5KHRbMF0pJiZ0WzBdLmxlbmd0aCYmKGUrPTEpKSxlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG4udmFsaWRhdGUodFtlXSxjW2VdKX12YXIgdSxmPXIoInkiKSxoPXIoIngiKTtpZigiYm94Ij09PWUudHlwZSl7dmFyIHA9cigicTEiKSxkPXIoIm1lZGlhbiIpLG09cigicTMiKTtlLl9oYXNQcmVDb21wU3RhdHM9cCYmcC5sZW5ndGgmJmQmJmQubGVuZ3RoJiZtJiZtLmxlbmd0aCx1PU1hdGgubWluKG4ubWluUm93TGVuZ3RoKHApLG4ubWluUm93TGVuZ3RoKGQpLG4ubWluUm93TGVuZ3RoKG0pKX12YXIgZyx2LHk9byhmKSx4PW8oaCksYj15JiZuLm1pblJvd0xlbmd0aChmKSxfPXgmJm4ubWluUm93TGVuZ3RoKGgpLHc9YS5jYWxlbmRhcixUPXthdXRvdHlwZW51bWJlcnM6YS5hdXRvdHlwZW51bWJlcnN9O2lmKGUuX2hhc1ByZUNvbXBTdGF0cylzd2l0Y2goU3RyaW5nKHgpK1N0cmluZyh5KSl7Y2FzZSIwMCI6dmFyIGs9cygieDAiKXx8cygiZHgiKTtnPShzKCJ5MCIpfHxzKCJkeSIpKSYmIWs/ImgiOiJ2Iix2PXU7YnJlYWs7Y2FzZSIxMCI6Zz0idiIsdj1NYXRoLm1pbih1LF8pO2JyZWFrO2Nhc2UiMjAiOmc9ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCk7YnJlYWs7Y2FzZSIwMSI6Zz0iaCIsdj1NYXRoLm1pbih1LGIpO2JyZWFrO2Nhc2UiMDIiOmc9InYiLHY9TWF0aC5taW4odSxmLmxlbmd0aCk7YnJlYWs7Y2FzZSIxMiI6Zz0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpO2JyZWFrO2Nhc2UiMjEiOmc9ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCxiKTticmVhaztjYXNlIjExIjp2PTA7YnJlYWs7Y2FzZSIyMiI6dmFyIEEsTT0hMTtmb3IoQT0wO0E8aC5sZW5ndGg7QSsrKWlmKCJjYXRlZ29yeSI9PT1sKGhbQV0sdyxUKSl7TT0hMDticmVha31pZihNKWc9InYiLHY9TWF0aC5taW4odSxfLGYubGVuZ3RoKTtlbHNle2ZvcihBPTA7QTxmLmxlbmd0aDtBKyspaWYoImNhdGVnb3J5Ij09PWwoZltBXSx3LFQpKXtNPSEwO2JyZWFrfU0/KGc9ImgiLHY9TWF0aC5taW4odSxoLmxlbmd0aCxiKSk6KGc9InYiLHY9TWF0aC5taW4odSxfLGYubGVuZ3RoKSl9fWVsc2UgeT4wPyhnPSJ2Iix2PXg+MD9NYXRoLm1pbihfLGIpOk1hdGgubWluKGIpKTp4PjA/KGc9ImgiLHY9TWF0aC5taW4oXykpOnY9MDtpZih2KXtlLl9sZW5ndGg9djt2YXIgUz1yKCJvcmllbnRhdGlvbiIsZyk7ZS5faGFzUHJlQ29tcFN0YXRzPyJ2Ij09PVMmJjA9PT14PyhyKCJ4MCIsMCkscigiZHgiLDEpKToiaCI9PT1TJiYwPT09eSYmKHIoInkwIiwwKSxyKCJkeSIsMSkpOiJ2Ij09PVMmJjA9PT14P3IoIngwIik6ImgiPT09UyYmMD09PXkmJnIoInkwIiksaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpfWVsc2UgZS52aXNpYmxlPSExfWZ1bmN0aW9uIGYodCxlLHIsaSl7dmFyIGE9aS5wcmVmaXgsbz1uLmNvZXJjZTIodCxlLGMsIm1hcmtlci5vdXRsaWVyY29sb3IiKSxzPXIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIpLGw9Im91dGxpZXJzIjtlLl9oYXNQcmVDb21wU3RhdHM/bD0iYWxsIjoob3x8cykmJihsPSJzdXNwZWN0ZWRvdXRsaWVycyIpO3ZhciB1PXIoYSsicG9pbnRzIixsKTt1PyhyKCJqaXR0ZXIiLCJhbGwiPT09dT8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT11Py0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIGY9cigiaG92ZXJvbiIpOyJhbGwiIT09ZiYmLTE9PT1mLmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYodSh0LGUscyxpKSwhMSE9PWUudmlzaWJsZSl7byh0LGUsaSxzKSxzKCJ4aG92ZXJmb3JtYXQiKSxzKCJ5aG92ZXJmb3JtYXQiKTt2YXIgbD1lLl9oYXNQcmVDb21wU3RhdHM7bCYmKHMoImxvd2VyZmVuY2UiKSxzKCJ1cHBlcmZlbmNlIikpLHMoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxzKCJsaW5lLndpZHRoIikscygiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7dmFyIGg9ITE7aWYobCl7dmFyIHA9cygibWVhbiIpLGQ9cygic2QiKTtwJiZwLmxlbmd0aCYmKGg9ITAsZCYmZC5sZW5ndGgmJihoPSJzZCIpKX1zKCJib3htZWFuIixoKSxzKCJ3aGlza2Vyd2lkdGgiKSxzKCJ3aWR0aCIpLHMoInF1YXJ0aWxlbWV0aG9kIik7dmFyIG09ITE7aWYobCl7dmFyIGc9cygibm90Y2hzcGFuIik7ZyYmZy5sZW5ndGgmJihtPSEwKX1lbHNlIG4udmFsaWRhdGUodC5ub3RjaHdpZHRoLGMubm90Y2h3aWR0aCkmJihtPSEwKTtzKCJub3RjaGVkIixtKSYmcygibm90Y2h3aWR0aCIpLGYodCxlLHMse3ByZWZpeDoiYm94In0pfX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLGMsdCl9Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBsPShpPXRbb10pLnR5cGU7ImJveCIhPT1sJiYidmlvbGluIiE9PWx8fChyPWkuX2lucHV0LCJncm91cCI9PT1lW2wrIm1vZGUiXSYmcyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czp1LGhhbmRsZVBvaW50c0RlZmF1bHRzOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo1NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL2Jhci9kZWZhdWx0cyI6NjQ3LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuL2F0dHJpYnV0ZXMiOjY2OH1dLDY3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDY3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz1pLmZpbGxUZXh0O2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3PXQuY2QsVD10LnhhLGs9dC55YSxBPXdbMF0udHJhY2UsTT13WzBdLnQsUz0idmlvbGluIj09PUEudHlwZSxFPVtdLEw9TS5iZFBvcyxDPU0ud0hvdmVyLFA9ZnVuY3Rpb24odCl7cmV0dXJuIHUuYzJsKHQucG9zKStNLmJQb3MtdS5jMmwocCl9O1MmJiJib3RoIiE9PUEuc2lkZT8oInBvc2l0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLGUrQyx2KX0seD1MLGI9MCksIm5lZ2F0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLUMsZSx2KX0seD0wLGI9TCkpOihnPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZS1DLGUrQyx2KX0seD1iPUwpLF89Uz9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0taCx0LnNwYW5bMV0taCx2KX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4taCx0Lm1heC1oLHYpfSwiaCI9PT1BLm9yaWVudGF0aW9uPyhoPWUscD1yLGQ9XyxtPWcsbD0ieSIsdT1rLGM9IngiLGY9VCk6KGg9cixwPWUsZD1nLG09XyxsPSJ4Iix1PVQsYz0ieSIsZj1rKTt2YXIgST1NYXRoLm1pbigxLEwvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiBPKHQpe3JldHVybihkKHQpK20odCkpLzJ9dj10Lm1heEhvdmVyRGlzdGFuY2UtSSx5PXQubWF4U3Bpa2VEaXN0YW5jZS1JO3ZhciB6PWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsbSxPKTtpZihhLmdldENsb3Nlc3Qodyx6LHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgRD13W3QuaW5kZXhdLFI9QS5saW5lLmNvbG9yLEY9KEEubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KFIpJiZBLmxpbmUud2lkdGg/dC5jb2xvcj1SOm8ub3BhY2l0eShGKSYmQS5ib3hwb2ludHM/dC5jb2xvcj1GOnQuY29sb3I9QS5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoRC5wb3MrTS5iUG9zLWIsITApLHRbbCsiMSJdPXUuYzJwKEQucG9zK00uYlBvcyt4LCEwKSx0W2wrIkxhYmVsVmFsIl09dm9pZCAwIT09RC5vcmlnX3A/RC5vcmlnX3A6RC5wb3M7dmFyIEI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT1PKEQpKnkvdix0W0JdPXUuYzJwKEQucG9zLCEwKTt2YXIgTj17fSxqPVsibWVkIiwicTEiLCJxMyIsIm1pbiIsIm1heCJdOyhBLmJveG1lYW58fChBLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJmoucHVzaCgibWVhbiIpLChBLmJveHBvaW50c3x8QS5wb2ludHMpJiZqLnB1c2goImxmIiwidWYiKTtmb3IodmFyIFU9MDtVPGoubGVuZ3RoO1UrKyl7dmFyIFY9altVXTtpZihWIGluIEQmJiEoRFtWXWluIE4pKXtOW0RbVl1dPSEwO3ZhciBIPURbVl0scT1mLmMycChILCEwKSxHPWkuZXh0ZW5kRmxhdCh7fSx0KTtHLmF0dHI9VixHW2MrIjAiXT1HW2MrIjEiXT1xLEdbYysiTGFiZWxWYWwiXT1ILEdbYysiTGFiZWwiXT0oTS5sYWJlbHM/TS5sYWJlbHNbVl0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGYsSCxBW2MrImhvdmVyZm9ybWF0Il0pLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1WJiYic2QiaW4gRCYmInNkIj09PUEuYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGY9dC55YSxoPWNbMF0udHJhY2UscD11LmMycChlKSxkPWYuYzJwKHIpLG09YS5xdWFkcmF0dXJlKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0pLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC55KS1kKS1lLDEtMy9lKX0pKSxnPSExLHY9MDt2PGMubGVuZ3RoO3YrKyl7bz1jW3ZdO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9bShsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LGc9W3YseV0pfX1pZighZylyZXR1cm4hMTtsPShvPWNbZ1swXV0pLnB0c1tnWzFdXTt2YXIgYj11LmMycChsLngsITApLF89Zi5jMnAobC55LCEwKSx3PWwubXJjfHwxO249aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooaC5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmgubmFtZSx4MDpiLXcseDE6Yit3LHkwOl8tdyx5MTpfK3csc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSk7dmFyIFQsaz1vLm9yaWdfcCxBPXZvaWQgMCE9PWs/azpvLnBvcztyZXR1cm4iaCI9PT1oLm9yaWVudGF0aW9uPyhUPWYsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPUEpOihUPXUsbi54TGFiZWxWYWw9QSxuLnlMYWJlbFZhbD1sLnkpLG5bVC5faWQuY2hhckF0KDApKyJTcGlrZSJdPVQuYzJwKG8ucG9zLCEwKSxzKGwsaCxuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZigiYm94ZXMiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKCJwb2ludHMiKSYmKGk9Yyh0LGUscikpLCJjbG9zZXN0Ij09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDl9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwiYm94TGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4vYXR0cmlidXRlcyI6NjY4LCIuL2NhbGMiOjY2OSwiLi9jcm9zc190cmFjZV9jYWxjIjo2NzAsIi4vZGVmYXVsdHMiOjY3MSwiLi9ldmVudF9kYXRhIjo2NzIsIi4vaG92ZXIiOjY3MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Njc1LCIuL2xheW91dF9kZWZhdWx0cyI6Njc2LCIuL3Bsb3QiOjY3NywiLi9zZWxlY3QiOjY3OCwiLi9zdHlsZSI6Njc5fV0sNjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YSsiTGF5b3V0IixzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtpZihuLnRyYWNlSXMoYyxvKSl7cz0hMDticmVha319cyYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLChmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSksImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NzV9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtmdW5jdGlvbiBvKHQsZSxyLGEpe3ZhciBvLHMsbD0iaCI9PT1yLm9yaWVudGF0aW9uLGM9ZS52YWwsdT1lLnBvcyxmPSEhdS5yYW5nZWJyZWFrcyxoPWEuYlBvcyxwPWEud2RQb3N8fDAsZD1hLmJQb3NQeE9mZnNldHx8MCxtPXIud2hpc2tlcndpZHRofHwwLGc9ci5ub3RjaGVkfHwhMSx2PWc/MS0yKnIubm90Y2h3aWR0aDoxO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgeT10LnNlbGVjdEFsbCgicGF0aC5ib3giKS5kYXRhKCJ2aW9saW4iIT09ci50eXBlfHxyLmJveC52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwiYm94IikseS5leGl0KCkucmVtb3ZlKCkseS5lYWNoKChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9dS5jMmwodC5wb3MraCwhMCksYT11LmwycChlLW8pK2QseT11LmwycChlK3MpK2QseD1mPyhhK3kpLzI6dS5sMnAoZSkrZCxiPXIud2hpc2tlcndpZHRoLF89Zj9hKmIrKDEtYikqeDp1LmwycChlLXApK2Qsdz1mP3kqYisoMS1iKSp4OnUubDJwKGUrcCkrZCxUPXUubDJwKGUtbyp2KStkLGs9dS5sMnAoZStzKnYpK2QsQT1jLmMycCh0LnExLCEwKSxNPWMuYzJwKHQucTMsITApLFM9aS5jb25zdHJhaW4oYy5jMnAodC5tZWQsITApLE1hdGgubWluKEEsTSkrMSxNYXRoLm1heChBLE0pLTEpLEU9dm9pZCAwPT09dC5sZnx8ITE9PT1yLmJveHBvaW50cyxMPWMuYzJwKEU/dC5taW46dC5sZiwhMCksQz1jLmMycChFP3QubWF4OnQudWYsITApLFA9Yy5jMnAodC5sbiwhMCksST1jLmMycCh0LnVuLCEwKTtsP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitTKyIsIitUKyJWIitrKyJNIitBKyIsIithKyJWIit5KyhnPyJIIitQKyJMIitTKyIsIitrKyJMIitJKyIsIit5OiIiKSsiSCIrTSsiViIrYSsoZz8iSCIrSSsiTCIrUysiLCIrVCsiTCIrUCsiLCIrYToiIikrIlpNIitBKyIsIit4KyJIIitMKyJNIitNKyIsIit4KyJIIitDKygwPT09bT8iIjoiTSIrTCsiLCIrXysiViIrdysiTSIrQysiLCIrXysiViIrdykpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitUKyIsIitTKyJIIitrKyJNIithKyIsIitBKyJIIit5KyhnPyJWIitQKyJMIitrKyIsIitTKyJMIit5KyIsIitJOiIiKSsiViIrTSsiSCIrYSsoZz8iViIrSSsiTCIrVCsiLCIrUysiTCIrYSsiLCIrUDoiIikrIlpNIit4KyIsIitBKyJWIitMKyJNIit4KyIsIitNKyJWIitDKygwPT09bT8iIjoiTSIrXysiLCIrTCsiSCIrdysiTSIrXysiLCIrQysiSCIrdykpfSkpfWZ1bmN0aW9uIHModCxlLHIsbil7dmFyIG89ZS54LHM9ZS55LGw9bi5iZFBvcyxjPW4uYlBvcyx1PXIuYm94cG9pbnRzfHxyLnBvaW50cztpLnNlZWRQc2V1ZG9SYW5kb20oKTt2YXIgZj10LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5kYXRhKHU/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSkpLHR9OltdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb2ludHMiKSxmLmV4aXQoKS5yZW1vdmUoKTt2YXIgaD1mLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbz1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSkscz0xZS05Km8sZj0uMDEqbyxoPVtdLHA9MDtpZihyLmppdHRlcil7aWYoMD09PW8pZm9yKHA9MSxoPW5ldyBBcnJheShhLmxlbmd0aCksZT0wO2U8YS5sZW5ndGg7ZSsrKWhbZV09MTtlbHNlIGZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBkPU1hdGgubWF4KDAsZS01KSxtPWFbZF0udixnPU1hdGgubWluKGEubGVuZ3RoLTEsZSs1KSx2PWFbZ10udjsiYWxsIiE9PXUmJihhW2VdLnY8dC5sZj92PU1hdGgubWluKHYsdC5sZik6bT1NYXRoLm1heChtLHQudWYpKTt2YXIgeT1NYXRoLnNxcnQoZiooZy1kKS8odi1tK3MpKXx8MDt5PWkuY29uc3RyYWluKE1hdGguYWJzKHkpLDAsMSksaC5wdXNoKHkpLHA9TWF0aC5tYXgoeSxwKX1uPTIqci5qaXR0ZXIvKHB8fDEpfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB4PWFbZV0sYj14LnYsXz1yLmppdHRlcj9uKmhbZV0qKGkucHNldWRvUmFuZG9tKCktLjUpOjAsdz10LnBvcytjK2wqKHIucG9pbnRwb3MrXyk7ImgiPT09ci5vcmllbnRhdGlvbj8oeC55PXcseC54PWIpOih4Lng9dyx4Lnk9YiksInN1c3BlY3RlZG91dGxpZXJzIj09PXUmJmI8dC51byYmYj50LmxvJiYoeC5zbz0hMCl9cmV0dXJuIGF9KSk7aC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLG8scyl9ZnVuY3Rpb24gbCh0LGUscixhKXt2YXIgbyxzLGw9ZS52YWwsYz1lLnBvcyx1PSEhYy5yYW5nZWJyZWFrcyxmPWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBkPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbiIpLnN0eWxlKHtmaWxsOiJub25lIiwidmVjdG9yLWVmZmVjdCI6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWMuYzJsKHQucG9zK2YsITApLGk9Yy5sMnAoZS1vKStoLGE9Yy5sMnAoZStzKStoLGQ9dT8oaSthKS8yOmMubDJwKGUpK2gsbT1sLmMycCh0Lm1lYW4sITApLGc9bC5jMnAodC5tZWFuLXQuc2QsITApLHY9bC5jMnAodC5tZWFuK3Quc2QsITApOyJoIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK20rIiwiK2krIlYiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZysiLCIrZCsiTCIrbSsiLCIraSsiTCIrdisiLCIrZCsiWiI6IiIpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIraSsiLCIrbSsiSCIrYSsoInNkIj09PXA/Im0wLDBMIitkKyIsIitnKyJMIitpKyIsIittKyJMIitkKyIsIit2KyJaIjoiIikpfSkpfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixhKXt2YXIgYz1lLnhheGlzLHU9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIGJveGVzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxmPWEudCxoPWEudHJhY2U7KGYud2RQb3M9Zi5iZFBvcypoLndoaXNrZXJ3aWR0aCwhMCE9PWgudmlzaWJsZXx8Zi5lbXB0eSk/aS5yZW1vdmUoKTooImgiPT09aC5vcmllbnRhdGlvbj8oZT11LHI9Yyk6KGU9YyxyPXUpLG8oaSx7cG9zOmUsdmFsOnJ9LGgsZikscyhpLHt4OmMseTp1fSxoLGYpLGwoaSx7cG9zOmUsdmFsOnJ9LGgsZikpfSkpfSxwbG90Qm94QW5kV2hpc2tlcnM6byxwbG90UG9pbnRzOnMscGxvdEJveE1lYW46bH19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCJAcGxvdGx5L2QzIjo1OH1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspaVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWlbcl0ucHRzW25dLGM9YS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDY3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKTtvLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZVswXS50cmFjZSxzPW8ubGluZS53aWR0aDtmdW5jdGlvbiBsKHQsZSxyLG4pe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsZSsicHgiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKCJwYXRoLmJveCIpO2lmKCJjYW5kbGVzdGljayI9PT1vLnR5cGUpYy5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZSgib3BhY2l0eSIsby5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSkpO2Vsc2V7bChjLHMsby5saW5lLmNvbG9yLG8uZmlsbGNvbG9yKSxyLnNlbGVjdEFsbCgicGF0aC5tZWFuIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnMsInN0cm9rZS1kYXNoYXJyYXkiOjIqcysicHgsIitzKyJweCJ9KS5jYWxsKGkuc3Ryb2tlLG8ubGluZS5jb2xvcik7dmFyIHU9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTthLnBvaW50U3R5bGUodSxvLHQpfX0pKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZSxpPXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShpLG4pOmEucG9pbnRTdHlsZShpLG4sdCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCJAcGxvdGx5L2QzIjo1OH1dLDY4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxvLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOm8ubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6by5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmEueHBlcmlvZCx4cGVyaW9kMDphLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6YS54cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx4OmEueCxvcGVuOmEub3BlbixoaWdoOmEuaGlnaCxsb3c6YS5sb3csY2xvc2U6YS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LG8ubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpzKGEuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6cyhhLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsd2hpc2tlcndpZHRoOm4oe30sby53aGlza2Vyd2lkdGgse2RmbHQ6MH0pLGhvdmVybGFiZWw6YS5ob3ZlcmxhYmVsfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vYm94L2F0dHJpYnV0ZXMiOjY2OCwiLi4vb2hsYy9hdHRyaWJ1dGVzIjo4Njd9XSw2ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLG89dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1pLmdldEZyb21JZCh0LGUueGF4aXMpLGM9aS5nZXRGcm9tSWQodCxlLnlheGlzKSx1PWwubWFrZUNhbGNkYXRhKGUsIngiKSxmPWEoZSxsLCJ4Iix1KS52YWxzLGg9byh0LGUsdSxmLGMscyk7cmV0dXJuIGgubGVuZ3RoPyhuLmV4dGVuZEZsYXQoaFswXS50LHtudW06ci5fbnVtQm94ZXMsZFBvczpuLmRpc3RpbmN0VmFscyhmKS5taW5EaWZmLzIscG9zTGV0dGVyOiJ4Iix2YWxMZXR0ZXI6InkifSksci5fbnVtQm94ZXMrKyxoKTpbe3Q6e2VtcHR5OiEwfX1dfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9vaGxjL2NhbGMiOjg2OH1dLDY4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsbil7dmFyIGE9cihuKyIubGluZS5jb2xvciIpO3IobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIuZmlsbGNvbG9yIixpLmFkZE9wYWNpdHkoYSwuNSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9YSh0LGUsYyxpKT8obyh0LGUsaSxjLHt4OiEwfSksYygieGhvdmVyZm9ybWF0IiksYygieWhvdmVyZm9ybWF0IiksYygibGluZS53aWR0aCIpLGwodCxlLGMsImluY3JlYXNpbmciKSxsKHQsZSxjLCJkZWNyZWFzaW5nIiksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoIndoaXNrZXJ3aWR0aCIpLGkuX3JlcXVlc3RSYW5nZXNsaWRlcltlLnhheGlzXT0hMCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi9vaGxjL29obGNfZGVmYXVsdHMiOjg3MiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjk0MiwiLi9hdHRyaWJ1dGVzIjo2ODB9XSw2ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FuZGxlc3RpY2siLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIiwiY2FuZGxlc3RpY2siLCJib3hMYXlvdXQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4uL2JveC9wbG90IikucGxvdCxsYXllck5hbWU6ImJveGxheWVyIixzdHlsZTp0KCIuLi9ib3gvc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuLi9vaGxjL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4uL29obGMvc2VsZWN0Iil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsYyI6NjcwLCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjY3NSwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6Njc2LCIuLi9ib3gvcGxvdCI6Njc3LCIuLi9ib3gvc3R5bGUiOjY3OSwiLi4vb2hsYy9ob3ZlciI6ODcwLCIuLi9vaGxjL3NlbGVjdCI6ODc0LCIuL2F0dHJpYnV0ZXMiOjY4MCwiLi9jYWxjIjo2ODEsIi4vZGVmYXVsdHMiOjY4Mn1dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXthKCJhIil8fChhKCJkYSIpLGEoImEwIikpLGEoImIiKXx8KGEoImRiIiksYSgiYjAiKSksZnVuY3Rpb24odCxlLHIsYSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9by5jaGFyQXQoMCksbD10W29dfHx7fSxjPWkubmV3Q29udGFpbmVyKGUsbyksdT17bm9UaWNrbGFiZWxzdGVwOiEwLHRpY2tmb250OiJ4IixpZDpzKyJheGlzIixsZXR0ZXI6cyxmb250OmUuZm9udCxuYW1lOm8sZGF0YTp0W3NdLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOmEsYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsYXV0b3R5cGVudW1iZXJzRGZsdDpyLmF1dG90eXBlbnVtYmVycyxmdWxsTGF5b3V0OnJ9O24obCxjLHUpLGMuX2NhdGVnb3JpZXM9Yy5fY2F0ZWdvcmllc3x8W10sdFtvXXx8Ii0iPT09bC50eXBlfHwodFtvXT17dHlwZTpsLnR5cGV9KX0pKX0odCxlLHIsbyl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi9heGlzX2RlZmF1bHRzIjo2ODl9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7Zm9yKHZhciBpPTEvMCxhPS0xLzAsbz1lLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0seyIuLi8uLi9saWIiOjQ5OH1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MCwiLi9heGlzX2F0dHJpYnV0ZXMiOjY4OH1dLDY4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5PW4ocik/ImEiOiJiIix4PSgiYSI9PT15P3QuYWF4aXM6dC5iYXhpcykuc21vb3RoaW5nLGI9ImEiPT09eT90LmEyaTp0LmIyaixfPSJhIj09PXk/cjppLHc9ImEiPT09eT9pOnIsVD0iYSI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxrPSJhIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT15P3QuYjJqKHcpOnQuYTJpKHcpKSxNPSJhIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKGstMixBKSksbD1BLXMsbz0iYSI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxMPVM8RT8xOi0xLEM9MWUtOCooRS1TKSxQPUw+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxJPUw+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixPPUw+MD9NYXRoLm1pbjpNYXRoLm1heCx6PUw+MD9NYXRoLm1heDpNYXRoLm1pbixEPVAoUytDKSxSPUkoRS1DKSxGPVtbZj1NKFMpXV07Zm9yKGE9RDthKkw8UipMO2ErPUwpYz1bXSxtPXooUyxhKSx2PShnPU8oRSxhK0wpKS1tLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihULTIsTWF0aC5mbG9vciguNSoobStnKSkpKSxoPU0oZykseCYmKHA9byh1LG0tdSksZD1vKHUsZy11KSxjLnB1c2goW2ZbMF0rcFswXS8zKnYsZlsxXStwWzFdLzMqdl0pLGMucHVzaChbaFswXS1kWzBdLzMqdixoWzFdLWRbMV0vMyp2XSkpLGMucHVzaChoKSxGLnB1c2goYyksZj1oO3JldHVybiBGfX0seyIuLi8uLi9saWIiOjQ5OH1dLDY4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmRlc2NyaXB0aW9uV2l0aERhdGVzLHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz17Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjAsbWF4OjEuMyxlZGl0VHlwZToiY2FsYyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMifSxhdXRvdHlwZW51bWJlcnM6YS5hdXRvdHlwZW51bWJlcnMsYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToiY2FsYyIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjaGVhdGVydHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXgiLCJ2YWx1ZSJdLGRmbHQ6InZhbHVlIixlZGl0VHlwZToiY2FsYyJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJhcnJheSJdLGRmbHQ6ImFycmF5IixlZGl0VHlwZToiY2FsYyJ9LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YXJ0IiwiZW5kIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJzdGFydCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9udDpuKHtlZGl0VHlwZToiY2FsYyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dleHBvbmVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToiY2FsYyJ9LG1pbmV4cG9uZW50Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIixkZXNjcmlwdGlvbjpvKCJ0aWNrIGxhYmVsIil9LHRpY2tmb3JtYXRzdG9wczpzKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NTY0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MH1dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcD1yLmxldHRlcixkPXIuZm9udHx8e30sbT1uW3ArImF4aXMiXTtmdW5jdGlvbiBnKHIsbil7cmV0dXJuIG8uY29lcmNlKHQsZSxtLHIsbil9ZnVuY3Rpb24gdihyLG4pe3JldHVybiBvLmNvZXJjZTIodCxlLG0scixuKX1yLm5hbWUmJihlLl9uYW1lPXIubmFtZSxlLl9pZD1yLm5hbWUpLGcoImF1dG90eXBlbnVtYmVycyIsci5hdXRvdHlwZW51bWJlcnNEZmx0KTt2YXIgeT1nKCJ0eXBlIik7KCItIj09PXkmJihyLmRhdGEmJmZ1bmN0aW9uKHQsZSl7aWYoIi0iIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10W3IrImNhbGVuZGFyIl07dC50eXBlPWgoZSxuLHthdXRvdHlwZW51bWJlcnM6dC5hdXRvdHlwZW51bWJlcnN9KX0oZSxyLmRhdGEpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6eT10LnR5cGU9ZS50eXBlKSxnKCJzbW9vdGhpbmciKSxnKCJjaGVhdGVydHlwZSIpLGcoInNob3d0aWNrbGFiZWxzIiksZygibGFiZWxwcmVmaXgiLHArIiA9ICIpLGcoImxhYmVsc3VmZml4IiksZygic2hvd3RpY2twcmVmaXgiKSxnKCJzaG93dGlja3N1ZmZpeCIpLGcoInNlcGFyYXRldGhvdXNhbmRzIiksZygidGlja2Zvcm1hdCIpLGcoImV4cG9uZW50Zm9ybWF0IiksZygibWluZXhwb25lbnQiKSxnKCJzaG93ZXhwb25lbnQiKSxnKCJjYXRlZ29yeW9yZGVyIiksZygidGlja21vZGUiKSxnKCJ0aWNrdmFscyIpLGcoInRpY2t0ZXh0IiksZygidGljazAiKSxnKCJkdGljayIpLCJhcnJheSI9PT1lLnRpY2ttb2RlJiYoZygiYXJyYXl0aWNrMCIpLGcoImFycmF5ZHRpY2siKSksZygibGFiZWxwYWRkaW5nIiksZS5faG92ZXJ0aXRsZT1wLCJkYXRlIj09PXkpJiZhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKTtmKGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB4PWcoImNvbG9yIixyLmRmbHRDb2xvciksYj14PT09dC5jb2xvcj94OmQuY29sb3I7ZygidGl0bGUudGV4dCIpJiYoby5jb2VyY2VGb250KGcsInRpdGxlLmZvbnQiLHtmYW1pbHk6ZC5mYW1pbHksc2l6ZTpvLmJpZ0ZvbnQoZC5zaXplKSxjb2xvcjpifSksZygidGl0bGUub2Zmc2V0IikpLGcoInRpY2thbmdsZSIpLGcoImF1dG9yYW5nZSIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKSYmZygicmFuZ2Vtb2RlIiksZygicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxnKCJmaXhlZHJhbmdlIikscyh0LGUsZyx5KSxjKHQsZSxnLHksciksbCh0LGUsZyx5LHIpLHUodCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOnB9KTt2YXIgXz12KCJncmlkY29sb3IiLGkoeCwuMykpLHc9digiZ3JpZHdpZHRoIiksVD1nKCJzaG93Z3JpZCIpO1R8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KCJzdGFydGxpbmVjb2xvciIseCksQT12KCJzdGFydGxpbmV3aWR0aCIsdyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIE09digiZW5kbGluZWNvbG9yIix4KSxTPXYoImVuZGxpbmV3aWR0aCIsdyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhTXx8ISFTKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLFQ/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLHcpLGcoIm1pbm9yZ3JpZGNvbG9yIixpKF8sLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLm1pbmV4cG9uZW50LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo1NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NTU0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjU3MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU3NSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9hdHRyaWJ1dGVzIjo2ODZ9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxtPWUuYWF4aXMsZz1lLmJheGlzLHY9ZS54LHk9ZS55LHg9W107diYmaSh2KSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxtLGcsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO3Y9ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBUPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsaz0iaW5kZXgiPT09Zy5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO3Y9YShULGssZS5jaGVhdGVyc2xvcGUpfWUuX3g9dj11KHYpLGUuX3k9eT11KHkpLGYodixiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8odiksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxMPS41KihNWzFdLU1bMF0pLEM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bQy0xLjMqTCxDKzEuMypMXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxtKSxsKGUsZyksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxtLGcpLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjc4OSwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjc5MSwiLi9hcnJheV9taW5tYXgiOjY4NSwiLi9jYWxjX2NsaXBwYXRoIjo2OTEsIi4vY2FsY19ncmlkbGluZXMiOjY5MiwiLi9jYWxjX2xhYmVscyI6NjkzLCIuL2NoZWF0ZXJfYmFzaXMiOjY5NSwiLi9zZXRfY29udmVydCI6NzA4LCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo3MDl9XSw2OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGY9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1mO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtmXVtpXSxvW3UtaV09ZVtmXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9ZixhPVtdLG89W107aT49MDtpLS0pYVtmLWldPXRbaV1bMF0sb1tmLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLFQ9Yi5fYm91bmRhcnlsaW5lcz1bXSxrPXRbIl8iK3JdLEE9dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIE09dC5feGN0cmwsUz10Ll95Y3RybCxFPU1bMF0ubGVuZ3RoLEw9TS5sZW5ndGgsQz10Ll9hLmxlbmd0aCxQPXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgST1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gTyhuKXt2YXIgaSxhLG8scyxsLGMsdSxmLHAsZCxtLGcsdj1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD1QLHguY3Jvc3NMZW5ndGg9Qyx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxDO2krKyljPU1hdGgubWluKEMtMixpKSx1PWktYyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLHYucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSx2LnB1c2goZlswXS1kWzBdLzMpLHkucHVzaChmWzFdLWRbMV0vMykpLHYucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oQy0yLGkpKSksdT1pLWMseC5sZW5ndGg9Qyx4LmNyb3NzTGVuZ3RoPVAseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8UDthKyspbz1NYXRoLm1pbihQLTIsYSkscz1hLW8sZj10LmV2YWx4eShbXSxpLGEpLEEuc21vb3RoaW5nJiZhPjAmJihtPXQuZHh5ZGooW10sYyxhLTEsdSwwKSx2LnB1c2gobFswXSttWzBdLzMpLHkucHVzaChsWzFdK21bMV0vMyksZz10LmR4eWRqKFtdLGMsYS0xLHUsMSksdi5wdXNoKGZbMF0tZ1swXS8zKSx5LnB1c2goZlsxXS1nWzFdLzMpKSx2LnB1c2goZlswXSkseS5wdXNoKGZbMV0pLGw9ZjtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9QSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9aCx4Lng9dix4Lnk9eSx4LnNtb290aGluZz1BLnNtb290aGluZyx4fWZ1bmN0aW9uIHoobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10sZj17fTtpZihmLmxlbmd0aD14Lmxlbmd0aCxmLmNyb3NzTGVuZ3RoPWsubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGk9MDtpPEU7aSsrKWNbaV09TVtuKkldW2ldLHVbaV09U1tuKkldW2ldO2Vsc2UgZm9yKGE9TWF0aC5tYXgoMCxNYXRoLm1pbihDLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tYSkpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYSxlLHMscil9LGk9MDtpPEw7aSsrKWNbaV09TVtpXVtuKkldLHVbaV09U1tpXVtuKkldO3JldHVybiBmLmF4aXNMZXR0ZXI9ZSxmLmF4aXM9YixmLmNyb3NzQXhpcz1BLGYudmFsdWU9eFtuXSxmLmNvbnN0dmFyPXIsZi5pbmRleD1uLGYueD1jLGYueT11LGYuc21vb3RoaW5nPUEuc21vb3RoaW5nLGZ9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSlbMF0tMSxmPWNbMV0rMSxoPXU7aDxmO2grKykobz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmgpPDB8fG8+eC5sZW5ndGgtMXx8Xy5wdXNoKGkoeihvKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dTtoPGY7aCsrKWlmKHM9Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypoLG09TWF0aC5taW4ocytiLmFycmF5ZHRpY2sseC5sZW5ndGgtMSksIShzPDB8fHM+eC5sZW5ndGgtMXx8bTwwfHxtPngubGVuZ3RoLTEpKWZvcihnPXhbc10sdj14W21dLGE9MDthPGIubWlub3JncmlkY291bnQ7YSsrKSh5PW0tcyk8PTB8fChkPWcrKHYtZykqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkqKGIuYXJyYXlkdGljay95KSk8eFswXXx8ZD54W3gubGVuZ3RoLTFdfHx3LnB1c2goaShPKGQpLHtjb2xvcjpiLm1pbm9yZ3JpZGNvbG9yLHdpZHRoOmIubWlub3Jncmlkd2lkdGh9KSk7Yi5zdGFydGxpbmUmJlQucHVzaChpKHooMCkse2NvbG9yOmIuc3RhcnRsaW5lY29sb3Isd2lkdGg6Yi5zdGFydGxpbmV3aWR0aH0pKSxiLmVuZGxpbmUmJlQucHVzaChpKHooeC5sZW5ndGgtMSkse2NvbG9yOmIuZW5kbGluZWNvbG9yLHdpZHRoOmIuZW5kbGluZXdpZHRofSkpfWVsc2V7Zm9yKGw9NWUtMTUsdT0oYz1bTWF0aC5mbG9vcigoeFt4Lmxlbmd0aC0xXS1iLnRpY2swKS9iLmR0aWNrKigxK2wpKSxNYXRoLmNlaWwoKHhbMF0tYi50aWNrMCkvYi5kdGljay8oMStsKSldLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSlbMF0sZj1jWzFdLGg9dTtoPD1mO2grKylwPWIudGljazArYi5kdGljaypoLF8ucHVzaChpKE8ocCkse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihoPXUtMTtoPGYrMTtoKyspZm9yKHA9Yi50aWNrMCtiLmR0aWNrKmgsYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKGQ9cCtiLmR0aWNrKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKE8oZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmVC5wdXNoKGkoTyh4WzBdKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmVC5wdXNoKGkoTyh4W3gubGVuZ3RoLTFdKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDl9XSw2OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWUuX2xhYmVscz1bXSxsPWUuX2dyaWRsaW5lcztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKW89bFtyXSwtMSE9PVsic3RhcnQiLCJib3RoIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7cHJlZml4OnZvaWQgMCxzdWZmaXg6dm9pZCAwLGVuZEFuY2hvcjohMCx4eTpvLnh5KDApLGR4eTpvLmR4eSgwLDApLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpLC0xIT09WyJlbmQiLCJib3RoIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7ZW5kQW5jaG9yOiExLHh5Om8ueHkoby5jcm9zc0xlbmd0aC0xKSxkeHk6by5keHkoby5jcm9zc0xlbmd0aC0yLDEpLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDl9XSw2OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxvPXJbMF0tZVswXSxzPXJbMV0tZVsxXSxsPU1hdGgucG93KGkqaSthKmEsLjI1KSxjPU1hdGgucG93KG8qbytzKnMsLjI1KSx1PShjKmMqaS1sKmwqbykqbixmPShjKmMqYS1sKmwqcykqbixoPWMqKGwrYykqMyxwPWwqKGwrYykqMztyZXR1cm5bW2VbMF0rKGgmJnUvaCksZVsxXSsoaCYmZi9oKV0sW2VbMF0tKHAmJnUvcCksZVsxXS0ocCYmZi9wKV1dfX0se31dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjLHU9W10sZj1uKHQpP3QubGVuZ3RoOnQsaD1uKGUpP2UubGVuZ3RoOmUscD1uKHQpP3Q6bnVsbCxkPW4oZSk/ZTpudWxsO3AmJihvPShwLmxlbmd0aC0xKS8ocFtwLmxlbmd0aC0xXS1wWzBdKS8oZi0xKSksZCYmKHM9KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhoLTEpKTt2YXIgbT0xLzAsZz0tMS8wO2ZvcihhPTA7YTxoO2ErKylmb3IodVthXT1bXSxsPWQ/KGRbYV0tZFswXSkqczphLyhoLTEpLGk9MDtpPGY7aSsrKWM9KHA/KHBbaV0tcFswXSkqbzppLyhmLTEpKS1sKnIsbT1NYXRoLm1pbihjLG0pLGc9TWF0aC5tYXgoYyxnKSx1W2FdW2ldPWM7dmFyIHY9MS8oZy1tKSx5PS1tKnY7Zm9yKGE9MDthPGg7YSsrKWZvcihpPTA7aTxmO2krKyl1W2FdW2ldPXYqdVthXVtpXSt5O3JldHVybiB1fX0seyIuLi8uLi9saWIiOjQ5OH1dLDY5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhdG11bGxfcm9tIiksaT10KCIuLi8uLi9saWIiKS5lbnN1cmVBcnJheTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsZixoLHAsZCxtLGcsdix5LHg9clswXS5sZW5ndGgsYj1yLmxlbmd0aCxfPXM/Myp4LTI6eCx3PWw/MypiLTI6Yjtmb3IodD1pKHQsdyksZT1pKGUsdyksZj0wO2Y8dztmKyspdFtmXT1pKHRbZl0sXyksZVtmXT1pKGVbZl0sXyk7Zm9yKHU9MCxoPTA7dTxiO3UrKyxoKz1sPzM6MSlmb3IocD10W2hdLGQ9ZVtoXSxtPXJbdV0sZz1vW3VdLGM9MCxmPTA7Yzx4O2MrKyxmKz1zPzM6MSlwW2ZdPW1bY10sZFtmXT1nW2NdO2lmKHMpZm9yKHU9MCxoPTA7dTxiO3UrKyxoKz1sPzM6MSl7Zm9yKGM9MSxmPTM7Yzx4LTE7YysrLGYrPTMpdj1uKFtyW3VdW2MtMV0sb1t1XVtjLTFdXSxbclt1XVtjXSxvW3VdW2NdXSxbclt1XVtjKzFdLG9bdV1bYysxXV0scyksdFtoXVtmLTFdPXZbMF1bMF0sZVtoXVtmLTFdPXZbMF1bMV0sdFtoXVtmKzFdPXZbMV1bMF0sZVtoXVtmKzFdPXZbMV1bMV07eT1hKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPXlbMF0sZVtoXVsxXT15WzFdLHk9YShbdFtoXVtfLTFdLGVbaF1bXy0xXV0sW3RbaF1bXy0zXSxlW2hdW18tM11dLFt0W2hdW18tNF0sZVtoXVtfLTRdXSksdFtoXVtfLTJdPXlbMF0sZVtoXVtfLTJdPXlbMV19aWYobClmb3IoZj0wO2Y8XztmKyspe2ZvcihoPTM7aDx3LTM7aCs9Myl2PW4oW3RbaC0zXVtmXSxlW2gtM11bZl1dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2grM11bZl0sZVtoKzNdW2ZdXSxsKSx0W2gtMV1bZl09dlswXVswXSxlW2gtMV1bZl09dlswXVsxXSx0W2grMV1bZl09dlsxXVswXSxlW2grMV1bZl09dlsxXVsxXTt5PWEoW3RbMF1bZl0sZVswXVtmXV0sW3RbMl1bZl0sZVsyXVtmXV0sW3RbM11bZl0sZVszXVtmXV0pLHRbMV1bZl09eVswXSxlWzFdW2ZdPXlbMV0seT1hKFt0W3ctMV1bZl0sZVt3LTFdW2ZdXSxbdFt3LTNdW2ZdLGVbdy0zXVtmXV0sW3Rbdy00XVtmXSxlW3ctNF1bZl1dKSx0W3ctMl1bZl09eVswXSxlW3ctMl1bZl09eVsxXX1pZihzJiZsKWZvcihoPTE7aDx3O2grPShoKzEpJTM9PTA/MjoxKXtmb3IoZj0zO2Y8Xy0zO2YrPTMpdj1uKFt0W2hdW2YtM10sZVtoXVtmLTNdXSxbdFtoXVtmXSxlW2hdW2ZdXSxbdFtoXVtmKzNdLGVbaF1bZiszXV0scyksdFtoXVtmLTFdPS41Kih0W2hdW2YtMV0rdlswXVswXSksZVtoXVtmLTFdPS41KihlW2hdW2YtMV0rdlswXVsxXSksdFtoXVtmKzFdPS41Kih0W2hdW2YrMV0rdlsxXVswXSksZVtoXVtmKzFdPS41KihlW2hdW2YrMV0rdlsxXVsxXSk7eT1hKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPS41Kih0W2hdWzFdK3lbMF0pLGVbaF1bMV09LjUqKGVbaF1bMV0reVsxXSkseT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09LjUqKHRbaF1bXy0yXSt5WzBdKSxlW2hdW18tMl09LjUqKGVbaF1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHsiLi4vLi4vbGliIjo0OTgsIi4vY2F0bXVsbF9yb20iOjY5NH1dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLHIqPTMsbio9Mzt2YXIgaD1pKmkscD0xLWksZD1wKnAsbT1wKmkqMixnPS0zKmQsdj0zKihkLW0pLHk9MyoobS1oKSx4PTMqaCxiPWEqYSxfPWIqYSx3PTEtYSxUPXcqdyxrPVQqdztmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKW89ZyoodT10W2ZdKVtuXVtyXSt2KnVbbl1bcisxXSt5KnVbbl1bcisyXSt4KnVbbl1bciszXSxzPWcqdVtuKzFdW3JdK3YqdVtuKzFdW3IrMV0reSp1W24rMV1bcisyXSt4KnVbbisxXVtyKzNdLGw9Zyp1W24rMl1bcl0rdip1W24rMl1bcisxXSt5KnVbbisyXVtyKzJdK3gqdVtuKzJdW3IrM10sYz1nKnVbbiszXVtyXSt2KnVbbiszXVtyKzFdK3kqdVtuKzNdW3IrMl0reCp1W24rM11bciszXSxlW2ZdPWsqbyszKihUKmEqcyt3KmIqbCkrXypjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLHIqPTM7dmFyIHU9aSppLGY9MS1pLGg9ZipmLHA9ZippKjIsZD0tMypoLG09MyooaC1wKSxnPTMqKHAtdSksdj0zKnUseT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWQqKGM9dFtsXSlbbl1bcl0rbSpjW25dW3IrMV0rZypjW25dW3IrMl0rdipjW25dW3IrM10scz1kKmNbbisxXVtyXSttKmNbbisxXVtyKzFdK2cqY1tuKzFdW3IrMl0rdipjW24rMV1bciszXSxlW2xdPXkqbythKnM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLG4qPTM7dmFyIGg9YSphLHA9aCphLGQ9MS1hLG09ZCpkLGc9bSpkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oZj10W3VdKVtuXVtyKzFdLWZbbl1bcl0scz1mW24rMV1bcisxXS1mW24rMV1bcl0sbD1mW24rMl1bcisxXS1mW24rMl1bcl0sYz1mW24rM11bcisxXS1mW24rM11bcl0sZVt1XT1nKm8rMyoobSphKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSk7dmFyIHU9MS1hO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz0oYz10W2xdKVtuXVtyKzFdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW24rMV1bcl0sZVtsXT11Km8rYSpzO3JldHVybiBlfX19LHt9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPWgqaSxkPTEtaSxtPWQqZCxnPW0qZCx2PWEqYSx5PTEtYSx4PXkqeSxiPXkqYSoyLF89LTMqeCx3PTMqKHgtYiksVD0zKihiLXYpLGs9Myp2O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz1fKih1PXRbZl0pW25dW3JdK3cqdVtuKzFdW3JdK1QqdVtuKzJdW3JdK2sqdVtuKzNdW3JdLHM9Xyp1W25dW3IrMV0rdyp1W24rMV1bcisxXStUKnVbbisyXVtyKzFdK2sqdVtuKzNdW3IrMV0sbD1fKnVbbl1bcisyXSt3KnVbbisxXVtyKzJdK1QqdVtuKzJdW3IrMl0rayp1W24rM11bcisyXSxjPV8qdVtuXVtyKzNdK3cqdVtuKzFdW3IrM10rVCp1W24rMl1bciszXStrKnVbbiszXVtyKzNdLGVbZl09ZypvKzMqKG0qaSpzK2QqaCpsKStwKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLHIqPTM7dmFyIGg9YSphLHA9aCphLGQ9MS1hLG09ZCpkLGc9bSpkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oZj10W3VdKVtuKzFdW3JdLWZbbl1bcl0scz1mW24rMV1bcisxXS1mW25dW3IrMV0sbD1mW24rMV1bcisyXS1mW25dW3IrMl0sYz1mW24rMV1bciszXS1mW25dW3IrM10sZVt1XT1nKm8rMyoobSphKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxuKj0zO3ZhciB1PTEtaSxmPWEqYSxoPTEtYSxwPWgqaCxkPWgqYSoyLG09LTMqcCxnPTMqKHAtZCksdj0zKihkLWYpLHk9MypmO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1tKihjPXRbbF0pW25dW3JdK2cqY1tuKzFdW3JdK3YqY1tuKzJdW3JdK3kqY1tuKzNdW3JdLHM9bSpjW25dW3IrMV0rZypjW24rMV1bcisxXSt2KmNbbisyXVtyKzFdK3kqY1tuKzNdW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWk7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW24rMV1bcl0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbl1bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9fX0se31dLDcwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1lLTIsbz1yLTI7cmV0dXJuIG4mJmk/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLHMsbCxjLHUsZjtlfHwoZT1bXSk7dmFyIGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7aCo9MyxwKj0zO3ZhciBnPWQqZCx2PWcqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPW0qbSx3PV8qbSxUPTEtbSxrPVQqVCxBPWsqVDtmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKWk9YioodT10W2ZdKVtwXVtoXSszKih4KmQqdVtwXVtoKzFdK3kqZyp1W3BdW2grMl0pK3YqdVtwXVtoKzNdLHM9Yip1W3ArMV1baF0rMyooeCpkKnVbcCsxXVtoKzFdK3kqZyp1W3ArMV1baCsyXSkrdip1W3ArMV1baCszXSxsPWIqdVtwKzJdW2hdKzMqKHgqZCp1W3ArMl1baCsxXSt5KmcqdVtwKzJdW2grMl0pK3YqdVtwKzJdW2grM10sYz1iKnVbcCszXVtoXSszKih4KmQqdVtwKzNdW2grMV0reSpnKnVbcCszXVtoKzJdKSt2KnVbcCszXVtoKzNdLGVbZl09QSppKzMqKGsqbSpzK1QqXypsKSt3KmM7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zO3ZhciBnPWQqZCx2PWcqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPTEtbTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXSttKmZbcCsxXVtoXSxzPV8qZltwXVtoKzFdK20qZltwKzFdW2grMV0sbD1fKmZbcF1baCsyXSttKmZbcCsxXVtoKzFdLGM9XypmW3BdW2grM10rbSpmW3ArMV1baCsxXSxlW3VdPWIqaSszKih4KmQqcyt5KmcqbCkrdipjO3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxmLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7cCo9Mzt2YXIgZz1tKm0sdj1nKm0seT0xLW0seD15KnksYj14KnksXz0xLWQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylpPV8qKGY9dFt1XSlbcF1baF0rZCpmW3BdW2grMV0scz1fKmZbcCsxXVtoXStkKmZbcCsxXVtoKzFdLGw9XypmW3ArMl1baF0rZCpmW3ArMl1baCsxXSxjPV8qZltwKzNdW2hdK2QqZltwKzNdW2grMV0sZVt1XT1iKmkrMyooeCptKnMreSpnKmwpK3YqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1PU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItdSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tZikpLGQ9MS1wLG09MS1oO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspaT1tKihjPXRbbF0pW2ZdW3VdK2gqY1tmXVt1KzFdLHM9bSpjW2YrMV1bdV0raCpjW2YrMV1bdSsxXSxlW2xdPWQqaStwKnM7cmV0dXJuIGV9fX0se31dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHlfZGVmYXVsdHMiKSxhPXQoIi4vYWJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9jbGlwUGF0aElkPSJjbGlwIitlLnVpZCsiY2FycGV0Ijt2YXIgdT1jKCJjb2xvciIscy5kZWZhdWx0TGluZSk7KG4uY29lcmNlRm9udChjLCJmb250IiksYygiY2FycGV0IiksYSh0LGUsbCxjLHUpLGUuYSYmZS5iKT8oZS5hLmxlbmd0aDwzJiYoZS5hYXhpcy5zbW9vdGhpbmc9MCksZS5iLmxlbmd0aDwzJiYoZS5iYXhpcy5zbW9vdGhpbmc9MCksaSh0LGUsYyl8fChlLnZpc2libGU9ITEpLGUuX2NoZWF0ZXImJmMoImNoZWF0ZXJzbG9wZSIpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9saWIiOjQ5OCwiLi9hYl9kZWZhdWx0cyI6Njg0LCIuL2F0dHJpYnV0ZXMiOjY4NiwiLi94eV9kZWZhdWx0cyI6NzEwfV0sNzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikscGxvdDp0KCIuL3Bsb3QiKSxjYWxjOnQoIi4vY2FsYyIpLGFuaW1hdGFibGU6ITAsaXNDb250YWluZXI6ITAsbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhcnBldCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNhcnBldEF4aXMiLCJub3RMZWdlbmRJc29sYXRhYmxlIiwibm9NdWx0aUNhdGVnb3J5Iiwibm9Ib3ZlciIsIm5vU29ydGluZ0J5VmFsdWUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2MywiLi9hdHRyaWJ1dGVzIjo2ODYsIi4vY2FsYyI6NjkwLCIuL2RlZmF1bHRzIjo3MDEsIi4vcGxvdCI6NzA3fV0sNzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuX2Z1bGxEYXRhLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dC5fZnVsbERhdGFbaV07aWYoYS5pbmRleCE9PWUuaW5kZXgmJigiY2FycGV0Ij09PWEudHlwZSYmKHJ8fChyPWEpLGEuY2FycGV0PT09ZS5jYXJwZXQpKSlyZXR1cm4gYX1yZXR1cm4gcn19LHt9XSw3MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIG4saT1bXSxhPXI/MzoxO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKz1hKWkucHVzaCh0W25dKyIsIitlW25dKSxyJiZuPHQubGVuZ3RoLWEmJihpLnB1c2goIkMiKSxpLnB1c2goW3RbbisxXSsiLCIrZVtuKzFdLHRbbisyXSsiLCIrZVtuKzJdKyIgIl0uam9pbigiICIpKSk7cmV0dXJuIGkuam9pbihyPyIiOiJMIil9fSx7fV0sNzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtmb3Iobih0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxpPTA7aTxlLmxlbmd0aDtpKyspdFtpXT1yKGVbaV0pO3JldHVybiB0fX0seyIuLi8uLi9saWIiOjQ5OH1dLDcwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWlbMF0qdC5kcGR4KGUpLHM9aVsxXSp0LmRwZHkociksbD0xLGM9MTtpZihhKXt2YXIgdT1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSksZj1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksaD0oaVswXSphWzBdK2lbMV0qYVsxXSkvdS9mO2M9TWF0aC5tYXgoMCxoKX12YXIgcD0xODAqTWF0aC5hdGFuMihzLG8pL01hdGguUEk7cmV0dXJuIHA8LTkwPyhwKz0xODAsbD0tbCk6cD45MCYmKHAtPTE4MCxsPS1sKSx7YW5nbGU6cCxmbGlwOmwscDp0LmMycChuLGUsciksb2Zmc2V0TXVsdHBsaWVyOmN9fX0se31dLDcwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4vbWFwXzFkX2FycmF5Iiksbz10KCIuL21ha2VwYXRoIikscz10KCIuL29yaWVudF90ZXh0IiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJSb3RhdGUsZj1jLnN0clRyYW5zbGF0ZSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKTtmdW5jdGlvbiBwKHQsZSxyLGkscyxsKXt2YXIgYz0iY29uc3QtIitzKyItbGluZXMiLHU9ci5zZWxlY3RBbGwoIi4iK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSx1LmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxmPSJNIitvKGMsdSxpLnNtb290aGluZyk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZikuc3R5bGUoInN0cm9rZS13aWR0aCIsaS53aWR0aCkuc3R5bGUoInN0cm9rZSIsaS5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixhLG8sYyxoLHApe3ZhciBkPWMuc2VsZWN0QWxsKCJ0ZXh0LiIrcCkuZGF0YShoKTtkLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChwLCEwKTt2YXIgbT0wLGc9e307cmV0dXJuIGQuZWFjaCgoZnVuY3Rpb24obyxjKXt2YXIgaDtpZigiYXV0byI9PT1vLmF4aXMudGlja2FuZ2xlKWg9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBwPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7aD1zKGEsZSxyLG8ueHksW01hdGguY29zKHApLE1hdGguc2luKHApXSl9Y3x8KGc9e2FuZ2xlOmguYW5nbGUsZmxpcDpoLmZsaXB9KTt2YXIgZD0oby5lbmRBbmNob3I/LTE6MSkqaC5mbGlwLHY9bi5zZWxlY3QodGhpcykuYXR0cih7InRleHQtYW5jaG9yIjpkPjA/InN0YXJ0IjoiZW5kIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCkseT1pLmJCb3godGhpcyk7di5hdHRyKCJ0cmFuc2Zvcm0iLGYoaC5wWzBdLGgucFsxXSkrdShoLmFuZ2xlKStmKG8uYXhpcy5sYWJlbHBhZGRpbmcqZCwuMyp5LmhlaWdodCkpLG09TWF0aC5tYXgobSx5LndpZHRoK28uYXhpcy5sYWJlbHBhZGRpbmcpfSkpLGQuZXhpdCgpLnJlbW92ZSgpLGcubWF4RXh0ZW50PW0sZ31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMsZj10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lWzBdLGg9aS50cmFjZSxtPWguYWF4aXMsZz1oLmJheGlzLHk9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1pbm9ybGF5ZXIiKSx4PWMuZW5zdXJlU2luZ2xlKHIsImciLCJtYWpvcmxheWVyIiksYj1jLmVuc3VyZVNpbmdsZShyLCJnIiwiYm91bmRhcnlsYXllciIpLF89Yy5lbnN1cmVTaW5nbGUociwiZyIsImxhYmVsbGF5ZXIiKTtyLnN0eWxlKCJvcGFjaXR5IixoLm9wYWNpdHkpLHAobCx1LHgsbSwiYSIsbS5fZ3JpZGxpbmVzKSxwKGwsdSx4LGcsImIiLGcuX2dyaWRsaW5lcykscChsLHUseSxtLCJhIixtLl9taW5vcmdyaWRsaW5lcykscChsLHUseSxnLCJiIixnLl9taW5vcmdyaWRsaW5lcykscChsLHUsYixtLCJhLWJvdW5kYXJ5IixtLl9ib3VuZGFyeWxpbmVzKSxwKGwsdSxiLGcsImItYm91bmRhcnkiLGcuX2JvdW5kYXJ5bGluZXMpO3ZhciB3PWQodCxsLHUsaCxpLF8sbS5fbGFiZWxzLCJhLWxhYmVsIiksVD1kKHQsbCx1LGgsaSxfLGcuX2xhYmVscywiYi1sYWJlbCIpOyFmdW5jdGlvbih0LGUscixuLGksYSxvLGwpe3ZhciB1LGYsaCxwLGQ9Yy5hZ2dOdW1zKE1hdGgubWluLG51bGwsci5hKSxtPWMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHIuYSksZz1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmIpLHk9Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5iKTt1PS41KihkK20pLGY9ZyxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxmKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGgsci5keHlkYl9yb3VnaCh1LGYpKSk7dih0LGUscixuLGgscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1kLGY9LjUqKGcreSksaD1yLmFiMnh5KHUsZiwhMCkscD1yLmR4eWRiX3JvdWdoKHUsZiksdm9pZCAwPT09bC5hbmdsZSYmYy5leHRlbmRGbGF0KGwscyhyLGksYSxoLHIuZHh5ZGFfcm91Z2godSxmKSkpO3YodCxlLHIsbixoLHAsci5iYXhpcyxpLGEsbCwiYi10aXRsZSIpfSh0LF8saCxpLGwsdSx3LFQpLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCx1LGYsaD1yLnNlbGVjdCgiIyIrdC5fY2xpcFBhdGhJZCk7aC5zaXplKCl8fChoPXIuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNhcnBldGNsaXAiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoaCwicGF0aCIsImNhcnBldGJvdW5kYXJ5IiksZD1lLmNsaXBzZWdtZW50cyxtPVtdO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspcz1kW2ZdLGw9YShbXSxzLngsbi5jMnApLHU9YShbXSxzLnksaS5jMnApLG0ucHVzaChvKGwsdSxzLmJpY3ViaWMpKTt2YXIgZz0iTSIrbS5qb2luKCJMIikrIloiO2guYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cigiZCIsZyl9KGgsaSxmLGwsdSl9KSl9O3ZhciBtPWguTElORV9TUEFDSU5HLGc9KDEtaC5NSURfU0hJRlQpL20rMTtmdW5jdGlvbiB2KHQsZSxyLGEsbyxjLGgscCxkLHYseSl7dmFyIHg9W107aC50aXRsZS50ZXh0JiZ4LnB1c2goaC50aXRsZS50ZXh0KTt2YXIgYj1lLnNlbGVjdEFsbCgidGV4dC4iK3kpLmRhdGEoeCksXz12Lm1heEV4dGVudDtiLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh5LCEwKSxiLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLHAsZCxvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGguc2hvd3RpY2tsYWJlbHMpJiYoXz0wKTt2YXIgYT1oLnRpdGxlLmZvbnQuc2l6ZTtfKz1hK2gudGl0bGUub2Zmc2V0O3ZhciB5PSh2LmFuZ2xlKyh2LmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCx4PXk+OTAmJnk8MjcwLGI9bi5zZWxlY3QodGhpcyk7Yi50ZXh0KGgudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx4JiYoXz0oLWwubGluZUNvdW50KGIpK2cpKm0qYS1fKSxiLmF0dHIoInRyYW5zZm9ybSIsZihlLnBbMF0sZS5wWzFdKSt1KGUuYW5nbGUpK2YoMCxfKSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGkuZm9udCxoLnRpdGxlLmZvbnQpfSkpLGIuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDY2LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4vbWFrZXBhdGgiOjcwNCwiLi9tYXBfMWRfYXJyYXkiOjcwNSwiLi9vcmllbnRfdGV4dCI6NzA2LCJAcGxvdGx5L2QzIjo1OH1dLDcwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliL3NlYXJjaCIpLmZpbmRCaW4sYT10KCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiKSxvPXQoIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiKSxzPXQoIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKSxsPXQoIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLG09clswXSxnPXJbdS0xXSx2PWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PXYqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsbS09YixnKz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPm0mJmU8Z30sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPG18fGU+Z30sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgZixoLHAsZCxtPTAsZz0wLHY9W107bjxlWzBdPyhmPTAsaD0wLG09KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhmPWMtMixoPTEsbT0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6aD1vLShmPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLGc9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsZz0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksbSYmKHQuZHh5ZGkodixmLHAsaCxkKSxsWzBdKz12WzBdKm0sbFsxXSs9dlsxXSptKSxnJiYodC5keHlkaih2LGYscCxoLGQpLGxbMF0rPXZbMF0qZyxsWzFdKz12WzFdKmcpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXYqKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6NTE4LCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjY5NiwiLi9jb25zdGFudHMiOjY5NywiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6Njk4LCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo2OTksIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjcwMH1dLDcwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGYoZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX12YXIgaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQ9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZihpLGEpKSxUPU1hdGgubWF4KFQsTWF0aC5hYnModFthXVtpXSkpO2lmKCFzLmxlbmd0aClyZXR1cm4gdDt2YXIgaz0wLEE9MCxNPXMubGVuZ3RoO2Rve2ZvcihrPTAsbz0wO288TTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFMsRSxMLEMsUCxJLE89MCx6PTA7MD09PWk/KEw9ZVtQPU1hdGgubWluKGMtMSwyKV0sQz1lWzFdLFM9dFthXVtQXSx6Kz0oRT10W2FdWzFdKSsoRS1TKSooZVswXS1DKS8oQy1MKSxPKyspOmk9PT1jLTEmJihMPWVbUD1NYXRoLm1heCgwLGMtMyldLEM9ZVtjLTJdLFM9dFthXVtQXSx6Kz0oRT10W2FdW2MtMl0pKyhFLVMpKihlW2MtMV0tQykvKEMtTCksTysrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSx6Kz0oKHA9clthXS1yW2EtMV0pKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKHAraCksTysrKSwwPT09YT8oTD1yW0k9TWF0aC5taW4odS0xLDIpXSxDPXJbMV0sUz10W0ldW2ldLHorPShFPXRbMV1baV0pKyhFLVMpKihyWzBdLUMpLyhDLUwpLE8rKyk6YT09PXUtMSYmKEw9cltJPU1hdGgubWF4KDAsdS0zKV0sQz1yW3UtMl0sUz10W0ldW2ldLHorPShFPXRbdS0yXVtpXSkrKEUtUykqKHJbdS0xXS1DKS8oQy1MKSxPKyspLCgwPT09YXx8YT09PXUtMSkmJmk+MCYmaTxjLTEmJihoPWVbaSsxXS1lW2ldLHorPSgocD1lW2ldLWVbaS0xXSkqdFthXVtpKzFdK2gqdFthXVtpLTFdKS8ocCtoKSxPKyspLE8/ei89TzooZD1lW2krMV0tZVtpXSxtPWVbaV0tZVtpLTFdLHg9KGc9clthKzFdLXJbYV0pKih2PXJbYV0tclthLTFdKSooZyt2KSx6PSgoeT1kKm0qKGQrbSkpKih2KnRbYSsxXVtpXStnKnRbYS0xXVtpXSkreCoobSp0W2FdW2krMV0rZCp0W2FdW2ktMV0pKS8oeCoobStkKSt5Kih2K2cpKSksays9KF89KGI9ei10W2FdW2ldKS9UKSpfLHc9Tz8wOi44NSx0W2FdW2ldKz1iKigxK3cpfWs9TWF0aC5zcXJ0KGspfXdoaWxlKEErKzwxMDAmJms+MWUtNSk7cmV0dXJuIG4ubG9nKCJTbW9vdGhlciBjb252ZXJnZWQgdG8iLGssImFmdGVyIixBLCJpdGVyYXRpb25zIiksdH19LHsiLi4vLi4vbGliIjo0OTh9XSw3MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheTFEO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9cigieCIpLGE9aSYmaS5sZW5ndGgsbz1yKCJ5Iikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0seyIuLi8uLi9saWIiOjQ5OH1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6aS5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxnZW9qc29uOmwoe30saS5nZW9qc29uLHt9KSxmZWF0dXJlaWRrZXk6aS5mZWF0dXJlaWRrZXksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLG1hcmtlcjp7bGluZTp7Y29sb3I6bCh7fSxjLmNvbG9yLHtkZmx0OnN9KSx3aWR0aDpsKHt9LGMud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OmkudW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOmwoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbImxvY2F0aW9uIiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKSxzaG93bGVnZW5kOmwoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjk2NH1dLDcxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjPWUuX2xlbmd0aCx1PW5ldyBBcnJheShjKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gbCh0KXx8bih0KX06bDtmb3IodmFyIGY9MDtmPGM7ZisrKXt2YXIgaD11W2ZdPXt9LHA9ZS5sb2NhdGlvbnNbZl0sZD1lLnpbZl07cihwKSYmbihkKT8oaC5sb2M9cCxoLno9ZCk6KGgubG9jPW51bGwsaC56PWkpLGguaW5kZXg9Zn1yZXR1cm4gbyh1LGUpLGEodCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxzKHUsZSksdX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6OTIxLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjQsImZhc3QtaXNudW1lcmljIjoxODV9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7aWYobCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGgpe2UuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk7dmFyIHUsZj1zKCJnZW9qc29uIik7KCJzdHJpbmciPT10eXBlb2YgZiYmIiIhPT1mfHxuLmlzUGxhaW5PYmplY3QoZikpJiYodT0iZ2VvanNvbi1pZCIpLCJnZW9qc29uLWlkIj09PXMoImxvY2F0aW9ubW9kZSIsdSkmJnMoImZlYXR1cmVpZGtleSIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygibWFya2VyLmxpbmUud2lkdGgiKSYmcygibWFya2VyLmxpbmUuY29sb3IiKSxzKCJtYXJrZXIub3BhY2l0eSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscyl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MzcxLCIuLi8uLi9saWIiOjQ5OCwiLi9hdHRyaWJ1dGVzIjo3MTF9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLno7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdC5jdD1hLmN0LHR9fSx7fV0sNzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10LmNkLGY9dVswXS50cmFjZSxoPXQuc3VicGxvdCxwPVtlLHJdLGQ9W2UrMzYwLHJdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKHApJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoZCkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LnpMYWJlbD1uLnRpY2tUZXh0KGgubW9ja0F4aXMsaC5tb2NrQXhpcy5jMmwoby56KSwiaG92ZXIiKS50ZXh0LHQuaG92ZXJ0ZW1wbGF0ZT1vLmhvdmVydGVtcGxhdGUsZnVuY3Rpb24odCxlLHIpe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49ci5oaXx8ZS5ob3ZlcmluZm8sbz1TdHJpbmcoci5sb2MpLHM9ImFsbCI9PT1uP2kuaG92ZXJpbmZvLmZsYWdzOm4uc3BsaXQoIisiKSxsPS0xIT09cy5pbmRleE9mKCJuYW1lIiksYz0tMSE9PXMuaW5kZXhPZigibG9jYXRpb24iKSx1PS0xIT09cy5pbmRleE9mKCJ6IiksZj0tMSE9PXMuaW5kZXhPZigidGV4dCIpLGg9W107IWwmJmM/dC5uYW1lT3ZlcnJpZGU9bzoobCYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksYyYmaC5wdXNoKG8pKTt1JiZoLnB1c2godC56TGFiZWwpO2YmJmEocixlLGgpO3QuZXh0cmFUZXh0PWguam9pbigiPGJyPiIpfSh0LGYsbyksW3RdfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi9hdHRyaWJ1dGVzIjo3MTF9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxjYWxjR2VvSlNPTjp0KCIuL3Bsb3QiKS5jYWxjR2VvSlNPTixwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2VvIiksY2F0ZWdvcmllczpbImdlbyIsIm5vT3BhY2l0eSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nZW8iOjU4NCwiLi4vaGVhdG1hcC9jb2xvcmJhciI6NzkwLCIuL2F0dHJpYnV0ZXMiOjcxMSwiLi9jYWxjIjo3MTIsIi4vZGVmYXVsdHMiOjcxMywiLi9ldmVudF9kYXRhIjo3MTQsIi4vaG92ZXIiOjcxNSwiLi9wbG90Ijo3MTcsIi4vc2VsZWN0Ijo3MTgsIi4vc3R5bGUiOjcxOX1dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGk9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9hLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGkudG9wb2pzb24pLGY9W10saD1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxtPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmEubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihtKXtkLmdlb2pzb249bSxkLmN0PW0ucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1hLmZlYXR1cmUycG9seWdvbnMobSk7dmFyIGc9YS5jb21wdXRlQmJveChtKTtmLnB1c2goZ1swXSxnWzJdKSxoLnB1c2goZ1sxXSxnWzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgdj1hLmNvbXB1dGVCYm94KGEuZ2V0VHJhY2VHZW9qc29uKHIpKTtmPVt2WzBdLHZbMl1dLGg9W3ZbMV0sdlszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxmLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsaCx5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLHIuZXhpdCgpLnJlbW92ZSgpLGwodCxlKX0pKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTEsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NTI3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4vc3R5bGUiOjcxOSwiQHBsb3RseS9kMyI6NTh9XSw3MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLGw9ci5tYXJrZXJ8fHt9LGM9bC5saW5lfHx7fSx1PW8ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpO3MuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSkpLGEuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIkBwbG90bHkvZDMiOjU4fV0sNzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0saSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo3MTF9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGE9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9YS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9aS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGkuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxmPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBmO3ZhciBoPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighaClyZXR1cm4gZjt2YXIgcCxkLG0sZz1hLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSx2PWUubWFya2VyLHk9di5saW5lfHx7fTtpLmlzQXJyYXlPclR5cGVkQXJyYXkodi5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8raS5jb25zdHJhaW4oZSwwLDEpOjB9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKG09ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9ZyhiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxtJiYody5tbHc9bShiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIFQ9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOlR9KSxpLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOlR9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixmLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjKHQpLGZ9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTEsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTIsImZhc3QtaXNudW1lcmljIjoxODV9XSw3MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4vYXR0cmlidXRlcyI6NzIwfV0sNzIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vY2hvcm9wbGV0aC9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuLi9jaG9yb3BsZXRoL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9jaG9yb3BsZXRoL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZU9uU2VsZWN0KGUpfSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49ci5sZW5ndGgtMjtuPj0wO24tLSl7dmFyIGk9cltuXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIGkmJjA9PT1pLmluZGV4T2YoIndhdGVyIikpZm9yKHZhciBhPW4rMTthPHIubGVuZ3RoO2ErKylpZigic3RyaW5nIj09dHlwZW9mKGk9clthXS5pZCkmJi0xPT09aS5pbmRleE9mKCJwbG90bHktIikpcmV0dXJuIGl9fSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aG1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e2hyX25hbWU6ImNob3JvcGxldGhfbWFwYm94In19fSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6NjA4LCIuLi9jaG9yb3BsZXRoL2NhbGMiOjcxMiwiLi4vY2hvcm9wbGV0aC9ldmVudF9kYXRhIjo3MTQsIi4uL2Nob3JvcGxldGgvaG92ZXIiOjcxNSwiLi4vY2hvcm9wbGV0aC9zZWxlY3QiOjcxOCwiLi4vaGVhdG1hcC9jb2xvcmJhciI6NzkwLCIuL2F0dHJpYnV0ZXMiOjcyMCwiLi9kZWZhdWx0cyI6NzIyLCIuL3Bsb3QiOjcyNH1dLDcyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKS5jb252ZXJ0LGk9dCgiLi9jb252ZXJ0IikuY29udmVydE9uU2VsZWN0LGE9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXg7ZnVuY3Rpb24gbyh0LGUpe3RoaXMudHlwZT0iY2hvcm9wbGV0aG1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkPSJzb3VyY2UtIitlLHRoaXMubGF5ZXJMaXN0PVtbImZpbGwiLGErZSsiLWZpbGwiXSxbImxpbmUiLGErZSsiLWxpbmUiXV0sdGhpcy5iZWxvdz1udWxsfXZhciBzPW8ucHJvdG90eXBlO3MudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZShuKHQpKX0scy51cGRhdGVPblNlbGVjdD1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUoaSh0KSl9LHMuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj10aGlzLmxheWVyTGlzdCxuPWUuYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2UubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkKS5zZXREYXRhKHQuZ2VvanNvbiksbiE9PXRoaXMuYmVsb3cmJih0aGlzLl9yZW1vdmVMYXllcnMoKSx0aGlzLl9hZGRMYXllcnModCxuKSx0aGlzLmJlbG93PW4pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89YVswXSxzPWFbMV0sbD10W29dO2Uuc2V0T3B0aW9ucyhzLCJzZXRMYXlvdXRQcm9wZXJ0eSIsbC5sYXlvdXQpLCJ2aXNpYmxlIj09PWwubGF5b3V0LnZpc2liaWxpdHkmJmUuc2V0T3B0aW9ucyhzLCJzZXRQYWludFByb3BlcnR5IixsLnBhaW50KX19LHMuX2FkZExheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN1YnBsb3Qsbj10aGlzLmxheWVyTGlzdCxpPXRoaXMuc291cmNlSWQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9b1swXSxsPXRbc107ci5hZGRMYXllcih7dHlwZTpzLGlkOm9bMV0sc291cmNlOmksbGF5b3V0OmwubGF5b3V0LHBhaW50OmwucGFpbnR9LGUpfX0scy5fcmVtb3ZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT10aGlzLmxheWVyTGlzdCxyPWUubGVuZ3RoLTE7cj49MDtyLS0pdC5yZW1vdmVMYXllcihlW3JdWzFdKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0aGlzLl9yZW1vdmVMYXllcnMoKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBvKHQsci51aWQpLGE9aS5zb3VyY2VJZCxzPW4oZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdO3JldHVybiB0Lm1hcC5hZGRTb3VyY2UoYSx7dHlwZToiZ2VvanNvbiIsZGF0YTpzLmdlb2pzb259KSxpLl9hZGRMYXllcnMocyxsKSxlWzBdLnRyYWNlLl9nbFRyYWNlPWksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6NjA2LCIuL2NvbnZlcnQiOjcyMX1dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJhYnNvbHV0ZSJdLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJzY2FsZWQifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidGlwIiwidGFpbCIsImNtIiwiY2VudGVyIl0sZGZsdDoiY20ifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJub3JtIl19KSx1aG92ZXJmb3JtYXQ6aSgidSIsMSksdmhvdmVyZm9ybWF0OmkoInYiLDEpLHdob3ZlcmZvcm1hdDppKCJ3IiwxKSx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksemhvdmVyZm9ybWF0OmkoInoiKSxzaG93bGVnZW5kOmwoe30scy5zaG93bGVnZW5kLHtkZmx0OiExfSl9O2woYyxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSkpLGMuaG92ZXJpbmZvPWwoe30scy5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjg2Mn1dLDcyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnUsaT1lLnYsYT1lLncsbz1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxyLmxlbmd0aCxpLmxlbmd0aCxhLmxlbmd0aCkscz0tMS8wLGw9MS8wLGM9MDtjPG87YysrKXt2YXIgdT1yW2NdLGY9aVtjXSxoPWFbY10scD1NYXRoLnNxcnQodSp1K2YqZitoKmgpO3M9TWF0aC5tYXgocyxwKSxsPU1hdGgubWluKGwscCl9ZS5fbGVuPW8sZS5fbm9ybU1heD1zLG4odCxlLHt2YWxzOltsLHNdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6MzY5fV0sNzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2NvbmUzZCxpPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2NvbmUzZC5jcmVhdGVDb25lTWVzaCxhPXQoIi4uLy4uL2xpYiIpLnNpbXBsZU1hcCxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxsPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciBmPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0saD17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LHA9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgbj1yW2VdLG89aVtmW2VdXTtyZXR1cm4gYSh0LChmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pKX1jLnZlY3RvcnM9bCh1KGUudSwieGF4aXMiKSx1KGUudiwieWF4aXMiKSx1KGUudywiemF4aXMiKSxlLl9sZW4pLGMucG9zaXRpb25zPWwodShlLngsInhheGlzIiksdShlLnksInlheGlzIiksdShlLnosInpheGlzIiksZS5fbGVuKTt2YXIgZD1zKGUpO2MuY29sb3JtYXA9byhlKSxjLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZC5taW4vZS5fbm9ybU1heCxkLm1heC9lLl9ub3JtTWF4XSxjLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sInNjYWxlZCI9PT1lLnNpemVtb2RlP2MuY29uZVNpemU9ZS5zaXplcmVmfHwuNTpjLmNvbmVTaXplPWUuc2l6ZXJlZiYmZS5fbm9ybU1heD9lLnNpemVyZWYvZS5fbm9ybU1heDouNTt2YXIgbT1uKGMpLGc9ZS5saWdodHBvc2l0aW9uO3JldHVybiBtLmxpZ2h0UG9zaXRpb249W2cueCxnLnksZy56XSxtLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LG0uZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsbS5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLG0ucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLG0uZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsbS5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9cFtlLmFuY2hvcl0qbS52ZWN0b3JTY2FsZSptLmNvbmVTY2FsZSplLl9ub3JtTWF4LG19dS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5kYXRhPXQ7dmFyIGU9ZCh0aGlzLnNjZW5lLHQpO3RoaXMubWVzaC51cGRhdGUoZSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLG49ZCh0LGUpLGE9aShyLG4pLG89bmV3IGModCxlLnVpZCk7cmV0dXJuIG8ubWVzaD1hLG8uZGF0YT1lLGEuX3RyYWNlPW8sdC5nbHBsb3QuYWRkKGEpLG99fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTExOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTQsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6NjA0fV0sNzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxmPXMoIngiKSxoPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzaXplcmVmIikscygic2l6ZW1vZGUiKSxzKCJhbmNob3IiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJ1aG92ZXJmb3JtYXQiKSxzKCJ2aG92ZXJmb3JtYXQiKSxzKCJ3aG92ZXJmb3JtYXQiKSxzKCJ4aG92ZXJmb3JtYXQiKSxzKCJ5aG92ZXJmb3JtYXQiKSxzKCJ6aG92ZXJmb3JtYXQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4vYXR0cmlidXRlcyI6NzI1fV0sNzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbmUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0fSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo1OTMsIi4vYXR0cmlidXRlcyI6NzI1LCIuL2NhbGMiOjcyNiwiLi9jb252ZXJ0Ijo3MjcsIi4vZGVmYXVsdHMiOjcyOH1dLDczMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKSxvPWEuYXhpc0hvdmVyRm9ybWF0LHM9YS5kZXNjcmlwdGlvbk9ubHlOdW1iZXJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCx1PXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLHA9aC5DT01QQVJJU09OX09QUzIsZD1oLklOVEVSVkFMX09QUyxtPWkubGluZTtlLmV4cG9ydHM9Zih7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUseGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0dGVtcGxhdGU6Zih7fSxuLnRleHR0ZW1wbGF0ZSx7fSksdGV4dGZvbnQ6Zih7fSxuLnRleHRmb250LHt9KSxob3Zlcm9uZ2FwczpuLmhvdmVyb25nYXBzLGNvbm5lY3RnYXBzOmYoe30sbi5jb25uZWN0Z2Fwcyx7fSksZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxhdXRvY29udG91cjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiY29udG91cnMuc3RhcnQiOnZvaWQgMCwiY29udG91cnMuZW5kIjp2b2lkIDAsImNvbnRvdXJzLnNpemUiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXJzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZXZlbHMiLCJjb25zdHJhaW50Il0sZGZsdDoibGV2ZWxzIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2hvd2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDp1KHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToic3R5bGUifSksbGFiZWxmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246cygiY29udG91ciBsYWJlbCIpfSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQocCkuY29uY2F0KGQpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpmKHt9LG0uY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6YyxzbW9vdGhpbmc6Zih7fSxtLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0sbCgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6MzgyLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDcwLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjc4NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksaT10KCIuLi9oZWF0bWFwL2NhbGMiKSxhPXQoIi4vc2V0X2NvbnRvdXJzIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0LGUpLHM9clswXS56O2EoZSxzKTt2YXIgbCxjPWUuY29udG91cnMsdT1uLmV4dHJhY3RPcHRzKGUpO2lmKCJoZWF0bWFwIj09PWMuY29sb3JpbmcmJnUuYXV0byYmITE9PT1lLmF1dG9jb250b3VyKXt2YXIgZj1jLnN0YXJ0LGg9byhjKSxwPWMuc2l6ZXx8MSxkPU1hdGguZmxvb3IoKGgtZikvcCkrMTtpc0Zpbml0ZShwKXx8KHA9MSxkPTEpO3ZhciBtPWYtcC8yO2w9W20sbStkKnBdfWVsc2UgbD1zO3JldHVybiBuLmNhbGModCxlLHt2YWxzOmwsY0xldHRlcjoieiJ9KSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vaGVhdG1hcC9jYWxjIjo3ODgsIi4vZW5kX3BsdXMiOjc0MSwiLi9zZXRfY29udG91cnMiOjc0OX1dLDczMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT1uLno7c3dpdGNoKGUudHlwZSl7Y2FzZSJsZXZlbHMiOnZhciBhPU1hdGgubWluKGlbMF1bMF0saVswXVsxXSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtvLnByZWZpeEJvdW5kYXJ5PSFvLmVkZ2VwYXRocy5sZW5ndGgmJihhPm8ubGV2ZWx8fG8uc3RhcnRzLmxlbmd0aCYmYT09PW8ubGV2ZWwpfWJyZWFrO2Nhc2UiY29uc3RyYWludCI6aWYobi5wcmVmaXhCb3VuZGFyeT0hMSxuLmVkZ2VwYXRocy5sZW5ndGgpcmV0dXJuO3ZhciBzPW4ueC5sZW5ndGgsbD1uLnkubGVuZ3RoLGM9LTEvMCx1PTEvMDtmb3Iocj0wO3I8bDtyKyspdT1NYXRoLm1pbih1LGlbcl1bMF0pLHU9TWF0aC5taW4odSxpW3JdW3MtMV0pLGM9TWF0aC5tYXgoYyxpW3JdWzBdKSxjPU1hdGgubWF4KGMsaVtyXVtzLTFdKTtmb3Iocj0xO3I8cy0xO3IrKyl1PU1hdGgubWluKHUsaVswXVtyXSksdT1NYXRoLm1pbih1LGlbbC0xXVtyXSksYz1NYXRoLm1heChjLGlbMF1bcl0pLGM9TWF0aC5tYXgoYyxpW2wtMV1bcl0pO3ZhciBmLGgscD1lLnZhbHVlO3N3aXRjaChlLl9vcGVyYXRpb24pe2Nhc2UiPiI6cD5jJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSI8IjoocDx1fHxuLnN0YXJ0cy5sZW5ndGgmJnA9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmY9TWF0aC5taW4ocFswXSxwWzFdKSwoKGg9TWF0aC5tYXgocFswXSxwWzFdKSk8dXx8Zj5jfHxuLnN0YXJ0cy5sZW5ndGgmJmg9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmY9TWF0aC5taW4ocFswXSxwWzFdKSxoPU1hdGgubWF4KHBbMF0scFsxXSksZjx1JiZoPmMmJihuLnByZWZpeEJvdW5kYXJ5PSEwKX19fX0se31dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4vbWFrZV9jb2xvcl9tYXAiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4IixjYWxjOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLmNvbnRvdXJzLHM9ZS5saW5lLGw9by5zaXplfHwxLGM9by5jb2xvcmluZyx1PWkoZSx7aXNDb2xvcmJhcjohMH0pO2lmKCJoZWF0bWFwIj09PWMpe3ZhciBmPW4uZXh0cmFjdE9wdHMoZSk7ci5fZmlsbGdyYWRpZW50PWYucmV2ZXJzZXNjYWxlP24uZmxpcFNjYWxlKGYuY29sb3JzY2FsZSk6Zi5jb2xvcnNjYWxlLHIuX3pyYW5nZT1bZi5taW4sZi5tYXhdfWVsc2UiZmlsbCI9PT1jJiYoci5fZmlsbGNvbG9yPXUpO3IuX2xpbmU9e2NvbG9yOiJsaW5lcyI9PT1jP3U6cy5jb2xvcix3aWR0aDohMSE9PW8uc2hvd2xpbmVzP3Mud2lkdGg6MCxkYXNoOnMuZGFzaH0sci5fbGV2ZWxzPXtzdGFydDpvLnN0YXJ0LGVuZDphKG8pLHNpemU6bH19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi9lbmRfcGx1cyI6NzQxLCIuL21ha2VfY29sb3JfbWFwIjo3NDZ9XSw3MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsZil7dmFyIGgscCxkLG09ZS5jb250b3VycyxnPXIoImNvbnRvdXJzLm9wZXJhdGlvbiIpOyhtLl9vcGVyYXRpb249Y1tnXSxmdW5jdGlvbih0LGUpe3ZhciByOy0xPT09dS5pbmRleE9mKGUub3BlcmF0aW9uKT8odCgiY29udG91cnMudmFsdWUiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodCgiY29udG91cnMudmFsdWUiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixtKSwiPSI9PT1nP2g9bS5zaG93bGluZXM9ITA6KGg9cigiY29udG91cnMuc2hvd2xpbmVzIiksZD1yKCJmaWxsY29sb3IiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGgpJiYocD1yKCJsaW5lLmNvbG9yIixkJiZzKGQpP28oZS5maWxsY29sb3IsMSk6bCkscigibGluZS53aWR0aCIsMikscigibGluZS5kYXNoIikpO3IoImxpbmUuc21vb3RoaW5nIiksaShyLGEscCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDcwLCIuL2xhYmVsX2RlZmF1bHRzIjo3NDUsImZhc3QtaXNudW1lcmljIjoxODV9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxpPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXsiW10iOm8oIltdIiksIl1bIjpvKCJdWyIpLCI+IjpzKCI+IiksIjwiOnMoIjwiKSwiPSI6cygiPSIpfX0seyIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDcwLCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKCJjb250b3Vycy5zdGFydCIpLGE9bigiY29udG91cnMuZW5kIiksbz0hMT09PWl8fCExPT09YSxzPXIoImNvbnRvdXJzLnNpemUiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKCJhdXRvY29udG91ciIsITEpKSYmc3x8cigibmNvbnRvdXJzIil9fSx7fV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uZXh0ZW5kRmxhdCh7fSx0LHtlZGdlcGF0aHM6bi5leHRlbmREZWVwKFtdLHQuZWRnZXBhdGhzKSxwYXRoczpuLmV4dGVuZERlZXAoW10sdC5wYXRocyksc3RhcnRzOm4uZXh0ZW5kRGVlcChbXSx0LnN0YXJ0cyl9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXZlcnNlKCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3N3aXRjaChlKXtjYXNlIj0iOmNhc2UiPCI6cmV0dXJuIHQ7Y2FzZSI+Ijpmb3IoMSE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLiIpLGE9dFswXSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO2ZvcihyPTA7cjxhLnN0YXJ0cy5sZW5ndGg7cisrKWEuc3RhcnRzW3JdPXMoYS5zdGFydHNbcl0pO3JldHVybiB0O2Nhc2UiXVsiOnZhciBjPXM7cz1sLGw9YztjYXNlIltdIjpmb3IoMiE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLiIpLGE9aSh0WzBdKSxvPWkodFsxXSkscj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3Iocj0wO3I8YS5zdGFydHMubGVuZ3RoO3IrKylhLnN0YXJ0c1tyXT1zKGEuc3RhcnRzW3JdKTtmb3IoO28uZWRnZXBhdGhzLmxlbmd0aDspYS5lZGdlcGF0aHMucHVzaChsKG8uZWRnZXBhdGhzLnNoaWZ0KCkpKTtmb3IoO28ucGF0aHMubGVuZ3RoOylhLnBhdGhzLnB1c2gobChvLnBhdGhzLnNoaWZ0KCkpKTtmb3IoO28uc3RhcnRzLmxlbmd0aDspYS5zdGFydHMucHVzaChsKG8uc3RhcnRzLnNoaWZ0KCkpKTtyZXR1cm5bYV19fX0seyIuLi8uLi9saWIiOjQ5OH1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuL3N0eWxlX2RlZmF1bHRzIiksYz10KCIuLi9oZWF0bWFwL2xhYmVsX2RlZmF1bHRzIiksdT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsdSxyLGkpfWlmKGkodCxlLGgsZikpe2EodCxlLGYsaCksaCgieGhvdmVyZm9ybWF0IiksaCgieWhvdmVyZm9ybWF0IiksaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVyb25nYXBzIiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBwPSJjb25zdHJhaW50Ij09PWgoImNvbnRvdXJzLnR5cGUiKTtoKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSkscD9vKHQsZSxoLGYscik6KHModCxlLGgsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLHUscil9KSksbCh0LGUsaCxmKSksZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyYmYyhoLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyI6Nzk3LCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6ODAyLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuL2F0dHJpYnV0ZXMiOjczMCwiLi9jb25zdHJhaW50X2RlZmF1bHRzIjo3MzUsIi4vY29udG91cnNfZGVmYXVsdHMiOjczNywiLi9zdHlsZV9kZWZhdWx0cyI6NzUxfV0sNzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9jb25zdHJhaW50X21hcHBpbmciOjczNiwiLi9lbmRfcGx1cyI6NzQxfV0sNzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbigiLCIpLGY9dC5jcm9zc2luZ3NbdV0saD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxhPTA7dD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6YT0wPT09clsxXT8xOi0xOi0xIT09aS5CT1RUT01TVEFSVC5pbmRleE9mKHQpP2E9MTotMSE9PWkuTEVGVFNUQVJULmluZGV4T2YodCk/bj0xOi0xIT09aS5UT1BTVEFSVC5pbmRleE9mKHQpP2E9LTE6bj0tMTtyZXR1cm5bbixhXX0oZixyLGUpLHA9W3ModCxlLFstaFswXSwtaFsxXV0pXSxkPXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoLGc9ZS5zbGljZSgpLHY9aC5zbGljZSgpO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihmPjIwPyhmPWkuQ0hPT1NFU0FERExFW2ZdWyhoWzBdfHxoWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbdV09aS5TQURETEVSRU1BSU5ERVJbZl0pOmRlbGV0ZSB0LmNyb3NzaW5nc1t1XSwhKGg9aS5ORVdERUxUQVtmXSkpe24ubG9nKCJGb3VuZCBiYWQgbWFyY2hpbmcgaW5kZXg6IixmLGUsdC5sZXZlbCk7YnJlYWt9cC5wdXNoKHModCxlLGgpKSxlWzBdKz1oWzBdLGVbMV0rPWhbMV0sdT1lLmpvaW4oIiwiKSxhKHBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0yXSxvLGwpJiZwLnBvcCgpO3ZhciB5PWhbMF0mJihlWzBdPDB8fGVbMF0+bS0yKXx8aFsxXSYmKGVbMV08MHx8ZVsxXT5kLTIpO2lmKGVbMF09PT1nWzBdJiZlWzFdPT09Z1sxXSYmaFswXT09PXZbMF0mJmhbMV09PT12WzFdfHxyJiZ5KWJyZWFrO2Y9dC5jcm9zc2luZ3NbdV19MWU0PT09YyYmbi5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKTt2YXIgeCxiLF8sdyxULGssQSxNLFMsRSxMLEMsUCxJLE8sej1hKHBbMF0scFtwLmxlbmd0aC0xXSxvLGwpLEQ9MCxSPS4yKnQuc21vb3RoaW5nLEY9W10sQj0wO2ZvcihjPTE7YzxwLmxlbmd0aDtjKyspQz1wW2NdLFA9cFtjLTFdLEk9dm9pZCAwLE89dm9pZCAwLEk9Q1syXS1QWzJdLE89Q1szXS1QWzNdLEQrPUE9TWF0aC5zcXJ0KEkqSStPKk8pLEYucHVzaChBKTt2YXIgTj1EL0YubGVuZ3RoKlI7ZnVuY3Rpb24gaih0KXtyZXR1cm4gcFt0JXAubGVuZ3RoXX1mb3IoYz1wLmxlbmd0aC0yO2M+PUI7Yy0tKWlmKCh4PUZbY10pPE4pe2ZvcihfPTAsYj1jLTE7Yj49QiYmeCtGW2JdPE47Yi0tKXgrPUZbYl07aWYoeiYmYz09PXAubGVuZ3RoLTIpZm9yKF89MDtfPGImJngrRltfXTxOO18rKyl4Kz1GW19dO1Q9Yy1iK18rMSxrPU1hdGguZmxvb3IoKGMrYitfKzIpLzIpLHc9enx8YyE9PXAubGVuZ3RoLTI/enx8LTEhPT1iP1QlMj9qKGspOlsoaihrKVswXStqKGsrMSlbMF0pLzIsKGooaylbMV0raihrKzEpWzFdKS8yXTpwWzBdOnBbcC5sZW5ndGgtMV0scC5zcGxpY2UoYisxLGMtYisxLHcpLGM9YisxLF8mJihCPV8pLHomJihjPT09cC5sZW5ndGgtMj9wW19dPXBbcC5sZW5ndGgtMV06MD09PWMmJihwW3AubGVuZ3RoLTFdPXBbMF0pKX1mb3IocC5zcGxpY2UoMCxCKSxjPTA7YzxwLmxlbmd0aDtjKyspcFtjXS5sZW5ndGg9MjtpZighKHAubGVuZ3RoPDIpKWlmKHopcC5wb3AoKSx0LnBhdGhzLnB1c2gocCk7ZWxzZXtyfHxuLmxvZygiVW5jbG9zZWQgaW50ZXJpb3IgY29udG91cj8iLHQubGV2ZWwsZy5qb2luKCIsIikscC5qb2luKCJMIikpO3ZhciBVPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVUmJmEoRVswXSxwW3AubGVuZ3RoLTFdLG8sbCkpe3AucG9wKCksVT0hMDt2YXIgVj0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChMPXQuZWRnZXBhdGhzW1NdKVtMLmxlbmd0aC0xXSxwWzBdLG8sbCkpe1Y9ITAscC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChwLmNvbmNhdChMKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUwuY29uY2F0KHAsRSkpO2JyZWFrfVZ8fCh0LmVkZ2VwYXRoc1tNXT1wLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVU7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLHBbMF0sbyxsKSYmKHAuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChwKSxVPSEwKTtVfHx0LmVkZ2VwYXRocy5wdXNoKHApfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSksYz0oMSE9PWw/KDEtbCkqby5jMmwodC54W25dKTowKSsoMCE9PWw/bCpvLmMybCh0LnhbbisxXSk6MCk7cmV0dXJuW28uYzJwKG8ubDJjKGMpLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgdT0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSksZj0oMSE9PXU/KDEtdSkqcy5jMmwodC55W2ldKTowKSsoMCE9PXU/dSpzLmMybCh0LnlbaSsxXSk6MCk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAocy5sMmMoZiksITApLG4saSt1XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sImVkZ2UiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSx2b2lkIDAsZSxyKTsxZTQ9PT1pJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo0OTgsIi4vY29uc3RhbnRzIjo3MzR9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe298fChvPXt9KSxvLmlzQ29udG91cj0hMDt2YXIgcz1pKHQsZSxyLGEsbyk7cmV0dXJuIHMmJnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pKSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uL2hlYXRtYXAvaG92ZXIiOjc5NH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxjb2xvcmJhcjp0KCIuL2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb250b3VyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuL2F0dHJpYnV0ZXMiOjczMCwiLi9jYWxjIjo3MzEsIi4vY29sb3JiYXIiOjczMywiLi9kZWZhdWx0cyI6NzM5LCIuL2hvdmVyIjo3NDMsIi4vcGxvdCI6NzQ4LCIuL3N0eWxlIjo3NTB9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBhPWUuZm9udDtuLmNvZXJjZUZvbnQodCwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfSExIT09aS5oYXNIb3ZlciYmdCgiemhvdmVyZm9ybWF0Iil9fSx7Ii4uLy4uL2xpYiI6NDk4fV0sNzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjEsdT1pLmV4dHJhY3RPcHRzKHQpO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGYsaCxwPXUucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHUuY29sb3JzY2FsZSk6dS5jb2xvcnNjYWxlLGQ9cC5sZW5ndGgsbT1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7dmFyIHY9dS5taW4seT11Lm1heDtmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLG1baF09ZlswXSooeS12KSt2LGdbaF09ZlsxXTt2YXIgeD1uLmV4dGVudChbdix5LGUuc3RhcnQsZS5zdGFydCtzKihsLTEpXSksYj14W3Y8eT8wOjFdLF89eFt2PHk/MTowXTtiIT09diYmKG0uc3BsaWNlKDAsMCxiKSxnLnNwbGljZSgwLDAsZ1swXSkpLF8hPT15JiYobS5wdXNoKF8pLGcucHVzaChnW2cubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLG1baF09KGZbMF0qKGwrYy0xKS1jLzIpKnMrcixnW2hdPWZbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46bSxyYW5nZTpnfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4vZW5kX3BsdXMiOjc0MSwiQHBsb3RseS9kMyI6NTh9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9KGVbMF1bMF0+dD8wOjEpKyhlWzBdWzFdPnQ/MDoyKSsoZVsxXVsxXT50PzA6NCkrKGVbMV1bMF0+dD8wOjgpO3JldHVybiA1PT09cnx8MTA9PT1yP3Q+KGVbMF1bMF0rZVswXVsxXStlWzFdWzBdK2VbMV1bMV0pLzQ/NT09PXI/NzEzOjExMTQ6NT09PXI/MTA0OjIwODoxNT09PXI/MDpyfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyxzLGwsYyx1LGYsaD10WzBdLnoscD1oLmxlbmd0aCxkPWhbMF0ubGVuZ3RoLG09Mj09PXB8fDI9PT1kO2ZvcihyPTA7cjxwLTE7cisrKWZvcihvPVtdLDA9PT1yJiYobz1vLmNvbmNhdChuLkJPVFRPTVNUQVJUKSkscj09PXAtMiYmKG89by5jb25jYXQobi5UT1BTVEFSVCkpLGU9MDtlPGQtMTtlKyspZm9yKGE9by5zbGljZSgpLDA9PT1lJiYoYT1hLmNvbmNhdChuLkxFRlRTVEFSVCkpLGU9PT1kLTImJihhPWEuY29uY2F0KG4uUklHSFRTVEFSVCkpLHM9ZSsiLCIrcixsPVtbaFtyXVtlXSxoW3JdW2UrMV1dLFtoW3IrMV1bZV0saFtyKzFdW2UrMV1dXSxmPTA7Zjx0Lmxlbmd0aDtmKyspKGM9aSgodT10W2ZdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09YS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksbSYmLTEhPT1hLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7Ii4vY29uc3RhbnRzIjo3MzR9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksdT10KCIuLi9oZWF0bWFwL3Bsb3QiKSxmPXQoIi4vbWFrZV9jcm9zc2luZ3MiKSxoPXQoIi4vZmluZF9hbGxfcGF0aHMiKSxwPXQoIi4vZW1wdHlfcGF0aGluZm8iKSxkPXQoIi4vY29udmVydF90b19jb25zdHJhaW50cyIpLG09dCgiLi9jbG9zZV9ib3VuZGFyaWVzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZj0iIixoPTAscD10LmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksZD0hMDtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2hdLHQuc21vb3RoaW5nKSxmKz1kP2M6Yy5yZXBsYWNlKC9eTS8sIkwiKSxwLnNwbGljZShwLmluZGV4T2YoaCksMSkscj10LmVkZ2VwYXRoc1toXVt0LmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0scz0tMSxvPTA7bzw0O28rKyl7aWYoIXIpe2kubG9nKCJNaXNzaW5nIGVuZD8iLGgsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIXYocik/bj1lWzFdOmcocik/bj1lWzBdOm0ocik/bj1lWzNdOnYocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei4iLHIsbix5KX1pZihyPW4scz49MClicmVhaztmKz0iTCIrbn1pZihzPT09dC5lZGdlcGF0aHMubGVuZ3RoKXtpLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31oPXMsKGQ9LTE9PT1wLmluZGV4T2YoaCkpJiYoaD1wWzBdLGYrPSJaIil9Zm9yKGg9MDtoPHQucGF0aHMubGVuZ3RoO2grKylmKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2hdLHQuc21vb3RoaW5nKTtyZXR1cm4gZn1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxmPU1hdGguc2luKGMpKmEsaD0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGYpK01hdGguY29zKGMpKm8pO2lmKGg8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oaC0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBtPXMtdSxnPWwtZix5PXMrdSx4PWwrZixiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsVD1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsaz0yKmkuc2VnbWVudERpc3RhbmNlKG0sZyx5LHgsXy54LXcsXy55LVQsXy54K3csXy55K1QpLyhlLmhlaWdodCtfLmhlaWdodCksQT1fLmxldmVsPT09ZS5sZXZlbCxNPUE/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooQT92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1NKX1yZXR1cm4gZH1mdW5jdGlvbiBiKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKWlbKHI9bltlXSlbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx2PW9bMF0seD12LnRyYWNlLF89di54LHc9di55LFQ9eC5jb250b3VycyxrPXAoVCxlLHYpLEE9aS5lbnN1cmVTaW5nbGUocywiZyIsImhlYXRtYXBjb2xvcmluZyIpLE09W107ImhlYXRtYXAiPT09VC5jb2xvcmluZyYmKE09W29dKSx1KHQsZSxNLEEpLGYoayksaChrKTt2YXIgUz1sLmMycChfWzBdLCEwKSxFPWwuYzJwKF9bXy5sZW5ndGgtMV0sITApLEw9Yy5jMnAod1swXSwhMCksQz1jLmMycCh3W3cubGVuZ3RoLTFdLCEwKSxQPVtbUyxDXSxbRSxDXSxbRSxMXSxbUyxMXV0sST1rOyJjb25zdHJhaW50Ij09PVQudHlwZSYmKEk9ZChrLFQuX29wZXJhdGlvbikpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG4uZXhpdCgpLnJlbW92ZSgpLG4uYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0ocyxQLFQpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSJmaWxsIj09PWEuY29sb3Jpbmd8fCJjb25zdHJhaW50Ij09PWEudHlwZSYmIj0iIT09YS5fb3BlcmF0aW9uLHM9Ik0iK3Iuam9pbigiTCIpKyJaIjtvJiZtKGUsYSk7dmFyIGw9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShvP2U6W10pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmV4aXQoKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnByZWZpeEJvdW5kYXJ5P3M6IiIpK3kodCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KHMsSSxQLFQpLGZ1bmN0aW9uKHQsZSxvLHMsbCl7dmFyIGM9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHU9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxoPXUmJmYscD1yLmNyZWF0ZUxpbmVzKGMsdXx8ZixlKSxkPXIuY3JlYXRlTGluZUNsaXAoYyxoLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZil7dmFyIHY9W10seT1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciB4PXIubGFiZWxGb3JtYXR0ZXIobyxzKSxiPWEudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSxfPWVbMF0ueGF4aXMsdz1lWzBdLnlheGlzLFQ9Xy5fbGVuZ3RoLGs9dy5fbGVuZ3RoLEE9Xy5yYW5nZSxNPXcucmFuZ2UsUz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzLngpLEU9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscy54KSxMPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueSksQz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLnkpLFA9TWF0aC5tYXgoXy5jMnAoUywhMCksMCksST1NYXRoLm1pbihfLmMycChFLCEwKSxUKSxPPU1hdGgubWF4KHcuYzJwKEMsITApLDApLHo9TWF0aC5taW4ody5jMnAoTCwhMCksayksRD17fTtBWzBdPEFbMV0/KEQubGVmdD1QLEQucmlnaHQ9SSk6KEQubGVmdD1JLEQucmlnaHQ9UCksTVswXTxNWzFdPyhELnRvcD1PLEQuYm90dG9tPXopOihELnRvcD16LEQuYm90dG9tPU8pLEQubWlkZGxlPShELnRvcCtELmJvdHRvbSkvMixELmNlbnRlcj0oRC5sZWZ0K0QucmlnaHQpLzIsdi5wdXNoKFtbRC5sZWZ0LEQudG9wXSxbRC5yaWdodCxELnRvcF0sW0QucmlnaHQsRC5ib3R0b21dLFtELmxlZnQsRC5ib3R0b21dXSk7dmFyIFI9TWF0aC5zcXJ0KFQqVCtrKmspLEY9Zy5MQUJFTERJU1RBTkNFKlIvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO3AuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCx4LGIsbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsRCxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0YpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHksRCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksdil9fSkpfSkpLGIucmVtb3ZlKCksci5kcmF3TGFiZWxzKG0seSxvLGQsaD92Om51bGwpfWYmJiF1JiZwLnJlbW92ZSgpfShzLGssdCx2LFQpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9bi50cmFjZSxsPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGM9ImNsaXAiK3MudWlkLHU9bC5zZWxlY3RBbGwoIiMiK2MpLmRhdGEocy5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKHUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsYyksdS5leGl0KCkucmVtb3ZlKCksITE9PT1zLmNvbm5lY3RnYXBzKXt2YXIgcD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6YihuKSxzbW9vdGhpbmc6MH07ZihbcF0pLGgoW3BdKSxtKFtwXSx7dHlwZToibGV2ZWxzIn0pLGkuZW5zdXJlU2luZ2xlKHUsInBhdGgiLCIiKS5hdHRyKCJkIiwocC5wcmVmaXhCb3VuZGFyeT8iTSIrby5qb2luKCJMIikrIloiOiIiKSt5KHAsbykpfWVsc2UgYz1udWxsO2Euc2V0Q2xpcFVybCh0LGMscil9KHMsZSx0LHYsUCl9KSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aG9wZW4odCxuKX0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIHM9aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLHMuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUudHJhY2UsaT1uLmNvbnRvdXJzLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn07aWYoaS5sYWJlbGZvcm1hdClhLnRpY2tmb3JtYXQ9aS5sYWJlbGZvcm1hdCxjKGEscik7ZWxzZXt2YXIgcz1vLmV4dHJhY3RPcHRzKG4pO2lmKHMmJnMuY29sb3JiYXImJnMuY29sb3JiYXIuX2F4aXMpYT1zLmNvbG9yYmFyLl9heGlzO2Vsc2V7aWYoImNvbnN0cmFpbnQiPT09aS50eXBlKXt2YXIgdT1pLnZhbHVlO0FycmF5LmlzQXJyYXkodSk/YS5yYW5nZT1bdVswXSx1W3UubGVuZ3RoLTFdXTphLnJhbmdlPVt1LHVdfWVsc2UgYS5yYW5nZT1baS5zdGFydCxpLmVuZF0sYS5udGlja3M9KGkuZW5kLWkuc3RhcnQpL2kuc2l6ZTthLnJhbmdlWzBdPT09YS5yYW5nZVsxXSYmKGEucmFuZ2VbMV0rPWEucmFuZ2VbMF18fDEpLGEubnRpY2tzfHwoYS5udGlja3M9MWUzKSxjKGEsciksbC5wcmVwVGlja3MoYSksYS5fdG1pbj1udWxsLGEuX3RtYXg9bnVsbH19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsLnRpY2tUZXh0KGEsdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIG89ci5ub2RlKCksbD1hLmJCb3gobywhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxmb250U2l6ZTorby5zdHlsZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHgiLCIiKSxsZXZlbDp0LGR5OihsLnRvcCtsLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYyx1LGY9ci53aWR0aDtlLmlzQ2xvc2VkPyhzPWUubGVuL3YuSU5JVElBTFNFQVJDSFBPSU5UUyxvPWUubWluK3MvMixsPWUubWF4KToocz0oZS5sZW4tZikvKHYuSU5JVElBTFNFQVJDSFBPSU5UUysxKSxvPWUubWluK3MrZi8yLGw9ZS5tYXgtKHMrZikvMik7Zm9yKHZhciBoPTEvMCxwPTA7cDx2LklURVJBVElPTlM7cCsrKXtmb3IodmFyIGQ9bztkPGw7ZCs9cyl7dmFyIG09aS5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLGQsZiksZz14KG0scixuLGEpO2c8aCYmKGg9Zyx1PW0sYz1kKX1pZihoPjIqdi5NQVhDT1NUKWJyZWFrO3AmJihzLz0yKSxsPShvPWMtcy8yKSsxLjUqc31pZihoPD12Lk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUuZm9udFNpemUsYT1lLndpZHRoK2kvMyxvPU1hdGgubWF4KDAsZS5oZWlnaHQtaS8zKSxzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLnNpbihjKSxmPU1hdGguY29zKGMpLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bcyt0KmYtZSp1LGwrdCp1K2UqZl19LHA9W2goLWEvMiwtby8yKSxoKC1hLzIsby8yKSxoKGEvMixvLzIpLGgoYS8yLC1vLzIpXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6cyx5OmwsZHk6ZS5keSx0aGV0YTpjLGxldmVsOmUubGV2ZWwsd2lkdGg6YSxoZWlnaHQ6b30pLG4ucHVzaChwKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQrIiwiK3QueCsiLCIrdC55KyIsIit0LnRoZXRhfSkpO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChzLmNvbnZlcnRUb1RzcGFucyxyKX0pKSxvKXtmb3IodmFyIGM9IiIsdT0wO3U8by5sZW5ndGg7dSsrKWMrPSJNIitvW3VdLmpvaW4oIkwiKSsiWiI7aS5lbnN1cmVTaW5nbGUoYSwicGF0aCIsIiIpLmF0dHIoImQiLGMpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NTcxLCIuLi9oZWF0bWFwL3Bsb3QiOjc5OSwiLi9jbG9zZV9ib3VuZGFyaWVzIjo3MzIsIi4vY29uc3RhbnRzIjo3MzQsIi4vY29udmVydF90b19jb25zdHJhaW50cyI6NzM4LCIuL2VtcHR5X3BhdGhpbmZvIjo3NDAsIi4vZmluZF9hbGxfcGF0aHMiOjc0MiwiLi9tYWtlX2Nyb3NzaW5ncyI6NzQ3LCJAcGxvdGx5L2QzIjo1OH1dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3QsZV19O3JldHVybiBuLmF1dG9UaWNrcyhpLChlLXQpLyhyfHwxNSkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jb250b3VycztpZih0LmF1dG9jb250b3VyKXt2YXIgbz10LnptaW4scz10LnptYXg7KHQuemF1dG98fHZvaWQgMD09PW8pJiYobz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxlKSksKHQuemF1dG98fHZvaWQgMD09PXMpJiYocz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxlKSk7dmFyIGw9YShvLHMsdC5uY29udG91cnMpO3Iuc2l6ZT1sLmR0aWNrLHIuc3RhcnQ9bi50aWNrRmlyc3QobCksbC5yYW5nZS5yZXZlcnNlKCksci5lbmQ9bi50aWNrRmlyc3QobCksci5zdGFydD09PW8mJihyLnN0YXJ0Kz1yLnNpemUpLHIuZW5kPT09cyYmKHIuZW5kLT1yLnNpemUpLHIuc3RhcnQ+ci5lbmQmJihyLnN0YXJ0PXIuZW5kPShyLnN0YXJ0K3IuZW5kKS8yKSx0Ll9pbnB1dC5jb250b3Vyc3x8KHQuX2lucHV0LmNvbnRvdXJzPXt9KSxpLmV4dGVuZEZsYXQodC5faW5wdXQuY29udG91cnMse3N0YXJ0OnIuc3RhcnQsZW5kOnIuZW5kLHNpemU6ci5zaXplfSksdC5faW5wdXQuYXV0b2NvbnRvdXI9ITB9ZWxzZSBpZigiY29uc3RyYWludCIhPT1yLnR5cGUpe3ZhciBjLHU9ci5zdGFydCxmPXIuZW5kLGg9dC5faW5wdXQuY29udG91cnM7aWYodT5mJiYoci5zdGFydD1oLnN0YXJ0PWYsZj1yLmVuZD1oLmVuZD11LHU9ci5zdGFydCksIShyLnNpemU+MCkpYz11PT09Zj8xOmEodSxmLHQubmNvbnRvdXJzKS5kdGljayxoLnNpemU9ci5zaXplPWN9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PW0mJihtPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1tJiYobT1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKG0tLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vaGVhdG1hcC9zdHlsZSI6ODAwLCIuL21ha2VfY29sb3JfbWFwIjo3NDYsIkBwbG90bHkvZDMiOjU4fV0sNzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiOyJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSwhMSE9PXMmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsIiMwMDAiKSkscigibGluZS53aWR0aCIsLjUpLHIoImxpbmUuZGFzaCIpKSwibm9uZSIhPT1sJiYoITAhPT10LnNob3dsZWdlbmQmJihlLnNob3dsZWdlbmQ9ITEpLGUuX2RmbHRTaG93TGVnZW5kPSExLG4odCxlLGEscix7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpLHIoImxpbmUuc21vb3RoaW5nIiksaShyLGEsYyxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzEsIi4vbGFiZWxfZGVmYXVsdHMiOjc0NX1dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9aS5jb250b3VycztlLmV4cG9ydHM9byh7Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6cy50eXBlLHN0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kLHNpemU6cy5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6cy5zaG93bGluZXMsc2hvd2xhYmVsczpzLnNob3dsYWJlbHMsbGFiZWxmb250OnMubGFiZWxmb250LGxhYmVsZm9ybWF0OnMubGFiZWxmb3JtYXQsb3BlcmF0aW9uOnMub3BlcmF0aW9uLHZhbHVlOnMudmFsdWUsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjppLmxpbmUuY29sb3Isd2lkdGg6aS5saW5lLndpZHRoLGRhc2g6aS5saW5lLmRhc2gsc21vb3RoaW5nOmkubGluZS5zbW9vdGhpbmcsZWRpdFR5cGU6InBsb3QifSx0cmFuc2Zvcm1zOnZvaWQgMH0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6NzMwLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjc4N31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpLG89dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLHM9dCgiLi4vaGVhdG1hcC9pbnRlcnAyZCIpLGw9dCgiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiKSxjPXQoIi4uL2hlYXRtYXAvbWFrZV9ib3VuZF9hcnJheSIpLHU9dCgiLi9kZWZhdWx0cyIpLGY9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpLGg9dCgiLi4vY29udG91ci9zZXRfY29udG91cnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1mKHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe2lmKCFlLmF8fCFlLmIpe3ZhciBwPXQuZGF0YVtyLmluZGV4XSxkPXQuZGF0YVtlLmluZGV4XTtkLmF8fChkLmE9cC5hKSxkLmJ8fChkLmI9cC5iKSx1KGQsZSxlLl9kZWZhdWx0Q29sb3IsdC5fZnVsbExheW91dCl9dmFyIG09ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbSxnPWUuX2NhcnBldFRyYWNlLHY9Zy5hYXhpcyx5PWcuYmF4aXM7di5fbWluRHRpY2s9MCx5Ll9taW5EdGljaz0wLGkuaXNBcnJheTFEKGUueikmJmEoZSx2LHksImEiLCJiIixbInoiXSk7cj1lLl9hPWUuX2F8fGUuYSxoPWUuX2I9ZS5fYnx8ZS5iLHI9cj92Lm1ha2VDYWxjZGF0YShlLCJfYSIpOltdLGg9aD95Lm1ha2VDYWxjZGF0YShlLCJfYiIpOltdLHU9ZS5hMHx8MCxmPWUuZGF8fDEscD1lLmIwfHwwLGQ9ZS5kYnx8MSxtPWUuX3o9byhlLl96fHxlLnosZS50cmFuc3Bvc2UpLGUuX2VtcHR5cG9pbnRzPWwobSkscyhtLGUuX2VtcHR5cG9pbnRzKTt2YXIgeD1pLm1heFJvd0xlbmd0aChtKSxiPSJzY2FsZWQiPT09ZS54dHlwZT8iIjpyLF89YyhlLGIsdSxmLHgsdiksdz0ic2NhbGVkIj09PWUueXR5cGU/IiI6aCxUPWMoZSx3LHAsZCxtLmxlbmd0aCx5KSxrPXthOl8sYjpULHo6bX07ImxldmVscyI9PT1lLmNvbnRvdXJzLnR5cGUmJiJub25lIiE9PWUuY29udG91cnMuY29sb3JpbmcmJm4odCxlLHt2YWxzOm0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSk7cmV0dXJuW2tdfSh0LGUpO3JldHVybiBoKGUsZS5feiksbX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNjksIi4uLy4uL2xpYiI6NDk4LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo3MDMsIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIjo3NDksIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjc4OSwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjc5MSwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjc5MywiLi4vaGVhdG1hcC9pbnRlcnAyZCI6Nzk2LCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjc5OCwiLi9kZWZhdWx0cyI6NzU0fV0sNzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KCJjYXJwZXQiKSx0LmEmJnQuYil7aWYoIWkodCxlLHUsYywiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoInRleHQiKSwiY29uc3RyYWludCI9PT11KCJjb250b3Vycy50eXBlIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGEscil9KSksbCh0LGUsdSxjLHtoYXNIb3ZlcjohMX0pKX1lbHNlIGUuX2RlZmF1bHRDb2xvcj1yLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIjo3MzUsIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiOjczNywiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6NzUxLCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6ODAyLCIuL2F0dHJpYnV0ZXMiOjc1Mn1dLDc1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2NvbnRvdXIvY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vY29udG91ci9zdHlsZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb250b3VyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY29udG91ciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwiaGFzTGluZXMiLCJjYXJwZXREZXBlbmRlbnQiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9jb250b3VyL2NvbG9yYmFyIjo3MzMsIi4uL2NvbnRvdXIvc3R5bGUiOjc1MCwiLi9hdHRyaWJ1dGVzIjo3NTIsIi4vY2FsYyI6NzUzLCIuL2RlZmF1bHRzIjo3NTQsIi4vcGxvdCI6NzU2fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2NhcnBldC9tYXBfMWRfYXJyYXkiKSxhPXQoIi4uL2NhcnBldC9tYWtlcGF0aCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiKSxjPXQoIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHMiKSx1PXQoIi4uL2NvbnRvdXIvcGxvdCIpLGY9dCgiLi4vY29udG91ci9jb25zdGFudHMiKSxoPXQoIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50cyIpLHA9dCgiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyIpLGQ9dCgiLi4vY29udG91ci9jbG9zZV9ib3VuZGFyaWVzIiksbT10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksZz10KCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiKTtmdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixiKXt2YXIgXz1lLnhheGlzLHc9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhiLHIsImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYj1uLnNlbGVjdCh0aGlzKSxUPXJbMF0saz1ULnRyYWNlLEE9ay5fY2FycGV0VHJhY2U9bSh0LGspLE09dC5jYWxjZGF0YVtBLmluZGV4XVswXTtpZihBLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PUEudmlzaWJsZSl7dmFyIFM9VC5hLEU9VC5iLEw9ay5jb250b3VycyxDPXAoTCxlLFQpLFA9ImNvbnN0cmFpbnQiPT09TC50eXBlLEk9TC5fb3BlcmF0aW9uLE89UD8iPSI9PT1JPyJsaW5lcyI6ImZpbGwiOkwuY29sb3Jpbmcsej1bW1NbMF0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVswXV0sW1NbMF0sRVswXV1dO2woQyk7dmFyIEQ9MWUtOCooU1tTLmxlbmd0aC0xXS1TWzBdKSxSPTFlLTgqKEVbRS5sZW5ndGgtMV0tRVswXSk7YyhDLEQsUik7dmFyIEYsQixOLGosVT1DOyJjb25zdHJhaW50Ij09PUwudHlwZSYmKFU9aChDLEkpKSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3IoYT10W3JdLG89YS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX0oQyxxKTt2YXIgVj1bXTtmb3Ioaj1NLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtqPj0wO2otLSlGPU0uY2xpcHNlZ21lbnRzW2pdLEI9aShbXSxGLngsXy5jMnApLE49aShbXSxGLnksdy5jMnApLEIucmV2ZXJzZSgpLE4ucmV2ZXJzZSgpLFYucHVzaChhKEIsTixGLmJpY3ViaWMpKTt2YXIgSD0iTSIrVi5qb2luKCJMIikrIloiOyFmdW5jdGlvbih0LGUscixuLG8sbCl7dmFyIGMsdSxmLGgscD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihoPTA7aDxlLmxlbmd0aDtoKyspYz1lW2hdLHU9aShbXSxjLngsci5jMnApLGY9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsZixjLmJpY3ViaWMpKTtwLmF0dHIoImQiLCJNIitkLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KGIsTS5jbGlwc2VnbWVudHMsXyx3LFAsTyksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyx1LGYsaCxwKXt2YXIgbT0iZmlsbCI9PT1oO20mJmQoYSx0LmNvbnRvdXJzKTt2YXIgdj1zLmVuc3VyZVNpbmdsZShlLCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKG0/YTpbXSk7di5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KHQucHJlZml4Qm91bmRhcnk/cDoiIikrZnVuY3Rpb24odCxlLHIsbixpLGEsbCxjKXt2YXIgdSxmLGgscCxkLG0sdix5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBBKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLG8scyx1PSIiO2ZvcihUKHQpJiYhTSh0KXx8ayh0KSYmIUEodCk/KHM9aS5hYXhpcyxvPWcoaSxhLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KHM9aS5iYXhpcyxvPWcoaSxhLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8by5sZW5ndGg7cisrKWZvcih1Kz1zLnNtb290aGluZz8iQyI6IkwiLG49MDtuPG9bcl0ubGVuZ3RoO24rKyl7dmFyIGY9b1tyXVtuXTt1Kz1bbC5jMnAoZlswXSksYy5jMnAoZlsxXSldKyIgIn1yZXR1cm4gdX11PTAsZj1udWxsO2Zvcig7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t1XVswXTtmb3IoZiYmKHkrPVMoZixFKSksdj1vLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKSx5Kz1iP3Y6di5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YodSksMSksZj1lLmVkZ2VwYXRoc1t1XVtlLmVkZ2VwYXRoc1t1XS5sZW5ndGgtMV0sZD0tMSxwPTA7cDw0O3ArKyl7aWYoIWYpe3MubG9nKCJNaXNzaW5nIGVuZD8iLHUsZSk7YnJlYWt9Zm9yKFQoZikmJiFNKGYpP2g9clsxXTpBKGYpP2g9clswXTprKGYpP2g9clszXTpNKGYpJiYoaD1yWzJdKSxtPTA7bTxlLmVkZ2VwYXRocy5sZW5ndGg7bSsrKXt2YXIgTD1lLmVkZ2VwYXRoc1ttXVswXTtNYXRoLmFicyhmWzBdLWhbMF0pPF8/TWF0aC5hYnMoZlswXS1MWzBdKTxfJiYoTFsxXS1mWzFdKSooaFsxXS1MWzFdKT49MCYmKGg9TCxkPW0pOk1hdGguYWJzKGZbMV0taFsxXSk8dz9NYXRoLmFicyhmWzFdLUxbMV0pPHcmJihMWzBdLWZbMF0pKihoWzBdLUxbMF0pPj0wJiYoaD1MLGQ9bSk6cy5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZixoLEwpfWlmKGQ+PTApYnJlYWs7eSs9UyhmLGgpLGY9aH1pZihkPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXtzLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha311PWQsKGI9LTE9PT14LmluZGV4T2YodSkpJiYodT14WzBdLHkrPVMoZixoKSsiWiIsZj1udWxsKX1mb3IodT0wO3U8ZS5wYXRocy5sZW5ndGg7dSsrKXkrPW8uc21vb3RoY2xvc2VkKGUucGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKTtyZXR1cm4geX0oMCx0LGwsYyx1LGYscixpKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KGssYixfLHcsVSx6LHEsQSxNLE8sSCksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyl7dmFyIGg9cy5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHA9ITEhPT1hLnNob3dsaW5lcyxkPWEuc2hvd2xhYmVscyxtPXAmJmQsZz11LmNyZWF0ZUxpbmVzKGgscHx8ZCxlKSxiPXUuY3JlYXRlTGluZUNsaXAoaCxtLHIsaS50cmFjZS51aWQpLF89dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZD9bMF06W10pO2lmKF8uZXhpdCgpLnJlbW92ZSgpLF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZCl7dmFyIHc9bC54YXhpcyxUPWwueWF4aXMsaz13Ll9sZW5ndGgsQT1ULl9sZW5ndGgsTT1bW1swLDBdLFtrLDBdLFtrLEFdLFswLEFdXV0sUz1bXTtzLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBFPXUubGFiZWxGb3JtYXR0ZXIocixpKSxMPW8udGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxDPXtsZWZ0OjAscmlnaHQ6ayxjZW50ZXI6ay8yLHRvcDowLGJvdHRvbTpBLG1pZGRsZTpBLzJ9LFA9TWF0aC5zcXJ0KGsqaytBKkEpLEk9Zi5MQUJFTERJU1RBTkNFKlAvTWF0aC5tYXgoMSxlLmxlbmd0aC9mLkxBQkVMSU5DUkVBU0UpO2cuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dS5jYWxjVGV4dE9wdHModC5sZXZlbCxFLEwscik7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEMsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxmPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj15KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqeChlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1mKTwuMSkmJihyPXkoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLG59dmFyIHA9dih0LDAsMSksZD12KHQsbi50b3RhbCxuLnRvdGFsLTEpLG09aChvWzBdLHApLGc9bi50b3RhbC1oKG9bby5sZW5ndGgtMV0sZCk7bi5taW48bSYmKG4ubWluPW0pO24ubWF4PmcmJihuLm1heD1nKTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpmLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9JKSxmLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEMpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pKX0pKSxMLnJlbW92ZSgpLHUuZHJhd0xhYmVscyhfLFMscixiLG0/TTpudWxsKX1kJiYhcCYmZy5yZW1vdmUoKX0oYixDLHQsVCxMLGUsQSksby5zZXRDbGlwVXJsKGIsQS5fY2xpcFBhdGhJZCx0KX1mdW5jdGlvbiBxKHQpe3ZhciBlPUEuYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bXy5jMnAoZVswXSksdy5jMnAoZVsxXSldfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjY4NywiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6NzAzLCIuLi9jYXJwZXQvbWFrZXBhdGgiOjcwNCwiLi4vY2FycGV0L21hcF8xZF9hcnJheSI6NzA1LCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiOjczMiwiLi4vY29udG91ci9jb25zdGFudHMiOjczNCwiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo3MzgsIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iOjc0MCwiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6NzQyLCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo3NDcsIi4uL2NvbnRvdXIvcGxvdCI6NzQ4LCJAcGxvdGx5L2QzIjo1OH1dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe2xvbjpvLmxvbixsYXQ6by5sYXQsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsbWluOjEsZGZsdDozMH0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Om8udGV4dCxob3ZlcnRleHQ6by5ob3ZlcnRleHQsaG92ZXJpbmZvOnMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOmkoKSxzaG93bGVnZW5kOnMoe30sYS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNjgsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyI6OTg4fV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz1lLnosdT1pKGMpJiZjLmxlbmd0aCxmPTA7ZjxyO2YrKyl7dmFyIGg9bFtmXT17fSxwPWUubG9uW2ZdLGQ9ZS5sYXRbZl07aWYoaC5sb25sYXQ9bihwKSYmbihkKT9bK3AsK2RdOlthLGFdLHUpe3ZhciBtPWNbZl07aC56PW4obSk/bTphfX1yZXR1cm4gbyh0LGUse3ZhbHM6dT9jOlswLDFdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHImJihsWzBdLnQ9e2xhYmVsczp7bGF0OnModCwibGF0OiIpKyIgIixsb246cyh0LCJsb246IikrIiAifX0pLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNjksIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsImZhc3QtaXNudW1lcmljIjoxODV9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGw9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKS5tYWtlQmxhbms7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0hMD09PWUudmlzaWJsZSYmMCE9PWUuX2xlbmd0aCxjPWUuX29wdHM9e2hlYXRtYXA6e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxnZW9qc29uOmwoKX07aWYoIXIpcmV0dXJuIGM7dmFyIHUsZj1bXSxoPWUueixwPWUucmFkaXVzLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGgpJiZoLmxlbmd0aCxtPWkuaXNBcnJheU9yVHlwZWRBcnJheShwKTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgZz10W3VdLHY9Zy5sb25sYXQ7aWYodlswXSE9PXMpe3ZhciB5PXt9O2lmKGQpe3ZhciB4PWcuejt5Lno9eCE9PXM/eDowfW0mJih5LnI9bihwW3VdKSYmcFt1XT4wPytwW3VdOjApLGYucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczp2fSxwcm9wZXJ0aWVzOnl9KX19dmFyIGI9by5leHRyYWN0T3B0cyhlKSxfPWIucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKGIuY29sb3JzY2FsZSk6Yi5jb2xvcnNjYWxlLHc9X1swXVsxXSxUPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJoZWF0bWFwLWRlbnNpdHkiXSwwLGEub3BhY2l0eSh3KTwxP3c6YS5hZGRPcGFjaXR5KHcsMCldO2Zvcih1PTE7dTxfLmxlbmd0aDt1KyspVC5wdXNoKF9bdV1bMF0sX1t1XVsxXSk7dmFyIGs9WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImdldCIsInoiXSxiLm1pbiwwLGIubWF4LDFdO3JldHVybiBpLmV4dGVuZEZsYXQoYy5oZWF0bWFwLnBhaW50LHsiaGVhdG1hcC13ZWlnaHQiOmQ/azoxLyhiLm1heC1iLm1pbiksImhlYXRtYXAtY29sb3IiOlQsImhlYXRtYXAtcmFkaXVzIjptP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6InIifTplLnJhZGl1cywiaGVhdG1hcC1vcGFjaXR5IjplLm9wYWNpdHl9KSxjLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpmfSxjLmhlYXRtYXAubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTIsImZhc3QtaXNudW1lcmljIjoxODV9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9uIil8fFtdLGM9cygibGF0Iil8fFtdLHU9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpO3U/KGUuX2xlbmd0aD11LHMoInoiKSxzKCJyYWRpdXMiKSxzKCJiZWxvdyIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4vYXR0cmlidXRlcyI6NzU3fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0Lno9ZS56LHR9fSx7fV0sNzYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIikuaG92ZXJQb2ludHMsYT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIikuZ2V0RXh0cmFUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89aSh0LGUscik7aWYobyl7dmFyIHM9b1swXSxsPXMuY2QsYz1sWzBdLnRyYWNlLHU9bFtzLmluZGV4XTtpZihkZWxldGUgcy5jb2xvciwieiJpbiB1KXt2YXIgZj1zLnN1YnBsb3QubW9ja0F4aXM7cy56PXUueixzLnpMYWJlbD1uLnRpY2tUZXh0KGYsZi5jMmwodS56KSwiaG92ZXIiKS50ZXh0fXJldHVybiBzLmV4dHJhVGV4dD1hKGMsdSxsWzBdLnQubGFiZWxzKSxbc119fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIjo5OTN9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLGdldEJlbG93OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuZ2V0TWFwTGF5ZXJzKCksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLGE9aS5pZDtpZigic3ltYm9sIj09PWkudHlwZSYmInN0cmluZyI9PXR5cGVvZiBhJiYtMT09PWEuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBhfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImRlbnNpdHltYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJkZW5zaXR5X21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjYwOCwiLi4vaGVhdG1hcC9jb2xvcmJhciI6NzkwLCIuLi9zY2F0dGVybWFwYm94L2Zvcm1hdF9sYWJlbHMiOjk5MiwiLi9hdHRyaWJ1dGVzIjo3NTcsIi4vY2FsYyI6NzU4LCIuL2RlZmF1bHRzIjo3NjAsIi4vZXZlbnRfZGF0YSI6NzYxLCIuL2hvdmVyIjo3NjIsIi4vcGxvdCI6NzY0fV0sNzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXg7ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHlwZT0iZGVuc2l0eW1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkPSJzb3VyY2UtIitlLHRoaXMubGF5ZXJMaXN0PVtbImhlYXRtYXAiLGkrZSsiLWhlYXRtYXAiXV0sdGhpcy5iZWxvdz1udWxsfXZhciBvPWEucHJvdG90eXBlO28udXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdCxyPXRoaXMubGF5ZXJMaXN0LGk9bih0KSxhPWUuYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2UubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkKS5zZXREYXRhKGkuZ2VvanNvbiksYSE9PXRoaXMuYmVsb3cmJih0aGlzLl9yZW1vdmVMYXllcnMoKSx0aGlzLl9hZGRMYXllcnMoaSxhKSx0aGlzLmJlbG93PWEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9c1swXSxjPXNbMV0sdT1pW2xdO2Uuc2V0T3B0aW9ucyhjLCJzZXRMYXlvdXRQcm9wZXJ0eSIsdS5sYXlvdXQpLCJ2aXNpYmxlIj09PXUubGF5b3V0LnZpc2liaWxpdHkmJmUuc2V0T3B0aW9ucyhjLCJzZXRQYWludFByb3BlcnR5Iix1LnBhaW50KX19LG8uX2FkZExheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN1YnBsb3Qsbj10aGlzLmxheWVyTGlzdCxpPXRoaXMuc291cmNlSWQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9b1swXSxsPXRbc107ci5hZGRMYXllcih7dHlwZTpzLGlkOm9bMV0sc291cmNlOmksbGF5b3V0OmwubGF5b3V0LHBhaW50OmwucGFpbnR9LGUpfX0sby5fcmVtb3ZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT10aGlzLmxheWVyTGlzdCxyPWUubGVuZ3RoLTE7cj49MDtyLS0pdC5yZW1vdmVMYXllcihlW3JdWzFdKX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0aGlzLl9yZW1vdmVMYXllcnMoKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBhKHQsci51aWQpLG89aS5zb3VyY2VJZCxzPW4oZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdO3JldHVybiB0Lm1hcC5hZGRTb3VyY2Uobyx7dHlwZToiZ2VvanNvbiIsZGF0YTpzLmdlb2pzb259KSxpLl9hZGRMYXllcnMocyxsKSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo2MDYsIi4vY29udmVydCI6NzU5fV0sNzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjQ5OH1dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz17eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx4cGVyaW9kOmkueHBlcmlvZCx5cGVyaW9kOmkueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDppLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDppLnlwZXJpb2RhbGlnbm1lbnQseGhvdmVyZm9ybWF0OnMoIngiKSx5aG92ZXJmb3JtYXQ6cygieSIpLGhvdmVydGV4dDppLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksaG92ZXJpbmZvOmYoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibmFtZSIsIngiLCJ5IiwidGV4dCIsInBlcmNlbnQgaW5pdGlhbCIsInBlcmNlbnQgcHJldmlvdXMiLCJwZXJjZW50IHRvdGFsIl19KSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwicGVyY2VudCBpbml0aWFsIiwicGVyY2VudCBwcmV2aW91cyIsInBlcmNlbnQgdG90YWwiLCJ2YWx1ZSJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOmMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6dS5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIiwidmFsdWUiXSl9KSx0ZXh0OmkudGV4dCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24saW5zaWRldGV4dGFuY2hvcjpmKHt9LGkuaW5zaWRldGV4dGFuY2hvcix7ZGZsdDoibWlkZGxlIn0pLHRleHRhbmdsZTpmKHt9LGkudGV4dGFuZ2xlLHtkZmx0OjB9KSx0ZXh0Zm9udDppLnRleHRmb250LGluc2lkZXRleHRmb250OmkuaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Omkub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6aS5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLG9yaWVudGF0aW9uOmYoe30saS5vcmllbnRhdGlvbix7fSksb2Zmc2V0OmYoe30saS5vZmZzZXQse2FycmF5T2s6ITF9KSx3aWR0aDpmKHt9LGkud2lkdGgse2FycmF5T2s6ITF9KSxtYXJrZXI6KG49Zih7fSxpLm1hcmtlciksZGVsZXRlIG4ucGF0dGVybixuKSxjb25uZWN0b3I6e2ZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6e2NvbG9yOmYoe30sYS5jb2xvcix7ZGZsdDpoLmRlZmF1bHRMaW5lfSksd2lkdGg6Zih7fSxhLndpZHRoLHtkZmx0OjAsZWRpdFR5cGU6InBsb3QifSksZGFzaDphLmRhc2gsZWRpdFR5cGU6InN0eWxlIn0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyLCIuL2NvbnN0YW50cyI6NzY4fV0sNzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksYT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQpe3JldHVybiB0PT09cz8wOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGYsaCxwLGQsbSxnPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx2PW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWcubWFrZUNhbGNkYXRhKGUsIngiKSx1PXYubWFrZUNhbGNkYXRhKGUsInkiKSxmPWkoZSx2LCJ5Iix1KSxoPSEhZS55cGVyaW9kYWxpZ25tZW50LHA9InkiKToocj12Lm1ha2VDYWxjZGF0YShlLCJ5IiksdT1nLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1pKGUsZywieCIsdSksaD0hIWUueHBlcmlvZGFsaWdubWVudCxwPSJ4IiksYz1mLnZhbHM7dmFyIHkseD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksYj1uZXcgQXJyYXkoeCk7Zm9yKGUuX2Jhc2U9W10sZD0wO2Q8eDtkKyspe3JbZF08MCYmKHJbZF09cyk7dmFyIF89ITE7cltkXSE9PXMmJmQrMTx4JiZyW2QrMV0hPT1zJiYoXz0hMCksbT1iW2RdPXtwOmNbZF0sczpyW2RdLGNOZXh0Ol99LGUuX2Jhc2VbZF09LS41Km0ucyxoJiYoYltkXS5vcmlnX3A9dVtkXSxiW2RdW3ArIkVuZCJdPWYuZW5kc1tkXSxiW2RdW3ArIlN0YXJ0Il09Zi5zdGFydHNbZF0pLGUuaWRzJiYobS5pZD1TdHJpbmcoZS5pZHNbZF0pKSwwPT09ZCYmKGJbMF0udlRvdGFsPTApLGJbMF0udlRvdGFsKz1sKG0ucyksbS5iZWdSPWwobS5zKS9sKGJbMF0ucyl9Zm9yKGQ9MDtkPHg7ZCsrKShtPWJbZF0pLnMhPT1zJiYobS5zdW1SPW0ucy9iWzBdLnZUb3RhbCxtLmRpZlI9dm9pZCAwIT09eT9tLnMveToxLHk9bS5zKTtyZXR1cm4gYShiLGUpLG8oYixlKSxifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6OTI0LCIuL2FycmF5c190b19jYWxjZGF0YSI6NzY1fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbInBlcmNlbnRJbml0aWFsIiwicGVyY2VudFByZXZpb3VzIiwicGVyY2VudFRvdGFsIl19fSx7fV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldLGQ9ImgiPT09cC5vcmllbnRhdGlvbjshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJmdW5uZWwiPT09cC50eXBlJiYocj1zW2ldLGQ/aC5wdXNoKHIpOmYucHVzaChyKSx1LnB1c2gocikpfXZhciBtPXttb2RlOmEuZnVubmVsbW9kZSxub3JtOmEuZnVubmVsbm9ybSxnYXA6YS5mdW5uZWxnYXAsZ3JvdXBnYXA6YS5mdW5uZWxncm91cGdhcH07Zm9yKG4odCxsLGMsZixtKSxuKHQsYyxsLGgsbSksaT0wO2k8dS5sZW5ndGg7aSsrKXtyPXVbaV07Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspZysxPHIubGVuZ3RoJiYocltnXS5uZXh0UDA9cltnKzFdLnAwLHJbZ10ubmV4dFMwPXJbZysxXS5zMCxyW2ddLm5leHRQMT1yW2crMV0ucDEscltnXS5uZXh0UzE9cltnKzFdLnMxKX19fSx7Ii4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo2NDZ9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLHUpKXtzKHQsZSxpLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoIm9yaWVudGF0aW9uIixlLnkmJiFlLng/InYiOiJoIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKTt2YXIgZj11KCJ0ZXh0Iik7dSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpO2EodCxlLGksdSxoLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSI9PT1lLnRleHRwb3NpdGlvbnx8ZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGYpPyJ0ZXh0K3ZhbHVlIjoidmFsdWUiKTt2YXIgcD11KCJtYXJrZXIuY29sb3IiLHIpO2lmKHUoIm1hcmtlci5saW5lLmNvbG9yIixjLmRlZmF1bHRMaW5lKSx1KCJtYXJrZXIubGluZS53aWR0aCIpLHUoImNvbm5lY3Rvci52aXNpYmxlIikpdSgiY29ubmVjdG9yLmZpbGxjb2xvciIsZnVuY3Rpb24odCl7dmFyIGU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHQpPyIjMDAwIjp0O3JldHVybiBjLmFkZE9wYWNpdHkoZSwuNSpjLm9wYWNpdHkoZSkpfShwKSksdSgiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKHUoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksdSgiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUuZnVubmVsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9saWIiOjQ5OCwiLi4vYmFyL2RlZmF1bHRzIjo2NDcsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDIsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjk0OSwiLi9hdHRyaWJ1dGVzIjo3NjZ9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwicGVyY2VudEluaXRpYWwiaW4gZSYmKHQucGVyY2VudEluaXRpYWw9ZS5wZXJjZW50SW5pdGlhbCksInBlcmNlbnRQcmV2aW91cyJpbiBlJiYodC5wZXJjZW50UHJldmlvdXM9ZS5wZXJjZW50UHJldmlvdXMpLCJwZXJjZW50VG90YWwiaW4gZSYmKHQucGVyY2VudFRvdGFsPWUucGVyY2VudFRvdGFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikub3BhY2l0eSxpPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyT25CYXJzLGE9dCgiLi4vLi4vbGliIikuZm9ybWF0UGVyY2VudDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1pKHQsZSxyLG8scyk7aWYobCl7dmFyIGM9bC5jZCx1PWNbMF0udHJhY2UsZj0iaCI9PT11Lm9yaWVudGF0aW9uLGg9Y1tsLmluZGV4XTtsWyhmPyJ4IjoieSIpKyJMYWJlbFZhbCJdPWgucyxsLnBlcmNlbnRJbml0aWFsPWguYmVnUixsLnBlcmNlbnRJbml0aWFsTGFiZWw9YShoLmJlZ1IsMSksbC5wZXJjZW50UHJldmlvdXM9aC5kaWZSLGwucGVyY2VudFByZXZpb3VzTGFiZWw9YShoLmRpZlIsMSksbC5wZXJjZW50VG90YWw9aC5zdW1SLGwucGVyY2VudFRvdGFsTGFiZWw9YShoLnN1bVIsMSk7dmFyIHA9aC5oaXx8dS5ob3ZlcmluZm8sZD1bXTtpZihwJiYibm9uZSIhPT1wJiYic2tpcCIhPT1wKXt2YXIgbT0iYWxsIj09PXAsZz1wLnNwbGl0KCIrIiksdj1mdW5jdGlvbih0KXtyZXR1cm4gbXx8LTEhPT1nLmluZGV4T2YodCl9O3YoInBlcmNlbnQgaW5pdGlhbCIpJiZkLnB1c2gobC5wZXJjZW50SW5pdGlhbExhYmVsKyIgb2YgaW5pdGlhbCIpLHYoInBlcmNlbnQgcHJldmlvdXMiKSYmZC5wdXNoKGwucGVyY2VudFByZXZpb3VzTGFiZWwrIiBvZiBwcmV2aW91cyIpLHYoInBlcmNlbnQgdG90YWwiKSYmZC5wdXNoKGwucGVyY2VudFRvdGFsTGFiZWwrIiBvZiB0b3RhbCIpfXJldHVybiBsLmV4dHJhVGV4dD1kLmpvaW4oIjxicj4iKSxsLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXJrZXIsaT1lLm1jfHxyLmNvbG9yLGE9ZS5tbGN8fHIubGluZS5jb2xvcixvPWUubWx3fHxyLmxpbmUud2lkdGg7aWYobihpKSlyZXR1cm4gaTtpZihuKGEpJiZvKXJldHVybiBhfSh1LGgpLFtsXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uL2Jhci9ob3ZlciI6NjUwfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2MywiLi4vYmFyL3NlbGVjdCI6NjU1LCIuL2F0dHJpYnV0ZXMiOjc2NiwiLi9jYWxjIjo3NjcsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6NzY5LCIuL2RlZmF1bHRzIjo3NzAsIi4vZXZlbnRfZGF0YSI6NzcxLCIuL2hvdmVyIjo3NzIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NCwiLi9sYXlvdXRfZGVmYXVsdHMiOjc3NSwiLi9wbG90Ijo3NzYsIi4vc3R5bGUiOjc3N31dLDc3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Z1bm5lbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNzc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzR9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxpWzNdPW8uYzJwKHQubmV4dFMxLCEwKSxhWzNdPXMuYzJwKHQubmV4dFAxLCEwKSxuP1tpLGFdOlthLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgZj10Ll9mdWxsTGF5b3V0O2woImZ1bm5lbCIsZiksZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIHM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLGg9aS5lbnN1cmVTaW5nbGUocywiZyIsInJlZ2lvbnMiKTtpZihmLmNvbm5lY3RvciYmZi5jb25uZWN0b3IudmlzaWJsZSl7dmFyIHA9ImgiPT09Zi5vcmllbnRhdGlvbixkPWguc2VsZWN0QWxsKCJnLnJlZ2lvbiIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlZ2lvbiIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgZj1jKHIsbCx1LHApLGg9ZlswXSxkPWZbMV0sZz0iIjtoWzBdIT09byYmZFswXSE9PW8mJmhbMV0hPT1vJiZkWzFdIT09byYmaFsyXSE9PW8mJmRbMl0hPT1vJiZoWzNdIT09byYmZFszXSE9PW8mJihnKz1wPyJNIitoWzBdKyIsIitkWzFdKyJMIitoWzJdKyIsIitkWzJdKyJIIitoWzNdKyJMIitoWzFdKyIsIitkWzFdKyJaIjoiTSIraFsxXSsiLCIrZFsxXSsiTCIraFsyXSsiLCIrZFszXSsiViIrZFsyXSsiTCIraFsxXSsiLCIrZFswXSsiWiIpLCIiPT09ZyYmKGc9Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixnKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGgucmVtb3ZlKCl9KSl9KHQsZSxyLHUpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHU9clswXS50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlJiZ1LmNvbm5lY3Rvci5saW5lLndpZHRoKXt2YXIgaD0iaCI9PT11Lm9yaWVudGF0aW9uLHA9Zi5zZWxlY3RBbGwoImcubGluZSIpLmRhdGEoaS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxpbmUiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLnNpemUoKTtwLmVhY2goKGZ1bmN0aW9uKHIsbyl7aWYobz09PWQtMXx8ci5jTmV4dCl7dmFyIHU9YyhyLHMsbCxoKSxmPXVbMF0scD11WzFdLG09IiI7dm9pZCAwIT09ZlszXSYmdm9pZCAwIT09cFszXSYmKGg/KG0rPSJNIitmWzBdKyIsIitwWzFdKyJMIitmWzJdKyIsIitwWzJdLG0rPSJNIitmWzFdKyIsIitwWzFdKyJMIitmWzNdKyIsIitwWzJdKToobSs9Ik0iK2ZbMV0rIiwiK3BbMV0rIkwiK2ZbMl0rIiwiK3BbM10sbSs9Ik0iK2ZbMV0rIiwiK3BbMF0rIkwiK2ZbMl0rIiwiK3BbMl0pKSwiIj09PW0mJihtPSJNMCwwWiIpLGkuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJwYXRoIikuYXR0cigiZCIsbSkuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KSl9ZWxzZSBmLnJlbW92ZSgpfSkpfSh0LGUscix1KSxzLnBsb3QodCxlLHIsdSx7bW9kZTpmLmZ1bm5lbG1vZGUsbm9ybTpmLmZ1bm5lbG1vZGUsZ2FwOmYuZnVubmVsZ2FwLGdyb3VwZ2FwOmYuZnVubmVsZ3JvdXBnYXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uL2Jhci9wbG90Ijo2NTQsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiQHBsb3RseS9kMyI6NTh9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmZ1bm5lbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsImZ1bm5lbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9cy5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsdC5tY3x8ZS5jb2xvcikuY2FsbChhLnN0cm9rZSx0Lm1sY3x8ZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsdC5tbHd8fGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuY2FsbChhLmZpbGwscy5jb25uZWN0b3IuZmlsbGNvbG9yKX0pKSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzMsIi4uL2Jhci9zdHlsZSI6NjU3LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NTksIkBwbG90bHkvZDMiOjU4fV0sNzc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOm4ubGFiZWxzLGxhYmVsMDpuLmxhYmVsMCxkbGFiZWw6bi5kbGFiZWwsdmFsdWVzOm4udmFsdWVzLG1hcmtlcjp7Y29sb3JzOm4ubWFya2VyLmNvbG9ycyxsaW5lOntjb2xvcjpsKHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOmwoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxzY2FsZWdyb3VwOmwoe30sbi5zY2FsZWdyb3VwLHt9KSx0ZXh0aW5mbzpsKHt9LG4udGV4dGluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il19KSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInRleHQiLCJwZXJjZW50Il19KSxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksdGV4dHBvc2l0aW9uOmwoe30sbi50ZXh0cG9zaXRpb24se3ZhbHVlczpbImluc2lkZSIsIm5vbmUiXSxkZmx0OiJpbnNpZGUifSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LHRpdGxlOnt0ZXh0Om4udGl0bGUudGV4dCxmb250Om4udGl0bGUuZm9udCxwb3NpdGlvbjpsKHt9LG4udGl0bGUucG9zaXRpb24se3ZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCJdLGRmbHQ6InRvcCBjZW50ZXIifSksZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZnVubmVsYXJlYSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksYXNwZWN0cmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sYmFzZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMzMyxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1NzksIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vcGllL2F0dHJpYnV0ZXMiOjg5Nn1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iZnVubmVsYXJlYSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6NjE0fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9jYWxjIik7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXtuLmNyb3NzVHJhY2VDYWxjKHQse3R5cGU6ImZ1bm5lbGFyZWEifSl9fX0seyIuLi9waWUvY2FsYyI6ODk4fV0sNzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgdT1jKCJsYWJlbHMiKSxmPWMoInZhbHVlcyIpLGg9cyh1LGYpLHA9aC5sZW47aWYoZS5faGFzTGFiZWxzPWguaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1oLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxtPWMoInRleHQiKSxnPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGd8fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxnfHxkJiYibm9uZSIhPT1kKXt2YXIgdj1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsdix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9YShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi9iYXIvZGVmYXVsdHMiOjY0NywiLi4vcGllL2RlZmF1bHRzIjo4OTksIi4vYXR0cmlidXRlcyI6Nzc4fV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbGFyZWEiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwiZnVubmVsYXJlYSIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuLi9waWUvc3R5bGVfb25lIiksbWV0YTp7fX19LHsiLi4vcGllL3N0eWxlX29uZSI6OTA3LCIuL2F0dHJpYnV0ZXMiOjc3OCwiLi9iYXNlX3Bsb3QiOjc3OSwiLi9jYWxjIjo3ODAsIi4vZGVmYXVsdHMiOjc4MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzgzLCIuL2xheW91dF9kZWZhdWx0cyI6Nzg0LCIuL3Bsb3QiOjc4NSwiLi9zdHlsZSI6Nzg2fV0sNzgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyIpLmhpZGRlbmxhYmVscztlLmV4cG9ydHM9e2hpZGRlbmxhYmVsczpuLGZ1bm5lbGFyZWFjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZGZ1bm5lbGFyZWFjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vcGllL2xheW91dF9hdHRyaWJ1dGVzIjo5MDN9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzgzfV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vbGliIiksbz1hLnN0clNjYWxlLHM9YS5zdHJUcmFuc2xhdGUsbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uL2Jhci9wbG90IikudG9Nb3ZlSW5zaWRlQmFyLHU9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLGY9dS5yZWNvcmRNaW5UZXh0U2l6ZSxoPXUuY2xlYXJNaW5UZXh0U2l6ZSxwPXQoIi4uL3BpZS9oZWxwZXJzIiksZD10KCIuLi9waWUvcGxvdCIpLG09ZC5hdHRhY2hGeEhhbmRsZXJzLGc9ZC5kZXRlcm1pbmVJbnNpZGVUZXh0Rm9udCx2PWQubGF5b3V0QXJlYXMseT1kLnByZXJlbmRlclRpdGxlcyx4PWQucG9zaXRpb25UaXRsZU91dHNpZGUsYj1kLmZvcm1hdFNsaWNlTGFiZWw7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiJsIisoZVswXS10WzBdKSsiLCIrKGVbMV0tdFsxXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtoKCJmdW5uZWxhcmVhIixyKSx5KGUsdCksdihlLHIuX3NpemUpLGEubWFrZVRyYWNlR3JvdXBzKHIuX2Z1bm5lbGFyZWFsYXllcixlLCJ0cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB1PW4uc2VsZWN0KHRoaXMpLGg9ZVswXSxkPWgudHJhY2U7IWZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm47dmFyIGU9dFswXSxyPWUudHJhY2Usbj1yLmFzcGVjdHJhdGlvLGk9ci5iYXNlcmF0aW87aT4uOTk5JiYoaT0uOTk5KTt2YXIgYSxvPU1hdGgucG93KGksMikscz1lLnZUb3RhbCxsPXMsYz1zKm8vKDEtbykvcztmdW5jdGlvbiB1KCl7dmFyIHQsZT17eDp0PU1hdGguc3FydChjKSx5Oi10fTtyZXR1cm5bZS54LGUueV19dmFyIGYsaCxwPVtdO2ZvcihwLnB1c2godSgpKSxmPXQubGVuZ3RoLTE7Zj4tMTtmLS0paWYoIShoPXRbZl0pLmhpZGRlbil7dmFyIGQ9aC52L2w7Yys9ZCxwLnB1c2godSgpKX12YXIgbT0xLzAsZz0tMS8wO2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspYT1wW2ZdLG09TWF0aC5taW4obSxhWzFdKSxnPU1hdGgubWF4KGcsYVsxXSk7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylwW2ZdWzFdLT0oZyttKS8yO3ZhciB2PXBbcC5sZW5ndGgtMV1bMF0seT1lLnIseD0oZy1tKS8yLGI9eS92LF89eS94Km47Zm9yKGUucj1fKngsZj0wO2Y8cC5sZW5ndGg7ZisrKXBbZl1bMF0qPWIscFtmXVsxXSo9Xzt2YXIgdz1bLShhPXBbMF0pWzBdLGFbMV1dLFQ9W2FbMF0sYVsxXV0saz0wO2ZvcihmPXQubGVuZ3RoLTE7Zj4tMTtmLS0paWYoIShoPXRbZl0pLmhpZGRlbil7dmFyIEE9cFtrKz0xXVswXSxNPXBba11bMV07aC5UTD1bLUEsTV0saC5UUj1bQSxNXSxoLkJMPXcsaC5CUj1ULGgucHhtaWQ9KFM9aC5UUixFPWguQlIsWy41KihTWzBdK0VbMF0pLC41KihTWzFdK0VbMV0pXSksdz1oLlRMLFQ9aC5UUn12YXIgUyxFfShlKSx1LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKG8scyl7aWYoby5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle28ucG9pbnROdW1iZXI9by5pLG8uY3VydmVOdW1iZXI9ZC5pbmRleDt2YXIgdT1oLmN4LHY9aC5jeSx5PW4uc2VsZWN0KHRoaXMpLHg9eS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW29dKTt4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSkseS5jYWxsKG0sdCxlKTt2YXIgdz0iTSIrKHUrby5UUlswXSkrIiwiKyh2K28uVFJbMV0pK18oby5UUixvLkJSKStfKG8uQlIsby5CTCkrXyhvLkJMLG8uVEwpKyJaIjt4LmF0dHIoImQiLHcpLGIodCxvLGgpO3ZhciBUPXAuY2FzdE9wdGlvbihkLnRleHRwb3NpdGlvbixvLnB0cyksaz15LnNlbGVjdEFsbCgiZy5zbGljZXRleHQiKS5kYXRhKG8udGV4dCYmIm5vbmUiIT09VD9bMF06W10pO2suZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKSxrLmV4aXQoKS5yZW1vdmUoKSxrLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGg9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLHA9YS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxnKGQsbyxyLmZvbnQpKTtoLnRleHQoby50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoaS5mb250LHApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIG0seSx4LGI9aS5iQm94KGgubm9kZSgpKSxfPU1hdGgubWluKG8uQkxbMV0sby5CUlsxXSkrdix3PU1hdGgubWF4KG8uVExbMV0sby5UUlsxXSkrdjt5PU1hdGgubWF4KG8uVExbMF0sby5CTFswXSkrdSx4PU1hdGgubWluKG8uVFJbMF0sby5CUlswXSkrdSwobT1jKHkseCxfLHcsYix7aXNIb3Jpem9udGFsOiEwLGNvbnN0cmFpbmVkOiEwLGFuZ2xlOjAsYW5jaG9yOiJtaWRkbGUifSkpLmZvbnRTaXplPXAuc2l6ZSxmKGQudHlwZSxtLHIpLGVbc10udHJhbnNmb3JtPW0saC5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybShtKSl9KSl9fSkpO3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKGQudGl0bGUudGV4dD9bMF06W10pO3YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSx2LmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGM9ZC50aXRsZS50ZXh0O2QuX21ldGEmJihjPWEudGVtcGxhdGVTdHJpbmcoYyxkLl9tZXRhKSksZS50ZXh0KGMpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQsZC50aXRsZS5mb250KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpO3ZhciB1PXgoaCxyLl9zaXplKTtlLmF0dHIoInRyYW5zZm9ybSIscyh1LngsdS55KStvKE1hdGgubWluKDEsdS5zY2FsZSkpK3ModS50eCx1LnR5KSl9KSl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uL2Jhci9wbG90Ijo2NTQsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiLi4vcGllL2hlbHBlcnMiOjkwMSwiLi4vcGllL3Bsb3QiOjkwNSwiQHBsb3RseS9kMyI6NTh9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vcGllL3N0eWxlX29uZSIpLGE9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2Z1bm5lbGFyZWFsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO2EodCxlLCJmdW5uZWxhcmVhIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiLi4vcGllL3N0eWxlX29uZSI6OTA3LCJAcGxvdGx5L2QzIjo1OH1dLDc4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz11KHt6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHg6dSh7fSxuLngse2ltcGxpZWRFZGl0czp7eHR5cGU6ImFycmF5In19KSx4MDp1KHt9LG4ueDAse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSksZHg6dSh7fSxuLmR4LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLHk6dSh7fSxuLnkse2ltcGxpZWRFZGl0czp7eXR5cGU6ImFycmF5In19KSx5MDp1KHt9LG4ueTAse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksZHk6dSh7fSxuLmR5LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2Q6dSh7fSxuLnhwZXJpb2Qse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZDp1KHt9LG4ueXBlcmlvZCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx4cGVyaW9kMDp1KHt9LG4ueHBlcmlvZDAse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZDA6dSh7fSxuLnlwZXJpb2QwLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2RhbGlnbm1lbnQ6dSh7fSxuLnhwZXJpb2RhbGlnbm1lbnQse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZGFsaWdubWVudDp1KHt9LG4ueXBlcmlvZGFsaWdubWVudCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc3Bvc2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHl0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0senNtb290aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmFzdCIsImJlc3QiLCExXSxkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbmdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6Im5vbmUifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOnMoKSx0ZXh0dGVtcGxhdGU6bCh7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsieCIsInkiLCJ6IiwidGV4dCJdfSksdGV4dGZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QiLGF1dG9TaXplOiEwLGF1dG9Db2xvcjohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxzaG93bGVnZW5kOnUoe30saS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LHt0cmFuc2Zvcm1zOnZvaWQgMH0sYygiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw3ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9pbnRlcnAyZCIpLGg9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10W25dO2khPT1kJiZlLnB1c2goaSl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsZyx2LHkseCxiLF8sdyxULGssQSxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxTPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxFPW4udHJhY2VJcyhlLCJjb250b3VyIiksTD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksQz1uLnRyYWNlSXMoZSwiZ2wyZCIpLFA9RT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsUy5fbWluRHRpY2s9MCxMKXk9KEE9cyh0LGUpKS5vcmlnX3gscj1BLngsZz1BLngwLHY9QS5keCx3PUEub3JpZ195LHg9QS55LGI9QS55MCxfPUEuZHksVD1BLno7ZWxzZXt2YXIgST1lLno7aS5pc0FycmF5MUQoSSk/KGMoZSxNLFMsIngiLCJ5IixbInoiXSkscj1lLl94LHg9ZS5feSxJPWUuX3opOih5PWUueD9NLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sdz1lLnk/Uy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHI9byhlLE0sIngiLHkpLnZhbHMseD1vKGUsUywieSIsdykudmFscyxlLl94PXIsZS5feT14KSxnPWUueDAsdj1lLmR4LGI9ZS55MCxfPWUuZHksVD11KEksZSxNLFMpfWZ1bmN0aW9uIE8odCl7UD1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxpLndhcm4oJ2Nhbm5vdCB1c2UgenNtb290aDogImZhc3QiOiAnK3QpfWlmKChNLnJhbmdlYnJlYWtzfHxTLnJhbmdlYnJlYWtzKSYmKFQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPS0xLGE9MDthPHIubGVuZ3RoO2ErKylpZihlW2FdIT09ZCl7aSsrLG5baV09W107Zm9yKHZhciBvPTA7bzxyW2FdLmxlbmd0aDtvKyspdFtvXSE9PWQmJm5baV0ucHVzaChyW2FdW29dKX1yZXR1cm4gbn0ocix4LFQpLEx8fChyPW0ocikseD1tKHgpLGUuX3g9cixlLl95PXgpKSxMfHwhRSYmIWUuY29ubmVjdGdhcHN8fChlLl9lbXB0eXBvaW50cz1oKFQpLGYoVCxlLl9lbXB0eXBvaW50cykpLCJmYXN0Ij09PVApaWYoImxvZyI9PT1NLnR5cGV8fCJsb2ciPT09Uy50eXBlKU8oImxvZyBheGlzIGZvdW5kIik7ZWxzZSBpZighTCl7aWYoci5sZW5ndGgpe3ZhciB6PShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxEPU1hdGguYWJzKHovMTAwKTtmb3Ioaz0wO2s8ci5sZW5ndGgtMTtrKyspaWYoTWF0aC5hYnMocltrKzFdLXJba10teik+RCl7TygieCBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHgubGVuZ3RoJiYiZmFzdCI9PT1QKXt2YXIgUj0oeFt4Lmxlbmd0aC0xXS14WzBdKS8oeC5sZW5ndGgtMSksRj1NYXRoLmFicyhSLzEwMCk7Zm9yKGs9MDtrPHgubGVuZ3RoLTE7aysrKWlmKE1hdGguYWJzKHhbaysxXS14W2tdLVIpPkYpe08oInkgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEI9aS5tYXhSb3dMZW5ndGgoVCksTj0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixqPXAoZSxOLGcsdixCLE0pLFU9InNjYWxlZCI9PT1lLnl0eXBlPyIiOngsVj1wKGUsVSxiLF8sVC5sZW5ndGgsUyk7Q3x8KGUuX2V4dHJlbWVzW00uX2lkXT1hLmZpbmRFeHRyZW1lcyhNLGopLGUuX2V4dHJlbWVzW1MuX2lkXT1hLmZpbmRFeHRyZW1lcyhTLFYpKTt2YXIgSD17eDpqLHk6Vix6OlQsdGV4dDplLl90ZXh0fHxlLnRleHQsaG92ZXJ0ZXh0OmUuX2hvdmVydGV4dHx8ZS5ob3ZlcnRleHR9O2lmKGUueHBlcmlvZGFsaWdubWVudCYmeSYmKEgub3JpZ194PXkpLGUueXBlcmlvZGFsaWdubWVudCYmdyYmKEgub3JpZ195PXcpLE4mJk4ubGVuZ3RoPT09ai5sZW5ndGgtMSYmKEgueENlbnRlcj1OKSxVJiZVLmxlbmd0aD09PVYubGVuZ3RoLTEmJihILnlDZW50ZXI9VSksTCYmKEgueFJhbmdlcz1BLnhSYW5nZXMsSC55UmFuZ2VzPUEueVJhbmdlcyxILnB0cz1BLnB0cyksRXx8bCh0LGUse3ZhbHM6VCxjTGV0dGVyOiJ6In0pLEUmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBxPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtILnhmaWxsPXAocSxOLGcsdixCLE0pLEgueWZpbGw9cChxLFUsYixfLFQubGVuZ3RoLFMpfXJldHVybltIXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9oaXN0b2dyYW0yZC9jYWxjIjo4MjEsIi4vY2xlYW5fMmRfYXJyYXkiOjc4OSwiLi9jb252ZXJ0X2NvbHVtbl94eXoiOjc5MSwiLi9maW5kX2VtcHRpZXMiOjc5MywiLi9pbnRlcnAyZCI6Nzk2LCIuL21ha2VfYm91bmRfYXJyYXkiOjc5OH1dLDc4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdSxmLGg7ZnVuY3Rpb24gcCh0KXtpZihuKHQpKXJldHVybit0fWlmKGUmJmUudHJhbnNwb3NlKXtmb3Iocz0wLGY9MDtmPHQubGVuZ3RoO2YrKylzPU1hdGgubWF4KHMsdFtmXS5sZW5ndGgpO2lmKDA9PT1zKXJldHVybiExO2M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSx1PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odFtyXXx8W10pW2VdfX1lbHNlIHM9dC5sZW5ndGgsYz1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbZV18fFtdKVtyXX07dmFyIGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09YXx8cj09PWE/YTp1KHQsZSxyKX07ZnVuY3Rpb24gbSh0KXtpZihlJiYiY2FycGV0IiE9PWUudHlwZSYmImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlJiZ0JiYiY2F0ZWdvcnkiPT09dC50eXBlJiZlWyJfIit0Ll9pZC5jaGFyQXQoMCldLmxlbmd0aCl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49e30sbz1lWyJfIityKyJDYXRlZ29yeU1hcCJdfHxlW3JdO2ZvcihmPTA7ZjxvLmxlbmd0aDtmKyspbltvW2ZdXT1mO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uW3QuX2NhdGVnb3JpZXNbZV1dO3JldHVybiByKzE/cjphfX1yZXR1cm4gaS5pZGVudGl0eX12YXIgZz1tKHIpLHY9bShvKTtvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYocz1vLl9jYXRlZ29yaWVzLmxlbmd0aCk7dmFyIHk9bmV3IEFycmF5KHMpO2ZvcihmPTA7ZjxzO2YrKylmb3IobD1yJiYiY2F0ZWdvcnkiPT09ci50eXBlP3IuX2NhdGVnb3JpZXMubGVuZ3RoOmModCxmKSx5W2ZdPW5ldyBBcnJheShsKSxoPTA7aDxsO2grKyl5W2ZdW2hdPXAoZCh0LHYoZiksZyhoKSkpO3JldHVybiB5fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgifX0se31dLDc5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLm1ha2VDYWxjZGF0YSh0LG8pLGY9ci5tYWtlQ2FsY2RhdGEodCxzKTt1PWEodCxlLG8sdSkudmFscyxmPWEodCxyLHMsZikudmFsczt2YXIgaCxwLGQsbSxnPXQudGV4dCx2PXZvaWQgMCE9PWcmJm4uaXNBcnJheTFEKGcpLHk9dC5ob3ZlcnRleHQseD12b2lkIDAhPT15JiZuLmlzQXJyYXkxRCh5KSxiPW4uZGlzdGluY3RWYWxzKHUpLF89Yi52YWxzLHc9bi5kaXN0aW5jdFZhbHMoZiksVD13LnZhbHMsaz1bXSxBPVQubGVuZ3RoLE09Xy5sZW5ndGg7Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylrW2hdPW4uaW5pdDJkQXJyYXkoQSxNKTt2JiYoZD1uLmluaXQyZEFycmF5KEEsTSkpLHgmJihtPW4uaW5pdDJkQXJyYXkoQSxNKSk7dmFyIFM9bi5pbml0MmRBcnJheShBLE0pO2ZvcihoPTA7aDxjO2grKylpZih1W2hdIT09aSYmZltoXSE9PWkpe3ZhciBFPW4uZmluZEJpbih1W2hdK2IubWluRGlmZi8yLF8pLEw9bi5maW5kQmluKGZbaF0rdy5taW5EaWZmLzIsVCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIEM9dFtsW3BdXTtrW3BdW0xdW0VdPUNbaF0sU1tMXVtFXT1ofXYmJihkW0xdW0VdPWdbaF0pLHgmJihtW0xdW0VdPXlbaF0pfWZvcih0WyJfIitvXT1fLHRbIl8iK3NdPVQscD0wO3A8bC5sZW5ndGg7cCsrKXRbIl8iK2xbcF1dPWtbcF07diYmKHQuX3RleHQ9ZCkseCYmKHQuX2hvdmVydGV4dD1tKSxlJiYiY2F0ZWdvcnkiPT09ZS50eXBlJiYodFsiXyIrbysiQ2F0ZWdvcnlNYXAiXT1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbdF19KSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitzKyJDYXRlZ29yeU1hcCJdPVQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci5fY2F0ZWdvcmllc1t0XX0pKSksdC5fYWZ0ZXIyYmVmb3JlPVN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU0Nn1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHl6X2RlZmF1bHRzIiksYT10KCIuL2xhYmVsX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWkodCxlLGYsdSk/KG8odCxlLHUsZiksZigieGhvdmVyZm9ybWF0IiksZigieWhvdmVyZm9ybWF0IiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxhKGYsdSkscyh0LGUsZix1KSxmKCJob3Zlcm9uZ2FwcyIpLGYoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopJiYhMSE9PWUuenNtb290aCksbCh0LGUsdSxmLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDIsIi4vYXR0cmlidXRlcyI6Nzg3LCIuL2xhYmVsX2RlZmF1bHRzIjo3OTcsIi4vc3R5bGVfZGVmYXVsdHMiOjgwMSwiLi94eXpfZGVmYXVsdHMiOjgwMn1dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxmPXt9LGg9W10scD10WzBdLGQ9W10sbT1bMCwwLDBdLGc9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxnO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGZbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6aC5wdXNoKFtyLGldKSk7Zm9yKDtoLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1oLmxlbmd0aC0xO28+PTA7by0tKShzPSgoZltbKHI9KGE9aFtvXSlbMF0pLTEsaT1hWzFdXV18fG0pWzJdKyhmW1tyKzEsaV1dfHxtKVsyXSsoZltbcixpLTFdXXx8bSlbMl0rKGZbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10saC5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpZlthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KSl9fSx7Ii4uLy4uL2xpYiI6NDk4fV0sNzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGYsaCxwPWwuaXNDb250b3VyLGQ9dC5jZFswXSxtPWQudHJhY2UsZz10LnhhLHY9dC55YSx5PWQueCx4PWQueSxiPWQueixfPWQueENlbnRlcix3PWQueUNlbnRlcixUPWQuem1hc2ssaz1tLnpob3ZlcmZvcm1hdCxBPXksTT14O2lmKCExIT09dC5pbmRleCl7dHJ5e2Y9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxoPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoZjwwfHxmPj1iWzBdLmxlbmd0aHx8aDwwfHxoPmIubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS15WzBdLGUteVt5Lmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteFswXSxyLXhbeC5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYocCl7dmFyIFM7Zm9yKEE9WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspQS5wdXNoKCh5W1NdK3lbUy0xXSkvMik7Zm9yKEEucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKSxNPVsyKnhbMF0teFsxXV0sUz0xO1M8eC5sZW5ndGg7UysrKU0ucHVzaCgoeFtTXSt4W1MtMV0pLzIpO00ucHVzaChbMip4W3gubGVuZ3RoLTFdLXhbeC5sZW5ndGgtMl1dKX1mPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixpLmZpbmRCaW4oZSxBKSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEUsTCxDPWcuYzJwKHlbZl0pLFA9Zy5jMnAoeVtmKzFdKSxJPXYuYzJwKHhbaF0pLE89di5jMnAoeFtoKzFdKTtwPyhFPWQub3JpZ194fHx5LEw9ZC5vcmlnX3l8fHgsUD1DLGM9RVtmXSxPPUksdT1MW2hdKTooRT1kLm9yaWdfeHx8X3x8eSxMPWQub3JpZ195fHx3fHx4LGM9Xz9FW2ZdOihFW2ZdK0VbZisxXSkvMix1PXc/TFtoXTooTFtoXStMW2grMV0pLzIsZyYmImNhdGVnb3J5Ij09PWcudHlwZSYmKGM9eVtmXSksdiYmImNhdGVnb3J5Ij09PXYudHlwZSYmKHU9eFtoXSksbS56c21vb3RoJiYoQz1QPWcuYzJwKGMpLEk9Tz12LmMycCh1KSkpO3ZhciB6PWJbaF1bZl07aWYoVCYmIVRbaF1bZl0mJih6PXZvaWQgMCksdm9pZCAwIT09enx8bS5ob3Zlcm9uZ2Fwcyl7dmFyIEQ7QXJyYXkuaXNBcnJheShkLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHRbaF0pP0Q9ZC5ob3ZlcnRleHRbaF1bZl06QXJyYXkuaXNBcnJheShkLnRleHQpJiZBcnJheS5pc0FycmF5KGQudGV4dFtoXSkmJihEPWQudGV4dFtoXVtmXSk7dmFyIFI9byhtKSxGPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltSLm1pbixSLm1heF0saG92ZXJmb3JtYXQ6ayxfc2VwYXJhdG9yczpnLl9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6Zy5fbnVtRm9ybWF0fSxCPWEudGlja1RleHQoRix6LCJob3ZlciIpLnRleHQ7cmV0dXJuW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDptLl9hZnRlcjJiZWZvcmU/bS5fYWZ0ZXIyYmVmb3JlW2hdW2ZdOltoLGZdLGRpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQubWF4U3Bpa2VEaXN0YW5jZSx4MDpDLHgxOlAseTA6SSx5MTpPLHhMYWJlbFZhbDpjLHlMYWJlbFZhbDp1LHpMYWJlbFZhbDp6LHpMYWJlbDpCLHRleHQ6RH0pXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5fV0sNzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoZWF0bWFwIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4vYXR0cmlidXRlcyI6Nzg3LCIuL2NhbGMiOjc4OCwiLi9jb2xvcmJhciI6NzkwLCIuL2RlZmF1bHRzIjo3OTIsIi4vaG92ZXIiOjc5NCwiLi9wbG90Ijo3OTksIi4vc3R5bGUiOjgwMH1dLDc5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBhKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHY9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoYT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2FdW29dLHA9MCxoPTAsbD0wO2w8NDtsKyspKHU9dFthKyhjPWlbbF0pWzBdXSkmJnZvaWQgMCE9PShmPXVbbytjWzFdXSkmJigwPT09cD9tPWc9ZjoobT1NYXRoLm1pbihtLGYpLGc9TWF0aC5tYXgoZyxmKSksaCsrLHArPWYpO2lmKDA9PT1oKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbYV1bb109cC9oLHZvaWQgMD09PWQ/aDw0JiYodj0xKToodFthXVtvXT0oMStyKSp0W2FdW29dLXIqZCxnPm0mJih2PU1hdGgubWF4KHYsTWF0aC5hYnModFthXVtvXS1kKS8oZy1tKSkpKX1yZXR1cm4gdn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPTE7Zm9yKG8odCxlKSxyPTA7cjxlLmxlbmd0aCYmIShlW3JdWzJdPDQpO3IrKyk7Zm9yKGU9ZS5zbGljZShyKSxyPTA7cjwxMDAmJmk+LjAxO3IrKylpPW8odCxlLGEoaSkpO3JldHVybiBpPi4wMSYmbi5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixpKSx0fX0seyIuLi8uLi9saWIiOjQ5OH1dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0KCJ0ZXh0dGVtcGxhdGUiKTt2YXIgcj1uLmV4dGVuZEZsYXQoe30sZS5mb250LHtjb2xvcjoiYXV0byIsc2l6ZToiYXV0byJ9KTtuLmNvZXJjZUZvbnQodCwidGV4dGZvbnQiLHIpfX0seyIuLi8uLi9saWIiOjQ5OH1dLDc5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxmPVtdLGg9bi50cmFjZUlzKHQsImNvbnRvdXIiKSxwPW4udHJhY2VJcyh0LCJoaXN0b2dyYW0iKSxkPW4udHJhY2VJcyh0LCJnbDJkIik7aWYoaShlKSYmZS5sZW5ndGg+MSYmIXAmJiJjYXRlZ29yeSIhPT1zLnR5cGUpe3ZhciBtPWUubGVuZ3RoO2lmKCEobTw9bykpcmV0dXJuIGg/ZS5zbGljZSgwLG8pOmUuc2xpY2UoMCxvKzEpO2lmKGh8fGQpZj1lLnNsaWNlKDAsbyk7ZWxzZSBpZigxPT09bylmPVtlWzBdLS41LGVbMF0rLjVdO2Vsc2V7Zm9yKGY9WzEuNSplWzBdLS41KmVbMV1dLHU9MTt1PG07dSsrKWYucHVzaCguNSooZVt1LTFdK2VbdV0pKTtmLnB1c2goMS41KmVbbS0xXS0uNSplW20tMl0pfWlmKG08byl7dmFyIGc9ZltmLmxlbmd0aC0xXSx2PWctZltmLmxlbmd0aC0yXTtmb3IodT1tO3U8bzt1KyspZys9dixmLnB1c2goZyl9fWVsc2V7dmFyIHk9dFtzLl9pZC5jaGFyQXQoMCkrImNhbGVuZGFyIl07aWYocClsPXMucjJjKHIsMCx5KTtlbHNlIGlmKGkoZSkmJjE9PT1lLmxlbmd0aClsPWVbMF07ZWxzZSBpZih2b2lkIDA9PT1yKWw9MDtlbHNle2w9KCJsb2ciPT09cy50eXBlP3MuZDJjOnMucjJjKShyLDAseSl9Zm9yKGM9YXx8MSx1PWh8fGQ/MDotLjU7dTxvO3UrKylmLnB1c2gobCtjKnUpfXJldHVybiBmfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzM31dLDc5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uL3NjYXR0ZXIvZm9ybWF0X2xhYmVscyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMscD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsZD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLG09dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBnKHQpe3JldHVybiB0LnNlbGVjdEFsbCgiZy5oZWF0bWFwLWxhYmVsIil9ZnVuY3Rpb24gdih0KXtnKHQpLnJlbW92ZSgpfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49bC5jb25zdHJhaW4obC5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT1lW24rMV0sbz1sLmNvbnN0cmFpbihuKyh0LWkpLyhhLWkpLS41LDAscikscz1NYXRoLnJvdW5kKG8pLGM9TWF0aC5hYnMoby1zKTtyZXR1cm4gbyYmbyE9PXImJmM/e2JpbjA6cyxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKHMrYy8oby1zKSl9OntiaW4wOnMsYmluMTpzLGZyYWM6MH19ZnVuY3Rpb24geCh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1sLmNvbnN0cmFpbihsLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPSh0LWkpLyhlW24rMV0taSl8fDA7cmV0dXJuIGE8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTphPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzphfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1hfX1mdW5jdGlvbiBiKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLFQ9ZS55YXhpcztsLm1ha2VUcmFjZUdyb3VwcyhfLHIsImhtIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsXyxrLEEsTSxTLEUsTCxDPW4uc2VsZWN0KHRoaXMpLFA9ZVswXSxJPVAudHJhY2UsTz1JLnhnYXB8fDAsej1JLnlnYXB8fDAsRD1QLnosUj1QLngsRj1QLnksQj1QLnhDZW50ZXIsTj1QLnlDZW50ZXIsaj1hLnRyYWNlSXMoSSwiY29udG91ciIpLFU9aj8iYmVzdCI6SS56c21vb3RoLFY9RC5sZW5ndGgsSD1sLm1heFJvd0xlbmd0aChEKSxxPSExLEc9ITE7Zm9yKFM9MDt2b2lkIDA9PT1yJiZTPFIubGVuZ3RoLTE7KXI9dy5jMnAoUltTXSksUysrO2ZvcihTPVIubGVuZ3RoLTE7dm9pZCAwPT09XyYmUz4wOylfPXcuYzJwKFJbU10pLFMtLTtmb3IoXzxyJiYoaz1fLF89cixyPWsscT0hMCksUz0wO3ZvaWQgMD09PUEmJlM8Ri5sZW5ndGgtMTspQT1ULmMycChGW1NdKSxTKys7Zm9yKFM9Ri5sZW5ndGgtMTt2b2lkIDA9PT1NJiZTPjA7KU09VC5jMnAoRltTXSksUy0tO2lmKE08QSYmKGs9QSxBPU0sTT1rLEc9ITApLGomJihCPVIsTj1GLFI9UC54ZmlsbCxGPVAueWZpbGwpLCJmYXN0IiE9PVUpe3ZhciBZPSJiZXN0Ij09PVU/MDouNTtyPU1hdGgubWF4KC1ZKncuX2xlbmd0aCxyKSxfPU1hdGgubWluKCgxK1kpKncuX2xlbmd0aCxfKSxBPU1hdGgubWF4KC1ZKlQuX2xlbmd0aCxBKSxNPU1hdGgubWluKCgxK1kpKlQuX2xlbmd0aCxNKX12YXIgVyxYLFo9TWF0aC5yb3VuZChfLXIpLEo9TWF0aC5yb3VuZChNLUEpO2lmKFo8PTB8fEo8PTApcmV0dXJuIEMuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW10pLmV4aXQoKS5yZW1vdmUoKSx2b2lkIHYoQyk7ImZhc3QiPT09VT8oVz1ILFg9Vik6KFc9WixYPUopO3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO0sud2lkdGg9VyxLLmhlaWdodD1YO3ZhciBRLCQsdHQ9Sy5nZXRDb250ZXh0KCIyZCIpLGV0PXAoSSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTsiZmFzdCI9PT1VPyhRPXE/ZnVuY3Rpb24odCl7cmV0dXJuIEgtMS10fTpsLmlkZW50aXR5LCQ9Rz9mdW5jdGlvbih0KXtyZXR1cm4gVi0xLXR9OmwuaWRlbnRpdHkpOihRPWZ1bmN0aW9uKHQpe3JldHVybiBsLmNvbnN0cmFpbihNYXRoLnJvdW5kKHcuYzJwKFJbdF0pLXIpLDAsWil9LCQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwuY29uc3RyYWluKE1hdGgucm91bmQoVC5jMnAoRlt0XSktQSksMCxKKX0pO3ZhciBydCxudCxpdCxhdCxvdD0kKDApLHN0PVtvdCxvdF0sbHQ9cT8wOjEsY3Q9Rz8wOjEsdXQ9MCxmdD0wLGh0PTAscHQ9MDtmdW5jdGlvbiBkdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPWV0KHQpO3JldHVybiByWzBdPU1hdGgucm91bmQoclswXSksclsxXT1NYXRoLnJvdW5kKHJbMV0pLHJbMl09TWF0aC5yb3VuZChyWzJdKSx1dCs9ZSxmdCs9clswXSplLGh0Kz1yWzFdKmUscHQrPXJbMl0qZSxyfXJldHVyblswLDAsMCwwXX1mdW5jdGlvbiBtdCh0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gZHQodm9pZCAwLDEpO3ZhciBhLG89dFtyLmJpbjFdLHM9ZVtyLmJpbjBdLGw9ZVtyLmJpbjFdLGM9by1pfHwwLHU9cy1pfHwwO3JldHVybiBhPXZvaWQgMD09PW8/dm9pZCAwPT09bD8wOnZvaWQgMD09PXM/MioobC1pKToyKigyKmwtcy1pKS8zOnZvaWQgMD09PWw/dm9pZCAwPT09cz8wOjIqKDIqaS1vLXMpLzM6dm9pZCAwPT09cz8yKigyKmwtby1pKS8zOmwraS1vLXMsZHQoaStyLmZyYWMqYytuLmZyYWMqKHUrci5mcmFjKmEpKX1pZihVKXt2YXIgZ3QsdnQ9MDt0cnl7Z3Q9bmV3IFVpbnQ4QXJyYXkoWipKKjQpfWNhdGNoKHQpe2d0PW5ldyBBcnJheShaKkoqNCl9aWYoImJlc3QiPT09VSl7dmFyIHl0LHh0LGJ0LF90PUJ8fFIsd3Q9Tnx8RixUdD1uZXcgQXJyYXkoX3QubGVuZ3RoKSxrdD1uZXcgQXJyYXkod3QubGVuZ3RoKSxBdD1uZXcgQXJyYXkoWiksTXQ9Qj94OnksU3Q9Tj94Onk7Zm9yKFM9MDtTPF90Lmxlbmd0aDtTKyspVHRbU109TWF0aC5yb3VuZCh3LmMycChfdFtTXSktcik7Zm9yKFM9MDtTPHd0Lmxlbmd0aDtTKyspa3RbU109TWF0aC5yb3VuZChULmMycCh3dFtTXSktQSk7Zm9yKFM9MDtTPFo7UysrKUF0W1NdPU10KFMsVHQpO2ZvcihFPTA7RTxKO0UrKylmb3IoeHQ9RFsoeXQ9U3QoRSxrdCkpLmJpbjBdLGJ0PURbeXQuYmluMV0sUz0wO1M8WjtTKyssdnQrPTQpYihndCx2dCxhdD1tdCh4dCxidCxBdFtTXSx5dCkpfWVsc2UgZm9yKEU9MDtFPFY7RSsrKWZvcihpdD1EW0VdLHN0PSQoRSksUz0wO1M8WjtTKyspYXQ9ZHQoaXRbU10sMSksYihndCx2dD00KihzdCpaK1EoUykpLGF0KTt2YXIgRXQ9dHQuY3JlYXRlSW1hZ2VEYXRhKFosSik7dHJ5e0V0LmRhdGEuc2V0KGd0KX1jYXRjaCh0KXt2YXIgTHQ9RXQuZGF0YSxDdD1MdC5sZW5ndGg7Zm9yKEU9MDtFPEN0O0UrKylMdFtFXT1ndFtFXX10dC5wdXRJbWFnZURhdGEoRXQsMCwwKX1lbHNle3ZhciBQdD1NYXRoLmZsb29yKE8vMiksSXQ9TWF0aC5mbG9vcih6LzIpO2ZvcihFPTA7RTxWO0UrKylpZihpdD1EW0VdLHN0LnJldmVyc2UoKSxzdFtjdF09JChFKzEpLHN0WzBdIT09c3RbMV0mJnZvaWQgMCE9PXN0WzBdJiZ2b2lkIDAhPT1zdFsxXSlmb3IocnQ9W250PVEoMCksbnRdLFM9MDtTPEg7UysrKXJ0LnJldmVyc2UoKSxydFtsdF09UShTKzEpLHJ0WzBdIT09cnRbMV0mJnZvaWQgMCE9PXJ0WzBdJiZ2b2lkIDAhPT1ydFsxXSYmKGF0PWR0KGl0W1NdLChydFsxXS1ydFswXSkqKHN0WzFdLXN0WzBdKSksdHQuZmlsbFN0eWxlPSJyZ2JhKCIrYXQuam9pbigiLCIpKyIpIix0dC5maWxsUmVjdChydFswXStQdCxzdFswXStJdCxydFsxXS1ydFswXS1PLHN0WzFdLXN0WzBdLXopKX1mdD1NYXRoLnJvdW5kKGZ0L3V0KSxodD1NYXRoLnJvdW5kKGh0L3V0KSxwdD1NYXRoLnJvdW5kKHB0L3V0KTt2YXIgT3Q9aSgicmdiKCIrZnQrIiwiK2h0KyIsIitwdCsiKSIpO3QuX2htcGl4Y291bnQ9KHQuX2htcGl4Y291bnR8fDApK3V0LHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK3V0Kk90LmdldEx1bWluYW5jZSgpO3ZhciB6dD1DLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGUpO3p0LmVudGVyKCkuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpkLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHp0LmF0dHIoe2hlaWdodDpKLHdpZHRoOloseDpyLHk6QSwieGxpbms6aHJlZiI6Sy50b0RhdGFVUkwoImltYWdlL3BuZyIpfSksdihDKTt2YXIgRHQ9SS50ZXh0dGVtcGxhdGU7aWYoRHQpe3ZhciBSdD1oKEkpLEZ0PXt0eXBlOiJsaW5lYXIiLHJhbmdlOltSdC5taW4sUnQubWF4XSxfc2VwYXJhdG9yczp3Ll9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6dy5fbnVtRm9ybWF0fSxCdD0iaGlzdG9ncmFtMmRjb250b3VyIj09PUkudHlwZSxOdD0iY29udG91ciI9PT1JLnR5cGUsanQ9TnQ/Vi0xOlYsVXQ9TnQ/MTowLFZ0PU50P0gtMTpILEh0PVtdO2ZvcihTPU50PzE6MDtTPGp0O1MrKyl7dmFyIHF0O2lmKE50KXF0PVAueVtTXTtlbHNlIGlmKEJ0KXtpZigwPT09U3x8Uz09PVYtMSljb250aW51ZTtxdD1QLnlbU119ZWxzZSBpZihQLnlDZW50ZXIpcXQ9UC55Q2VudGVyW1NdO2Vsc2V7aWYoUysxPT09ViYmdm9pZCAwPT09UC55W1MrMV0pY29udGludWU7cXQ9KFAueVtTXStQLnlbUysxXSkvMn12YXIgR3Q9TWF0aC5yb3VuZChULmMycChxdCkpO2lmKCEoMD5HdHx8R3Q+VC5fbGVuZ3RoKSlmb3IoRT1VdDtFPFZ0O0UrKyl7dmFyIFl0O2lmKE50KVl0PVAueFtFXTtlbHNlIGlmKEJ0KXtpZigwPT09RXx8RT09PUgtMSljb250aW51ZTtZdD1QLnhbRV19ZWxzZSBpZihQLnhDZW50ZXIpWXQ9UC54Q2VudGVyW0VdO2Vsc2V7aWYoRSsxPT09SCYmdm9pZCAwPT09UC54W0UrMV0pY29udGludWU7WXQ9KFAueFtFXStQLnhbRSsxXSkvMn12YXIgV3Q9TWF0aC5yb3VuZCh3LmMycChZdCkpO2lmKCEoMD5XdHx8V3Q+dy5fbGVuZ3RoKSl7dmFyIFh0PXUoe3g6WXQseTpxdH0sSSx0Ll9mdWxsTGF5b3V0KTtYdC54PVl0LFh0Lnk9cXQ7dmFyIFp0PVAueltTXVtFXTt2b2lkIDA9PT1adD8oWHQuej0iIixYdC56TGFiZWw9IiIpOihYdC56PVp0LFh0LnpMYWJlbD1zLnRpY2tUZXh0KEZ0LFp0LCJob3ZlciIpLnRleHQpO3ZhciBKdD1QLnRleHQmJlAudGV4dFtTXSYmUC50ZXh0W1NdW0VdO3ZvaWQgMCE9PUp0JiYhMSE9PUp0fHwoSnQ9IiIpLFh0LnRleHQ9SnQ7dmFyIEt0PWwudGV4dHRlbXBsYXRlU3RyaW5nKER0LFh0LHQuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLFh0LEkuX21ldGF8fHt9KTtpZihLdCl7dmFyIFF0PUt0LnNwbGl0KCI8YnI+IiksJHQ9UXQubGVuZ3RoLHRlPTA7Zm9yKEw9MDtMPCR0O0wrKyl0ZT1NYXRoLm1heCh0ZSxRdFtMXS5sZW5ndGgpO0h0LnB1c2goe2w6JHQsYzp0ZSx0Okt0LHg6V3QseTpHdCx6Olp0fSl9fX19dmFyIGVlPUkudGV4dGZvbnQscmU9ZWUuZmFtaWx5LG5lPWVlLnNpemUsaWU9dC5fZnVsbExheW91dC5mb250LnNpemU7aWYoIW5lfHwiYXV0byI9PT1uZSl7dmFyIGFlPTEvMCxvZT0xLzAsc2U9MCxsZT0wO2ZvcihMPTA7TDxIdC5sZW5ndGg7TCsrKXt2YXIgY2U9SHRbTF07aWYoc2U9TWF0aC5tYXgoc2UsY2UubCksbGU9TWF0aC5tYXgobGUsY2UuYyksTDxIdC5sZW5ndGgtMSl7dmFyIHVlPUh0W0wrMV0sZmU9TWF0aC5hYnModWUueC1jZS54KSxoZT1NYXRoLmFicyh1ZS55LWNlLnkpO2ZlJiYoYWU9TWF0aC5taW4oYWUsZmUpKSxoZSYmKG9lPU1hdGgubWluKG9lLGhlKSl9fWlzRmluaXRlKGFlKSYmaXNGaW5pdGUob2UpPyhhZS09TyxvZS09eixhZS89bGUsb2UvPXNlLGFlLz1tLzIsb2UvPW0sbmU9TWF0aC5taW4oTWF0aC5mbG9vcihhZSksTWF0aC5mbG9vcihvZSksaWUpKTpuZT1pZX1pZihuZTw9MHx8IWlzRmluaXRlKG5lKSlyZXR1cm47ZyhDKS5kYXRhKEh0KS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhlYXRtYXAtbGFiZWwiLDEpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lZS5jb2xvcjtpJiYiYXV0byIhPT1pfHwoaT1mLmNvbnRyYXN0KCJyZ2JhKCIrZXQoZS56KS5qb2luKCkrIikiKSksci5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGMucG9zaXRpb25UZXh0LGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnktbmUqKHQubCptLzItMSl9KGUpKS5jYWxsKG8uZm9udCxyZSxuZSxpKS50ZXh0KGUudCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KX0pKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NjYsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0NzUsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIjo5MzEsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6MzA3fV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaG0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KSl9fSx7IkBwbG90bHkvZDMiOjU4fV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ITE9PT1yKCJ6c21vb3RoIikmJihyKCJ4Z2FwIikscigieWdhcCIpKSxyKCJ6aG92ZXJmb3JtYXQiKX19LHt9XSw4MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm4ic2NhbGVkIj09PShyP2UodCsidHlwZSIsImFycmF5Iik6InNjYWxlZCIpJiYoZSh0KyIwIiksZSgiZCIrdCkpLHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxmLGg9cigieiIpO2lmKGw9bHx8IngiLGM9Y3x8InkiLHZvaWQgMD09PWh8fCFoLmxlbmd0aClyZXR1cm4gMDtpZihpLmlzQXJyYXkxRCh0LnopKXt1PXIobCksZj1yKGMpO3ZhciBwPWkubWluUm93TGVuZ3RoKHUpLGQ9aS5taW5Sb3dMZW5ndGgoZik7aWYoMD09PXB8fDA9PT1kKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbihwLGQsaC5sZW5ndGgpfWVsc2V7aWYodT1vKGwsciksZj1vKGMsciksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSEwLGE9ITEsbz0hMSxzPTA7czx0Lmxlbmd0aDtzKyspe2lmKGU9dFtzXSwhaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihhPSEwKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihuKGVbbF0pKXtvPSEwO2JyZWFrfX1yZXR1cm4gciYmYSYmb30oaCkpcmV0dXJuIDA7cigidHJhbnNwb3NlIiksZS5fbGVuZ3RoPW51bGx9cmV0dXJuImhlYXRtYXBnbCI9PT10LnR5cGV8fGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFtsLGNdLHMpLCEwfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiZmFzdC1pc251bWVyaWMiOjE4NX1dLDgwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19bC56c21vb3RoPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDoiZmFzdCIsZWRpdFR5cGU6ImNhbGMifSxhKGwsaSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKSxlLmV4cG9ydHM9byhsLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6Nzg3fV0sODA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2hlYXRtYXAyZCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3pzbW9vdGg6ImZhc3QiLHo6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55LHRoaXMub3B0aW9ucy56c21vb3RoPXQuenNtb290aDt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoNCppKSxsPTA7bDxpO2wrKyl7dmFyIGM9ZVtsXSx1PWEoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBmPTA7Zjw0O2YrKylzWzQqbCtmXT11W2ZdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjLHUsZj10aGlzLnNjZW5lLnhheGlzLGg9dGhpcy5zY2VuZS55YXhpczshMT09PXQuenNtb290aCYmKGM9e3BwYWQ6ci54WzFdLXIueFswXX0sdT17cHBhZDpyLnlbMV0tci55WzBdfSksdC5fZXh0cmVtZXNbZi5faWRdPWkuZmluZEV4dHJlbWVzKGYsci54LGMpLHQuX2V4dHJlbWVzW2guX2lkXT1pLmZpbmRFeHRyZW1lcyhoLHIueSx1KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMTksIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDgwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUsbCxzKT8obCgidGV4dCIpLGwoInpzbW9vdGgiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MzcxLCIuLi8uLi9saWIiOjQ5OCwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjgwMiwiLi9hdHRyaWJ1dGVzIjo4MDN9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7WyIqaGVhdG1hcGdsKiB0cmFjZSBpcyBkZXByZWNhdGVkISIsIlBsZWFzZSBjb25zaWRlciBzd2l0Y2hpbmcgdG8gdGhlICpoZWF0bWFwKiBvciAqaW1hZ2UqIHRyYWNlIHR5cGVzLiIsIkFsdGVybmF0aXZlbHkgeW91IGNvdWxkIGNvbnRyaWJ1dGUvc3BvbnNvciByZXdyaXRpbmcgdGhpcyB0cmFjZSB0eXBlIiwiYmFzZWQgb24gY2FydGVzaWFuIGZlYXR1cmVzIGFuZCB1c2luZyByZWdsIGZyYW1ld29yay4iXS5qb2luKCIgIik7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoZWF0bWFwZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxjYXRlZ29yaWVzOlsiZ2wiLCJnbDJkIiwiMmRNYXAiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDJkIjo1OTEsIi4uL2hlYXRtYXAvY2FsYyI6Nzg4LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo3OTAsIi4vYXR0cmlidXRlcyI6ODAzLCIuL2NvbnZlcnQiOjgwNCwiLi9kZWZhdWx0cyI6ODA1fV0sODA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPXQoIi4vYmluX2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksdGV4dDp1KHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnUoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4YmluczpsKCJ4IiwhMCksbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczpsKCJ5IiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxiaW5ncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHR0ZW1wbGF0ZTpvKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsInZhbHVlIl19KSx0ZXh0cG9zaXRpb246dSh7fSxuLnRleHRwb3NpdGlvbix7YXJyYXlPazohMX0pLHRleHRmb250OnMoe2FycmF5T2s6ITEsZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLG91dHNpZGV0ZXh0Zm9udDpzKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxpbnNpZGV0ZXh0Zm9udDpzKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxpbnNpZGV0ZXh0YW5jaG9yOm4uaW5zaWRldGV4dGFuY2hvcix0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDMsIi4vYmluX2F0dHJpYnV0ZXMiOjgwOSwiLi9jb25zdGFudHMiOjgxM31dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjE4NX1dLDgxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGYodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT0iZGF0ZSI9PT1yLnR5cGUsbz1oKGksYSkscz0wO3M8MTA7cysrKXt2YXIgbD1oKDgwKm8sYSk7aWYobz09PWwpYnJlYWs7aWYoIXAobCx0LGUsYSxyLG4pKWJyZWFrO289bH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUmJnQ+Yz90Pm8/dD4xLjEqaT9pOnQ+MS4xKmE/YTpvOnQ+cz9zOnQ+bD9sOmM6TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1mdW5jdGlvbiBwKHQsZSxyLG4sYSxzKXtpZihuJiZ0Pm8pe3ZhciBsPWQoZSxhLHMpLGM9ZChyLGEscyksdT10PT09aT8wOjE7cmV0dXJuIGxbdV0hPT1jW3VdfXJldHVybiBNYXRoLmZsb29yKHIvdCktTWF0aC5mbG9vcihlL3QpPi4xfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPWUuYzJkKHQsaSxyKS5zcGxpdCgiLSIpO3JldHVybiIiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09Ii0iK25bMF0pLG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbCxjPS0xLjEqZSxoPS0uMSplLHA9dC1oLGQ9clswXSxtPXJbMV0sZz1NYXRoLm1pbihmKGQraCxkK3AsbixhKSxmKG0raCxtK3AsbixhKSksdj1NYXRoLm1pbihmKGQrYyxkK2gsbixhKSxmKG0rYyxtK2gsbixhKSk7aWYoZz52JiZ2PE1hdGguYWJzKG0tZCkvNGUzPyhzPWcsbD0hMSk6KHM9TWF0aC5taW4oZyx2KSxsPSEwKSwiZGF0ZSI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmMyZChlLGksYSkscz1vLmluZGV4T2YoIi0iLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGY9dShjLHgsITEsYSk7KGMrZikvMjxlK3QmJihjPWYpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5fV0sODEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi9iaW5fZnVuY3Rpb25zIiksYz10KCIuL25vcm1fZnVuY3Rpb25zIiksdT10KCIuL2F2ZXJhZ2UiKSxmPXQoIi4vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiBoKHQsZSxyLHMsbCl7dmFyIGMsdSxmLHAsZCxtLGcsdj1zKyJiaW5zIix5PXQuX2Z1bGxMYXlvdXQseD1lWyJfIitzKyJiaW5ncm91cCJdLGI9eS5faGlzdG9ncmFtQmluT3B0c1t4XSxfPSJvdmVybGF5Ij09PXkuYmFybW9kZSx3PWZ1bmN0aW9uKHQpe3JldHVybiByLnIyYyh0LDAscCl9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuYzJyKHQsMCxwKX0saz0iZGF0ZSI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxwKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gQSh0LGUscil7ZVt0KyJGb3VuZCJdPyhlW3RdPWsoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKToobVt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi4iK3QpLnNldChyW3RdKSl9aWYoZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0pZGVsZXRlIGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdO2Vsc2V7dT1iLnRyYWNlczt2YXIgTT1bXSxTPSEwLEU9ITEsTD0hMTtmb3IoYz0wO2M8dS5sZW5ndGg7YysrKWlmKChmPXVbY10pLnZpc2libGUpe3ZhciBDPWIuZGlyc1tjXTtkPWZbIl8iK0MrInBvczAiXT1yLm1ha2VDYWxjZGF0YShmLEMpLE09aS5jb25jYXQoTSxkKSxkZWxldGUgZlsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0sITA9PT1lLnZpc2libGUmJihTP1M9ITE6KGRlbGV0ZSBmLl9hdXRvQmluLGZbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdPTEpLGEudHJhY2VJcyhmLCIyZE1hcCIpJiYoRT0hMCksImhpc3RvZ3JhbTJkY29udG91ciI9PT1mLnR5cGUmJihMPSEwKSl9cD11WzBdW3MrImNhbGVuZGFyIl07dmFyIFA9by5hdXRvQmluKE0scixiLm5iaW5zLEUscCxiLnNpemVGb3VuZCYmYi5zaXplKSxJPXVbMF0uX2F1dG9CaW49e307aWYobT1JW2IuZGlyc1swXV09e30sTCYmKGIuc2l6ZXx8KFAuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpKSx2b2lkIDA9PT1iLmVuZCYmKFAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpKSxfJiYhYS50cmFjZUlzKGUsIjJkTWFwIikmJjA9PT1QLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihsKXJldHVybltQLGQsITBdO1A9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYz10Ll9mdWxsTGF5b3V0LHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksZj0hMSxwPTEvMCxkPVtlXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKWlmKChzPXVbb10pPT09ZSlmPSEwO2Vsc2UgaWYoZil7dmFyIG09aCh0LHMscixuLCEwKSxnPW1bMF0sdj1tWzJdO3NbIl8iK24rImF1dG9CaW5GaW5pc2hlZCJdPTEsc1siXyIrbisicG9zMCJdPW1bMV0sdj9kLnB1c2gocyk6cD1NYXRoLm1pbihwLGcuc2l6ZSl9ZWxzZSBsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0scD1NYXRoLm1pbihwLGwuc2l6ZXx8c1thXS5zaXplKTt2YXIgeT1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspZm9yKHZhciB4PWRbb11bIl8iK24rInBvczAiXSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYodm9pZCAwIT09eFtiXSl7eVtvXT14W2JdO2JyZWFrfWlzRmluaXRlKHApfHwocD1pLmRpc3RpbmN0VmFscyh5KS5taW5EaWZmKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKXt2YXIgXz0ocz1kW29dKVtuKyJjYWxlbmRhciJdLHc9e3N0YXJ0OnIuYzJyKHlbb10tcC8yLDAsXyksZW5kOnIuYzJyKHlbb10rcC8yLDAsXyksc2l6ZTpwfTtzLl9pbnB1dFthXT1zW2FdPXcsKGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSkmJmkuZXh0ZW5kRmxhdChsLHcpfXJldHVybiBlW2FdfSh0LGUscixzLHYpfShnPWYuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP1Auc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpOlAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpLGIuc2l6ZT1QLnNpemUsYi5zaXplRm91bmR8fChtLnNpemU9UC5zaXplLGkubmVzdGVkUHJvcGVydHkodVswXSx2KyIuc2l6ZSIpLnNldChQLnNpemUpKSxBKCJzdGFydCIsYixQKSxBKCJlbmQiLGIsUCl9ZD1lWyJfIitzKyJwb3MwIl0sZGVsZXRlIGVbIl8iK3MrInBvczAiXTt2YXIgTz1lLl9pbnB1dFt2XXx8e30sej1pLmV4dGVuZEZsYXQoe30sYiksRD1iLnN0YXJ0LFI9ci5yMmwoTy5zdGFydCksRj12b2lkIDAhPT1SO2lmKChiLnN0YXJ0Rm91bmR8fEYpJiZSIT09ci5yMmwoRCkpe3ZhciBCPUY/UjppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxkKSxOPXt0eXBlOiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT8ibGluZWFyIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOmIuc2l6ZSx0aWNrMDpELGNhbGVuZGFyOnAscmFuZ2U6W0Isby50aWNrSW5jcmVtZW50KEIsYi5zaXplLCExLHApXS5tYXAoci5sMnIpfSxqPW8udGlja0ZpcnN0KE4pO2o+ci5yMmwoQikmJihqPW8udGlja0luY3JlbWVudChqLGIuc2l6ZSwhMCxwKSksei5zdGFydD1yLmwycihqKSxGfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KHouc3RhcnQpfXZhciBVPWIuZW5kLFY9ci5yMmwoTy5lbmQpLEg9dm9pZCAwIT09VjtpZigoYi5lbmRGb3VuZHx8SCkmJlYhPT1yLnIybChVKSl7dmFyIHE9SD9WOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGQpO3ouZW5kPXIubDJyKHEpLEh8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoei5lbmQpfXZhciBHPSJhdXRvYmluIitzO3JldHVybiExPT09ZS5faW5wdXRbR10mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtHXSxkZWxldGUgZVtHXSksW3osZF19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxwLGQsbT1bXSxnPVtdLHY9ImgiPT09ZS5vcmllbnRhdGlvbix5PW8uZ2V0RnJvbUlkKHQsdj9lLnlheGlzOmUueGF4aXMpLHg9dj8ieSI6IngiLGI9e3g6InkiLHk6IngifVt4XSxfPWVbeCsiY2FsZW5kYXIiXSx3PWUuY3VtdWxhdGl2ZSxUPWgodCxlLHkseCksaz1UWzBdLEE9VFsxXSxNPSJzdHJpbmciPT10eXBlb2Ygay5zaXplLFM9W10sRT1NP1M6ayxMPVtdLEM9W10sUD1bXSxJPTAsTz1lLmhpc3Rub3JtLHo9ZS5oaXN0ZnVuYyxEPS0xIT09Ty5pbmRleE9mKCJkZW5zaXR5Iik7dy5lbmFibGVkJiZEJiYoTz1PLnJlcGxhY2UoLyA/ZGVuc2l0eSQvLCIiKSxEPSExKTt2YXIgUixGPSJtYXgiPT09enx8Im1pbiI9PT16P251bGw6MCxCPWwuY291bnQsTj1jW09dLGo9ITEsVT1mdW5jdGlvbih0KXtyZXR1cm4geS5yMmModCwwLF8pfTtmb3IoaS5pc0FycmF5T3JUeXBlZEFycmF5KGVbYl0pJiYiY291bnQiIT09eiYmKFI9ZVtiXSxqPSJhdmciPT09eixCPWxbel0pLHI9VShrLnN0YXJ0KSxwPVUoay5lbmQpKyhyLW8udGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxfKSkvMWU2O3I8cCYmbS5sZW5ndGg8MWU2JiYoYT1vLnRpY2tJbmNyZW1lbnQocixrLnNpemUsITEsXyksbS5wdXNoKChyK2EpLzIpLGcucHVzaChGKSxQLnB1c2goW10pLFMucHVzaChyKSxEJiZMLnB1c2goMS8oYS1yKSksaiYmQy5wdXNoKDApLCEoYTw9cikpOylyPWE7Uy5wdXNoKHIpLE18fCJkYXRlIiE9PXkudHlwZXx8KEU9e3N0YXJ0OlUoRS5zdGFydCksZW5kOlUoRS5lbmQpLHNpemU6RS5zaXplfSksdC5fZnVsbExheW91dC5fcm91bmRGbk9wdHN8fCh0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0cz17fSk7dmFyIFY9ZVsiXyIreCsiYmluZ3JvdXAiXSxIPXtsZWZ0R2FwOjEvMCxyaWdodEdhcDoxLzB9O1YmJih0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tWXXx8KHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1ZdPUgpLEg9dC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVl0pO3ZhciBxLEc9Zy5sZW5ndGgsWT0hMCxXPUgubGVmdEdhcCxYPUgucmlnaHRHYXAsWj17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgSj1BW3JdOyhkPWkuZmluZEJpbihKLEUpKT49MCYmZDxHJiYoSSs9QihkLHIsZyxSLEMpLFkmJlBbZF0ubGVuZ3RoJiZKIT09QVtQW2RdWzBdXSYmKFk9ITEpLFBbZF0ucHVzaChyKSxaW3JdPWQsVz1NYXRoLm1pbihXLEotU1tkXSksWD1NYXRoLm1pbihYLFNbZCsxXS1KKSl9SC5sZWZ0R2FwPVcsSC5yaWdodEdhcD1YLFl8fChxPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVl07cmV0dXJuIGYobi5sZWZ0R2FwLG4ucmlnaHRHYXAsUyx5LF8pKGUscil9fSksaiYmKEk9dShnLEMpKSxOJiZOKGcsSSxMKSx3LmVuYWJsZWQmJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE7ZnVuY3Rpb24gbyhlKXthPXRbZV0sdFtlXS89Mn1mdW5jdGlvbiBzKGUpe2k9dFtlXSx0W2VdPWEraS8yLGErPWl9aWYoImhhbGYiPT09cilpZigiaW5jcmVhc2luZyI9PT1lKWZvcihvKDApLG49MTtuPHQubGVuZ3RoO24rKylzKG4pO2Vsc2UgZm9yKG8odC5sZW5ndGgtMSksbj10Lmxlbmd0aC0yO24+PTA7bi0tKXMobik7ZWxzZSBpZigiaW5jcmVhc2luZyI9PT1lKXtmb3Iobj0xO248dC5sZW5ndGg7bisrKXRbbl0rPXRbbi0xXTsiZXhjbHVkZSI9PT1yJiYodC51bnNoaWZ0KDApLHQucG9wKCkpfWVsc2V7Zm9yKG49dC5sZW5ndGgtMjtuPj0wO24tLSl0W25dKz10W24rMV07ImV4Y2x1ZGUiPT09ciYmKHQucHVzaCgwKSx0LnNoaWZ0KCkpfX0oZyx3LmRpcmVjdGlvbix3LmN1cnJlbnRiaW4pO3ZhciBLPU1hdGgubWluKG0ubGVuZ3RoLGcubGVuZ3RoKSxRPVtdLCQ9MCx0dD1LLTE7Zm9yKHI9MDtyPEs7cisrKWlmKGdbcl0peyQ9cjticmVha31mb3Iocj1LLTE7cj49JDtyLS0paWYoZ1tyXSl7dHQ9cjticmVha31mb3Iocj0kO3I8PXR0O3IrKylpZihuKG1bcl0pJiZuKGdbcl0pKXt2YXIgZXQ9e3A6bVtyXSxzOmdbcl0sYjowfTt3LmVuYWJsZWR8fChldC5wdHM9UFtyXSxZP2V0LnBoMD1ldC5waDE9UFtyXS5sZW5ndGg/QVtQW3JdWzBdXTptW3JdOihlLl9jb21wdXRlUGg9ITAsZXQucGgwPXEoU1tyXSksZXQucGgxPXEoU1tyKzFdLCEwKSkpLFEucHVzaChldCl9cmV0dXJuIDE9PT1RLmxlbmd0aCYmKFFbMF0ud2lkdGgxPW8udGlja0luY3JlbWVudChRWzBdLnAsay5zaXplLCExLF8pLVFbMF0ucCkscyhRLGUpLGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmaS50YWdTZWxlY3RlZChRLGUsWiksUX0sY2FsY0FsbEF1dG9CaW5zOmh9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo2NDIsIi4vYXZlcmFnZSI6ODA4LCIuL2Jpbl9mdW5jdGlvbnMiOjgxMCwiLi9iaW5fbGFiZWxfdmFscyI6ODExLCIuL25vcm1fZnVuY3Rpb25zIjo4MTksImZhc3QtaXNudW1lcmljIjoxODV9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiYmluTnVtYmVyIl19fSx7fV0sODE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXMsbz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLHM9bi5uZXN0ZWRQcm9wZXJ0eSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCxjPVt7YVN0cjp7eDoieGJpbnMuc3RhcnQiLHk6InliaW5zLnN0YXJ0In0sbmFtZToic3RhcnQifSx7YVN0cjp7eDoieGJpbnMuZW5kIix5OiJ5Ymlucy5lbmQifSxuYW1lOiJlbmQifSx7YVN0cjp7eDoieGJpbnMuc2l6ZSIseToieWJpbnMuc2l6ZSJ9LG5hbWU6InNpemUifSx7YVN0cjp7eDoibmJpbnN4Iix5OiJuYmluc3kifSxuYW1lOiJuYmlucyJ9XSx1PVsieCIsInkiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixmLGgscCxkLG0sZyx2PWUuX2hpc3RvZ3JhbUJpbk9wdHM9e30seT1bXSx4PXt9LGI9W107ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLHIuX21vZHVsZS5hdHRyaWJ1dGVzLHQsZSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4idiI9PT10Lm9yaWVudGF0aW9uPyJ4IjoieSJ9ZnVuY3Rpb24gVCh0LHIsYSl7dmFyIG89dC51aWQrIl9fIithO3J8fChyPW8pO3ZhciBzPWZ1bmN0aW9uKHQscil7cmV0dXJuIGkuZ2V0RnJvbVRyYWNlKHtfZnVsbExheW91dDplfSx0LHIpLnR5cGV9KHQsYSksbD10W2ErImNhbGVuZGFyIl18fCIiLGM9dltyXSx1PSEwO2MmJihzPT09Yy5heFR5cGUmJmw9PT1jLmNhbGVuZGFyPyh1PSExLGMudHJhY2VzLnB1c2godCksYy5kaXJzLnB1c2goYSkpOihyPW8scyE9PWMuYXhUeXBlJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCBvbiBhIiwidHlwZToiK3MsImF4aXMiLCJ3aXRoIGJpbnMgb24iLCJ0eXBlOiIrYy5heFR5cGUsImF4aXMuIl0uam9pbigiICIpKSxsIT09Yy5jYWxlbmRhciYmbi53YXJuKFsiQXR0ZW1wdGVkIHRvIGdyb3VwIHRoZSBiaW5zIG9mIHRyYWNlIix0LmluZGV4LCJzZXQgd2l0aCBhIixsLCJjYWxlbmRhciIsIndpdGggYmlucyIsYy5jYWxlbmRhcj8ib24gYSAiK2MuY2FsZW5kYXIrIiBjYWxlbmRhciI6IncvbyBhIHNldCBjYWxlbmRhciJdLmpvaW4oIiAiKSkpKSx1JiYodltyXT17dHJhY2VzOlt0XSxkaXJzOlthXSxheFR5cGU6cyxjYWxlbmRhcjp0W2ErImNhbGVuZGFyIl18fCIifSksdFsiXyIrYSsiYmluZ3JvdXAiXT1yfWZvcihkPTA7ZDx0Lmxlbmd0aDtkKyspcj10W2RdLGEociwiaGlzdG9ncmFtIikmJih5LnB1c2gociksZGVsZXRlIHIuX3hhdXRvQmluRmluaXNoZWQsZGVsZXRlIHIuX3lhdXRvQmluRmluaXNoZWQsYShyLCIyZE1hcCIpfHxvKHIuX2lucHV0LHIsZSxfKSk7dmFyIGs9ZS5fYWxpZ25tZW50T3B0c3x8e307Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKyl7aWYocj15W2RdLGg9IiIsIWEociwiMmRNYXAiKSl7aWYocD13KHIpLCJncm91cCI9PT1lLmJhcm1vZGUmJnIuYWxpZ25tZW50Z3JvdXApe3ZhciBBPXJbcCsiYXhpcyJdLE09bChlLEEpK3Iub3JpZW50YXRpb247KGtbTV18fHt9KVtyLmFsaWdubWVudGdyb3VwXSYmKGg9TSl9aHx8Im92ZXJsYXkiPT09ZS5iYXJtb2RlfHwoaD1sKGUsci54YXhpcykrbChlLHIueWF4aXMpK3cocikpfWg/KHhbaF18fCh4W2hdPVtdKSx4W2hdLnB1c2gocikpOmIucHVzaChyKX1mb3IoaCBpbiB4KWlmKDEhPT0oZj14W2hdKS5sZW5ndGgpe3ZhciBTPSExO2ZvcihmLmxlbmd0aCYmKHI9ZlswXSxTPV8oImJpbmdyb3VwIikpLGg9U3x8aCxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBFPShyPWZbZF0pLl9pbnB1dC5iaW5ncm91cDtFJiZFIT09aCYmbi53YXJuKFsiVHJhY2UiLHIuaW5kZXgsIm11c3QgbWF0Y2giLCJ3aXRoaW4gYmluZ3JvdXAiLGgrIi4iLCJJZ25vcmluZyBpdHMgYmluZ3JvdXA6IixFLCJzZXR0aW5nLiJdLmpvaW4oIiAiKSksci5iaW5ncm91cD1oLFQocixoLHcocikpfX1lbHNlIGIucHVzaChmWzBdKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXtyPWJbZF07dmFyIEw9XygiYmluZ3JvdXAiKTtpZihhKHIsIjJkTWFwIikpZm9yKGc9MDtnPDI7ZysrKXt2YXIgQz1fKChwPXVbZ10pKyJiaW5ncm91cCIsTD9MKyJfXyIrcDpudWxsKTtUKHIsQyxwKX1lbHNlIFQocixMLHcocikpfWZvcihoIGluIHYpe3ZhciBQPXZbaF07Zm9yKGY9UC50cmFjZXMsbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgSSxPLHo9Y1ttXSxEPXoubmFtZTtpZigibmJpbnMiIT09RHx8IVAuc2l6ZUZvdW5kKXtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKXtpZihyPWZbZF0scD1QLmRpcnNbZF0sST16LmFTdHJbcF0sdm9pZCAwIT09cyhyLl9pbnB1dCxJKS5nZXQoKSl7UFtEXT1fKEkpLFBbRCsiRm91bmQiXT0hMDticmVha30oTz0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0mJnMocixJKS5zZXQoT1tEXSl9aWYoInN0YXJ0Ij09PUR8fCJlbmQiPT09RClmb3IoO2Q8Zi5sZW5ndGg7ZCsrKShyPWZbZF0pWyJfIitwKyJiaW5ncm91cCJdJiZfKEksKE89KHIuX2F1dG9CaW58fHt9KVtwXXx8e30pW0RdKTsibmJpbnMiIT09RHx8UC5zaXplRm91bmR8fFAubmJpbnNGb3VuZHx8KHI9ZlswXSxQW0RdPV8oSSkpfX19fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NTU3LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9iYXIvZGVmYXVsdHMiOjY0N31dLDgxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LHM9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbCxyLG4pfXZhciBmPXUoIngiKSxoPXUoInkiKTt1KCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKHUoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksdSgiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLHUoInRleHQiKTt2YXIgcD11KCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxjLHUscCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpO3ZhciBkPXUoIm9yaWVudGF0aW9uIixoJiYhZj8iaCI6InYiKSxtPSJ2Ij09PWQ/IngiOiJ5IixnPSJ2Ij09PWQ/InkiOiJ4Iix2PWYmJmg/TWF0aC5taW4oaS5taW5Sb3dMZW5ndGgoZikmJmkubWluUm93TGVuZ3RoKGgpKTppLm1pblJvd0xlbmd0aChlW21dfHxbXSk7aWYodil7ZS5fbGVuZ3RoPXYsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGMpLGVbZ10mJnUoImhpc3RmdW5jIiksdSgiaGlzdG5vcm0iKSx1KCJhdXRvYmluIittKSxzKHQsZSx1LHIsYyksaS5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdSk7dmFyIHk9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcix4PW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO3godCxlLHl8fGEuZGVmYXVsdExpbmUse2F4aXM6InkifSkseCh0LGUseXx8YS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi4vYmFyL2RlZmF1bHRzIjo2NDcsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6NjU4LCIuL2F0dHJpYnV0ZXMiOjgwN31dLDgxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksInpMYWJlbFZhbCJpbiBlJiYodC56PWUuekxhYmVsVmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwhKHIuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQpe3ZhciBhLG89QXJyYXkuaXNBcnJheShpKT9uWzBdLnB0c1tpWzBdXVtpWzFdXTpuW2ldLnB0cztpZih0LnBvaW50TnVtYmVycz1vLHQuYmluTnVtYmVyPXQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnRJbmRleCxyLl9pbmRleFRvUG9pbnRzKXthPVtdO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKWE9YS5jb25jYXQoci5faW5kZXhUb1BvaW50c1tvW3NdXSl9ZWxzZSBhPW87dC5wb2ludEluZGljZXM9YX1yZXR1cm4gdH19LHt9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPW4odCxlLHIsYSxvKTtpZihzKXt2YXIgbD0odD1zWzBdKS5jZFt0LmluZGV4XSxjPXQuY2RbMF0udHJhY2U7aWYoIWMuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgdT0iaCI9PT1jLm9yaWVudGF0aW9uPyJ5IjoieCI7dFt1KyJMYWJlbCJdPWkodFt1KyJhIl0sW2wucGgwLGwucGgxXSxjW3UrImhvdmVyZm9ybWF0Il0pfXJldHVybiBzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vYmFyL2hvdmVyIjo2NTB9XSw4MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi4vYmFyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiYmFybGF5ZXIiLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJoaXN0b2dyYW0iLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6NjQ2LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjY1MiwiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6NjUzLCIuLi9iYXIvcGxvdCI6NjU0LCIuLi9iYXIvc2VsZWN0Ijo2NTUsIi4uL2Jhci9zdHlsZSI6NjU3LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQwLCIuL2F0dHJpYnV0ZXMiOjgwNywiLi9jYWxjIjo4MTIsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjgxNCwiLi9kZWZhdWx0cyI6ODE1LCIuL2V2ZW50X2RhdGEiOjgxNiwiLi9ob3ZlciI6ODE3fV0sODE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGk9MDtpPHI7aSsrKXRbaV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSw4MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyIpLGE9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxsPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWYoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6aSgieCIpLG5iaW5zeTpuLm5iaW5zeSx5YmluczppKCJ5IiksYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LGJpbmdyb3VwOmYoe30sbi5iaW5ncm91cCx7fSkseGJpbmdyb3VwOmYoe30sbi5iaW5ncm91cCx7fSkseWJpbmdyb3VwOmYoe30sbi5iaW5ncm91cCx7fSkseGdhcDphLnhnYXAseWdhcDphLnlnYXAsenNtb290aDphLnpzbW9vdGgseGhvdmVyZm9ybWF0OnMoIngiKSx5aG92ZXJmb3JtYXQ6cygieSIpLHpob3ZlcmZvcm1hdDpzKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6InoifSksdGV4dHRlbXBsYXRlOmMoe2FycmF5T2s6ITEsZWRpdFR5cGU6InBsb3QifSx7a2V5czoieiJ9KSx0ZXh0Zm9udDphLnRleHRmb250LHNob3dsZWdlbmQ6Zih7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sdSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjc4NywiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiOjgwNywiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzIjo4MDl9XSw4MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyIpLGM9dCgiLi4vaGlzdG9ncmFtL2NhbGMiKS5jYWxjQWxsQXV0b0JpbnM7ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheSh0KTtpZihuKWZvcihpPTA7aTx0O2krKylhW2ldPTEvKGVbaSsxXS1lW2ldKTtlbHNle3ZhciBvPTEvcjtmb3IoaT0wO2k8dDtpKyspYVtpXT1vfXJldHVybiBhfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm57c3RhcnQ6dChlLnN0YXJ0KSxlbmQ6dChlLmVuZCksc2l6ZTplLnNpemV9fWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvLHM9dC5sZW5ndGgtMSxjPW5ldyBBcnJheShzKSx1PWwocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspe3ZhciBmPShlfHxbXSlbb107Y1tvXT12b2lkIDA9PT1mP1t1KHRbb10pLHUodFtvKzFdLCEwKV06W2YsZl19cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxwLGQsbT1pLmdldEZyb21JZCh0LGUueGF4aXMpLGc9aS5nZXRGcm9tSWQodCxlLnlheGlzKSx2PWUueGNhbGVuZGFyLHk9ZS55Y2FsZW5kYXIseD1mdW5jdGlvbih0KXtyZXR1cm4gbS5yMmModCwwLHYpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiBnLnIyYyh0LDAseSl9LF89Yyh0LGUsbSwieCIpLHc9X1swXSxUPV9bMV0saz1jKHQsZSxnLCJ5IiksQT1rWzBdLE09a1sxXSxTPWUuX2xlbmd0aDtULmxlbmd0aD5TJiZULnNwbGljZShTLFQubGVuZ3RoLVMpLE0ubGVuZ3RoPlMmJk0uc3BsaWNlKFMsTS5sZW5ndGgtUyk7dmFyIEU9W10sTD1bXSxDPVtdLFA9InN0cmluZyI9PXR5cGVvZiB3LnNpemUsST0ic3RyaW5nIj09dHlwZW9mIEEuc2l6ZSxPPVtdLHo9W10sRD1QP086dyxSPUk/ejpBLEY9MCxCPVtdLE49W10saj1lLmhpc3Rub3JtLFU9ZS5oaXN0ZnVuYyxWPS0xIT09ai5pbmRleE9mKCJkZW5zaXR5IiksSD0ibWF4Ij09PVV8fCJtaW4iPT09VT9udWxsOjAscT1hLmNvdW50LEc9b1tqXSxZPSExLFc9W10sWD1bXSxaPSJ6ImluIGU/ZS56OiJtYXJrZXIiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6IiI7WiYmImNvdW50IiE9PVUmJihZPSJhdmciPT09VSxxPWFbVV0pO3ZhciBKPXcuc2l6ZSxLPXgody5zdGFydCksUT14KHcuZW5kKSsoSy1pLnRpY2tJbmNyZW1lbnQoSyxKLCExLHYpKS8xZTY7Zm9yKHI9SztyPFE7cj1pLnRpY2tJbmNyZW1lbnQocixKLCExLHYpKUwucHVzaChIKSxPLnB1c2gociksWSYmQy5wdXNoKDApO08ucHVzaChyKTt2YXIgJCx0dD1MLmxlbmd0aCxldD0oci1LKS90dCxydD0oJD1LK2V0LzIsbS5jMnIoJCwwLHYpKSxudD1BLnNpemUsaXQ9YihBLnN0YXJ0KSxhdD1iKEEuZW5kKSsoaXQtaS50aWNrSW5jcmVtZW50KGl0LG50LCExLHkpKS8xZTY7Zm9yKHI9aXQ7cjxhdDtyPWkudGlja0luY3JlbWVudChyLG50LCExLHkpKXtFLnB1c2goTC5zbGljZSgpKSx6LnB1c2gocik7dmFyIG90PW5ldyBBcnJheSh0dCk7Zm9yKGw9MDtsPHR0O2wrKylvdFtsXT1bXTtOLnB1c2gob3QpLFkmJkIucHVzaChDLnNsaWNlKCkpfXoucHVzaChyKTt2YXIgc3Q9RS5sZW5ndGgsbHQ9KHItaXQpL3N0LGN0PWZ1bmN0aW9uKHQpe3JldHVybiBnLmMycih0LDAseSl9KGl0K2x0LzIpO1YmJihXPXUoTC5sZW5ndGgsRCxldCxQKSxYPXUoRS5sZW5ndGgsUixsdCxJKSksUHx8ImRhdGUiIT09bS50eXBlfHwoRD1mKHgsRCkpLEl8fCJkYXRlIiE9PWcudHlwZXx8KFI9ZihiLFIpKTt2YXIgdXQ9ITAsZnQ9ITAsaHQ9bmV3IEFycmF5KHR0KSxwdD1uZXcgQXJyYXkoc3QpLGR0PTEvMCxtdD0xLzAsZ3Q9MS8wLHZ0PTEvMDtmb3Iocj0wO3I8UztyKyspe3ZhciB5dD1UW3JdLHh0PU1bcl07cD1uLmZpbmRCaW4oeXQsRCksZD1uLmZpbmRCaW4oeHQsUikscD49MCYmcDx0dCYmZD49MCYmZDxzdCYmKEYrPXEocCxyLEVbZF0sWixCW2RdKSxOW2RdW3BdLnB1c2gociksdXQmJih2b2lkIDA9PT1odFtwXT9odFtwXT15dDpodFtwXSE9PXl0JiYodXQ9ITEpKSxmdCYmKHZvaWQgMD09PXB0W2RdP3B0W2RdPXh0OnB0W2RdIT09eHQmJihmdD0hMSkpLGR0PU1hdGgubWluKGR0LHl0LU9bcF0pLG10PU1hdGgubWluKG10LE9bcCsxXS15dCksZ3Q9TWF0aC5taW4oZ3QseHQteltkXSksdnQ9TWF0aC5taW4odnQseltkKzFdLXh0KSl9aWYoWSlmb3IoZD0wO2Q8c3Q7ZCsrKUYrPXMoRVtkXSxCW2RdKTtpZihHKWZvcihkPTA7ZDxzdDtkKyspRyhFW2RdLEYsVyxYW2RdKTtyZXR1cm57eDpULHhSYW5nZXM6aChPLHV0JiZodCxkdCxtdCxtLHYpLHgwOnJ0LGR4OmV0LHk6TSx5UmFuZ2VzOmgoeixmdCYmcHQsZ3QsdnQsZyx5KSx5MDpjdCxkeTpsdCx6OkUscHRzOk59fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjgwOCwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiOjgxMCwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIjo4MTEsIi4uL2hpc3RvZ3JhbS9jYWxjIjo4MTIsIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyI6ODE5fV0sODIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pKHQsZSx1LGMpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsdSxjKSxvKHQsZSxjLHUse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLHUoImhvdmVydGVtcGxhdGUiKSxzKHUsYyksdSgieGhvdmVyZm9ybWF0IiksdSgieWhvdmVyZm9ybWF0IikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4uL2hlYXRtYXAvbGFiZWxfZGVmYXVsdHMiOjc5NywiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyI6ODAxLCIuL2F0dHJpYnV0ZXMiOjgyMCwiLi9zYW1wbGVfZGVmYXVsdHMiOjgyNX1dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2hvdmVyIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPW4odCxlLHIsYSxvKTtpZihzKXt2YXIgbD0odD1zWzBdKS5pbmRleCxjPWxbMF0sdT1sWzFdLGY9dC5jZFswXSxoPWYudHJhY2UscD1mLnhSYW5nZXNbdV0sZD1mLnlSYW5nZXNbY107cmV0dXJuIHQueExhYmVsPWkodC54YSxbcFswXSxwWzFdXSxoLnhob3ZlcmZvcm1hdCksdC55TGFiZWw9aSh0LnlhLFtkWzBdLGRbMV1dLGgueWhvdmVyZm9ybWF0KSxzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vaGVhdG1hcC9ob3ZlciI6Nzk0fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vaGVhdG1hcC9jYWxjIikscGxvdDp0KCIuLi9oZWF0bWFwL3Bsb3QiKSxsYXllck5hbWU6ImhlYXRtYXBsYXllciIsY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLHN0eWxlOnQoIi4uL2hlYXRtYXAvc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2hpc3RvZ3JhbS9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Imhpc3RvZ3JhbTJkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJoaXN0b2dyYW0iLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4uL2hlYXRtYXAvY2FsYyI6Nzg4LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo3OTAsIi4uL2hlYXRtYXAvcGxvdCI6Nzk5LCIuLi9oZWF0bWFwL3N0eWxlIjo4MDAsIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6ODE0LCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6ODE2LCIuL2F0dHJpYnV0ZXMiOjgyMCwiLi9kZWZhdWx0cyI6ODIyLCIuL2hvdmVyIjo4MjN9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5IiksbD1pLm1pblJvd0xlbmd0aChvKSxjPWkubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxhKSwocigieiIpfHxyKCJtYXJrZXIuY29sb3IiKSkmJnIoImhpc3RmdW5jIikscigiaGlzdG5vcm0iKSxyKCJhdXRvYmlueCIpLHIoImF1dG9iaW55IikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzN9XSw4MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDpuLngseTpuLnksejpuLnosbWFya2VyOm4ubWFya2VyLGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYmluZ3JvdXA6bi5iaW5ncm91cCx4YmluZ3JvdXA6bi54YmluZ3JvdXAseWJpbmdyb3VwOm4ueWJpbmdyb3VwLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTp7Y29sb3I6aS5saW5lLmNvbG9yLHdpZHRoOnMoe30saS5saW5lLndpZHRoLHtkZmx0Oi41fSksZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSx6aG92ZXJmb3JtYXQ6bygieiIsMSksaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsdGV4dHRlbXBsYXRlOmkudGV4dHRlbXBsYXRlLHRleHRmb250OmkudGV4dGZvbnR9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNjgsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo3MzAsIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiOjgyMH1dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pKHQsZSx1LGMpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsdSwoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsbCxyKX0pKSxvKHQsZSx1LGMpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoImhvdmVydGVtcGxhdGUiKSxlLmNvbnRvdXJzJiYiaGVhdG1hcCI9PT1lLmNvbnRvdXJzLmNvbG9yaW5nJiZzKHUsYykpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6NzM3LCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjo3NTEsIi4uL2hlYXRtYXAvbGFiZWxfZGVmYXVsdHMiOjc5NywiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjo4MjUsIi4vYXR0cmlidXRlcyI6ODI2fV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vY29udG91ci9jYWxjIikscGxvdDp0KCIuLi9jb250b3VyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiY29udG91cmxheWVyIixzdHlsZTp0KCIuLi9jb250b3VyL3N0eWxlIiksY29sb3JiYXI6dCgiLi4vY29udG91ci9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4uL2NvbnRvdXIvaG92ZXIiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmRjb250b3VyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9jb250b3VyL2NhbGMiOjczMSwiLi4vY29udG91ci9jb2xvcmJhciI6NzMzLCIuLi9jb250b3VyL2hvdmVyIjo3NDMsIi4uL2NvbnRvdXIvcGxvdCI6NzQ4LCIuLi9jb250b3VyL3N0eWxlIjo3NTAsIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6ODE0LCIuL2F0dHJpYnV0ZXMiOjgyNiwiLi9kZWZhdWx0cyI6ODI3fV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksbD10KCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIiksYz10KCIuLi90cmVlbWFwL2F0dHJpYnV0ZXMiKSx1PXQoIi4uL3RyZWVtYXAvY29uc3RhbnRzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpsLmxhYmVscyxwYXJlbnRzOmwucGFyZW50cyx2YWx1ZXM6bC52YWx1ZXMsYnJhbmNodmFsdWVzOmwuYnJhbmNodmFsdWVzLGNvdW50OmwuY291bnQsbGV2ZWw6bC5sZXZlbCxtYXhkZXB0aDpsLm1heGRlcHRoLHRpbGluZzp7b3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCIsZWRpdFR5cGU6InBsb3QifSxmbGlwOmMudGlsaW5nLmZsaXAscGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOmYoe2NvbG9yczpsLm1hcmtlci5jb2xvcnMsbGluZTpsLm1hcmtlci5saW5lLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSksbGVhZjpsLmxlYWYscGF0aGJhcjpjLnBhdGhiYXIsdGV4dDpzLnRleHQsdGV4dGluZm86bC50ZXh0aW5mbyx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czp1LmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpzLmhvdmVydGV4dCxob3ZlcmluZm86bC5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOnUuZXZlbnREYXRhS2V5c30pLHRleHRmb250OnMudGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6cy5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6Yy5vdXRzaWRldGV4dGZvbnQsdGV4dHBvc2l0aW9uOmMudGV4dHBvc2l0aW9uLHNvcnQ6cy5zb3J0LHJvb3Q6bC5yb290LGRvbWFpbjpvKHtuYW1lOiJpY2ljbGUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3BpZS9hdHRyaWJ1dGVzIjo4OTYsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEwNDQsIi4uL3RyZWVtYXAvYXR0cmlidXRlcyI6MTA3MCwiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEwNzN9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9ImljaWNsZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6NjE0fV0sODMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3N1bmJ1cnN0L2NhbGMiKTtyLmNhbGM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5jYWxjKHQsZSl9LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uX3J1bkNyb3NzVHJhY2VDYWxjKCJpY2ljbGUiLHQpfX0seyIuLi9zdW5idXJzdC9jYWxjIjoxMDQ2fV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGY9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWgoImxhYmVscyIpLGQ9aCgicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIG09aCgidmFsdWVzIik7bSYmbS5sZW5ndGg/aCgiYnJhbmNodmFsdWVzIik6aCgiY291bnQiKSxoKCJsZXZlbCIpLGgoIm1heGRlcHRoIiksaCgidGlsaW5nLm9yaWVudGF0aW9uIiksaCgidGlsaW5nLmZsaXAiKSxoKCJ0aWxpbmcucGFkIik7dmFyIGc9aCgidGV4dCIpO2goInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxoKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWgoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsaCwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxoKCJ0ZXh0cG9zaXRpb24iKSxoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKSxoKCJtYXJrZXIuY29sb3JzIik7dmFyIHk9ZS5faGFzQ29sb3JzY2FsZT11KHQsIm1hcmtlciIsImNvbG9ycyIpfHwodC5tYXJrZXJ8fHt9KS5jb2xvcmF4aXM7eSYmZih0LGUsYyxoLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksaCgibGVhZi5vcGFjaXR5Iix5PzE6LjcpLGUuX2hvdmVyZWQ9e21hcmtlcjp7bGluZTp7d2lkdGg6Mixjb2xvcjphLmNvbnRyYXN0KGMucGFwZXJfYmdjb2xvcil9fX0sdiYmKGgoInBhdGhiYXIudGhpY2tuZXNzIixlLnBhdGhiYXIudGV4dGZvbnQuc2l6ZSsyKmwpLGgoInBhdGhiYXIuc2lkZSIpLGgoInBhdGhiYXIuZWRnZXNoYXBlIikpLGgoInNvcnQiKSxoKCJyb290LmNvbG9yIiksbyhlLGMsaCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9kb21haW4iOjU3OSwiLi4vYmFyL2NvbnN0YW50cyI6NjQ1LCIuLi9iYXIvZGVmYXVsdHMiOjY0NywiLi9hdHRyaWJ1dGVzIjo4Mjl9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4uL3RyZWVtYXAvY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksZj10KCIuLi9zdW5idXJzdC9meCIpLGg9dCgiLi4vc3VuYnVyc3QvcGxvdCIpLmZvcm1hdFNsaWNlTGFiZWw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsZCl7dmFyIG09ZC53aWR0aCxnPWQuaGVpZ2h0LHY9ZC52aWV3WCx5PWQudmlld1kseD1kLnBhdGhTbGljZSxiPWQudG9Nb3ZlSW5zaWRlU2xpY2UsXz1kLnN0clRyYW5zZm9ybSx3PWQuaGFzVHJhbnNpdGlvbixUPWQuaGFuZGxlU2xpY2VzRXhpdCxrPWQubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLEE9ZC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixNPWQucHJldkVudHJ5LFM9dC5fZnVsbExheW91dCxFPWVbMF0udHJhY2UsTD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImxlZnQiKSxDPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSxQPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigiYm90dG9tIiksST1zKHIsW20sZ10se2ZsaXBYOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieCIpPi0xLGZsaXBZOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieSIpPi0xLG9yaWVudGF0aW9uOkUudGlsaW5nLm9yaWVudGF0aW9uLHBhZDp7aW5uZXI6RS50aWxpbmcucGFkfSxtYXhEZXB0aDpFLl9tYXhEZXB0aH0pLmRlc2NlbmRhbnRzKCksTz0xLzAsej0tMS8wO0kuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5kZXB0aDtlPj1FLl9tYXhEZXB0aD8odC54MD10LngxPSh0LngwK3QueDEpLzIsdC55MD10LnkxPSh0LnkwK3QueTEpLzIpOihPPU1hdGgubWluKE8sZSksej1NYXRoLm1heCh6LGUpKX0pKSxwPXAuZGF0YShJLHUuZ2V0UHRJZCksRS5fbWF4VmlzaWJsZUxheWVycz1pc0Zpbml0ZSh6KT96LU8rMTowLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLFQocCwhMSx7fSxbbSxnXSx4KSxwLm9yZGVyKCk7dmFyIEQ9bnVsbDtpZih3JiZNKXt2YXIgUj11LmdldFB0SWQoTSk7cC5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09RCYmdS5nZXRQdElkKHQpPT09UiYmKEQ9e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9KX0pKX12YXIgRj1mdW5jdGlvbigpe3JldHVybiBEfHx7eDA6MCx4MTptLHkwOjAseTE6Z319LEI9cDtyZXR1cm4gdyYmKEI9Qi50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt1LnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITEsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLEIuZWFjaCgoZnVuY3Rpb24ocyl7cy5feDA9dihzLngwKSxzLl94MT12KHMueDEpLHMuX3kwPXkocy55MCkscy5feTE9eShzLnkxKSxzLl9ob3Zlclg9dihzLngxLUUudGlsaW5nLnBhZCkscy5faG92ZXJZPXkoUD9zLnkxLUUudGlsaW5nLnBhZC8yOnMueTArRS50aWxpbmcucGFkLzIpO3ZhciBwPW4uc2VsZWN0KHRoaXMpLGQ9aS5lbnN1cmVTaW5nbGUocCwicGF0aCIsInN1cmZhY2UiLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO3c/ZC50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIGU9ayh0LCExLEYoKSxbbSxnXSx7b3JpZW50YXRpb246RS50aWxpbmcub3JpZW50YXRpb24sZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTF9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOmQuYXR0cigiZCIseCkscC5jYWxsKGYscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksZC5jYWxsKGwscyxFLHtob3ZlcmVkOiExfSkscy54MD09PXMueDF8fHMueTA9PT1zLnkxP3MuX3RleHQ9IiI6cy5fdGV4dD1oKHMscixFLGUsUyl8fCIiO3ZhciBUPWkuZW5zdXJlU2luZ2xlKHAsImciLCJzbGljZXRleHQiKSxNPWkuZW5zdXJlU2luZ2xlKFQsInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLEk9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEUscyxTLmZvbnQpKTtNLnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz8iZW5kIjpMPyJzdGFydCI6Im1pZGRsZSIpLmNhbGwoYS5mb250LEkpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KE0ubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOkkuc2l6ZX0pLHMudHJhbnNmb3JtLmZvbnRTaXplPUkuc2l6ZSx3P00udHJhbnNpdGlvbigpLmF0dHJUd2VlbigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9QSh0LCExLEYoKSxbbSxnXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBfKGUodCkpfX0pKTpNLmF0dHIoInRyYW5zZm9ybSIsXyhzKSl9KSksRH19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vc3VuYnVyc3QvZngiOjEwNDksIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEwNTAsIi4uL3N1bmJ1cnN0L3Bsb3QiOjEwNTQsIi4uL3RyZWVtYXAvY29uc3RhbnRzIjoxMDczLCIuL3BhcnRpdGlvbiI6ODM3LCIuL3N0eWxlIjo4MzksIkBwbG90bHkvZDMiOjU4fV0sODM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImljaWNsZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOltdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQwLCIuL2F0dHJpYnV0ZXMiOjgyOSwiLi9iYXNlX3Bsb3QiOjgzMCwiLi9jYWxjIjo4MzEsIi4vZGVmYXVsdHMiOjgzMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODM1LCIuL2xheW91dF9kZWZhdWx0cyI6ODM2LCIuL3Bsb3QiOjgzOCwiLi9zdHlsZSI6ODM5fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aWNpY2xlY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRpY2ljbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImljaWNsZWNvbG9yd2F5IixlLmNvbG9yd2F5KSxyKCJleHRlbmRpY2ljbGVjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo0OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgzNX1dLDgzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMy1oaWVyYXJjaHkiKSxpPXQoIi4uL3RyZWVtYXAvZmxpcF90cmVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLmZsaXBYLG89ci5mbGlwWSxzPSJoIj09PXIub3JpZW50YXRpb24sbD1yLm1heERlcHRoLGM9ZVswXSx1PWVbMV07bCYmKGM9KHQuaGVpZ2h0KzEpKmVbMF0vTWF0aC5taW4odC5oZWlnaHQrMSxsKSx1PSh0LmhlaWdodCsxKSplWzFdL01hdGgubWluKHQuaGVpZ2h0KzEsbCkpO3ZhciBmPW4ucGFydGl0aW9uKCkucGFkZGluZyhyLnBhZC5pbm5lcikuc2l6ZShzP1tlWzFdLGNdOltlWzBdLHVdKSh0KTtyZXR1cm4oc3x8YXx8bykmJmkoZixlLHtzd2FwWFk6cyxmbGlwWDphLGZsaXBZOm99KSxmfX0seyIuLi90cmVlbWFwL2ZsaXBfdHJlZSI6MTA3OCwiZDMtaGllcmFyY2h5IjoxMTB9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdHJlZW1hcC9kcmF3IiksaT10KCIuL2RyYXdfZGVzY2VuZGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG4odCxlLHIsYSx7dHlwZToiaWNpY2xlIixkcmF3RGVzY2VuZGFudHM6aX0pfX0seyIuLi90cmVlbWFwL2RyYXciOjEwNzUsIi4vZHJhd19kZXNjZW5kYW50cyI6ODMzfV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2ljaWNsZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsImljaWNsZSIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwocyx0LHIpfSkpfSkpfSxzdHlsZU9uZTpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NTksIkBwbG90bHkvZDMiOjU4fV0sODQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuL2NvbnN0YW50cyIpLmNvbG9ybW9kZWwscz1bInJnYiIsInJnYmEiLCJyZ2JhMjU2IiwiaHNsIiwiaHNsYSJdLGw9W10sYz1bXSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBmPW9bc1t1XV07bC5wdXNoKCJGb3IgdGhlIGAiK3NbdV0rImAgY29sb3Jtb2RlbCwgaXQgaXMgWyIrKGYuem1pbkRmbHR8fGYubWluKS5qb2luKCIsICIpKyJdLiIpLGMucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiKyhmLnptYXhEZmx0fHxmLm1heCkuam9pbigiLCAiKSsiXS4iKX1lLmV4cG9ydHM9YSh7c291cmNlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcm1vZGVsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyxlZGl0VHlwZToiY2FsYyJ9LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCExXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sem1pbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sem1heDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOmEoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsieCIsInkiLCJ6IiwiY29sb3IiLCJuYW1lIiwidGV4dCJdLGRmbHQ6IngreSt6K3RleHQrbmFtZSJ9KSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6WyJ6IiwiY29sb3IiLCJjb2xvcm1vZGVsIl19KSx0cmFuc2Zvcm1zOnZvaWQgMH0pfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4vY29uc3RhbnRzIjo4NDJ9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGgsbD10KCIuL2hlbHBlcnMiKS5nZXRJbWFnZVNpemU7ZnVuY3Rpb24gYyh0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIG4uY29uc3RyYWluKChhLXQpKmUscixpKX19ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbi5jb25zdHJhaW4ocix0LGUpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKGUuX2hhc1opcj1lLnoubGVuZ3RoLG49cyhlLnopO2Vsc2UgaWYoZS5faGFzU291cmNlKXt2YXIgZj1sKGUuc291cmNlKTtyPWYuaGVpZ2h0LG49Zi53aWR0aH12YXIgaCxwPW8uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxtPXAuZDJjKGUueDApLWUuZHgvMixnPWQuZDJjKGUueTApLWUuZHkvMix2PVttLG0rbiplLmR4XSx5PVtnLGcrciplLmR5XTtpZihwJiYibG9nIj09PXAudHlwZSlmb3IoaD0wO2g8bjtoKyspdi5wdXNoKG0raCplLmR4KTtpZihkJiYibG9nIj09PWQudHlwZSlmb3IoaD0wO2g8cjtoKyspeS5wdXNoKGcraCplLmR5KTtyZXR1cm4gZS5fZXh0cmVtZXNbcC5faWRdPW8uZmluZEV4dHJlbWVzKHAsdiksZS5fZXh0cmVtZXNbZC5faWRdPW8uZmluZEV4dHJlbWVzKGQseSksZS5fc2NhbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPWkuY29sb3Jtb2RlbFt0LmNvbG9ybW9kZWxdLHI9KGUuY29sb3Jtb2RlbHx8dC5jb2xvcm1vZGVsKS5sZW5ndGg7dC5fc0FycmF5PVtdO2Zvcih2YXIgbj0wO248cjtuKyspZS5taW5bbl0hPT10LnptaW5bbl18fGUubWF4W25dIT09dC56bWF4W25dP3QuX3NBcnJheS5wdXNoKGModC56bWluW25dLChlLm1heFtuXS1lLm1pbltuXSkvKHQuem1heFtuXS10LnptaW5bbl0pLGUubWluW25dLGUubWF4W25dKSk6dC5fc0FycmF5LnB1c2godShlLm1pbltuXSxlLm1heFtuXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5zbGljZSgwLHIpLGk9MDtpPHI7aSsrKXt2YXIgbz1uW2ldO2lmKCFhKG8pKXJldHVybiExO25baV09dC5fc0FycmF5W2ldKG8pfXJldHVybiBufX0oZSksW3t4MDptLHkwOmcsejplLnosdzpuLGg6cn1dfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi9jb25zdGFudHMiOjg0MiwiLi9oZWxwZXJzIjo4NDUsImZhc3QtaXNudW1lcmljIjoxODV9XSw4NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb2xvcm1vZGVsOntyZ2I6e21pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDMpfSxzdWZmaXg6WyIiLCIiLCIiXX0scmdiYTp7bWluOlswLDAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1LDFdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDQpfSxzdWZmaXg6WyIiLCIiLCIiLCIiXX0scmdiYTI1Njp7Y29sb3Jtb2RlbDoicmdiYSIsem1pbkRmbHQ6WzAsMCwwLDBdLHptYXhEZmx0OlsyNTUsMjU1LDI1NSwyNTVdLG1pbjpbMCwwLDAsMF0sbWF4OlsyNTUsMjU1LDI1NSwxXSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCw0KX0sc3VmZml4OlsiIiwiIiwiIiwiIl19LGhzbDp7bWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCwzKTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSJdfSxoc2xhOnttaW46WzAsMCwwLDBdLG1heDpbMzYwLDEwMCwxMDAsMV0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCw0KTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSIsIiJdfX0scGl4ZWxhdGVkU3R5bGU6WyJpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IC1vLWNyaXNwLWVkZ2VzIiwiaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0IiwiaW1hZ2UtcmVuZGVyaW5nOiBvcHRpbWl6ZS1jb250cmFzdCIsImltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZCIsIiJdLmpvaW4oIjsgIil9fSx7fV0sODQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vc25hcHNob3QvaGVscGVycyIpLklNQUdFX1VSTF9QUkVGSVg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoInNvdXJjZSIpLGUuc291cmNlJiYhZS5zb3VyY2UubWF0Y2gobykmJmRlbGV0ZSBlLnNvdXJjZSxlLl9oYXNTb3VyY2U9ISFlLnNvdXJjZTt2YXIgcyxsPXIoInoiKTsoZS5faGFzWj0hKHZvaWQgMD09PWx8fCFsLmxlbmd0aHx8IWxbMF18fCFsWzBdLmxlbmd0aCksZS5faGFzWnx8ZS5faGFzU291cmNlKT8ocigieDAiKSxyKCJ5MCIpLHIoImR4IikscigiZHkiKSxlLl9oYXNaPyhyKCJjb2xvcm1vZGVsIiwicmdiIikscigiem1pbiIsKHM9YS5jb2xvcm1vZGVsW2UuY29sb3Jtb2RlbF0pLnptaW5EZmx0fHxzLm1pbikscigiem1heCIscy56bWF4RGZsdHx8cy5tYXgpKTplLl9oYXNTb3VyY2UmJihlLmNvbG9ybW9kZWw9InJnYmEyNTYiLHM9YS5jb2xvcm1vZGVsW2UuY29sb3Jtb2RlbF0sZS56bWluPXMuem1pbkRmbHQsZS56bWF4PXMuem1heERmbHQpLHIoInpzbW9vdGgiKSxyKCJ0ZXh0IikscigiaG92ZXJ0ZXh0IikscigiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIjo2MzcsIi4vYXR0cmlidXRlcyI6ODQwLCIuL2NvbnN0YW50cyI6ODQyfV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdC5jb2xvcj1lLmNvbG9yLHQuY29sb3Jtb2RlbD1lLnRyYWNlLmNvbG9ybW9kZWwsdC56fHwodC56PWUuY29sb3IpLHR9fSx7fV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInByb2JlLWltYWdlLXNpemUvc3luYyIpLGk9dCgiLi4vLi4vc25hcHNob3QvaGVscGVycyIpLklNQUdFX1VSTF9QUkVGSVgsYT10KCJidWZmZXIvIikuQnVmZmVyO3IuZ2V0SW1hZ2VTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZShpLCIiKSxyPW5ldyBhKGUsImJhc2U2NCIpO3JldHVybiBuKHIpfX0seyIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIjo2MzcsImJ1ZmZlci8iOjgwLCJwcm9iZS1pbWFnZS1zaXplL3N5bmMiOjI3MX1dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10LmNkWzBdLHM9by50cmFjZSxsPXQueGEsYz10LnlhO2lmKCEobi5pbmJveChlLW8ueDAsZS0oby54MCtvLncqcy5keCksMCk+MHx8bi5pbmJveChyLW8ueTAsci0oby55MCtvLmgqcy5keSksMCk+MCkpe3ZhciB1LGY9TWF0aC5mbG9vcigoZS1vLngwKS9zLmR4KSxoPU1hdGguZmxvb3IoTWF0aC5hYnMoci1vLnkwKS9zLmR5KTtpZihzLl9oYXNaP3U9by56W2hdW2ZdOnMuX2hhc1NvdXJjZSYmKHU9cy5fY2FudmFzLmVsLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKGYsaCwxLDEpLmRhdGEpLHUpe3ZhciBwLGQ9by5oaXx8cy5ob3ZlcmluZm87aWYoZCl7dmFyIG09ZC5zcGxpdCgiKyIpOy0xIT09bS5pbmRleE9mKCJhbGwiKSYmKG09WyJjb2xvciJdKSwtMSE9PW0uaW5kZXhPZigiY29sb3IiKSYmKHA9ITApfXZhciBnLHY9YS5jb2xvcm1vZGVsW3MuY29sb3Jtb2RlbF0seT12LmNvbG9ybW9kZWx8fHMuY29sb3Jtb2RlbCx4PXkubGVuZ3RoLGI9cy5fc2NhbGVyKHUpLF89di5zdWZmaXgsdz1bXTsocy5ob3ZlcnRlbXBsYXRlfHxwKSYmKHcucHVzaCgiWyIrW2JbMF0rX1swXSxiWzFdK19bMV0sYlsyXStfWzJdXS5qb2luKCIsICIpKSw0PT09eCYmdy5wdXNoKCIsICIrYlszXStfWzNdKSx3LnB1c2goIl0iKSx3PXcuam9pbigiIiksdC5leHRyYVRleHQ9eS50b1VwcGVyQ2FzZSgpKyI6ICIrdyksQXJyYXkuaXNBcnJheShzLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkocy5ob3ZlcnRleHRbaF0pP2c9cy5ob3ZlcnRleHRbaF1bZl06QXJyYXkuaXNBcnJheShzLnRleHQpJiZBcnJheS5pc0FycmF5KHMudGV4dFtoXSkmJihnPXMudGV4dFtoXVtmXSk7dmFyIFQ9Yy5jMnAoby55MCsoaCsuNSkqcy5keSksaz1vLngwKyhmKy41KSpzLmR4LEE9by55MCsoaCsuNSkqcy5keSxNPSJbIit1LnNsaWNlKDAscy5jb2xvcm1vZGVsLmxlbmd0aCkuam9pbigiLCAiKSsiXSI7cmV0dXJuW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbaCxmXSx4MDpsLmMycChvLngwK2Yqcy5keCkseDE6bC5jMnAoby54MCsoZisxKSpzLmR4KSx5MDpULHkxOlQsY29sb3I6Yix4VmFsOmsseExhYmVsVmFsOmsseVZhbDpBLHlMYWJlbFZhbDpBLHpMYWJlbFZhbDpNLHRleHQ6Zyxob3ZlcnRlbXBsYXRlTGFiZWxzOnt6TGFiZWw6TSxjb2xvckxhYmVsOncsImNvbG9yWzBdTGFiZWwiOmJbMF0rX1swXSwiY29sb3JbMV1MYWJlbCI6YlsxXStfWzFdLCJjb2xvclsyXUxhYmVsIjpiWzJdK19bMl0sImNvbG9yWzNdTGFiZWwiOmJbM10rX1szXX19KV19fX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NDAxLCIuLi8uLi9saWIiOjQ5OCwiLi9jb25zdGFudHMiOjg0Mn1dLDg0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaW1hZ2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsIm5vU29ydGluZ0J5VmFsdWUiXSxhbmltYXRhYmxlOiExLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuL2F0dHJpYnV0ZXMiOjg0MCwiLi9jYWxjIjo4NDEsIi4vZGVmYXVsdHMiOjg0MywiLi9ldmVudF9kYXRhIjo4NDQsIi4vaG92ZXIiOjg0NiwiLi9wbG90Ijo4NDgsIi4vc3R5bGUiOjg0OX1dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4vY29uc3RhbnRzIiksbD1pLmlzSU9TKCl8fGkuaXNTYWZhcmkoKXx8aS5pc0lFKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PWUueGF4aXMsZj1lLnlheGlzLGg9IShsfHx0Ll9jb250ZXh0Ll9leHBvcnRlZFBsb3QpO2kubWFrZVRyYWNlR3JvdXBzKGMsciwiaW0iKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxsPWVbMF0sYz1sLnRyYWNlLHA9KCJmYXN0Ij09PWMuenNtb290aHx8ITE9PT1jLnpzbW9vdGgmJmgpJiYhYy5faGFzWiYmYy5faGFzU291cmNlJiYibGluZWFyIj09PXUudHlwZSYmImxpbmVhciI9PT1mLnR5cGU7Yy5fcmVhbEltYWdlPXA7dmFyIGQsbSxnLHYseSx4LGI9bC56LF89bC54MCx3PWwueTAsVD1sLncsaz1sLmgsQT1jLmR4LE09Yy5keTtmb3IoeD0wO3ZvaWQgMD09PWQmJng8VDspZD11LmMycChfK3gqQSkseCsrO2Zvcih4PVQ7dm9pZCAwPT09bSYmeD4wOyltPXUuYzJwKF8reCpBKSx4LS07Zm9yKHg9MDt2b2lkIDA9PT12JiZ4PGs7KXY9Zi5jMnAodyt4Kk0pLHgrKztmb3IoeD1rO3ZvaWQgMD09PXkmJng+MDspeT1mLmMycCh3K3gqTSkseC0tO2lmKG08ZCYmKGc9bSxtPWQsZD1nKSx5PHYmJihnPXYsdj15LHk9ZyksIXApe2Q9TWF0aC5tYXgoLS41KnUuX2xlbmd0aCxkKSxtPU1hdGgubWluKDEuNSp1Ll9sZW5ndGgsbSksdj1NYXRoLm1heCgtLjUqZi5fbGVuZ3RoLHYpLHk9TWF0aC5taW4oMS41KmYuX2xlbmd0aCx5KX12YXIgUz1NYXRoLnJvdW5kKG0tZCksRT1NYXRoLnJvdW5kKHktdik7aWYoUzw9MHx8RTw9MCl7ci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIEw9ci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShbZV0pO0wuZW50ZXIoKS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksTC5leGl0KCkucmVtb3ZlKCk7dmFyIEM9ITE9PT1jLnpzbW9vdGg/cy5waXhlbGF0ZWRTdHlsZToiIjtpZihwKXt2YXIgUD1pLnNpbXBsZU1hcCh1LnJhbmdlLHUucjJsKSxJPWkuc2ltcGxlTWFwKGYucmFuZ2UsZi5yMmwpLE89UFsxXTxQWzBdLHo9SVsxXT5JWzBdO2lmKE98fHope3ZhciBEPWQrUy8yLFI9ditFLzI7Qys9InRyYW5zZm9ybToiK2EoRCsicHgiLFIrInB4IikrInNjYWxlKCIrKE8/LTE6MSkrIiwiKyh6Py0xOjEpKyIpIithKC1EKyJweCIsLVIrInB4IikrIjsifX1MLmF0dHIoInN0eWxlIixDKTt2YXIgRj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7aWYoYy5faGFzWil0KCk7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYoYy5fY2FudmFzJiZjLl9jYW52YXMuZWwud2lkdGg9PT1UJiZjLl9jYW52YXMuZWwuaGVpZ2h0PT09ayYmYy5fY2FudmFzLnNvdXJjZT09PWMuc291cmNlKXQoKTtlbHNle3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9VCxlLmhlaWdodD1rO3ZhciByPWUuZ2V0Q29udGV4dCgiMmQiKTtjLl9pbWFnZT1jLl9pbWFnZXx8bmV3IEltYWdlO3ZhciBuPWMuX2ltYWdlO24ub25sb2FkPWZ1bmN0aW9uKCl7ci5kcmF3SW1hZ2UobiwwLDApLGMuX2NhbnZhcz17ZWw6ZSxzb3VyY2U6Yy5zb3VyY2V9LHQoKX0sbi5zZXRBdHRyaWJ1dGUoInNyYyIsYy5zb3VyY2UpfX0pKS50aGVuKChmdW5jdGlvbigpe3ZhciB0O2lmKGMuX2hhc1opdD1CKChmdW5jdGlvbih0LGUpe3JldHVybiBiW2VdW3RdfSkpLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYocCl0PWMuc291cmNlO2Vsc2V7dmFyIGU9Yy5fY2FudmFzLmVsLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsMCxULGspLmRhdGE7dD1CKChmdW5jdGlvbih0LHIpe3ZhciBuPTQqKHIqVCt0KTtyZXR1cm5bZVtuXSxlW24rMV0sZVtuKzJdLGVbbiszXV19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1MLmF0dHIoeyJ4bGluazpocmVmIjp0LGhlaWdodDpFLHdpZHRoOlMseDpkLHk6dn0pfSkpO3QuX3Byb21pc2VzLnB1c2goRil9ZnVuY3Rpb24gQih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPVMsZS5oZWlnaHQ9RTt2YXIgcixuPWUuZ2V0Q29udGV4dCgiMmQiKSxhPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKHUuYzJwKF8rdCpBKS1kKSwwLFMpfSxvPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKGYuYzJwKHcrdCpNKS12KSwwLEUpfSxoPXMuY29sb3Jtb2RlbFtjLmNvbG9ybW9kZWxdLHA9aC5jb2xvcm1vZGVsfHxjLmNvbG9ybW9kZWwsbT1oLmZtdDtmb3IoeD0wO3g8bC53O3grKyl7dmFyIGc9YSh4KSx5PWEoeCsxKTtpZih5IT09ZyYmIWlzTmFOKHkpJiYhaXNOYU4oZykpZm9yKHZhciBiPTA7YjxsLmg7YisrKXt2YXIgVD1vKGIpLGs9byhiKzEpO2s9PT1UfHxpc05hTihrKXx8aXNOYU4oVCl8fCF0KHgsYil8fChyPWMuX3NjYWxlcih0KHgsYikpLG4uZmlsbFN0eWxlPXI/cCsiKCIrbShyKS5qb2luKCIsIikrIikiOiJyZ2JhKDAsMCwwLDApIixuLmZpbGxSZWN0KGcsVCx5LWcsay1UKSl9fXJldHVybiBlfX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjQ3NSwiLi4vLi4vbGliIjo0OTgsIi4vY29uc3RhbnRzIjo4NDIsIkBwbG90bHkvZDMiOjU4fV0sODQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaW0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSl9fSx7IkBwbG90bHkvZDMiOjU4fV0sODUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXAsYT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGY9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmRlc2NyaXB0aW9uT25seU51bWJlcnMscD1vKHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToicGxvdCJ9KSxkPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OnMuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LG09e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sZz11KCJzdGVwIixpKHt9LGQse3JhbmdlOm19KSk7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibnVtYmVyIiwiZGVsdGEiLCJnYXVnZSJdLGRmbHQ6Im51bWJlciJ9LHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxkb21haW46bCh7bmFtZToiaW5kaWNhdG9yIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7fSxwLHt9KSxlZGl0VHlwZToicGxvdCJ9LG51bWJlcjp7dmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246aCgidmFsdWUiKX0sZm9udDpuKHt9LHAse30pLHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlbHRhOntyZWZlcmVuY2U6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LHJlbGF0aXZlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCIsZGZsdDohMX0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGRlc2NyaXB0aW9uOmgoInZhbHVlIil9LGluY3JlYXNpbmc6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OmYuSU5DUkVBU0lORy5TWU1CT0wsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Zi5JTkNSRUFTSU5HLkNPTE9SLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxkZWNyZWFzaW5nOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpmLkRFQ1JFQVNJTkcuU1lNQk9MLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmYuREVDUkVBU0lORy5DT0xPUixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LHAse30pLGVkaXRUeXBlOiJjYWxjIn0sZ2F1Z2U6e3NoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToicGxvdCIsZGZsdDoiYW5ndWxhciIsdmFsdWVzOlsiYW5ndWxhciIsImJ1bGxldCJdfSxiYXI6aSh7fSxkLHtjb2xvcjp7ZGZsdDoiZ3JlZW4ifX0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpzLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sYXhpczphKHtyYW5nZTptLHZpc2libGU6bih7fSxjLnZpc2libGUse2RmbHQ6ITB9KSx0aWNrbW9kZTpjLnRpY2ttb2RlLG50aWNrczpjLm50aWNrcyx0aWNrMDpjLnRpY2swLGR0aWNrOmMuZHRpY2ssdGlja3ZhbHM6Yy50aWNrdmFscyx0aWNrdGV4dDpjLnRpY2t0ZXh0LHRpY2tzOm4oe30sYy50aWNrcyx7ZGZsdDoib3V0c2lkZSJ9KSx0aWNrbGVuOmMudGlja2xlbix0aWNrd2lkdGg6Yy50aWNrd2lkdGgsdGlja2NvbG9yOmMudGlja2NvbG9yLHRpY2tsYWJlbHN0ZXA6Yy50aWNrbGFiZWxzdGVwLHNob3d0aWNrbGFiZWxzOmMuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6byh7fSksdGlja2FuZ2xlOmMudGlja2FuZ2xlLHRpY2tmb3JtYXQ6Yy50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpjLnRpY2tmb3JtYXRzdG9wcyx0aWNrcHJlZml4OmMudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpjLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6Yy50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4OmMuc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6Yy5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpjLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmMubWluZXhwb25lbnQsc2hvd2V4cG9uZW50OmMuc2hvd2V4cG9uZW50LGVkaXRUeXBlOiJwbG90In0sInBsb3QiKSxzdGVwczpnLHRocmVzaG9sZDp7bGluZTp7Y29sb3I6bih7fSxkLmxpbmUuY29sb3Ise30pLHdpZHRoOm4oe30sZC5saW5lLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToicGxvdCJ9LHRoaWNrbmVzczpuKHt9LGQudGhpY2tuZXNzLHtkZmx0Oi44NX0pLHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixkZmx0OiExfSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjQ2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MH1dLDg1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iaW5kaWNhdG9yIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxpLGEpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTR9XSw4NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1lLnZhbHVlOyJudW1iZXIiIT10eXBlb2YgZS5fbGFzdFZhbHVlJiYoZS5fbGFzdFZhbHVlPWUudmFsdWUpO3ZhciBpPWUuX2xhc3RWYWx1ZSxhPWk7cmV0dXJuIGUuX2hhc0RlbHRhJiYibnVtYmVyIj09dHlwZW9mIGUuZGVsdGEucmVmZXJlbmNlJiYoYT1lLmRlbHRhLnJlZmVyZW5jZSksclswXT17eTpuLGxhc3RZOmksZGVsdGE6bi1hLHJlbGF0aXZlRGVsdGE6KG4tYSkvYX0scn19fSx7fV0sODUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGVmYXVsdE51bWJlckZvbnRTaXplOjgwLGJ1bGxldE51bWJlckRvbWFpblNpemU6LjI1LGJ1bGxldFBhZGRpbmc6LjAyNSxpbm5lclJhZGl1czouNzUsdmFsdWVUaGlja25lc3M6LjUsdGl0bGVQYWRkaW5nOjUsaG9yaXpvbnRhbFBhZGRpbmc6MTB9fSx7fV0sODU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9jb25zdGFudHMuanMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKTtmdW5jdGlvbiBwKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5nYXVnZS5zdGVwcyxyLGEpfXIoImNvbG9yIikscigibGluZS5jb2xvciIpLHIoImxpbmUud2lkdGgiKSxyKCJyYW5nZSIpLHIoInRoaWNrbmVzcyIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsZCl7ZnVuY3Rpb24gbShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxkLG0pLG0oIm1vZGUiKSxlLl9oYXNOdW1iZXI9LTEhPT1lLm1vZGUuaW5kZXhPZigibnVtYmVyIiksZS5faGFzRGVsdGE9LTEhPT1lLm1vZGUuaW5kZXhPZigiZGVsdGEiKSxlLl9oYXNHYXVnZT0tMSE9PWUubW9kZS5pbmRleE9mKCJnYXVnZSIpO3ZhciBnPW0oInZhbHVlIik7ZS5fcmFuZ2U9WzAsIm51bWJlciI9PXR5cGVvZiBnPzEuNSpnOjFdO3ZhciB2LHkseCxiLF8sdyxUPW5ldyBBcnJheSgyKTtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIG4uY29lcmNlKHgsYixpLmdhdWdlLHQsZSl9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiBuLmNvZXJjZShfLHcsaS5nYXVnZS5heGlzLHQsZSl9aWYoZS5faGFzTnVtYmVyJiYobSgibnVtYmVyLnZhbHVlZm9ybWF0IiksbSgibnVtYmVyLmZvbnQuY29sb3IiLGQuZm9udC5jb2xvciksbSgibnVtYmVyLmZvbnQuZmFtaWx5IixkLmZvbnQuZmFtaWx5KSxtKCJudW1iZXIuZm9udC5zaXplIiksdm9pZCAwPT09ZS5udW1iZXIuZm9udC5zaXplJiYoZS5udW1iZXIuZm9udC5zaXplPWwuZGVmYXVsdE51bWJlckZvbnRTaXplLFRbMF09ITApLG0oIm51bWJlci5wcmVmaXgiKSxtKCJudW1iZXIuc3VmZml4Iiksdj1lLm51bWJlci5mb250LnNpemUpLGUuX2hhc0RlbHRhJiYobSgiZGVsdGEuZm9udC5jb2xvciIsZC5mb250LmNvbG9yKSxtKCJkZWx0YS5mb250LmZhbWlseSIsZC5mb250LmZhbWlseSksbSgiZGVsdGEuZm9udC5zaXplIiksdm9pZCAwPT09ZS5kZWx0YS5mb250LnNpemUmJihlLmRlbHRhLmZvbnQuc2l6ZT0oZS5faGFzTnVtYmVyPy41OjEpKih2fHxsLmRlZmF1bHROdW1iZXJGb250U2l6ZSksVFsxXT0hMCksbSgiZGVsdGEucmVmZXJlbmNlIixlLnZhbHVlKSxtKCJkZWx0YS5yZWxhdGl2ZSIpLG0oImRlbHRhLnZhbHVlZm9ybWF0IixlLmRlbHRhLnJlbGF0aXZlPyIyJSI6IiIpLG0oImRlbHRhLmluY3JlYXNpbmcuc3ltYm9sIiksbSgiZGVsdGEuaW5jcmVhc2luZy5jb2xvciIpLG0oImRlbHRhLmRlY3JlYXNpbmcuc3ltYm9sIiksbSgiZGVsdGEuZGVjcmVhc2luZy5jb2xvciIpLG0oImRlbHRhLnBvc2l0aW9uIikseT1lLmRlbHRhLmZvbnQuc2l6ZSksZS5fc2NhbGVOdW1iZXJzPSghZS5faGFzTnVtYmVyfHxUWzBdKSYmKCFlLl9oYXNEZWx0YXx8VFsxXSl8fCExLG0oInRpdGxlLmZvbnQuY29sb3IiLGQuZm9udC5jb2xvciksbSgidGl0bGUuZm9udC5mYW1pbHkiLGQuZm9udC5mYW1pbHkpLG0oInRpdGxlLmZvbnQuc2l6ZSIsLjI1Kih2fHx5fHxsLmRlZmF1bHROdW1iZXJGb250U2l6ZSkpLG0oInRpdGxlLnRleHQiKSxlLl9oYXNHYXVnZSl7KHg9dC5nYXVnZSl8fCh4PXt9KSxiPW8ubmV3Q29udGFpbmVyKGUsImdhdWdlIiksaygic2hhcGUiKSwoZS5faXNCdWxsZXQ9ImJ1bGxldCI9PT1lLmdhdWdlLnNoYXBlKXx8bSgidGl0bGUuYWxpZ24iLCJjZW50ZXIiKSwoZS5faXNBbmd1bGFyPSJhbmd1bGFyIj09PWUuZ2F1Z2Uuc2hhcGUpfHxtKCJhbGlnbiIsImNlbnRlciIpLGsoImJnY29sb3IiLGQucGFwZXJfYmdjb2xvciksaygiYm9yZGVyd2lkdGgiKSxrKCJib3JkZXJjb2xvciIpLGsoImJhci5jb2xvciIpLGsoImJhci5saW5lLmNvbG9yIiksaygiYmFyLmxpbmUud2lkdGgiKSxrKCJiYXIudGhpY2tuZXNzIixsLnZhbHVlVGhpY2tuZXNzKigiYnVsbGV0Ij09PWUuZ2F1Z2Uuc2hhcGU/LjU6MSkpLHMoeCxiLHtuYW1lOiJzdGVwcyIsaGFuZGxlSXRlbURlZmF1bHRzOnB9KSxrKCJ0aHJlc2hvbGQudmFsdWUiKSxrKCJ0aHJlc2hvbGQudGhpY2tuZXNzIiksaygidGhyZXNob2xkLmxpbmUud2lkdGgiKSxrKCJ0aHJlc2hvbGQubGluZS5jb2xvciIpLF89e30seCYmKF89eC5heGlzfHx7fSksdz1vLm5ld0NvbnRhaW5lcihiLCJheGlzIiksQSgidmlzaWJsZSIpLGUuX3JhbmdlPUEoInJhbmdlIixlLl9yYW5nZSk7dmFyIE09e291dGVyVGlja3M6ITB9O2MoXyx3LEEsImxpbmVhciIpLGgoXyx3LEEsImxpbmVhciIsTSksZihfLHcsQSwibGluZWFyIixNKSx1KF8sdyxBLE0pfWVsc2UgbSgidGl0bGUuYWxpZ24iLCJjZW50ZXIiKSxtKCJhbGlnbiIsImNlbnRlciIpLGUuX2lzQW5ndWxhcj1lLl9pc0J1bGxldD0hMTtlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NTczLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo1NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo1NzUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuL2F0dHJpYnV0ZXMiOjg1MCwiLi9jb25zdGFudHMuanMiOjg1M31dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbmRpY2F0b3IiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInN2ZyIsIm5vT3BhY2l0eSIsIm5vSG92ZXIiXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vcGxvdCIpLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6ODUwLCIuL2Jhc2VfcGxvdCI6ODUxLCIuL2NhbGMiOjg1MiwiLi9kZWZhdWx0cyI6ODU0LCIuL3Bsb3QiOjg1Nn1dLDg1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlLGE9dCgiZDMtaW50ZXJwb2xhdGUiKS5pbnRlcnBvbGF0ZU51bWJlcixvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJTY2FsZSxsPW8uc3RyVHJhbnNsYXRlLGM9by5yYWQyZGVnLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi9jb25zdGFudHMiKSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHg9e2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9LGI9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sXz0vW3l6YWZwblx4YjVta01HVFBFWlldLztmdW5jdGlvbiB3KHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gVCh0KXt0LmVhY2goKGZ1bmN0aW9uKHQpe3kuc3Ryb2tlKG4uc2VsZWN0KHRoaXMpLHQubGluZS5jb2xvcil9KSkuZWFjaCgoZnVuY3Rpb24odCl7eS5maWxsKG4uc2VsZWN0KHRoaXMpLHQuY29sb3IpfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5lLndpZHRofSkpfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1vLmV4dGVuZEZsYXQoe3R5cGU6ImxpbmVhciIsdGlja3M6Im91dHNpZGUiLHJhbmdlOnIsc2hvd2xpbmU6ITB9LGUpLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ4IitlLl9pZH0scz17bGV0dGVyOiJ4Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMH07ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBvLmNvZXJjZShpLGEsdix0LGUpfXJldHVybiBtKGksYSxsLHMsbiksZyhpLGEsbCxzKSxhfWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybltNYXRoLm1pbihlL3Qud2lkdGgsci90LmhlaWdodCksdCxlKyJ4IityXX1mdW5jdGlvbiBNKHQsZSxyLGkpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iiksbz1uLnNlbGVjdChhKTtyZXR1cm4gby50ZXh0KHQpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoInRleHQtYW5jaG9yIixyKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix0KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLGkpLmNhbGwoZi5mb250LGUpLGYuYkJveChvLm5vZGUoKSl9ZnVuY3Rpb24gUyh0LGUscixuLGksYSl7dmFyIHM9Il9jYWNoZSIrZTt0W3NdJiZ0W3NdLmtleT09PWl8fCh0W3NdPXtrZXk6aSx2YWx1ZTpyfSk7dmFyIGw9by5hZ2dOdW1zKGEsbnVsbCxbdFtzXS52YWx1ZSxuXSwyKTtyZXR1cm4gdFtzXS52YWx1ZT1sLGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe3ZhciBnLHY9dC5fZnVsbExheW91dDt3KHIpJiZtJiYoZz1tKCkpLG8ubWFrZVRyYWNlR3JvdXBzKHYuX2luZGljYXRvcmxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIG0sRSxMLEMsUCxJPWVbMF0udHJhY2UsTz1uLnNlbGVjdCh0aGlzKSx6PUkuX2hhc0dhdWdlLEQ9SS5faXNBbmd1bGFyLFI9SS5faXNCdWxsZXQsRj1JLmRvbWFpbixCPXt3OnYuX3NpemUudyooRi54WzFdLUYueFswXSksaDp2Ll9zaXplLmgqKEYueVsxXS1GLnlbMF0pLGw6di5fc2l6ZS5sK3YuX3NpemUudypGLnhbMF0scjp2Ll9zaXplLnIrdi5fc2l6ZS53KigxLUYueFsxXSksdDp2Ll9zaXplLnQrdi5fc2l6ZS5oKigxLUYueVsxXSksYjp2Ll9zaXplLmIrdi5fc2l6ZS5oKkYueVswXX0sTj1CLmwrQi53LzIsaj1CLnQrQi5oLzIsVT1NYXRoLm1pbihCLncvMixCLmgpLFY9aC5pbm5lclJhZGl1cypVLEg9SS5hbGlnbnx8ImNlbnRlciI7aWYoRT1qLHope2lmKEQmJihtPU4sRT1qK1UvMixMPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydCh0LndpZHRoLzIqKHQud2lkdGgvMikrdC5oZWlnaHQqdC5oZWlnaHQpO3JldHVybltlL3IsdCxlXX0odCwuOSpWKX0pLFIpe3ZhciBxPWguYnVsbGV0UGFkZGluZyxHPTEtaC5idWxsZXROdW1iZXJEb21haW5TaXplK3E7bT1CLmwrKEcrKDEtRykqYltIXSkqQi53LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCwoaC5idWxsZXROdW1iZXJEb21haW5TaXplLXEpKkIudyxCLmgpfX19ZWxzZSBtPUIubCtiW0hdKkIudyxMPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsQi53LEIuaCl9OyFmdW5jdGlvbih0LGUscixpKXt2YXIgYyx1LGgsbT1yWzBdLnRyYWNlLGc9aS5udW1iZXJzWCx2PWkubnVtYmVyc1ksVD1tLmFsaWdufHwiY2VudGVyIixBPXhbVF0sRT1pLnRyYW5zaXRpb25PcHRzLEw9aS5vbkNvbXBsZXRlLEM9by5lbnN1cmVTaW5nbGUoZSwiZyIsIm51bWJlcnMiKSxQPVtdO20uX2hhc051bWJlciYmUC5wdXNoKCJudW1iZXIiKTttLl9oYXNEZWx0YSYmKFAucHVzaCgiZGVsdGEiKSwibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiZQLnJldmVyc2UoKSk7dmFyIEk9Qy5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFApO2Z1bmN0aW9uIE8oZSxyLG4saSl7aWYoIWUubWF0Y2goInMiKXx8bj49MD09aT49MHx8cihuKS5zbGljZSgtMSkubWF0Y2goXyl8fHIoaSkuc2xpY2UoLTEpLm1hdGNoKF8pKXJldHVybiByO3ZhciBhPWUuc2xpY2UoKS5yZXBsYWNlKCJzIiwiZiIpLnJlcGxhY2UoL1xkKy8sKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KS0xfSkpLG89ayh0LHt0aWNrZm9ybWF0OmF9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQpPDE/ZC50aWNrVGV4dChvLHQpLnRleHQ6cih0KX19SS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigiZHgiLG51bGwpLmF0dHIoImR5IixudWxsKSxJLmV4aXQoKS5yZW1vdmUoKTt2YXIgeixEPW0ubW9kZSttLmFsaWduO20uX2hhc0RlbHRhJiYoej1mdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLmRlbHRhLnZhbHVlZm9ybWF0fSxtLl9yYW5nZSk7ZS5zZXRTY2FsZSgpLGQucHJlcFRpY2tzKGUpO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBkLnRpY2tUZXh0KGUsdCkudGV4dH0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbS5kZWx0YS5yZWxhdGl2ZT90LnJlbGF0aXZlRGVsdGE6dC5kZWx0YX0scz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8Im51bWJlciIhPXR5cGVvZiB0fHxpc05hTih0KT8iLSI6KHQ+MD9tLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sOm0uZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wpK2UodCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVsdGE+PTA/bS5kZWx0YS5pbmNyZWFzaW5nLmNvbG9yOm0uZGVsdGEuZGVjcmVhc2luZy5jb2xvcn07dm9pZCAwPT09bS5fZGVsdGFMYXN0VmFsdWUmJihtLl9kZWx0YUxhc3RWYWx1ZT1vKHJbMF0pKTt2YXIgYz1DLnNlbGVjdCgidGV4dC5kZWx0YSIpO2Z1bmN0aW9uIGgoKXtjLnRleHQocyhvKHJbMF0pLGkpKS5jYWxsKHkuZmlsbCxsKHJbMF0pKS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXJldHVybiBjLmNhbGwoZi5mb250LG0uZGVsdGEuZm9udCkuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6bS5fZGVsdGFMYXN0VmFsdWV9KSksdyhFKT9jLnRyYW5zaXRpb24oKS5kdXJhdGlvbihFLmR1cmF0aW9uKS5lYXNlKEUuZWFzaW5nKS50d2VlbigidGV4dCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1vKHJbMF0pLGM9bS5fZGVsdGFMYXN0VmFsdWUsdT1PKG0uZGVsdGEudmFsdWVmb3JtYXQsaSxjLGUpLGY9YShjLGUpO3JldHVybiBtLl9kZWx0YUxhc3RWYWx1ZT1lLGZ1bmN0aW9uKGUpe3QudGV4dChzKGYoZSksdSkpLHQuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6ZihlKX0pKX19KSkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtoKCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7aCgpLEwmJkwoKX0pKTpoKCksdT1NKHMobyhyWzBdKSxpKSxtLmRlbHRhLmZvbnQsQSx0KSxjfSgpLEQrPW0uZGVsdGEucG9zaXRpb24rbS5kZWx0YS5mb250LnNpemUrbS5kZWx0YS5mb250LmZhbWlseSttLmRlbHRhLnZhbHVlZm9ybWF0LEQrPW0uZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wrbS5kZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCxoPXUpO20uX2hhc051bWJlciYmKCFmdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLm51bWJlci52YWx1ZWZvcm1hdH0sbS5fcmFuZ2UpO2Uuc2V0U2NhbGUoKSxkLnByZXBUaWNrcyhlKTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gZC50aWNrVGV4dChlLHQpLnRleHR9LG89bS5udW1iZXIuc3VmZml4LHM9bS5udW1iZXIucHJlZml4LGw9Qy5zZWxlY3QoInRleHQubnVtYmVyIik7ZnVuY3Rpb24gdSgpe3ZhciBlPSJudW1iZXIiPT10eXBlb2YgclswXS55P3MraShyWzBdLnkpK286Ii0iO2wudGV4dChlKS5jYWxsKGYuZm9udCxtLm51bWJlci5mb250KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXcoRSk/bC50cmFuc2l0aW9uKCkuZHVyYXRpb24oRS5kdXJhdGlvbikuZWFzZShFLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt1KCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7dSgpLEwmJkwoKX0pKS5hdHRyVHdlZW4oInRleHQiLChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9YShyWzBdLmxhc3RZLHJbMF0ueSk7bS5fbGFzdFZhbHVlPXJbMF0ueTt2YXIgbD1PKG0ubnVtYmVyLnZhbHVlZm9ybWF0LGksclswXS5sYXN0WSxyWzBdLnkpO3JldHVybiBmdW5jdGlvbihyKXt0LnRleHQocytsKGUocikpK28pfX0pKTp1KCksYz1NKHMraShyWzBdLnkpK28sbS5udW1iZXIuZm9udCxBLHQpfSgpLEQrPW0ubnVtYmVyLmZvbnQuc2l6ZSttLm51bWJlci5mb250LmZhbWlseSttLm51bWJlci52YWx1ZWZvcm1hdCttLm51bWJlci5zdWZmaXgrbS5udW1iZXIucHJlZml4LGg9Yyk7aWYobS5faGFzRGVsdGEmJm0uX2hhc051bWJlcil7dmFyIFIsRixCPVsoYy5sZWZ0K2MucmlnaHQpLzIsKGMudG9wK2MuYm90dG9tKS8yXSxOPVsodS5sZWZ0K3UucmlnaHQpLzIsKHUudG9wK3UuYm90dG9tKS8yXSxqPS43NSptLmRlbHRhLmZvbnQuc2l6ZTsibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1TKG0sImRlbHRhUG9zIiwwLC0xKihjLndpZHRoKmJbbS5hbGlnbl0rdS53aWR0aCooMS1iW20uYWxpZ25dKStqKSxELE1hdGgubWluKSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6dS5sZWZ0K1IscmlnaHQ6Yy5yaWdodCx0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksInJpZ2h0Ij09PW0uZGVsdGEucG9zaXRpb24mJihSPVMobSwiZGVsdGFQb3MiLDAsYy53aWR0aCooMS1iW20uYWxpZ25dKSt1LndpZHRoKmJbbS5hbGlnbl0raixELE1hdGgubWF4KSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6Yy5sZWZ0LHJpZ2h0OnUucmlnaHQrUix0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksImJvdHRvbSI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1udWxsLEY9dS5oZWlnaHQsaD17d2lkdGg6TWF0aC5tYXgoYy53aWR0aCx1LndpZHRoKSxoZWlnaHQ6Yy5oZWlnaHQrdS5oZWlnaHQsbGVmdDpNYXRoLm1pbihjLmxlZnQsdS5sZWZ0KSxyaWdodDpNYXRoLm1heChjLnJpZ2h0LHUucmlnaHQpLHRvcDpjLmJvdHRvbS1jLmhlaWdodCxib3R0b206Yy5ib3R0b20rdS5oZWlnaHR9KSwidG9wIj09PW0uZGVsdGEucG9zaXRpb24mJihSPW51bGwsRj1jLnRvcCxoPXt3aWR0aDpNYXRoLm1heChjLndpZHRoLHUud2lkdGgpLGhlaWdodDpjLmhlaWdodCt1LmhlaWdodCxsZWZ0Ok1hdGgubWluKGMubGVmdCx1LmxlZnQpLHJpZ2h0Ok1hdGgubWF4KGMucmlnaHQsdS5yaWdodCksdG9wOmMuYm90dG9tLWMuaGVpZ2h0LXUuaGVpZ2h0LGJvdHRvbTpjLmJvdHRvbX0pLHouYXR0cih7ZHg6UixkeTpGfSl9KG0uX2hhc051bWJlcnx8bS5faGFzRGVsdGEpJiZDLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5udW1iZXJzU2NhbGVyKGgpO0QrPXRbMl07dmFyIGUscj1TKG0sIm51bWJlcnNTY2FsZSIsMSx0WzBdLEQsTWF0aC5taW4pO20uX3NjYWxlTnVtYmVyc3x8KHI9MSksZT1tLl9pc0FuZ3VsYXI/di1yKmguYm90dG9tOnYtciooaC50b3AraC5ib3R0b20pLzIsbS5fbnVtYmVyc1RvcD1yKmgudG9wK2U7dmFyIG49aFtUXTsiY2VudGVyIj09PVQmJihuPShoLmxlZnQraC5yaWdodCkvMik7dmFyIGE9Zy1yKm47cmV0dXJuIGE9UyhtLCJudW1iZXJzVHJhbnNsYXRlIiwwLGEsRCxNYXRoLm1heCksbChhLGUpK3Mocil9KSl9KHQsTyxlLHtudW1iZXJzWDptLG51bWJlcnNZOkUsbnVtYmVyc1NjYWxlcjpMLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpnfSkseiYmKEM9e3JhbmdlOkkuZ2F1Z2UuYXhpcy5yYW5nZSxjb2xvcjpJLmdhdWdlLmJnY29sb3IsbGluZTp7Y29sb3I6SS5nYXVnZS5ib3JkZXJjb2xvcix3aWR0aDowfSx0aGlja25lc3M6MX0sUD17cmFuZ2U6SS5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDApIixsaW5lOntjb2xvcjpJLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOkkuZ2F1Z2UuYm9yZGVyd2lkdGh9LHRoaWNrbmVzczoxfSk7dmFyIFk9Ty5zZWxlY3RBbGwoImcuYW5ndWxhciIpLmRhdGEoRD9lOltdKTtZLmV4aXQoKS5yZW1vdmUoKTt2YXIgVz1PLnNlbGVjdEFsbCgiZy5hbmd1bGFyYXhpcyIpLmRhdGEoRD9lOltdKTtXLmV4aXQoKS5yZW1vdmUoKSxEJiZmdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGYsaCxwPXJbMF0udHJhY2UsbT1hLnNpemUsZz1hLnJhZGl1cyx2PWEuaW5uZXJSYWRpdXMseT1hLmdhdWdlQmcseD1hLmdhdWdlT3V0bGluZSxiPVttLmwrbS53LzIsbS50K20uaC8yK2cvMl0sXz1hLmdhdWdlLEE9YS5sYXllcixNPWEudHJhbnNpdGlvbk9wdHMsUz1hLm9uQ29tcGxldGUsRT1NYXRoLlBJLzI7ZnVuY3Rpb24gTCh0KXt2YXIgZT1wLmdhdWdlLmF4aXMucmFuZ2VbMF0scj0odC1lKS8ocC5nYXVnZS5heGlzLnJhbmdlWzFdLWUpKk1hdGguUEktRTtyZXR1cm4gcjwtRT8tRTpyPkU/RTpyfWZ1bmN0aW9uIEModCl7cmV0dXJuIG4uc3ZnLmFyYygpLmlubmVyUmFkaXVzKCh2K2cpLzItdC8yKihnLXYpKS5vdXRlclJhZGl1cygoditnKS8yK3QvMiooZy12KSkuc3RhcnRBbmdsZSgtRSl9ZnVuY3Rpb24gUCh0KXt0LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gQyh0LnRoaWNrbmVzcykuc3RhcnRBbmdsZShMKHQucmFuZ2VbMF0pKS5lbmRBbmdsZShMKHQucmFuZ2VbMV0pKSgpfSkpfV8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyIiwhMCksXy5hdHRyKCJ0cmFuc2Zvcm0iLGwoYlswXSxiWzFdKSksQS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXJheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxBLnNlbGVjdEFsbCgiZy54YW5ndWxhcmF4aXN0aWNrLHBhdGgsdGV4dCIpLnJlbW92ZSgpLChvPWsodCxwLmdhdWdlLmF4aXMpKS50eXBlPSJsaW5lYXIiLG8ucmFuZ2U9cC5nYXVnZS5heGlzLnJhbmdlLG8uX2lkPSJ4YW5ndWxhcmF4aXMiLG8udGlja2xhYmVsb3ZlcmZsb3c9ImFsbG93IixvLnNldFNjYWxlKCk7dmFyIEk9ZnVuY3Rpb24odCl7cmV0dXJuKG8ucmFuZ2VbMF0tdC54KS8oby5yYW5nZVsxXS1vLnJhbmdlWzBdKSpNYXRoLlBJK01hdGguUEl9LE89e30sej1kLm1ha2VMYWJlbEZucyhvLDApLmxhYmVsU3RhbmRvZmY7Ty54Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqen0sTy55Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHordC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqdSl9LE8uYW5jaG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0sTy5oZWlnaHRGbj1mdW5jdGlvbih0LGUscil7dmFyIG49SSh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9O3ZhciBEPWZ1bmN0aW9uKHQpe3JldHVybiBsKGJbMF0rZypNYXRoLmNvcyh0KSxiWzFdLWcqTWF0aC5zaW4odCkpfTtmPWZ1bmN0aW9uKHQpe3JldHVybiBEKEkodCkpfTtpZihzPWQuY2FsY1RpY2tzKG8pLGg9ZC5nZXRUaWNrU2lnbnMobylbMl0sby52aXNpYmxlKXtoPSJpbnNpZGUiPT09by50aWNrcz8tMToxO3ZhciBSPShvLmxpbmV3aWR0aHx8MSkvMjtkLmRyYXdUaWNrcyh0LG8se3ZhbHM6cyxsYXllcjpBLHBhdGg6Ik0iK2gqUisiLDBoIitoKm8udGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIEQoZSkrInJvdGF0ZSgiKy1jKGUpKyIpIn19KSxkLmRyYXdMYWJlbHModCxvLHt2YWxzOnMsbGF5ZXI6QSx0cmFuc0ZuOmYsbGFiZWxGbnM6T30pfXZhciBGPVt5XS5jb25jYXQocC5nYXVnZS5zdGVwcyksQj1fLnNlbGVjdEFsbCgiZy5iZy1hcmMiKS5kYXRhKEYpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJiZy1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxCLnNlbGVjdCgicGF0aCIpLmNhbGwoUCkuY2FsbChUKSxCLmV4aXQoKS5yZW1vdmUoKTt2YXIgTj1DKHAuZ2F1Z2UuYmFyLnRoaWNrbmVzcyksaj1fLnNlbGVjdEFsbCgiZy52YWx1ZS1hcmMiKS5kYXRhKFtwLmdhdWdlLmJhcl0pO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ2YWx1ZS1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKTt2YXIgVT1qLnNlbGVjdCgicGF0aCIpO3coTSk/KFUudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0uZHVyYXRpb24pLmVhc2UoTS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmF0dHJUd2VlbigiZCIsKFY9TixIPUwoclswXS5sYXN0WSkscT1MKHJbMF0ueSksZnVuY3Rpb24oKXt2YXIgdD1pKEgscSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBWLmVuZEFuZ2xlKHQoZSkpKCl9fSkpLHAuX2xhc3RWYWx1ZT1yWzBdLnkpOlUuYXR0cigiZCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/Ti5lbmRBbmdsZShMKHJbMF0ueSkpOiJNMCwwWiIpO3ZhciBWLEgscTtVLmNhbGwoVCksai5leGl0KCkucmVtb3ZlKCksRj1bXTt2YXIgRz1wLmdhdWdlLnRocmVzaG9sZC52YWx1ZTsoR3x8MD09PUcpJiZGLnB1c2goe3JhbmdlOltHLEddLGNvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmNvbG9yLGxpbmU6e2NvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmxpbmUuY29sb3Isd2lkdGg6cC5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aH0sdGhpY2tuZXNzOnAuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzc30pO3ZhciBZPV8uc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1hcmMiKS5kYXRhKEYpO1kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYXJjIiwhMCkuYXBwZW5kKCJwYXRoIiksWS5zZWxlY3QoInBhdGgiKS5jYWxsKFApLmNhbGwoVCksWS5leGl0KCkucmVtb3ZlKCk7dmFyIFc9Xy5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3hdKTtXLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicGF0aCIpLFcuc2VsZWN0KCJwYXRoIikuY2FsbChQKS5jYWxsKFQpLFcuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7cmFkaXVzOlUsaW5uZXJSYWRpdXM6VixnYXVnZTpZLGxheWVyOlcsc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBYPU8uc2VsZWN0QWxsKCJnLmJ1bGxldCIpLmRhdGEoUj9lOltdKTtYLmV4aXQoKS5yZW1vdmUoKTt2YXIgWj1PLnNlbGVjdEFsbCgiZy5idWxsZXRheGlzIikuZGF0YShSP2U6W10pO1ouZXhpdCgpLnJlbW92ZSgpLFImJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGMsdT1yWzBdLnRyYWNlLGY9bi5nYXVnZSxwPW4ubGF5ZXIsbT1uLmdhdWdlQmcsZz1uLmdhdWdlT3V0bGluZSx2PW4uc2l6ZSx4PXUuZG9tYWluLGI9bi50cmFuc2l0aW9uT3B0cyxfPW4ub25Db21wbGV0ZTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnVsbGV0IiwhMCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGwodi5sLHYudCkpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxwLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIEE9di5oLE09dS5nYXVnZS5iYXIudGhpY2tuZXNzKkEsUz14LnhbMF0sRT14LnhbMF0rKHgueFsxXS14LnhbMF0pKih1Ll9oYXNOdW1iZXJ8fHUuX2hhc0RlbHRhPzEtaC5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhpPWsodCx1LmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixpLmRvbWFpbj1bUyxFXSxpLnNldFNjYWxlKCksYT1kLmNhbGNUaWNrcyhpKSxvPWQubWFrZVRyYW5zVGlja0ZuKGkpLHM9ZC5nZXRUaWNrU2lnbnMoaSlbMl0sYz12LnQrdi5oLGkudmlzaWJsZSYmKGQuZHJhd1RpY2tzKHQsaSx7dmFsczoiaW5zaWRlIj09PWkudGlja3M/ZC5jbGlwRW5kcyhpLGEpOmEsbGF5ZXI6cCxwYXRoOmQubWFrZVRpY2tQYXRoKGksYyxzKSx0cmFuc0ZuOm99KSxkLmRyYXdMYWJlbHModCxpLHt2YWxzOmEsbGF5ZXI6cCx0cmFuc0ZuOm8sbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnMoaSxjKX0pKTtmdW5jdGlvbiBMKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxpLmMycCh0LnJhbmdlWzFdKS1pLmMycCh0LnJhbmdlWzBdKSl9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBpLmMycCh0LnJhbmdlWzBdKX0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLjUqKDEtdC50aGlja25lc3MpKkF9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGhpY2tuZXNzKkF9KSl9dmFyIEM9W21dLmNvbmNhdCh1LmdhdWdlLnN0ZXBzKSxQPWYuc2VsZWN0QWxsKCJnLmJnLWJ1bGxldCIpLmRhdGEoQyk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLFAuc2VsZWN0KCJyZWN0IikuY2FsbChMKS5jYWxsKFQpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBJPWYuc2VsZWN0QWxsKCJnLnZhbHVlLWJ1bGxldCIpLmRhdGEoW3UuZ2F1Z2UuYmFyXSk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLEkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixNKS5hdHRyKCJ5IiwoQS1NKS8yKS5jYWxsKFQpLHcoYik/SS5zZWxlY3QoInJlY3QiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYi5kdXJhdGlvbikuZWFzZShiLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuYXR0cigid2lkdGgiLE1hdGgubWF4KDAsaS5jMnAoTWF0aC5taW4odS5nYXVnZS5heGlzLnJhbmdlWzFdLHJbMF0ueSkpKSk6SS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/TWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbih1LmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpOjApO0kuZXhpdCgpLnJlbW92ZSgpO3ZhciBPPXIuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiB1LmdhdWdlLnRocmVzaG9sZC52YWx1ZXx8MD09PXUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlfSkpLHo9Zi5zZWxlY3RBbGwoImcudGhyZXNob2xkLWJ1bGxldCIpLmRhdGEoTyk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1idWxsZXQiLCEwKS5hcHBlbmQoImxpbmUiKSx6LnNlbGVjdCgibGluZSIpLmF0dHIoIngxIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoIngyIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoInkxIiwoMS11LmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIqQSkuYXR0cigieTIiLCgxLSgxLXUuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzcykvMikqQSkuY2FsbCh5LnN0cm9rZSx1LmdhdWdlLnRocmVzaG9sZC5saW5lLmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix1LmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRoKSx6LmV4aXQoKS5yZW1vdmUoKTt2YXIgRD1mLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbZ10pO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJyZWN0IiksRC5zZWxlY3QoInJlY3QiKS5jYWxsKEwpLmNhbGwoVCksRC5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtnYXVnZTpYLGxheWVyOlosc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBKPU8uc2VsZWN0QWxsKCJ0ZXh0LnRpdGxlIikuZGF0YShlKTtKLmV4aXQoKS5yZW1vdmUoKSxKLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgidGl0bGUiLCEwKSxKLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gUj94LnJpZ2h0OnhbSS50aXRsZS5hbGlnbl19KSkudGV4dChJLnRpdGxlLnRleHQpLmNhbGwoZi5mb250LEkudGl0bGUuZm9udCkuY2FsbChwLmNvbnZlcnRUb1RzcGFucyx0KSxKLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1CLmwrQi53KmJbSS50aXRsZS5hbGlnbl0scj1oLnRpdGxlUGFkZGluZyxuPWYuYkJveChKLm5vZGUoKSk7aWYoeil7aWYoRClpZihJLmdhdWdlLmF4aXMudmlzaWJsZSl0PWYuYkJveChXLm5vZGUoKSkudG9wLXItbi5ib3R0b207ZWxzZSB0PUIudCtCLmgvMi1VLzItbi5ib3R0b20tcjtSJiYodD1FLShuLnRvcCtuLmJvdHRvbSkvMixlPUIubC1oLmJ1bGxldFBhZGRpbmcqQi53KX1lbHNlIHQ9SS5fbnVtYmVyc1RvcC1yLW4uYm90dG9tO3JldHVybiBsKGUsdCl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NTUxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo1NjcsIi4vY29uc3RhbnRzIjo4NTMsIkBwbG90bHkvZDMiOjU4LCJkMy1pbnRlcnBvbGF0ZSI6MTExfV0sODU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi9tZXNoM2QvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7dmFyIHU9ZS5leHBvcnRzPWMobCh7eDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdmFsdWU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxpc29taW46e3ZhbFR5cGU6Im51bWJlciJ9LGlzb21heDp7dmFsVHlwZToibnVtYmVyIn0sc3VyZmFjZTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MixtaW46MX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHBhdHRlcm46e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIkEiLCJCIiwiQyIsIkQiLCJFIl0sZXh0cmFzOlsiYWxsIiwib2RkIiwiZXZlbiJdLGRmbHQ6ImFsbCJ9fSxzcGFjZWZyYW1lOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjE1fX0sc2xpY2VzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sY2Fwczp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX19LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOmEoKSx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksemhvdmVyZm9ybWF0OmkoInoiKSx2YWx1ZWhvdmVyZm9ybWF0OmkoInZhbHVlIiwxKSxzaG93bGVnZW5kOmwoe30scy5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NvbG9yQXR0cjoiYHZhbHVlYCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5Om8ub3BhY2l0eSxsaWdodHBvc2l0aW9uOm8ubGlnaHRwb3NpdGlvbixsaWdodGluZzpvLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOm8uZmxhdHNoYWRpbmcsY29udG91cjpvLmNvbnRvdXIsaG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pfSksImNhbGMiLCJuZXN0ZWQiKTt1LmZsYXRzaGFkaW5nLmRmbHQ9ITAsdS5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24uZGZsdD0wLHUueC5lZGl0VHlwZT11LnkuZWRpdFR5cGU9dS56LmVkaXRUeXBlPXUudmFsdWUuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLHUudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6ODYyfV0sODU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi9zdHJlYW10dWJlL2NhbGMiKS5wcm9jZXNzR3JpZCxhPXQoIi4uL3N0cmVhbXR1YmUvY2FsYyIpLmZpbHRlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLl9sZW49TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsZS52YWx1ZS5sZW5ndGgpLGUuX3g9YShlLngsZS5fbGVuKSxlLl95PWEoZS55LGUuX2xlbiksZS5fej1hKGUueixlLl9sZW4pLGUuX3ZhbHVlPWEoZS52YWx1ZSxlLl9sZW4pO3ZhciByPWkoZSk7ZS5fZ3JpZEZpbGw9ci5maWxsLGUuX1hzPXIuWHMsZS5fWXM9ci5ZcyxlLl9acz1yLlpzLGUuX2xlbj1yLmxlbjtmb3IodmFyIG89MS8wLHM9LTEvMCxsPTA7bDxlLl9sZW47bCsrKXt2YXIgYz1lLl92YWx1ZVtsXTtvPU1hdGgubWluKG8sYykscz1NYXRoLm1heChzLGMpfWUuX21pblZhbHVlcz1vLGUuX21heFZhbHVlcz1zLGUuX3ZNaW49dm9pZCAwPT09ZS5pc29taW58fG51bGw9PT1lLmlzb21pbj9vOmUuaXNvbWluLGUuX3ZNYXg9dm9pZCAwPT09ZS5pc29tYXh8fG51bGw9PT1lLmlzb21pbj9zOmUuaXNvbWF4LG4odCxlLHt2YWxzOltlLl92TWluLGUuX3ZNYXhdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6MzY5LCIuLi9zdHJlYW10dWJlL2NhbGMiOjEwNDB9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfbWVzaDNkLGk9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxhPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLHM9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIiksbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aC0xO3I+MDtyLS0pe3ZhciBuPU1hdGgubWluKGVbcl0sZVtyLTFdKSxpPU1hdGgubWF4KGVbcl0sZVtyLTFdKTtpZihpPm4mJm48dCYmdDw9aSlyZXR1cm57aWQ6cixkaXN0UmF0aW86KGktdCkvKGktbil9fXJldHVybntpZDowLGRpc3RSYXRpbzowfX07ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEuX21lc2hYW2VdLG49dGhpcy5kYXRhLl9tZXNoWVtlXSxpPXRoaXMuZGF0YS5fbWVzaFpbZV0sYT10aGlzLmRhdGEuX1lzLmxlbmd0aCxvPXRoaXMuZGF0YS5fWnMubGVuZ3RoLHM9bChyLHRoaXMuZGF0YS5fWHMpLmlkLGM9bChuLHRoaXMuZGF0YS5fWXMpLmlkLHU9bChpLHRoaXMuZGF0YS5fWnMpLmlkLGY9dC5pbmRleD11K28qYytvKmEqczt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLl9tZXNoWFtmXSx0aGlzLmRhdGEuX21lc2hZW2ZdLHRoaXMuZGF0YS5fbWVzaFpbZl0sdGhpcy5kYXRhLl92YWx1ZVtmXV07dmFyIGg9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCkmJnZvaWQgMCE9PWhbZl0/dC50ZXh0TGFiZWw9aFtmXTpoJiYodC50ZXh0TGFiZWw9aCksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pKX10aGlzLmRhdGE9aCh0KTt2YXIgbD17cG9zaXRpb25zOnMobihyLnhheGlzLHQuX21lc2hYLGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5fbWVzaFksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll9tZXNoWixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOnModC5fbWVzaEksdC5fbWVzaEosdC5fbWVzaEspLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSxjPW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bYy5taW4sYy5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfTt2YXIgZj1bInh5eiIsInh6eSIsInl4eiIsInl6eCIsInp4eSIsInp5eCJdO2Z1bmN0aW9uIGgodCl7dC5fbWVzaEk9W10sdC5fbWVzaEo9W10sdC5fbWVzaEs9W107dmFyIGUscixuLGksYSxvLHMsYz10LnN1cmZhY2Uuc2hvdyx1PXQuc3BhY2VmcmFtZS5zaG93LGg9dC5zdXJmYWNlLmZpbGwscD10LnNwYWNlZnJhbWUuZmlsbCxkPSExLG09ITEsZz0wLHY9dC5fWHMseT10Ll9Zcyx4PXQuX1pzLGI9di5sZW5ndGgsXz15Lmxlbmd0aCx3PXgubGVuZ3RoLFQ9Zi5pbmRleE9mKHQuX2dyaWRGaWxsLnJlcGxhY2UoLy0vZywiIikucmVwbGFjZSgvXCsvZywiIikpLGs9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChUKXtjYXNlIDU6cmV0dXJuIHIrdyplK3cqXyp0O2Nhc2UgNDpyZXR1cm4gcit3KnQrdypiKmU7Y2FzZSAzOnJldHVybiBlK18qcitfKncqdDtjYXNlIDI6cmV0dXJuIGUrXyp0K18qYipyO2Nhc2UgMTpyZXR1cm4gdCtiKnIrYip3KmU7ZGVmYXVsdDpyZXR1cm4gdCtiKmUrYipfKnJ9fSxBPXQuX21pblZhbHVlcyxNPXQuX21heFZhbHVlcyxTPXQuX3ZNaW4sRT10Ll92TWF4O2Z1bmN0aW9uIEwodCxlLHMpe2Zvcih2YXIgbD1vLmxlbmd0aCxjPXI7YzxsO2MrKylpZih0PT09bltjXSYmZT09PWlbY10mJnM9PT1hW2NdKXJldHVybiBjO3JldHVybi0xfWZ1bmN0aW9uIEMoKXtyPWV9ZnVuY3Rpb24gUCgpe249W10saT1bXSxhPVtdLG89W10sZT0wLEMoKX1mdW5jdGlvbiBJKHQscixzLGwpe3JldHVybiBuLnB1c2godCksaS5wdXNoKHIpLGEucHVzaChzKSxvLnB1c2gobCksKytlLTF9ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIHoodCl7cz10fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4iYWxsIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gRihlLHIsbil7QygpO3ZhciBpLGEsbyxsPVtyXSxjPVtuXTtpZihzPj0xKWw9W3JdLGM9W25dO2Vsc2UgaWYocz4wKXt2YXIgdT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1zKSxsPU8oYSxyLG8pLGM9TyhhLG4sbyksdT1PKGEsaSxvKSxmPWVbMF0saD1lWzFdLHA9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixjXSxbYyxsLHJdLFtuLGksdV0sW3UsYyxuXSxbaSxyLGxdLFtsLHUsaV1dLGFiYzpbW2YsaCwtMV0sWy0xLC0xLGZdLFtoLHAsLTFdLFstMSwtMSxoXSxbcCxmLC0xXSxbLTEsLTEscF1dfX0ocixuKTtsPXUueHl6dixjPXUuYWJjfWZvcih2YXIgZj0wO2Y8bC5sZW5ndGg7ZisrKXtyPWxbZl0sbj1jW2ZdO2Zvcih2YXIgaD1bXSxwPTA7cDwzO3ArKyl7dmFyIGQ9cltwXVswXSxtPXJbcF1bMV0sdj1yW3BdWzJdLHk9cltwXVszXSx4PW5bcF0+LTE/bltwXTpMKGQsbSx2KTtoW3BdPXg+LTE/eDpJKGQsbSx2LFIoZSx5KSl9aT1oWzBdLGE9aFsxXSxvPWhbMl0sdC5fbWVzaEkucHVzaChpKSx0Ll9tZXNoSi5wdXNoKGEpLHQuX21lc2hLLnB1c2gobyksKytnfX1mdW5jdGlvbiBCKHQsZSxyLG4pe3ZhciBpPXRbM107aTxyJiYoaT1yKSxpPm4mJihpPW4pO2Zvcih2YXIgYT0odFszXS1pKS8odFszXS1lWzNdKzFlLTkpLG89W10scz0wO3M8NDtzKyspb1tzXT0oMS1hKSp0W3NdK2EqZVtzXTtyZXR1cm4gb31mdW5jdGlvbiBOKHQsZSxyKXtyZXR1cm4gdD49ZSYmdDw9cn1mdW5jdGlvbiBqKHQpe3ZhciBlPS4wMDEqKEUtUyk7cmV0dXJuIHQ+PVMtZSYmdDw9RStlfWZ1bmN0aW9uIFUoZSl7Zm9yKHZhciByPVtdLG49MDtuPDQ7bisrKXt2YXIgaT1lW25dO3IucHVzaChbdC5feFtpXSx0Ll95W2ldLHQuX3pbaV0sdC5fdmFsdWVbaV1dKX1yZXR1cm4gcn1mdW5jdGlvbiBWKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bTihlWzBdWzNdLG4saSksTihlWzFdWzNdLG4saSksTihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBqKGVbMF1bM10pJiZqKGVbMV1bM10pJiZqKGVbMl1bM10pPyhGKHQsZSxyKSwhMCk6YTwzJiZWKHQsZSxyLFMsRSwrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJnNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGY9ZVthWzFdXSxoPWVbYVsyXV0scD1CKGgsdSxuLGkpLGQ9QihoLGYsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sbz1sKHQsW3UsZixkXSxbclthWzBdXSxyW2FbMV1dLC0xXSl8fG8sYz0hMH19KSksY3x8W1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiYhc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0sZj1lW2FbMV1dLGg9ZVthWzJdXSxwPUIoZix1LG4saSksZD1CKGgsdSxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxjPSEwfX0pKSxvfWZ1bmN0aW9uIEgodCxlLHIsbil7dmFyIGk9ITEsYT1VKGUpLG89W04oYVswXVszXSxyLG4pLE4oYVsxXVszXSxyLG4pLE4oYVsyXVszXSxyLG4pLE4oYVszXVszXSxyLG4pXTtpZighKG9bMF18fG9bMV18fG9bMl18fG9bM10pKXJldHVybiBpO2lmKG9bMF0mJm9bMV0mJm9bMl0mJm9bM10pcmV0dXJuIG0mJihpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMywwLDEpLG4oMiwzLDApLG4oMSwyLDMpfSh0LGEsZSl8fGkpLGk7dmFyIHM9ITE7cmV0dXJuW1swLDEsMiwzXSxbMywwLDEsMl0sWzIsMywwLDFdLFsxLDIsMywwXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV07aWYobSlpPUYodCxbYyx1LGZdLFtlW2xbMF1dLGVbbFsxXV0sZVtsWzJdXV0pfHxpO2Vsc2V7dmFyIHA9QihoLGMscixuKSxkPUIoaCx1LHIsbiksZz1CKGgsZixyLG4pO2k9RihudWxsLFtwLGQsZ10sWy0xLC0xLC0xXSl8fGl9cz0hMH19KSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0sZj1hW2xbMl1dLGg9YVtsWzNdXSxwPUIoZixjLHIsbiksZD1CKGYsdSxyLG4pLGc9QihoLHUscixuKSx2PUIoaCxjLHIsbik7bT8oaT1GKHQsW2MsdixwXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFt1LGQsZ10sW2VbbFsxXV0sLTEsLTFdKXx8aSk6aT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe0YodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDIsMywwKX0obnVsbCxbcCxkLGcsdl0sWy0xLC0xLC0xLC0xXSl8fGkscz0hMH19KSksc3x8W1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmIW9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0sZj1hW2xbMl1dLGg9YVtsWzNdXSxwPUIodSxjLHIsbiksZD1CKGYsYyxyLG4pLGc9QihoLGMscixuKTttPyhpPUYodCxbYyxwLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2MsZCxnXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFtjLGcscF0sW2VbbFswXV0sLTEsLTFdKXx8aSk6aT1GKG51bGwsW3AsZCxnXSxbLTEsLTEsLTFdKXx8aSxzPSEwfX0pKSxpKX1mdW5jdGlvbiBxKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9ITE7cmV0dXJuIGQmJihEKHQsIkEiKSYmKGY9SChudWxsLFtlLHIsbixhXSxjLHUpfHxmKSxEKHQsIkIiKSYmKGY9SChudWxsLFtyLG4saSxsXSxjLHUpfHxmKSxEKHQsIkMiKSYmKGY9SChudWxsLFtyLGEsbyxsXSxjLHUpfHxmKSxEKHQsIkQiKSYmKGY9SChudWxsLFtuLGEscyxsXSxjLHUpfHxmKSxEKHQsIkUiKSYmKGY9SChudWxsLFtyLG4sYSxsXSxjLHUpfHxmKSksbSYmKGY9SCh0LFtyLG4sYSxsXSxjLHUpfHxmKSxmfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm5bITA9PT1zWzBdfHxWKHQsVShbZSxyLG5dKSxbZSxyLG5dLGEsbyksITA9PT1zWzFdfHxWKHQsVShbbixpLGVdKSxbbixpLGVdLGEsbyldfWZ1bmN0aW9uIFkodCxlLHIsbixpLGEsbyxzLGwpe3JldHVybiBzP0codCxlLHIsaSxuLGEsbyxsKTpHKHQscixpLG4sZSxhLG8sbCl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmPSExLGg9ZnVuY3Rpb24oKXtmPVYodCxbcyxsLGNdLFstMSwtMSwtMV0saSxhKXx8ZixmPVYodCxbYyx1LHNdLFstMSwtMSwtMV0saSxhKXx8Zn0scD1vWzBdLGQ9b1sxXSxtPW9bMl07cmV0dXJuIHAmJihzPU8oVShbayhlLHItMCxuLTApXSlbMF0sVShbayhlLTEsci0wLG4tMCldKVswXSxwKSxsPU8oVShbayhlLHItMCxuLTEpXSlbMF0sVShbayhlLTEsci0wLG4tMSldKVswXSxwKSxjPU8oVShbayhlLHItMSxuLTEpXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxwKSx1PU8oVShbayhlLHItMSxuLTApXSlbMF0sVShbayhlLTEsci0xLG4tMCldKVswXSxwKSxoKCkpLGQmJihzPU8oVShbayhlLTAscixuLTApXSlbMF0sVShbayhlLTAsci0xLG4tMCldKVswXSxkKSxsPU8oVShbayhlLTAscixuLTEpXSlbMF0sVShbayhlLTAsci0xLG4tMSldKVswXSxkKSxjPU8oVShbayhlLTEscixuLTEpXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxkKSx1PU8oVShbayhlLTEscixuLTApXSlbMF0sVShbayhlLTEsci0xLG4tMCldKVswXSxkKSxoKCkpLG0mJihzPU8oVShbayhlLTAsci0wLG4pXSlbMF0sVShbayhlLTAsci0wLG4tMSldKVswXSxtKSxsPU8oVShbayhlLTAsci0xLG4pXSlbMF0sVShbayhlLTAsci0xLG4tMSldKVswXSxtKSxjPU8oVShbayhlLTEsci0xLG4pXSlbMF0sVShbayhlLTEsci0xLG4tMSldKVswXSxtKSx1PU8oVShbayhlLTEsci0wLG4pXSlbMF0sVShbayhlLTEsci0wLG4tMSldKVswXSxtKSxoKCkpLGZ9ZnVuY3Rpb24gWCh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9dDtyZXR1cm4gZj8oZCYmImV2ZW4iPT09dCYmKGg9bnVsbCkscShoLGUscixuLGksYSxvLHMsbCxjLHUpKTooZCYmIm9kZCI9PT10JiYoaD1udWxsKSxxKGgsbCxzLG8sYSxpLG4scixlLGMsdSkpfWZ1bmN0aW9uIFoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7Yzx3O2MrKylmb3IodmFyIHU9MTt1PF87dSsrKWEucHVzaChZKHQsayhsLHUtMSxjLTEpLGsobCx1LTEsYyksayhsLHUsYy0xKSxrKGwsdSxjKSxyLG4sKGwrdStjKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBKKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8YjtjKyspZm9yKHZhciB1PTE7dTx3O3UrKylhLnB1c2goWSh0LGsoYy0xLGwsdS0xKSxrKGMsbCx1LTEpLGsoYy0xLGwsdSksayhjLGwsdSkscixuLChjK2wrdSklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSyh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPF87YysrKWZvcih2YXIgdT0xO3U8Yjt1KyspYS5wdXNoKFkodCxrKHUtMSxjLTEsbCksayh1LTEsYyxsKSxrKHUsYy0xLGwpLGsodSxjLGwpLHIsbiwodStjK2wpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIFEodCxlLHIpe2Zvcih2YXIgbj0xO248dztuKyspZm9yKHZhciBpPTE7aTxfO2krKylmb3IodmFyIGE9MTthPGI7YSsrKVgodCxrKGEtMSxpLTEsbi0xKSxrKGEtMSxpLTEsbiksayhhLTEsaSxuLTEpLGsoYS0xLGksbiksayhhLGktMSxuLTEpLGsoYSxpLTEsbiksayhhLGksbi0xKSxrKGEsaSxuKSxlLHIsKGEraStuKSUyKX1mdW5jdGlvbiAkKHQsZSxyKXtkPSEwLFEodCxlLHIpLGQ9ITF9ZnVuY3Rpb24gdHQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PHc7dSsrKWZvcih2YXIgZj0xO2Y8XztmKyspby5wdXNoKFcodCxjLGYsdSxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIGV0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxiO3UrKylmb3IodmFyIGY9MTtmPHc7ZisrKW8ucHVzaChXKHQsdSxjLGYscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBydCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Xzt1KyspZm9yKHZhciBmPTE7ZjxiO2YrKylvLnB1c2goVyh0LGYsdSxjLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gbnQodCxlKXtmb3IodmFyIHI9W10sbj10O248ZTtuKyspci5wdXNoKG4pO3JldHVybiByfXJldHVybiBmdW5jdGlvbigpe2lmKFAoKSxmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8YjtlKyspZm9yKHZhciByPTA7cjxfO3IrKylmb3IodmFyIG49MDtuPHc7bisrKXt2YXIgaT1rKGUscixuKTtJKHQuX3hbaV0sdC5feVtpXSx0Ll96W2ldLHQuX3ZhbHVlW2ldKX19KCksdSYmcCYmKHoocCksbT0hMCxRKG51bGwsUyxFKSxtPSExKSxjJiZoKXt6KGgpO2Zvcih2YXIgZT10LnN1cmZhY2UucGF0dGVybixyPXQuc3VyZmFjZS5jb3VudCxzPTA7czxyO3MrKyl7dmFyIGY9MT09PXI/LjU6cy8oci0xKSxkPSgxLWYpKlMrZipFLFQ9TWF0aC5hYnMoZC1BKT5NYXRoLmFicyhkLU0pP1tBLGRdOltkLE1dOyQoZSxUWzBdLFRbMV0pfX12YXIgTD1bW01hdGgubWluKFMsTSksTWF0aC5tYXgoUyxNKV0sW01hdGgubWluKEEsRSksTWF0aC5tYXgoQSxFKV1dO1sieCIsInkiLCJ6Il0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLG49MDtuPEwubGVuZ3RoO24rKyl7dmFyIGk9MCxhPUxbbl1bMF0sbz1MW25dWzFdLHM9dC5zbGljZXNbZV07aWYocy5zaG93JiZzLmZpbGwpe3oocy5maWxsKTt2YXIgYz1bXSx1PVtdLGY9W107aWYocy5sb2NhdGlvbnMubGVuZ3RoKWZvcih2YXIgaD0wO2g8cy5sb2NhdGlvbnMubGVuZ3RoO2grKyl7dmFyIHA9bChzLmxvY2F0aW9uc1toXSwieCI9PT1lP3Y6InkiPT09ZT95OngpOzA9PT1wLmRpc3RSYXRpbz9jLnB1c2gocC5pZCk6cC5pZD4wJiYodS5wdXNoKHAuaWQpLCJ4Ij09PWU/Zi5wdXNoKFtwLmRpc3RSYXRpbywwLDBdKToieSI9PT1lP2YucHVzaChbMCxwLmRpc3RSYXRpbywwXSk6Zi5wdXNoKFswLDAscC5kaXN0UmF0aW9dKSl9ZWxzZSBjPW50KDEsIngiPT09ZT9iLTE6InkiPT09ZT9fLTE6dy0xKTt1Lmxlbmd0aD4wJiYocltpXT0ieCI9PT1lP3R0KG51bGwsdSxhLG8sZixyW2ldKToieSI9PT1lP2V0KG51bGwsdSxhLG8sZixyW2ldKTpydChudWxsLHUsYSxvLGYscltpXSksaSsrKSxjLmxlbmd0aD4wJiYocltpXT0ieCI9PT1lP1oobnVsbCxjLGEsbyxyW2ldKToieSI9PT1lP0oobnVsbCxjLGEsbyxyW2ldKTpLKG51bGwsYyxhLG8scltpXSksaSsrKX12YXIgZD10LmNhcHNbZV07ZC5zaG93JiZkLmZpbGwmJih6KGQuZmlsbCkscltpXT0ieCI9PT1lP1oobnVsbCxbMCxiLTFdLGEsbyxyW2ldKToieSI9PT1lP0oobnVsbCxbMCxfLTFdLGEsbyxyW2ldKTpLKG51bGwsWzAsdy0xXSxhLG8scltpXSksaSsrKX19KSksMD09PWcmJlAoKSx0Ll9tZXNoWD1uLHQuX21lc2hZPWksdC5fbWVzaFo9YSx0Ll9tZXNoSW50ZW5zaXR5PW8sdC5fWHM9dix0Ll9Zcz15LHQuX1pzPXh9KCksdH1lLmV4cG9ydHM9e2ZpbmROZWFyZXN0T25BeGlzOmwsZ2VuZXJhdGVJc29NZXNoZXM6aCxjcmVhdGVJc29zdXJmYWNlVHJhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTQsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyMywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo2MDR9XSw4NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtmdW5jdGlvbiBzKHQsZSxyLG4sYSl7dmFyIHM9YSgiaXNvbWluIiksbD1hKCJpc29tYXgiKTtudWxsIT1sJiZudWxsIT1zJiZzPmwmJihlLmlzb21pbj1udWxsLGUuaXNvbWF4PW51bGwpO3ZhciBjPWEoIngiKSx1PWEoInkiKSxmPWEoInoiKSxoPWEoInZhbHVlIik7YyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGg/KGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sbiksYSgidmFsdWVob3ZlcmZvcm1hdCIpLFsieCIsInkiLCJ6Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YSh0KyJob3ZlcmZvcm1hdCIpO3ZhciBlPSJjYXBzLiIrdDthKGUrIi5zaG93IikmJmEoZSsiLmZpbGwiKTt2YXIgcj0ic2xpY2VzLiIrdDthKHIrIi5zaG93IikmJihhKHIrIi5maWxsIiksYShyKyIubG9jYXRpb25zIikpfSkpLGEoInNwYWNlZnJhbWUuc2hvdyIpJiZhKCJzcGFjZWZyYW1lLmZpbGwiKSxhKCJzdXJmYWNlLnNob3ciKSYmKGEoInN1cmZhY2UuY291bnQiKSxhKCJzdXJmYWNlLmZpbGwiKSxhKCJzdXJmYWNlLnBhdHRlcm4iKSksYSgiY29udG91ci5zaG93IikmJihhKCJjb250b3VyLmNvbG9yIiksYSgiY29udG91ci53aWR0aCIpKSxbInRleHQiLCJob3ZlcnRleHQiLCJob3ZlcnRlbXBsYXRlIiwibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2EodCl9KSksbyh0LGUsbixhLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7cyh0LGUscixpLChmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSkpfSxzdXBwbHlJc29EZWZhdWx0czpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vYXR0cmlidXRlcyI6ODU3fV0sODYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaXNvc3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjU5MywiLi9hdHRyaWJ1dGVzIjo4NTcsIi4vY2FsYyI6ODU4LCIuL2NvbnZlcnQiOjg1OSwiLi9kZWZhdWx0cyI6ODYwfV0sODYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1sKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxpOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sazp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0pLHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx6aG92ZXJmb3JtYXQ6aSgieiIpLGRlbGF1bmF5YXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJ6Il0sZGZsdDoieiIsZWRpdFR5cGU6ImNhbGMifSxhbHBoYWh1bGw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDotMSxlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxpbnRlbnNpdHltb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2ZXJ0ZXgiLCJjZWxsIl0sZGZsdDoidmVydGV4IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oIiIse2NvbG9yQXR0cjoiYGludGVuc2l0eWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7b3BhY2l0eTpvLm9wYWNpdHksZmxhdHNoYWRpbmc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjb250b3VyOntzaG93Omwoe30sby5jb250b3Vycy54LnNob3cse30pLGNvbG9yOm8uY29udG91cnMueC5jb2xvcix3aWR0aDpvLmNvbnRvdXJzLngud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxsaWdodHBvc2l0aW9uOnt4Omwoe30sby5saWdodHBvc2l0aW9uLngse2RmbHQ6MWU1fSkseTpsKHt9LG8ubGlnaHRwb3NpdGlvbi55LHtkZmx0OjFlNX0pLHo6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueix7ZGZsdDowfSksZWRpdFR5cGU6ImNhbGMifSxsaWdodGluZzpsKHt2ZXJ0ZXhub3JtYWxzZXBzaWxvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjFlLTEyLGVkaXRUeXBlOiJjYWxjIn0sZmFjZW5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtNixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sby5saWdodGluZyksaG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIn0pLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNjgsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTA1Nn1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9tZXNoM2QsaT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5kZWxhdW5heV90cmlhbmd1bGF0ZSxhPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmFscGhhX3NoYXBlLG89dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuY29udmV4X2h1bGwscz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGw9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgaD1mLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LmRhdGEuX2NlbGxDZW50ZXI/dC50cmFjZUNvb3JkaW5hdGU9dC5kYXRhLmRhdGFDb29yZGluYXRlOnQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4sZj10LngubGVuZ3RoLGg9dShkKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxkKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxkKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhZyh0LmksZil8fCFnKHQuaixmKXx8IWcodC5rLGYpKXJldHVybjtuPXUobSh0LmkpLG0odC5qKSxtKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhoKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsaCk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxoKTt2YXIgdj17cG9zaXRpb25zOmgsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307aWYodC5pbnRlbnNpdHkpe3ZhciB5PWModCk7dGhpcy5jb2xvcj0iI2ZmZiI7dmFyIHg9dC5pbnRlbnNpdHltb2RlO3ZbeCsiSW50ZW5zaXR5Il09dC5pbnRlbnNpdHksdlt4KyJJbnRlbnNpdHlCb3VuZHMiXT1beS5taW4seS5tYXhdLHYuY29sb3JtYXA9cyh0KX1lbHNlIHQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSx2LnZlcnRleENvbG9ycz1wKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSx2LmNlbGxDb2xvcnM9cCh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3Isdi5tZXNoQ29sb3I9bCh0LmNvbG9yKSk7dGhpcy5tZXNoLnVwZGF0ZSh2KX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTQsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyMywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo2MDR9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfWZ1bmN0aW9uIGModCl7dmFyIGU9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KSk7cmV0dXJuIGUuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD09PWVbMF0ubGVuZ3RofSkpJiZlfWMoWyJ4IiwieSIsInoiXSk/KGMoWyJpIiwiaiIsImsiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKHQpfSkpLGwoImNvbnRvdXIuc2hvdyIpJiYobCgiY29udG91ci5jb2xvciIpLGwoImNvbnRvdXIud2lkdGgiKSksImludGVuc2l0eSJpbiB0PyhsKCJpbnRlbnNpdHkiKSxsKCJpbnRlbnNpdHltb2RlIiksYSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSk6KGUuc2hvd3NjYWxlPSExLCJmYWNlY29sb3IiaW4gdD9sKCJmYWNlY29sb3IiKToidmVydGV4Y29sb3IiaW4gdD9sKCJ2ZXJ0ZXhjb2xvciIpOmwoImNvbG9yIixyKSksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKSxsKCJ4aG92ZXJmb3JtYXQiKSxsKCJ5aG92ZXJmb3JtYXQiKSxsKCJ6aG92ZXJmb3JtYXQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MzcxLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9hdHRyaWJ1dGVzIjo4NjJ9XSw4NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im1lc2gzZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjU5MywiLi9hdHRyaWJ1dGVzIjo4NjIsIi4vY2FsYyI6ODYzLCIuL2NvbnZlcnQiOjg2NCwiLi9kZWZhdWx0cyI6ODY1fV0sODY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPWwuSU5DUkVBU0lORy5DT0xPUix1PWwuREVDUkVBU0lORy5DT0xPUixmPWkubGluZTtmdW5jdGlvbiBoKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGYuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmYud2lkdGgsZGFzaDpvLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17eHBlcmlvZDppLnhwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IikseDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxvcGVuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhpZ2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNsb3NlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e3dpZHRoOm4oe30sZi53aWR0aCx7fSksZGFzaDpuKHt9LG8se30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6aChjKSxkZWNyZWFzaW5nOmgodSksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJsYWJlbDpuKHt9LHMuaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InN0eWxlIn19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjM4MiwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjozOTIsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NDY4LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1uLl8sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGModCxlLHIsbyxsLGMpe2Zvcih2YXIgdT1sLm1ha2VDYWxjZGF0YShlLCJvcGVuIiksZj1sLm1ha2VDYWxjZGF0YShlLCJoaWdoIiksaD1sLm1ha2VDYWxjZGF0YShlLCJsb3ciKSxwPWwubWFrZUNhbGNkYXRhKGUsImNsb3NlIiksZD1BcnJheS5pc0FycmF5KGUudGV4dCksbT1BcnJheS5pc0FycmF5KGUuaG92ZXJ0ZXh0KSxnPSEwLHY9bnVsbCx5PSEhZS54cGVyaW9kYWxpZ25tZW50LHg9W10sYj0wO2I8by5sZW5ndGg7YisrKXt2YXIgXz1vW2JdLHc9dVtiXSxUPWZbYl0saz1oW2JdLEE9cFtiXTtpZihfIT09cyYmdyE9PXMmJlQhPT1zJiZrIT09cyYmQSE9PXMpe0E9PT13P251bGwhPT12JiZBIT09diYmKGc9QT52KTpnPUE+dyx2PUE7dmFyIE09Yyh3LFQsayxBKTtNLnBvcz1fLE0ueWM9KHcrQSkvMixNLmk9YixNLmRpcj1nPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyIsTS54PU0ucG9zLE0ueT1bayxUXSx5JiYoTS5vcmlnX3A9cltiXSksZCYmKE0udHg9ZS50ZXh0W2JdKSxtJiYoTS5odHg9ZS5ob3ZlcnRleHRbYl0pLHgucHVzaChNKX1lbHNlIHgucHVzaCh7cG9zOl8sZW1wdHk6ITB9KX1yZXR1cm4gZS5fZXh0cmVtZXNbbC5faWRdPWEuZmluZEV4dHJlbWVzKGwsbi5jb25jYXQoaCxmKSx7cGFkZGVkOiEwfSkseC5sZW5ndGgmJih4WzBdLnQ9e2xhYmVsczp7b3BlbjppKHQsIm9wZW46IikrIiAiLGhpZ2g6aSh0LCJoaWdoOiIpKyIgIixsb3c6aSh0LCJsb3c6IikrIiAiLGNsb3NlOmkodCwiY2xvc2U6IikrIiAifX0pLHh9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzKSxpPWEuZ2V0RnJvbUlkKHQsZS55YXhpcykscz1mdW5jdGlvbih0LGUscil7dmFyIGk9ci5fbWluRGlmZjtpZighaSl7dmFyIGEscz10Ll9mdWxsRGF0YSxsPVtdO2ZvcihpPTEvMCxhPTA7YTxzLmxlbmd0aDthKyspe3ZhciBjPXNbYV07aWYoIm9obGMiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmYy54YXhpcz09PWUuX2lkKXtsLnB1c2goYyk7dmFyIHU9ZS5tYWtlQ2FsY2RhdGEoYywieCIpO2MuX29yaWdYPXU7dmFyIGY9byhyLGUsIngiLHUpLnZhbHM7Yy5feGNhbGM9Zjt2YXIgaD1uLmRpc3RpbmN0VmFscyhmKS5taW5EaWZmO2gmJmlzRmluaXRlKGgpJiYoaT1NYXRoLm1pbihpLGgpKX19Zm9yKGk9PT0xLzAmJihpPTEpLGE9MDthPGwubGVuZ3RoO2ErKylsW2FdLl9taW5EaWZmPWl9cmV0dXJuIGkqci50aWNrd2lkdGh9KHQscixlKSx1PWUuX21pbkRpZmY7ZS5fbWluRGlmZj1udWxsO3ZhciBmPWUuX29yaWdYO2UuX29yaWdYPW51bGw7dmFyIGg9ZS5feGNhbGM7ZS5feGNhbGM9bnVsbDt2YXIgcD1jKHQsZSxmLGgsaSxsKTtyZXR1cm4gZS5fZXh0cmVtZXNbci5faWRdPWEuZmluZEV4dHJlbWVzKHIsaCx7dnBhZDp1LzJ9KSxwLmxlbmd0aD8obi5leHRlbmRGbGF0KHBbMF0udCx7d0hvdmVyOnUvMix0aWNrTGVuOnN9KSxwKTpbe3Q6e2VtcHR5OiEwfX1dfSxjYWxjQ29tbW9uOmN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDg2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vb2hsY19kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxjLGwpPyhhKHQsZSxsLGMse3g6ITB9KSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJsaW5lLndpZHRoIiksYygibGluZS5kYXNoIikscyh0LGUsYywiaW5jcmVhc2luZyIpLHModCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygidGlja3dpZHRoIiksbC5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuL2F0dHJpYnV0ZXMiOjg2NywiLi9vaGxjX2RlZmF1bHRzIjo4NzJ9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vbGliIikuZmlsbFRleHQsbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPXtpbmNyZWFzaW5nOmwuSU5DUkVBU0lORy5TWU1CT0wsZGVjcmVhc2luZzpsLkRFQ1JFQVNJTkcuU1lNQk9MfTtmdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLHMsbD10LmNkLGM9dC54YSx1PWxbMF0udHJhY2UsZj1sWzBdLnQsaD11LnR5cGUscD0ib2hsYyI9PT1oPyJsIjoibWluIixkPSJvaGxjIj09PWg/ImgiOiJtYXgiLG09Zi5iUG9zfHwwLGc9Zi5iZFBvc3x8Zi50aWNrTGVuLHY9Zi53SG92ZXIseT1NYXRoLm1pbigxLGcvTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiB4KHQpe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcyttLWV9KHQpO3JldHVybiBhLmluYm94KHItdixyK3YsaSl9ZnVuY3Rpb24gYih0KXt2YXIgZT10W3BdLG49dFtkXTtyZXR1cm4gZT09PW58fGEuaW5ib3goZS1yLG4tcixpKX1mdW5jdGlvbiBfKHQpe3JldHVybih4KHQpK2IodCkpLzJ9aT10Lm1heEhvdmVyRGlzdGFuY2UteSxzPXQubWF4U3Bpa2VEaXN0YW5jZS15O3ZhciB3PWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihuLHgsYixfKTtpZihhLmdldENsb3Nlc3QobCx3LHQpLCExPT09dC5pbmRleClyZXR1cm4gbnVsbDt2YXIgVD1sW3QuaW5kZXhdO2lmKFQuZW1wdHkpcmV0dXJuIG51bGw7dmFyIGs9dVtULmRpcl0sQT1rLmxpbmUuY29sb3I7cmV0dXJuIG8ub3BhY2l0eShBKSYmay5saW5lLndpZHRoP3QuY29sb3I9QTp0LmNvbG9yPWsuZmlsbGNvbG9yLHQueDA9Yy5jMnAoVC5wb3MrbS1nLCEwKSx0LngxPWMuYzJwKFQucG9zK20rZywhMCksdC54TGFiZWxWYWw9dm9pZCAwIT09VC5vcmlnX3A/VC5vcmlnX3A6VC5wb3MsdC5zcGlrZURpc3RhbmNlPV8oVCkqcy9pLHQueFNwaWtlPWMuYzJwKFQucG9zLCEwKSx0fWZ1bmN0aW9uIGYodCxlLHIsYSl7dmFyIG89dC5jZCxzPXQueWEsbD1vWzBdLnRyYWNlLGM9b1swXS50LGY9W10saD11KHQsZSxyLGEpO2lmKCFoKXJldHVybltdO3ZhciBwPW9baC5pbmRleF0uaGl8fGwuaG92ZXJpbmZvLGQ9cC5zcGxpdCgiKyIpO2lmKCEoImFsbCI9PT1wfHwtMSE9PWQuaW5kZXhPZigieSIpKSlyZXR1cm5bXTtmb3IodmFyIG09WyJoaWdoIiwib3BlbiIsImNsb3NlIiwibG93Il0sZz17fSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciB5LHg9bVt2XSxiPWxbeF1baC5pbmRleF0sXz1zLmMycChiLCEwKTtiIGluIGc/KHk9Z1tiXSkueUxhYmVsKz0iPGJyPiIrYy5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIsbC55aG92ZXJmb3JtYXQpOigoeT1pLmV4dGVuZEZsYXQoe30saCkpLnkwPXkueTE9Xyx5LnlMYWJlbFZhbD1iLHkueUxhYmVsPWMubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiLGwueWhvdmVyZm9ybWF0KSx5Lm5hbWU9IiIsZi5wdXNoKHkpLGdbYl09eSl9cmV0dXJuIGZ9ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT10LmNkLG89dC55YSxsPWFbMF0udHJhY2UsZj1hWzBdLnQsaD11KHQsZSxyLGkpO2lmKCFoKXJldHVybltdO3ZhciBwPWFbaC5pbmRleF0sZD1oLmluZGV4PXAuaSxtPXAuZGlyO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGYubGFiZWxzW3RdK24uaG92ZXJMYWJlbFRleHQobyxsW3RdW2RdLGwueWhvdmVyZm9ybWF0KX12YXIgdj1wLmhpfHxsLmhvdmVyaW5mbyx5PXYuc3BsaXQoIisiKSx4PSJhbGwiPT09dixiPXh8fC0xIT09eS5pbmRleE9mKCJ5IiksXz14fHwtMSE9PXkuaW5kZXhPZigidGV4dCIpLHc9Yj9bZygib3BlbiIpLGcoImhpZ2giKSxnKCJsb3ciKSxnKCJjbG9zZSIpKyIgICIrY1ttXV06W107cmV0dXJuIF8mJnMocCxsLHcpLGguZXh0cmFUZXh0PXcuam9pbigiPGJyPiIpLGgueTA9aC55MT1vLmMycChwLnljLCEwKSxbaF19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5jZFswXS50cmFjZS5ob3ZlcmxhYmVsLnNwbGl0P2YodCxlLHIsbik6aCh0LGUscixuKX0saG92ZXJTcGxpdDpmLGhvdmVyT25Qb2ludHM6aH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NDY4LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDg3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJvaGxjIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4vYXR0cmlidXRlcyI6ODY3LCIuL2NhbGMiOjg2OCwiLi9kZWZhdWx0cyI6ODY5LCIuL2hvdmVyIjo4NzAsIi4vcGxvdCI6ODczLCIuL3NlbGVjdCI6ODc0LCIuL3N0eWxlIjo4NzV9XSw4NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJvcGVuIiksbD1yKCJoaWdoIiksYz1yKCJsb3ciKSx1PXIoImNsb3NlIik7aWYocigiaG92ZXJsYWJlbC5zcGxpdCIpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCJdLGEpLHMmJmwmJmMmJnUpe3ZhciBmPU1hdGgubWluKHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoLHUubGVuZ3RoKTtyZXR1cm4gbyYmKGY9TWF0aC5taW4oZixpLm1pblJvd0xlbmd0aChvKSkpLGUuX2xlbmd0aD1mLGZ9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcmVnaXN0cnkiOjYzM31dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ZS55YXhpcyxzPWUueGF4aXMsbD0hIXMucmFuZ2VicmVha3M7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBvaGxjIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLGE9ci50O2lmKCEwIT09ci50cmFjZS52aXNpYmxlfHxhLmVtcHR5KWUucmVtb3ZlKCk7ZWxzZXt2YXIgYz1hLnRpY2tMZW4sdT1lLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaS5pZGVudGl0eSk7dS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkpcmV0dXJuIk0wLDBaIjt2YXIgZT1zLmMycCh0LnBvcy1jLCEwKSxyPXMuYzJwKHQucG9zK2MsITApLG49bD8oZStyKS8yOnMuYzJwKHQucG9zLCEwKTtyZXR1cm4iTSIrZSsiLCIrby5jMnAodC5vLCEwKSsiSCIrbisiTSIrbisiLCIrby5jMnAodC5oLCEwKSsiViIrby5jMnAodC5sLCEwKSsiTSIrcisiLCIrby5jMnAodC5jLCEwKSsiSCIrbn0pKX19KSl9fSx7Ii4uLy4uL2xpYiI6NDk4LCJAcGxvdGx5L2QzIjo1OH1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcub2hsY2xheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7by5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksby5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgcj1lW3QuZGlyXS5saW5lO24uc2VsZWN0KHRoaXMpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwoYS5zdHJva2Usci5jb2xvcikuY2FsbChpLmRhc2hMaW5lLHIuZGFzaCxyLndpZHRoKS5zdHlsZSgib3BhY2l0eSIsZS5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSkpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCJAcGxvdGx5L2QzIjo1OH1dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGM9bih7ZWRpdFR5cGU6ImNhbGMifSxvKCJsaW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImhzcGxpbmUiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0se2tleXM6WyJjb3VudCIsInByb2JhYmlsaXR5Il19KX0pO2UuZXhwb3J0cz17ZG9tYWluOmwoe25hbWU6InBhcmNhdHMiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvdmVyaW5mbzpuKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImNvdW50IiwicHJvYmFiaWxpdHkiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0pLGhvdmVyb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNhdGVnb3J5IiwiY29sb3IiLCJkaW1lbnNpb24iXSxkZmx0OiJjYXRlZ29yeSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiLCJjYXRlZ29yeSIsImNhdGVnb3J5Y291bnQiLCJjb2xvcmNvdW50IiwiYmFuZGNvbG9yY291bnQiXX0pLGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJwZW5kaWN1bGFyIiwiZnJlZWZvcm0iLCJmaXhlZCJdLGRmbHQ6InBlcnBlbmRpY3VsYXIiLGVkaXRUeXBlOiJwbG90In0sYnVuZGxlY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc29ydHBhdGhzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwiYmFja3dhcmQiXSxkZmx0OiJmb3J3YXJkIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZToiY2FsYyJ9KSx0aWNrZm9udDphKHtlZGl0VHlwZToiY2FsYyJ9KSxkaW1lbnNpb25zOntfaXNMaW5rZWRUb0FycmF5OiJkaW1lbnNpb24iLGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGRpc3BsYXlpbmRleDp7dmFsVHlwZToiaW50ZWdlciIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyIsdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fSxsaW5lOmMsY291bnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sY3VzdG9tZGF0YTp2b2lkIDAsaG92ZXJsYWJlbDp2b2lkIDAsaWRzOnZvaWQgMCxsZWdlbmRncm91cDp2b2lkIDAsbGVnZW5kcmFuazp2b2lkIDAsb3BhY2l0eTp2b2lkIDAsc2VsZWN0ZWRwb2ludHM6dm9pZCAwLHNob3dsZWdlbmQ6dm9pZCAwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1NzksIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2Mjh9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0icGFyY2F0cyIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSwicGFyY2F0cyIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjYXRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY2F0cyIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjYXRzIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo1ODgsIi4vcGxvdCI6ODgyfV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiB1KHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJue2NhdGVnb3J5SW5kczp0LGNvbG9yOmUscmF3Q29sb3I6cix2YWx1ZUluZHM6W10sY291bnQ6MH19ZnVuY3Rpb24gaCh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwuZmlsdGVyVmlzaWJsZShlLmRpbWVuc2lvbnMpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm5bXTt2YXIgcCxkLG0sZz1yLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU7aWYoInRyYWNlIj09PXQuY2F0ZWdvcnlvcmRlcillPW51bGw7ZWxzZSBpZigiYXJyYXkiPT09dC5jYXRlZ29yeW9yZGVyKWU9dC5jYXRlZ29yeWFycmF5O2Vsc2V7ZT1vKHQudmFsdWVzKTtmb3IodmFyIHI9ITAsbj0wO248ZS5sZW5ndGg7bisrKWlmKCFjKGVbbl0pKXtyPSExO2JyZWFrfWUuc29ydChyP2wuc29ydGVyQXNjOnZvaWQgMCksImNhdGVnb3J5IGRlc2NlbmRpbmciPT09dC5jYXRlZ29yeW9yZGVyJiYoZT1lLnJldmVyc2UoKSl9cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZT1udWxsPT1lP1tdOmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgcj17fSxuPXt9LGk9W107ZS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JbdF09MCxuW3RdPWV9KSk7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvLHM9dFthXTt2b2lkIDA9PT1yW3NdPyhyW3NdPTEsbz1lLnB1c2gocyktMSxuW3NdPW8pOihyW3NdKyssbz1uW3NdKSxpLnB1c2gobyl9dmFyIGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdfSkpO3JldHVybnt1bmlxdWVWYWx1ZXM6ZSx1bmlxdWVDb3VudHM6bCxpbmRzOml9fSh0LnZhbHVlcyxlKX0pKTtwPWwuaXNBcnJheU9yVHlwZWRBcnJheShlLmNvdW50cyk/ZS5jb3VudHM6W2UuY291bnRzXSxmdW5jdGlvbih0KXt2YXIgZTtpZihmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHRbcl08MHx8dFtyXT49dC5sZW5ndGgpcmV0dXJuITE7aWYodm9pZCAwIT09ZVt0W3JdXSlyZXR1cm4hMTtlW3Rbcl1dPSEwfXJldHVybiEwfSh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheWluZGV4fSkpKSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD10W2VdLmRpc3BsYXlpbmRleDtlbHNlIGZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PWV9KHIpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXshZnVuY3Rpb24odCxlKXt0Ll9jYXRlZ29yeWFycmF5PWUudW5pcXVlVmFsdWVzLG51bGw9PT10LnRpY2t0ZXh0fHx2b2lkIDA9PT10LnRpY2t0ZXh0P3QuX3RpY2t0ZXh0PVtdOnQuX3RpY2t0ZXh0PXQudGlja3RleHQuc2xpY2UoKTtmb3IodmFyIHI9dC5fdGlja3RleHQubGVuZ3RoO3I8ZS51bmlxdWVWYWx1ZXMubGVuZ3RoO3IrKyl0Ll90aWNrdGV4dC5wdXNoKGUudW5pcXVlVmFsdWVzW3JdKX0odCxnW2VdKX0pKTt2YXIgdix5PWUubGluZTt5PyhpKGUsImxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSx2PXMudHJ5Q29sb3JzY2FsZSh5KSk6dj1sLmlkZW50aXR5O3ZhciB4LGIsXyx3LFQsaz1yWzBdLnZhbHVlcy5sZW5ndGgsQT17fSxNPWcubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRzfSkpO2ZvcihtPTAseD0wO3g8azt4Kyspe3ZhciBTPVtdO2ZvcihiPTA7YjxNLmxlbmd0aDtiKyspUy5wdXNoKE1bYl1beF0pO2Q9cFt4JXAubGVuZ3RoXSxtKz1kO3ZhciBFPShfPXgsdz12b2lkIDAsVD12b2lkIDAsbC5pc0FycmF5T3JUeXBlZEFycmF5KHkuY29sb3IpP1Q9dz15LmNvbG9yW18leS5jb2xvci5sZW5ndGhdOnc9eS5jb2xvcix7Y29sb3I6dih3KSxyYXdDb2xvcjpUfSksTD1TKyItIitFLnJhd0NvbG9yO3ZvaWQgMD09PUFbTF0mJihBW0xdPWYoUyxFLmNvbG9yLEUucmF3Q29sb3IpKSxoKEFbTF0seCxkKX12YXIgQyxQPXIubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3JldHVybntkaW1lbnNpb25JbmQ6dCxjb250YWluZXJJbmQ6ZSxkaXNwbGF5SW5kOnIsZGltZW5zaW9uTGFiZWw6bixjb3VudDppLGNhdGVnb3JpZXM6W10sZHJhZ1g6bnVsbH19KGUsdC5faW5kZXgsdC5fZGlzcGxheWluZGV4LHQubGFiZWwsbSl9KSk7Zm9yKHg9MDt4PGs7eCsrKWZvcihkPXBbeCVwLmxlbmd0aF0sYj0wO2I8UC5sZW5ndGg7YisrKXt2YXIgST1QW2JdLmNvbnRhaW5lckluZCxPPWdbYl0uaW5kc1t4XSx6PVBbYl0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT16W09dKXt2YXIgRD1lLmRpbWVuc2lvbnNbSV0uX2NhdGVnb3J5YXJyYXlbT10sUj1lLmRpbWVuc2lvbnNbSV0uX3RpY2t0ZXh0W09dO3pbT109e2RpbWVuc2lvbkluZDpiLGNhdGVnb3J5SW5kOkM9TyxjYXRlZ29yeVZhbHVlOkQsZGlzcGxheUluZDpDLGNhdGVnb3J5TGFiZWw6Uix2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX11KHpbT10seCxkKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubGVuZ3RofSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pKTtyZXR1cm57ZGltZW5zaW9uczp0LHBhdGhzOmUsdHJhY2U6dm9pZCAwLG1heENhdHM6bixjb3VudDpyfX0oUCxBLG0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM2OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZmlsdGVyX3VuaXF1ZS5qcyI6NDg5LCIuLi8uLi9saWIvZ3VwIjo0OTUsImZhc3QtaXNudW1lcmljIjoxODV9XSw4Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGYsaCk7byhlLGYsaCksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGgoImhvdmVyb24iKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgiYXJyYW5nZW1lbnQiKSxoKCJidW5kbGVjb2xvcnMiKSxoKCJzb3J0cGF0aHMiKSxoKCJjb3VudHMiKTt2YXIgbT17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJsYWJlbGZvbnQiLG0pO3ZhciBnPXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUvMS4yKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJ0aWNrZm9udCIsZyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6MzcxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6MzcyLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjo4OTMsIi4vYXR0cmlidXRlcyI6ODc2fV0sODgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOntjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBhcmNhdHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6ODc2LCIuL2Jhc2VfcGxvdCI6ODc3LCIuL2NhbGMiOjg3OCwiLi9kZWZhdWx0cyI6ODc5LCIuL3Bsb3QiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoInRpbnljb2xvcjIiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5tYXAoRi5iaW5kKDAsZSxyKSksbz1pLnNlbGVjdEFsbCgiZy5wYXJjYXRzbGF5ZXIiKS5kYXRhKFtudWxsXSk7by5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicGFyY2F0c2xheWVyIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIHU9by5zZWxlY3RBbGwoImcudHJhY2UucGFyY2F0cyIpLmRhdGEoYSxwKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIHBhcmNhdHMiKTt1LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueCx0LnkpfSkpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciB5PXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApO3kuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpO3ZhciB4PXkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Xyh4KSx5LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpLHguZW1wdHkoKXx8eS5zb3J0KG0pLHkuZXhpdCgpLnJlbW92ZSgpLHkub24oIm1vdXNlb3ZlciIsZykub24oIm1vdXNlb3V0Iix2KS5vbigiY2xpY2siLGIpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb25zIik7dmFyIHc9dS5zZWxlY3QoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSkscCk7dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9uIiksdy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngsMCl9KSksdy5leGl0KCkucmVtb3ZlKCk7dmFyIEE9dy5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCksTT1BLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO0EuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksQS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksVChNKTt2YXIgUz1BLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJhbmRzfSkscCk7Uy5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKTt2YXIgRT1TLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYW5kcmVjdCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSkpLGsoRSksUy5leGl0KCkucmVtb3ZlKCksTS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNhdGxhYmVsIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIHo9ZS5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yO0Euc2VsZWN0KCJ0ZXh0LmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZi5tYWtlVGV4dFNoYWRvdyh6KSkuc3R5bGUoImZpbGwiLCJyZ2IoMCwgMCwgMCkiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGQodCk/dC53aWR0aCs1Oi01fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYXRlZ29yeUxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGYuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSkpLE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJkaW1sYWJlbCIpLEEuc2VsZWN0KCJ0ZXh0LmRpbWxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiYXNlbGluZSIpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJldy1yZXNpemUifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkpLmF0dHIoInkiLC01KS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKS5lYWNoKChmdW5jdGlvbih0KXtjLmZvbnQobi5zZWxlY3QodGhpcyksdC5wYXJjYXRzVmlld01vZGVsLmxhYmVsZm9udCl9KSksQS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixMKS5vbigibW91c2VvdXQiLEMpLEEuZXhpdCgpLnJlbW92ZSgpLHcuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkpLm9uKCJkcmFnc3RhcnQiLFApLm9uKCJkcmFnIixJKS5vbigiZHJhZ2VuZCIsTykpLHUuZWFjaCgoZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxyPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2UtMV0ubW9kZWwuZGltZW5zaW9uSW5kO3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZD09PXJ9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0Lm1vZGVsLnJhd0NvbG9yPmUubW9kZWwucmF3Q29sb3I/MTp0Lm1vZGVsLnJhd0NvbG9yPGUubW9kZWwucmF3Q29sb3I/LTE6MH1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXtzLnJhaXNlVG9Ub3AodGhpcyksdyhuLnNlbGVjdCh0aGlzKSk7dmFyIGU9eSh0KSxyPXgodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSl7dmFyIGksYSxsLGM9bi5tb3VzZSh0aGlzKVswXSxmPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixoPXQucGFyY2F0c1ZpZXdNb2RlbC50cmFjZSxwPWYuX2Z1bGxMYXlvdXQsZD1wLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKGw9MDtsPHQubGVmdFhzLmxlbmd0aC0xO2wrKylpZih0LmxlZnRYc1tsXSt0LmRpbVdpZHRoc1tsXS0yPD1jJiZjPD10LmxlZnRYc1tsKzFdKzIpe3ZhciBnPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2xdLHY9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbbCsxXTtpPShnLngrZy53aWR0aCt2LngpLzIsYT0odC50b3BZc1tsXSt0LnRvcFlzW2wrMV0rdC5oZWlnaHQpLzI7YnJlYWt9dmFyIGI9dC5wYXJjYXRzVmlld01vZGVsLngraSxfPXQucGFyY2F0c1ZpZXdNb2RlbC55K2EsVD11Lm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKSxrPXQubW9kZWwuY291bnQsQT1rL3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxNPXtjb3VudExhYmVsOmsscHJvYmFiaWxpdHlMYWJlbDpBLnRvRml4ZWQoMyl9LFM9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmUy5wdXNoKFsiQ291bnQ6IixNLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmUy5wdXNoKFsiUDoiLE0ucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgRT1TLmpvaW4oIjxicj4iKSxMPW4ubW91c2UoZilbMF07by5sb25lSG92ZXIoe3RyYWNlOmgseDpiLWQubGVmdCttLmxlZnQseTpfLWQudG9wK20udG9wLHRleHQ6RSxjb2xvcjp0Lm1vZGVsLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpULGlkZWFsQWxpZ246TDxiPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6KGgubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpNLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjb3VudDprLHByb2JhYmlsaXR5OkF9XX0se2NvbnRhaW5lcjpwLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpwLl9wYXBlci5ub2RlKCksZ2Q6Zn0pfX19ZnVuY3Rpb24gdih0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJihfKG4uc2VsZWN0KHRoaXMpKSxvLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIHkodCl7Zm9yKHZhciBlPVtdLHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLG49MDtuPHQubW9kZWwudmFsdWVJbmRzLmxlbmd0aDtuKyspe3ZhciBpPXQubW9kZWwudmFsdWVJbmRzW25dO2UucHVzaCh7Y3VydmVOdW1iZXI6cixwb2ludE51bWJlcjppfSl9cmV0dXJuIGV9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9e30scj10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sYT1pLmNhdGVnb3JpZXNbdC5tb2RlbC5jYXRlZ29yeUluZHNbbl1dO2VbaS5jb250YWluZXJJbmRdPWEuY2F0ZWdvcnlWYWx1ZX1yZXR1cm4gdm9pZCAwIT09dC5tb2RlbC5yYXdDb2xvciYmKGUuY29sb3I9dC5tb2RlbC5yYXdDb2xvciksZX1mdW5jdGlvbiBiKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pfX1mdW5jdGlvbiBfKHQpe3QuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZSIsImxpZ2h0Z3JheSIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuOCkuYXR0cigic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkpLmF0dHIoInN0cm9rZS13aWR0aCIsLjMpfWZ1bmN0aW9uIFQodCl7dC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24gayh0KXt0LmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZGVsLmNhdGVnb3J5SW5kc1tyXT09PW4mJmUubW9kZWwuY29sb3I9PT10LmNvbG9yfSkpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCksYT1pLmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLG89aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LHM9bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSxsPVtdO3MuZWFjaCgoZnVuY3Rpb24odCl7QSh0KS5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gUyh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1BKGkpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSx2b2lkIDAhPT1pLnJhd0NvbG9yJiYoYy5jb2xvcj1pLnJhd0NvbG9yKSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gRSh0LGUscil7dC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGksYSxvPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxzPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxsPW4uc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKSxjPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bC5kYXR1bSgpLGY9dS5wYXJjYXRzVmlld01vZGVsLGg9Zi5tb2RlbC5kaW1lbnNpb25zW3UubW9kZWwuZGltZW5zaW9uSW5kXSxwPWYudHJhY2UsZD1jLnRvcCtjLmhlaWdodC8yO2YuZGltZW5zaW9ucy5sZW5ndGg+MSYmaC5kaXNwbGF5SW5kPT09Zi5kaW1lbnNpb25zLmxlbmd0aC0xPyhpPWMubGVmdCxhPSJsZWZ0Iik6KGk9Yy5sZWZ0K2Mud2lkdGgsYT0icmlnaHQiKTt2YXIgbT11Lm1vZGVsLmNvdW50LGc9dS5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9bS91LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQseT17Y291bnRMYWJlbDptLGNhdGVnb3J5TGFiZWw6Zyxwcm9iYWJpbGl0eUxhYmVsOnYudG9GaXhlZCgzKX0seD1bXTstMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ4LnB1c2goWyJDb3VudDoiLHkuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZ4LnB1c2goWyJQKCIreS5jYXRlZ29yeUxhYmVsKyIpOiIseS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBiPXguam9pbigiPGJyPiIpO3JldHVybnt0cmFjZTpwLHg6byooaS1lLmxlZnQpLHk6cyooZC1lLnRvcCksdGV4dDpiLGNvbG9yOiJsaWdodGdyYXkiLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEyLGZvbnRDb2xvcjoiYmxhY2siLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOnAuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnksZXZlbnREYXRhOlt7ZGF0YTpwLl9pbnB1dCxmdWxsRGF0YTpwLGNvdW50Om0sY2F0ZWdvcnk6Zyxwcm9iYWJpbGl0eTp2fV19fWZ1bmN0aW9uIEwodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe2lmKG4ubW91c2UodGhpcylbMV08LTEpcmV0dXJuO3ZhciBlLHI9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGk9ci5fZnVsbExheW91dCxhPWkuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uO2lmKCJjb2xvciI9PT1sPyghZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuZGF0dW0oKSxyPUEoZSk7dyhyKSxyLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcj09PWUuY29sb3J9KSkuZWFjaCgoZnVuY3Rpb24oKXtzLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSl9KSl9KHRoaXMpLFModGhpcywicGxvdGx5X2hvdmVyIixuLmV2ZW50KSk6KCFmdW5jdGlvbih0KXtuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCk7dyhlKSxlLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMi41KX0odGhpcyksTSh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJub25lIikpImNhdGVnb3J5Ij09PWw/ZT1FKHIsYSx0aGlzKToiY29sb3IiPT09bD9lPWZ1bmN0aW9uKHQsZSxyKXt0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgaSxhLG89dC5fZnVsbExheW91dC5faW52U2NhbGVYLHM9dC5fZnVsbExheW91dC5faW52U2NhbGVZLGw9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPW4uc2VsZWN0KHIpLmRhdHVtKCksZj1jLmNhdGVnb3J5Vmlld01vZGVsLGg9Zi5wYXJjYXRzVmlld01vZGVsLHA9aC5tb2RlbC5kaW1lbnNpb25zW2YubW9kZWwuZGltZW5zaW9uSW5kXSxkPWgudHJhY2UsbT1sLnkrbC5oZWlnaHQvMjtoLmRpbWVuc2lvbnMubGVuZ3RoPjEmJnAuZGlzcGxheUluZD09PWguZGltZW5zaW9ucy5sZW5ndGgtMT8oaT1sLmxlZnQsYT0ibGVmdCIpOihpPWwubGVmdCtsLndpZHRoLGE9InJpZ2h0Iik7dmFyIGc9Zi5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9Yy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LHk9MDtjLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sb3I9PT1jLmNvbG9yJiYoeSs9dC5jb3VudCl9KSk7dmFyIHg9Zi5tb2RlbC5jb3VudCxiPTA7aC5wYXRoU2VsZWN0aW9uLmVhY2goKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1jLmNvbG9yJiYoYis9dC5tb2RlbC5jb3VudCl9KSk7dmFyIF89eS92LHc9eS9iLFQ9eS94LGs9e2NvdW50TGFiZWw6dixjYXRlZ29yeUxhYmVsOmcscHJvYmFiaWxpdHlMYWJlbDpfLnRvRml4ZWQoMyl9LEE9W107LTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmQS5wdXNoKFsiQ291bnQ6IixrLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmKEEucHVzaCgiUChjb2xvciBcdTIyMjkgIitnKyIpOiAiK2sucHJvYmFiaWxpdHlMYWJlbCksQS5wdXNoKCJQKCIrZysiIHwgY29sb3IpOiAiK3cudG9GaXhlZCgzKSksQS5wdXNoKCJQKGNvbG9yIHwgIitnKyIpOiAiK1QudG9GaXhlZCgzKSkpO3ZhciBNPUEuam9pbigiPGJyPiIpLFM9dS5tb3N0UmVhZGFibGUoYy5jb2xvcixbImJsYWNrIiwid2hpdGUiXSk7cmV0dXJue3RyYWNlOmQseDpvKihpLWUubGVmdCkseTpzKihtLWUudG9wKSx0ZXh0Ok0sY29sb3I6Yy5jb2xvcixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250Q29sb3I6Uyxmb250U2l6ZToxMCxpZGVhbEFsaWduOmEsaG92ZXJ0ZW1wbGF0ZTpkLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczprLGV2ZW50RGF0YTpbe2RhdGE6ZC5faW5wdXQsZnVsbERhdGE6ZCxjYXRlZ29yeTpnLGNvdW50OnYscHJvYmFiaWxpdHk6XyxjYXRlZ29yeWNvdW50OngsY29sb3Jjb3VudDpiLGJhbmRjb2xvcmNvdW50Onl9XX19KHIsYSx0aGlzKToiZGltZW5zaW9uIj09PWwmJihlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1bXTtyZXR1cm4gbi5zZWxlY3Qoci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaCgoZnVuY3Rpb24oKXtpLnB1c2goRSh0LGUsdGhpcykpfSkpLGl9KHIsYSx0aGlzKSksZSYmby5sb25lSG92ZXIoZSx7Y29udGFpbmVyOmkuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmkuX3BhcGVyLm5vZGUoKSxnZDpyfSl9fWZ1bmN0aW9uIEModCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsO2lmKCFlLmRyYWdEaW1lbnNpb24mJihfKGUucGF0aFNlbGVjdGlvbiksVChlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKSksayhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSksby5sb25lVW5ob3ZlcihlLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksZS5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT1lLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSkpeyJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9TKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KTpNKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KX19ZnVuY3Rpb24gUCh0KXsiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLGUubW9kZWwuZHJhZ1k9ZS55LHMucmFpc2VUb1RvcCh0aGlzLnBhcmVudE5vZGUpLG4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpKX0pKSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LG8ubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEkodCl7aWYoImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxmPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09ZiYmcytvLmhlaWdodD5mLnkrZi5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1mLm1vZGVsLmRpc3BsYXlJbmQsZi5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8ImZyZWVmb3JtIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCl7YS5tb2RlbC5kcmFnWD1uLmV2ZW50Lng7dmFyIGg9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbcl0scD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tpXTt2b2lkIDAhPT1oJiZhLm1vZGVsLmRyYWdYPGgueCtoLndpZHRoJiYoYS5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9ZSksdm9pZCAwIT09cCYmYS5tb2RlbC5kcmFnWCthLndpZHRoPnAueCYmKGEubW9kZWwuZGlzcGxheUluZD1wLm1vZGVsLmRpc3BsYXlJbmQscC5tb2RlbC5kaXNwbGF5SW5kPXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpLHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9YS5tb2RlbC5kaXNwbGF5SW5kfWoodC5wYXJjYXRzVmlld01vZGVsKSxOKHQucGFyY2F0c1ZpZXdNb2RlbCksUih0LnBhcmNhdHNWaWV3TW9kZWwpLEQodC5wYXJjYXRzVmlld01vZGVsKX19ZnVuY3Rpb24gTyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigiZm9udC13ZWlnaHQiLCJub3JtYWwiKTt2YXIgZT17fSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxpPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKChmdW5jdGlvbih0LGUpe3JldHVybiB0IT09aVtlXX0pKTtvJiZpLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KSk7dmFyIHM9ITE7aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIGw9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1sW2VdfSkpKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLHU9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSksZj1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlMYWJlbH0pKTtlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlhcnJheSJdPVt1XSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0udGlja3RleHQiXT1bZl0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5b3JkZXIiXT0iYXJyYXkifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikmJiF0LmRyYWdIYXNNb3ZlZCYmdC5wb3RlbnRpYWxDbGlja0JhbmQmJigiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/Uyh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KTpNKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpKSx0Lm1vZGVsLmRyYWdYPW51bGwsbnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl0LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1t0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kXS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF0ubW9kZWwuZHJhZ1k9bnVsbCx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbDt0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPW51bGwsdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249bnVsbCx0LmRyYWdIYXNNb3ZlZD1udWxsLHQucG90ZW50aWFsQ2xpY2tCYW5kPW51bGwsaih0LnBhcmNhdHNWaWV3TW9kZWwpLE4odC5wYXJjYXRzVmlld01vZGVsKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmVhc2UoImN1YmljLWluLW91dCIpLmVhY2goKGZ1bmN0aW9uKCl7Uih0LnBhcmNhdHNWaWV3TW9kZWwsITApLEQodC5wYXJjYXRzVmlld01vZGVsLCEwKX0pKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpeyhvfHxzKSYmYS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KSl9fWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpfWZ1bmN0aW9uIFIodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxwKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodC54LDApfSkpLHIoaSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLGkuc2VsZWN0KCIuZGltbGFiZWwiKS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKSxpLnNlbGVjdCgiLmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT90LndpZHRoKzU6LTV9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscjtkKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KSk7dmFyIGE9aS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30pLHApLG89YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2EuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLGsobyksYS5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbixpPXJbMF0sYT1lLm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxvPWkudHJhY2Uscz1vLmRvbWFpbixsPWUud2lkdGgsYz1lLmhlaWdodCx1PU1hdGguZmxvb3IobCoocy54WzFdLXMueFswXSkpLGY9TWF0aC5mbG9vcihjKihzLnlbMV0tcy55WzBdKSksaD1zLnhbMF0qbCthLmwscD1lLmhlaWdodC1zLnlbMV0qZS5oZWlnaHQrYS50LGQ9by5saW5lLnNoYXBlO249ImFsbCI9PT1vLmhvdmVyaW5mbz9bImNvdW50IiwicHJvYmFiaWxpdHkiXTooby5ob3ZlcmluZm98fCIiKS5zcGxpdCgiKyIpO3ZhciBtPXt0cmFjZTpvLGtleTpvLnVpZCxtb2RlbDppLHg6aCx5OnAsd2lkdGg6dSxoZWlnaHQ6Zixob3Zlcm9uOm8uaG92ZXJvbixob3ZlcmluZm9JdGVtczpuLGFycmFuZ2VtZW50Om8uYXJyYW5nZW1lbnQsYnVuZGxlY29sb3JzOm8uYnVuZGxlY29sb3JzLHNvcnRwYXRoczpvLnNvcnRwYXRocyxsYWJlbGZvbnQ6by5sYWJlbGZvbnQsY2F0ZWdvcnlsYWJlbGZvbnQ6by50aWNrZm9udCxwYXRoU2hhcGU6ZCxkcmFnRGltZW5zaW9uOm51bGwsbWFyZ2luOmEscGF0aHM6W10sZGltZW5zaW9uczpbXSxncmFwaERpdjp0LHRyYWNlU2VsZWN0aW9uOm51bGwscGF0aFNlbGVjdGlvbjpudWxsLGRpbWVuc2lvblNlbGVjdGlvbjpudWxsfTtyZXR1cm4gaS5kaW1lbnNpb25zJiYoaihtKSxOKG0pKSxtfWZ1bmN0aW9uIEIodCxlLHIsbixhKXt2YXIgbyxzLGw9W10sYz1bXTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspbz1pKHJbc10rdFtzXSx0W3MrMV0pLGwucHVzaChvKGEpKSxjLnB1c2gobygxLWEpKTt2YXIgdT0iTSAiK3RbMF0rIiwiK2VbMF07Zm9yKHUrPSJsIityWzBdKyIsMCAiLHM9MTtzPHIubGVuZ3RoO3MrKyl1Kz0iQyIrbFtzLTFdKyIsIitlW3MtMV0rIiAiK2Nbcy0xXSsiLCIrZVtzXSsiICIrdFtzXSsiLCIrZVtzXSx1Kz0ibCIrcltzXSsiLDAgIjtmb3IodSs9ImwwLCIrbisiICIsdSs9ImwgLSIrcltyLmxlbmd0aC0xXSsiLDAgIixzPXIubGVuZ3RoLTI7cz49MDtzLS0pdSs9IkMiK2Nbc10rIiwiKyhlW3MrMV0rbikrIiAiK2xbc10rIiwiKyhlW3NdK24pKyIgIisodFtzXStyW3NdKSsiLCIrKGVbc10rbiksdSs9ImwtIityW3NdKyIsMCAiO3JldHVybiB1Kz0iWiJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmRpbWVuc2lvbnMscj10Lm1vZGVsLG49ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpfSkpLGk9dC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSl9KSksYT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLG89dC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kfSkpLHM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbZV1bdF19KSk7cmV0dXJuIG8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1jLnNvcnQoKGZ1bmN0aW9uKGUscil7dmFyIG49ZihlKSxpPWYocik7cmV0dXJuImJhY2t3YXJkIj09PXQuc29ydHBhdGhzJiYobi5yZXZlcnNlKCksaS5yZXZlcnNlKCkpLG4ucHVzaChlLnZhbHVlSW5kc1swXSksaS5wdXNoKHIudmFsdWVJbmRzWzBdKSx0LmJ1bmRsZWNvbG9ycyYmKG4udW5zaGlmdChlLnJhd0NvbG9yKSxpLnVuc2hpZnQoci5yYXdDb2xvcikpLG48aT8tMTpuPmk/MTowfSkpO2Zvcih2YXIgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBnLHY9Y1ttXTtnPXA+MD9kKih2LmNvdW50L3ApOjA7Zm9yKHZhciB5LHg9bmV3IEFycmF5KG4ubGVuZ3RoKSxiPTA7Yjx2LmNhdGVnb3J5SW5kcy5sZW5ndGg7YisrKXt2YXIgXz12LmNhdGVnb3J5SW5kc1tiXSx3PWlbYl1bX10sVD1hW2JdO3hbVF09bltUXVt3XSxuW1RdW3ddKz1nO3ZhciBrPXQuZGltZW5zaW9uc1tUXS5jYXRlZ29yaWVzW3ddLEE9ay5iYW5kcy5sZW5ndGgsTT1rLmJhbmRzW0EtMV07aWYodm9pZCAwPT09TXx8di5yYXdDb2xvciE9PU0ucmF3Q29sb3Ipe3ZhciBTPXZvaWQgMD09PU0/MDpNLnkrTS5oZWlnaHQ7ay5iYW5kcy5wdXNoKHtrZXk6Uyxjb2xvcjp2LmNvbG9yLHJhd0NvbG9yOnYucmF3Q29sb3IsaGVpZ2h0Omcsd2lkdGg6ay53aWR0aCxjb3VudDp2LmNvdW50LHk6UyxjYXRlZ29yeVZpZXdNb2RlbDprLHBhcmNhdHNWaWV3TW9kZWw6dH0pfWVsc2V7dmFyIEU9ay5iYW5kc1tBLTFdO0UuaGVpZ2h0Kz1nLEUuY291bnQrPXYuY291bnR9fXk9ImhzcGxpbmUiPT09dC5wYXRoU2hhcGU/QihzLHgsbCxnLC41KTpCKHMseCxsLGcsMCksaFttXT17a2V5OnYudmFsdWVJbmRzWzBdLG1vZGVsOnYsaGVpZ2h0OmcsbGVmdFhzOnMsdG9wWXM6eCxkaW1XaWR0aHM6bCxzdmdEOnkscGFyY2F0c1ZpZXdNb2RlbDp0fX10LnBhdGhzPWh9ZnVuY3Rpb24gaih0KXt2YXIgZT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsZGltZW5zaW9uSW5kOnQuZGltZW5zaW9uSW5kfX0pKTtlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSk7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0uZGltZW5zaW9uSW5kLGE9dC5tb2RlbC5kaW1lbnNpb25zW2ldO3IucHVzaChVKHQsYSkpfXQuZGltZW5zaW9ucz1yfWZ1bmN0aW9uIFUodCxlKXt2YXIgcixuPXQubW9kZWwuZGltZW5zaW9ucy5sZW5ndGgsaT1lLmRpc3BsYXlJbmQ7cj00MCsobj4xPyh0LndpZHRoLTgwLTE2KS8obi0xKTowKSppO3ZhciBhLG8scyxsLGMsdT1bXSxmPXQubW9kZWwubWF4Q2F0cyxoPWUuY2F0ZWdvcmllcy5sZW5ndGgscD1lLmNvdW50LGQ9dC5oZWlnaHQtOCooZi0xKSxtPTgqKGYtaCkvMixnPWUuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pKTtmb3IoZy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLGM9MDtjPGg7YysrKWw9Z1tjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTptLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sbT1tK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2gocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjUzNSwiQHBsb3RseS9kMyI6NTgsImQzLWludGVycG9sYXRlIjoxMTEsdGlueWNvbG9yMjozMDd9XSw4ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wYXJjYXRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLl9wYXBlcixzPWEuX3NpemU7bih0LG8sZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHIsaSl9fSx7Ii4vcGFyY2F0cyI6ODgxfV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOm8oe25hbWU6InBhcmNvb3JkcyIsdHJhY2U6ITAsZWRpdFR5cGU6InBsb3QifSksbGFiZWxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGxhYmVsc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZWZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QifSksZGltZW5zaW9uczpsKCJkaW1lbnNpb24iLHtsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRpY2t2YWxzOnMoe30saS50aWNrdmFscyx7ZWRpdFR5cGU6InBsb3QifSksdGlja3RleHQ6cyh7fSxpLnRpY2t0ZXh0LHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9ybWF0OnMoe30saS50aWNrZm9ybWF0LHtlZGl0VHlwZToicGxvdCJ9KSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOnMoe2VkaXRUeXBlOiJjYWxjIn0sbigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiQHBsb3RseS9kMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLmtleUZ1bixvPXQoIi4uLy4uL2xpYi9ndXAiKS5yZXBlYXQscz10KCIuLi8uLi9saWIiKS5zb3J0ZXJBc2MsbD10KCIuLi8uLi9saWIiKS5zdHJUcmFuc2xhdGUsYz1uLmJhci5zbmFwUmF0aW87ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0KigxLWMpK2UqY312YXIgZj1uLmJhci5zbmFwQ2xvc2U7ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0KigxLWYpK2UqZn1mdW5jdGlvbiBwKHQsZSxyLG4pe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYodD49ZVtyXVswXSYmdDw9ZVtyXVsxXSlyZXR1cm4hMDtyZXR1cm4hMX0ocixuKSlyZXR1cm4gcjt2YXIgaT10Py0xOjEsYT0wLG89ZS5sZW5ndGgtMTtpZihpPDApe3ZhciBzPWE7YT1vLG89c31mb3IodmFyIGw9ZVthXSxjPWwsZj1hO2kqZjxpKm87Zis9aSl7dmFyIHA9ZitpLGQ9ZVtwXTtpZihpKnI8aSpoKGwsZCkpcmV0dXJuIHUobCxjKTtpZihpKnI8aSpkfHxwPT09bylyZXR1cm4gdShkLGwpO2M9bCxsPWR9fWZ1bmN0aW9uIGQodCl7dC5hdHRyKCJ4Iiwtbi5iYXIuY2FwdHVyZVdpZHRoLzIpLmF0dHIoIndpZHRoIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIG0odCl7dC5hdHRyKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLmF0dHIoImZpbGwiLCJ5ZWxsb3ciKS5hdHRyKCJvcGFjaXR5IiwwKX1mdW5jdGlvbiBnKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm4iMCwiK3QuaGVpZ2h0O2Zvcih2YXIgZSxyLG4saT12KHQuYnJ1c2guZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLHQuaGVpZ2h0KSxhPVswXSxvPWkubGVuZ3RoP2lbMF1bMF06bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspcj0oZT1pW3NdKVsxXS1lWzBdLGEucHVzaChvKSxhLnB1c2gociksKG49cysxKTxpLmxlbmd0aCYmKG89aVtuXVswXS1lWzFdKTtyZXR1cm4gYS5wdXNoKHQuaGVpZ2h0KSxhfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsdCplKX0pKS5zb3J0KHMpfSkpfWZ1bmN0aW9uIHkoKXtpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZSgiY3Vyc29yIixudWxsKX1mdW5jdGlvbiB4KHQpe3QuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsZyl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWkuc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhpZ2hsaWdodCwgLmhpZ2hsaWdodC1zaGFkb3ciKTt4KGU/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24obi5iYXIuc25hcER1cmF0aW9uKS5lYWNoKCJlbmQiLGUpOnIpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcixpPXQuYnJ1c2gsYT1OYU4sbz17fTtpZihpLmZpbHRlclNwZWNpZmllZCl7dmFyIHM9dC5oZWlnaHQsbD1pLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSxjPXYobCxzKSx1PU5hTixmPU5hTixoPU5hTjtmb3Iocj0wO3I8PWMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtpZihwJiZwWzBdPD1lJiZlPD1wWzFdKXt1PXI7YnJlYWt9aWYoZj1yP3ItMTpOYU4scCYmcFswXT5lKXtoPXI7YnJlYWt9fWlmKGE9dSxpc05hTihhKSYmKGE9aXNOYU4oZil8fGlzTmFOKGgpP2lzTmFOKGYpP2g6ZjplLWNbZl1bMV08Y1toXVswXS1lP2Y6aCksIWlzTmFOKGEpKXt2YXIgZD1jW2FdLG09ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmJhci5oYW5kbGVIZWlnaHQ7aWYoIShlPnRbMV0rcnx8ZTx0WzBdLXIpKXJldHVybiBlPj0uOSp0WzFdKy4xKnRbMF0/Im4iOmU8PS45KnRbMF0rLjEqdFsxXT8icyI6Im5zIn0oZCxlKTttJiYoby5pbnRlcnZhbD1sW2FdLG8uaW50ZXJ2YWxQaXg9ZCxvLnJlZ2lvbj1tKX19aWYodC5vcmRpbmFsJiYhby5yZWdpb24pe3ZhciBnPXQudW5pdFRpY2t2YWxzLHk9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyl7dmFyIHg9Wy4yNSpnW01hdGgubWF4KHItMSwwKV0rLjc1Kmdbcl0sLjI1KmdbTWF0aC5taW4ocisxLGcubGVuZ3RoLTEpXSsuNzUqZ1tyXV07aWYoeT49eFswXSYmeTw9eFsxXSl7by5jbGlja2FibGVPcmRpbmFsUmFuZ2U9eDticmVha319fXJldHVybiBvfWZ1bmN0aW9uIHcodCxlKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPWUuaGVpZ2h0LWkubW91c2UodClbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxhPWUuYnJ1c2guc3ZnQnJ1c2g7YS53YXNEcmFnZ2VkPSEwLGEuX2RyYWdnaW5nPSEwLGEuZ3JhYmJpbmdCYXI/YS5uZXdFeHRlbnQ9W3ItYS5ncmFiUG9pbnQscithLmJhckxlbmd0aC1hLmdyYWJQb2ludF0ubWFwKGUudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTphLm5ld0V4dGVudD1bYS5zdGFydEV4dGVudCxlLnVuaXRUb1BhZGRlZFB4LmludmVydChyKV0uc29ydChzKSxlLmJydXNoLmZpbHRlclNwZWNpZmllZD0hMCxhLmV4dGVudD1hLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KFthLm5ld0V4dGVudF0pLGEuYnJ1c2hDYWxsYmFjayhlKSxiKHQucGFyZW50Tm9kZSl9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPV8oZSxlLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLGE9ImNyb3NzaGFpciI7ci5jbGlja2FibGVPcmRpbmFsUmFuZ2U/YT0icG9pbnRlciI6ci5yZWdpb24mJihhPXIucmVnaW9uKyItcmVzaXplIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsYSl9ZnVuY3Rpb24gayh0KXt0Lm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXtpLmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5wYXJlbnQuaW5CcnVzaERyYWd8fFQodGhpcyx0KX0pKS5vbigibW91c2VsZWF2ZSIsKGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx5KCl9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsYT1lLnVuaXRUb1BhZGRlZFB4LmludmVydChyKSxvPWUuYnJ1c2gscz1fKGUsciksbD1zLmludGVydmFsLGM9by5zdmdCcnVzaDtpZihjLndhc0RyYWdnZWQ9ITEsYy5ncmFiYmluZ0Jhcj0ibnMiPT09cy5yZWdpb24sYy5ncmFiYmluZ0Jhcil7dmFyIHU9bC5tYXAoZS51bml0VG9QYWRkZWRQeCk7Yy5ncmFiUG9pbnQ9ci11WzBdLW4udmVydGljYWxQYWRkaW5nLGMuYmFyTGVuZ3RoPXVbMV0tdVswXX1jLmNsaWNrYWJsZU9yZGluYWxSYW5nZT1zLmNsaWNrYWJsZU9yZGluYWxSYW5nZSxjLnN0YXlpbmdJbnRlcnZhbHM9ZS5tdWx0aXNlbGVjdCYmby5maWx0ZXJTcGVjaWZpZWQ/by5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCk6W10sbCYmKGMuc3RheWluZ0ludGVydmFscz1jLnN0YXlpbmdJbnRlcnZhbHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXSE9PWxbMF0mJnRbMV0hPT1sWzFdfSkpKSxjLnN0YXJ0RXh0ZW50PXMucmVnaW9uP2xbInMiPT09cy5yZWdpb24/MTowXTphLGUucGFyZW50LmluQnJ1c2hEcmFnPSEwLGMuYnJ1c2hTdGFydENhbGxiYWNrKCl9KHRoaXMsdCl9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt3KHRoaXMsdCl9KSkub24oImRyYWdlbmQiLChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJydXNoLG49ci5maWx0ZXIsYT1yLnN2Z0JydXNoO2EuX2RyYWdnaW5nfHwoVCh0LGUpLHcodCxlKSxlLmJydXNoLnN2Z0JydXNoLndhc0RyYWdnZWQ9ITEpLGEuX2RyYWdnaW5nPSExLGkuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIG89YS5ncmFiYmluZ0JhcjtpZihhLmdyYWJiaW5nQmFyPSExLGEuZ3JhYkxvY2F0aW9uPXZvaWQgMCxlLnBhcmVudC5pbkJydXNoRHJhZz0hMSx5KCksIWEud2FzRHJhZ2dlZClyZXR1cm4gYS53YXNEcmFnZ2VkPXZvaWQgMCxhLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9yLmZpbHRlclNwZWNpZmllZCYmZS5tdWx0aXNlbGVjdD9hLmV4dGVudC5wdXNoKGEuY2xpY2thYmxlT3JkaW5hbFJhbmdlKTooYS5leHRlbnQ9W2EuY2xpY2thYmxlT3JkaW5hbFJhbmdlXSxyLmZpbHRlclNwZWNpZmllZD0hMCk6bz8oYS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLDA9PT1hLmV4dGVudC5sZW5ndGgmJk0ocikpOk0ociksYS5icnVzaENhbGxiYWNrKGUpLGIodC5wYXJlbnROb2RlKSx2b2lkIGEuYnJ1c2hFbmRDYWxsYmFjayhyLmZpbHRlclNwZWNpZmllZD9uLmdldENvbnNvbGlkYXRlZCgpOltdKTt2YXIgcz1mdW5jdGlvbigpe24uc2V0KG4uZ2V0Q29uc29saWRhdGVkKCkpfTtpZihlLm9yZGluYWwpe3ZhciBsPWUudW5pdFRpY2t2YWxzO2xbbC5sZW5ndGgtMV08bFswXSYmbC5yZXZlcnNlKCksYS5uZXdFeHRlbnQ9W3AoMCxsLGEubmV3RXh0ZW50WzBdLGEuc3RheWluZ0ludGVydmFscykscCgxLGwsYS5uZXdFeHRlbnRbMV0sYS5zdGF5aW5nSW50ZXJ2YWxzKV07dmFyIGM9YS5uZXdFeHRlbnRbMV0+YS5uZXdFeHRlbnRbMF07YS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChjP1thLm5ld0V4dGVudF06W10pLGEuZXh0ZW50Lmxlbmd0aHx8TShyKSxhLmJydXNoQ2FsbGJhY2soZSksYz9iKHQucGFyZW50Tm9kZSxzKToocygpLGIodC5wYXJlbnROb2RlKSl9ZWxzZSBzKCk7YS5icnVzaEVuZENhbGxiYWNrKHIuZmlsdGVyU3BlY2lmaWVkP24uZ2V0Q29uc29saWRhdGVkKCk6W10pfSh0aGlzLHQpfSkpKX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBNKHQpe3QuZmlsdGVyU3BlY2lmaWVkPSExLHQuc3ZnQnJ1c2guZXh0ZW50PVtbLTEvMCwxLzBdXX1mdW5jdGlvbiBTKHQpe2Zvcih2YXIgZSxyPXQuc2xpY2UoKSxuPVtdLGk9ci5zaGlmdCgpO2k7KXtmb3IoZT1pLnNsaWNlKCk7KGk9ci5zaGlmdCgpKSYmaVswXTw9ZVsxXTspZVsxXT1NYXRoLm1heChlWzFdLGlbMV0pO24ucHVzaChlKX1yZXR1cm4gMT09PW4ubGVuZ3RoJiZuWzBdWzBdPm5bMF1bMV0mJihuPVtdKSxufWUuZXhwb3J0cz17bWFrZUJydXNoOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24obil7MT09PShyPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQocyl9KSkuc29ydChBKSkubGVuZ3RoJiZyWzBdWzBdPT09LTEvMCYmclswXVsxXT09PTEvMCYmKHI9W1swLC0xXV0pLHQ9UyhyKSxlPXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybltNYXRoLm1pbih0WzBdLGVbMF0pLE1hdGgubWF4KHRbMV0sZVsxXSldfSksWzEvMCwtMS8wXSl9LGdldDpmdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LGdldENvbnNvbGlkYXRlZDpmdW5jdGlvbigpe3JldHVybiB0fSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX19fSgpO3JldHVybiBsLnNldChyKSx7ZmlsdGVyOmwsZmlsdGVyU3BlY2lmaWVkOmUsc3ZnQnJ1c2g6e2V4dGVudDpbXSxicnVzaFN0YXJ0Q2FsbGJhY2s6bixicnVzaENhbGxiYWNrOihvPWksZnVuY3Rpb24odCl7dmFyIGU9dC5icnVzaCxyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0JydXNoLmV4dGVudC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSl9KGUpLnNsaWNlKCk7ZS5maWx0ZXIuc2V0KHIpLG8oKX0pLGJydXNoRW5kQ2FsbGJhY2s6YX19fSxlbnN1cmVBeGlzQnJ1c2g6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNlbGVjdEFsbCgiLiIrbi5jbi5heGlzQnJ1c2gpLmRhdGEobyxhKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmF4aXNCcnVzaCwhMCksZnVuY3Rpb24odCxlKXt2YXIgcj10LnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKG8pO3IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuY2FsbChkKS5jYWxsKG0pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoMCxuLnZlcnRpY2FsUGFkZGluZykpLHIuY2FsbChrKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KSk7dmFyIGk9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQtc2hhZG93IikuZGF0YShvKTtpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiaGlnaGxpZ2h0LXNoYWRvdyIsITApLmF0dHIoIngiLC1uLmJhci53aWR0aC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uYmFyLndpZHRoK24uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKCJzdHJva2UiLGUpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLnN0cm9rZU9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLGkuYXR0cigieTEiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkuY2FsbCh4KTt2YXIgYT10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodCIpLmRhdGEobyk7YS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodCIsITApLmF0dHIoIngiLC1uLmJhci53aWR0aC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uYmFyLndpZHRoLW4uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKCJzdHJva2UiLG4uYmFyLmZpbGxDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuZmlsbE9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLGEuYXR0cigieTEiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkuY2FsbCh4KX0ocixlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3J0KHMpfSkpLHQ9ZS5tdWx0aXNlbGVjdD9TKHQuc29ydChBKSk6W3RbMF1dKTp0PVt0LnNvcnQocyldLGUudGlja3ZhbHMpe3ZhciByPWUudGlja3ZhbHMuc2xpY2UoKS5zb3J0KHMpO2lmKCEodD10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9W3AoMCxyLHRbMF0sW10pLHAoMSxyLHRbMV0sW10pXTtpZihlWzFdPmVbMF0pcmV0dXJuIGV9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSkubGVuZ3RoKXJldHVybn1yZXR1cm4gdC5sZW5ndGg+MT90OnRbMF19fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2d1cCI6NDk1LCIuL2NvbnN0YW50cyI6ODg4LCJAcGxvdGx5L2QzIjo1OH1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY29vcmRzIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiLCJub0hvdmVyIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo4ODMsIi4vYmFzZV9wbG90Ijo4ODYsIi4vY2FsYyI6ODg3LCIuL2RlZmF1bHRzIjo4ODl9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXQoIi4vcGxvdCIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9InBhcmNvb3JkcyIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPWkodC5jYWxjZGF0YSwicGFyY29vcmRzIilbMF07ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY29vcmRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY29vcmRzIik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMiKS5yZW1vdmUoKSxuLl9nbGltYWdlcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIik7ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkpLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLHg6MCx5OjAsd2lkdGg6dGhpcy5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5zdHlsZS5oZWlnaHR9KX0pKSx3aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXtuLnNlbGVjdEFsbCgiI2ZpbHRlckJhclBhdHRlcm4iKS5hdHRyKCJpZCIsImZpbHRlckJhclBhdHRlcm4iKX0pLDYwKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjQ3NSwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU4OCwiLi9wbG90Ijo4OTUsIkBwbG90bHkvZDMiOjU4fV0sODg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG87cmV0dXJuIGkuaGFzQ29sb3JzY2FsZShlLCJsaW5lIikmJm4oZS5saW5lLmNvbG9yKT8ocj1lLmxpbmUuY29sb3Isbz1pLmV4dHJhY3RPcHRzKGUubGluZSkuY29sb3JzY2FsZSxpLmNhbGModCxlLHt2YWxzOnIsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pKToocj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksbz1bWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXSksYSh7bGluZUNvbG9yOnIsY3NjYWxlOm99KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ3VwIjo0OTV9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxsYXllcnM6WyJjb250ZXh0TGluZUxheWVyIiwiZm9jdXNMaW5lTGF5ZXIiLCJwaWNrTGluZUxheWVyIl0sYXhpc1RpdGxlT2Zmc2V0OjI4LGF4aXNFeHRlbnRPZmZzZXQ6MTAsZGVzZWxlY3RlZExpbmVDb2xvcjoiIzc3NyIsYmFyOnt3aWR0aDo0LGNhcHR1cmVXaWR0aDoxMCxmaWxsQ29sb3I6Im1hZ2VudGEiLGZpbGxPcGFjaXR5OjEsc25hcER1cmF0aW9uOjE1MCxzbmFwUmF0aW86LjI1LHNuYXBDbG9zZTouMDEsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OiJheGlzLWV4dGVudC10ZXh0IixwYXJjb29yZHNMaW5lTGF5ZXJzOiJwYXJjb29yZHMtbGluZS1sYXllcnMiLHBhcmNvb3Jkc0xpbmVMYXllcjoicGFyY29vcmRzLWxpbmVzIixwYXJjb29yZHM6InBhcmNvb3JkcyIscGFyY29vcmRzQ29udHJvbFZpZXc6InBhcmNvb3Jkcy1jb250cm9sLXZpZXciLHlBeGlzOiJ5LWF4aXMiLGF4aXNPdmVybGF5czoiYXhpcy1vdmVybGF5cyIsYXhpczoiYXhpcyIsYXhpc0hlYWRpbmc6ImF4aXMtaGVhZGluZyIsYXhpc1RpdGxlOiJheGlzLXRpdGxlIixheGlzRXh0ZW50OiJheGlzLWV4dGVudCIsYXhpc0V4dGVudFRvcDoiYXhpcy1leHRlbnQtdG9wIixheGlzRXh0ZW50VG9wVGV4dDoiYXhpcy1leHRlbnQtdG9wLXRleHQiLGF4aXNFeHRlbnRCb3R0b206ImF4aXMtZXh0ZW50LWJvdHRvbSIsYXhpc0V4dGVudEJvdHRvbVRleHQ6ImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0IixheGlzQnJ1c2g6ImF4aXMtYnJ1c2gifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjoiZmlsdGVyLWJhci1wYXR0ZXJuIn19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4vYXR0cmlidXRlcyIpLHU9dCgiLi9heGlzYnJ1c2giKSxmPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQsaD10KCIuL21lcmdlX2xlbmd0aCIpO2Z1bmN0aW9uIHAodCxlLHIsaSl7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYy5kaW1lbnNpb25zLHIsaSl9dmFyIG89YSgidmFsdWVzIikscz1hKCJ2aXNpYmxlIik7aWYobyYmby5sZW5ndGh8fChzPWUudmlzaWJsZT0hMSkscyl7YSgibGFiZWwiKSxhKCJ0aWNrdmFscyIpLGEoInRpY2t0ZXh0IiksYSgidGlja2Zvcm1hdCIpO3ZhciBmPWEoInJhbmdlIik7ZS5fYXg9e19pZDoieSIsdHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIiLHJhbmdlOmZ9LGwuc2V0Q29udmVydChlLl9heCxpLmxheW91dCksYSgibXVsdGlzZWxlY3QiKTt2YXIgaD1hKCJjb25zdHJhaW50cmFuZ2UiKTtoJiYoZS5jb25zdHJhaW50cmFuZ2U9dS5jbGVhblJhbmdlcyhoLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+ZiYmKG4ubG9nKCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gIitmKyIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50IiksZC5zcGxpY2UoZikpO3ZhciBtPXModCxlLHtuYW1lOiJkaW1lbnNpb25zIixsYXlvdXQ6bCxoYW5kbGVJdGVtRGVmYXVsdHM6cH0pLGc9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKCJsaW5lLmNvbG9yIixyKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGwsdSk7byhlLGwsdSksQXJyYXkuaXNBcnJheShtKSYmbS5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxtLCJ2YWx1ZXMiLGcpO3ZhciB2PXtmYW1pbHk6bC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQobC5mb250LnNpemUvMS4yKSxjb2xvcjpsLmZvbnQuY29sb3J9O24uY29lcmNlRm9udCh1LCJsYWJlbGZvbnQiLHYpLG4uY29lcmNlRm9udCh1LCJ0aWNrZm9udCIsdiksbi5jb2VyY2VGb250KHUsInJhbmdlZm9udCIsdiksdSgibGFiZWxhbmdsZSIpLHUoImxhYmVsc2lkZSIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi8uLi9wbG90cy9kb21haW4iOjU3OSwiLi9hdHRyaWJ1dGVzIjo4ODMsIi4vYXhpc2JydXNoIjo4ODQsIi4vY29uc3RhbnRzIjo4ODgsIi4vbWVyZ2VfbGVuZ3RoIjo4OTN9XSw4OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNUeXBlZEFycmF5O3IuY29udmVydFR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk6dH0sci5pc09yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuISF0LnRpY2t2YWxzfSxyLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlfHwhKCJ2aXNpYmxlImluIHQpfX0seyIuLi8uLi9saWIiOjQ5OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2Jhc2VfaW5kZXgiKTtuLnBsb3Q9dCgiLi9wbG90IiksZS5leHBvcnRzPW59LHsiLi9iYXNlX2luZGV4Ijo4ODUsIi4vcGxvdCI6ODk1fV0sODkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5hdHRyaWJ1dGUgdmVjNCBwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYsXG4gICAgICAgICAgICAgICBwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIsXG4gICAgICAgICAgICAgICBwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgsXG4gICAgICAgICAgICAgICBwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBjb2xvcnM7XG5cbnVuaWZvcm0gbWF0NCBkaW0wQSwgZGltMUEsIGRpbTBCLCBkaW0xQiwgZGltMEMsIGRpbTFDLCBkaW0wRCwgZGltMUQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLCB2aWV3Qm94UG9zLCB2aWV3Qm94U2l6ZTtcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcbnVuaWZvcm0gZmxvYXQgZHJ3TGF5ZXI7IC8vIDA6IGNvbnRleHQsIDE6IGZvY3VzLCAyOiBwaWNrXG51bmlmb3JtIHZlYzQgY29udGV4dENvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFza1RleHR1cmUsIHBhbGV0dGU7XG5cbmJvb2wgaXNQaWNrICAgID0gKGRyd0xheWVyID4gMS41KTtcbmJvb2wgaXNDb250ZXh0ID0gKGRyd0xheWVyIDwgMC41KTtcblxuY29uc3QgdmVjNCBaRVJPUyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbmNvbnN0IHZlYzQgVU5JVFMgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiBVTklUUywgVU5JVFMpO1xufVxuXG5mbG9hdCBheGlzWShmbG9hdCByYXRpbywgbWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgZmxvYXQgeTEgPSB2YWwoQSwgZGltMEEpICsgdmFsKEIsIGRpbTBCKSArIHZhbChDLCBkaW0wQykgKyB2YWwoRCwgZGltMEQpO1xuICAgIGZsb2F0IHkyID0gdmFsKEEsIGRpbTFBKSArIHZhbChCLCBkaW0xQikgKyB2YWwoQywgZGltMUMpICsgdmFsKEQsIGRpbTFEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0gcmF0aW8pICsgeTIgKiByYXRpbztcbn1cblxuaW50IGlNb2QoaW50IGEsIGludCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiICogKGEgLyBiKTtcbn1cblxuYm9vbCBmT3V0c2lkZShmbG9hdCBwLCBmbG9hdCBsbywgZmxvYXQgaGkpIHtcbiAgICByZXR1cm4gKGxvIDwgaGkpICYmIChsbyA+IHAgfHwgcCA+IGhpKTtcbn1cblxuYm9vbCB2T3V0c2lkZSh2ZWM0IHAsIHZlYzQgbG8sIHZlYzQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBmT3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBtT3V0c2lkZShtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB2T3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBvdXRzaWRlQm91bmRpbmdCb3gobWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgcmV0dXJuIG1PdXRzaWRlKEEsIGxvQSwgaGlBKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShCLCBsb0IsIGhpQikgfHxcbiAgICAgICAgICAgbU91dHNpZGUoQywgbG9DLCBoaUMpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEQsIGxvRCwgaGlEKTtcbn1cblxuYm9vbCBvdXRzaWRlUmFzdGVyTWFzayhtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBtYXQ0IHBudHNbNF07XG4gICAgcG50c1swXSA9IEE7XG4gICAgcG50c1sxXSA9IEI7XG4gICAgcG50c1syXSA9IEM7XG4gICAgcG50c1szXSA9IEQ7XG5cbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyArK2opIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyArK2spIHtcbiAgICAgICAgICAgICAgICBpZigwID09IGlNb2QoXG4gICAgICAgICAgICAgICAgICAgIGludCgyNTUuMCAqIHRleHR1cmUyRChtYXNrVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KGkgKiAyICsgaiAvIDIpICsgMC41KSAvIDguMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG50c1tpXVtqXVtrXSAqIChtYXNrSGVpZ2h0IC0gMS4wKSArIDEuMCkgLyBtYXNrSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICApKVszXVxuICAgICAgICAgICAgICAgICAgICApIC8gaW50KHBvdygyLjAsIGZsb2F0KGlNb2QoaiAqIDQgKyBrLCA4KSkpKSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmVjNCBwb3NpdGlvbihib29sIGlzQ29udGV4dCwgZmxvYXQgdiwgbWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ24odikgKyAwLjU7XG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIEEsIEIsIEMsIEQpO1xuICAgIGZsb2F0IHogPSAxLjAgLSBhYnModik7XG5cbiAgICB6ICs9IGlzQ29udGV4dCA/IDAuMCA6IDIuMCAqIGZsb2F0KFxuICAgICAgICBvdXRzaWRlQm91bmRpbmdCb3goQSwgQiwgQywgRCkgfHxcbiAgICAgICAgb3V0c2lkZVJhc3Rlck1hc2soQSwgQiwgQywgRClcbiAgICApO1xuXG4gICAgcmV0dXJuIHZlYzQoXG4gICAgICAgIDIuMCAqICh2ZWMyKHgsIHkpICogdmlld0JveFNpemUgKyB2aWV3Qm94UG9zKSAvIHJlc29sdXRpb24gLSAxLjAsXG4gICAgICAgIHosXG4gICAgICAgIDEuMFxuICAgICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICBtYXQ0IEEgPSBtYXQ0KHAwMV8wNCwgcDA1XzA4LCBwMDlfMTIsIHAxM18xNik7XG4gICAgbWF0NCBCID0gbWF0NChwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIpO1xuICAgIG1hdDQgQyA9IG1hdDQocDMzXzM2LCBwMzdfNDAsIHA0MV80NCwgcDQ1XzQ4KTtcbiAgICBtYXQ0IEQgPSBtYXQ0KHA0OV81MiwgcDUzXzU2LCBwNTdfNjAsIFpFUk9TKTtcblxuICAgIGZsb2F0IHYgPSBjb2xvcnNbM107XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKGlzQ29udGV4dCwgdiwgQSwgQiwgQywgRCk7XG5cbiAgICBmcmFnQ29sb3IgPVxuICAgICAgICBpc0NvbnRleHQgPyB2ZWM0KGNvbnRleHRDb2xvcikgOlxuICAgICAgICBpc1BpY2sgPyB2ZWM0KGNvbG9ycy5yZ2IsIDEuMCkgOiB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMihhYnModiksIDAuNSkpO1xufVxuIl0pLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksbz10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LHM9dCgiLi4vLi4vbGliIiksbD1uZXcgVWludDhBcnJheSg0KSxjPW5ldyBVaW50OEFycmF5KDQpLHU9e3NoYXBlOlsyNTYsMV0sZm9ybWF0OiJyZ2JhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QifTtmdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvPWEua2V5O3IuZHJhd0NvbXBsZXRlZHx8KCFmdW5jdGlvbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmx9KX0odCksci5kcmF3Q29tcGxldGVkPSEwKSxmdW5jdGlvbiBzKGwpe3ZhciBjPU1hdGgubWluKG4saS1sKm4pOzA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLGYodCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoYS5jb3VudD0yKmMsYS5vZmZzZXQ9MipsKm4sZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3MobCsxKX0pKSksci5kcmF3Q29tcGxldGVkPSExKX0oMCl9ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoMjU2KSxuPTA7bjwyNTY7bisrKXJbbl09dChuLzI1NSkuY29uY2F0KGUpO3JldHVybiByfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBtKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KDgqZSksaT0wLGE9MDthPGU7YSsrKWZvcih2YXIgbz0wO288MjtvKyspZm9yKHZhciBzPTA7czw0O3MrKyl7dmFyIGw9NCp0K3MsYz1yWzY0KmErbF07NjM9PT1sJiYwPT09byYmKGMqPS0xKSxuW2krK109Y31yZXR1cm4gbn1mdW5jdGlvbiBnKHQpe3ZhciBlPSIwIit0O3JldHVybiBlLnN1YnN0cihlLmxlbmd0aC0yKX1mdW5jdGlvbiB2KHQpe3JldHVybiB0PG8/InAiK2codCsxKSsiXyIrZyh0KzQpOiJjb2xvcnMifWZ1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxsLGMsdSxmLGgscCxkKXtmb3IodmFyIG09W1tdLFtdXSxnPTA7Zzw2NDtnKyspbVswXVtnXT1nPT09aT8xOjAsbVsxXVtnXT1nPT09YT8xOjA7byo9ZCxsKj1kLGMqPWQsdSo9ZDt2YXIgdj10LmxpbmVzLmNhbnZhc092ZXJkcmFnKmQseT10LmRvbWFpbix4PXQuY2FudmFzV2lkdGgqZCxiPXQuY2FudmFzSGVpZ2h0KmQsXz10LnBhZC5sKmQsdz10LnBhZC5iKmQsVD10LmxheW91dEhlaWdodCpkLGs9dC5sYXlvdXRXaWR0aCpkLEE9dC5kZXNlbGVjdGVkTGluZXMuY29sb3I7cmV0dXJuIHMuZXh0ZW5kRmxhdCh7a2V5OmYscmVzb2x1dGlvbjpbeCxiXSx2aWV3Qm94UG9zOltvK3YsbF0sdmlld0JveFNpemU6W2MsdV0saTA6aSxpMTphLGRpbTBBOm1bMF0uc2xpY2UoMCwxNiksZGltMEI6bVswXS5zbGljZSgxNiwzMiksZGltMEM6bVswXS5zbGljZSgzMiw0OCksZGltMEQ6bVswXS5zbGljZSg0OCw2NCksZGltMUE6bVsxXS5zbGljZSgwLDE2KSxkaW0xQjptWzFdLnNsaWNlKDE2LDMyKSxkaW0xQzptWzFdLnNsaWNlKDMyLDQ4KSxkaW0xRDptWzFdLnNsaWNlKDQ4LDY0KSxkcndMYXllcjpoLGNvbnRleHRDb2xvcjpbQVswXS8yNTUsQVsxXS8yNTUsQVsyXS8yNTUsQVszXTwxP0FbM106TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS90LmxpbmVzLmNvbG9yLmxlbmd0aCwxLzMpKV0sc2Npc3Nvclg6KG49PT1lPzA6byt2KSsoXy12KStrKnkueFswXSxzY2lzc29yV2lkdGg6KG49PT1yP3gtbyt2OmMrLjUpKyhuPT09ZT9vK3Y6MCksc2Npc3Nvclk6bCt3K1QqeS55WzBdLHNjaXNzb3JIZWlnaHQ6dSx2aWV3cG9ydFg6Xy12K2sqeS54WzBdLHZpZXdwb3J0WTp3K1QqeS55WzBdLHZpZXdwb3J0V2lkdGg6eCx2aWV3cG9ydEhlaWdodDpifSxwKX1mdW5jdGlvbiB4KHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcigyMDQ3KnRbMF0pLDApLHI9TWF0aC5taW4oMjA0NyxNYXRoLmNlaWwoMjA0Nyp0WzFdKSwyMDQ3KTtyZXR1cm5bTWF0aC5taW4oZSxyKSxNYXRoLm1heChlLHIpXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGwsZyxiLF89ZS5jb250ZXh0LHc9ZS5waWNrLFQ9ZS5yZWdsLGs9VC5fZ2wsQT1rLmdldFBhcmFtZXRlcihrLkFMSUFTRURfTElORV9XSURUSF9SQU5HRSksTT1NYXRoLm1heChBWzBdLE1hdGgubWluKEFbMV0sZS52aWV3TW9kZWwucGxvdEdsUGl4ZWxSYXRpbykpLFM9e2N1cnJlbnRSYWZzOnt9LGRyYXdDb21wbGV0ZWQ6ITAsY2xlYXJPbmx5OiExfSxFPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPTA7cjw9bztyKz00KWVbdihyKV09dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShUKSxMPVQudGV4dHVyZSh1KSxDPVtdO0koZSk7dmFyIFA9VCh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOl8sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6MSxkc3RBbHBoYToxfSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IV8sbWFzazohMCxmdW5jOiJsZXNzIixyYW5nZTpbMCwxXX0sY3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4OlQucHJvcCgic2Npc3NvclgiKSx5OlQucHJvcCgic2Npc3NvclkiKSx3aWR0aDpULnByb3AoInNjaXNzb3JXaWR0aCIpLGhlaWdodDpULnByb3AoInNjaXNzb3JIZWlnaHQiKX19LHZpZXdwb3J0Ont4OlQucHJvcCgidmlld3BvcnRYIikseTpULnByb3AoInZpZXdwb3J0WSIpLHdpZHRoOlQucHJvcCgidmlld3BvcnRXaWR0aCIpLGhlaWdodDpULnByb3AoInZpZXdwb3J0SGVpZ2h0Iil9LGRpdGhlcjohMSx2ZXJ0OmksZnJhZzphLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDpNLGF0dHJpYnV0ZXM6RSx1bmlmb3Jtczp7cmVzb2x1dGlvbjpULnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zOlQucHJvcCgidmlld0JveFBvcyIpLHZpZXdCb3hTaXplOlQucHJvcCgidmlld0JveFNpemUiKSxkaW0wQTpULnByb3AoImRpbTBBIiksZGltMUE6VC5wcm9wKCJkaW0xQSIpLGRpbTBCOlQucHJvcCgiZGltMEIiKSxkaW0xQjpULnByb3AoImRpbTFCIiksZGltMEM6VC5wcm9wKCJkaW0wQyIpLGRpbTFDOlQucHJvcCgiZGltMUMiKSxkaW0wRDpULnByb3AoImRpbTBEIiksZGltMUQ6VC5wcm9wKCJkaW0xRCIpLGxvQTpULnByb3AoImxvQSIpLGhpQTpULnByb3AoImhpQSIpLGxvQjpULnByb3AoImxvQiIpLGhpQjpULnByb3AoImhpQiIpLGxvQzpULnByb3AoImxvQyIpLGhpQzpULnByb3AoImhpQyIpLGxvRDpULnByb3AoImxvRCIpLGhpRDpULnByb3AoImhpRCIpLHBhbGV0dGU6TCxjb250ZXh0Q29sb3I6VC5wcm9wKCJjb250ZXh0Q29sb3IiKSxtYXNrVGV4dHVyZTpULnByb3AoIm1hc2tUZXh0dXJlIiksZHJ3TGF5ZXI6VC5wcm9wKCJkcndMYXllciIpLG1hc2tIZWlnaHQ6VC5wcm9wKCJtYXNrSGVpZ2h0Iil9LG9mZnNldDpULnByb3AoIm9mZnNldCIpLGNvdW50OlQucHJvcCgiY291bnQiKX0pO2Z1bmN0aW9uIEkodCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwsbD1uLmRpbWVuc2lvbnMuc2xpY2UoKSxnPWxbMF0/bFswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxpPXc/ZS5jb2xvci5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KSk6ZS5jb2xvcixhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1uZXcgQXJyYXkodCoobys0KSksYT0wLHM9MDtzPHQ7cysrKXtmb3IodmFyIGw9MDtsPG87bCsrKWlbYSsrXT1sPGUubGVuZ3RoP2VbbF0ucGFkZGVkVW5pdFZhbHVlc1tzXTouNTtpW2ErK109ZChzLDIpLGlbYSsrXT1kKHMsMSksaVthKytdPWQocywwKSxpW2ErK109KG49cltzXSxNYXRoLm1heCgxZS02LE1hdGgubWluKC45OTk5OTksbikpKX1yZXR1cm4gaX0oZyxsLGkpOyFmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjw9bztuKz00KXRbdihuKV0obShuLzQsZSxyKSl9KEUsZyxhKSxffHx3fHwoTD1ULnRleHR1cmUocy5leHRlbmRGbGF0KHtkYXRhOnAoci51bml0VG9Db2xvciwyNTUpfSx1KSkpfXJldHVybntyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzPXQubGVuZ3RoLGM9MS8wLHU9LTEvMDtmb3IoaT0wO2k8cztpKyspdFtpXS5kaW0wLmNhbnZhc1g8YyYmKGM9dFtpXS5kaW0wLmNhbnZhc1gsYT1pKSx0W2ldLmRpbTEuY2FudmFzWD51JiYodT10W2ldLmRpbTEuY2FudmFzWCxvPWkpOzA9PT1zJiZmKFQsMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBwPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtbXSxbXV07Zm9yKG49MDtuPDY0O24rKyl7dmFyIGE9IXQmJm48bC5sZW5ndGg/bFtuXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKCk6Wy0xLzAsMS8wXTtpWzBdW25dPWFbMF0saVsxXVtuXT1hWzFdfXZhciBvPW5ldyBBcnJheSgxNjM4NCk7Zm9yKGU9MDtlPDE2Mzg0O2UrKylvW2VdPTI1NTtpZighdClmb3IoZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgcz1lJTgsYz0oZS1zKS84LHU9TWF0aC5wb3coMixzKSxmPWxbZV0uYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoZi5sZW5ndGg8Mikpe3ZhciBoPXgoZlswXSlbMV07Zm9yKHI9MTtyPGYubGVuZ3RoO3IrKyl7dmFyIHA9eChmW3JdKTtmb3Iobj1oKzE7bjxwWzBdO24rKylvWzgqbitjXSY9fnU7aD1NYXRoLm1heChoLHBbMV0pfX19dmFyIGQ9e3NoYXBlOls4LDIwNDhdLGZvcm1hdDoiYWxwaGEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCIsZGF0YTpvfTtyZXR1cm4gYj9iKGQpOmI9VC50ZXh0dXJlKGQpLHttYXNrVGV4dHVyZTpiLG1hc2tIZWlnaHQ6MjA0OCxsb0E6aVswXS5zbGljZSgwLDE2KSxsb0I6aVswXS5zbGljZSgxNiwzMiksbG9DOmlbMF0uc2xpY2UoMzIsNDgpLGxvRDppWzBdLnNsaWNlKDQ4LDY0KSxoaUE6aVsxXS5zbGljZSgwLDE2KSxoaUI6aVsxXS5zbGljZSgxNiwzMiksaGlDOmlbMV0uc2xpY2UoMzIsNDgpLGhpRDppWzFdLnNsaWNlKDQ4LDY0KX19KF8pO2ZvcihpPTA7aTxzO2krKyl7dmFyIGQ9dFtpXSxtPWQuZGltMC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHY9ZC5kaW0xLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaz1kLmNhbnZhc1gsQT1kLmNhbnZhc1ksTT1rK2QucGFuZWxTaXplWCxFPWQucGxvdEdsUGl4ZWxSYXRpbztpZihlfHwhQ1ttXXx8Q1ttXVswXSE9PWt8fENbbV1bMV0hPT1NKXtDW21dPVtrLE1dO3ZhciBMPXkocixhLG8saSxtLHYsayxBLGQucGFuZWxTaXplWCxkLnBhbmVsU2l6ZVksZC5kaW0wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsXz8wOnc/MjoxLHAsRSk7Uy5jbGVhck9ubHk9bjt2YXIgST1lP3IubGluZXMuYmxvY2tMaW5lQ291bnQ6ZztoKFQsUCxTLEksZyxMKX19fSxyZWFkUGl4ZWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVC5yZWFkKHt4OnQseTplLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTpjfSksY30scmVhZFBpeGVsczpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgVWludDhBcnJheSg0KnIqbik7cmV0dXJuIFQucmVhZCh7eDp0LHk6ZSx3aWR0aDpyLGhlaWdodDpuLGRhdGE6aX0pLGl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsTC5kZXN0cm95KCksYiYmYi5kZXN0cm95KCksRSlFW2VdLmRlc3Ryb3koKX0sdXBkYXRlOkl9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi9jb25zdGFudHMiOjg4OCxnbHNsaWZ5OjIyMn1dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtmb3Iobnx8KG49MS8wKSxpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKG49TWF0aC5taW4obixhW3JdLmxlbmd0aCkpO2ZvcihuPT09MS8wJiYobj0wKSx0Ll9sZW5ndGg9bixpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKGEuX2xlbmd0aD1uKTtyZXR1cm4gbn19LHt9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoImNvbG9yLXJnYmEiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD1pLnN0clJvdGF0ZSxjPWkuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHA9dCgiLi4vLi4vbGliL2d1cCIpLGQ9cC5rZXlGdW4sbT1wLnJlcGVhdCxnPXAudW53cmFwLHY9dCgiLi9oZWxwZXJzIikseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi9heGlzYnJ1c2giKSxiPXQoIi4vbGluZXMiKTtmdW5jdGlvbiBfKHQsZSxyKXtyZXR1cm4gaS5hZ2dOdW1zKHQsbnVsbCxlLHIpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gayhfKE1hdGgubWluLHQsZSksXyhNYXRoLm1heCx0LGUpKX1mdW5jdGlvbiBUKHQpe3ZhciBlPXQucmFuZ2U7cmV0dXJuIGU/ayhlWzBdLGVbMV0pOncodC52YWx1ZXMsdC5fbGVuZ3RoKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIWlzTmFOKHQpJiZpc0Zpbml0ZSh0KXx8KHQ9MCksIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksdD09PWUmJigwPT09dD8odC09MSxlKz0xKToodCo9LjksZSo9MS4xKSksW3QsZV19ZnVuY3Rpb24gQSh0LGUscixpLG8pe3ZhciBzLGwsYz1UKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgocz1hKHIudGlja2Zvcm1hdCksbD1vLGw/ZnVuY3Rpb24odCxlKXt2YXIgcj1sW2VdO3JldHVybiBudWxsPT1yP3ModCk6cn06cykpKS5yYW5nZShpLm1hcCgoZnVuY3Rpb24ocil7dmFyIG49KHItY1swXSkvKGNbMV0tY1swXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSkpOm4uc2NhbGUubGluZWFyKCkuZG9tYWluKGMpLnJhbmdlKFt0LWUsZV0pfWZ1bmN0aW9uIE0odCl7aWYodC50aWNrdmFscyl7dmFyIGU9VCh0KTtyZXR1cm4gbi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKHQudGlja3ZhbHMpLnJhbmdlKHQudGlja3ZhbHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1lWzBdKS8oZVsxXS1lWzBdKX0pKSl9fWZ1bmN0aW9uIFModCl7dmFyIGU9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHI9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPW8odFsxXSk7cmV0dXJuIG4ucmdiKCJyZ2IoIitlWzBdKyIsIitlWzFdKyIsIitlWzJdKyIpIil9KSksaT0icmdiIi5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpfX1mdW5jdGlvbiBFKHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkfSkpfWZ1bmN0aW9uIEwodCxlLHIpe3ZhciBhPWcoZSkscz1hLnRyYWNlLGw9di5jb252ZXJ0VHlwZWRBcnJheShhLmxpbmVDb2xvciksYz1zLmxpbmUsdT17Y29sb3I6byh5LmRlc2VsZWN0ZWRMaW5lQ29sb3IpfSxmPWguZXh0cmFjdE9wdHMoYykscD1mLnJldmVyc2VzY2FsZT9oLmZsaXBTY2FsZShhLmNzY2FsZSk6YS5jc2NhbGUsZD1zLmRvbWFpbixtPXMuZGltZW5zaW9ucyx4PXQud2lkdGgsYj1zLmxhYmVsYW5nbGUsXz1zLmxhYmVsc2lkZSx3PXMubGFiZWxmb250LGs9cy50aWNrZm9udCxBPXMucmFuZ2Vmb250LE09aS5leHRlbmREZWVwTm9BcnJheXMoe30sYyx7Y29sb3I6bC5tYXAobi5zY2FsZS5saW5lYXIoKS5kb21haW4oVCh7dmFsdWVzOmwscmFuZ2U6W2YubWluLGYubWF4XSxfbGVuZ3RoOnMuX2xlbmd0aH0pKSksYmxvY2tMaW5lQ291bnQ6eS5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzp5Lm92ZXJkcmFnKnkuY2FudmFzUGl4ZWxSYXRpb30pLEU9TWF0aC5mbG9vcih4KihkLnhbMV0tZC54WzBdKSksTD1NYXRoLmZsb29yKHQuaGVpZ2h0KihkLnlbMV0tZC55WzBdKSksQz10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxQPUUsST1MO3JldHVybntrZXk6cixjb2xDb3VudDptLmZpbHRlcih2LmlzVmlzaWJsZSkubGVuZ3RoLGRpbWVuc2lvbnM6bSx0aWNrRGlzdGFuY2U6eS50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6UyhwKSxsaW5lczpNLGRlc2VsZWN0ZWRMaW5lczp1LGxhYmVsQW5nbGU6YixsYWJlbFNpZGU6XyxsYWJlbEZvbnQ6dyx0aWNrRm9udDprLHJhbmdlRm9udDpBLGxheW91dFdpZHRoOngsbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpkLHRyYW5zbGF0ZVg6ZC54WzBdKngsdHJhbnNsYXRlWTp0LmhlaWdodC1kLnlbMV0qdC5oZWlnaHQscGFkOkMsY2FudmFzV2lkdGg6UCp5LmNhbnZhc1BpeGVsUmF0aW8rMipNLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpJKnkuY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpQLGhlaWdodDpJLGNhbnZhc1BpeGVsUmF0aW86eS5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbz1yLndpZHRoLHM9ci5oZWlnaHQsbD1yLmRpbWVuc2lvbnMsYz1yLmNhbnZhc1BpeGVsUmF0aW8sdT1mdW5jdGlvbih0KXtyZXR1cm4gbyp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sZj15LnZlcnRpY2FsUGFkZGluZy9zLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0ocyx5LnZlcnRpY2FsUGFkZGluZykscD17a2V5OnIua2V5LHhTY2FsZTp1LG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LGQ9e307cmV0dXJuIHAuZGltZW5zaW9ucz1sLmZpbHRlcih2LmlzVmlzaWJsZSkubWFwKChmdW5jdGlvbihvLGwpe3ZhciBtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuZG9tYWluKFQodCkpLnJhbmdlKFtlLDEtZV0pfShvLGYpLGc9ZFtvLmxhYmVsXTtkW28ubGFiZWxdPShnfHwwKSsxO3ZhciBiPW8ubGFiZWwrKGc/Il9fIitnOiIiKSxfPW8uY29uc3RyYWludHJhbmdlLHc9XyYmXy5sZW5ndGg7dyYmIUFycmF5LmlzQXJyYXkoX1swXSkmJihfPVtfXSk7dmFyIGs9dz9fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKG0pfSkpOltbLTEvMCwxLzBdXSxTPW8udmFsdWVzO1MubGVuZ3RoPm8uX2xlbmd0aCYmKFM9Uy5zbGljZSgwLG8uX2xlbmd0aCkpO3ZhciBMLEM9by50aWNrdmFscztmdW5jdGlvbiBQKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6TFtlXX19ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KEMpJiZDLmxlbmd0aCl7TD1vLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoTCkmJkwubGVuZ3RoP0wubGVuZ3RoPkMubGVuZ3RoP0w9TC5zbGljZSgwLEMubGVuZ3RoKTpDLmxlbmd0aD5MLmxlbmd0aCYmKEM9Qy5zbGljZSgwLEwubGVuZ3RoKSk6TD1DLm1hcChhKG8udGlja2Zvcm1hdCkpO2Zvcih2YXIgTz0xO088Qy5sZW5ndGg7TysrKWlmKENbT108Q1tPLTFdKXtmb3IodmFyIHo9Qy5tYXAoUCkuc29ydChJKSxEPTA7RDxDLmxlbmd0aDtEKyspQ1tEXT16W0RdLnZhbCxMW0RdPXpbRF0udGV4dDticmVha319ZWxzZSBDPXZvaWQgMDtyZXR1cm4gUz12LmNvbnZlcnRUeXBlZEFycmF5KFMpLHtrZXk6YixsYWJlbDpvLmxhYmVsLHRpY2tGb3JtYXQ6by50aWNrZm9ybWF0LHRpY2t2YWxzOkMsdGlja3RleHQ6TCxvcmRpbmFsOnYuaXNPcmRpbmFsKG8pLG11bHRpc2VsZWN0Om8ubXVsdGlzZWxlY3QseEluZGV4OmwsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpsLHZpc2libGVJbmRleDpvLl9pbmRleCxoZWlnaHQ6cyx2YWx1ZXM6UyxwYWRkZWRVbml0VmFsdWVzOlMubWFwKG0pLHVuaXRUaWNrdmFsczpDJiZDLm1hcChtKSx4U2NhbGU6dSx4OnUobCksY2FudmFzWDp1KGwpKmMsdW5pdFRvUGFkZGVkUHg6aCxkb21haW5TY2FsZTpBKHMseS52ZXJ0aWNhbFBhZGRpbmcsbyxDLEwpLG9yZGluYWxTY2FsZTpNKG8pLHBhcmVudDpwLG1vZGVsOnIsYnJ1c2g6eC5tYWtlQnJ1c2godCx3LGssKGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1wO2UuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscywhMCk7dmFyIHI9RShlKTshdC5jb250ZXh0U2hvd24oKSYmcj8oZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCksdC5jb250ZXh0U2hvd24oITApKTp0LmNvbnRleHRTaG93bigpJiYhciYmKGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITAsITApLHQuY29udGV4dFNob3duKCExKSl9KSwoZnVuY3Rpb24ocil7aWYocC5mb2N1c0xheWVyLnJlbmRlcihwLnBhbmVscywhMCkscC5waWNrTGF5ZXImJnAucGlja0xheWVyLnJlbmRlcihwLnBhbmVscywhMCksdC5saW5lUGlja0FjdGl2ZSghMCksZSYmZS5maWx0ZXJDaGFuZ2VkKXt2YXIgbj1tLmludmVydCxhPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobikuc29ydChpLnNvcnRlckFzYyl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpO2UuZmlsdGVyQ2hhbmdlZChwLmtleSxvLl9pbmRleCxhKX19KSl9fSkpLHB9ZnVuY3Rpb24gUCh0KXt0LmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VGV4dCwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpfWZ1bmN0aW9uIEkodCxlKXt2YXIgcj0idG9wIj09PWU/MTotMSxuPXQqTWF0aC5QSS8xODA7cmV0dXJue2RpcjpyLGR4Ok1hdGguc2luKG4pLGR5Ok1hdGguY29zKG4pLGRlZ3JlZXM6dH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLGk9dC5kYXRhKCksYT0wO2E8aS5sZW5ndGgtMTthKyspe3ZhciBvPW5bYV18fChuW2FdPXt9KSxzPWlbYV0sbD1pW2ErMV07by5kaW0wPXMsby5kaW0xPWwsby5jYW52YXNYPXMuY2FudmFzWCxvLnBhbmVsU2l6ZVg9bC5jYW52YXNYLXMuY2FudmFzWCxvLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsby55PTAsby5jYW52YXNZPTAsby5wbG90R2xQaXhlbFJhdGlvPXJ9fWZ1bmN0aW9uIHoodCxlKXtyZXR1cm4gcy50aWNrVGV4dCh0Ll9heCxlLCExKS50ZXh0fWZ1bmN0aW9uIEQodCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuIiI7dmFyIHI9dC5kb21haW5TY2FsZS5kb21haW4oKSxuPXJbZT9yLmxlbmd0aC0xOjBdO3JldHVybiB6KHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sbil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsaD1vLl90b3BwYXBlcixwPW8uX2dsY29udGFpbmVyLF89dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLFQ9dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoO3IrKylmb3IodmFyIG49dFtlXVtyXS50cmFjZSxpPW4uZGltZW5zaW9ucyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0udmFsdWVzLGw9aVthXS5fYXg7bCYmKGwucmFuZ2U/bC5yYW5nZT1rKGwucmFuZ2VbMF0sbC5yYW5nZVsxXSk6bC5yYW5nZT13KG8sbi5fbGVuZ3RoKSxsLmR0aWNrfHwobC5kdGljaz0uMDEqKE1hdGguYWJzKGwucmFuZ2VbMV0tbC5yYW5nZVswXSl8fDEpKSxsLnRpY2tmb3JtYXQ9aVthXS50aWNrZm9ybWF0LHMuY2FsY1RpY2tzKGwpLGwuY2xlYW5SYW5nZSgpKX19KGUpO3ZhciBBLE0sUz0oQT0hMCxNPSExLHtsaW5lUGlja0FjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9BPSEhdDpBfSxjb250ZXh0U2hvd246ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/TT0hIXQ6TX19KSxSPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChMLmJpbmQoMCxyKSkubWFwKEMuYmluZCgwLFMsYSkpO3AuZWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5leHRlbmRGbGF0KHQsUltlXSl9KSk7dmFyIEY9cC5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKChmdW5jdGlvbih0KXt0LnZpZXdNb2RlbD1SWzBdLHQudmlld01vZGVsLnBsb3RHbFBpeGVsUmF0aW89Xyx0LnZpZXdNb2RlbC5wYXBlckNvbG9yPVQsdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSkpLEI9bnVsbDtGLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe2lmKFMubGluZVBpY2tBY3RpdmUoKSYmdC5saW5lTGF5ZXImJmEmJmEuaG92ZXIpe3ZhciBlPW4uZXZlbnQscj10aGlzLndpZHRoLGk9dGhpcy5oZWlnaHQsbz1uLm1vdXNlKHRoaXMpLHM9b1swXSxsPW9bMV07aWYoczwwfHxsPDB8fHM+PXJ8fGw+PWkpcmV0dXJuO3ZhciBjPXQubGluZUxheWVyLnJlYWRQaXhlbChzLGktMS1sKSx1PTAhPT1jWzNdLGY9dT9jWzJdKzI1NiooY1sxXSsyNTYqY1swXSk6bnVsbCxoPXt4OnMseTpsLGNsaWVudFg6ZS5jbGllbnRYLGNsaWVudFk6ZS5jbGllbnRZLGRhdGFJbmRleDp0Lm1vZGVsLmtleSxjdXJ2ZU51bWJlcjpmfTtmIT09QiYmKHU/YS5ob3ZlcihoKTphLnVuaG92ZXImJmEudW5ob3ZlcihoKSxCPWYpfX0pKSxGLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucGljaz8wOjF9KSksaC5zdHlsZSgiYmFja2dyb3VuZCIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTt2YXIgTj1oLnNlbGVjdEFsbCgiLiIreS5jbi5wYXJjb29yZHMpLmRhdGEoUixkKTtOLmV4aXQoKS5yZW1vdmUoKSxOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLnBhcmNvb3JkcywhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0Lm1vZGVsLnRyYW5zbGF0ZVgsdC5tb2RlbC50cmFuc2xhdGVZKX0pKTt2YXIgaj1OLnNlbGVjdEFsbCgiLiIreS5jbi5wYXJjb29yZHNDb250cm9sVmlldykuZGF0YShtLGQpO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLGouYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC5tb2RlbC5wYWQubCx0Lm1vZGVsLnBhZC50KX0pKTt2YXIgVT1qLnNlbGVjdEFsbCgiLiIreS5jbi55QXhpcykuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLGQpO1UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ueUF4aXMsITApLGouZWFjaCgoZnVuY3Rpb24odCl7TyhVLHQsXyl9KSksRi5lYWNoKChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxhP3QubGluZUxheWVyPWIodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxhO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSkpLFUuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54U2NhbGUodC54SW5kZXgpLDApfSkpLFUuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7Uy5saW5lUGlja0FjdGl2ZSghMSksdC54PU1hdGgubWF4KC15Lm92ZXJkcmFnLE1hdGgubWluKHQubW9kZWwud2lkdGgreS5vdmVyZHJhZyxuLmV2ZW50LngpKSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxVLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KSkuZWFjaCgoZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZS54SW5kZXgpLGUuY2FudmFzWD1lLngqZS5tb2RlbC5jYW52YXNQaXhlbFJhdGlvfSkpLE8oVSxlLF8pLFUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixjKHQueCwwKSksVS5lYWNoKChmdW5jdGlvbihyLG4saSl7aT09PXQucGFyZW50LmtleSYmKGUuZGltZW5zaW9uc1tuXT1yKX0pKSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFFKGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sTyhVLGUsXyksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54LDApfSkpLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIUUoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksUy5saW5lUGlja0FjdGl2ZSghMCksYSYmYS5heGVzTW92ZWQmJmEuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXh9KSkpfSkpKSxVLmV4aXQoKS5yZW1vdmUoKTt2YXIgVj1VLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzT3ZlcmxheXMpLmRhdGEobSxkKTtWLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNPdmVybGF5cywhMCksVi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpcykucmVtb3ZlKCk7dmFyIEg9Vi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpcykuZGF0YShtLGQpO0guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpcywhMCksSC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLmhlaWdodC90Lm1vZGVsLnRpY2tEaXN0YW5jZSxyPXQuZG9tYWluU2NhbGUsaT1yLmRvbWFpbigpO24uc2VsZWN0KHRoaXMpLmNhbGwobi5zdmcuYXhpcygpLm9yaWVudCgibGVmdCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP2k6bnVsbCkudGlja0Zvcm1hdCgoZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNPcmRpbmFsKHQpP2U6eih0Lm1vZGVsLmRpbWVuc2lvbnNbdC52aXNpYmxlSW5kZXhdLGUpfSkpLnNjYWxlKHIpKSxmLmZvbnQoSC5zZWxlY3RBbGwoInRleHQiKSx0Lm1vZGVsLnRpY2tGb250KX0pKSxILnNlbGVjdEFsbCgiLmRvbWFpbiwgLnRpY2s+bGluZSIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjI1KS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSxILnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsdS5tYWtlVGV4dFNoYWRvdyhUKSkuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKTt2YXIgcT1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzSGVhZGluZykuZGF0YShtLGQpO3EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc0hlYWRpbmcsITApO3ZhciBHPXEuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNUaXRsZSkuZGF0YShtLGQpO0cuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHkuY24uYXhpc1RpdGxlLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksRy50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtmLmZvbnQocixlLm1vZGVsLmxhYmVsRm9udCksdS5jb252ZXJ0VG9Uc3BhbnMocix0KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1JKHQubW9kZWwubGFiZWxBbmdsZSx0Lm1vZGVsLmxhYmVsU2lkZSkscj15LmF4aXNUaXRsZU9mZnNldDtyZXR1cm4oZS5kaXI+MD8iIjpjKDAsMipyK3QubW9kZWwuaGVpZ2h0KSkrbChlLmRlZ3JlZXMpK2MoLXIqZS5keCwtciplLmR5KX0pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3ZhciBlPUkodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKTtyZXR1cm4gMipNYXRoLmFicyhlLmR4KT5NYXRoLmFicyhlLmR5KT9lLmRpciplLmR4PDA/InN0YXJ0IjoiZW5kIjoibWlkZGxlIn0pKTt2YXIgWT1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50KS5kYXRhKG0sZCk7WS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50LCEwKTt2YXIgVz1ZLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKG0sZCk7Vy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VG9wLCEwKSxXLmF0dHIoInRyYW5zZm9ybSIsYygwLC15LmF4aXNFeHRlbnRPZmZzZXQpKTt2YXIgWD1XLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50VG9wVGV4dCkuZGF0YShtLGQpO1guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHkuY24uYXhpc0V4dGVudFRvcFRleHQsITApLmNhbGwoUCksWC50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gRCh0LCEwKX0pKS5lYWNoKChmdW5jdGlvbih0KXtmLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSkpO3ZhciBaPVkuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEobSxkKTtaLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRCb3R0b20sITApLFouYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGMoMCx0Lm1vZGVsLmhlaWdodCt5LmF4aXNFeHRlbnRPZmZzZXQpfSkpO3ZhciBKPVouc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0KS5kYXRhKG0sZCk7Si5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCwhMCkuYXR0cigiZHkiLCIwLjc1ZW0iKS5jYWxsKFApLEoudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIEQodCwhMSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7Zi5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pKSx4LmVuc3VyZUF4aXNCcnVzaChWLFQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ3VwIjo0OTUsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2F4aXNicnVzaCI6ODg0LCIuL2NvbnN0YW50cyI6ODg4LCIuL2hlbHBlcnMiOjg5MCwiLi9saW5lcyI6ODkyLCJAcGxvdGx5L2QzIjo1OCwiY29sb3ItcmdiYSI6ODZ9XSw4OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wYXJjb29yZHMiKSxpPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxhPXQoIi4vaGVscGVycyIpLmlzVmlzaWJsZSxvPXt9O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX0oZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZihpKHQsW10sbykpe3ZhciBsPXt9LGM9e30sdT17fSxmPXt9LGg9ci5fc2l6ZTtlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTt1W3JdPW4uaW5kZXg7dmFyIGk9ZltyXT1uLl9mdWxsSW5wdXQuaW5kZXg7bFtyXT10LmRhdGFbaV0uZGltZW5zaW9ucyxjW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLnNsaWNlKCl9KSk7bih0LGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4saSl7dmFyIGE9Y1tlXVtuXSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHM9ImRpbWVuc2lvbnNbIituKyJdLmNvbnN0cmFpbnRyYW5nZSIsbD1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVt1W2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09bFtzXSl7dmFyIGg9YS5jb25zdHJhaW50cmFuZ2U7bFtzXT1ofHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW3VbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFtkLFtmW2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV9ob3ZlciIsZSl9LHVuaG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfdW5ob3ZlciIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHModCxlLHIpLXModCxlLG4pfX0ocixjW2VdLmZpbHRlcihhKSk7bFtlXS5zb3J0KG4pLGNbZV0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYSh0KX0pKS5zb3J0KChmdW5jdGlvbih0KXtyZXR1cm4gY1tlXS5pbmRleE9mKHQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwxKSxsW2VdLnNwbGljZShjW2VdLmluZGV4T2YodCksMCx0KX0pKSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbe2RpbWVuc2lvbnM6W2xbZV1dfSxbZltlXV1dKX19KX19KS5yZWdsUHJlY29tcGlsZWQ9b30seyIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo1MTEsIi4vaGVscGVycyI6ODkwLCIuL3BhcmNvb3JkcyI6ODk0fV0sODk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9YSh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGxhYmVsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzpjKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6cyh7fSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0dGVtcGxhdGU6bCh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInJhZGlhbCIsInRhbmdlbnRpYWwiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSxpbnNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLG91dHNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpjKHt9LHUse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjppKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6Yyh7fSx1LHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzYwLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1NzksIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2Mjh9XSw4OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6NjE0fV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz17fTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiEhZSYmKCEhKGU9aShlKSkuaXNWYWxpZCgpJiYoZT1hLmFkZE9wYWNpdHkoZSxlLmdldEFscGhhKCkpLHRbcl18fCh0W3JdPWUpLGUpKX19ZnVuY3Rpb24gbCh0LGUpe3ZhciByLG49SlNPTi5zdHJpbmdpZnkodCksYT1lW25dO2lmKCFhKXtmb3IoYT10LnNsaWNlKCkscj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspYS5wdXNoKGkodFtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKTtlW25dPWF9cmV0dXJuIGF9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPVtdLG89dC5fZnVsbExheW91dCxsPW8uaGlkZGVubGFiZWxzfHxbXSxjPWUubGFiZWxzLHU9ZS5tYXJrZXIuY29sb3JzfHxbXSxmPWUudmFsdWVzLGg9ZS5fbGVuZ3RoLHA9ZS5faGFzVmFsdWVzJiZoO2lmKGUuZGxhYmVsKWZvcihjPW5ldyBBcnJheShoKSxyPTA7cjxoO3IrKyljW3JdPVN0cmluZyhlLmxhYmVsMCtyKmUuZGxhYmVsKTt2YXIgZD17fSxtPXMob1siXyIrZS50eXBlKyJjb2xvcm1hcCJdKSxnPTAsdj0hMTtmb3Iocj0wO3I8aDtyKyspe3ZhciB5LHgsYjtpZihwKXtpZih5PWZbcl0sIW4oeSkpY29udGludWU7eT0reX1lbHNlIHk9MTt2b2lkIDAhPT0oeD1jW3JdKSYmIiIhPT14fHwoeD1yKTt2YXIgXz1kW3g9U3RyaW5nKHgpXTt2b2lkIDA9PT1fPyhkW3hdPWEubGVuZ3RoLChiPS0xIT09bC5pbmRleE9mKHgpKXx8KGcrPXkpLGEucHVzaCh7djp5LGxhYmVsOngsY29sb3I6bSh1W3JdLHgpLGk6cixwdHM6W3JdLGhpZGRlbjpifSkpOih2PSEwLChpPWFbX10pLnYrPXksaS5wdHMucHVzaChyKSxpLmhpZGRlbnx8KGcrPXkpLCExPT09aS5jb2xvciYmdVtyXSYmKGkuY29sb3I9bSh1W3JdLHgpKSl9cmV0dXJuIGE9YS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY+PTB9KSksKCJmdW5uZWxhcmVhIj09PWUudHlwZT92OmUuc29ydCkmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52LXQudn0pKSxhWzBdJiYoYVswXS52VG90YWw9ZyksYX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZXx8e30pLnR5cGU7cnx8KHI9InBpZSIpO3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT10LmNhbGNkYXRhLGE9bltyKyJjb2xvcndheSJdLHM9blsiXyIrcisiY29sb3JtYXAiXTtuWyJleHRlbmQiK3IrImNvbG9ycyJdJiYoYT1sKGEsbykpO2Zvcih2YXIgYz0wLHU9MDt1PGkubGVuZ3RoO3UrKyl7dmFyIGY9aVt1XTtpZihmWzBdLnRyYWNlLnR5cGU9PT1yKWZvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdOyExPT09cC5jb2xvciYmKHNbcC5sYWJlbF0/cC5jb2xvcj1zW3AubGFiZWxdOihzW3AubGFiZWxdPXAuY29sb3I9YVtjJWEubGVuZ3RoXSxjKyspKX19fSxtYWtlUHVsbENvbG9yRm46cyxnZW5lcmF0ZUV4dGVuZGVkQ29sb3JzOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiZmFzdC1pc251bWVyaWMiOjE4NSx0aW55Y29sb3IyOjMwN31dLDg5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxmPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGYpe2UuX2xlbmd0aD1mLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgaCxwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChoPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxoJiYibm9uZSIhPT1oKXt2YXIgbT1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsbSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkobSl8fCJhdXRvIj09PW18fCJvdXRzaWRlIj09PW0pJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09bXx8ImF1dG8iPT09bXx8QXJyYXkuaXNBcnJheShtKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBnPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixnPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO2d8fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi9iYXIvZGVmYXVsdHMiOjY0NywiLi9hdHRyaWJ1dGVzIjo4OTYsImZhc3QtaXNudW1lcmljIjoxODV9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyczp0LnB0cyxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsbGFiZWw6dC5sYWJlbCxjb2xvcjp0LmNvbG9yLHZhbHVlOnQudixwZXJjZW50OnQucGVyY2VudCx0ZXh0OnQudGV4dCxiYm94OnQuYmJveCx2OnQudn07cmV0dXJuIDE9PT10LnB0cy5sZW5ndGgmJihyLnBvaW50TnVtYmVyPXIuaT10LnB0c1swXSksbihyLGUsdC5wdHMpLCJmdW5uZWxhcmVhIj09PWUudHlwZSYmKGRlbGV0ZSByLnYsZGVsZXRlIHIuaSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTd9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo0OTh9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25lOnQoIi4vc3R5bGVfb25lIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBpZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsicGllLWxpa2UiLCJwaWUiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo4OTYsIi4vYmFzZV9wbG90Ijo4OTcsIi4vY2FsYyI6ODk4LCIuL2RlZmF1bHRzIjo4OTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwMywiLi9sYXlvdXRfZGVmYXVsdHMiOjkwNCwiLi9wbG90Ijo5MDUsIi4vc3R5bGUiOjkwNiwiLi9zdHlsZV9vbmUiOjkwN31dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2hpZGRlbmxhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwaWVjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHBpZWNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDkwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTAzfV0sOTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zdHJTY2FsZSx1PWwuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikscD1oLnJlY29yZE1pblRleHRTaXplLGQ9aC5jbGVhck1pblRleHRTaXplLG09dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsZz10KCIuL2hlbHBlcnMiKSx2PXQoIi4vZXZlbnRfZGF0YSIpLHk9dCgiLi4vLi4vbGliIikuaXNWYWxpZFRleHRWYWx1ZTtmdW5jdGlvbiB4KHQsZSxyKXt2YXIgaT1yWzBdLG89aS5jeCxzPWkuY3ksYz1pLnRyYWNlLHU9ImZ1bm5lbGFyZWEiPT09Yy50eXBlOyJfaGFzSG92ZXJMYWJlbCJpbiBjfHwoYy5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIGN8fChjLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGY9ZS5fZnVsbERhdGFbYy5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgaD1mLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGgpJiYoaD1hLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbZy5jYXN0T3B0aW9uKGgsdC5wdHMpXSxfbW9kdWxlOmMuX21vZHVsZX0sciwwKSksImFsbCI9PT1oJiYoaD0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSxmLmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWgmJiJza2lwIiE9PWgmJmgpe3ZhciBwPXQuckluc2NyaWJlZHx8MCxkPW8rdC5weG1pZFswXSooMS1wKSxtPXMrdC5weG1pZFsxXSooMS1wKSx5PXIuc2VwYXJhdG9ycyx4PVtdO2lmKGgmJi0xIT09aC5pbmRleE9mKCJsYWJlbCIpJiZ4LnB1c2godC5sYWJlbCksdC50ZXh0PWcuY2FzdE9wdGlvbihmLmhvdmVydGV4dHx8Zi50ZXh0LHQucHRzKSxoJiYtMSE9PWguaW5kZXhPZigidGV4dCIpKXt2YXIgYj10LnRleHQ7bC5pc1ZhbGlkVGV4dFZhbHVlKGIpJiZ4LnB1c2goYil9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPWcuZm9ybWF0UGllVmFsdWUodC52LHkpLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZ4LnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2kudlRvdGFsLHQucGVyY2VudExhYmVsPWcuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQseSksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmeC5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgXz1mLmhvdmVybGFiZWwsdz1fLmZvbnQsVD1bXTthLmxvbmVIb3Zlcih7dHJhY2U6Yyx4MDpkLXAqaS5yLHgxOmQrcCppLnIseTptLF94MDp1P28rdC5UTFswXTpkLXAqaS5yLF94MTp1P28rdC5UUlswXTpkK3AqaS5yLF95MDp1P3MrdC5UTFsxXTptLXAqaS5yLF95MTp1P3MrdC5CTFsxXTptK3AqaS5yLHRleHQ6eC5qb2luKCI8YnI+IiksbmFtZTpmLmhvdmVydGVtcGxhdGV8fC0xIT09aC5pbmRleE9mKCJuYW1lIik/Zi5uYW1lOnZvaWQgMCxpZGVhbEFsaWduOnQucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0Iixjb2xvcjpnLmNhc3RPcHRpb24oXy5iZ2NvbG9yLHQucHRzKXx8dC5jb2xvcixib3JkZXJDb2xvcjpnLmNhc3RPcHRpb24oXy5ib3JkZXJjb2xvcix0LnB0cyksZm9udEZhbWlseTpnLmNhc3RPcHRpb24ody5mYW1pbHksdC5wdHMpLGZvbnRTaXplOmcuY2FzdE9wdGlvbih3LnNpemUsdC5wdHMpLGZvbnRDb2xvcjpnLmNhc3RPcHRpb24ody5jb2xvcix0LnB0cyksbmFtZUxlbmd0aDpnLmNhc3RPcHRpb24oXy5uYW1lbGVuZ3RoLHQucHRzKSx0ZXh0QWxpZ246Zy5jYXN0T3B0aW9uKF8uYWxpZ24sdC5wdHMpLGhvdmVydGVtcGxhdGU6Zy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdih0LGYpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZSxpbk91dF9iYm94OlR9KSx0LmJib3g9VFswXSxjLl9oYXNIb3ZlckxhYmVsPSEwfWMuX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W3YodCxmKV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtjLmluZGV4XSxvPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7Yy5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3YobyxpKV0sZXZlbnQ6bi5ldmVudH0pLGMuX2hhc0hvdmVyRXZlbnQ9ITEpLGMuX2hhc0hvdmVyTGFiZWwmJihhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxjLl9oYXNIb3ZlckxhYmVsPSExKX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtjLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bdih0LGkpXSxhLmNsaWNrKGUsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWcuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWcuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWcuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fG8uY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTphfX1mdW5jdGlvbiBfKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGg7aSsrKWlmKChuPShyPXRbaV1bMF0pLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYT1uLnRpdGxlLnRleHQ7bi5fbWV0YSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLG4uX21ldGEpKTt2YXIgbz1zLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KGEpLmNhbGwocy5mb250LG4udGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxlKSxjPXMuYkJveChvLm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6Yy53aWR0aCxoZWlnaHQ6Yy5oZWlnaHR9LG8ucmVtb3ZlKCl9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXIucnx8ZS5ycHgxLGk9ZS5ySW5zY3JpYmVkO2lmKGUuc3RhcnRhbmdsZT09PWUuc3RvcGFuZ2xlKXJldHVybntyQ2VudGVyOjEtaSxzY2FsZTowLHJvdGF0ZTowLHRleHRQb3NBbmdsZTowfTt2YXIgYSxvPWUucmluZyxzPTE9PT1vJiZNYXRoLmFicyhlLnN0YXJ0YW5nbGUtZS5zdG9wYW5nbGUpPT09MipNYXRoLlBJLGw9ZS5oYWxmYW5nbGUsYz1lLm1pZGFuZ2xlLHU9ci50cmFjZS5pbnNpZGV0ZXh0b3JpZW50YXRpb24sZj0iaG9yaXpvbnRhbCI9PT11LGg9InRhbmdlbnRpYWwiPT09dSxwPSJyYWRpYWwiPT09dSxkPSJhdXRvIj09PXUsbT1bXTtpZighZCl7dmFyIGcsdj1mdW5jdGlvbihyLGkpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGFuZ2xlLG49dC5zdG9wYW5nbGU7cmV0dXJuIHI+ZSYmZT5ufHxyPGUmJmU8bn0oZSxyKSl7dmFyIHM9TWF0aC5hYnMoci1lLnN0YXJ0YW5nbGUpLGw9TWF0aC5hYnMoci1lLnN0b3BhbmdsZSksYz1zPGw/czpsOyhhPSJ0YW4iPT09aT9rKHQsbixvLGMsMCk6VCh0LG4sbyxjLE1hdGguUEkvMikpLnRleHRQb3NBbmdsZT1yLG0ucHVzaChhKX19O2lmKGZ8fGgpe2ZvcihnPTQ7Zz49LTQ7Zy09Mil2KE1hdGguUEkqZywidGFuIik7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSooZysxKSwidGFuIil9aWYoZnx8cCl7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSooZysxLjUpLCJyYWQiKTtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKy41KSwicmFkIil9fWlmKHN8fGR8fGYpe3ZhciB5PU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpO2lmKChhPXtzY2FsZTppKm4qMi95LHJDZW50ZXI6MS1pLHJvdGF0ZTowfSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsYS5zY2FsZT49MSlyZXR1cm4gYTttLnB1c2goYSl9KGR8fHApJiYoKGE9VCh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixtLnB1c2goYSkpLChkfHxoKSYmKChhPWsodCxuLG8sbCxjKSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsbS5wdXNoKGEpKTtmb3IodmFyIHg9MCxiPTAsXz0wO188bS5sZW5ndGg7XysrKXt2YXIgdz1tW19dLnNjYWxlO2lmKGI8dyYmKGI9dyx4PV8pLCFkJiZiPj0xKWJyZWFrfXJldHVybiBtW3hdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXtlPU1hdGgubWF4KDAsZS0yKm0pO3ZhciBhPXQud2lkdGgvdC5oZWlnaHQsbz1TKGEsbixlLHIpO3JldHVybntzY2FsZToyKm8vdC5oZWlnaHQsckNlbnRlcjpBKGEsby9lKSxyb3RhdGU6TShpKX19ZnVuY3Rpb24gayh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqbSk7dmFyIGE9dC5oZWlnaHQvdC53aWR0aCxvPVMoYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LndpZHRoLHJDZW50ZXI6QShhLG8vZSkscm90YXRlOk0oaStNYXRoLlBJLzIpfX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIE1hdGguY29zKGUpLXQqZX1mdW5jdGlvbiBNKHQpe3JldHVybigxODAvTWF0aC5QSSp0KzcyMCklMTgwLTkwfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGk9dCsxLygyKk1hdGgudGFuKGUpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoaSppKy41KStpKSxuLyhNYXRoLnNxcnQodCp0K24vMikrdCkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIEModCxlKXt2YXIgcixuLGksYT10LnRyYWNlLG89e3g6dC5jeCx5OnQuY3l9LHM9e3R4OjAsdHk6MH07cy50eSs9YS50aXRsZS5mb250LnNpemUsaT1JKGEpLC0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMStpKSp0LnIscy50eS09dC50aXRsZUJveC5oZWlnaHQpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDEraSkqdC5yKTt2YXIgbCxjLHU9KGw9dC5yLGM9dC50cmFjZS5hc3BlY3RyYXRpbyxsLyh2b2lkIDA9PT1jPzE6YykpLGY9ZS53KihhLmRvbWFpbi54WzFdLWEuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oZis9dSxvLngtPSgxK2kpKnUscy50eCs9dC50aXRsZUJveC53aWR0aC8yKTotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/Zio9MjotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGYrPXUsby54Kz0oMStpKSp1LHMudHgtPXQudGl0bGVCb3gud2lkdGgvMikscj1mL3QudGl0bGVCb3gud2lkdGgsbj1QKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6cy50eCx0eTpzLnR5fX1mdW5jdGlvbiBQKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBJKHQpe3ZhciBlLHI9dC5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBPKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxhPWkudHJhY2Usbz1hLmRvbWFpbixzPWUudyooby54WzFdLW8ueFswXSksbD1lLmgqKG8ueVsxXS1vLnlbMF0pO2EudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09YS50aXRsZS5wb3NpdGlvbiYmKGwtPVAoaSxlKSk7dmFyIGM9cy8yLHU9bC8yOyJmdW5uZWxhcmVhIiE9PWEudHlwZXx8YS5zY2FsZWdyb3VwfHwodS89YS5hc3BlY3RyYXRpbyksaS5yPU1hdGgubWluKGMsdSkvKDErSShhKSksaS5jeD1lLmwrZS53KihhLmRvbWFpbi54WzFdK2EuZG9tYWluLnhbMF0pLzIsaS5jeT1lLnQrZS5oKigxLWEuZG9tYWluLnlbMF0pLWwvMixhLnRpdGxlLnRleHQmJi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGkuY3ktPVAoaSxlKSksYS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihhLnNjYWxlZ3JvdXApJiZyLnB1c2goYS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89MS8wLHM9ZVthXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9dFtuXVswXSwoaT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09cyl7dmFyIGw7aWYoInBpZSI9PT1pLnR5cGUpbD1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09aS50eXBlKXt2YXIgYyx1O2kuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2kuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqaS5hc3BlY3RyYXRpbyksYyo9KDEraS5iYXNlcmF0aW8pLzIsbD1jKnV9bz1NYXRoLm1pbihvLGwvci52VG90YWwpfWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgZj1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWkudHlwZSYmKGYvPSgxK2kuYmFzZXJhdGlvKS8yLGYvPWkuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoZil9fX0odCxyKX1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuW3QqTWF0aC5zaW4oZSksLXQqTWF0aC5jb3MoZSldfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1yLnRyYWNlLGE9aS50ZXh0dGVtcGxhdGUsbz1pLnRleHRpbmZvO2lmKCFhJiZvJiYibm9uZSIhPT1vKXt2YXIgcyxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxmPXUoImxhYmVsIiksaD11KCJ0ZXh0IikscD11KCJ2YWx1ZSIpLGQ9dSgicGVyY2VudCIpLG09bi5zZXBhcmF0b3JzO2lmKHM9Zj9bZS5sYWJlbF06W10saCl7dmFyIHY9Zy5nZXRGaXJzdEZpbGxlZChpLnRleHQsZS5wdHMpO3kodikmJnMucHVzaCh2KX1wJiZzLnB1c2goZy5mb3JtYXRQaWVWYWx1ZShlLnYsbSkpLGQmJnMucHVzaChnLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLG0pKSxlLnRleHQ9cy5qb2luKCI8YnI+Iil9aWYoYSl7dmFyIHg9bC5jYXN0T3B0aW9uKGksZS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm57bGFiZWw6dC5sYWJlbCx2YWx1ZTp0LnYsdmFsdWVMYWJlbDpnLmZvcm1hdFBpZVZhbHVlKHQudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6dC52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDpnLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6dC5jb2xvcix0ZXh0OnQudGV4dCxjdXN0b21kYXRhOmwuY2FzdE9wdGlvbihpLHQuaSwiY3VzdG9tZGF0YSIpfX0oZSksXz1nLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7KHkoXyl8fCIiPT09XykmJihiLnRleHQ9XyksZS50ZXh0PWwudGV4dHRlbXBsYXRlU3RyaW5nKHgsYix0Ll9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGkuX21ldGF8fHt9KX1lbHNlIGUudGV4dD0iIn19ZnVuY3Rpb24gUih0LGUpe3ZhciByPXQucm90YXRlKk1hdGguUEkvMTgwLG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxhPShlLmxlZnQrZS5yaWdodCkvMixvPShlLnRvcCtlLmJvdHRvbSkvMjt0LnRleHRYPWEqbi1vKmksdC50ZXh0WT1hKmkrbypuLHQubm9DZW50ZXI9ITB9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXIuX3NpemU7ZCgicGllIixyKSxfKGUsdCksTyhlLGEpO3ZhciBoPWwubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGg9bi5zZWxlY3QodGhpcyksZD1lWzBdLG09ZC50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkucixvPWkudHJhY2Uscz1nLmdldFJvdGF0aW9uQW5nbGUoby5yb3RhdGlvbiksbD0yKk1hdGguUEkvaS52VG90YWwsYz0icHgwIix1PSJweDEiO2lmKCJjb3VudGVyY2xvY2t3aXNlIj09PW8uZGlyZWN0aW9uKXtmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uaGlkZGVuO2UrKyk7aWYoZT09PXQubGVuZ3RoKXJldHVybjtzKz1sKnRbZV0udixsKj0tMSxjPSJweDEiLHU9InB4MCJ9Zm9yKG49eihhLHMpLGU9MDtlPHQubGVuZ3RoO2UrKykocj10W2VdKS5oaWRkZW58fChyW2NdPW4sci5zdGFydGFuZ2xlPXMscys9bCpyLnYvMixyLnB4bWlkPXooYSxzKSxyLm1pZGFuZ2xlPXMscys9bCpyLnYvMixuPXooYSxzKSxyLnN0b3BhbmdsZT1zLHJbdV09bixyLmxhcmdlQXJjPXIudj5pLnZUb3RhbC8yPzE6MCxyLmhhbGZhbmdsZT1NYXRoLlBJKk1hdGgubWluKHIudi9pLnZUb3RhbCwuNSksci5yaW5nPTEtby5ob2xlLHIuckluc2NyaWJlZD1FKHIsaSkpfShlKSxoLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksaC5lYWNoKChmdW5jdGlvbigpe3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksdi5leGl0KCkucmVtb3ZlKCk7dmFyIHk9W1tbXSxbXV0sW1tdLFtdXV0sXz0hMTt2LmVhY2goKGZ1bmN0aW9uKGksYSl7aWYoaS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2kucG9pbnROdW1iZXI9aS5pLGkuY3VydmVOdW1iZXI9bS5pbmRleCx5W2kucHhtaWRbMV08MD8wOjFdW2kucHhtaWRbMF08MD8wOjFdLnB1c2goaSk7dmFyIG89ZC5jeCxjPWQuY3ksdT1uLnNlbGVjdCh0aGlzKSxoPXUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtpXSk7aWYoaC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHUuY2FsbCh4LHQsZSksbS5wdWxsKXt2YXIgdj0rZy5jYXN0T3B0aW9uKG0ucHVsbCxpLnB0cyl8fDA7dj4wJiYobys9dippLnB4bWlkWzBdLGMrPXYqaS5weG1pZFsxXSl9aS5jeEZpbmFsPW8saS5jeUZpbmFsPWM7dmFyIFQ9bS5ob2xlO2lmKGkudj09PWQudlRvdGFsKXt2YXIgaz0iTSIrKG8raS5weDBbMF0pKyIsIisoYytpLnB4MFsxXSkrQyhpLnB4MCxpLnB4bWlkLCEwLDEpK0MoaS5weG1pZCxpLnB4MCwhMCwxKSsiWiI7VD9oLmF0dHIoImQiLCJNIisobytUKmkucHgwWzBdKSsiLCIrKGMrVCppLnB4MFsxXSkrQyhpLnB4MCxpLnB4bWlkLCExLFQpK0MoaS5weG1pZCxpLnB4MCwhMSxUKSsiWiIrayk6aC5hdHRyKCJkIixrKX1lbHNle3ZhciBBPUMoaS5weDAsaS5weDEsITAsMSk7aWYoVCl7dmFyIE09MS1UO2guYXR0cigiZCIsIk0iKyhvK1QqaS5weDFbMF0pKyIsIisoYytUKmkucHgxWzFdKStDKGkucHgxLGkucHgwLCExLFQpKyJsIitNKmkucHgwWzBdKyIsIitNKmkucHgwWzFdK0ErIloiKX1lbHNlIGguYXR0cigiZCIsIk0iK28rIiwiK2MrImwiK2kucHgwWzBdKyIsIitpLnB4MFsxXStBKyJaIil9RCh0LGksZCk7dmFyIFM9Zy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLGkucHRzKSxFPXUuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoaS50ZXh0JiYibm9uZSIhPT1TP1swXTpbXSk7RS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1sLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksaD1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PVM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxnLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShtLGksci5mb250KTpiKG0saSxyLmZvbnQpKTt1LnRleHQoaS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LGgpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHYseT1zLmJCb3godS5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PVMpdj1MKHksaSk7ZWxzZSBpZih2PXcoeSxpLGQpLCJhdXRvIj09PVMmJnYuc2NhbGU8MSl7dmFyIHg9bC5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxtLm91dHNpZGV0ZXh0Zm9udCk7dS5jYWxsKHMuZm9udCx4KSx2PUwoeT1zLmJCb3godS5ub2RlKCkpLGkpfXZhciBUPXYudGV4dFBvc0FuZ2xlLGs9dm9pZCAwPT09VD9pLnB4bWlkOnooZC5yLFQpO2lmKHYudGFyZ2V0WD1vK2tbMF0qdi5yQ2VudGVyKyh2Lnh8fDApLHYudGFyZ2V0WT1jK2tbMV0qdi5yQ2VudGVyKyh2Lnl8fDApLFIodix5KSx2Lm91dHNpZGUpe3ZhciBBPXYudGFyZ2V0WTtpLnlMYWJlbE1pbj1BLXkuaGVpZ2h0LzIsaS55TGFiZWxNaWQ9QSxpLnlMYWJlbE1heD1BK3kuaGVpZ2h0LzIsaS5sYWJlbEV4dHJhWD0wLGkubGFiZWxFeHRyYVk9MCxfPSEwfXYuZm9udFNpemU9aC5zaXplLHAobS50eXBlLHYsciksZVthXS50cmFuc2Zvcm09dix1LmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHYpKX0pKX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBhPW4qKGVbMF0tdFswXSksbz1uKihlWzFdLXRbMV0pO3JldHVybiJhIituKmQucisiLCIrbipkLnIrIiAwICIraS5sYXJnZUFyYysocj8iIDEgIjoiIDAgIikrYSsiLCIrb319KSk7dmFyIFQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEobS50aXRsZS50ZXh0P1swXTpbXSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLFQuZXhpdCgpLnJlbW92ZSgpLFQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZSxyPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxpPW0udGl0bGUudGV4dDttLl9tZXRhJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGksbS5fbWV0YSkpLHIudGV4dChpKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LG0udGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KGQpOkMoZCxhKSxyLmF0dHIoInRyYW5zZm9ybSIsdShlLngsZS55KStjKE1hdGgubWluKDEsZS5zY2FsZSkpK3UoZS50eCxlLnR5KSl9KSksXyYmZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoLHAsZDtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB5KHQscil7cnx8KHI9e30pO3ZhciBpLGMsdSxoLHA9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksZD1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LG09bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix2PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSx5PXAtZDtpZih5Kmw+MCYmKHQubGFiZWxFeHRyYVk9eSksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcihjPTA7YzxmLmxlbmd0aDtjKyspKHU9ZltjXSk9PT10fHwoZy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oZy5jYXN0T3B0aW9uKGUucHVsbCx1LnB0cyl8fDApfHwoKHQucHhtaWRbMV0tdS5weG1pZFsxXSkqbD4wPyh5PXUuY3lGaW5hbCtvKHUucHgwWzFdLHUucHgxWzFdKS1kLXQubGFiZWxFeHRyYVkpKmw+MCYmKHQubGFiZWxFeHRyYVkrPXkpOihtK3QubGFiZWxFeHRyYVktdikqbD4wJiYoaT0zKnMqTWF0aC5hYnMoYy1mLmluZGV4T2YodCkpLChoPXUuY3hGaW5hbCthKHUucHgwWzBdLHUucHgxWzBdKStpLSh0LmN4RmluYWwrdC5weG1pZFswXSktdC5sYWJlbEV4dHJhWCkqcz4wJiYodC5sYWJlbEV4dHJhWCs9aCkpKX1mb3Iobj0wO248MjtuKyspZm9yKGk9bj9tOnYsbz1uP01hdGgubWF4Ok1hdGgubWluLGw9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoYT1yP01hdGgubWF4Ok1hdGgubWluLHM9cj8xOi0xLChjPXRbbl1bcl0pLnNvcnQoaSksdT10WzEtbl1bcl0sZj11LmNvbmNhdChjKSxwPVtdLGg9MDtoPGMubGVuZ3RoO2grKyl2b2lkIDAhPT1jW2hdLnlMYWJlbE1pZCYmcC5wdXNoKGNbaF0pO2ZvcihkPSExLGg9MDtuJiZoPHUubGVuZ3RoO2grKylpZih2b2lkIDAhPT11W2hdLnlMYWJlbE1pZCl7ZD11W2hdO2JyZWFrfWZvcihoPTA7aDxwLmxlbmd0aDtoKyspe3ZhciB4PWgmJnBbaC0xXTtkJiYhaCYmKHg9ZCkseShwW2hdLHgpfX19KHksbSksZnVuY3Rpb24odCxlKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7dC50cmFuc2Zvcm0udGFyZ2V0WCs9dC5sYWJlbEV4dHJhWCx0LnRyYW5zZm9ybS50YXJnZXRZKz10LmxhYmVsRXh0cmFZLGkuYXR0cigidHJhbnNmb3JtIixsLmdldFRleHRUcmFuc2Zvcm0odC50cmFuc2Zvcm0pKTt2YXIgYT10LmN4RmluYWwrdC5weG1pZFswXSxzPSJNIithKyIsIisodC5jeUZpbmFsK3QucHhtaWRbMV0pLGM9KHQueUxhYmVsTWF4LXQueUxhYmVsTWluKSoodC5weG1pZFswXTwwPy0xOjEpLzQ7aWYodC5sYWJlbEV4dHJhWCl7dmFyIHU9dC5sYWJlbEV4dHJhWCp0LnB4bWlkWzFdL3QucHhtaWRbMF0sZj10LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZLSh0LmN5RmluYWwrdC5weG1pZFsxXSk7TWF0aC5hYnModSk+TWF0aC5hYnMoZik/cys9ImwiK2YqdC5weG1pZFswXS90LnB4bWlkWzFdKyIsIitmKyJIIisoYSt0LmxhYmVsRXh0cmFYK2MpOnMrPSJsIit0LmxhYmVsRXh0cmFYKyIsIit1KyJ2IisoZi11KSsiaCIrY31lbHNlIHMrPSJWIisodC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWSkrImgiK2M7bC5lbnN1cmVTaW5nbGUociwicGF0aCIsInRleHRsaW5lIikuY2FsbChvLnN0cm9rZSxlLm91dHNpZGV0ZXh0Zm9udC5jb2xvcikuYXR0cih7InN0cm9rZS13aWR0aCI6TWF0aC5taW4oMixlLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6cyxmaWxsOiJub25lIn0pfWVsc2Ugci5zZWxlY3QoInBhdGgudGV4dGxpbmUiKS5yZW1vdmUoKX0pKX0odixtKSxfJiZtLmF1dG9tYXJnaW4pe3ZhciBrPXMuYkJveChoLm5vZGUoKSksQT1tLmRvbWFpbixNPWEudyooQS54WzFdLUEueFswXSksUz1hLmgqKEEueVsxXS1BLnlbMF0pLEU9KC41Kk0tZC5yKS9hLncsUD0oLjUqUy1kLnIpL2EuaDtpLmF1dG9NYXJnaW4odCwicGllLiIrbS51aWQrIi5hdXRvbWFyZ2luIix7eGw6QS54WzBdLUUseHI6QS54WzFdK0UseWI6QS55WzBdLVAseXQ6QS55WzFdK1AsbDpNYXRoLm1heChkLmN4LWQuci1rLmxlZnQsMCkscjpNYXRoLm1heChrLnJpZ2h0LShkLmN4K2QuciksMCksYjpNYXRoLm1heChrLmJvdHRvbS0oZC5jeStkLnIpLDApLHQ6TWF0aC5tYXgoZC5jeS1kLnItay50b3AsMCkscGFkOjV9KX19KSl9KSk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtoLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cigiZHkiKSYmdC5hdHRyKCJkeSIsdC5hdHRyKCJkeSIpKX0pKX0pLDApfSxmb3JtYXRTbGljZUxhYmVsOkQsdHJhbnNmb3JtSW5zaWRlVGV4dDp3LGRldGVybWluZUluc2lkZVRleHRGb250OmIscG9zaXRpb25UaXRsZU91dHNpZGU6QyxwcmVyZW5kZXJUaXRsZXM6XyxsYXlvdXRBcmVhczpPLGF0dGFjaEZ4SGFuZGxlcnM6eCxjb21wdXRlVHJhbnNmb3JtOlJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9wbG90cyI6NjE0LCIuLi9iYXIvY29uc3RhbnRzIjo2NDUsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiLi9ldmVudF9kYXRhIjo5MDAsIi4vaGVscGVycyI6OTAxLCJAcGxvdGx5L2QzIjo1OH1dLDkwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuL3N0eWxlX29uZSIpLGE9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3BpZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7YSh0LGUsInBpZSIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LGUpfSkpfSkpfX0seyIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NTksIi4vc3R5bGVfb25lIjo5MDcsIkBwbG90bHkvZDMiOjU4fV0sOTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4vaGVscGVycyI6OTAxfV0sOTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyMn1dLDkwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9wb2ludGNsb3VkMmQsaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLG89dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy50eXBlPSJwb2ludGNsb3VkIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9InJnYigwLCAwLCAwKSIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxmPXRoaXMucGlja1hZRGF0YT10Lnh5LGg9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihmKXtpZihuPWYsZT1mLmxlbmd0aD4+PjEsaClkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgbT1pKHQubWFya2VyLmNvbG9yKSxnPWkodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O21bM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1tO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSxnWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9Zzt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsVD1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1hKF8sW2RbMF0sZFsyXV0se3BwYWQ6VH0pLHQuX2V4dHJlbWVzW3cuX2lkXT1hKHcsW2RbMV0sZFszXV0se3BwYWQ6VH0pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTE5LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjU0OCwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjkzMn1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoIngiKSxhKCJ5IiksYSgieGJvdW5kcyIpLGEoInlib3VuZHMiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKCJ0ZXh0IiksYSgibWFya2VyLmNvbG9yIixyKSxhKCJtYXJrZXIub3BhY2l0eSIpLGEoIm1hcmtlci5ibGVuZCIpLGEoIm1hcmtlci5zaXplbWluIiksYSgibWFya2VyLnNpemVtYXgiKSxhKCJtYXJrZXIuYm9yZGVyLmNvbG9yIixyKSxhKCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyIpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9hdHRyaWJ1dGVzIjo5MDh9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7WyIqcG9pbnRjbG91ZCogdHJhY2UgaXMgZGVwcmVjYXRlZCEiLCJQbGVhc2UgY29uc2lkZXIgc3dpdGNoaW5nIHRvIHRoZSAqc2NhdHRlcmdsKiB0cmFjZSB0eXBlLiJdLmpvaW4oIiAiKTtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vc2NhdHRlcjNkL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwb2ludGNsb3VkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDJkIiksY2F0ZWdvcmllczpbImdsIiwiZ2wyZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDJkIjo1OTEsIi4uL3NjYXR0ZXIzZC9jYWxjIjo5NTEsIi4vYXR0cmlidXRlcyI6OTA4LCIuL2NvbnZlcnQiOjkwOSwiLi9kZWZhdWx0cyI6OTEwfV0sOTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHA9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9cCh7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZToic2Fua2V5Iix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MiLGRlc2NyaXB0aW9uOmYoInZhbHVlIil9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksY3VzdG9tZGF0YTp2b2lkIDAsbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjowLGRmbHQ6MjB9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGRmbHQ6ImFsbCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbInZhbHVlIiwibGFiZWwiXX0pLGNvbG9yc2NhbGVzOnUoImNvbmNlbnRyYXRpb25zY2FsZXMiLHtlZGl0VHlwZToiY2FsYyIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6IiJ9LGNtYXg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDowfSxjb2xvcnNjYWxlOmgoYygpLmNvbG9yc2NhbGUse2RmbHQ6W1swLCJ3aGl0ZSJdLFsxLCJibGFjayJdXX0pfSl9fSwiY2FsYyIsIm5lc3RlZCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2MCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjozOTIsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo1NzksIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTgwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2Mjh9XSw5MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXQoIi4vcGxvdCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaCh0LGUpe3ZhciByPXQuX2Z1bGxEYXRhW2VdLG49dC5fZnVsbExheW91dCxpPW4uZHJhZ21vZGUsYT0icGFuIj09PW4uZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiLG89ci5fYmdSZWN0O2lmKCJwYW4iIT09aSYmInpvb20iIT09aSl7cyhvLGEpO3ZhciBoPXtfaWQ6IngiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVgsX2xlbmd0aDpyLl9zYW5rZXkud2lkdGh9LHA9e19pZDoieSIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWSxfbGVuZ3RoOnIuX3NhbmtleS5oZWlnaHR9LGQ9e2dkOnQsZWxlbWVudDpvLm5vZGUoKSxwbG90aW5mbzp7aWQ6ZSx4YXhpczpoLHlheGlzOnAsZmlsbFJhbmdlSXRlbXM6dS5ub29wfSxzdWJwbG90OmUseGF4ZXM6W2hdLHlheGVzOltwXSxkb25lRm5Db21wbGV0ZWQ6ZnVuY3Rpb24ocil7dmFyIG4saT10Ll9mdWxsRGF0YVtlXSxhPWkubm9kZS5ncm91cHMuc2xpY2UoKSxvPVtdO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlPWkuX3NhbmtleS5ncmFwaC5ub2RlcyxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5wb2ludE51bWJlcj09PXQpcmV0dXJuIGVbcl19Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXMocltsXS5wb2ludE51bWJlcik7aWYoYylpZihjLmdyb3VwKXtmb3IodmFyIHU9MDt1PGMuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7dSsrKW8ucHVzaChjLmNoaWxkcmVuTm9kZXNbdV0ucG9pbnROdW1iZXIpO2FbYy5wb2ludE51bWJlci1pLm5vZGUuX2NvdW50XT0hMX1lbHNlIG8ucHVzaChjLnBvaW50TnVtYmVyKX1uPWEuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdChbb10pLGYuY2FsbCgiX2d1aVJlc3R5bGUiLHQseyJub2RlLmdyb3VwcyI6W25dfSxlKX0scHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLGQsaSl9fTtsLmluaXQoZCl9fXIubmFtZT0ic2Fua2V5IixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInNhbmtleSIpWzBdO2EodCxlKSxyLnVwZGF0ZUZ4KHQpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJzYW5rZXkiKSxhPWUuX2hhcyYmZS5faGFzKCJzYW5rZXkiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmJnc2Fua2V5IikucmVtb3ZlKCkpfSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5fZnVsbERhdGEubGVuZ3RoO2UrKyloKHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4MCwiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NDAyLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL3NldGN1cnNvciI6NTE5LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjU3MCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU4OCwiLi4vLi4vcmVnaXN0cnkiOjYzMywiLi9wbG90Ijo5MTh9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9byhhLmN1c3RvbWRhdGEpLGg9e30scD17fSxkPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxkO2UrKyl7dmFyIG09YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKG0se2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtwW20ubGFiZWxdPXZ9dmFyIHk9MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPnkmJih5PWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT55JiYoeT1hLnRhcmdldFtlXSk7dmFyIHgsYj15KzE7dC5ub2RlLl9jb3VudD1iO3ZhciBfPXQubm9kZS5ncm91cHMsdz17fTtmb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgVD1fW2VdO2Zvcih4PTA7eDxULmxlbmd0aDt4Kyspe3ZhciBrPVRbeF0sQT1iK2U7dy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oIk5vZGUgIitrKyIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuIik6d1trXT1BfX12YXIgTT17c291cmNlOltdLHRhcmdldDpbXX07Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKyl7dmFyIFM9YS52YWx1ZVtlXSxFPWEuc291cmNlW2VdLEw9YS50YXJnZXRbZV07aWYoUz4wJiZzKEUsYikmJnMoTCxiKSYmKCF3Lmhhc093blByb3BlcnR5KEUpfHwhdy5oYXNPd25Qcm9wZXJ0eShMKXx8d1tFXSE9PXdbTF0pKXt3Lmhhc093blByb3BlcnR5KEwpJiYoTD13W0xdKSx3Lmhhc093blByb3BlcnR5KEUpJiYoRT13W0VdKSxMPStMLGhbRT0rRV09aFtMXT0hMDt2YXIgQz0iIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgUD1udWxsO0MmJnAuaGFzT3duUHJvcGVydHkoQykmJihQPXBbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGN1c3RvbWRhdGE6Zj9hLmN1c3RvbWRhdGFbZV06YS5jdXN0b21kYXRhLGNvbmNlbnRyYXRpb25zY2FsZTpQLHNvdXJjZTpFLHRhcmdldDpMLHZhbHVlOitTfSksTS5zb3VyY2UucHVzaChFKSxNLnRhcmdldC5wdXNoKEwpfX12YXIgST1iK18ubGVuZ3RoLE89byhyLmNvbG9yKSx6PW8oci5jdXN0b21kYXRhKSxEPVtdO2ZvcihlPTA7ZTxJO2UrKylpZihoW2VdKXt2YXIgUj1yLmxhYmVsW2VdO0QucHVzaCh7Z3JvdXA6ZT5iLTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOlIsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3IsY3VzdG9tZGF0YTp6P3IuY3VzdG9tZGF0YVtlXTpyLmN1c3RvbWRhdGF9KX12YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpfShJLE0uc291cmNlLE0udGFyZ2V0KSYmKEY9ITApLHtjaXJjdWxhcjpGLGxpbmtzOmMsbm9kZXM6RCxncm91cHM6Xyxncm91cExvb2t1cDp3fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBhKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ3VwIjo0OTUsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjozMDF9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZToibGluZWFyIixjbjp7c2Fua2V5OiJzYW5rZXkiLHNhbmtleUxpbmtzOiJzYW5rZXktbGlua3MiLHNhbmtleUxpbms6InNhbmtleS1saW5rIixzYW5rZXlOb2RlU2V0OiJzYW5rZXktbm9kZS1zZXQiLHNhbmtleU5vZGU6InNhbmtleS1ub2RlIixub2RlUmVjdDoibm9kZS1yZWN0Iixub2RlTGFiZWw6Im5vZGUtbGFiZWwifX19LHt9XSw5MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksdT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5saW5rLmNvbG9yc2NhbGVzLHIsYSl9cigibGFiZWwiKSxyKCJjbWluIikscigiY21heCIpLHIoImNvbG9yc2NhbGUiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBkPW4uZXh0ZW5kRGVlcChoLmhvdmVybGFiZWwsdC5ob3ZlcmxhYmVsKSxtPXQubm9kZSxnPWMubmV3Q29udGFpbmVyKGUsIm5vZGUiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKG0sZyxpLm5vZGUsdCxlKX12KCJsYWJlbCIpLHYoImdyb3VwcyIpLHYoIngiKSx2KCJ5IiksdigicGFkIiksdigidGhpY2tuZXNzIiksdigibGluZS5jb2xvciIpLHYoImxpbmUud2lkdGgiKSx2KCJob3ZlcmluZm8iLHQuaG92ZXJpbmZvKSxsKG0sZyx2LGQpLHYoImhvdmVydGVtcGxhdGUiKTt2YXIgeT1oLmNvbG9yd2F5O3YoImNvbG9yIixnLmxhYmVsLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hZGRPcGFjaXR5KGZ1bmN0aW9uKHQpe3JldHVybiB5W3QleS5sZW5ndGhdfShlKSwuOCl9KSkpLHYoImN1c3RvbWRhdGEiKTt2YXIgeD10Lmxpbmt8fHt9LGI9Yy5uZXdDb250YWluZXIoZSwibGluayIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkubGluayx0LGUpfV8oImxhYmVsIiksXygic291cmNlIiksXygidGFyZ2V0IiksXygidmFsdWUiKSxfKCJsaW5lLmNvbG9yIiksXygibGluZS53aWR0aCIpLF8oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB3LFQ9byhoLnBhcGVyX2JnY29sb3IpLmdldEx1bWluYW5jZSgpPC4zMzM/InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSI6InJnYmEoMCwgMCwgMCwgMC4yKSI7XygiY29sb3IiLG4ucmVwZWF0KFQsYi52YWx1ZS5sZW5ndGgpKSxfKCJjdXN0b21kYXRhIiksdSh4LGIse25hbWU6ImNvbG9yc2NhbGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLHMoZSxoLHApLHAoIm9yaWVudGF0aW9uIikscCgidmFsdWVmb3JtYXQiKSxwKCJ2YWx1ZXN1ZmZpeCIpLGcueC5sZW5ndGgmJmcueS5sZW5ndGgmJih3PSJmcmVlZm9ybSIpLHAoImFycmFuZ2VtZW50Iix3KSxuLmNvZXJjZUZvbnQocCwidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxoLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiOjM5OSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjUzOCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuL2F0dHJpYnV0ZXMiOjkxMix0aW55Y29sb3IyOjMwN31dLDkxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2Fua2V5IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdC5qcyIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjkxMiwiLi9iYXNlX3Bsb3QiOjkxMywiLi9jYWxjIjo5MTQsIi4vZGVmYXVsdHMiOjkxNiwiLi9wbG90Ijo5MTgsIi4vc2VsZWN0LmpzIjo5MjB9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoIi4vcmVuZGVyIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuL2NvbnN0YW50cyIpLmNuLHU9aS5fO2Z1bmN0aW9uIGYodCl7cmV0dXJuIiIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pKX1mdW5jdGlvbiBwKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KCJwYXRoIikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSksbi5zZWxlY3QodCkuc2VsZWN0KCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSl9ZnVuY3Rpb24gZCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoInRleHQubmFtZSIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKX1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKG0oZSkpLmNhbGwoeC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24geSh0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIobShlKSkuY2FsbChiLmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksciYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksciYmaChlLHQpLnNlbGVjdEFsbChjLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHkpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49aS5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ci5fcGFwZXIsaD1yLl9zaXplLG09MDttPHQuX2Z1bGxEYXRhLmxlbmd0aDttKyspaWYodC5fZnVsbERhdGFbbV0udmlzaWJsZSYmdC5fZnVsbERhdGFbbV0udHlwZT09PWMuc2Fua2V5JiYhdC5fZnVsbERhdGFbbV0uX3ZpZXdJbml0aWFsKXt2YXIgZz10Ll9mdWxsRGF0YVttXS5ub2RlO3QuX2Z1bGxEYXRhW21dLl92aWV3SW5pdGlhbD17bm9kZTp7Z3JvdXBzOmcuZ3JvdXBzLnNsaWNlKCkseDpnLnguc2xpY2UoKSx5OmcueS5zbGljZSgpfX19dmFyIHc9dSh0LCJzb3VyY2U6IikrIiAiLFQ9dSh0LCJ0YXJnZXQ6IikrIiAiLGs9dSh0LCJjb25jZW50cmF0aW9uOiIpKyIgIixBPXUodCwiaW5jb21pbmcgZmxvdyBjb3VudDoiKSsiICIsTT11KHQsIm91dGdvaW5nIGZsb3cgY291bnQ6IikrIiAiO28odCxpLGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7bGlua0V2ZW50czp7aG92ZXI6ZnVuY3Rpb24oZSxyLGkpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHguYmluZCgwLHIsaSwhMCkpLCJza2lwIiE9PXIubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKHIubGluay5mdWxsRGF0YT1yLmxpbmsudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5saW5rXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubGluay50cmFjZS5saW5rO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7Zm9yKHZhciBjPVtdLHU9MCxoPTA7aDxpLmZsb3cubGlua3MubGVuZ3RoO2grKyl7dmFyIG09aS5mbG93LmxpbmtzW2hdO2lmKCJjbG9zZXN0IiE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlfHxpLmxpbmsucG9pbnROdW1iZXI9PT1tLnBvaW50TnVtYmVyKXtpLmxpbmsucG9pbnROdW1iZXI9PT1tLnBvaW50TnVtYmVyJiYodT1oKSxtLmZ1bGxEYXRhPW0udHJhY2Usbz1pLmxpbmsudHJhY2UubGluazt2YXIgZz15KG0pLHY9e3ZhbHVlTGFiZWw6YShpLnZhbHVlRm9ybWF0KShtLnZhbHVlKStpLnZhbHVlU3VmZml4fTtjLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTp2LnZhbHVlTGFiZWwsdGV4dDpbbS5sYWJlbHx8IiIsdyttLnNvdXJjZS5sYWJlbCxUK20udGFyZ2V0LmxhYmVsLG0uY29uY2VudHJhdGlvbnNjYWxlP2srYSgiJTAuMmYiKShtLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKToiIl0uZmlsdGVyKGYpLmpvaW4oIjxicj4iKSxjb2xvcjpfKG8sImJnY29sb3IiKXx8bC5hZGRPcGFjaXR5KG0uY29sb3IsMSksYm9yZGVyQ29sb3I6XyhvLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6XyhvLCJmb250LmZhbWlseSIpLGZvbnRTaXplOl8obywiZm9udC5zaXplIiksZm9udENvbG9yOl8obywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6XyhvLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOl8obywiYWxpZ24iKSxpZGVhbEFsaWduOm4uZXZlbnQueDxnWzBdPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6dixldmVudERhdGE6W21dfSl9fXMubG9uZUhvdmVyKGMse2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dCxhbmNob3JJbmRleDp1fSkuZWFjaCgoZnVuY3Rpb24oKXtpLmxpbmsuY29uY2VudHJhdGlvbnNjYWxlfHxwKHRoaXMsLjY1KSxkKHRoaXMpfSkpfX1mdW5jdGlvbiB5KHQpe3ZhciBlLHI7dC5jaXJjdWxhcj8oZT0odC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCt0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCkvMixyPXQuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQpOihlPSh0LnNvdXJjZS54MSt0LnRhcmdldC54MCkvMixyPSh0LnkwK3QueTEpLzIpO3ZhciBuPVtlLHJdO3JldHVybiJ2Ij09PXQudHJhY2Uub3JpZW50YXRpb24mJm4ucmV2ZXJzZSgpLG5bMF0rPWkucGFyZW50LnRyYW5zbGF0ZVgsblsxXSs9aS5wYXJlbnQudHJhbnNsYXRlWSxufX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksYSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoYi5iaW5kKDAsaSxhLCEwKSksInNraXAiIT09aS5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoaS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubGlua119KSkscy5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyKXt2YXIgaT1yLmxpbms7aS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsdC5faG92ZXJkYXRhPVtpXSxzLmNsaWNrKHQse3RhcmdldDohMH0pfX0sbm9kZUV2ZW50czp7aG92ZXI6ZnVuY3Rpb24oZSxyLGkpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHYscixpKSwic2tpcCIhPT1yLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihyLm5vZGUuZnVsbERhdGE9ci5ub2RlLnRyYWNlLHQuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W3Iubm9kZV19KSkpfSxmb2xsb3c6ZnVuY3Rpb24oZSxpKXtpZighMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlKXt2YXIgbz1pLm5vZGUudHJhY2Uubm9kZTtpZigibm9uZSIhPT1vLmhvdmVyaW5mbyYmInNraXAiIT09by5ob3ZlcmluZm8pe3ZhciBsPW4uc2VsZWN0KGUpLnNlbGVjdCgiLiIrYy5ub2RlUmVjdCksdT10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1sLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWgubGVmdC0yLXUubGVmdCxnPWgucmlnaHQrMi11LmxlZnQsdj1oLnRvcCtoLmhlaWdodC80LXUudG9wLHk9e3ZhbHVlTGFiZWw6YShpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2UsdC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIHg9dC5fZnVsbExheW91dC5faW52U2NhbGVYLGI9dC5fZnVsbExheW91dC5faW52U2NhbGVZLHc9cy5sb25lSG92ZXIoe3gwOngqbSx4MTp4KmcseTpiKnYsbmFtZTphKGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeCx0ZXh0OltpLm5vZGUubGFiZWwsQStpLm5vZGUudGFyZ2V0TGlua3MubGVuZ3RoLE0raS5ub2RlLnNvdXJjZUxpbmtzLmxlbmd0aF0uZmlsdGVyKGYpLmpvaW4oIjxicj4iKSxjb2xvcjpfKG8sImJnY29sb3IiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6XyhvLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6XyhvLCJmb250LmZhbWlseSIpLGZvbnRTaXplOl8obywiZm9udC5zaXplIiksZm9udENvbG9yOl8obywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6XyhvLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOl8obywiYWxpZ24iKSxpZGVhbEFsaWduOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOm8uaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnksZXZlbnREYXRhOltpLm5vZGVdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7cCh3LC44NSksZCh3KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxhKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh5LGksYSksInNraXAiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSkscy5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBhPXIubm9kZTthLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2FdLG4uc2VsZWN0KGUpLmNhbGwoeSxyLGkpLHMuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vbGliIjo0OTgsIi4vY29uc3RhbnRzIjo5MTUsIi4vcmVuZGVyIjo5MTksIkBwbG90bHkvZDMiOjU4fV0sOTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWZvcmNlIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLGE9dCgiQHBsb3RseS9kMyIpLG89dCgiQHBsb3RseS9kMy1zYW5rZXkiKSxzPXQoIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIiksbD10KCIuL2NvbnN0YW50cyIpLGM9dCgidGlueWNvbG9yMiIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuLi8uLi9saWIiKSxwPWguc3RyVHJhbnNsYXRlLGQ9aC5zdHJSb3RhdGUsbT10KCIuLi8uLi9saWIvZ3VwIiksZz1tLmtleUZ1bix2PW0ucmVwZWF0LHk9bS51bndyYXAseD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxiPXQoIi4uLy4uL3JlZ2lzdHJ5IiksXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdz1fLkNBUF9TSElGVCxUPV8uTElORV9TUEFDSU5HO2Z1bmN0aW9uIGsodCxlLHIpe3ZhciBuLGk9eShlKSxhPWkudHJhY2UsdT1hLmRvbWFpbixmPSJoIj09PWEub3JpZW50YXRpb24scD1hLm5vZGUucGFkLGQ9YS5ub2RlLnRoaWNrbmVzcyxtPXQud2lkdGgqKHUueFsxXS11LnhbMF0pLGc9dC5oZWlnaHQqKHUueVsxXS11LnlbMF0pLHY9aS5fbm9kZXMseD1pLl9saW5rcyxiPWkuY2lyY3VsYXI7KG49Yj9zLnNhbmtleUNpcmN1bGFyKCkuY2lyY3VsYXJMaW5rR2FwKDApOm8uc2Fua2V5KCkpLml0ZXJhdGlvbnMobC5zYW5rZXlJdGVyYXRpb25zKS5zaXplKGY/W20sZ106W2csbV0pLm5vZGVXaWR0aChkKS5ub2RlUGFkZGluZyhwKS5ub2RlSWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvaW50TnVtYmVyfSkpLm5vZGVzKHYpLmxpbmtzKHgpO3ZhciBfLHcsVCxrPW4oKTtmb3IodmFyIEEgaW4gbi5ub2RlUGFkZGluZygpPHAmJmgud2Fybigibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gIixuLm5vZGVQYWRkaW5nKCksIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuIiksaS5fZ3JvdXBMb29rdXApe3ZhciBNLFM9cGFyc2VJbnQoaS5fZ3JvdXBMb29rdXBbQV0pO2ZvcihfPTA7XzxrLm5vZGVzLmxlbmd0aDtfKyspaWYoay5ub2Rlc1tfXS5wb2ludE51bWJlcj09PVMpe009ay5ub2Rlc1tfXTticmVha31pZihNKXt2YXIgRT17cG9pbnROdW1iZXI6cGFyc2VJbnQoQSkseDA6TS54MCx4MTpNLngxLHkwOk0ueTAseTE6TS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07ay5ub2Rlcy51bnNoaWZ0KEUpLE0uY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KEUpfX1pZihmdW5jdGlvbigpe2ZvcihfPTA7XzxrLm5vZGVzLmxlbmd0aDtfKyspe3ZhciB0LGUscj1rLm5vZGVzW19dLG49e307Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl0PShlPXIudGFyZ2V0TGlua3Nbd10pLnNvdXJjZS5wb2ludE51bWJlcisiOiIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3Iodz0wO3c8aS5sZW5ndGg7dysrKXt2YXIgYT1uW3Q9aVt3XV0sbz0wLHM9e307Zm9yKFQ9MDtUPGEubGVuZ3RoO1QrKylzWyhlPWFbVF0pLmxhYmVsXXx8KHNbZS5sYWJlbF09MCksc1tlLmxhYmVsXSs9ZS52YWx1ZSxvKz1lLnZhbHVlO2ZvcihUPTA7VDxhLmxlbmd0aDtUKyspKGU9YVtUXSkuZmxvdz17dmFsdWU6byxsYWJlbENvbmNlbnRyYXRpb246c1tlLmxhYmVsXS9vLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9vLGxpbmtzOmF9LGUuY29uY2VudHJhdGlvbnNjYWxlJiYoZS5jb2xvcj1jKGUuY29uY2VudHJhdGlvbnNjYWxlKGUuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pKSl9dmFyIGw9MDtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKWwrPXIuc291cmNlTGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKykoZT1yLnNvdXJjZUxpbmtzW3ddKS5jb25jZW50cmF0aW9uT3V0PWUudmFsdWUvbDt2YXIgdT0wO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdSs9ci50YXJnZXRMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKShlPXIudGFyZ2V0TGlua3Nbd10pLmNvbmNlbnJhdGlvbkluPWUudmFsdWUvdX19KCksYS5ub2RlLngubGVuZ3RoJiZhLm5vZGUueS5sZW5ndGgpe2ZvcihfPTA7XzxNYXRoLm1pbihhLm5vZGUueC5sZW5ndGgsYS5ub2RlLnkubGVuZ3RoLGsubm9kZXMubGVuZ3RoKTtfKyspaWYoYS5ub2RlLnhbX10mJmEubm9kZS55W19dKXt2YXIgTD1bYS5ub2RlLnhbX10qbSxhLm5vZGUueVtfXSpnXTtrLm5vZGVzW19dLngwPUxbMF0tZC8yLGsubm9kZXNbX10ueDE9TFswXStkLzI7dmFyIEM9ay5ub2Rlc1tfXS55MS1rLm5vZGVzW19dLnkwO2subm9kZXNbX10ueTA9TFsxXS1DLzIsay5ub2Rlc1tfXS55MT1MWzFdK0MvMn1pZigic25hcCI9PT1hLmFycmFuZ2VtZW50KSFmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSksbj0wO248YTsrK24pKGU9dFtuXSkueTA+PWl8fChyPWktZS55MCk+MWUtNiYmKGUueTArPXIsZS55MSs9ciksaT1lLnkxK3B9KSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm57eDA6dC54MCxpbmRleDplfX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSksaT1bXSxhPS0xLG89LTEvMDtmb3IoXz0wO188bi5sZW5ndGg7XysrKXt2YXIgcz10W25bX10uaW5kZXhdO3MueDA+bytkJiYoYSs9MSxlPXMueDApLG89cy54MCxpW2FdfHwoaVthXT1bXSksaVthXS5wdXNoKHMpLHI9ZS1zLngwLHMueDArPXIscy54MSs9cn1yZXR1cm4gaX0odj1rLm5vZGVzKSk7bi51cGRhdGUoayl9cmV0dXJue2NpcmN1bGFyOmIsa2V5OnIsdHJhY2U6YSxndWlkOmgucmFuZHN0cigpLGhvcml6b250YWw6Zix3aWR0aDptLGhlaWdodDpnLG5vZGVQYWQ6YS5ub2RlLnBhZCxub2RlTGluZUNvbG9yOmEubm9kZS5saW5lLmNvbG9yLG5vZGVMaW5lV2lkdGg6YS5ub2RlLmxpbmUud2lkdGgsbGlua0xpbmVDb2xvcjphLmxpbmsubGluZS5jb2xvcixsaW5rTGluZVdpZHRoOmEubGluay5saW5lLndpZHRoLHZhbHVlRm9ybWF0OmEudmFsdWVmb3JtYXQsdmFsdWVTdWZmaXg6YS52YWx1ZXN1ZmZpeCx0ZXh0Rm9udDphLnRleHRmb250LHRyYW5zbGF0ZVg6dS54WzBdKnQud2lkdGgrdC5tYXJnaW4ubCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCt0Lm1hcmdpbi50LGRyYWdQYXJhbGxlbDpmP2c6bSxkcmFnUGVycGVuZGljdWxhcjpmP206ZyxhcnJhbmdlbWVudDphLmFycmFuZ2VtZW50LHNhbmtleTpuLGdyYXBoOmssZm9yY2VMYXlvdXRzOnt9LGludGVyYWN0aW9uU3RhdGU6e2RyYWdJblByb2dyZXNzOiExLGhvdmVyZWQ6ITF9fX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1jKGUuY29sb3IpLGk9ZS5zb3VyY2UubGFiZWwrInwiK2UudGFyZ2V0LmxhYmVsKyJfXyIrcjtyZXR1cm4gZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7Y2lyY3VsYXI6dC5jaXJjdWxhcixrZXk6aSx0cmFjZUlkOnQua2V5LHBvaW50TnVtYmVyOmUucG9pbnROdW1iZXIsbGluazplLHRpbnlDb2xvckh1ZTp1LnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLGxpbmtQYXRoOk0sbGlua0xpbmVDb2xvcjp0LmxpbmtMaW5lQ29sb3IsbGlua0xpbmVXaWR0aDp0LmxpbmtMaW5lV2lkdGgsdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxwYXJlbnQ6dCxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmbG93OmUuZmxvd319ZnVuY3Rpb24gTSgpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LmxpbmsuY2lyY3VsYXIpcmV0dXJuIGU9dC5saW5rLHI9ZS53aWR0aC8yLG49ZS5jaXJjdWxhclBhdGhEYXRhLCJ0b3AiPT09ZS5jaXJjdWxhckxpbmtUeXBlPyJNICIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZK3IpKyIgTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZK3IpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDEgIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiKyhuLnRhcmdldFktbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAxICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDEgIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiKyhuLnNvdXJjZVktbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAxICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVkrcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZLXIpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWS1yKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMCAiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIisobi5zb3VyY2VZLW4ubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDAgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudCtyKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAwICIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIisobi50YXJnZXRZLW4ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMCAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WS1yKSsiTCIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZLXIpKyJaIjoiTSAiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WS1yKSsiIEwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WS1yKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAwICIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIisobi50YXJnZXRZK24ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMCAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAwICIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkwiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIisobi5zb3VyY2VZK24ubGVmdFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMCAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZLXIpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVktcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVkrcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDEgIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrKG4uc291cmNlWStuLmxlZnRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAxICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMSAiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrKG4udGFyZ2V0WStuLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDEgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFkrcikrIkwiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WStyKSsiWiI7dmFyIGUscixuLGE9dC5saW5rLnNvdXJjZS54MSxvPXQubGluay50YXJnZXQueDAscz1pKGEsbyksbD1zKC41KSxjPXMoLjUpLHU9dC5saW5rLnkwLXQubGluay53aWR0aC8yLGY9dC5saW5rLnkwK3QubGluay53aWR0aC8yLGg9dC5saW5rLnkxLXQubGluay53aWR0aC8yLHA9dC5saW5rLnkxK3QubGluay53aWR0aC8yO3JldHVybiJNIithKyIsIit1KyJDIitsKyIsIit1KyIgIitjKyIsIitoKyIgIitvKyIsIitoKyJMIitvKyIsIitwKyJDIitjKyIsIitwKyIgIitsKyIsIitmKyIgIithKyIsIitmKyJaIn19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWMoZS5jb2xvciksbj1sLm5vZGVQYWRBY3Jvc3MsaT10Lm5vZGVQYWQvMjtlLmR4PWUueDEtZS54MCxlLmR5PWUueTEtZS55MDt2YXIgYT1lLmR4LG89TWF0aC5tYXgoLjUsZS5keSkscz0ibm9kZV8iK2UucG9pbnROdW1iZXI7cmV0dXJuIGUuZ3JvdXAmJihzPWgucmFuZHN0cigpKSxlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtpbmRleDplLnBvaW50TnVtYmVyLGtleTpzLHBhcnRPZkdyb3VwOmUucGFydE9mR3JvdXB8fCExLGdyb3VwOmUuZ3JvdXAsdHJhY2VJZDp0LmtleSx0cmFjZTp0LnRyYWNlLG5vZGU6ZSxub2RlUGFkOnQubm9kZVBhZCxub2RlTGluZUNvbG9yOnQubm9kZUxpbmVDb2xvcixub2RlTGluZVdpZHRoOnQubm9kZUxpbmVXaWR0aCx0ZXh0Rm9udDp0LnRleHRGb250LHNpemU6dC5ob3Jpem9udGFsP3QuaGVpZ2h0OnQud2lkdGgsdmlzaWJsZVdpZHRoOk1hdGguY2VpbChhKSx2aXNpYmxlSGVpZ2h0Om8sem9uZVg6LW4sem9uZVk6LWksem9uZVdpZHRoOmErMipuLHpvbmVIZWlnaHQ6bysyKmksbGFiZWxZOnQuaG9yaXpvbnRhbD9lLmR5LzIrMTplLmR4LzIrMSxsZWZ0OjE9PT1lLm9yaWdpbmFsTGF5ZXIsc2l6ZUFjcm9zczp0LndpZHRoLGZvcmNlTGF5b3V0czp0LmZvcmNlTGF5b3V0cyxob3Jpem9udGFsOnQuaG9yaXpvbnRhbCxkYXJrQmFja2dyb3VuZDpyLmdldEJyaWdodG5lc3MoKTw9MTI4LHRpbnlDb2xvckh1ZTp1LnRpbnlSR0IociksdGlueUNvbG9yQWxwaGE6ci5nZXRBbHBoYSgpLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXksZ3JhcGg6dC5ncmFwaCxhcnJhbmdlbWVudDp0LmFycmFuZ2VtZW50LHVuaXF1ZU5vZGVMYWJlbFBhdGhJZDpbdC5ndWlkLHQua2V5LHNdLmpvaW4oIl8iKSxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmaWd1cmU6dH19ZnVuY3Rpb24gRSh0KXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQubm9kZS54MC50b0ZpeGVkKDMpLHQubm9kZS55MC50b0ZpeGVkKDMpKX0pKX1mdW5jdGlvbiBMKHQpe3QuY2FsbChFKX1mdW5jdGlvbiBDKHQsZSl7dC5jYWxsKEwpLGUuYXR0cigiZCIsTSgpKX1mdW5jdGlvbiBQKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlLngxLXQubm9kZS54MH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQubGluay53aWR0aD4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBPKHQpe3JldHVybiBwKHQudHJhbnNsYXRlWCx0LnRyYW5zbGF0ZVkpKyh0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIil9ZnVuY3Rpb24geih0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIiwoZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkpLm9uKCJtb3VzZW1vdmUuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pKS5vbigibW91c2VvdXQuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKX0pKS5vbigiY2xpY2suYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8ci5zZWxlY3QodGhpcyx0LGUpfSkpfWZ1bmN0aW9uIEQodCxlLHIsaSl7dmFyIG89YS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbih0KXtyZXR1cm57eDp0Lm5vZGUueDArdC52aXNpYmxlV2lkdGgvMix5OnQubm9kZS55MCt0LnZpc2libGVIZWlnaHQvMn19KSkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKGEpe2lmKCJmaXhlZCIhPT1hLmFycmFuZ2VtZW50JiYoaC5lbnN1cmVTaW5nbGUoaS5fZnVsbExheW91dC5faW5mb2xheWVyLCJnIiwiZHJhZ2NvdmVyIiwoZnVuY3Rpb24odCl7aS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSksaC5yYWlzZVRvVG9wKHRoaXMpLGEuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz1hLm5vZGUsRihhLm5vZGUpLGEuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci5ub2RlRXZlbnRzLnVuaG92ZXIuYXBwbHkoMCxhLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCksYS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLCJzbmFwIj09PWEuYXJyYW5nZW1lbnQpKXt2YXIgbz1hLnRyYWNlSWQrInwiK2Eua2V5O2EuZm9yY2VMYXlvdXRzW29dP2EuZm9yY2VMYXlvdXRzW29dLmFscGhhKDEpOmZ1bmN0aW9uKHQsZSxyLGkpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9KHRbZV0ueTArdFtlXS55MSkvMix0W2VdLng9KHRbZV0ueDArdFtlXS54MSkvMn0oci5ncmFwaC5ub2Rlcyk7dmFyIGE9ci5ncmFwaC5ub2Rlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9yaWdpbmFsWD09PXIubm9kZS5vcmlnaW5hbFh9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJ0T2ZHcm91cH0pKTtyLmZvcmNlTGF5b3V0c1tlXT1uLmZvcmNlU2ltdWxhdGlvbihhKS5hbHBoYURlY2F5KDApLmZvcmNlKCJjb2xsaWRlIixuLmZvcmNlQ29sbGlkZSgpLnJhZGl1cygoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pKS5zdHJlbmd0aCgxKS5pdGVyYXRpb25zKGwuZm9yY2VJdGVyYXRpb25zKSkuZm9yY2UoImNvbnN0cmFpbiIsZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2E9PT1uLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M/KGEueD1hLmxhc3REcmFnZ2VkWCxhLnk9YS5sYXN0RHJhZ2dlZFkpOihhLnZ4PShhLm9yaWdpbmFsWC1hLngpL2wuZm9yY2VUaWNrc1BlckZyYW1lLGEueT1NYXRoLm1pbihuLnNpemUtYS5keS8yLE1hdGgubWF4KGEuZHkvMixhLnkpKSksdD1NYXRoLm1heCh0LE1hdGguYWJzKGEudngpLE1hdGguYWJzKGEudnkpKX0hbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzJiZ0PC4xJiZuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgpPjAmJm4uZm9yY2VMYXlvdXRzW2VdLmFscGhhKDApfX0oMCxlLGEscikpLnN0b3AoKX0oMCxvLGEpLGZ1bmN0aW9uKHQsZSxyLG4saSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gYSgpe3ZhciBvO2ZvcihvPTA7bzxsLmZvcmNlVGlja3NQZXJGcmFtZTtvKyspci5mb3JjZUxheW91dHNbbl0udGljaygpO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KHIuZ3JhcGgubm9kZXMpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxDKHQuZmlsdGVyKEIocikpLGUpLHIuZm9yY2VMYXlvdXRzW25dLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpO2Vsc2V7dmFyIHM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9cy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1zK3IudmlzaWJsZVdpZHRoLzIsUihyLGkpfX0pKX0odCxlLGEsbyxpKX19KSkub24oImRyYWciLChmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49YS5ldmVudC54LGk9YS5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMik6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oci5zaXplLXIudmlzaWJsZUhlaWdodC8yLGkpKSxyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMiksRihyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksQyh0LmZpbHRlcihCKHIpKSxlKSl9fSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7aWYoImZpeGVkIiE9PXQuYXJyYW5nZW1lbnQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz0hMTtmb3IodmFyIGU9MDtlPHQubm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aDtlKyspdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueD10Lm5vZGUueCx0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS55PXQubm9kZS55OyJzbmFwIiE9PXQuYXJyYW5nZW1lbnQmJlIodCxpKX19KSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gUih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9Yi5jYWxsKCJfZ3VpUmVzdHlsZSIsZSx7Im5vZGUueCI6W3JdLCJub2RlLnkiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbigoZnVuY3Rpb24oKXtlLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXImJmUuX2Z1bGxMYXlvdXQuX2RyYWdDb3Zlci5yZW1vdmUoKX0pKX1mdW5jdGlvbiBGKHQpe3QubGFzdERyYWdnZWRYPXQueDArdC5keC8yLHQubGFzdERyYWdnZWRZPXQueTArdC5keS8yfWZ1bmN0aW9uIEIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUub3JpZ2luYWxYPT09dC5ub2RlLm9yaWdpbmFsWH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89ITE7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5faW5mb2xheWVyLCJnIiwiZmlyc3QtcmVuZGVyIiwoZnVuY3Rpb24oKXtvPSEwfSkpO3ZhciBzPXQuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlcixtPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4geSh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChrLmJpbmQobnVsbCxuKSksYj1lLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXkpLmRhdGEobSxnKTtiLmV4aXQoKS5yZW1vdmUoKSxiLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleSwhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixPKSxiLmVhY2goKGZ1bmN0aW9uKGUscil7dC5fZnVsbERhdGFbcl0uX3NhbmtleT1lO3ZhciBuPSJiZ3NhbmtleS0iK2UudHJhY2UudWlkKyItIityO2guZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2RyYWdnZXJzLCJyZWN0IixuKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0PWEuc2VsZWN0KCIuIituKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KS5hdHRyKCJ4IixlLnRyYW5zbGF0ZVgpLmF0dHIoInkiLGUudHJhbnNsYXRlWSkuY2xhc3NlZCgiYmdzYW5rZXkiLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KX0pKSxiLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgXz1iLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXlMaW5rcykuZGF0YSh2LGcpO18uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5TGlua3MsITApLnN0eWxlKCJmaWxsIiwibm9uZSIpO3ZhciBMPV8uc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleUxpbmspLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSkubWFwKEEuYmluZChudWxsLHQpKX0pLGcpO0wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKGwuY24uc2Fua2V5TGluaywhMCkuY2FsbCh6LGIsaS5saW5rRXZlbnRzKSxMLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT91LnRpbnlSR0IoYyh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT91Lm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIEkodCk/dC5saW5rTGluZVdpZHRoOjF9KSkuYXR0cigiZCIsTSgpKSxMLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29udGV4dC5zdGF0aWNQbG90fHxvfHxzPzE6MH0pKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxMLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgQz1iLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKHYsZyk7Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobC5jbi5zYW5rZXlOb2RlU2V0LCEwKSxDLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZSJmaXhlZCI6cmV0dXJuImRlZmF1bHQiO2Nhc2UicGVycGVuZGljdWxhciI6cmV0dXJuIm5zLXJlc2l6ZSI7ZGVmYXVsdDpyZXR1cm4ibW92ZSJ9fSkpO3ZhciBSPUMuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleU5vZGUpLmRhdGEoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgubm9kZXM7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsWD0odFtlXS54MCt0W2VdLngxKS8yLHRbZV0ub3JpZ2luYWxZPSh0W2VdLnkwK3RbZV0ueTEpLzIsLTE9PT1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpJiZyLnB1c2godFtlXS5vcmlnaW5hbFgpO2ZvcihyLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfShlKSxlLm1hcChTLmJpbmQobnVsbCx0KSl9KSxnKTtSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleU5vZGUsITApLmNhbGwoRSkuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhb3x8ZS5wYXJ0T2ZHcm91cD8wOjF9KSksUi5jYWxsKHosYixpLm5vZGVFdmVudHMpLmNhbGwoRCxMLGksdCksUi50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLmNhbGwoRSkuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJ0T2ZHcm91cD8wOjF9KSksUi5leGl0KCkudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoIi4iK2wuY24ubm9kZVJlY3QpLmRhdGEodik7Ri5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobC5jbi5ub2RlUmVjdCwhMCkuY2FsbChQKSxGLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkpLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gdS50aW55UkdCKGModC5ub2RlTGluZUNvbG9yKSl9KSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHUub3BhY2l0eSh0Lm5vZGVMaW5lQ29sb3IpfSkpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKSxGLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuY2FsbChQKTt2YXIgQj1SLnNlbGVjdEFsbCgiLiIrbC5jbi5ub2RlTGFiZWwpLmRhdGEodik7Qi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQobC5jbi5ub2RlTGFiZWwsITApLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0IiksQi5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlLmxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWEuc2VsZWN0KHRoaXMpO2YuZm9udChyLGUudGV4dEZvbnQpLHguY29udmVydFRvVHNwYW5zKHIsdCl9KSkuc3R5bGUoInRleHQtc2hhZG93Iix4Lm1ha2VUZXh0U2hhZG93KHQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcikpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyJlbmQiOiJzdGFydCJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9YS5zZWxlY3QodGhpcykscj14LmxpbmVDb3VudChlKSxuPXQudGV4dEZvbnQuc2l6ZSooKHItMSkqVC13KSxpPXQubm9kZUxpbmVXaWR0aC8yKzMsbz0oKHQuaG9yaXpvbnRhbD90LnZpc2libGVIZWlnaHQ6dC52aXNpYmxlV2lkdGgpLW4pLzI7dC5ob3Jpem9udGFsJiYodC5sZWZ0P2k9LWk6aSs9dC52aXNpYmxlV2lkdGgpO3ZhciBzPXQuaG9yaXpvbnRhbD8iIjoic2NhbGUoLTEsMSkiK2QoOTApO3JldHVybiBwKHQuaG9yaXpvbnRhbD9pOm8sdC5ob3Jpem9udGFsP286aSkrc30pKSxCLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ2NiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9ndXAiOjQ5NSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vY29uc3RhbnRzIjo5MTUsIkBwbG90bHkvZDMiOjU4LCJAcGxvdGx5L2QzLXNhbmtleSI6NTcsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NiwiZDMtZm9yY2UiOjEwNiwiZDMtaW50ZXJwb2xhdGUiOjExMSx0aW55Y29sb3IyOjMwN31dLDkyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10LmNkWzBdLnRyYWNlLGk9bi5fc2Fua2V5LmdyYXBoLm5vZGVzLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZighby5wYXJ0T2ZHcm91cCl7dmFyIHM9WyhvLngwK28ueDEpLzIsKG8ueTArby55MSkvMl07InYiPT09bi5vcmllbnRhdGlvbiYmcy5yZXZlcnNlKCksZSYmZS5jb250YWlucyhzLCExLGEsdCkmJnIucHVzaCh7cG9pbnROdW1iZXI6by5wb2ludE51bWJlcn0pfX1yZXR1cm4gcn19LHt9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLnRleHR0ZW1wbGF0ZSx0LCJ0eHQiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo0OTh9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5wYXR0ZXJuLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seHBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx4aG92ZXJmb3JtYXQ6bigieCIpLHlob3ZlcmZvcm1hdDpuKCJ5Iiksc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0dGVtcGxhdGU6aSh7fSx7fSksaG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6Zi5ldmVudERhdGFLZXlzfSksbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6aCh7fSxsLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LGZpbGxwYXR0ZXJuOmMsbWFya2VyOmgoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnUuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTpoKHt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIubGluZSIse2FuaW06ITB9KSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIm5vbmUiXSxhcnJheU9rOiEwLGRmbHQ6Im5vbmUiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlciIse2FuaW06ITB9KSksc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6Im1pZGRsZSBjZW50ZXIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Zm9udDpzKHtlZGl0VHlwZToiY2FsYyIsY29sb3JFZGl0VHlwZToic3R5bGUiLGFycmF5T2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjozODIsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi9jb25zdGFudHMiOjkyNn1dLDkyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4vc3VidHlwZXMiKSxjPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksdT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGY9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGgodCxlLHIsbixpLG8scyl7dmFyIGM9ZS5fbGVuZ3RoLHU9dC5fZnVsbExheW91dCxmPXIuX2lkLGg9bi5faWQscD11Ll9maXJzdFNjYXR0ZXJbbShlKV09PT1lLnVpZCxkPShnKGUsdSxyLG4pfHx7fSkub3JpZW50YXRpb24sdj1lLmZpbGw7ci5fbWluRHRpY2s9MCxuLl9taW5EdGljaz0wO3ZhciB5PXtwYWRkZWQ6ITB9LHg9e3BhZGRlZDohMH07cyYmKHkucHBhZD14LnBwYWQ9cyk7dmFyIGI9YzwyfHxpWzBdIT09aVtjLTFdfHxvWzBdIT09b1tjLTFdO2ImJigidG96ZXJveCI9PT12fHwidG9uZXh0eCI9PT12JiYocHx8ImgiPT09ZCkpP3kudG96ZXJvPSEwOihlLmVycm9yX3l8fHt9KS52aXNpYmxlfHwidG9uZXh0eSIhPT12JiYidG96ZXJveSIhPT12JiYobC5oYXNNYXJrZXJzKGUpfHxsLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJigidG96ZXJveSI9PT12fHwidG9uZXh0eSI9PT12JiYocHx8InYiPT09ZCkpP3gudG96ZXJvPSEwOiJ0b25leHR4IiE9PXYmJiJ0b3plcm94IiE9PXZ8fCh4LnBhZGRlZD0hMSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGwuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj0iYXJlYSI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIHM9e3R5cGU6ImxpbmVhciJ9O2Euc2V0Q29udmVydChzKTtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxmPTA7ZjxlO2YrKyl1W2ZdPXIoY1tmXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlPyItIitlOiIiKX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPXQuc3RhY2tncm91cDtpZihpKXt2YXIgYT1lLl9zY2F0dGVyU3RhY2tPcHRzW3IuX2lkK24uX2lkXVtpXSxvPSJ2Ij09PWEub3JpZW50YXRpb24/bjpyO3JldHVybiJsaW5lYXIiPT09by50eXBlfHwibG9nIj09PW8udHlwZT9hOnZvaWQgMH19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxtLHYseSx4LGI9dC5fZnVsbExheW91dCxfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx3PWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxUPV8ubWFrZUNhbGNkYXRhKGUsIngiKSxrPXcubWFrZUNhbGNkYXRhKGUsInkiKSxBPW8oZSxfLCJ4IixUKSxNPW8oZSx3LCJ5IixrKSxTPUEudmFscyxFPU0udmFscyxMPWUuX2xlbmd0aCxDPW5ldyBBcnJheShMKSxQPWUuaWRzLEk9ZyhlLGIsXyx3KSxPPSExO2QoYixlKTt2YXIgeixEPSJ4IixSPSJ5IjtJPyhpLnB1c2hVbmlxdWUoSS50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9InYiPT09SS5vcmllbnRhdGlvbik/KFI9InMiLHo9IngiKTooRD0icyIsej0ieSIpLHk9ImludGVycG9sYXRlIj09PUkuc3RhY2tnYXBzKTpoKHQsZSxfLHcsUyxFLHAoZSxMKSk7dmFyIEY9ISFlLnhwZXJpb2RhbGlnbm1lbnQsQj0hIWUueXBlcmlvZGFsaWdubWVudDtmb3IobD0wO2w8TDtsKyspe3ZhciBOPUNbbF09e30saj1uKFNbbF0pLFU9bihFW2xdKTtqJiZVPyhOW0RdPVNbbF0sTltSXT1FW2xdLEYmJihOLm9yaWdfeD1UW2xdLE4ueEVuZD1BLmVuZHNbbF0sTi54U3RhcnQ9QS5zdGFydHNbbF0pLEImJihOLm9yaWdfeT1rW2xdLE4ueUVuZD1NLmVuZHNbbF0sTi55U3RhcnQ9TS5zdGFydHNbbF0pKTpJJiYocj9qOlUpPyhOW3pdPXI/U1tsXTpFW2xdLE4uZ2FwPSEwLHk/KE4ucz1zLE89ITApOk4ucz0wKTpOW0RdPU5bUl09cyxQJiYoTi5pZD1TdHJpbmcoUFtsXSkpfWlmKHUoQyxlKSxjKHQsZSksZihDLGUpLEkpe2ZvcihsPTA7bDxDLmxlbmd0aDspQ1tsXVt6XT09PXM/Qy5zcGxpY2UobCwxKTpsKys7aWYoaS5zb3J0KEMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbel0tZVt6XXx8dC5pLWUuaX0pKSxPKXtmb3IobD0wO2w8Qy5sZW5ndGgtMSYmQ1tsXS5nYXA7KWwrKztmb3IoKHg9Q1tsXS5zKXx8KHg9Q1tsXS5zPTApLG09MDttPGw7bSsrKUNbbV0ucz14O2Zvcih2PUMubGVuZ3RoLTE7dj5sJiZDW3ZdLmdhcDspdi0tO2Zvcih4PUNbdl0ucyxtPUMubGVuZ3RoLTE7bT52O20tLSlDW21dLnM9eDtmb3IoO2w8djspaWYoQ1srK2xdLmdhcCl7Zm9yKG09bCsxO0NbbV0uZ2FwOyltKys7Zm9yKHZhciBWPUNbbC0xXVt6XSxIPUNbbC0xXS5zLHE9KENbbV0ucy1IKS8oQ1ttXVt6XS1WKTtsPG07KUNbbF0ucz1IKyhDW2xdW3pdLVYpKnEsbCsrfX19cmV0dXJuIEN9LGNhbGNNYXJrZXJTaXplOnAsY2FsY0F4aXNFeHBhbnNpb246aCxzZXRGaXJzdFNjYXR0ZXI6ZCxnZXRTdGFja09wdHM6Z319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuL2FycmF5c190b19jYWxjZGF0YSI6OTIxLCIuL2NhbGNfc2VsZWN0aW9uIjo5MjQsIi4vY29sb3JzY2FsZV9jYWxjIjo5MjUsIi4vc3VidHlwZXMiOjk0NywiZmFzdC1pc251bWVyaWMiOjE4NX1dLDkyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHsiLi4vLi4vbGliIjo0OTh9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthLmhhc0xpbmVzKGUpJiZuKGUsImxpbmUiKSYmaSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSxhLmhhc01hcmtlcnMoZSkmJihuKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNjksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjozNzIsIi4vc3VidHlwZXMiOjk0N31dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhLG8pe2lbbl09ITA7dmFyIHM9e2k6bnVsbCxnYXA6ITAsczowfTtpZihzW29dPXIsdC5zcGxpY2UoZSwwLHMpLGUmJnI9PT10W2UtMV1bb10pe3ZhciBsPXRbZS0xXTtzLnM9bC5zLHMuaT1sLmkscy5nYXA9bC5nYXB9ZWxzZSBhJiYocy5zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbZS0xXSxhPXRbZSsxXTtyZXR1cm4gYT9pP2kucysoYS5zLWkucykqKHItaVtuXSkvKGFbbl0taVtuXSk6YS5zOmkuc30odCxlLHIsbykpO2V8fCh0WzBdLnQ9dFsxXS50LHRbMF0udHJhY2U9dFsxXS50cmFjZSxkZWxldGUgdFsxXS50LGRlbGV0ZSB0WzFdLnRyYWNlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnhheGlzLGE9ZS55YXhpcyxvPXIuX2lkK2EuX2lkLHM9dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1tvXTtpZihzKXt2YXIgbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVD10LmNhbGNkYXRhO2Zvcih2YXIgayBpbiBzKXt2YXIgQT0odj1zW2tdKS50cmFjZUluZGljZXM7aWYoQS5sZW5ndGgpe2Zvcih5PSJpbnRlcnBvbGF0ZSI9PT12LnN0YWNrZ2Fwcyx4PXYuZ3JvdXBub3JtLCJ2Ij09PXYub3JpZW50YXRpb24/KGI9IngiLF89InkiKTooYj0ieSIsXz0ieCIpLHc9bmV3IEFycmF5KEEubGVuZ3RoKSxsPTA7bDx3Lmxlbmd0aDtsKyspd1tsXT0hMTtwPVRbQVswXV07dmFyIE09bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IobD0wO2w8cC5sZW5ndGg7bCsrKU1bbF09cFtsXVtiXTtmb3IobD0xO2w8QS5sZW5ndGg7bCsrKXtmb3IoaD1UW0FbbF1dLGM9dT0wO2M8aC5sZW5ndGg7YysrKXtmb3IoZD1oW2NdW2JdO2Q+TVt1XSYmdTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKys7aWYoZCE9PU1bdV0pe2ZvcihmPTA7ZjxsO2YrKylpKFRbQVtmXV0sdSxkLGYsdyx5LGIpO00uc3BsaWNlKHUsMCxkKX11Kyt9Zm9yKDt1PE0ubGVuZ3RoO3UrKylpKGgsYyxNW3VdLGwsdyx5LGIpLGMrK312YXIgUz1NLmxlbmd0aDtmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXtmb3IobT1wW2NdW19dPXBbY10ucyxsPTE7bDxBLmxlbmd0aDtsKyspKGg9VFtBW2xdXSlbMF0udHJhY2UuX3Jhd0xlbmd0aD1oWzBdLnRyYWNlLl9sZW5ndGgsaFswXS50cmFjZS5fbGVuZ3RoPVMsbSs9aFtjXS5zLGhbY11bX109bTtpZih4KWZvcihnPSgiZnJhY3Rpb24iPT09eD9tOm0vMTAwKXx8MSxsPTA7bDxBLmxlbmd0aDtsKyspe3ZhciBFPVRbQVtsXV1bY107RVtfXS89ZyxFLnNOb3JtPUUucy9nfX1mb3IobD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgTD0oaD1UW0FbbF1dKVswXS50cmFjZSxDPW4uY2FsY01hcmtlclNpemUoTCxMLl9yYXdMZW5ndGgpLFA9QXJyYXkuaXNBcnJheShDKTtpZihDJiZ3W2xdfHxQKXt2YXIgST1DO2ZvcihDPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylDW2NdPWhbY10uZ2FwPzA6UD9JW2hbY10uaV06SX12YXIgTz1uZXcgQXJyYXkoUyksej1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKU9bY109aFtjXS54LHpbY109aFtjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxMLHIsYSxPLHosQyksaFswXS50Lm9yaWVudGF0aW9uPXYub3JpZW50YXRpb259fX19fX0seyIuL2NhbGMiOjkyM31dLDkyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoInNjYXR0ZXIiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoIm5vbmUiIT09biYmInRvc2VsZiIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCwidG9uZXh0eSI9PT1ufHwidG9uZXh0eCI9PT1uKSlmb3IodmFyIGk9ZS0xO2k+PTA7aS0tKXt2YXIgYT10W2ldO2lmKCJzY2F0dGVyIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSw5Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9zdWJ0eXBlcyIpLGw9dCgiLi94eV9kZWZhdWx0cyIpLGM9dCgiLi9wZXJpb2RfZGVmYXVsdHMiKSx1PXQoIi4vc3RhY2tfZGVmYXVsdHMiKSxmPXQoIi4vbWFya2VyX2RlZmF1bHRzIiksaD10KCIuL2xpbmVfZGVmYXVsdHMiKSxwPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLGQ9dCgiLi90ZXh0X2RlZmF1bHRzIiksbT10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGc9dCgiLi4vLi4vbGliIikuY29lcmNlUGF0dGVybjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdil7ZnVuY3Rpb24geShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciB4PWwodCxlLHYseSk7aWYoeHx8KGUudmlzaWJsZT0hMSksZS52aXNpYmxlKXtjKHQsZSx2LHkpLHkoInhob3ZlcmZvcm1hdCIpLHkoInlob3ZlcmZvcm1hdCIpO3ZhciBiPXUodCxlLHYseSksXz0hYiYmeDxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7eSgidGV4dCIpLHkoImhvdmVydGV4dCIpLHkoIm1vZGUiLF8pLHMuaGFzTGluZXMoZSkmJihoKHQsZSxyLHYseSkscCh0LGUseSkseSgiY29ubmVjdGdhcHMiKSx5KCJsaW5lLnNpbXBsaWZ5IikpLHMuaGFzTWFya2VycyhlKSYmZih0LGUscix2LHkse2dyYWRpZW50OiEwfSkscy5oYXNUZXh0KGUpJiYoeSgidGV4dHRlbXBsYXRlIiksZCh0LGUsdix5KSk7dmFyIHc9W107KHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKSYmKHkoImNsaXBvbmF4aXMiKSx5KCJtYXJrZXIubWF4ZGlzcGxheWVkIiksdy5wdXNoKCJwb2ludHMiKSkseSgiZmlsbCIsYj9iLmZpbGxEZmx0OiJub25lIiksIm5vbmUiIT09ZS5maWxsJiYobSh0LGUscix5KSxzLmhhc0xpbmVzKGUpfHxwKHQsZSx5KSxnKHksImZpbGxwYXR0ZXJuIixlLmZpbGxjb2xvciwhMSkpO3ZhciBUPShlLmxpbmV8fHt9KS5jb2xvcixrPShlLm1hcmtlcnx8e30pLmNvbG9yOyJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8dy5wdXNoKCJmaWxscyIpLHkoImhvdmVyb24iLHcuam9pbigiKyIpfHwicG9pbnRzIiksImZpbGxzIiE9PWUuaG92ZXJvbiYmeSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBBPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO0EodCxlLFR8fGt8fHIse2F4aXM6InkifSksQSh0LGUsVHx8a3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx5KX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuL2F0dHJpYnV0ZXMiOjkyMiwiLi9jb25zdGFudHMiOjkyNiwiLi9maWxsY29sb3JfZGVmYXVsdHMiOjkzMCwiLi9saW5lX2RlZmF1bHRzIjo5MzUsIi4vbGluZV9zaGFwZV9kZWZhdWx0cyI6OTM3LCIuL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuL3N0YWNrX2RlZmF1bHRzIjo5NDUsIi4vc3VidHlwZXMiOjk0NywiLi90ZXh0X2RlZmF1bHRzIjo5NDgsIi4veHlfZGVmYXVsdHMiOjk0OX1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTh9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9e19mdWxsTGF5b3V0OnJ9LG89bi5nZXRGcm9tVHJhY2UoYSxlLCJ4Iikscz1uLmdldEZyb21UcmFjZShhLGUsInkiKTtyZXR1cm4gaS54TGFiZWw9bi50aWNrVGV4dChvLG8uYzJsKHQueCksITApLnRleHQsaS55TGFiZWw9bi50aWNrVGV4dChzLHMuYzJsKHQueSksITApLnRleHQsaX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDkzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKCJub25lIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOiIiO3ZhciBvPWUubWNjfHwodC5tYXJrZXJ8fHt9KS5jb2xvcixzPWUubWxjY3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS5jb2xvcjtyZXR1cm4oYT1vJiZuLm9wYWNpdHkobyk/bzpzJiZuLm9wYWNpdHkocykmJihlLm1sd3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS53aWR0aCk/czoiIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi9zdWJ0eXBlcyI6OTQ3fV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4vZ2V0X3RyYWNlX2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD1uLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10LmNkLGY9dVswXS50cmFjZSxoPXQueGEscD10LnlhLGQ9aC5jMnAoZSksbT1wLmMycChyKSxnPVtkLG1dLHY9Zi5ob3Zlcm9ufHwiIix5PS0xIT09Zi5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT8zOi41LHg9ISFmLnhwZXJpb2RhbGlnbm1lbnQsYj0hIWYueXBlcmlvZGFsaWdubWVudDtpZigtMSE9PXYuaW5kZXhPZigicG9pbnRzIikpe3ZhciBfPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHksdC5tcmN8fDApLHI9aC5jMnAodC54KS1kLG49cC5jMnAodC55KS1tO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktZSwxLXkvZSl9LHc9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsKGZ1bmN0aW9uKHQpe2lmKHgpe3ZhciBlPWguYzJwKHQueFN0YXJ0KSxyPWguYzJwKHQueEVuZCk7cmV0dXJuIGQ+PU1hdGgubWluKGUscikmJmQ8PU1hdGgubWF4KGUscik/MDoxLzB9dmFyIG49TWF0aC5tYXgoMyx0Lm1yY3x8MCksaT0xLTEvbixhPU1hdGguYWJzKGguYzJwKHQueCktZCk7cmV0dXJuIGE8bj9pKmEvbjphLW4raX0pLChmdW5jdGlvbih0KXtpZihiKXt2YXIgZT1wLmMycCh0LnlTdGFydCkscj1wLmMycCh0LnlFbmQpO3JldHVybiBtPj1NYXRoLm1pbihlLHIpJiZtPD1NYXRoLm1heChlLHIpPzA6MS8wfXZhciBuPU1hdGgubWF4KDMsdC5tcmN8fDApLGk9MS0xL24sYT1NYXRoLmFicyhwLmMycCh0LnkpLW0pO3JldHVybiBhPG4/aSphL246YS1uK2l9KSxfKTtpZihpLmdldENsb3Nlc3QodSx3LHQpLCExIT09dC5pbmRleCl7dmFyIFQ9dVt0LmluZGV4XSxrPWguYzJwKFQueCwhMCksQT1wLmMycChULnksITApLE09VC5tcmN8fDE7dC5pbmRleD1ULmk7dmFyIFM9dVswXS50Lm9yaWVudGF0aW9uLEU9UyYmKFQuc05vcm18fFQucyksTD0iaCI9PT1TP0U6dm9pZCAwIT09VC5vcmlnX3g/VC5vcmlnX3g6VC54LEM9InYiPT09Uz9FOnZvaWQgMCE9PVQub3JpZ195P1Qub3JpZ195OlQueTtyZXR1cm4gbi5leHRlbmRGbGF0KHQse2NvbG9yOm8oZixUKSx4MDprLU0seDE6aytNLHhMYWJlbFZhbDpMLHkwOkEtTSx5MTpBK00seUxhYmVsVmFsOkMsc3Bpa2VEaXN0YW5jZTpfKFQpLGhvdmVydGVtcGxhdGU6Zi5ob3ZlcnRlbXBsYXRlfSksbChULGYsdCksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKFQsZix0KSxbdF19fWlmKC0xIT09di5pbmRleE9mKCJmaWxscyIpJiZmLl9wb2x5Z29ucyl7dmFyIFAsSSxPLHosRCxSLEYsQixOLGo9Zi5fcG9seWdvbnMsVT1bXSxWPSExLEg9MS8wLHE9LTEvMCxHPTEvMCxZPS0xLzA7Zm9yKFA9MDtQPGoubGVuZ3RoO1ArKykoTz1qW1BdKS5jb250YWlucyhnKSYmKFY9IVYsVS5wdXNoKE8pLEc9TWF0aC5taW4oRyxPLnltaW4pLFk9TWF0aC5tYXgoWSxPLnltYXgpKTtpZihWKXt2YXIgVz0oKEc9TWF0aC5tYXgoRywwKSkrKFk9TWF0aC5taW4oWSxwLl9sZW5ndGgpKSkvMjtmb3IoUD0wO1A8VS5sZW5ndGg7UCsrKWZvcih6PVVbUF0ucHRzLEk9MTtJPHoubGVuZ3RoO0krKykoQj16W0ktMV1bMV0pPlchPShOPXpbSV1bMV0pPj1XJiYoUj16W0ktMV1bMF0sRj16W0ldWzBdLE4tQiYmKEQ9UisoRi1SKSooVy1CKS8oTi1CKSxIPU1hdGgubWluKEgsRCkscT1NYXRoLm1heChxLEQpKSk7SD1NYXRoLm1heChILDApLHE9TWF0aC5taW4ocSxoLl9sZW5ndGgpO3ZhciBYPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShmLmZpbGxjb2xvcik/WD1mLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGYubGluZXx8e30pLmNvbG9yKSYmKFg9Zi5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHgwOkgseDE6cSx5MDpXLHkxOlcsY29sb3I6WCxob3ZlcnRlbXBsYXRlOiExfSksZGVsZXRlIHQuaW5kZXgsZi50ZXh0JiYhQXJyYXkuaXNBcnJheShmLnRleHQpP3QudGV4dD1TdHJpbmcoZi50ZXh0KTp0LnRleHQ9Zi5uYW1lLFt0XX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vZ2V0X3RyYWNlX2NvbG9yIjo5MzJ9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz17aGFzTGluZXM6bi5oYXNMaW5lcyxoYXNNYXJrZXJzOm4uaGFzTWFya2VycyxoYXNUZXh0Om4uaGFzVGV4dCxpc0J1YmJsZTpuLmlzQnViYmxlLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLGFycmF5c1RvQ2FsY2RhdGE6dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOnQoIi4vbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxhbmltYXRhYmxlOiEwLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuL2FycmF5c190b19jYWxjZGF0YSI6OTIxLCIuL2F0dHJpYnV0ZXMiOjkyMiwiLi9jYWxjIjo5MjMsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6OTI3LCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo5MjgsIi4vZGVmYXVsdHMiOjkyOSwiLi9mb3JtYXRfbGFiZWxzIjo5MzEsIi4vaG92ZXIiOjkzMywiLi9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi9wbG90Ijo5NDMsIi4vc2VsZWN0Ijo5NDQsIi4vc3R5bGUiOjk0NiwiLi9zdWJ0eXBlcyI6OTQ3fV0sOTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxpKHQsImxpbmUiKSk/YSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi4vLi4vbGliIjo0OTh9XSw5MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGk9bi5CQUROVU0sYT1uLkxPR19DTElQLG89YSsuNSxzPWEtLjUsbD10KCIuLi8uLi9saWIiKSxjPWwuc2VnbWVudHNJbnRlcnNlY3QsdT1sLmNvbnN0cmFpbixmPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFM9ZS54YXhpcyxFPWUueWF4aXMsTD0ibG9nIj09PVMudHlwZSxDPSJsb2ciPT09RS50eXBlLFA9Uy5fbGVuZ3RoLEk9RS5fbGVuZ3RoLE89ZS5jb25uZWN0R2Fwcyx6PWUuYmFzZVRvbGVyYW5jZSxEPWUuc2hhcGUsUj0ibGluZWFyIj09PUQsRj1lLmZpbGwmJiJub25lIiE9PWUuZmlsbCxCPVtdLE49Zi5taW5Ub2xlcmFuY2Usaj10Lmxlbmd0aCxVPW5ldyBBcnJheShqKSxWPTA7ZnVuY3Rpb24gSChyKXt2YXIgbj10W3JdO2lmKCFuKXJldHVybiExO3ZhciBhPWUubGluZWFyaXplZD9TLmwycChuLngpOlMuYzJwKG4ueCksbD1lLmxpbmVhcml6ZWQ/RS5sMnAobi55KTpFLmMycChuLnkpO2lmKGE9PT1pKXtpZihMJiYoYT1TLmMycChuLngsITApKSxhPT09aSlyZXR1cm4hMTtDJiZsPT09aSYmKGEqPU1hdGguYWJzKFMuX20qSSooUy5fbT4wP286cykvKEUuX20qUCooRS5fbT4wP286cykpKSksYSo9MWUzfWlmKGw9PT1pKXtpZihDJiYobD1FLmMycChuLnksITApKSxsPT09aSlyZXR1cm4hMTtsKj0xZTN9cmV0dXJuW2EsbF19ZnVuY3Rpb24gcSh0LGUscixuKXt2YXIgaT1yLXQsYT1uLWUsbz0uNS10LHM9LjUtZSxsPWkqaSthKmEsYz1pKm8rYSpzO2lmKGM+MCYmYzxsKXt2YXIgdT1vKmEtcyppO2lmKHUqdTxsKXJldHVybiEwfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9dFswXS9QLG49dFsxXS9JLGk9TWF0aC5tYXgoMCwtcixyLTEsLW4sbi0xKTtyZXR1cm4gaSYmdm9pZCAwIT09QSYmcShyLG4sQSxNKSYmKGk9MCksaSYmZSYmcShyLG4sZVswXS9QLGVbMV0vSSkmJihpPTApLCgxK2YudG9sZXJhbmNlR3Jvd3RoKmkpKnp9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXRbMF0tZVswXSxuPXRbMV0tZVsxXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXZhciBXLFgsWixKLEssUSwkLHR0PWYubWF4U2NyZWVuc0F3YXksZXQ9LVAqdHQscnQ9UCooMSt0dCksbnQ9LUkqdHQsaXQ9SSooMSt0dCksYXQ9W1tldCxudCxydCxudF0sW3J0LG50LHJ0LGl0XSxbcnQsaXQsZXQsaXRdLFtldCxpdCxldCxudF1dO2Z1bmN0aW9uIG90KHQpe2lmKHRbMF08ZXR8fHRbMF0+cnR8fHRbMV08bnR8fHRbMV0+aXQpcmV0dXJuW3UodFswXSxldCxydCksdSh0WzFdLG50LGl0KV19ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJih0WzBdPT09ZXR8fHRbMF09PT1ydCl8fCh0WzFdPT09ZVsxXSYmKHRbMV09PT1udHx8dFsxXT09PWl0KXx8dm9pZCAwKX1mdW5jdGlvbiBsdCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIGE9b3Qobiksbz1vdChpKSxzPVtdO2lmKGEmJm8mJnN0KGEsbykpcmV0dXJuIHM7YSYmcy5wdXNoKGEpLG8mJnMucHVzaChvKTt2YXIgYz0yKmwuY29uc3RyYWluKChuW3RdK2lbdF0pLzIsZSxyKS0oKGF8fG4pW3RdKyhvfHxpKVt0XSk7YyYmKChhJiZvP2M+MD09YVt0XT5vW3RdP2E6bzphfHxvKVt0XSs9Yyk7cmV0dXJuIHN9fWZ1bmN0aW9uIGN0KHQpe3ZhciBlPXRbMF0scj10WzFdLG49ZT09PVVbVi0xXVswXSxpPXI9PT1VW1YtMV1bMV07aWYoIW58fCFpKWlmKFY+MSl7dmFyIGE9ZT09PVVbVi0yXVswXSxvPXI9PT1VW1YtMl1bMV07biYmKGU9PT1ldHx8ZT09PXJ0KSYmYT9vP1YtLTpVW1YtMV09dDppJiYocj09PW50fHxyPT09aXQpJiZvP2E/Vi0tOlVbVi0xXT10OlVbVisrXT10fWVsc2UgVVtWKytdPXR9ZnVuY3Rpb24gdXQodCl7VVtWLTFdWzBdIT09dFswXSYmVVtWLTFdWzFdIT09dFsxXSYmY3QoW1osSl0pLGN0KHQpLEs9bnVsbCxaPUo9MH1mdW5jdGlvbiBmdCh0KXtpZihBPXRbMF0vUCxNPXRbMV0vSSxXPXRbMF08ZXQ/ZXQ6dFswXT5ydD9ydDowLFg9dFsxXTxudD9udDp0WzFdPml0P2l0OjAsV3x8WCl7aWYoVilpZihLKXt2YXIgZT0kKEssdCk7ZS5sZW5ndGg+MSYmKHV0KGVbMF0pLFVbVisrXT1lWzFdKX1lbHNlIFE9JChVW1YtMV0sdClbMF0sVVtWKytdPVE7ZWxzZSBVW1YrK109W1d8fHRbMF0sWHx8dFsxXV07dmFyIHI9VVtWLTFdO1cmJlgmJihyWzBdIT09V3x8clsxXSE9PVgpPyhLJiYoWiE9PVcmJkohPT1YP2N0KFomJko/KG49SyxhPShpPXQpWzBdLW5bMF0sbz0oaVsxXS1uWzFdKS9hLChuWzFdKmlbMF0taVsxXSpuWzBdKS9hPjA/W28+MD9ldDpydCxpdF06W28+MD9ydDpldCxudF0pOltafHxXLEp8fFhdKTpaJiZKJiZjdChbWixKXSkpLGN0KFtXLFhdKSk6Wi1XJiZKLVgmJmN0KFtXfHxaLFh8fEpdKSxLPXQsWj1XLEo9WH1lbHNlIEsmJnV0KCQoSyx0KVswXSksVVtWKytdPXQ7dmFyIG4saSxhLG99Zm9yKCJsaW5lYXIiPT09RHx8InNwbGluZSI9PT1EPyQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MDtpPDQ7aSsrKXt2YXIgYT1hdFtpXSxvPWModFswXSx0WzFdLGVbMF0sZVsxXSxhWzBdLGFbMV0sYVsyXSxhWzNdKTtvJiYoIW58fE1hdGguYWJzKG8ueC1yWzBdWzBdKT4xfHxNYXRoLmFicyhvLnktclswXVsxXSk+MSkmJihvPVtvLngsby55XSxuJiZZKG8sdCk8WShyWzBdLHQpP3IudW5zaGlmdChvKTpyLnB1c2gobyksbisrKX1yZXR1cm4gcn06Imh2Ij09PUR8fCJ2aCI9PT1EPyQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPW90KHQpLGk9b3QoZSk7cmV0dXJuIG4mJmkmJnN0KG4saSl8fChuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpKSxyfToiaHZoIj09PUQ/JD1sdCgwLGV0LHJ0KToidmh2Ij09PUQmJigkPWx0KDEsbnQsaXQpKSxyPTA7cjxqO3IrKylpZihuPUgocikpe2ZvcihWPTAsSz1udWxsLGZ0KG4pLHIrKztyPGo7cisrKXtpZighKGg9SChyKSkpe2lmKE8pY29udGludWU7YnJlYWt9aWYoUiYmZS5zaW1wbGlmeSl7dmFyIGh0PUgocisxKTtpZih5PVkoaCxuKSxGJiYoMD09PVZ8fFY9PT1qLTEpfHwhKHk8RyhoLGh0KSpOKSl7Zm9yKGc9WyhoWzBdLW5bMF0pL3ksKGhbMV0tblsxXSkveV0scD1uLHg9eSxiPXc9VD0wLG09ITEsYT1oLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoZD1odCxodD1IKHIrMSksIWQpe2lmKE8pY29udGludWU7YnJlYWt9aWYoaz0odj1bZFswXS1uWzBdLGRbMV0tblsxXV0pWzBdKmdbMV0tdlsxXSpnWzBdLHc9TWF0aC5taW4odyxrKSwoVD1NYXRoLm1heChULGspKS13PkcoZCxodCkpYnJlYWs7YT1kLChfPXZbMF0qZ1swXSt2WzFdKmdbMV0pPng/KHg9XyxoPWQsbT0hMSk6XzxiJiYoYj1fLHA9ZCxtPSEwKX1pZihtPyhmdChoKSxhIT09cCYmZnQocCkpOihwIT09biYmZnQocCksYSE9PWgmJmZ0KGgpKSxmdChhKSxyPj10Lmxlbmd0aHx8IWQpYnJlYWs7ZnQoZCksbj1kfX1lbHNlIGZ0KGgpfUsmJmN0KFtafHxLWzBdLEp8fEtbMV1dKSxCLnB1c2goVS5zbGljZSgwLFYpKX1yZXR1cm4gQn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi9jb25zdGFudHMiOjkyNn1dLDkzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDkzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17dG9uZXh0eDoxLHRvbmV4dHk6MSx0b25leHQ6MX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGM9e30sdT0hMSxmPS0xLGg9MCxwPS0xO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspKG89KGk9clthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIpP28gaW4gYz9sPWNbb106KGw9Y1tvXT1oLGgrKyk6aS5maWxsIGluIG4mJnA+PTA/bD1wOihsPXA9aCxoKyspLGw8ZiYmKHU9ITApLGkuX2dyb3VwSW5kZXg9Zj1sO3ZhciBkPXIuc2xpY2UoKTt1JiZkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXS50cmFjZSxuPWVbMF0udHJhY2U7cmV0dXJuIHIuX2dyb3VwSW5kZXgtbi5fZ3JvdXBJbmRleHx8ci5pbmRleC1uLmluZGV4fSkpO3ZhciBtPXt9O2ZvcihhPTA7YTxkLmxlbmd0aDthKyspbz0oaT1kW2FdWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIiwhMD09PWkudmlzaWJsZT8oaS5fbmV4dHRyYWNlPW51bGwsaS5maWxsIGluIG4mJihzPW1bb10saS5fcHJldnRyYWNlPXN8fG51bGwscyYmKHMuX25leHR0cmFjZT1pKSksaS5fb3duZmlsbD1pLmZpbGwmJigidG96ZXJvIj09PWkuZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1pLmZpbGx8fCJ0byI9PT1pLmZpbGwuc3Vic3RyKDAsMikmJiFpLl9wcmV2dHJhY2UpLG1bb109aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1pLl9vd25maWxsPW51bGw7cmV0dXJuIGR9fSx7fV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9Mik7dmFyIHI9dC5tYXJrZXIsaT1yLnNpemVyZWZ8fDEsYT1yLnNpemVtaW58fDAsbz0iYXJlYSI9PT1yLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9pKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvaX07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odC9lKTtyZXR1cm4gbihyKSYmcj4wP01hdGgubWF4KHIsYSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoxODV9XSw5NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifX0se31dLDk0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1PW8uaXNCdWJibGUodCksZj0odC5saW5lfHx7fSkuY29sb3I7KGM9Y3x8e30sZiYmKHI9ZiksbCgibWFya2VyLnN5bWJvbCIpLGwoIm1hcmtlci5vcGFjaXR5Iix1Py43OjEpLGwoIm1hcmtlci5zaXplIiksbCgibWFya2VyLmNvbG9yIixyKSxpKHQsIm1hcmtlciIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxjLm5vU2VsZWN0fHwobCgic2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJzZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLGwoInVuc2VsZWN0ZWQubWFya2VyLnNpemUiKSksYy5ub0xpbmV8fChsKCJtYXJrZXIubGluZS5jb2xvciIsZiYmIUFycmF5LmlzQXJyYXkoZikmJmUubWFya2VyLmNvbG9yIT09Zj9mOnU/bi5iYWNrZ3JvdW5kOm4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxsKCJtYXJrZXIubGluZS53aWR0aCIsdT8xOjApKSx1JiYobCgibWFya2VyLnNpemVyZWYiKSxsKCJtYXJrZXIuc2l6ZW1pbiIpLGwoIm1hcmtlci5zaXplbW9kZSIpKSxjLmdyYWRpZW50KSYmKCJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3MiwiLi9zdWJ0eXBlcyI6OTQ3fV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmRhdGVUaWNrMCxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVXRUVLO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbihlLHQlaT09MD8xOjApfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGl8fChpPXt4OiEwLHk6ITB9KSxpLngpe3ZhciBvPW4oInhwZXJpb2QiKTtvJiYobigieHBlcmlvZDAiLGEobyxlLnhjYWxlbmRhcikpLG4oInhwZXJpb2RhbGlnbm1lbnQiKSl9aWYoaS55KXt2YXIgcz1uKCJ5cGVyaW9kIik7cyYmKG4oInlwZXJpb2QwIixhKHMsZS55Y2FsZW5kYXIpKSxuKCJ5cGVyaW9kYWxpZ25tZW50IikpfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OH1dLDk0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz1hLmVuc3VyZVNpbmdsZSxzPWEuaWRlbnRpdHksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vc3VidHlwZXMiKSx1PXQoIi4vbGluZV9wb2ludHMiKSxmPXQoIi4vbGlua190cmFjZXMiKSxoPXQoIi4uLy4uL2xpYi9wb2x5Z29uIikudGVzdGVyO2Z1bmN0aW9uIHAodCxlLHIsZixwLGQsbSl7dmFyIGc7IWZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHM9ci54YXhpcyxsPXIueWF4aXMsdT1uLmV4dGVudChhLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksZj1uLmV4dGVudChhLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksaD1pWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoaCkpcmV0dXJuO3ZhciBwPWgubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGQ9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1mWzBdJiZ0Lnk8PWZbMV19KSksbT1NYXRoLmNlaWwoZC5sZW5ndGgvcCksZz0wO28uZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmZysrfSkpO3ZhciB2PU1hdGgucm91bmQoZyptLzMrTWF0aC5mbG9vcihnLzMpKm0vNy4xKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0LnZpc30pKSxkLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrdiklbSkmJih0LnZpcz0hMCl9KSl9KDAsZSxyLGYscCk7dmFyIHY9ISFtJiZtLmR1cmF0aW9uPjA7ZnVuY3Rpb24geSh0KXtyZXR1cm4gdj90LnRyYW5zaXRpb24oKTp0fXZhciB4PXIueGF4aXMsYj1yLnlheGlzLF89ZlswXS50cmFjZSx3PV8ubGluZSxUPW4uc2VsZWN0KGQpLGs9byhULCJnIiwiZXJyb3JiYXJzIiksQT1vKFQsImciLCJsaW5lcyIpLE09byhULCJnIiwicG9pbnRzIiksUz1vKFQsImciLCJ0ZXh0Iik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInBsb3QiKSh0LGsscixtKSwhMD09PV8udmlzaWJsZSl7dmFyIEUsTDt5KFQpLnN0eWxlKCJvcGFjaXR5IixfLm9wYWNpdHkpO3ZhciBDPV8uZmlsbC5jaGFyQXQoXy5maWxsLmxlbmd0aC0xKTsieCIhPT1DJiYieSIhPT1DJiYoQz0iIiksZlswXVtyLmlzUmFuZ2VQbG90PyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIl09VDt2YXIgUCxJLE89IiIsej1bXSxEPV8uX3ByZXZ0cmFjZTtEJiYoTz1ELl9wcmV2UmV2cGF0aHx8IiIsTD1ELl9uZXh0RmlsbCx6PUQuX3BvbHlnb25zKTt2YXIgUixGLEIsTixqLFUsVixIPSIiLHE9IiIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8Im5vbmUiIT09Xy5maWxsKXtmb3IoTCYmTC5kYXR1bShmKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6Uj1GPSJzcGxpbmUiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9LEI9ZnVuY3Rpb24odCl7cmV0dXJuIEYodC5yZXZlcnNlKCkpfSxHPXUoZix7eGF4aXM6eCx5YXhpczpiLGNvbm5lY3RHYXBzOl8uY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heCh3LndpZHRofHwxLDMpLzQsc2hhcGU6dy5zaGFwZSxzaW1wbGlmeTp3LnNpbXBsaWZ5LGZpbGw6Xy5maWxsfSksVj1fLl9wb2x5Z29ucz1uZXcgQXJyYXkoRy5sZW5ndGgpLGc9MDtnPEcubGVuZ3RoO2crKylfLl9wb2x5Z29uc1tnXT1oKEdbZ10pO0cubGVuZ3RoJiYoTj1HWzBdWzBdLFU9KGo9R1tHLmxlbmd0aC0xXSlbai5sZW5ndGgtMV0pLFk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKFA9UihlKSxJPUIoZSksSD9DPyhIKz0iTCIrUC5zdWJzdHIoMSkscT1JKyJMIitxLnN1YnN0cigxKSk6KEgrPSJaIitQLHE9SSsiWiIrcSk6KEg9UCxxPUkpLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oZiksdCl5KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLFApLmNhbGwobC5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKCJkIixQKSxsLnNpbmdsZUxpbmVTdHlsZShmLGkpfX19fX12YXIgVz1BLnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKEcpO3koVy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oZiksTiYmVSYmKEM/KCJ5Ij09PUM/TlsxXT1VWzFdPWIuYzJwKDAsITApOiJ4Ij09PUMmJihOWzBdPVVbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cigiZCIsIk0iK1UrIkwiK04rIkwiK0guc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlLHQpKTp5KEUpLmF0dHIoImQiLEgrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlLHQpKSk6TCYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZIJiZPPygidG9uZXh0Ij09PV8uZmlsbD95KEwpLmF0dHIoImQiLEgrIloiK08rIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlLHQpOnkoTCkuYXR0cigiZCIsSCsiTCIrTy5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlLHQpLF8uX3BvbHlnb25zPV8uX3BvbHlnb25zLmNvbmNhdCh6KSk6KFooTCksXy5fcG9seWdvbnM9bnVsbCkpLF8uX3ByZXZSZXZwYXRoPXEsXy5fcHJldlBvbHlnb25zPVYpOihFP1ooRSk6TCYmWihMKSxfLl9wb2x5Z29ucz1fLl9wcmV2UmV2cGF0aD1fLl9wcmV2UG9seWdvbnM9bnVsbCksTS5kYXR1bShmKSxTLmRhdHVtKGYpLGZ1bmN0aW9uKGUsaSxhKXt2YXIgbyx1PWFbMF0udHJhY2UsZj1jLmhhc01hcmtlcnModSksaD1jLmhhc1RleHQodSkscD10dCh1KSxkPWV0LG09ZXQ7aWYoZnx8aCl7dmFyIGc9cyxfPXUuc3RhY2tncm91cCx3PV8mJiJpbmZlciB6ZXJvIj09PXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbeC5faWQrYi5faWRdW19dLnN0YWNrZ2Fwczt1Lm1hcmtlci5tYXhkaXNwbGF5ZWR8fHUuX25lZWRzQ3VsbD9nPXc/SzpKOl8mJiF3JiYoZz1RKSxmJiYoZD1nKSxoJiYobT1nKX12YXIgVCxrPShvPWUuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShkLHApKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCk7diYmay5jYWxsKGwucG9pbnRTdHlsZSx1LHQpLmNhbGwobC50cmFuc2xhdGVQb2ludHMseCxiKS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKSxvLm9yZGVyKCksZiYmKFQ9bC5tYWtlUG9pbnRTdHlsZUZucyh1KSksby5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXkoaSk7bC50cmFuc2xhdGVQb2ludChlLGEseCxiKT8obC5zaW5nbGVQb2ludFN0eWxlKGUsYSx1LFQsdCksci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoZSxhLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhciksdS5jdXN0b21kYXRhJiZpLmNsYXNzZWQoInBsb3RseS1jdXN0b21kYXRhIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSkpLHY/by5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTpvLmV4aXQoKS5yZW1vdmUoKSwobz1pLnNlbGVjdEFsbCgiZyIpLmRhdGEobSxwKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0cG9pbnQiLCEwKS5hcHBlbmQoInRleHQiKSxvLm9yZGVyKCksby5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXkoZS5zZWxlY3QoInRleHQiKSk7bC50cmFuc2xhdGVQb2ludCh0LGkseCxiKT9yLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LGUseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKTplLnJlbW92ZSgpfSkpLG8uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9eC5jMnAodC54KSxyPWIuYzJwKHQueSk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaCgoZnVuY3Rpb24oKXt5KG4uc2VsZWN0KHRoaXMpKS5hdHRyKHt4OmUseTpyfSl9KSl9KSksby5leGl0KCkucmVtb3ZlKCl9KE0sUyxmKTt2YXIgWD0hMT09PV8uY2xpcG9uYXhpcz9udWxsOnIubGF5ZXJDbGlwSWQ7bC5zZXRDbGlwVXJsKE0sWCx0KSxsLnNldENsaXBVcmwoUyxYLHQpfWZ1bmN0aW9uIFoodCl7eSh0KS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwJiZ0LnZpc30pKX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzfSkpfWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KSl9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiB0dCh0KXtpZih0LmlkcylyZXR1cm4gJH1mdW5jdGlvbiBldCgpe3JldHVybiExfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLGMpe3ZhciB1LGgsZD0hYSxtPSEhYSYmYS5kdXJhdGlvbj4wLGc9Zih0LGUscik7KCh1PWkuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YShnLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4idHJhY2Ugc2NhdHRlciB0cmFjZSIrdFswXS50cmFjZS51aWR9KSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKSx1Lm9yZGVyKCksZnVuY3Rpb24odCxlLHIpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSwiZyIsImZpbGxzIik7bC5zZXRDbGlwVXJsKGksci5sYXllckNsaXBJZCx0KTt2YXIgYT1lWzBdLnRyYWNlLGM9W107YS5fb3duZmlsbCYmYy5wdXNoKCJfb3duRmlsbCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKCJfbmV4dEZpbGwiKTt2YXIgdT1pLnNlbGVjdEFsbCgiZyIpLmRhdGEoYyxzKTt1LmVudGVyKCkuYXBwZW5kKCJnIiksdS5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7YVt0XT1udWxsfSkpLnJlbW92ZSgpLHUub3JkZXIoKS5lYWNoKChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksInBhdGgiLCJqcy1maWxsIil9KSl9KSl9KHQsdSxlKSxtKT8oYyYmKGg9YygpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLmR1cmF0aW9uKS5lYXNlKGEuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2gmJmgoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe2gmJmgoKX0pKS5lYWNoKChmdW5jdGlvbigpe2kuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaCgoZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsZyx0aGlzLGEpfSkpfSkpKTp1LmVhY2goKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLGcsdGhpcyxhKX0pKTtkJiZ1LmV4aXQoKS5yZW1vdmUoKSxpLnNlbGVjdEFsbCgicGF0aDpub3QoW2RdKSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9wb2x5Z29uIjo1MTAsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vbGluZV9wb2ludHMiOjkzNiwiLi9saW5rX3RyYWNlcyI6OTM4LCIuL3N1YnR5cGVzIjo5NDcsIkBwbG90bHkvZDMiOjU4fV0sOTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdLGY9c1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPWMuYzJwKGkueSksbnVsbCE9PWkuaSYmZS5jb250YWlucyhbYSxvXSwhMSxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOmkuaSx4OmwuYzJkKGkueCkseTpjLmMyZChpLnkpfSksaS5zZWxlY3RlZD0xKTppLnNlbGVjdGVkPTA7cmV0dXJuIHV9fSx7Ii4vc3VidHlwZXMiOjk0N31dLDk0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bIm9yaWVudGF0aW9uIiwiZ3JvdXBub3JtIiwic3RhY2tnYXBzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXIuX3NjYXR0ZXJTdGFja09wdHMsbz1pKCJzdGFja2dyb3VwIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGY9e29yaWVudGF0aW9uOmUueCYmIWUueT8iaCI6InYifSxoPTA7aDxuLmxlbmd0aDtoKyspe3ZhciBwPW5baF0sZD1wKyJGb3VuZCI7aWYoIWNbZF0pe3ZhciBtPXZvaWQgMCE9PXRbcF0sZz0ib3JpZW50YXRpb24iPT09cDtpZigobXx8dSkmJihjW3BdPWkocCxmW3BdKSxnJiYoYy5maWxsRGZsdD0iaCI9PT1jW3BdPyJ0b25leHR4IjoidG9uZXh0eSIpLG0mJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLGcpKSkpZm9yKHZhciB2PTA7djxjLnRyYWNlcy5sZW5ndGgtMTt2Kyspe3ZhciB5PWMudHJhY2VzW3ZdO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sOTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudGV4dCIpLmVhY2goKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSx0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShlKX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6cyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/KGkuc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksbiksaS5zZWxlY3RlZFRleHRTdHlsZShyLnNlbGVjdEFsbCgidGV4dCIpLG4pKToobyhyLG4sdCkscyhyLG4sdCkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIkBwbG90bHkvZDMiOjU4fV0sOTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjQ5OH1dLDk0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChpLCJ0ZXh0Zm9udCIsci5mb250KSxhLm5vU2VsZWN0fHwoaSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxpKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjQ5OH1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9YSgieCIpLGw9YSgieSIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxyKSxzKXt2YXIgYz1uLm1pblJvd0xlbmd0aChzKTtsP289TWF0aC5taW4oYyxuLm1pblJvd0xlbmd0aChsKSk6KG89YyxhKCJ5MCIpLGEoImR5IikpfWVsc2V7aWYoIWwpcmV0dXJuIDA7bz1uLm1pblJvd0xlbmd0aChsKSxhKCJ4MCIpLGEoImR4Iil9cmV0dXJuIGUuX2xlbmd0aD1vLG99fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi8uLi9yZWdpc3RyeSI6NjMzfV0sOTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscD10KCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyIpLGQ9bi5saW5lLG09bi5tYXJrZXIsZz1tLmxpbmUsdj1mKHt3aWR0aDpkLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpwKGMpLGRmbHQ6InNvbGlkIn19LGkoImxpbmUiKSk7dmFyIHk9ZS5leHBvcnRzPWgoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0OmYoe30sbi50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6cyh7fSx7fSksaG92ZXJ0ZXh0OmYoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx6aG92ZXJmb3JtYXQ6YSgieiIpLG1vZGU6Zih7fSxuLm1vZGUse2RmbHQ6ImxpbmVzK21hcmtlcnMifSksc3VyZmFjZWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZToiY29sb3IifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOnYsbWFya2VyOmYoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnAodSksZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxzaXplOmYoe30sbS5zaXplLHtkZmx0Ojh9KSxzaXplcmVmOm0uc2l6ZXJlZixzaXplbWluOm0uc2l6ZW1pbixzaXplbW9kZTptLnNpemVtb2RlLG9wYWNpdHk6Zih7fSxtLm9wYWNpdHkse2FycmF5T2s6ITF9KSxjb2xvcmJhcjptLmNvbG9yYmFyLGxpbmU6Zih7d2lkdGg6Zih7fSxnLndpZHRoLHthcnJheU9rOiExfSl9LGkoIm1hcmtlci5saW5lIikpfSxpKCJtYXJrZXIiKSksdGV4dHBvc2l0aW9uOmYoe30sbi50ZXh0cG9zaXRpb24se2RmbHQ6InRvcCBjZW50ZXIifSksdGV4dGZvbnQ6e2NvbG9yOm4udGV4dGZvbnQuY29sb3Isc2l6ZTpuLnRleHRmb250LnNpemUsZmFtaWx5OmYoe30sbi50ZXh0Zm9udC5mYW1pbHkse2FycmF5T2s6ITF9KX0sb3BhY2l0eTpsLm9wYWNpdHksaG92ZXJpbmZvOmYoe30sbC5ob3ZlcmluZm8pfSwiY2FsYyIsIm5lc3RlZCIpO3kueC5lZGl0VHlwZT15LnkuZWRpdFR5cGU9eS56LmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiOjQ3MSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NDcyLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo1MjEsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyfV0sOTUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksaSh0LGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjEsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjV9XSw5NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBpKHQsZSxyLGkpe2lmKCFlfHwhZS52aXNpYmxlKXJldHVybiBudWxsO2Zvcih2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpKGUpLG89bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWEoK3Rbc10scyk7aWYoImxvZyI9PT1pLnR5cGUpe3ZhciBjPWkuYzJsKHRbc10pLHU9dFtzXS1sWzBdLGY9dFtzXStsWzFdO2lmKG9bc109WyhpLmMybCh1LCEwKS1jKSpyLChpLmMybChmLCEwKS1jKSpyXSx1PjApe3ZhciBoPWkuYzJsKHUpO2kuX2xvd2VyTG9nRXJyb3JCb3VuZHx8KGkuX2xvd2VyTG9nRXJyb3JCb3VuZD1oKSxpLl9sb3dlckVycm9yQm91bmQ9TWF0aC5taW4oaS5fbG93ZXJMb2dFcnJvckJvdW5kLGgpfX1lbHNlIG9bc109Wy1sWzBdKnIsbFsxXSpyXX1yZXR1cm4gb31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtpKHQueCx0LmVycm9yX3gsZVswXSxyLnhheGlzKSxpKHQueSx0LmVycm9yX3ksZVsxXSxyLnlheGlzKSxpKHQueix0LmVycm9yX3osZVsyXSxyLnpheGlzKV0sYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdKXJldHVybiB0W2VdLmxlbmd0aDtyZXR1cm4gMH0obik7aWYoMD09PWEpcmV0dXJuIG51bGw7Zm9yKHZhciBvPW5ldyBBcnJheShhKSxzPTA7czxhO3MrKyl7Zm9yKHZhciBsPVtbMCwwLDBdLFswLDAsMF1dLGM9MDtjPDM7YysrKWlmKG5bY10pZm9yKHZhciB1PTA7dTwyO3UrKylsW3VdW2NdPW5bY11bc11bdV07b1tzXT1sfXJldHVybiBvfX0seyIuLi8uLi9yZWdpc3RyeSI6NjMzfV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2xpbmUzZCxpPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX3NjYXR0ZXIzZCxhPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2Vycm9yM2Qsbz10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9tZXNoM2Qscz10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5kZWxhdW5heV90cmlhbmd1bGF0ZSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxnPXQoIi4vY2FsY19lcnJvcnMiKTtmdW5jdGlvbiB2KHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9IiIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgeT12LnByb3RvdHlwZTtmdW5jdGlvbiB4KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJsZWZ0Iik+LTE/LTE6dC5pbmRleE9mKCJyaWdodCIpPi0xPzE6MH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJ0b3AiKT4tMT8tMTp0LmluZGV4T2YoImJvdHRvbSIpPi0xPzE6MH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGUoNCp0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBwW3RdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgYT1udWxsO2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSl7YT1bXTtmb3IodmFyIG89MDtvPGU7bysrKXZvaWQgMD09PXRbb10/YVtvXT1uOmFbb109cih0W29dLGkpfWVsc2UgYT1yKHQsbC5pZGVudGl0eSk7cmV0dXJuIGF9ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saSxhLG8scyxoPVtdLHA9dC5mdWxsU2NlbmVMYXlvdXQsdj10LmRhdGFTY2FsZSx5PXAueGF4aXMsaz1wLnlheGlzLEE9cC56YXhpcyxNPWUubWFya2VyLFM9ZS5saW5lLEU9ZS54fHxbXSxMPWUueXx8W10sQz1lLnp8fFtdLFA9RS5sZW5ndGgsST1lLnhjYWxlbmRhcixPPWUueWNhbGVuZGFyLHo9ZS56Y2FsZW5kYXI7Zm9yKG89MDtvPFA7bysrKXI9eS5kMmwoRVtvXSwwLEkpKnZbMF0sbj1rLmQybChMW29dLDAsTykqdlsxXSxpPUEuZDJsKENbb10sMCx6KSp2WzJdLGhbb109W3IsbixpXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpcz1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKHM9bmV3IEFycmF5KFApLG89MDtvPFA7bysrKXNbb109ZS50ZXh0O2Z1bmN0aW9uIEQodCxlKXt2YXIgcj1wW3RdO3JldHVybiBkLnRpY2tUZXh0KHIsci5kMmwoZSksITApLnRleHR9dmFyIFI9ZS50ZXh0dGVtcGxhdGU7aWYoUil7dmFyIEY9dC5mdWxsTGF5b3V0Ll9kM2xvY2FsZSxCPUFycmF5LmlzQXJyYXkoUiksTj1CP01hdGgubWluKFIubGVuZ3RoLFApOlAsaj1CP2Z1bmN0aW9uKHQpe3JldHVybiBSW3RdfTpmdW5jdGlvbigpe3JldHVybiBSfTtmb3Iocz1uZXcgQXJyYXkoTiksbz0wO288TjtvKyspe3ZhciBVPXt4OkVbb10seTpMW29dLHo6Q1tvXX0sVj17eExhYmVsOkQoInhheGlzIixFW29dKSx5TGFiZWw6RCgieWF4aXMiLExbb10pLHpMYWJlbDpEKCJ6YXhpcyIsQ1tvXSl9LEg9e307bShILGUsbyk7dmFyIHE9ZS5fbWV0YXx8e307c1tvXT1sLnRleHR0ZW1wbGF0ZVN0cmluZyhqKG8pLFYsRixILFUscSl9fWlmKGE9e3Bvc2l0aW9uOmgsbW9kZTplLm1vZGUsdGV4dDpzfSwibGluZSJpbiBlJiYoYS5saW5lQ29sb3I9dShTLDEsUCksYS5saW5lV2lkdGg9Uy53aWR0aCxhLmxpbmVEYXNoZXM9Uy5kYXNoKSwibWFya2VyImluIGUpe3ZhciBHPWYoZSk7YS5zY2F0dGVyQ29sb3I9dShNLDEsUCksYS5zY2F0dGVyU2l6ZT1UKE0uc2l6ZSxQLF8sMjAsRyksYS5zY2F0dGVyTWFya2VyPVQoTS5zeW1ib2wsUCx3LCJcdTI1Y2YiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9TS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KE0ubGluZSwxLFApLGEuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoYS50ZXh0T2Zmc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bMCwwXSx0W3JdJiYoZVtyXVswXT14KHRbcl0pLGVbcl1bMV09Yih0W3JdKSk7ZWxzZSBlWzBdPXgodCksZVsxXT1iKHQpO3JldHVybiBlfShlLnRleHRwb3NpdGlvbiksYS50ZXh0Q29sb3I9dShlLnRleHRmb250LDEsUCksYS50ZXh0U2l6ZT1UKGUudGV4dGZvbnQuc2l6ZSxQLGwuaWRlbnRpdHksMTIpLGEudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksYS50ZXh0QW5nbGU9MCk7dmFyIFk9WyJ4IiwieSIsInoiXTtmb3IoYS5wcm9qZWN0PVshMSwhMSwhMV0sYS5wcm9qZWN0U2NhbGU9WzEsMSwxXSxhLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbz0wO288MzsrK28pe3ZhciBXPWUucHJvamVjdGlvbltZW29dXTsoYS5wcm9qZWN0W29dPVcuc2hvdykmJihhLnByb2plY3RPcGFjaXR5W29dPVcub3BhY2l0eSxhLnByb2plY3RTY2FsZVtvXT1XLnNjYWxlKX1hLmVycm9yQm91bmRzPWcoZSx2LHApO3ZhciBYPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMCwwLDBdLHI9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxuPVsxLDEsMV0saT0wO2k8MztpKyspe3ZhciBhPXRbaV07YSYmITEhPT1hLmNvcHlfenN0eWxlJiYhMSE9PXRbMl0udmlzaWJsZSYmKGE9dFsyXSksYSYmYS52aXNpYmxlJiYoZVtpXT1hLndpZHRoLzIscltpXT1jKGEuY29sb3IpLG5baV09YS50aGlja25lc3MpfXJldHVybntjYXBTaXplOmUsY29sb3I6cixsaW5lV2lkdGg6bn19KFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiBhLmVycm9yQ29sb3I9WC5jb2xvcixhLmVycm9yTGluZVdpZHRoPVgubGluZVdpZHRoLGEuZXJyb3JDYXBTaXplPVguY2FwU2l6ZSxhLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLGEuZGVsYXVuYXlDb2xvcj1jKGUuc3VyZmFjZWNvbG9yKSxhfWZ1bmN0aW9uIEEodCl7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KT80PT09dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9BKHQpOnQubWFwKEEpOm51bGx9eS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsZj1oLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPWsodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGgmJihmPWhbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1NKHAuc2NhdHRlckNvbG9yKXx8TShwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmZbMF0sZGFzaFNjYWxlOmZbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgbT1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGY9dVtuXSxoPTA7aDxmLmxlbmd0aDsrK2gpZltoXT1sW2ZbaF1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO20ub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKG0pOihtLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhtKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTE5LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjM5NywiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo0NzEsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjQ3MiwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5NCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6OTM5LCIuL2NhbGNfZXJyb3JzIjo5NTJ9XSw5NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxpKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWEpO3JldHVybiBhfSh0LGUsZix1KSl7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJ4aG92ZXJmb3JtYXQiKSxmKCJ5aG92ZXJmb3JtYXQiKSxmKCJ6aG92ZXJmb3JtYXQiKSxmKCJtb2RlIiksYS5oYXNMaW5lcyhlKSYmKGYoImNvbm5lY3RnYXBzIikscyh0LGUscix1LGYpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxmLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmKGYoInRleHR0ZW1wbGF0ZSIpLGwodCxlLHUsZix7bm9TZWxlY3Q6ITB9KSk7dmFyIGg9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixofHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxtPTA7bTwzOysrbSl7dmFyIGc9InByb2plY3Rpb24uIitkW21dO2YoZysiLnNob3ciKSYmKGYoZysiLm9wYWNpdHkiKSxmKGcrIi5zY2FsZSIpKX12YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxofHxwfHxyLHtheGlzOiJ6In0pLHYodCxlLGh8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksdih0LGUsaHx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM1LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuL2F0dHJpYnV0ZXMiOjk1MH1dLDk1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Bsb3Q6dCgiLi9jb252ZXJ0IiksYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxtYXJrZXJTeW1ib2xzOnQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6W3tjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifSx7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9XSxjYWxjOnQoIi4vY2FsYyIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NDcyLCIuLi8uLi9wbG90cy9nbDNkIjo1OTMsIi4vYXR0cmlidXRlcyI6OTUwLCIuL2NhbGMiOjk1MSwiLi9jb252ZXJ0Ijo5NTMsIi4vZGVmYXVsdHMiOjk1NH1dLDk1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PW4ubGluZSxmPWMubGluZTtlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtb2RlOmwoe30sbi5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6bCh7fSxuLnRleHQse30pLHRleHR0ZW1wbGF0ZTpvKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsiYSIsImIiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6dS5kYXNoLHNoYXBlOmwoe30sdS5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6dS5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6bCh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6bCh7c3ltYm9sOmMuc3ltYm9sLG9wYWNpdHk6Yy5vcGFjaXR5LG1heGRpc3BsYXllZDpjLm1heGRpc3BsYXllZCxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLGxpbmU6bCh7d2lkdGg6Zi53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmMuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIiKSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJhIiwiYiIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbixob3ZlcnRlbXBsYXRlOmEoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9bCh0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGYsaD1lLl9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0hMTtmb3IoYz0wO2M8aDtjKyspaWYodT1lLmFbY10sZj1lLmJbY10sbih1KSYmbihmKSl7dmFyIG09ci5hYjJ4eSgrdSwrZiwhMCksZz1yLmlzVmlzaWJsZSgrdSwrZik7Z3x8KGQ9ITApLHBbY109e3g6bVswXSx5Om1bMV0sYTp1LGI6Zix2aXM6Z319ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsaCksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7Ii4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjcwMywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjkyMSwiLi4vc2NhdHRlci9jYWxjIjo5MjMsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyNSwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDk1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9cCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIGQ9cCgiYSIpLG09cCgiYiIpLGc9TWF0aC5taW4oZC5sZW5ndGgsbS5sZW5ndGgpO2lmKGcpe2UuX2xlbmd0aD1nLHAoInRleHQiKSxwKCJ0ZXh0dGVtcGxhdGUiKSxwKCJob3ZlcnRleHQiKSxwKCJtb2RlIixnPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxwKTt2YXIgdj1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSwiZmlsbHMiIT09cCgiaG92ZXJvbiIsdi5qb2luKCIrIil8fCJwb2ludHMiKSYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjkyNiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjkzMCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjo5MzUsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6OTM3LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuL2F0dHJpYnV0ZXMiOjk1Nn1dLDk1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uW2ldO3JldHVybiB0LmE9YS5hLHQuYj1hLmIsdC55PWEueSx0fX0se31dLDk2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPWUuX2NhcnBldCxpPW4uYWIyaWooW3QuYSx0LmJdKSxhPU1hdGguZmxvb3IoaVswXSksbz1pWzBdLWEscz1NYXRoLmZsb29yKGlbMV0pLGw9aVsxXS1zLGM9bi5ldmFseHkoW10sYSxzLG8sbCk7cmV0dXJuIHIueUxhYmVsPWNbMV0udG9GaXhlZCgzKSxyfX0se31dLDk2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi8uLi9saWIiKS5maWxsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleCl7dmFyIGw9MS1zLnkwL3QueWEuX2xlbmd0aCxjPXQueGEuX2xlbmd0aCx1PWMqbC8yLGY9Yy11O3JldHVybiBzLngwPU1hdGgubWF4KE1hdGgubWluKHMueDAsZiksdSkscy54MT1NYXRoLm1heChNYXRoLm1pbihzLngxLGYpLHUpLG99dmFyIGg9cy5jZFtzLmluZGV4XTtzLmE9aC5hLHMuYj1oLmIscy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMDt2YXIgcD1zLnRyYWNlLGQ9cC5fY2FycGV0LG09cC5fbW9kdWxlLmZvcm1hdExhYmVscyhoLHApO3MueUxhYmVsPW0ueUxhYmVsLGRlbGV0ZSBzLnRleHQ7dmFyIGc9W107aWYoIXAuaG92ZXJ0ZW1wbGF0ZSl7dmFyIHY9KGguaGl8fHAuaG92ZXJpbmZvKS5zcGxpdCgiKyIpOy0xIT09di5pbmRleE9mKCJhbGwiKSYmKHY9WyJhIiwiYiIsInRleHQiXSksLTEhPT12LmluZGV4T2YoImEiKSYmeShkLmFheGlzLGguYSksLTEhPT12LmluZGV4T2YoImIiKSYmeShkLmJheGlzLGguYiksZy5wdXNoKCJ5OiAiK3MueUxhYmVsKSwtMSE9PXYuaW5kZXhPZigidGV4dCIpJiZpKGgscCxnKSxzLmV4dHJhVGV4dD1nLmpvaW4oIjxicj4iKX1yZXR1cm4gb31mdW5jdGlvbiB5KHQsZSl7dmFyIHI7cj10LmxhYmVscHJlZml4JiZ0LmxhYmVscHJlZml4Lmxlbmd0aD4wP3QubGFiZWxwcmVmaXgucmVwbGFjZSgvID0gJC8sIiIpOnQuX2hvdmVydGl0bGUsZy5wdXNoKHIrIjogIitlLnRvRml4ZWQoMykrdC5sYWJlbHN1ZmZpeCl9fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vc2NhdHRlci9ob3ZlciI6OTMzfV0sOTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJjYXJwZXQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJzdmciLCJjYXJwZXQiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImNhcnBldERlcGVuZGVudCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQwLCIuLi9zY2F0dGVyL3NlbGVjdCI6OTQ0LCIuLi9zY2F0dGVyL3N0eWxlIjo5NDYsIi4vYXR0cmlidXRlcyI6OTU2LCIuL2NhbGMiOjk1NywiLi9kZWZhdWx0cyI6OTU4LCIuL2V2ZW50X2RhdGEiOjk1OSwiLi9mb3JtYXRfbGFiZWxzIjo5NjAsIi4vaG92ZXIiOjk2MSwiLi9wbG90Ijo5NjN9XSw5NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGY9e3hheGlzOmkuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsZixyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vc2NhdHRlci9wbG90Ijo5NDN9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9YS5tYXJrZXIsaD1hLmxpbmUscD1mLmxpbmU7ZS5leHBvcnRzPXUoe2xvbjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxhdDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9ubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiSVNPLTMiLCJVU0Etc3RhdGVzIiwiY291bnRyeSBuYW1lcyIsImdlb2pzb24taWQiXSxkZmx0OiJJU08tMyJ9LGdlb2pzb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxmZWF0dXJlaWRrZXk6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ImlkIn0sbW9kZTpjKHt9LGEubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OmMoe30sYS50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhdCIsImxvbiIsImxvY2F0aW9uIiwidGV4dCJdfSksaG92ZXJ0ZXh0OmMoe30sYS5ob3ZlcnRleHQse30pLHRleHRmb250OmEudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aCxkYXNoOmx9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOmMoe3N5bWJvbDpmLnN5bWJvbCxvcGFjaXR5OmYub3BhY2l0eSxzaXplOmYuc2l6ZSxzaXplcmVmOmYuc2l6ZXJlZixzaXplbWluOmYuc2l6ZW1pbixzaXplbW9kZTpmLnNpemVtb2RlLGNvbG9yYmFyOmYuY29sb3JiYXIsbGluZTpjKHt3aWR0aDpwLndpZHRofSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpmLmdyYWRpZW50fSxzKCJtYXJrZXIiKSksZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvc2VsZiJdLGRmbHQ6Im5vbmUifSxmaWxsY29sb3I6YS5maWxsY29sb3Isc2VsZWN0ZWQ6YS5zZWxlY3RlZCx1bnNlbGVjdGVkOmEudW5zZWxlY3RlZCxob3ZlcmluZm86Yyh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6MzgyLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyfV0sOTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9saWIiKS5fO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1PUFycmF5LmlzQXJyYXkoZS5sb2NhdGlvbnMpLGY9dT9lLmxvY2F0aW9ucy5sZW5ndGg6ZS5fbGVuZ3RoLGg9bmV3IEFycmF5KGYpO3I9ZS5nZW9qc29uP2Z1bmN0aW9uKHQpe3JldHVybiBjKHQpfHxuKHQpfTpjO2Zvcih2YXIgcD0wO3A8ZjtwKyspe3ZhciBkPWhbcF09e307aWYodSl7dmFyIG09ZS5sb2NhdGlvbnNbcF07ZC5sb2M9cihtKT9tOm51bGx9ZWxzZXt2YXIgZz1lLmxvbltwXSx2PWUubGF0W3BdO24oZykmJm4odik/ZC5sb25sYXQ9WytnLCt2XTpkLmxvbmxhdD1baSxpXX19cmV0dXJuIG8oaCxlKSxhKHQsZSkscyhoLGUpLGYmJihoWzBdLnQ9e2xhYmVsczp7bGF0OmwodCwibGF0OiIpKyIgIixsb246bCh0LCJsb246IikrIiAifX0pLGh9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjEsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyNSwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDk2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9dmFyIGgscD1mKCJsb2NhdGlvbnMiKTtpZihwJiZwLmxlbmd0aCl7dmFyIGQsbT1mKCJnZW9qc29uIik7KCJzdHJpbmciPT10eXBlb2YgbSYmIiIhPT1tfHxuLmlzUGxhaW5PYmplY3QobSkpJiYoZD0iZ2VvanNvbi1pZCIpLCJnZW9qc29uLWlkIj09PWYoImxvY2F0aW9ubW9kZSIsZCkmJmYoImZlYXR1cmVpZGtleSIpLGg9cC5sZW5ndGh9ZWxzZXt2YXIgZz1mKCJsb24iKXx8W10sdj1mKCJsYXQiKXx8W107aD1NYXRoLm1pbihnLmxlbmd0aCx2Lmxlbmd0aCl9aD8oZS5fbGVuZ3RoPWgsZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmKSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJmEodCxlLHIsdSxmLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmKGYoInRleHR0ZW1wbGF0ZSIpLHModCxlLHUsZikpLGYoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJmwodCxlLHIsZiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjo5MzAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM1LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuL2F0dHJpYnV0ZXMiOjk2NH1dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGw7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdH19LHt9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLmdlb10uX3N1YnBsb3QubW9ja0F4aXMsbz10LmxvbmxhdDtyZXR1cm4gaS5sb25MYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1swXSksITApLnRleHQsaS5sYXRMYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1sxXSksITApLnRleHQsaX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDk2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0LHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsZj10LnlhLGg9dC5zdWJwbG90LHA9aC5wcm9qZWN0aW9uLmlzTG9uTGF0T3ZlckVkZ2VzLGQ9aC5wcm9qZWN0O2lmKG4uZ2V0Q2xvc2VzdChsLChmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09aSlyZXR1cm4gMS8wO2lmKHAobikpcmV0dXJuIDEvMDt2YXIgYT1kKG4pLG89ZChbZSxyXSkscz1NYXRoLmFicyhhWzBdLW9bMF0pLGw9TWF0aC5hYnMoYVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9KSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBtPWxbdC5pbmRleF0sZz1tLmxvbmxhdCx2PVt1LmMycChnKSxmLmMycChnKV0seT1tLm1yY3x8MTt0LngwPXZbMF0teSx0LngxPXZbMF0reSx0LnkwPXZbMV0teSx0LnkxPXZbMV0reSx0LmxvYz1tLmxvYyx0Lmxvbj1nWzBdLHQubGF0PWdbMV07dmFyIHg9e307eFtjLmdlb109e19zdWJwbG90Omh9O3ZhciBiPWMuX21vZHVsZS5mb3JtYXRMYWJlbHMobSxjLHgpO3JldHVybiB0LmxvbkxhYmVsPWIubG9uTGFiZWwsdC5sYXRMYWJlbD1iLmxhdExhYmVsLHQuY29sb3I9YShjLG0pLHQuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIGk9ZS5oaXx8dC5ob3ZlcmluZm8sYT0iYWxsIj09PWk/cy5ob3ZlcmluZm8uZmxhZ3M6aS5zcGxpdCgiKyIpLGw9LTEhPT1hLmluZGV4T2YoImxvY2F0aW9uIikmJkFycmF5LmlzQXJyYXkodC5sb2NhdGlvbnMpLGM9LTEhPT1hLmluZGV4T2YoImxvbiIpLHU9LTEhPT1hLmluZGV4T2YoImxhdCIpLGY9LTEhPT1hLmluZGV4T2YoInRleHQiKSxoPVtdO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQrIlx4YjAifWw/aC5wdXNoKGUubG9jKTpjJiZ1P2gucHVzaCgiKCIrcChyLmxhdExhYmVsKSsiLCAiK3Aoci5sb25MYWJlbCkrIikiKTpjP2gucHVzaChuLmxvbitwKHIubG9uTGFiZWwpKTp1JiZoLnB1c2gobi5sYXQrcChyLmxhdExhYmVsKSk7ZiYmbyhlLHQsaCk7cmV0dXJuIGguam9pbigiPGJyPiIpfShjLG0sdCxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi8uLi9saWIiOjQ5OCwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjkzMiwiLi9hdHRyaWJ1dGVzIjo5NjR9XSw5NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNhbGNHZW9KU09OOnQoIi4vcGxvdCIpLmNhbGNHZW9KU09OLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyZ2VvIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nZW8iKSxjYXRlZ29yaWVzOlsiZ2VvIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nZW8iOjU4NCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi4vc2NhdHRlci9zdHlsZSI6OTQ2LCIuL2F0dHJpYnV0ZXMiOjk2NCwiLi9jYWxjIjo5NjUsIi4vZGVmYXVsdHMiOjk2NiwiLi9ldmVudF9kYXRhIjo5NjcsIi4vZm9ybWF0X2xhYmVscyI6OTY4LCIuL2hvdmVyIjo5NjksIi4vcGxvdCI6OTcxLCIuL3NlbGVjdCI6OTcyLCIuL3N0eWxlIjo5NzN9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHU9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsZj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaD10KCIuL3N0eWxlIik7ZS5leHBvcnRzPXtjYWxjR2VvSlNPTjpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLnRyYWNlLG89ZVtpLmdlb10sZj1vLl9zdWJwbG90LGg9aS5fbGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoaS5sb2NhdGlvbnMpKXt2YXIgcD1pLmxvY2F0aW9ubW9kZSxkPSJnZW9qc29uLWlkIj09PXA/cy5leHRyYWN0VHJhY2VGZWF0dXJlKHQpOmEoaSxmLnRvcG9qc29uKTtmb3Iocj0wO3I8aDtyKyspe249dFtyXTt2YXIgbT0iZ2VvanNvbi1pZCI9PT1wP24uZk91dDpzLmxvY2F0aW9uVG9GZWF0dXJlKHAsbi5sb2MsZCk7bi5sb25sYXQ9bT9tLnByb3BlcnRpZXMuY3Q6W2MsY119fXZhciBnLHYseT17cGFkZGVkOiEwfTtpZigiZ2VvanNvbiI9PT1vLmZpdGJvdW5kcyYmImdlb2pzb24taWQiPT09aS5sb2NhdGlvbm1vZGUpe3ZhciB4PXMuY29tcHV0ZUJib3gocy5nZXRUcmFjZUdlb2pzb24oaSkpO2c9W3hbMF0seFsyXV0sdj1beFsxXSx4WzNdXX1lbHNle2ZvcihnPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKSxyPTA7cjxoO3IrKyluPXRbcl0sZ1tyXT1uLmxvbmxhdFswXSx2W3JdPW4ubG9ubGF0WzFdO3kucHBhZD11KGksaCl9aS5fZXh0cmVtZXMubG9uPWwoby5sb25heGlzLl9heCxnLHkpLGkuX2V4dHJlbWVzLmxhdD1sKG8ubGF0YXhpcy5fYXgsdix5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLHM9aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBzY2F0dGVyZ2VvIik7ZnVuY3Rpb24gbCh0LGUpe3QubG9ubGF0WzBdPT09YyYmbi5zZWxlY3QoZSkucmVtb3ZlKCl9cy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ZVswXS50cmFjZTtpZihmLmhhc0xpbmVzKGEpfHwibm9uZSIhPT1hLmZpbGwpe3ZhciBzPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpLGM9Im5vbmUiIT09YS5maWxsP28ubWFrZVBvbHlnb24ocyk6by5tYWtlTGluZShzKTtyLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuZGF0YShbe2dlb2pzb246Yyx0cmFjZTphfV0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMil9Zi5oYXNNYXJrZXJzKGEpJiZyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoaS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLmVhY2goKGZ1bmN0aW9uKHQpe2wodCx0aGlzKX0pKSxmLmhhc1RleHQoYSkmJnIuc2VsZWN0QWxsKCJnIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2wodCx0aGlzKX0pKSxoKHQsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTEsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTIsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NTI3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NDgsIi4uL3NjYXR0ZXIvY2FsYyI6OTIzLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4vc3R5bGUiOjk3MywiQHBsb3RseS9kMyI6NTh9XSw5NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scyxsLGM9dC5jZCx1PXQueGF4aXMsZj10LnlheGlzLGg9W10scD1jWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMocCkmJiFuLmhhc1RleHQocCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihsPTA7bDxjLmxlbmd0aDtsKyspY1tsXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKGw9MDtsPGMubGVuZ3RoO2wrKykoYT0ocj1jW2xdKS5sb25sYXQpWzBdIT09aSYmKG89dS5jMnAoYSkscz1mLmMycChhKSxlLmNvbnRhaW5zKFtvLHNdLG51bGwsbCx0KT8oaC5wdXNoKHtwb2ludE51bWJlcjpsLGxvbjphWzBdLGxhdDphWzFdfSksci5zZWxlY3RlZD0xKTpyLnNlbGVjdGVkPTApO3JldHVybiBofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk0N31dLDk3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvc3R5bGUiKSxzPW8uc3R5bGVQb2ludHMsbD1vLnN0eWxlVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlJiZmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz1lWzBdLm5vZGUzO28uc3R5bGUoIm9wYWNpdHkiLGVbMF0udHJhY2Uub3BhY2l0eSkscyhvLHIsdCksbChvLHIsdCksby5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxvPXIubGluZXx8e307ZS5jYWxsKGEuc3Ryb2tlLG8uY29sb3IpLmNhbGwoaS5kYXNoTGluZSxvLmRhc2h8fCIiLG8ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KSl9KHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uL3NjYXR0ZXIvc3R5bGUiOjk0NiwiQHBsb3RseS9kMyI6NTh9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsdT10KCIuL2NvbnN0YW50cyIpLkRBU0hFUyxmPWkubGluZSxoPWkubWFya2VyLHA9aC5saW5lLGQ9ZS5leHBvcnRzPWMoe3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHkseHBlcmlvZDppLnhwZXJpb2QseXBlcmlvZDppLnlwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx5cGVyaW9kMDppLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6aS55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGluZXMiLCJtYXJrZXJzIiwidGV4dCJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzKHUpLGRmbHQ6InNvbGlkIn19LG1hcmtlcjpsKHt9LG8oIm1hcmtlciIpLHtzeW1ib2w6aC5zeW1ib2wsc2l6ZTpoLnNpemUsc2l6ZXJlZjpoLnNpemVyZWYsc2l6ZW1pbjpoLnNpemVtaW4sc2l6ZW1vZGU6aC5zaXplbW9kZSxvcGFjaXR5Omgub3BhY2l0eSxjb2xvcmJhcjpoLmNvbG9yYmFyLGxpbmU6bCh7fSxvKCJtYXJrZXIubGluZSIpLHt3aWR0aDpwLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6bCh7fSxpLmZpbGwse2RmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHNlbGVjdGVkOnttYXJrZXI6aS5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS5zZWxlY3RlZC50ZXh0Zm9udH0sdW5zZWxlY3RlZDp7bWFya2VyOmkudW5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS51bnNlbGVjdGVkLnRleHRmb250fSxvcGFjaXR5Om4ub3BhY2l0eX0sImNhbGMiLCJuZXN0ZWQiKTtkLnguZWRpdFR5cGU9ZC55LmVkaXRUeXBlPWQueDAuZWRpdFR5cGU9ZC55MC5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsZC5ob3ZlcnRlbXBsYXRlPWkuaG92ZXJ0ZW1wbGF0ZSxkLnRleHR0ZW1wbGF0ZT1pLnRleHR0ZW1wbGF0ZX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo1MjEsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyMiwiLi9jb25zdGFudHMiOjk3N31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxob3ZlclBvaW50czpuLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTYzLCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo5MjgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDAsIi4vYXR0cmlidXRlcyI6OTc0LCIuL2NhbGMiOjk3NiwiLi9kZWZhdWx0cyI6OTc5LCIuL2Zvcm1hdF9sYWJlbHMiOjk4MSwiLi9ob3ZlciI6OTgzLCIuL3NlbGVjdCI6OTg3fV0sOTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbD10KCIuLi9zY2F0dGVyL2NhbGMiKSxjPWwuY2FsY01hcmtlclNpemUsdT1sLmNhbGNBeGlzRXhwYW5zaW9uLGY9bC5zZXRGaXJzdFNjYXR0ZXIsaD10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHA9dCgiLi9jb252ZXJ0IiksZD10KCIuL3NjZW5lX3VwZGF0ZSIpLG09dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxnPXQoIi4vY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuX2V4dHJlbWVzW2UuX2lkXSxpPW8oZSxyLl9ibmRzLHtwYWRkZWQ6ITB9KTtuLm1pbj1uLm1pbi5jb25jYXQoaS5taW4pLG4ubWF4PW4ubWF4LmNvbmNhdChpLm1heCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10Ll9mdWxsTGF5b3V0LGw9YS5nZXRGcm9tSWQodCxlLnhheGlzKSx5PWEuZ2V0RnJvbUlkKHQsZS55YXhpcykseD1vLl9wbG90c1tlLnhheGlzK2UueWF4aXNdLGI9ZS5fbGVuZ3RoLF89Yj49Zyx3PTIqYixUPXt9LGs9bC5tYWtlQ2FsY2RhdGEoZSwieCIpLEE9eS5tYWtlQ2FsY2RhdGEoZSwieSIpLE09cyhlLGwsIngiLGspLFM9cyhlLHksInkiLEEpLEU9TS52YWxzLEw9Uy52YWxzO2UuX3g9RSxlLl95PUwsZS54cGVyaW9kYWxpZ25tZW50JiYoZS5fb3JpZ1g9ayxlLl94U3RhcnRzPU0uc3RhcnRzLGUuX3hFbmRzPU0uZW5kcyksZS55cGVyaW9kYWxpZ25tZW50JiYoZS5fb3JpZ1k9QSxlLl95U3RhcnRzPVMuc3RhcnRzLGUuX3lFbmRzPVMuZW5kcyk7dmFyIEM9bmV3IEFycmF5KHcpLFA9bmV3IEFycmF5KGIpO2ZvcihyPTA7cjxiO3IrKylDWzIqcl09RVtyXT09PW0/TmFOOkVbcl0sQ1syKnIrMV09TFtyXT09PW0/TmFOOkxbcl0sUFtyXT1yO2lmKCJsb2ciPT09bC50eXBlKWZvcihyPTA7cjx3O3IrPTIpQ1tyXT1sLmMybChDW3JdKTtpZigibG9nIj09PXkudHlwZSlmb3Iocj0xO3I8dztyKz0yKUNbcl09eS5jMmwoQ1tyXSk7XyYmImxvZyIhPT1sLnR5cGUmJiJsb2ciIT09eS50eXBlP1QudHJlZT1uKEMpOlQuaWRzPVAsaCh0LGUpO3ZhciBJLE89ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBzPXAuc3R5bGUodCxyKTtzLm1hcmtlciYmKHMubWFya2VyLnBvc2l0aW9ucz1uKTtzLmxpbmUmJm4ubGVuZ3RoPjEmJmkuZXh0ZW5kRmxhdChzLmxpbmUscC5saW5lUG9zaXRpb25zKHQscixuKSk7aWYocy5lcnJvclh8fHMuZXJyb3JZKXt2YXIgbD1wLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGEsbyk7cy5lcnJvclgmJmkuZXh0ZW5kRmxhdChzLmVycm9yWCxsLngpLHMuZXJyb3JZJiZpLmV4dGVuZEZsYXQocy5lcnJvclksbC55KX1zLnRleHQmJihpLmV4dGVuZEZsYXQocy50ZXh0LHtwb3NpdGlvbnM6bn0scC50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlcikpLGkuZXh0ZW5kRmxhdChzLnRleHRTZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyU2VsKSksaS5leHRlbmRGbGF0KHMudGV4dFVuc2VsLHtwb3NpdGlvbnM6bn0scC50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlclVuc2VsKSkpO3JldHVybiBzfSh0LDAsZSxDLEUsTCksej1kKHQseCk7cmV0dXJuIGYobyxlKSxfP08ubWFya2VyJiYoST1PLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChPLm1hcmtlci5zaXplLDMpKTpJPWMoZSxiKSx1KHQsZSxsLHksRSxMLEkpLE8uZXJyb3JYJiZ2KGUsbCxPLmVycm9yWCksTy5lcnJvclkmJnYoZSx5LE8uZXJyb3JZKSxPLmZpbGwmJiF6LmZpbGwyZCYmKHouZmlsbDJkPSEwKSxPLm1hcmtlciYmIXouc2NhdHRlcjJkJiYoei5zY2F0dGVyMmQ9ITApLE8ubGluZSYmIXoubGluZTJkJiYoei5saW5lMmQ9ITApLCFPLmVycm9yWCYmIU8uZXJyb3JZfHx6LmVycm9yMmR8fCh6LmVycm9yMmQ9ITApLE8udGV4dCYmIXouZ2xUZXh0JiYoei5nbFRleHQ9ITApLE8ubWFya2VyJiYoTy5tYXJrZXIuc25hcD1iKSx6LmxpbmVPcHRpb25zLnB1c2goTy5saW5lKSx6LmVycm9yWE9wdGlvbnMucHVzaChPLmVycm9yWCksei5lcnJvcllPcHRpb25zLnB1c2goTy5lcnJvclkpLHouZmlsbE9wdGlvbnMucHVzaChPLmZpbGwpLHoubWFya2VyT3B0aW9ucy5wdXNoKE8ubWFya2VyKSx6Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKE8ubWFya2VyU2VsKSx6Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTy5tYXJrZXJVbnNlbCksei50ZXh0T3B0aW9ucy5wdXNoKE8udGV4dCksei50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTy50ZXh0U2VsKSx6LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKE8udGV4dFVuc2VsKSx6LnNlbGVjdEJhdGNoLnB1c2goW10pLHoudW5zZWxlY3RCYXRjaC5wdXNoKFtdKSxULl9zY2VuZT16LFQuaW5kZXg9ei5jb3VudCxULng9RSxULnk9TCxULnBvc2l0aW9ucz1DLHouY291bnQrKyxbe3g6ITEseTohMSx0OlQsdHJhY2U6ZX1dfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo1NDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjU0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTMsIi4uL3NjYXR0ZXIvY2FsYyI6OTIzLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI1LCIuL2NvbnN0YW50cyI6OTc3LCIuL2NvbnZlcnQiOjk3OCwiLi9zY2VuZV91cGRhdGUiOjk4NiwiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1OX1dLDk3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInN2Zy1wYXRoLXNkZiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGg9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxwPXQoIi4vaGVscGVycyIpLGQ9dCgiLi9jb25zdGFudHMiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxnPXtzdGFydDoxLGxlZnQ6MSxlbmQ6LTEscmlnaHQ6LTEsbWlkZGxlOjAsY2VudGVyOjAsYm90dG9tOjEsdG9wOi0xfSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZTtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsaT10Ll9mdWxsTGF5b3V0LGE9ZS5fbGVuZ3RoLG89ZS50ZXh0Zm9udCxsPWUudGV4dHBvc2l0aW9uLGM9QXJyYXkuaXNBcnJheShsKT9sOltsXSx1PW8uY29sb3IsZj1vLnNpemUsaD1vLmZhbWlseSxwPXt9LGQ9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLG09ZS50ZXh0dGVtcGxhdGU7aWYobSl7cC50ZXh0PVtdO3ZhciBnPWkuX2QzbG9jYWxlLHk9QXJyYXkuaXNBcnJheShtKSx4PXk/TWF0aC5taW4obS5sZW5ndGgsYSk6YSxiPXk/ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF19OmZ1bmN0aW9uKCl7cmV0dXJuIG19O2ZvcihyPTA7cjx4O3IrKyl7dmFyIF89e2k6cn0sdz1lLl9tb2R1bGUuZm9ybWF0TGFiZWxzKF8sZSxpKSxUPXt9O3YoVCxlLHIpO3ZhciBrPWUuX21ldGF8fHt9O3AudGV4dC5wdXNoKHMudGV4dHRlbXBsYXRlU3RyaW5nKGIociksdyxnLFQsXyxrKSl9fWVsc2UgQXJyYXkuaXNBcnJheShlLnRleHQpJiZlLnRleHQubGVuZ3RoPGE/cC50ZXh0PWUudGV4dC5zbGljZSgpOnAudGV4dD1lLnRleHQ7aWYoQXJyYXkuaXNBcnJheShwLnRleHQpKWZvcihyPXAudGV4dC5sZW5ndGg7cjxhO3IrKylwLnRleHRbcl09IiI7Zm9yKHAub3BhY2l0eT1lLm9wYWNpdHkscC5mb250PXt9LHAuYWxpZ249W10scC5iYXNlbGluZT1bXSxyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBBPWNbcl0uc3BsaXQoL1xzKy8pO3N3aXRjaChBWzFdKXtjYXNlImxlZnQiOnAuYWxpZ24ucHVzaCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0IjpwLmFsaWduLnB1c2goImxlZnQiKTticmVhaztkZWZhdWx0OnAuYWxpZ24ucHVzaChBWzFdKX1zd2l0Y2goQVswXSl7Y2FzZSJ0b3AiOnAuYmFzZWxpbmUucHVzaCgiYm90dG9tIik7YnJlYWs7Y2FzZSJib3R0b20iOnAuYmFzZWxpbmUucHVzaCgidG9wIik7YnJlYWs7ZGVmYXVsdDpwLmJhc2VsaW5lLnB1c2goQVswXSl9fWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKHAuY29sb3I9bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKXAuY29sb3Jbcl09dVtyXTtlbHNlIHAuY29sb3I9dTtpZihzLmlzQXJyYXlPclR5cGVkQXJyYXkoZil8fEFycmF5LmlzQXJyYXkoaCkpZm9yKHAuZm9udD1uZXcgQXJyYXkoYSkscj0wO3I8YTtyKyspe3ZhciBNPXAuZm9udFtyXT17fTtNLnNpemU9KHMuaXNUeXBlZEFycmF5KGYpP2Zbcl06QXJyYXkuaXNBcnJheShmKT9uKGZbcl0pP2Zbcl06MDpmKSpkLE0uZmFtaWx5PUFycmF5LmlzQXJyYXkoaCk/aFtyXTpofWVsc2UgcC5mb250PXtzaXplOmYqZCxmYW1pbHk6aH07cmV0dXJuIHB9ZnVuY3Rpb24geCh0KXt2YXIgZSxyLG49dC5fbGVuZ3RoLGk9dC5tYXJrZXIsbz17fSxsPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksZj1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxkPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLG09cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1wLmlzT3BlblN5bWJvbChpLnN5bWJvbCkpLGx8fGN8fGZ8fGQpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIHY9dShpLGkub3BhY2l0eSxuKSx5PXUoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkodlswXSkpe3ZhciBiPXY7Zm9yKHY9QXJyYXkobiksZT0wO2U8bjtlKyspdltlXT1ifWZvcihvLmNvbG9ycz12LG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9cC5pc09wZW5TeW1ib2woXyl9ciYmKHlbZV09dltlXS5zbGljZSgpLHZbZV09dltlXS5zbGljZSgpLHZbZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvciwidWludDgiKSk6KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsInVpbnQ4IikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPUUoaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9RShpLnN5bWJvbCk7dmFyIHcsVD1oKHQsMSk7aWYobXx8Zyl7dmFyIGssQT1vLnNpemVzPW5ldyBBcnJheShuKSxNPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLFM9MDtpZihtKXtmb3IoZT0wO2U8bjtlKyspQVtlXT1UKGkuc2l6ZVtlXSksUys9QVtlXTtrPVMvbn1lbHNlIGZvcih3PVQoaS5zaXplKSxlPTA7ZTxuO2UrKylBW2VdPXc7aWYoZylmb3IoZT0wO2U8bjtlKyspTVtlXT1pLmxpbmUud2lkdGhbZV07ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgsZT0wO2U8bjtlKyspTVtlXT13O28uc2l6ZUF2Zz1rfWVsc2Ugby5zaXplPVQoaSYmaS5zaXplfHwxMCksby5ib3JkZXJTaXplcz1UKGkubGluZS53aWR0aCk7cmV0dXJuIG99ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQubWFya2VyLG49e307cmV0dXJuIGU/KGUubWFya2VyJiZlLm1hcmtlci5zeW1ib2w/bj14KHMuZXh0ZW5kRmxhdCh7fSxyLGUubWFya2VyKSk6ZS5tYXJrZXImJihlLm1hcmtlci5zaXplJiYobi5zaXplPWUubWFya2VyLnNpemUpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49e307aWYoIXIpcmV0dXJuIG47aWYoci50ZXh0Zm9udCl7dmFyIGk9e29wYWNpdHk6MSx0ZXh0OmUudGV4dCx0ZXh0dGVtcGxhdGU6ZS50ZXh0dGVtcGxhdGUsdGV4dHBvc2l0aW9uOmUudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSxlLnRleHRmb250KX07ci50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KGkudGV4dGZvbnQsci50ZXh0Zm9udCksbj15KHQsaSl9cmV0dXJuIG59ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49e2NhcFNpemU6MiplLndpZHRoKnIsbGluZVdpZHRoOmUudGhpY2tuZXNzKnIsY29sb3I6ZS5jb2xvcn07cmV0dXJuIGUuY29weV95c3R5bGUmJihuPXQuZXJyb3JfeSksbn12YXIgVD1kLlNZTUJPTF9TREZfU0laRSxrPWQuU1lNQk9MX1NJWkUsQT1kLlNZTUJPTF9TVFJPS0UsTT17fSxTPWwuc3ltYm9sRnVuY3NbMF0oLjA1KmspO2Z1bmN0aW9uIEUodCl7aWYoImNpcmNsZSI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5pc0RvdFN5bWJvbCh0KTtyZXR1cm4gTVt0XT9NW3RdOihlPWMmJiFvP2EoMS4xKmspK1M6YShrKSxyPWkoZSx7dzpULGg6VCx2aWV3Qm94OlstaywtayxrLGtdLHN0cm9rZTpzP0E6LUF9KSxNW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9LGk9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvO2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGYuaGFzVGV4dChlKSYmKG4udGV4dD15KHQsZSksbi50ZXh0U2VsPV8odCxlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPV8odCxlLGUudW5zZWxlY3RlZCkpLGYuaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPXgoZSksbi5tYXJrZXJTZWw9YihlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9YihlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmcy5pc0FycmF5T3JUeXBlZEFycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGE9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShhLmxlbmd0aCkscj0wO3I8YS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1tKmFbcl19aWYoZi5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgqaSxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBvPShkLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8by5sZW5ndGg7KytyKW9bcl0qPWUubGluZS53aWR0aCppO24ubGluZS5kYXNoZXM9b31yZXR1cm4gZS5lcnJvcl94JiZlLmVycm9yX3gudmlzaWJsZSYmKG4uZXJyb3JYPXcoZSxlLmVycm9yX3gsaSkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT13KGUsZS5lcnJvcl95LGkpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTp4LG1hcmtlclNlbGVjdGlvbjpiLGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5kLlRPT19NQU5ZX1BPSU5UU3x8Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0scD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPXApOihoPW5baV0scD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsbT0tMS8wLGc9MCx2PTA7ZzxmO2crKyx2Kz00KXt2YXIgeT10W2ddO2lmKG4oeSkpe3ZhciB4PXJbMipnK2NdLGI9bCh5LGcpLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIFQ9eS1fLGs9eSt3O3Bbdit1WzBdXT14LWkuYzJsKFQpLHBbdit1WzFdXT1pLmMybChrKS14LHBbdit1WzJdXT0wLHBbdit1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLG09TWF0aC5tYXgobSx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsbV19fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsbT1nW3BdLHY9Z1tkXSx5PXU/dS8uOCsxOjAseD0tdip5LS41KnY7by5vZmZzZXRbaV09W20qeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Mzk3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi8uLi9yZWdpc3RyeSI6NjMzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6OTM5LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4vY29uc3RhbnRzIjo5NzcsIi4vaGVscGVycyI6OTgyLCJjb2xvci1ub3JtYWxpemUiOjg0LCJmYXN0LWlzbnVtZXJpYyI6MTg1LCJzdmctcGF0aC1zZGYiOjMwNX1dLDk3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2hlbHBlcnMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxsPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGQ9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe2Z1bmN0aW9uIGcocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgdj0hIXQubWFya2VyJiZhLmlzT3BlblN5bWJvbCh0Lm1hcmtlci5zeW1ib2wpLHk9bC5pc0J1YmJsZSh0KSx4PWModCxlLG0sZyk7aWYoeCl7dSh0LGUsbSxnKSxnKCJ4aG92ZXJmb3JtYXQiKSxnKCJ5aG92ZXJmb3JtYXQiKTt2YXIgYj14PHMuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjtnKCJ0ZXh0IiksZygiaG92ZXJ0ZXh0IiksZygiaG92ZXJ0ZW1wbGF0ZSIpLGcoIm1vZGUiLGIpLGwuaGFzTGluZXMoZSkmJihnKCJjb25uZWN0Z2FwcyIpLGgodCxlLHIsbSxnKSxnKCJsaW5lLnNoYXBlIikpLGwuaGFzTWFya2VycyhlKSYmKGYodCxlLHIsbSxnKSxnKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApKSxsLmhhc1RleHQoZSkmJihnKCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxtLGcpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtnKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZwKHQsZSxyLGcpO3ZhciBUPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO1QodCxlLF98fHd8fHIse2F4aXM6InkifSksVCh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxnKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjo5MjYsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjo5MzAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM1LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjo5NDksIi4vYXR0cmlidXRlcyI6OTc0LCIuL2hlbHBlcnMiOjk4Mn1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTTtlLmV4cG9ydHM9e3N0eWxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbih0KXt2YXIgZSxyLG89dFswXSxzPW8udHJhY2UsbD1vLnQsYz1sLl9zY2VuZSx1PWwuaW5kZXgsZj1jLnNlbGVjdEJhdGNoW3VdLGg9Yy51bnNlbGVjdEJhdGNoW3VdLHA9Yy50ZXh0T3B0aW9uc1t1XSxkPWMudGV4dFNlbGVjdGVkT3B0aW9uc1t1XXx8e30sbT1jLnRleHRVbnNlbGVjdGVkT3B0aW9uc1t1XXx8e30sZz1uLmV4dGVuZEZsYXQoe30scCk7aWYoZi5sZW5ndGh8fGgubGVuZ3RoKXt2YXIgdj1kLmNvbG9yLHk9bS5jb2xvcix4PXAuY29sb3IsYj1BcnJheS5pc0FycmF5KHgpO2ZvcihnLmNvbG9yPW5ldyBBcnJheShzLl9sZW5ndGgpLGU9MDtlPGYubGVuZ3RoO2UrKylyPWZbZV0sZy5jb2xvcltyXT12fHwoYj94W3JdOngpO2ZvcihlPTA7ZTxoLmxlbmd0aDtlKyspe3I9aFtlXTt2YXIgXz1iP3hbcl06eDtnLmNvbG9yW3JdPXl8fCh2P186aS5hZGRPcGFjaXR5KF8sYSkpfX1jLmdsVGV4dFt1XS51cGRhdGUoZyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjQ3MywiLi4vLi4vbGliIjo0OTh9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lmk7cmV0dXJuIngiaW4gdHx8KHQueD1lLl94W2ldKSwieSJpbiB0fHwodC55PWUuX3lbaV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiOjkzMX1dLDk4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO3IuaXNPcGVuU3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uLk9QRU5fUkUudGVzdCh0KTp0JTIwMD4xMDB9LHIuaXNEb3RTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uRE9UX1JFLnRlc3QodCk6dD4yMDB9fSx7Ii4vY29uc3RhbnRzIjo5Nzd9XSw5ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKTtmdW5jdGlvbiBvKHQsZSxyLG8pe3ZhciBzPXQueGEsbD10LnlhLGM9dC5kaXN0YW5jZSx1PXQuZHh5LGY9dC5pbmRleCxoPXtwb2ludE51bWJlcjpmLHg6ZVtmXSx5OnJbZl19O2gudHg9QXJyYXkuaXNBcnJheShvLnRleHQpP28udGV4dFtmXTpvLnRleHQsaC5odHg9QXJyYXkuaXNBcnJheShvLmhvdmVydGV4dCk/by5ob3ZlcnRleHRbZl06by5ob3ZlcnRleHQsaC5kYXRhPUFycmF5LmlzQXJyYXkoby5jdXN0b21kYXRhKT9vLmN1c3RvbWRhdGFbZl06by5jdXN0b21kYXRhLGgudHA9QXJyYXkuaXNBcnJheShvLnRleHRwb3NpdGlvbik/by50ZXh0cG9zaXRpb25bZl06by50ZXh0cG9zaXRpb247dmFyIHA9by50ZXh0Zm9udDtwJiYoaC50cz1pLmlzQXJyYXlPclR5cGVkQXJyYXkocC5zaXplKT9wLnNpemVbZl06cC5zaXplLGgudGM9QXJyYXkuaXNBcnJheShwLmNvbG9yKT9wLmNvbG9yW2ZdOnAuY29sb3IsaC50Zj1BcnJheS5pc0FycmF5KHAuZmFtaWx5KT9wLmZhbWlseVtmXTpwLmZhbWlseSk7dmFyIGQ9by5tYXJrZXI7ZCYmKGgubXM9aS5pc0FycmF5T3JUeXBlZEFycmF5KGQuc2l6ZSk/ZC5zaXplW2ZdOmQuc2l6ZSxoLm1vPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLm9wYWNpdHkpP2Qub3BhY2l0eVtmXTpkLm9wYWNpdHksaC5teD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5zeW1ib2wpP2Quc3ltYm9sW2ZdOmQuc3ltYm9sLGgubWM9aS5pc0FycmF5T3JUeXBlZEFycmF5KGQuY29sb3IpP2QuY29sb3JbZl06ZC5jb2xvcik7dmFyIG09ZCYmZC5saW5lO20mJihoLm1sYz1BcnJheS5pc0FycmF5KG0uY29sb3IpP20uY29sb3JbZl06bS5jb2xvcixoLm1sdz1pLmlzQXJyYXlPclR5cGVkQXJyYXkobS53aWR0aCk/bS53aWR0aFtmXTptLndpZHRoKTt2YXIgZz1kJiZkLmdyYWRpZW50O2cmJiJub25lIiE9PWcudHlwZSYmKGgubWd0PUFycmF5LmlzQXJyYXkoZy50eXBlKT9nLnR5cGVbZl06Zy50eXBlLGgubWdjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltmXTpnLmNvbG9yKTt2YXIgdj1zLmMycChoLngsITApLHk9bC5jMnAoaC55LCEwKSx4PWgubXJjfHwxLGI9by5ob3ZlcmxhYmVsO2ImJihoLmhiZz1BcnJheS5pc0FycmF5KGIuYmdjb2xvcik/Yi5iZ2NvbG9yW2ZdOmIuYmdjb2xvcixoLmhiYz1BcnJheS5pc0FycmF5KGIuYm9yZGVyY29sb3IpP2IuYm9yZGVyY29sb3JbZl06Yi5ib3JkZXJjb2xvcixoLmh0cz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYi5mb250LnNpemUpP2IuZm9udC5zaXplW2ZdOmIuZm9udC5zaXplLGguaHRjPUFycmF5LmlzQXJyYXkoYi5mb250LmNvbG9yKT9iLmZvbnQuY29sb3JbZl06Yi5mb250LmNvbG9yLGguaHRmPUFycmF5LmlzQXJyYXkoYi5mb250LmZhbWlseSk/Yi5mb250LmZhbWlseVtmXTpiLmZvbnQuZmFtaWx5LGguaG5sPWkuaXNBcnJheU9yVHlwZWRBcnJheShiLm5hbWVsZW5ndGgpP2IubmFtZWxlbmd0aFtmXTpiLm5hbWVsZW5ndGgpO3ZhciBfPW8uaG92ZXJpbmZvO18mJihoLmhpPUFycmF5LmlzQXJyYXkoXyk/X1tmXTpfKTt2YXIgdz1vLmhvdmVydGVtcGxhdGU7dyYmKGguaHQ9QXJyYXkuaXNBcnJheSh3KT93W2ZdOncpO3ZhciBUPXt9O1RbdC5pbmRleF09aDt2YXIgaz1vLl9vcmlnWCxBPW8uX29yaWdZLE09aS5leHRlbmRGbGF0KHt9LHQse2NvbG9yOmEobyxoKSx4MDp2LXgseDE6dit4LHhMYWJlbFZhbDprP2tbZl06aC54LHkwOnkteCx5MTp5K3gseUxhYmVsVmFsOkE/QVtmXTpoLnksY2Q6VCxkaXN0YW5jZTpjLHNwaWtlRGlzdGFuY2U6dSxob3ZlcnRlbXBsYXRlOmguaHR9KTtyZXR1cm4gaC5odHg/TS50ZXh0PWguaHR4OmgudHg/TS50ZXh0PWgudHg6by50ZXh0JiYoTS50ZXh0PW8udGV4dCksaS5maWxsVGV4dChoLG8sTSksbi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKGgsbyxNKSxNfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxzLGwsYyx1LGYsaCxwLGQsbT10LmNkLGc9bVswXS50LHY9bVswXS50cmFjZSx5PXQueGEseD10LnlhLGI9Zy54LF89Zy55LHc9eS5jMnAoZSksVD14LmMycChyKSxrPXQuZGlzdGFuY2U7aWYoZy50cmVlKXt2YXIgQT15LnAyYyh3LWspLE09eS5wMmModytrKSxTPXgucDJjKFQtayksRT14LnAyYyhUK2spO2k9IngiPT09bj9nLnRyZWUucmFuZ2UoTWF0aC5taW4oQSxNKSxNYXRoLm1pbih4Ll9ybFswXSx4Ll9ybFsxXSksTWF0aC5tYXgoQSxNKSxNYXRoLm1heCh4Ll9ybFswXSx4Ll9ybFsxXSkpOmcudHJlZS5yYW5nZShNYXRoLm1pbihBLE0pLE1hdGgubWluKFMsRSksTWF0aC5tYXgoQSxNKSxNYXRoLm1heChTLEUpKX1lbHNlIGk9Zy5pZHM7dmFyIEw9aztpZigieCI9PT1uKXt2YXIgQz0hIXYueHBlcmlvZGFsaWdubWVudCxQPSEhdi55cGVyaW9kYWxpZ25tZW50O2Zvcih1PTA7dTxpLmxlbmd0aDt1Kyspe2lmKGw9YlthPWlbdV1dLGY9TWF0aC5hYnMoeS5jMnAobCktdyksQyl7dmFyIEk9eS5jMnAodi5feFN0YXJ0c1thXSksTz15LmMycCh2Ll94RW5kc1thXSk7Zj13Pj1NYXRoLm1pbihJLE8pJiZ3PD1NYXRoLm1heChJLE8pPzA6MS8wfWlmKGY8TCl7aWYoTD1mLGM9X1thXSxoPXguYzJwKGMpLVQsUCl7dmFyIHo9eC5jMnAodi5feVN0YXJ0c1thXSksRD14LmMycCh2Ll95RW5kc1thXSk7aD1UPj1NYXRoLm1pbih6LEQpJiZUPD1NYXRoLm1heCh6LEQpPzA6MS8wfWQ9TWF0aC5zcXJ0KGYqZitoKmgpLHM9aVt1XX19fWVsc2UgZm9yKHU9aS5sZW5ndGgtMTt1Pi0xO3UtLSlsPWJbYT1pW3VdXSxjPV9bYV0sZj15LmMycChsKS13LGg9eC5jMnAoYyktVCwocD1NYXRoLnNxcnQoZipmK2gqaCkpPEwmJihMPWQ9cCxzPWEpO3JldHVybiB0LmluZGV4PXMsdC5kaXN0YW5jZT1MLHQuZHh5PWQsdm9pZCAwPT09cz9bdF06W28odCxiLF8sdildfSxjYWxjSG92ZXI6b319LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjo5MzJ9XSw5ODQ6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODkxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9iYXNlX2luZGV4Ijo5NzUsIi4vcGxvdCI6OTg1LGR1cDo4OTF9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQiKSxpPXQoInJlZ2wtbGluZTJkIiksYT10KCJyZWdsLWVycm9yMmQiKSxvPXQoImdsLXRleHQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZSxjPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxmPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSxoPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbixwPXt9O2Z1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9dC5fc2l6ZSxhPXQud2lkdGgqbixvPXQuaGVpZ2h0Km4scz1pLmwqbixsPWkuYipuLGM9aS5yKm4sdT1pLnQqbixmPWkudypuLGg9aS5oKm47cmV0dXJuW3MrZS5kb21haW5bMF0qZixsK3IuZG9tYWluWzBdKmgsYS1jLSgxLWUuZG9tYWluWzFdKSpmLG8tdS0oMS1yLmRvbWFpblsxXSkqaF19KGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBtLGcsdj10Ll9mdWxsTGF5b3V0LHk9ZS5fc2NlbmUseD1lLnhheGlzLGI9ZS55YXhpcztpZih5KWlmKGModCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0scCkpe3ZhciBfPXkuY291bnQsdz12Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihmKHQsZSxyKSx5LmRpcnR5KXtpZighMD09PXkuZXJyb3IyZCYmKHkuZXJyb3IyZD1hKHcpKSwhMD09PXkubGluZTJkJiYoeS5saW5lMmQ9aSh3KSksITA9PT15LnNjYXR0ZXIyZCYmKHkuc2NhdHRlcjJkPW4odykpLCEwPT09eS5maWxsMmQmJih5LmZpbGwyZD1pKHcpKSwhMD09PXkuZ2xUZXh0KWZvcih5LmdsVGV4dD1uZXcgQXJyYXkoXyksbT0wO208XzttKyspeS5nbFRleHRbbV09bmV3IG8odyk7aWYoeS5nbFRleHQpe2lmKF8+eS5nbFRleHQubGVuZ3RoKXt2YXIgVD1fLXkuZ2xUZXh0Lmxlbmd0aDtmb3IobT0wO208VDttKyspeS5nbFRleHQucHVzaChuZXcgbyh3KSl9ZWxzZSBpZihfPHkuZ2xUZXh0Lmxlbmd0aCl7dmFyIGs9eS5nbFRleHQubGVuZ3RoLV87eS5nbFRleHQuc3BsaWNlKF8saykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95KCl9KSl9Zm9yKG09MDttPF87bSsrKXkuZ2xUZXh0W21dLnVwZGF0ZSh5LnRleHRPcHRpb25zW21dKX1pZih5LmxpbmUyZCYmKHkubGluZTJkLnVwZGF0ZSh5LmxpbmVPcHRpb25zKSx5LmxpbmVPcHRpb25zPXkubGluZU9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtpZih0JiZ0LnBvc2l0aW9ucyl7Zm9yKHZhciBlPXQucG9zaXRpb25zLHI9MDtyPGUubGVuZ3RoJiYoaXNOYU4oZVtyXSl8fGlzTmFOKGVbcisxXSkpOylyKz0yO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+ciYmKGlzTmFOKGVbbl0pfHxpc05hTihlW24rMV0pKTspbi09Mjt0LnBvc2l0aW9ucz1lLnNsaWNlKHIsbisyKX1yZXR1cm4gdH0pKSx5LmxpbmUyZC51cGRhdGUoeS5saW5lT3B0aW9ucykpLHkuZXJyb3IyZCl7dmFyIEE9KHkuZXJyb3JYT3B0aW9uc3x8W10pLmNvbmNhdCh5LmVycm9yWU9wdGlvbnN8fFtdKTt5LmVycm9yMmQudXBkYXRlKEEpfXkuc2NhdHRlcjJkJiZ5LnNjYXR0ZXIyZC51cGRhdGUoeS5tYXJrZXJPcHRpb25zKSx5LmZpbGxPcmRlcj1zLnJlcGVhdChudWxsLF8pLHkuZmlsbDJkJiYoeS5maWxsT3B0aW9ucz15LmZpbGxPcHRpb25zLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPXkubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKHkuZmlsbE9yZGVyW2VdPXUpO3ZhciBmLGgscD1bXSxkPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZigidG96ZXJveSI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxkLmxlbmd0aCYmaXNOYU4oZFtmKzFdKTspZis9Mjtmb3IoaD1kLmxlbmd0aC0yO2g+ZiYmaXNOYU4oZFtoKzFdKTspaC09MjswIT09ZFtmKzFdJiYocD1bZFtmXSwwXSkscD1wLmNvbmNhdChkLnNsaWNlKGYsaCsyKSksMCE9PWRbaCsxXSYmKHA9cC5jb25jYXQoW2RbaF0sMF0pKX1lbHNlIGlmKCJ0b3plcm94Ij09PXMuZmlsbCl7Zm9yKGY9MDtmPGQubGVuZ3RoJiZpc05hTihkW2ZdKTspZis9Mjtmb3IoaD1kLmxlbmd0aC0yO2g+ZiYmaXNOYU4oZFtoXSk7KWgtPTI7MCE9PWRbZl0mJihwPVswLGRbZisxXV0pLHA9cC5jb25jYXQoZC5zbGljZShmLGgrMikpLDAhPT1kW2hdJiYocD1wLmNvbmNhdChbMCxkW2grMV1dKSl9ZWxzZSBpZigidG9zZWxmIj09PXMuZmlsbHx8InRvbmV4dCI9PT1zLmZpbGwpe2ZvcihwPVtdLGk9MCx0LnNwbGl0TnVsbD0hMCxhPTA7YTxkLmxlbmd0aDthKz0yKShpc05hTihkW2FdKXx8aXNOYU4oZFthKzFdKSkmJigocD1wLmNvbmNhdChkLnNsaWNlKGksYSkpKS5wdXNoKGRbaV0sZFtpKzFdKSxwLnB1c2gobnVsbCxudWxsKSxpPWErMik7cD1wLmNvbmNhdChkLnNsaWNlKGkpKSxpJiZwLnB1c2goZFtpXSxkW2krMV0pfWVsc2V7dmFyIG09cy5fbmV4dHRyYWNlO2lmKG0pe3ZhciBnPXkubGluZU9wdGlvbnNbZSsxXTtpZihnKXt2YXIgdj1nLnBvc2l0aW9ucztpZigidG9uZXh0eSI9PT1zLmZpbGwpe2ZvcihwPWQuc2xpY2UoKSxlPU1hdGguZmxvb3Iodi5sZW5ndGgvMik7ZS0tOyl7dmFyIHg9dlsyKmVdLGI9dlsyKmUrMV07aXNOYU4oeCl8fGlzTmFOKGIpfHxwLnB1c2goeCxiKX10LmZpbGw9bS5maWxsY29sb3J9fX19aWYocy5fcHJldnRyYWNlJiYidG9uZXh0Ij09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz15LmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9cC5sZW5ndGgvMixUPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihULnB1c2goYS8yK3crMSksaT1hKzIpO3A9cC5jb25jYXQoXyksdC5ob2xlPVR9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9cCx0fX0pKSx5LmZpbGwyZC51cGRhdGUoeS5maWxsT3B0aW9ucykpfXZhciBNPXYuZHJhZ21vZGUsUz1sKE0pLEU9di5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTE7Zm9yKG09MDttPF87bSsrKXt2YXIgTD1yW21dWzBdLEM9TC50cmFjZSxQPUwudCxJPVAuaW5kZXgsTz1DLl9sZW5ndGgsej1QLngsRD1QLnk7aWYoQy5zZWxlY3RlZHBvaW50c3x8U3x8RSl7aWYoU3x8KFM9ITApLEMuc2VsZWN0ZWRwb2ludHMpe3ZhciBSPXkuc2VsZWN0QmF0Y2hbSV09cy5zZWxJbmRpY2VzMnNlbFBvaW50cyhDKSxGPXt9O2ZvcihnPTA7ZzxSLmxlbmd0aDtnKyspRltSW2ddXT0xO3ZhciBCPVtdO2ZvcihnPTA7ZzxPO2crKylGW2ddfHxCLnB1c2goZyk7eS51bnNlbGVjdEJhdGNoW0ldPUJ9dmFyIE49UC54cHg9bmV3IEFycmF5KE8pLGo9UC55cHg9bmV3IEFycmF5KE8pO2ZvcihnPTA7ZzxPO2crKylOW2ddPXguYzJwKHpbZ10pLGpbZ109Yi5jMnAoRFtnXSl9ZWxzZSBQLnhweD1QLnlweD1udWxsfWlmKFMpe2lmKHkuc2VsZWN0MmR8fCh5LnNlbGVjdDJkPW4odi5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSx5LnNjYXR0ZXIyZCl7dmFyIFU9bmV3IEFycmF5KF8pO2ZvcihtPTA7bTxfO20rKylVW21dPXkuc2VsZWN0QmF0Y2hbbV0ubGVuZ3RofHx5LnVuc2VsZWN0QmF0Y2hbbV0ubGVuZ3RoP3kubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbbV06e307eS5zY2F0dGVyMmQudXBkYXRlKFUpfXkuc2VsZWN0MmQmJih5LnNlbGVjdDJkLnVwZGF0ZSh5Lm1hcmtlck9wdGlvbnMpLHkuc2VsZWN0MmQudXBkYXRlKHkubWFya2VyU2VsZWN0ZWRPcHRpb25zKSkseS5nbFRleHQmJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307dS5oYXNUZXh0KGUpJiZoKHQpfSkpfWVsc2UgeS5zY2F0dGVyMmQmJnkuc2NhdHRlcjJkLnVwZGF0ZSh5Lm1hcmtlck9wdGlvbnMpO3ZhciBWPXt2aWV3cG9ydDpkKHYseCxiLHQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbykscmFuZ2U6Wyh4Ll9ybHx8eC5yYW5nZSlbMF0sKGIuX3JsfHxiLnJhbmdlKVswXSwoeC5fcmx8fHgucmFuZ2UpWzFdLChiLl9ybHx8Yi5yYW5nZSlbMV1dfSxIPXMucmVwZWF0KFYseS5jb3VudCk7eS5maWxsMmQmJnkuZmlsbDJkLnVwZGF0ZShIKSx5LmxpbmUyZCYmeS5saW5lMmQudXBkYXRlKEgpLHkuZXJyb3IyZCYmeS5lcnJvcjJkLnVwZGF0ZShILmNvbmNhdChIKSkseS5zY2F0dGVyMmQmJnkuc2NhdHRlcjJkLnVwZGF0ZShIKSx5LnNlbGVjdDJkJiZ5LnNlbGVjdDJkLnVwZGF0ZShIKSx5LmdsVGV4dCYmeS5nbFRleHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC51cGRhdGUoVil9KSl9ZWxzZSB5LmluaXQoKX19KS5yZWdsUHJlY29tcGlsZWQ9cH0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjM3OSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjUxMSwiLi4vc2NhdHRlci9saW5rX3RyYWNlcyI6OTM4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4vZWRpdF9zdHlsZSI6OTgwLCJnbC10ZXh0IjoyMjAsInJlZ2wtZXJyb3IyZCI6Mjc0LCJyZWdsLWxpbmUyZCI6Mjc1LCJyZWdsLXNjYXR0ZXIyZCI6Mjc2fV0sOTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX3NjZW5lLGk9e2NvdW50OjAsZGlydHk6ITAsbGluZU9wdGlvbnM6W10sZmlsbE9wdGlvbnM6W10sbWFya2VyT3B0aW9uczpbXSxtYXJrZXJTZWxlY3RlZE9wdGlvbnM6W10sbWFya2VyVW5zZWxlY3RlZE9wdGlvbnM6W10sZXJyb3JYT3B0aW9uczpbXSxlcnJvcllPcHRpb25zOltdLHRleHRPcHRpb25zOltdLHRleHRTZWxlY3RlZE9wdGlvbnM6W10sdGV4dFVuc2VsZWN0ZWRPcHRpb25zOltdLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119LGE9e2ZpbGwyZDohMSxzY2F0dGVyMmQ6ITEsZXJyb3IyZDohMSxsaW5lMmQ6ITEsZ2xUZXh0OiExLHNlbGVjdDJkOiExfTtyZXR1cm4gZS5fc2NlbmV8fCgocj1lLl9zY2VuZT17fSkuaW5pdD1mdW5jdGlvbigpe24uZXh0ZW5kRmxhdChyLGEsaSl9LHIuaW5pdCgpLHIudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPW4ucmVwZWF0KHQsci5jb3VudCk7aWYoci5maWxsMmQmJnIuZmlsbDJkLnVwZGF0ZShlKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQudXBkYXRlKGUpLHIubGluZTJkJiZyLmxpbmUyZC51cGRhdGUoZSksci5lcnJvcjJkJiZyLmVycm9yMmQudXBkYXRlKGUuY29uY2F0KGUpKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLnVwZGF0ZShlKSxyLmdsVGV4dClmb3IodmFyIGk9MDtpPHIuY291bnQ7aSsrKXIuZ2xUZXh0W2ldLnVwZGF0ZSh0KX0sci5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIuY291bnQsZT1yLmZpbGwyZCxpPXIuZXJyb3IyZCxhPXIubGluZTJkLG89ci5zY2F0dGVyMmQscz1yLmdsVGV4dCxsPXIuc2VsZWN0MmQsYz1yLnNlbGVjdEJhdGNoLHU9ci51bnNlbGVjdEJhdGNoLGY9MDtmPHQ7ZisrKXtpZihlJiZyLmZpbGxPcmRlcltmXSYmZS5kcmF3KHIuZmlsbE9yZGVyW2ZdKSxhJiZyLmxpbmVPcHRpb25zW2ZdJiZhLmRyYXcoZiksaSYmKHIuZXJyb3JYT3B0aW9uc1tmXSYmaS5kcmF3KGYpLHIuZXJyb3JZT3B0aW9uc1tmXSYmaS5kcmF3KGYrdCkpLG8mJnIubWFya2VyT3B0aW9uc1tmXSlpZih1W2ZdLmxlbmd0aCl7dmFyIGg9bi5yZXBlYXQoW10sci5jb3VudCk7aFtmXT11W2ZdLG8uZHJhdyhoKX1lbHNlIGNbZl0ubGVuZ3RofHxvLmRyYXcoZik7c1tmXSYmci50ZXh0T3B0aW9uc1tmXSYmc1tmXS5yZW5kZXIoKX1sJiZsLmRyYXcoYyksci5kaXJ0eT0hMX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3kmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3kmJnIuZXJyb3IyZC5kZXN0cm95KCksci5saW5lMmQmJnIubGluZTJkLmRlc3Ryb3kmJnIubGluZTJkLmRlc3Ryb3koKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLmRlc3Ryb3kmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHIubGluZU9wdGlvbnM9bnVsbCxyLmZpbGxPcHRpb25zPW51bGwsci5tYXJrZXJPcHRpb25zPW51bGwsci5tYXJrZXJTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5lcnJvclhPcHRpb25zPW51bGwsci5lcnJvcllPcHRpb25zPW51bGwsci50ZXh0T3B0aW9ucz1udWxsLHIudGV4dFNlbGVjdGVkT3B0aW9ucz1udWxsLHIudGV4dFVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5zZWxlY3RCYXRjaD1udWxsLHIudW5zZWxlY3RCYXRjaD1udWxsLGUuX3NjZW5lPW51bGx9KSxyLmRpcnR5fHxuLmV4dGVuZEZsYXQocixpKSxyfX0seyIuLi8uLi9saWIiOjQ5OH1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuL2VkaXRfc3R5bGUiKS5zdHlsZVRleHRTZWxlY3Rpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W10sbD1yWzBdLnRyYWNlLGM9clswXS50LHU9bC5fbGVuZ3RoLGY9Yy54LGg9Yy55LHA9Yy5fc2NlbmUsZD1jLmluZGV4O2lmKCFwKXJldHVybiBzO3ZhciBtPW4uaGFzVGV4dChsKSxnPW4uaGFzTWFya2VycyhsKSx2PSFnJiYhbTtpZighMCE9PWwudmlzaWJsZXx8dilyZXR1cm4gczt2YXIgeT1bXSx4PVtdO2lmKCExIT09ZSYmIWUuZGVnZW5lcmF0ZSlmb3IodmFyIGI9MDtiPHU7YisrKWUuY29udGFpbnMoW2MueHB4W2JdLGMueXB4W2JdXSwhMSxiLHQpPyh5LnB1c2goYikscy5wdXNoKHtwb2ludE51bWJlcjpiLHg6YS5jMmQoZltiXSkseTpvLmMyZChoW2JdKX0pKTp4LnB1c2goYik7aWYoZyl7dmFyIF89cC5zY2F0dGVyMmQ7aWYoeS5sZW5ndGh8fHgubGVuZ3RoKXtpZighcC5zZWxlY3RCYXRjaFtkXS5sZW5ndGgmJiFwLnVuc2VsZWN0QmF0Y2hbZF0ubGVuZ3RoKXt2YXIgdz1uZXcgQXJyYXkocC5jb3VudCk7d1tkXT1wLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zW2RdLF8udXBkYXRlLmFwcGx5KF8sdyl9fWVsc2V7dmFyIFQ9bmV3IEFycmF5KHAuY291bnQpO1RbZF09cC5tYXJrZXJPcHRpb25zW2RdLF8udXBkYXRlLmFwcGx5KF8sVCl9fXJldHVybiBwLnNlbGVjdEJhdGNoW2RdPXkscC51bnNlbGVjdEJhdGNoW2RdPXgsbSYmaShyKSxzfX0seyIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4vZWRpdF9zdHlsZSI6OTgwfV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaD1hLmxpbmUscD1hLm1hcmtlcjtlLmV4cG9ydHM9Zih7bG9uOmEubG9uLGxhdDphLmxhdCxtb2RlOnUoe30sby5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6dSh7fSxvLnRleHQse30pLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwidGV4dCJdfSksaG92ZXJ0ZXh0OnUoe30sby5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aH0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6dSh7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sYW5nbGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoiYXV0byIsYXJyYXlPazohMH0sYWxsb3dvdmVybGFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5OnAub3BhY2l0eSxzaXplOnAuc2l6ZSxzaXplcmVmOnAuc2l6ZXJlZixzaXplbWluOnAuc2l6ZW1pbixzaXplbW9kZTpwLnNpemVtb2RlfSxjKCJtYXJrZXIiKSksZmlsbDphLmZpbGwsZmlsbGNvbG9yOm8uZmlsbGNvbG9yLHRleHRmb250OnMubGF5ZXJzLnN5bWJvbC50ZXh0Zm9udCx0ZXh0cG9zaXRpb246cy5sYXllcnMuc3ltYm9sLnRleHRwb3NpdGlvbixiZWxvdzp7dmFsVHlwZToic3RyaW5nIn0sc2VsZWN0ZWQ6e21hcmtlcjpvLnNlbGVjdGVkLm1hcmtlcn0sdW5zZWxlY3RlZDp7bWFya2VyOm8udW5zZWxlY3RlZC5tYXJrZXJ9LGhvdmVyaW5mbzp1KHt9LGwuaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjYxMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyMiwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjo5NjR9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxmPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLHA9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikuTkVXTElORVMsZD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5CUl9UQUdfQUxMO2Z1bmN0aW9uIG0oKXtyZXR1cm57Z2VvanNvbjpvLm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuaXNBcnJheU9yVHlwZWRBcnJheSh0KT9lP2Z1bmN0aW9uKGUpe3JldHVybiBuKHRbZV0pPyt0W2VdOjB9OmZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OnZ9ZnVuY3Rpb24gdigpe3JldHVybiIifWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE9ZVswXS50cmFjZSx4PSEwPT09YS52aXNpYmxlJiYwIT09YS5fbGVuZ3RoLGI9Im5vbmUiIT09YS5maWxsLF89dS5oYXNMaW5lcyhhKSx3PXUuaGFzTWFya2VycyhhKSxUPXUuaGFzVGV4dChhKSxrPXcmJiJjaXJjbGUiPT09YS5tYXJrZXIuc3ltYm9sLEE9dyYmImNpcmNsZSIhPT1hLm1hcmtlci5zeW1ib2wsTT1tKCksUz1tKCksRT1tKCksTD1tKCksQz17ZmlsbDpNLGxpbmU6UyxjaXJjbGU6RSxzeW1ib2w6TH07aWYoIXgpcmV0dXJuIEM7aWYoKGJ8fF8pJiYocj1vLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSksYiYmKE0uZ2VvanNvbj1vLm1ha2VQb2x5Z29uKHIpLE0ubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChNLnBhaW50LHsiZmlsbC1jb2xvciI6YS5maWxsY29sb3J9KSksXyYmKFMuZ2VvanNvbj1vLm1ha2VMaW5lKHIpLFMubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChTLnBhaW50LHsibGluZS13aWR0aCI6YS5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjphLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6YS5vcGFjaXR5fSkpLGspe3ZhciBQPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHU9dFswXS50cmFjZSxmPXUubWFya2VyLGg9dS5zZWxlY3RlZHBvaW50cyxwPWkuaXNBcnJheU9yVHlwZWRBcnJheShmLmNvbG9yKSxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShmLnNpemUpLG09aS5pc0FycmF5T3JUeXBlZEFycmF5KGYub3BhY2l0eSk7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdS5vcGFjaXR5KnR9cCYmKHI9cy5oYXNDb2xvcnNjYWxlKHUsIm1hcmtlciIpP3MubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKGYpOmkuaWRlbnRpdHkpO2QmJihhPWModSkpO20mJihvPWZ1bmN0aW9uKHQpe3JldHVybiBnKG4odCk/K2kuY29uc3RyYWluKHQsMCwxKTowKX0pO3ZhciB2LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCF5KF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGgmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpffSxwcm9wZXJ0aWVzOnd9KX19aWYoaClmb3Iodj1sLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModSksZT0wO2U8eC5sZW5ndGg7ZSsrKXt2YXIgVD14W2VdLnByb3BlcnRpZXM7di5zZWxlY3RlZE9wYWNpdHlGbiYmKFQubW89Zyh2LnNlbGVjdGVkT3BhY2l0eUZuKFQpKSksdi5zZWxlY3RlZENvbG9yRm4mJihULm1jYz12LnNlbGVjdGVkQ29sb3JGbihUKSksdi5zZWxlY3RlZFNpemVGbiYmKFQubXJjPXYuc2VsZWN0ZWRTaXplRm4oVCkpfXJldHVybntnZW9qc29uOnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6eH0sbWNjOnB8fHYmJnYuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1jYyJ9OmYuY29sb3IsbXJjOmR8fHYmJnYuc2VsZWN0ZWRTaXplRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibXJjIn06KGs9Zi5zaXplLGsvMiksbW86bXx8diYmdi5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OmcoZi5vcGFjaXR5KX07dmFyIGt9KGUpO0UuZ2VvanNvbj1QLmdlb2pzb24sRS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KEUucGFpbnQseyJjaXJjbGUtY29sb3IiOlAubWNjLCJjaXJjbGUtcmFkaXVzIjpQLm1yYywiY2lyY2xlLW9wYWNpdHkiOlAubW99KX1pZigoQXx8VCkmJihMLmdlb2pzb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fZnVsbExheW91dCxuPXRbMF0udHJhY2UsYT1uLm1hcmtlcnx8e30sbz1hLnN5bWJvbCxzPWEuYW5nbGUsbD0iY2lyY2xlIiE9PW8/ZyhvKTp2LGM9ImF1dG8iIT09cz9nKHMsITApOnYsZj11Lmhhc1RleHQobik/ZyhuLnRleHQpOnYsbT1bXSx4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF07aWYoIXkoYi5sb25sYXQpKXt2YXIgXyx3PW4udGV4dHRlbXBsYXRlO2lmKHcpe3ZhciBUPUFycmF5LmlzQXJyYXkodyk/d1t4XXx8IiI6dyxrPW4uX21vZHVsZS5mb3JtYXRMYWJlbHMoYixuLHIpLEE9e307aChBLG4sYi5pKTt2YXIgTT1uLl9tZXRhfHx7fTtfPWkudGV4dHRlbXBsYXRlU3RyaW5nKFQsayxyLl9kM2xvY2FsZSxBLGIsTSl9ZWxzZSBfPWYoeCk7XyYmKF89Xy5yZXBsYWNlKHAsIiIpLnJlcGxhY2UoZCwiXG4iKSksbS5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOmIubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6bCh4KSxhbmdsZTpjKHgpLHRleHQ6X319KX19cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczptfX0oZSx0KSxpLmV4dGVuZEZsYXQoTC5sYXlvdXQse3Zpc2liaWxpdHk6InZpc2libGUiLCJpY29uLWltYWdlIjoie3N5bWJvbH0tMTUiLCJ0ZXh0LWZpZWxkIjoie3RleHR9In0pLEEmJihpLmV4dGVuZEZsYXQoTC5sYXlvdXQseyJpY29uLXNpemUiOmEubWFya2VyLnNpemUvMTB9KSwiYW5nbGUiaW4gYS5tYXJrZXImJiJhdXRvIiE9PWEubWFya2VyLmFuZ2xlJiZpLmV4dGVuZEZsYXQoTC5sYXlvdXQseyJpY29uLXJvdGF0ZSI6e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToiYW5nbGUifSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSksTC5sYXlvdXRbImljb24tYWxsb3ctb3ZlcmxhcCJdPWEubWFya2VyLmFsbG93b3ZlcmxhcCxpLmV4dGVuZEZsYXQoTC5wYWludCx7Imljb24tb3BhY2l0eSI6YS5vcGFjaXR5KmEubWFya2VyLm9wYWNpdHksImljb24tY29sb3IiOmEubWFya2VyLmNvbG9yfSkpLFQpKXt2YXIgST0oYS5tYXJrZXJ8fHt9KS5zaXplLE89ZihhLnRleHRwb3NpdGlvbixJKTtpLmV4dGVuZEZsYXQoTC5sYXlvdXQseyJ0ZXh0LXNpemUiOmEudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOk8uYW5jaG9yLCJ0ZXh0LW9mZnNldCI6Ty5vZmZzZXR9KSxpLmV4dGVuZEZsYXQoTC5wYWludCx7InRleHQtY29sb3IiOmEudGV4dGZvbnQuY29sb3IsInRleHQtb3BhY2l0eSI6YS5vcGFjaXR5fSl9cmV0dXJuIEN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjYwNywiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjkzOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihmdW5jdGlvbih0LGUscil7dmFyIG49cigibG9uIil8fFtdLGk9cigibGF0Iil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpO3JldHVybiBlLl9sZW5ndGg9YSxhfSgwLGUsZikpe2lmKGYoInRleHQiKSxmKCJ0ZXh0dGVtcGxhdGUiKSxmKCJob3ZlcnRleHQiKSxmKCJob3ZlcnRlbXBsYXRlIiksZigibW9kZSIpLGYoImJlbG93IiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxmLHtub0Rhc2g6ITB9KSxmKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxmLHtub0xpbmU6ITB9KSxmKCJtYXJrZXIuYWxsb3dvdmVybGFwIiksZigibWFya2VyLmFuZ2xlIik7dmFyIGg9ZS5tYXJrZXI7ImNpcmNsZSIhPT1oLnN5bWJvbCYmKG4uaXNBcnJheU9yVHlwZWRBcnJheShoLnNpemUpJiYoaC5zaXplPWguc2l6ZVswXSksbi5pc0FycmF5T3JUeXBlZEFycmF5KGguY29sb3IpJiYoaC5jb2xvcj1oLmNvbG9yWzBdKSl9aS5oYXNUZXh0KGUpJiZzKHQsZSx1LGYse25vU2VsZWN0OiEwfSksZigiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjo5MzAsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM1LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuL2F0dHJpYnV0ZXMiOjk4OH1dLDk5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGkubG9uTGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMF0pLCEwKS50ZXh0LGkubGF0TGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMV0pLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89aS5maWxsVGV4dCxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7aWYoIXQuaG92ZXJ0ZW1wbGF0ZSl7dmFyIG49KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdCgiKyIpLGk9LTEhPT1uLmluZGV4T2YoImFsbCIpLGE9LTEhPT1uLmluZGV4T2YoImxvbiIpLHM9LTEhPT1uLmluZGV4T2YoImxhdCIpLGw9ZS5sb25sYXQsYz1bXTtyZXR1cm4gaXx8YSYmcz9jLnB1c2goIigiK3UobFsxXSkrIiwgIit1KGxbMF0pKyIpIik6YT9jLnB1c2goci5sb24rdShsWzBdKSk6cyYmYy5wdXNoKHIubGF0K3UobFsxXSkpLChpfHwtMSE9PW4uaW5kZXhPZigidGV4dCIpKSYmbyhlLHQsYyksYy5qb2luKCI8YnI+Iil9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCsiXHhiMCJ9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXQuY2QsYz1vWzBdLnRyYWNlLHU9dC54YSxmPXQueWEsaD10LnN1YnBsb3QscD0zNjAqKGU+PTA/TWF0aC5mbG9vcigoZSsxODApLzM2MCk6TWF0aC5jZWlsKChlLTE4MCkvMzYwKSksZD1lLXA7aWYobi5nZXRDbG9zZXN0KG8sKGZ1bmN0aW9uKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1zKXJldHVybiAxLzA7dmFyIG49aS5tb2RIYWxmKGVbMF0sMzYwKSxhPWVbMV0sbz1oLnByb2plY3QoW24sYV0pLGw9by54LXUuYzJwKFtkLGFdKSxjPW8ueS1mLmMycChbbixyXSkscD1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLXAsMS0zL3ApfSksdCksITEhPT10LmluZGV4KXt2YXIgbT1vW3QuaW5kZXhdLGc9bS5sb25sYXQsdj1baS5tb2RIYWxmKGdbMF0sMzYwKStwLGdbMV1dLHk9dS5jMnAodikseD1mLmMycCh2KSxiPW0ubXJjfHwxO3QueDA9eS1iLHQueDE9eStiLHQueTA9eC1iLHQueTE9eCtiO3ZhciBfPXt9O19bYy5zdWJwbG90XT17X3N1YnBsb3Q6aH07dmFyIHc9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhtLGMsXyk7cmV0dXJuIHQubG9uTGFiZWw9dy5sb25MYWJlbCx0LmxhdExhYmVsPXcubGF0TGFiZWwsdC5jb2xvcj1hKGMsbSksdC5leHRyYVRleHQ9bChjLG0sb1swXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fSxnZXRFeHRyYVRleHQ6bH19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NDAxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6OTMyfV0sOTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuLi9zY2F0dGVyZ2VvL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0Iiksc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe2UmJmVbMF0udHJhY2UuX2dsVHJhY2UudXBkYXRlKGUpfSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcm1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjYwOCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi4vc2NhdHRlcmdlby9jYWxjIjo5NjUsIi4vYXR0cmlidXRlcyI6OTg4LCIuL2RlZmF1bHRzIjo5OTAsIi4vZXZlbnRfZGF0YSI6OTkxLCIuL2Zvcm1hdF9sYWJlbHMiOjk5MiwiLi9ob3ZlciI6OTkzLCIuL3Bsb3QiOjk5NSwiLi9zZWxlY3QiOjk5Nn1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKSxpPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4LGE9WyJmaWxsIiwibGluZSIsImNpcmNsZSIsInN5bWJvbCJdO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnR5cGU9InNjYXR0ZXJtYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZHM9e2ZpbGw6InNvdXJjZS0iK2UrIi1maWxsIixsaW5lOiJzb3VyY2UtIitlKyItbGluZSIsY2lyY2xlOiJzb3VyY2UtIitlKyItY2lyY2xlIixzeW1ib2w6InNvdXJjZS0iK2UrIi1zeW1ib2wifSx0aGlzLmxheWVySWRzPXtmaWxsOmkrZSsiLWZpbGwiLGxpbmU6aStlKyItbGluZSIsY2lyY2xlOmkrZSsiLWNpcmNsZSIsc3ltYm9sOmkrZSsiLXN5bWJvbCJ9LHRoaXMuYmVsb3c9bnVsbH12YXIgcz1vLnByb3RvdHlwZTtzLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkU291cmNlKHRoaXMuc291cmNlSWRzW3RdLHt0eXBlOiJnZW9qc29uIixkYXRhOmUuZ2VvanNvbn0pfSxzLnNldFNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSkuc2V0RGF0YShlLmdlb2pzb24pfSxzLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN1YnBsb3QuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0scil9LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxvPXRoaXMuc3VicGxvdCxzPW8ubWFwLGw9bihvLmdkLHQpLGM9by5iZWxvd0xvb2t1cFsidHJhY2UtIit0aGlzLnVpZF07aWYoYyE9PXRoaXMuYmVsb3cpe2ZvcihlPWEubGVuZ3RoLTE7ZT49MDtlLS0pcj1hW2VdLHMucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylpPWxbcj1hW2VdXSx0aGlzLmFkZExheWVyKHIsaSxjKTt0aGlzLmJlbG93PWN9Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylpPWxbcj1hW2VdXSxvLnNldE9wdGlvbnModGhpcy5sYXllcklkc1tyXSwic2V0TGF5b3V0UHJvcGVydHkiLGkubGF5b3V0KSwidmlzaWJsZSI9PT1pLmxheW91dC52aXNpYmlsaXR5JiYodGhpcy5zZXRTb3VyY2VEYXRhKHIsaSksby5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbcl0sInNldFBhaW50UHJvcGVydHkiLGkucGFpbnQpKTt0WzBdLnRyYWNlLl9nbFRyYWNlPXRoaXN9LHMuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9YS5sZW5ndGgtMTtlPj0wO2UtLSl7dmFyIHI9YVtlXTt0LnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pLHQucmVtb3ZlU291cmNlKHRoaXMuc291cmNlSWRzW3JdKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzBdLnRyYWNlLGk9bmV3IG8odCxyLnVpZCkscz1uKHQuZ2QsZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxmPXNbdV07aS5hZGRTb3VyY2UodSxmKSxpLmFkZExheWVyKHUsZixsKX1yZXR1cm4gZVswXS50cmFjZS5fZ2xUcmFjZT1pLGl9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjYwNiwiLi9jb252ZXJ0Ijo5ODl9XSw5OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5jZCxzPXQueGF4aXMsbD10LnlheGlzLGM9W10sdT1vWzBdLnRyYWNlO2lmKCFpLmhhc01hcmtlcnModSkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspb1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGY9b1tyXSxoPWYubG9ubGF0O2lmKGhbMF0hPT1hKXt2YXIgcD1bbi5tb2RIYWxmKGhbMF0sMzYwKSxoWzFdXSxkPVtzLmMycChwKSxsLmMycChwKV07ZS5jb250YWlucyhkLG51bGwscix0KT8oYy5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjpoWzBdLGxhdDpoWzFdfSksZi5zZWxlY3RlZD0xKTpmLnNlbGVjdGVkPTB9fXJldHVybiBjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDd9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD1vLmxpbmU7ZS5leHBvcnRzPXttb2RlOm8ubW9kZSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRoZXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHIwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGRyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRoZXRhMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkdGhldGE6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbnMiLCJkZWdyZWVzIiwiZ3JhZGlhbnMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6by50ZXh0LHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsiciIsInRoZXRhIiwidGV4dCJdfSksaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGxpbmU6e2NvbG9yOmwuY29sb3Isd2lkdGg6bC53aWR0aCxkYXNoOmwuZGFzaCxzaGFwZTphKHt9LGwuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmwuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6by5tYXJrZXIsY2xpcG9uYXhpczphKHt9LG8uY2xpcG9uYXhpcyx7ZGZsdDohMX0pLHRleHRwb3NpdGlvbjpvLnRleHRwb3NpdGlvbix0ZXh0Zm9udDpvLnRleHRmb250LGZpbGw6YSh7fSxvLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjpvLmZpbGxjb2xvcixob3ZlcmluZm86YSh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6WyJyIiwidGhldGEiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpvLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjJ9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxzPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksYz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCx1PWUuc3VicGxvdCxmPXJbdV0ucmFkaWFsYXhpcyxoPXJbdV0uYW5ndWxhcmF4aXMscD1mLm1ha2VDYWxjZGF0YShlLCJyIiksZD1oLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLG09ZS5fbGVuZ3RoLGc9bmV3IEFycmF5KG0pLHY9MDt2PG07disrKXt2YXIgeT1wW3ZdLHg9ZFt2XSxiPWdbdl09e307bih5KSYmbih4KT8oYi5yPXksYi50aGV0YT14KTpiLnI9aX12YXIgXz1jKGUsbSk7cmV0dXJuIGUuX2V4dHJlbWVzLng9YS5maW5kRXh0cmVtZXMoZixwLHtwcGFkOl99KSxvKHQsZSkscyhnLGUpLGwoZyxlKSxnfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjEsIi4uL3NjYXR0ZXIvY2FsYyI6OTIzLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjQsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjUsImZhc3QtaXNudW1lcmljIjoxODV9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxmPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGksYT1uKCJyIiksbz1uKCJ0aGV0YSIpO2lmKGEpbz9pPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKTooaT1hLmxlbmd0aCxuKCJ0aGV0YTAiKSxuKCJkdGhldGEiKSk7ZWxzZXtpZighbylyZXR1cm4gMDtpPWUudGhldGEubGVuZ3RoLG4oInIwIiksbigiZHIiKX1yZXR1cm4gZS5fbGVuZ3RoPWksaX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmgsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBtPWgodCxlLHAsZCk7aWYobSl7ZCgidGhldGF1bml0IiksZCgibW9kZSIsbTx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxkKCJ0ZXh0IiksZCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmZCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHAsZCkscyh0LGUsZCksZCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihkKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxwLGQpKTt2YXIgZz1bXTsoaS5oYXNNYXJrZXJzKGUpfHxpLmhhc1RleHQoZSkpJiYoZCgiY2xpcG9uYXhpcyIpLGQoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxnLnB1c2goInBvaW50cyIpKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYoYyh0LGUscixkKSxpLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxnLnB1c2goImZpbGxzIiksZCgiaG92ZXJvbiIsZy5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6OTI2LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTMwLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzNSwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjo5MzcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk0NywiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NDgsIi4vYXR0cmlidXRlcyI6OTk3fV0sMWUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz17fSxsPXJbZS5zdWJwbG90XS5fc3VicGxvdDtsPyhhPWwucmFkaWFsQXhpcyxvPWwuYW5ndWxhckF4aXMpOihhPShsPXJbZS5zdWJwbG90XSkucmFkaWFsYXhpcyxvPWwuYW5ndWxhcmF4aXMpO3ZhciBjPWEuYzJsKHQucik7cy5yTGFiZWw9aS50aWNrVGV4dChhLGMsITApLnRleHQ7dmFyIHU9ImRlZ3JlZXMiPT09by50aGV0YXVuaXQ/bi5yYWQyZGVnKHQudGhldGEpOnQudGhldGE7cmV0dXJuIHMudGhldGFMYWJlbD1pLnRpY2tUZXh0KG8sdSwhMCkudGV4dCxzfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDEwMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpO2Z1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ci5yYWRpYWxBeGlzLGE9ci5hbmd1bGFyQXhpcztpLl9ob3ZlcnRpdGxlPSJyIixhLl9ob3ZlcnRpdGxlPSJcdTAzYjgiO3ZhciBvPXt9O29bZS5zdWJwbG90XT17X3N1YnBsb3Q6cn07dmFyIHM9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyh0LGUsbyk7bi5yTGFiZWw9cy5yTGFiZWwsbi50aGV0YUxhYmVsPXMudGhldGFMYWJlbDt2YXIgbD10LmhpfHxlLmhvdmVyaW5mbyxjPVtdO2Z1bmN0aW9uIHUodCxlKXtjLnB1c2godC5faG92ZXJ0aXRsZSsiOiAiK2UpfWlmKCFlLmhvdmVydGVtcGxhdGUpe3ZhciBmPWwuc3BsaXQoIisiKTstMSE9PWYuaW5kZXhPZigiYWxsIikmJihmPVsiciIsInRoZXRhIiwidGV4dCJdKSwtMSE9PWYuaW5kZXhPZigiciIpJiZ1KGksbi5yTGFiZWwpLC0xIT09Zi5pbmRleE9mKCJ0aGV0YSIpJiZ1KGEsbi50aGV0YUxhYmVsKSwtMSE9PWYuaW5kZXhPZigidGV4dCIpJiZuLnRleHQmJihjLnB1c2gobi50ZXh0KSxkZWxldGUgbi50ZXh0KSxuLmV4dHJhVGV4dD1jLmpvaW4oIjxicj4iKX19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBvO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdEluc2lkZShjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxpKGMsdSxsLHMpLHMuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsb319LG1ha2VIb3ZlclBvaW50VGV4dDppfX0seyIuLi9zY2F0dGVyL2hvdmVyIjo5MzN9XSwxMDAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvcG9sYXIiKSxjYXRlZ29yaWVzOlsicG9sYXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjYxNywiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi4vc2NhdHRlci9zZWxlY3QiOjk0NCwiLi4vc2NhdHRlci9zdHlsZSI6OTQ2LCIuL2F0dHJpYnV0ZXMiOjk5NywiLi9jYWxjIjo5OTgsIi4vZGVmYXVsdHMiOjk5OSwiLi9mb3JtYXRfbGFiZWxzIjoxZTMsIi4vaG92ZXIiOjEwMDEsIi4vcGxvdCI6MTAwM31dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLnI7aWYocD09PWkpaC54PWgueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksbT1sLmMyZyhoLnRoZXRhKTtoLng9ZCpNYXRoLmNvcyhtKSxoLnk9ZCpNYXRoLnNpbihtKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi9zY2F0dGVyL3Bsb3QiOjk0M31dLDEwMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnM7ZS5leHBvcnRzPXttb2RlOm4ubW9kZSxyOm4ucix0aGV0YTpuLnRoZXRhLHIwOm4ucjAsZHI6bi5kcix0aGV0YTA6bi50aGV0YTAsZHRoZXRhOm4uZHRoZXRhLHRoZXRhdW5pdDpuLnRoZXRhdW5pdCx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbInIiLCJ0aGV0YSIsInRleHQiXX0pLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxsaW5lOmkubGluZSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjppLm1hcmtlcixmaWxsOmkuZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsaG92ZXJpbmZvOm4uaG92ZXJpbmZvLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYyOCwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjk3NCwiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiOjk5N31dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlcmdsL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo2MTcsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDAsIi4uL3NjYXR0ZXJnbC9zZWxlY3QiOjk4NywiLi9hdHRyaWJ1dGVzIjoxMDA0LCIuL2NhbGMiOjEwMDYsIi4vZGVmYXVsdHMiOjEwMDcsIi4vZm9ybWF0X2xhYmVscyI6MTAwOCwiLi9ob3ZlciI6MTAwOX1dLDEwMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxpPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1lLnN1YnBsb3QsYz1yW2xdLnJhZGlhbGF4aXMsdT1yW2xdLmFuZ3VsYXJheGlzLGY9ZS5fcj1jLm1ha2VDYWxjZGF0YShlLCJyIiksaD1lLl90aGV0YT11Lm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxmLmxlbmd0aCYmKGY9Zi5zbGljZSgwLHApKSxwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLGQucj1mLGQudGhldGE9aCxuKHQsZSk7dmFyIG0sZz1kLm9wdHM9YS5zdHlsZSh0LGUpO3JldHVybiBwPHM/bT1pKGUscCk6Zy5tYXJrZXImJihtPTIqKGcubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KGcubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PW8uZmluZEV4dHJlbWVzKGMsZix7cHBhZDptfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vc2NhdHRlci9jYWxjIjo5MjMsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjUsIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiOjk3NywiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjk3OH1dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9dmFyIGQ9YSh0LGUsaCxwKTtkPyhwKCJ0aGV0YXVuaXQiKSxwKCJtb2RlIixkPHU/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIiksaS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxwKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwKSxpLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxoLHApKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLHApLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6OTI2LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTMwLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzNSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTQ3LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk0OCwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjo5OTksIi4vYXR0cmlidXRlcyI6MTAwNH1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuaTtyZXR1cm4iciJpbiB0fHwodC5yPWUuX3JbaV0pLCJ0aGV0YSJpbiB0fHwodC50aGV0YT1lLl90aGV0YVtpXSksbih0LGUscil9fSx7Ii4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxZTN9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0O2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5jZFswXS50LHM9by5yLGw9by50aGV0YSxjPW4uaG92ZXJQb2ludHModCxlLHIsYSk7aWYoYyYmITEhPT1jWzBdLmluZGV4KXt2YXIgdT1jWzBdO2lmKHZvaWQgMD09PXUuaW5kZXgpcmV0dXJuIGM7dmFyIGY9dC5zdWJwbG90LGg9dS5jZFt1LmluZGV4XSxwPXUudHJhY2U7aWYoaC5yPXNbdS5pbmRleF0saC50aGV0YT1sW3UuaW5kZXhdLGYuaXNQdEluc2lkZShoKSlyZXR1cm4gdS54TGFiZWxWYWw9dm9pZCAwLHUueUxhYmVsVmFsPXZvaWQgMCxpKGgscCxmLHUpLGN9fX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjo5ODMsIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTAwMX1dLDEwMTA6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODkxXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9iYXNlX2luZGV4IjoxMDA1LCIuL3Bsb3QiOjEwMTEsZHVwOjg5MX1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vc2NhdHRlcmdsL3Bsb3QiKSxvPXQoIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiKSxzPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IiksbD10KCIuLi8uLi9saWIiKSxjPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIHU9ZS5yYWRpYWxBeGlzLGY9ZS5hbmd1bGFyQXhpcyxoPW8odCxlKTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxvPXJbMF0scD1vLnRyYWNlLGQ9by50LG09cC5fbGVuZ3RoLGc9ZC5yLHY9ZC50aGV0YSx5PWQub3B0cyx4PWcuc2xpY2UoKSxiPXYuc2xpY2UoKTtmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjpnW2FdLHRoZXRhOnZbYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMiptKSx3PUFycmF5KG0pLFQ9QXJyYXkobSk7Zm9yKGE9MDthPG07YSsrKXt2YXIgayxBLE09eFthXTtpZihpKE0pKXt2YXIgUz11LmMyZyhNKSxFPWYuYzJnKGJbYV0scC50aGV0YXVuaXQpO2s9UypNYXRoLmNvcyhFKSxBPVMqTWF0aC5zaW4oRSl9ZWxzZSBrPUE9TmFOO3dbYV09X1syKmFdPWssVFthXT1fWzIqYSsxXT1BfWQudHJlZT1uKF8pLHkubWFya2VyJiZtPj1jJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmwuZXh0ZW5kRmxhdCh5LmxpbmUscy5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYobC5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxsLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30scy50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGwuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiFoLmZpbGwyZCYmKGguZmlsbDJkPSEwKSx5Lm1hcmtlciYmIWguc2NhdHRlcjJkJiYoaC5zY2F0dGVyMmQ9ITApLHkubGluZSYmIWgubGluZTJkJiYoaC5saW5lMmQ9ITApLHkudGV4dCYmIWguZ2xUZXh0JiYoaC5nbFRleHQ9ITApLGgubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLGguZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLGgubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSxoLm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSxoLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksaC50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksaC50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSxoLnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxoLnNlbGVjdEJhdGNoLnB1c2goW10pLGgudW5zZWxlY3RCYXRjaC5wdXNoKFtdKSxkLng9dyxkLnk9VCxkLnJhd3g9dyxkLnJhd3k9VCxkLnI9ZyxkLnRoZXRhPXYsZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT1oLGQuaW5kZXg9aC5jb3VudCxoLmNvdW50Kyt9fSkpLGEodCxlLHIpfX0sZS5leHBvcnRzLnJlZ2xQcmVjb21waWxlZD17fX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6OTc3LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6OTc4LCIuLi9zY2F0dGVyZ2wvcGxvdCI6OTg1LCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIjo5ODYsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTksImZhc3QtaXNudW1lcmljIjoxODV9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9by5saW5lO2UuZXhwb3J0cz17bW9kZTpvLm1vZGUscmVhbDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxpbWFnOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6by50ZXh0LHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsicmVhbCIsImltYWciLCJ0ZXh0Il19KSxob3ZlcnRleHQ6by5ob3ZlcnRleHQsbGluZTp7Y29sb3I6bC5jb2xvcix3aWR0aDpsLndpZHRoLGRhc2g6bC5kYXNoLHNoYXBlOmEoe30sbC5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6bC5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjpvLm1hcmtlcixjbGlwb25heGlzOmEoe30sby5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOm8udGV4dHBvc2l0aW9uLHRleHRmb250Om8udGV4dGZvbnQsZmlsbDphKHt9LG8uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm8uZmlsbGNvbG9yLGhvdmVyaW5mbzphKHt9LHMuaG92ZXJpbmZvLHtmbGFnczpbInJlYWwiLCJpbWFnIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246by5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyfV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsYz1lLnN1YnBsb3QsdT1yW2NdLnJlYWxheGlzLGY9cltjXS5pbWFnaW5hcnlheGlzLGg9dS5tYWtlQ2FsY2RhdGEoZSwicmVhbCIpLHA9Zi5tYWtlQ2FsY2RhdGEoZSwiaW1hZyIpLGQ9ZS5fbGVuZ3RoLG09bmV3IEFycmF5KGQpLGc9MDtnPGQ7ZysrKXt2YXIgdj1oW2ddLHk9cFtnXSx4PW1bZ109e307bih2KSYmbih5KT8oeC5yZWFsPXYseC5pbWFnPXkpOngucmVhbD1pfXJldHVybiBsKGUsZCksYSh0LGUpLG8obSxlKSxzKG0sZSksbX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6OTIxLCIuLi9zY2F0dGVyL2NhbGMiOjkyMywiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6OTI0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI1LCJmYXN0LWlzbnVtZXJpYyI6MTg1fV0sMTAxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKS5QVFNfTElORVNPTkxZLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPW4oInJlYWwiKSxvPW4oImltYWciKTthJiZvJiYoaT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCkpO3JldHVybiBlLl9sZW5ndGg9aSxpfSgwLGUsMCxwKTtpZihkKXtwKCJtb2RlIixkPHU/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsaCxwKSxzKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJmEodCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmKHAoInRleHR0ZW1wbGF0ZSIpLGwodCxlLGgscCkpO3ZhciBtPVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihwKCJjbGlwb25heGlzIikscCgibWFya2VyLm1heGRpc3BsYXllZCIpLG0ucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJihjKHQsZSxyLHApLGkuaGFzTGluZXMoZSl8fHModCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fG0ucHVzaCgiZmlsbHMiKSxwKCJob3Zlcm9uIixtLmpvaW4oIisiKXx8InBvaW50cyIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjkyNiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjkzMCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjo5MzUsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6OTM3LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6OTQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6OTQ4LCIuL2F0dHJpYnV0ZXMiOjEwMTJ9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5zdWJwbG90XS5fc3VicGxvdDtyZXR1cm4gaS5yZWFsTGFiZWw9bi50aWNrVGV4dChhLnJhZGlhbEF4aXMsdC5yZWFsLCEwKS50ZXh0LGkuaW1hZ0xhYmVsPW4udGlja1RleHQoYS5hbmd1bGFyQXhpcyx0LmltYWcsITApLnRleHQsaX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OX1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpO2Z1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9ci5yYWRpYWxBeGlzLGE9ci5hbmd1bGFyQXhpcztpLl9ob3ZlcnRpdGxlPSJyZWFsIixhLl9ob3ZlcnRpdGxlPSJpbWFnIjt2YXIgbz17fTtvW2Uuc3VicGxvdF09e19zdWJwbG90OnJ9O3ZhciBzPWUuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLG8pO24ucmVhbExhYmVsPXMucmVhbExhYmVsLG4uaW1hZ0xhYmVsPXMuaW1hZ0xhYmVsO3ZhciBsPXQuaGl8fGUuaG92ZXJpbmZvLGM9W107ZnVuY3Rpb24gdSh0LGUpe2MucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9aWYoIWUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIGY9bC5zcGxpdCgiKyIpOy0xIT09Zi5pbmRleE9mKCJhbGwiKSYmKGY9WyJyZWFsIiwiaW1hZyIsInRleHQiXSksLTEhPT1mLmluZGV4T2YoInJlYWwiKSYmdShpLG4ucmVhbExhYmVsKSwtMSE9PWYuaW5kZXhPZigiaW1hZyIpJiZ1KGEsbi5pbWFnTGFiZWwpLC0xIT09Zi5pbmRleE9mKCJ0ZXh0IikmJm4udGV4dCYmKGMucHVzaChuLnRleHQpLGRlbGV0ZSBuLnRleHQpLG4uZXh0cmFUZXh0PWMuam9pbigiPGJyPiIpfX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpcmV0dXJuIG87dmFyIGw9dC5zdWJwbG90LGM9cy5jZFtzLmluZGV4XSx1PXMudHJhY2U7aWYobC5pc1B0SW5zaWRlKGMpKXJldHVybiBzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwLGkoYyx1LGwscykscy5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxvfX0sbWFrZUhvdmVyUG9pbnRUZXh0Oml9fSx7Ii4uL3NjYXR0ZXIvaG92ZXIiOjkzM31dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnNtaXRoIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9zbWl0aCIpLGNhdGVnb3JpZXM6WyJzbWl0aCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9zbWl0aCI6NjI0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQwLCIuLi9zY2F0dGVyL3NlbGVjdCI6OTQ0LCIuLi9zY2F0dGVyL3N0eWxlIjo5NDYsIi4vYXR0cmlidXRlcyI6MTAxMiwiLi9jYWxjIjoxMDEzLCIuL2RlZmF1bHRzIjoxMDE0LCIuL2Zvcm1hdF9sYWJlbHMiOjEwMTUsIi4vaG92ZXIiOjEwMTYsIi4vcGxvdCI6MTAxOH1dLDEwMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vLi4vcGxvdHMvc21pdGgvaGVscGVycyIpLnNtaXRoO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIikscz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0sbD0wO2w8ci5sZW5ndGg7bCsrKWZvcih2YXIgYz1yW2xdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XSxoPWYucmVhbDtpZihoPT09aSlmLng9Zi55PWk7ZWxzZXt2YXIgcD1hKFtoLGYuaW1hZ10pO2YueD1wWzBdLGYueT1wWzFdfX1uKHQscyxyLG8pfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL3Bsb3RzL3NtaXRoL2hlbHBlcnMiOjYyMywiLi4vc2NhdHRlci9wbG90Ijo5NDN9XSwxMDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWEubWFya2VyLGY9YS5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsImMiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLGRhc2g6bCxzaGFwZTpjKHt9LGYuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmYuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxjbGlwb25heGlzOmEuY2xpcG9uYXhpcyxmaWxsOmMoe30sYS5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmgud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250OmEudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246YS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6MzgyLCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyMn1dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbD1bImEiLCJiIiwiYyJdLGM9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbT10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLGc9ZS5zdW18fG0sdj17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIXZbZj1sW3JdXSl7Zm9yKHA9dltjW2ZdWzBdXSxkPXZbY1tmXVsxXV0saD1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKyloW3VdPWctcFt1XS1kW3VdO3ZbZl09aH12YXIgeSx4LGIsXyx3LFQsaz1lLl9sZW5ndGgsQT1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPGs7cisrKXk9di5hW3JdLHg9di5iW3JdLGI9di5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1tLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLFQ9eSx3PWIteCxBW3JdPXt4OncseTpULGE6eSxiOngsYzpifSk6QVtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLGspLGkodCxlKSxhKEEsZSksbyhBLGUpLEF9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjEsIi4uL3NjYXR0ZXIvY2FsYyI6OTIzLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjQsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjUsImZhc3QtaXNudW1lcmljIjoxODV9XSwxMDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGY9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgZCxtPXAoImEiKSxnPXAoImIiKSx2PXAoImMiKTtpZihtPyhkPW0ubGVuZ3RoLGc/KGQ9TWF0aC5taW4oZCxnLmxlbmd0aCksdiYmKGQ9TWF0aC5taW4oZCx2Lmxlbmd0aCkpKTpkPXY/TWF0aC5taW4oZCx2Lmxlbmd0aCk6MCk6ZyYmdiYmKGQ9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpKSxkKXtlLl9sZW5ndGg9ZCxwKCJzdW0iKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLHAoIm1vZGUiLGQ8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLHApLGwodCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksYyh0LGUsaCxwKSk7dmFyIHk9W107KGEuaGFzTWFya2VycyhlKXx8YS5oYXNUZXh0KGUpKSYmKHAoImNsaXBvbmF4aXMiKSxwKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLHAoImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6OTI2LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTMwLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzNSwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjo5MzcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk0NywiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NDgsIi4vYXR0cmlidXRlcyI6MTAxOX1dLDEwMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDEwMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBpLmFMYWJlbD1uLnRpY2tUZXh0KGEuYWF4aXMsdC5hLCEwKS50ZXh0LGkuYkxhYmVsPW4udGlja1RleHQoYS5iYXhpcyx0LmIsITApLnRleHQsaS5jTGFiZWw9bi50aWNrVGV4dChhLmNheGlzLHQuYywhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTQ5fV0sMTAyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgbz1hWzBdO2lmKHZvaWQgMD09PW8uaW5kZXgpe3ZhciBzPTEtby55MC90LnlhLl9sZW5ndGgsbD10LnhhLl9sZW5ndGgsYz1sKnMvMix1PWwtYztyZXR1cm4gby54MD1NYXRoLm1heChNYXRoLm1pbihvLngwLHUpLGMpLG8ueDE9TWF0aC5tYXgoTWF0aC5taW4oby54MSx1KSxjKSxhfXZhciBmPW8uY2Rbby5pbmRleF0saD1vLnRyYWNlLHA9by5zdWJwbG90O28uYT1mLmEsby5iPWYuYixvLmM9Zi5jLG8ueExhYmVsVmFsPXZvaWQgMCxvLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9e307ZFtoLnN1YnBsb3RdPXtfc3VicGxvdDpwfTt2YXIgbT1oLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGYsaCxkKTtvLmFMYWJlbD1tLmFMYWJlbCxvLmJMYWJlbD1tLmJMYWJlbCxvLmNMYWJlbD1tLmNMYWJlbDt2YXIgZz1mLmhpfHxoLmhvdmVyaW5mbyx2PVtdO2lmKCFoLmhvdmVydGVtcGxhdGUpe3ZhciB5PWcuc3BsaXQoIisiKTstMSE9PXkuaW5kZXhPZigiYWxsIikmJih5PVsiYSIsImIiLCJjIl0pLC0xIT09eS5pbmRleE9mKCJhIikmJngocC5hYXhpcyxvLmFMYWJlbCksLTEhPT15LmluZGV4T2YoImIiKSYmeChwLmJheGlzLG8uYkxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYyIpJiZ4KHAuY2F4aXMsby5jTGFiZWwpfXJldHVybiBvLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxvLmhvdmVydGVtcGxhdGU9aC5ob3ZlcnRlbXBsYXRlLGF9ZnVuY3Rpb24geCh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjo5MzN9XSwxMDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJ0ZXJuYXJ5IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy90ZXJuYXJ5IiksY2F0ZWdvcmllczpbInRlcm5hcnkiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjYyOSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi4vc2NhdHRlci9zZWxlY3QiOjk0NCwiLi4vc2NhdHRlci9zdHlsZSI6OTQ2LCIuL2F0dHJpYnV0ZXMiOjEwMTksIi4vY2FsYyI6MTAyMCwiLi9kZWZhdWx0cyI6MTAyMSwiLi9ldmVudF9kYXRhIjoxMDIyLCIuL2Zvcm1hdF9sYWJlbHMiOjEwMjMsIi4vaG92ZXIiOjEwMjQsIi4vcGxvdCI6MTAyNn1dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnBsb3RDb250YWluZXI7aS5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgYT17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6aSxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRSZWxhdGl2ZTpudWxsfSxvPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIik7bih0LGEscixvKX19LHsiLi4vc2NhdHRlci9wbG90Ijo5NDN9XSwxMDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9bi5tYXJrZXIsaD1mLmxpbmUscD11KGkoIm1hcmtlci5saW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7d2lkdGg6dSh7fSxoLndpZHRoLHtlZGl0VHlwZToiY2FsYyJ9KSxlZGl0VHlwZToiY2FsYyJ9KSxkPXUoaSgibWFya2VyIikse3N5bWJvbDpmLnN5bWJvbCxzaXplOnUoe30sZi5zaXplLHtlZGl0VHlwZToibWFya2VyU2l6ZSJ9KSxzaXplcmVmOmYuc2l6ZXJlZixzaXplbWluOmYuc2l6ZW1pbixzaXplbW9kZTpmLnNpemVtb2RlLG9wYWNpdHk6Zi5vcGFjaXR5LGNvbG9yYmFyOmYuY29sb3JiYXIsbGluZTpwLGVkaXRUeXBlOiJjYWxjIn0pO2Z1bmN0aW9uIG0odCl7cmV0dXJue3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OmxbdF0sZWRpdFR5cGU6InBsb3QifX19ZC5jb2xvci5lZGl0VHlwZT1kLmNtaW4uZWRpdFR5cGU9ZC5jbWF4LmVkaXRUeXBlPSJzdHlsZSIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmMoImRpbWVuc2lvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxheGlzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0pLHRleHQ6dSh7fSxzLnRleHQse30pLGhvdmVydGV4dDp1KHt9LHMuaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oKSx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksbWFya2VyOmQseGF4ZXM6bSgieCIpLHlheGVzOm0oInkiKSxkaWFnb25hbDp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sc2hvd3VwcGVyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNob3dsb3dlcmhhbGY6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOnMuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJjYWxjIn0sdW5zZWxlY3RlZDp7bWFya2VyOnMudW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5OnMub3BhY2l0eX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjU1NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyMiwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjk3NH1dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZ3JpZCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNwbG9tIixjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksZWRpdFN0eWxlOnQoIi4vZWRpdF9zdHlsZSIpLG1ldGE6e319LG4ucmVnaXN0ZXIoaSl9LHsiLi4vLi4vY29tcG9uZW50cy9ncmlkIjo0MDUsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDAsIi4vYXR0cmlidXRlcyI6MTAyNywiLi9jYWxjIjoxMDMwLCIuL2RlZmF1bHRzIjoxMDMxLCIuL2VkaXRfc3R5bGUiOjEwMzIsIi4vaG92ZXIiOjEwMzQsIi4vcGxvdCI6MTAzNiwiLi9zZWxlY3QiOjEwMzh9XSwxMDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtbGluZTJkIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLG89dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5zaG91bGRTaG93WmVyb0xpbmUsdT17fTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGY9bCh0LGUuX2RpYWdbc11bMV0pO2YmJihjWzFdPWYucjJsKGYucmFuZ2VbMF0pLGNbM109Zi5yMmwoZi5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2gubGVuZ3RofHxyLnVuc2VsZWN0QmF0Y2gubGVuZ3RoP3IubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9LHtyYW5nZXM6YX0pOnIubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9KX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCxpPWUuX3NwbG9tR3JpZDtpfHwoaT1lLl9zcGxvbUdyaWQ9bihyKSksaS51cGRhdGUoZnVuY3Rpb24odCl7dmFyIGUscj10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sbj10Ll9mdWxsTGF5b3V0LGk9bi5fc2l6ZSxhPVswLDAsbi53aWR0aCpyLG4uaGVpZ2h0KnJdLG89e307ZnVuY3Rpb24gcyh0LGUsbixpLHMsbCl7bio9cixpKj1yLHMqPXIsbCo9cjt2YXIgYz1lW3QrImNvbG9yIl0sdT1lW3QrIndpZHRoIl0sZj1TdHJpbmcoYyt1KTtmIGluIG8/b1tmXS5kYXRhLnB1c2goTmFOLE5hTixuLGkscyxsKTpvW2ZdPXtkYXRhOltuLGkscyxsXSxqb2luOiJyZWN0Iix0aGlja25lc3M6dSpyLGNvbG9yOmMsdmlld3BvcnQ6YSxyYW5nZTphLG92ZXJsYXk6ITF9fWZvcihlIGluIG4uX3NwbG9tU3VicGxvdHMpe3ZhciBsLHUsZj1uLl9wbG90c1tlXSxoPWYueGF4aXMscD1mLnlheGlzLGQ9aC5fZ3JpZFZhbHMsbT1wLl9ncmlkVmFscyxnPWguX29mZnNldCx2PWguX2xlbmd0aCx5PXAuX2xlbmd0aCx4PWkuYitwLmRvbWFpblswXSppLmgsYj0tcC5fbSxfPS1iKnAucjJsKHAucmFuZ2VbMF0scC5jYWxlbmRhcik7aWYoaC5zaG93Z3JpZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKWw9ZytoLmwycChkW2VdLngpLHMoImdyaWQiLGgsbCx4LGwseCt5KTtpZihwLnNob3dncmlkKWZvcihlPTA7ZTxtLmxlbmd0aDtlKyspdT14K18rYiptW2VdLngscygiZ3JpZCIscCxnLHUsZyt2LHUpO2ModCxoLHApJiYobD1nK2gubDJwKDApLHMoInplcm9saW5lIixoLGwseCxsLHgreSkpLGModCxwLGgpJiZzKCJ6ZXJvbGluZSIscCxnLHU9eCtfKzAsZyt2LHUpfXZhciB3PVtdO2ZvcihlIGluIG8pdy5wdXNoKG9bZV0pO3JldHVybiB3fSh0KSl9ZS5leHBvcnRzPXtuYW1lOiJzcGxvbSIsYXR0cjpzLmF0dHIsYXR0clJlZ2V4OnMuYXR0clJlZ2V4LGxheW91dEF0dHJpYnV0ZXM6cy5sYXlvdXRBdHRyaWJ1dGVzLHN1cHBseUxheW91dERlZmF1bHRzOnMuc3VwcGx5TGF5b3V0RGVmYXVsdHMsZHJhd0ZyYW1ld29yazpzLmRyYXdGcmFtZXdvcmsscGxvdDpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aS5nZXRNb2R1bGUoInNwbG9tIiksbj1vKHQuY2FsY2RhdGEscilbMF07YSh0LFsiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIsIk9FU19lbGVtZW50X2luZGV4X3VpbnQiXSx1KSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmaCh0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ci5faGFzT25seUxhcmdlU3Bsb21zJiZoKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dWzBdLnRyYWNlLGE9ci5fc3Bsb21TY2VuZXNbaS51aWRdOyJzcGxvbSI9PT1pLnR5cGUmJmEmJmEubWF0cml4JiZmKHQsaSxhKX19LHVwZGF0ZUdyaWQ6aCxjbGVhbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXt9O2lmKG4uX3NwbG9tU2NlbmVzKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldOyJzcGxvbSI9PT1vLnR5cGUmJihhW28udWlkXT0xKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKCFhW2wudWlkXSl7dmFyIGM9bi5fc3Bsb21TY2VuZXNbbC51aWRdO2MmJmMuZGVzdHJveSYmYy5kZXN0cm95KCksbi5fc3Bsb21TY2VuZXNbbC51aWRdPW51bGwsZGVsZXRlIG4uX3NwbG9tU2NlbmVzW2wudWlkXX19fTA9PT1PYmplY3Qua2V5cyhuLl9zcGxvbVNjZW5lc3x8e30pLmxlbmd0aCYmZGVsZXRlIG4uX3NwbG9tU2NlbmVzLG4uX3NwbG9tR3JpZCYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcyYmbi5faGFzT25seUxhcmdlU3Bsb21zJiYobi5fc3Bsb21HcmlkLmRlc3Ryb3koKSxuLl9zcGxvbUdyaWQ9bnVsbCxkZWxldGUgbi5fc3Bsb21HcmlkKSxzLmNsZWFuKHQsZSxyLG4pfSx1cGRhdGVGeDpzLnVwZGF0ZUZ4LHRvU1ZHOnMudG9TVkcscmVnbFByZWNvbXBpbGVkOnV9fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjUxMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTg4LCIuLi8uLi9yZWdpc3RyeSI6NjMzLCJyZWdsLWxpbmUyZCI6Mjc1fV0sMTAzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGE9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjQXhpc0V4cGFuc2lvbixzPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbD10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclNlbGVjdGlvbixjPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU3R5bGUsdT10KCIuL3NjZW5lX3VwZGF0ZSIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxoPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscCxkLG0sZyx2LHk9ZS5kaW1lbnNpb25zLHg9ZS5fbGVuZ3RoLGI9e30sXz1iLmNkYXRhPVtdLHc9Yi5kYXRhPVtdLFQ9ZS5fdmlzaWJsZURpbXM9W107ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sInYiKSxhPTA7YTxpLmxlbmd0aDthKyspaVthXT1pW2FdPT09Zj9OYU46aVthXTtfLnB1c2goaSksdy5wdXNoKCJsb2ciPT09dC50eXBlP24uc2ltcGxlTWFwKGksdC5jMmwpOmkpfWZvcihyPTA7cjx5Lmxlbmd0aDtyKyspaWYoKGQ9eVtyXSkudmlzaWJsZSl7aWYobT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pLGc9aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKSxtJiZnJiZtLnR5cGUhPT1nLnR5cGUpe24ubG9nKCJTa2lwcGluZyBzcGxvbSBkaW1lbnNpb24gIityKyIgd2l0aCBjb25mbGljdGluZyBheGlzIHR5cGVzIik7Y29udGludWV9bT8oayhtLGQpLGcmJiJjYXRlZ29yeSI9PT1nLnR5cGUmJihnLl9jYXRlZ29yaWVzPW0uX2NhdGVnb3JpZXMuc2xpY2UoKSkpOmsoZyxkKSxULnB1c2gocil9Zm9yKHModCxlKSxuLmV4dGVuZEZsYXQoYixjKGUpKSx2PV8ubGVuZ3RoKng+aD9iLnNpemVBdmd8fE1hdGgubWF4KGIuc2l6ZSwzKTphKGUseCkscD0wO3A8VC5sZW5ndGg7cCsrKWQ9eVtyPVRbcF1dLG09aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKXx8e30sZz1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pfHx7fSxvKHQsZSxtLGcsX1twXSxfW3BdLHYpO3ZhciBBPXUodCxlKTtyZXR1cm4gQS5tYXRyaXh8fChBLm1hdHJpeD0hMCksQS5tYXRyaXhPcHRpb25zPWIsQS5zZWxlY3RlZE9wdGlvbnM9bChlLGUuc2VsZWN0ZWQpLEEudW5zZWxlY3RlZE9wdGlvbnM9bChlLGUudW5zZWxlY3RlZCksW3t4OiExLHk6ITEsdDp7fSx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTUzLCIuLi9zY2F0dGVyL2NhbGMiOjkyMywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyNSwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6OTc3LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6OTc4LCIuL3NjZW5lX3VwZGF0ZSI6MTAzN31dLDEwMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKSxjPXQoIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIikuaXNPcGVuU3ltYm9sO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxtPWgoInNob3d1cHBlcmhhbGYiKSxnPWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxtfHxnKSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxzKHQsZSxyLGYsaCk7dmFyIHY9YyhlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtoKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxmPW5ldyBBcnJheShzKSxoPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOiIiO2ZbaV09IngiK3AsaFtpXT0ieSIrcH12YXIgZD1uKCJ4YXhlcyIsZiksbT1uKCJ5YXhlcyIsaCksZz1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVsiXyIrbysiYXhlcyJdW3RdPTEsYS5wdXNoKHQpLCEodCBpbiBzKSl7dmFyIGw9c1t0XT17fTtpJiYobC5sYWJlbD1pLmxhYmVsfHwiIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihlLl9heGVzRGltPXt9LGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLFQ9MD09PWksaz1pPT09cy0xLEE9VCYmYnx8ayYmXz92b2lkIDA6ZFtpXSxNPVQmJl98fGsmJmI/dm9pZCAwOm1baV07eChBLE0sdyx2KSx4KE0sQSx3LHkpLGdbaV09W0EsTV0sZS5fYXhlc0RpbVtBXT1pLGUuX2F4ZXNEaW1bTV09aX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPXZbaV0reVthXTtpPmEmJmx8fGk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9ImJvdHRvbSIsci5fc3Bsb21HcmlkRGZsdC55c2lkZT0ibGVmdCIpfSgwLGUsZixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ0LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjo4OTMsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk0NywiLi4vc2NhdHRlcmdsL2hlbHBlcnMiOjk4MiwiLi9hdHRyaWJ1dGVzIjoxMDI3fV0sMTAzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclN0eWxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUudHJhY2Usbz10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tyLnVpZF07aWYobyl7aSh0LHIpLG4uZXh0ZW5kRmxhdChvLm1hdHJpeE9wdGlvbnMsYShyKSk7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8ubWF0cml4T3B0aW9ucyxvLnZpZXdPcHRzKTtvLm1hdHJpeC51cGRhdGUocyxudWxsKX19fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI1LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6OTc4fV0sMTAzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERpbUluZGV4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX19LHt9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9dCgiLi4vc2NhdHRlcmdsL2hvdmVyIikuY2FsY0hvdmVyO2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY2RbMF0udHJhY2Usbz10LnNjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEscz10LnhhLGw9dC55YSxjPXMuYzJwKGUpLHU9bC5jMnAociksZj10LmRpc3RhbmNlLGg9bi5nZXREaW1JbmRleChhLHMpLHA9bi5nZXREaW1JbmRleChhLGwpO2lmKCExPT09aHx8ITE9PT1wKXJldHVyblt0XTtmb3IodmFyIGQsbSxnPW9baF0sdj1vW3BdLHk9Zix4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBiPWdbeF0sXz12W3hdLHc9cy5jMnAoYiktYyxUPWwuYzJwKF8pLXUsaz1NYXRoLnNxcnQodyp3K1QqVCk7azx5JiYoeT1tPWssZD14KX1yZXR1cm4gdC5pbmRleD1kLHQuZGlzdGFuY2U9eSx0LmR4eT1tLHZvaWQgMD09PWQ/W3RdOltpKHQsZyx2LGEpXX19fSx7Ii4uL3NjYXR0ZXJnbC9ob3ZlciI6OTgzLCIuL2hlbHBlcnMiOjEwMzN9XSwxMDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYmFzZV9pbmRleCIpO24uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxlLmV4cG9ydHM9bn0seyIuL2Jhc2VfaW5kZXgiOjEwMjgsIi4vYmFzZV9wbG90IjoxMDI5fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNwbG9tIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZTtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmPXQuX2Z1bGxMYXlvdXQsaD1mLl9zaXplLHA9ZS50cmFjZSxkPWUudCxtPWYuX3NwbG9tU2NlbmVzW3AudWlkXSxnPW0ubWF0cml4T3B0aW9ucyx2PWcuY2RhdGEseT1mLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCx4PWYuZHJhZ21vZGU7aWYoMCE9PXYubGVuZ3RoKXtnLmxvd2VyPXAuc2hvd3VwcGVyaGFsZixnLnVwcGVyPXAuc2hvd2xvd2VyaGFsZixnLmRpYWdvbmFsPXAuZGlhZ29uYWwudmlzaWJsZTt2YXIgYj1wLl92aXNpYmxlRGltcyxfPXYubGVuZ3RoLHc9bS52aWV3T3B0cz17fTtmb3Iody5yYW5nZXM9bmV3IEFycmF5KF8pLHcuZG9tYWlucz1uZXcgQXJyYXkoXyksdT0wO3U8Yi5sZW5ndGg7dSsrKXtsPWJbdV07dmFyIFQ9dy5yYW5nZXNbdV09bmV3IEFycmF5KDQpLGs9dy5kb21haW5zW3VdPW5ldyBBcnJheSg0KTsocj1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMF0pKSYmKFRbMF09ci5fcmxbMF0sVFsyXT1yLl9ybFsxXSxrWzBdPXIuZG9tYWluWzBdLGtbMl09ci5kb21haW5bMV0pLChzPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVsxXSkpJiYoVFsxXT1zLl9ybFswXSxUWzNdPXMuX3JsWzFdLGtbMV09cy5kb21haW5bMF0sa1szXT1zLmRvbWFpblsxXSl9dmFyIEE9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLE09aC5sKkEsUz1oLmIqQSxFPWgudypBLEw9aC5oKkE7dy52aWV3cG9ydD1bTSxTLEUrTSxMK1NdLCEwPT09bS5tYXRyaXgmJihtLm1hdHJpeD1uKHkpKTt2YXIgQz1mLmNsaWNrbW9kZS5pbmRleE9mKCJzZWxlY3QiKT4tMSxQPSEwO2lmKG8oeCl8fCEhcC5zZWxlY3RlZHBvaW50c3x8Qyl7dmFyIEk9cC5fbGVuZ3RoO2lmKHAuc2VsZWN0ZWRwb2ludHMpe20uc2VsZWN0QmF0Y2g9cC5zZWxlY3RlZHBvaW50czt2YXIgTz1wLnNlbGVjdGVkcG9pbnRzLHo9e307Zm9yKGw9MDtsPE8ubGVuZ3RoO2wrKyl6W09bbF1dPSEwO3ZhciBEPVtdO2ZvcihsPTA7bDxJO2wrKyl6W2xdfHxELnB1c2gobCk7bS51bnNlbGVjdEJhdGNoPUR9dmFyIFI9ZC54cHg9bmV3IEFycmF5KF8pLEY9ZC55cHg9bmV3IEFycmF5KF8pO2Zvcih1PTA7dTxiLmxlbmd0aDt1Kyspe2lmKGw9Ylt1XSxyPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVswXSkpZm9yKFJbdV09bmV3IEFycmF5KEkpLGM9MDtjPEk7YysrKVJbdV1bY109ci5jMnAodlt1XVtjXSk7aWYocz1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMV0pKWZvcihGW3VdPW5ldyBBcnJheShJKSxjPTA7YzxJO2MrKylGW3VdW2NdPXMuYzJwKHZbdV1bY10pfWlmKG0uc2VsZWN0QmF0Y2gubGVuZ3RofHxtLnVuc2VsZWN0QmF0Y2gubGVuZ3RoKXt2YXIgQj1pLmV4dGVuZEZsYXQoe30sZyxtLnVuc2VsZWN0ZWRPcHRpb25zLHcpLE49aS5leHRlbmRGbGF0KHt9LGcsbS5zZWxlY3RlZE9wdGlvbnMsdyk7bS5tYXRyaXgudXBkYXRlKEIsTiksUD0hMX19ZWxzZSBkLnhweD1kLnlweD1udWxsO2lmKFApe3ZhciBqPWkuZXh0ZW5kRmxhdCh7fSxnLHcpO20ubWF0cml4LnVwZGF0ZShqLG51bGwpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aClmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylzKHQscltuXVswXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzc5LCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTMsInJlZ2wtc3Bsb20iOjI3N31dLDEwMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPWUudWlkLGE9ci5fc3Bsb21TY2VuZXM7YXx8KGE9ci5fc3Bsb21TY2VuZXM9e30pO3ZhciBvPXtkaXJ0eTohMCxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxzPWFbZS51aWRdO3JldHVybiBzfHwoKHM9YVtpXT1uLmV4dGVuZEZsYXQoe30sbyx7bWF0cml4OiExLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119KSkuZHJhdz1mdW5jdGlvbigpe3MubWF0cml4JiZzLm1hdHJpeC5kcmF3JiYocy5zZWxlY3RCYXRjaC5sZW5ndGh8fHMudW5zZWxlY3RCYXRjaC5sZW5ndGg/cy5tYXRyaXguZHJhdyhzLnVuc2VsZWN0QmF0Y2gscy5zZWxlY3RCYXRjaCk6cy5tYXRyaXguZHJhdygpKSxzLmRpcnR5PSExfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzLm1hdHJpeCYmcy5tYXRyaXguZGVzdHJveSYmcy5tYXRyaXguZGVzdHJveSgpLHMubWF0cml4T3B0aW9ucz1udWxsLHMuc2VsZWN0QmF0Y2g9bnVsbCxzLnVuc2VsZWN0QmF0Y2g9bnVsbCxzPW51bGx9KSxzLmRpcnR5fHxuLmV4dGVuZEZsYXQocyxvKSxzfX0seyIuLi8uLi9saWIiOjQ5OH1dLDEwMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLG89clswXS50cmFjZSxzPXJbMF0udCxsPXQuc2NlbmUsYz1sLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdO2lmKCFsKXJldHVybiBoO3ZhciBwPSFpLmhhc01hcmtlcnMobykmJiFpLmhhc1RleHQobyk7aWYoITAhPT1vLnZpc2libGV8fHApcmV0dXJuIGg7dmFyIGQ9YS5nZXREaW1JbmRleChvLHUpLG09YS5nZXREaW1JbmRleChvLGYpO2lmKCExPT09ZHx8ITE9PT1tKXJldHVybiBoO3ZhciBnPXMueHB4W2RdLHY9cy55cHhbbV0seT1jW2RdLHg9Y1ttXSxiPVtdLF89W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgdz0wO3c8eS5sZW5ndGg7dysrKWUuY29udGFpbnMoW2dbd10sdlt3XV0sbnVsbCx3LHQpPyhiLnB1c2godyksaC5wdXNoKHtwb2ludE51bWJlcjp3LHg6eVt3XSx5Onhbd119KSk6Xy5wdXNoKHcpO3ZhciBUPWwubWF0cml4T3B0aW9ucztyZXR1cm4gYi5sZW5ndGh8fF8ubGVuZ3RoP2wuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLnVuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLm1hdHJpeC51cGRhdGUobC51bnNlbGVjdGVkT3B0aW9ucyxuLmV4dGVuZEZsYXQoe30sVCxsLnNlbGVjdGVkT3B0aW9ucyxsLnZpZXdPcHRzKSk6bC5tYXRyaXgudXBkYXRlKFQsbnVsbCksbC5zZWxlY3RCYXRjaD1iLGwudW5zZWxlY3RCYXRjaD1fLGh9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NDcsIi4vaGVscGVycyI6MTAzM31dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6ODYyfV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLGksYSxzLGwsYyx1LGYsaCxwLGQsbT10Ll94LGc9dC5feSx2PXQuX3oseT10Ll9sZW4seD0tMS8wLGI9MS8wLF89LTEvMCx3PTEvMCxUPS0xLzAsaz0xLzAsQT0iIjtmb3IoeSYmKGM9bVswXSxmPWdbMF0scD12WzBdKSx5PjEmJih1PW1beS0xXSxoPWdbeS0xXSxkPXZbeS0xXSksZT0wO2U8eTtlKyspeD1NYXRoLm1heCh4LG1bZV0pLGI9TWF0aC5taW4oYixtW2VdKSxfPU1hdGgubWF4KF8sZ1tlXSksdz1NYXRoLm1pbih3LGdbZV0pLFQ9TWF0aC5tYXgoVCx2W2VdKSxrPU1hdGgubWluKGssdltlXSksYXx8bVtlXT09PWN8fChhPSEwLEErPSJ4Iiksc3x8Z1tlXT09PWZ8fChzPSEwLEErPSJ5IiksbHx8dltlXT09PXB8fChsPSEwLEErPSJ6Iik7YXx8KEErPSJ4Iiksc3x8KEErPSJ5IiksbHx8KEErPSJ6Iik7dmFyIE09byh0Ll94KSxTPW8odC5feSksRT1vKHQuX3opO0E9KEE9KEE9QS5yZXBsYWNlKCJ4IiwoYz51PyItIjoiKyIpKyJ4IikpLnJlcGxhY2UoInkiLChmPmg/Ii0iOiIrIikrInkiKSkucmVwbGFjZSgieiIsKHA+ZD8iLSI6IisiKSsieiIpO3ZhciBMPWZ1bmN0aW9uKCl7eT0wLE09W10sUz1bXSxFPVtdfTsoIXl8fHk8TS5sZW5ndGgqUy5sZW5ndGgqRS5sZW5ndGgpJiZMKCk7dmFyIEM9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dD9tOiJ5Ij09PXQ/Zzp2fSxQPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/TToieSI9PT10P1M6RX0sST1mdW5jdGlvbih0KXtyZXR1cm4gdFt5LTFdPHRbMF0/LTE6MX0sTz1DKEFbMV0pLHo9QyhBWzNdKSxEPUMoQVs1XSksUj1QKEFbMV0pLmxlbmd0aCxGPVAoQVszXSkubGVuZ3RoLEI9UChBWzVdKS5sZW5ndGgsTj0hMSxqPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUiooRip0K2UpK3J9LFU9SShDKEFbMV0pKSxWPUkoQyhBWzNdKSksSD1JKEMoQVs1XSkpO2ZvcihlPTA7ZTxCLTE7ZSsrKXtmb3Iocj0wO3I8Ri0xO3IrKyl7Zm9yKGk9MDtpPFItMTtpKyspe3ZhciBxPWooZSxyLGkpLEc9aihlLHIsaSsxKSxZPWooZSxyKzEsaSksVz1qKGUrMSxyLGkpO2lmKE9bcV0qVTxPW0ddKlUmJnpbcV0qVjx6W1ldKlYmJkRbcV0qSDxEW1ddKkh8fChOPSEwKSxOKWJyZWFrfWlmKE4pYnJlYWt9aWYoTilicmVha31yZXR1cm4gTiYmKG4ud2FybigiRW5jb3VudGVyZWQgYXJiaXRyYXJ5IGNvb3JkaW5hdGVzISBVbmFibGUgdG8gaW5wdXQgZGF0YSBncmlkLiIpLEwoKSkse3hNaW46Yix5TWluOncsek1pbjprLHhNYXg6eCx5TWF4Ol8sek1heDpULFhzOk0sWXM6UyxaczpFLGxlbjp5LGZpbGw6QX19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBzKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9dC5sZW5ndGgpLG4uaXNUeXBlZEFycmF5KHQpKXJldHVybiB0LnN1YmFycmF5KDAsZSk7Zm9yKHZhciByPVtdLGk9MDtpPGU7aSsrKXJbaV09K3RbaV07cmV0dXJuIHJ9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUudS5sZW5ndGgsZS52Lmxlbmd0aCxlLncubGVuZ3RoLGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoKSxlLl91PXMoZS51LGUuX2xlbiksZS5fdj1zKGUudixlLl9sZW4pLGUuX3c9cyhlLncsZS5fbGVuKSxlLl94PXMoZS54LGUuX2xlbiksZS5feT1zKGUueSxlLl9sZW4pLGUuX3o9cyhlLnosZS5fbGVuKTt2YXIgcj1hKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47dmFyIG4sbyxsLGM9MDtlLnN0YXJ0cyYmKG49cyhlLnN0YXJ0cy54fHxbXSksbz1zKGUuc3RhcnRzLnl8fFtdKSxsPXMoZS5zdGFydHMuenx8W10pLGM9TWF0aC5taW4obi5sZW5ndGgsby5sZW5ndGgsbC5sZW5ndGgpKSxlLl9zdGFydHNYPW58fFtdLGUuX3N0YXJ0c1k9b3x8W10sZS5fc3RhcnRzWj1sfHxbXTt2YXIgdSxmPTAsaD0xLzA7Zm9yKHU9MDt1PGUuX2xlbjt1Kyspe3ZhciBwPWUuX3VbdV0sZD1lLl92W3VdLG09ZS5fd1t1XSxnPU1hdGguc3FydChwKnArZCpkK20qbSk7Zj1NYXRoLm1heChmLGcpLGg9TWF0aC5taW4oaCxnKX1mb3IoaSh0LGUse3ZhbHM6W2gsZl0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSksdT0wO3U8Yzt1Kyspe3ZhciB2PW5bdV07ci54TWF4PU1hdGgubWF4KHIueE1heCx2KSxyLnhNaW49TWF0aC5taW4oci54TWluLHYpO3ZhciB5PW9bdV07ci55TWF4PU1hdGgubWF4KHIueU1heCx5KSxyLnlNaW49TWF0aC5taW4oci55TWluLHkpO3ZhciB4PWxbdV07ci56TWF4PU1hdGgubWF4KHIuek1heCx4KSxyLnpNaW49TWF0aC5taW4oci56TWluLHgpfWUuX3NsZW49YyxlLl9ub3JtTWF4PWYsZS5feGJuZHM9W3IueE1pbixyLnhNYXhdLGUuX3libmRzPVtyLnlNaW4sci55TWF4XSxlLl96Ym5kcz1bci56TWluLHIuek1heF19LGZpbHRlcjpzLHByb2Nlc3NHcmlkOmF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNjksIi4uLy4uL2xpYiI6NDk4fV0sMTA0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zdHJlYW10dWJlM2QsaT1uLmNyZWF0ZVR1YmVNZXNoLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxjPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU+Mj90LnNsaWNlKDEsZS0xKToyPT09ZT9bKHRbMF0rdFsxXSkvMl06dH1mdW5jdGlvbiBwKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiAxPT09ZT9bLjUsLjVdOlt0WzFdLXRbMF0sdFtlLTFdLXRbZS0yXV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsdT1lLl9sZW4sZj17fTtmdW5jdGlvbiBkKHQsZSl7dmFyIG49cltlXSxvPWlbY1tlXV07cmV0dXJuIGEuc2ltcGxlTWFwKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWlmKGYudmVjdG9ycz1sKGQoZS5fdSwieGF4aXMiKSxkKGUuX3YsInlheGlzIiksZChlLl93LCJ6YXhpcyIpLHUpLCF1KXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciBtPWQoZS5fWHMsInhheGlzIiksZz1kKGUuX1lzLCJ5YXhpcyIpLHY9ZChlLl9acywiemF4aXMiKTtpZihmLm1lc2hncmlkPVttLGcsdl0sZi5ncmlkRmlsbD1lLl9ncmlkRmlsbCxlLl9zbGVuKWYuc3RhcnRpbmdQb3NpdGlvbnM9bChkKGUuX3N0YXJ0c1gsInhheGlzIiksZChlLl9zdGFydHNZLCJ5YXhpcyIpLGQoZS5fc3RhcnRzWiwiemF4aXMiKSk7ZWxzZXtmb3IodmFyIHk9Z1swXSx4PWgobSksYj1oKHYpLF89bmV3IEFycmF5KHgubGVuZ3RoKmIubGVuZ3RoKSx3PTAsVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKV9bdysrXT1beFtUXSx5LGJba11dO2Yuc3RhcnRpbmdQb3NpdGlvbnM9X31mLmNvbG9ybWFwPW8oZSksZi50dWJlU2l6ZT1lLnNpemVyZWYsZi5tYXhMZW5ndGg9ZS5tYXhkaXNwbGF5ZWQ7dmFyIEE9ZChlLl94Ym5kcywieGF4aXMiKSxNPWQoZS5feWJuZHMsInlheGlzIiksUz1kKGUuX3pibmRzLCJ6YXhpcyIpLEU9cChtKSxMPXAoZyksQz1wKHYpLFA9W1tBWzBdLUVbMF0sTVswXS1MWzBdLFNbMF0tQ1swXV0sW0FbMV0rRVsxXSxNWzFdK0xbMV0sU1sxXStDWzFdXV0sST1uKGYsUCksTz1zKGUpO0kudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtPLm1pbi9lLl9ub3JtTWF4LE8ubWF4L2UuX25vcm1NYXhdO3ZhciB6PWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gSS5saWdodFBvc2l0aW9uPVt6Lngsei55LHouel0sSS5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxJLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLEkuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixJLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxJLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLEkub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPUkudHViZVNjYWxlKmUuc2l6ZXJlZioyLEl9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2Nbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgdSh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTE5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5NCwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo2MDR9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxmPXMoIngiKSxoPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzdGFydHMueCIpLHMoInN0YXJ0cy55Iikscygic3RhcnRzLnoiKSxzKCJtYXhkaXNwbGF5ZWQiKSxzKCJzaXplcmVmIikscygibGlnaHRpbmcuYW1iaWVudCIpLHMoImxpZ2h0aW5nLmRpZmZ1c2UiKSxzKCJsaWdodGluZy5zcGVjdWxhciIpLHMoImxpZ2h0aW5nLnJvdWdobmVzcyIpLHMoImxpZ2h0aW5nLmZyZXNuZWwiKSxzKCJsaWdodHBvc2l0aW9uLngiKSxzKCJsaWdodHBvc2l0aW9uLnkiKSxzKCJsaWdodHBvc2l0aW9uLnoiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygidWhvdmVyZm9ybWF0IikscygidmhvdmVyZm9ybWF0Iikscygid2hvdmVyZm9ybWF0IikscygieGhvdmVyZm9ybWF0IikscygieWhvdmVyZm9ybWF0IikscygiemhvdmVyZm9ybWF0IiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzEsIi4uLy4uL2xpYiI6NDk4LCIuL2F0dHJpYnV0ZXMiOjEwMzl9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN0cmVhbXR1YmUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL2NvbnZlcnQiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50dWJleD10LngsdC50dWJleT10LnksdC50dWJlej10LnosdC50dWJldT1lLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnR1YmV2PWUudHJhY2VDb29yZGluYXRlWzRdLHQudHViZXc9ZS50cmFjZUNvb3JkaW5hdGVbNV0sdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHQuZGl2ZXJnZW5jZT1lLnRyYWNlQ29vcmRpbmF0ZVs3XSxkZWxldGUgdC54LGRlbGV0ZSB0LnksZGVsZXRlIHQueix0fSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo1OTMsIi4vYXR0cmlidXRlcyI6MTAzOSwiLi9jYWxjIjoxMDQwLCIuL2NvbnZlcnQiOjEwNDEsIi4vZGVmYXVsdHMiOjEwNDJ9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scGFyZW50czp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYnJhbmNodmFsdWVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZW1haW5kZXIiLCJ0b3RhbCJdLGRmbHQ6InJlbWFpbmRlciIsZWRpdFR5cGU6ImNhbGMifSxjb3VudDp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYnJhbmNoZXMiLCJsZWF2ZXMiXSxkZmx0OiJsZWF2ZXMiLGVkaXRUeXBlOiJjYWxjIn0sbGV2ZWw6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LG1heGRlcHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToicGxvdCIsZGZsdDotMX0sbWFya2VyOnUoe2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp1KHt9LGwubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnUoe30sbC5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLGxlYWY6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MX0sZWRpdFR5cGU6InBsb3QifSx0ZXh0OmwudGV4dCx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJjdXJyZW50IHBhdGgiLCJwZXJjZW50IHJvb3QiLCJwZXJjZW50IGVudHJ5IiwicGVyY2VudCBwYXJlbnQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6InBsb3QifSx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpsLmhvdmVydGV4dCxob3ZlcmluZm86dSh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsIm5hbWUiLCJjdXJyZW50IHBhdGgiLCJwZXJjZW50IHJvb3QiLCJwZXJjZW50IGVudHJ5IiwicGVyY2VudCBwYXJlbnQiXSxkZmx0OiJsYWJlbCt0ZXh0K3ZhbHVlK25hbWUifSksaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OmwudGV4dGZvbnQsaW5zaWRldGV4dG9yaWVudGF0aW9uOmwuaW5zaWRldGV4dG9yaWVudGF0aW9uLGluc2lkZXRleHRmb250OmwuaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250OnUoe30sbC5vdXRzaWRldGV4dGZvbnQse30pLHJvdGF0aW9uOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sc29ydDpsLnNvcnQscm9vdDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGVkaXRUeXBlOiJjYWxjIn0sZG9tYWluOnMoe25hbWU6InN1bmJ1cnN0Iix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL3BpZS9hdHRyaWJ1dGVzIjo4OTYsIi4vY29uc3RhbnRzIjoxMDQ3fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjYxNH1dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGY9e30saD17fSxwPXt9O3IuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciByLGwsZixoLHAsZCxtPXQuX2Z1bGxMYXlvdXQsZz1lLmlkcyx2PWEuaXNBcnJheU9yVHlwZWRBcnJheShnKSx5PWUubGFiZWxzLHg9ZS5wYXJlbnRzLGI9ZS52YWx1ZXMsXz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYiksdz1bXSxUPXt9LGs9e30sQT1mdW5jdGlvbih0KXtyZXR1cm4gdHx8Im51bWJlciI9PXR5cGVvZiB0fSxNPWZ1bmN0aW9uKHQpe3JldHVybiFffHxpKGJbdF0pJiZiW3RdPj0wfTt2PyhyPU1hdGgubWluKGcubGVuZ3RoLHgubGVuZ3RoKSxsPWZ1bmN0aW9uKHQpe3JldHVybiBBKGdbdF0pJiZNKHQpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoZ1t0XSl9KToocj1NYXRoLm1pbih5Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gQSh5W3RdKSYmTSh0KX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHlbdF0pfSksXyYmKHI9TWF0aC5taW4ocixiLmxlbmd0aCkpO2Zvcih2YXIgUz0wO1M8cjtTKyspaWYobChTKSl7dmFyIEU9ZihTKSxMPUEoeFtTXSk/U3RyaW5nKHhbU10pOiIiLEM9e2k6UyxpZDpFLHBpZDpMLGxhYmVsOkEoeVtTXSk/U3RyaW5nKHlbU10pOiIifTtfJiYoQy52PStiW1NdKSx3LnB1c2goQykscD1FLFRbaD1MXT9UW2hdLnB1c2gocCk6VFtoXT1bcF0sa1twXT0xfWlmKFRbIiJdKXtpZihUWyIiXS5sZW5ndGg+MSl7Zm9yKHZhciBQPWEucmFuZHN0cigpLEk9MDtJPHcubGVuZ3RoO0krKykiIj09PXdbSV0ucGlkJiYod1tJXS5waWQ9UCk7dy51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOlAscGlkOiIiLGxhYmVsOiIifSl9fWVsc2V7dmFyIE8sej1bXTtmb3IoTyBpbiBUKWtbT118fHoucHVzaChPKTtpZigxIT09ei5sZW5ndGgpcmV0dXJuIGEud2FybihbIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIlRoZXNlIHJvb3RzIGluY2x1ZGU6Iix6LmpvaW4oIiwgIildLmpvaW4oIiAiKSk7Tz16WzBdLHcudW5zaGlmdCh7aGFzSW1wbGllZFJvb3Q6ITAsaWQ6TyxwaWQ6IiIsbGFiZWw6T30pfXRyeXtkPW4uc3RyYXRpZnkoKS5pZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkucGFyZW50SWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKSh3KX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFsiRmFpbGVkIHRvIGJ1aWxkIixlLnR5cGUsImhpZXJhcmNoeSBvZiIsZS5uYW1lKyIuIiwiRXJyb3I6Iix0Lm1lc3NhZ2VdLmpvaW4oIiAiKSl9dmFyIEQ9bi5oaWVyYXJjaHkoZCksUj0hMTtpZihfKXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOkQuc3VtKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KSk7YnJlYWs7Y2FzZSJ0b3RhbCI6RC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGEuZGF0YSxuPXIudjtpZih0LmNoaWxkcmVuKXt2YXIgaT10LmNoaWxkcmVuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSksMCk7aWYoKHIuaGFzSW1wbGllZFJvb3R8fHIuaGFzTXVsdGlwbGVSb290cykmJihuPWkpLG48aSp1KXJldHVybiBSPSEwLGEud2FybihbIlRvdGFsIHZhbHVlIGZvciBub2RlIix0LmRhdGEuZGF0YS5pZCwib2YiLGUubmFtZSwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLiIsIlxucGFyZW50IHZhbHVlID0iLG4sIlxuY2hpbGRyZW4gc3VtID0iLGldLmpvaW4oIiAiKSl9dC52YWx1ZT1ufSkpfWVsc2UhZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPWUuY2hpbGRyZW47aWYoYSl7Zm9yKHZhciBvPWEubGVuZ3RoLHM9MDtzPG87cysrKWkrPXQoYVtzXSxyLG4pO24uYnJhbmNoZXMmJmkrK31lbHNlIG4ubGVhdmVzJiZpKys7ZS52YWx1ZT1lLmRhdGEuZGF0YS52YWx1ZT1pLHIuX3ZhbHVlc3x8KHIuX3ZhbHVlcz1bXSk7cmV0dXJuIHIuX3ZhbHVlc1tlLmRhdGEuZGF0YS5pXT1pLGl9KEQsZSx7YnJhbmNoZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImJyYW5jaGVzIiksbGVhdmVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJsZWF2ZXMiKX0pO2lmKCFSKXt2YXIgRixCO2Uuc29ydCYmRC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KSk7dmFyIE49ZS5tYXJrZXIuY29sb3JzfHxbXSxqPSEhTi5sZW5ndGg7cmV0dXJuIGUuX2hhc0NvbG9yc2NhbGU/KGp8fChOPV8/ZS52YWx1ZXM6ZS5fdmFsdWVzKSxjKHQsZSx7dmFsczpOLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLEI9byhlLm1hcmtlcikpOkY9cyhtWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLEQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pKSx3WzBdLmhpZXJhcmNoeT1ELHd9fSxyLl9ydW5Dcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj1lLmNhbGNkYXRhLGk9clt0KyJjb2xvcndheSJdLGE9clsiXyIrdCsiY29sb3JtYXAiXTtyWyJleHRlbmQiK3QrImNvbG9ycyJdJiYoaT1sKGksImljaWNsZSI9PT10P3A6InRyZWVtYXAiPT09dD9oOmYpKTt2YXIgbyxzPTA7ZnVuY3Rpb24gYyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoYVtyXT9lLmNvbG9yPWFbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihhW3JdPWUuY29sb3I9aVtzJWkubGVuZ3RoXSxzKyspOmUuY29sb3I9byl9Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBkPW5bdV1bMF07ZC50cmFjZS50eXBlPT09dCYmZC5oaWVyYXJjaHkmJihvPWQudHJhY2Uucm9vdC5jb2xvcixkLmhpZXJhcmNoeS5lYWNoKGMpKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi9waWUvY2FsYyI6ODk4LCJkMy1oaWVyYXJjaHkiOjExMCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOiJsaW5lYXIiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdfX0se31dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9cy5oYXNDb2xvcnNjYWxlLGM9cy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gdShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBmPXUoImxhYmVscyIpLGg9dSgicGFyZW50cyIpO2lmKGYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCl7dmFyIHA9dSgidmFsdWVzIik7cCYmcC5sZW5ndGg/dSgiYnJhbmNodmFsdWVzIik6dSgiY291bnQiKSx1KCJsZXZlbCIpLHUoIm1heGRlcHRoIiksdSgibWFya2VyLmxpbmUud2lkdGgiKSYmdSgibWFya2VyLmxpbmUuY29sb3IiLHMucGFwZXJfYmdjb2xvciksdSgibWFya2VyLmNvbG9ycyIpO3ZhciBkPWUuX2hhc0NvbG9yc2NhbGU9bCh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzO2QmJmModCxlLHMsdSx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHUoImxlYWYub3BhY2l0eSIsZD8xOi43KTt2YXIgbT11KCJ0ZXh0Iik7dSgidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K2xhYmVsIjoibGFiZWwiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7byh0LGUscyx1LCJhdXRvIix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksdSgiaW5zaWRldGV4dG9yaWVudGF0aW9uIiksdSgic29ydCIpLHUoInJvdGF0aW9uIiksdSgicm9vdC5jb2xvciIpLGEoZSxzLHUpLGUuX2xlbmd0aD1udWxsfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi9iYXIvZGVmYXVsdHMiOjY0NywiLi9hdHRyaWJ1dGVzIjoxMDQ0fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvZXZlbnRzIiksYz10KCIuL2hlbHBlcnMiKSx1PXQoIi4uL3BpZS9oZWxwZXJzIikuZm9ybWF0UGllVmFsdWU7ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPXQuZGF0YS5kYXRhLGk9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6bi5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX0sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO3MgaW4gdCYmKGlbc109dFtzXSl9cmV0dXJuInBhcmVudFN0cmluZyJpbiB0JiYhYy5pc0hpZXJhcmNoeVJvb3QodCkmJihpLnBhcmVudD10LnBhcmVudFN0cmluZyksYShpLGUsbi5pKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGgpe3ZhciBwPWFbMF0sZD1wLnRyYWNlLG09cC5oaWVyYXJjaHksZz0ic3VuYnVyc3QiPT09ZC50eXBlLHY9InRyZWVtYXAiPT09ZC50eXBlfHwiaWNpY2xlIj09PWQudHlwZTsiX2hhc0hvdmVyTGFiZWwiaW4gZHx8KGQuX2hhc0hvdmVyTGFiZWw9ITEpLCJfaGFzSG92ZXJFdmVudCJpbiBkfHwoZC5faGFzSG92ZXJFdmVudD0hMSk7dC5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oaSl7dmFyIGE9ci5fZnVsbExheW91dDtpZighci5fZHJhZ2dpbmcmJiExIT09YS5ob3Zlcm1vZGUpe3ZhciBsLHk9ci5fZnVsbERhdGFbZC5pbmRleF0seD1pLmRhdGEuZGF0YSxiPXguaSxfPWMuaXNIaWVyYXJjaHlSb290KGkpLHc9Yy5nZXRQYXJlbnQobSxpKSxUPWMuZ2V0VmFsdWUoaSksaz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYXN0T3B0aW9uKHksYix0KX0sQT1rKCJob3ZlcnRlbXBsYXRlIiksTT1vLmNhc3RIb3ZlcmluZm8oeSxhLGIpLFM9YS5zZXBhcmF0b3JzO2lmKEF8fE0mJiJub25lIiE9PU0mJiJza2lwIiE9PU0pe3ZhciBFLEw7ZyYmKEU9cC5jeCtpLnB4bWlkWzBdKigxLWkuckluc2NyaWJlZCksTD1wLmN5K2kucHhtaWRbMV0qKDEtaS5ySW5zY3JpYmVkKSksdiYmKEU9aS5faG92ZXJYLEw9aS5faG92ZXJZKTt2YXIgQyxQPXt9LEk9W10sTz1bXSx6PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09SS5pbmRleE9mKHQpfTtNJiYoST0iYWxsIj09PU0/eS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOk0uc3BsaXQoIisiKSksUC5sYWJlbD14LmxhYmVsLHooImxhYmVsIikmJlAubGFiZWwmJk8ucHVzaChQLmxhYmVsKSx4Lmhhc093blByb3BlcnR5KCJ2IikmJihQLnZhbHVlPXgudixQLnZhbHVlTGFiZWw9dShQLnZhbHVlLFMpLHooInZhbHVlIikmJk8ucHVzaChQLnZhbHVlTGFiZWwpKSxQLmN1cnJlbnRQYXRoPWkuY3VycmVudFBhdGg9Yy5nZXRQYXRoKGkuZGF0YSkseigiY3VycmVudCBwYXRoIikmJiFfJiZPLnB1c2goUC5jdXJyZW50UGF0aCk7dmFyIEQ9W10sUj1mdW5jdGlvbigpey0xPT09RC5pbmRleE9mKEMpJiYoTy5wdXNoKEMpLEQucHVzaChDKSl9O1AucGVyY2VudFBhcmVudD1pLnBlcmNlbnRQYXJlbnQ9VC9jLmdldFZhbHVlKHcpLFAucGFyZW50PWkucGFyZW50U3RyaW5nPWMuZ2V0UHRMYWJlbCh3KSx6KCJwZXJjZW50IHBhcmVudCIpJiYoQz1jLmZvcm1hdFBlcmNlbnQoUC5wZXJjZW50UGFyZW50LFMpKyIgb2YgIitQLnBhcmVudCxSKCkpLFAucGVyY2VudEVudHJ5PWkucGVyY2VudEVudHJ5PVQvYy5nZXRWYWx1ZShlKSxQLmVudHJ5PWkuZW50cnk9Yy5nZXRQdExhYmVsKGUpLCF6KCJwZXJjZW50IGVudHJ5Iil8fF98fGkub25QYXRoYmFyfHwoQz1jLmZvcm1hdFBlcmNlbnQoUC5wZXJjZW50RW50cnksUykrIiBvZiAiK1AuZW50cnksUigpKSxQLnBlcmNlbnRSb290PWkucGVyY2VudFJvb3Q9VC9jLmdldFZhbHVlKG0pLFAucm9vdD1pLnJvb3Q9Yy5nZXRQdExhYmVsKG0pLHooInBlcmNlbnQgcm9vdCIpJiYhXyYmKEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudFJvb3QsUykrIiBvZiAiK1Aucm9vdCxSKCkpLFAudGV4dD1rKCJob3ZlcnRleHQiKXx8aygidGV4dCIpLHooInRleHQiKSYmKEM9UC50ZXh0LHMuaXNWYWxpZFRleHRWYWx1ZShDKSYmTy5wdXNoKEMpKSxsPVtmKGkseSxoLmV2ZW50RGF0YUtleXMpXTt2YXIgRj17dHJhY2U6eSx5OkwsX3gwOmkuX3gwLF94MTppLl94MSxfeTA6aS5feTAsX3kxOmkuX3kxLHRleHQ6Ty5qb2luKCI8YnI+IiksbmFtZTpBfHx6KCJuYW1lIik/eS5uYW1lOnZvaWQgMCxjb2xvcjprKCJob3ZlcmxhYmVsLmJnY29sb3IiKXx8eC5jb2xvcixib3JkZXJDb2xvcjprKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIiksZm9udEZhbWlseTprKCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksZm9udFNpemU6aygiaG92ZXJsYWJlbC5mb250LnNpemUiKSxmb250Q29sb3I6aygiaG92ZXJsYWJlbC5mb250LmNvbG9yIiksbmFtZUxlbmd0aDprKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246aygiaG92ZXJsYWJlbC5hbGlnbiIpLGhvdmVydGVtcGxhdGU6QSxob3ZlcnRlbXBsYXRlTGFiZWxzOlAsZXZlbnREYXRhOmx9O2cmJihGLngwPUUtaS5ySW5zY3JpYmVkKmkucnB4MSxGLngxPUUraS5ySW5zY3JpYmVkKmkucnB4MSxGLmlkZWFsQWxpZ249aS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiKSx2JiYoRi54PUUsRi5pZGVhbEFsaWduPUU8MD8ibGVmdCI6InJpZ2h0Iik7dmFyIEI9W107by5sb25lSG92ZXIoRix7Y29udGFpbmVyOmEuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmEuX3BhcGVyLm5vZGUoKSxnZDpyLGluT3V0X2Jib3g6Qn0pLGxbMF0uYmJveD1CWzBdLGQuX2hhc0hvdmVyTGFiZWw9ITB9aWYodil7dmFyIE49dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2guc3R5bGVPbmUoTixpLHkse2hvdmVyZWQ6ITB9KX1kLl9oYXNIb3ZlckV2ZW50PSEwLHIuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOmx8fFtmKGkseSxoLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fSl9fSkpLHQub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oZSl7dmFyIGk9ci5fZnVsbExheW91dCxhPXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHM9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtpZihkLl9oYXNIb3ZlckV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsci5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbZihzLGEsaC5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH0pLGQuX2hhc0hvdmVyRXZlbnQ9ITEpLGQuX2hhc0hvdmVyTGFiZWwmJihvLmxvbmVVbmhvdmVyKGkuX2hvdmVybGF5ZXIubm9kZSgpKSxkLl9oYXNIb3ZlckxhYmVsPSExKSx2KXt2YXIgbD10LnNlbGVjdCgicGF0aC5zdXJmYWNlIik7aC5zdHlsZU9uZShsLHMsYSx7aG92ZXJlZDohMX0pfX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuX2Z1bGxMYXlvdXQsYT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPWcmJihjLmlzSGllcmFyY2h5Um9vdCh0KXx8Yy5pc0xlYWYodCkpLHU9Yy5nZXRQdElkKHQpLHA9Yy5pc0VudHJ5KHQpP2MuZmluZEVudHJ5V2l0aENoaWxkKG0sdSk6Yy5maW5kRW50cnlXaXRoTGV2ZWwobSx1KSx2PWMuZ2V0UHRJZChwKSx5PXtwb2ludHM6W2YodCxhLGguZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9O3N8fCh5Lm5leHRMZXZlbD12KTt2YXIgeD1sLnRyaWdnZXJIYW5kbGVyKHIsInBsb3RseV8iK2QudHlwZSsiY2xpY2siLHkpO2lmKCExIT09eCYmZS5ob3Zlcm1vZGUmJihyLl9ob3ZlcmRhdGE9W2YodCxhLGguZXZlbnREYXRhS2V5cyldLG8uY2xpY2socixuLmV2ZW50KSksIXMmJiExIT09eCYmIXIuX2RyYWdnaW5nJiYhci5fdHJhbnNpdGlvbmluZyl7aS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixhLGUuX3RyYWNlUHJlR1VJW2EudWlkXSx7bGV2ZWw6YS5sZXZlbH0pO3ZhciBiPXtkYXRhOlt7bGV2ZWw6dn1dLHRyYWNlczpbZC5pbmRleF19LF89e2ZyYW1lOntyZWRyYXc6ITEsZHVyYXRpb246aC50cmFuc2l0aW9uVGltZX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246aC50cmFuc2l0aW9uVGltZSxlYXNpbmc6aC50cmFuc2l0aW9uRWFzaW5nfSxtb2RlOiJpbW1lZGlhdGUiLGZyb21jdXJyZW50OiEwfTtvLmxvbmVVbmhvdmVyKGUuX2hvdmVybGF5ZXIubm9kZSgpKSxpLmNhbGwoImFuaW1hdGUiLHIsYixfKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjQwMSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjozOTcsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvZXZlbnRzIjo0ODcsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4uL3BpZS9oZWxwZXJzIjo5MDEsIi4vaGVscGVycyI6MTA1MCwiQHBsb3RseS9kMyI6NTh9XSwxMDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLG89dCgiLi4vcGllL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiB0LmRhdGEuZGF0YS5waWR9ci5maW5kRW50cnlXaXRoTGV2ZWw9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2lmKHIuZ2V0UHRJZCh0KT09PWUpcmV0dXJuIG49dC5jb3B5KCl9KSksbnx8dH0sci5maW5kRW50cnlXaXRoQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT10LmNoaWxkcmVufHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoci5nZXRQdElkKG8pPT09ZSlyZXR1cm4gbj10LmNvcHkoKX19KSksbnx8dH0sci5pc0VudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcmVudH0sci5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hpbGRyZW59LHIuZ2V0UHRJZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEuaWR9LHIuZ2V0UHRMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEubGFiZWx9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9LHIuaXNIaWVyYXJjaHlSb290PWZ1bmN0aW9uKHQpe3JldHVybiIiPT09cyh0KX0sci5zZXRTbGljZUN1cnNvcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9bi5pc1RyYW5zaXRpb25pbmc7aWYoIWkpe3ZhciBvPXQuZGF0dW0oKTtpPW4uaGlkZU9uUm9vdCYmci5pc0hpZXJhcmNoeVJvb3Qobyl8fG4uaGlkZU9uTGVhdmVzJiZyLmlzTGVhZihvKX1hKHQsaT9udWxsOiJwb2ludGVyIil9LHIuZ2V0SW5zaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0oYXx8e30pLm9uUGF0aGJhcj8icGF0aGJhci50ZXh0Zm9udCI6Imluc2lkZXRleHRmb250IixzPXIuZGF0YS5kYXRhLmk7cmV0dXJuIG4uY2FzdE9wdGlvbihlLHMsbysiLiIrdCl8fG4uY2FzdE9wdGlvbihlLHMsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5nZXRPdXRzaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5kYXRhLmRhdGEuaTtyZXR1cm4gbi5jYXN0T3B0aW9uKGUsYSwib3V0c2lkZXRleHRmb250LiIrdCl8fG4uY2FzdE9wdGlvbihlLGEsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5pc091dHNpZGVUZXh0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXQuX2hhc0NvbG9yc2NhbGUmJnIuaXNIaWVyYXJjaHlSb290KGUpfSxyLmRldGVybWluZVRleHRGb250PWZ1bmN0aW9uKHQsZSxhLG8pe3JldHVybiByLmlzT3V0c2lkZVRleHQodCxlKT9mdW5jdGlvbih0LGUsbil7cmV0dXJue2NvbG9yOnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJjb2xvciIsdCxlLG4pLGZhbWlseTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgiZmFtaWx5Iix0LGUsbiksc2l6ZTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgic2l6ZSIsdCxlLG4pfX0odCxlLGEpOmZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzPShvfHx7fSkub25QYXRoYmFyLGw9ZS5kYXRhLmRhdGEsYz1sLmksdT1uLmNhc3RPcHRpb24odCxjLChzPyJwYXRoYmFyLnRleHRmb250IjoiaW5zaWRldGV4dGZvbnQiKSsiLmNvbG9yIik7cmV0dXJuIXUmJnQuX2lucHV0LnRleHRmb250JiYodT1uLmNhc3RPcHRpb24odC5faW5wdXQsYywidGV4dGZvbnQuY29sb3IiKSkse2NvbG9yOnV8fGkuY29udHJhc3QobC5jb2xvciksZmFtaWx5OnIuZ2V0SW5zaWRlVGV4dEZvbnRLZXkoImZhbWlseSIsdCxlLGEsbyksc2l6ZTpyLmdldEluc2lkZVRleHRGb250S2V5KCJzaXplIix0LGUsYSxvKX19KHQsZSxhLG8pfSxyLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuISEodCYmdC5kdXJhdGlvbj4wKX0sci5nZXRNYXhEZXB0aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXhkZXB0aD49MD90Lm1heGRlcHRoOjEvMH0sci5pc0hlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiEoci5pc0xlYWYodCl8fHQuZGVwdGg9PT1lLl9tYXhEZXB0aC0xKX0sci5nZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5maW5kRW50cnlXaXRoTGV2ZWwodCxzKGUpKX0sci5saXN0UGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXQucGFyZW50O2lmKCFuKXJldHVybltdO3ZhciBpPWU/W24uZGF0YVtlXV06W25dO3JldHVybiByLmxpc3RQYXRoKG4sZSkuY29uY2F0KGkpfSxyLmdldFBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubGlzdFBhdGgodCwibGFiZWwiKS5qb2luKCIvIikrIi8ifSxyLmZvcm1hdFZhbHVlPW8uZm9ybWF0UGllVmFsdWUsci5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5mb3JtYXRQZXJjZW50KHQsMCk7cmV0dXJuIjAlIj09PXImJihyPW8uZm9ybWF0UGllUGVyY2VudCh0LGUpKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MTksIi4uL3BpZS9oZWxwZXJzIjo5MDF9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi9hdHRyaWJ1dGVzIjoxMDQ0LCIuL2Jhc2VfcGxvdCI6MTA0NSwiLi9jYWxjIjoxMDQ2LCIuL2RlZmF1bHRzIjoxMDQ4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDUyLCIuL2xheW91dF9kZWZhdWx0cyI6MTA1MywiLi9wbG90IjoxMDU0LCIuL3N0eWxlIjoxMDU1fV0sMTA1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEwNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoInN1bmJ1cnN0Y29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHN1bmJ1cnN0Y29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDUyfV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1oaWVyYXJjaHkiKSxhPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksdT1jLnJlY29yZE1pblRleHRTaXplLGY9Yy5jbGVhck1pblRleHRTaXplLGg9dCgiLi4vcGllL3Bsb3QiKSxwPXQoIi4uL3BpZS9oZWxwZXJzIikuZ2V0Um90YXRpb25BbmdsZSxkPWguY29tcHV0ZVRyYW5zZm9ybSxtPWgudHJhbnNmb3JtSW5zaWRlVGV4dCxnPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSx2PXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQseT10KCIuL2Z4IikseD10KCIuL2NvbnN0YW50cyIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUsYyxmKXt2YXIgaD10Ll9mdWxsTGF5b3V0LHY9IWgudW5pZm9ybXRleHQubW9kZSYmYi5oYXNUcmFuc2l0aW9uKGYpLF89bi5zZWxlY3QoYykuc2VsZWN0QWxsKCJnLnNsaWNlIiksVD1lWzBdLGs9VC50cmFjZSxBPVQuaGllcmFyY2h5LE09Yi5maW5kRW50cnlXaXRoTGV2ZWwoQSxrLmxldmVsKSxTPWIuZ2V0TWF4RGVwdGgoayksRT1oLl9zaXplLEw9ay5kb21haW4sQz1FLncqKEwueFsxXS1MLnhbMF0pLFA9RS5oKihMLnlbMV0tTC55WzBdKSxJPS41Kk1hdGgubWluKEMsUCksTz1ULmN4PUUubCtFLncqKEwueFsxXStMLnhbMF0pLzIsej1ULmN5PUUudCtFLmgqKDEtTC55WzBdKS1QLzI7aWYoIU0pcmV0dXJuIF8ucmVtb3ZlKCk7dmFyIEQ9bnVsbCxSPXt9O3YmJl8uZWFjaCgoZnVuY3Rpb24odCl7UltiLmdldFB0SWQodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhRCYmYi5pc0VudHJ5KHQpJiYoRD10KX0pKTt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfShNKS5kZXNjZW5kYW50cygpLEI9TS5oZWlnaHQrMSxOPTAsaj1TO1QuaGFzTXVsdGlwbGVSb290cyYmYi5pc0hpZXJhcmNoeVJvb3QoTSkmJihGPUYuc2xpY2UoMSksQi09MSxOPTEsais9MSksRj1GLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PWp9KSk7dmFyIFU9cChrLnJvdGF0aW9uKTtVJiZGLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDArPVUsdC54MSs9VX0pKTt2YXIgVj1NYXRoLm1pbihCLFMpLEg9ZnVuY3Rpb24odCl7cmV0dXJuKHQtTikvVipJfSxxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxHPWZ1bmN0aW9uKHQpe3JldHVybiBzLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLE8seil9LFk9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdyh0KVswXSoodC50cmFuc2Zvcm0uckNlbnRlcnx8MCkrKHQudHJhbnNmb3JtLnh8fDApfSxXPWZ1bmN0aW9uKHQpe3JldHVybiB6K3codClbMV0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS55fHwwKX07KF89Xy5kYXRhKEYsYi5nZXRQdElkKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHY/Xy5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPWIuZ2V0UHRJZCh0KSxuPVJbcl0saT1SW2IuZ2V0UHRJZChNKV07aWYoaSl7dmFyIG89KHQueDE+aS54MT8yKk1hdGguUEk6MCkrVTtlPXQucnB4MTxpLnJweDE/e3gwOnQueDAseDE6dC54MSxycHgwOjAscnB4MTowfTp7eDA6byx4MTpvLHJweDA6dC5ycHgwLHJweDE6dC5ycHgxfX1lbHNle3ZhciBzLGw9Yi5nZXRQdElkKHQucGFyZW50KTtfLmVhY2goKGZ1bmN0aW9uKHQpe2lmKGIuZ2V0UHRJZCh0KT09PWwpcmV0dXJuIHM9dH0pKTt2YXIgYyx1PXMuY2hpbGRyZW47dS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKGIuZ2V0UHRJZCh0KT09PXIpcmV0dXJuIGM9ZX0pKTt2YXIgZj11Lmxlbmd0aCxoPWEocy54MCxzLngxKTtlPXtycHgwOkkscnB4MTpJLHgwOmgoYy9mKSx4MTpoKChjKzEpL2YpfX1yZXR1cm4gYShuLGUpfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoZSh0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOl8uZXhpdCgpLnJlbW92ZSgpLF8ub3JkZXIoKTt2YXIgWD1udWxsO2lmKHYmJkQpe3ZhciBaPWIuZ2V0UHRJZChEKTtfLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1YJiZiLmdldFB0SWQodCk9PT1aJiYoWD10LngxKX0pKX12YXIgSj1fO2Z1bmN0aW9uIEsodCl7dmFyIGU9dC5wYXJlbnQscj1SW2IuZ2V0UHRJZChlKV0sbj17fTtpZihyKXt2YXIgaT1lLmNoaWxkcmVuLG89aS5pbmRleE9mKHQpLHM9aS5sZW5ndGgsbD1hKHIueDAsci54MSk7bi54MD1sKG8vcyksbi54MT1sKG8vcyl9ZWxzZSBuLngwPW4ueDE9MDtyZXR1cm4gbn12JiYoSj1KLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Iuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksSi5lYWNoKChmdW5jdGlvbihpKXt2YXIgYz1uLnNlbGVjdCh0aGlzKSxmPXMuZW5zdXJlU2luZ2xlKGMsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTtpLnJweDA9SChpLnkwKSxpLnJweDE9SChpLnkxKSxpLnhtaWQ9KGkueDAraS54MSkvMixpLnB4bWlkPXEoaS5ycHgxLGkueG1pZCksaS5taWRhbmdsZT0tKGkueG1pZC1NYXRoLlBJLzIpLGkuc3RhcnRhbmdsZT0tKGkueDAtTWF0aC5QSS8yKSxpLnN0b3BhbmdsZT0tKGkueDEtTWF0aC5QSS8yKSxpLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihzLmFuZ2xlRGVsdGEoaS54MCxpLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxpLnJpbmc9MS1pLnJweDAvaS5ycHgxLGkuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmcy5pc0Z1bGxDaXJjbGUoW3QueDAsdC54MV0pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMikpfShpKSx2P2YudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9UltiLmdldFB0SWQodCldLG49e3gwOnQueDAseDE6dC54MSxycHgwOnQucnB4MCxycHgxOnQucnB4MX07aWYocillPXI7ZWxzZSBpZihEKWlmKHQucGFyZW50KWlmKFgpe3ZhciBpPSh0LngxPlg/MipNYXRoLlBJOjApK1U7ZT17eDA6aSx4MTppfX1lbHNlIGU9e3JweDA6SSxycHgxOkl9LHMuZXh0ZW5kRmxhdChlLEsodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDpVLHgxOlV9O3JldHVybiBhKGUsbil9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRyhlKHQpKX19KSk6Zi5hdHRyKCJkIixHKSxjLmNhbGwoeSxNLHQsZSx7ZXZlbnREYXRhS2V5czp4LmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6eC5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzp4LkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbChiLnNldFNsaWNlQ3Vyc29yLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiEwLGlzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksZi5jYWxsKGcsaSxrKTt2YXIgcD1zLmVuc3VyZVNpbmdsZShjLCJnIiwic2xpY2V0ZXh0IiksXz1zLmVuc3VyZVNpbmdsZShwLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSx3PXMuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsYi5kZXRlcm1pbmVUZXh0Rm9udChrLGksaC5mb250KSk7Xy50ZXh0KHIuZm9ybWF0U2xpY2VMYWJlbChpLE0sayxlLGgpKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoby5mb250LHcpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIEE9by5iQm94KF8ubm9kZSgpKTtpLnRyYW5zZm9ybT1tKEEsaSxUKSxpLnRyYW5zZm9ybS50YXJnZXRYPVkoaSksaS50cmFuc2Zvcm0udGFyZ2V0WT1XKGkpO3ZhciBTPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50cmFuc2Zvcm07cmV0dXJuIGQocixlKSxyLmZvbnRTaXplPXcuc2l6ZSx1KGsudHlwZSxyLGgpLHMuZ2V0VGV4dFRyYW5zZm9ybShyKX07dj9fLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9UltiLmdldFB0SWQodCldLG49dC50cmFuc2Zvcm07aWYocillPXI7ZWxzZSBpZihlPXtycHgxOnQucnB4MSx0cmFuc2Zvcm06e3RleHRQb3NBbmdsZTpuLnRleHRQb3NBbmdsZSxzY2FsZTowLHJvdGF0ZTpuLnJvdGF0ZSxyQ2VudGVyOm4uckNlbnRlcix4Om4ueCx5Om4ueX19LEQpaWYodC5wYXJlbnQpaWYoWCl7dmFyIGk9dC54MT5YPzIqTWF0aC5QSTowO2UueDA9ZS54MT1pfWVsc2Ugcy5leHRlbmRGbGF0KGUsSyh0KSk7ZWxzZSBlLngwPWUueDE9VTtlbHNlIGUueDA9ZS54MT1VO3ZhciBvPWEoZS50cmFuc2Zvcm0udGV4dFBvc0FuZ2xlLHQudHJhbnNmb3JtLnRleHRQb3NBbmdsZSksbD1hKGUucnB4MSx0LnJweDEpLGM9YShlLngwLHQueDApLGY9YShlLngxLHQueDEpLHA9YShlLnRyYW5zZm9ybS5zY2FsZSxuLnNjYWxlKSxkPWEoZS50cmFuc2Zvcm0ucm90YXRlLG4ucm90YXRlKSxtPTA9PT1uLnJDZW50ZXI/MzowPT09ZS50cmFuc2Zvcm0uckNlbnRlcj8xLzM6MSxnPWEoZS50cmFuc2Zvcm0uckNlbnRlcixuLnJDZW50ZXIpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1sKHQpLHI9Yyh0KSxpPWYodCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZyhNYXRoLnBvdyh0LG0pKX0odCkscz17cHhtaWQ6cShlLChyK2kpLzIpLHJweDE6ZSx0cmFuc2Zvcm06e3RleHRQb3NBbmdsZTpvKHQpLHJDZW50ZXI6YSx4Om4ueCx5Om4ueX19O3JldHVybiB1KGsudHlwZSxuLGgpLHt0cmFuc2Zvcm06e3RhcmdldFg6WShzKSx0YXJnZXRZOlcocyksc2NhbGU6cCh0KSxyb3RhdGU6ZCh0KSxyQ2VudGVyOmF9fX19KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUyhlKHQpLEEpfX0pKTpfLmF0dHIoInRyYW5zZm9ybSIsUyhpLEEpKX0pKX1mdW5jdGlvbiB3KHQpe3JldHVybiBlPXQucnB4MSxyPXQudHJhbnNmb3JtLnRleHRQb3NBbmdsZSxbZSpNYXRoLnNpbihyKSwtZSpNYXRoLmNvcyhyKV07dmFyIGUscn1yLnBsb3Q9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdW5idXJzdGxheWVyLGM9IXIsdT0hcy51bmlmb3JtdGV4dC5tb2RlJiZiLmhhc1RyYW5zaXRpb24ocik7KGYoInN1bmJ1cnN0IixzKSwoYT1sLnNlbGVjdEFsbCgiZy50cmFjZS5zdW5idXJzdCIpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyYWNlIiwhMCkuY2xhc3NlZCgic3VuYnVyc3QiLCEwKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLGEub3JkZXIoKSx1KT8oaSYmKG89aSgpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe28mJm8oKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe28mJm8oKX0pKS5lYWNoKChmdW5jdGlvbigpe2wuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7Xyh0LGUsdGhpcyxyKX0pKX0pKSk6KGEuZWFjaCgoZnVuY3Rpb24oZSl7Xyh0LGUsdGhpcyxyKX0pKSxzLnVuaWZvcm10ZXh0Lm1vZGUmJnYodCxzLl9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIiksInN1bmJ1cnN0IikpO2MmJmEuZXhpdCgpLnJlbW92ZSgpfSxyLmZvcm1hdFNsaWNlTGFiZWw9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1yLnRleHR0ZW1wbGF0ZSxvPXIudGV4dGluZm87aWYoIShhfHxvJiYibm9uZSIhPT1vKSlyZXR1cm4iIjt2YXIgbD1pLnNlcGFyYXRvcnMsYz1uWzBdLHU9dC5kYXRhLmRhdGEsZj1jLmhpZXJhcmNoeSxoPWIuaXNIaWVyYXJjaHlSb290KHQpLHA9Yi5nZXRQYXJlbnQoZix0KSxkPWIuZ2V0VmFsdWUodCk7aWYoIWEpe3ZhciBtLGc9by5zcGxpdCgiKyIpLHY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1nLmluZGV4T2YodCl9LHk9W107aWYodigibGFiZWwiKSYmdS5sYWJlbCYmeS5wdXNoKHUubGFiZWwpLHUuaGFzT3duUHJvcGVydHkoInYiKSYmdigidmFsdWUiKSYmeS5wdXNoKGIuZm9ybWF0VmFsdWUodS52LGwpKSwhaCl7digiY3VycmVudCBwYXRoIikmJnkucHVzaChiLmdldFBhdGgodC5kYXRhKSk7dmFyIHg9MDt2KCJwZXJjZW50IHBhcmVudCIpJiZ4KyssdigicGVyY2VudCBlbnRyeSIpJiZ4KyssdigicGVyY2VudCByb290IikmJngrKzt2YXIgXz14PjE7aWYoeCl7dmFyIHcsVD1mdW5jdGlvbih0KXttPWIuZm9ybWF0UGVyY2VudCh3LGwpLF8mJihtKz0iIG9mICIrdCkseS5wdXNoKG0pfTt2KCJwZXJjZW50IHBhcmVudCIpJiYhaCYmKHc9ZC9iLmdldFZhbHVlKHApLFQoInBhcmVudCIpKSx2KCJwZXJjZW50IGVudHJ5IikmJih3PWQvYi5nZXRWYWx1ZShlKSxUKCJlbnRyeSIpKSx2KCJwZXJjZW50IHJvb3QiKSYmKHc9ZC9iLmdldFZhbHVlKGYpLFQoInJvb3QiKSl9fXJldHVybiB2KCJ0ZXh0IikmJihtPXMuY2FzdE9wdGlvbihyLHUuaSwidGV4dCIpLHMuaXNWYWxpZFRleHRWYWx1ZShtKSYmeS5wdXNoKG0pKSx5LmpvaW4oIjxicj4iKX12YXIgaz1zLmNhc3RPcHRpb24ocix1LmksInRleHR0ZW1wbGF0ZSIpO2lmKCFrKXJldHVybiIiO3ZhciBBPXt9O3UubGFiZWwmJihBLmxhYmVsPXUubGFiZWwpLHUuaGFzT3duUHJvcGVydHkoInYiKSYmKEEudmFsdWU9dS52LEEudmFsdWVMYWJlbD1iLmZvcm1hdFZhbHVlKHUudixsKSksQS5jdXJyZW50UGF0aD1iLmdldFBhdGgodC5kYXRhKSxofHwoQS5wZXJjZW50UGFyZW50PWQvYi5nZXRWYWx1ZShwKSxBLnBlcmNlbnRQYXJlbnRMYWJlbD1iLmZvcm1hdFBlcmNlbnQoQS5wZXJjZW50UGFyZW50LGwpLEEucGFyZW50PWIuZ2V0UHRMYWJlbChwKSksQS5wZXJjZW50RW50cnk9ZC9iLmdldFZhbHVlKGUpLEEucGVyY2VudEVudHJ5TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudEVudHJ5LGwpLEEuZW50cnk9Yi5nZXRQdExhYmVsKGUpLEEucGVyY2VudFJvb3Q9ZC9iLmdldFZhbHVlKGYpLEEucGVyY2VudFJvb3RMYWJlbD1iLmZvcm1hdFBlcmNlbnQoQS5wZXJjZW50Um9vdCxsKSxBLnJvb3Q9Yi5nZXRQdExhYmVsKGYpLHUuaGFzT3duUHJvcGVydHkoImNvbG9yIikmJihBLmNvbG9yPXUuY29sb3IpO3ZhciBNPXMuY2FzdE9wdGlvbihyLHUuaSwidGV4dCIpO3JldHVybihzLmlzVmFsaWRUZXh0VmFsdWUoTSl8fCIiPT09TSkmJihBLnRleHQ9TSksQS5jdXN0b21kYXRhPXMuY2FzdE9wdGlvbihyLHUuaSwiY3VzdG9tZGF0YSIpLHMudGV4dHRlbXBsYXRlU3RyaW5nKGssQSxpLl9kM2xvY2FsZSxBLHIuX21ldGF8fHt9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vYmFyL3N0eWxlIjo2NTcsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiLi4vcGllL2hlbHBlcnMiOjkwMSwiLi4vcGllL3Bsb3QiOjkwNSwiLi9jb25zdGFudHMiOjEwNDcsIi4vZngiOjEwNDksIi4vaGVscGVycyI6MTA1MCwiLi9zdHlsZSI6MTA1NSwiQHBsb3RseS9kMyI6NTgsImQzLWhpZXJhcmNoeSI6MTEwLCJkMy1pbnRlcnBvbGF0ZSI6MTExfV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLG89IWUuY2hpbGRyZW4scz1uLmksbD1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS5jb2xvciIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUud2lkdGgiKXx8MDt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGMpLmNhbGwoaS5maWxsLG4uY29sb3IpLmNhbGwoaS5zdHJva2UsbCkuc3R5bGUoIm9wYWNpdHkiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsInN1bmJ1cnN0IiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChzLHQscil9KSl9KSl9LHN0eWxlT25lOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vbGliIjo0OTgsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiQHBsb3RseS9kMyI6NTh9XSwxMDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx6aG92ZXJmb3JtYXQ6YSgieiIpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxvcGFjaXR5c2NhbGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7Zi54LmVkaXRUeXBlPWYueS5lZGl0VHlwZT1mLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGYudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzY4LCIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzMSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2Mjh9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6MzY5fV0sMTA1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zdXJmYWNlM2QsaT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5uZGFycmF5LGE9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikubmRhcnJheV9saW5lYXJfaW50ZXJwb2xhdGUuZDIsbz10KCIuLi9oZWF0bWFwL2ludGVycDJkIikscz10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBwPWgucHJvdG90eXBlO3AuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLngpP2wodGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLnkpP2wodGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09aSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihpPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGk9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixpXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpKSx0aGlzLmdldFlhdChuLGkpLHRoaXMuZ2V0WmF0KG4saSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGksdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixpLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2FdO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2FdKj10aGlzLnNjZW5lLmRhdGFTY2FsZVthXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbaV0mJnZvaWQgMCE9PXNbaV1bbl0/dC50ZXh0TGFiZWw9c1tpXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gbSh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKG0odCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9Zyh0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPWcodCksbj1nKGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXJbOF0rclsyXSplWzBdK3JbNV0qZVsxXTtyZXR1cm4gdFswXT0ocls2XStyWzBdKmVbMF0rclszXSplWzFdKS9uLHRbMV09KHJbN10rclsxXSplWzBdK3JbNF0qZVsxXSkvbix0fWZ1bmN0aW9uIFQodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9WzAsMF0sbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXIoaSxbbCxjXSxuKSx0LnNldChsLGMsYShlLGlbMF0saVsxXSkpfSh0LGUsdyxyKSx0fWZ1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPXYociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sYT10WzBdLnNoYXBlWzFdLG89MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksbD0xK24rMSxjPTErYSsxLHU9aShuZXcgRmxvYXQzMkFycmF5KGwqYyksW2wsY10pLGY9WzEvZSwwLDAsMCwxL3IsMCwwLDAsMV0saD0wO2g8dC5sZW5ndGg7KytoKXt0aGlzLnN1cmZhY2UucGFkRmllbGQodSx0W2hdKTt2YXIgcD1pKG5ldyBGbG9hdDMyQXJyYXkobypzKSxbbyxzXSk7VChwLHUsZiksdFtoXT1wfX0scC5zZXRDb250b3VyTGV2ZWxzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49W1tdLFtdLFtdXSxpPVshMSwhMSwhMV0sYT0hMTtmb3IodD0wO3Q8MzsrK3QpaWYodGhpcy5zaG93Q29udG91clt0XSYmKGE9ITAsdGhpcy5jb250b3VyU2l6ZVt0XT4wJiZudWxsIT09dGhpcy5jb250b3VyU3RhcnRbdF0mJm51bGwhPT10aGlzLmNvbnRvdXJFbmRbdF0mJnRoaXMuY29udG91ckVuZFt0XT50aGlzLmNvbnRvdXJTdGFydFt0XSkpZm9yKGlbdF09ITAsZT10aGlzLmNvbnRvdXJTdGFydFt0XTtlPHRoaXMuY29udG91ckVuZFt0XTtlKz10aGlzLmNvbnRvdXJTaXplW3RdKXI9ZSp0aGlzLnNjZW5lLmRhdGFTY2FsZVt0XSxrKG5bdF0scik7aWYoYSl7dmFyIG89W1tdLFtdLFtdXTtmb3IodD0wO3Q8MzsrK3QpdGhpcy5zaG93Q29udG91clt0XSYmKG9bdF09aVt0XT9uW3RdOnRoaXMuc2NlbmUuY29udG91ckxldmVsc1t0XSk7dGhpcy5zdXJmYWNlLnVwZGF0ZSh7bGV2ZWxzOm99KX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGw9dGhpcy5zY2VuZSxoPWwuZnVsbFNjZW5lTGF5b3V0LHA9dGhpcy5zdXJmYWNlLGQ9Yyh0KSxtPWwuZGF0YVNjYWxlLGc9dC56WzBdLmxlbmd0aCx2PXQuX3lsZW5ndGgseT1sLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIHg9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcih4W2VdPVtdLHI9MDtyPGc7cisrKXhbZV1bcl09W107Zm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyl4WzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSx4WzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSx4WzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1zKHhbMl0pLG8oeFsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxnO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx2O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPXhbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbD09KGE9eFtlXVtyXVtuXSk/eFtlXVtyXVtuXT1OYU46YT14W2VdW3JdW25dKj1tW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKW51bGwhPShhPXhbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih4W2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGI9W2kobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkoZyp2KSxbZyx2XSksaShuZXcgRmxvYXQzMkFycmF5KGcqdiksW2csdl0pXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyliW2VdLnNldChyLG4seFtlXVtyXVtuXSk7eD1bXTt2YXIgdz17Y29sb3JtYXA6ZCxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxvcGFjaXR5OnQub3BhY2l0eX0sVD1mKHQpO2lmKHcuaW50ZW5zaXR5Qm91bmRzPVtULm1pbixULm1heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBrPWkobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKTtmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKWsuc2V0KHIsbix0LnN1cmZhY2Vjb2xvcltuXVtyXSk7Yi5wdXNoKGspfWVsc2Ugdy5pbnRlbnNpdHlCb3VuZHNbMF0qPW1bMl0sdy5pbnRlbnNpdHlCb3VuZHNbMV0qPW1bMl07KF88YlswXS5zaGFwZVswXXx8XzxiWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShiWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGIpKSx0LnN1cmZhY2Vjb2xvciYmKHcuaW50ZW5zaXR5PWIucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCx3LnNob3dDb250b3VyW2VdJiYody5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCx3LmxldmVsc1tlXT15W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09dy5jb250b3VyQ29sb3JbZV09dShTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT13LmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MSx3LmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPVMuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPVMuZW5kLHRoaXMuY29udG91clNpemVbZV09Uy5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksUy5oaWdobGlnaHQmJih3LmR5bmFtaWNDb2xvcltlXT11KFMuaGlnaGxpZ2h0Y29sb3IpLHcuZHluYW1pY1dpZHRoW2VdPVMuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KShkKSYmKHcudmVydGV4Q29sb3I9ITApLHcub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHcuY29vcmRzPWIscC51cGRhdGUodykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6MzczLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NDk0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjMsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjo3OTMsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjc5Nn1dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPW4oIm9wYWNpdHlzY2FsZSIpOyJtYXgiPT09aT9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXToibWluIj09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06ImV4dHJlbWVzIj09PWk/ZS5vcGFjaXR5c2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248MzI7bisrKXt2YXIgaT1uLzMxLGE9ZSsoMS1lKSooMS1NYXRoLnBvdyhNYXRoLnNpbih0KmkqTWF0aC5QSSksMikpO3IucHVzaChbaSxNYXRoLm1heCgwLE1hdGgubWluKDEsYSkpXSl9cmV0dXJuIHJ9KDEsLjEpOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZigyIT09bi5sZW5ndGh8fCtuWzBdPGUpcmV0dXJuITE7ZT0rblswXX1yZXR1cm4hMH0oaSl8fChlLm9wYWNpdHlzY2FsZT12b2lkIDApfWZ1bmN0aW9uIGwodCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1LGY7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBwPWgoIngiKSxkPWgoInkiKSxtPWgoInoiKTtpZighbXx8IW0ubGVuZ3RofHxwJiZwLmxlbmd0aDwxfHxkJiZkLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShwKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHBbMF0pP20ubGVuZ3RoOm1bMF0ubGVuZ3RoLGUuX3lsZW5ndGg9bS5sZW5ndGgsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxjKSxoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLGgoInhob3ZlcmZvcm1hdCIpLGgoInlob3ZlcmZvcm1hdCIpLGgoInpob3ZlcmZvcm1hdCIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2godCl9KSk7dmFyIGc9aCgic3VyZmFjZWNvbG9yIiksdj1bIngiLCJ5IiwieiJdO2Zvcih1PTA7dTwzOysrdSl7dmFyIHk9ImNvbnRvdXJzLiIrdlt1XSx4PWgoeSsiLnNob3ciKSxiPWgoeSsiLmhpZ2hsaWdodCIpO2lmKHh8fGIpZm9yKGY9MDtmPDM7KytmKWgoeSsiLnByb2plY3QuIit2W2ZdKTt4JiYoaCh5KyIuY29sb3IiKSxoKHkrIi53aWR0aCIpLGgoeSsiLnVzZWNvbG9ybWFwIikpLGImJihoKHkrIi5oaWdobGlnaHRjb2xvciIpLGgoeSsiLmhpZ2hsaWdodHdpZHRoIikpLGgoeSsiLnN0YXJ0IiksaCh5KyIuZW5kIiksaCh5KyIuc2l6ZSIpfWd8fChsKHQsInptaW4iLCJjbWluIiksbCh0LCJ6bWF4IiwiY21heCIpLGwodCwiemF1dG8iLCJjYXV0byIpKSxhKHQsZSxjLGgse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHModCxlLGMsaCksZS5fbGVuZ3RoPW51bGx9fSxvcGFjaXR5c2NhbGVEZWZhdWx0czpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3MSwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzMsIi4vYXR0cmlidXRlcyI6MTA1Nn1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1cmZhY2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsIjJkTWFwIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjU5MywiLi9hdHRyaWJ1dGVzIjoxMDU2LCIuL2NhbGMiOjEwNTcsIi4vY29udmVydCI6MTA1OCwiLi9kZWZhdWx0cyI6MTA1OX1dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVyczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGRlc2NyaXB0aW9uOmwoImNlbGwgdmFsdWUiKX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjI4fSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZGVzY3JpcHRpb246bCgiY2VsbCB2YWx1ZSIpfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MjB9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9fSwiY2FsYyIsImZyb20tcm9vdCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjM0NCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTc5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4MH1dLDEwNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0idGFibGUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsInRhYmxlIilbMF07ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygidGFibGUiKSxhPWUuX2hhcyYmZS5faGFzKCJ0YWJsZSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi50YWJsZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTg4LCIuL3Bsb3QiOjEwNjl9XSwxMDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHsiLi4vLi4vbGliL2d1cCI6NDk1fV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NlbGxQYWQ6OCxjb2x1bW5FeHRlbnRPZmZzZXQ6MTAsY29sdW1uVGl0bGVPZmZzZXQ6MjgsZW1wdHlIZWFkZXJIZWlnaHQ6MTYsbGF0ZXhDaGVjazovXlwkLipcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOiI8YnI+IixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoOjE4LHNjcm9sbGJhckhpZGVEZWxheToxZTMsc2Nyb2xsYmFySGlkZUR1cmF0aW9uOjFlMyxzY3JvbGxiYXJPZmZzZXQ6NSxzY3JvbGxiYXJXaWR0aDo4LHRyYW5zaXRpb25EdXJhdGlvbjoxMDAsdHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjoiICIsd3JhcFNwbGl0Q2hhcmFjdGVyOiIgIixjbjp7dGFibGU6InRhYmxlIix0YWJsZUNvbnRyb2xWaWV3OiJ0YWJsZS1jb250cm9sLXZpZXciLHNjcm9sbEJhY2tncm91bmQ6InNjcm9sbC1iYWNrZ3JvdW5kIix5Q29sdW1uOiJ5LWNvbHVtbiIsY29sdW1uQmxvY2s6ImNvbHVtbi1ibG9jayIsc2Nyb2xsQXJlYUNsaXA6InNjcm9sbC1hcmVhLWNsaXAiLHNjcm9sbEFyZWFDbGlwUmVjdDoic2Nyb2xsLWFyZWEtY2xpcC1yZWN0Iixjb2x1bW5Cb3VuZGFyeToiY29sdW1uLWJvdW5kYXJ5Iixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOiJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGgiLGNvbHVtbkJvdW5kYXJ5UmVjdDoiY29sdW1uLWJvdW5kYXJ5LXJlY3QiLGNvbHVtbkNlbGxzOiJjb2x1bW4tY2VsbHMiLGNvbHVtbkNlbGw6ImNvbHVtbi1jZWxsIixjZWxsUmVjdDoiY2VsbC1yZWN0IixjZWxsVGV4dDoiY2VsbC10ZXh0IixjZWxsVGV4dEhvbGRlcjoiY2VsbC10ZXh0LWhvbGRlciIsc2Nyb2xsYmFyS2l0OiJzY3JvbGxiYXIta2l0IixzY3JvbGxiYXI6InNjcm9sbGJhciIsc2Nyb2xsYmFyU2xpZGVyOiJzY3JvbGxiYXItc2xpZGVyIixzY3JvbGxiYXJHbHlwaDoic2Nyb2xsYmFyLWdseXBoIixzY3JvbGxiYXJDYXB0dXJlWm9uZToic2Nyb2xsYmFyLWNhcHR1cmUtem9uZSJ9fX0se31dLDEwNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBvKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllPU1hdGgubWF4KGUsbyh0W3JdKSk7cmV0dXJuIGV9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0K2V9ZnVuY3Rpb24gbCh0KXt2YXIgZSxyPXQuc2xpY2UoKSxuPTEvMCxpPTA7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylBcnJheS5pc0FycmF5KHJbZV0pfHwocltlXT1bcltlXV0pLG49TWF0aC5taW4obixyW2VdLmxlbmd0aCksaT1NYXRoLm1heChpLHJbZV0ubGVuZ3RoKTtpZihuIT09aSlmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgYT1pLXJbZV0ubGVuZ3RoO2EmJihyW2VdPXJbZV0uY29uY2F0KGMoYSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0iIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0pLDApfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSkpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bIiJdLGQ9bChkKSk7dmFyIG09ZC5jb25jYXQocChyKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFsiIl0pLmxlbmd0aCl9KSkpLGc9ZS5kb21haW4sdj1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUudyooZy54WzFdLWcueFswXSkpLHk9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKGcueVsxXS1nLnlbMF0pKSx4PWUuaGVhZGVyLnZhbHVlcy5sZW5ndGg/bVswXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pKTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jZWxscy5oZWlnaHR9KSk6W10sXz14LnJlZHVjZShzLDApLHc9aChiLHktXytuLnVwbGlmdCksVD1mKGgoeCxfKSxbXSksaz1mKHcsVCksQT17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSkpLFM9bS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L0Uqdn0pKTt2YXIgTD1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksQz17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOmcueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtZy55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6dixtYXhMaW5lV2lkdGg6TCxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOmssaGVhZGVyUm93QmxvY2tzOlQsc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6bX0pLGdkQ29sdW1uczptLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjptLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOm0ubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPUFbdF07cmV0dXJuIEFbdF09KHJ8fDApKzEse2tleTp0KyJfXyIrQVt0XSxsYWJlbDp0LHNwZWNJbmRleDplLHhJbmRleDpNW2VdLHhTY2FsZTp1LHg6dm9pZCAwLGNhbGNkYXRhOnZvaWQgMCxjb2x1bW5XaWR0aDpTW2VdfX0pKX07cmV0dXJuIEMuY29sdW1ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbGNkYXRhPUMsdC54PXUodCl9KSksQ319LHsiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuL2NvbnN0YW50cyI6MTA2NCwiZmFzdC1pc251bWVyaWMiOjE4NX1dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5zcGxpdFRvUGFuZWxzPWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdLHI9bih7fSx0LHtrZXk6ImhlYWRlciIsdHlwZToiaGVhZGVyIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTpuKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltuKHt9LHQse2tleToiY2VsbHMxIix0eXBlOiJjZWxscyIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxuKHt9LHQse2tleToiY2VsbHMyIix0eXBlOiJjZWxscyIscGFnZToxLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxyXX0sci5zcGxpdFRvQ2VsbHM9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbdC5wYWdlXSxyPWU/ZS5yb3dzWzBdLnJvd0luZGV4OjAsbj1lP3IrZS5yb3dzLmxlbmd0aDowO3JldHVybltyLG5dfSh0KTtyZXR1cm4odC52YWx1ZXN8fFtdKS5zbGljZShlWzBdLGVbMV0pLm1hcCgoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODh9XSwxMDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxvLHMpLHMoImNvbHVtbndpZHRoIikscygiaGVhZGVyLnZhbHVlcyIpLHMoImhlYWRlci5mb3JtYXQiKSxzKCJoZWFkZXIuYWxpZ24iKSxzKCJoZWFkZXIucHJlZml4IikscygiaGVhZGVyLnN1ZmZpeCIpLHMoImhlYWRlci5oZWlnaHQiKSxzKCJoZWFkZXIubGluZS53aWR0aCIpLHMoImhlYWRlci5saW5lLmNvbG9yIikscygiaGVhZGVyLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiaGVhZGVyLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvbHVtbm9yZGVyfHxbXSxuPXQuaGVhZGVyLnZhbHVlcy5sZW5ndGgsaT1yLnNsaWNlKDAsbiksYT1pLnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLG89aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhLmluZGV4T2YodCl9KSkscz1vLmxlbmd0aDtzPG47cysrKW8ucHVzaChzKTtlKCJjb2x1bW5vcmRlciIsbyl9KGUscykscygiY2VsbHMudmFsdWVzIikscygiY2VsbHMuZm9ybWF0IikscygiY2VsbHMuYWxpZ24iKSxzKCJjZWxscy5wcmVmaXgiKSxzKCJjZWxscy5zdWZmaXgiKSxzKCJjZWxscy5oZWlnaHQiKSxzKCJjZWxscy5saW5lLndpZHRoIikscygiY2VsbHMubGluZS5jb2xvciIpLHMoImNlbGxzLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiY2VsbHMuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vcGxvdHMvZG9tYWluIjo1NzksIi4vYXR0cmlidXRlcyI6MTA2MX1dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InRhYmxlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjEwNjEsIi4vYmFzZV9wbG90IjoxMDYyLCIuL2NhbGMiOjEwNjMsIi4vZGVmYXVsdHMiOjEwNjcsIi4vcGxvdCI6MTA2OX1dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIkBwbG90bHkvZDMiKSxhPXQoIi4uLy4uL2xpYiIpLm51bWJlckZvcm1hdCxvPXQoIi4uLy4uL2xpYi9ndXAiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9saWIiKS5yYWlzZVRvVG9wLHU9dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliIikuY2FuY2VsVHJhbnNpdGlvbixoPXQoIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiKSxwPXQoIi4vZGF0YV9zcGxpdF9oZWxwZXJzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5jZWlsKHQuY2FsY2RhdGEubWF4TGluZVdpZHRoLzIpfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfc2Nyb2xsQXJlYUJvdHRvbUNsaXBfIitlLmtleX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX2NvbHVtbkJvdW5kYXJ5Q2xpcHBhdGhfIitlLmNhbGNkYXRhLmtleSsiXyIrZS5zcGVjSW5kZXh9ZnVuY3Rpb24geSh0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSkpfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBhPXQuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcktpdCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJLaXQsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxhLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gRChlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9SKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LVModCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0O3JldHVybiB1KGUsUyh0KSl9KSk7dmFyIHM9YS5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhciwhMCk7dmFyIGw9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyU2xpZGVyKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhclNsaWRlciwhMCksbC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSgwLHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCl9KSk7dmFyIGM9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyR2x5cGgsITApLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhcldpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigieTEiLG4uc2Nyb2xsYmFyV2lkdGgvMiksYy5hdHRyKCJ5MiIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLmJhckxlbmd0aC1uLnNjcm9sbGJhcldpZHRoLzJ9KSkuYXR0cigic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSkpLGMudHJhbnNpdGlvbigpLmRlbGF5KDApLmR1cmF0aW9uKDApLGMudHJhbnNpdGlvbigpLmRlbGF5KG4uc2Nyb2xsYmFySGlkZURlbGF5KS5kdXJhdGlvbihuLnNjcm9sbGJhckhpZGVEdXJhdGlvbikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApO3ZhciBmPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckNhcHR1cmVab25lKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtmLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckNhcHR1cmVab25lLCEwKS5hdHRyKCJzdHJva2UiLCJ3aGl0ZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMDEpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJDYXB0dXJlV2lkdGgpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLmF0dHIoInkxIiwwKS5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24ocil7dmFyIG49aS5ldmVudC55LGE9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXIuc2Nyb2xsYmFyU3RhdGUscz1uLWEudG9wLGw9aS5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsby5zY3JvbGxhYmxlQXJlYUhlaWdodF0pLnJhbmdlKFswLG8udG90YWxIZWlnaHRdKS5jbGFtcCghMCk7by50b3BZPD1zJiZzPD1vLmJvdHRvbVl8fEwoZSx0LG51bGwsbChzLW8uYmFyTGVuZ3RoLzIpKShyKX0pKS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzPSEwLHR9KSkub24oImRyYWciLEwoZSx0KSkub24oImRyYWdlbmQiLChmdW5jdGlvbigpe30pKSksZi5hdHRyKCJ5MiIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGFibGVBcmVhSGVpZ2h0fSkpLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksZi5yZW1vdmUoKSl9ZnVuY3Rpb24gYih0LGUscixhKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKHAuc3BsaXRUb0NlbGxzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxsLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxscykuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbHMsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KHIpKTshZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOlQoci5zaXplLG4sZSksY29sb3I6VChyLmNvbG9yLG4sZSksZmFtaWx5OlQoci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1UKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1UKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSkpfShsKSxmdW5jdGlvbih0KXt0LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRofSkpLmF0dHIoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtkLnN0cm9rZShlLFQodC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGQuZmlsbChlLFQodC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSkpfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY2VsbFJlY3QsITApLGV9KGwpKTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dCkuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24uY2VsbFRleHQsITApLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbigpe3JldHVybiJhdXRvIn0pKS5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXtpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5kYXRhKG8ucmVwZWF0LChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jZWxsVGV4dEhvbGRlciwhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLGV9KGwpKTshZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXtzLmZvbnQoaS5zZWxlY3QodGhpcyksdC5mb250KX0pKX0oYyksXyhjLGUsYSx0KSx6KGwpfWZ1bmN0aW9uIF8odCxlLHIsbyl7dC50ZXh0KChmdW5jdGlvbih0KXt2YXIgZT10LmNvbHVtbi5zcGVjSW5kZXgscj10LnJvd051bWJlcixpPXQudmFsdWUsbz0ic3RyaW5nIj09dHlwZW9mIGkscz1vJiZpLm1hdGNoKC88YnI+L2kpLGw9IW98fHM7dC5tYXlIYXZlTWFya3VwPW8mJmkubWF0Y2goL1s8Jj5dLyk7dmFyIGMsdT0ic3RyaW5nIj09dHlwZW9mKGM9aSkmJmMubWF0Y2gobi5sYXRleENoZWNrKTt0LmxhdGV4PXU7dmFyIGYsaCxwPXU/IiI6VCh0LmNhbGNkYXRhLmNlbGxzLnByZWZpeCxlLHIpfHwiIixkPXU/IiI6VCh0LmNhbGNkYXRhLmNlbGxzLnN1ZmZpeCxlLHIpfHwiIixtPXU/bnVsbDpUKHQuY2FsY2RhdGEuY2VsbHMuZm9ybWF0LGUscil8fG51bGwsZz1wKyhtP2EobSkodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGY9dyhnKSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09Zj93KGcpOmYpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciB2PSgiICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj9nLnJlcGxhY2UoLzxhIGhyZWY9L2dpLCI8YV9ocmVmPSIpOmcpLnNwbGl0KG4ud3JhcFNwbGl0Q2hhcmFjdGVyKSx5PSIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC88YV9ocmVmPS9naSwiPGEgaHJlZj0iKX0pKTp2O3QuZnJhZ21lbnRzPXkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSkpLHQuZnJhZ21lbnRzLnB1c2goe2ZyYWdtZW50Om4ud3JhcFNwYWNlcix3aWR0aDpudWxsfSksaD15LmpvaW4obi5saW5lQnJlYWtlcikrbi5saW5lQnJlYWtlcituLndyYXBTcGFjZXJ9ZWxzZSBkZWxldGUgdC5mcmFnbWVudHMsaD1nO3JldHVybiBofSkpLmF0dHIoImR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM/MDoiMC43NWVtIn0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT1pLnNlbGVjdCh0aGlzKSxzPXQud3JhcHBpbmdOZWVkZWQ/UDpJO3QubmVlZHNDb252ZXJ0VG9Uc3BhbnM/bC5jb252ZXJ0VG9Uc3BhbnMoYSxvLHMocix0aGlzLGUsbyx0KSk6aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdShPKHQpLG4uY2VsbFBhZCl9KSkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm57bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn1bdC5hbGlnbl19KSl9KSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gVCh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLHUoZS54LHIpKX1mdW5jdGlvbiBBKHQpe3JldHVybiJjZWxscyI9PT10LnR5cGV9ZnVuY3Rpb24gTSh0KXtyZXR1cm4iaGVhZGVyIj09PXQudHlwZX1mdW5jdGlvbiBTKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrUihlLDEvMCl9KSwwKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj15KGUpWzBdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4ucm93QmxvY2tzLGE9bi5jYWxjZGF0YSxvPUQoaSxpLmxlbmd0aCkscz1uLmNhbGNkYXRhLmdyb3VwSGVpZ2h0LVMobiksbD1hLnNjcm9sbFk9TWF0aC5tYXgoMCxNYXRoLm1pbihvLXMsYS5zY3JvbGxZKSksYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9by5yb3dzLGw9MCxjPTA7YzxzLmxlbmd0aDtjKyspbCs9c1tjXS5yb3dIZWlnaHQ7by5hbGxSb3dzSGVpZ2h0PWw7ZTxpK2wmJmUrcj5pJiZuLnB1c2goYSksaSs9bH1yZXR1cm4gbn0oaSxsLHMpOzE9PT1jLmxlbmd0aCYmKGNbMF09PT1pLmxlbmd0aC0xP2MudW5zaGlmdChjWzBdLTEpOmMucHVzaChjWzBdKzEpKSxjWzBdJTImJmMucmV2ZXJzZSgpLGUuZWFjaCgoZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pKSxlLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUQodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFk7cmV0dXJuIHUoMCxlKX0pKSx0JiYoQyh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMCksQyh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMSkseChyLHQpKX19ZnVuY3Rpb24gTCh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHM9by5jYWxjZGF0YT9vLmNhbGNkYXRhOm8sbD1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSksYz1yfHxzLnNjcm9sbGJhclN0YXRlLmRyYWdNdWx0aXBsaWVyLHU9cy5zY3JvbGxZO3Muc2Nyb2xsWT12b2lkIDA9PT1hP3Muc2Nyb2xsWStjKmkuZXZlbnQuZHk6YTt2YXIgZj1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihBKTtyZXR1cm4gRSh0LGYsbCkscy5zY3JvbGxZPT09dX19ZnVuY3Rpb24gQyh0LGUscixuLGksYSxvKXtuW29dIT09aVtvXSYmKGNsZWFyVGltZW91dChhLmN1cnJlbnRSZXBhaW50W29dKSxhLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGE9ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pKTtiKHQsZSxhLHIpLGlbb109bltvXX0pKSl9ZnVuY3Rpb24gUCh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1pLnNlbGVjdChlLnBhcmVudE5vZGUpO28uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbih0LHIpe2Vbcl0ud2lkdGg9dGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKX0pKTt2YXIgcixpLGE9ZVtlLmxlbmd0aC0xXS53aWR0aCxzPWUuc2xpY2UoMCwtMSksbD1bXSxjPTAsdT10LmNvbHVtbi5jb2x1bW5XaWR0aC0yKm4uY2VsbFBhZDtmb3IodC52YWx1ZT0iIjtzLmxlbmd0aDspYysoaT0ocj1zLnNoaWZ0KCkpLndpZHRoK2EpPnUmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKStuLmxpbmVCcmVha2VyLGw9W10sYz0wKSxsLnB1c2goci50ZXh0KSxjKz1pO2MmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKSksdC53cmFwcGVkPSEwfSkpLG8uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikucmVtb3ZlKCksXyhvLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKHopfX1mdW5jdGlvbiBJKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1CKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LGY9bC5yb3dzW2NdLnJvd0hlaWdodCxoPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6ZixwPU1hdGgubWF4KGgsZik7cC1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1wLHQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGwpLmNhbGwoeiksRShudWxsLHQuZmlsdGVyKEEpLDApLHgocixhLCEwKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPWkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxSZWN0KS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCksYT1lLnRvcC10LnRvcCsocj9yLm1hdHJpeC5mOm4uY2VsbFBhZCk7cmV0dXJuIHUoTyhvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpLGEpfSkpLG8uc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiBPKHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBuLmNlbGxQYWR9fWZ1bmN0aW9uIHoodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3MucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K1IoZSwxLzApfSksMCkscj1SKEIodCksdC5rZXkpO3JldHVybiB1KDAscitlKX0pKS5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybihlPUIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pKX1mdW5jdGlvbiBEKHQsZSl7Zm9yKHZhciByPTAsbj1lLTE7bj49MDtuLS0pcis9Rih0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBSKHQsZSl7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aCYmdC5yb3dzW25dLnJvd0luZGV4PGU7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gRih0KXt2YXIgZT10LmFsbFJvd3NIZWlnaHQ7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiB0LmFsbFJvd3NIZWlnaHQ9cixyfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQucm93QmxvY2tzW3QucGFnZV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IXQuX2NvbnRleHQuc3RhdGljUGxvdCxhPXQuX2Z1bGxMYXlvdXQuX3BhcGVyLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZSkuZGF0YShlLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9by51bndyYXAoZSkudHJhY2U7cmV0dXJuIGgodCxyKX0pKSxvLmtleUZ1bik7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGEuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUodC50cmFuc2xhdGVYLHQudHJhbnNsYXRlWSl9KSk7dmFyIGw9YS5zZWxlY3RBbGwoIi4iK24uY24udGFibGVDb250cm9sVmlldykuZGF0YShvLnJlcGVhdCxvLmtleUZ1biksZD1sLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnRhYmxlQ29udHJvbFZpZXcsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKTtpZihyKXt2YXIgXz0ib253aGVlbCJpbiBkb2N1bWVudD8id2hlZWwiOiJtb3VzZXdoZWVsIjtkLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbihlKXtsLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkpLmNhbGwoeCx0KX0pKS5vbihfLChmdW5jdGlvbihlKXtpZighZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZyl7ZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMDt2YXIgcj1lLnNjcm9sbFkraS5ldmVudC5kZWx0YVk7TCh0LGwsbnVsbCxyKShlKXx8KGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksaS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpKSxlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSExfX0pKS5jYWxsKHgsdCwhMCl9bC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LnNpemUubCx0LnNpemUudCl9KSk7dmFyIHc9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQmFja2dyb3VuZCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7dy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxCYWNrZ3JvdW5kLCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLHcuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksbC5lYWNoKChmdW5jdGlvbihlKXtzLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZyh0LGUpLHQpfSkpO3ZhciBUPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9KSxvLmtleUZ1bik7VC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi55Q29sdW1uLCEwKSxULmV4aXQoKS5yZW1vdmUoKSxULmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueCwwKX0pKSxyJiZULmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbihlKXtyZXR1cm4gayhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksYyh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLHgobC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQua2V5fSkpLHQpLGV9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9pLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxpLmV2ZW50LngpKSx5KFQpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5jYWxjZGF0YS5rZXl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUpfSkpLFQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KSkudHJhbnNpdGlvbigpLmVhc2Uobi50cmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi50cmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueCwwKX0pKSxlLmNhbGwoZikuYXR0cigidHJhbnNmb3JtIix1KHQueCwtbi51cGxpZnQpKX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKGUpe3ZhciByPWkuc2VsZWN0KHRoaXMpLG49ZS5jYWxjZGF0YTtlLng9ZS54U2NhbGUoZSksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMSxrKHIsZSwwKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5nZENvbHVtbnNPcmlnaW5hbE9yZGVyO2UuZ2RDb2x1bW5zLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSksZS5jb2x1bW5vcmRlcj1yLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiKX0odCxuLG4uY29sdW1ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhJbmRleH0pKSl9KSkpLFQuZWFjaCgoZnVuY3Rpb24oZSl7cy5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLHYodCxlKSx0KX0pKTt2YXIgUz1ULnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShwLnNwbGl0VG9QYW5lbHMsby5rZXlGdW4pO1MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpLFMuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/ImV3LXJlc2l6ZSI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tPyJucy1yZXNpemUiOiJkZWZhdWx0In0pKTt2YXIgQz1TLmZpbHRlcihNKSxQPVMuZmlsdGVyKEEpO3ImJlAuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHR9KSkub24oImRyYWciLEwodCxsLC0xKSkub24oImRyYWdlbmQiLChmdW5jdGlvbigpe30pKSksYih0LGwsQyxTKSxiKHQsbCxQLFMpO3ZhciBJPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtJLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcCwhMCkuYXR0cigiaWQiLChmdW5jdGlvbihlKXtyZXR1cm4gZyh0LGUpfSkpO3ZhciBPPUkuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QsITApLmF0dHIoIngiLC1uLm92ZXJkcmFnKS5hdHRyKCJ5Iiwtbi51cGxpZnQpLmF0dHIoImZpbGwiLCJub25lIiksTy5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoKzIqbi5vdmVyZHJhZ30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrbi51cGxpZnR9KSksVC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnkpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5LCEwKTt2YXIgej1ULnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoLCEwKSx6LmF0dHIoImlkIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHYodCxlKX0pKTt2YXIgRD16LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO0QuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlSZWN0LCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLEQuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5XaWR0aCsyKm0odCl9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsY2RhdGEuaGVpZ2h0KzIqbSh0KStuLnVwbGlmdH0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuLW0odCl9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1tKHQpfSkpLEUobnVsbCxQLGwpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9saWIiOjQ5OCwiLi4vLi4vbGliL2d1cCI6NDk1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi9jb25zdGFudHMiOjEwNjQsIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiOjEwNjUsIi4vZGF0YV9zcGxpdF9oZWxwZXJzIjoxMDY2LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpsLmxhYmVscyxwYXJlbnRzOmwucGFyZW50cyx2YWx1ZXM6bC52YWx1ZXMsYnJhbmNodmFsdWVzOmwuYnJhbmNodmFsdWVzLGNvdW50OmwuY291bnQsbGV2ZWw6bC5sZXZlbCxtYXhkZXB0aDpsLm1heGRlcHRoLHRpbGluZzp7cGFja2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3F1YXJpZnkiLCJiaW5hcnkiLCJkaWNlIiwic2xpY2UiLCJzbGljZS1kaWNlIiwiZGljZS1zbGljZSJdLGRmbHQ6InNxdWFyaWZ5IixlZGl0VHlwZToicGxvdCJ9LHNxdWFyaWZ5cmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZmxpcDp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiXSxkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MyxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnUoe3BhZDp7dDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sY29sb3JzOmwubWFya2VyLmNvbG9ycyxkZXB0aGZhZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZWRpdFR5cGU6InN0eWxlIn0sbGluZTpsLm1hcmtlci5saW5lLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSkscGF0aGJhcjp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6InBsb3QifSxlZGdlc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIj4iLCI8IiwifCIsIi8iLCJcXCJdLGRmbHQ6Ij4iLGVkaXRUeXBlOiJwbG90In0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMixlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OnUoe30scy50ZXh0Zm9udCx7fSksZWRpdFR5cGU6ImNhbGMifSx0ZXh0OnMudGV4dCx0ZXh0aW5mbzpsLnRleHRpbmZvLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OnMuaG92ZXJ0ZXh0LGhvdmVyaW5mbzpsLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6cy50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpzLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDp1KHt9LHMub3V0c2lkZXRleHRmb250LHt9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6InRvcCBsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHNvcnQ6cy5zb3J0LHJvb3Q6bC5yb290LGRvbWFpbjpvKHtuYW1lOiJ0cmVlbWFwIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM2OCwiLi4vLi4vbGliL2V4dGVuZCI6NDg4LCIuLi8uLi9wbG90cy9kb21haW4iOjU3OSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjI4LCIuLi9waWUvYXR0cmlidXRlcyI6ODk2LCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIjoxMDQ0LCIuL2NvbnN0YW50cyI6MTA3M31dLDEwNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InRyZWVtYXAiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjYxNH1dLDEwNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoInRyZWVtYXAiLHQpfX0seyIuLi9zdW5idXJzdC9jYWxjIjoxMDQ2fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NMSUNLX1RSQU5TSVRJT05fVElNRTo3NTAsQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkc6InBvbHkiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdLGdhcFdpdGhQYXRoYmFyOjF9fSx7fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LGw9dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PWMuaGFzQ29sb3JzY2FsZSxmPWMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGgocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcD1oKCJsYWJlbHMiKSxkPWgoInBhcmVudHMiKTtpZihwJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgpe3ZhciBtPWgoInZhbHVlcyIpO20mJm0ubGVuZ3RoP2goImJyYW5jaHZhbHVlcyIpOmgoImNvdW50IiksaCgibGV2ZWwiKSxoKCJtYXhkZXB0aCIpLCJzcXVhcmlmeSI9PT1oKCJ0aWxpbmcucGFja2luZyIpJiZoKCJ0aWxpbmcuc3F1YXJpZnlyYXRpbyIpLGgoInRpbGluZy5mbGlwIiksaCgidGlsaW5nLnBhZCIpO3ZhciBnPWgoInRleHQiKTtoKCJ0ZXh0dGVtcGxhdGUiKSxlLnRleHR0ZW1wbGF0ZXx8aCgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoZyk/InRleHQrbGFiZWwiOiJsYWJlbCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKTt2YXIgdj1oKCJwYXRoYmFyLnZpc2libGUiKTtzKHQsZSxjLGgsImF1dG8iLHtoYXNQYXRoYmFyOnYsbW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksaCgidGV4dHBvc2l0aW9uIik7dmFyIHk9LTEhPT1lLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKTtoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKTt2YXIgeD1oKCJtYXJrZXIuY29sb3JzIik7KGUuX2hhc0NvbG9yc2NhbGU9dSh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzKT9mKHQsZSxjLGgse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KTpoKCJtYXJrZXIuZGVwdGhmYWRlIiwhKHh8fFtdKS5sZW5ndGgpO3ZhciBiPTIqZS50ZXh0Zm9udC5zaXplO2goIm1hcmtlci5wYWQudCIseT9iLzQ6YiksaCgibWFya2VyLnBhZC5sIixiLzQpLGgoIm1hcmtlci5wYWQuciIsYi80KSxoKCJtYXJrZXIucGFkLmIiLHk/YjpiLzQpLGUuX2hvdmVyZWQ9e21hcmtlcjp7bGluZTp7d2lkdGg6Mixjb2xvcjphLmNvbnRyYXN0KGMucGFwZXJfYmdjb2xvcil9fX0sdiYmKGgoInBhdGhiYXIudGhpY2tuZXNzIixlLnBhdGhiYXIudGV4dGZvbnQuc2l6ZSsyKmwpLGgoInBhdGhiYXIuc2lkZSIpLGgoInBhdGhiYXIuZWRnZXNoYXBlIikpLGgoInNvcnQiKSxoKCJyb290LmNvbG9yIiksbyhlLGMsaCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9kb21haW4iOjU3OSwiLi4vYmFyL2NvbnN0YW50cyI6NjQ1LCIuLi9iYXIvZGVmYXVsdHMiOjY0NywiLi9hdHRyaWJ1dGVzIjoxMDcwfV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikuY2xlYXJNaW5UZXh0U2l6ZSxvPXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQscz10KCIuL3Bsb3Rfb25lIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyl7dmFyIHUsZixoPWMudHlwZSxwPWMuZHJhd0Rlc2NlbmRhbnRzLGQ9dC5fZnVsbExheW91dCxtPWRbIl8iK2grImxheWVyIl0sZz0hcjsoYShoLGQpLCh1PW0uc2VsZWN0QWxsKCJnLnRyYWNlLiIraCkuZGF0YShlLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKGgsITApLHUub3JkZXIoKSwhZC51bmlmb3JtdGV4dC5tb2RlJiZpLmhhc1RyYW5zaXRpb24ocikpPyhsJiYoZj1sKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goKGZ1bmN0aW9uKCl7bS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXtzKHQsZSx0aGlzLHIscCl9KSl9KSkpOih1LmVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLHRoaXMscixwKX0pKSxkLnVuaWZvcm10ZXh0Lm1vZGUmJm8odCxtLnNlbGVjdEFsbCgiLnRyYWNlIiksaCkpO2cmJnUuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi9iYXIvc3R5bGUiOjY1NywiLi4vYmFyL3VuaWZvcm1fdGV4dCI6NjU5LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMDUwLCIuL3Bsb3Rfb25lIjoxMDg0LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksZj10KCIuLi9zdW5idXJzdC9meCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoLHApe3ZhciBkPXAuYmFyRGlmWSxtPXAud2lkdGgsZz1wLmhlaWdodCx2PXAudmlld1gseT1wLnZpZXdZLHg9cC5wYXRoU2xpY2UsYj1wLnRvTW92ZUluc2lkZVNsaWNlLF89cC5zdHJUcmFuc2Zvcm0sdz1wLmhhc1RyYW5zaXRpb24sVD1wLmhhbmRsZVNsaWNlc0V4aXQsaz1wLm1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcixBPXAubWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3IsTT17fSxTPXQuX2Z1bGxMYXlvdXQsRT1lWzBdLEw9RS50cmFjZSxDPUUuaGllcmFyY2h5LFA9bS9MLl9lbnRyeURlcHRoLEk9dS5saXN0UGF0aChyLmRhdGEsImlkIiksTz1zKEMuY29weSgpLFttLGddLHtwYWNraW5nOiJkaWNlIixwYWQ6e2lubmVyOjAsdG9wOjAsbGVmdDowLHJpZ2h0OjAsYm90dG9tOjB9fSkuZGVzY2VuZGFudHMoKTsoTz1PLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGU9SS5pbmRleE9mKHQuZGF0YS5pZCk7cmV0dXJuLTEhPT1lJiYodC54MD1QKmUsdC54MT1QKihlKzEpLHQueTA9ZCx0LnkxPWQrZyx0Lm9uUGF0aGJhcj0hMCwhMCl9KSkpLnJldmVyc2UoKSwoaD1oLmRhdGEoTyx1LmdldFB0SWQpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBhdGhiYXIiLCEwKSxUKGgsITAsTSxbbSxnXSx4KSxoLm9yZGVyKCk7dmFyIHo9aDt3JiYoej16LnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksei5lYWNoKChmdW5jdGlvbihzKXtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtTWF0aC5taW4obSxnKS8yKSxzLl9ob3Zlclk9eShzLnkxLWcvMik7dmFyIGg9bi5zZWxlY3QodGhpcykscD1pLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9wLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITAsTSxbbSxnXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB4KGUodCkpfX0pKTpwLmF0dHIoImQiLHgpLGguY2FsbChmLHIsdCxlLHtzdHlsZU9uZTpsLGV2ZW50RGF0YUtleXM6Yy5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOmMuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6Yy5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwodS5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHAuY2FsbChsLHMsTCx7aG92ZXJlZDohMX0pLHMuX3RleHQ9KHUuZ2V0UHRMYWJlbChzKXx8IiIpLnNwbGl0KCI8YnI+Iikuam9pbigiICIpfHwiIjt2YXIgZD1pLmVuc3VyZVNpbmdsZShoLCJnIiwic2xpY2V0ZXh0IiksVD1pLmVuc3VyZVNpbmdsZShkLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxFPWkuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsdS5kZXRlcm1pbmVUZXh0Rm9udChMLHMsUy5mb250LHtvblBhdGhiYXI6ITB9KSk7VC50ZXh0KHMuX3RleHR8fCIgIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYS5mb250LEUpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KFQubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOkUuc2l6ZSxvblBhdGhiYXI6ITB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT1FLnNpemUsdz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCwhMCxNLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOlQuYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODMsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyNCwiLi4vc3VuYnVyc3QvZngiOjEwNDksIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEwNTAsIi4vY29uc3RhbnRzIjoxMDczLCIuL3BhcnRpdGlvbiI6MTA4MiwiLi9zdHlsZSI6MTA4NSwiQHBsb3RseS9kMyI6NTh9XSwxMDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxzPXQoIi4vcGFydGl0aW9uIiksbD10KCIuL3N0eWxlIikuc3R5bGVPbmUsYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vc3VuYnVyc3QvaGVscGVycyIpLGY9dCgiLi4vc3VuYnVyc3QvZngiKSxoPXQoIi4uL3N1bmJ1cnN0L3Bsb3QiKS5mb3JtYXRTbGljZUxhYmVsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwLGQpe3ZhciBtPWQud2lkdGgsZz1kLmhlaWdodCx2PWQudmlld1gseT1kLnZpZXdZLHg9ZC5wYXRoU2xpY2UsYj1kLnRvTW92ZUluc2lkZVNsaWNlLF89ZC5zdHJUcmFuc2Zvcm0sdz1kLmhhc1RyYW5zaXRpb24sVD1kLmhhbmRsZVNsaWNlc0V4aXQsaz1kLm1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcixBPWQubWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3IsTT1kLnByZXZFbnRyeSxTPXQuX2Z1bGxMYXlvdXQsRT1lWzBdLnRyYWNlLEw9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJsZWZ0IiksQz0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoInJpZ2h0IiksUD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpLEk9IVAmJiFFLm1hcmtlci5wYWQudHx8UCYmIUUubWFya2VyLnBhZC5iLE89cyhyLFttLGddLHtwYWNraW5nOkUudGlsaW5nLnBhY2tpbmcsc3F1YXJpZnlyYXRpbzpFLnRpbGluZy5zcXVhcmlmeXJhdGlvLGZsaXBYOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieCIpPi0xLGZsaXBZOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieSIpPi0xLHBhZDp7aW5uZXI6RS50aWxpbmcucGFkLHRvcDpFLm1hcmtlci5wYWQudCxsZWZ0OkUubWFya2VyLnBhZC5sLHJpZ2h0OkUubWFya2VyLnBhZC5yLGJvdHRvbTpFLm1hcmtlci5wYWQuYn19KS5kZXNjZW5kYW50cygpLHo9MS8wLEQ9LTEvMDtPLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGVwdGg7ZT49RS5fbWF4RGVwdGg/KHQueDA9dC54MT0odC54MCt0LngxKS8yLHQueTA9dC55MT0odC55MCt0LnkxKS8yKTooej1NYXRoLm1pbih6LGUpLEQ9TWF0aC5tYXgoRCxlKSl9KSkscD1wLmRhdGEoTyx1LmdldFB0SWQpLEUuX21heFZpc2libGVMYXllcnM9aXNGaW5pdGUoRCk/RC16KzE6MCxwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxUKHAsITEse30sW20sZ10seCkscC5vcmRlcigpO3ZhciBSPW51bGw7aWYodyYmTSl7dmFyIEY9dS5nZXRQdElkKE0pO3AuZWFjaCgoZnVuY3Rpb24odCl7bnVsbD09PVImJnUuZ2V0UHRJZCh0KT09PUYmJihSPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSl9KSl9dmFyIEI9ZnVuY3Rpb24oKXtyZXR1cm4gUnx8e3gwOjAseDE6bSx5MDowLHkxOmd9fSxOPXA7cmV0dXJuIHcmJihOPU4udHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSxOLmVhY2goKGZ1bmN0aW9uKHMpe3ZhciBwPXUuaXNIZWFkZXIocyxFKTtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtRS5tYXJrZXIucGFkLnIpLHMuX2hvdmVyWT15KFA/cy55MS1FLm1hcmtlci5wYWQuYi8yOnMueTArRS5tYXJrZXIucGFkLnQvMik7dmFyIGQ9bi5zZWxlY3QodGhpcyksVD1pLmVuc3VyZVNpbmdsZShkLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsQigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOlQuYXR0cigiZCIseCksZC5jYWxsKGYscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksVC5jYWxsKGwscyxFLHtob3ZlcmVkOiExfSkscy54MD09PXMueDF8fHMueTA9PT1zLnkxP3MuX3RleHQ9IiI6cy5fdGV4dD1wP0k/IiI6dS5nZXRQdExhYmVsKHMpfHwiIjpoKHMscixFLGUsUyl8fCIiO3ZhciBNPWkuZW5zdXJlU2luZ2xlKGQsImciLCJzbGljZXRleHQiKSxPPWkuZW5zdXJlU2luZ2xlKE0sInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLHo9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEUscyxTLmZvbnQpKTtPLnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz8iZW5kIjpMfHxwPyJzdGFydCI6Im1pZGRsZSIpLmNhbGwoYS5mb250LHopLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KE8ubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOnouc2l6ZSxpc0hlYWRlcjpwfSkscy50cmFuc2Zvcm0uZm9udFNpemU9ei5zaXplLHc/Ty50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1BKHQsITEsQigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOk8uYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxSfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vbGliIjo0OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI0LCIuLi9zdW5idXJzdC9meCI6MTA0OSwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTA1MCwiLi4vc3VuYnVyc3QvcGxvdCI6MTA1NCwiLi9jb25zdGFudHMiOjEwNzMsIi4vcGFydGl0aW9uIjoxMDgyLCIuL3N0eWxlIjoxMDg1LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpO24uc3dhcFhZJiYoaT1lLngwLGUueDA9ZS55MCxlLnkwPWksaT1lLngxLGUueDE9ZS55MSxlLnkxPWkpLG4uZmxpcFgmJihpPWUueDAsZS54MD1yWzBdLWUueDEsZS54MT1yWzBdLWkpLG4uZmxpcFkmJihpPWUueTAsZS55MD1yWzFdLWUueTEsZS55MT1yWzFdLWkpO3ZhciBhPWUuY2hpbGRyZW47aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl0KGFbb10scixuKX19LHt9XSwxMDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InRyZWVtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0MCwiLi9hdHRyaWJ1dGVzIjoxMDcwLCIuL2Jhc2VfcGxvdCI6MTA3MSwiLi9jYWxjIjoxMDcyLCIuL2RlZmF1bHRzIjoxMDc0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDgwLCIuL2xheW91dF9kZWZhdWx0cyI6MTA4MSwiLi9wbG90IjoxMDgzLCIuL3N0eWxlIjoxMDg1fV0sMTA4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3RyZWVtYXBjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHRyZWVtYXBjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJ0cmVlbWFwY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHRyZWVtYXBjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo0OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwODB9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiLi9mbGlwX3RyZWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89ci5mbGlwWCxzPXIuZmxpcFksbD0iZGljZS1zbGljZSI9PT1yLnBhY2tpbmcsYz1yLnBhZFtzPyJib3R0b20iOiJ0b3AiXSx1PXIucGFkW28/InJpZ2h0IjoibGVmdCJdLGY9ci5wYWRbbz8ibGVmdCI6InJpZ2h0Il0saD1yLnBhZFtzPyJ0b3AiOiJib3R0b20iXTtsJiYoYT11LHU9YyxjPWEsYT1mLGY9aCxoPWEpO3ZhciBwPW4udHJlZW1hcCgpLnRpbGUoZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSJzcXVhcmlmeSI6cmV0dXJuIG4udHJlZW1hcFNxdWFyaWZ5LnJhdGlvKGUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbi50cmVlbWFwQmluYXJ5O2Nhc2UiZGljZSI6cmV0dXJuIG4udHJlZW1hcERpY2U7Y2FzZSJzbGljZSI6cmV0dXJuIG4udHJlZW1hcFNsaWNlO2RlZmF1bHQ6cmV0dXJuIG4udHJlZW1hcFNsaWNlRGljZX19KHIucGFja2luZyxyLnNxdWFyaWZ5cmF0aW8pKS5wYWRkaW5nSW5uZXIoci5wYWQuaW5uZXIpLnBhZGRpbmdMZWZ0KHUpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nVG9wKGMpLnBhZGRpbmdCb3R0b20oaCkuc2l6ZShsP1tlWzFdLGVbMF1dOmUpKHQpO3JldHVybihsfHxvfHxzKSYmaShwLGUse3N3YXBYWTpsLGZsaXBYOm8sZmxpcFk6c30pLHB9fSx7Ii4vZmxpcF90cmVlIjoxMDc4LCJkMy1oaWVyYXJjaHkiOjExMH1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksaT10KCIuL2RyYXdfZGVzY2VuZGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG4odCxlLHIsYSx7dHlwZToidHJlZW1hcCIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi9kcmF3IjoxMDc1LCIuL2RyYXdfZGVzY2VuZGFudHMiOjEwNzd9XSwxMDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsYT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELGw9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVjb3JkTWluVGV4dFNpemUsdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuaXNIaWVyYXJjaHlSb290KHQpPyIiOmEuZ2V0UHRJZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT10Ll9mdWxsTGF5b3V0LGc9ZVswXSx2PWcudHJhY2UseT0iaWNpY2xlIj09PXYudHlwZSx4PWcuaGllcmFyY2h5LGI9YS5maW5kRW50cnlXaXRoTGV2ZWwoeCx2LmxldmVsKSxfPW4uc2VsZWN0KHIpLHc9Xy5zZWxlY3RBbGwoImcucGF0aGJhciIpLFQ9Xy5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZighYilyZXR1cm4gdy5yZW1vdmUoKSx2b2lkIFQucmVtb3ZlKCk7dmFyIGs9YS5pc0hpZXJhcmNoeVJvb3QoYiksQT0hbS51bmlmb3JtdGV4dC5tb2RlJiZhLmhhc1RyYW5zaXRpb24ocCksTT1hLmdldE1heERlcHRoKHYpLFM9bS5fc2l6ZSxFPXYuZG9tYWluLEw9Uy53KihFLnhbMV0tRS54WzBdKSxDPVMuaCooRS55WzFdLUUueVswXSksUD1MLEk9di5wYXRoYmFyLnRoaWNrbmVzcyxPPXYubWFya2VyLmxpbmUud2lkdGgrdS5nYXBXaXRoUGF0aGJhcix6PXYucGF0aGJhci52aXNpYmxlP3YucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0MrTzotKEkrTyk6MCxEPXt4MDpQLHgxOlAseTA6eix5MTp6K0l9LFI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYudGlsaW5nLnBhZCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybiB0LngwPT09ZS54MCYmdC54MT09PWUueDEmJnQueTA9PT1lLnkwJiZ0LnkxPT09ZS55MT97eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX06e3gwOmkodC54MC1uKT8wOmEodC54MC1uKT9yWzBdOnQueDAseDE6aSh0LngxK24pPzA6YSh0LngxK24pP3JbMF06dC54MSx5MDpvKHQueTAtbik/MDpzKHQueTAtbik/clsxXTp0LnkwLHkxOm8odC55MStuKT8wOnModC55MStuKT9yWzFdOnQueTF9fSxGPW51bGwsQj17fSxOPXt9LGo9bnVsbCxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/QltoKHQpXTpOW2godCldfSxWPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGUpcmV0dXJuIEJbaCh4KV18fEQ7dmFyIGk9Tlt2LmxldmVsXXx8cjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kZXB0aC1iLmRhdGEuZGVwdGg8TX0odCk/Uih0LGksbik6e319O2cuaGFzTXVsdGlwbGVSb290cyYmayYmTSsrLHYuX21heERlcHRoPU0sdi5fYmFja2dyb3VuZENvbG9yPW0ucGFwZXJfYmdjb2xvcix2Ll9lbnRyeURlcHRoPWIuZGF0YS5kZXB0aCx2Ll9hdFJvb3RMZXZlbD1rO3ZhciBIPS1MLzIrUy5sK1MudyooRS54WzFdK0UueFswXSkvMixxPS1DLzIrUy50K1MuaCooMS0oRS55WzFdK0UueVswXSkvMiksRz1mdW5jdGlvbih0KXtyZXR1cm4gSCt0fSxZPWZ1bmN0aW9uKHQpe3JldHVybiBxK3R9LFc9WSgwKSxYPUcoMCksWj1mdW5jdGlvbih0KXtyZXR1cm4gWCt0fSxKPWZ1bmN0aW9uKHQpe3JldHVybiBXK3R9O2Z1bmN0aW9uIEsodCxlKXtyZXR1cm4gdCsiLCIrZX12YXIgUT1aKDApLCQ9ZnVuY3Rpb24odCl7dC54PU1hdGgubWF4KFEsdC54KX0sdHQ9di5wYXRoYmFyLmVkZ2VzaGFwZSxldD1mdW5jdGlvbih0LGUpe3ZhciByPXQueDAsbj10LngxLGk9dC55MCxhPXQueTEsbz10LnRleHRCQix1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09di50ZXh0cG9zaXRpb24uaW5kZXhPZih0KX0sZj11KCJib3R0b20iKSxoPXUoInRvcCIpfHxlLmlzSGVhZGVyJiYhZj8ic3RhcnQiOmY/ImVuZCI6Im1pZGRsZSIscD11KCJyaWdodCIpLGQ9dSgibGVmdCIpfHxlLm9uUGF0aGJhcj8tMTpwPzE6MCxnPXZbeT8idGlsaW5nIjoibWFya2VyIl0ucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz0oeT9nOmcubCktcyk+PShuLT0oeT9nOmcuciktcykpe3ZhciB4PShyK24pLzI7cj14LG49eH12YXIgYjtmP2k8KGI9YS0oeT9nOmcuYikpJiZiPGEmJihpPWIpOmk8KGI9aSsoeT9nOmcudCkpJiZiPGEmJihhPWIpfXZhciBfPWwocixuLGksYSxvLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6aCxsZWZ0VG9SaWdodDpkfSk7cmV0dXJuIF8uZm9udFNpemU9ZS5mb250U2l6ZSxfLnRhcmdldFg9RyhfLnRhcmdldFgpLF8udGFyZ2V0WT1ZKF8udGFyZ2V0WSksaXNOYU4oXy50YXJnZXRYKXx8aXNOYU4oXy50YXJnZXRZKT97fToociE9PW4mJmkhPT1hJiZjKHYudHlwZSxfLG0pLHtzY2FsZTpfLnNjYWxlLHJvdGF0ZTpfLnJvdGF0ZSx0ZXh0WDpfLnRleHRYLHRleHRZOl8udGV4dFksYW5jaG9yWDpfLmFuY2hvclgsYW5jaG9yWTpfLmFuY2hvclksdGFyZ2V0WDpfLnRhcmdldFgsdGFyZ2V0WTpfLnRhcmdldFl9KX0scnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGk9dDshciYmbjxNOyluKyssKGk9aS5wYXJlbnQpP3I9VShpLGUpOm49TTtyZXR1cm4gcnx8e319LG50PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbD1VKHQsZSk7aWYobClzPWw7ZWxzZSBpZihlKXM9RDtlbHNlIGlmKEYpaWYodC5wYXJlbnQpe3ZhciBjPWp8fHI7YyYmIWU/cz1SKHQsYyxuKToocz17fSxvLmV4dGVuZEZsYXQocyxydCh0LGUpKSl9ZWxzZSBzPW8uZXh0ZW5kRmxhdCh7fSx0KSx5JiYoImgiPT09YS5vcmllbnRhdGlvbj9hLmZsaXBYP3MueDA9dC54MTpzLngxPTA6YS5mbGlwWT9zLnkwPXQueTE6cy55MT0wKTtlbHNlIHM9e307cmV0dXJuIGkocyx7eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSxpdD1mdW5jdGlvbih0LGUscixuKXt2YXIgcz1VKHQsZSksbD17fSx1PVYodCxlLHIsbik7by5leHRlbmRGbGF0KGwse3RyYW5zZm9ybTpldCh7eDA6dS54MCx4MTp1LngxLHkwOnUueTAseTE6dS55MSx0ZXh0QkI6dC50ZXh0QkIsX3RleHQ6dC5fdGV4dH0se2lzSGVhZGVyOmEuaXNIZWFkZXIodCx2KX0pfSkscz9sPXM6dC5wYXJlbnQmJm8uZXh0ZW5kRmxhdChsLHJ0KHQsZSkpO3ZhciBmPXQudHJhbnNmb3JtO3JldHVybiB0LngwIT09dC54MSYmdC55MCE9PXQueTEmJmModi50eXBlLGYsbSksaShsLHt0cmFuc2Zvcm06e3NjYWxlOmYuc2NhbGUscm90YXRlOmYucm90YXRlLHRleHRYOmYudGV4dFgsdGV4dFk6Zi50ZXh0WSxhbmNob3JYOmYuYW5jaG9yWCxhbmNob3JZOmYuYW5jaG9yWSx0YXJnZXRYOmYudGFyZ2V0WCx0YXJnZXRZOmYudGFyZ2V0WX19KX0sYXQ9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1hWzBdLGw9YVsxXTtBP3QuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1VKHQsZSk7aWYoZSlhPUQ7ZWxzZXt2YXIgcz1VKGIsZSk7YT1zP1IodCxzLG4pOnt9fXJldHVybiBpKG8sYSl9KHQsZSwwLFtzLGxdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8ocih0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOnQuZXhpdCgpLnJlbW92ZSgpfSxvdD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxlLG0pLG8uZ2V0VGV4dFRyYW5zZm9ybSh7dGV4dFg6ZS50ZXh0WCx0ZXh0WTplLnRleHRZLGFuY2hvclg6ZS5hbmNob3JYLGFuY2hvclk6ZS5hbmNob3JZLHRhcmdldFg6ZS50YXJnZXRYLHRhcmdldFk6ZS50YXJnZXRZLHNjYWxlOmUuc2NhbGUscm90YXRlOmUucm90YXRlfSl9O0EmJih3LmVhY2goKGZ1bmN0aW9uKHQpe0JbaCh0KV09e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9LHQudHJhbnNmb3JtJiYoQltoKHQpXS50cmFuc2Zvcm09e3RleHRYOnQudHJhbnNmb3JtLnRleHRYLHRleHRZOnQudHJhbnNmb3JtLnRleHRZLGFuY2hvclg6dC50cmFuc2Zvcm0uYW5jaG9yWCxhbmNob3JZOnQudHJhbnNmb3JtLmFuY2hvclksdGFyZ2V0WDp0LnRyYW5zZm9ybS50YXJnZXRYLHRhcmdldFk6dC50cmFuc2Zvcm0udGFyZ2V0WSxzY2FsZTp0LnRyYW5zZm9ybS5zY2FsZSxyb3RhdGU6dC50cmFuc2Zvcm0ucm90YXRlfSl9KSksVC5lYWNoKChmdW5jdGlvbih0KXtOW2godCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKE5baCh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pLCFGJiZhLmlzRW50cnkodCkmJihGPXQpfSkpKSxqPWQodCxlLGIsVCx7d2lkdGg6TCxoZWlnaHQ6Qyx2aWV3WDpHLHZpZXdZOlkscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPUcodC54MCkscj1HKHQueDEpLG49WSh0LnkwKSxpPVkodC55MSksYT1yLWUsbz1pLW47aWYoIWF8fCFvKXJldHVybiIiO3JldHVybiJNIitLKGUsbiswKSsiTCIrSyhyLTAsbikrIkwiK0socixpLTApKyJMIitLKGUrMCxpKSsiWiJ9LHRvTW92ZUluc2lkZVNsaWNlOmV0LHByZXZFbnRyeTpGLG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpudCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjppdCxoYW5kbGVTbGljZXNFeGl0OmF0LGhhc1RyYW5zaXRpb246QSxzdHJUcmFuc2Zvcm06b3R9KSx2LnBhdGhiYXIudmlzaWJsZT9mKHQsZSxiLHcse2JhckRpZlk6eix3aWR0aDpQLGhlaWdodDpJLHZpZXdYOlosdmlld1k6SixwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9WihNYXRoLm1heChNYXRoLm1pbih0LngwLHQueDApLDApKSxyPVooTWF0aC5taW4oTWF0aC5tYXgodC54MSx0LngxKSxQKSksbj1KKHQueTApLGk9Sih0LnkxKSxhPUkvMixvPXt9LHM9e307by54PWUscy54PXIsby55PXMueT0obitpKS8yO3ZhciBsPXt4OmUseTpufSxjPXt4OnIseTpufSx1PXt4OnIseTppfSxmPXt4OmUseTppfTtyZXR1cm4iPiI9PT10dD8obC54LT1hLGMueC09YSx1LngtPWEsZi54LT1hKToiLyI9PT10dD8odS54LT1hLGYueC09YSxvLngtPWEvMixzLngtPWEvMik6IlxcIj09PXR0PyhsLngtPWEsYy54LT1hLG8ueC09YS8yLHMueC09YS8yKToiPCI9PT10dCYmKG8ueC09YSxzLngtPWEpLCQobCksJChmKSwkKG8pLCQoYyksJCh1KSwkKHMpLCJNIitLKGwueCxsLnkpKyJMIitLKGMueCxjLnkpKyJMIitLKHMueCxzLnkpKyJMIitLKHUueCx1LnkpKyJMIitLKGYueCxmLnkpKyJMIitLKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6ZXQsbWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yOm50LG1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yOml0LGhhbmRsZVNsaWNlc0V4aXQ6YXQsaGFzVHJhbnNpdGlvbjpBLHN0clRyYW5zZm9ybTpvdH0pOncucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6NDk4LCIuLi9iYXIvY29uc3RhbnRzIjo2NDUsIi4uL2Jhci9wbG90Ijo2NTQsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY1OSwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTA1MCwiLi9jb25zdGFudHMiOjEwNzMsIi4vZHJhd19hbmNlc3RvcnMiOjEwNzYsIkBwbG90bHkvZDMiOjU4LCJkMy1pbnRlcnBvbGF0ZSI6MTExfV0sMTA4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxzPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIGwodCxlLHIsbil7dmFyIHMsbCxjPShufHx7fSkuaG92ZXJlZCx1PWUuZGF0YS5kYXRhLGY9dS5pLGg9dS5jb2xvcixwPW8uaXNIaWVyYXJjaHlSb290KGUpLGQ9MTtpZihjKXM9ci5faG92ZXJlZC5tYXJrZXIubGluZS5jb2xvcixsPXIuX2hvdmVyZWQubWFya2VyLmxpbmUud2lkdGg7ZWxzZSBpZihwJiZoPT09ci5yb290LmNvbG9yKWQ9MTAwLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9YS5jYXN0T3B0aW9uKHIsZiwibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxsPWEuY2FzdE9wdGlvbihyLGYsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIG09ci5tYXJrZXIuZGVwdGhmYWRlO2lmKG0pe3ZhciBnLHY9aS5jb21iaW5lKGkuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxoKTtpZighMD09PW0pe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7Zz1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSBnPWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHxnKys7aWYoZz4wKWZvcih2YXIgeD0wO3g8Zzt4Kyspe3ZhciBiPS41KngvZztoPWkuY29tYmluZShpLmFkZE9wYWNpdHkodixiKSxoKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChpLmZpbGwsaCkuY2FsbChpLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobCx0LHIse2hvdmVyZWQ6ITF9KX0pKX0pKX0sc3R5bGVPbmU6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9saWIiOjQ5OCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6NjU5LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMDUwLCJAcGxvdGx5L2QzIjo1OH1dLDEwODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTIsIi4uL2JveC9hdHRyaWJ1dGVzIjo2Njh9XSwxMDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV0sdj1nLnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PWcuYmFuZHdpZHRoPWwoZSxnLHYpLHg9Zy5zcGFuPWMoZSxnLHUseSk7aWYoZy5taW49PT1nLm1heCYmMD09PXkpeD1nLnNwYW49W2cubWluLGcubWF4XSxnLmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sZy5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBUPW8ubWFrZUtERShnLGUsdik7Zy5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIGs9MCxBPXhbMF07QTx4WzFdK3cvMjtrKyssQSs9dyl7dmFyIE09VChBKTtnLmRlbnNpdHlba109e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLHYubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEw9ZS5zY2FsZWdyb3VwLEM9RVtMXTtDPyhDLm1heEtERT1NYXRoLm1heChDLm1heEtERSxwKSxDLm1heENvdW50PU1hdGgubWF4KEMubWF4Q291bnQsZCkpOkVbTF09e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL2JveC9jYWxjIjo2NjksIi4vaGVscGVycyI6MTA5MH1dLDEwODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo2NzB9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBtPWMoImJveC53aWR0aCIpLGc9YygiYm94LmZpbGxjb2xvciIsZCksdj1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4obXx8Z3x8dnx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYiI6NDk4LCIuLi9ib3gvZGVmYXVsdHMiOjY3MSwiLi9hdHRyaWJ1dGVzIjoxMDg2fV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6NDk4fV0sMTA5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGY9bC5ob3ZlckxheWVyLGg9dC5jZCxwPWhbMF0udHJhY2UsZD1wLmhvdmVyb24sbT0tMSE9PWQuaW5kZXhPZigidmlvbGlucyIpLGc9LTEhPT1kLmluZGV4T2YoImtkZSIpLHY9W107aWYobXx8Zyl7dmFyIHk9YS5ob3Zlck9uQm94ZXModCxlLHIscyk7aWYoZyYmeS5sZW5ndGg+MCl7dmFyIHgsYixfLHcsVCxrPXQueGEsQT10LnlhOyJoIj09PXAub3JpZW50YXRpb24/KFQ9ZSx4PSJ5IixfPUEsYj0ieCIsdz1rKTooVD1yLHg9IngiLF89ayxiPSJ5Iix3PUEpO3ZhciBNPWhbdC5pbmRleF07aWYoVD49TS5zcGFuWzBdJiZUPD1NLnNwYW5bMV0pe3ZhciBTPW4uZXh0ZW5kRmxhdCh7fSx0KSxFPXcuYzJwKFQsITApLEw9by5nZXRLZGVWYWx1ZShNLHAsVCksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKE0scCxFKSxQPV8uX29mZnNldCxJPV8uX2xlbmd0aDtTW3grIjAiXT1DWzBdLFNbeCsiMSJdPUNbMV0sU1tiKyIwIl09U1tiKyIxIl09RSxTW2IrIkxhYmVsIl09YisiOiAiK2kuaG92ZXJMYWJlbFRleHQodyxULHBbYisiaG92ZXJmb3JtYXQiXSkrIiwgIitoWzBdLnQubGFiZWxzLmtkZSsiICIrTC50b0ZpeGVkKDMpLFMuc3Bpa2VEaXN0YW5jZT15WzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eCsiU3Bpa2UiO1NbT109eVswXVtPXSx5WzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLHlbMF1bT109dm9pZCAwLFMuaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goUyksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeCsiMSJdPW4uY29uc3RyYWluKFArQ1swXSxQLFArSSksdVt4KyIyIl09bi5jb25zdHJhaW4oUCtDWzFdLFAsUCtJKSx1W2IrIjEiXT11W2IrIjIiXT13Ll9vZmZzZXQrRX19bSYmKHY9di5jb25jYXQoeSkpfS0xIT09ZC5pbmRleE9mKCJwb2ludHMiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIHo9Zi5zZWxlY3RBbGwoIi52aW9saW5saW5lLSIrcC51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiB6LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgidmlvbGlubGluZS0iK3AudWlkLCEwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSksei5leGl0KCkucmVtb3ZlKCksei5hdHRyKHUpLCJjbG9zZXN0Ij09PXM/Yz9bY106djpjPyh2LnB1c2goYyksdik6dn19LHsiLi4vLi4vbGliIjo0OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL2JveC9ob3ZlciI6NjczLCIuL2hlbHBlcnMiOjEwOTB9XSwxMDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2JveC9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2MywiLi4vYm94L2RlZmF1bHRzIjo2NzEsIi4uL2JveC9zZWxlY3QiOjY3OCwiLi4vc2NhdHRlci9zdHlsZSI6OTQ2LCIuL2F0dHJpYnV0ZXMiOjEwODYsIi4vY2FsYyI6MTA4NywiLi9jcm9zc190cmFjZV9jYWxjIjoxMDg4LCIuL2RlZmF1bHRzIjoxMDg5LCIuL2hvdmVyIjoxMDkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDkzLCIuL2xheW91dF9kZWZhdWx0cyI6MTA5NCwiLi9wbG90IjoxMDk1LCIuL3N0eWxlIjoxMDk2fV0sMTA5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6Njc1fV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUsciwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0pLCJ2aW9saW4iKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjY3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTA5M31dLDEwOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2JveC9wbG90Iikscz10KCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxmPWUueGF4aXMsaD1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpmLHlheGlzOmgsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6InNwbGluZSIsc2ltcGxpZnk6ITAsbGluZWFyaXplZDohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbMF0scz1hLnQsYz1hLnRyYWNlO2lmKCEwIT09Yy52aXNpYmxlfHxzLmVtcHR5KXIucmVtb3ZlKCk7ZWxzZXt2YXIgZD1zLmJQb3MsbT1zLmJkUG9zLGc9ZVtzLnZhbExldHRlcisiYXhpcyJdLHY9ZVtzLnBvc0xldHRlcisiYXhpcyJdLHk9ImJvdGgiPT09Yy5zaWRlLHg9eXx8InBvc2l0aXZlIj09PWMuc2lkZSxiPXl8fCJuZWdhdGl2ZSI9PT1jLnNpZGUsXz1yLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5kYXRhKGkuaWRlbnRpdHkpO18uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwidmlvbGluIiksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLGwsZixoLF89bi5zZWxlY3QodGhpcyksdz10LmRlbnNpdHksVD13Lmxlbmd0aCxrPXYuYzJsKHQucG9zK2QsITApLEE9di5sMnAoayk7aWYoYy53aWR0aCllPXMubWF4S0RFL207ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPSJjb3VudCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9tKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvbX1pZih4KXtmb3IoZj1uZXcgQXJyYXkoVCksbz0wO288VDtvKyspKGg9ZltvXT17fSlbcy5wb3NMZXR0ZXJdPWsrd1tvXS52L2UsaFtzLnZhbExldHRlcl09Zy5jMmwod1tvXS50LCEwKTtyPXAoZil9aWYoYil7Zm9yKGY9bmV3IEFycmF5KFQpLGw9MCxvPVQtMTtsPFQ7bCsrLG8tLSkoaD1mW2xdPXt9KVtzLnBvc0xldHRlcl09ay13W29dLnYvZSxoW3MudmFsTGV0dGVyXT1nLmMybCh3W29dLnQsITApO2k9cChmKX1pZih5KWE9cisiTCIraS5zdWJzdHIoMSkrIloiO2Vsc2V7dmFyIFM9W0EsZy5jMnAod1swXS50KV0sRT1bQSxnLmMycCh3W1QtMV0udCldOyJoIj09PWMub3JpZW50YXRpb24mJihTLnJldmVyc2UoKSxFLnJldmVyc2UoKSksYT14PyJNIitTKyJMIityLnN1YnN0cigxKSsiTCIrRToiTSIrRSsiTCIraS5zdWJzdHIoMSkrIkwiK1N9Xy5hdHRyKCJkIixhKSx0LnBvc0NlbnRlclB4PUEsdC5wb3NEZW5zaXR5U2NhbGU9ZSptLHQucGF0aD1fLm5vZGUoKSx0LnBhdGhMZW5ndGg9dC5wYXRoLmdldFRvdGFsTGVuZ3RoKCkvKHk/MjoxKX0pKTt2YXIgdyxULGssQT1jLmJveCxNPUEud2lkdGgsUz0oQS5saW5lfHx7fSkud2lkdGg7eT8odz1tKk0sVD0wKTp4Pyh3PVswLG0qTS8yXSxUPVMqe3g6MSx5Oi0xfVtzLnBvc0xldHRlcl0pOih3PVttKk0vMiwwXSxUPVMqe3g6LTEseToxfVtzLnBvc0xldHRlcl0pLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3Bvczp2LHZhbDpnfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLG8ucGxvdEJveE1lYW4ocix7cG9zOnYsdmFsOmd9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDpUfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKGs9aS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5kYXRhKGt8fFtdKTtFLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFubGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1nLmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09Yy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KSksby5wbG90UG9pbnRzKHIse3g6Zix5Omh9LGMscyl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4MywiLi4vLi4vbGliIjo0OTgsIi4uL2JveC9wbG90Ijo2NzcsIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiOjkzNiwiLi9oZWxwZXJzIjoxMDkwLCJAcGxvdGx5L2QzIjo1OH1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpO2Uuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLHM9ci5ib3h8fHt9LGw9cy5saW5lfHx7fSxjPXIubWVhbmxpbmV8fHt9LHU9Yy53aWR0aDtvLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmxpbmUud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxyLmxpbmUuY29sb3IpLmNhbGwoaS5maWxsLHIuZmlsbGNvbG9yKSxvLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsLndpZHRoKyJweCIpLmNhbGwoaS5zdHJva2UsbC5jb2xvcikuY2FsbChpLmZpbGwscy5maWxsY29sb3IpO3ZhciBmPXsic3Ryb2tlLXdpZHRoIjp1KyJweCIsInN0cm9rZS1kYXNoYXJyYXkiOjIqdSsicHgsIit1KyJweCJ9O28uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuc3R5bGUoZikuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi9zY2F0dGVyL3N0eWxlIjo5NDYsIkBwbG90bHkvZDMiOjU4fV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9ZS5leHBvcnRzPWwocyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx4aG92ZXJmb3JtYXQ6aS54aG92ZXJmb3JtYXQseWhvdmVyZm9ybWF0OmkueWhvdmVyZm9ybWF0LHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdCx2YWx1ZWhvdmVyZm9ybWF0OmkudmFsdWVob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOmEub3BhY2l0eXNjYWxlLGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTtjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNjgsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTMxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NDUsIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyI6ODU3LCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiOjEwNTZ9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX21lc2gzZCxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsZj10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2ZdLHRoaXMuZGF0YS5fbWVzaFlbZl0sdGhpcy5kYXRhLl9tZXNoWltmXSx0aGlzLmRhdGEuX3ZhbHVlW2ZdXTt2YXIgaD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShoKSYmdm9pZCAwIT09aFtmXT90LnRleHRMYWJlbD1oW2ZdOmgmJih0LnRleHRMYWJlbD1oKSwhMH19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1jKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSx1PW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdS5taW4sdS5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTExOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzMsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5NCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTIzLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjYwNCwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0Ijo4NTl9XSwxMDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIikuc3VwcGx5SXNvRGVmYXVsdHMsbz10KCIuLi9zdXJmYWNlL2RlZmF1bHRzIikub3BhY2l0eXNjYWxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLHMsbCksbyh0LGUscyxsKX19LHsiLi4vLi4vbGliIjo0OTgsIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHMiOjg2MCwiLi4vc3VyZmFjZS9kZWZhdWx0cyI6MTA1OSwiLi9hdHRyaWJ1dGVzIjoxMDk3fV0sMTEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vaXNvc3VyZmFjZS9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidm9sdW1lIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6NTkzLCIuLi9pc29zdXJmYWNlL2NhbGMiOjg1OCwiLi9hdHRyaWJ1dGVzIjoxMDk3LCIuL2NvbnZlcnQiOjEwOTgsIi4vZGVmYXVsdHMiOjEwOTl9XSwxMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIGgodCl7cmV0dXJue21hcmtlcjp7Y29sb3I6dSh7fSxuLm1hcmtlci5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6dSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDp1KHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17bWVhc3VyZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGJhc2U6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6bygieCIpLHlob3ZlcmZvcm1hdDpvKCJ5IiksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6cyh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86dSh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOmwoe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIl0pfSksdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6bi5pbnNpZGV0ZXh0YW5jaG9yLHRleHRhbmdsZTpuLnRleHRhbmdsZSx0ZXh0Zm9udDpuLnRleHRmb250LGluc2lkZXRleHRmb250Om4uaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Om4ub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6bi5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24sb2Zmc2V0Om4ub2Zmc2V0LHdpZHRoOm4ud2lkdGgsaW5jcmVhc2luZzpoKCksZGVjcmVhc2luZzpoKCksdG90YWxzOmgoKSxjb25uZWN0b3I6e2xpbmU6e2NvbG9yOnUoe30saS5jb2xvcix7ZGZsdDpmLmRlZmF1bHRMaW5lfSksd2lkdGg6dSh7fSxpLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmkuZGFzaCxlZGl0VHlwZToicGxvdCJ9LG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNwYW5uaW5nIiwiYmV0d2VlbiJdLGRmbHQ6ImJldHdlZW4iLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2xpYi9leHRlbmQiOjQ4OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTQ1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTUyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MjgsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTIyLCIuL2NvbnN0YW50cyI6MTEwM31dLDExMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuImEiPT09dHx8ImFic29sdXRlIj09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4idCI9PT10fHwidG90YWwiPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbT1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZz1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1tLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1nLm1ha2VDYWxjZGF0YShlLCJ5IiksaD1pKGUsZywieSIsZikscD0hIWUueXBlcmlvZGFsaWdubWVudCxkPSJ5Iik6KHI9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9bS5tYWtlQ2FsY2RhdGEoZSwieCIpLGg9aShlLG0sIngiLGYpLHA9ISFlLnhwZXJpb2RhbGlnbm1lbnQsZD0ieCIpLHU9aC52YWxzO2Zvcih2YXIgdix5PU1hdGgubWluKHUubGVuZ3RoLHIubGVuZ3RoKSx4PW5ldyBBcnJheSh5KSxiPTAsXz0hMSx3PTA7dzx5O3crKyl7dmFyIFQ9clt3XXx8MCxrPSExOyhyW3ddIT09c3x8YyhlLm1lYXN1cmVbd10pfHxsKGUubWVhc3VyZVt3XSkpJiZ3KzE8eSYmKHJbdysxXSE9PXN8fGMoZS5tZWFzdXJlW3crMV0pfHxsKGUubWVhc3VyZVt3KzFdKSkmJihrPSEwKTt2YXIgQT14W3ddPXtpOncscDp1W3ddLHM6VCxyYXdTOlQsY05leHQ6a307bChlLm1lYXN1cmVbd10pPyhiPUEucyxBLmlzU3VtPSEwLEEuZGlyPSJ0b3RhbHMiLEEucz1iKTpjKGUubWVhc3VyZVt3XSk/KEEuaXNTdW09ITAsQS5kaXI9InRvdGFscyIsQS5zPWIpOihBLmlzU3VtPSExLEEuZGlyPUEucmF3UzwwPyJkZWNyZWFzaW5nIjoiaW5jcmVhc2luZyIsdj1BLnMsQS5zPWIrdixiKz12KSwidG90YWxzIj09PUEuZGlyJiYoXz0hMCkscCYmKHhbd10ub3JpZ19wPWZbd10seFt3XVtkKyJFbmQiXT1oLmVuZHNbd10seFt3XVtkKyJTdGFydCJdPWguc3RhcnRzW3ddKSxlLmlkcyYmKEEuaWQ9U3RyaW5nKGUuaWRzW3ddKSksQS52PShlLmJhc2V8fDApK2J9cmV0dXJuIHgubGVuZ3RoJiYoeFswXS5oYXNUb3RhbHM9XyksYShlLnRleHQseCwidHgiKSxhKGUuaG92ZXJ0ZXh0LHgsImh0eCIpLG8oeCxlKSx4fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo1NDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyNH1dLDExMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX19LHt9XSwxMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmIndhdGVyZmFsbCI9PT1wLnR5cGUmJihyPXNbaV0sImgiPT09cC5vcmllbnRhdGlvbj9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e21vZGU6YS53YXRlcmZhbGxtb2RlLG5vcm06YS53YXRlcmZhbGxub3JtLGdhcDphLndhdGVyZmFsbGdhcCxncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfTtmb3Iobih0LGwsYyxmLGQpLG4odCxjLGwsaCxkKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIG09MDttPHIubGVuZ3RoO20rKyl7dmFyIGc9clttXTshMT09PWcuaXNTdW0mJihnLnMwKz0wPT09bT8wOnJbbS0xXS5zKSxtKzE8ci5sZW5ndGgmJihyW21dLm5leHRQMD1yW20rMV0ucDAsclttXS5uZXh0UzA9clttKzFdLnMwKX19fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6NjQ2fV0sMTEwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksZj11LklOQ1JFQVNJTkcuQ09MT1IsaD11LkRFQ1JFQVNJTkcuQ09MT1I7ZnVuY3Rpb24gcCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsYy5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLGMpKXtzKHQsZSxpLGMpLGMoInhob3ZlcmZvcm1hdCIpLGMoInlob3ZlcmZvcm1hdCIpLGMoIm1lYXN1cmUiKSxjKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGMoImJhc2UiKSxjKCJvZmZzZXQiKSxjKCJ3aWR0aCIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIik7dmFyIHU9YygidGV4dHBvc2l0aW9uIik7aWYoYSh0LGUsaSxjLHUse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiEwLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITAsbW9kdWxlSGFzVGV4dGFuZ2xlOiEwLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMH0pLCJub25lIiE9PWUudGV4dHBvc2l0aW9uJiYoYygidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fGMoInRleHRpbmZvIikpLHAoYywiaW5jcmVhc2luZyIsZikscChjLCJkZWNyZWFzaW5nIixoKSxwKGMsInRvdGFscyIsIiM0NDk5RkYiKSxjKCJjb25uZWN0b3IudmlzaWJsZSIpKWMoImNvbm5lY3Rvci5tb2RlIiksYygiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKGMoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksYygiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUud2F0ZXJmYWxsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjQ2OCwiLi4vLi4vbGliIjo0OTgsIi4uL2Jhci9kZWZhdWx0cyI6NjQ3LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQyLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjo5NDksIi4vYXR0cmlidXRlcyI6MTEwMX1dLDExMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiaW5pdGlhbCJpbiBlJiYodC5pbml0aWFsPWUuaW5pdGlhbCksImRlbHRhImluIGUmJih0LmRlbHRhPWUuZGVsdGEpLCJmaW5hbCJpbiBlJiYodC5maW5hbD1lLmZpbmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxzPW8uSU5DUkVBU0lORy5TWU1CT0wsbD1vLkRFQ1JFQVNJTkcuU1lNQk9MO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLGMpe3ZhciB1PWEodCxlLHIsbyxjKTtpZih1KXt2YXIgZj11LmNkLGg9ZlswXS50cmFjZSxwPSJoIj09PWgub3JpZW50YXRpb24sZD1wPyJ4IjoieSIsbT1wP3QueGE6dC55YSxnPWZbdS5pbmRleF0sdj1nLmlzU3VtP2cuYitnLnM6Zy5yYXdTO2lmKCFnLmlzU3VtKXt1LmluaXRpYWw9Zy5iK2cucy12LHUuZGVsdGE9dix1LmZpbmFsPXUuaW5pdGlhbCt1LmRlbHRhO3ZhciB5PWsoTWF0aC5hYnModS5kZWx0YSkpO3UuZGVsdGFMYWJlbD12PDA/IigiK3krIikiOnksdS5maW5hbExhYmVsPWsodS5maW5hbCksdS5pbml0aWFsTGFiZWw9ayh1LmluaXRpYWwpfXZhciB4PWcuaGl8fGguaG92ZXJpbmZvLGI9W107aWYoeCYmIm5vbmUiIT09eCYmInNraXAiIT09eCl7dmFyIF89ImFsbCI9PT14LHc9eC5zcGxpdCgiKyIpLFQ9ZnVuY3Rpb24odCl7cmV0dXJuIF98fC0xIT09dy5pbmRleE9mKHQpfTtnLmlzU3VtfHwoIVQoImZpbmFsIil8fFQocD8ieCI6InkiKXx8Yi5wdXNoKHUuZmluYWxMYWJlbCksVCgiZGVsdGEiKSYmKHY8MD9iLnB1c2godS5kZWx0YUxhYmVsKyIgIitsKTpiLnB1c2godS5kZWx0YUxhYmVsKyIgIitzKSksVCgiaW5pdGlhbCIpJiZiLnB1c2goIkluaXRpYWw6ICIrdS5pbml0aWFsTGFiZWwpKX1yZXR1cm4gYi5sZW5ndGgmJih1LmV4dHJhVGV4dD1iLmpvaW4oIjxicj4iKSksdS5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGcpLFt1XX1mdW5jdGlvbiBrKHQpe3JldHVybiBuKG0sdCxoW2QrImhvdmVyZm9ybWF0Il0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzYxLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjQ2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vYmFyL2hvdmVyIjo2NTB9XSwxMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToid2F0ZXJmYWxsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2MywiLi4vYmFyL3NlbGVjdCI6NjU1LCIuL2F0dHJpYnV0ZXMiOjExMDEsIi4vY2FsYyI6MTEwMiwiLi9jcm9zc190cmFjZV9jYWxjIjoxMTA0LCIuL2RlZmF1bHRzIjoxMTA1LCIuL2V2ZW50X2RhdGEiOjExMDYsIi4vaG92ZXIiOjExMDcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMDksIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTEwLCIuL3Bsb3QiOjExMTEsIi4vc3R5bGUiOjExMTJ9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjQ5OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEwOX1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQ7bCgid2F0ZXJmYWxsIix1KSxzLnBsb3QodCxlLHIsYyx7bW9kZTp1LndhdGVyZmFsbG1vZGUsbm9ybTp1LndhdGVyZmFsbG1vZGUsZ2FwOnUud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOnUud2F0ZXJmYWxsZ3JvdXBnYXB9KSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsZj1pLmVuc3VyZVNpbmdsZShzLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGg9ImgiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGUsZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxuP1tpLGFdOlthLGldfShyLGwsYyxoKSxmPXVbMF0sZD11WzFdLGc9IiI7ZlswXSE9PW8mJmRbMF0hPT1vJiZmWzFdIT09byYmZFsxXSE9PW8mJigic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJnM+MCYmKGcrPWg/Ik0iK2ZbMF0rIiwiK2RbMV0rIlYiK2RbMF06Ik0iK2ZbMV0rIiwiK2RbMF0rIkgiK2ZbMF0pLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxzPG0tMSkmJihnKz1oPyJNIitmWzFdKyIsIitkWzBdKyJWIitkWzFdOiJNIitmWzBdKyIsIitkWzFdKyJIIitmWzFdKSxmWzJdIT09byYmZFsyXSE9PW8mJihnKz1oPyJNIitmWzFdKyIsIitkWzFdKyJWIitkWzJdOiJNIitmWzFdKyIsIitkWzFdKyJIIitmWzJdKSksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgZi5yZW1vdmUoKX0pKX0odCxlLHIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzQsIi4uLy4uL2xpYiI6NDk4LCIuLi9iYXIvcGxvdCI6NjU0LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NTksIkBwbG90bHkvZDMiOjU4fV0sMTExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywid2F0ZXJmYWxsIikscy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD9vOjEpfX0pKSxjKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6MzgzLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzMsIi4uL2Jhci9zdHlsZSI6NjU3LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NTksIkBwbG90bHkvZDMiOjU4fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxhPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gYShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGkrKyl9cmV0dXJuIGk/YShyL2kpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czphKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czphKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksaT1NYXRoLm1heChpLGwpKX1yZXR1cm4gaT09PS0xLzB8fHI9PT0xLzA/czphKGktcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGk9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGk9PT1zP3M6YShpLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmci5wdXNoKGwpfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoaS5zb3J0ZXJBc2MpO3ZhciBjPShyLmxlbmd0aC0xKS8yO3JldHVybiBhKChyW01hdGguZmxvb3IoYyldK3JbTWF0aC5jZWlsKGMpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGk9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+aSYmKGk9dSxvPWMpfX1yZXR1cm4gaT9hKG8pOnN9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGkrKyl9cmV0dXJuIGk/YShNYXRoLnNxcnQoci9pKSk6c307Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAsbD0xLGM9cztmb3IoaT0wO2k8ci5sZW5ndGgmJmM9PT1zO2krKyljPW4oZVtyW2ldXSk7aWYoYz09PXMpcmV0dXJuIHM7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIHU9bihlW3JbaV1dKTtpZih1IT09cyl7dmFyIGY9dS1jO2ErPWYsbys9ZipmLGwrK319dmFyIGg9InNhbXBsZSI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBoP01hdGguc3FydCgoby1hKmEvbCkvaCk6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksbT0wO208ci5sZW5ndGg7bSsrKWRbbV09dShjLHJbbV0pO2wuc2V0KGQpLCJjb3VudCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKCJlbmFibGVkIikpcmV0dXJuIG47dmFyIHM9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHU9e307Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dPTE7dmFyIGY9bygiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkoZikpe2lmKCF1W2ZdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2ZdPTB9dmFyIGgscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxoLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtoPXtfaW5kZXg6cn07dmFyIGc9bSgidGFyZ2V0Iiksdj1tKCJmdW5jIik7bSgiZW5hYmxlZCIpJiZnJiYodVtnXXx8ImNvdW50Ij09PXYmJnZvaWQgMD09PXVbZ10pPygic3RkZGV2Ij09PXYmJm0oImZ1bmNtb2RlIiksdVtnXT0wLGRbcl09aCk6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxmLGg9e30scD17fSxkPVtdLG09byhlLnRyYW5zZm9ybXMsciksZz1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYoZz1NYXRoLm1pbihnLGUuX2xlbmd0aCkpLHM9MDtzPGc7cysrKXZvaWQgMD09PShjPWhbbD1hW3NdXSk/KGhbbF09ZC5sZW5ndGgsZj1bc10sZC5wdXNoKGYpLHBbaFtsXV09bShzKSk6KGRbY10ucHVzaChzKSxwW2hbbF1dPShwW2hbbF1dfHxbXSkuY29uY2F0KG0ocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIHY9ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPHYubGVuZ3RoO3MrKyl1KHQsZSxkLHZbc10pOyJzdHJpbmciPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzoiZmlyc3QiLGVuYWJsZWQ6ITB9KSxlLl9sZW5ndGg9ZC5sZW5ndGh9fX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc0LCIuLi9saWIiOjQ5OCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjUzNywiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi9oZWxwZXJzIjoxMTE2fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoImVuYWJsZWQiKSl7dmFyIG89YSgidGFyZ2V0Iik7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KG8pJiYwPT09by5sZW5ndGgpcmV0dXJuIGUuZW5hYmxlZD0hMSxlO2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIik7dmFyIHM9aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7cyh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLHModCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO20mJihoPW0pfXZhciBnLHYseT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8oZz1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGc9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksayhnKTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksVD0wO1Q8ZjtUKyspe3koaVtUXSk/KGsodixUKSxiW18rK109dyhUKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDcwLCIuLi9saWIiOjQ5OCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU0OSwiLi4vcmVnaXN0cnkiOjYzMywiLi9oZWxwZXJzIjoxMTE2fV0sMTExNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLG0sZz1lLnRyYW5zZm9ybSx2PWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbdl0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsZyk7aWYoIW4uaXNBcnJheU9yVHlwZWRBcnJheSh5KXx8MD09PXkubGVuZ3RoKXJldHVyblt0XTt2YXIgYj1uLmZpbHRlclVuaXF1ZSh5KSxfPW5ldyBBcnJheShiLmxlbmd0aCksdz15Lmxlbmd0aCxUPWkuZmluZEFycmF5QXR0cmlidXRlcyh0KSxrPWcuc3R5bGVzfHxbXSxBPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspQVtrW3JdLnRhcmdldF09a1tyXS52YWx1ZTtnLnN0eWxlcyYmKG09bi5rZXllZENvbnRhaW5lcihnLCJzdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIikpO3ZhciBNPXt9LFM9e307Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7TVtmPWJbcl1dPXIsU1tmXT0wLChoPV9bcl09bi5leHRlbmREZWVwTm9BcnJheXMoe30sdCkpLl9ncm91cD1mLGgudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50cz17fTt2YXIgRT1udWxsO2ZvcihtJiYoRT1tLmdldChmKSksaC5uYW1lPUV8fCIiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcoZy5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6Zn0pLHA9aC50cmFuc2Zvcm1zLGgudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspaC50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxULmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShoLFRbc10pLnNldChbXSl9Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7Zm9yKGM9VFtsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGg9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWY9YltyXSxoPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGgpLGg9bi5leHRlbmREZWVwTm9BcnJheXMoaCxBW2ZdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sbmFtZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e30sZWRpdFR5cGU6ImNhbGMiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcygiZW5hYmxlZCIpKXJldHVybiBvO3MoImdyb3VwcyIpLHMoIm5hbWVmb3JtYXQiLGkuX2RhdGFMZW5ndGg+MT8iJXtncm91cH0gKCV7dHJhY2V9KSI6IiV7Z3JvdXB9Iik7dmFyIGw9dC5zdHlsZXMsYz1vLnN0eWxlcz1bXTtpZihsKWZvcihhPTA7YTxsLmxlbmd0aDthKyspe3ZhciB1PWNbYV09e307bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpO3ZhciBmPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO24uaXNQbGFpbk9iamVjdChmKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxmKTpmJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0seyIuLi9saWIiOjQ5OCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjUzNywiLi4vcGxvdHMvcGxvdHMiOjYxNCwiLi9oZWxwZXJzIjoxMTE2fV0sMTExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLG89dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBzPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihzKXt2YXIgbD1yLnRhcmdldCxjPXMubGVuZ3RoO2UuX2xlbmd0aCYmKGM9TWF0aC5taW4oYyxlLl9sZW5ndGgpKTt2YXIgdSxmLGg9ZS5fYXJyYXlBdHRycyxwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQudiksaT1lKHIudik7cmV0dXJuIG49PT1vPzE6aT09PW8/LTE6bi1pfTtjYXNlImRlc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodC52KSxpPWUoci52KTtyZXR1cm4gbj09PW8/MTppPT09bz8tMTppLW59fX0odCxyKSksaT0wO2k8bjtpKyspc1tpXT1hW2ldLmk7cmV0dXJuIHN9KHIscyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUsbCxzKSxjKSxkPWEoZS50cmFuc2Zvcm1zLHIpLG09e307Zm9yKHU9MDt1PGgubGVuZ3RoO3UrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbdV0pLHY9Zy5nZXQoKSx5PW5ldyBBcnJheShjKTtmb3IoZj0wO2Y8YztmKyspeVtmXT12W3BbZl1dO2cuc2V0KHkpfWZvcihmPTA7ZjxjO2YrKyltW2ZdPWQocFtmXSk7ci5faW5kZXhUb1BvaW50cz1tLGUuX2xlbmd0aD1jfX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3NCwiLi4vbGliIjo0OTgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NDksIi4vaGVscGVycyI6MTExNn1dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIyLjExLjEifSx7fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXsoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz10KCk6KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1uP246InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuc3RhY2tnbD10KCl9KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbixpKXtmdW5jdGlvbiBhKHMsbCl7aWYoIW5bc10pe2lmKCFyW3NdKXt2YXIgYz0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdDtpZighbCYmYylyZXR1cm4gYyhzLCEwKTtpZihvKXJldHVybiBvKHMsITApO3ZhciB1PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3MrIiciKTt0aHJvdyB1LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHV9dmFyIGY9bltzXT17ZXhwb3J0czp7fX07cltzXVswXS5jYWxsKGYuZXhwb3J0cywoZnVuY3Rpb24odCl7cmV0dXJuIGEocltzXVsxXVt0XXx8dCl9KSxmLGYuZXhwb3J0cyxlLHIsbixpKX1yZXR1cm4gbltzXS5leHBvcnRzfWZvcih2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdCxzPTA7czxpLmxlbmd0aDtzKyspYShpW3NdKTtyZXR1cm4gYX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5ieXRlTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPWModCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gMyoocituKS80LW59LHIudG9CeXRlQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGUscixuPWModCksbz1uWzBdLHM9blsxXSxsPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbyxzKSksdT0wLGY9cz4wP28tNDpvO2ZvcihyPTA7cjxmO3IrPTQpZT1pW3QuY2hhckNvZGVBdChyKV08PDE4fGlbdC5jaGFyQ29kZUF0KHIrMSldPDwxMnxpW3QuY2hhckNvZGVBdChyKzIpXTw8NnxpW3QuY2hhckNvZGVBdChyKzMpXSxsW3UrK109ZT4+MTYmMjU1LGxbdSsrXT1lPj44JjI1NSxsW3UrK109MjU1JmU7Mj09PXMmJihlPWlbdC5jaGFyQ29kZUF0KHIpXTw8MnxpW3QuY2hhckNvZGVBdChyKzEpXT4+NCxsW3UrK109MjU1JmUpOzE9PT1zJiYoZT1pW3QuY2hhckNvZGVBdChyKV08PDEwfGlbdC5jaGFyQ29kZUF0KHIrMSldPDw0fGlbdC5jaGFyQ29kZUF0KHIrMildPj4yLGxbdSsrXT1lPj44JjI1NSxsW3UrK109MjU1JmUpO3JldHVybiBsfSxyLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT1yJTMsYT1bXSxvPTAscz1yLWk7bzxzO28rPTE2MzgzKWEucHVzaCh1KHQsbyxvKzE2MzgzPnM/czpvKzE2MzgzKSk7MT09PWk/KGU9dFtyLTFdLGEucHVzaChuW2U+PjJdK25bZTw8NCY2M10rIj09IikpOjI9PT1pJiYoZT0odFtyLTJdPDw4KSt0W3ItMV0sYS5wdXNoKG5bZT4+MTBdK25bZT4+NCY2M10rbltlPDwyJjYzXSsiPSIpKTtyZXR1cm4gYS5qb2luKCIiKX07Zm9yKHZhciBuPVtdLGk9W10sYT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxvPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixzPTAsbD1vLmxlbmd0aDtzPGw7KytzKW5bc109b1tzXSxpW28uY2hhckNvZGVBdChzKV09cztmdW5jdGlvbiBjKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciByPXQuaW5kZXhPZigiPSIpO3JldHVybi0xPT09ciYmKHI9ZSksW3Iscj09PWU/MDo0LXIlNF19ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBpLGEsbz1bXSxzPWU7czxyO3MrPTMpaT0odFtzXTw8MTYmMTY3MTE2ODApKyh0W3MrMV08PDgmNjUyODApKygyNTUmdFtzKzJdKSxvLnB1c2goblsoYT1pKT4+MTgmNjNdK25bYT4+MTImNjNdK25bYT4+NiY2M10rbls2MyZhXSk7cmV0dXJuIG8uam9pbigiIil9aVsiLSIuY2hhckNvZGVBdCgwKV09NjIsaVsiXyIuY2hhckNvZGVBdCgwKV09NjN9LHt9XSwyOltmdW5jdGlvbih0LGUscil7fSx7fV0sMzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwoidXNlIHN0cmljdCI7dmFyIGU9dCgiYmFzZTY0LWpzIiksbj10KCJpZWVlNzU0Iik7ci5CdWZmZXI9YSxyLlNsb3dCdWZmZXI9ZnVuY3Rpb24odCl7K3QhPXQmJih0PTApO3JldHVybiBhLmFsbG9jKCt0KX0sci5JTlNQRUNUX01BWF9CWVRFUz01MDtmdW5jdGlvbiBpKHQpe2lmKHQ+MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBlLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxlfWZ1bmN0aW9uIGEodCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBsKHQpfXJldHVybiBvKHQsZSxyKX1mdW5jdGlvbiBvKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWV8fChlPSJ1dGY4Iik7aWYoIWEuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3ZhciByPTB8Zih0LGUpLG49aShyKSxvPW4ud3JpdGUodCxlKTtvIT09ciYmKG49bi5zbGljZSgwLG8pKTtyZXR1cm4gbn0odCxlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpcmV0dXJuIGModCk7aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIHQpO2lmKEIodCxBcnJheUJ1ZmZlcil8fHQmJkIodC5idWZmZXIsQXJyYXlCdWZmZXIpKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoZTwwfHx0LmJ5dGVMZW5ndGg8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYodC5ieXRlTGVuZ3RoPGUrKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbjtuPXZvaWQgMD09PWUmJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LGUpOm5ldyBVaW50OEFycmF5KHQsZSxyKTtyZXR1cm4gbi5fX3Byb3RvX189YS5wcm90b3R5cGUsbn0odCxlLHIpO2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbj10LnZhbHVlT2YmJnQudmFsdWVPZigpO2lmKG51bGwhPW4mJm4hPT10KXJldHVybiBhLmZyb20obixlLHIpO3ZhciBvPWZ1bmN0aW9uKHQpe2lmKGEuaXNCdWZmZXIodCkpe3ZhciBlPTB8dSh0Lmxlbmd0aCkscj1pKGUpO3JldHVybiAwPT09ci5sZW5ndGh8fHQuY29weShyLDAsMCxlKSxyfWlmKHZvaWQgMCE9PXQubGVuZ3RoKXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fE4odC5sZW5ndGgpP2koMCk6Yyh0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmQXJyYXkuaXNBcnJheSh0LmRhdGEpKXJldHVybiBjKHQuZGF0YSl9KHQpO2lmKG8pcmV0dXJuIG87aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gYS5mcm9tKHRbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksZSxyKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KX1mdW5jdGlvbiBzKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHModCksaSh0PDA/MDowfHUodCkpfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPXQubGVuZ3RoPDA/MDowfHUodC5sZW5ndGgpLHI9aShlKSxuPTA7bjxlO24rPTEpcltuXT0yNTUmdFtuXTtyZXR1cm4gcn1mdW5jdGlvbiB1KHQpe2lmKHQ+PTIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiKzIxNDc0ODM2NDcuLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8dH1mdW5jdGlvbiBmKHQsZSl7aWYoYS5pc0J1ZmZlcih0KSlyZXR1cm4gdC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxCKHQsQXJyYXlCdWZmZXIpKXJldHVybiB0LmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW4mJjA9PT1yKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEQodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBSKHQpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIG4/LTE6RCh0KS5sZW5ndGg7ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09ZXx8ZTwwKSYmKGU9MCksZT50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0oZT4+Pj0wKSlyZXR1cm4iIjtmb3IodHx8KHQ9InV0ZjgiKTs7KXN3aXRjaCh0KXtjYXNlImhleCI6cmV0dXJuIE0odGhpcyxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFQodGhpcyxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiBrKHRoaXMsZSxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBBKHRoaXMsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHcodGhpcyxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gUyh0aGlzLGUscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdCk7dD0odCsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZCh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLE4ocj0rcikmJihyPWk/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9YS5mcm9tKGUsbikpLGEuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTptKHQsZSxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOm0odCxbZV0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIG0odCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBmPSEwLGg9MDtoPGw7aCsrKWlmKGModCxhK2gpIT09YyhlLGgpKXtmPSExO2JyZWFrfWlmKGYpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gZyh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihOKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHYodCxlLHIsbil7cmV0dXJuIEYoRChlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3JldHVybiBGKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4geSh0LGUscixuKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiBGKFIoZSksdCxyLG4pfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIEYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB3KHQscixuKXtyZXR1cm4gMD09PXImJm49PT10Lmxlbmd0aD9lLmZyb21CeXRlQXJyYXkodCk6ZS5mcm9tQnl0ZUFycmF5KHQuc2xpY2UocixuKSl9ZnVuY3Rpb24gVCh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsZj1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrZjw9cilzd2l0Y2goZil7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsZj0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWZ9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPSIiLG49MDtmb3IoO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPTQwOTYpKTtyZXR1cm4gcn0obil9ci5rTWF4TGVuZ3RoPTIxNDc0ODM2NDcsYS5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCksYS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoYS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGEuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnNwZWNpZXMmJmFbU3ltYm9sLnNwZWNpZXNdPT09YSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxhLnBvb2xTaXplPTgxOTIsYS5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbyh0LGUscil9LGEucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxhLl9fcHJvdG9fXz1VaW50OEFycmF5LGEuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIHModCksdDw9MD9pKHQpOnZvaWQgMCE9PWU/InN0cmluZyI9PXR5cGVvZiByP2kodCkuZmlsbChlLHIpOmkodCkuZmlsbChlKTppKHQpfSh0LGUscil9LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxhLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09YS5wcm90b3R5cGV9LGEuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKEIodCxVaW50OEFycmF5KSYmKHQ9YS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksQihlLFVpbnQ4QXJyYXkpJiYoZT1hLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhYS5pc0J1ZmZlcih0KXx8IWEuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sYS5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxhLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGEuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdLmxlbmd0aDt2YXIgbj1hLmFsbG9jVW5zYWZlKGUpLGk9MDtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbz10W3JdO2lmKEIobyxVaW50OEFycmF5KSYmKG89YS5mcm9tKG8pKSwhYS5pc0J1ZmZlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LGEuYnl0ZUxlbmd0aD1mLGEucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxhLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpcCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KXAodGhpcyxlLGUrMykscCh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpcCh0aGlzLGUsZSs3KSxwKHRoaXMsZSsxLGUrNikscCh0aGlzLGUrMixlKzUpLHAodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/VCh0aGlzLDAsdCk6aC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGEucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWEucHJvdG90eXBlLnRvU3RyaW5nLGEucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10fHwwPT09YS5jb21wYXJlKHRoaXMsdCl9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD0iIixlPXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdCsiPiJ9LGEucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihCKHQsVWludDhBcnJheSkmJih0PWEuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPXQ/dC5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLGU8MHx8cj50Lmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZlPj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKG4+Pj49MCkscz0ocj4+Pj0wKS0oZT4+Pj0wKSxsPU1hdGgubWluKG8scyksYz10aGlzLnNsaWNlKG4saSksdT10LnNsaWNlKGUsciksZj0wO2Y8bDsrK2YpaWYoY1tmXSE9PXVbZl0pe289Y1tmXSxzPXVbZl07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxhLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSxhLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZCh0aGlzLHQsZSxyLCEwKX0sYS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkKHRoaXMsdCxlLHIsITEpfSxhLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiBlKW49ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNle2lmKCFpc0Zpbml0ZShlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgYT0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGcodGhpcyx0LGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gdih0aGlzLHQsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4geSh0aGlzLHQsZSxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB4KHRoaXMsdCxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYih0aGlzLHQsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIF8odGhpcyx0LGUscik7ZGVmYXVsdDppZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxhPSEwfX0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtmdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLGE9ZTthPHI7KythKWkrPXoodFthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gUyh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPSIiLGE9MDthPG4ubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2FdKzI1NipuW2ErMV0pO3JldHVybiBpfWZ1bmN0aW9uIEUodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEwodCxlLHIsbixpLG8pe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPml8fGU8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBDKHQsZSxyLG4saSxhKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUCh0LGUscixpLGEpe3JldHVybiBlPStlLHI+Pj49MCxhfHxDKHQsMCxyLDQpLG4ud3JpdGUodCxlLHIsaSwyMyw0KSxyKzR9ZnVuY3Rpb24gSSh0LGUscixpLGEpe3JldHVybiBlPStlLHI+Pj49MCxhfHxDKHQsMCxyLDgpLG4ud3JpdGUodCxlLHIsaSw1Miw4KSxyKzh9YS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDsodD1+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksKGU9dm9pZCAwPT09ZT9yOn5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSxlPHQmJihlPXQpO3ZhciBuPXRoaXMuc3ViYXJyYXkodCxlKTtyZXR1cm4gbi5fX3Byb3RvX189YS5wcm90b3R5cGUsbn0sYS5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBufSxhLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tZV0saT0xO2U+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLWVdKmk7cmV0dXJuIG59LGEucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LGEucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fSxhLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0sYS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sYS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0XSsodGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdKX0sYS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG4+PShpKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSxhLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxhPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KWErPXRoaXNbdCstLW5dKmk7cmV0dXJuIGE+PShpKj0xMjgpJiYoYS09TWF0aC5wb3coMiw4KmUpKSxhfSxhLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPy0xKigyNTUtdGhpc1t0XSsxKTp0aGlzW3RdfSxhLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGEucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sYS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LGEucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSxhLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITAsMjMsNCl9LGEucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMSwyMyw0KX0sYS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsOCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMCw1Miw4KX0sYS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsOCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMSw1Miw4KX0sYS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7KHQ9K3QsZT4+Pj0wLHI+Pj49MCxuKXx8TCh0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsYT0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYoaSo9MjU2KTspdGhpc1tlK2FdPXQvaSYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7KHQ9K3QsZT4+Pj0wLHI+Pj49MCxuKXx8TCh0aGlzLHQsZSxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxhPTE7Zm9yKHRoaXNbZStpXT0yNTUmdDstLWk+PTAmJihhKj0yNTYpOyl0aGlzW2UraV09dC9hJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwxLDI1NSwwKSx0aGlzW2VdPTI1NSZ0LGUrMX0sYS5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCxlKzJ9LGEucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxhLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlKzNdPXQ+Pj4yNCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2VdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlPj4+PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO0wodGhpcyx0LGUscixpLTEsLWkpfXZhciBhPTAsbz0xLHM9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYS0xXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlPj4+PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO0wodGhpcyx0LGUscixpLTEsLWkpfXZhciBhPXItMSxvPTEscz0wO2Zvcih0aGlzW2UrYV09MjU1JnQ7LS1hPj0wJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthKzFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwxLDEyNywtMTI4KSx0PDAmJih0PTI1NSt0KzEpLHRoaXNbZV09MjU1JnQsZSsxfSxhLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCxlKzJ9LGEucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sYS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzNdPXQ+Pj4yNCxlKzR9LGEucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBQKHRoaXMsdCxlLCEwLHIpfSxhLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBQKHRoaXMsdCxlLCExLHIpfSxhLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMCxyKX0sYS5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITEscil9LGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCxlLHIsbil7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSxlPj10Lmxlbmd0aCYmKGU9dC5sZW5ndGgpLGV8fChlPTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8bi1yJiYobj10Lmxlbmd0aC1lK3IpO3ZhciBpPW4tcjtpZih0aGlzPT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pdGhpcy5jb3B5V2l0aGluKGUscixuKTtlbHNlIGlmKHRoaXM9PT10JiZyPGUmJmU8bilmb3IodmFyIG89aS0xO28+PTA7LS1vKXRbbytlXT10aGlzW28rcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixuKSxlKTtyZXR1cm4gaX0sYS5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZT8obj1lLGU9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksdm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFhLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtpZigxPT09dC5sZW5ndGgpe3ZhciBpPXQuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09biYmaTwxMjh8fCJsYXRpbjEiPT09bikmJih0PWkpfX1lbHNlIm51bWJlciI9PXR5cGVvZiB0JiYodCY9MjU1KTtpZihlPDB8fHRoaXMubGVuZ3RoPGV8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7dmFyIG87aWYoZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKSwibnVtYmVyIj09dHlwZW9mIHQpZm9yKG89ZTtvPHI7KytvKXRoaXNbb109dDtlbHNle3ZhciBzPWEuaXNCdWZmZXIodCk/dDphLmZyb20odCxuKSxsPXMubGVuZ3RoO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3Iobz0wO288ci1lOysrbyl0aGlzW28rZV09c1tvJWxdfXJldHVybiB0aGlzfTt2YXIgTz0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIHoodCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEQodCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIG49dC5sZW5ndGgsaT1udWxsLGE9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7YS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhazthLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7YS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIFIodCl7cmV0dXJuIGUudG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShPLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz0iPSI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBGKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQhPXR9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7ImJhc2U2NC1qcyI6MSxidWZmZXI6MyxpZWVlNzU0OjR9XSw0OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEscD10W2UrZl07Zm9yKGYrPWgsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsZj11Pj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsbT1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytmPj0xP2gvbDpoKk1hdGgucG93KDIsMS1mKSkqbD49MiYmKG8rKyxsLz0yKSxvK2Y+PXU/KHM9MCxvPXUpOm8rZj49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9Zik6KHM9ZSpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqbX19LHt9XSw1OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXtpPXN9fSgpO3ZhciBjLHU9W10sZj0hMSxoPS0xO2Z1bmN0aW9uIHAoKXtmJiZjJiYoZj0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgdD1sKHApO2Y9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIG0odCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBnKCl7fWEubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IG0odCxlKSksMSE9PXUubGVuZ3RofHxmfHxsKGQpfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249ZyxhLmFkZExpc3RlbmVyPWcsYS5vbmNlPWcsYS5vZmY9ZyxhLnJlbW92ZUxpc3RlbmVyPWcsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxhLmVtaXQ9ZyxhLnByZXBlbmRMaXN0ZW5lcj1nLGEucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17YWxwaGFfc2hhcGU6dCgiYWxwaGEtc2hhcGUiKSxjb252ZXhfaHVsbDp0KCJjb252ZXgtaHVsbCIpLGRlbGF1bmF5X3RyaWFuZ3VsYXRlOnQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksZ2xfY29uZTNkOnQoImdsLWNvbmUzZCIpLGdsX2Vycm9yM2Q6dCgiZ2wtZXJyb3IzZCIpLGdsX2hlYXRtYXAyZDp0KCJnbC1oZWF0bWFwMmQiKSxnbF9saW5lM2Q6dCgiZ2wtbGluZTNkIiksZ2xfbWVzaDNkOnQoImdsLW1lc2gzZCIpLGdsX3Bsb3QyZDp0KCJnbC1wbG90MmQiKSxnbF9wbG90M2Q6dCgiZ2wtcGxvdDNkIiksZ2xfcG9pbnRjbG91ZDJkOnQoImdsLXBvaW50Y2xvdWQyZCIpLGdsX3NjYXR0ZXIzZDp0KCJnbC1zY2F0dGVyM2QiKSxnbF9zZWxlY3RfYm94OnQoImdsLXNlbGVjdC1ib3giKSxnbF9zcGlrZXMyZDp0KCJnbC1zcGlrZXMyZCIpLGdsX3N0cmVhbXR1YmUzZDp0KCJnbC1zdHJlYW10dWJlM2QiKSxnbF9zdXJmYWNlM2Q6dCgiZ2wtc3VyZmFjZTNkIiksbmRhcnJheTp0KCJuZGFycmF5IiksbmRhcnJheV9saW5lYXJfaW50ZXJwb2xhdGU6dCgibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGUiKX19LHsiYWxwaGEtc2hhcGUiOjEyLCJjb252ZXgtaHVsbCI6NTgsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjo2MywiZ2wtY29uZTNkIjo3OSwiZ2wtZXJyb3IzZCI6ODQsImdsLWhlYXRtYXAyZCI6ODgsImdsLWxpbmUzZCI6OTEsImdsLW1lc2gzZCI6MTEyLCJnbC1wbG90MmQiOjExOCwiZ2wtcGxvdDNkIjoxMjEsImdsLXBvaW50Y2xvdWQyZCI6MTIzLCJnbC1zY2F0dGVyM2QiOjEyOCwiZ2wtc2VsZWN0LWJveCI6MTMwLCJnbC1zcGlrZXMyZCI6MTM5LCJnbC1zdHJlYW10dWJlM2QiOjE0MywiZ2wtc3VyZmFjZTNkIjoxNDUsbmRhcnJheToyNTksIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjoyNTN9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8InR1cm50YWJsZSIsdT1uKCksZj1pKCksaD1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksaC5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGgubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpmLG1hdHJpeDpofSxjKX07dmFyIG49dCgidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIiksaT10KCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciIpLGE9dCgibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtzLmZsdXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5mbHVzaCh0KX0scy5pZGxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5pZGxlKHQpfSxzLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ubG9va0F0KHQsZSxyLG4pfSxzLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucm90YXRlKHQsZSxyLG4pfSxzLnBhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucGFuKHQsZSxyLG4pfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0udHJhbnNsYXRlKHQsZSxyLG4pfSxzLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXRNYXRyaXgodCxlKX0scy5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXREaXN0YW5jZUxpbWl0cyh0LGUpfSxzLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbnRyb2xsZXJMaXN0LG49MDtuPHIubGVuZ3RoOysrbilyW25dLnNldERpc3RhbmNlKHQsZSl9LHMucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LHMuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0scy5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxzLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxzLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0scy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7Im1hdHJpeC1jYW1lcmEtY29udHJvbGxlciI6MjQ1LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6MjYzLCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiOjMwNX1dLDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6NzgsImdsLXZhbyI6MTUwLCJ3ZWFrLW1hcCI6MzEzfV0sOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBpPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcoaS5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIGkubWFwKChmdW5jdGlvbih0LGkpe3ZhciBvPWkrZSxzPVN0cmluZyhvKS5sZW5ndGg7cmV0dXJuIG4obyxhLXMpK3IrdH0pKS5qb2luKCJcbiIpfX0seyJwYWQtbGVmdCI6MjY0fV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVyblswXTtmb3IodmFyIHI9dFswXS5sZW5ndGgsbj1bdFswXV0sYT1bMF0sbz0xO288ZTsrK28paWYobi5wdXNoKHRbb10pLGkobixyKSl7aWYoYS5wdXNoKG8pLGEubGVuZ3RoPT09cisxKXJldHVybiBhfWVsc2Ugbi5wb3AoKTtyZXR1cm4gYX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSsxKSxpPTA7aTx0Lmxlbmd0aDsrK2kpcltpXT10W2ldO2ZvcihpPTA7aTw9dC5sZW5ndGg7KytpKXtmb3IodmFyIGE9dC5sZW5ndGg7YTw9ZTsrK2Epe2Zvcih2YXIgbz1uZXcgQXJyYXkoZSkscz0wO3M8ZTsrK3Mpb1tzXT1NYXRoLnBvdyhhKzEtaSxzKTtyW2FdPW99aWYobi5hcHBseSh2b2lkIDAscikpcmV0dXJuITB9cmV0dXJuITF9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0fV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSkuZmlsdGVyKChmdW5jdGlvbihyKXtmb3IodmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpblthXT1lW3JbYV1dO3JldHVybiBpKG4pKnQ8MX0pKX07dmFyIG49dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxpPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjQ5LCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6NjN9XSwxMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKG4odCxlKSl9O3ZhciBuPXQoImFscGhhLWNvbXBsZXgiKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSIpfSx7ImFscGhhLWNvbXBsZXgiOjExLCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiOjI5MH1dLDEzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhdG9iKHQpfX0se31dLDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxhPW5ldyBBcnJheShyKzEpLG89MDtvPHI7KytvKXtmb3IodmFyIHM9bmV3IEFycmF5KHIrMSksbD0wO2w8PXI7KytsKXNbbF09dFtsXVtvXTthW29dPXN9YVtyXT1uZXcgQXJyYXkocisxKTtmb3Iobz0wO288PXI7KytvKWFbcl1bb109MTt2YXIgYz1uZXcgQXJyYXkocisxKTtmb3Iobz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGEsYyksZj1pKHVbcisxXSk7MD09PWYmJihmPTEpO3ZhciBoPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzw9cjsrK28paFtvXT1pKHVbb10pL2Y7cmV0dXJuIGh9O3ZhciBuPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfX0seyJyb2J1c3QtbGluZWFyLXNvbHZlIjoyODN9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6MjV9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5tdWwoZVsxXSkuY21wKGVbMF0ubXVsKHRbMV0pKX19LHt9XSwxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLHRbMV0ubXVsKGVbMF0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjI1fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1yYXQiKSxpPXQoIi4vbGliL2lzLWJuIiksYT10KCIuL2xpYi9udW0tdG8tYm4iKSxvPXQoIi4vbGliL3N0ci10by1ibiIpLHM9dCgiLi9saWIvcmF0aW9uYWxpemUiKSxsPXQoIi4vZGl2Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtpZihuKGUpKXJldHVybiByP2woZSx0KHIpKTpbZVswXS5jbG9uZSgpLGVbMV0uY2xvbmUoKV07dmFyIGMsdSxmPTA7aWYoaShlKSljPWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSljPW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSljPWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksZi09MjU2O2M9YShlKX19aWYobihyKSljLm11bChyWzFdKSx1PXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpdT1yLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpdT1vKHIpO2Vsc2UgaWYocilpZihyPT09TWF0aC5mbG9vcihyKSl1PWEocik7ZWxzZXtmb3IoO3IhPT1NYXRoLmZsb29yKHIpOylyKj1NYXRoLnBvdygyLDI1NiksZis9MjU2O3U9YShyKX1lbHNlIHU9YSgxKTtmPjA/Yz1jLnVzaGxuKGYpOmY8MCYmKHU9dS51c2hsbigtZikpO3JldHVybiBzKGMsdSl9fSx7Ii4vZGl2IjoxNywiLi9pcy1yYXQiOjE5LCIuL2xpYi9pcy1ibiI6MjMsIi4vbGliL251bS10by1ibiI6MjQsIi4vbGliL3JhdGlvbmFsaXplIjoyNSwiLi9saWIvc3RyLXRvLWJuIjoyNn1dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7Ii4vbGliL2lzLWJuIjoyM31dLDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7ImJuLmpzIjozM31dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7Ii4vYm4tc2lnbiI6MjB9XSwyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkobi5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1pKG4uaGkodCkpO2lmKHI+MjApcmV0dXJuIDUyO3JldHVybiByKzMyfX0seyJiaXQtdHdpZGRsZSI6MzIsImRvdWJsZS1iaXRzIjo2NH1dLDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7ImJuLmpzIjozM31dLDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIiksaT10KCJkb3VibGUtYml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7ImJuLmpzIjozMywiZG91YmxlLWJpdHMiOjY0fV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9udW0tdG8tYm4iKSxpPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWkodCksYT1pKGUpO2lmKDA9PT1yKXJldHVybltuKDApLG4oMSldO2lmKDA9PT1hKXJldHVybltuKDApLG4oMCldO2E8MCYmKHQ9dC5uZWcoKSxlPWUubmVnKCkpO3ZhciBvPXQuZ2NkKGUpO2lmKG8uY21wbigxKSlyZXR1cm5bdC5kaXYobyksZS5kaXYobyldO3JldHVyblt0LGVdfX0seyIuL2JuLXNpZ24iOjIwLCIuL251bS10by1ibiI6MjR9XSwyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9fSx7ImJuLmpzIjozM31dLDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6MjV9XSwyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRbMF0pKm4odFsxXSl9fSx7Ii4vbGliL2JuLXNpZ24iOjIwfV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjI1fV0sMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvYm4tdG8tbnVtIiksaT10KCIuL2xpYi9jdHoiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgYT1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPWEuZGl2LHM9bihvKSxsPWEubW9kLGM9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiBjKnM7aWYocyl7dmFyIHU9aShzKSs0LGY9bihsLnVzaGxuKHUpLmRpdlJvdW5kKHIpKTtyZXR1cm4gYyoocytmKk1hdGgucG93KDIsLXUpKX12YXIgaD1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTM7Zj1uKGwudXNobG4oaCkuZGl2Um91bmQocikpO3JldHVybiBoPDEwMjM/YypmKk1hdGgucG93KDIsLWgpOihmKj1NYXRoLnBvdygyLC0xMDIzKSxjKmYqTWF0aC5wb3coMiwxMDIzLWgpKX19LHsiLi9saWIvYm4tdG8tbnVtIjoyMSwiLi9saWIvY3R6IjoyMn1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXtmb3IodmFyIGE9aSsxO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKT49MD8oYT1vLGk9by0xKTpuPW8rMX1yZXR1cm4gYX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7Zm9yKHZhciBhPWkrMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk+MD8oYT1vLGk9by0xKTpuPW8rMX1yZXR1cm4gYX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4tMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk8MD8oYT1vLG49bysxKTppPW8tMX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4tMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk8PTA/KGE9byxuPW8rMSk6aT1vLTF9cmV0dXJuIGF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcig7bjw9aTspe3ZhciBhPW4raT4+PjEsbz10W2FdLHM9dm9pZCAwIT09cj9yKG8sZSk6by1lO2lmKDA9PT1zKXJldHVybiBhO3M8PTA/bj1hKzE6aT1hLTF9cmV0dXJuLTF9ZnVuY3Rpb24gbCh0LGUscixuLGksYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/YSh0LGUscix2b2lkIDA9PT1uPzA6MHxuLHZvaWQgMD09PWk/dC5sZW5ndGgtMTowfGkpOmEodCxlLHZvaWQgMCx2b2lkIDA9PT1yPzA6MHxyLHZvaWQgMD09PW4/dC5sZW5ndGgtMTowfG4pfWUuZXhwb3J0cz17Z2U6ZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gbCh0LGUscixpLGEsbil9LGd0OmZ1bmN0aW9uKHQsZSxyLG4sYSl7cmV0dXJuIGwodCxlLHIsbixhLGkpfSxsdDpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxhKX0sbGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGksbyl9LGVxOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLHMpfX19LHt9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybih0Jj0tdCkmJmUtLSw2NTUzNSZ0JiYoZS09MTYpLDE2NzExOTM1JnQmJihlLT04KSwyNTI2NDUxMzUmdCYmKGUtPTQpLDg1ODk5MzQ1OSZ0JiYoZS09MiksMTQzMTY1NTc2NSZ0JiYoZS09MSksZX1yLklOVF9CSVRTPTMyLHIuSU5UX01BWD0yMTQ3NDgzNjQ3LHIuSU5UX01JTj0tMTw8MzEsci5zaWduPWZ1bmN0aW9uKHQpe3JldHVybih0PjApLSh0PDApfSxyLmFicz1mdW5jdGlvbih0KXt2YXIgZT10Pj4zMTtyZXR1cm4odF5lKS1lfSxyLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiBlXih0XmUpJi0odDxlKX0sci5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4odF5lKSYtKHQ8ZSl9LHIuaXNQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiEodCZ0LTF8fCF0KX0sci5sb2cyPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LGV8PXI9KCh0Pj4+PWUpPjI1NSk8PDMsZXw9cj0oKHQ+Pj49cik+MTUpPDwyLChlfD1yPSgodD4+Pj1yKT4zKTw8MSl8KHQ+Pj49cik+PjF9LHIubG9nMTA9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTFlOT85OnQ+PTFlOD84OnQ+PTFlNz83OnQ+PTFlNj82OnQ+PTFlNT81OnQ+PTFlND80OnQ+PTFlMz8zOnQ+PTEwMD8yOnQ+PTEwPzE6MH0sci5wb3BDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmKHQtPXQ+Pj4xJjE0MzE2NTU3NjUpKSsodD4+PjImODU4OTkzNDU5KSkrKHQ+Pj40KSYyNTI2NDUxMzUpPj4+MjR9LHIuY291bnRUcmFpbGluZ1plcm9zPW4sci5uZXh0UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdCs9MD09PXQsLS10LHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpKzF9LHIucHJldlBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpLSh0Pj4+MSl9LHIucGFyaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Xj10Pj4+MTYsdF49dD4+PjgsdF49dD4+PjQsMjcwMzA+Pj4odCY9MTUpJjF9O3ZhciBpPW5ldyBBcnJheSgyNTYpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDI1NjsrK2Upe3ZhciByPWUsbj1lLGk9Nztmb3Iocj4+Pj0xO3I7cj4+Pj0xKW48PD0xLG58PTEmciwtLWk7dFtlXT1uPDxpJjI1NX19KGkpLHIucmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gaVsyNTUmdF08PDI0fGlbdD4+PjgmMjU1XTw8MTZ8aVt0Pj4+MTYmMjU1XTw8OHxpW3Q+Pj4yNCYyNTVdfSxyLmludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodCY9NjU1MzUpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlJj02NTUzNSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfSxyLmRlaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD02NTUzNSYoKHQ9MTY3MTE5MzUmKCh0PTI1MjY0NTEzNSYoKHQ9ODU4OTkzNDU5JigodD10Pj4+ZSYxNDMxNjU1NzY1KXx0Pj4+MSkpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0xMjI3MTMzNTEzJigodD0zMjcyMzU2MDM1JigodD0yNTE3MTk2OTUmKCh0PTQyNzgxOTAzMzUmKCh0Jj0xMDIzKXx0PDwxNikpfHQ8PDgpKXx0PDw0KSl8dDw8MiksKHR8PShlPTEyMjcxMzM1MTMmKChlPTMyNzIzNTYwMzUmKChlPTI1MTcxOTY5NSYoKGU9NDI3ODE5MDMzNSYoKGUmPTEwMjMpfGU8PDE2KSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSk8PDEpfChyPTEyMjcxMzM1MTMmKChyPTMyNzIzNTYwMzUmKChyPTI1MTcxOTY5NSYoKHI9NDI3ODE5MDMzNSYoKHImPTEwMjMpfHI8PDE2KSl8cjw8OCkpfHI8PDQpKXxyPDwyKSk8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybih0PTEwMjMmKCh0PTQyNzgxOTAzMzUmKCh0PTI1MTcxOTY5NSYoKHQ9MzI3MjM1NjAzNSYoKHQ9dD4+PmUmMTIyNzEzMzUxMyl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj44KSl8dD4+PjE2KSk8PDIyPj4yMn0sci5uZXh0Q29tYmluYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dHx0LTE7cmV0dXJuIGUrMXwofmUmLX5lKS0xPj4+bih0KSsxfX0se31dLDMzOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBhKHQsZSxyKXtpZihhLmlzQk4odCkpcmV0dXJuIHQ7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXQmJigibGUiIT09ZSYmImJlIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fCJiZSIpKX12YXIgbzsib2JqZWN0Ij09dHlwZW9mIGU/ZS5leHBvcnRzPWE6ci5CTj1hLGEuQk49YSxhLndvcmRTaXplPTI2O3RyeXtvPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6dCgiYnVmZmVyIikuQnVmZmVyfWNhdGNoKHQpe31mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5jaGFyQ29kZUF0KGUpO3JldHVybiByPj02NSYmcjw9NzA/ci01NTpyPj05NyYmcjw9MTAyP3ItODc6ci00OCYxNX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1zKHQscik7cmV0dXJuIHItMT49ZSYmKG58PXModCxyLTEpPDw0KSxufWZ1bmN0aW9uIGModCxlLHIsbil7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxhO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9YS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXx8bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWEud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGEubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxhLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sYS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpOyJoZXgiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGk9MDsiLSI9PT0odD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGkrKyx0aGlzLm5lZ2F0aXZlPTEpLGk8dC5sZW5ndGgmJigxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpLHIpOih0aGlzLl9wYXJzZUJhc2UodCxlLGkpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKSkpfSxhLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgYSxvLHM9MDtpZigiYmUiPT09cilmb3IoaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpbz10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtlbHNlIGlmKCJsZSI9PT1yKWZvcihpPTAsYT0wO2k8dC5sZW5ndGg7aSs9MylvPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUscil7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT0wO3ZhciBpLGE9MCxvPTA7aWYoImJlIj09PXIpZm9yKG49dC5sZW5ndGgtMTtuPj1lO24tPTIpaT1sKHQsZSxuKTw8YSx0aGlzLndvcmRzW29dfD02NzEwODg2MyZpLGE+PTE4PyhhLT0xOCxvKz0xLHRoaXMud29yZHNbb118PWk+Pj4yNik6YSs9ODtlbHNlIGZvcihuPSh0Lmxlbmd0aC1lKSUyPT0wP2UrMTplO248dC5sZW5ndGg7bis9MilpPWwodCxlLG4pPDxhLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmksYT49MTg/KGEtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTphKz04O3RoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4scz1NYXRoLm1pbihhLGEtbykrcixsPTAsdT1yO3U8czt1Kz1uKWw9Yyh0LHUsdStuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PW8pe3ZhciBmPTE7Zm9yKGw9Yyh0LHUsdC5sZW5ndGgsZSksdT0wO3U8bzt1KyspZio9ZTt0aGlzLmltdWxuKGYpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIHU9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxoPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIHAodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxhPTB8ZS53b3Jkc1swXSxvPWkqYSxzPTY3MTA4ODYzJm8sbD1vLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1zO2Zvcih2YXIgYz0xO2M8bjtjKyspe2Zvcih2YXIgdT1sPj4+MjYsZj02NzEwODg2MyZsLGg9TWF0aC5taW4oYyxlLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsYy10Lmxlbmd0aCsxKTtwPD1oO3ArKyl7dmFyIGQ9Yy1wfDA7dSs9KG89KGk9MHx0LndvcmRzW2RdKSooYT0wfGUud29yZHNbcF0pK2YpLzY3MTA4ODY0fDAsZj02NzEwODg2MyZvfXIud29yZHNbY109MHxmLGw9MHx1fXJldHVybiAwIT09bD9yLndvcmRzW2NdPTB8bDpyLmxlbmd0aC0tLHIuc3RyaXAoKX1hLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKGU9MHxlfHwxLDE2PT09KHQ9dHx8MTApfHwiaGV4Ij09PXQpe3I9IiI7Zm9yKHZhciBpPTAsYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSxsPSgxNjc3NzIxNSYoczw8aXxhKSkudG9TdHJpbmcoMTYpO3I9MCE9PShhPXM+Pj4yNC1pJjE2Nzc3MjE1KXx8byE9PXRoaXMubGVuZ3RoLTE/dVs2LWwubGVuZ3RoXStsK3I6bCtyLChpKz0yKT49MjYmJihpLT0yNixvLS0pfWZvcigwIT09YSYmKHI9YS50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9MDspcj0iMCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPSItIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciBjPWZbdF0scD1oW3RdO3I9IiI7dmFyIGQ9dGhpcy5jbG9uZSgpO2ZvcihkLm5lZ2F0aXZlPTA7IWQuaXNaZXJvKCk7KXt2YXIgbT1kLm1vZG4ocCkudG9TdHJpbmcodCk7cj0oZD1kLmlkaXZuKHApKS5pc1plcm8oKT9tK3I6dVtjLW0ubGVuZ3RoXSttK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPSIwIityKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9bighMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxhLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sYS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih2b2lkIDAhPT1vKSx0aGlzLnRvQXJyYXlMaWtlKG8sdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxhPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1hLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbihhPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgbyxzLGw9ImxlIj09PWUsYz1uZXcgdChhKSx1PXRoaXMuY2xvbmUoKTtpZihsKXtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW3NdPW87Zm9yKDtzPGE7cysrKWNbc109MH1lbHNle2ZvcihzPTA7czxhLWk7cysrKWNbc109MDtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW2Etcy0xXT1vfXJldHVybiBjfSxNYXRoLmNsejMyP2EucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9OmEucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxhLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PSgxJmUpJiZyKysscn0sYS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LGEucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxhLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxhLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sYS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGEucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGEucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxhLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxhLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxhLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxhLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxhLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxhLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sYS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sYS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sYS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sYS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdPWU/dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcixuLGk9dGhpcy5jbXAodCk7aWYoMD09PWkpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2k+MD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgYT0wLG89MDtvPG4ubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pLSgwfG4ud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7Zm9yKDswIT09YSYmbzxyLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2lmKDA9PT1hJiZvPHIubGVuZ3RoJiZyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksciE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQud29yZHMscz1lLndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0sZj04MTkxJnUsaD11Pj4+MTMscD0wfG9bMV0sZD04MTkxJnAsbT1wPj4+MTMsZz0wfG9bMl0sdj04MTkxJmcseT1nPj4+MTMseD0wfG9bM10sYj04MTkxJngsXz14Pj4+MTMsdz0wfG9bNF0sVD04MTkxJncsaz13Pj4+MTMsQT0wfG9bNV0sTT04MTkxJkEsUz1BPj4+MTMsRT0wfG9bNl0sTD04MTkxJkUsQz1FPj4+MTMsUD0wfG9bN10sST04MTkxJlAsTz1QPj4+MTMsej0wfG9bOF0sRD04MTkxJnosUj16Pj4+MTMsRj0wfG9bOV0sQj04MTkxJkYsTj1GPj4+MTMsaj0wfHNbMF0sVT04MTkxJmosVj1qPj4+MTMsSD0wfHNbMV0scT04MTkxJkgsRz1IPj4+MTMsWT0wfHNbMl0sVz04MTkxJlksWD1ZPj4+MTMsWj0wfHNbM10sSj04MTkxJlosSz1aPj4+MTMsUT0wfHNbNF0sJD04MTkxJlEsdHQ9UT4+PjEzLGV0PTB8c1s1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxzWzZdLGF0PTgxOTEmaXQsb3Q9aXQ+Pj4xMyxzdD0wfHNbN10sbHQ9ODE5MSZzdCxjdD1zdD4+PjEzLHV0PTB8c1s4XSxmdD04MTkxJnV0LGh0PXV0Pj4+MTMscHQ9MHxzWzldLGR0PTgxOTEmcHQsbXQ9cHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgZ3Q9KGMrKG49TWF0aC5pbXVsKGYsVSkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoZixWKSkrTWF0aC5pbXVsKGgsVSl8MCkpPDwxMyl8MDtjPSgoYT1NYXRoLmltdWwoaCxWKSkrKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGQsVSksaT0oaT1NYXRoLmltdWwoZCxWKSkrTWF0aC5pbXVsKG0sVSl8MCxhPU1hdGguaW11bChtLFYpO3ZhciB2dD0oYysobj1uK01hdGguaW11bChmLHEpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLEcpfDApK01hdGguaW11bChoLHEpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxHKXwwKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodixVKSxpPShpPU1hdGguaW11bCh2LFYpKStNYXRoLmltdWwoeSxVKXwwLGE9TWF0aC5pbXVsKHksViksbj1uK01hdGguaW11bChkLHEpfDAsaT0oaT1pK01hdGguaW11bChkLEcpfDApK01hdGguaW11bChtLHEpfDAsYT1hK01hdGguaW11bChtLEcpfDA7dmFyIHl0PShjKyhuPW4rTWF0aC5pbXVsKGYsVyl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsWCl8MCkrTWF0aC5pbXVsKGgsVyl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLFgpfDApKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bChiLFUpLGk9KGk9TWF0aC5pbXVsKGIsVikpK01hdGguaW11bChfLFUpfDAsYT1NYXRoLmltdWwoXyxWKSxuPW4rTWF0aC5pbXVsKHYscSl8MCxpPShpPWkrTWF0aC5pbXVsKHYsRyl8MCkrTWF0aC5pbXVsKHkscSl8MCxhPWErTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKGQsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGQsWCl8MCkrTWF0aC5pbXVsKG0sVyl8MCxhPWErTWF0aC5pbXVsKG0sWCl8MDt2YXIgeHQ9KGMrKG49bitNYXRoLmltdWwoZixKKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixLKXwwKStNYXRoLmltdWwoaCxKKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsSyl8MCkrKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFQsVSksaT0oaT1NYXRoLmltdWwoVCxWKSkrTWF0aC5pbXVsKGssVSl8MCxhPU1hdGguaW11bChrLFYpLG49bitNYXRoLmltdWwoYixxKXwwLGk9KGk9aStNYXRoLmltdWwoYixHKXwwKStNYXRoLmltdWwoXyxxKXwwLGE9YStNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwodixXKXwwLGk9KGk9aStNYXRoLmltdWwodixYKXwwKStNYXRoLmltdWwoeSxXKXwwLGE9YStNYXRoLmltdWwoeSxYKXwwLG49bitNYXRoLmltdWwoZCxKKXwwLGk9KGk9aStNYXRoLmltdWwoZCxLKXwwKStNYXRoLmltdWwobSxKKXwwLGE9YStNYXRoLmltdWwobSxLKXwwO3ZhciBidD0oYysobj1uK01hdGguaW11bChmLCQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLHR0KXwwKStNYXRoLmltdWwoaCwkKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsdHQpfDApKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChNLFUpLGk9KGk9TWF0aC5pbXVsKE0sVikpK01hdGguaW11bChTLFUpfDAsYT1NYXRoLmltdWwoUyxWKSxuPW4rTWF0aC5pbXVsKFQscSl8MCxpPShpPWkrTWF0aC5pbXVsKFQsRyl8MCkrTWF0aC5pbXVsKGsscSl8MCxhPWErTWF0aC5pbXVsKGssRyl8MCxuPW4rTWF0aC5pbXVsKGIsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGIsWCl8MCkrTWF0aC5pbXVsKF8sVyl8MCxhPWErTWF0aC5pbXVsKF8sWCl8MCxuPW4rTWF0aC5pbXVsKHYsSil8MCxpPShpPWkrTWF0aC5pbXVsKHYsSyl8MCkrTWF0aC5pbXVsKHksSil8MCxhPWErTWF0aC5pbXVsKHksSyl8MCxuPW4rTWF0aC5pbXVsKGQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsdHQpfDApK01hdGguaW11bChtLCQpfDAsYT1hK01hdGguaW11bChtLHR0KXwwO3ZhciBfdD0oYysobj1uK01hdGguaW11bChmLHJ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixudCl8MCkrTWF0aC5pbXVsKGgscnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxudCl8MCkrKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEwsVSksaT0oaT1NYXRoLmltdWwoTCxWKSkrTWF0aC5pbXVsKEMsVSl8MCxhPU1hdGguaW11bChDLFYpLG49bitNYXRoLmltdWwoTSxxKXwwLGk9KGk9aStNYXRoLmltdWwoTSxHKXwwKStNYXRoLmltdWwoUyxxKXwwLGE9YStNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwoVCxXKXwwLGk9KGk9aStNYXRoLmltdWwoVCxYKXwwKStNYXRoLmltdWwoayxXKXwwLGE9YStNYXRoLmltdWwoayxYKXwwLG49bitNYXRoLmltdWwoYixKKXwwLGk9KGk9aStNYXRoLmltdWwoYixLKXwwKStNYXRoLmltdWwoXyxKKXwwLGE9YStNYXRoLmltdWwoXyxLKXwwLG49bitNYXRoLmltdWwodiwkKXwwLGk9KGk9aStNYXRoLmltdWwodix0dCl8MCkrTWF0aC5pbXVsKHksJCl8MCxhPWErTWF0aC5pbXVsKHksdHQpfDAsbj1uK01hdGguaW11bChkLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxudCl8MCkrTWF0aC5pbXVsKG0scnQpfDAsYT1hK01hdGguaW11bChtLG50KXwwO3ZhciB3dD0oYysobj1uK01hdGguaW11bChmLGF0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixvdCl8MCkrTWF0aC5pbXVsKGgsYXQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxvdCl8MCkrKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEksVSksaT0oaT1NYXRoLmltdWwoSSxWKSkrTWF0aC5pbXVsKE8sVSl8MCxhPU1hdGguaW11bChPLFYpLG49bitNYXRoLmltdWwoTCxxKXwwLGk9KGk9aStNYXRoLmltdWwoTCxHKXwwKStNYXRoLmltdWwoQyxxKXwwLGE9YStNYXRoLmltdWwoQyxHKXwwLG49bitNYXRoLmltdWwoTSxXKXwwLGk9KGk9aStNYXRoLmltdWwoTSxYKXwwKStNYXRoLmltdWwoUyxXKXwwLGE9YStNYXRoLmltdWwoUyxYKXwwLG49bitNYXRoLmltdWwoVCxKKXwwLGk9KGk9aStNYXRoLmltdWwoVCxLKXwwKStNYXRoLmltdWwoayxKKXwwLGE9YStNYXRoLmltdWwoayxLKXwwLG49bitNYXRoLmltdWwoYiwkKXwwLGk9KGk9aStNYXRoLmltdWwoYix0dCl8MCkrTWF0aC5pbXVsKF8sJCl8MCxhPWErTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh2LHJ0KXwwLGk9KGk9aStNYXRoLmltdWwodixudCl8MCkrTWF0aC5pbXVsKHkscnQpfDAsYT1hK01hdGguaW11bCh5LG50KXwwLG49bitNYXRoLmltdWwoZCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsb3QpfDApK01hdGguaW11bChtLGF0KXwwLGE9YStNYXRoLmltdWwobSxvdCl8MDt2YXIgVHQ9KGMrKG49bitNYXRoLmltdWwoZixsdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsY3QpfDApK01hdGguaW11bChoLGx0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsY3QpfDApKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChELFUpLGk9KGk9TWF0aC5pbXVsKEQsVikpK01hdGguaW11bChSLFUpfDAsYT1NYXRoLmltdWwoUixWKSxuPW4rTWF0aC5pbXVsKEkscSl8MCxpPShpPWkrTWF0aC5pbXVsKEksRyl8MCkrTWF0aC5pbXVsKE8scSl8MCxhPWErTWF0aC5pbXVsKE8sRyl8MCxuPW4rTWF0aC5pbXVsKEwsVyl8MCxpPShpPWkrTWF0aC5pbXVsKEwsWCl8MCkrTWF0aC5pbXVsKEMsVyl8MCxhPWErTWF0aC5pbXVsKEMsWCl8MCxuPW4rTWF0aC5pbXVsKE0sSil8MCxpPShpPWkrTWF0aC5pbXVsKE0sSyl8MCkrTWF0aC5pbXVsKFMsSil8MCxhPWErTWF0aC5pbXVsKFMsSyl8MCxuPW4rTWF0aC5pbXVsKFQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsdHQpfDApK01hdGguaW11bChrLCQpfDAsYT1hK01hdGguaW11bChrLHR0KXwwLG49bitNYXRoLmltdWwoYixydCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsbnQpfDApK01hdGguaW11bChfLHJ0KXwwLGE9YStNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHYsYXQpfDAsaT0oaT1pK01hdGguaW11bCh2LG90KXwwKStNYXRoLmltdWwoeSxhdCl8MCxhPWErTWF0aC5pbXVsKHksb3QpfDAsbj1uK01hdGguaW11bChkLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxjdCl8MCkrTWF0aC5pbXVsKG0sbHQpfDAsYT1hK01hdGguaW11bChtLGN0KXwwO3ZhciBrdD0oYysobj1uK01hdGguaW11bChmLGZ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixodCl8MCkrTWF0aC5pbXVsKGgsZnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxodCl8MCkrKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVSksaT0oaT1NYXRoLmltdWwoQixWKSkrTWF0aC5pbXVsKE4sVSl8MCxhPU1hdGguaW11bChOLFYpLG49bitNYXRoLmltdWwoRCxxKXwwLGk9KGk9aStNYXRoLmltdWwoRCxHKXwwKStNYXRoLmltdWwoUixxKXwwLGE9YStNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoSSxXKXwwLGk9KGk9aStNYXRoLmltdWwoSSxYKXwwKStNYXRoLmltdWwoTyxXKXwwLGE9YStNYXRoLmltdWwoTyxYKXwwLG49bitNYXRoLmltdWwoTCxKKXwwLGk9KGk9aStNYXRoLmltdWwoTCxLKXwwKStNYXRoLmltdWwoQyxKKXwwLGE9YStNYXRoLmltdWwoQyxLKXwwLG49bitNYXRoLmltdWwoTSwkKXwwLGk9KGk9aStNYXRoLmltdWwoTSx0dCl8MCkrTWF0aC5pbXVsKFMsJCl8MCxhPWErTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChULHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxudCl8MCkrTWF0aC5pbXVsKGsscnQpfDAsYT1hK01hdGguaW11bChrLG50KXwwLG49bitNYXRoLmltdWwoYixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsb3QpfDApK01hdGguaW11bChfLGF0KXwwLGE9YStNYXRoLmltdWwoXyxvdCl8MCxuPW4rTWF0aC5pbXVsKHYsbHQpfDAsaT0oaT1pK01hdGguaW11bCh2LGN0KXwwKStNYXRoLmltdWwoeSxsdCl8MCxhPWErTWF0aC5pbXVsKHksY3QpfDAsbj1uK01hdGguaW11bChkLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxodCl8MCkrTWF0aC5pbXVsKG0sZnQpfDAsYT1hK01hdGguaW11bChtLGh0KXwwO3ZhciBBdD0oYysobj1uK01hdGguaW11bChmLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixtdCl8MCkrTWF0aC5pbXVsKGgsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxtdCl8MCkrKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT0oaT1NYXRoLmltdWwoQixHKSkrTWF0aC5pbXVsKE4scSl8MCxhPU1hdGguaW11bChOLEcpLG49bitNYXRoLmltdWwoRCxXKXwwLGk9KGk9aStNYXRoLmltdWwoRCxYKXwwKStNYXRoLmltdWwoUixXKXwwLGE9YStNYXRoLmltdWwoUixYKXwwLG49bitNYXRoLmltdWwoSSxKKXwwLGk9KGk9aStNYXRoLmltdWwoSSxLKXwwKStNYXRoLmltdWwoTyxKKXwwLGE9YStNYXRoLmltdWwoTyxLKXwwLG49bitNYXRoLmltdWwoTCwkKXwwLGk9KGk9aStNYXRoLmltdWwoTCx0dCl8MCkrTWF0aC5pbXVsKEMsJCl8MCxhPWErTWF0aC5pbXVsKEMsdHQpfDAsbj1uK01hdGguaW11bChNLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxudCl8MCkrTWF0aC5pbXVsKFMscnQpfDAsYT1hK01hdGguaW11bChTLG50KXwwLG49bitNYXRoLmltdWwoVCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsb3QpfDApK01hdGguaW11bChrLGF0KXwwLGE9YStNYXRoLmltdWwoayxvdCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoXyxsdCl8MCxhPWErTWF0aC5pbXVsKF8sY3QpfDAsbj1uK01hdGguaW11bCh2LGZ0KXwwLGk9KGk9aStNYXRoLmltdWwodixodCl8MCkrTWF0aC5pbXVsKHksZnQpfDAsYT1hK01hdGguaW11bCh5LGh0KXwwO3ZhciBNdD0oYysobj1uK01hdGguaW11bChkLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZCxtdCl8MCkrTWF0aC5pbXVsKG0sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwobSxtdCl8MCkrKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVyksaT0oaT1NYXRoLmltdWwoQixYKSkrTWF0aC5pbXVsKE4sVyl8MCxhPU1hdGguaW11bChOLFgpLG49bitNYXRoLmltdWwoRCxKKXwwLGk9KGk9aStNYXRoLmltdWwoRCxLKXwwKStNYXRoLmltdWwoUixKKXwwLGE9YStNYXRoLmltdWwoUixLKXwwLG49bitNYXRoLmltdWwoSSwkKXwwLGk9KGk9aStNYXRoLmltdWwoSSx0dCl8MCkrTWF0aC5pbXVsKE8sJCl8MCxhPWErTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChMLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxudCl8MCkrTWF0aC5pbXVsKEMscnQpfDAsYT1hK01hdGguaW11bChDLG50KXwwLG49bitNYXRoLmltdWwoTSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sb3QpfDApK01hdGguaW11bChTLGF0KXwwLGE9YStNYXRoLmltdWwoUyxvdCl8MCxuPW4rTWF0aC5pbXVsKFQsbHQpfDAsaT0oaT1pK01hdGguaW11bChULGN0KXwwKStNYXRoLmltdWwoayxsdCl8MCxhPWErTWF0aC5pbXVsKGssY3QpfDAsbj1uK01hdGguaW11bChiLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixodCl8MCkrTWF0aC5pbXVsKF8sZnQpfDAsYT1hK01hdGguaW11bChfLGh0KXwwO3ZhciBTdD0oYysobj1uK01hdGguaW11bCh2LGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwodixtdCl8MCkrTWF0aC5pbXVsKHksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeSxtdCl8MCkrKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsSiksaT0oaT1NYXRoLmltdWwoQixLKSkrTWF0aC5pbXVsKE4sSil8MCxhPU1hdGguaW11bChOLEspLG49bitNYXRoLmltdWwoRCwkKXwwLGk9KGk9aStNYXRoLmltdWwoRCx0dCl8MCkrTWF0aC5pbXVsKFIsJCl8MCxhPWErTWF0aC5pbXVsKFIsdHQpfDAsbj1uK01hdGguaW11bChJLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxudCl8MCkrTWF0aC5pbXVsKE8scnQpfDAsYT1hK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoTCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEwsb3QpfDApK01hdGguaW11bChDLGF0KXwwLGE9YStNYXRoLmltdWwoQyxvdCl8MCxuPW4rTWF0aC5pbXVsKE0sbHQpfDAsaT0oaT1pK01hdGguaW11bChNLGN0KXwwKStNYXRoLmltdWwoUyxsdCl8MCxhPWErTWF0aC5pbXVsKFMsY3QpfDAsbj1uK01hdGguaW11bChULGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxodCl8MCkrTWF0aC5pbXVsKGssZnQpfDAsYT1hK01hdGguaW11bChrLGh0KXwwO3ZhciBFdD0oYysobj1uK01hdGguaW11bChiLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoYixtdCl8MCkrTWF0aC5pbXVsKF8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoXyxtdCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsJCksaT0oaT1NYXRoLmltdWwoQix0dCkpK01hdGguaW11bChOLCQpfDAsYT1NYXRoLmltdWwoTix0dCksbj1uK01hdGguaW11bChELHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxudCl8MCkrTWF0aC5pbXVsKFIscnQpfDAsYT1hK01hdGguaW11bChSLG50KXwwLG49bitNYXRoLmltdWwoSSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEksb3QpfDApK01hdGguaW11bChPLGF0KXwwLGE9YStNYXRoLmltdWwoTyxvdCl8MCxuPW4rTWF0aC5pbXVsKEwsbHQpfDAsaT0oaT1pK01hdGguaW11bChMLGN0KXwwKStNYXRoLmltdWwoQyxsdCl8MCxhPWErTWF0aC5pbXVsKEMsY3QpfDAsbj1uK01hdGguaW11bChNLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxodCl8MCkrTWF0aC5pbXVsKFMsZnQpfDAsYT1hK01hdGguaW11bChTLGh0KXwwO3ZhciBMdD0oYysobj1uK01hdGguaW11bChULGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoVCxtdCl8MCkrTWF0aC5pbXVsKGssZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoayxtdCl8MCkrKGk+Pj4xMyl8MCkrKEx0Pj4+MjYpfDAsTHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscnQpLGk9KGk9TWF0aC5pbXVsKEIsbnQpKStNYXRoLmltdWwoTixydCl8MCxhPU1hdGguaW11bChOLG50KSxuPW4rTWF0aC5pbXVsKEQsYXQpfDAsaT0oaT1pK01hdGguaW11bChELG90KXwwKStNYXRoLmltdWwoUixhdCl8MCxhPWErTWF0aC5pbXVsKFIsb3QpfDAsbj1uK01hdGguaW11bChJLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxjdCl8MCkrTWF0aC5pbXVsKE8sbHQpfDAsYT1hK01hdGguaW11bChPLGN0KXwwLG49bitNYXRoLmltdWwoTCxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKEwsaHQpfDApK01hdGguaW11bChDLGZ0KXwwLGE9YStNYXRoLmltdWwoQyxodCl8MDt2YXIgQ3Q9KGMrKG49bitNYXRoLmltdWwoTSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKE0sbXQpfDApK01hdGguaW11bChTLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFMsbXQpfDApKyhpPj4+MTMpfDApKyhDdD4+PjI2KXwwLEN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGF0KSxpPShpPU1hdGguaW11bChCLG90KSkrTWF0aC5pbXVsKE4sYXQpfDAsYT1NYXRoLmltdWwoTixvdCksbj1uK01hdGguaW11bChELGx0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxjdCl8MCkrTWF0aC5pbXVsKFIsbHQpfDAsYT1hK01hdGguaW11bChSLGN0KXwwLG49bitNYXRoLmltdWwoSSxmdCl8MCxpPShpPWkrTWF0aC5pbXVsKEksaHQpfDApK01hdGguaW11bChPLGZ0KXwwLGE9YStNYXRoLmltdWwoTyxodCl8MDt2YXIgUHQ9KGMrKG49bitNYXRoLmltdWwoTCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEwsbXQpfDApK01hdGguaW11bChDLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEMsbXQpfDApKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGx0KSxpPShpPU1hdGguaW11bChCLGN0KSkrTWF0aC5pbXVsKE4sbHQpfDAsYT1NYXRoLmltdWwoTixjdCksbj1uK01hdGguaW11bChELGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxodCl8MCkrTWF0aC5pbXVsKFIsZnQpfDAsYT1hK01hdGguaW11bChSLGh0KXwwO3ZhciBJdD0oYysobj1uK01hdGguaW11bChJLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoSSxtdCl8MCkrTWF0aC5pbXVsKE8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoTyxtdCl8MCkrKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsZnQpLGk9KGk9TWF0aC5pbXVsKEIsaHQpKStNYXRoLmltdWwoTixmdCl8MCxhPU1hdGguaW11bChOLGh0KTt2YXIgT3Q9KGMrKG49bitNYXRoLmltdWwoRCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEQsbXQpfDApK01hdGguaW11bChSLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFIsbXQpfDApKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2Mzt2YXIgenQ9KGMrKG49TWF0aC5pbXVsKEIsZHQpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEIsbXQpKStNYXRoLmltdWwoTixkdCl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGE9TWF0aC5pbXVsKE4sbXQpKSsoaT4+PjEzKXwwKSsoenQ+Pj4yNil8MCx6dCY9NjcxMDg4NjMsbFswXT1ndCxsWzFdPXZ0LGxbMl09eXQsbFszXT14dCxsWzRdPWJ0LGxbNV09X3QsbFs2XT13dCxsWzddPVR0LGxbOF09a3QsbFs5XT1BdCxsWzEwXT1NdCxsWzExXT1TdCxsWzEyXT1FdCxsWzEzXT1MdCxsWzE0XT1DdCxsWzE1XT1QdCxsWzE2XT1JdCxsWzE3XT1PdCxsWzE4XT16dCwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuKG5ldyBnKS5tdWxwKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9TWF0aC5pbXVsfHwoZD1wKSxhLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP2QodGhpcyx0LGUpOnI8NjM/cCh0aGlzLHQsZSk6cjwxMDI0P2Z1bmN0aW9uKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSxjPU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTtjPD1sO2MrKyl7dmFyIHU9YS1jLGY9KDB8dC53b3Jkc1t1XSkqKDB8ZS53b3Jkc1tjXSksaD02NzEwODg2MyZmO3M9NjcxMDg4NjMmKGg9aCtzfDApLGkrPShvPShvPW8rKGYvNjcxMDg4NjR8MCl8MCkrKGg+Pj4yNil8MCk+Pj4yNixvJj02NzEwODg2M31yLndvcmRzW2FdPXMsbj1vLG89aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1thXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfSh0aGlzLHQsZSk6bSh0aGlzLHQsZSl9LGcucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGcucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSxjPU1hdGguc2luKDIqTWF0aC5QSS9zKSx1PTA7dTxpO3UrPXMpZm9yKHZhciBmPWwsaD1jLHA9MDtwPG87cCsrKXt2YXIgZD1yW3UrcF0sbT1uW3UrcF0sZz1yW3UrcCtvXSx2PW5bdStwK29dLHk9ZipnLWgqdjt2PWYqditoKmcsZz15LHJbdStwXT1kK2csblt1K3BdPW0rdixyW3UrcCtvXT1kLWcsblt1K3Arb109bS12LHAhPT1zJiYoeT1sKmYtYypoLGg9bCpoK2MqZixmPXkpfX0sZy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGcucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGcucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGcucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxnLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxnLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLGg9ci53b3JkcztoLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxhLHUsZixuLGkpO2Zvcih2YXIgcD0wO3A8bjtwKyspe3ZhciBkPXNbcF0qdVtwXS1sW3BdKmZbcF07bFtwXT1zW3BdKmZbcF0rbFtwXSp1W3BdLHNbcF09ZH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxoLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShoLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoaCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLG0odGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LGE9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPWE+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJmF9cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sYS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxhLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxhLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IGEoMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixhPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIG89MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcz10aGlzLndvcmRzW2VdJmEsbD0oMHx0aGlzLndvcmRzW2VdKS1zPDxyO3RoaXMud29yZHNbZV09bHxvLG89cz4+PjI2LXJ9byYmKHRoaXMud29yZHNbZV09byx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sYS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIGE9dCUyNixvPU1hdGgubWluKCh0LWEpLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+YTw8YSxsPXI7aWYoaS09byxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciBjPTA7YzxvO2MrKylsLndvcmRzW2NdPXRoaXMud29yZHNbY107bC5sZW5ndGg9b31pZigwPT09byk7ZWxzZSBpZih0aGlzLmxlbmd0aD5vKWZvcih0aGlzLmxlbmd0aC09byxjPTA7Yzx0aGlzLmxlbmd0aDtjKyspdGhpcy53b3Jkc1tjXT10aGlzLndvcmRzW2Mrb107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdT0wO2ZvcihjPXRoaXMubGVuZ3RoLTE7Yz49MCYmKDAhPT11fHxjPj1pKTtjLS0pe3ZhciBmPTB8dGhpcy53b3Jkc1tjXTt0aGlzLndvcmRzW2NdPXU8PDI2LWF8Zj4+PmEsdT1mJnN9cmV0dXJuIGwmJjAhPT11JiYobC53b3Jkc1tsLmxlbmd0aCsrXT11KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sYS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxhLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sYS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxhLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sYS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7cmV0dXJuISh0aGlzLmxlbmd0aDw9cikmJiEhKHRoaXMud29yZHNbcl0maSl9LGEucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxhLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxhLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sYS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sYS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxhLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxhLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sYS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIHM9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrczt2YXIgbD0oMHx0LndvcmRzW2ldKSplO3M9KChhLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylzPShhPSgwfHRoaXMud29yZHNbaStyXSkrcyk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oLTE9PT1zKSxzPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXM9KGE9LSgwfHRoaXMud29yZHNbaV0pK3MpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHRoaXMubGVuZ3RoLHQubGVuZ3RoKSxuPXRoaXMuY2xvbmUoKSxpPXQsbz0wfGkud29yZHNbaS5sZW5ndGgtMV07MCE9PShyPTI2LXRoaXMuX2NvdW50Qml0cyhvKSkmJihpPWkudXNobG4ociksbi5pdXNobG4ociksbz0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLGw9bi5sZW5ndGgtaS5sZW5ndGg7aWYoIm1vZCIhPT1lKXsocz1uZXcgYShudWxsKSkubGVuZ3RoPWwrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspcy53b3Jkc1tjXT0wfXZhciB1PW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLGwpOzA9PT11Lm5lZ2F0aXZlJiYobj11LHMmJihzLndvcmRzW2xdPTEpKTtmb3IodmFyIGY9bC0xO2Y+PTA7Zi0tKXt2YXIgaD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2ZdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2YtMV0pO2ZvcihoPU1hdGgubWluKGgvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGgsZik7MCE9PW4ubmVnYXRpdmU7KWgtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGYpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tmXT1oKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSwiZGl2IiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxhLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGEoMCksbW9kOm5ldyBhKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD8iZGl2Ij09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSk7dmFyIGksbyxzfSxhLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsImRpdiIsITEpLmRpdn0sYS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCExKS5tb2R9LGEucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITApLm1vZH0sYS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksYT1yLmNtcChuKTtyZXR1cm4gYTwwfHwxPT09aSYmMD09PWE/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxhLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LGEucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sYS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IGEoMSksbz1uZXcgYSgwKSxzPW5ldyBhKDApLGw9bmV3IGEoMSksYz0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrYztmb3IodmFyIHU9ci5jbG9uZSgpLGY9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBoPTAscD0xOzA9PShlLndvcmRzWzBdJnApJiZoPDI2OysraCxwPDw9MSk7aWYoaD4wKWZvcihlLml1c2hybihoKTtoLS0gPjA7KShpLmlzT2RkKCl8fG8uaXNPZGQoKSkmJihpLmlhZGQodSksby5pc3ViKGYpKSxpLml1c2hybigxKSxvLml1c2hybigxKTtmb3IodmFyIGQ9MCxtPTE7MD09KHIud29yZHNbMF0mbSkmJmQ8MjY7KytkLG08PD0xKTtpZihkPjApZm9yKHIuaXVzaHJuKGQpO2QtLSA+MDspKHMuaXNPZGQoKXx8bC5pc09kZCgpKSYmKHMuaWFkZCh1KSxsLmlzdWIoZikpLHMuaXVzaHJuKDEpLGwuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKHMpLG8uaXN1YihsKSk6KHIuaXN1YihlKSxzLmlzdWIoaSksbC5pc3ViKG8pKX1yZXR1cm57YTpzLGI6bCxnY2Q6ci5pdXNobG4oYyl9fSxhLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpLG89bmV3IGEoMSkscz1uZXcgYSgwKSxsPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGM9MCx1PTE7MD09KGUud29yZHNbMF0mdSkmJmM8MjY7KytjLHU8PD0xKTtpZihjPjApZm9yKGUuaXVzaHJuKGMpO2MtLSA+MDspby5pc09kZCgpJiZvLmlhZGQobCksby5pdXNocm4oMSk7Zm9yKHZhciBmPTAsaD0xOzA9PShyLndvcmRzWzBdJmgpJiZmPDI2OysrZixoPDw9MSk7aWYoZj4wKWZvcihyLml1c2hybihmKTtmLS0gPjA7KXMuaXNPZGQoKSYmcy5pYWRkKGwpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksby5pc3ViKHMpKTooci5pc3ViKGUpLHMuaXN1YihvKSl9cmV0dXJuKGk9MD09PWUuY21wbigxKT9vOnMpLmNtcG4oMCk8MCYmaS5pYWRkKHQpLGl9LGEucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgYT1lO2U9cixyPWF9ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxhLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxhLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxhLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgYT1pLG89cjswIT09YSYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPTB8dGhpcy53b3Jkc1tvXTthPShzKz1hKT4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbb109c31yZXR1cm4gMCE9PWEmJih0aGlzLndvcmRzW29dPWEsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGEucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGUscj10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWU9MTtlbHNle3ImJih0PS10KSxuKHQ8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtlPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxhLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sYS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sYS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LGEucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LGEucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sYS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUKHQpfSxhLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGEucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxhLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sYS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGEucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxhLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sYS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciB2PXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24geSh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgYShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgYSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24geCgpe3kuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBiKCl7eS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF8oKXt5LmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gdygpe3kuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBUKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9YS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gayh0KXtULmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBhKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXkucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LHkucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksZT0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1yLnN0cmlwP3Iuc3RyaXAoKTpyLl9zdHJpcCgpLHJ9LHkucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saSh4LHkpLHgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgaT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZhKTw8NHxpPj4+MjIsaT1hfWk+Pj49MjIsdC53b3Jkc1tuLTEwXT1pLDA9PT1pJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLHkpLGkoXyx5KSxpKHcseSksdy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxhLl9wcmltZT1mdW5jdGlvbih0KXtpZih2W3RdKXJldHVybiB2W3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgeDtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgYjtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgXztlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyB3fXJldHVybiB2W3RdPWUsZX0sVC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFQucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFQucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFQucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LFQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LFQucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxULnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxULnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LFQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxULnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LFQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LFQucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sVC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgYSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIHM9bmV3IGEoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1PW5ldyBhKDIqdSp1KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codSxjKS5jbXAobCk7KXUucmVkSUFkZChsKTtmb3IodmFyIGY9dGhpcy5wb3codSxpKSxoPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSkscD10aGlzLnBvdyh0LGkpLGQ9bzswIT09cC5jbXAocyk7KXtmb3IodmFyIG09cCxnPTA7MCE9PW0uY21wKHMpO2crKyltPW0ucmVkU3FyKCk7bihnPGQpO3ZhciB2PXRoaXMucG93KGYsbmV3IGEoMSkuaXVzaGxuKGQtZy0xKSk7aD1oLnJlZE11bCh2KSxmPXYucmVkU3FyKCkscD1wLnJlZE11bChmKSxkPWd9cmV0dXJuIGh9LFQucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sVC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMSkudG9SZWQodGhpcyk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgYSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGk9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgYz1lLndvcmRzW25dLHU9bC0xO3U+PTA7dS0tKXt2YXIgZj1jPj51JjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09Znx8MCE9PW8/KG88PD0xLG98PWYsKDQ9PT0rK3N8fDA9PT1uJiYwPT09dSkmJihpPXRoaXMubXVsKGkscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBpfSxULnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxULnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sYS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0KX0saShrLFQpLGsucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxrLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHZvaWQgMD09PWV8fGUsdGhpcyl9LHtidWZmZXI6Mn1dLDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksZj0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbZisrXT1sW25dKTtpZigxJnIpe3ZhciBoPXVbMV07dVsxXT11WzBdLHVbMF09aH19fXJldHVybiBvfX0se31dLDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZih0KTtjYXNlIDI6cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/Yyh0LHQsZSwhMCk6aCh0LGUpO2Nhc2UgMzpyZXR1cm4gYyh0LGUsciwhMSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJveC1pbnRlcnNlY3Q6IEludmFsaWQgYXJndW1lbnRzIil9fTt2YXIgbixpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgiLi9saWIvc3dlZXAiKSxvPXQoIi4vbGliL2ludGVyc2VjdCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQ7KytyKWlmKCEoZVtyXTw9ZVtyK3RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MCxvPTAsbD10Lmxlbmd0aDtvPGw7KytvKXt2YXIgYz10W29dO2lmKCFzKGUsYykpe2Zvcih2YXIgdT0wO3U8MiplOysrdSlyW2krK109Y1t1XTtuW2ErK109b319cmV0dXJuIGF9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgcz10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKCEoczw9MHx8Yzw9MCkpe3ZhciB1PXRbMF0ubGVuZ3RoPj4+MTtpZighKHU8PTApKXt2YXIgZixoPWkubWFsbG9jRG91YmxlKDIqdSpzKSxwPWkubWFsbG9jSW50MzIocyk7aWYoKHM9bCh0LHUsaCxwKSk+MCl7aWYoMT09PXUmJm4pYS5pbml0KHMpLGY9YS5zd2VlcENvbXBsZXRlKHUsciwwLHMsaCxwLDAscyxoLHApO2Vsc2V7dmFyIGQ9aS5tYWxsb2NEb3VibGUoMip1KmMpLG09aS5tYWxsb2NJbnQzMihjKTsoYz1sKGUsdSxkLG0pKT4wJiYoYS5pbml0KHMrYyksZj0xPT09dT9hLnN3ZWVwQmlwYXJ0aXRlKHUsciwwLHMsaCxwLDAsYyxkLG0pOm8odSxyLG4scyxoLHAsYyxkLG0pLGkuZnJlZShkKSxpLmZyZWUobSkpfWkuZnJlZShoKSxpLmZyZWUocCl9cmV0dXJuIGZ9fX1mdW5jdGlvbiB1KHQsZSl7bi5wdXNoKFt0LGVdKX1mdW5jdGlvbiBmKHQpe3JldHVybiBuPVtdLGModCx0LHUsITApLG59ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBuPVtdLGModCxlLHUsITEpLG59fSx7Ii4vbGliL2ludGVyc2VjdCI6MzcsIi4vbGliL3N3ZWVwIjo0MSwidHlwZWRhcnJheS1wb29sIjozMDh9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7cmV0dXJuIGktbj5sLXM/ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtmb3IodmFyIGY9Mip0LGg9bixwPWYqbjtoPGk7KytoLHArPWYpe3ZhciBkPWFbZStwXSxtPWFbZStwK3RdLGc9b1toXTt0OmZvcih2YXIgdj1zLHk9ZipzO3Y8bDsrK3YseSs9Zil7dmFyIHg9Y1tlK3ldLGI9Y1tlK3krdF0sXz11W3ZdO2lmKCEoYjxkfHxtPHgpKXtmb3IodmFyIHc9ZSsxO3c8dDsrK3cpe3ZhciBUPWFbdytwXSxrPWFbdyt0K3BdLEE9Y1t3K3ldLE09Y1t3K3QreV07aWYoazxBfHxNPFQpY29udGludWUgdH12YXIgUz1yKGcsXyk7aWYodm9pZCAwIT09UylyZXR1cm4gU319fX0odCxlLHIsbixpLGEsbyxzLGwsYyx1KTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1zLHA9ZipzO2g8bDsrK2gscCs9Zil7dmFyIGQ9Y1tlK3BdLG09Y1tlK3ArdF0sZz11W2hdO3Q6Zm9yKHZhciB2PW4seT1mKm47djxpOysrdix5Kz1mKXt2YXIgeD1hW2UreV0sYj1hW2UreSt0XSxfPW9bdl07aWYoIShtPHh8fGI8ZCkpe2Zvcih2YXIgdz1lKzE7dzx0Oysrdyl7dmFyIFQ9YVt3K3ldLGs9YVt3K3QreV0sQT1jW3crcF0sTT1jW3crdCtwXTtpZihrPEF8fE08VCljb250aW51ZSB0fXZhciBTPXIoXyxnKTtpZih2b2lkIDAhPT1TKXJldHVybiBTfX19fSh0LGUscixuLGksYSxvLHMsbCxjLHUpfTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7cmV0dXJuIGEtaT5jLWw/bj9mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj11W3ZdO2lmKCEoeDw9ZHx8bTx4KSl7Zm9yKHZhciBfPWUrMTtfPHQ7KytfKXt2YXIgdz1hW18rcF0sVD1hW18rdCtwXSxrPWNbXyt5XSxBPWNbXyt0K3ldO2lmKFQ8a3x8QTx3KWNvbnRpbnVlIHR9dmFyIE09cihiLGcpO2lmKHZvaWQgMCE9PU0pcmV0dXJuIE19fX19KHQsZSxyLGksYSxvLHMsbCxjLHUsZik6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtmb3IodmFyIGY9Mip0LGg9bixwPWYqbjtoPGk7KytoLHArPWYpe3ZhciBkPWFbZStwXSxtPWFbZStwK3RdLGc9b1toXTt0OmZvcih2YXIgdj1zLHk9ZipzO3Y8bDsrK3YseSs9Zil7dmFyIHg9Y1tlK3ldLGI9dVt2XTtpZighKHg8ZHx8bTx4KSl7Zm9yKHZhciBfPWUrMTtfPHQ7KytfKXt2YXIgdz1hW18rcF0sVD1hW18rdCtwXSxrPWNbXyt5XSxBPWNbXyt0K3ldO2lmKFQ8a3x8QTx3KWNvbnRpbnVlIHR9dmFyIE09cihnLGIpO2lmKHZvaWQgMCE9PU0pcmV0dXJuIE19fX19KHQsZSxyLGksYSxvLHMsbCxjLHUsZik6bj9mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1zLHA9ZipzO2g8bDsrK2gscCs9Zil7dmFyIGQ9Y1tlK3BdLG09dVtoXTt0OmZvcih2YXIgZz1uLHY9ZipuO2c8aTsrK2csdis9Zil7dmFyIHk9YVtlK3ZdLHg9YVtlK3YrdF0sYj1vW2ddO2lmKCEoZDw9eXx8eDxkKSl7Zm9yKHZhciBfPWUrMTtfPHQ7KytfKXt2YXIgdz1hW18rdl0sVD1hW18rdCt2XSxrPWNbXytwXSxBPWNbXyt0K3BdO2lmKFQ8a3x8QTx3KWNvbnRpbnVlIHR9dmFyIE09cihtLGIpO2lmKHZvaWQgMCE9PU0pcmV0dXJuIE19fX19KHQsZSxyLGksYSxvLHMsbCxjLHUsZik6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtmb3IodmFyIGY9Mip0LGg9cyxwPWYqcztoPGw7KytoLHArPWYpe3ZhciBkPWNbZStwXSxtPXVbaF07dDpmb3IodmFyIGc9bix2PWYqbjtnPGk7KytnLHYrPWYpe3ZhciB5PWFbZSt2XSx4PWFbZSt2K3RdLGI9b1tnXTtpZighKGQ8eXx8eDxkKSl7Zm9yKHZhciBfPWUrMTtfPHQ7KytfKXt2YXIgdz1hW18rdl0sVD1hW18rdCt2XSxrPWNbXytwXSxBPWNbXyt0K3BdO2lmKFQ8a3x8QTx3KWNvbnRpbnVlIHR9dmFyIE09cihiLG0pO2lmKHZvaWQgMCE9PU0pcmV0dXJuIE19fX19KHQsZSxyLGksYSxvLHMsbCxjLHUsZil9fXIucGFydGlhbD1uKCExKSxyLmZ1bGw9bighMCl9LHt9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSx1LHcsVCxrLEEpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqaS5sb2cyKGUrMSkqKHQrMSl8MCxhPWkubmV4dFBvdzIoNipyKTt2Lmxlbmd0aDxhJiYobi5mcmVlKHYpLHY9bi5tYWxsb2NJbnQzMihhKSk7dmFyIG89aS5uZXh0UG93MigyKnIpO3kubGVuZ3RoPG8mJihuLmZyZWUoeSkseT1uLm1hbGxvY0RvdWJsZShvKSl9KHQsYStUKTt2YXIgTSxTPTAsRT0yKnQ7eChTKyssMCwwLGEsMCxULHI/MTY6MCwtMS8wLDEvMCkscnx8eChTKyssMCwwLFQsMCxhLDEsLTEvMCwxLzApO2Zvcig7Uz4wOyl7dmFyIEw9NiooUy09MSksQz12W0xdLFA9dltMKzFdLEk9dltMKzJdLE89dltMKzNdLHo9dltMKzRdLEQ9dltMKzVdLFI9MipTLEY9eVtSXSxCPXlbUisxXSxOPTEmRCxqPSEhKDE2JkQpLFU9dSxWPXcsSD1rLHE9QTtpZihOJiYoVT1rLFY9QSxIPXUscT13KSwhKDImRCYmKEk9cCh0LEMsUCxJLFUsVixCKSxQPj1JKXx8NCZEJiYoUD1kKHQsQyxQLEksVSxWLEYpKT49SSkpe3ZhciBHPUktUCxZPXotTztpZihqKXtpZih0KkcqKEcrWSk8MTw8MjIpe2lmKHZvaWQgMCE9PShNPWwuc2NhbkNvbXBsZXRlKHQsQyxlLFAsSSxVLFYsTyx6LEgscSkpKXJldHVybiBNO2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oRyxZKTwxMjgpe2lmKHZvaWQgMCE9PShNPW8odCxDLGUsTixQLEksVSxWLE8seixILHEpKSlyZXR1cm4gTTtjb250aW51ZX1pZih0KkcqWTwxPDwyMil7aWYodm9pZCAwIT09KE09bC5zY2FuQmlwYXJ0aXRlKHQsQyxlLE4sUCxJLFUsVixPLHosSCxxKSkpcmV0dXJuIE07Y29udGludWV9fXZhciBXPWYodCxDLFAsSSxVLFYsRixCKTtpZihQPFcpaWYodCooVy1QKTwxMjgpe2lmKHZvaWQgMCE9PShNPXModCxDKzEsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIGlmKEM9PT10LTIpe2lmKHZvaWQgMCE9PShNPU4/bC5zd2VlcEJpcGFydGl0ZSh0LGUsTyx6LEgscSxQLFcsVSxWKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIHgoUysrLEMrMSxQLFcsTyx6LE4sLTEvMCwxLzApLHgoUysrLEMrMSxPLHosUCxXLDFeTiwtMS8wLDEvMCk7aWYoVzxJKXt2YXIgWD1jKHQsQyxPLHosSCxxKSxaPUhbRSpYK0NdLEo9aCh0LEMsWCx6LEgscSxaKTtpZihKPHomJngoUysrLEMsVyxJLEoseiwoNHxOKSsoaj8xNjowKSxaLEIpLE88WCYmeChTKyssQyxXLEksTyxYLCgyfE4pKyhqPzE2OjApLEYsWiksWCsxPT09Sil7aWYodm9pZCAwIT09KE09aj9fKHQsQyxlLFcsSSxVLFYsWCxILHFbWF0pOmIodCxDLGUsTixXLEksVSxWLFgsSCxxW1hdKSkpcmV0dXJuIE19ZWxzZSBpZihYPEope3ZhciBLO2lmKGope2lmKEs9bSh0LEMsVyxJLFUsVixaKSxXPEspe3ZhciBRPWgodCxDLFcsSyxVLFYsWik7aWYoQz09PXQtMil7aWYoVzxRJiZ2b2lkIDAhPT0oTT1sLnN3ZWVwQ29tcGxldGUodCxlLFcsUSxVLFYsWCxKLEgscSkpKXJldHVybiBNO2lmKFE8SyYmdm9pZCAwIT09KE09bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxLLFUsVixYLEosSCxxKSkpcmV0dXJuIE19ZWxzZSBXPFEmJngoUysrLEMrMSxXLFEsWCxKLDE2LC0xLzAsMS8wKSxRPEsmJih4KFMrKyxDKzEsUSxLLFgsSiwwLC0xLzAsMS8wKSx4KFMrKyxDKzEsWCxKLFEsSywxLC0xLzAsMS8wKSl9fWVsc2UgSz1OP2codCxDLFcsSSxVLFYsWik6bSh0LEMsVyxJLFUsVixaKSxXPEsmJihDPT09dC0yP009Tj9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxYLEosSCxxLFcsSyxVLFYpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFcsSyxVLFYsWCxKLEgscSk6KHgoUysrLEMrMSxXLEssWCxKLE4sLTEvMCwxLzApLHgoUysrLEMrMSxYLEosVyxLLDFeTiwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vYnJ1dGUiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoIi4vc3dlZXAiKSxjPXQoIi4vbWVkaWFuIiksdT10KCIuL3BhcnRpdGlvbiIpLGY9dSgiIShsbz49cDApJiYhKHAxPj1oaSkiKSxoPXUoImxvPT09cDAiKSxwPXUoImxvPHAwIiksZD11KCJoaTw9cDAiKSxtPXUoImxvPD1wMCYmcDA8PWhpIiksZz11KCJsbzxwMCYmcDA8PWhpIiksdj1uLm1hbGxvY0ludDMyKDEwMjQpLHk9bi5tYWxsb2NEb3VibGUoMTAyNCk7ZnVuY3Rpb24geCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9Nip0O3ZbY109ZSx2W2MrMV09cix2W2MrMl09bix2W2MrM109aSx2W2MrNF09YSx2W2MrNV09bzt2YXIgdT0yKnQ7eVt1XT1zLHlbdSsxXT1sfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj0yKnQsaD1sKmYscD1jW2grZV07dDpmb3IodmFyIGQ9aSxtPWkqZjtkPGE7KytkLG0rPWYpe3ZhciBnPW9bbStlXSx2PW9bbStlK3RdO2lmKCEocDxnfHx2PHApJiYoIW58fHAhPT1nKSl7Zm9yKHZhciB5LHg9c1tkXSxiPWUrMTtiPHQ7KytiKXtnPW9bbStiXSx2PW9bbStiK3RdO3ZhciBfPWNbaCtiXSx3PWNbaCtiK3RdO2lmKHY8X3x8dzxnKWNvbnRpbnVlIHR9aWYodm9pZCAwIT09KHk9bj9yKHUseCk6cih4LHUpKSlyZXR1cm4geX19fWZ1bmN0aW9uIF8odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9Mip0LGY9cyp1LGg9bFtmK2VdO3Q6Zm9yKHZhciBwPW4sZD1uKnU7cDxpOysrcCxkKz11KXt2YXIgbT1vW3BdO2lmKG0hPT1jKXt2YXIgZz1hW2QrZV0sdj1hW2QrZSt0XTtpZighKGg8Z3x8djxoKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXtnPWFbZCt5XSx2PWFbZCt5K3RdO3ZhciB4PWxbZit5XSxiPWxbZit5K3RdO2lmKHY8eHx8YjxnKWNvbnRpbnVlIHR9dmFyIF89cihtLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19fSx7Ii4vYnJ1dGUiOjM2LCIuL21lZGlhbiI6MzgsIi4vcGFydGl0aW9uIjozOSwiLi9zd2VlcCI6NDEsImJpdC10d2lkZGxlIjozMiwidHlwZWRhcnJheS1wb29sIjozMDh9XSwzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe2lmKGE8PXIrMSlyZXR1cm4gcjt2YXIgbD1yLGM9YSx1PWErcj4+PjEsZj0yKnQsaD11LHA9b1tmKnUrZV07Zm9yKDtsPGM7KXtpZihjLWw8OCl7aSh0LGUsbCxjLG8scykscD1vW2YqdStlXTticmVha312YXIgZD1jLWwsbT1NYXRoLnJhbmRvbSgpKmQrbHwwLGc9b1tmKm0rZV0sdj1NYXRoLnJhbmRvbSgpKmQrbHwwLHk9b1tmKnYrZV0seD1NYXRoLnJhbmRvbSgpKmQrbHwwLGI9b1tmKngrZV07Zzw9eT9iPj15PyhoPXYscD15KTpnPj1iPyhoPW0scD1nKTooaD14LHA9Yik6eT49Yj8oaD12LHA9eSk6Yj49Zz8oaD1tLHA9Zyk6KGg9eCxwPWIpO2Zvcih2YXIgXz1mKihjLTEpLHc9ZipoLFQ9MDtUPGY7KytULCsrXywrK3cpe3ZhciBrPW9bX107b1tfXT1vW3ddLG9bd109a312YXIgQT1zW2MtMV07c1tjLTFdPXNbaF0sc1toXT1BLGg9bih0LGUsbCxjLTEsbyxzLHApO2ZvcihfPWYqKGMtMSksdz1mKmgsVD0wO1Q8ZjsrK1QsKytfLCsrdyl7az1vW19dO29bX109b1t3XSxvW3ddPWt9QT1zW2MtMV07aWYoc1tjLTFdPXNbaF0sc1toXT1BLHU8aCl7Zm9yKGM9aC0xO2w8YyYmb1tmKihjLTEpK2VdPT09cDspYy09MTtjKz0xfWVsc2V7aWYoIShoPHUpKWJyZWFrO2ZvcihsPWgrMTtsPGMmJm9bZipsK2VdPT09cDspbCs9MX19cmV0dXJuIG4odCxlLHIsdSxvLHMsb1tmKnUrZV0pfTt2YXIgbj10KCIuL3BhcnRpdGlvbiIpKCJsbzxwMCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxmPW8qKGwtMSk7dT5yJiZpW2YrZV0+YzstLXUsZi09byl7Zm9yKHZhciBoPWYscD1mK28sZD0wO2Q8bzsrK2QsKytoLCsrcCl7dmFyIG09aVtoXTtpW2hdPWlbcF0saVtwXT1tfXZhciBnPWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPWd9fX0seyIuL3BhcnRpdGlvbiI6Mzl9XSwzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19O3ZhciBuPXsibG89PT1wMCI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl09PT1vKWlmKHU9PT1oKXUrPTEsYys9cztlbHNle2Zvcih2YXIgcD0wO3M+cDsrK3Ape3ZhciBkPWlbbCtwXTtpW2wrcF09aVtjXSxpW2MrK109ZH12YXIgbT1hW2hdO2FbaF09YVt1XSxhW3UrK109bX19cmV0dXJuIHV9LCJsbzxwMCI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl08bylpZih1PT09aCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIHA9MDtzPnA7KytwKXt2YXIgZD1pW2wrcF07aVtsK3BdPWlbY10saVtjKytdPWR9dmFyIG09YVtoXTthW2hdPWFbdV0sYVt1KytdPW19fXJldHVybiB1fSwibG88PXAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj10K2UsaD1yO24+aDsrK2gsbCs9cyl7aWYoaVtsK2ZdPD1vKWlmKHU9PT1oKXUrPTEsYys9cztlbHNle2Zvcih2YXIgcD0wO3M+cDsrK3Ape3ZhciBkPWlbbCtwXTtpW2wrcF09aVtjXSxpW2MrK109ZH12YXIgbT1hW2hdO2FbaF09YVt1XSxhW3UrK109bX19cmV0dXJuIHV9LCJoaTw9cDAiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPXQrZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl08PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImxvPHAwJiZwMDw9aGkiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPWUsaD10K2UscD1yO24+cDsrK3AsbCs9cyl7dmFyIGQ9aVtsK2ZdLG09aVtsK2hdO2lmKGQ8byYmbzw9bSlpZih1PT09cCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIGc9MDtzPmc7KytnKXt2YXIgdj1pW2wrZ107aVtsK2ddPWlbY10saVtjKytdPXZ9dmFyIHk9YVtwXTthW3BdPWFbdV0sYVt1KytdPXl9fXJldHVybiB1fSwibG88PXAwJiZwMDw9aGkiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPWUsaD10K2UscD1yO24+cDsrK3AsbCs9cyl7dmFyIGQ9aVtsK2ZdLG09aVtsK2hdO2lmKGQ8PW8mJm88PW0paWYodT09PXApdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBnPTA7cz5nOysrZyl7dmFyIHY9aVtsK2ddO2lbbCtnXT1pW2NdLGlbYysrXT12fXZhciB5PWFbcF07YVtwXT1hW3VdLGFbdSsrXT15fX1yZXR1cm4gdX0sIiEobG8+PXAwKSYmIShwMT49aGkpIjpmdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD0yKnQsYz1sKnIsdT1jLGY9cixoPWUscD10K2UsZD1yO24+ZDsrK2QsYys9bCl7dmFyIG09aVtjK2hdLGc9aVtjK3BdO2lmKCEobT49b3x8cz49ZykpaWYoZj09PWQpZis9MSx1Kz1sO2Vsc2V7Zm9yKHZhciB2PTA7bD52Oysrdil7dmFyIHk9aVtjK3ZdO2lbYyt2XT1pW3VdLGlbdSsrXT15fXZhciB4PWFbZF07YVtkXT1hW2ZdLGFbZisrXT14fX1yZXR1cm4gZn19fSx7fV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9MTI4P24oMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsdSl7dmFyIGY9KHItZSsxKS82fDAsaD1lK2YscD1yLWYsZD1lK3I+PjEsbT1kLWYsZz1kK2Ysdj1oLHk9bSx4PWQsYj1nLF89cCx3PWUrMSxUPXItMSxrPTA7bCh2LHksdSkmJihrPXYsdj15LHk9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7bCh2LHgsdSkmJihrPXYsdj14LHg9ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bCh2LGIsdSkmJihrPXYsdj1iLGI9ayk7bCh4LGIsdSkmJihrPXgseD1iLGI9ayk7bCh5LF8sdSkmJihrPXkseT1fLF89ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7Zm9yKHZhciBBPXVbMip5XSxNPXVbMip5KzFdLFM9dVsyKmJdLEU9dVsyKmIrMV0sTD0yKnYsQz0yKngsUD0yKl8sST0yKmgsTz0yKmQsej0yKnAsRD0wO0Q8MjsrK0Qpe3ZhciBSPXVbTCtEXSxGPXVbQytEXSxCPXVbUCtEXTt1W0krRF09Uix1W08rRF09Rix1W3orRF09Qn1hKG0sZSx1KSxhKGcscix1KTtmb3IodmFyIE49dztOPD1UOysrTilpZihjKE4sQSxNLHUpKU4hPT13JiZpKE4sdyx1KSwrK3c7ZWxzZSBpZighYyhOLFMsRSx1KSlmb3IoOzspe2lmKGMoVCxTLEUsdSkpe2MoVCxBLE0sdSk/KG8oTix3LFQsdSksKyt3LC0tVCk6KGkoTixULHUpLC0tVCk7YnJlYWt9aWYoLS1UPE4pYnJlYWt9cyhlLHctMSxBLE0sdSkscyhyLFQrMSxTLEUsdSksdy0yLWU8PTMyP24oZSx3LTIsdSk6dChlLHctMix1KTtyLShUKzIpPD0zMj9uKFQrMixyLHUpOnQoVCsyLHIsdSk7VC13PD0zMj9uKHcsVCx1KTp0KHcsVCx1KX0oMCxlLTEsdCl9O2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBpKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIGEodCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gbyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGwodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPWkubmV4dFBvdzIodCk7by5sZW5ndGg8ZSYmKG4uZnJlZShvKSxvPW4ubWFsbG9jSW50MzIoZSkpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtmLmxlbmd0aDxlJiYobi5mcmVlKGYpLGY9bi5tYWxsb2NJbnQzMihlKSk7dmFyIHI9OCplO2gubGVuZ3RoPHImJihuLmZyZWUoaCksaD1uLm1hbGxvY0RvdWJsZShyKSl9LHN3ZWVwQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSx1LGYsbSxnLHYpe2Zvcih2YXIgeT0wLHg9Mip0LGI9dC0xLF89eC0xLHc9cjt3PG47Kyt3KXt2YXIgVD11W3ddLGs9eCp3O2hbeSsrXT1pW2srYl0saFt5KytdPS0oVCsxKSxoW3krK109aVtrK19dLGhbeSsrXT1UfWZvcih3PWY7dzxtOysrdyl7VD12W3ddKygxPDwyOCk7dmFyIEE9eCp3O2hbeSsrXT1nW0ErYl0saFt5KytdPS1ULGhbeSsrXT1nW0ErX10saFt5KytdPVR9dmFyIE09eT4+PjE7YShoLE0pO3ZhciBTPTAsRT0wO2Zvcih3PTA7dzxNOysrdyl7dmFyIEw9MHxoWzIqdysxXTtpZihMPj0xPDwyOClwKGwsYyxFLS0sTD1MLSgxPDwyOCl8MCk7ZWxzZSBpZihMPj0wKXAobyxzLFMtLSxMKTtlbHNlIGlmKEw8PS0oMTw8MjgpKXtMPS1MLSgxPDwyOCl8MDtmb3IodmFyIEM9MDtDPFM7KytDKXtpZih2b2lkIDAhPT0oUD1lKG9bQ10sTCkpKXJldHVybiBQfWQobCxjLEUrKyxMKX1lbHNle0w9LUwtMXwwO2ZvcihDPTA7QzxFOysrQyl7dmFyIFA7aWYodm9pZCAwIT09KFA9ZShMLGxbQ10pKSlyZXR1cm4gUH1kKG8scyxTKyssTCl9fX0sc3dlZXBDb21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGksbSxnLHYseSx4KXtmb3IodmFyIGI9MCxfPTIqdCx3PXQtMSxUPV8tMSxrPXI7azxuOysrayl7dmFyIEE9bVtrXSsxPDwxLE09XyprO2hbYisrXT1pW00rd10saFtiKytdPS1BLGhbYisrXT1pW00rVF0saFtiKytdPUF9Zm9yKGs9ZztrPHY7KytrKXtBPXhba10rMTw8MTt2YXIgUz1fKms7aFtiKytdPXlbUyt3XSxoW2IrK109MXwtQSxoW2IrK109eVtTK1RdLGhbYisrXT0xfEF9dmFyIEU9Yj4+PjE7YShoLEUpO3ZhciBMPTAsQz0wLFA9MDtmb3Ioaz0wO2s8RTsrK2spe3ZhciBJPTB8aFsyKmsrMV0sTz0xJkk7aWYoazxFLTEmJkk+PjE9PWhbMiprKzNdPj4xJiYoTz0yLGsrPTEpLEk8MCl7Zm9yKHZhciB6PS0oST4+MSktMSxEPTA7RDxQOysrRCl7aWYodm9pZCAwIT09KFI9ZSh1W0RdLHopKSlyZXR1cm4gUn1pZigwIT09Tylmb3IoRD0wO0Q8TDsrK0Qpe2lmKHZvaWQgMCE9PShSPWUob1tEXSx6KSkpcmV0dXJuIFJ9aWYoMSE9PU8pZm9yKEQ9MDtEPEM7KytEKXt2YXIgUjtpZih2b2lkIDAhPT0oUj1lKGxbRF0seikpKXJldHVybiBSfTA9PT1PP2QobyxzLEwrKyx6KToxPT09Tz9kKGwsYyxDKysseik6Mj09PU8mJmQodSxmLFArKyx6KX1lbHNle3o9KEk+PjEpLTE7MD09PU8/cChvLHMsTC0tLHopOjE9PT1PP3AobCxjLEMtLSx6KToyPT09TyYmcCh1LGYsUC0tLHopfX19LHNjYW5CaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLGwsYyx1LGYsbSxnLHYpe3ZhciB5PTAseD0yKnQsYj1lLF89ZSt0LHc9MSxUPTE7bj9UPTE8PDI4Onc9MTw8Mjg7Zm9yKHZhciBrPWk7azxsOysrayl7dmFyIEE9ayt3LE09eCprO2hbeSsrXT1jW00rYl0saFt5KytdPS1BLGhbeSsrXT1jW00rX10saFt5KytdPUF9Zm9yKGs9ZjtrPG07KytrKXtBPWsrVDt2YXIgUz14Kms7aFt5KytdPWdbUytiXSxoW3krK109LUF9dmFyIEU9eT4+PjE7YShoLEUpO3ZhciBMPTA7Zm9yKGs9MDtrPEU7KytrKXt2YXIgQz0wfGhbMiprKzFdO2lmKEM8MCl7dmFyIFA9ITE7aWYoKEE9LUMpPj0xPDwyOD8oUD0hbixBLT0xPDwyOCk6KFA9ISFuLEEtPTEpLFApZChvLHMsTCsrLEEpO2Vsc2V7dmFyIEk9dltBXSxPPXgqQSx6PWdbTytlKzFdLEQ9Z1tPK2UrMSt0XTt0OmZvcih2YXIgUj0wO1I8TDsrK1Ipe3ZhciBGPW9bUl0sQj14KkY7aWYoIShEPGNbQitlKzFdfHxjW0IrZSsxK3RdPHopKXtmb3IodmFyIE49ZSsyO048dDsrK04paWYoZ1tPK04rdF08Y1tCK05dfHxjW0IrTit0XTxnW08rTl0pY29udGludWUgdDt2YXIgaixVPXVbRl07aWYodm9pZCAwIT09KGo9bj9yKEksVSk6cihVLEkpKSlyZXR1cm4gan19fX1lbHNlIHAobyxzLEwtLSxDLXcpfX0sc2NhbkNvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxzLGwsYyx1LGYscCl7Zm9yKHZhciBkPTAsbT0yKnQsZz1lLHY9ZSt0LHk9bjt5PGk7Kyt5KXt2YXIgeD15KygxPDwyOCksYj1tKnk7aFtkKytdPXNbYitnXSxoW2QrK109LXgsaFtkKytdPXNbYit2XSxoW2QrK109eH1mb3IoeT1jO3k8dTsrK3kpe3g9eSsxO3ZhciBfPW0qeTtoW2QrK109ZltfK2ddLGhbZCsrXT0teH12YXIgdz1kPj4+MTthKGgsdyk7dmFyIFQ9MDtmb3IoeT0wO3k8dzsrK3kpe3ZhciBrPTB8aFsyKnkrMV07aWYoazwwKXtpZigoeD0tayk+PTE8PDI4KW9bVCsrXT14LSgxPDwyOCk7ZWxzZXt2YXIgQT1wW3gtPTFdLE09bSp4LFM9ZltNK2UrMV0sRT1mW00rZSsxK3RdO3Q6Zm9yKHZhciBMPTA7TDxUOysrTCl7dmFyIEM9b1tMXSxQPWxbQ107aWYoUD09PUEpYnJlYWs7dmFyIEk9bSpDO2lmKCEoRTxzW0krZSsxXXx8c1tJK2UrMSt0XTxTKSl7Zm9yKHZhciBPPWUrMjtPPHQ7KytPKWlmKGZbTStPK3RdPHNbSStPXXx8c1tJK08rdF08ZltNK09dKWNvbnRpbnVlIHQ7dmFyIHo9cihQLEEpO2lmKHZvaWQgMCE9PXopcmV0dXJuIHp9fX19ZWxzZXtmb3IoeD1rLSgxPDwyOCksTD1ULTE7TD49MDstLUwpaWYob1tMXT09PXgpe2ZvcihPPUwrMTtPPFQ7KytPKW9bTy0xXT1vW09dO2JyZWFrfS0tVH19fX07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJiaXQtdHdpZGRsZSIpLGE9dCgiLi9zb3J0Iiksbz1uLm1hbGxvY0ludDMyKDEwMjQpLHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxmPW4ubWFsbG9jSW50MzIoMTAyNCksaD1uLm1hbGxvY0RvdWJsZSg4MTkyKTtmdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPWVbbl0sYT10W3ItMV07dFtpXT1hLGVbYV09aX1mdW5jdGlvbiBkKHQsZSxyLG4pe3Rbcl09bixlW25dPXJ9fSx7Ii4vc29ydCI6NDAsImJpdC10d2lkZGxlIjozMiwidHlwZWRhcnJheS1wb29sIjozMDh9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9tb25vdG9uZSIpLGk9dCgiLi9saWIvdHJpYW5ndWxhdGlvbiIpLGE9dCgiLi9saWIvZGVsYXVuYXkiKSxvPXQoIi4vbGliL2ZpbHRlciIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsImRlbGF1bmF5IiwhMCksZj0hIWMociwiaW50ZXJpb3IiLCEwKSxoPSEhYyhyLCJleHRlcmlvciIsITApLHA9ISFjKHIsImluZmluaXR5IiwhMSk7aWYoIWYmJiFofHwwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGQ9bih0LGUpO2lmKHV8fGYhPT1ofHxwKXtmb3IodmFyIG09aSh0Lmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuc29ydChsKX0oZSkpLGc9MDtnPGQubGVuZ3RoOysrZyl7dmFyIHY9ZFtnXTttLmFkZFRyaWFuZ2xlKHZbMF0sdlsxXSx2WzJdKX1yZXR1cm4gdSYmYSh0LG0pLGg/Zj9wP28obSwwLHApOm0uY2VsbHMoKTpvKG0sMSxwKTpvKG0sLTEpfXJldHVybiBkfX0seyIuL2xpYi9kZWxhdW5heSI6NDMsIi4vbGliL2ZpbHRlciI6NDQsIi4vbGliL21vbm90b25lIjo0NSwiLi9saWIvdHJpYW5ndWxhdGlvbiI6NDZ9XSw0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7aWYoISgocD1sW2NdKTxzKSYmIWUuaXNDb25zdHJhaW50KHMscCkpe2Zvcih2YXIgdT1sW2MtMV0sZj0tMSxoPTE7aDxsLmxlbmd0aDtoKz0yKWlmKGxbaC0xXT09PXApe2Y9bFtoXTticmVha31mPDB8fG4odFtzXSx0W3BdLHRbdV0sdFtmXSk8MCYmci5wdXNoKHMscCl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgcD1yLnBvcCgpLGQ9KHM9ci5wb3AoKSx1PS0xLGY9LTEsbD1vW3NdLDEpO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIG09bFtkLTFdLGc9bFtkXTttPT09cD9mPWc6Zz09PXAmJih1PW0pfXU8MHx8ZjwwfHwobih0W3NdLHRbcF0sdFt1XSx0W2ZdKT49MHx8KGUuZmxpcChzLHApLGkodCxlLHIsdSxzLGYpLGkodCxlLHIscyxmLHUpLGkodCxlLHIsZixwLHUpLGkodCxlLHIscCx1LGYpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsInJvYnVzdC1pbi1zcGhlcmUiOjI4Mn1dLDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyLG4saSxhLG8pe3RoaXMuY2VsbHM9dCx0aGlzLm5laWdoYm9yPWUsdGhpcy5mbGFncz1uLHRoaXMuY29uc3RyYWludD1yLHRoaXMuYWN0aXZlPWksdGhpcy5uZXh0PWEsdGhpcy5ib3VuZGFyeT1vfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV18fHRbMl0tZVsyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2VsbHMoKSxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgcz0odj1yW2ldKVswXSxsPXZbMV0sYz12WzJdO2w8Yz9sPHMmJih2WzBdPWwsdlsxXT1jLHZbMl09cyk6YzxzJiYodlswXT1jLHZbMV09cyx2WzJdPWwpfXIuc29ydChvKTt2YXIgdT1uZXcgQXJyYXkobik7Zm9yKGk9MDtpPHUubGVuZ3RoOysraSl1W2ldPTA7dmFyIGY9W10saD1bXSxwPW5ldyBBcnJheSgzKm4pLGQ9bmV3IEFycmF5KDMqbiksbT1udWxsO2UmJihtPVtdKTt2YXIgZz1uZXcgYShyLHAsZCx1LGYsaCxtKTtmb3IoaT0wO2k8bjsrK2kpZm9yKHZhciB2PXJbaV0seT0wO3k8MzsrK3kpe3M9dlt5XSxsPXZbKHkrMSklM107dmFyIHg9cFszKmkreV09Zy5sb2NhdGUobCxzLHQub3Bwb3NpdGUobCxzKSksYj1kWzMqaSt5XT10LmlzQ29uc3RyYWludChzLGwpO3g8MCYmKGI/aC5wdXNoKGkpOihmLnB1c2goaSksdVtpXT0xKSxlJiZtLnB1c2goW2wscywtMV0pKX1yZXR1cm4gZ30odCxyKTtpZigwPT09ZSlyZXR1cm4gcj9uLmNlbGxzLmNvbmNhdChuLmJvdW5kYXJ5KTpuLmNlbGxzO3ZhciBpPTEscz1uLmFjdGl2ZSxsPW4ubmV4dCxjPW4uZmxhZ3MsdT1uLmNlbGxzLGY9bi5jb25zdHJhaW50LGg9bi5uZWlnaGJvcjtmb3IoO3MubGVuZ3RoPjB8fGwubGVuZ3RoPjA7KXtmb3IoO3MubGVuZ3RoPjA7KXt2YXIgcD1zLnBvcCgpO2lmKGNbcF0hPT0taSl7Y1twXT1pO3VbcF07Zm9yKHZhciBkPTA7ZDwzOysrZCl7dmFyIG09aFszKnArZF07bT49MCYmMD09PWNbbV0mJihmWzMqcCtkXT9sLnB1c2gobSk6KHMucHVzaChtKSxjW21dPWkpKX19fXZhciBnPWw7bD1zLHM9ZyxsLmxlbmd0aD0wLGk9LWl9dmFyIHY9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSllW2ldPT09ciYmKHRbbisrXT10W2ldKTtyZXR1cm4gdC5sZW5ndGg9bix0fSh1LGMsZSk7aWYocilyZXR1cm4gdi5jb25jYXQobi5ib3VuZGFyeSk7cmV0dXJuIHZ9LGEucHJvdG90eXBlLmxvY2F0ZT0obj1bMCwwLDBdLGZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LHM9ZSxsPXI7cmV0dXJuIGU8cj9lPHQmJihhPWUscz1yLGw9dCk6cjx0JiYoYT1yLHM9dCxsPWUpLGE8MD8tMTooblswXT1hLG5bMV09cyxuWzJdPWwsaS5lcSh0aGlzLmNlbGxzLG4sbykpfSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxfV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdO2Z1bmN0aW9uIGEodCxlLHIsbixpKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmlkeD1yLHRoaXMubG93ZXJJZHM9bix0aGlzLnVwcGVySWRzPWl9ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLnR5cGU9cix0aGlzLmlkeD1ufWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmFbMF0tZS5hWzBdfHx0LmFbMV0tZS5hWzFdfHx0LnR5cGUtZS50eXBlO3JldHVybiByfHwoMCE9PXQudHlwZSYmKHI9aSh0LmEsdC5iLGUuYikpP3I6dC5pZHgtZS5pZHgpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gaSh0LmEsdC5iLGUpfWZ1bmN0aW9uIGModCxlLHIsYSxvKXtmb3IodmFyIHM9bi5sdChlLGEsbCksYz1uLmd0KGUsYSxsKSx1PXM7dTxjOysrdSl7Zm9yKHZhciBmPWVbdV0saD1mLmxvd2VySWRzLHA9aC5sZW5ndGg7cD4xJiZpKHJbaFtwLTJdXSxyW2hbcC0xXV0sYSk+MDspdC5wdXNoKFtoW3AtMV0saFtwLTJdLG9dKSxwLT0xO2gubGVuZ3RoPXAsaC5wdXNoKG8pO3ZhciBkPWYudXBwZXJJZHM7Zm9yKHA9ZC5sZW5ndGg7cD4xJiZpKHJbZFtwLTJdXSxyW2RbcC0xXV0sYSk8MDspdC5wdXNoKFtkW3AtMl0sZFtwLTFdLG9dKSxwLT0xO2QubGVuZ3RoPXAsZC5wdXNoKG8pfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI7cmV0dXJuKHI9dC5hWzBdPGUuYVswXT9pKHQuYSx0LmIsZS5hKTppKGUuYixlLmEsdC5hKSk/cjoocj1lLmJbMF08dC5iWzBdP2kodC5hLHQuYixlLmIpOmkoZS5iLGUuYSx0LmIpKXx8dC5pZHgtZS5pZHh9ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9bi5sZSh0LHIsdSksbz10W2ldLHM9by51cHBlcklkcyxsPXNbcy5sZW5ndGgtMV07by51cHBlcklkcz1bbF0sdC5zcGxpY2UoaSsxLDAsbmV3IGEoci5hLHIuYixyLmlkeCxbbF0scykpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBpPXIuYTtyLmE9ci5iLHIuYj1pO3ZhciBhPW4uZXEodCxyLHUpLG89dFthXTt0W2EtMV0udXBwZXJJZHM9by51cHBlcklkcyx0LnNwbGljZShhLDEpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9W10sbD0wO2w8cjsrK2wpaS5wdXNoKG5ldyBvKHRbbF0sbnVsbCwwLGwpKTtmb3IobD0wO2w8bjsrK2wpe3ZhciB1PWVbbF0scD10W3VbMF1dLGQ9dFt1WzFdXTtwWzBdPGRbMF0/aS5wdXNoKG5ldyBvKHAsZCwyLGwpLG5ldyBvKGQscCwxLGwpKTpwWzBdPmRbMF0mJmkucHVzaChuZXcgbyhkLHAsMixsKSxuZXcgbyhwLGQsMSxsKSl9aS5zb3J0KHMpO2Zvcih2YXIgbT1pWzBdLmFbMF0tKDErTWF0aC5hYnMoaVswXS5hWzBdKSkqTWF0aC5wb3coMiwtNTIpLGc9W25ldyBhKFttLDFdLFttLDBdLC0xLFtdLFtdLFtdLFtdKV0sdj1bXSx5PShsPTAsaS5sZW5ndGgpO2w8eTsrK2wpe3ZhciB4PWlbbF0sYj14LnR5cGU7MD09PWI/Yyh2LGcsdCx4LmEseC5pZHgpOjI9PT1iP2YoZyx0LHgpOmgoZyx0LHgpfXJldHVybiB2fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsInJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0fV0sNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMX1dLDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MSxyPTE7cjx0Lmxlbmd0aDsrK3IpZm9yKHZhciBuPTA7bjxyOysrbilpZih0W3JdPHRbbl0pZT0tZTtlbHNlIGlmKHRbbl09PT10W3JdKXJldHVybiAwO3JldHVybiBlfX0se31dLDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsZj1jW2UrMV07Zm9yKHM9MDtzPGYubGVuZ3RoOysrcyl1Kz1mW3NdO3ZhciBoPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2Y9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxmLmxlbmd0aDsrK2wpcCs9ZltsXTtoW3NdPXAvdX1yZXR1cm4gaH1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjY1LCJyb2J1c3QtbGluZWFyLXNvbHZlIjoyODN9XSw0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0KSxyPTAsaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGUubGVuZ3RoOysrbylyKz1NYXRoLnBvdyhhW29dLWVbb10sMik7cmV0dXJuIE1hdGguc3FydChyL3QubGVuZ3RoKX07dmFyIG49dCgiY2lyY3VtY2VudGVyIil9LHtjaXJjdW1jZW50ZXI6NDh9XSw1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiB2KGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKGE9MDthPGUubGVuZ3RoOysrYSl7bz1lW2FdO24ucHVzaChbb1swXSxvWzFdXSksci5wdXNoKG9bMl0pfX1yZXR1cm4gc307dmFyIG49dCgidW5pb24tZmluZCIpLGk9dCgiYm94LWludGVyc2VjdCIpLGE9dCgicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0Iiksbz10KCJiaWctcmF0Iikscz10KCJiaWctcmF0L2NtcCIpLGw9dCgiYmlnLXJhdC90by1mbG9hdCIpLGM9dCgicmF0LXZlYyIpLHU9dCgibmV4dGFmdGVyIiksZj10KCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCIpO2Z1bmN0aW9uIGgodCl7dmFyIGU9bCh0KTtyZXR1cm5bdShlLC0xLzApLHUoZSwxLzApXX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtlW3JdPVt1KG5bMF0sLTEvMCksdShuWzFdLC0xLzApLHUoblswXSwxLzApLHUoblsxXSwxLzApXX1yZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1uZXcgbihhKSxzPVtdLGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIGM9ZVtsXSxmPWgoY1swXSkscD1oKGNbMV0pO3MucHVzaChbdShmWzBdLC0xLzApLHUocFswXSwtMS8wKSx1KGZbMV0sMS8wKSx1KHBbMV0sMS8wKV0pfWkocywoZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pKTt2YXIgZD0hMCxtPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyh2PW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W3ZdPVtNYXRoLm1pbih0W2xdWzBdLHRbdl1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFt2XVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciBnPTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgdjsodj1vLmZpbmQobCkpPT09bD8obVtsXT1nLHRbZysrXT10W2xdKTptW2xdPS0xfXQubGVuZ3RoPWc7Zm9yKGw9MDtsPGE7KytsKW1bbF08MCYmKG1bbF09bVtvLmZpbmQobCldKTtyZXR1cm4gbX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiB2KHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydChnKTp0LnNvcnQobSk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsKGZ1bmN0aW9uKHIsaSl7dmFyIG89ZVtyXSxzPWVbaV07aWYob1swXSE9PXNbMF0mJm9bMF0hPT1zWzFdJiZvWzFdIT09c1swXSYmb1sxXSE9PXNbMV0pe3ZhciBsPXRbb1swXV0sYz10W29bMV1dLHU9dFtzWzBdXSxmPXRbc1sxXV07YShsLGMsdSxmKSYmbi5wdXNoKFtyLGldKX19KSksbn0odCxlLG4pLG09cCh0KSxnPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBpKHIsbiwoZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSkpLG99KHQsZSxuLG0pLHk9ZCh0LGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsdSxoPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pKTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLG09ZVt1XSxnPWVbZF0sdj1mKGModFttWzBdXSksYyh0W21bMV1dKSxjKHRbZ1swXV0pLGModFtnWzFdXSkpO2lmKHYpe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbCh2WzBdKSxsKHZbMV0pXSksaC5wdXNoKHYpLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoKGZ1bmN0aW9uKHQsZSl7aWYodFswXSE9PWVbMF0pcmV0dXJuIHRbMF0tZVswXTt2YXIgcj1oW3RbMV1dLG49aFtlWzFdXTtyZXR1cm4gcyhyWzBdLG5bMF0pfHxzKHJbMV0sblsxXSl9KSksYT1uLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgeD1lW3U9KFM9blthXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLFQ9dFtfXTtpZigod1swXS1UWzBdfHx3WzFdLVRbMV0pPDApe3ZhciBrPWI7Yj1fLF89a314WzBdPWI7dmFyIEEsTT14WzFdPVNbMV07Zm9yKGkmJihBPXhbMl0pO2E+MCYmblthLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWFdKVsxXTtpP2UucHVzaChbTSxFLEFdKTplLnB1c2goW00sRV0pLE09RX1pP2UucHVzaChbTSxfLEFdKTplLnB1c2goW00sX10pfXJldHVybiBofSh0LGUsaCxnLHIpKTtyZXR1cm4gdihlLHksciksISF5fHwoaC5sZW5ndGg+MHx8Zy5sZW5ndGg+MCl9fSx7Ii4vbGliL3JhdC1zZWctaW50ZXJzZWN0Ijo1MSwiYmlnLXJhdCI6MTgsImJpZy1yYXQvY21wIjoxNiwiYmlnLXJhdC90by1mbG9hdCI6MzAsImJveC1pbnRlcnNlY3QiOjM1LG5leHRhZnRlcjoyNjAsInJhdC12ZWMiOjI3Mywicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0IjoyODcsInVuaW9uLWZpbmQiOjMwOX1dLDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksZj1zKG4sciksaD11KGEsZik7aWYoMD09PW8oaCkpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShmLHApLG09aShkLGgpLGc9YyhhLG0pO3JldHVybiBsKHQsZyl9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2IjoxNywiYmlnLXJhdC9tdWwiOjI3LCJiaWctcmF0L3NpZ24iOjI4LCJiaWctcmF0L3N1YiI6MjksInJhdC12ZWMvYWRkIjoyNzIsInJhdC12ZWMvbXVscyI6Mjc0LCJyYXQtdmVjL3N1YiI6Mjc1fV0sNTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NSwxXX1dLHZpcmlkaXM6W3tpbmRleDowLHJnYjpbNjgsMSw4NF19LHtpbmRleDouMTMscmdiOls3MSw0NCwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbNTksODEsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzQ0LDExMywxNDJdfSx7aW5kZXg6LjUscmdiOlszMywxNDQsMTQxXX0se2luZGV4Oi42MyxyZ2I6WzM5LDE3MywxMjldfSx7aW5kZXg6Ljc1LHJnYjpbOTIsMjAwLDk5XX0se2luZGV4Oi44OCxyZ2I6WzE3MCwyMjAsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzEsMzddfV0saW5mZXJubzpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlszMSwxMiw3Ml19LHtpbmRleDouMjUscmdiOls4NSwxNSwxMDldfSx7aW5kZXg6LjM4LHJnYjpbMTM2LDM0LDEwNl19LHtpbmRleDouNSxyZ2I6WzE4Niw1NCw4NV19LHtpbmRleDouNjMscmdiOlsyMjcsODksNTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0MCwxMF19LHtpbmRleDouODgscmdiOlsyNDksMjAxLDUwXX0se2luZGV4OjEscmdiOlsyNTIsMjU1LDE2NF19XSxtYWdtYTpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlsyOCwxNiw2OF19LHtpbmRleDouMjUscmdiOls3OSwxOCwxMjNdfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDM3LDEyOV19LHtpbmRleDouNSxyZ2I6WzE4MSw1NCwxMjJdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDgwLDEwMF19LHtpbmRleDouNzUscmdiOlsyNTEsMTM1LDk3XX0se2luZGV4Oi44OCxyZ2I6WzI1NCwxOTQsMTM1XX0se2luZGV4OjEscmdiOlsyNTIsMjUzLDE5MV19XSxwbGFzbWE6W3tpbmRleDowLHJnYjpbMTMsOCwxMzVdfSx7aW5kZXg6LjEzLHJnYjpbNzUsMywxNjFdfSx7aW5kZXg6LjI1LHJnYjpbMTI1LDMsMTY4XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCwzNCwxNTBdfSx7aW5kZXg6LjUscmdiOlsyMDMsNzAsMTIxXX0se2luZGV4Oi42MyxyZ2I6WzIyOSwxMDcsOTNdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ4LDE0OCw2NV19LHtpbmRleDouODgscmdiOlsyNTMsMTk1LDQwXX0se2luZGV4OjEscmdiOlsyNDAsMjQ5LDMzXX1dLHdhcm06W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzE3MiwwLDE4N119LHtpbmRleDouMjUscmdiOlsyMTksMCwxNzBdfSx7aW5kZXg6LjM4LHJnYjpbMjU1LDAsMTMwXX0se2luZGV4Oi41LHJnYjpbMjU1LDYzLDc0XX0se2luZGV4Oi42MyxyZ2I6WzI1NSwxMjMsMF19LHtpbmRleDouNzUscmdiOlsyMzQsMTc2LDBdfSx7aW5kZXg6Ljg4LHJnYjpbMTkwLDIyOCwwXX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sY29vbDpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTE2LDAsMjE4XX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDc0LDIzN119LHtpbmRleDouMzgscmdiOls2OCwxNDYsMjMxXX0se2luZGV4Oi41LHJnYjpbMCwyMDQsMTk3XX0se2luZGV4Oi42MyxyZ2I6WzAsMjQ3LDE0Nl19LHtpbmRleDouNzUscmdiOlswLDI1NSw4OF19LHtpbmRleDouODgscmdiOls0MCwyNTUsOF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLCJyYWluYm93LXNvZnQiOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMSxyZ2I6WzE5OSwwLDE4MF19LHtpbmRleDouMixyZ2I6WzI1NSwwLDEyMV19LHtpbmRleDouMyxyZ2I6WzI1NSwxMDgsMF19LHtpbmRleDouNCxyZ2I6WzIyMiwxOTQsMF19LHtpbmRleDouNSxyZ2I6WzE1MCwyNTUsMF19LHtpbmRleDouNixyZ2I6WzAsMjU1LDU1XX0se2luZGV4Oi43LHJnYjpbMCwyNDYsMTUwXX0se2luZGV4Oi44LHJnYjpbNTAsMTY3LDIyMl19LHtpbmRleDouOSxyZ2I6WzEwMyw1MSwyMzVdfSx7aW5kZXg6MSxyZ2I6WzEyNCwwLDE4Nl19XSxiYXRoeW1ldHJ5Olt7aW5kZXg6MCxyZ2I6WzQwLDI2LDQ0XX0se2luZGV4Oi4xMyxyZ2I6WzU5LDQ5LDkwXX0se2luZGV4Oi4yNSxyZ2I6WzY0LDc2LDEzOV19LHtpbmRleDouMzgscmdiOls2MywxMTAsMTUxXX0se2luZGV4Oi41LHJnYjpbNzIsMTQyLDE1OF19LHtpbmRleDouNjMscmdiOls4NSwxNzQsMTYzXX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDYsMTYzXX0se2luZGV4Oi44OCxyZ2I6WzE4NywyMzAsMTcyXX0se2luZGV4OjEscmdiOlsyNTMsMjU0LDIwNF19XSxjZG9tOlt7aW5kZXg6MCxyZ2I6WzQ3LDE1LDYyXX0se2luZGV4Oi4xMyxyZ2I6Wzg3LDIzLDg2XX0se2luZGV4Oi4yNSxyZ2I6WzEzMCwyOCw5OV19LHtpbmRleDouMzgscmdiOlsxNzEsNDEsOTZdfSx7aW5kZXg6LjUscmdiOlsyMDYsNjcsODZdfSx7aW5kZXg6LjYzLHJnYjpbMjMwLDEwNiw4NF19LHtpbmRleDouNzUscmdiOlsyNDIsMTQ5LDEwM119LHtpbmRleDouODgscmdiOlsyNDksMTkzLDEzNV19LHtpbmRleDoxLHJnYjpbMjU0LDIzNywxNzZdfV0sY2hsb3JvcGh5bGw6W3tpbmRleDowLHJnYjpbMTgsMzYsMjBdfSx7aW5kZXg6LjEzLHJnYjpbMjUsNjMsNDFdfSx7aW5kZXg6LjI1LHJnYjpbMjQsOTEsNTldfSx7aW5kZXg6LjM4LHJnYjpbMTMsMTE5LDcyXX0se2luZGV4Oi41LHJnYjpbMTgsMTQ4LDgwXX0se2luZGV4Oi42MyxyZ2I6WzgwLDE3Myw4OV19LHtpbmRleDouNzUscmdiOlsxMzIsMTk2LDEyMl19LHtpbmRleDouODgscmdiOlsxNzUsMjIxLDE2Ml19LHtpbmRleDoxLHJnYjpbMjE1LDI0OSwyMDhdfV0sZGVuc2l0eTpbe2luZGV4OjAscmdiOls1NCwxNCwzNl19LHtpbmRleDouMTMscmdiOls4OSwyMyw4MF19LHtpbmRleDouMjUscmdiOlsxMTAsNDUsMTMyXX0se2luZGV4Oi4zOCxyZ2I6WzEyMCw3NywxNzhdfSx7aW5kZXg6LjUscmdiOlsxMjAsMTEzLDIxM119LHtpbmRleDouNjMscmdiOlsxMTUsMTUxLDIyOF19LHtpbmRleDouNzUscmdiOlsxMzQsMTg1LDIyN119LHtpbmRleDouODgscmdiOlsxNzcsMjE0LDIyN119LHtpbmRleDoxLHJnYjpbMjMwLDI0MSwyNDFdfV0sImZyZWVzdXJmYWNlLWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzMwLDQsMTEwXX0se2luZGV4Oi4xMyxyZ2I6WzQ3LDE0LDE3Nl19LHtpbmRleDouMjUscmdiOls0MSw0NSwyMzZdfSx7aW5kZXg6LjM4LHJnYjpbMjUsOTksMjEyXX0se2luZGV4Oi41LHJnYjpbNjgsMTMxLDIwMF19LHtpbmRleDouNjMscmdiOlsxMTQsMTU2LDE5N119LHtpbmRleDouNzUscmdiOlsxNTcsMTgxLDIwM119LHtpbmRleDouODgscmdiOlsyMDAsMjA4LDIxNl19LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sImZyZWVzdXJmYWNlLXJlZCI6W3tpbmRleDowLHJnYjpbNjAsOSwxOF19LHtpbmRleDouMTMscmdiOlsxMDAsMTcsMjddfSx7aW5kZXg6LjI1LHJnYjpbMTQyLDIwLDI5XX0se2luZGV4Oi4zOCxyZ2I6WzE3Nyw0MywyN119LHtpbmRleDouNSxyZ2I6WzE5Miw4Nyw2M119LHtpbmRleDouNjMscmdiOlsyMDUsMTI1LDEwNV19LHtpbmRleDouNzUscmdiOlsyMTYsMTYyLDE0OF19LHtpbmRleDouODgscmdiOlsyMjcsMTk5LDE5M119LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sb3h5Z2VuOlt7aW5kZXg6MCxyZ2I6WzY0LDUsNV19LHtpbmRleDouMTMscmdiOlsxMDYsNiwxNV19LHtpbmRleDouMjUscmdiOlsxNDQsMjYsN119LHtpbmRleDouMzgscmdiOlsxNjgsNjQsM119LHtpbmRleDouNSxyZ2I6WzE4OCwxMDAsNF19LHtpbmRleDouNjMscmdiOlsyMDYsMTM2LDExXX0se2luZGV4Oi43NSxyZ2I6WzIyMCwxNzQsMjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjMxLDIxNSw0NF19LHtpbmRleDoxLHJnYjpbMjQ4LDI1NCwxMDVdfV0scGFyOlt7aW5kZXg6MCxyZ2I6WzUxLDIwLDI0XX0se2luZGV4Oi4xMyxyZ2I6WzkwLDMyLDM1XX0se2luZGV4Oi4yNSxyZ2I6WzEyOSw0NCwzNF19LHtpbmRleDouMzgscmdiOlsxNTksNjgsMjVdfSx7aW5kZXg6LjUscmdiOlsxODIsOTksMTldfSx7aW5kZXg6LjYzLHJnYjpbMTk5LDEzNCwyMl19LHtpbmRleDouNzUscmdiOlsyMTIsMTcxLDM1XX0se2luZGV4Oi44OCxyZ2I6WzIyMSwyMTAsNTRdfSx7aW5kZXg6MSxyZ2I6WzIyNSwyNTMsNzVdfV0scGhhc2U6W3tpbmRleDowLHJnYjpbMTQ1LDEwNSwxOF19LHtpbmRleDouMTMscmdiOlsxODQsNzEsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTg2LDU4LDExNV19LHtpbmRleDouMzgscmdiOlsxNjAsNzEsMTg1XX0se2luZGV4Oi41LHJnYjpbMTEwLDk3LDIxOF19LHtpbmRleDouNjMscmdiOls1MCwxMjMsMTY0XX0se2luZGV4Oi43NSxyZ2I6WzMxLDEzMSwxMTBdfSx7aW5kZXg6Ljg4LHJnYjpbNzcsMTI5LDM0XX0se2luZGV4OjEscmdiOlsxNDUsMTA1LDE4XX1dLHNhbGluaXR5Olt7aW5kZXg6MCxyZ2I6WzQyLDI0LDEwOF19LHtpbmRleDouMTMscmdiOlszMyw1MCwxNjJdfSx7aW5kZXg6LjI1LHJnYjpbMTUsOTAsMTQ1XX0se2luZGV4Oi4zOCxyZ2I6WzQwLDExOCwxMzddfSx7aW5kZXg6LjUscmdiOls1OSwxNDYsMTM1XX0se2luZGV4Oi42MyxyZ2I6Wzc5LDE3NSwxMjZdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwMywxMDRdfSx7aW5kZXg6Ljg4LHJnYjpbMTkzLDIyMSwxMDBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzksMTU0XX1dLHRlbXBlcmF0dXJlOlt7aW5kZXg6MCxyZ2I6WzQsMzUsNTFdfSx7aW5kZXg6LjEzLHJnYjpbMjMsNTEsMTIyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDU5LDE1N119LHtpbmRleDouMzgscmdiOlsxMjksNzksMTQzXX0se2luZGV4Oi41LHJnYjpbMTc1LDk1LDEzMF19LHtpbmRleDouNjMscmdiOlsyMjIsMTEyLDEwMV19LHtpbmRleDouNzUscmdiOlsyNDksMTQ2LDY2XX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTYsNjVdfSx7aW5kZXg6MSxyZ2I6WzIzMiwyNTAsOTFdfV0sdHVyYmlkaXR5Olt7aW5kZXg6MCxyZ2I6WzM0LDMxLDI3XX0se2luZGV4Oi4xMyxyZ2I6WzY1LDUwLDQxXX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDY5LDUyXX0se2luZGV4Oi4zOCxyZ2I6WzEzMSw4OSw1N119LHtpbmRleDouNSxyZ2I6WzE2MSwxMTIsNTldfSx7aW5kZXg6LjYzLHJnYjpbMTg1LDE0MCw2Nl19LHtpbmRleDouNzUscmdiOlsyMDIsMTc0LDg4XX0se2luZGV4Oi44OCxyZ2I6WzIxNiwyMDksMTI2XX0se2luZGV4OjEscmdiOlsyMzMsMjQ2LDE3MV19XSwidmVsb2NpdHktYmx1ZSI6W3tpbmRleDowLHJnYjpbMTcsMzIsNjRdfSx7aW5kZXg6LjEzLHJnYjpbMzUsNTIsMTE2XX0se2luZGV4Oi4yNSxyZ2I6WzI5LDgxLDE1Nl19LHtpbmRleDouMzgscmdiOlszMSwxMTMsMTYyXX0se2luZGV4Oi41LHJnYjpbNTAsMTQ0LDE2OV19LHtpbmRleDouNjMscmdiOls4NywxNzMsMTc2XX0se2luZGV4Oi43NSxyZ2I6WzE0OSwxOTYsMTg5XX0se2luZGV4Oi44OCxyZ2I6WzIwMywyMjEsMjExXX0se2luZGV4OjEscmdiOlsyNTQsMjUxLDIzMF19XSwidmVsb2NpdHktZ3JlZW4iOlt7aW5kZXg6MCxyZ2I6WzIzLDM1LDE5XX0se2luZGV4Oi4xMyxyZ2I6WzI0LDY0LDM4XX0se2luZGV4Oi4yNSxyZ2I6WzExLDk1LDQ1XX0se2luZGV4Oi4zOCxyZ2I6WzM5LDEyMywzNV19LHtpbmRleDouNSxyZ2I6Wzk1LDE0NiwxMl19LHtpbmRleDouNjMscmdiOlsxNTIsMTY1LDE4XX0se2luZGV4Oi43NSxyZ2I6WzIwMSwxODYsNjldfSx7aW5kZXg6Ljg4LHJnYjpbMjMzLDIxNiwxMzddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTMsMjA1XX1dLGN1YmVoZWxpeDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMDcscmdiOlsyMiw1LDU5XX0se2luZGV4Oi4xMyxyZ2I6WzYwLDQsMTA1XX0se2luZGV4Oi4yLHJnYjpbMTA5LDEsMTM1XX0se2luZGV4Oi4yNyxyZ2I6WzE2MSwwLDE0N119LHtpbmRleDouMzMscmdiOlsyMTAsMiwxNDJdfSx7aW5kZXg6LjQscmdiOlsyNTEsMTEsMTIzXX0se2luZGV4Oi40NyxyZ2I6WzI1NSwyOSw5N119LHtpbmRleDouNTMscmdiOlsyNTUsNTQsNjldfSx7aW5kZXg6LjYscmdiOlsyNTUsODUsNDZdfSx7aW5kZXg6LjY3LHJnYjpbMjU1LDEyMCwzNF19LHtpbmRleDouNzMscmdiOlsyNTUsMTU3LDM3XX0se2luZGV4Oi44LHJnYjpbMjQxLDE5MSw1N119LHtpbmRleDouODcscmdiOlsyMjQsMjIwLDkzXX0se2luZGV4Oi45MyxyZ2I6WzIxOCwyNDEsMTQyXX0se2luZGV4OjEscmdiOlsyMjcsMjUzLDE5OF19XX19LHt9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbG9yU2NhbGUiKSxpPXQoImxlcnAiKTtmdW5jdGlvbiBhKHQpe3JldHVyblt0WzBdLzI1NSx0WzFdLzI1NSx0WzJdLzI1NSx0WzNdXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7bjwzOysrbilyKz0oIjAwIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsZixoLHAsZCxtO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGg9dC5mb3JtYXR8fCJoZXgiLChmPXQuY29sb3JtYXApfHwoZj0iamV0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtpZihmPWYudG9Mb3dlckNhc2UoKSwhbltmXSl0aHJvdyBFcnJvcihmKyIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUiKTt1PW5bZl19ZWxzZXtpZighQXJyYXkuaXNBcnJheShmKSl0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uIixmKTt1PWYuc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGYrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmluZGV4KnApfSkpLGRbMF09TWF0aC5taW4oTWF0aC5tYXgoZFswXSwwKSwxKSxkWzFdPU1hdGgubWluKE1hdGgubWF4KGRbMV0sMCksMSk7dmFyIGc9dS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MXx8KG5bM109ZFswXSsoZFsxXS1kWzBdKSpyKSxufSkpLHY9W107Zm9yKG09MDttPGUubGVuZ3RoLTE7KyttKXtjPWVbbSsxXS1lW21dLHI9Z1ttXSxsPWdbbSsxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7di5wdXNoKFtNYXRoLnJvdW5kKGkoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGkoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGkoclsyXSxsWzJdLHgpKSxpKHJbM10sbFszXSx4KV0pfX12LnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWg/dj12Lm1hcChvKToicmdiYVN0cmluZyI9PT1oP3Y9di5tYXAocyk6ImZsb2F0Ij09PWgmJih2PXYubWFwKGEpKTtyZXR1cm4gdn19LHsiLi9jb2xvclNjYWxlIjo1MixsZXJwOjI0MH1dLDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKGUscixhKTtpZigwPT09byl7dmFyIHM9aShuKHQsZSxyKSksYz1pKG4odCxlLGEpKTtpZihzPT09Yyl7aWYoMD09PXMpe3ZhciB1PWwodCxlLHIpLGY9bCh0LGUsYSk7cmV0dXJuIHU9PT1mPzA6dT8xOi0xfXJldHVybiAwfXJldHVybiAwPT09Yz9zPjB8fGwodCxlLGEpPy0xOjE6MD09PXM/Yz4wfHxsKHQsZSxyKT8xOi0xOmkoYy1zKX12YXIgaD1uKHQsZSxyKTtyZXR1cm4gaD4wP28+MCYmbih0LGUsYSk+MD8xOi0xOmg8MD9vPjB8fG4odCxlLGEpPjA/MTotMTpuKHQsZSxhKT4wfHxsKHQsZSxyKT8xOi0xfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpZ251bSIpLGE9dCgidHdvLXN1bSIpLG89dCgicm9idXN0LXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1hKHRbMF0sLWVbMF0pLGk9YSh0WzFdLC1lWzFdKSxsPWEoclswXSwtZVswXSksYz1hKHJbMV0sLWVbMV0pLHU9cyhvKG4sbCksbyhpLGMpKTtyZXR1cm4gdVt1Lmxlbmd0aC0xXT49MH19LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODQsInJvYnVzdC1wcm9kdWN0IjoyODUsInJvYnVzdC1zdW0iOjI4OSxzaWdudW06NTUsInR3by1zdW0iOjMwN31dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdDwwPy0xOnQ+MD8xOjB9fSx7fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGEpcmV0dXJuIGE7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG4odFswXSx0WzFdKS1uKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBvPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihhPW8rdFsyXS0ocytlWzJdKSlyZXR1cm4gYTt2YXIgbD1uKHRbMF0sdFsxXSksYz1uKGVbMF0sZVsxXSk7cmV0dXJuIG4obCx0WzJdKS1uKGMsZVsyXSl8fG4obCt0WzJdLG8pLW4oYytlWzJdLHMpO2Nhc2UgNDp2YXIgdT10WzBdLGY9dFsxXSxoPXRbMl0scD10WzNdLGQ9ZVswXSxtPWVbMV0sZz1lWzJdLHY9ZVszXTtyZXR1cm4gdStmK2grcC0oZCttK2crdil8fG4odSxmLGgscCktbihkLG0sZyx2LGQpfHxuKHUrZix1K2gsdStwLGYraCxmK3AsaCtwKS1uKGQrbSxkK2csZCt2LG0rZyxtK3YsZyt2KXx8bih1K2YraCx1K2YrcCx1K2grcCxmK2grcCktbihkK20rZyxkK20rdixkK2crdixtK2crdik7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQoaSkseD1lLnNsaWNlKCkuc29ydChpKSxiPTA7YjxyOysrYilpZihhPXlbYl0teFtiXSlyZXR1cm4gYTtyZXR1cm4gMH19O3ZhciBuPU1hdGgubWluO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfX0se31dLDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGk9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSl8fGkodCktaShlKX19LHsiY2VsbC1vcmllbnRhdGlvbiI6NDcsImNvbXBhcmUtY2VsbCI6NTZ9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jaDFkIiksaT10KCIuL2xpYi9jaDJkIiksYT10KCIuL2xpYi9jaG5kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVybltbMF1dO3ZhciByPXRbMF0ubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO2lmKDE9PT1yKXJldHVybiBuKHQpO2lmKDI9PT1yKXJldHVybiBpKHQpO3JldHVybiBhKHQscil9fSx7Ii4vbGliL2NoMWQiOjU5LCIuL2xpYi9jaDJkIjo2MCwiLi9saWIvY2huZCI6NjF9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX19LHt9XSw2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtpW29dPVthLHNdLGE9c31yZXR1cm4gaX07dmFyIG49dCgibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiKX0seyJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCI6MjQ2fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBuKHQsITApfWNhdGNoKG8pe3ZhciByPWkodCk7aWYoci5sZW5ndGg8PWUpcmV0dXJuW107dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8ZS5sZW5ndGg7KytpKW5baV09dFtlW2ldXTt2YXIgYT1lLmxlbmd0aDtmb3IoaT0wO2k8cjsrK2kpZS5pbmRleE9mKGkpPDAmJihuW2ErK109dFtpXSk7cmV0dXJuIG59KHQscik7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG4oYSwhMCkscil9fTt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgiYWZmaW5lLWh1bGwiKX0seyJhZmZpbmUtaHVsbCI6MTAsImluY3JlbWVudGFsLWNvbnZleC1odWxsIjoyMzN9XSw2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWktMSxzPWkqaSxsPW8qbyxjPSgxKzIqaSkqbCx1PWkqbCxmPXMqKDMtMippKSxoPXMqbztpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciBwPXQubGVuZ3RoLTE7cD49MDstLXApYVtwXT1jKnRbcF0rdSplW3BdK2YqcltwXStoKm5bcF07cmV0dXJuIGF9cmV0dXJuIGMqdCt1KmUrZipyK2gqbn0sZS5leHBvcnRzLmRlcml2YXRpdmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTYqaSppLTYqaSxzPTMqaSppLTQqaSsxLGw9LTYqaSppKzYqaSxjPTMqaSppLTIqaTtpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciB1PXQubGVuZ3RoLTE7dT49MDstLXUpYVt1XT1vKnRbdV0rcyplW3VdK2wqclt1XStjKm5bdV07cmV0dXJuIGF9cmV0dXJuIG8qdCtzKmUrbCpyW3VdK2Mqbn19LHt9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgidW5pcSIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnBvaW50PXQsdGhpcy5pbmRleD1lfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5wb2ludCxuPWUucG9pbnQsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSl7dmFyIG89blthXS1yW2FdO2lmKG8pcmV0dXJuIG99cmV0dXJuIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIHM9dFswXS5sZW5ndGg7aWYoczwxKXJldHVybltdO2lmKDE9PT1zKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoMT09PXQpcmV0dXJuIHI/W1stMSwwXV06W107dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KSk7bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGY9dFt1XSxoPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIG09ZltkXTtoW2RdPW0scCs9bSptfWhbc109cCxsW3VdPW5ldyBhKGgsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO3ZhciBnPW5ldyBBcnJheShyK3MrMSksdj1uZXcgQXJyYXkocitzKzEpLHk9KHMrMSkqKHMrMSkqYyx4PW5ldyBBcnJheShzKzEpO2Zvcih1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSxnWzBdPXguc2xpY2UoKSx2WzBdPS0xO2Zvcih1PTA7dTw9czsrK3UpeyhoPXguc2xpY2UoKSlbdV09MSxnW3UrMV09aCx2W3UrMV09LTF9Zm9yKHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO2dbdStzKzFdPWIucG9pbnQsdlt1K3MrMV09Yi5pbmRleH12YXIgXz1uKGcsITEpO189ZT9fLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj12W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pKTpfLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPXZbdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pKTtpZigxJnMpZm9yKHU9MDt1PF8ubGVuZ3RoOysrdSl7aD0oYj1fW3VdKVswXTtiWzBdPWJbMV0sYlsxXT1ofXJldHVybiBffX0seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6MjMzLHVuaXE6MzEwfV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7dmFyIHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0se2J1ZmZlcjozfV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKCJudW1iZXIiIT10eXBlb2YgZSl7ZT0wO2Zvcih2YXIgaT0wO2k8cjsrK2kpe3ZhciBhPXRbaV07ZT1NYXRoLm1heChlLGFbMF0sYVsxXSl9ZT0xKygwfGUpfWV8PTA7dmFyIG89bmV3IEFycmF5KGUpO2ZvcihpPTA7aTxlOysraSlvW2ldPVtdO2ZvcihpPTA7aTxyOysraSl7YT10W2ldO29bYVswXV0ucHVzaChhWzFdKSxvW2FbMV1dLnB1c2goYVswXSl9Zm9yKHZhciBzPTA7czxlOysrcyluKG9bc10sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtyZXR1cm4gb307dmFyIG49dCgidW5pcSIpfSx7dW5pcTozMTB9XSw2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWV8fDAsaT1yfHwxO3JldHVybltbdFsxMl0rdFswXSx0WzEzXSt0WzFdLHRbMTRdK3RbMl0sdFsxNV0rdFszXV0sW3RbMTJdLXRbMF0sdFsxM10tdFsxXSx0WzE0XS10WzJdLHRbMTVdLXRbM11dLFt0WzEyXSt0WzRdLHRbMTNdK3RbNV0sdFsxNF0rdFs2XSx0WzE1XSt0WzddXSxbdFsxMl0tdFs0XSx0WzEzXS10WzVdLHRbMTRdLXRbNl0sdFsxNV0tdFs3XV0sW24qdFsxMl0rdFs4XSxuKnRbMTNdK3RbOV0sbip0WzE0XSt0WzEwXSxuKnRbMTVdK3RbMTFdXSxbaSp0WzEyXS10WzhdLGkqdFsxM10tdFs5XSxpKnRbMTRdLXRbMTBdLGkqdFsxNV0tdFsxMV1dXX19LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOnJldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgbyhuPWwodCksbiwwKTpuZXcgbyh0LGwodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dCgiY3ViaWMtaGVybWl0ZSIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGY9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgaD11LTEscD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXTtlbHNlIGlmKG8+PXItMSl7aD1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWgpc1twXT1sW2hdK2QqY1toXX1lbHNle2g9dSoobysxKS0xO3ZhciBtPWVbb10sZz1lW28rMV0tbXx8MSx2PXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1oKXZbcF09bFtoXSx4W3BdPWNbaF0qZyx5W3BdPWxbaCt1XSxiW3BdPWNbaCt1XSpnLF89XyYmdltwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPXZbcF07ZWxzZSBuKHYseCx5LGIsKHQtbSkvZyxzKX12YXIgdz1mWzBdLFQ9ZlsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sVFtwXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsZj0oZVtyLTFdLDApO2Y8YzsrK2YsLS11KW9bZl09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBoPWVbYV0scD1lW2ErMV0taHx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sbT10aGlzLl9zY3JhdGNoWzJdLGc9dGhpcy5fc2NyYXRjaFszXSx2PXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoZj0wO2Y8YzsrK2YsLS11KWRbZl09c1t1XSxnW2ZdPWxbdV0qcCxtW2ZdPXNbdStjXSx2W2ZdPWxbdStjXSpwLHk9eSYmZFtmXT09PW1bZl0mJmdbZl09PT12W2ZdJiYwPT09Z1tmXTtpZih5KWZvcihmPTA7ZjxjOysrZilvW2ZdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCxnLG0sdiwodC1oKS9wLG8pO2ZvcihmPTA7ZjxjOysrZilvW2ZdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj0wO2Y8cjsrK2Ypbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoZj1yO2Y+MDstLWYpbi5wdXNoKGEobFtmLTFdLGNbZi0xXSxhcmd1bWVudHNbZl0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGY9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hKGNbaC0xXSx1W2gtMV0sYXJndW1lbnRzW2hdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqZil9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsZj11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpe3ZhciBwPWFyZ3VtZW50c1toXTtuLnB1c2goYShsW2gtMV0sY1toLTFdLG5bbysrXStwKSksaS5wdXNoKHAqZil9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9ci0xO2Y+PTA7LS1mKW4ucHVzaChhKGxbZl0sY1tmXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJjdWJpYy1oZXJtaXRlIjo2Mn1dLDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModHx8bSxudWxsKX07ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbih0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBuKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbyh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcjtpZihlLmxlZnQmJihyPWModCxlLmxlZnQpKSlyZXR1cm4gcjtyZXR1cm4ocj10KGUua2V5LGUudmFsdWUpKXx8KGUucmlnaHQ/Yyh0LGUucmlnaHQpOnZvaWQgMCl9ZnVuY3Rpb24gdSh0LGUscixuKXtpZihlKHQsbi5rZXkpPD0wKXt2YXIgaTtpZihuLmxlZnQpaWYoaT11KHQsZSxyLG4ubGVmdCkpcmV0dXJuIGk7aWYoaT1yKG4ua2V5LG4udmFsdWUpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gZih0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1mKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGYodCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobCwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290Ll9jb3VudDowfX0pLGwuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbXBhcmUsaT10aGlzLnJvb3QsbD1bXSxjPVtdO2k7KXt2YXIgdT1yKHQsaS5rZXkpO2wucHVzaChpKSxjLnB1c2godSksaT11PD0wP2kubGVmdDppLnJpZ2h0fWwucHVzaChuZXcgbigwLHQsZSxudWxsLG51bGwsMSkpO2Zvcih2YXIgZj1sLmxlbmd0aC0yO2Y+PTA7LS1mKXtpPWxbZl07Y1tmXTw9MD9sW2ZdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsbFtmKzFdLGkucmlnaHQsaS5fY291bnQrMSk6bFtmXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxsW2YrMV0saS5fY291bnQrMSl9Zm9yKGY9bC5sZW5ndGgtMTtmPjE7LS1mKXt2YXIgaD1sW2YtMV07aT1sW2ZdO2lmKDE9PT1oLl9jb2xvcnx8MT09PWkuX2NvbG9yKWJyZWFrO3ZhciBwPWxbZi0yXTtpZihwLmxlZnQ9PT1oKWlmKGgubGVmdD09PWkpe2lmKCEoZD1wLnJpZ2h0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAubGVmdD1oLnJpZ2h0LGguX2NvbG9yPTEsaC5yaWdodD1wLGxbZi0yXT1oLGxbZi0xXT1pLG8ocCksbyhoKSxmPj0zKShtPWxbZi0zXSkubGVmdD09PXA/bS5sZWZ0PWg6bS5yaWdodD1oO2JyZWFrfWguX2NvbG9yPTEscC5yaWdodD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfWVsc2V7aWYoIShkPXAucmlnaHQpfHwwIT09ZC5fY29sb3Ipe2lmKGgucmlnaHQ9aS5sZWZ0LHAuX2NvbG9yPTAscC5sZWZ0PWkucmlnaHQsaS5fY29sb3I9MSxpLmxlZnQ9aCxpLnJpZ2h0PXAsbFtmLTJdPWksbFtmLTFdPWgsbyhwKSxvKGgpLG8oaSksZj49MykobT1sW2YtM10pLmxlZnQ9PT1wP20ubGVmdD1pOm0ucmlnaHQ9aTticmVha31oLl9jb2xvcj0xLHAucmlnaHQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX1lbHNlIGlmKGgucmlnaHQ9PT1pKXtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAucmlnaHQ9aC5sZWZ0LGguX2NvbG9yPTEsaC5sZWZ0PXAsbFtmLTJdPWgsbFtmLTFdPWksbyhwKSxvKGgpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1oOm0ubGVmdD1oO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9ZWxzZXt2YXIgZDtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXt2YXIgbTtpZihoLmxlZnQ9aS5yaWdodCxwLl9jb2xvcj0wLHAucmlnaHQ9aS5sZWZ0LGkuX2NvbG9yPTEsaS5yaWdodD1oLGkubGVmdD1wLGxbZi0yXT1pLGxbZi0xXT1oLG8ocCksbyhoKSxvKGkpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1pOm0ubGVmdD1pO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9fXJldHVybiBsWzBdLl9jb2xvcj0xLG5ldyBzKHIsbFswXSl9LGwuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGModCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBmKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLGwuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sbC5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSxsLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSxsLmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgcD1oLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSkscC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaCh0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LHAucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIGw9dC5sZW5ndGgtMjtsPj0wOy0tbCl7KHI9dFtsXSkubGVmdD09PXRbbCsxXT9lW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtsKzFdLHIucmlnaHQsci5fY291bnQpOmVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgYz1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgdT1lW2MtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLHUua2V5LHUudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2MtMV0ua2V5PXIua2V5LGVbYy0xXS52YWx1ZT1yLnZhbHVlO2ZvcihsPWUubGVuZ3RoLTI7bD49YzstLWwpcj1lW2xdLGVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KTtlW2MtMV0ubGVmdD1lW2NdfWlmKDA9PT0ocj1lW2UubGVuZ3RoLTFdKS5fY29sb3Ipe3ZhciBmPWVbZS5sZW5ndGgtMl07Zi5sZWZ0PT09cj9mLmxlZnQ9bnVsbDpmLnJpZ2h0PT09ciYmKGYucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IobD0wO2w8ZS5sZW5ndGg7KytsKWVbbF0uX2NvdW50LS07cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9kKHIsci5sZWZ0KTpyLnJpZ2h0JiZkKHIsci5yaWdodCksci5fY29sb3I9MTtmb3IobD0wO2w8ZS5sZW5ndGgtMTsrK2wpZVtsXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2ZvcihsPTA7bDxlLmxlbmd0aDsrK2wpZVtsXS5fY291bnQtLTt2YXIgaD1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLHMsbD10Lmxlbmd0aC0xO2w+PTA7LS1sKXtpZihlPXRbbF0sMD09PWwpcmV0dXJuIHZvaWQoZS5fY29sb3I9MSk7aWYoKHI9dFtsLTFdKS5sZWZ0PT09ZSl7aWYoKG49ci5yaWdodCkucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLnJpZ2h0PWkobikpLnJpZ2h0PWkobi5yaWdodCksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5yaWdodD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPTEsci5fY29sb3I9MSxzLl9jb2xvcj0xLG8ociksbyhuKSxsPjEpKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmMD09PW4ubGVmdC5fY29sb3Ipe2lmKHM9KG49ci5yaWdodD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PXM6Yy5yaWdodD1zO3JldHVybiB2b2lkKHRbbC0xXT1zKX1pZigxPT09bi5fY29sb3Ipe2lmKDA9PT1yLl9jb2xvcilyZXR1cm4gci5fY29sb3I9MSx2b2lkKHIucmlnaHQ9YSgwLG4pKTtyLnJpZ2h0PWEoMCxuKTtjb250aW51ZX1uPWkobiksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW4pLHRbbC0xXT1uLHRbbF09cixsKzE8dC5sZW5ndGg/dFtsKzFdPWU6dC5wdXNoKGUpLGwrPTJ9ZWxzZXtpZigobj1yLmxlZnQpLmxlZnQmJjA9PT1uLmxlZnQuX2NvbG9yKXtpZihzPShuPXIubGVmdD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5sZWZ0PXMsbi5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9MSxyLl9jb2xvcj0xLHMuX2NvbG9yPTEsbyhyKSxvKG4pLGw+MSkoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLmxlZnQ9aShuKSkucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9czpjLmxlZnQ9cztyZXR1cm4gdm9pZCh0W2wtMV09cyl9aWYoMT09PW4uX2NvbG9yKXtpZigwPT09ci5fY29sb3IpcmV0dXJuIHIuX2NvbG9yPTEsdm9pZChyLmxlZnQ9YSgwLG4pKTtyLmxlZnQ9YSgwLG4pO2NvbnRpbnVlfXZhciBjO249aShuKSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1uOmMubGVmdD1uKSx0W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfX19KGUpLGgubGVmdD09PXI/aC5sZWZ0PW51bGw6aC5yaWdodD1udWxsLG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImtleSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbmRleCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLHAubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc05leHQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSEiKTt2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9ZVtlLmxlbmd0aC0xXTtyW3IubGVuZ3RoLTFdPW5ldyBuKGkuX2NvbG9yLGkua2V5LHQsaS5sZWZ0LGkucmlnaHQsaS5fY291bnQpO2Zvcih2YXIgYT1lLmxlbmd0aC0yO2E+PTA7LS1hKShpPWVbYV0pLmxlZnQ9PT1lW2ErMV0/clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLHJbYSsxXSxpLnJpZ2h0LGkuX2NvdW50KTpyW2FdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LHJbYSsxXSxpLl9jb3VudCk7cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxyWzBdKX0scC5wcmV2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUubGVmdClmb3IoZT1lLmxlZnQ7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ubGVmdD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc1ByZXYiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB1KHQpO3JldHVybiByLnVwZGF0ZShlKSxyfTt2YXIgbj10KCIuL2xpYi90ZXh0LmpzIiksaT10KCIuL2xpYi9saW5lcy5qcyIpLGE9dCgiLi9saWIvYmFja2dyb3VuZC5qcyIpLG89dCgiLi9saWIvY3ViZS5qcyIpLHM9dCgiLi9saWIvdGlja3MuanMiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPWEodCl9dmFyIGY9dS5wcm90b3R5cGU7ZnVuY3Rpb24gaCgpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWYudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixhPWUuYmluZCh0aGlzLCExLE51bWJlciksbz1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxsPWUuYmluZCh0aGlzLCExLFN0cmluZyksYz1lLmJpbmQodGhpcywhMCwoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSksdT0hMSxmPSExO2lmKCJib3VuZHMiaW4gdClmb3IodmFyIGg9dC5ib3VuZHMscD0wO3A8MjsrK3ApZm9yKHZhciBkPTA7ZDwzOysrZCloW3BdW2RdIT09dGhpcy5ib3VuZHNbcF1bZF0mJihmPSEwKSx0aGlzLmJvdW5kc1twXVtkXT1oW3BdW2RdO2lmKCJ0aWNrcyJpbiB0KXtyPXQudGlja3MsdT0hMCx0aGlzLmF1dG9UaWNrcz0hMTtmb3IocD0wO3A8MzsrK3ApdGhpcy50aWNrU3BhY2luZ1twXT0wfWVsc2UgYSgidGlja1NwYWNpbmciKSYmKHRoaXMuYXV0b1RpY2tzPSEwLGY9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKCJ0aWNrcyJpbiB0fHwidGlja1NwYWNpbmciaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSxmPSEwLHU9ITAsdGhpcy5fZmlyc3RJbml0PSExKSxmJiZ0aGlzLmF1dG9UaWNrcyYmKHI9cy5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZyksdT0hMCksdSl7Zm9yKHA9MDtwPDM7KytwKXJbcF0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKTtzLmVxdWFsKHIsdGhpcy50aWNrcyk/dT0hMTp0aGlzLnRpY2tzPXJ9bygidGlja0VuYWJsZSIpLGwoInRpY2tGb250IikmJih1PSEwKSxhKCJ0aWNrU2l6ZSIpLGEoInRpY2tBbmdsZSIpLGEoInRpY2tQYWQiKSxjKCJ0aWNrQ29sb3IiKTt2YXIgbT1sKCJsYWJlbHMiKTtsKCJsYWJlbEZvbnQiKSYmKG09ITApLG8oImxhYmVsRW5hYmxlIiksYSgibGFiZWxTaXplIiksYSgibGFiZWxQYWQiKSxjKCJsYWJlbENvbG9yIiksbygibGluZUVuYWJsZSIpLG8oImxpbmVNaXJyb3IiKSxhKCJsaW5lV2lkdGgiKSxjKCJsaW5lQ29sb3IiKSxvKCJsaW5lVGlja0VuYWJsZSIpLG8oImxpbmVUaWNrTWlycm9yIiksYSgibGluZVRpY2tMZW5ndGgiKSxhKCJsaW5lVGlja1dpZHRoIiksYygibGluZVRpY2tDb2xvciIpLG8oImdyaWRFbmFibGUiKSxhKCJncmlkV2lkdGgiKSxjKCJncmlkQ29sb3IiKSxvKCJ6ZXJvRW5hYmxlIiksYygiemVyb0xpbmVDb2xvciIpLGEoInplcm9MaW5lV2lkdGgiKSxvKCJiYWNrZ3JvdW5kRW5hYmxlIiksYygiYmFja2dyb3VuZENvbG9yIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYobXx8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgaCxuZXcgaCxuZXcgaF07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgZj1hLGg9cyxwPW8sZD1sO2MmMTw8dSYmKGY9cyxoPWEscD1sLGQ9byksZlt1XT1yWzBdW3VdLGhbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBtPVswLDAsMF0sZz17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxmLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgdj1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07Zi5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8Zztmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxmPXUuY3ViZUVkZ2VzLGg9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLFQ9blsxNV0saz0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKlQpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxBPTA7QTwzOysrQSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW0FdPWZbQV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbQV09aFtBXTt2YXIgTT1wO2ZvcihBPTA7QTwzOysrQSlkKHBbQV0sQSx0aGlzLmJvdW5kcyxmLGgpO2U9dGhpcy5nbDt2YXIgUyxFPW07Zm9yKEE9MDtBPDM7KytBKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtBXT9FW0FdPWhbQV06RVtBXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKEE9MDtBPDM7KytBKXt2YXIgTD1bMCwwLDBdO2hbQV0+MD9MW0FdPWFbMV1bQV06TFtBXT1hWzBdW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0Mpe3ZhciBQPShBKzErQyklMyxJPShBKzErKDFeQykpJTM7dGhpcy5ncmlkRW5hYmxlW1BdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZChQLEksdGhpcy5ib3VuZHMsTCx0aGlzLmdyaWRDb2xvcltQXSx0aGlzLmdyaWRXaWR0aFtQXSp0aGlzLnBpeGVsUmF0aW8pfWZvcihDPTA7QzwyOysrQyl7UD0oQSsxK0MpJTMsST0oQSsxKygxXkMpKSUzO3RoaXMuemVyb0VuYWJsZVtJXSYmTWF0aC5taW4oYVswXVtJXSxhWzFdW0ldKTw9MCYmTWF0aC5tYXgoYVswXVtJXSxhWzFdW0ldKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oUCxJLHRoaXMuYm91bmRzLEwsdGhpcy56ZXJvTGluZUNvbG9yW0ldLHRoaXMuemVyb0xpbmVXaWR0aFtJXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoQT0wO0E8MzsrK0Epe3RoaXMubGluZUVuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShBLHRoaXMuYm91bmRzLE1bQV0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW0FdLHRoaXMubGluZVdpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIE89Yyh2LE1bQV0ucHJpbWFsTWlub3IpLHo9Yyh5LE1bQV0ubWlycm9yTWlub3IpLEQ9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoQz0wO0M8MzsrK0Mpe3ZhciBSPWsvcls1KkNdO09bQ10qPURbQ10qUix6W0NdKj1EW0NdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ucHJpbWFsT2Zmc2V0LE8sdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoQSxNW0FdLm1pcnJvck9mZnNldCx6LHRoaXMubGluZVRpY2tDb2xvcltBXSx0aGlzLmxpbmVUaWNrV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjB8fGE+MCYmbDwwfHxhPDAmJmw+MHx8YTwwJiZsPDA/TihuKToobz4wJiZzPjB8fG8+MCYmczwwfHxvPDAmJnM+MHx8bzwwJiZzPDApJiZOKGkpfWZvcihBPTA7QTwzOysrQSl7dmFyIFU9TVtBXS5wcmltYWxNaW5vcixWPU1bQV0ubWlycm9yTWlub3IsSD1jKHgsTVtBXS5wcmltYWxPZmZzZXQpO2ZvcihDPTA7QzwzOysrQyl0aGlzLmxpbmVUaWNrRW5hYmxlW0FdJiYoSFtDXSs9aypVW0NdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbQ10sMCkvcls1KkNdKTt2YXIgcT1bMCwwLDBdO2lmKHFbQV09MSx0aGlzLnRpY2tFbmFibGVbQV0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbQV0/KHRoaXMudGlja0FuZ2xlW0FdPTAsdGhpcy50aWNrQWxpZ25bQV09ImF1dG8iKTp0aGlzLnRpY2tBbGlnbltBXT0tMSxGPTEsImF1dG8iPT09KFM9W3RoaXMudGlja0FsaWduW0FdLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKSxCPVswLDAsMF0saihBLFUsVik7Zm9yKEM9MDtDPDM7KytDKUhbQ10rPWsqVVtDXSp0aGlzLnRpY2tQYWRbQ10vcls1KkNdO3RoaXMuX3RleHQuZHJhd1RpY2tzKEEsdGhpcy50aWNrU2l6ZVtBXSx0aGlzLnRpY2tBbmdsZVtBXSxILHRoaXMudGlja0NvbG9yW0FdLHEsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW0FdKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW0FdLmxlbmd0aD40JiYoTihBKSxGPTEpLCJhdXRvIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bQV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pO2ZvcihDPTA7QzwzOysrQylIW0NdKz1rKlVbQ10qdGhpcy5sYWJlbFBhZFtDXS9yWzUqQ107SFtBXSs9LjUqKGFbMF1bQV0rYVsxXVtBXSksdGhpcy5fdGV4dC5kcmF3TGFiZWwoQSx0aGlzLmxhYmVsU2l6ZVtBXSx0aGlzLmxhYmVsQW5nbGVbQV0sSCx0aGlzLmxhYmVsQ29sb3JbQV0sWzAsMCwwXSxCLFMpfX10aGlzLl90ZXh0LnVuYmluZCgpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6NzEsIi4vbGliL2N1YmUuanMiOjcyLCIuL2xpYi9saW5lcy5qcyI6NzMsIi4vbGliL3RleHQuanMiOjc1LCIuL2xpYi90aWNrcy5qcyI6NzZ9XSw3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10scz0wLGw9MDtsPDM7KytsKWZvcih2YXIgYz0obCsxKSUzLHU9KGwrMiklMyxmPVswLDAsMF0saD1bMCwwLDBdLHA9LTE7cDw9MTtwKz0yKXtyLnB1c2gocyxzKzIscysxLHMrMSxzKzIscyszKSxmW2xdPXAsaFtsXT1wO2Zvcih2YXIgZD0tMTtkPD0xO2QrPTIpe2ZbY109ZDtmb3IodmFyIG09LTE7bTw9MTttKz0yKWZbdV09bSxlLnB1c2goZlswXSxmWzFdLGZbMl0saFswXSxoWzFdLGhbMl0pLHMrPTF9dmFyIGc9YztjPXUsdT1nfXZhciB2PW4odCxuZXcgRmxvYXQzMkFycmF5KGUpKSx5PW4odCxuZXcgVWludDE2QXJyYXkociksdC5FTEVNRU5UX0FSUkFZX0JVRkZFUikseD1pKHQsW3tidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyNH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyNH1dLHkpLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYi5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0xLG5ldyBvKHQsdix4LGIpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikuYmc7ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxpW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6YX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLHRoaXMudmFvLnVuYmluZCgpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6NzQsImdsLWJ1ZmZlciI6NzgsImdsLXZhbyI6MTUwfV0sNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscCl7aShzLGUsdCksaShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09YVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWFbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWFbX11bMF0saChsW3ldLHUscykseSs9MX19dmFyIHc9LTE7Zm9yKHg9MDt4PDg7Kyt4KXtmb3IodmFyIFQ9bFt4XVszXSxrPTA7azwzOysrayljW3hdW2tdPWxbeF1ba10vVDtwJiYoY1t4XVsyXSo9LTEpLFQ8MCYmKHc8MHx8Y1t4XVsyXTxjW3ddWzJdKSYmKHc9eCl9aWYodzwwKXt3PTA7Zm9yKHZhciBBPTA7QTwzOysrQSl7Zm9yKHZhciBNPShBKzIpJTMsUz0oQSsxKSUzLEU9LTEsTD0tMSxDPTA7QzwyOysrQyl7dmFyIFA9KE89Qzw8QSkrKEM8PE0pKygxLUM8PFMpLEk9TysoMS1DPDxNKSsoQzw8Uyk7byhjW09dLGNbUF0sY1tJXSxmKTwwfHwoQz9FPTE6TD0xKX1pZihFPDB8fEw8MClMPkUmJih3fD0xPDxBKTtlbHNle2ZvcihDPTA7QzwyOysrQyl7UD0oTz1DPDxBKSsoQzw8TSkrKDEtQzw8UyksST1PKygxLUM8PE0pKyhDPDxTKTt2YXIgTyx6PWQoW2xbT10sbFtQXSxsW0ldLGxbTysoMTw8TSkrKDE8PFMpXV0pO0M/RT16Okw9en1MPkUmJih3fD0xPDxBKX19fXZhciBEPTdedyxSPS0xO2Zvcih4PTA7eDw4OysreCl4IT09dyYmeCE9PUQmJihSPDB8fGNbUl1bMV0+Y1t4XVsxXSkmJihSPXgpO3ZhciBGPS0xO2Zvcih4PTA7eDwzOysreCl7aWYoKE49Ul4xPDx4KSE9PXcmJk4hPT1EKUY8MCYmKEY9TiksKFM9Y1tOXSlbMF08Y1tGXVswXSYmKEY9Til9dmFyIEI9LTE7Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgTjtpZigoTj1SXjE8PHgpIT09dyYmTiE9PUQmJk4hPT1GKUI8MCYmKEI9TiksKFM9Y1tOXSlbMF0+Y1tCXVswXSYmKEI9Til9dmFyIGo9bTtqWzBdPWpbMV09alsyXT0wLGpbbi5sb2cyKEZeUildPVImRixqW24ubG9nMihSXkIpXT1SJkI7dmFyIFU9N15CO1U9PT13fHxVPT09RD8oVT03XkYsaltuLmxvZzIoQl5VKV09VSZCKTpqW24ubG9nMihGXlUpXT1VJkY7dmFyIFY9ZyxIPXc7Zm9yKEE9MDtBPDM7KytBKVZbQV09SCYxPDxBPy0xOjE7cmV0dXJuIHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1tYXQ0L211bHRpcGx5IiksYT10KCJzcGxpdC1wb2x5Z29uIiksbz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxzPW5ldyBBcnJheSgxNiksbD1uZXcgQXJyYXkoOCksYz1uZXcgQXJyYXkoOCksdT1uZXcgQXJyYXkoMyksZj1bMCwwLDBdO2Z1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj0wO248NDsrK24pe3Rbbl09clsxMituXTtmb3IodmFyIGk9MDtpPDM7KytpKXRbbl0rPWVbaV0qcls0Kmkrbl19fSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpbFt0XT1bMSwxLDEsMV0sY1t0XT1bMSwxLDFdfSgpO3ZhciBwPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV07ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHAubGVuZ3RoOysrZSlpZigodD1hLnBvc2l0aXZlKHQscFtlXSkpLmxlbmd0aDwzKXJldHVybiAwO3ZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sbz0wO2ZvcihlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIHM9dFtlXSxsPXRbZSsxXSxjPXNbMF0vc1szXS1uLHU9c1sxXS9zWzNdLWksZj1sWzBdL2xbM10tbixoPWxbMV0vbFszXS1pO28rPU1hdGguYWJzKGMqaC11KmYpfXJldHVybiBvfXZhciBtPVsxLDEsMV0sZz1bMCwwLDBdLHY9e2N1YmVFZGdlczptLGF4aXM6Z319LHsiYml0LXR3aWRkbGUiOjMyLCJnbC1tYXQ0L211bHRpcGx5IjoxMDAsInJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0LCJzcGxpdC1wb2x5Z29uIjozMDB9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgaD1vLmxlbmd0aC8zfDAsZD0wO2Q8cltmXS5sZW5ndGg7KytkKXt2YXIgbT0rcltmXVtkXS54O28ucHVzaChtLDAsMSxtLDEsMSxtLDAsLTEsbSwwLC0xLG0sMSwxLG0sMSwtMSl9dmFyIGc9by5sZW5ndGgvM3wwO3NbZl09aCxsW2ZdPWctaDtoPW8ubGVuZ3RoLzN8MDtmb3IodmFyIHY9MDt2PHJbZl0ubGVuZ3RoOysrdil7bT0rcltmXVt2XS54O28ucHVzaChtLDAsMSxtLDEsMSxtLDAsLTEsbSwwLC0xLG0sMSwxLG0sMSwtMSl9Zz1vLmxlbmd0aC8zfDA7Y1tmXT1oLHVbZl09Zy1ofXZhciB5PW4odCxuZXcgRmxvYXQzMkFycmF5KG8pKSx4PWkodCxbe2J1ZmZlcjp5LHR5cGU6dC5GTE9BVCxzaXplOjMsc3RyaWRlOjAsb2Zmc2V0OjB9XSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxuZXcgcCh0LHkseCxiLGwscyx1LGMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikubGluZSxvPVswLDAsMF0scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMSwxXTtmdW5jdGlvbiBmKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIHAodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy52ZXJ0QnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMudGlja0NvdW50PWksdGhpcy50aWNrT2Zmc2V0PWEsdGhpcy5ncmlkQ291bnQ9byx0aGlzLmdyaWRPZmZzZXQ9c312YXIgZD1wLnByb3RvdHlwZTtkLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tb2RlbD10LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnZpZXc9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uPXIsdVswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCx1WzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5TaGFwZT11LHRoaXMudmFvLmJpbmQoKX0sZC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sZC5kcmF3QXhpc0xpbmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1mKHMpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1zLGFbdF09ZVsxXVt0XS1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1hO3ZhciBvLHU9aChjLHIpO3VbdF0rPWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXUsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9biwobz1mKGwpKVsodCsyKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpLChvPWYobCkpWyh0KzEpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LGQuZHJhd0F4aXNUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1mKG8pO2FbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1pO3ZhciBzPWYobCk7c1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fSxkLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZih0aGlzLmdyaWRDb3VudFt0XSl7dmFyIHU9ZihzKTt1W2VdPXJbMV1bZV0tclswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9dTt2YXIgcD1oKGMsbik7cFtlXSs9clswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9cDt2YXIgZD1mKG8pO2RbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9ZDt2YXIgbT1mKGwpO21bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW0sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMuZ3JpZENvdW50W3RdLHRoaXMuZ3JpZE9mZnNldFt0XSl9fSxkLmRyYXdaZXJvPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1mKHMpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1vLG9bdF09clsxXVt0XS1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1vO3ZhciB1PWgoYyxuKTt1W3RdKz1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11O3ZhciBwPWYobCk7cFtlXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cCx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnZlcnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjo3NCwiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTB9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcblxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xuICB2ZWMzIG1pbm9yID0gcG9zaXRpb24ueSAqIG1pbm9yQXhpcztcblxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XG4gIHZlYzMgcFBvc2l0aW9uID0gcHJvamVjdCh2UG9zaXRpb24pO1xuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xuXG4gIHZlYzIgc2NyZWVuID0gbm9ybWFsaXplKChvZmZzZXQgLSBwUG9zaXRpb24pLnh5ICogc2NyZWVuU2hhcGUpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSJdKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07dmFyIHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBheGlzLCBhbGlnbkRpciwgYWxpZ25PcHQ7XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbmZsb2F0IGNvbXB1dGVWaWV3QW5nbGUodmVjMyBhLCB2ZWMzIGIpIHtcbiAgdmVjMyBBID0gcHJvamVjdChhKTtcbiAgdmVjMyBCID0gcHJvamVjdChiKTtcblxuICByZXR1cm4gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHJlc29sdXRpb24ueSxcbiAgICAoQi54IC0gQS54KSAqIHJlc29sdXRpb24ueFxuICApO1xufVxuXG5jb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyO1xuY29uc3QgZmxvYXQgVFdPX1BJID0gMi4wICogUEk7XG5jb25zdCBmbG9hdCBIQUxGX1BJID0gMC41ICogUEk7XG5jb25zdCBmbG9hdCBPTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBQSTtcblxuaW50IG9wdGlvbiA9IGludChmbG9vcihhbGlnbk9wdC54ICsgMC4wMDEpKTtcbmZsb2F0IGh2X3JhdGlvID0gICAgICAgYWxpZ25PcHQueTtcbmJvb2wgZW5hYmxlQWxpZ24gPSAgICAoYWxpZ25PcHQueiAhPSAwLjApO1xuXG5mbG9hdCBtb2RfYW5nbGUoZmxvYXQgYSkge1xuICByZXR1cm4gbW9kKGEsIFBJKTtcbn1cblxuZmxvYXQgcG9zaXRpdmVfYW5nbGUoZmxvYXQgYSkge1xuICByZXR1cm4gbW9kX2FuZ2xlKChhIDwgMC4wKSA/XG4gICAgYSArIFRXT19QSSA6XG4gICAgYVxuICApO1xufVxuXG5mbG9hdCBsb29rX3Vwd2FyZHMoZmxvYXQgYSkge1xuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XG4gIHJldHVybiAoKGIgPiBIQUxGX1BJKSAmJiAoYiA8PSBPTkVfQU5EX0hBTEZfUEkpKSA/XG4gICAgYiAtIFBJIDpcbiAgICBiO1xufVxuXG5mbG9hdCBsb29rX2hvcml6b250YWxfb3JfdmVydGljYWwoZmxvYXQgYSwgZmxvYXQgcmF0aW8pIHtcbiAgLy8gcmF0aW8gY29udHJvbHMgdGhlIHJhdGlvIGJldHdlZW4gYmVpbmcgaG9yaXpvbnRhbCB0byAodmVydGljYWwgKyBob3Jpem9udGFsKVxuICAvLyBpZiByYXRpbyBpcyBzZXQgdG8gMC41IHRoZW4gaXQgaXMgNTAlLCA1MCUuXG4gIC8vIHdoZW4gdXNpbmcgYSBoaWdoZXIgcmF0aW8gZS5nLiAwLjc1IHRoZSByZXN1bHQgd291bGRcbiAgLy8gbGlrZWx5IGJlIG1vcmUgaG9yaXpvbnRhbCB0aGFuIHZlcnRpY2FsLlxuXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcblxuICByZXR1cm5cbiAgICAoYiA8ICggICAgICByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoMi4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyAtSEFMRl9QSSA6XG4gICAgKGIgPCAoMi4wICsgcmF0aW8pICogSEFMRl9QSSkgPyAwLjAgOlxuICAgIChiIDwgKDQuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gSEFMRl9QSSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA7XG59XG5cbmZsb2F0IHJvdW5kVG8oZmxvYXQgYSwgZmxvYXQgYikge1xuICByZXR1cm4gZmxvYXQoYiAqIGZsb29yKChhICsgMC41ICogYikgLyBiKSk7XG59XG5cbmZsb2F0IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKGZsb2F0IGEsIGludCBuKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgZmxvYXQgZGl2ID0gVFdPX1BJIC8gZmxvYXQobik7XG4gIGZsb2F0IGMgPSByb3VuZFRvKGIsIGRpdik7XG4gIHJldHVybiBsb29rX3Vwd2FyZHMoYyk7XG59XG5cbmZsb2F0IGFwcGx5QWxpZ25PcHRpb24oZmxvYXQgcmF3QW5nbGUsIGZsb2F0IGRlbHRhKSB7XG4gIHJldHVyblxuICAgIChvcHRpb24gPiAgMikgPyBsb29rX3JvdW5kX25fZGlyZWN0aW9ucyhyYXdBbmdsZSArIGRlbHRhLCBvcHRpb24pIDogICAgICAgLy8gb3B0aW9uIDMtbjogcm91bmQgdG8gbiBkaXJlY3Rpb25zXG4gICAgKG9wdGlvbiA9PSAyKSA/IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChyYXdBbmdsZSArIGRlbHRhLCBodl9yYXRpbykgOiAvLyBob3Jpem9udGFsIG9yIHZlcnRpY2FsXG4gICAgKG9wdGlvbiA9PSAxKSA/IHJhd0FuZ2xlICsgZGVsdGEgOiAgICAgICAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIGZsaXAgdG8gYWxpZ24gd2l0aCBvbmUgZGlyZWN0aW9uIG9mIHRoZSBheGlzXG4gICAgKG9wdGlvbiA9PSAwKSA/IGxvb2tfdXB3YXJkcyhyYXdBbmdsZSkgOiAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIHN0YXkgdXB3YXJkc1xuICAgIChvcHRpb24gPT0tMSkgPyAwLjAgOiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZnVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhbGwgdGV4dHMgcmVtYWlucyBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIHJhd0FuZ2xlOyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGJhY2sgcmF3IGlucHV0IGFuZ2xlXG59XG5cbmJvb2wgaXNBeGlzVGl0bGUgPSAoYXhpcy54ID09IDAuMCkgJiZcbiAgICAgICAgICAgICAgICAgICAoYXhpcy55ID09IDAuMCkgJiZcbiAgICAgICAgICAgICAgICAgICAoYXhpcy56ID09IDAuMCk7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy9Db21wdXRlIHdvcmxkIG9mZnNldFxuICBmbG9hdCBheGlzRGlzdGFuY2UgPSBwb3NpdGlvbi56O1xuICB2ZWMzIGRhdGFQb3NpdGlvbiA9IGF4aXNEaXN0YW5jZSAqIGF4aXMgKyBvZmZzZXQ7XG5cbiAgZmxvYXQgYmV0YSA9IGFuZ2xlOyAvLyBpLmUuIHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzIGZvciBlYWNoIHRpY2tcblxuICBmbG9hdCBheGlzQW5nbGU7XG4gIGZsb2F0IGNsaXBBbmdsZTtcbiAgZmxvYXQgZmxpcDtcblxuICBpZiAoZW5hYmxlQWxpZ24pIHtcbiAgICBheGlzQW5nbGUgPSAoaXNBeGlzVGl0bGUpID8gSEFMRl9QSSA6XG4gICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGF4aXMpO1xuICAgIGNsaXBBbmdsZSA9IGNvbXB1dGVWaWV3QW5nbGUoZGF0YVBvc2l0aW9uLCBkYXRhUG9zaXRpb24gKyBhbGlnbkRpcik7XG5cbiAgICBheGlzQW5nbGUgKz0gKHNpbihheGlzQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xuICAgIGNsaXBBbmdsZSArPSAoc2luKGNsaXBBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG5cbiAgICBmbGlwID0gKGRvdCh2ZWMyKGNvcyhheGlzQW5nbGUpLCBzaW4oYXhpc0FuZ2xlKSksXG4gICAgICAgICAgICAgICAgdmVjMihzaW4oY2xpcEFuZ2xlKSwtY29zKGNsaXBBbmdsZSkpKSA+IDAuMCkgPyAxLjAgOiAwLjA7XG5cbiAgICBiZXRhICs9IGFwcGx5QWxpZ25PcHRpb24oY2xpcEFuZ2xlLCBmbGlwICogUEkpO1xuICB9XG5cbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XG5cbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKFxuICAgICBjb3MoYmV0YSksIHNpbihiZXRhKSxcbiAgICAtc2luKGJldGEpLCBjb3MoYmV0YSlcbiAgKTtcblxuICB2ZWMyIHZpZXdPZmZzZXQgPSAyLjAgKiBwbGFuZVhmb3JtICogcGxhbmVDb29yZCAvIHJlc29sdXRpb247XG5cbiAgLy9Db21wdXRlIGNsaXAgcG9zaXRpb25cbiAgdmVjMyBjbGlwUG9zaXRpb24gPSBwcm9qZWN0KGRhdGFQb3NpdGlvbik7XG5cbiAgLy9BcHBseSB0ZXh0IG9mZnNldCBpbiBjbGlwIGNvb3JkaW5hdGVzXG4gIGNsaXBQb3NpdGlvbiArPSB2ZWMzKHZpZXdPZmZzZXQsIDAuMCk7XG5cbiAgLy9Eb25lXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwUG9zaXRpb24sIDEuMCk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHMsbCxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBlbmFibGU7XG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgdmVjMyBzaWduQXhpcyA9IHNpZ24oYm91bmRzWzFdIC0gYm91bmRzWzBdKTtcblxuICB2ZWMzIHJlYWxOb3JtYWwgPSBzaWduQXhpcyAqIG5vcm1hbDtcblxuICBpZihkb3QocmVhbE5vcm1hbCwgZW5hYmxlKSA+IDAuMCkge1xuICAgIHZlYzMgbWluUmFuZ2UgPSBtaW4oYm91bmRzWzBdLCBib3VuZHNbMV0pO1xuICAgIHZlYzMgbWF4UmFuZ2UgPSBtYXgoYm91bmRzWzBdLCBib3VuZHNbMV0pO1xuICAgIHZlYzMgblBvc2l0aW9uID0gbWl4KG1pblJhbmdlLCBtYXhSYW5nZSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSk7XG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9XG5cbiAgY29sb3JDaGFubmVsID0gYWJzKHJlYWxOb3JtYWwpO1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnkgKiBjb2xvcnNbMV0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueiAqIGNvbG9yc1syXTtcbn0iXSk7ci5iZz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGMsdSxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoxMzIsZ2xzbGlmeToyMzF9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGY9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9byh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGgsdSxmKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxmPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixmWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249Zn0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBmPShufHwxMikvMTIsaD11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLG09cC5sZW5ndGg7ZDxtOysrZClmb3IodmFyIGc9cFtkXSx2PTI7dj49MDstLXYpe3ZhciB5PWhbZ1t2XV07by5wdXNoKGYqeVswXSwtZip5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtmW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGhbZF09KG8ubGVuZ3RoLzN8MCktZltkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIG09MDttPG5bZF0ubGVuZ3RoOysrbSluW2RdW21dLnRleHQmJnMobltkXVttXS54LG5bZF1bbV0udGV4dCxuW2RdW21dLmZvbnR8fGksbltkXVttXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1mLHRoaXMubGFiZWxDb3VudD1ofSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6NzQsX3Byb2Nlc3M6NSwiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTAsInZlY3Rvcml6ZS10ZXh0IjozMTF9XSw3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCsiIixuPXIuaW5kZXhPZigiLiIpLGk9MDtuPj0wJiYoaT1yLmxlbmd0aC1uLTEpO3ZhciBhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZCh0KmUqYSkscz1vKyIiO2lmKHMuaW5kZXhPZigiZSIpPj0wKXJldHVybiBzO3ZhciBsPW8vYSxjPW8lYTtvPDA/KGw9MHwtTWF0aC5jZWlsKGwpLGM9MHwtYyk6KGw9MHxNYXRoLmZsb29yKGwpLGN8PTApO3ZhciB1PSIiK2w7aWYobzwwJiYodT0iLSIrdSksaSl7Zm9yKHZhciBmPSIiK2M7Zi5sZW5ndGg8aTspZj0iMCIrZjtyZXR1cm4gdSsiLiIrZn1yZXR1cm4gdX1yLmNyZWF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTwzOysraSl7Zm9yKHZhciBhPVtdLG89KHRbMF1baV0sdFsxXVtpXSwwKTtvKmVbaV08PXRbMV1baV07KytvKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtmb3Iobz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9LHIuZXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLGE9ZVtyXVtuXTtpZihpLnghPT1hLnh8fGkudGV4dCE9PWEudGV4dHx8aS5mb250IT09YS5mb250fHxpLmZvbnRDb2xvciE9PWEuZm9udENvbG9yfHxpLmZvbnRTaXplIT09YS5mb250U2l6ZXx8aS5keCE9PWEuZHh8fGkuZHkhPT1hLmR5KXJldHVybiExfX1yZXR1cm4hMH19LHt9XSw3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxmKXt2YXIgaD1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLHY9ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oZj1mfHxhKGgscCx2LHgseSkpLmF4aXM7byh1LHAsaCksbyh1LHYsdSk7Zm9yKHZhciBfPW0sdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBUPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBrPTA7azwzOysrayl7dmFyIEE9KGsrMSklMyxNPShrKzIpJTMsUz1nO3Q6Zm9yKHc9MDt3PDI7Kyt3KXt2YXIgRT1bXTtpZihiW2tdPDAhPSEhdyl7U1trXT14W3ddW2tdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe1NbQV09eFtMXnddW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0MpU1tNXT14W0NeTF53XVtNXSxFLnB1c2goUy5zbGljZSgpKX12YXIgUD15PzU6NDtmb3IoTD1QO0w9PT1QOysrTCl7aWYoMD09PUUubGVuZ3RoKWNvbnRpbnVlIHQ7RT1pLnBvc2l0aXZlKEUsVFtMXSl9Zm9yKEw9MDtMPEUubGVuZ3RoOysrTCl7TT1FW0xdO3ZhciBJPWQoZyx1LE0scixsKTtmb3IoQz0wO0M8MzsrK0MpX1tDXS5sbz1NYXRoLm1pbihfW0NdLmxvLE1bQ10pLF9bQ10uaGk9TWF0aC5tYXgoX1tDXS5oaSxNW0NdKSxDIT09ayYmKF9bQ10ucGl4ZWxzUGVyRGF0YVVuaXQ9TWF0aC5taW4oX1tDXS5waXhlbHNQZXJEYXRhVW5pdCxNYXRoLmFicyhJW0NdKSkpfX19fXJldHVybiBffTt2YXIgbj10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIiksaT10KCJzcGxpdC1wb2x5Z29uIiksYT10KCIuL2xpYi9jdWJlLmpzIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGw9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgaD1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1oLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixmPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrZipmKX1yZXR1cm4gdH12YXIgbT1bbmV3IGYoMS8wLC0xLzAsMS8wKSxuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCldLGc9WzAsMCwwXX0seyIuL2xpYi9jdWJlLmpzIjo3MiwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6NjcsImdsLW1hdDQvbXVsdGlwbHkiOjEwMCwiZ2wtbWF0NC90cmFuc3Bvc2UiOjEwOSwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IjoyMjEsInNwbGl0LXBvbHlnb24iOjMwMH1dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoIm5kYXJyYXkiKSxvPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmdm9pZCAwIT09dC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihvLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2IjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZjtmPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LCJ1aW50MTYiKTp1KHQsImZsb2F0MzIiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2Y6Zi5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoZil9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7KHR8PTApPD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsbj1ufHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6MjU5LCJuZGFycmF5LW9wcyI6MjU0LCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycyxhPXtwb3NpdGlvbnM6W10sdmVydGV4SW50ZW5zaXR5OltdLHZlcnRleEludGVuc2l0eUJvdW5kczp0LnZlcnRleEludGVuc2l0eUJvdW5kcyx2ZWN0b3JzOltdLGNlbGxzOltdLGNvbmVPZmZzZXQ6dC5jb25lT2Zmc2V0LGNvbG9ybWFwOnQuY29sb3JtYXB9O2lmKDA9PT10LnBvc2l0aW9ucy5sZW5ndGgpcmV0dXJuIGUmJihlWzBdPVswLDAsMF0sZVsxXT1bMCwwLDBdKSxhO2Zvcih2YXIgbz0wLHM9MS8wLGw9LTEvMCxjPTEvMCx1PS0xLzAsZj0xLzAsaD0tMS8wLHA9bnVsbCxkPW51bGwsbT1bXSxnPTEvMCx2PSExLHk9MDt5PHIubGVuZ3RoO3krKyl7dmFyIHg9clt5XTtzPU1hdGgubWluKHhbMF0scyksbD1NYXRoLm1heCh4WzBdLGwpLGM9TWF0aC5taW4oeFsxXSxjKSx1PU1hdGgubWF4KHhbMV0sdSksZj1NYXRoLm1pbih4WzJdLGYpLGg9TWF0aC5tYXgoeFsyXSxoKTt2YXIgYj1pW3ldO2lmKG4ubGVuZ3RoKGIpPm8mJihvPW4ubGVuZ3RoKGIpKSx5KXt2YXIgXz0yKm4uZGlzdGFuY2UocCx4KS8obi5sZW5ndGgoZCkrbi5sZW5ndGgoYikpO18/KGc9TWF0aC5taW4oZyxfKSx2PSExKTp2PSEwfXZ8fChwPXgsZD1iKSxtLnB1c2goYil9dmFyIHc9W3MsYyxmXSxUPVtsLHUsaF07ZSYmKGVbMF09dyxlWzFdPVQpLDA9PT1vJiYobz0xKTt2YXIgaz0xL287aXNGaW5pdGUoZyl8fChnPTEpLGEudmVjdG9yU2NhbGU9Zzt2YXIgQT10LmNvbmVTaXplfHwuNTt0LmFic29sdXRlQ29uZVNpemUmJihBPXQuYWJzb2x1dGVDb25lU2l6ZSprKSxhLmNvbmVTY2FsZT1BO3k9MDtmb3IodmFyIE09MDt5PHIubGVuZ3RoO3krKylmb3IodmFyIFM9KHg9clt5XSlbMF0sRT14WzFdLEw9eFsyXSxDPW1beV0sUD1uLmxlbmd0aChDKSprLEk9MDtJPDg7SSsrKXthLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnBvc2l0aW9ucy5wdXNoKFtTLEUsTCxNKytdKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlY3RvcnMucHVzaChDKSxhLnZlcnRleEludGVuc2l0eS5wdXNoKFAsUCxQKSxhLnZlcnRleEludGVuc2l0eS5wdXNoKFAsUCxQKTt2YXIgTz1hLnBvc2l0aW9ucy5sZW5ndGg7YS5jZWxscy5wdXNoKFtPLTYsTy01LE8tNF0sW08tMyxPLTIsTy0xXSl9cmV0dXJuIGF9O3ZhciBpPXQoIi4vbGliL3NoYWRlcnMiKTtlLmV4cG9ydHMuY3JlYXRlTWVzaD10KCIuL2NyZWF0ZV9tZXNoIiksZS5leHBvcnRzLmNyZWF0ZUNvbmVNZXNoPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuZXhwb3J0cy5jcmVhdGVNZXNoKHQscix7c2hhZGVyczppLHRyYWNlVHlwZToiY29uZSJ9KX19LHsiLi9jcmVhdGVfbWVzaCI6ODAsIi4vbGliL3NoYWRlcnMiOjgxLCJnbC12ZWMzIjoxNjl9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxsPXQoImdsLW1hdDQvaW52ZXJ0IiksYz10KCJuZGFycmF5IiksdT10KCJjb2xvcm1hcCIpLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGgodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5waWNrU2hhZGVyPW4sdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1pLHRoaXMudHJpYW5nbGVWZWN0b3JzPWEsdGhpcy50cmlhbmdsZUNvbG9ycz1zLHRoaXMudHJpYW5nbGVVVnM9bCx0aGlzLnRyaWFuZ2xlSWRzPW8sdGhpcy50cmlhbmdsZVZBTz1jLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMudHJhY2VUeXBlPXUsdGhpcy50dWJlU2NhbGU9MSx0aGlzLmNvbmVTY2FsZT0yLHRoaXMudmVjdG9yU2NhbGU9MSx0aGlzLmNvbmVPZmZzZXQ9LjI1LHRoaXMuX21vZGVsPWYsdGhpcy5fdmlldz1mLHRoaXMuX3Byb2plY3Rpb249Zix0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciBwPWgucHJvdG90eXBlO2Z1bmN0aW9uIGQodCxlKXt2YXIgcj1uKHQsZS5tZXNoU2hhZGVyLnZlcnRleCxlLm1lc2hTaGFkZXIuZnJhZ21lbnQsbnVsbCxlLm1lc2hTaGFkZXIuYXR0cmlidXRlcyk7cmV0dXJuIHIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NCxyfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1uKHQsZS5waWNrU2hhZGVyLnZlcnRleCxlLnBpY2tTaGFkZXIuZnJhZ21lbnQsbnVsbCxlLnBpY2tTaGFkZXIuYXR0cmlidXRlcyk7cmV0dXJuIHIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NCxyfXAuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxwLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHAucGlja1Nsb3RzPTEscC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdm9pZCAwIT09dC50dWJlU2NhbGUmJih0aGlzLnR1YmVTY2FsZT10LnR1YmVTY2FsZSksdm9pZCAwIT09dC52ZWN0b3JTY2FsZSYmKHRoaXMudmVjdG9yU2NhbGU9dC52ZWN0b3JTY2FsZSksdm9pZCAwIT09dC5jb25lU2NhbGUmJih0aGlzLmNvbmVTY2FsZT10LmNvbmVTY2FsZSksdm9pZCAwIT09dC5jb25lT2Zmc2V0JiYodGhpcy5jb25lT2Zmc2V0PXQuY29uZU9mZnNldCksdC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9dSh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiBjKHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZhciBhPVtdLG89W10scz1bXSxsPVtdLGY9W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW4sdGhpcy52ZWN0b3JzPWk7dmFyIGg9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxwPXQudmVydGV4SW50ZW5zaXR5LGQ9MS8wLG09LTEvMDtpZihwKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKWQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLG09K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBnPTA7ZzxwLmxlbmd0aDsrK2cpe3ZhciB2PXBbZ107ZD1NYXRoLm1pbihkLHYpLG09TWF0aC5tYXgobSx2KX1lbHNlIGZvcihnPTA7ZzxuLmxlbmd0aDsrK2cpe3Y9bltnXVsyXTtkPU1hdGgubWluKGQsdiksbT1NYXRoLm1heChtLHYpfXRoaXMuaW50ZW5zaXR5PXB8fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihnPTA7ZzxuLmxlbmd0aDsrK2cpZm9yKHZhciB5PW5bZ10seD0wO3g8MzsrK3gpIWlzTmFOKHlbeF0pJiZpc0Zpbml0ZSh5W3hdKSYmKHRoaXMuYm91bmRzWzBdW3hdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW3hdLHlbeF0pLHRoaXMuYm91bmRzWzFdW3hdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW3hdLHlbeF0pKTt2YXIgYj0wO3Q6Zm9yKGc9MDtnPHIubGVuZ3RoOysrZyl7dmFyIF89cltnXTtzd2l0Y2goXy5sZW5ndGgpe2Nhc2UgMzpmb3IoeD0wO3g8MzsrK3gpe3k9bltUPV9beF1dO2Zvcih2YXIgdz0wO3c8MzsrK3cpaWYoaXNOYU4oeVt3XSl8fCFpc0Zpbml0ZSh5W3ddKSljb250aW51ZSB0fWZvcih4PTA7eDwzOysreCl7dmFyIFQ7eT1uW1Q9X1syLXhdXTthLnB1c2goeVswXSx5WzFdLHlbMl0seVszXSk7dmFyIGs9aVtUXTtvLnB1c2goa1swXSxrWzFdLGtbMl0sa1szXXx8MCk7dmFyIEEsTT1oOzM9PT1NLmxlbmd0aD9zLnB1c2goTVswXSxNWzFdLE1bMl0sMSk6cy5wdXNoKE1bMF0sTVsxXSxNWzJdLE1bM10pLEE9cD9bKHBbVF0tZCkvKG0tZCksMF06Wyh5WzJdLWQpLyhtLWQpLDBdLGwucHVzaChBWzBdLEFbMV0pLGYucHVzaChnKX1iKz0xfX10aGlzLnRyaWFuZ2xlQ291bnQ9Yix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobyksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUocyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUobCksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGYpKX19LHAuZHJhd1RyYW5zcGFyZW50PXAuZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8ZixuPXQudmlld3x8ZixpPXQucHJvamVjdGlvbnx8ZixhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBjPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksaW52ZXJzZU1vZGVsOmYuc2xpY2UoKSxjbGlwQm91bmRzOmEsa2FtYmllbnQ6dGhpcy5hbWJpZW50TGlnaHQsa2RpZmZ1c2U6dGhpcy5kaWZmdXNlTGlnaHQsa3NwZWN1bGFyOnRoaXMuc3BlY3VsYXJMaWdodCxyb3VnaG5lc3M6dGhpcy5yb3VnaG5lc3MsZnJlc25lbDp0aGlzLmZyZXNuZWwsZXllUG9zaXRpb246WzAsMCwwXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sb3BhY2l0eTp0aGlzLm9wYWNpdHksdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHRleHR1cmU6MH07Yy5pbnZlcnNlTW9kZWw9bChjLmludmVyc2VNb2RlbCxjLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7cyh1LGMudmlldyxjLm1vZGVsKSxzKHUsYy5wcm9qZWN0aW9uLHUpLGwodSx1KTtmb3Iobz0wO288MzsrK28pYy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07Yy5saWdodFBvc2l0aW9uW29dPXAvaH1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIG09dGhpcy50cmlTaGFkZXI7bS5iaW5kKCksbS51bmlmb3Jtcz1jLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0scC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8ZixuPXQudmlld3x8ZixpPXQucHJvamVjdGlvbnx8ZixhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSl9LHAucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyksaT17cG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpuLGluZGV4Ok1hdGguZmxvb3IoclsxXS80OCl9O3JldHVybiJjb25lIj09PXRoaXMudHJhY2VUeXBlP2kuaW5kZXg9TWF0aC5mbG9vcihyWzFdLzQ4KToic3RyZWFtdHViZSI9PT10aGlzLnRyYWNlVHlwZSYmKGkuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5W3JbMV1dLGkudmVsb2NpdHk9dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksaS5kaXZlcmdlbmNlPXRoaXMudmVjdG9yc1tyWzFdXVszXSxpLmluZGV4PWUpLGl9LHAuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIuc2hhZGVyczsxPT09YXJndW1lbnRzLmxlbmd0aCYmKHQ9KGU9dCkuZ2wpO3ZhciBzPWQodCxuKSxsPW0odCxuKSx1PW8odCxjKG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7dS5nZW5lcmF0ZU1pcG1hcCgpLHUubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsdS5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGY9aSh0KSxwPWkodCksZz1pKHQpLHY9aSh0KSx5PWkodCkseD1hKHQsW3tidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjR9XSksYj1uZXcgaCh0LHUscyxsLGYscCx5LGcsdix4LHIudHJhY2VUeXBlfHwiY29uZSIpO3JldHVybiBiLnVwZGF0ZShlKSxifX0se2NvbG9ybWFwOjUzLCJnbC1idWZmZXIiOjc4LCJnbC1tYXQ0L2ludmVydCI6OTgsImdsLW1hdDQvbXVsdGlwbHkiOjEwMCwiZ2wtc2hhZGVyIjoxMzIsImdsLXRleHR1cmUyZCI6MTQ2LCJnbC12YW8iOjE1MCxuZGFycmF5OjI1OX1dLDgxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XG5cbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXG4gICkgPyAxLjAgOiAwLjA7XG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgdmVjMyB2MiA9IHYxIC0gZDtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGUsIGNvbmVTY2FsZSwgY29uZU9mZnNldDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3Rvci54eXopLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjMyJ9XX19LHtnbHNsaWZ5OjIzMX1dLDgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNGUzOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vMS4wL251bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7Ii4vMS4wL251bWJlcnMiOjgyfV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGY9MDtmPDM7KytmKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2ZdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSp1LHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0saD0wO2g8MzsrK2gpaWYoaXNOYU4odVtoXSl8fCFpc0Zpbml0ZSh1W2hdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgbTtpZihwWzBdW3NdPDApKG09dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKTtpZihwWzFdW3NdPjApKG09dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6ODUsImdsLWJ1ZmZlciI6NzgsImdsLXZhbyI6MTUwfV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoxMzIsZ2xzbGlmeToyMzF9XSw4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC10ZXh0dXJlMmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aXx8KGk9dC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCxhPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5ULG89dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMscz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UKTt2YXIgYz10LmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZmZXJzIik7IWwmJmMmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRQYXJhbWV0ZXIoZS5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpO2w9bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBuPTA7bjw9cjsrK24pe2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT0wO2E8bjsrK2EpaVthXT10LkNPTE9SX0FUVEFDSE1FTlQwK2E7Zm9yKGE9bjthPHI7KythKWlbYV09dC5OT05FO2xbbl09aX19KHQsYyk7QXJyYXkuaXNBcnJheShlKSYmKG49cixyPTB8ZVsxXSxlPTB8ZVswXSk7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNaXNzaW5nIHNoYXBlIHBhcmFtZXRlciIpO3ZhciB1PXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+dXx8cjwwfHxyPnUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFBhcmFtZXRlcnMgYXJlIHRvbyBsYXJnZSBmb3IgRkJPIik7dmFyIGY9MTtpZigiY29sb3IiaW4obj1ufHx7fSkpe2lmKChmPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVzdCBzcGVjaWZ5IGEgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIGNvbG9ycyIpO2lmKGY+MSl7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7aWYoZj50LmdldFBhcmFtZXRlcihjLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAiK2YrIiBkcmF3IGJ1ZmZlcnMiKX19dmFyIGg9dC5VTlNJR05FRF9CWVRFLHA9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iik7aWYobi5mbG9hdCYmZj4wKXtpZighcCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzIik7aD10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmZj4wJiZwJiYoaD10LkZMT0FUKTt2YXIgbT0hMDsiZGVwdGgiaW4gbiYmKG09ISFuLmRlcHRoKTt2YXIgZz0hMTsic3RlbmNpbCJpbiBuJiYoZz0hIW4uc3RlbmNpbCk7cmV0dXJuIG5ldyBkKHQsZSxyLGgsZixtLGcsYyl9O3ZhciBpLGEsbyxzLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVyblt0LmdldFBhcmFtZXRlcih0LkZSQU1FQlVGRkVSX0JJTkRJTkcpLHQuZ2V0UGFyYW1ldGVyKHQuUkVOREVSQlVGRkVSX0JJTkRJTkcpLHQuZ2V0UGFyYW1ldGVyKHQuVEVYVFVSRV9CSU5ESU5HXzJEKV19ZnVuY3Rpb24gdSh0LGUpe3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsZVswXSksdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGVbMV0pLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGVbMl0pfWZ1bmN0aW9uIGYodCl7c3dpdGNoKHQpe2Nhc2UgaTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgdW5zdXBwb3J0ZWQiKTtjYXNlIGE6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgYXR0YWNobWVudCIpO2Nhc2Ugbzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBkaW1lbnNpb25zIik7Y2FzZSBzOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIG1pc3NpbmcgYXR0YWNobWVudCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGZhaWxlZCBmb3IgdW5zcGVjaWZpZWQgcmVhc29uIil9fWZ1bmN0aW9uIGgodCxlLHIsaSxhLG8pe2lmKCFpKXJldHVybiBudWxsO3ZhciBzPW4odCxlLHIsYSxpKTtyZXR1cm4gcy5tYWdGaWx0ZXI9dC5ORUFSRVNULHMubWluRmlsdGVyPXQuTkVBUkVTVCxzLm1pcFNhbXBsZXM9MSxzLmJpbmQoKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHQuRlJBTUVCVUZGRVIsbyx0LlRFWFRVUkVfMkQscy5oYW5kbGUsMCksc31mdW5jdGlvbiBwKHQsZSxyLG4saSl7dmFyIGE9dC5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGEpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0LlJFTkRFUkJVRkZFUixuLGUsciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0LkZSQU1FQlVGRkVSLGksdC5SRU5ERVJCVUZGRVIsYSksYX1mdW5jdGlvbiBkKHQsZSxyLG4saSxhLG8scyl7dGhpcy5nbD10LHRoaXMuX3NoYXBlPVswfGUsMHxyXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZXh0PXMsdGhpcy5jb2xvcj1uZXcgQXJyYXkoaSk7Zm9yKHZhciBkPTA7ZDxpOysrZCl0aGlzLmNvbG9yW2RdPW51bGw7dGhpcy5fY29sb3JfcmI9bnVsbCx0aGlzLmRlcHRoPW51bGwsdGhpcy5fZGVwdGhfcmI9bnVsbCx0aGlzLl9jb2xvclR5cGU9bix0aGlzLl91c2VEZXB0aD1hLHRoaXMuX3VzZVN0ZW5jaWw9bzt2YXIgbT10aGlzLGc9WzB8ZSwwfHJdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcsezA6e2dldDpmdW5jdGlvbigpe3JldHVybiBtLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBtLndpZHRoPXR9fSwxOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbS5oZWlnaHQ9dH19fSksdGhpcy5fc2hhcGVWZWN0b3I9ZyxmdW5jdGlvbih0KXt2YXIgZT1jKHQuZ2wpLHI9dC5nbCxuPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSxpPXQuX3NoYXBlWzBdLGE9dC5fc2hhcGVbMV0sbz10LmNvbG9yLmxlbmd0aCxzPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwsbT10Ll91c2VEZXB0aCxnPXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG4pO2Zvcih2YXIgdj0wO3Y8bzsrK3YpdC5jb2xvclt2XT1oKHIsaSxhLGcsci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArdik7MD09PW8/KHQuX2NvbG9yX3JiPXAocixpLGEsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxzJiZzLmRyYXdCdWZmZXJzV0VCR0wobFswXSkpOm8+MSYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbb10pO3ZhciB5PXIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7eT9kP3QuZGVwdGg9aChyLGksYSx5LlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6bSYmKHQuZGVwdGg9aChyLGksYSxyLlVOU0lHTkVEX1NIT1JULHIuREVQVEhfQ09NUE9ORU5ULHIuREVQVEhfQVRUQUNITUVOVCkpOm0mJmQ/dC5fZGVwdGhfcmI9cChyLGksYSxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOm0/dC5fZGVwdGhfcmI9cChyLGksYSxyLkRFUFRIX0NPTVBPTkVOVDE2LHIuREVQVEhfQVRUQUNITUVOVCk6ZCYmKHQuX2RlcHRoX3JiPXAocixpLGEsci5TVEVOQ0lMX0lOREVYLHIuU1RFTkNJTF9BVFRBQ0hNRU5UKSk7dmFyIHg9ci5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHIuRlJBTUVCVUZGRVIpO2lmKHghPT1yLkZSQU1FQlVGRkVSX0NPTVBMRVRFKXt0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpO2Zvcih2PTA7djx0LmNvbG9yLmxlbmd0aDsrK3YpdC5jb2xvclt2XS5kaXNwb3NlKCksdC5jb2xvclt2XT1udWxsO3QuX2NvbG9yX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fY29sb3JfcmIpLHQuX2NvbG9yX3JiPW51bGwpLHUocixlKSxmKHgpfXUocixlKX0odGhpcyl9dmFyIG09ZC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0LGUscil7aWYodC5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgZGVzdHJveWVkIEZCTyIpO2lmKHQuX3NoYXBlWzBdIT09ZXx8dC5fc2hhcGVbMV0hPT1yKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIEZCTywgaW52YWxpZCBkaW1lbnNpb25zIik7dC5fc2hhcGVbMF09ZSx0Ll9zaGFwZVsxXT1yO2Zvcih2YXIgYT1jKG4pLG89MDtvPHQuY29sb3IubGVuZ3RoOysrbyl0LmNvbG9yW29dLnNoYXBlPXQuX3NoYXBlO3QuX2NvbG9yX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2NvbG9yX3JiKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5SR0JBNCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLHQuZGVwdGgmJih0LmRlcHRoLnNoYXBlPXQuX3NoYXBlKSx0Ll9kZXB0aF9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9kZXB0aF9yYiksdC5fdXNlRGVwdGgmJnQuX3VzZVN0ZW5jaWw/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfU1RFTkNJTCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlRGVwdGg/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfQ09NUE9ORU5UMTYsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZVN0ZW5jaWwmJm4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVgsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLHQuaGFuZGxlKTt2YXIgcz1uLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMobi5GUkFNRUJVRkZFUik7cyE9PW4uRlJBTUVCVUZGRVJfQ09NUExFVEUmJih0LmRpc3Bvc2UoKSx1KG4sYSksZihzKSksdShuLGEpfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhtLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMiIpO3ZhciBlPTB8dFswXSxyPTB8dFsxXTtyZXR1cm4gZyh0aGlzLGUsciksW2Uscl19LGVudW1lcmFibGU6ITF9LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHR8PTAsdGhpcy5fc2hhcGVbMV0pLHR9LGVudW1lcmFibGU6ITF9LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsZyh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9LGVudW1lcmFibGU6ITF9fSksbS5iaW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dmFyIHQ9dGhpcy5nbDt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLHRoaXMuaGFuZGxlKSx0LnZpZXdwb3J0KDAsMCx0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXSl9fSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt0aGlzLl9kZXN0cm95ZWQ9ITA7dmFyIHQ9dGhpcy5nbDt0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuaGFuZGxlKSx0aGlzLmhhbmRsZT1udWxsLHRoaXMuZGVwdGgmJih0aGlzLmRlcHRoLmRpc3Bvc2UoKSx0aGlzLmRlcHRoPW51bGwpLHRoaXMuX2RlcHRoX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fZGVwdGhfcmIpLHRoaXMuX2RlcHRoX3JiPW51bGwpO2Zvcih2YXIgZT0wO2U8dGhpcy5jb2xvci5sZW5ndGg7KytlKXRoaXMuY29sb3JbZV0uZGlzcG9zZSgpLHRoaXMuY29sb3JbZV09bnVsbDt0aGlzLl9jb2xvcl9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2NvbG9yX3JiKSx0aGlzLl9jb2xvcl9yYj1udWxsKX19fSx7ImdsLXRleHR1cmUyZCI6MTQ2fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzcHJpbnRmLWpzIikuc3ByaW50ZixpPXQoImdsLWNvbnN0YW50cy9sb29rdXAiKSxhPXQoImdsc2wtc2hhZGVyLW5hbWUiKSxvPXQoImFkZC1saW5lLW51bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1hKGUpfHwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpIixsPSJ1bmtub3duIHR5cGUiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiKTtmb3IodmFyIGM9bigiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcbiIsbCxzKSx1PW4oIiVzJXMiLGMsdCksZj10LnNwbGl0KCJcbiIpLGg9e30scD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdO2lmKCIiIT09ZCYmIlwwIiE9PWQpe3ZhciBtPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4obSkpdGhyb3cgbmV3IEVycm9yKG4oIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtoW21dPWR9fXZhciBnPW8oZSkuc3BsaXQoIlxuIik7Zm9yKHA9MDtwPGcubGVuZ3RoO3ArKylpZihoW3ArM118fGhbcCsyXXx8aFtwKzFdKXt2YXIgdj1nW3BdO2lmKGMrPXYrIlxuIixoW3ArMV0pe3ZhciB5PWhbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPW4oIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7ImFkZC1saW5lLW51bWJlcnMiOjksImdsLWNvbnN0YW50cy9sb29rdXAiOjgzLCJnbHNsLXNoYWRlci1uYW1lIjoyMjMsInNwcmludGYtanMiOjMwMX1dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGY9cyhyKSxoPXMocikscD1uZXcgYyh0LG4saSxhLHUsZixoKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImlvdGEtYXJyYXkiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGY9Yy5wcm90b3R5cGUsaD1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2YuZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBmPWUudW5pZm9ybXM7Zi52aWV3VHJhbnNmb3JtPXUsZi5zaGFwZT10aGlzLnNoYXBlO3ZhciBoPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxoLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksaC53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGguY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGYuZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxmPWxbMl0tbFswXSxoPWxbM10tbFsxXTt0WzBdPTIqYy9mLHRbNF09Mip1L2gsdFs2XT0yKihhWzBdLWxbMF0pL2YtMSx0WzddPTIqKGFbMV0tbFsxXSkvaC0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBtPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksbS5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLG0ud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxtLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxmLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKSxsPSExIT09dC56c21vb3RoO3RoaXMueERhdGE9cix0aGlzLnlEYXRhPW87dmFyIGMsdSxmLHAsZD10LmNvbG9yTGV2ZWxzfHxbMF0sbT10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sZz1kLmxlbmd0aCx2PXRoaXMuYm91bmRzO2w/KGM9dlswXT1yWzBdLHU9dlsxXT1vWzBdLGY9dlsyXT1yW3IubGVuZ3RoLTFdLHA9dlszXT1vW28ubGVuZ3RoLTFdKTooYz12WzBdPXJbMF0rKHJbMV0tclswXSkvMix1PXZbMV09b1swXSsob1sxXS1vWzBdKS8yLGY9dlsyXT1yW3IubGVuZ3RoLTFdKyhyW3IubGVuZ3RoLTFdLXJbci5sZW5ndGgtMl0pLzIscD12WzNdPW9bby5sZW5ndGgtMV0rKG9bby5sZW5ndGgtMV0tb1tvLmxlbmd0aC0yXSkvMik7dmFyIHk9MS8oZi1jKSx4PTEvKHAtdSksYj1lWzBdLF89ZVsxXTt0aGlzLnNoYXBlPVtiLF9dO3ZhciB3PShsPyhiLTEpKihfLTEpOmIqXykqKGgubGVuZ3RoPj4+MSk7dGhpcy5udW1WZXJ0aWNlcz13O2Zvcih2YXIgVD1hLm1hbGxvY1VpbnQ4KDQqdyksaz1hLm1hbGxvY0Zsb2F0MzIoMip3KSxBPWEubWFsbG9jVWludDgoMip3KSxNPWEubWFsbG9jVWludDMyKHcpLFM9MCxFPWw/Yi0xOmIsTD1sP18tMTpfLEM9MDtDPEw7KytDKXt2YXIgUCxJO2w/KFA9eCoob1tDXS11KSxJPXgqKG9bQysxXS11KSk6KFA9QzxfLTE/eCoob1tDXS0ob1tDKzFdLW9bQ10pLzItdSk6eCoob1tDXS0ob1tDXS1vW0MtMV0pLzItdSksST1DPF8tMT94KihvW0NdKyhvW0MrMV0tb1tDXSkvMi11KTp4KihvW0NdKyhvW0NdLW9bQy0xXSkvMi11KSk7Zm9yKHZhciBPPTA7TzxFOysrTyl7dmFyIHosRDtsPyh6PXkqKHJbT10tYyksRD15KihyW08rMV0tYykpOih6PU88Yi0xP3kqKHJbT10tKHJbTysxXS1yW09dKS8yLWMpOnkqKHJbT10tKHJbT10tcltPLTFdKS8yLWMpLEQ9TzxiLTE/eSoocltPXSsocltPKzFdLXJbT10pLzItYyk6eSoocltPXSsocltPXS1yW08tMV0pLzItYykpO2Zvcih2YXIgUj0wO1I8aC5sZW5ndGg7Uis9Mil7dmFyIEYsQixOLGosVT1oW1JdLFY9aFtSKzFdLEg9c1tsPyhDK1YpKmIrKE8rVSk6QypiK09dLHE9bi5sZShkLEgpO2lmKHE8MClGPW1bMF0sQj1tWzFdLE49bVsyXSxqPW1bM107ZWxzZSBpZihxPT09Zy0xKUY9bVs0KmctNF0sQj1tWzQqZy0zXSxOPW1bNCpnLTJdLGo9bVs0KmctMV07ZWxzZXt2YXIgRz0oSC1kW3FdKS8oZFtxKzFdLWRbcV0pLFk9MS1HLFc9NCpxLFg9NCoocSsxKTtGPVkqbVtXXStHKm1bWF0sQj1ZKm1bVysxXStHKm1bWCsxXSxOPVkqbVtXKzJdK0cqbVtYKzJdLGo9WSptW1crM10rRyptW1grM119VFs0KlNdPTI1NSpGLFRbNCpTKzFdPTI1NSpCLFRbNCpTKzJdPTI1NSpOLFRbNCpTKzNdPTI1NSpqLGtbMipTXT0uNSp6Ky41KkQsa1syKlMrMV09LjUqUCsuNSpJLEFbMipTXT1VLEFbMipTKzFdPVYsTVtTXT1DKmIrTyxTKz0xfX19dGhpcy5wb3NpdGlvbkJ1ZmZlci51cGRhdGUoayksdGhpcy53ZWlnaHRCdWZmZXIudXBkYXRlKEEpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKFQpLHRoaXMuaWRCdWZmZXIudXBkYXRlKE0pLGEuZnJlZShrKSxhLmZyZWUoVCksYS5mcmVlKEEpLGEuZnJlZShNKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlci5kaXNwb3NlKCksdGhpcy53ZWlnaHRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjg5LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImdsLWJ1ZmZlciI6NzgsImdsLXNoYWRlciI6MTMyLCJpb3RhLWFycmF5IjoyMzUsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iXSksdmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSkscGlja0ZyYWdtZW50Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iXSkscGlja1ZlcnRleDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSl9fSx7Z2xzbGlmeToyMzF9XSw5MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgYXJjTGVuZ3RoLCBsaW5lV2lkdGg7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgc3RhcnRQb2ludCA9IHByb2plY3QocG9zaXRpb24pO1xuICB2ZWM0IGVuZFBvaW50ICAgPSBwcm9qZWN0KG5leHRQb3NpdGlvbik7XG5cbiAgdmVjMiBBID0gc3RhcnRQb2ludC54eSAvIHN0YXJ0UG9pbnQudztcbiAgdmVjMiBCID0gICBlbmRQb2ludC54eSAvICAgZW5kUG9pbnQudztcblxuICBmbG9hdCBjbGlwQW5nbGUgPSBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogc2NyZWVuU2hhcGUueSxcbiAgICAoQi54IC0gQS54KSAqIHNjcmVlblNoYXBlLnhcbiAgKTtcblxuICB2ZWMyIG9mZnNldCA9IDAuNSAqIHBpeGVsUmF0aW8gKiBsaW5lV2lkdGggKiB2ZWMyKFxuICAgIHNpbihjbGlwQW5nbGUpLFxuICAgIC1jb3MoY2xpcEFuZ2xlKVxuICApIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHN0YXJ0UG9pbnQueHkgKyBzdGFydFBvaW50LncgKiBvZmZzZXQsIHN0YXJ0UG9pbnQuencpO1xuXG4gIHdvcmxkUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgcGl4ZWxBcmNMZW5ndGggPSBhcmNMZW5ndGg7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgICAgICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFRleHR1cmU7XG51bmlmb3JtIGZsb2F0ICAgICBkYXNoU2NhbGU7XG51bmlmb3JtIGZsb2F0ICAgICBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzMgICAgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgICBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCAgICBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGZsb2F0IGRhc2hXZWlnaHQgPSB0ZXh0dXJlMkQoZGFzaFRleHR1cmUsIHZlYzIoZGFzaFNjYWxlICogcGl4ZWxBcmNMZW5ndGgsIDApKS5yO1xuICBpZihkYXNoV2VpZ2h0IDwgMC41KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbiNkZWZpbmUgRkxPQVRfTUFYICAxLjcwMTQxMTg0ZTM4XG4jZGVmaW5lIEZMT0FUX01JTiAgMS4xNzU0OTQzNWUtMzhcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21pa29sYWx5c2Vua28vZ2xzbC1yZWFkLWZsb2F0L2Jsb2IvbWFzdGVyL2luZGV4Lmdsc2xcbnZlYzQgcGFja0Zsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgYXYgPSBhYnModik7XG5cbiAgLy9IYW5kbGUgc3BlY2lhbCBjYXNlc1xuICBpZihhdiA8IEZMT0FUX01JTikge1xuICAgIHJldHVybiB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMTI3LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfSBlbHNlIGlmKHYgPCAtRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMjU1LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfVxuXG4gIHZlYzQgYyA9IHZlYzQoMCwwLDAsMCk7XG5cbiAgLy9Db21wdXRlIGV4cG9uZW50IGFuZCBtYW50aXNzYVxuICBmbG9hdCBlID0gZmxvb3IobG9nMihhdikpO1xuICBmbG9hdCBtID0gYXYgKiBwb3coMi4wLCAtZSkgLSAxLjA7XG5cbiAgLy9VbnBhY2sgbWFudGlzc2FcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XG4gIG0gLT0gY1sxXSAvIDEyOC4wO1xuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xuICBjWzNdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG5cbiAgLy9VbnBhY2sgZXhwb25lbnRcbiAgZmxvYXQgZWJpYXMgPSBlICsgMTI3LjA7XG4gIGNbMF0gPSBmbG9vcihlYmlhcyAvIDIuMCk7XG4gIGViaWFzIC09IGNbMF0gKiAyLjA7XG4gIGNbMV0gKz0gZmxvb3IoZWJpYXMpICogMTI4LjA7XG5cbiAgLy9VbnBhY2sgc2lnbiBiaXRcbiAgY1swXSArPSAxMjguMCAqIHN0ZXAoMC4wLCAtdik7XG5cbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXG4gIHJldHVybiBjIC8gMjU1LjA7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLzI1NS4wLCBwYWNrRmxvYXQocGl4ZWxBcmNMZW5ndGgpLnh5eik7XG59Il0pLGw9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJuZXh0UG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiYXJjTGVuZ3RoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJsaW5lV2lkdGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In1dO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsbCl9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEscyxudWxsLGwpfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9ZihlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDt2YXIgbz1oKGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxvLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsby5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O2Zvcih2YXIgcz1uKGUpLGw9aShlLFt7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI4LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6NCxvZmZzZXQ6MzIsc3RyaWRlOjQ4fV0pLHU9YyhuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKSxwPTA7cDwxMDI0OysrcCl1LmRhdGFbcF09MjU1O3ZhciBkPWEoZSx1KTtkLndyYXA9ZS5SRVBFQVQ7dmFyIG09bmV3IHYoZSxyLG8scyxsLGQpO3JldHVybiBtLnVwZGF0ZSh0KSxtfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiZ2wtdGV4dHVyZTJkIiksbz1uZXcgVWludDhBcnJheSg0KSxzPW5ldyBGbG9hdDMyQXJyYXkoby5idWZmZXIpO3ZhciBsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksYz10KCJuZGFycmF5IiksdT10KCIuL2xpYi9zaGFkZXJzIiksZj11LmNyZWF0ZVNoYWRlcixoPXUuY3JlYXRlUGlja1NoYWRlcixwPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPTAsbj0wO248MzsrK24pe3ZhciBpPXRbbl0tZVtuXTtyKz1pKml9cmV0dXJuIE1hdGguc3FydChyKX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxyPTA7cjwzOysrcillWzBdW3JdPU1hdGgubWF4KHRbMF1bcl0sZVswXVtyXSksZVsxXVtyXT1NYXRoLm1pbih0WzFdW3JdLGVbMV1bcl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dGhpcy5hcmNMZW5ndGg9dCx0aGlzLnBvc2l0aW9uPWUsdGhpcy5pbmRleD1yLHRoaXMuZGF0YUNvb3JkaW5hdGU9bn1mdW5jdGlvbiB2KHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLmJ1ZmZlcj1uLHRoaXMudmFvPWksdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMucG9pbnRzPVtdLHRoaXMuYXJjTGVuZ3RoPVtdLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmJvdW5kcz1bWzAsMCwwXSxbMCwwLDBdXSx0aGlzLnBpY2tJZD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy50ZXh0dXJlPWEsdGhpcy5kYXNoU2NhbGU9MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9dmFyIHk9di5wcm90b3R5cGU7eS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LHkuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0seS5waWNrU2xvdHM9MSx5LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHkuZHJhd1RyYW5zcGFyZW50PXkuZHJhdz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxwLHZpZXc6dC52aWV3fHxwLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxwLGNsaXBCb3VuZHM6bSh0aGlzLmNsaXBCb3VuZHMpLGRhc2hUZXh0dXJlOnRoaXMudGV4dHVyZS5iaW5kKCksZGFzaFNjYWxlOnRoaXMuZGFzaFNjYWxlL3RoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LHkuZHJhd1BpY2s9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMucGlja1NoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAscGlja0lkOnRoaXMucGlja0lkLGNsaXBCb3VuZHM6bSh0aGlzLmNsaXBCb3VuZHMpLHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwczsiZGFzaFNjYWxlImluIHQmJih0aGlzLmRhc2hTY2FsZT10LmRhc2hTY2FsZSksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGk9W10sYT1bXSxvPVtdLHM9MCx1PTAsZj1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxoPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGgpe3ZhciBwPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0sbT10LmxpbmVXaWR0aHx8MSxnPSExO3Q6Zm9yKGU9MTtlPGgubGVuZ3RoOysrZSl7dmFyIHYseSx4LGI9aFtlLTFdLF89aFtlXTtmb3IoYS5wdXNoKHMpLG8ucHVzaChiLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihiW3JdKXx8aXNOYU4oX1tyXSl8fCFpc0Zpbml0ZShiW3JdKXx8IWlzRmluaXRlKF9bcl0pKXtpZighbiYmaS5sZW5ndGg+MCl7Zm9yKHZhciB3PTA7dzwyNDsrK3cpaS5wdXNoKGlbaS5sZW5ndGgtMTJdKTt1Kz0yLGc9ITB9Y29udGludWUgdH1mWzBdW3JdPU1hdGgubWluKGZbMF1bcl0sYltyXSxfW3JdKSxmWzFdW3JdPU1hdGgubWF4KGZbMV1bcl0sYltyXSxfW3JdKX1BcnJheS5pc0FycmF5KHBbMF0pPyh2PXAubGVuZ3RoPmUtMT9wW2UtMV06cC5sZW5ndGg+MD9wW3AubGVuZ3RoLTFdOlswLDAsMCwxXSx5PXAubGVuZ3RoPmU/cFtlXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdKTp2PXk9cCwzPT09di5sZW5ndGgmJih2PVt2WzBdLHZbMV0sdlsyXSwxXSksMz09PXkubGVuZ3RoJiYoeT1beVswXSx5WzFdLHlbMl0sMV0pLCF0aGlzLmhhc0FscGhhJiZ2WzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSx4PUFycmF5LmlzQXJyYXkobSk/bS5sZW5ndGg+ZS0xP21bZS0xXTptLmxlbmd0aD4wP21bbS5sZW5ndGgtMV06WzAsMCwwLDFdOm07dmFyIFQ9cztpZihzKz1kKGIsXyksZyl7Zm9yKHI9MDtyPDI7KytyKWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxULHgsdlswXSx2WzFdLHZbMl0sdlszXSk7dSs9MixnPSExfWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxULHgsdlswXSx2WzFdLHZbMl0sdlszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxULC14LHZbMF0sdlsxXSx2WzJdLHZbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scywteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLHMseCx5WzBdLHlbMV0seVsyXSx5WzNdKSx1Kz00fX1pZih0aGlzLmJ1ZmZlci51cGRhdGUoaSksYS5wdXNoKHMpLG8ucHVzaChoW2gubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPWYsdGhpcy52ZXJ0ZXhDb3VudD11LHRoaXMucG9pbnRzPW8sdGhpcy5hcmNMZW5ndGg9YSwiZGFzaGVzImluIHQpe3ZhciBrPXQuZGFzaGVzLnNsaWNlKCk7Zm9yKGsudW5zaGlmdCgwKSxlPTE7ZTxrLmxlbmd0aDsrK2Upa1tlXT1rW2UtMV0ra1tlXTt2YXIgQT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpQS5zZXQoZSwwLHIsMCk7MSZsLmxlKGssa1trLmxlbmd0aC0xXSplLzI1NSk/QS5zZXQoZSwwLDAsMCk6QS5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKEEpfX0seS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LHkucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG9bMF09bixvWzFdPXIsb1syXT1lLG9bM109dCxzWzBdfSh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPWwubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxjPTEtYSx1PVswLDAsMF0sZj0wO2Y8MzsrK2YpdVtmXT1jKm5bZl0rYSppW2ZdO3ZhciBoPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLHUsaCx0aGlzLnBvaW50c1toXSl9fSx7Ii4vbGliL3NoYWRlcnMiOjkwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImdsLWJ1ZmZlciI6NzgsImdsLXRleHR1cmUyZCI6MTQ2LCJnbC12YW8iOjE1MCxuZGFycmF5OjI1OX1dLDkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSw5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSw5NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGY9dFsxMF0saD10WzExXSxwPXRbMTJdLGQ9dFsxM10sbT10WzE0XSxnPXRbMTVdO3JldHVybihlKm8tciphKSooZipnLWgqbSktKGUqcy1uKmEpKih1KmctaCpkKSsoZSpsLWkqYSkqKHUqbS1mKmQpKyhyKnMtbipvKSooYypnLWgqcCktKHIqbC1pKm8pKihjKm0tZipwKSsobipsLWkqcykqKGMqZC11KnApfX0se31dLDk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxmPW4qcyxoPWkqbyxwPWkqcyxkPWkqbCxtPWEqbyxnPWEqcyx2PWEqbDtyZXR1cm4gdFswXT0xLWYtZCx0WzFdPXUrdix0WzJdPWgtZyx0WzNdPTAsdFs0XT11LXYsdFs1XT0xLWMtZCx0WzZdPXArbSx0WzddPTAsdFs4XT1oK2csdFs5XT1wLW0sdFsxMF09MS1jLWYsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsZj1uKmwsaD1uKmMscD1pKmwsZD1pKmMsbT1hKmMsZz1vKnMsdj1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCttKSx0WzFdPWYreSx0WzJdPWgtdix0WzNdPTAsdFs0XT1mLXksdFs1XT0xLSh1K20pLHRbNl09ZCtnLHRbN109MCx0WzhdPWgrdix0WzldPWQtZyx0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSw5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxmPWVbOV0saD1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sbT1lWzEzXSxnPWVbMTRdLHY9ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxUPWkqYy1hKmwsaz11Km0tZipkLEE9dSpnLWgqZCxNPXUqdi1wKmQsUz1mKmctaCptLEU9Zip2LXAqbSxMPWgqdi1wKmcsQz15KkwteCpFK2IqUytfKk0tdypBK1QqaztpZighQylyZXR1cm4gbnVsbDtyZXR1cm4gQz0xL0MsdFswXT0ocypMLWwqRStjKlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpULWcqdyt2Kl8pKkMsdFszXT0oaCp3LWYqVC1wKl8pKkMsdFs0XT0obCpNLW8qTC1jKkEpKkMsdFs1XT0ocipMLWkqTSthKkEpKkMsdFs2XT0oZypiLWQqVC12KngpKkMsdFs3XT0odSpULWgqYitwKngpKkMsdFs4XT0obypFLXMqTStjKmspKkMsdFs5XT0obipNLXIqRS1hKmspKkMsdFsxMF09KGQqdy1tKmIrdip5KSpDLHRbMTFdPShmKmItdSp3LXAqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKngtZCpfLWcqeSkqQyx0WzE1XT0odSpfLWYqeCtoKnkpKkMsdH19LHt9XSw5OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1lWzBdLGc9ZVsxXSx2PWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxUPXJbMl07aWYoTWF0aC5hYnMobS1fKTwxZS02JiZNYXRoLmFicyhnLXcpPDFlLTYmJk1hdGguYWJzKHYtVCk8MWUtNilyZXR1cm4gbih0KTtmPW0tXyxoPWctdyxwPXYtVCxkPTEvTWF0aC5zcXJ0KGYqZitoKmgrcCpwKSxhPXgqKHAqPWQpLWIqKGgqPWQpLG89YiooZio9ZCkteSpwLHM9eSpoLXgqZiwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9aCpzLXAqbyxjPXAqYS1mKnMsdT1mKm8taCphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1mLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09aCx0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKm0rbypnK3MqdiksdFsxM109LShsKm0rYypnK3UqdiksdFsxNF09LShmKm0raCpnK3AqdiksdFsxNV09MSx0fX0seyIuL2lkZW50aXR5Ijo5N31dLDEwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sbT1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmYrdyptLHRbMV09eCppK2IqbCtfKmgrdypnLHRbMl09eCphK2IqYytfKnArdyp2LHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypmK3cqbSx0WzVdPXgqaStiKmwrXypoK3cqZyx0WzZdPXgqYStiKmMrXypwK3cqdix0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypmK3cqbSx0WzldPXgqaStiKmwrXypoK3cqZyx0WzEwXT14KmErYipjK18qcCt3KnYsdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmYrdyptLHRbMTNdPXgqaStiKmwrXypoK3cqZyx0WzE0XT14KmErYipjK18qcCt3KnYsdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMTAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19LHt9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH19LHt9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTLEU9blswXSxMPW5bMV0sQz1uWzJdLFA9TWF0aC5zcXJ0KEUqRStMKkwrQypDKTtpZihNYXRoLmFicyhQKTwxZS02KXJldHVybiBudWxsO0UqPVA9MS9QLEwqPVAsQyo9UCxpPU1hdGguc2luKHIpLGE9TWF0aC5jb3Mociksbz0xLWEscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdLGY9ZVs0XSxoPWVbNV0scD1lWzZdLGQ9ZVs3XSxtPWVbOF0sZz1lWzldLHY9ZVsxMF0seT1lWzExXSx4PUUqRSpvK2EsYj1MKkUqbytDKmksXz1DKkUqby1MKmksdz1FKkwqby1DKmksVD1MKkwqbythLGs9QypMKm8rRSppLEE9RSpDKm8rTCppLE09TCpDKm8tRSppLFM9QypDKm8rYSx0WzBdPXMqeCtmKmIrbSpfLHRbMV09bCp4K2gqYitnKl8sdFsyXT1jKngrcCpiK3YqXyx0WzNdPXUqeCtkKmIreSpfLHRbNF09cyp3K2YqVCttKmssdFs1XT1sKncraCpUK2cqayx0WzZdPWMqdytwKlQrdiprLHRbN109dSp3K2QqVCt5KmssdFs4XT1zKkErZipNK20qUyx0WzldPWwqQStoKk0rZypTLHRbMTBdPWMqQStwKk0rdipTLHRbMTFdPXUqQStkKk0reSpTLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0fX0se31dLDEwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2Yqbix0WzddPWwqaStoKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1mKmktcypuLHRbMTFdPWgqaS1sKm4sdH19LHt9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO2UhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmktYypuLHRbMV09byppLXUqbix0WzJdPXMqaS1mKm4sdFszXT1sKmktaCpuLHRbOF09YSpuK2MqaSx0WzldPW8qbit1KmksdFsxMF09cypuK2YqaSx0WzExXT1sKm4raCppLHR9fSx7fV0sMTA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGY9ZVs2XSxoPWVbN107ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStmKm4sdFszXT1sKmkraCpuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1mKmktcypuLHRbN109aCppLWwqbix0fX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH19LHt9XSwxMDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtPXJbMF0sZz1yWzFdLHY9clsyXTtlPT09dD8odFsxMl09ZVswXSptK2VbNF0qZytlWzhdKnYrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qZytlWzldKnYrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qZytlWzEwXSp2K2VbMTRdLHRbMTVdPWVbM10qbStlWzddKmcrZVsxMV0qditlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWYsdFs5XT1oLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKm0rcypnK2YqditlWzEyXSx0WzEzXT1pKm0rbCpnK2gqditlWzEzXSx0WzE0XT1hKm0rYypnK3AqditlWzE0XSx0WzE1XT1vKm0rdSpnK2QqditlWzE1XSk7cmV0dXJuIHR9fSx7fV0sMTA5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fX0se31dLDExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiYXJ5Y2VudHJpYyIpLGk9dCgicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9WzAsMCwwLDBdLG49MDtuPDQ7KytuKWZvcih2YXIgaT0wO2k8NDsrK2kpcltpXSs9dFs0Km4raV0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBvPWEobixhKHIsYShlLFt0WzBdLHRbMV0sdFsyXSwxXSkpKSxzPTA7czwzOysrcylvW3NdLz1vWzNdO3JldHVyblsuNSppWzBdKigxK29bMF0pLC41KmlbMV0qKDEtb1sxXSldfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9WzAsMCwwXSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT1lW25dLG89MDtvPDM7KytvKXJbb10rPWEqaVtvXTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLGMpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgdT1uZXcgQXJyYXkodC5sZW5ndGgpLGY9MDtmPHQubGVuZ3RoOysrZil1W2ZdPW8odFtmXSxyLGEsbCxjKTt2YXIgaD0wLHA9MS8wO2ZvcihmPTA7Zjx1Lmxlbmd0aDsrK2Ype2Zvcih2YXIgZD0wLG09MDttPDI7KyttKWQrPU1hdGgucG93KHVbZl1bbV0tZVttXSwyKTtkPHAmJihwPWQsaD1mKX12YXIgZz1mdW5jdGlvbih0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsYT0wLG89MDtvPDI7KytvKXIrPU1hdGgucG93KGVbb10tdFswXVtvXSwyKSxhKz1NYXRoLnBvdyhlW29dLXRbMV1bb10sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLGE9TWF0aC5zcXJ0KGEpLHIrYTwxZS02P1sxLDBdOlthLyhyK2EpLHIvKGErcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIHM9WzAsMF07cmV0dXJuIGkodFswXSx0WzFdLHRbMl0sZSxzKSxuKHQscyl9cmV0dXJuW119KHUsZSksdj0wO2ZvcihmPTA7ZjwzOysrZil7aWYoZ1tmXTwtLjAwMXx8Z1tmXT4xLjAwMDEpcmV0dXJuIG51bGw7dis9Z1tmXX1pZihNYXRoLmFicyh2LTEpPi4wMDEpcmV0dXJuIG51bGw7cmV0dXJuW2gscyh0LGcpLGddfX0se2JhcnljZW50cmljOjE0LCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIjoyNzB9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG5vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbFxuICAgICAgICAgICAsIHZpZXdcbiAgICAgICAgICAgLCBwcm9qZWN0aW9uXG4gICAgICAgICAgICwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXG4gICAgICAgICAgICwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdChwb3NpdGlvbik7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB2ZWM0KHBvc2l0aW9uICwgMS4wKTtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSBwb3NpdGlvbjtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbi8vI3ByYWdtYSBnbHNsaWZ5OiBiZWNrbWFubiA9IHJlcXVpcmUoZ2xzbC1zcGVjdWxhci1iZWNrbWFubikgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXI7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChmX2NvbG9yLmEgPT0gMC4wIHx8XG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpXG4gICkgZGlzY2FyZDtcblxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcbiAgLy9mbG9hdCBzcGVjdWxhciA9IG1heCgwLjAsIGJlY2ttYW5uKEwsIFYsIE4sIHJvdWdobmVzcykpOyAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gdmVjNChmX2NvbG9yLnJnYiwgMS4wKSAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogZl9jb2xvci5hO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfZGF0YSAgPSBwb3NpdGlvbjtcbiAgZl91diAgICA9IHV2O1xufSJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSxsPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAgLDAuMCAsMC4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB9XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZl9jb2xvciA9IGNvbG9yO1xuICBmX3V2ID0gdXY7XG59Il0pLGM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsIDAuNSk7XG4gIGlmKGRvdChwb2ludFIsIHBvaW50UikgPiAwLjI1KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcbn0iXSksdT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfaWQgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb247XG59Il0pLGY9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xufSJdKSxoPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0ICBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIH1cbiAgZl9pZCAgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xufSJdKSxwPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59Il0pLGQ9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBjb250b3VyQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb250b3VyQ29sb3IsIDEuMCk7XG59XG4iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpsLGZyYWdtZW50OmMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OnUsZnJhZ21lbnQ6ZixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6aCxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpwLGZyYWdtZW50OmQsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6MjMxfV0sMTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgibm9ybWFscyIpLGw9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSx1PXQoIm5kYXJyYXkiKSxmPXQoImNvbG9ybWFwIiksaD10KCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciIpLHA9dCgidHlwZWRhcnJheS1wb29sIiksZD10KCIuL2xpYi9zaGFkZXJzIiksbT10KCIuL2xpYi9jbG9zZXN0LXBvaW50IiksZz1kLm1lc2hTaGFkZXIsdj1kLndpcmVTaGFkZXIseT1kLnBvaW50U2hhZGVyLHg9ZC5waWNrU2hhZGVyLGI9ZC5wb2ludFBpY2tTaGFkZXIsXz1kLmNvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gVCh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLFQsayxBLE0sUyl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlQ29sb3JzPXUsdGhpcy50cmlhbmdsZU5vcm1hbHM9aCx0aGlzLnRyaWFuZ2xlVVZzPWYsdGhpcy50cmlhbmdsZUlkcz1jLHRoaXMudHJpYW5nbGVWQU89cCx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1kLHRoaXMuZWRnZUNvbG9ycz1nLHRoaXMuZWRnZVVWcz12LHRoaXMuZWRnZUlkcz1tLHRoaXMuZWRnZVZBTz15LHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz14LHRoaXMucG9pbnRDb2xvcnM9Xyx0aGlzLnBvaW50VVZzPVQsdGhpcy5wb2ludFNpemVzPWssdGhpcy5wb2ludElkcz1iLHRoaXMucG9pbnRWQU89QSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9TSx0aGlzLmNvbnRvdXJWQU89Uyx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja1ZlcnRleD0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMub3BhY2l0eXNjYWxlPSExLHRoaXMuX21vZGVsPXcsdGhpcy5fdmlldz13LHRoaXMuX3Byb2plY3Rpb249dyx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciBrPVQucHJvdG90eXBlO2Z1bmN0aW9uIEEodCxlKXtpZighZSlyZXR1cm4gMTtpZighZS5sZW5ndGgpcmV0dXJuIDE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKGUubGVuZ3RoPDIpcmV0dXJuIDE7aWYoZVtyXVswXT09PXQpcmV0dXJuIGVbcl1bMV07aWYoZVtyXVswXT50JiZyPjApe3ZhciBuPShlW3JdWzBdLXQpLyhlW3JdWzBdLWVbci0xXVswXSk7cmV0dXJuIGVbcl1bMV0qKDEtbikrbiplW3ItMV1bMV19fXJldHVybiAxfWZ1bmN0aW9uIE0odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBTKHQpe3ZhciBlPW4odCx2LnZlcnRleCx2LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZX1mdW5jdGlvbiBFKHQpe3ZhciBlPW4odCx5LnZlcnRleCx5LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gTCh0KXt2YXIgZT1uKHQseC52ZXJ0ZXgseC5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGV9ZnVuY3Rpb24gQyh0KXt2YXIgZT1uKHQsYi52ZXJ0ZXgsYi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIFAodCl7dmFyIGU9bih0LF8udmVydGV4LF8uZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlfWsuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0say5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGsucGlja1Nsb3RzPTEsay5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxrLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1oKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBmPWNbMF07Mj09PWMubGVuZ3RoJiYoZj1jW3VdKTtmb3IodmFyIGQ9bltmXVswXSxtPW5bZl1bMV0sZz1pW2ZdLHY9MS1nLHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1ttXSxiPTA7YjwzOysrYilvW3MrK109Zyp5W2JdK3YqeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0say51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSksIm9wYWNpdHlzY2FsZSJpbiB0JiYodGhpcy5vcGFjaXR5c2NhbGU9dC5vcGFjaXR5c2NhbGUsdGhpcy5oYXNBbHBoYT0hMCksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx0LnRleHR1cmU/KHRoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50ZXh0dXJlPW8oZSx0LnRleHR1cmUpKTp0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWYoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLG49bmV3IFVpbnQ4QXJyYXkoMTAyNCksaT0wO2k8MjU2OysraSl7Zm9yKHZhciBhPXJbaV0sbz0wO288MzsrK28pbls0Kmkrb109YVtvXTtuWzQqaSszXT1lPzI1NSpBKGkvMjU1LGUpOjI1NSphWzNdfXJldHVybiB1KG4sWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zO2lmKG4mJnIpe3ZhciBpPVtdLGE9W10sbD1bXSxjPVtdLGg9W10scD1bXSxkPVtdLG09W10sZz1bXSx2PVtdLHk9W10seD1bXSxiPVtdLF89W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIHc9dC52ZXJ0ZXhOb3JtYWxzLFQ9dC5jZWxsTm9ybWFscyxrPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLE09dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIVQmJihUPXMuZmFjZU5vcm1hbHMocixuLE0pKSxUfHx3fHwodz1zLnZlcnRleE5vcm1hbHMocixuLGspKTt2YXIgUz10LnZlcnRleENvbG9ycyxFPXQuY2VsbENvbG9ycyxMPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sQz10LnZlcnRleFVWcyxQPXQudmVydGV4SW50ZW5zaXR5LEk9dC5jZWxsVVZzLE89dC5jZWxsSW50ZW5zaXR5LHo9MS8wLEQ9LTEvMDtpZighQyYmIUkpaWYoUClpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcyl6PSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxEPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgUj0wO1I8UC5sZW5ndGg7KytSKXt2YXIgRj1QW1JdO3o9TWF0aC5taW4oeixGKSxEPU1hdGgubWF4KEQsRil9ZWxzZSBpZihPKWlmKHQuY2VsbEludGVuc2l0eUJvdW5kcyl6PSt0LmNlbGxJbnRlbnNpdHlCb3VuZHNbMF0sRD0rdC5jZWxsSW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKFI9MDtSPE8ubGVuZ3RoOysrUil7Rj1PW1JdO3o9TWF0aC5taW4oeixGKSxEPU1hdGgubWF4KEQsRil9ZWxzZSBmb3IoUj0wO1I8bi5sZW5ndGg7KytSKXtGPW5bUl1bMl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX10aGlzLmludGVuc2l0eT1QfHwoT3x8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpLHRoaXMucGlja1ZlcnRleD0hKE98fEUpO3ZhciBCPXQucG9pbnRTaXplcyxOPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihSPTA7UjxuLmxlbmd0aDsrK1IpZm9yKHZhciBqPW5bUl0sVT0wO1U8MzsrK1UpIWlzTmFOKGpbVV0pJiZpc0Zpbml0ZShqW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLGpbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLGpbVV0pKTt2YXIgVj0wLEg9MCxxPTA7dDpmb3IoUj0wO1I8ci5sZW5ndGg7KytSKXt2YXIgRz1yW1JdO3N3aXRjaChHLmxlbmd0aCl7Y2FzZSAxOmZvcihqPW5bVz1HWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihqW1VdKXx8IWlzRmluaXRlKGpbVV0pKWNvbnRpbnVlIHQ7di5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06TCx0aGlzLm9wYWNpdHlzY2FsZSYmUD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KkEoKFBbV10teikvKEQteiksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/eS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KHkucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9Qz9DW1ddOlA/WyhQW1ddLXopLyhELXopLDBdOkk/SVtSXTpPP1soT1tSXS16KS8oRC16KSwwXTpbKGpbMl0teikvKEQteiksMF0seC5wdXNoKFpbMF0sWlsxXSksQj9iLnB1c2goQltXXSk6Yi5wdXNoKE4pLF8ucHVzaChSKSxxKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe2o9bltXPUdbVV1dO2Zvcih2YXIgWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7aj1uW1c9R1tVXV07cC5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06TCx0aGlzLm9wYWNpdHlzY2FsZSYmUD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KkEoKFBbV10teikvKEQteiksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/ZC5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGQucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9Qz9DW1ddOlA/WyhQW1ddLXopLyhELXopLDBdOkk/SVtSXTpPP1soT1tSXS16KS8oRC16KSwwXTpbKGpbMl0teikvKEQteiksMF0sbS5wdXNoKFpbMF0sWlsxXSksZy5wdXNoKFIpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcihVPTA7VTwzOysrVSlmb3Ioaj1uW1c9R1tVXV0sWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0O2ZvcihVPTA7VTwzOysrVSl7dmFyIFcsWCxaLEo7aj1uW1c9R1syLVVdXTtpLnB1c2goalswXSxqWzFdLGpbMl0pLChYPVM/U1tXXTpFP0VbUl06TCk/dGhpcy5vcGFjaXR5c2NhbGUmJlA/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSpBKChQW1ddLXopLyhELXopLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVgubGVuZ3RoP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkpOihhLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSp0aGlzLm9wYWNpdHkpLFhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKTphLnB1c2goLjUsLjUsLjUsMSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSxjLnB1c2goWlswXSxaWzFdKSxKPXc/d1tXXTpUW1JdLGwucHVzaChKWzBdLEpbMV0sSlsyXSksaC5wdXNoKFIpfVYrPTF9fXRoaXMucG9pbnRDb3VudD1xLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PVYsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUodiksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoeSksdGhpcy5wb2ludFVWcy51cGRhdGUoeCksdGhpcy5wb2ludFNpemVzLnVwZGF0ZShiKSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoXykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUocCksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZShkKSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGcpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShpKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShjKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUobCksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGgpKX19LGsuZHJhd1RyYW5zcGFyZW50PWsuZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8dyxuPXQudmlld3x8dyxpPXQucHJvamVjdGlvbnx8dyxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksaW52ZXJzZU1vZGVsOncuc2xpY2UoKSxjbGlwQm91bmRzOmEsa2FtYmllbnQ6dGhpcy5hbWJpZW50TGlnaHQsa2RpZmZ1c2U6dGhpcy5kaWZmdXNlTGlnaHQsa3NwZWN1bGFyOnRoaXMuc3BlY3VsYXJMaWdodCxyb3VnaG5lc3M6dGhpcy5yb3VnaG5lc3MsZnJlc25lbDp0aGlzLmZyZXNuZWwsZXllUG9zaXRpb246WzAsMCwwXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBmLGg9dVsxNV07Zm9yKG89MDtvPDM7KytvKWgrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtzLmxpZ2h0UG9zaXRpb25bb109cC9ofXRoaXMudHJpYW5nbGVDb3VudD4wJiYoKGY9dGhpcy50cmlTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpO3RoaXMuZWRnZUNvdW50PjAmJnRoaXMubGluZVdpZHRoPjAmJigoZj10aGlzLmxpbmVTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKTt0aGlzLnBvaW50Q291bnQ+MCYmKChmPXRoaXMucG9pbnRTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKTt0aGlzLmNvbnRvdXJFbmFibGUmJnRoaXMuY29udG91ckNvdW50PjAmJnRoaXMuY29udG91ckxpbmVXaWR0aD4wJiYoKGY9dGhpcy5jb250b3VyU2hhZGVyKS5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMuY29udG91clZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCx0aGlzLmNvbnRvdXJDb3VudCksdGhpcy5jb250b3VyVkFPLnVuYmluZCgpKX0say5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8dyxuPXQudmlld3x8dyxpPXQucHJvamVjdGlvbnx8dyxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzLGw9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEscGlja0lkOnRoaXMucGlja0lkLzI1NX07KChzPXRoaXMucGlja1NoYWRlcikuYmluZCgpLHMudW5pZm9ybXM9bCx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKSx0aGlzLnBvaW50Q291bnQ+MCkmJigocz10aGlzLnBvaW50UGlja1NoYWRlcikuYmluZCgpLHMudW5pZm9ybXM9bCx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpfSxrLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO2Zvcih2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnMsaT1uZXcgQXJyYXkoci5sZW5ndGgpLGE9MDthPHIubGVuZ3RoOysrYSlpW2FdPW5bclthXV07dmFyIG89dC5jb29yZFswXSxzPXQuY29vcmRbMV07aWYoIXRoaXMucGlja1ZlcnRleCl7dmFyIGw9dGhpcy5wb3NpdGlvbnNbclswXV0sYz10aGlzLnBvc2l0aW9uc1tyWzFdXSx1PXRoaXMucG9zaXRpb25zW3JbMl1dLGY9WyhsWzBdK2NbMF0rdVswXSkvMywobFsxXStjWzFdK3VbMV0pLzMsKGxbMl0rY1syXSt1WzJdKS8zXTtyZXR1cm57X2NlbGxDZW50ZXI6ITAscG9zaXRpb246W28sc10saW5kZXg6ZSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OnRoaXMuaW50ZW5zaXR5W2VdLGRhdGFDb29yZGluYXRlOmZ9fXZhciBoPW0oaSxbbyp0aGlzLnBpeGVsUmF0aW8sdGhpcy5fcmVzb2x1dGlvblsxXS1zKnRoaXMucGl4ZWxSYXRpb10sdGhpcy5fbW9kZWwsdGhpcy5fdmlldyx0aGlzLl9wcm9qZWN0aW9uLHRoaXMuX3Jlc29sdXRpb24pO2lmKCFoKXJldHVybiBudWxsO3ZhciBwPWhbMl0sZD0wO2ZvcihhPTA7YTxyLmxlbmd0aDsrK2EpZCs9cFthXSp0aGlzLmludGVuc2l0eVtyW2FdXTtyZXR1cm57cG9zaXRpb246aFsxXSxpbmRleDpyW2hbMF1dLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6ZCxkYXRhQ29vcmRpbmF0ZTp0aGlzLnBvc2l0aW9uc1tyW2hbMF1dXX19LGsuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMubGluZVNoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50UGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJTaGFkZXIuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKHQ9KGU9dCkuZ2wpO3ZhciByPXQuZ2V0RXh0ZW5zaW9uKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTtpZighcil0aHJvdyBuZXcgRXJyb3IoImRlcml2YXRpdmVzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgbj1NKHQpLHM9Uyh0KSxsPUUodCksYz1MKHQpLGY9Qyh0KSxoPVAodCkscD1vKHQsdShuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1XSksWzEsMSw0XSkpO3AuZ2VuZXJhdGVNaXBtYXAoKSxwLm1pbkZpbHRlcj10LkxJTkVBUl9NSVBNQVBfTElORUFSLHAubWFnRmlsdGVyPXQuTElORUFSO3ZhciBkPWkodCksbT1pKHQpLGc9aSh0KSx2PWkodCkseT1pKHQpLHg9YSh0LFt7YnVmZmVyOmQsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjp5LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLGI9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxBPWEodCxbe2J1ZmZlcjpiLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLEk9aSh0KSxPPWkodCksej1pKHQpLEQ9aSh0KSxSPWkodCksRj1hKHQsW3tidWZmZXI6SSx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOlIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Tyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpELHR5cGU6dC5GTE9BVCxzaXplOjF9XSksQj1pKHQpLE49YSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSxqPW5ldyBUKHQscCxuLHMsbCxjLGYsaCxkLHksbSxnLHYseCxiLGssXyx3LEEsSSxSLE8seixELEYsQixOKTtyZXR1cm4gai51cGRhdGUoZSksan19LHsiLi9saWIvY2xvc2VzdC1wb2ludCI6MTEwLCIuL2xpYi9zaGFkZXJzIjoxMTEsY29sb3JtYXA6NTMsImdsLWJ1ZmZlciI6NzgsImdsLW1hdDQvaW52ZXJ0Ijo5OCwiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC1zaGFkZXIiOjEzMiwiZ2wtdGV4dHVyZTJkIjoxNDYsImdsLXZhbyI6MTUwLG5kYXJyYXk6MjU5LG5vcm1hbHM6MjYxLCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciI6MjkxLCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbMCwwLDAsMSwxLDAsMSwxXSkscz1pKGUsYS5ib3hWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdCb3g9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucGxvdCxvPXRoaXMuc2hhZGVyLGM9YS5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sby51bmlmb3Jtcy5sbz1zLG8udW5pZm9ybXMuaGk9bCxvLnVuaWZvcm1zLmNvbG9yPWksYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTE2LCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMn1dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUsby5ncmlkVmVydCxvLmdyaWRGcmFnKSxsPWkoZSxvLnRpY2tWZXJ0LG8uZ3JpZEZyYWcpO3JldHVybiBuZXcgcyh0LHIsYSxsKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbz10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LWV9dmFyIGMsdSxmLGgscCxkPXMucHJvdG90eXBlO2QuZHJhdz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wbG90LGU9dGhpcy52Ym8scj10aGlzLnNoYWRlcixuPXRoaXMudGlja3MsaT10LmdsLGE9dC5fdGlja0JvdW5kcyxvPXQuZGF0YUJveCxzPXQudmlld0JveCxsPXQuZ3JpZExpbmVXaWR0aCxoPXQuZ3JpZExpbmVDb2xvcixwPXQuZ3JpZExpbmVFbmFibGUsZD10LnBpeGVsUmF0aW8sbT0wO208MjsrK20pe3ZhciBnPWFbbV0sdj1hW20rMl0tZyx5PS41KihvW20rMl0rb1ttXSkseD1vW20rMl0tb1ttXTt1W21dPTIqdi94LGNbbV09MiooZy15KS94fXIuYmluZCgpLGUuYmluZCgpLHIuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLHIudW5pZm9ybXMuZGF0YVNoaWZ0PWMsci51bmlmb3Jtcy5kYXRhU2NhbGU9dTt2YXIgYj0wO2ZvcihtPTA7bTwyOysrbSl7ZlswXT1mWzFdPTAsZlttXT0xLHIudW5pZm9ybXMuZGF0YUF4aXM9ZixyLnVuaWZvcm1zLmxpbmVXaWR0aD1sW21dLyhzW20rMl0tc1ttXSkqZCxyLnVuaWZvcm1zLmNvbG9yPWhbbV07dmFyIF89NipuW21dLmxlbmd0aDtwW21dJiZfJiZpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsYixfKSxiKz1ffX0pLGQuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLGk9WzAsMF0sbz1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9dGhpcy5wbG90LGM9dGhpcy52Ym8sdT10aGlzLnRpY2tTaGFkZXIsZj10aGlzLnRpY2tzLGg9cy5nbCxwPXMuX3RpY2tCb3VuZHMsZD1zLmRhdGFCb3gsbT1zLnZpZXdCb3gsZz1zLnBpeGVsUmF0aW8sdj1zLnNjcmVlbkJveCx5PXZbMl0tdlswXSx4PXZbM10tdlsxXSxiPW1bMl0tbVswXSxfPW1bM10tbVsxXSx3PTA7dzwyOysrdyl7dmFyIFQ9cFt3XSxrPXBbdysyXS1ULEE9LjUqKGRbdysyXStkW3ddKSxNPWRbdysyXS1kW3ddO2Vbd109MiprL00sdFt3XT0yKihULUEpL019ZVswXSo9Yi95LHRbMF0qPWIveSxlWzFdKj1fL3gsdFsxXSo9Xy94LHUuYmluZCgpLGMuYmluZCgpLHUuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBTPXUudW5pZm9ybXM7Uy5kYXRhU2hpZnQ9dCxTLmRhdGFTY2FsZT1lO3ZhciBFPXMudGlja01hcmtMZW5ndGgsTD1zLnRpY2tNYXJrV2lkdGgsQz1zLnRpY2tNYXJrQ29sb3IsUD02KmZbMF0ubGVuZ3RoLEk9TWF0aC5taW4oYS5nZShmWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSxPPU1hdGgubWluKGEuZ3QoZlswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxmWzBdLmxlbmd0aCksej0wKzYqSSxEPTYqTWF0aC5tYXgoMCxPLUkpLFI9TWF0aC5taW4oYS5nZShmWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxGPU1hdGgubWluKGEuZ3QoZlsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxmWzFdLmxlbmd0aCksQj1QKzYqUixOPTYqTWF0aC5tYXgoMCxGLVIpO2lbMF09MioobVswXS1FWzFdKS95LTEsaVsxXT0obVszXSttWzFdKS94LTEsb1swXT1FWzFdKmcveSxvWzFdPUxbMV0qZy94LE4mJihTLmNvbG9yPUNbMV0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0obVsyXSttWzBdKS95LTEsaVsxXT0yKihtWzFdLUVbMF0pL3gtMSxvWzBdPUxbMF0qZy95LG9bMV09RVswXSpnL3gsRCYmKFMuY29sb3I9Q1swXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyx6LEQpKSxpWzBdPTIqKG1bMl0rRVszXSkveS0xLGlbMV09KG1bM10rbVsxXSkveC0xLG9bMF09RVszXSpnL3ksb1sxXT1MWzNdKmcveCxOJiYoUy5jb2xvcj1DWzNdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEIsTikpLGlbMF09KG1bMl0rbVswXSkveS0xLGlbMV09MioobVszXStFWzJdKS94LTEsb1swXT1MWzJdKmcveSxvWzFdPUVbMl0qZy94LEQmJihTLmNvbG9yPUNbMl0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMseixEKSl9fSgpLGQudXBkYXRlPShoPVsxLDEsLTEsLTEsMSwtMV0scD1bMSwtMSwxLDEsLTEsLTFdLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRpY2tzLHI9dC5ib3VuZHMsbj1uZXcgRmxvYXQzMkFycmF5KDE4KihlWzBdLmxlbmd0aCtlWzFdLmxlbmd0aCkpLGk9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxhPVtbXSxbXV0sbz0wO288MjsrK28pZm9yKHZhciBzPWFbb10sbD1lW29dLGM9cltvXSx1PXJbbysyXSxmPTA7ZjxsLmxlbmd0aDsrK2Ype3ZhciBkPShsW2ZdLngtYykvKHUtYyk7cy5wdXNoKGQpO2Zvcih2YXIgbT0wO208NjsrK20pbltpKytdPWQsbltpKytdPWhbbV0sbltpKytdPXBbbV19dGhpcy50aWNrcz1hLHRoaXMudmJvLnVwZGF0ZShuKX0pLGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy50aWNrU2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxMTYsImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiZ2wtYnVmZmVyIjo3OCwiZ2wtc2hhZGVyIjoxMzJ9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxzPWkoZSxhLmxpbmVWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdMaW5lPShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMucGxvdCxjPXRoaXMuc2hhZGVyLHU9by5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sYy51bmlmb3Jtcy5zdGFydD1zLGMudW5pZm9ybXMuZW5kPWwsYy51bmlmb3Jtcy53aWR0aD1pKm8ucGl4ZWxSYXRpbyxjLnVuaWZvcm1zLmNvbG9yPWEsdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTE2LCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMn1dLDExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIl0pO2UuZXhwb3J0cz17bGluZVZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZlYzIgcGVycCh2ZWMyIHYpIHtcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcbn1cblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4ob2Zmc2V0ICsgMC41ICogd2lkdGggKiBkZWx0YSAqIGNvb3JkLngpLCAwLCAxKTtcbn1cbiJdKSxsaW5lRnJhZzppLHRleHRWZXJ0Om4oWyIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XG5cbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xudW5pZm9ybSBmbG9hdCBhbmdsZTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XG4gIHZlYzIgZ2x5cGhPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUueHk7XG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xuICAgIGdseXBoTWF0cml4ICogZ2x5cGhPZmZzZXQgKiB0ZXh0U2NhbGUgKyBzY3JlZW5PZmZzZXQ7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcbn1cbiJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIGxvLCBoaTtcblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG1peChsbywgaGksIGNvb3JkKSksIDAsIDEpO1xufVxuIl0pLHRpY2tWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZSwgc2NyZWVuT2Zmc2V0LCB0aWNrU2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcbn1cbiJdKX19LHtnbHNsaWZ5OjIzMX1dLDExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUscy50ZXh0VmVydCxzLnRleHRGcmFnKTtyZXR1cm4gbmV3IGwodCxyLGEpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgidGV4dC1jYWNoZSIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxzPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxmLGgscCxkLG09bC5wcm90b3R5cGU7bS5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxmPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsaD1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxtPWUudGlja1BhZCxnPWUudGlja0NvbG9yLHY9ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0sVD10aGlzLmxhYmVsQ291bnRbdF0saz1vLmx0KG4sbFt0XSksQT1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhoWzIrdF0taFt0XSktMTt2YXIgTT0yL2hbMisoMV50KV0taFsxXnRdO3VbMV50XT1NKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPU0qcCptW3RdLGs8QSYmaVtBXT5pW2tdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1nW3RdLHIudW5pZm9ybXMuYW5nbGU9dlt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtrXSxpW0FdLWlba10pKSkseVt0XSYmVCYmKHVbMV50XS09TSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxUKSksdVsxXnRdPU0qc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9TSpwKm1bdCsyXSxrPEEmJmlbQV0+aVtrXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9Z1t0KzJdLHIudW5pZm9ybXMuYW5nbGU9dlt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW2tdLGlbQV0taVtrXSkpKSx5W3QrMl0mJlQmJih1WzFedF0rPU0qcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsVCkpfSksbS5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLG0uYmluZD0oaD1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10sZj1hW29dLG09YVtvKzJdLWYsZz1pW29dLHY9aVtvKzJdLWc7cFtvXT0yKmwvdSptL3YsaFtvXT0yKihzLWMpL3UqbS92fWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9aCxlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGY9Wy0xLzBdLGg9bFtvXTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXt2YXIgcD1oW2VdLGQ9cC54LG09cC50ZXh0LGc9cC5mb250fHwic2Fucy1zZXJpZiI7aT1wLmZvbnRTaXplfHwxMjtmb3IodmFyIHY9MS8oY1tvKzJdLWNbb10pLHk9Y1tvXSx4PW0uc3BsaXQoIlxuIiksYj0wO2I8eC5sZW5ndGg7YisrKWZvcihuPWEoZyx4W2JdKS5kYXRhLHI9MDtyPG4ubGVuZ3RoO3IrPTIpcy5wdXNoKG5bcl0qaSwtbltyKzFdKmktYippKjEuMiwoZC15KSp2KTt1LnB1c2goTWF0aC5mbG9vcihzLmxlbmd0aC8zKSksZi5wdXNoKGQpfXRoaXMudGlja09mZnNldFtvXT11LHRoaXMudGlja1hbb109Zn1mb3Iobz0wO288MjsrK28pe2Zvcih0aGlzLmxhYmVsT2Zmc2V0W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQubGFiZWxGb250W29dLHQubGFiZWxzW29dLHt0ZXh0QWxpZ246ImNlbnRlciJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjExNiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMiwidGV4dC1jYWNoZSI6MzAzfV0sMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxjPW5ldyBsKGUscik7cmV0dXJuIGMuZ3JpZD1pKGMpLGMudGV4dD1hKGMpLGMubGluZT1vKGMpLGMuYm94PXMoYyksYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGk9dCgiLi9saWIvZ3JpZCIpLGE9dCgiLi9saWIvdGV4dCIpLG89dCgiLi9saWIvbGluZSIpLHM9dCgiLi9saWIvYm94Iik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZ2w9dCx0aGlzLnBpY2tCdWZmZXI9ZSx0aGlzLnNjcmVlbkJveD1bMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0sdGhpcy52aWV3Qm94PVswLDAsMCwwXSx0aGlzLmRhdGFCb3g9Wy0xMCwtMTAsMTAsMTBdLHRoaXMuZ3JpZExpbmVFbmFibGU9WyEwLCEwXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLnRpY2tBbmdsZT1bMCwwLDAsMF0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITAsITBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlQ2VudGVyPVswLDBdLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bMCwwLDAsMF0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bNCw0XSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITAsITAsITAsITBdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsyLDIsMiwyXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWQ9bnVsbCx0aGlzLnRleHQ9bnVsbCx0aGlzLmxpbmU9bnVsbCx0aGlzLmJveD1udWxsLHRoaXMub2JqZWN0cz1bXSx0aGlzLm92ZXJsYXlzPVtdLHRoaXMuX3RpY2tCb3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnN0YXRpYz0hMSx0aGlzLmRpcnR5PSExLHRoaXMucGlja0RpcnR5PSExLHRoaXMucGlja0RlbGF5PTEyMCx0aGlzLnBpY2tSYWRpdXM9MTAsdGhpcy5fcGlja1RpbWVvdXQ9bnVsbCx0aGlzLl9kcmF3UGljaz10aGlzLmRyYXdQaWNrLmJpbmQodGhpcyksdGhpcy5fZGVwdGhDb3VudGVyPTB9dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9dC5zbGljZSgpLHI9MDtyPGUubGVuZ3RoOysrcillW3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gZX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9Yy5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9dGhpcy5waWNrRGlydHk9ITB9LGMuc2V0T3ZlcmxheURpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sYy5uZXh0RGVwdGhWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXB0aENvdW50ZXIrKy82NTUzNn0sYy5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbCxlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy52aWV3Qm94LG49dGhpcy5kYXRhQm94LGk9dGhpcy5waXhlbFJhdGlvLGE9dGhpcy5ncmlkLG89dGhpcy5saW5lLHM9dGhpcy50ZXh0LGw9dGhpcy5vYmplY3RzO2lmKHRoaXMuX2RlcHRoQ291bnRlcj0wLHRoaXMucGlja0RpcnR5JiYodGhpcy5fcGlja1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9waWNrVGltZW91dCksdGhpcy5waWNrRGlydHk9ITEsdGhpcy5fcGlja1RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9kcmF3UGljayx0aGlzLnBpY2tEZWxheSkpLHRoaXMuZGlydHkpe2lmKHRoaXMuZGlydHk9ITEsdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0LmVuYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuREVQVEhfVEVTVCksdC5kZXB0aEZ1bmModC5MRVNTKSx0LmRlcHRoTWFzayghMSksdC5lbmFibGUodC5CTEVORCksdC5ibGVuZEVxdWF0aW9uKHQuRlVOQ19BREQsdC5GVU5DX0FERCksdC5ibGVuZEZ1bmModC5PTkUsdC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx0aGlzLmJvcmRlckNvbG9yKXt0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pO3ZhciBjPXRoaXMuYm9yZGVyQ29sb3I7dC5jbGVhckNvbG9yKGNbMF0qY1szXSxjWzFdKmNbM10sY1syXSpjWzNdLGNbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCl9dC5zY2lzc29yKHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKSx0LnZpZXdwb3J0KHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKTt2YXIgdT10aGlzLmJhY2tncm91bmRDb2xvcjt0LmNsZWFyQ29sb3IodVswXSp1WzNdLHVbMV0qdVszXSx1WzJdKnVbM10sdVszXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpLGEuZHJhdygpO3ZhciBmPXRoaXMuemVyb0xpbmVFbmFibGUsaD10aGlzLnplcm9MaW5lQ29sb3IscD10aGlzLnplcm9MaW5lV2lkdGg7aWYoZlswXXx8ZlsxXSl7by5iaW5kKCk7Zm9yKHZhciBkPTA7ZDwyOysrZClpZihmW2RdJiZuW2RdPD0wJiZuW2QrMl0+PTApe3ZhciBtPWVbZF0tbltkXSooZVtkKzJdLWVbZF0pLyhuW2QrMl0tbltkXSk7MD09PWQ/by5kcmF3TGluZShtLGVbMV0sbSxlWzNdLHBbZF0saFtkXSk6by5kcmF3TGluZShlWzBdLG0sZVsyXSxtLHBbZF0saFtkXSl9fWZvcihkPTA7ZDxsLmxlbmd0aDsrK2QpbFtkXS5kcmF3KCk7dC52aWV3cG9ydChlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0aGlzLmdyaWQuZHJhd1RpY2tNYXJrcygpLG8uYmluZCgpO3ZhciBnPXRoaXMuYm9yZGVyTGluZUVuYWJsZSx2PXRoaXMuYm9yZGVyTGluZVdpZHRoLHk9dGhpcy5ib3JkZXJMaW5lQ29sb3I7Zm9yKGdbMV0mJm8uZHJhd0xpbmUoclswXSxyWzFdLS41KnZbMV0qaSxyWzBdLHJbM10rLjUqdlszXSppLHZbMV0seVsxXSksZ1swXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzFdLHJbMl0rLjUqdlsyXSppLHJbMV0sdlswXSx5WzBdKSxnWzNdJiZvLmRyYXdMaW5lKHJbMl0sclsxXS0uNSp2WzFdKmksclsyXSxyWzNdKy41KnZbM10qaSx2WzNdLHlbM10pLGdbMl0mJm8uZHJhd0xpbmUoclswXS0uNSp2WzBdKmksclszXSxyWzJdKy41KnZbMl0qaSxyWzNdLHZbMl0seVsyXSkscy5iaW5kKCksZD0wO2Q8MjsrK2Qpcy5kcmF3VGlja3MoZCk7dGhpcy50aXRsZUVuYWJsZSYmcy5kcmF3VGl0bGUoKTt2YXIgeD10aGlzLm92ZXJsYXlzO2ZvcihkPTA7ZDx4Lmxlbmd0aDsrK2QpeFtkXS5kcmF3KCk7dC5kaXNhYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5CTEVORCksdC5kZXB0aE1hc2soITApfX0sYy5kcmF3UGljaz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHQ9dGhpcy5waWNrQnVmZmVyO3RoaXMuZ2wsdGhpcy5fcGlja1RpbWVvdXQ9bnVsbCx0LmJlZ2luKCk7Zm9yKHZhciBlPTEscj10aGlzLm9iamVjdHMsbj0wO248ci5sZW5ndGg7KytuKWU9cltuXS5kcmF3UGljayhlKTt0LmVuZCgpfX0sYy5waWNrPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuc3RhdGljKXt2YXIgcj10aGlzLnBpeGVsUmF0aW8sbj10aGlzLnBpY2tQaXhlbFJhdGlvLGk9dGhpcy52aWV3Qm94LGE9MHxNYXRoLnJvdW5kKCh0LWlbMF0vcikqbiksbz0wfE1hdGgucm91bmQoKGUtaVsxXS9yKSpuKSxzPXRoaXMucGlja0J1ZmZlci5xdWVyeShhLG8sdGhpcy5waWNrUmFkaXVzKTtpZighcylyZXR1cm4gbnVsbDtmb3IodmFyIGw9cy5pZCsocy52YWx1ZVswXTw8OCkrKHMudmFsdWVbMV08PDE2KSsocy52YWx1ZVsyXTw8MjQpLGM9dGhpcy5vYmplY3RzLHU9MDt1PGMubGVuZ3RoOysrdSl7dmFyIGY9Y1t1XS5waWNrKGEsbyxsKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfX0sYy5zZXRTY3JlZW5Cb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnBpeGVsUmF0aW87ZVswXT0wfE1hdGgucm91bmQodFswXSpyKSxlWzFdPTB8TWF0aC5yb3VuZCh0WzFdKnIpLGVbMl09MHxNYXRoLnJvdW5kKHRbMl0qciksZVszXT0wfE1hdGgucm91bmQodFszXSpyKSx0aGlzLnNldERpcnR5KCl9LGMuc2V0RGF0YUJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFCb3g7KGVbMF0hPT10WzBdfHxlWzFdIT09dFsxXXx8ZVsyXSE9PXRbMl18fGVbM10hPT10WzNdKSYmKGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSx0aGlzLnNldERpcnR5KCkpfSxjLnNldFZpZXdCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy52aWV3Qm94O3JbMF09MHxNYXRoLnJvdW5kKHRbMF0qZSksclsxXT0wfE1hdGgucm91bmQodFsxXSplKSxyWzJdPTB8TWF0aC5yb3VuZCh0WzJdKmUpLHJbM109MHxNYXRoLnJvdW5kKHRbM10qZSk7dmFyIG49dGhpcy5waWNrUGl4ZWxSYXRpbzt0aGlzLnBpY2tCdWZmZXIuc2hhcGU9WzB8TWF0aC5yb3VuZCgodFsyXS10WzBdKSpuKSwwfE1hdGgucm91bmQoKHRbM10tdFsxXSkqbildLHRoaXMuc2V0RGlydHkoKX0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW98fDE7dmFyIHI9dGhpcy5waXhlbFJhdGlvO3RoaXMucGlja1BpeGVsUmF0aW89TWF0aC5tYXgociwxKSx0aGlzLnNldFNjcmVlbkJveCh0LnNjcmVlbkJveHx8WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aC9yLGUuZHJhd2luZ0J1ZmZlckhlaWdodC9yXSk7dGhpcy5zY3JlZW5Cb3g7dGhpcy5zZXRWaWV3Qm94KHQudmlld0JveHx8Wy4xMjUqKHRoaXMuc2NyZWVuQm94WzJdLXRoaXMuc2NyZWVuQm94WzBdKS9yLC4xMjUqKHRoaXMuc2NyZWVuQm94WzNdLXRoaXMuc2NyZWVuQm94WzFdKS9yLC44NzUqKHRoaXMuc2NyZWVuQm94WzJdLXRoaXMuc2NyZWVuQm94WzBdKS9yLC44NzUqKHRoaXMuc2NyZWVuQm94WzNdLXRoaXMuc2NyZWVuQm94WzFdKS9yXSk7dmFyIG49dGhpcy52aWV3Qm94LGk9KG5bMl0tblswXSkvKG5bM10tblsxXSk7dGhpcy5zZXREYXRhQm94KHQuZGF0YUJveHx8Wy0xMCwtMTAvaSwxMCwxMC9pXSksdGhpcy5ib3JkZXJDb2xvcj0hMSE9PXQuYm9yZGVyQ29sb3ImJih0LmJvcmRlckNvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9KHQuYmFja2dyb3VuZENvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUVuYWJsZT0odC5ncmlkTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lV2lkdGg9KHQuZ3JpZExpbmVXaWR0aHx8WzEsMV0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUNvbG9yPXUodC5ncmlkTGluZUNvbG9yfHxbWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0pLHRoaXMuemVyb0xpbmVFbmFibGU9KHQuemVyb0xpbmVFbmFibGV8fFshMCwhMF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZVdpZHRoPSh0Lnplcm9MaW5lV2lkdGh8fFs0LDRdKS5zbGljZSgpLHRoaXMuemVyb0xpbmVDb2xvcj11KHQuemVyb0xpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tNYXJrTGVuZ3RoPSh0LnRpY2tNYXJrTGVuZ3RofHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrTWFya1dpZHRoPSh0LnRpY2tNYXJrV2lkdGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrQ29sb3I9dSh0LnRpY2tNYXJrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpdGxlQ2VudGVyPSh0LnRpdGxlQ2VudGVyfHxbLjUqKG5bMF0rblsyXSkvciwoblszXSsxMjApL3JdKS5zbGljZSgpLHRoaXMudGl0bGVFbmFibGU9ISgidGl0bGVFbmFibGUiaW4gdCl8fCEhdC50aXRsZUVuYWJsZSx0aGlzLnRpdGxlQW5nbGU9dC50aXRsZUFuZ2xlfHwwLHRoaXMudGl0bGVDb2xvcj0odC50aXRsZUNvbG9yfHxbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5sYWJlbFBhZD0odC5sYWJlbFBhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLmxhYmVsQW5nbGU9KHQubGFiZWxBbmdsZXx8WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdKS5zbGljZSgpLHRoaXMubGFiZWxFbmFibGU9KHQubGFiZWxFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5sYWJlbENvbG9yPXUodC5sYWJlbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aWNrUGFkPSh0LnRpY2tQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy50aWNrQW5nbGU9KHQudGlja0FuZ2xlfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrRW5hYmxlPSh0LnRpY2tFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy50aWNrQ29sb3I9dSh0LnRpY2tDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMuYm9yZGVyTGluZUVuYWJsZT0odC5ib3JkZXJMaW5lRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZVdpZHRoPSh0LmJvcmRlckxpbmVXaWR0aHx8WzIsMiwyLDJdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZUNvbG9yPXUodC5ib3JkZXJMaW5lQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKTt2YXIgYT10LnRpY2tzfHxbW10sW11dLG89dGhpcy5fdGlja0JvdW5kcztvWzBdPW9bMV09MS8wLG9bMl09b1szXT0tMS8wO2Zvcih2YXIgcz0wO3M8MjsrK3Mpe3ZhciBsPWFbc10uc2xpY2UoMCk7MCE9PWwubGVuZ3RoJiYobC5zb3J0KGYpLG9bc109TWF0aC5taW4ob1tzXSxsWzBdLngpLG9bcysyXT1NYXRoLm1heChvW3MrMl0sbFtsLmxlbmd0aC0xXS54KSl9dGhpcy5ncmlkLnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YX0pLHRoaXMudGV4dC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOmEsbGFiZWxzOnQubGFiZWxzfHxbIngiLCJ5Il0sbGFiZWxTaXplOnQubGFiZWxTaXplfHxbMTIsMTJdLGxhYmVsRm9udDp0LmxhYmVsRm9udHx8WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRpdGxlOnQudGl0bGV8fCIiLHRpdGxlU2l6ZTp0LnRpdGxlU2l6ZXx8MTgsdGl0bGVGb250OnQudGl0bGVGb250fHwic2Fucy1zZXJpZiJ9KSx0aGlzLnN0YXRpYz0hIXQuc3RhdGljLHRoaXMuc2V0RGlydHkoKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3guZGlzcG9zZSgpLHRoaXMuZ3JpZC5kaXNwb3NlKCksdGhpcy50ZXh0LmRpc3Bvc2UoKSx0aGlzLmxpbmUuZGlzcG9zZSgpO2Zvcih2YXIgdD10aGlzLm9iamVjdHMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vYmplY3RzW3RdLmRpc3Bvc2UoKTt0aGlzLm9iamVjdHMubGVuZ3RoPTA7Zm9yKHQ9dGhpcy5vdmVybGF5cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm92ZXJsYXlzW3RdLmRpc3Bvc2UoKTt0aGlzLm92ZXJsYXlzLmxlbmd0aD0wLHRoaXMuZ2w9bnVsbH0sYy5hZGRPYmplY3Q9ZnVuY3Rpb24odCl7dGhpcy5vYmplY3RzLmluZGV4T2YodCk8MCYmKHRoaXMub2JqZWN0cy5wdXNoKHQpLHRoaXMuc2V0RGlydHkoKSl9LGMucmVtb3ZlT2JqZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm9iamVjdHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0RGlydHkoKTticmVha319LGMuYWRkT3ZlcmxheT1mdW5jdGlvbih0KXt0aGlzLm92ZXJsYXlzLmluZGV4T2YodCk8MCYmKHRoaXMub3ZlcmxheXMucHVzaCh0KSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpKX0sYy5yZW1vdmVPdmVybGF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpO2JyZWFrfX19LHsiLi9saWIvYm94IjoxMTMsIi4vbGliL2dyaWQiOjExNCwiLi9saWIvbGluZSI6MTE1LCIuL2xpYi90ZXh0IjoxMTcsImdsLXNlbGVjdC1zdGF0aWMiOjEzMX1dLDExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgcj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihyWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sclsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKTsiem9vbU1pbiJpbiBlJiYoclswXT1lLnpvb21NaW4pOyJ6b29tTWF4ImluIGUmJihyWzFdPWUuem9vbU1heCk7dmFyIGM9aSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpyfSksdT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sZj0wLGg9dC5jbGllbnRXaWR0aCxwPXQuY2xpZW50SGVpZ2h0LGQ9e2tleUJpbmRpbmdNb2RlOiJyb3RhdGUiLGVuYWJsZVdoZWVsOiEwLHZpZXc6YyxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOmMubW9kZXMsX29ydGhvOmUuX29ydGhvfHxlLnByb2plY3Rpb24mJiJvcnRob2dyYXBoaWMiPT09ZS5wcm9qZWN0aW9uLnR5cGV8fCExLHRpY2s6ZnVuY3Rpb24oKXt2YXIgZT1uKCkscj10aGlzLmRlbGF5LGk9ZS0yKnI7Yy5pZGxlKGUtciksYy5yZWNhbGNNYXRyaXgoaSksYy5mbHVzaChlLSgxMDArMipyKSk7Zm9yKHZhciBhPSEwLG89Yy5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZ1W3NdPT09b1tzXSx1W3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWgmJnQuY2xpZW50SGVpZ2h0PT09cDtyZXR1cm4gaD10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsYT8hbDooZj1NYXRoLmV4cChjLmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7Yy5sb29rQXQoYy5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnJvdGF0ZShjLmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe2MucGFuKGMubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7Yy50cmFuc2xhdGUoYy5sYXN0VCgpLHQsZSxyKX19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLHttYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkTWF0cml4fSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TWF0cml4KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkTWF0cml4fSxlbnVtZXJhYmxlOiEwfSxtb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRNb2RlKCl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1jLmNvbXB1dGVkVXAuc2xpY2UoKSxyPWMuY29tcHV0ZWRFeWUuc2xpY2UoKSxpPWMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKTtpZihjLnNldE1vZGUodCksInR1cm50YWJsZSI9PT10KXt2YXIgYT1uKCk7Yy5fYWN0aXZlLmxvb2tBdChhLHIsaSxlKSxjLl9hY3RpdmUubG9va0F0KGErNTAwLHIsaSxbMCwwLDFdKSxjLl9hY3RpdmUuZmx1c2goYSl9cmV0dXJuIGMuZ2V0TW9kZSgpfSxlbnVtZXJhYmxlOiEwfSxjZW50ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkQ2VudGVyfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSxudWxsLHQpLGMuY29tcHV0ZWRDZW50ZXJ9LGVudW1lcmFibGU6ITB9LGV5ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRFeWV9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRFeWV9LGVudW1lcmFibGU6ITB9LHVwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZFVwfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSxudWxsLG51bGwsdCksYy5jb21wdXRlZFVwfSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZShjLmxhc3RUKCksdCksdH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2VMaW1pdHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldERpc3RhbmNlTGltaXRzKHIpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2VMaW1pdHModCksdH0sZW51bWVyYWJsZTohMH19KSx0LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pKSxkLl9sYXN0WD0tMSxkLl9sYXN0WT0tMSxkLl9sYXN0TW9kcz17c2hpZnQ6ITEsY29udHJvbDohMSxhbHQ6ITEsbWV0YTohMX0sZC5lbmFibGVNb3VzZUxpc3RlbmVycz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxyLGksYSl7dmFyIG89ZC5rZXlCaW5kaW5nTW9kZTtpZighMSE9PW8pe3ZhciBzPSJyb3RhdGUiPT09byxsPSJwYW4iPT09byx1PSJ6b29tIj09PW8saD0hIWEuY29udHJvbCxwPSEhYS5hbHQsbT0hIWEuc2hpZnQsZz0hISgxJmUpLHY9ISEoMiZlKSx5PSEhKDQmZSkseD0xL3QuY2xpZW50SGVpZ2h0LGI9eCooci1kLl9sYXN0WCksXz14KihpLWQuX2xhc3RZKSx3PWQuZmxpcFg/MTotMSxUPWQuZmxpcFk/MTotMSxrPU1hdGguUEkqZC5yb3RhdGVTcGVlZCxBPW4oKTtpZigtMSE9PWQuX2xhc3RYJiYtMSE9PWQuX2xhc3RZJiYoKHMmJmcmJiFoJiYhcCYmIW18fGcmJiFoJiYhcCYmbSkmJmMucm90YXRlKEEsdyprKmIsLVQqaypfLDApLChsJiZnJiYhaCYmIXAmJiFtfHx2fHxnJiZoJiYhcCYmIW0pJiZjLnBhbihBLC1kLnRyYW5zbGF0ZVNwZWVkKmIqZixkLnRyYW5zbGF0ZVNwZWVkKl8qZiwwKSx1JiZnJiYhaCYmIXAmJiFtfHx5fHxnJiYhaCYmcCYmIW0pKXt2YXIgTT0tZC56b29tU3BlZWQqXy93aW5kb3cuaW5uZXJIZWlnaHQqKEEtYy5sYXN0VCgpKSoxMDA7Yy5wYW4oQSwwLDAsZiooTWF0aC5leHAoTSktMSkpfXJldHVybiBkLl9sYXN0WD1yLGQuX2xhc3RZPWksZC5fbGFzdE1vZHM9YSwhMH19ZC5tb3VzZUxpc3RlbmVyPWEodCxlKSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLChmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgwLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyl9KSwhIWwmJntwYXNzaXZlOiEwfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLChmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSksISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLChmdW5jdGlvbih0KXtlKDAsZC5fbGFzdFgsZC5fbGFzdFksZC5fbGFzdE1vZHMpfSksISFsJiZ7cGFzc2l2ZTohMH0pLGQud2hlZWxMaXN0ZW5lcj1vKHQsKGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqaSplL3dpbmRvdy5pbm5lckhlaWdodCooYS1jLmxhc3RUKCkpLzIwO2MucGFuKGEsMCwwLGYqKE1hdGguZXhwKG8pLTEpKX19fSksITApfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZH07dmFyIG49dCgicmlnaHQtbm93IiksaT10KCIzZC12aWV3IiksYT10KCJtb3VzZS1jaGFuZ2UiKSxvPXQoIm1vdXNlLXdoZWVsIikscz10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxsPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpfSx7IjNkLXZpZXciOjcsImhhcy1wYXNzaXZlLWV2ZW50cyI6MjMyLCJtb3VzZS1jaGFuZ2UiOjI0NywibW91c2UtZXZlbnQtb2Zmc2V0IjoyNDgsIm1vdXNlLXdoZWVsIjoyNTAsInJpZ2h0LW5vdyI6Mjc4fV0sMTIwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGk9dCgiZ2wtYXhlczNkIiksYT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGY9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGg9dCgiZ2wtbWF0NC9vcnRobyIpLHA9dCgiLi9saWIvc2hhZGVyIiksZD10KCJpcy1tb2JpbGUiKSh7dGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITB9KTtmdW5jdGlvbiBtKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gZyh0KXt2YXIgZT1NYXRoLnJvdW5kKE1hdGgubG9nKE1hdGguYWJzKHQpKS9NYXRoLmxvZygxMCkpO2lmKGU8MCl7dmFyIHI9TWF0aC5yb3VuZChNYXRoLnBvdygxMCwtZSkpO3JldHVybiBNYXRoLmNlaWwodCpyKS9yfWlmKGU+MCl7cj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1lLmV4cG9ydHM9e2NyZWF0ZVNjZW5lOmZ1bmN0aW9uKHQpeyh0PXR8fHt9KS5jYW1lcmE9dC5jYW1lcmF8fHt9O3ZhciBlPXQuY2FudmFzO2lmKCFlKXtpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXQuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpO2Vsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKX12YXIgcj10LmdsO3J8fCh0LmdsT3B0aW9ucyYmKGQ9ISF0LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoIndlYmdsIixlKSl8fChyPXQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixlKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9cmV0dXJuIHJ9KGUsdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpkfSkpO2lmKCFyKXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciB5PXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx4PW5ldyBtLGI9bChyLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCx7cHJlZmVyRmxvYXQ6IWR9KSxfPXAociksdz10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJiJvcnRob2dyYXBoaWMiPT09dC5jYW1lcmEucHJvamVjdGlvbi50eXBlfHwhMSxUPXtleWU6dC5jYW1lcmEuZXllfHxbMiwwLDBdLGNlbnRlcjp0LmNhbWVyYS5jZW50ZXJ8fFswLDAsMF0sdXA6dC5jYW1lcmEudXB8fFswLDEsMF0sem9vbU1pbjp0LmNhbWVyYS56b29tTWF4fHwuMSx6b29tTWF4OnQuY2FtZXJhLnpvb21NaW58fDEwMCxtb2RlOnQuY2FtZXJhLm1vZGV8fCJ0dXJudGFibGUiLF9vcnRobzp3fSxrPXQuYXhlc3x8e30sQT1pKHIsayk7QS5lbmFibGU9IWsuZGlzYWJsZTt2YXIgTT10LnNwaWtlc3x8e30sUz1vKHIsTSksRT1bXSxMPVtdLEM9W10sUD1bXSxJPSEwLE89ITAsej1uZXcgQXJyYXkoMTYpLEQ9bmV3IEFycmF5KDE2KSxSPXt2aWV3Om51bGwscHJvamVjdGlvbjp6LG1vZGVsOkQsX29ydGhvOiExfSxGPShPPSEwLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxCPXQuY2FtZXJhT2JqZWN0fHxuKGUsVCksTj17Z2w6cixjb250ZXh0TG9zdDohMSxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb3x8MSxjYW52YXM6ZSxzZWxlY3Rpb246eCxjYW1lcmE6QixheGVzOkEsYXhlc1BpeGVsczpudWxsLHNwaWtlczpTLGJvdW5kczp5LG9iamVjdHM6RSxzaGFwZTpGLGFzcGVjdDp0LmFzcGVjdFJhdGlvfHxbMSwxLDFdLHBpY2tSYWRpdXM6dC5waWNrUmFkaXVzfHwxMCx6TmVhcjp0LnpOZWFyfHwuMDEsekZhcjp0LnpGYXJ8fDFlMyxmb3Z5OnQuZm92eXx8TWF0aC5QSS80LGNsZWFyQ29sb3I6dC5jbGVhckNvbG9yfHxbMCwwLDAsMF0sYXV0b1Jlc2l6ZTp2KHQuYXV0b1Jlc2l6ZSksYXV0b0JvdW5kczp2KHQuYXV0b0JvdW5kcyksYXV0b1NjYWxlOiEhdC5hdXRvU2NhbGUsYXV0b0NlbnRlcjp2KHQuYXV0b0NlbnRlciksY2xpcFRvQm91bmRzOnYodC5jbGlwVG9Cb3VuZHMpLHNuYXBUb0RhdGE6ISF0LnNuYXBUb0RhdGEsb25zZWxlY3Q6dC5vbnNlbGVjdHx8bnVsbCxvbnJlbmRlcjp0Lm9ucmVuZGVyfHxudWxsLG9uY2xpY2s6dC5vbmNsaWNrfHxudWxsLGNhbWVyYVBhcmFtczpSLG9uY29udGV4dGxvc3M6bnVsbCxtb3VzZUxpc3RlbmVyOm51bGwsX3N0b3BwZWQ6ITEsZ2V0QXNwZWN0cmF0aW86ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLmFzcGVjdFswXSx5OnRoaXMuYXNwZWN0WzFdLHo6dGhpcy5hc3BlY3RbMl19fSxzZXRBc3BlY3RyYXRpbzpmdW5jdGlvbih0KXt0aGlzLmFzcGVjdFswXT10LngsdGhpcy5hc3BlY3RbMV09dC55LHRoaXMuYXNwZWN0WzJdPXQueixPPSEwfSxzZXRCb3VuZHM6ZnVuY3Rpb24odCxlKXt0aGlzLmJvdW5kc1swXVt0XT1lLm1pbix0aGlzLmJvdW5kc1sxXVt0XT1lLm1heH0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmNsZWFyQ29sb3I9dH0sY2xlYXJSR0JBOmZ1bmN0aW9uKCl7dGhpcy5nbC5jbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvclswXSx0aGlzLmNsZWFyQ29sb3JbMV0sdGhpcy5jbGVhckNvbG9yWzJdLHRoaXMuY2xlYXJDb2xvclszXSksdGhpcy5nbC5jbGVhcih0aGlzLmdsLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5nbC5ERVBUSF9CVUZGRVJfQklUKX19LGo9W3IuZHJhd2luZ0J1ZmZlcldpZHRoL04ucGl4ZWxSYXRpb3wwLHIuZHJhd2luZ0J1ZmZlckhlaWdodC9OLnBpeGVsUmF0aW98MF07ZnVuY3Rpb24gVSgpe2lmKCFOLl9zdG9wcGVkJiZOLmF1dG9SZXNpemUpe3ZhciB0PWUucGFyZW50Tm9kZSxyPTEsbj0xO3QmJnQhPT1kb2N1bWVudC5ib2R5PyhyPXQuY2xpZW50V2lkdGgsbj10LmNsaWVudEhlaWdodCk6KHI9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQpO3ZhciBpPTB8TWF0aC5jZWlsKHIqTi5waXhlbFJhdGlvKSxhPTB8TWF0aC5jZWlsKG4qTi5waXhlbFJhdGlvKTtpZihpIT09ZS53aWR0aHx8YSE9PWUuaGVpZ2h0KXtlLndpZHRoPWksZS5oZWlnaHQ9YTt2YXIgbz1lLnN0eWxlO28ucG9zaXRpb249by5wb3NpdGlvbnx8ImFic29sdXRlIixvLmxlZnQ9IjBweCIsby50b3A9IjBweCIsby53aWR0aD1yKyJweCIsby5oZWlnaHQ9bisicHgiLEk9ITB9fX1OLmF1dG9SZXNpemUmJlUoKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciB0PUUubGVuZ3RoLGU9UC5sZW5ndGgsbj0wO248ZTsrK24pQ1tuXT0wO3Q6Zm9yKG49MDtuPHQ7KytuKXt2YXIgaT1FW25dLGE9aS5waWNrU2xvdHM7aWYoYSl7Zm9yKHZhciBvPTA7bzxlOysrbylpZihDW29dK2E8MjU1KXtMW25dPW8saS5zZXRQaWNrQmFzZShDW29dKzEpLENbb10rPWE7Y29udGludWUgdH12YXIgbD1zKHIsRik7TFtuXT1lLFAucHVzaChsKSxDLnB1c2goYSksaS5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgTFtuXT0tMX1mb3IoO2U+MCYmMD09PUNbZS0xXTspQy5wb3AoKSxQLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBIKCl7aWYoTi5jb250ZXh0TG9zdClyZXR1cm4hMDtyLmlzQ29udGV4dExvc3QoKSYmKE4uY29udGV4dExvc3Q9ITAsTi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsTi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsTi5vbmNvbnRleHRsb3NzJiZOLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksTi51cGRhdGU9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQ9dHx8e30sST0hMCxPPSEwKX0sTi5hZGQ9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQuYXhlcz1BLEUucHVzaCh0KSxMLnB1c2goLTEpLEk9ITAsTz0hMCxWKCkpfSxOLnJlbW92ZT1mdW5jdGlvbih0KXtpZighTi5fc3RvcHBlZCl7dmFyIGU9RS5pbmRleE9mKHQpO2U8MHx8KEUuc3BsaWNlKGUsMSksTC5wb3AoKSxJPSEwLE89ITAsVigpKX19LE4uZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFOLl9zdG9wcGVkJiYoTi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpLE4ubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFOLmNvbnRleHRMb3N0KSl7QS5kaXNwb3NlKCksUy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxFLmxlbmd0aDsrK3QpRVt0XS5kaXNwb3NlKCk7Yi5kaXNwb3NlKCk7Zm9yKHQ9MDt0PFAubGVuZ3RoOysrdClQW3RdLmRpc3Bvc2UoKTtfLmRpc3Bvc2UoKSxyPW51bGwsQT1udWxsLFM9bnVsbCxFPVtdfX0sTi5fbW91c2VSb3RhdGluZz0hMSxOLl9wcmV2QnV0dG9ucz0wLE4uZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtOLm1vdXNlTGlzdGVuZXI9dShlLChmdW5jdGlvbih0LGUscil7aWYoIU4uX3N0b3BwZWQpe3ZhciBuPVAubGVuZ3RoLGk9RS5sZW5ndGgsYT14Lm9iamVjdDt4LmRpc3RhbmNlPTEvMCx4Lm1vdXNlWzBdPWUseC5tb3VzZVsxXT1yLHgub2JqZWN0PW51bGwseC5zY3JlZW49bnVsbCx4LmRhdGFDb29yZGluYXRlPXguZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmTi5fcHJldkJ1dHRvbnMpTi5fbW91c2VSb3RhdGluZz0hMDtlbHNle04uX21vdXNlUm90YXRpbmcmJihPPSEwKSxOLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPVBbc10ucXVlcnkoZSxqWzFdLXItMSxOLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+eC5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgdT1FW2NdO2lmKExbY109PT1zKXt2YXIgZj11LnBpY2sobCk7ZiYmKHguYnV0dG9ucz10LHguc2NyZWVuPWwuY29vcmQseC5kaXN0YW5jZT1sLmRpc3RhbmNlLHgub2JqZWN0PXUseC5pbmRleD1mLmRpc3RhbmNlLHguZGF0YVBvc2l0aW9uPWYucG9zaXRpb24seC5kYXRhQ29vcmRpbmF0ZT1mLmRhdGFDb29yZGluYXRlLHguZGF0YT1mLG89ITApfX19fX1hJiZhIT09eC5vYmplY3QmJihhLmhpZ2hsaWdodCYmYS5oaWdobGlnaHQobnVsbCksST0hMCkseC5vYmplY3QmJih4Lm9iamVjdC5oaWdobGlnaHQmJngub2JqZWN0LmhpZ2hsaWdodCh4LmRhdGEpLEk9ITApLChvPW98fHgub2JqZWN0IT09YSkmJk4ub25zZWxlY3QmJk4ub25zZWxlY3QoeCksMSZ0JiYhKDEmTi5fcHJldkJ1dHRvbnMpJiZOLm9uY2xpY2smJk4ub25jbGljayh4KSxOLl9wcmV2QnV0dG9ucz10fX0pKX0sZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixIKTt2YXIgcT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxHPVtxWzBdLnNsaWNlKCkscVsxXS5zbGljZSgpXTtmdW5jdGlvbiBZKCl7aWYoIUgoKSl7VSgpO3ZhciB0PU4uY2FtZXJhLnRpY2soKTtSLnZpZXc9Ti5jYW1lcmEubWF0cml4LEk9SXx8dCxPPU98fHQsQS5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxTLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvO3ZhciBlPUUubGVuZ3RoLG49cVswXSxpPXFbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0xLzA7Zm9yKHZhciBvPTA7bzxlOysrbyl7KEM9RVtvXSkucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sQy5heGVzPU4uYXhlcyxJPUl8fCEhQy5kaXJ0eSxPPU98fCEhQy5kaXJ0eTt2YXIgcz1DLmJvdW5kcztpZihzKWZvcih2YXIgbD1zWzBdLHU9c1sxXSxwPTA7cDwzOysrcCluW3BdPU1hdGgubWluKG5bcF0sbFtwXSksaVtwXT1NYXRoLm1heChpW3BdLHVbcF0pfXZhciBkPU4uYm91bmRzO2lmKE4uYXV0b0JvdW5kcylmb3IocD0wO3A8MzsrK3Ape2lmKGlbcF08bltwXSluW3BdPS0xLGlbcF09MTtlbHNle25bcF09PT1pW3BdJiYobltwXS09MSxpW3BdKz0xKTt2YXIgbT0uMDUqKGlbcF0tbltwXSk7bltwXT1uW3BdLW0saVtwXT1pW3BdK219ZFswXVtwXT1uW3BdLGRbMV1bcF09aVtwXX12YXIgdj0hMTtmb3IocD0wO3A8MzsrK3Apdj12fHxHWzBdW3BdIT09ZFswXVtwXXx8R1sxXVtwXSE9PWRbMV1bcF0sR1swXVtwXT1kWzBdW3BdLEdbMV1bcF09ZFsxXVtwXTtpZihPPU98fHYsST1JfHx2KXtpZih2KXt2YXIgeT1bMCwwLDBdO2ZvcihvPTA7bzwzOysrbyl5W29dPWcoKGRbMV1bb10tZFswXVtvXSkvMTApO0EuYXV0b1RpY2tzP0EudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6QS51cGRhdGUoe2JvdW5kczpkfSl9dmFyIFQ9ci5kcmF3aW5nQnVmZmVyV2lkdGgsaz1yLmRyYXdpbmdCdWZmZXJIZWlnaHQ7RlswXT1ULEZbMV09ayxqWzBdPTB8TWF0aC5tYXgoVC9OLnBpeGVsUmF0aW8sMSksalsxXT0wfE1hdGgubWF4KGsvTi5waXhlbFJhdGlvLDEpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ib3VuZHMsbj10LmNhbWVyYVBhcmFtcyxpPW4ucHJvamVjdGlvbixhPW4ubW9kZWwsbz10LmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxzPXQuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCxsPXQuek5lYXIsYz10LnpGYXIsdT10LmZvdnkscD1vL3M7ZT8oaChpLC1wLHAsLTEsMSxsLGMpLG4uX29ydGhvPSEwKTooZihpLHUscCxsLGMpLG4uX29ydGhvPSExKTtmb3IodmFyIGQ9MDtkPDE2OysrZClhW2RdPTA7YVsxNV09MTt2YXIgbT0wO2ZvcihkPTA7ZDwzOysrZCltPU1hdGgubWF4KG0sclsxXVtkXS1yWzBdW2RdKTtmb3IoZD0wO2Q8MzsrK2QpdC5hdXRvU2NhbGU/YVs1KmRdPXQuYXNwZWN0W2RdLyhyWzFdW2RdLXJbMF1bZF0pOmFbNSpkXT0xL20sdC5hdXRvQ2VudGVyJiYoYVsxMitkXT0uNSotYVs1KmRdKihyWzBdW2RdK3JbMV1bZF0pKX0oTix3KTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXNCb3VuZHM9ZCxOLmNsaXBUb0JvdW5kcyYmKEMuY2xpcEJvdW5kcz1kKX14Lm9iamVjdCYmKE4uc25hcFRvRGF0YT9TLnBvc2l0aW9uPXguZGF0YUNvb3JkaW5hdGU6Uy5wb3NpdGlvbj14LmRhdGFQb3NpdGlvbixTLmJvdW5kcz1kKSxPJiYoTz0hMSxmdW5jdGlvbigpe2lmKCFIKCkpe3IuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMCksci5kaXNhYmxlKHIuQkxFTkQpLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpO2Zvcih2YXIgdD1FLmxlbmd0aCxlPVAubGVuZ3RoLG49MDtuPGU7KytuKXt2YXIgaT1QW25dO2kuc2hhcGU9aixpLmJlZ2luKCk7Zm9yKHZhciBhPTA7YTx0OysrYSlpZihMW2FdPT09bil7dmFyIG89RVthXTtvLmRyYXdQaWNrJiYoby5waXhlbFJhdGlvPTEsby5kcmF3UGljayhSKSl9aS5lbmQoKX19fSgpKSxOLmF4ZXNQaXhlbHM9YShOLmF4ZXMsUixULGspLE4ub25yZW5kZXImJk4ub25yZW5kZXIoKSxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIudmlld3BvcnQoMCwwLFQsayksTi5jbGVhclJHQkEoKSxyLmRlcHRoTWFzayghMCksci5jb2xvck1hc2soITAsITAsITAsITApLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpLHIuZGlzYWJsZShyLkJMRU5EKSxyLmRpc2FibGUoci5DVUxMX0ZBQ0UpO3ZhciBNPSExO0EuZW5hYmxlJiYoTT1NfHxBLmlzVHJhbnNwYXJlbnQoKSxBLmRyYXcoUikpLFMuYXhlcz1BLHgub2JqZWN0JiZTLmRyYXcoUiksci5kaXNhYmxlKHIuQ1VMTF9GQUNFKTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXM9QSxDLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLEMuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpLEMuaXNUcmFuc3BhcmVudCYmQy5pc1RyYW5zcGFyZW50KCkmJihNPSEwKX1pZihNKXtiLnNoYXBlPUYsYi5iaW5kKCksci5jbGVhcihyLkRFUFRIX0JVRkZFUl9CSVQpLHIuY29sb3JNYXNrKCExLCExLCExLCExKSxyLmRlcHRoTWFzayghMCksci5kZXB0aEZ1bmMoci5MRVNTKSxBLmVuYWJsZSYmQS5pc1RyYW5zcGFyZW50KCkmJkEuZHJhd1RyYW5zcGFyZW50KFIpO2ZvcihvPTA7bzxlOysrbyl7KEM9RVtvXSkuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpfXIuZW5hYmxlKHIuQkxFTkQpLHIuYmxlbmRFcXVhdGlvbihyLkZVTkNfQUREKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMSksci5jbGVhckNvbG9yKDAsMCwwLDApLHIuY2xlYXIoci5DT0xPUl9CVUZGRVJfQklUKSxBLmlzVHJhbnNwYXJlbnQoKSYmQS5kcmF3VHJhbnNwYXJlbnQoUik7Zm9yKG89MDtvPGU7KytvKXt2YXIgQzsoQz1FW29dKS5pc1RyYW5zcGFyZW50JiZDLmlzVHJhbnNwYXJlbnQoKSYmQy5kcmF3VHJhbnNwYXJlbnQoUil9ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuZGlzYWJsZShyLkRFUFRIX1RFU1QpLF8uYmluZCgpLGIuY29sb3JbMF0uYmluZCgwKSxfLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyhyKSxyLmRpc2FibGUoci5CTEVORCl9ST0hMTtmb3Iobz0wO288ZTsrK28pRVtvXS5kaXJ0eT0hMX19fXJldHVybiBOLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe2lmKE4uX3N0b3BwZWR8fE4uY29udGV4dExvc3QpcmV0dXJuO1koKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KCksTi5yZWRyYXc9ZnVuY3Rpb24oKXtOLl9zdG9wcGVkfHwoST0hMCxZKCkpfSxOfSxjcmVhdGVDYW1lcmE6bn19LHsiLi9jYW1lcmEuanMiOjExOSwiLi9saWIvc2hhZGVyIjoxMjAsImEtYmlnLXRyaWFuZ2xlIjo4LCJnbC1heGVzM2QiOjcwLCJnbC1heGVzM2QvcHJvcGVydGllcyI6NzcsImdsLWZibyI6ODYsImdsLW1hdDQvb3J0aG8iOjEwMSwiZ2wtbWF0NC9wZXJzcGVjdGl2ZSI6MTAyLCJnbC1zZWxlY3Qtc3RhdGljIjoxMzEsImdsLXNwaWtlczNkIjoxNDEsImlzLW1vYmlsZSI6MjM4LCJtb3VzZS1jaGFuZ2UiOjI0N31dLDEyMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKTtyLnBvaW50VmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcbiAgaGlnaHAgZmxvYXQgYiA9IDc4LjIzMztcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xuICBoaWdocCBmbG9hdCBlID0gbW9kKGQsIDMuMTQpO1xuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZSAqICgoMTkuNSArIHJhbmQocG9zaXRpb24pKSAvIDIwLjApO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcbiAgICBnbF9Qb2ludFNpemUgKj0gMC44ODY7XG4gIH1cbn0iXSksci5wb2ludEZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cztcbiAgdmVjNCBiYXNlQ29sb3I7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgaWYoY2VudGVyRnJhY3Rpb24gPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgY2VudGVyRnJhY3Rpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gICAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xuICB9XG59XG4iXSksci5waWNrVmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG5cbiAgdmVjNCBpZCA9IHBpY2tJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZCA9IGlkO1xufVxuIl0pLHIucGlja0ZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufVxuIl0pfSx7Z2xzbGlmeToyMzF9XSwxMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiLi9saWIvc2hhZGVyIik7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsYT1pKHIpLGw9aShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxmPW5ldyBzKHQsYSxsLGMsdSk7cmV0dXJuIGYudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGYpLGZ9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cigic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1yKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1yKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1yKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cigiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9aT9zOmEubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmEubWFsbG9jSW50MzIobik7aWYoaXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGl8fGEuZnJlZShsKSxvfHxhLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsaT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBhPWlbMl0taVswXSxvPWlbM10taVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxpO3IrKyl7dmFyIGE9dFsyKnJdLG89dFsyKnIrMV07YT49ZVswXSYmYTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxpKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9hLGxbNF09Mi9vLGxbNl09LTIqaVswXS9hLTEsbFs3XT0tMippWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGY9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksaD1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGYmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksaCYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGYmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxoJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjEyMiwiZ2wtYnVmZmVyIjo3OCwiZ2wtc2hhZGVyIjoxMzIsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1lWzBdLHU9ZVsxXSxmPWVbMl0saD1lWzNdLHA9clswXSxkPXJbMV0sbT1yWzJdLGc9clszXTsoYT1jKnArdSpkK2YqbStoKmcpPDAmJihhPS1hLHA9LXAsZD0tZCxtPS1tLGc9LWcpOzEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9bik7cmV0dXJuIHRbMF09cypjK2wqcCx0WzFdPXMqdStsKmQsdFsyXT1zKmYrbCptLHRbM109cypoK2wqZyx0fX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P3QudG9TdHJpbmcoKToiIn19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidmVjdG9yaXplLXRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWlbZV07YXx8KGE9aVtlXT17fSk7aWYodCBpbiBhKXJldHVybiBhW3RdO3ZhciBvPXt0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVIZWlnaHQ6MSxmb250OmUsbGluZVNwYWNpbmc6MS4yNSxzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sdHJpYW5nbGVzOiEwfSxzPW4odCxvKTtvLnRyaWFuZ2xlcz0hMTt2YXIgbCxjLHU9bih0LG8pO2lmKHImJjEhPT1yKXtmb3IobD0wO2w8cy5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8cy5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYylzLnBvc2l0aW9uc1tsXVtjXS89cjtmb3IobD0wO2w8dS5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8dS5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYyl1LnBvc2l0aW9uc1tsXVtjXS89cn12YXIgZj1bWzEvMCwxLzBdLFstMS8wLC0xLzBdXSxoPXUucG9zaXRpb25zLmxlbmd0aDtmb3IobD0wO2w8aDsrK2wpe3ZhciBwPXUucG9zaXRpb25zW2xdO2ZvcihjPTA7YzwyOysrYylmWzBdW2NdPU1hdGgubWluKGZbMF1bY10scFtjXSksZlsxXVtjXT1NYXRoLm1heChmWzFdW2NdLHBbY10pfXJldHVybiBhW3RdPVtzLHUsZl19O3ZhciBpPXt9fSx7InZlY3Rvcml6ZS10ZXh0IjozMTF9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsc2xpZnkiKSxhPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2aWV3UG9zaXRpb24gPSB2aWV3UG9zaXRpb24gLyB2aWV3UG9zaXRpb24udztcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gcG9zaXRpb247XG4gIH1cbn0iXSksbz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQuYmdyLCBpZC5iZ3IpIDwgMC4wMDEpIHtcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbiArIHZlYzQoc2NyZWVuU2l6ZSAqIHNjYWxlICogdmVjMihnbHlwaC54LCAtZ2x5cGgueSksIDAuMCwgMC4wKTtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gcG9zaXRpb247XG4gIH1cbn0iXSkscz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgbHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgY2xpcENlbnRlciAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xuICB9XG59XG4iXSksbD1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpIHx8XG4gICAgaW50ZXJwQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuICBnbF9GcmFnQ29sb3IgPSBpbnRlcnBDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksYz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0dyb3VwLCBwaWNrSWQuYmdyKTtcbn0iXSksdT1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6ImdseXBoIix0eXBlOiJ2ZWMyIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dLGY9e3ZlcnRleDphLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxoPXt2ZXJ0ZXg6byxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0scD17dmVydGV4OnMsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGQ9e3ZlcnRleDphLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxtPXt2ZXJ0ZXg6byxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4OnMsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9O2Z1bmN0aW9uIHYodCxlKXt2YXIgcj1uKHQsZSksaT1yLmF0dHJpYnV0ZXM7cmV0dXJuIGkucG9zaXRpb24ubG9jYXRpb249MCxpLmNvbG9yLmxvY2F0aW9uPTEsaS5nbHlwaC5sb2NhdGlvbj0yLGkuaWQubG9jYXRpb249MyxyfXIuY3JlYXRlUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxmKX0sci5jcmVhdGVPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGgpfSxyLmNyZWF0ZVByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxwKX0sci5jcmVhdGVQaWNrUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxkKX0sci5jcmVhdGVQaWNrT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxtKX0sci5jcmVhdGVQaWNrUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGcpfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJ0eXBlZGFycmF5LXBvb2wiKSxzPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxsPXQoIi4vbGliL3NoYWRlcnMiKSxjPXQoIi4vbGliL2dseXBocyIpLHU9dCgiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciKSxmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybiBoKG4sbiksaChuLG4pLGgobixuKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIG0odCl7cmV0dXJuITA9PT10fHx0PjE/MTp0fWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLnNoYWRlcj1lLHRoaXMub3J0aG9TaGFkZXI9cix0aGlzLnByb2plY3RTaGFkZXI9bix0aGlzLnBvaW50QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuZ2x5cGhCdWZmZXI9byx0aGlzLmlkQnVmZmVyPXMsdGhpcy52YW89bCx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5saW5lVmVydGV4Q291bnQ9MCx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMubGluZVdpZHRoPTAsdGhpcy5wcm9qZWN0U2NhbGU9WzIvMywyLzMsMi8zXSx0aGlzLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sdGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsdGhpcy5waWNrSWQ9MCx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlcj1jLHRoaXMucGlja09ydGhvU2hhZGVyPXUsdGhpcy5waWNrUHJvamVjdFNoYWRlcj1mLHRoaXMucG9pbnRzPVtdLHRoaXMuX3NlbGVjdFJlc3VsdD1uZXcgZCgwLFswLDAsMF0pLHRoaXMudXNlT3J0aG89ITAsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5heGVzUHJvamVjdD1bITAsITAsITBdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXSx0aGlzLmhpZ2hsaWdodFNjYWxlPTIsdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuZGlydHk9ITB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1sLmNyZWF0ZVBlcnNwZWN0aXZlKGUpLG49bC5jcmVhdGVPcnRobyhlKSxvPWwuY3JlYXRlUHJvamVjdChlKSxzPWwuY3JlYXRlUGlja1BlcnNwZWN0aXZlKGUpLGM9bC5jcmVhdGVQaWNrT3J0aG8oZSksdT1sLmNyZWF0ZVBpY2tQcm9qZWN0KGUpLGY9aShlKSxoPWkoZSkscD1pKGUpLGQ9aShlKSxtPWEoZSxbe2J1ZmZlcjpmLHNpemU6Myx0eXBlOmUuRkxPQVR9LHtidWZmZXI6aCxzaXplOjQsdHlwZTplLkZMT0FUfSx7YnVmZmVyOnAsc2l6ZToyLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpkLHNpemU6NCx0eXBlOmUuVU5TSUdORURfQllURSxub3JtYWxpemVkOiEwfV0pLHY9bmV3IGcoZSxyLG4sbyxmLGgscCxkLG0scyxjLHUpO3JldHVybiB2LnVwZGF0ZSh0KSx2fTt2YXIgdj1nLnByb3RvdHlwZTt2LnBpY2tTbG90cz0xLHYuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sdi5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJnRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfSx2LmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiYhdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB5PVswLDBdLHg9WzAsMCwwXSxiPVswLDAsMF0sXz1bMCwwLDAsMV0sdz1bMCwwLDAsMV0sVD1mLnNsaWNlKCksaz1bMCwwLDBdLEE9W1swLDAsMF0sWzAsMCwwXV07ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdFswXT10WzFdPXRbMl09MCx0fWZ1bmN0aW9uIFModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT0xLHR9ZnVuY3Rpb24gRSh0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFtyXT1uLHR9ZnVuY3Rpb24gTCh0LGUscixuKXt2YXIgaSxhPWUuYXhlc1Byb2plY3Qsbz1lLmdsLGw9dC51bmlmb3JtcyxjPXIubW9kZWx8fGYsdT1yLnZpZXd8fGYsaD1yLnByb2plY3Rpb258fGYsZD1lLmF4ZXNCb3VuZHMsbT1mdW5jdGlvbih0KXtmb3IodmFyIGU9QSxyPTA7cjwyOysrcilmb3IodmFyIG49MDtuPDM7KytuKWVbcl1bbl09TWF0aC5tYXgoTWF0aC5taW4odFtyXVtuXSwxZTgpLC0xZTgpO3JldHVybiBlfShlLmNsaXBCb3VuZHMpO2k9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcz9lLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzOlsxLDEsMV0seVswXT0yL28uZHJhd2luZ0J1ZmZlcldpZHRoLHlbMV09Mi9vLmRyYXdpbmdCdWZmZXJIZWlnaHQsdC5iaW5kKCksbC52aWV3PXUsbC5wcm9qZWN0aW9uPWgsbC5zY3JlZW5TaXplPXksbC5oaWdobGlnaHRJZD1lLmhpZ2hsaWdodElkLGwuaGlnaGxpZ2h0U2NhbGU9ZS5oaWdobGlnaHRTY2FsZSxsLmNsaXBCb3VuZHM9bSxsLnBpY2tHcm91cD1lLnBpY2tJZC8yNTUsbC5waXhlbFJhdGlvPW47Zm9yKHZhciBnPTA7ZzwzOysrZylpZihhW2ddKXtsLnNjYWxlPWUucHJvamVjdFNjYWxlW2ddLGwub3BhY2l0eT1lLnByb2plY3RPcGFjaXR5W2ddO2Zvcih2YXIgdj1ULEw9MDtMPDE2OysrTCl2W0xdPTA7Zm9yKEw9MDtMPDQ7KytMKXZbNSpMXT0xO3ZbNSpnXT0wLGlbZ108MD92WzEyK2ddPWRbMF1bZ106dlsxMitnXT1kWzFdW2ddLHModixjLHYpLGwubW9kZWw9djt2YXIgQz0oZysxKSUzLFA9KGcrMiklMyxJPU0oeCksTz1NKGIpO0lbQ109MSxPW1BdPTE7dmFyIHo9cCgwLDAsMCxTKF8sSSkpLEQ9cCgwLDAsMCxTKHcsTykpO2lmKE1hdGguYWJzKHpbMV0pPk1hdGguYWJzKERbMV0pKXt2YXIgUj16O3o9RCxEPVIsUj1JLEk9TyxPPVI7dmFyIEY9QztDPVAsUD1GfXpbMF08MCYmKElbQ109LTEpLERbMV0+MCYmKE9bUF09LTEpO3ZhciBCPTAsTj0wO2ZvcihMPTA7TDw0OysrTClCKz1NYXRoLnBvdyhjWzQqQytMXSwyKSxOKz1NYXRoLnBvdyhjWzQqUCtMXSwyKTtJW0NdLz1NYXRoLnNxcnQoQiksT1tQXS89TWF0aC5zcXJ0KE4pLGwuYXhlc1swXT1JLGwuYXhlc1sxXT1PLGwuZnJhZ0NsaXBCb3VuZHNbMF09RShrLG1bMF0sZywtMWU4KSxsLmZyYWdDbGlwQm91bmRzWzFdPUUoayxtWzFdLGcsMWU4KSxlLnZhby5iaW5kKCksZS52YW8uZHJhdyhvLlRSSUFOR0xFUyxlLnZlcnRleENvdW50KSxlLmxpbmVXaWR0aD4wJiYoby5saW5lV2lkdGgoZS5saW5lV2lkdGgqbiksZS52YW8uZHJhdyhvLkxJTkVTLGUubGluZVZlcnRleENvdW50LGUudmVydGV4Q291bnQpKSxlLnZhby51bmJpbmQoKX19dmFyIEM9W1stMWU4LC0xZTgsLTFlOF0sWzFlOCwxZTgsMWU4XV07ZnVuY3Rpb24gUCh0LGUscixuLGksYSxvKXt2YXIgcz1yLmdsO2lmKChhPT09ci5wcm9qZWN0SGFzQWxwaGF8fG8pJiZMKGUscixuLGkpLGE9PT1yLmhhc0FscGhhfHxvKXt0LmJpbmQoKTt2YXIgbD10LnVuaWZvcm1zO2wubW9kZWw9bi5tb2RlbHx8ZixsLnZpZXc9bi52aWV3fHxmLGwucHJvamVjdGlvbj1uLnByb2plY3Rpb258fGYseVswXT0yL3MuZHJhd2luZ0J1ZmZlcldpZHRoLHlbMV09Mi9zLmRyYXdpbmdCdWZmZXJIZWlnaHQsbC5zY3JlZW5TaXplPXksbC5oaWdobGlnaHRJZD1yLmhpZ2hsaWdodElkLGwuaGlnaGxpZ2h0U2NhbGU9ci5oaWdobGlnaHRTY2FsZSxsLmZyYWdDbGlwQm91bmRzPUMsbC5jbGlwQm91bmRzPXIuYXhlcy5ib3VuZHMsbC5vcGFjaXR5PXIub3BhY2l0eSxsLnBpY2tHcm91cD1yLnBpY2tJZC8yNTUsbC5waXhlbFJhdGlvPWksci52YW8uYmluZCgpLHIudmFvLmRyYXcocy5UUklBTkdMRVMsci52ZXJ0ZXhDb3VudCksci5saW5lV2lkdGg+MCYmKHMubGluZVdpZHRoKHIubGluZVdpZHRoKmkpLHIudmFvLmRyYXcocy5MSU5FUyxyLmxpbmVWZXJ0ZXhDb3VudCxyLnZlcnRleENvdW50KSksci52YW8udW5iaW5kKCl9fWZ1bmN0aW9uIEkodCxlLHIsaSl7dmFyIGE7YT1BcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGg/dFtlXTp2b2lkIDA6dCxhPXUoYSk7dmFyIG89ITA7bihhKSYmKGE9Ilx1MjViYyIsbz0hMSk7dmFyIHM9YyhhLHIsaSk7cmV0dXJue21lc2g6c1swXSxsaW5lczpzWzFdLGJvdW5kczpzWzJdLHZpc2libGU6b319di5kcmF3PWZ1bmN0aW9uKHQpe1AodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCExLCExKX0sdi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITAsITEpfSx2LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe1AodGhpcy51c2VPcnRobz90aGlzLnBpY2tPcnRob1NoYWRlcjp0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlcix0aGlzLnBpY2tQcm9qZWN0U2hhZGVyLHRoaXMsdCwxLCEwLCEwKX0sdi5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzJdKyh0LnZhbHVlWzFdPDw4KSsodC52YWx1ZVswXTw8MTYpO2lmKGU+PXRoaXMucG9pbnRDb3VudHx8ZTwwKXJldHVybiBudWxsO3ZhciByPXRoaXMucG9pbnRzW2VdLG49dGhpcy5fc2VsZWN0UmVzdWx0O24uaW5kZXg9ZTtmb3IodmFyIGk9MDtpPDM7KytpKW4ucG9zaXRpb25baV09bi5kYXRhQ29vcmRpbmF0ZVtpXT1yW2ldO3JldHVybiBufSx2LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10LmluZGV4LHI9MjU1JmUsbj1lPj44JjI1NSxpPWU+PjE2JjI1NTt0aGlzLmhpZ2hsaWdodElkPVtyLzI1NSxuLzI1NSxpLzI1NSwwXX1lbHNlIHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdfSx2LnVwZGF0ZT1mdW5jdGlvbih0KXtpZigicGVyc3BlY3RpdmUiaW4odD10fHx7fSkmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSwib3J0aG9ncmFwaGljImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwicHJvamVjdCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZigicHJvamVjdFNjYWxlImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKHRoaXMucHJvamVjdEhhc0FscGhhPSExLCJwcm9qZWN0T3BhY2l0eSJpbiB0KXtpZihBcnJheS5pc0FycmF5KHQucHJvamVjdE9wYWNpdHkpKXRoaXMucHJvamVjdE9wYWNpdHk9dC5wcm9qZWN0T3BhY2l0eS5zbGljZSgpO2Vsc2V7cj0rdC5wcm9qZWN0T3BhY2l0eTt0aGlzLnByb2plY3RPcGFjaXR5PVtyLHIscl19Zm9yKHZhciBuPTA7bjwzOysrbil0aGlzLnByb2plY3RPcGFjaXR5W25dPW0odGhpcy5wcm9qZWN0T3BhY2l0eVtuXSksdGhpcy5wcm9qZWN0T3BhY2l0eVtuXTwxJiYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITApfXRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT1tKHQub3BhY2l0eSksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSksdGhpcy5kaXJ0eT0hMDt2YXIgaSxhLHM9dC5wb3NpdGlvbixsPXQuZm9udHx8Im5vcm1hbCIsYz10LmFsaWdubWVudHx8WzAsMF07aWYoMj09PWMubGVuZ3RoKWk9Y1swXSxhPWNbMV07ZWxzZXtpPVtdLGE9W107Zm9yKG49MDtuPGMubGVuZ3RoOysrbilpW25dPWNbbl1bMF0sYVtuXT1jW25dWzFdfXZhciB1PVsxLzAsMS8wLDEvMF0sZj1bLTEvMCwtMS8wLC0xLzBdLGg9dC5nbHlwaCxwPXQuY29sb3IsZD10LnNpemUsZz10LmFuZ2xlLHY9dC5saW5lQ29sb3IseT0tMSx4PTAsYj0wLF89MDtpZihzLmxlbmd0aCl7Xz1zLmxlbmd0aDt0OmZvcihuPTA7bjxfOysrbil7Zm9yKHZhciB3PXNbbl0sVD0wO1Q8MzsrK1QpaWYoaXNOYU4od1tUXSl8fCFpc0Zpbml0ZSh3W1RdKSljb250aW51ZSB0O3ZhciBrPShOPUkoaCxuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxBPU4ubGluZXMsTT1OLmJvdW5kczt4Kz0zKmsuY2VsbHMubGVuZ3RoLGIrPTIqQS5lZGdlcy5sZW5ndGh9fXZhciBTPXgrYixFPW8ubWFsbG9jRmxvYXQoMypTKSxMPW8ubWFsbG9jRmxvYXQoNCpTKSxDPW8ubWFsbG9jRmxvYXQoMipTKSxQPW8ubWFsbG9jVWludDMyKFMpO2lmKFM+MCl7dmFyIE89MCx6PXgsRD1bMCwwLDAsMV0sUj1bMCwwLDAsMV0sRj1BcnJheS5pc0FycmF5KHApJiZBcnJheS5pc0FycmF5KHBbMF0pLEI9QXJyYXkuaXNBcnJheSh2KSYmQXJyYXkuaXNBcnJheSh2WzBdKTt0OmZvcihuPTA7bjxfOysrbil7eSs9MTtmb3Iodz1zW25dLFQ9MDtUPDM7KytUKXtpZihpc05hTih3W1RdKXx8IWlzRmluaXRlKHdbVF0pKWNvbnRpbnVlIHQ7ZltUXT1NYXRoLm1heChmW1RdLHdbVF0pLHVbVF09TWF0aC5taW4odVtUXSx3W1RdKX1rPShOPUkoaCxuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxBPU4ubGluZXMsTT1OLmJvdW5kczt2YXIgTixqPU4udmlzaWJsZTtpZihqKWlmKEFycmF5LmlzQXJyYXkocCkpe2lmKDM9PT0oVT1GP248cC5sZW5ndGg/cFtuXTpbMCwwLDAsMF06cCkubGVuZ3RoKXtmb3IoVD0wO1Q8MzsrK1QpRFtUXT1VW1RdO0RbM109MX1lbHNlIGlmKDQ9PT1VLmxlbmd0aCl7Zm9yKFQ9MDtUPDQ7KytUKURbVF09VVtUXTshdGhpcy5oYXNBbHBoYSYmVVszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgRFswXT1EWzFdPURbMl09MCxEWzNdPTE7ZWxzZSBEPVsxLDEsMSwwXTtpZihqKWlmKEFycmF5LmlzQXJyYXkodikpe3ZhciBVO2lmKDM9PT0oVT1CP248di5sZW5ndGg/dltuXTpbMCwwLDAsMF06dikubGVuZ3RoKXtmb3IoVD0wO1Q8MzsrK1QpUltUXT1VW1RdO1JbVF09MX1lbHNlIGlmKDQ9PT1VLmxlbmd0aCl7Zm9yKFQ9MDtUPDQ7KytUKVJbVF09VVtUXTshdGhpcy5oYXNBbHBoYSYmVVszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgUlswXT1SWzFdPVJbMl09MCxSWzNdPTE7ZWxzZSBSPVsxLDEsMSwwXTt2YXIgVj0uNTtqP0FycmF5LmlzQXJyYXkoZCk/Vj1uPGQubGVuZ3RoPytkW25dOjEyOmQ/Vj0rZDp0aGlzLnVzZU9ydGhvJiYoVj0xMik6Vj0wO3ZhciBIPTA7QXJyYXkuaXNBcnJheShnKT9IPW48Zy5sZW5ndGg/K2dbbl06MDpnJiYoSD0rZyk7dmFyIHE9TWF0aC5jb3MoSCksRz1NYXRoLnNpbihIKTtmb3Iodz1zW25dLFQ9MDtUPDM7KytUKWZbVF09TWF0aC5tYXgoZltUXSx3W1RdKSx1W1RdPU1hdGgubWluKHVbVF0sd1tUXSk7dmFyIFk9aSxXPWE7WT0wO0FycmF5LmlzQXJyYXkoaSk/WT1uPGkubGVuZ3RoP2lbbl06MDppJiYoWT1pKTtXPTA7QXJyYXkuaXNBcnJheShhKT9XPW48YS5sZW5ndGg/YVtuXTowOmEmJihXPWEpO3ZhciBYPVtZKj1ZPjA/MS1NWzBdWzBdOlk8MD8xK01bMV1bMF06MSxXKj1XPjA/MS1NWzBdWzFdOlc8MD8xK01bMV1bMV06MV0sWj1rLmNlbGxzfHxbXSxKPWsucG9zaXRpb25zfHxbXTtmb3IoVD0wO1Q8Wi5sZW5ndGg7KytUKWZvcih2YXIgSz1aW1RdLFE9MDtRPDM7KytRKXtmb3IodmFyICQ9MDskPDM7KyskKUVbMypPKyRdPXdbJF07Zm9yKCQ9MDskPDQ7KyskKUxbNCpPKyRdPURbJF07UFtPXT15O3ZhciB0dD1KW0tbUV1dO0NbMipPXT1WKihxKnR0WzBdLUcqdHRbMV0rWFswXSksQ1syKk8rMV09ViooRyp0dFswXStxKnR0WzFdK1hbMV0pLE8rPTF9Zm9yKFo9QS5lZGdlcyxKPUEucG9zaXRpb25zLFQ9MDtUPFoubGVuZ3RoOysrVClmb3IoSz1aW1RdLFE9MDtRPDI7KytRKXtmb3IoJD0wOyQ8MzsrKyQpRVszKnorJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpTFs0KnorJF09UlskXTtQW3pdPXk7dHQ9SltLW1FdXTtDWzIqel09VioocSp0dFswXS1HKnR0WzFdK1hbMF0pLENbMip6KzFdPVYqKEcqdHRbMF0rcSp0dFsxXStYWzFdKSx6Kz0xfX19dGhpcy5ib3VuZHM9W3UsZl0sdGhpcy5wb2ludHM9cyx0aGlzLnBvaW50Q291bnQ9cy5sZW5ndGgsdGhpcy52ZXJ0ZXhDb3VudD14LHRoaXMubGluZVZlcnRleENvdW50PWIsdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoRSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoTCksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoQyksdGhpcy5pZEJ1ZmZlci51cGRhdGUoUCksby5mcmVlKEUpLG8uZnJlZShMKSxvLmZyZWUoQyksby5mcmVlKFApfSx2LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7Ii4vbGliL2dldC1zaW1wbGUtc3RyaW5nIjoxMjUsIi4vbGliL2dseXBocyI6MTI2LCIuL2xpYi9zaGFkZXJzIjoxMjcsImdsLWJ1ZmZlciI6NzgsImdsLW1hdDQvbXVsdGlwbHkiOjEwMCwiZ2wtdmFvIjoxNTAsImlzLXN0cmluZy1ibGFuayI6MjM5LCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDEyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ci5ib3hWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xuXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xufVxuIl0pLHIuYm94RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pfSx7Z2xzbGlmeToyMzF9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWkocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsYS5ib3hWZXJ0ZXgsYS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxmPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0saD0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoZj1NYXRoLm1heChmLGNbMF0pLGg9TWF0aC5tYXgoaCxjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxmfHxkPGgpKXtvLmJpbmQoKTt2YXIgbT1zWzJdLXNbMF0sZz1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLG0saCxpKSxvLmRyYXdCb3goMCxoLGYsZCxpKSxvLmRyYXdCb3goMCxkLG0sZyxpKSxvLmRyYXdCb3gocCxoLG0sZCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChmLGgscCxkLG4pLHI+MCl7dmFyIHY9cip1O28uZHJhd0JveChmLXYsaC12LHArdixoK3YsYSksby5kcmF3Qm94KGYtdixkLXYscCt2LGQrdixhKSxvLmRyYXdCb3goZi12LGgtdixmK3YsZCt2LGEpLG8uZHJhd0JveChwLXYsaC12LHArdixkK3YsYSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MTI5LCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMn1dLDEzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLGE9ZVsxXSxvPW4odCxyLGEse30pLHM9aS5tYWxsb2NVaW50OChyKmEqNCk7cmV0dXJuIG5ldyBsKHQsbyxzKX07dmFyIG49dCgiZ2wtZmJvIiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXkiKSxvPXQoImJpdC10d2lkZGxlIikubmV4dFBvdzI7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX12YXIgYz1sLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYywic2hhcGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbD90aGlzLmZiby5zaGFwZS5zbGljZSgpOlswLDBdfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5nbCl7dGhpcy5mYm8uc2hhcGU9dDt2YXIgZT10aGlzLmZiby5zaGFwZVswXSxyPXRoaXMuZmJvLnNoYXBlWzFdO2lmKHIqZSo0PnRoaXMuYnVmZmVyLmxlbmd0aCl7aS5mcmVlKHRoaXMuYnVmZmVyKTtmb3IodmFyIG49dGhpcy5idWZmZXI9aS5tYWxsb2NVaW50OChvKHIqZSo0KSksYT0wO2E8ciplKjQ7KythKW5bYV09MjU1fXJldHVybiB0fX19KSxjLmJlZ2luPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0aGlzLnNoYXBlO3QmJih0aGlzLmZiby5iaW5kKCksdC5jbGVhckNvbG9yKDEsMSwxLDEpLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCkpfSxjLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dCYmKHQuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCksdGhpcy5fcmVhZFRpbWVvdXR8fGNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCksdGhpcy5fcmVhZFRpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9yZWFkQ2FsbGJhY2ssMSkpfSxjLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5nbClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLmZiby5zaGFwZS5zbGljZSgpO3R8PTAsZXw9MCwibnVtYmVyIiE9dHlwZW9mIHImJihyPTEpO3ZhciBpPTB8TWF0aC5taW4oTWF0aC5tYXgodC1yLDApLG5bMF0pLG89MHxNYXRoLm1pbihNYXRoLm1heCh0K3IsMCksblswXSksbD0wfE1hdGgubWluKE1hdGgubWF4KGUtciwwKSxuWzFdKSxjPTB8TWF0aC5taW4oTWF0aC5tYXgoZStyLDApLG5bMV0pO2lmKG88PWl8fGM8PWwpcmV0dXJuIG51bGw7dmFyIHU9W28taSxjLWxdLGY9YSh0aGlzLmJ1ZmZlcixbdVswXSx1WzFdLDRdLFs0LDQqblswXSwxXSw0KihpK25bMF0qbCkpLGg9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0xZTgsaT0tMSxhPS0xLG89dC5zaGFwZVswXSxzPXQuc2hhcGVbMV0sbD0wO2w8bztsKyspZm9yKHZhciBjPTA7YzxzO2MrKyl7dmFyIHU9dC5nZXQobCxjLDApLGY9dC5nZXQobCxjLDEpLGg9dC5nZXQobCxjLDIpLHA9dC5nZXQobCxjLDMpO2lmKHU8MjU1fHxmPDI1NXx8aDwyNTV8fHA8MjU1KXt2YXIgZD1lLWwsbT1yLWMsZz1kKmQrbSptO2c8biYmKG49ZyxpPWwsYT1jKX19cmV0dXJuW2ksYSxuXX0oZi5oaSh1WzBdLHVbMV0sMSkscixyKSxwPWhbMF0sZD1oWzFdO3JldHVybiBwPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPGhbMl0/bnVsbDpuZXcgcyhwK2l8MCxkK2x8MCxmLmdldChwLGQsMCksW2YuZ2V0KHAsZCwxKSxmLmdldChwLGQsMiksZi5nZXQocCxkLDMpXSxNYXRoLnNxcnQoaFsyXSkpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGkuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjMyLCJnbC1mYm8iOjg2LG5kYXJyYXk6MjU5LCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxpPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksYT10KCIuL2xpYi9yZWZsZWN0Iiksbz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxzPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGw9dCgiLi9saWIvR0xFcnJvciIpO2Z1bmN0aW9uIGModCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9dS5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgZT10aGlzLmdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLHRoaXMuZ2wuQUNUSVZFX0FUVFJJQlVURVMpLHI9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ7aWYoZT5yKWZvcih0PXI7dDxlO3QrKyl0aGlzLmdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO2Vsc2UgaWYocj5lKWZvcih0PWU7dDxyO3QrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD1lLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQsZT0wO2U8dDtlKyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLGMpe2lmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHU9dDt0PXUudmVydGV4LGU9dS5mcmFnbWVudCxyPXUudW5pZm9ybXMsYz11LmF0dHJpYnV0ZXN9dmFyIGg9dGhpcyxwPWguZ2wsZD1oLl92cmVmO2guX3ZyZWY9by5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksZCYmZC5kaXNwb3NlKCksaC52ZXJ0U2hhZGVyPWguX3ZyZWYuc2hhZGVyO3ZhciBtPXRoaXMuX2ZyZWY7aWYoaC5fZnJlZj1vLnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLG0mJm0uZGlzcG9zZSgpLGguZnJhZ1NoYWRlcj1oLl9mcmVmLnNoYWRlciwhcnx8IWMpe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsaC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGgudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB2PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGwodiwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIrdil9cj1yfHxzLnVuaWZvcm1zKHAsZyksYz1jfHxzLmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9KGM9Yy5zbGljZSgpKS5zb3J0KGYpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksQT0wO0E8VDsrK0Epa1tBXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lKyJbIitBKyJdIiksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK0EpOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uW0FdP18ucHVzaCgwfHcubG9jYXRpb25bQV0pOl8ucHVzaCgtMSk7eC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgeC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6W18ubGVuZ3RoXX0pLGIucHVzaCh3Lm5hbWUpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBNPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKE0pPj0wOylNKz0xO19beV09TX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtoLnByb2dyYW09by5wcm9ncmFtKHAsaC5fdnJlZixoLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihoLnByb2dyYW0sclt0XS5uYW1lKX1FKCksaC5fcmVsaW5rPUUsaC50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGguYXR0cmlidXRlcz1pKHAsaCx4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bmlmb3JtcyIsbihwLGgscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0seyIuL2xpYi9HTEVycm9yIjoxMzMsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoxMzQsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MTM1LCIuL2xpYi9yZWZsZWN0IjoxMzYsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MTM3LCIuL2xpYi9zaGFkZXItY2FjaGUiOjEzOH1dLDEzMzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fCIiLHRoaXMubG9uZ01lc3NhZ2U9cnx8IiIsdGhpcy5yYXdFcnJvcj10fHwiIix0aGlzLm1lc3NhZ2U9ImdsLXNoYWRlcjogIisoZXx8dHx8IiIpKyhyPyJcbiIrcjoiIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iR0xFcnJvciIsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9bn0se31dLDEzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LG89MCxjPXIubGVuZ3RoO288YzsrK28pe3ZhciB1PXJbb10sZj11Lm5hbWUsaD11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goaCl7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJmbG9hdCI6cyh0LGUscFswXSxpLDEsYSxmKTticmVhaztkZWZhdWx0OmlmKGguaW5kZXhPZigidmVjIik+PTApe2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ModCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkO2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO2wodCxlLHAsaSxkLGEsZil9fX1yZXR1cm4gYX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTthLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pO3ZhciBvPVtmdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliMWYoZSxyKTp0LnZlcnRleEF0dHJpYjFmdihlLHIpfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIyZihlLHIsbik6dC52ZXJ0ZXhBdHRyaWIyZnYoZSxyKX0sZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIzZihlLHIsbixpKTp0LnZlcnRleEF0dHJpYjNmdihlLHIpfSxmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliNGYoZSxyLG4saSxhKTp0LnZlcnRleEF0dHJpYjRmdihlLHIpfV07ZnVuY3Rpb24gcyh0LGUscixuLGEscyxsKXt2YXIgYz1vW2FdLHU9bmV3IGkodCxlLHIsbixhLGMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGwse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksYyh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upcyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGkpLGg9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLG8se3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXT1lW2kqYStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX19LHsiLi9HTEVycm9yIjoxMzN9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksaT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgYT1mdW5jdGlvbiB0KGUscil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybltbZSxyXV07dmFyIG49W107Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV0sbz1lO3BhcnNlSW50KGkpKyIiPT09aT9vKz0iWyIraSsiXSI6bys9Ii4iK2ksIm9iamVjdCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oIiIsZSksbz0wO288YS5sZW5ndGg7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoc1t1XSl7dmFyIGY9bjtpZigic3RyaW5nIj09dHlwZW9mIGMmJigwPT09Yy5pbmRleE9mKCIuIil8fDA9PT1jLmluZGV4T2YoIlsiKSkpe3ZhciBoPWM7aWYoMD09PWMuaW5kZXhPZigiLiIpJiYoaD1jLnNsaWNlKDEpKSxoLmluZGV4T2YoIl0iKT09PWgubGVuZ3RoLTEpe3ZhciBwPWguaW5kZXhPZigiWyIpLGQ9aC5zbGljZSgwLHApLG09aC5zbGljZShwKzEsaC5sZW5ndGgtMSk7Zj1kP25bZF1bbV06blttXX1lbHNlIGY9bltoXX12YXIgZyx2PXJbdV0udHlwZTtzd2l0Y2godil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnQudW5pZm9ybTFpKHNbdV0sZik7YnJlYWs7Y2FzZSJmbG9hdCI6dC51bmlmb3JtMWYoc1t1XSxmKTticmVhaztkZWZhdWx0OnZhciB5PXYuaW5kZXhPZigidmVjIik7aWYoISgwPD15JiZ5PD0xJiZ2Lmxlbmd0aD09PTQreSkpe2lmKDA9PT12LmluZGV4T2YoIm1hdCIpJiY0PT09di5sZW5ndGgpe2lmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIit2KTt0WyJ1bmlmb3JtTWF0cml4IitnKyJmdiJdKHNbdV0sITEsZik7YnJlYWt9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3YpfWlmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3N3aXRjaCh2LmNoYXJBdCgwKSl7Y2FzZSJiIjpjYXNlImkiOnRbInVuaWZvcm0iK2crIml2Il0oc1t1XSxmKTticmVhaztjYXNlInYiOnRbInVuaWZvcm0iK2crImZ2Il0oc1t1XSxmKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpKCIiLCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgIituYW1lKyI6ICIrdil9fX19fX1mdW5jdGlvbiBjKHQsZSxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4pe3ZhciBjPXUobik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmEoYyksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KX1lbHNlIHNbbl0/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OihmPW4sZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFVuaWZvcm0oZS5wcm9ncmFtLHJbZl0pfSksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTp0W2VdPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvb2wiOnJldHVybiExO2Nhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6Y2FzZSJmbG9hdCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoInZlYyIpO2lmKDA8PWUmJmU8PTEmJnQubGVuZ3RoPT09NCtlKXtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcjtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIit0KX19KHJbbl0udHlwZSk7dmFyIGZ9ZnVuY3Rpb24gdSh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpYyhlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KWMoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKHUoZikpLHNldDpsKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjoxMzMsIi4vcmVmbGVjdCI6MTM2fV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZS5zcGxpdCgiLiIpLGE9cixvPTA7bzxpLmxlbmd0aDsrK28pe3ZhciBzPWlbb10uc3BsaXQoIlsiKTtpZihzLmxlbmd0aD4xKXtzWzBdaW4gYXx8KGFbc1swXV09W10pLGE9YVtzWzBdXTtmb3IodmFyIGw9MTtsPHMubGVuZ3RoOysrbCl7dmFyIGM9cGFyc2VJbnQoc1tsXSk7bDxzLmxlbmd0aC0xfHxvPGkubGVuZ3RoLTE/KGMgaW4gYXx8KGw8cy5sZW5ndGgtMT9hW2NdPVtdOmFbY109e30pLGE9YVtjXSk6YVtjXT1lP246dFtuXS50eXBlfX1lbHNlIG88aS5sZW5ndGgtMT8oc1swXWluIGF8fChhW3NbMF1dPXt9KSxhPWFbc1swXV0pOmFbc1swXV09ZT9uOnRbbl0udHlwZX1yZXR1cm4gcn19LHt9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0saT1udWxsO2Z1bmN0aW9uIGEodCxlKXtpZighaSl7dmFyIHI9T2JqZWN0LmtleXMobik7aT17fTtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIG89clthXTtpW3Rbb11dPW5bb119fXJldHVybiBpW2VdfX0se31dLDEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoIi4vR0xFcnJvciIpLGk9dCgiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIiksYT1uZXcoInVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IG4obywiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIrbyl9dGhyb3cgbmV3IG4obyxzLnNob3J0LHMubG9uZyl9cmV0dXJuIGF9KHIsdCxlKTtsPWFbZV09bmV3IHMobysrLGUsdCxjLFtdLDEsdGhpcyl9cmV0dXJuIGx9LGMuZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLGkuam9pbigiOiIpXS5qb2luKCJAIiksbz10aGlzLnByb2dyYW1zW2FdO3JldHVybiBvJiZ0aGlzLmdsLmlzUHJvZ3JhbShvKXx8KHRoaXMucHJvZ3JhbXNbYV09bz1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKG8sZSksdC5hdHRhY2hTaGFkZXIobyxyKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoOysrcyl0LmJpbmRBdHRyaWJMb2NhdGlvbihvLGFbc10saVtzXSk7aWYodC5saW5rUHJvZ3JhbShvKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKG8sdC5MSU5LX1NUQVRVUykpe3ZhciBsPXQuZ2V0UHJvZ3JhbUluZm9Mb2cobyk7dGhyb3cgbmV3IG4obCwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHsiLi9HTEVycm9yIjoxMzMsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6ODcsIndlYWttYXAtc2hpbSI6MzE2fV0sMTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5wbG90PXQsdGhpcy5lbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLndpZHRoPVsxLDEsMSwxXSx0aGlzLmNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuY2VudGVyPVsxLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9O3ZhciBpPW4ucHJvdG90eXBlO2kudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5lbmFibGU9KHQuZW5hYmxlfHxbITAsITAsITEsITFdKS5zbGljZSgpLHRoaXMud2lkdGg9KHQud2lkdGh8fFsxLDEsMSwxXSkuc2xpY2UoKSx0aGlzLmNvbG9yPSh0LmNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHRoaXMuY2VudGVyPSh0LmNlbnRlcnx8WzEvMCwxLzBdKS5zbGljZSgpLHRoaXMucGxvdC5zZXRPdmVybGF5RGlydHkoKX0saS5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbmFibGUsZT10aGlzLndpZHRoLHI9dGhpcy5jb2xvcixuPXRoaXMuY2VudGVyLGk9dGhpcy5wbG90LGE9aS5saW5lLG89aS5kYXRhQm94LHM9aS52aWV3Qm94O2lmKGEuYmluZCgpLG9bMF08PW5bMF0mJm5bMF08PW9bMl0mJm9bMV08PW5bMV0mJm5bMV08PW9bM10pe3ZhciBsPXNbMF0rKG5bMF0tb1swXSkvKG9bMl0tb1swXSkqKHNbMl0tc1swXSksYz1zWzFdKyhuWzFdLW9bMV0pLyhvWzNdLW9bMV0pKihzWzNdLXNbMV0pO3RbMF0mJmEuZHJhd0xpbmUobCxjLHNbMF0sYyxlWzBdLHJbMF0pLHRbMV0mJmEuZHJhd0xpbmUobCxjLGwsc1sxXSxlWzFdLHJbMV0pLHRbMl0mJmEuZHJhd0xpbmUobCxjLHNbMl0sYyxlWzJdLHJbMl0pLHRbM10mJmEuZHJhd0xpbmUobCxjLGwsc1szXSxlWzNdLHJbM10pfX0saS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7fV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xuXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xuICB2ZWMyIGRlbHRhID0gd2VpZ2h0ICogY2xpcE9mZnNldCAqIHNjcmVlblNoYXBlO1xuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gICA9IHZlYzQoY2xpcFBvcy54eSArIGNsaXBQb3MudyAqIDAuNSAqIGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQsIGNsaXBQb3MueiwgY2xpcFBvcy53KTtcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWMzIn0se25hbWU6IndlaWdodCIsdHlwZToiZmxvYXQifV0pfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDE0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107ZnVuY3Rpb24gbyh0LGUsbixpLGEsbyl7dmFyIHM9W3QsZSxuLDAsMCwwLDFdO3NbaSszXT0xLHNbaV09YSxyLnB1c2guYXBwbHkocixzKSxzWzZdPS0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09byxyLnB1c2guYXBwbHkocixzKSxyLnB1c2guYXBwbHkocixzKSxzWzZdPTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1hLHIucHVzaC5hcHBseShyLHMpfW8oMCwwLDAsMCwwLDEpLG8oMCwwLDAsMSwwLDEpLG8oMCwwLDAsMiwwLDEpLG8oMSwwLDAsMSwtMSwxKSxvKDEsMCwwLDIsLTEsMSksbygwLDEsMCwwLC0xLDEpLG8oMCwxLDAsMiwtMSwxKSxvKDAsMCwxLDAsLTEsMSksbygwLDAsMSwxLC0xLDEpO3ZhciBsPW4odCxyKSxjPWkodCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLHU9YSh0KTt1LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx1LmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSx1LmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGY9bmV3IHModCxsLGMsdSk7cmV0dXJuIGYudXBkYXRlKGUpLGZ9O3ZhciBvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9dmFyIGw9cy5wcm90b3R5cGUsYz1bMCwwLDBdLHU9WzAsMCwwXSxmPVswLDBdO2wuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxsLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LGwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgaSxhPXQubW9kZWx8fG8scz10LnZpZXd8fG8sbD10LnByb2plY3Rpb258fG87dGhpcy5heGVzJiYoaT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIGg9YyxwPXUsZD0wO2Q8MzsrK2QpaSYmaVtkXTwwPyhoW2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOihoW2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2ZbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsZlsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1hLG4udW5pZm9ybXMudmlldz1zLG4udW5pZm9ybXMucHJvamVjdGlvbj1sLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24saCxwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWY7Zm9yKGQ9MDtkPDM7KytkKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW2RdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbZF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KmQpLHRoaXMuZHJhd1NpZGVzW2RdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqZCkpO3IudW5iaW5kKCl9LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJigiYm91bmRzImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksInBvc2l0aW9uImluIHQmJih0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24pLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwiY29sb3JzImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksImVuYWJsZWQiaW4gdCYmKHRoaXMuZW5hYmxlZD10LmVuYWJsZWQpLCJkcmF3U2lkZXMiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjE0MCwiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTB9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgdHViZVNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWwsIGZfbGlnaHREaXJlY3Rpb24sIGZfZXllRGlyZWN0aW9uLCBmX2RhdGEsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXG4vL1xuLy8gRWFjaCB0dWJlIHNlZ21lbnQgaXMgbWFkZSB1cCBvZiBhIHJpbmcgb2YgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cbi8vXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgdjMgPSB4ICsgeTtcblxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xuXG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX19LHtnbHNsaWZ5OjIzMX1dLDE0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT10KCJnbC12ZWM0IiksYT1bInh5eiIsInh6eSIsInl4eiIsInl6eCIsInp4eSIsInp5eCJdLG89ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPTAscz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbD10W3NdLnZlbG9jaXRpZXMsYz0wO2M8bC5sZW5ndGg7YysrKW89TWF0aC5tYXgobyxuLmxlbmd0aChsW2NdKSk7dmFyIHU9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5wb2ludHMscz10LnZlbG9jaXRpZXMsbD10LmRpdmVyZ2VuY2VzLGM9W10sdT1bXSxmPVtdLGg9W10scD1bXSxkPVtdLG09MCxnPTAsdj1pLmNyZWF0ZSgpLHk9aS5jcmVhdGUoKSx4PTA7eDxvLmxlbmd0aDt4Kyspe3ZhciBiPW9beF0sXz1zW3hdLHc9bFt4XTswPT09ZSYmKHc9LjA1KnIpLGc9bi5sZW5ndGgoXykvYSx2PWkuY3JlYXRlKCksbi5jb3B5KHYsXyksdlszXT13O2Zvcih2YXIgVD0wO1Q8ODtUKyspcFtUXT1bYlswXSxiWzFdLGJbMl0sVF07aWYoaC5sZW5ndGg+MClmb3IoVD0wO1Q8ODtUKyspe3ZhciBrPShUKzEpJTg7Yy5wdXNoKGhbVF0scFtUXSxwW2tdLHBba10saFtrXSxoW1RdKSxmLnB1c2goeSx2LHYsdix5LHkpLGQucHVzaChtLGcsZyxnLG0sbSk7dmFyIEE9Yy5sZW5ndGg7dS5wdXNoKFtBLTYsQS01LEEtNF0sW0EtMyxBLTIsQS0xXSl9dmFyIE09aDtoPXAscD1NO3ZhciBTPXk7eT12LHY9Uzt2YXIgRT1tO209ZyxnPUV9cmV0dXJue3Bvc2l0aW9uczpjLGNlbGxzOnUsdmVjdG9yczpmLHZlcnRleEludGVuc2l0eTpkfX0odCxyLGEsbyl9KSksZj1bXSxoPVtdLHA9W10sZD1bXTtmb3Iocz0wO3M8dS5sZW5ndGg7cysrKXt2YXIgbT11W3NdLGc9Zi5sZW5ndGg7Zj1mLmNvbmNhdChtLnBvc2l0aW9ucykscD1wLmNvbmNhdChtLnZlY3RvcnMpLGQ9ZC5jb25jYXQobS52ZXJ0ZXhJbnRlbnNpdHkpO2ZvcihjPTA7YzxtLmNlbGxzLmxlbmd0aDtjKyspe3ZhciB2PW0uY2VsbHNbY10seT1bXTtoLnB1c2goeSk7Zm9yKHZhciB4PTA7eDx2Lmxlbmd0aDt4KyspeS5wdXNoKHZbeF0rZyl9fXJldHVybntwb3NpdGlvbnM6ZixjZWxsczpoLHZlY3RvcnM6cCx2ZXJ0ZXhJbnRlbnNpdHk6ZCxjb2xvcm1hcDplfX0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGg7Zm9yKHI9MDtyPG47cisrKXt2YXIgaT10W3JdO2lmKGk9PT1lKXJldHVybiByO2lmKGk+ZSlyZXR1cm4gci0xfXJldHVybiByfSxsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdDxlP2U6dD5yP3I6dH0sYz1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7Zm9yKHZhciByPXQubGVuZ3RoLG49MTtuPHI7bisrKXt2YXIgaT1NYXRoLmFicyh0W25dLXRbbi0xXSk7aTxlJiYoZT1pKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsdT10LnR1YmVTaXplfHwxLGY9dC5hYnNvbHV0ZVR1YmVTaXplLGg9dC5ncmlkRmlsbHx8Iit4K3kreiIscD17fTstMSE9PWguaW5kZXhPZigiLXgiKSYmKHAucmV2ZXJzZWRYPSEwKSwtMSE9PWguaW5kZXhPZigiLXkiKSYmKHAucmV2ZXJzZWRZPSEwKSwtMSE9PWguaW5kZXhPZigiLXoiKSYmKHAucmV2ZXJzZWRaPSEwKSxwLmZpbGxlZD1hLmluZGV4T2YoaC5yZXBsYWNlKC8tL2csIiIpLnJlcGxhY2UoL1wrL2csIiIpKTt2YXIgZD10LmdldFZlbG9jaXR5fHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUudmVjdG9ycyxhPWUubWVzaGdyaWQsbz10WzBdLGM9dFsxXSx1PXRbMl0sZj1hWzBdLmxlbmd0aCxoPWFbMV0ubGVuZ3RoLHA9YVsyXS5sZW5ndGgsZD1zKGFbMF0sbyksbT1zKGFbMV0sYyksZz1zKGFbMl0sdSksdj1kKzEseT1tKzEseD1nKzE7aWYoZD1sKGQsMCxmLTEpLHY9bCh2LDAsZi0xKSxtPWwobSwwLGgtMSkseT1sKHksMCxoLTEpLGc9bChnLDAscC0xKSx4PWwoeCwwLHAtMSksZDwwfHxtPDB8fGc8MHx8dj5mLTF8fHk+aC0xfHx4PnAtMSlyZXR1cm4gbi5jcmVhdGUoKTt2YXIgYixfLHcsVCxrLEEsTT1hWzBdW2RdLFM9YVswXVt2XSxFPWFbMV1bbV0sTD1hWzFdW3ldLEM9YVsyXVtnXSxQPShvLU0pLyhTLU0pLEk9KGMtRSkvKEwtRSksTz0odS1DKS8oYVsyXVt4XS1DKTtzd2l0Y2goaXNGaW5pdGUoUCl8fChQPS41KSxpc0Zpbml0ZShJKXx8KEk9LjUpLGlzRmluaXRlKE8pfHwoTz0uNSksci5yZXZlcnNlZFgmJihkPWYtMS1kLHY9Zi0xLXYpLHIucmV2ZXJzZWRZJiYobT1oLTEtbSx5PWgtMS15KSxyLnJldmVyc2VkWiYmKGc9cC0xLWcseD1wLTEteCksci5maWxsZWQpe2Nhc2UgNTprPWcsQT14LHc9bSpwLFQ9eSpwLGI9ZCpwKmgsXz12KnAqaDticmVhaztjYXNlIDQ6az1nLEE9eCxiPWQqcCxfPXYqcCx3PW0qcCpmLFQ9eSpwKmY7YnJlYWs7Y2FzZSAzOnc9bSxUPXksaz1nKmgsQT14KmgsYj1kKmgqcCxfPXYqaCpwO2JyZWFrO2Nhc2UgMjp3PW0sVD15LGI9ZCpoLF89dipoLGs9ZypoKmYsQT14KmgqZjticmVhaztjYXNlIDE6Yj1kLF89dixrPWcqZixBPXgqZix3PW0qZipwLFQ9eSpmKnA7YnJlYWs7ZGVmYXVsdDpiPWQsXz12LHc9bSpmLFQ9eSpmLGs9ZypmKmgsQT14KmYqaH12YXIgej1pW2IrdytrXSxEPWlbYit3K0FdLFI9aVtiK1Qra10sRj1pW2IrVCtBXSxCPWlbXyt3K2tdLE49aVtfK3crQV0saj1pW18rVCtrXSxVPWlbXytUK0FdLFY9bi5jcmVhdGUoKSxIPW4uY3JlYXRlKCkscT1uLmNyZWF0ZSgpLEc9bi5jcmVhdGUoKTtuLmxlcnAoVix6LEIsUCksbi5sZXJwKEgsRCxOLFApLG4ubGVycChxLFIsaixQKSxuLmxlcnAoRyxGLFUsUCk7dmFyIFk9bi5jcmVhdGUoKSxXPW4uY3JlYXRlKCk7bi5sZXJwKFksVixxLEkpLG4ubGVycChXLEgsRyxJKTt2YXIgWD1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoWCxZLFcsTyksWH0oZSx0LHApfSxtPXQuZ2V0RGl2ZXJnZW5jZXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmNyZWF0ZSgpLGk9MWUtNDtuLmFkZChyLHQsW2ksMCwwXSk7dmFyIGE9ZChyKTtuLnN1YnRyYWN0KGEsYSxlKSxuLnNjYWxlKGEsYSwxL2kpLG4uYWRkKHIsdCxbMCxpLDBdKTt2YXIgbz1kKHIpO24uc3VidHJhY3QobyxvLGUpLG4uc2NhbGUobyxvLDEvaSksbi5hZGQocix0LFswLDAsaV0pO3ZhciBzPWQocik7cmV0dXJuIG4uc3VidHJhY3QocyxzLGUpLG4uc2NhbGUocyxzLDEvaSksbi5hZGQocixhLG8pLG4uYWRkKHIscixzKSxyfSxnPVtdLHY9ZVswXVswXSx5PWVbMF1bMV0seD1lWzBdWzJdLGI9ZVsxXVswXSxfPWVbMV1bMV0sdz1lWzFdWzJdLFQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiEoZTx2fHxlPmJ8fHI8eXx8cj5ffHxuPHh8fG4+dyl9LGs9MTAqbi5kaXN0YW5jZShlWzBdLGVbMV0pL2ksQT1rKmssTT0xLFM9MCxFPXIubGVuZ3RoO0U+MSYmKE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPXQubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT10W2xdLGY9dVswXSxoPXVbMV0scD11WzJdO2lbZl18fChlLnB1c2goZiksaVtmXT0hMCksYVtoXXx8KHIucHVzaChoKSxhW2hdPSEwKSxvW3BdfHwobi5wdXNoKHApLG9bcF09ITApfXZhciBkPWMoZSksbT1jKHIpLGc9YyhuKSx2PU1hdGgubWluKGQsbSxnKTtyZXR1cm4gaXNGaW5pdGUodik/djoxfShyKSk7Zm9yKHZhciBMPTA7TDxFO0wrKyl7dmFyIEM9bi5jcmVhdGUoKTtuLmNvcHkoQyxyW0xdKTt2YXIgUD1bQ10sST1bXSxPPWQoQyksej1DO0kucHVzaChPKTt2YXIgRD1bXSxSPW0oQyxPKSxGPW4ubGVuZ3RoKFIpO2lzRmluaXRlKEYpJiZGPlMmJihTPUYpLEQucHVzaChGKSxnLnB1c2goe3BvaW50czpQLHZlbG9jaXRpZXM6SSxkaXZlcmdlbmNlczpEfSk7Zm9yKHZhciBCPTA7QjwxMDAqaSYmUC5sZW5ndGg8aSYmVChDKTspe0IrKzt2YXIgTj1uLmNsb25lKE8pLGo9bi5zcXVhcmVkTGVuZ3RoKE4pO2lmKDA9PT1qKWJyZWFrO2lmKGo+QSYmbi5zY2FsZShOLE4say9NYXRoLnNxcnQoaikpLG4uYWRkKE4sTixDKSxPPWQoTiksbi5zcXVhcmVkRGlzdGFuY2UoeixOKS1BPi0xZS00KkEpe1AucHVzaChOKSx6PU4sSS5wdXNoKE8pO1I9bShOLE8pLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpfUM9Tn19dmFyIFU9byhnLHQuY29sb3JtYXAsUyxNKTtyZXR1cm4gZj9VLnR1YmVTY2FsZT1mOigwPT09UyYmKFM9MSksVS50dWJlU2NhbGU9LjUqdSpNL1MpLFV9O3ZhciB1PXQoIi4vbGliL3NoYWRlcnMiKSxmPXQoImdsLWNvbmUzZCIpLmNyZWF0ZU1lc2g7ZS5leHBvcnRzLmNyZWF0ZVR1YmVNZXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLHtzaGFkZXJzOnUsdHJhY2VUeXBlOiJzdHJlYW10dWJlIn0pfX0seyIuL2xpYi9zaGFkZXJzIjoxNDIsImdsLWNvbmUzZCI6NzksImdsLXZlYzMiOjE2OSwiZ2wtdmVjNCI6MjA1fV0sMTQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgdmVjMyBmO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbG9jYWxDb29yZGluYXRlID0gdmVjMyh1di56dywgZi54KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBraWxsID4gMC4wIHx8XG4gICAgdkNvbG9yLmEgPT0gMC4wIHx8XG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpXG4gICkgZGlzY2FyZDtcblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MpLCAwLik7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIC8vZGVjaWRlIGhvdyB0byBpbnRlcnBvbGF0ZSBjb2xvciBcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cbiAgICBzdGVwKHZlcnRleENvbG9yLCAuNSkgKiB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSkgK1xuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iXSkscz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogKz0gek9mZnNldDtcblxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgdmFsdWUgPSBmICsgb2JqZWN0T2Zmc2V0Lno7XG4gIGtpbGwgPSAtMS4wO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZiAoKGtpbGwgPiAwLjApIHx8XG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcblxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX0sci5jcmVhdGVQaWNrQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHsiZ2wtc2hhZGVyIjoxMzIsZ2xzbGlmeToyMzF9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6NDAsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOjQwLG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6NDAsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLG09byhlLDEsMjU2LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO20ubWluRmlsdGVyPWUuTElORUFSLG0ubWFnRmlsdGVyPWUuTElORUFSO3ZhciBnPW5ldyBNKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxtLHMsbCxmLGgscCxkLFswLDAsMF0pLHY9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIHcgaW4gdCl2W3ddPXRbd107cmV0dXJuIHYuY29sb3JtYXA9di5jb2xvcm1hcHx8ImpldCIsZy51cGRhdGUodiksZ307dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiY29sb3JtYXAiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5LXBhY2siKSxmPXQoIm5kYXJyYXkiKSxoPXQoInN1cmZhY2UtbmV0cyIpLHA9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxtPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksZz10KCJuZGFycmF5LWdyYWRpZW50Iiksdj10KCIuL2xpYi9zaGFkZXJzIikseT12LmNyZWF0ZVNoYWRlcix4PXYuY3JlYXRlQ29udG91clNoYWRlcixiPXYuY3JlYXRlUGlja1NoYWRlcixfPXYuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLGs9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBBKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1rW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLGwsYyx1LGgscCxkLG0sZyl7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PWcsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9aCx0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBBKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1tLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIFM9TS5wcm90b3R5cGU7Uy5nZW5Db2xvcm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPSExLG49dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciBpPWU/ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gMTtpZighZS5sZW5ndGgpcmV0dXJuIDE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKGUubGVuZ3RoPDIpcmV0dXJuIDE7aWYoZVtyXVswXT09PXQpcmV0dXJuIGVbcl1bMV07aWYoZVtyXVswXT50JiZyPjApe3ZhciBuPShlW3JdWzBdLXQpLyhlW3JdWzBdLWVbci0xXVswXSk7cmV0dXJuIGVbcl1bMV0qKDEtbikrbiplW3ItMV1bMV19fXJldHVybiAxfShuLzI1NSxlKTp0WzNdO3JldHVybiBpPDEmJihyPSEwKSxbdFswXSx0WzFdLHRbMl0sMjU1KmldfSkpXSk7cmV0dXJuIGMuZGl2c2VxKG4sMjU1KSx0aGlzLmhhc0FscGhhU2NhbGU9cixufSxTLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF8fHRoaXMuaGFzQWxwaGFTY2FsZX0sUy5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzVHJhbnNwYXJlbnQoKX0sUy5waWNrU2xvdHM9MSxTLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBFPVswLDAsMF0sTD17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W3cuc2xpY2UoKSx3LnNsaWNlKCksdy5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIEModCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEUsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD1MLnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPUwuY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gTC5zaG93U3VyZmFjZT1vLEwuc2hvd0NvbnRvdXI9cyxMfXZhciBQPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LEk9dy5zbGljZSgpLE89WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiB6KHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1QO24ubW9kZWw9dC5tb2RlbHx8dyxuLnZpZXc9dC52aWV3fHx3LG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249TyxuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9STtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PUMobix0aGlzKTtpZih1LnNob3dTdXJmYWNlKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249a1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIG09MDttPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KyttKW09PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09bSYmbS0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVttXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVttXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW21dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW21dKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1TLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHouY2FsbCh0aGlzLHQsITEpfSxTLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gei5jYWxsKHRoaXMsdCwhMCl9O3ZhciBEPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBSKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIEYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIEIodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bRih0WzBdKSxGKHRbMV0pLEYodFsyXSldO3ZhciBlPUYodCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Uy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1EO3IubW9kZWw9dC5tb2RlbHx8dyxyLnZpZXc9dC52aWV3fHx3LHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPU87Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89QyhyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxTLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsZz1mKihoP2w6MS1sKSx2PTA7djwzOysrdiljW3ZdKz10aGlzLl9maWVsZFt2XS5nZXQocCxkKSpnO2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09bS5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sdj0wO3Y8MzsrK3Ypci5kYXRhQ29vcmRpbmF0ZVt2XT10aGlzLl9maWVsZFt2XS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sUy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPVIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPVIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PVIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9Qih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1SKHQuY29udG91clByb2plY3QsKGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsQm9vbGVhbil9KSkpLCJzdXJmYWNlUHJvamVjdCJpbiB0JiYodGhpcy5zdXJmYWNlUHJvamVjdD10LnN1cmZhY2VQcm9qZWN0KSwiZHluYW1pY0NvbG9yImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1CKHQuZHluYW1pY0NvbG9yKSksImR5bmFtaWNUaW50ImluIHQmJih0aGlzLmR5bmFtaWNUaW50PVIodC5keW5hbWljVGludCxOdW1iZXIpKSwiZHluYW1pY1dpZHRoImluIHQmJih0aGlzLmR5bmFtaWNXaWR0aD1SKHQuZHluYW1pY1dpZHRoLE51bWJlcikpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCksImNvbG9ybWFwImluIHQmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyh0aGlzLmdlbkNvbG9ybWFwKHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKTt2YXIgZT10LmZpZWxkfHx0LmNvb3JkcyYmdC5jb29yZHNbMl18fG51bGwscj0hMTtpZihlfHwoZT10aGlzLl9maWVsZFsyXS5zaGFwZVswXXx8dGhpcy5fZmllbGRbMl0uc2hhcGVbMl0/dGhpcy5fZmllbGRbMl0ubG8oMSwxKS5oaSh0aGlzLl9maWVsZFsyXS5zaGFwZVswXS0yLHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzFdLTIpOnRoaXMuX2ZpZWxkWzJdLmhpKDAsMCkpLCJmaWVsZCJpbiB0fHwiY29vcmRzImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWYodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109Zih0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBsPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KGwpfHwzIT09bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3kiKTtmb3Iobz0wO288MjsrK28pe3ZhciBjPWxbb107Zm9yKHY9MDt2PDI7Kyt2KWlmKGMuc2hhcGVbdl0hPT1hW3ZdKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxjKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgdT10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KHUpfHwyIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2tzIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgcD11W29dO2lmKChBcnJheS5pc0FycmF5KHApfHxwLmxlbmd0aCkmJihwPWYocCkpLHAuc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aCIpO3ZhciBkPWYocC5kYXRhLGEpO2Quc3RyaWRlW29dPXAuc3RyaWRlWzBdLGQuc3RyaWRlWzFeb109MCx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNle2ZvcihvPTA7bzwyOysrbyl7dmFyIG09WzAsMF07bVtvXT0xLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0sbSwwKX10aGlzLl9maWVsZFswXS5zZXQoMCwwLDApO2Zvcih2YXIgdj0wO3Y8YVswXTsrK3YpdGhpcy5fZmllbGRbMF0uc2V0KHYrMSwwLHYpO2Zvcih0aGlzLl9maWVsZFswXS5zZXQoYVswXSsxLDAsYVswXS0xKSx0aGlzLl9maWVsZFsxXS5zZXQoMCwwLDApLHY9MDt2PGFbMV07Kyt2KXRoaXMuX2ZpZWxkWzFdLnNldCgwLHYrMSx2KTt0aGlzLl9maWVsZFsxXS5zZXQoMCxhWzFdKzEsYVsxXS0xKX12YXIgeT10aGlzLl9maWVsZCx4PWYocy5tYWxsb2NGbG9hdCgzKnlbMl0uc2l6ZSoyKSxbMyxhWzBdKzIsYVsxXSsyLDJdKTtmb3Iobz0wO288MzsrK28pZyh4LnBpY2sobykseVtvXSwibWlycm9yIik7dmFyIGI9ZihzLm1hbGxvY0Zsb2F0KDMqeVsyXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKHY9MDt2PGFbMV0rMjsrK3Ype3ZhciBfPXguZ2V0KDAsbyx2LDApLHc9eC5nZXQoMCxvLHYsMSksaz14LmdldCgxLG8sdiwwKSxBPXguZ2V0KDEsbyx2LDEpLE09eC5nZXQoMixvLHYsMCksUz14LmdldCgyLG8sdiwxKSxFPWsqUy1BKk0sTD1NKnctUypfLEM9XypBLXcqayxQPU1hdGguc3FydChFKkUrTCpMK0MqQyk7UDwxZS04PyhQPU1hdGgubWF4KE1hdGguYWJzKEUpLE1hdGguYWJzKEwpLE1hdGguYWJzKEMpKSk8MWUtOD8oQz0xLEw9RT0wLFA9MSk6UD0xL1A6UD0xL01hdGguc3FydChQKSxiLnNldChvLHYsMCxFKlApLGIuc2V0KG8sdiwxLEwqUCksYi5zZXQobyx2LDIsQypQKX1zLmZyZWUoeC5kYXRhKTt2YXIgST1bMS8wLDEvMCwxLzBdLE89Wy0xLzAsLTEvMCwtMS8wXSx6PTEvMCxEPS0xLzAsRj0oYVswXS0xKSooYVsxXS0xKSo2LE49cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKkYpKSxqPTAsVT0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHY9MDt2PGFbMV0tMTsrK3Ype2Zvcih2YXIgVj0wO1Y8MjsrK1YpZm9yKHZhciBIPTA7SDwyOysrSClmb3IodmFyIHE9MDtxPDM7KytxKXt2YXIgRz10aGlzLl9maWVsZFtxXS5nZXQoMStvK1YsMSt2K0gpO2lmKGlzTmFOKEcpfHwhaXNGaW5pdGUoRykpY29udGludWUgdH1mb3IocT0wO3E8NjsrK3Epe3ZhciBZPW8rVFtxXVswXSxXPXYrVFtxXVsxXSxYPXRoaXMuX2ZpZWxkWzBdLmdldChZKzEsVysxKSxaPXRoaXMuX2ZpZWxkWzFdLmdldChZKzEsVysxKTtHPXRoaXMuX2ZpZWxkWzJdLmdldChZKzEsVysxKSxFPWIuZ2V0KFkrMSxXKzEsMCksTD1iLmdldChZKzEsVysxLDEpLEM9Yi5nZXQoWSsxLFcrMSwyKSx0LmludGVuc2l0eSYmKEo9dC5pbnRlbnNpdHkuZ2V0KFksVykpO3ZhciBKPXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldChZLFcpOkcrdGhpcy5vYmplY3RPZmZzZXRbMl07TltqKytdPVksTltqKytdPVcsTltqKytdPVgsTltqKytdPVosTltqKytdPUcsTltqKytdPTAsTltqKytdPUosTltqKytdPUUsTltqKytdPUwsTltqKytdPUMsSVswXT1NYXRoLm1pbihJWzBdLFgrdGhpcy5vYmplY3RPZmZzZXRbMF0pLElbMV09TWF0aC5taW4oSVsxXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxJWzJdPU1hdGgubWluKElbMl0sRyt0aGlzLm9iamVjdE9mZnNldFsyXSksej1NYXRoLm1pbih6LEopLE9bMF09TWF0aC5tYXgoT1swXSxYK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxPWzFdPU1hdGgubWF4KE9bMV0sWit0aGlzLm9iamVjdE9mZnNldFsxXSksT1syXT1NYXRoLm1heChPWzJdLEcrdGhpcy5vYmplY3RPZmZzZXRbMl0pLEQ9TWF0aC5tYXgoRCxKKSxVKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJih6PSt0LmludGVuc2l0eUJvdW5kc1swXSxEPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288ajtvKz0xMClOW29dPShOW29dLXopLyhELXopO3RoaXMuX3ZlcnRleENvdW50PVUsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoTi5zdWJhcnJheSgwLGopKSxzLmZyZWVGbG9hdChOKSxzLmZyZWUoYi5kYXRhKSx0aGlzLmJvdW5kcz1bSSxPXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT16JiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PUR8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1beixEXX1pZigibGV2ZWxzImluIHQpe3ZhciBLPXQubGV2ZWxzO2ZvcihLPUFycmF5LmlzQXJyYXkoS1swXSk/Sy5zbGljZSgpOltbXSxbXSxLXSxvPTA7bzwzOysrbylLW29dPUtbb10uc2xpY2UoKSxLW29dLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3Iobz0wO288MzsrK28pZm9yKHY9MDt2PEtbb10ubGVuZ3RoOysrdilLW29dW3ZdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoS1tvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcih2PTA7djxLW29dLmxlbmd0aDsrK3YpaWYoS1tvXVt2XSE9PXRoaXMuY29udG91ckxldmVsc1tvXVt2XSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9S31pZihyKXt5PXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIFE9W10sJD0wOyQ8MzsrKyQpe3ZhciB0dD10aGlzLmNvbnRvdXJMZXZlbHNbJF0sZXQ9W10scnQ9W10sbnQ9WzAsMCwwXTtmb3Iobz0wO288dHQubGVuZ3RoOysrbyl7dmFyIGl0PWgodGhpcy5fZmllbGRbJF0sdHRbb10pO2V0LnB1c2goUS5sZW5ndGgvNXwwKSxVPTA7dDpmb3Iodj0wO3Y8aXQuY2VsbHMubGVuZ3RoOysrdil7dmFyIGF0PWl0LmNlbGxzW3ZdO2ZvcihxPTA7cTwyOysrcSl7dmFyIG90PWl0LnBvc2l0aW9uc1thdFtxXV0sc3Q9b3RbMF0sbHQ9MHxNYXRoLmZsb29yKHN0KSxjdD1zdC1sdCx1dD1vdFsxXSxmdD0wfE1hdGguZmxvb3IodXQpLGh0PXV0LWZ0LHB0PSExO2U6Zm9yKHZhciBkdD0wO2R0PDM7KytkdCl7bnRbZHRdPTA7dmFyIG10PSgkK2R0KzEpJTM7Zm9yKFY9MDtWPDI7KytWKXt2YXIgZ3Q9Vj9jdDoxLWN0O2ZvcihZPTB8TWF0aC5taW4oTWF0aC5tYXgobHQrViwwKSxhWzBdKSxIPTA7SDwyOysrSCl7dmFyIHZ0PUg/aHQ6MS1odDtpZihXPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrSCwwKSxhWzFdKSxHPWR0PDI/dGhpcy5fZmllbGRbbXRdLmdldChZLFcpOih0aGlzLmludGVuc2l0eS5nZXQoWSxXKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoRyl8fGlzTmFOKEcpKXtwdD0hMDticmVhayBlfXZhciB5dD1ndCp2dDtudFtkdF0rPXl0Kkd9fX1pZihwdCl7aWYocT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KVEucG9wKCk7VS09MX1jb250aW51ZSB0fVEucHVzaChudFswXSxudFsxXSxvdFswXSxvdFsxXSxudFsyXSksVSs9MX19cnQucHVzaChVKX10aGlzLl9jb250b3VyT2Zmc2V0c1skXT1ldCx0aGlzLl9jb250b3VyQ291bnRzWyRdPXJ0fXZhciBidD1zLm1hbGxvY0Zsb2F0KFEubGVuZ3RoKTtmb3Iobz0wO288US5sZW5ndGg7KytvKWJ0W29dPVFbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoYnQpLHMuZnJlZUZsb2F0KGJ0KX19LFMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LFMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGY9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWgodSxyW29dKSxtPWQuY2VsbHMsZz1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxtLmxlbmd0aDsrK2UpZm9yKHZhciB2PW1bZV0seT0wO3k8MjsrK3kpe3ZhciB4PWdbdlt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLFQ9Yi1fLGs9MS1ULEE9K3hbMV0sTT0wfEEsUz0wfE1hdGgubWluKE0rMSxpWzFdKSxFPUEtTSxMPTEtRSxDPWsqTCxQPWsqRSxJPVQqTCxPPVQqRSx6PUMqZi5nZXQoXyxNKStQKmYuZ2V0KF8sUykrSSpmLmdldCh3LE0pK08qZi5nZXQodyxTKSxEPUMqcC5nZXQoXyxNKStQKnAuZ2V0KF8sUykrSSpwLmdldCh3LE0pK08qcC5nZXQodyxTKTtpZihpc05hTih6KXx8aXNOYU4oRCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT16LGFbMipuKzFdPUQsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7Ii4vbGliL3NoYWRlcnMiOjE0NCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJiaXQtdHdpZGRsZSI6MzIsY29sb3JtYXA6NTMsImdsLWJ1ZmZlciI6NzgsImdsLW1hdDQvaW52ZXJ0Ijo5OCwiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC10ZXh0dXJlMmQiOjE0NiwiZ2wtdmFvIjoxNTAsbmRhcnJheToyNTksIm5kYXJyYXktZ3JhZGllbnQiOjI1MiwibmRhcnJheS1vcHMiOjI1NCwibmRhcnJheS1wYWNrIjoyNTUsInN1cmZhY2UtbmV0cyI6MzAyLCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDE0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5IiksaT10KCJuZGFycmF5LW9wcyIpLGE9dCgidHlwZWRhcnJheS1wb29sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8PTEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE1pc3NpbmcgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3IiKTtvfHxjKHQpO2lmKCJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzFdKXJldHVybiB2KHQsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM118fHQuUkdCQSxhcmd1bWVudHNbNF18fHQuVU5TSUdORURfQllURSk7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMV0pKXJldHVybiB2KHQsMHxhcmd1bWVudHNbMV1bMF0sMHxhcmd1bWVudHNbMV1bMV0sYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWzFdKXt2YXIgZT1hcmd1bWVudHNbMV0scj11KGUpP2U6ZS5yYXc7aWYocilyZXR1cm4geSh0LHIsMHxlLndpZHRoLDB8ZS5oZWlnaHQsYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKGUuc2hhcGUmJmUuZGF0YSYmZS5zdHJpZGUpcmV0dXJuIHgodCxlKX10aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpfTt2YXIgbz1udWxsLHM9bnVsbCxsPW51bGw7ZnVuY3Rpb24gYyh0KXtvPVt0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVF0scz1bdC5ORUFSRVNULHQuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCx0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTElORUFSXSxsPVt0LlJFUEVBVCx0LkNMQU1QX1RPX0VER0UsdC5NSVJST1JFRF9SRVBFQVRdfWZ1bmN0aW9uIHUodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50fHwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIEltYWdlRGF0YX12YXIgZj1mdW5jdGlvbih0LGUpe2kubXVscyh0LGUsMjU1KX07ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBwKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKTtpZihpPT09dC5GTE9BVCYmIXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTt2YXIgbz1nKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IHAodCxvLGUscixuLGkpfWZ1bmN0aW9uIHkodCxlLHIsbixpLGEpe3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgcCh0LG8scixuLGksYSl9ZnVuY3Rpb24geCh0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgbD1tKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxsPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUsbD0hMSxyPSJ1aW50OCIpO3ZhciB1LGgsZD0wO2lmKDI9PT1vLmxlbmd0aClkPXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1vWzJdKWQ9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKWQ9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSlkPXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO2Q9dC5SR0JBfX1jIT09dC5GTE9BVHx8dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgdj1lLnNpemU7aWYobCl1PTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PXY/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCt2KTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtoPWEubWFsbG9jKHYscik7dmFyIHg9bihoLG8seSwwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP2kuYXNzaWduKHgsZSk6Zih4LGUpLHU9aC5zdWJhcnJheSgwLHYpfXZhciBiPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxkLG9bMF0sb1sxXSwwLGQsYyx1KSxsfHxhLmZyZWUoaCksbmV3IHAodCxiLG9bMF0sb1sxXSxkLGMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsdCksdGhpcy5fbWFnRmlsdGVyPXR9fSxtaXBTYW1wbGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYW5pc29TYW1wbGVzO2lmKHRoaXMuX2FuaXNvU2FtcGxlcz0wfE1hdGgubWF4KHQsMSksZSE9PXRoaXMuX2FuaXNvU2FtcGxlcyl7dmFyIHI9dGhpcy5nbC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1QsdCksdGhpcy5fd3JhcFQ9dH19LHdyYXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3QsdF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1ucyIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYobC5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIil9ZWxzZSB0PVswfHQsMHx0XTtyZXR1cm4gaCh0aGlzLDB8dFswXSwwfHRbMV0pLFswfHRbMF0sMHx0WzFdXX19LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLHR8PTAsdGhpcy5fc2hhcGVbMV0pLHR9fSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLGgodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fX19KSxkLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtyZXR1cm4gdm9pZCAwIT09dCYmZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArKDB8dCkpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMuaGFuZGxlKSx2b2lkIDAhPT10PzB8dDplLmdldFBhcmFtZXRlcihlLkFDVElWRV9URVhUVVJFKS1lLlRFWFRVUkUwfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGhpcy5oYW5kbGUpfSxkLmdlbmVyYXRlTWlwbWFwPWZ1bmN0aW9uKCl7dGhpcy5iaW5kKCksdGhpcy5nbC5nZW5lcmF0ZU1pcG1hcCh0aGlzLmdsLlRFWFRVUkVfMkQpO2Zvcih2YXIgdD1NYXRoLm1pbih0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXSksZT0wO3Q+MDsrK2UsdD4+Pj0xKXRoaXMuX21pcExldmVscy5pbmRleE9mKGUpPDAmJnRoaXMuX21pcExldmVscy5wdXNoKGUpfSxkLnNldFBpeGVscz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz10aGlzLmdsO3RoaXMuYmluZCgpLEFycmF5LmlzQXJyYXkoZSk/KG89cixyPTB8ZVsxXSxlPTB8ZVswXSk6KGU9ZXx8MCxyPXJ8fDApLG89b3x8MDt2YXIgbD11KHQpP3Q6dC5yYXc7aWYobCl7dGhpcy5fbWlwTGV2ZWxzLmluZGV4T2Yobyk8MD8ocy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKSx0aGlzLl9taXBMZXZlbHMucHVzaChvKSk6cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCxvLGUscix0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCl9ZWxzZXtpZighKHQuc2hhcGUmJnQuc3RyaWRlJiZ0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUiKTtpZih0LnNoYXBlLmxlbmd0aDwyfHxlK3Quc2hhcGVbMV0+dGhpcy5fc2hhcGVbMV0+Pj5vfHxyK3Quc2hhcGVbMF0+dGhpcy5fc2hhcGVbMF0+Pj5vfHxlPDB8fHI8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVGV4dHVyZSBkaW1lbnNpb25zIGFyZSBvdXQgb2YgYm91bmRzIik7IWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsdSl7dmFyIGg9dS5kdHlwZSxwPXUuc2hhcGUuc2xpY2UoKTtpZihwLmxlbmd0aDwyfHxwLmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2QiKTt2YXIgZD0wLGc9MCx2PW0ocCx1LnN0cmlkZS5zbGljZSgpKTsiZmxvYXQzMiI9PT1oP2Q9dC5GTE9BVDoiZmxvYXQ2NCI9PT1oPyhkPXQuRkxPQVQsdj0hMSxoPSJmbG9hdDMyIik6InVpbnQ4Ij09PWg/ZD10LlVOU0lHTkVEX0JZVEU6KGQ9dC5VTlNJR05FRF9CWVRFLHY9ITEsaD0idWludDgiKTtpZigyPT09cC5sZW5ndGgpZz10LkxVTUlOQU5DRSxwPVtwWzBdLHBbMV0sMV0sdT1uKHUuZGF0YSxwLFt1LnN0cmlkZVswXSx1LnN0cmlkZVsxXSwxXSx1Lm9mZnNldCk7ZWxzZXtpZigzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09cFsyXSlnPXQuQUxQSEE7ZWxzZSBpZigyPT09cFsyXSlnPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PXBbMl0pZz10LlJHQjtlbHNle2lmKDQhPT1wWzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTtnPXQuUkdCQX1wWzJdfWchPT10LkxVTUlOQU5DRSYmZyE9PXQuQUxQSEF8fHMhPT10LkxVTUlOQU5DRSYmcyE9PXQuQUxQSEF8fChnPXMpO2lmKGchPT1zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbmNvbXBhdGlibGUgdGV4dHVyZSBmb3JtYXQgZm9yIHNldFBpeGVscyIpO3ZhciB5PXUuc2l6ZSx4PWMuaW5kZXhPZihvKTwwO3gmJmMucHVzaChvKTtpZihkPT09bCYmdikwPT09dS5vZmZzZXQmJnUuZGF0YS5sZW5ndGg9PT15P3g/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLHUuZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLHUuZGF0YSk6eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsdS5kYXRhLnN1YmFycmF5KHUub2Zmc2V0LHUub2Zmc2V0K3kpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsdS5kYXRhLnN1YmFycmF5KHUub2Zmc2V0LHUub2Zmc2V0K3kpKTtlbHNle3ZhciBiO2I9bD09PXQuRkxPQVQ/YS5tYWxsb2NGbG9hdDMyKHkpOmEubWFsbG9jVWludDgoeSk7dmFyIF89bihiLHAsW3BbMl0scFsyXSpwWzBdLDFdKTtkPT09dC5GTE9BVCYmbD09PXQuVU5TSUdORURfQllURT9mKF8sdSk6aS5hc3NpZ24oXyx1KSx4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxiLnN1YmFycmF5KDAseSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxiLnN1YmFycmF5KDAseSkpLGw9PT10LkZMT0FUP2EuZnJlZUZsb2F0MzIoYik6YS5mcmVlVWludDgoYil9fShzLGUscixvLHRoaXMuZm9ybWF0LHRoaXMudHlwZSx0aGlzLl9taXBMZXZlbHMsdCl9fX0se25kYXJyYXk6MjU5LCJuZGFycmF5LW9wcyI6MjU0LCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXMiKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIGE9cltpXTtpZihhLmJ1ZmZlcil7dmFyIG89YS5idWZmZXIscz1hLnNpemV8fDQsbD1hLnR5cGV8fHQuRkxPQVQsYz0hIWEubm9ybWFsaXplZCx1PWEuc3RyaWRlfHwwLGY9YS5vZmZzZXR8fDA7by5iaW5kKCksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxzLGwsYyx1LGYpfWVsc2V7aWYoIm51bWJlciI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogSW52YWxpZCB2ZXJ0ZXggYXR0cmlidXRlIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZXt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKGk9MDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX19LHt9XSwxNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kby1iaW5kLmpzIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe24odGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0saS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9fSx7Ii4vZG8tYmluZC5qcyI6MTQ3fV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGEodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5kaW1lbnNpb24pe2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmKHRoaXMubG9jYXRpb24sdGhpcy5hKTticmVhaztjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMpO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kKX19LGEucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2F0dHJpYnMubGVuZ3RoOysrdCl0aGlzLl9hdHRyaWJzW3RdLmJpbmQodGhpcy5nbCl9LGEucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCl9LGEucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9leHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpfSxhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuYmluZCgpLG4odGhpcy5nbCxlLHQpLHRoaXMudW5iaW5kKCksdGhpcy5fYXR0cmlicy5sZW5ndGg9MCx0KWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgbz10W2FdOyJudW1iZXIiPT10eXBlb2Ygbz90aGlzLl9hdHRyaWJzLnB1c2gobmV3IGkoYSwxLG8pKTpBcnJheS5pc0FycmF5KG8pJiZ0aGlzLl9hdHRyaWJzLnB1c2gobmV3IGkoYSxvLmxlbmd0aCxvWzBdLG9bMV0sb1syXSxvWzNdKSl9dGhpcy5fdXNlRWxlbWVudHM9ISFlLHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxhLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl91c2VFbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgYSh0LGUsZS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKX19LHsiLi9kby1iaW5kLmpzIjoxNDd9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvdmFvLW5hdGl2ZS5qcyIpLGk9dCgiLi9saWIvdmFvLWVtdWxhdGVkLmpzIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsPXQuY3JlYXRlVmVydGV4QXJyYXk/bmV3IGEodCk6dC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7cmV0dXJuKHM9bD9uKHQsbCk6aSh0KSkudXBkYXRlKGUscixvKSxzfX0seyIuL2xpYi92YW8tZW11bGF0ZWQuanMiOjE0OCwiLi9saWIvdmFvLW5hdGl2ZS5qcyI6MTQ5fV0sMTUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH19LHt9XSwxNTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbMF0sdFsxXSx0WzJdKSxvPW4oZVswXSxlWzFdLGVbMl0pO2kocixyKSxpKG8sbyk7dmFyIHM9YShyLG8pO3JldHVybiBzPjE/MDpNYXRoLmFjb3Mocyl9O3ZhciBuPXQoIi4vZnJvbVZhbHVlcyIpLGk9dCgiLi9ub3JtYWxpemUiKSxhPXQoIi4vZG90Iil9LHsiLi9kb3QiOjE2MiwiLi9mcm9tVmFsdWVzIjoxNjgsIi4vbm9ybWFsaXplIjoxNzl9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdH19LHt9XSwxNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX19LHt9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH19LHt9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0fX0se31dLDE1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fX0se31dLDE1ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL2Rpc3RhbmNlIil9LHsiLi9kaXN0YW5jZSI6MTU5fV0sMTU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkpfX0se31dLDE2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL2RpdmlkZSIpfSx7Ii4vZGl2aWRlIjoxNjF9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0fX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX19LHt9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9MWUtNn0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSYmTWF0aC5hYnMoaS1zKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKHMpKSYmTWF0aC5hYnMoYS1sKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGwpKX07dmFyIG49dCgiLi9lcHNpbG9uIil9LHsiLi9lcHNpbG9uIjoxNjN9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXX19LHt9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmZsb29yKGVbMF0pLHRbMV09TWF0aC5mbG9vcihlWzFdKSx0WzJdPU1hdGguZmxvb3IoZVsyXSksdH19LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLG8pe3ZhciBzLGw7ZXx8KGU9Myk7cnx8KHI9MCk7bD1pP01hdGgubWluKGkqZStyLHQubGVuZ3RoKTp0Lmxlbmd0aDtmb3Iocz1yO3M8bDtzKz1lKW5bMF09dFtzXSxuWzFdPXRbcysxXSxuWzJdPXRbcysyXSxhKG4sbixvKSx0W3NdPW5bMF0sdFtzKzFdPW5bMV0sdFtzKzJdPW5bMl07cmV0dXJuIHR9O3ZhciBuPXQoIi4vY3JlYXRlIikoKX0seyIuL2NyZWF0ZSI6MTU2fV0sMTY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiBuWzBdPXQsblsxXT1lLG5bMl09cixufX0se31dLDE2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17RVBTSUxPTjp0KCIuL2Vwc2lsb24iKSxjcmVhdGU6dCgiLi9jcmVhdGUiKSxjbG9uZTp0KCIuL2Nsb25lIiksYW5nbGU6dCgiLi9hbmdsZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxlcXVhbHM6dCgiLi9lcXVhbHMiKSxleGFjdEVxdWFsczp0KCIuL2V4YWN0RXF1YWxzIiksYWRkOnQoIi4vYWRkIiksc3VidHJhY3Q6dCgiLi9zdWJ0cmFjdCIpLHN1Yjp0KCIuL3N1YiIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSxtdWw6dCgiLi9tdWwiKSxkaXZpZGU6dCgiLi9kaXZpZGUiKSxkaXY6dCgiLi9kaXYiKSxtaW46dCgiLi9taW4iKSxtYXg6dCgiLi9tYXgiKSxmbG9vcjp0KCIuL2Zsb29yIiksY2VpbDp0KCIuL2NlaWwiKSxyb3VuZDp0KCIuL3JvdW5kIiksc2NhbGU6dCgiLi9zY2FsZSIpLHNjYWxlQW5kQWRkOnQoIi4vc2NhbGVBbmRBZGQiKSxkaXN0YW5jZTp0KCIuL2Rpc3RhbmNlIiksZGlzdDp0KCIuL2Rpc3QiKSxzcXVhcmVkRGlzdGFuY2U6dCgiLi9zcXVhcmVkRGlzdGFuY2UiKSxzcXJEaXN0OnQoIi4vc3FyRGlzdCIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLGxlbjp0KCIuL2xlbiIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksc3FyTGVuOnQoIi4vc3FyTGVuIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxjcm9zczp0KCIuL2Nyb3NzIiksbGVycDp0KCIuL2xlcnAiKSxyYW5kb206dCgiLi9yYW5kb20iKSx0cmFuc2Zvcm1NYXQ0OnQoIi4vdHJhbnNmb3JtTWF0NCIpLHRyYW5zZm9ybU1hdDM6dCgiLi90cmFuc2Zvcm1NYXQzIiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKSxyb3RhdGVYOnQoIi4vcm90YXRlWCIpLHJvdGF0ZVk6dCgiLi9yb3RhdGVZIikscm90YXRlWjp0KCIuL3JvdGF0ZVoiKSxmb3JFYWNoOnQoIi4vZm9yRWFjaCIpfX0seyIuL2FkZCI6MTUxLCIuL2FuZ2xlIjoxNTIsIi4vY2VpbCI6MTUzLCIuL2Nsb25lIjoxNTQsIi4vY29weSI6MTU1LCIuL2NyZWF0ZSI6MTU2LCIuL2Nyb3NzIjoxNTcsIi4vZGlzdCI6MTU4LCIuL2Rpc3RhbmNlIjoxNTksIi4vZGl2IjoxNjAsIi4vZGl2aWRlIjoxNjEsIi4vZG90IjoxNjIsIi4vZXBzaWxvbiI6MTYzLCIuL2VxdWFscyI6MTY0LCIuL2V4YWN0RXF1YWxzIjoxNjUsIi4vZmxvb3IiOjE2NiwiLi9mb3JFYWNoIjoxNjcsIi4vZnJvbVZhbHVlcyI6MTY4LCIuL2ludmVyc2UiOjE3MCwiLi9sZW4iOjE3MSwiLi9sZW5ndGgiOjE3MiwiLi9sZXJwIjoxNzMsIi4vbWF4IjoxNzQsIi4vbWluIjoxNzUsIi4vbXVsIjoxNzYsIi4vbXVsdGlwbHkiOjE3NywiLi9uZWdhdGUiOjE3OCwiLi9ub3JtYWxpemUiOjE3OSwiLi9yYW5kb20iOjE4MCwiLi9yb3RhdGVYIjoxODEsIi4vcm90YXRlWSI6MTgyLCIuL3JvdGF0ZVoiOjE4MywiLi9yb3VuZCI6MTg0LCIuL3NjYWxlIjoxODUsIi4vc2NhbGVBbmRBZGQiOjE4NiwiLi9zZXQiOjE4NywiLi9zcXJEaXN0IjoxODgsIi4vc3FyTGVuIjoxODksIi4vc3F1YXJlZERpc3RhbmNlIjoxOTAsIi4vc3F1YXJlZExlbmd0aCI6MTkxLCIuL3N1YiI6MTkyLCIuL3N1YnRyYWN0IjoxOTMsIi4vdHJhbnNmb3JtTWF0MyI6MTk0LCIuL3RyYW5zZm9ybU1hdDQiOjE5NSwiLi90cmFuc2Zvcm1RdWF0IjoxOTZ9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdH19LHt9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9sZW5ndGgiKX0seyIuL2xlbmd0aCI6MTcyfV0sMTcyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX19LHt9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fX0se31dLDE3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHR9fSx7fV0sMTc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH19LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9tdWx0aXBseSIpfSx7Ii4vbXVsdGlwbHkiOjE3N31dLDE3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHR9fSx7fV0sMTc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHR9fSx7fV0sMTc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7YT4wJiYoYT0xL01hdGguc3FydChhKSx0WzBdPWVbMF0qYSx0WzFdPWVbMV0qYSx0WzJdPWVbMl0qYSk7cmV0dXJuIHR9fSx7fV0sMTgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqTWF0aC5yYW5kb20oKSpNYXRoLlBJLG49MipNYXRoLnJhbmRvbSgpLTEsaT1NYXRoLnNxcnQoMS1uKm4pKmU7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqaSx0WzFdPU1hdGguc2luKHIpKmksdFsyXT1uKmUsdH19LHt9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clsxXSxhPXJbMl0sbz1lWzFdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWVbMF0sdFsxXT1pK28qYy1zKmwsdFsyXT1hK28qbCtzKmMsdH19LHt9XSwxODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMl0sbz1lWzBdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrcypsK28qYyx0WzFdPWVbMV0sdFsyXT1hK3MqYy1vKmwsdH19LHt9XSwxODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1lWzBdLWkscz1lWzFdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrbypjLXMqbCx0WzFdPWErbypsK3MqYyx0WzJdPWVbMl0sdH19LHt9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLnJvdW5kKGVbMF0pLHRbMV09TWF0aC5yb3VuZChlWzFdKSx0WzJdPU1hdGgucm91bmQoZVsyXSksdH19LHt9XSwxODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fX0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdH19LHt9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHR9fSx7fV0sMTg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vc3F1YXJlZERpc3RhbmNlIil9LHsiLi9zcXVhcmVkRGlzdGFuY2UiOjE5MH1dLDE4OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWRMZW5ndGgiKX0seyIuL3NxdWFyZWRMZW5ndGgiOjE5MX1dLDE5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbitpKml9fSx7fV0sMTkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gZSplK3IqcituKm59fSx7fV0sMTkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vc3VidHJhY3QiKX0seyIuL3N1YnRyYWN0IjoxOTN9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0fX0se31dLDE5NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0se31dLDE5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdO3JldHVybiBvPW98fDEsdFswXT0oclswXSpuK3JbNF0qaStyWzhdKmErclsxMl0pL28sdFsxXT0oclsxXSpuK3JbNV0qaStyWzldKmErclsxM10pL28sdFsyXT0oclsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKS9vLHR9fSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqYS1sKmksZj1jKmkrbCpuLW8qYSxoPWMqYStvKmktcypuLHA9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPXUqYytwKi1vK2YqLWwtaCotcyx0WzFdPWYqYytwKi1zK2gqLW8tdSotbCx0WzJdPWgqYytwKi1sK3UqLXMtZiotbyx0fX0se31dLDE5NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHR9fSx7fV0sMTk4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfX0se31dLDE5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH19LHt9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH19LHt9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSthKmEpfX0se31dLDIwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHRbM109ZVszXS9yWzNdLHR9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX19LHt9XSwyMDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gaVswXT10LGlbMV09ZSxpWzJdPXIsaVszXT1uLGl9fSx7fV0sMjA1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6dCgiLi9jcmVhdGUiKSxjbG9uZTp0KCIuL2Nsb25lIiksZnJvbVZhbHVlczp0KCIuL2Zyb21WYWx1ZXMiKSxjb3B5OnQoIi4vY29weSIpLHNldDp0KCIuL3NldCIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksZGl2aWRlOnQoIi4vZGl2aWRlIiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4Iiksc2NhbGU6dCgiLi9zY2FsZSIpLHNjYWxlQW5kQWRkOnQoIi4vc2NhbGVBbmRBZGQiKSxkaXN0YW5jZTp0KCIuL2Rpc3RhbmNlIiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksbGVuZ3RoOnQoIi4vbGVuZ3RoIiksc3F1YXJlZExlbmd0aDp0KCIuL3NxdWFyZWRMZW5ndGgiKSxuZWdhdGU6dCgiLi9uZWdhdGUiKSxpbnZlcnNlOnQoIi4vaW52ZXJzZSIpLG5vcm1hbGl6ZTp0KCIuL25vcm1hbGl6ZSIpLGRvdDp0KCIuL2RvdCIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1RdWF0OnQoIi4vdHJhbnNmb3JtUXVhdCIpfX0seyIuL2FkZCI6MTk3LCIuL2Nsb25lIjoxOTgsIi4vY29weSI6MTk5LCIuL2NyZWF0ZSI6MjAwLCIuL2Rpc3RhbmNlIjoyMDEsIi4vZGl2aWRlIjoyMDIsIi4vZG90IjoyMDMsIi4vZnJvbVZhbHVlcyI6MjA0LCIuL2ludmVyc2UiOjIwNiwiLi9sZW5ndGgiOjIwNywiLi9sZXJwIjoyMDgsIi4vbWF4IjoyMDksIi4vbWluIjoyMTAsIi4vbXVsdGlwbHkiOjIxMSwiLi9uZWdhdGUiOjIxMiwiLi9ub3JtYWxpemUiOjIxMywiLi9yYW5kb20iOjIxNCwiLi9zY2FsZSI6MjE1LCIuL3NjYWxlQW5kQWRkIjoyMTYsIi4vc2V0IjoyMTcsIi4vc3F1YXJlZERpc3RhbmNlIjoyMTgsIi4vc3F1YXJlZExlbmd0aCI6MjE5LCIuL3N1YnRyYWN0IjoyMjAsIi4vdHJhbnNmb3JtTWF0NCI6MjIxLCIuL3RyYW5zZm9ybVF1YXQiOjIyMn1dLDIwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0WzNdPTEvZVszXSx0fX0se31dLDIwNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4raSppKX19LHt9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdFszXT1zK24qKHJbM10tcyksdH19LHt9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0WzNdPU1hdGgubWF4KGVbM10sclszXSksdH19LHt9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0WzNdPU1hdGgubWluKGVbM10sclszXSksdH19LHt9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0WzNdPWVbM10qclszXSx0fX0se31dLDIxMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHR9fSx7fV0sMjEzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqcituKm4raSppK2EqYTtvPjAmJihvPTEvTWF0aC5zcXJ0KG8pLHRbMF09cipvLHRbMV09bipvLHRbMl09aSpvLHRbM109YSpvKTtyZXR1cm4gdH19LHt9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL25vcm1hbGl6ZSIpLGk9dCgiLi9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdFswXT1NYXRoLnJhbmRvbSgpLHRbMV09TWF0aC5yYW5kb20oKSx0WzJdPU1hdGgucmFuZG9tKCksdFszXT1NYXRoLnJhbmRvbSgpLG4odCx0KSxpKHQsdCxlKSx0fX0seyIuL25vcm1hbGl6ZSI6MjEzLCIuL3NjYWxlIjoyMTV9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fX0se31dLDIxNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0fX0se31dLDIxNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdH19LHt9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIHIqcituKm4raSppK2EqYX19LHt9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gZSplK3IqcituKm4raSppfX0se31dLDIyMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9fSx7fV0sMjIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fX0se31dLDIyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdFszXT1lWzNdLHR9fSx7fV0sMjIzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbC10b2tlbml6ZXIiKSxpPXQoImF0b2ItbGl0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9QXJyYXkuaXNBcnJheSh0KT90Om4odCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdO2lmKCJwcmVwcm9jZXNzb3IiPT09YS50eXBlKXt2YXIgbz1hLmRhdGEubWF0Y2goL1wjZGVmaW5lXHMrU0hBREVSX05BTUUoX0I2NCk/XHMrKC4rKSQvKTtpZihvJiZvWzJdKXt2YXIgcz1vWzFdLGw9b1syXTtyZXR1cm4ocz9pKGwpOmwpLnRyaW0oKX19fX19LHsiYXRvYi1saXRlIjoxMywiZ2xzbC10b2tlbml6ZXIiOjIzMH1dLDIyNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGMsdT0wLGY9MCxoPTk5OSxwPVtdLGQ9W10sbT0xLGc9MCx2PTAseT0hMSx4PSExLGI9IiIsXz1hLHc9bjsiMzAwIGVzIj09PSh0PXR8fHt9KS52ZXJzaW9uJiYoXz1zLHc9byk7dmFyIFQ9e30saz17fTtmb3IodT0wO3U8Xy5sZW5ndGg7dSsrKVRbX1t1XV09ITA7Zm9yKHU9MDt1PHcubGVuZ3RoO3UrKylrW3dbdV1dPSEwO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZD1bXSxudWxsIT09dD9mdW5jdGlvbih0KXt1PTAsdC50b1N0cmluZyYmKHQ9dC50b1N0cmluZygpKTt2YXIgcjtiKz10LnJlcGxhY2UoL1xyXG4vZywiXG4iKSxjPWIubGVuZ3RoO2Zvcig7ZT1iW3VdLHU8Yzspe3N3aXRjaChyPXUsaCl7Y2FzZSAwOnU9TCgpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6dT1FKCk7YnJlYWs7Y2FzZSAzOnU9QygpO2JyZWFrO2Nhc2UgNDp1PU8oKTticmVhaztjYXNlIDExOnU9SSgpO2JyZWFrO2Nhc2UgNTp1PXooKTticmVhaztjYXNlIDk5OTk6dT1EKCk7YnJlYWs7Y2FzZSA5OnU9UygpO2JyZWFrO2Nhc2UgOTk5OnU9TSgpfWlmKHIhPT11KXN3aXRjaChiW3JdKXtjYXNlIlxuIjpnPTAsKyttO2JyZWFrO2RlZmF1bHQ6KytnfX1yZXR1cm4gZis9dSxiPWIuc2xpY2UodSksZH0odCk6ZnVuY3Rpb24odCl7cC5sZW5ndGgmJkEocC5qb2luKCIiKSk7cmV0dXJuIGg9MTAsQSgiKGVvZikiKSxkfSgpfTtmdW5jdGlvbiBBKHQpe3QubGVuZ3RoJiZkLnB1c2goe3R5cGU6bFtoXSxkYXRhOnQscG9zaXRpb246dixsaW5lOm0sY29sdW1uOmd9KX1mdW5jdGlvbiBNKCl7cmV0dXJuIHA9cC5sZW5ndGg/W106cCwiLyI9PT1yJiYiKiI9PT1lPyh2PWYrdS0xLGg9MCxyPWUsdSsxKToiLyI9PT1yJiYiLyI9PT1lPyh2PWYrdS0xLGg9MSxyPWUsdSsxKToiIyI9PT1lPyhoPTIsdj1mK3UsdSk6L1xzLy50ZXN0KGUpPyhoPTksdj1mK3UsdSk6KHk9L1xkLy50ZXN0KGUpLHg9L1teXHdfXS8udGVzdChlKSx2PWYrdSxoPXk/NDp4PzM6OTk5OSx1KX1mdW5jdGlvbiBTKCl7cmV0dXJuL1teXHNdL2cudGVzdChlKT8oQShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEUoKXtyZXR1cm4iXHIiIT09ZSYmIlxuIiE9PWV8fCJcXCI9PT1yPyhwLnB1c2goZSkscj1lLHUrMSk6KEEocC5qb2luKCIiKSksaD05OTksdSl9ZnVuY3Rpb24gTCgpe3JldHVybiIvIj09PWUmJiIqIj09PXI/KHAucHVzaChlKSxBKHAuam9pbigiIikpLGg9OTk5LHUrMSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBDKCl7aWYoIi4iPT09ciYmL1xkLy50ZXN0KGUpKXJldHVybiBoPTUsdTtpZigiLyI9PT1yJiYiKiI9PT1lKXJldHVybiBoPTAsdTtpZigiLyI9PT1yJiYiLyI9PT1lKXJldHVybiBoPTEsdTtpZigiLiI9PT1lJiZwLmxlbmd0aCl7Zm9yKDtQKHApOyk7cmV0dXJuIGg9NSx1fWlmKCI7Ij09PWV8fCIpIj09PWV8fCIoIj09PWUpe2lmKHAubGVuZ3RoKWZvcig7UChwKTspO3JldHVybiBBKGUpLGg9OTk5LHUrMX12YXIgdD0yPT09cC5sZW5ndGgmJiI9IiE9PWU7aWYoL1tcd19cZFxzXS8udGVzdChlKXx8dCl7Zm9yKDtQKHApOyk7cmV0dXJuIGg9OTk5LHV9cmV0dXJuIHAucHVzaChlKSxyPWUsdSsxfWZ1bmN0aW9uIFAodCl7Zm9yKHZhciBlLHIsbj0wOzspe2lmKGU9aS5pbmRleE9mKHQuc2xpY2UoMCx0Lmxlbmd0aCtuKS5qb2luKCIiKSkscj1pW2VdLC0xPT09ZSl7aWYobi0tK3QubGVuZ3RoPjApY29udGludWU7cj10LnNsaWNlKDAsMSkuam9pbigiIil9cmV0dXJuIEEociksdis9ci5sZW5ndGgsKHA9cC5zbGljZShyLmxlbmd0aCkpLmxlbmd0aH19ZnVuY3Rpb24gSSgpe3JldHVybi9bXmEtZkEtRjAtOV0vLnRlc3QoZSk/KEEocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBPKCl7cmV0dXJuIi4iPT09ZXx8L1tlRV0vLnRlc3QoZSk/KHAucHVzaChlKSxoPTUscj1lLHUrMSk6IngiPT09ZSYmMT09PXAubGVuZ3RoJiYiMCI9PT1wWzBdPyhoPTExLHAucHVzaChlKSxyPWUsdSsxKTovW15cZF0vLnRlc3QoZSk/KEEocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiB6KCl7cmV0dXJuImYiPT09ZSYmKHAucHVzaChlKSxyPWUsdSs9MSksL1tlRV0vLnRlc3QoZSk/KHAucHVzaChlKSxyPWUsdSsxKTooIi0iIT09ZSYmIisiIT09ZXx8IS9bZUVdLy50ZXN0KHIpKSYmL1teXGRdLy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gRCgpe2lmKC9bXlxkXHdfXS8udGVzdChlKSl7dmFyIHQ9cC5qb2luKCIiKTtyZXR1cm4gaD1rW3RdPzg6VFt0XT83OjYsQShwLmpvaW4oIiIpKSxoPTk5OSx1fXJldHVybiBwLnB1c2goZSkscj1lLHUrMX19O3ZhciBuPXQoIi4vbGliL2xpdGVyYWxzIiksaT10KCIuL2xpYi9vcGVyYXRvcnMiKSxhPXQoIi4vbGliL2J1aWx0aW5zIiksbz10KCIuL2xpYi9saXRlcmFscy0zMDBlcyIpLHM9dCgiLi9saWIvYnVpbHRpbnMtMzAwZXMiKSxsPVsiYmxvY2stY29tbWVudCIsImxpbmUtY29tbWVudCIsInByZXByb2Nlc3NvciIsIm9wZXJhdG9yIiwiaW50ZWdlciIsImZsb2F0IiwiaWRlbnQiLCJidWlsdGluIiwia2V5d29yZCIsIndoaXRlc3BhY2UiLCJlb2YiLCJpbnRlZ2VyIl19LHsiLi9saWIvYnVpbHRpbnMiOjIyNiwiLi9saWIvYnVpbHRpbnMtMzAwZXMiOjIyNSwiLi9saWIvbGl0ZXJhbHMiOjIyOCwiLi9saWIvbGl0ZXJhbHMtMzAwZXMiOjIyNywiLi9saWIvb3BlcmF0b3JzIjoyMjl9XSwyMjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2J1aWx0aW5zIik7bj1uLnNsaWNlKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hL14oZ2xcX3x0ZXh0dXJlKS8udGVzdCh0KX0pKSxlLmV4cG9ydHM9bi5jb25jYXQoWyJnbF9WZXJ0ZXhJRCIsImdsX0luc3RhbmNlSUQiLCJnbF9Qb3NpdGlvbiIsImdsX1BvaW50U2l6ZSIsImdsX0ZyYWdDb29yZCIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfUG9pbnRDb29yZCIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWluUHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0IiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9EZXB0aFJhbmdlIiwidHJ1bmMiLCJyb3VuZCIsInJvdW5kRXZlbiIsImlzbmFuIiwiaXNpbmYiLCJmbG9hdEJpdHNUb0ludCIsImZsb2F0Qml0c1RvVWludCIsImludEJpdHNUb0Zsb2F0IiwidWludEJpdHNUb0Zsb2F0IiwicGFja1Nub3JtMngxNiIsInVucGFja1Nub3JtMngxNiIsInBhY2tVbm9ybTJ4MTYiLCJ1bnBhY2tVbm9ybTJ4MTYiLCJwYWNrSGFsZjJ4MTYiLCJ1bnBhY2tIYWxmMngxNiIsIm91dGVyUHJvZHVjdCIsInRyYW5zcG9zZSIsImRldGVybWluYW50IiwiaW52ZXJzZSIsInRleHR1cmUiLCJ0ZXh0dXJlU2l6ZSIsInRleHR1cmVQcm9qIiwidGV4dHVyZUxvZCIsInRleHR1cmVPZmZzZXQiLCJ0ZXhlbEZldGNoIiwidGV4ZWxGZXRjaE9mZnNldCIsInRleHR1cmVQcm9qT2Zmc2V0IiwidGV4dHVyZUxvZE9mZnNldCIsInRleHR1cmVQcm9qTG9kIiwidGV4dHVyZVByb2pMb2RPZmZzZXQiLCJ0ZXh0dXJlR3JhZCIsInRleHR1cmVHcmFkT2Zmc2V0IiwidGV4dHVyZVByb2pHcmFkIiwidGV4dHVyZVByb2pHcmFkT2Zmc2V0Il0pfSx7Ii4vYnVpbHRpbnMiOjIyNn1dLDIyNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImFicyIsImFjb3MiLCJhbGwiLCJhbnkiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjbGFtcCIsImNvcyIsImNyb3NzIiwiZEZkeCIsImRGZHkiLCJkZWdyZWVzIiwiZGlzdGFuY2UiLCJkb3QiLCJlcXVhbCIsImV4cCIsImV4cDIiLCJmYWNlZm9yd2FyZCIsImZsb29yIiwiZnJhY3QiLCJnbF9CYWNrQ29sb3IiLCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9CYWNrTGlnaHRQcm9kdWN0IiwiZ2xfQmFja01hdGVyaWFsIiwiZ2xfQmFja1NlY29uZGFyeUNvbG9yIiwiZ2xfQ2xpcFBsYW5lIiwiZ2xfQ2xpcFZlcnRleCIsImdsX0NvbG9yIiwiZ2xfRGVwdGhSYW5nZSIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRXllUGxhbmVRIiwiZ2xfRXllUGxhbmVSIiwiZ2xfRXllUGxhbmVTIiwiZ2xfRXllUGxhbmVUIiwiZ2xfRm9nIiwiZ2xfRm9nQ29vcmQiLCJnbF9Gb2dGcmFnQ29vcmQiLCJnbF9Gb2dQYXJhbWV0ZXJzIiwiZ2xfRnJhZ0NvbG9yIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJhZ0RhdGEiLCJnbF9GcmFnRGVwdGgiLCJnbF9GcmFnRGVwdGhFWFQiLCJnbF9Gcm9udENvbG9yIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfRnJvbnRMaWdodFByb2R1Y3QiLCJnbF9Gcm9udE1hdGVyaWFsIiwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciIsImdsX0xpZ2h0TW9kZWwiLCJnbF9MaWdodE1vZGVsUGFyYW1ldGVycyIsImdsX0xpZ2h0TW9kZWxQcm9kdWN0cyIsImdsX0xpZ2h0UHJvZHVjdHMiLCJnbF9MaWdodFNvdXJjZSIsImdsX0xpZ2h0U291cmNlUGFyYW1ldGVycyIsImdsX01hdGVyaWFsUGFyYW1ldGVycyIsImdsX01heENsaXBQbGFuZXMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTWF4TGlnaHRzIiwiZ2xfTWF4VGV4dHVyZUNvb3JkcyIsImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZVVuaXRzIiwiZ2xfTWF4VmFyeWluZ0Zsb2F0cyIsImdsX01heFZlcnRleEF0dHJpYnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzIiwiZ2xfTW9kZWxWaWV3TWF0cml4IiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9NdWx0aVRleENvb3JkMCIsImdsX011bHRpVGV4Q29vcmQxIiwiZ2xfTXVsdGlUZXhDb29yZDIiLCJnbF9NdWx0aVRleENvb3JkMyIsImdsX011bHRpVGV4Q29vcmQ0IiwiZ2xfTXVsdGlUZXhDb29yZDUiLCJnbF9NdWx0aVRleENvb3JkNiIsImdsX011bHRpVGV4Q29vcmQ3IiwiZ2xfTm9ybWFsIiwiZ2xfTm9ybWFsTWF0cml4IiwiZ2xfTm9ybWFsU2NhbGUiLCJnbF9PYmplY3RQbGFuZVEiLCJnbF9PYmplY3RQbGFuZVIiLCJnbF9PYmplY3RQbGFuZVMiLCJnbF9PYmplY3RQbGFuZVQiLCJnbF9Qb2ludCIsImdsX1BvaW50Q29vcmQiLCJnbF9Qb2ludFBhcmFtZXRlcnMiLCJnbF9Qb2ludFNpemUiLCJnbF9Qb3NpdGlvbiIsImdsX1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX1NlY29uZGFyeUNvbG9yIiwiZ2xfVGV4Q29vcmQiLCJnbF9UZXh0dXJlRW52Q29sb3IiLCJnbF9UZXh0dXJlTWF0cml4IiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2UiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2UiLCJnbF9WZXJ0ZXgiLCJncmVhdGVyVGhhbiIsImdyZWF0ZXJUaGFuRXF1YWwiLCJpbnZlcnNlc3FydCIsImxlbmd0aCIsImxlc3NUaGFuIiwibGVzc1RoYW5FcXVhbCIsImxvZyIsImxvZzIiLCJtYXRyaXhDb21wTXVsdCIsIm1heCIsIm1pbiIsIm1peCIsIm1vZCIsIm5vcm1hbGl6ZSIsIm5vdCIsIm5vdEVxdWFsIiwicG93IiwicmFkaWFucyIsInJlZmxlY3QiLCJyZWZyYWN0Iiwic2lnbiIsInNpbiIsInNtb290aHN0ZXAiLCJzcXJ0Iiwic3RlcCIsInRhbiIsInRleHR1cmUyRCIsInRleHR1cmUyRExvZCIsInRleHR1cmUyRFByb2oiLCJ0ZXh0dXJlMkRQcm9qTG9kIiwidGV4dHVyZUN1YmUiLCJ0ZXh0dXJlQ3ViZUxvZCIsInRleHR1cmUyRExvZEVYVCIsInRleHR1cmUyRFByb2pMb2RFWFQiLCJ0ZXh0dXJlQ3ViZUxvZEVYVCIsInRleHR1cmUyREdyYWRFWFQiLCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsInRleHR1cmVDdWJlR3JhZEVYVCJdfSx7fV0sMjI3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saXRlcmFscyIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFsibGF5b3V0IiwiY2VudHJvaWQiLCJzbW9vdGgiLCJjYXNlIiwibWF0MngyIiwibWF0MngzIiwibWF0Mng0IiwibWF0M3gyIiwibWF0M3gzIiwibWF0M3g0IiwibWF0NHgyIiwibWF0NHgzIiwibWF0NHg0IiwidXZlYzIiLCJ1dmVjMyIsInV2ZWM0Iiwic2FtcGxlckN1YmVTaGFkb3ciLCJzYW1wbGVyMkRBcnJheSIsInNhbXBsZXIyREFycmF5U2hhZG93IiwiaXNhbXBsZXIyRCIsImlzYW1wbGVyM0QiLCJpc2FtcGxlckN1YmUiLCJpc2FtcGxlcjJEQXJyYXkiLCJ1c2FtcGxlcjJEIiwidXNhbXBsZXIzRCIsInVzYW1wbGVyQ3ViZSIsInVzYW1wbGVyMkRBcnJheSIsImNvaGVyZW50IiwicmVzdHJpY3QiLCJyZWFkb25seSIsIndyaXRlb25seSIsInJlc291cmNlIiwiYXRvbWljX3VpbnQiLCJub3BlcnNwZWN0aXZlIiwicGF0Y2giLCJzYW1wbGUiLCJzdWJyb3V0aW5lIiwiY29tbW9uIiwicGFydGl0aW9uIiwiYWN0aXZlIiwiZmlsdGVyIiwiaW1hZ2UxRCIsImltYWdlMkQiLCJpbWFnZTNEIiwiaW1hZ2VDdWJlIiwiaWltYWdlMUQiLCJpaW1hZ2UyRCIsImlpbWFnZTNEIiwiaWltYWdlQ3ViZSIsInVpbWFnZTFEIiwidWltYWdlMkQiLCJ1aW1hZ2UzRCIsInVpbWFnZUN1YmUiLCJpbWFnZTFEQXJyYXkiLCJpbWFnZTJEQXJyYXkiLCJpaW1hZ2UxREFycmF5IiwiaWltYWdlMkRBcnJheSIsInVpbWFnZTFEQXJyYXkiLCJ1aW1hZ2UyREFycmF5IiwiaW1hZ2UxRFNoYWRvdyIsImltYWdlMkRTaGFkb3ciLCJpbWFnZTFEQXJyYXlTaGFkb3ciLCJpbWFnZTJEQXJyYXlTaGFkb3ciLCJpbWFnZUJ1ZmZlciIsImlpbWFnZUJ1ZmZlciIsInVpbWFnZUJ1ZmZlciIsInNhbXBsZXIxREFycmF5Iiwic2FtcGxlcjFEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjFEIiwiaXNhbXBsZXIxREFycmF5IiwidXNhbXBsZXIxRCIsInVzYW1wbGVyMURBcnJheSIsImlzYW1wbGVyMkRSZWN0IiwidXNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyQnVmZmVyIiwiaXNhbXBsZXJCdWZmZXIiLCJ1c2FtcGxlckJ1ZmZlciIsInNhbXBsZXIyRE1TIiwiaXNhbXBsZXIyRE1TIiwidXNhbXBsZXIyRE1TIiwic2FtcGxlcjJETVNBcnJheSIsImlzYW1wbGVyMkRNU0FycmF5IiwidXNhbXBsZXIyRE1TQXJyYXkiXSl9LHsiLi9saXRlcmFscyI6MjI4fV0sMjI4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsicHJlY2lzaW9uIiwiaGlnaHAiLCJtZWRpdW1wIiwibG93cCIsImF0dHJpYnV0ZSIsImNvbnN0IiwidW5pZm9ybSIsInZhcnlpbmciLCJicmVhayIsImNvbnRpbnVlIiwiZG8iLCJmb3IiLCJ3aGlsZSIsImlmIiwiZWxzZSIsImluIiwib3V0IiwiaW5vdXQiLCJmbG9hdCIsImludCIsInVpbnQiLCJ2b2lkIiwiYm9vbCIsInRydWUiLCJmYWxzZSIsImRpc2NhcmQiLCJyZXR1cm4iLCJtYXQyIiwibWF0MyIsIm1hdDQiLCJ2ZWMyIiwidmVjMyIsInZlYzQiLCJpdmVjMiIsIml2ZWMzIiwiaXZlYzQiLCJidmVjMiIsImJ2ZWMzIiwiYnZlYzQiLCJzYW1wbGVyMUQiLCJzYW1wbGVyMkQiLCJzYW1wbGVyM0QiLCJzYW1wbGVyQ3ViZSIsInNhbXBsZXIxRFNoYWRvdyIsInNhbXBsZXIyRFNoYWRvdyIsInN0cnVjdCIsImFzbSIsImNsYXNzIiwidW5pb24iLCJlbnVtIiwidHlwZWRlZiIsInRlbXBsYXRlIiwidGhpcyIsInBhY2tlZCIsImdvdG8iLCJzd2l0Y2giLCJkZWZhdWx0IiwiaW5saW5lIiwibm9pbmxpbmUiLCJ2b2xhdGlsZSIsInB1YmxpYyIsInN0YXRpYyIsImV4dGVybiIsImV4dGVybmFsIiwiaW50ZXJmYWNlIiwibG9uZyIsInNob3J0IiwiZG91YmxlIiwiaGFsZiIsImZpeGVkIiwidW5zaWduZWQiLCJpbnB1dCIsIm91dHB1dCIsImh2ZWMyIiwiaHZlYzMiLCJodmVjNCIsImR2ZWMyIiwiZHZlYzMiLCJkdmVjNCIsImZ2ZWMyIiwiZnZlYzMiLCJmdmVjNCIsInNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyM0RSZWN0Iiwic2FtcGxlcjJEUmVjdFNoYWRvdyIsInNpemVvZiIsImNhc3QiLCJuYW1lc3BhY2UiLCJ1c2luZyJdfSx7fV0sMjI5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiPDw9IiwiPj49IiwiKysiLCItLSIsIjw8IiwiPj4iLCI8PSIsIj49IiwiPT0iLCIhPSIsIiYmIiwifHwiLCIrPSIsIi09IiwiKj0iLCIvPSIsIiU9IiwiJj0iLCJeXiIsIl49IiwifD0iLCIoIiwiKSIsIlsiLCJdIiwiLiIsIiEiLCJ+IiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8IiwiPiIsIiYiLCJeIiwifCIsIj8iLCI6IiwiPSIsIiwiLCI7IiwieyIsIn0iXX0se31dLDIzMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpLGk9W107cmV0dXJuIGk9KGk9aS5jb25jYXQocih0KSkpLmNvbmNhdChyKG51bGwpKX19LHsiLi9pbmRleCI6MjI0fV0sMjMxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1bXSxuPTA7bjx0Lmxlbmd0aC0xO24rKylyLnB1c2godFtuXSxlW25dfHwiIik7cmV0dXJuIHIucHVzaCh0W25dKSxyLmpvaW4oIiIpfX0se31dLDIzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1icm93c2VyIik7ZS5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIHQ9ITE7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSl9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gdH0oKX0seyJpcy1icm93c2VyIjoyMzZ9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBpPXRbMF0ubGVuZ3RoO2lmKHI8PWkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgbz10LnNsaWNlKDAsaSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksdT0wO3U8PWk7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTt2YXIgZj1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxoPWYuYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKTtmb3IodT0wO3U8PWk7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLG09MDttPD1pOysrbSltPT09dSYmKGRbbV09LTEpO3ZhciBnPWRbMF07ZFswXT1kWzFdLGRbMV09Zzt2YXIgdj1uZXcgYShkLG5ldyBBcnJheShpKzEpLCEwKTtoW3VdPXYscFt1XT12fXBbaSsxXT1mO2Zvcih1PTA7dTw9aTsrK3Upe2Q9aFt1XS52ZXJ0aWNlczt2YXIgeT1oW3VdLmFkamFjZW50O2ZvcihtPTA7bTw9aTsrK20pe3ZhciB4PWRbbV07aWYoeDwwKXlbbV09ZjtlbHNlIGZvcih2YXIgYj0wO2I8PWk7KytiKWhbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVttXT1oW2JdKX19dmFyIF89bmV3IGMoaSxvLHApLHc9ISFlO2Zvcih1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmJvdW5kYXJ5fSkpLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBpPTA7aTw9dDsrK2kpdGhpcy50dXBsZVtpXT10aGlzLnZlcnRpY2VzW2ldO3ZhciBhLG89bFt0XTtvfHwobz1sW3RdPSgoYT1uW3QrMV0pfHwoYT1uKSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR1cGxlO3JldHVybiB0LmFwcGx5KHRoaXMsZSl9fShhKSkpLHRoaXMub3JpZW50PW99dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOylmb3IodmFyIHM9KHQ9by5wb3AoKSkuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxmPTA7Zjw9cjsrK2Ype3ZhciBoPXVbZl07aVtmXT1oPDA/ZTphW2hdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19cmV0dXJuIG51bGx9LHUud2Fsaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsYT10aGlzLnR1cGxlLG89ZT90aGlzLmludGVyaW9yLmxlbmd0aCpNYXRoLnJhbmRvbSgpfDA6dGhpcy5pbnRlcmlvci5sZW5ndGgtMSxzPXRoaXMuaW50ZXJpb3Jbb107dDpmb3IoOyFzLmJvdW5kYXJ5Oyl7Zm9yKHZhciBsPXMudmVydGljZXMsYz1zLmFkamFjZW50LHU9MDt1PD1uOysrdSlhW3VdPWlbbFt1XV07cy5sYXN0VmlzaXRlZD1yO2Zvcih1PTA7dTw9bjsrK3Upe3ZhciBmPWNbdV07aWYoIShmLmxhc3RWaXNpdGVkPj1yKSl7dmFyIGg9YVt1XTthW3VdPXQ7dmFyIHA9dGhpcy5vcmllbnQoKTtpZihhW3VdPWgscDwwKXtzPWY7Y29udGludWUgdH1mLmJvdW5kYXJ5P2YubGFzdFZpc2l0ZWQ9LXI6Zi5sYXN0VmlzaXRlZD1yfX1yZXR1cm59cmV0dXJuIHN9LHUuYWRkUGVha3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGw9dGhpcy50dXBsZSxjPXRoaXMuaW50ZXJpb3IsdT10aGlzLnNpbXBsaWNlcyxmPVtlXTtlLmxhc3RWaXNpdGVkPXIsZS52ZXJ0aWNlc1tlLnZlcnRpY2VzLmluZGV4T2YoLTEpXT1yLGUuYm91bmRhcnk9ITEsYy5wdXNoKGUpO2Zvcih2YXIgaD1bXTtmLmxlbmd0aD4wOyl7dmFyIHA9KGU9Zi5wb3AoKSkudmVydGljZXMsZD1lLmFkamFjZW50LG09cC5pbmRleE9mKHIpO2lmKCEobTwwKSlmb3IodmFyIGc9MDtnPD1uOysrZylpZihnIT09bSl7dmFyIHY9ZFtnXTtpZih2LmJvdW5kYXJ5JiYhKHYubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgeT12LnZlcnRpY2VzO2lmKHYubGFzdFZpc2l0ZWQhPT0tcil7Zm9yKHZhciB4PTAsYj0wO2I8PW47KytiKXlbYl08MD8oeD1iLGxbYl09dCk6bFtiXT1pW3lbYl1dO2lmKHRoaXMub3JpZW50KCk+MCl7eVt4XT1yLHYuYm91bmRhcnk9ITEsYy5wdXNoKHYpLGYucHVzaCh2KSx2Lmxhc3RWaXNpdGVkPXI7Y29udGludWV9di5sYXN0VmlzaXRlZD0tcn12YXIgXz12LmFkamFjZW50LHc9cC5zbGljZSgpLFQ9ZC5zbGljZSgpLGs9bmV3IGEodyxULCEwKTt1LnB1c2goayk7dmFyIEE9Xy5pbmRleE9mKGUpO2lmKCEoQTwwKSl7X1tBXT1rLFRbbV09dix3W2ddPS0xLFRbZ109ZSxkW2ddPWssay5mbGlwKCk7Zm9yKGI9MDtiPD1uOysrYil7dmFyIE09d1tiXTtpZighKE08MHx8TT09PXIpKXtmb3IodmFyIFM9bmV3IEFycmF5KG4tMSksRT0wLEw9MDtMPD1uOysrTCl7dmFyIEM9d1tMXTtDPDB8fEw9PT1ifHwoU1tFKytdPUMpfWgucHVzaChuZXcgbyhTLGssYikpfX19fX19aC5zb3J0KHMpO2ZvcihnPTA7ZysxPGgubGVuZ3RoO2crPTIpe3ZhciBQPWhbZ10sST1oW2crMV0sTz1QLmluZGV4LHo9SS5pbmRleDtPPDB8fHo8MHx8KFAuY2VsbC5hZGphY2VudFtQLmluZGV4XT1JLmNlbGwsSS5jZWxsLmFkamFjZW50W0kuaW5kZXhdPVAuY2VsbCl9fSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSx1LmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCxjPTAsdT0wO3U8PXQ7Kyt1KXNbdV0+PTA/b1tsKytdPXNbdV06Yz0xJnU7aWYoYz09PSgxJnQpKXt2YXIgZj1vWzBdO29bMF09b1sxXSxvWzFdPWZ9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODQsInNpbXBsaWNpYWwtY29tcGxleCI6MjkzfV0sMjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gaSh0LGUscixuLGkpe3RoaXMubWlkPXQsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yLHRoaXMubGVmdFBvaW50cz1uLHRoaXMucmlnaHRQb2ludHM9aSx0aGlzLmNvdW50PShlP2UuY291bnQ6MCkrKHI/ci5jb3VudDowKStuLmxlbmd0aH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXR8fDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IHYobnVsbCk7cmV0dXJuIG5ldyB2KGcodCkpfTt2YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSl7dC5taWQ9ZS5taWQsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5sZWZ0UG9pbnRzPWUubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPWUucmlnaHRQb2ludHMsdC5jb3VudD1lLmNvdW50fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1nKGUpO3QubWlkPXIubWlkLHQubGVmdD1yLmxlZnQsdC5yaWdodD1yLnJpZ2h0LHQubGVmdFBvaW50cz1yLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1yLnJpZ2h0UG9pbnRzLHQuY291bnQ9ci5jb3VudH1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pO3IucHVzaChlKSxzKHQscil9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKSxuPXIuaW5kZXhPZihlKTtyZXR1cm4gbjwwPzA6KHIuc3BsaWNlKG4sMSkscyh0LHIpLDEpfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGgmJnRbbl1bMF08PWU7KytuKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJnRbbl1bMV0+PWU7LS1uKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49ZSh0W3JdKTtpZihuKXJldHVybiBufX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dFswXS1lWzBdO3JldHVybiByfHx0WzFdLWVbMV19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXRbMV0tZVsxXTtyZXR1cm4gcnx8dFswXS1lWzBdfWZ1bmN0aW9uIGcodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKHRbcl1bMF0sdFtyXVsxXSk7ZS5zb3J0KHApO3ZhciBuPWVbZS5sZW5ndGg+PjFdLGE9W10sbz1bXSxzPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBsPXRbcl07bFsxXTxuP2EucHVzaChsKTpuPGxbMF0/by5wdXNoKGwpOnMucHVzaChsKX12YXIgYz1zLHU9cy5zbGljZSgpO3JldHVybiBjLnNvcnQoZCksdS5zb3J0KG0pLG5ldyBpKG4sZyhhKSxnKG8pLGMsdSl9ZnVuY3Rpb24gdih0KXt0aGlzLnJvb3Q9dH1hLmludGVydmFscz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsdGhpcy5sZWZ0UG9pbnRzKSx0aGlzLmxlZnQmJnRoaXMubGVmdC5pbnRlcnZhbHModCksdGhpcy5yaWdodCYmdGhpcy5yaWdodC5pbnRlcnZhbHModCksdH0sYS5pbnNlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHMubGVuZ3RoO2lmKHRoaXMuY291bnQrPTEsdFsxXTx0aGlzLm1pZCl0aGlzLmxlZnQ/NCoodGhpcy5sZWZ0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMubGVmdC5pbnNlcnQodCk6dGhpcy5sZWZ0PWcoW3RdKTtlbHNlIGlmKHRbMF0+dGhpcy5taWQpdGhpcy5yaWdodD80Kih0aGlzLnJpZ2h0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMucmlnaHQuaW5zZXJ0KHQpOnRoaXMucmlnaHQ9ZyhbdF0pO2Vsc2V7dmFyIHI9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCxkKSxpPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO3RoaXMubGVmdFBvaW50cy5zcGxpY2UociwwLHQpLHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKGksMCx0KX19LGEucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzO2lmKHRbMV08dGhpcy5taWQpcmV0dXJuIHRoaXMubGVmdD80Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKT9jKHRoaXMsdCk6Mj09PShzPXRoaXMubGVmdC5yZW1vdmUodCkpPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYodFswXT50aGlzLm1pZClyZXR1cm4gdGhpcy5yaWdodD80Kih0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApPjMqKGUtMSk/Yyh0aGlzLHQpOjI9PT0ocz10aGlzLnJpZ2h0LnJlbW92ZSh0KSk/KHRoaXMucmlnaHQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/MjowO2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgcj10aGlzLGk9dGhpcy5sZWZ0O2kucmlnaHQ7KXI9aSxpPWkucmlnaHQ7aWYocj09PXRoaXMpaS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIGE9dGhpcy5sZWZ0LHM9dGhpcy5yaWdodDtyLmNvdW50LT1pLmNvdW50LHIucmlnaHQ9aS5sZWZ0LGkubGVmdD1hLGkucmlnaHQ9c31vKHRoaXMsaSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/byh0aGlzLHRoaXMubGVmdCk6byh0aGlzLHRoaXMucmlnaHQpO3JldHVybiAxfWZvcihhPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsZCk7YTx0aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbYV1bMF09PT10WzBdOysrYSlpZih0aGlzLmxlZnRQb2ludHNbYV09PT10KXt0aGlzLmNvdW50LT0xLHRoaXMubGVmdFBvaW50cy5zcGxpY2UoYSwxKTtmb3Iocz1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTtzPHRoaXMucmlnaHRQb2ludHMubGVuZ3RoJiZ0aGlzLnJpZ2h0UG9pbnRzW3NdWzFdPT09dFsxXTsrK3MpaWYodGhpcy5yaWdodFBvaW50c1tzXT09PXQpcmV0dXJuIHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKHMsMSksMX1yZXR1cm4gMH0sYS5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodDx0aGlzLm1pZCl7aWYodGhpcy5sZWZ0KWlmKHI9dGhpcy5sZWZ0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gdSh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXt2YXIgcjtpZih0aGlzLnJpZ2h0KWlmKHI9dGhpcy5yaWdodC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGYodGhpcy5yaWdodFBvaW50cyx0LGUpfXJldHVybiBoKHRoaXMubGVmdFBvaW50cyxlKX0sYS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtpZih0PHRoaXMubWlkJiZ0aGlzLmxlZnQmJihuPXRoaXMubGVmdC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47aWYoZT50aGlzLm1pZCYmdGhpcy5yaWdodCYmKG49dGhpcy5yaWdodC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47cmV0dXJuIGU8dGhpcy5taWQ/dSh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP2YodGhpcy5yaWdodFBvaW50cyx0LHIpOmgodGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgeT12LnByb3RvdHlwZTt5Lmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IGkodFswXSxudWxsLG51bGwsW3RdLFt0XSl9LHkucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksMCE9PWV9cmV0dXJuITF9LHkucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0seS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzF9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDIzNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDIzNzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX0KLyohCiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXIKICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlJiZuKHQuc2xpY2UoMCwwKSl9KHQpfHwhIXQuX2lzQnVmZmVyKX19LHt9XSwyMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWEsZS5leHBvcnRzLmlzTW9iaWxlPWEsZS5leHBvcnRzLmRlZmF1bHQ9YTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2ksaT0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gYSh0KXt0fHwodD17fSk7dmFyIGU9dC51YTtpZihlfHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIGUuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYoZT1lLmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciByPXQudGFibGV0P2kudGVzdChlKTpuLnRlc3QoZSk7cmV0dXJuIXImJnQudGFibGV0JiZ0LmZlYXR1cmVEZXRlY3QmJm5hdmlnYXRvciYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi0xIT09ZS5pbmRleE9mKCJNYWNpbnRvc2giKSYmLTEhPT1lLmluZGV4T2YoIlNhZmFyaSIpJiYocj0hMCkscn19LHt9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19LHt9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn19LHt9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL25vcm1hbGl6ZSIpLGk9dCgiZ2wtbWF0NC9jcmVhdGUiKSxhPXQoImdsLW1hdDQvY2xvbmUiKSxvPXQoImdsLW1hdDQvZGV0ZXJtaW5hbnQiKSxzPXQoImdsLW1hdDQvaW52ZXJ0IiksbD10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGM9e2xlbmd0aDp0KCJnbC12ZWMzL2xlbmd0aCIpLG5vcm1hbGl6ZTp0KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGRvdDp0KCJnbC12ZWMzL2RvdCIpLGNyb3NzOnQoImdsLXZlYzMvY3Jvc3MiKX0sdT1pKCksZj1pKCksaD1bMCwwLDAsMF0scD1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLGQ9WzAsMCwwXTtmdW5jdGlvbiBtKHQsZSxyLG4saSl7dFswXT1lWzBdKm4rclswXSppLHRbMV09ZVsxXSpuK3JbMV0qaSx0WzJdPWVbMl0qbityWzJdKml9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksZyx2KXtpZihlfHwoZT1bMCwwLDBdKSxyfHwocj1bMCwwLDBdKSxpfHwoaT1bMCwwLDBdKSxnfHwoZz1bMCwwLDAsMV0pLHZ8fCh2PVswLDAsMCwxXSksIW4odSx0KSlyZXR1cm4hMTtpZihhKGYsdSksZlszXT0wLGZbN109MCxmWzExXT0wLGZbMTVdPTEsTWF0aC5hYnMobyhmKTwxZS04KSlyZXR1cm4hMTt2YXIgeSx4LGIsXyx3LFQsayxBPXVbM10sTT11WzddLFM9dVsxMV0sRT11WzEyXSxMPXVbMTNdLEM9dVsxNF0sUD11WzE1XTtpZigwIT09QXx8MCE9PU18fDAhPT1TKXtpZihoWzBdPUEsaFsxXT1NLGhbMl09UyxoWzNdPVAsIXMoZixmKSlyZXR1cm4hMTtsKGYsZikseT1nLGI9ZixfPSh4PWgpWzBdLHc9eFsxXSxUPXhbMl0saz14WzNdLHlbMF09YlswXSpfK2JbNF0qdytiWzhdKlQrYlsxMl0qayx5WzFdPWJbMV0qXytiWzVdKncrYls5XSpUK2JbMTNdKmsseVsyXT1iWzJdKl8rYls2XSp3K2JbMTBdKlQrYlsxNF0qayx5WzNdPWJbM10qXytiWzddKncrYlsxMV0qVCtiWzE1XSprfWVsc2UgZ1swXT1nWzFdPWdbMl09MCxnWzNdPTE7aWYoZVswXT1FLGVbMV09TCxlWzJdPUMsZnVuY3Rpb24odCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19KHAsdSksclswXT1jLmxlbmd0aChwWzBdKSxjLm5vcm1hbGl6ZShwWzBdLHBbMF0pLGlbMF09Yy5kb3QocFswXSxwWzFdKSxtKHBbMV0scFsxXSxwWzBdLDEsLWlbMF0pLHJbMV09Yy5sZW5ndGgocFsxXSksYy5ub3JtYWxpemUocFsxXSxwWzFdKSxpWzBdLz1yWzFdLGlbMV09Yy5kb3QocFswXSxwWzJdKSxtKHBbMl0scFsyXSxwWzBdLDEsLWlbMV0pLGlbMl09Yy5kb3QocFsxXSxwWzJdKSxtKHBbMl0scFsyXSxwWzFdLDEsLWlbMl0pLHJbMl09Yy5sZW5ndGgocFsyXSksYy5ub3JtYWxpemUocFsyXSxwWzJdKSxpWzFdLz1yWzJdLGlbMl0vPXJbMl0sYy5jcm9zcyhkLHBbMV0scFsyXSksYy5kb3QocFswXSxkKTwwKWZvcih2YXIgST0wO0k8MztJKyspcltJXSo9LTEscFtJXVswXSo9LTEscFtJXVsxXSo9LTEscFtJXVsyXSo9LTE7cmV0dXJuIHZbMF09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXS1wWzFdWzFdLXBbMl1bMl0sMCkpLHZbMV09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXStwWzFdWzFdLXBbMl1bMl0sMCkpLHZbMl09LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDEtcFswXVswXS1wWzFdWzFdK3BbMl1bMl0sMCkpLHZbM109LjUqTWF0aC5zcXJ0KE1hdGgubWF4KDErcFswXVswXStwWzFdWzFdK3BbMl1bMl0sMCkpLHBbMl1bMV0+cFsxXVsyXSYmKHZbMF09LXZbMF0pLHBbMF1bMl0+cFsyXVswXSYmKHZbMV09LXZbMV0pLHBbMV1bMF0+cFswXVsxXSYmKHZbMl09LXZbMl0pLCEwfX0seyIuL25vcm1hbGl6ZSI6MjQyLCJnbC1tYXQ0L2Nsb25lIjo5MiwiZ2wtbWF0NC9jcmVhdGUiOjkzLCJnbC1tYXQ0L2RldGVybWluYW50Ijo5NCwiZ2wtbWF0NC9pbnZlcnQiOjk4LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MTA5LCJnbC12ZWMzL2Nyb3NzIjoxNTcsImdsLXZlYzMvZG90IjoxNjIsImdsLXZlYzMvbGVuZ3RoIjoxNzIsImdsLXZlYzMvbm9ybWFsaXplIjoxNzl9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzE1XTtpZigwPT09cilyZXR1cm4hMTtmb3IodmFyIG49MS9yLGk9MDtpPDE2O2krKyl0W2ldPWVbaV0qbjtyZXR1cm4hMH19LHt9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC12ZWMzL2xlcnAiKSxpPXQoIm1hdDQtcmVjb21wb3NlIiksYT10KCJtYXQ0LWRlY29tcG9zZSIpLG89dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLHM9dCgicXVhdC1zbGVycCIpLGw9ZigpLGM9ZigpLHU9ZigpO2Z1bmN0aW9uIGYoKXtyZXR1cm57dHJhbnNsYXRlOmgoKSxzY2FsZTpoKDEpLHNrZXc6aCgpLHBlcnNwZWN0aXZlOlswLDAsMCwxXSxxdWF0ZXJuaW9uOlswLDAsMCwxXX19ZnVuY3Rpb24gaCh0KXtyZXR1cm5bdHx8MCx0fHwwLHR8fDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtpZigwPT09byhlKXx8MD09PW8ocikpcmV0dXJuITE7dmFyIGg9YShlLGwudHJhbnNsYXRlLGwuc2NhbGUsbC5za2V3LGwucGVyc3BlY3RpdmUsbC5xdWF0ZXJuaW9uKSxwPWEocixjLnRyYW5zbGF0ZSxjLnNjYWxlLGMuc2tldyxjLnBlcnNwZWN0aXZlLGMucXVhdGVybmlvbik7cmV0dXJuISghaHx8IXApJiYobih1LnRyYW5zbGF0ZSxsLnRyYW5zbGF0ZSxjLnRyYW5zbGF0ZSxmKSxuKHUuc2tldyxsLnNrZXcsYy5za2V3LGYpLG4odS5zY2FsZSxsLnNjYWxlLGMuc2NhbGUsZiksbih1LnBlcnNwZWN0aXZlLGwucGVyc3BlY3RpdmUsYy5wZXJzcGVjdGl2ZSxmKSxzKHUucXVhdGVybmlvbixsLnF1YXRlcm5pb24sYy5xdWF0ZXJuaW9uLGYpLGkodCx1LnRyYW5zbGF0ZSx1LnNjYWxlLHUuc2tldyx1LnBlcnNwZWN0aXZlLHUucXVhdGVybmlvbiksITApfX0seyJnbC1tYXQ0L2RldGVybWluYW50Ijo5NCwiZ2wtdmVjMy9sZXJwIjoxNzMsIm1hdDQtZGVjb21wb3NlIjoyNDEsIm1hdDQtcmVjb21wb3NlIjoyNDQsInF1YXQtc2xlcnAiOjI3MX1dLDI0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjkzLCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjo5NiwiZ2wtbWF0NC9pZGVudGl0eSI6OTcsImdsLW1hdDQvbXVsdGlwbHkiOjEwMCwiZ2wtbWF0NC9zY2FsZSI6MTA3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTA4fV0sMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJtYXQ0LWludGVycG9sYXRlIiksYT10KCJnbC1tYXQ0L2ludmVydCIpLG89dCgiZ2wtbWF0NC9yb3RhdGVYIikscz10KCJnbC1tYXQ0L3JvdGF0ZVkiKSxsPXQoImdsLW1hdDQvcm90YXRlWiIpLGM9dCgiZ2wtbWF0NC9sb29rQXQiKSx1PXQoImdsLW1hdDQvdHJhbnNsYXRlIiksZj0odCgiZ2wtbWF0NC9zY2FsZSIpLHQoImdsLXZlYzMvbm9ybWFsaXplIikpLGg9WzAsMCwwXTtmdW5jdGlvbiBwKHQpe3RoaXMuX2NvbXBvbmVudHM9dC5zbGljZSgpLHRoaXMuX3RpbWU9WzBdLHRoaXMucHJldk1hdHJpeD10LnNsaWNlKCksdGhpcy5uZXh0TWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkTWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkSW52ZXJzZT10LnNsaWNlKCksdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRVcD1bMCwwLDBdLHRoaXMuY29tcHV0ZWRDZW50ZXI9WzAsMCwwXSx0aGlzLmNvbXB1dGVkUmFkaXVzPVswXSx0aGlzLl9saW1pdHM9Wy0xLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKCh0PXR8fHt9KS5tYXRyaXh8fFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSl9O3ZhciBkPXAucHJvdG90eXBlO2QucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1uLmxlKGUsdCksbz10aGlzLmNvbXB1dGVkTWF0cml4O2lmKCEocjwwKSl7dmFyIHM9dGhpcy5fY29tcG9uZW50cztpZihyPT09ZS5sZW5ndGgtMSlmb3IodmFyIGw9MTYqcixjPTA7YzwxNjsrK2Mpb1tjXT1zW2wrK107ZWxzZXt2YXIgdT1lW3IrMV0tZVtyXSxoPShsPTE2KnIsdGhpcy5wcmV2TWF0cml4KSxwPSEwO2ZvcihjPTA7YzwxNjsrK2MpaFtjXT1zW2wrK107dmFyIGQ9dGhpcy5uZXh0TWF0cml4O2ZvcihjPTA7YzwxNjsrK2MpZFtjXT1zW2wrK10scD1wJiZoW2NdPT09ZFtjXTtpZih1PDFlLTZ8fHApZm9yKGM9MDtjPDE2OysrYylvW2NdPWhbY107ZWxzZSBpKG8saCxkLCh0LWVbcl0pL3UpfXZhciBtPXRoaXMuY29tcHV0ZWRVcDttWzBdPW9bMV0sbVsxXT1vWzVdLG1bMl09b1s5XSxmKG0sbSk7dmFyIGc9dGhpcy5jb21wdXRlZEludmVyc2U7YShnLG8pO3ZhciB2PXRoaXMuY29tcHV0ZWRFeWUseT1nWzE1XTt2WzBdPWdbMTJdL3ksdlsxXT1nWzEzXS95LHZbMl09Z1sxNF0veTt2YXIgeD10aGlzLmNvbXB1dGVkQ2VudGVyLGI9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7Zm9yKGM9MDtjPDM7KytjKXhbY109dltjXS1vWzIrNCpjXSpifX0sZC5pZGxlPWZ1bmN0aW9uKHQpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXtmb3IodmFyIGU9dGhpcy5fY29tcG9uZW50cyxyPWUubGVuZ3RoLTE2LG49MDtuPDE2OysrbillLnB1c2goZVtyKytdKTt0aGlzLl90aW1lLnB1c2godCl9fSxkLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ3QodGhpcy5fdGltZSx0KS0yO2U8MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fY29tcG9uZW50cy5zcGxpY2UoMCwxNiplKSl9LGQubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZVt0aGlzLl90aW1lLmxlbmd0aC0xXX0sZC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8aCxuPW58fHRoaXMuY29tcHV0ZWRVcCx0aGlzLnNldE1hdHJpeCh0LGModGhpcy5jb21wdXRlZE1hdHJpeCxlLHIsbikpO2Zvcih2YXIgaT0wLGE9MDthPDM7KythKWkrPU1hdGgucG93KHJbYV0tZVthXSwyKTtpPU1hdGgubG9nKE1hdGguc3FydChpKSksdGhpcy5jb21wdXRlZFJhZGl1c1swXT1pfSxkLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTtlJiZzKGksaSxlKSxyJiZvKGksaSxyKSxuJiZsKGksaSxuKSx0aGlzLnNldE1hdHJpeCh0LGEodGhpcy5jb21wdXRlZE1hdHJpeCxpKSl9O3ZhciBtPVswLDAsMF07ZC5wYW49ZnVuY3Rpb24odCxlLHIsbil7bVswXT0tKGV8fDApLG1bMV09LShyfHwwKSxtWzJdPS0obnx8MCksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7dShpLGksbSksdGhpcy5zZXRNYXRyaXgodCxhKGksaSkpfSxkLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXttWzBdPWV8fDAsbVsxXT1yfHwwLG1bMl09bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O3UoaSxpLG0pLHRoaXMuc2V0TWF0cml4KHQsaSl9LGQuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMubGFzdFQoKSkpe3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIHI9MDtyPDE2Oysrcil0aGlzLl9jb21wb25lbnRzLnB1c2goZVtyXSl9fSxkLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wdXRlZFJhZGl1c1swXT1lfSxkLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbGltaXRzO3JbMF09dCxyWzFdPWV9LGQuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbGltaXRzO3JldHVybiB0Pyh0WzBdPWVbMF0sdFsxXT1lWzFdLHQpOmV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiZ2wtbWF0NC9pbnZlcnQiOjk4LCJnbC1tYXQ0L2xvb2tBdCI6OTksImdsLW1hdDQvcm90YXRlWCI6MTA0LCJnbC1tYXQ0L3JvdGF0ZVkiOjEwNSwiZ2wtbWF0NC9yb3RhdGVaIjoxMDYsImdsLW1hdDQvc2NhbGUiOjEwNywiZ2wtbWF0NC90cmFuc2xhdGUiOjEwOCwiZ2wtdmVjMy9ub3JtYWxpemUiOjE3OSwibWF0NC1pbnRlcnBvbGF0ZSI6MjQzfV0sMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPDMpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpcltpXT1pO3JldHVybiAyPT09ZSYmdFswXVswXT09PXRbMV1bMF0mJnRbMF1bMV09PT10WzFdWzFdP1swXTpyfXZhciBhPW5ldyBBcnJheShlKTtmb3IoaT0wO2k8ZTsrK2kpYVtpXT1pO2Euc29ydCgoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG58fHRbZV1bMV0tdFtyXVsxXX0pKTt2YXIgbz1bYVswXSxhWzFdXSxzPVthWzBdLGFbMV1dO2ZvcihpPTI7aTxlOysraSl7Zm9yKHZhciBsPWFbaV0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZuKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZuKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9cj1uZXcgQXJyYXkocy5sZW5ndGgrby5sZW5ndGgtMik7Zm9yKHZhciBmPTAsaD0oaT0wLG8ubGVuZ3RoKTtpPGg7KytpKXJbZisrXT1vW2ldO2Zvcih2YXIgcD1zLmxlbmd0aC0yO3A+MDstLXApcltmKytdPXNbcF07cmV0dXJuIHJ9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuImFsdEtleSJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLCJzaGlmdEtleSJpbiB0JiYoZT1lfHx0LnNoaWZ0S2V5IT09by5zaGlmdCxvLnNoaWZ0PSEhdC5zaGlmdEtleSksImN0cmxLZXkiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksIm1ldGFLZXkiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpOyJidXR0b25zImluIHMmJih0PTB8cy5idXR0b25zKSwodCE9PXJ8fGMhPT1pfHx1IT09YXx8bChzKSkmJihyPTB8dCxpPWN8fDAsYT11fHwwLGUmJmUocixpLGEsbykpfWZ1bmN0aW9uIHUodCl7YygwLHQpfWZ1bmN0aW9uIGYoKXsocnx8aXx8YXx8by5zaGlmdHx8by5hbHR8fG8ubWV0YXx8by5jb250cm9sKSYmKGk9YT0wLHI9MCxvLnNoaWZ0PW8uYWx0PW8uY29udHJvbD1vLm1ldGE9ITEsZSYmZSgwLDAsMCxvKSl9ZnVuY3Rpb24gaCh0KXtsKHQpJiZlJiZlKHIsaSxhLG8pfWZ1bmN0aW9uIHAodCl7MD09PW4uYnV0dG9ucyh0KT9jKDAsdCk6YyhyLHQpfWZ1bmN0aW9uIGQodCl7YyhyfG4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBtKHQpe2MociZ+bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcoKXtzfHwocz0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKSl9ZygpO3ZhciB2PXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2LHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUpe2U/ZygpOmZ1bmN0aW9uKCl7aWYoIXMpcmV0dXJuO3M9ITEsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG0pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpLHQhPT13aW5kb3cmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSl9KCl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLHZ9O3ZhciBuPXQoIm1vdXNlLWV2ZW50Iil9LHsibW91c2UtZXZlbnQiOjI0OX1dLDI0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1lfHx0LmN1cnJlbnRUYXJnZXR8fHQuc3JjRWxlbWVudCxBcnJheS5pc0FycmF5KHIpfHwocj1bMCwwXSk7dmFyIGk9dC5jbGllbnRYfHwwLGE9dC5jbGllbnRZfHwwLG89KHM9ZSxzPT09d2luZG93fHxzPT09ZG9jdW1lbnR8fHM9PT1kb2N1bWVudC5ib2R5P246cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7dmFyIHM7cmV0dXJuIHJbMF09aS1vLmxlZnQsclsxXT1hLW8udG9wLHJ9fSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKCJidXR0b24iaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRZImluIHQpcmV0dXJuIHQub2Zmc2V0WTt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFktZS50b3B9cmV0dXJuIDB9fSx7fV0sMjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRvLXB4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIGk9bigiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPTE7c3dpdGNoKHQuZGVsdGFNb2RlKXtjYXNlIDE6cz1pO2JyZWFrO2Nhc2UgMjpzPXdpbmRvdy5pbm5lckhlaWdodH1pZihhKj1zLG8qPXMsKG4qPXMpfHxhfHxvKXJldHVybiBlKG4sYSxvLHQpfTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsYSksYX19LHsidG8tcHgiOjMwNH1dLDI1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIGE9dC5hcnJheUFyZ3VtZW50c3x8MTthPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgbz10LnNjYWxhckFyZ3VtZW50c3x8MDtvPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKTsiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIHM9dC5nZXR0ZXJzfHxbXSxsPW5ldyBBcnJheShhKSxjPTA7YzxhOysrYylzLmluZGV4T2YoYyk+PTA/bFtjXT0hMDpsW2NdPSExO3JldHVybiBmdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9W3Msb10uam9pbigiLCIpO3JldHVybigwLGlbbF0pKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLDAscixsKX07dmFyIGk9eyJmYWxzZSwwLDEiOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyxzLGwpe3ZhciBjLHU9MHxhLnNoYXBlWzBdLGY9MHxhLnNoYXBlWzFdLGg9YS5kYXRhLHA9MHxhLm9mZnNldCxkPTB8YS5zdHJpZGVbMF0sbT0wfGEuc3RyaWRlWzFdLGc9cCx2PTB8LWQseT0wLHg9MHwtbSxiPTAsXz0tZC1tfDAsdz0wLFQ9MHxkLGs9bS1kKnV8MCxBPTAsTT0wLFM9MCxFPTIqdXwwLEw9bihFKSxDPW4oRSksUD0wLEk9MCxPPS0xLHo9LTEsRD0wLFI9MHwtdSxGPTB8dSxCPTAsTj0tdS0xfDAsaj11LTF8MCxVPTAsVj0wLEg9MDtmb3IoQT0wO0E8dTsrK0EpTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VDtpZihnKz1rLGY+MCl7aWYoTT0xLExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsdT4wKWZvcihBPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEQ9TFtQK09dLEI9TFtQK1JdLFU9TFtQK05dLEk9PT1EJiZJPT09QiYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksRCxCLFUsbyxzLGwpLFY9Q1tQXT1TKyspLFArPTEsZys9VCxBPTI7QTx1OysrQSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVix3LHksVSxELG8scyxsKSksUCs9MSxnKz1UO2ZvcihnKz1rLFA9MCxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxNPTI7TTxmOysrTSl7aWYoTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VCx1PjApZm9yKEE9MSxjPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09QiYmZShDW1ArUl0sVixiLHcsQixVLG8scyxsKSksUCs9MSxnKz1ULEE9MjtBPHU7KytBKWM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxEPUxbUCtPXSxCPUxbUCtSXSxVPUxbUCtOXSxJPT09RCYmST09PUImJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEQsQixVLG8scyxsKSxWPUNbUF09UysrLFUhPT1CJiZlKENbUCtSXSxWLGIsdyxCLFUsbyxzLGwpLFUhPT1EJiZlKENbUCtPXSxWLHcseSxVLEQsbyxzLGwpKSxQKz0xLGcrPVQ7MSZNJiYoUD0wKSxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxnKz1rfX1pKEMpLGkoTCl9fSwiZmFsc2UsMSwwIjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8scyxsKXt2YXIgYyx1PTB8YS5zaGFwZVswXSxmPTB8YS5zaGFwZVsxXSxoPWEuZGF0YSxwPTB8YS5vZmZzZXQsZD0wfGEuc3RyaWRlWzBdLG09MHxhLnN0cmlkZVsxXSxnPXAsdj0wfC1kLHk9MCx4PTB8LW0sYj0wLF89LWQtbXwwLHc9MCxUPTB8bSxrPWQtbSpmfDAsQT0wLE09MCxTPTAsRT0yKmZ8MCxMPW4oRSksQz1uKEUpLFA9MCxJPTAsTz0tMSx6PS0xLEQ9MCxSPTB8LWYsRj0wfGYsQj0wLE49LWYtMXwwLGo9Zi0xfDAsVT0wLFY9MCxIPTA7Zm9yKE09MDtNPGY7KytNKUxbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQ7aWYoZys9ayx1PjApe2lmKEE9MSxMW1ArK109cihoW2ddLG8scyxsKSxnKz1ULGY+MClmb3IoTT0xLGM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxCPUxbUCtSXSxEPUxbUCtPXSxVPUxbUCtOXSxJPT09QiYmST09PUQmJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEIsRCxVLG8scyxsKSxWPUNbUF09UysrKSxQKz0xLGcrPVQsTT0yO008ZjsrK00pYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUQmJmUoQ1tQK09dLFYsYix3LEQsVSxvLHMsbCkpLFArPTEsZys9VDtmb3IoZys9ayxQPTAsSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsQT0yO0E8dTsrK0Epe2lmKExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsZj4wKWZvcihNPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUImJmUoQ1tQK1JdLFYsdyx5LFUsQixvLHMsbCkpLFArPTEsZys9VCxNPTI7TTxmOysrTSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksQj1MW1ArUl0sRD1MW1ArT10sVT1MW1ArTl0sST09PUImJkk9PT1EJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxCLEQsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVixiLHcsRCxVLG8scyxsKSxVIT09QiYmZShDW1ArUl0sVix3LHksVSxCLG8scyxsKSksUCs9MSxnKz1UOzEmQSYmKFA9MCksSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsZys9a319aShDKSxpKEwpfX19fSx7InR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9e3plcm86ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXTtufD0wO3ZhciBhPTAsbz1yWzBdO2ZvcihhPTA7YTxpOysrYSllW25dPTAsbis9b30sZmRUZW1wbGF0ZTE6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dFswXSxsPXJbMF0sYz0tMSpsLHU9bDtufD0wLG98PTA7dmFyIGY9MCxoPWwscD1hWzBdO2ZvcihmPTA7ZjxzOysrZilpW29dPS41KihlW24rY10tZVtuK3VdKSxuKz1oLG8rPXB9LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRbMF0sZj10WzFdLGg9clswXSxwPXJbMV0sZD1hWzBdLG09YVsxXSxnPWxbMF0sdj1sWzFdLHk9LTEqaCx4PWgsYj0tMSpwLF89cDtufD0wLG98PTAsY3w9MDt2YXIgdz0wLFQ9MCxrPXAsQT1oLWYqcCxNPW0sUz1kLWYqbSxFPXYsTD1nLWYqdjtmb3IoVD0wO1Q8dTsrK1Qpe2Zvcih3PTA7dzxmOysrdylpW29dPS41KihlW24reV0tZVtuK3hdKSxzW2NdPS41KihlW24rYl0tZVtuK19dKSxuKz1rLG8rPU0sYys9RTtuKz1BLG8rPVMsYys9TH19fSxhPXtjZGlmZjpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1pLmR0eXBlLHU9aS5vcmRlcixmPVthLG8uam9pbigpLHMsbC5qb2luKCksYyx1LmpvaW4oKV0uam9pbigpLGg9ZVtmXTtyZXR1cm4gaHx8KGVbZl09aD10KFthLG8scyxsLGMsdV0pKSxoKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaS5kYXRhLGkuc3RyaWRlLDB8aS5vZmZzZXQpfX0semVybzpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ci5kdHlwZSxpPXIub3JkZXIsYT1bbixpLmpvaW4oKV0uam9pbigpLG89ZVthXTtyZXR1cm4gb3x8KGVbYV09bz10KFtuLGldKSksbyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0KX19LGZkVGVtcGxhdGUxOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89bi5kdHlwZSxzPW4ub3JkZXIsbD1baSxhLmpvaW4oKSxvLHMuam9pbigpXS5qb2luKCksYz1lW2xdO3JldHVybiBjfHwoZVtsXT1jPXQoW2ksYSxvLHNdKSksYyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0KX19LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4oMCxhW3QuZnVuY05hbWVdKShzLmJpbmQodm9pZCAwLHQpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpW3QuZnVuY05hbWVdfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG8oe2Z1bmNOYW1lOnQuZnVuY05hbWV9KX12YXIgYz17fSx1PXt9LGY9bCh7ZnVuY05hbWU6ImNkaWZmIn0pLGg9bCh7ZnVuY05hbWU6Inplcm8ifSk7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCBpbiBjP2NbdF06Y1t0XT1sKHtmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfWZ1bmN0aW9uIGQodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9aS5zaGFwZS5zbGljZSgpO3JldHVybiBhWzBdPjImJmFbMV0+MiYmbihpLnBpY2soLTEsLTEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDApLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMikpLGFbMV0+MiYmKHIoaS5waWNrKDAsLTEpLmxvKDEpLmhpKGFbMV0tMiksdC5waWNrKDAsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soMCwtMSwwKS5sbygxKS5oaShhWzFdLTIpKSksYVsxXT4yJiYocihpLnBpY2soYVswXS0xLC0xKS5sbygxKS5oaShhWzFdLTIpLHQucGljayhhWzBdLTEsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soYVswXS0xLC0xLDApLmxvKDEpLmhpKGFbMV0tMikpKSxhWzBdPjImJihyKGkucGljaygtMSwwKS5sbygxKS5oaShhWzBdLTIpLHQucGljaygtMSwwLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLDAsMSkubG8oMSkuaGkoYVswXS0yKSkpLGFbMF0+MiYmKHIoaS5waWNrKC0xLGFbMV0tMSkubG8oMSkuaGkoYVswXS0yKSx0LnBpY2soLTEsYVsxXS0xLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLGFbMV0tMSwxKS5sbygxKS5oaShhWzBdLTIpKSksdC5zZXQoMCwwLDAsMCksdC5zZXQoMCwwLDEsMCksdC5zZXQoYVswXS0xLDAsMCwwKSx0LnNldChhWzBdLTEsMCwxLDApLHQuc2V0KDAsYVsxXS0xLDAsMCksdC5zZXQoMCxhWzFdLTEsMSwwKSx0LnNldChhWzBdLTEsYVsxXS0xLDAsMCksdC5zZXQoYVswXS0xLGFbMV0tMSwxLDApLHR9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil8fChyPW4oZS5kaW1lbnNpb24sInN0cmluZyI9PXR5cGVvZiByP3I6ImNsYW1wIikpLDA9PT1lLnNpemU/dDowPT09ZS5kaW1lbnNpb24/KHQuc2V0KDApLHQpOmZ1bmN0aW9uKHQpe3ZhciBlPXQuam9pbigpO2lmKGE9dVtlXSlyZXR1cm4gYTtmb3IodmFyIHI9dC5sZW5ndGgsbj1bZixoXSxpPTE7aTw9cjsrK2kpbi5wdXNoKHAoaSkpO3ZhciBhPWQuYXBwbHkodm9pZCAwLG4pO3JldHVybiB1W2VdPWEsYX0ocikodCxlKX19LHtkdXA6NjV9XSwyNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0sZj1hJiZjP3QuZ2V0KG4scyk6MCxoPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmYraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmgraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0sZj0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGg9TWF0aC5mbG9vcihuKSxwPW4taCxkPTA8PWgmJmg8dC5zaGFwZVsyXSxtPTA8PWgrMSYmaCsxPHQuc2hhcGVbMl0sZz1vJiZ1JiZkP3QuZ2V0KGksbCxoKTowLHY9byYmZiYmZD90LmdldChpLGwrMSxoKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxoKTowLHg9cyYmZiYmZD90LmdldChpKzEsbCsxLGgpOjAsYj1vJiZ1JiZtP3QuZ2V0KGksbCxoKzEpOjAsXz1vJiZmJiZtP3QuZ2V0KGksbCsxLGgrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKmcrYSp5KStjKigoMS1hKSp2K2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJm0/dC5nZXQoaSsxLGwsaCsxKTowKSkrYyooKDEtYSkqXythKihzJiZmJiZtP3QuZ2V0KGkrMSxsKzEsaCsxKTowKSkpfWZ1bmN0aW9uIG8odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGY9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1mKz1jKnQuZGF0YVt1XX1yZXR1cm4gZn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIscyk7ZGVmYXVsdDpyZXR1cm4gby5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sMjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXsiZmxvYXQ2NCwyLDEsMCI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10WzBdLG89dFsxXSxzPXRbMl0sbD1yWzBdLGM9clsxXSx1PXJbMl07bnw9MDt2YXIgZj0wLGg9MCxwPTAsZD11LG09Yy1zKnUsZz1sLW8qYztmb3IocD0wO3A8YTsrK3Ape2ZvcihoPTA7aDxvOysraCl7Zm9yKGY9MDtmPHM7KytmKWVbbl0vPWksbis9ZDtuKz1tfW4rPWd9fX0sInVpbnQ4LDIsMCwxLGZsb2F0NjQsMiwxLDAiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXRbMF0sYz10WzFdLHU9dFsyXSxmPXJbMF0saD1yWzFdLHA9clsyXSxkPWFbMF0sbT1hWzFdLGc9YVsyXSx2PW58PTAseT1vfD0wLHg9MHx0WzBdO3g+MDspe3g8NjQ/KGw9eCx4PTApOihsPTY0LHgtPTY0KTtmb3IodmFyIGI9MHx0WzFdO2I+MDspe2I8NjQ/KGM9YixiPTApOihjPTY0LGItPTY0KSxuPXYreCpmK2IqaCxvPXkreCpkK2IqbTt2YXIgXz0wLHc9MCxUPTAsaz1wLEE9Zi11KnAsTT1oLWwqZixTPWcsRT1kLXUqZyxMPW0tbCpkO2ZvcihUPTA7VDxjOysrVCl7Zm9yKHc9MDt3PGw7Kyt3KXtmb3IoXz0wO188dTsrK18pZVtuXT1pW29dKnMsbis9ayxvKz1TO24rPUEsbys9RX1uKz1NLG8rPUx9fX19fSwiZmxvYXQzMiwxLDAsZmxvYXQzMiwxLDAiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRbMF0sbD10WzFdLGM9clswXSx1PXJbMV0sZj1hWzBdLGg9YVsxXTtufD0wLG98PTA7dmFyIHA9MCxkPTAsbT11LGc9Yy1sKnUsdj1oLHk9Zi1sKmg7Zm9yKGQ9MDtkPHM7KytkKXtmb3IocD0wO3A8bDsrK3ApZVtuXT1pW29dLG4rPW0sbys9djtuKz1nLG8rPXl9fX0sImZsb2F0MzIsMSwwLGZsb2F0MzIsMCwxIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dFswXSxsPXRbMV0sYz1yWzBdLHU9clsxXSxmPWFbMF0saD1hWzFdLHA9bnw9MCxkPW98PTAsbT0wfHRbMV07bT4wOyl7bTw2ND8obD1tLG09MCk6KGw9NjQsbS09NjQpO2Zvcih2YXIgZz0wfHRbMF07Zz4wOyl7Zzw2ND8ocz1nLGc9MCk6KHM9NjQsZy09NjQpLG49cCttKnUrZypjLG89ZCttKmgrZypmO3ZhciB2PTAseT0wLHg9dSxiPWMtbCp1LF89aCx3PWYtbCpoO2Zvcih5PTA7eTxzOysreSl7Zm9yKHY9MDt2PGw7Kyt2KWVbbl09aVtvXSxuKz14LG8rPV87bis9YixvKz13fX19fX0sInVpbnQ4LDIsMCwxLHVpbnQ4LDEsMiwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dFswXSxsPXRbMV0sYz10WzJdLHU9clswXSxmPXJbMV0saD1yWzJdLHA9YVswXSxkPWFbMV0sbT1hWzJdLGc9bnw9MCx2PW98PTAseT0wfHRbMl07eT4wOyl7eTw2ND8oYz15LHk9MCk6KGM9NjQseS09NjQpO2Zvcih2YXIgeD0wfHRbMF07eD4wOyl7eDw2ND8ocz14LHg9MCk6KHM9NjQseC09NjQpO2Zvcih2YXIgYj0wfHRbMV07Yj4wOyl7Yjw2ND8obD1iLGI9MCk6KGw9NjQsYi09NjQpLG49Zyt5KmgreCp1K2IqZixvPXYreSptK3gqcCtiKmQ7dmFyIF89MCx3PTAsVD0wLGs9aCxBPXUtYypoLE09Zi1zKnUsUz1tLEU9cC1jKm0sTD1kLXMqcDtmb3IoVD0wO1Q8bDsrK1Qpe2Zvcih3PTA7dzxzOysrdyl7Zm9yKF89MDtfPGM7KytfKWVbbl09aVtvXSxuKz1rLG8rPVM7bis9QSxvKz1FfW4rPU0sbys9TH19fX19fSwidWludDgsMiwwLDEsYXJyYXksMiwwLDEiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRbMF0sbD10WzFdLGM9dFsyXSx1PXJbMF0sZj1yWzFdLGg9clsyXSxwPWFbMF0sZD1hWzFdLG09YVsyXTtufD0wLG98PTA7dmFyIGc9MCx2PTAseT0wLHg9aCxiPXUtYypoLF89Zi1zKnUsdz1tLFQ9cC1jKm0saz1kLXMqcDtmb3IoeT0wO3k8bDsrK3kpe2Zvcih2PTA7djxzOysrdil7Zm9yKGc9MDtnPGM7KytnKWVbbl09aVtvXSxuKz14LG8rPXc7bis9YixvKz1UfW4rPV8sbys9a319fX07dmFyIGk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmpvaW4oIiwiKTtyZXR1cm4oMCxuW3JdKSgpfSxhPXttdWw6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPW4uZHR5cGUsbD1uLm9yZGVyLGM9aS5kdHlwZSx1PWkub3JkZXIsZj1bYSxvLmpvaW4oKSxzLGwuam9pbigpLGMsdS5qb2luKCldLmpvaW4oKSxoPWVbZl07cmV0dXJuIGh8fChlW2ZdPWg9dChbYSxvLHMsbCxjLHVdKSksaChyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0LGkuZGF0YSxpLnN0cmlkZSwwfGkub2Zmc2V0KX19LG11bHM6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPW4uZHR5cGUsbD1uLm9yZGVyLGM9W2Esby5qb2luKCkscyxsLmpvaW4oKV0uam9pbigpLHU9ZVtjXTtyZXR1cm4gdXx8KGVbY109dT10KFthLG8scyxsXSkpLHUoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpKX19LG11bHNlcTpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1yLmR0eXBlLGE9ci5vcmRlcixvPVtpLGEuam9pbigpXS5qb2luKCkscz1lW29dO3JldHVybiBzfHwoZVtvXT1zPXQoW2ksYV0pKSxzKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbil9fSxkaXY6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPW4uZHR5cGUsbD1uLm9yZGVyLGM9aS5kdHlwZSx1PWkub3JkZXIsZj1bYSxvLmpvaW4oKSxzLGwuam9pbigpLGMsdS5qb2luKCldLmpvaW4oKSxoPWVbZl07cmV0dXJuIGh8fChlW2ZdPWg9dChbYSxvLHMsbCxjLHVdKSksaChyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0LGkuZGF0YSxpLnN0cmlkZSwwfGkub2Zmc2V0KX19LGRpdnM6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPW4uZHR5cGUsbD1uLm9yZGVyLGM9W2Esby5qb2luKCkscyxsLmpvaW4oKV0uam9pbigpLHU9ZVtjXTtyZXR1cm4gdXx8KGVbY109dT10KFthLG8scyxsXSkpLHUoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpKX19LGRpdnNlcTpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1yLmR0eXBlLGE9ci5vcmRlcixvPVtpLGEuam9pbigpXS5qb2luKCkscz1lW29dO3JldHVybiBzfHwoZVtvXT1zPXQoW2ksYV0pKSxzKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbil9fSxhc3NpZ246ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1uLmR0eXBlLHM9bi5vcmRlcixsPVtpLGEuam9pbigpLG8scy5qb2luKCldLmpvaW4oKSxjPWVbbF07cmV0dXJuIGN8fChlW2xdPWM9dChbaSxhLG8sc10pKSxjKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQpfX19O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGU9e2Z1bmNOYW1lOnQuZnVuY05hbWV9LCgwLGFbZS5mdW5jTmFtZV0pKGkuYmluZCh2b2lkIDAsZSkpO3ZhciBlfXZhciBzPXttdWw6IioiLGRpdjoiLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzKXJbdF09byh7ZnVuY05hbWU6dH0pLHJbdCsicyJdPW8oe2Z1bmNOYW1lOnQrInMifSksclt0KyJzZXEiXT1vKHtmdW5jTmFtZTp0KyJzZXEifSl9KCksci5hc3NpZ249byh7ZnVuY05hbWU6ImFzc2lnbiJ9KX0se31dLDI1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5IiksaT10KCIuL2RvQ29udmVydC5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQsbz0xO0FycmF5LmlzQXJyYXkoYSk7KXIucHVzaChhLmxlbmd0aCksbyo9YS5sZW5ndGgsYT1hWzBdO3JldHVybiAwPT09ci5sZW5ndGg/bigpOihlfHwoZT1uKG5ldyBGbG9hdDY0QXJyYXkobykscikpLGkoZSx0KSxlKX19LHsiLi9kb0NvbnZlcnQuanMiOjI1NixuZGFycmF5OjI1OX1dLDI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dFswXSxvPXRbMV0scz10WzJdLGw9clswXSxjPXJbMV0sdT1yWzJdLGY9WzAsMCwwXTtufD0wO3ZhciBoPTAscD0wLGQ9MCxtPXUsZz1jLXMqdSx2PWwtbypjO2ZvcihkPTA7ZDxhOysrZCl7Zm9yKHA9MDtwPG87KytwKXtmb3IoaD0wO2g8czsrK2gpe3ZhciB5LHg9aTtmb3IoeT0wO3k8Zi5sZW5ndGgtMTsrK3kpeD14W2ZbeV1dO2Vbbl09eFtmW2YubGVuZ3RoLTFdXSxuKz1tLCsrZlsyXX1uKz1nLGZbMl0tPXMsKytmWzFdfW4rPXYsZlsxXS09bywrK2ZbMF19fX07ZS5leHBvcnRzPShuPXtmdW5jTmFtZTp7ZnVuY05hbWU6ImNvbnZlcnQifS5mdW5jTmFtZX0sZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1baSxhLmpvaW4oKV0uam9pbigpLHM9ZVtvXTtyZXR1cm4gc3x8KGVbb109cz10KFtpLGFdKSkscyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4pfX0oaS5iaW5kKHZvaWQgMCxuKSkpfSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpO2Z1bmN0aW9uIGkodCl7c3dpdGNoKHQpe2Nhc2UidWludDMyIjpyZXR1cm5bbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyXTtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgYT17InVpbnQzMiwxLDAiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHAsZCxtLGcsdix5LHgsYixfPXIqbythLHc9dChjKTtmb3IocD1yKzE7cDw9bjsrK3Ape2ZvcihkPXAsbT1fKz1vLHY9MCx5PV8sZz0wO2c8YzsrK2cpd1t2KytdPWlbeV0seSs9dTt0OmZvcig7ZC0tID5yOyl7dj0wLHk9bS1vO2U6Zm9yKGc9MDtnPGM7KytnKXtpZigoeD1pW3ldKTwoYj13W3ZdKSlicmVhayB0O2lmKHg+YilicmVhayBlO3krPWYsdis9aH1mb3Iodj1tLHk9bS1vLGc9MDtnPGM7KytnKWlbdl09aVt5XSx2Kz11LHkrPXU7bS09b31mb3Iodj1tLHk9MCxnPTA7ZzxjOysrZylpW3ZdPXdbeSsrXSx2Kz11fWUodyl9fX07dmFyIG89eyJ1aW50MzIsMSwwIjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uIG4oaSxhLG8scyxsLGMsdSxmLGgscCxkKXt2YXIgbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyxFLEwsQyxQLEksTyx6LEQsUixGLEIsTixqPShhLWkrMSkvNnwwLFU9aStqLFY9YS1qLEg9aSthPj4xLHE9SC1qLEc9SCtqLFk9VSxXPXEsWD1ILFo9RyxKPVYsSz1pKzEsUT1hLTEsJD0hMCx0dD0wLGV0PTAscnQ9MCxudD1mLGl0PWUobnQpLGF0PWUobnQpO0E9bCpZLE09bCpXLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WSxZPVcsVz1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlosTT1sKkosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1aLFo9SixKPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqWSxNPWwqWCxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVksWT1YLFg9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpXLE09bCpYLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9VyxXPVgsWD1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlksTT1sKlosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1ZLFk9WixaPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqWCxNPWwqWixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVgsWD1aLFo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpXLE09bCpKLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9VyxXPUosSj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlcsTT1sKlgsTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1XLFc9WCxYPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqWixNPWwqSixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVosWj1KLEo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfWZvcihBPWwqWSxNPWwqVyxTPWwqWCxFPWwqWixMPWwqSixDPWwqVSxQPWwqSCxJPWwqVixCPTAsTj1zLGs9MDtrPGY7KytrKV89QStOLHc9TStOLFQ9UytOLE89RStOLHo9TCtOLEQ9QytOLFI9UCtOLEY9SStOLGl0W0JdPW9bd10sYXRbQl09b1tPXSwkPSQmJml0W0JdPT09YXRbQl0sdj1vW19dLHk9b1tUXSx4PW9bel0sb1tEXT12LG9bUl09eSxvW0ZdPXgsKytCLE4rPWg7Zm9yKEE9bCpxLE09bCppLE49cyxrPTA7azxmOysrayl3PU0rTixvW189QStOXT1vW3ddLE4rPWg7Zm9yKEE9bCpHLE09bCphLE49cyxrPTA7azxmOysrayl3PU0rTixvW189QStOXT1vW3ddLE4rPWg7aWYoJClmb3IoYj1LO2I8PVE7KytiKXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYoMCE9PXJ0KWlmKHJ0PDApe2lmKGIhPT1LKWZvcihBPWwqYixNPWwqSyxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7KytLfWVsc2UgZm9yKDs7KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYoIShydD4wKSl7aWYocnQ8MCl7Zm9yKEE9bCpiLE09bCpLLFM9bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixUPVMrTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW9bVF0sb1tUXT1tLE4rPWg7KytLLC0tUTticmVha31mb3IoQT1sKmIsTT1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOy0tUTticmVha31RLS19fWVsc2UgZm9yKGI9SztiPD1ROysrYil7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PSh0dD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKHR0PDApe2lmKGIhPT1LKWZvcihBPWwqYixNPWwqSyxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7KytLfWVsc2V7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShldD1vW19dLWF0W0JdKTsrK2spQis9ZCxfKz1wO2lmKGV0PjApZm9yKDs7KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10tYXRbQl0pOysraylCKz1kLF8rPXA7aWYoIShydD4wKSl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKHJ0PDApe2ZvcihBPWwqYixNPWwqSyxTPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sVD1TK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1vW1RdLG9bVF09bSxOKz1oOysrSywtLVF9ZWxzZXtmb3IoQT1sKmIsTT1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOy0tUX1icmVha31pZigtLVE8YilicmVha319fWZvcihBPWwqaSxNPWwqKEstMSksQj0wLE49cyxrPTA7azxmOysrayl3PU0rTixvW189QStOXT1vW3ddLG9bd109aXRbQl0sKytCLE4rPWg7Zm9yKEE9bCphLE09bCooUSsxKSxCPTAsTj1zLGs9MDtrPGY7KytrKXc9TStOLG9bXz1BK05dPW9bd10sb1t3XT1hdFtCXSwrK0IsTis9aDtpZihLLTItaTw9MzI/dChpLEstMixvLHMsbCxjLHUsZixoLHAsZCk6bihpLEstMixvLHMsbCxjLHUsZixoLHAsZCksYS0oUSsyKTw9MzI/dChRKzIsYSxvLHMsbCxjLHUsZixoLHAsZCk6bihRKzIsYSxvLHMsbCxjLHUsZixoLHAsZCksJClyZXR1cm4gcihpdCksdm9pZCByKGF0KTtpZihLPFUmJlE+Vil7dDpmb3IoOzspe2ZvcihfPXMrSypsLEI9MCxOPXMsaz0wO2s8ZjsrK2spe2lmKG9bX10hPT1pdFtCXSlicmVhayB0OysrQixfKz1ofSsrS310OmZvcig7Oyl7Zm9yKF89cytRKmwsQj0wLE49cyxrPTA7azxmOysrayl7aWYob1tfXSE9PWF0W0JdKWJyZWFrIHQ7KytCLF8rPWh9LS1RfWZvcihiPUs7Yjw9UTsrK2Ipe189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0odHQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZigwPT09dHQpe2lmKGIhPT1LKWZvcihBPWwqYixNPWwqSyxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7KytLfWVsc2V7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShldD1vW19dLWF0W0JdKTsrK2spQis9ZCxfKz1wO2lmKDA9PT1ldClmb3IoOzspe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZigwIT09cnQpe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZihydDwwKXtmb3IoQT1sKmIsTT1sKkssUz1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLFQ9UytOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109b1tUXSxvW1RdPW0sTis9aDsrK0ssLS1RfWVsc2V7Zm9yKEE9bCpiLE09bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDstLVF9YnJlYWt9aWYoLS1RPGIpYnJlYWt9fX19cihpdCkscihhdCksUS1LPD0zMj90KEssUSxvLHMsbCxjLHUsZixoLHAsZCk6bihLLFEsbyxzLGwsYyx1LGYsaCxwLGQpfX19O3ZhciBzPXsidWludDMyLDEsMCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ci5kYXRhLGk9MHxyLm9mZnNldCxhPXIuc2hhcGUsbz1yLnN0cmlkZSxzPTB8b1swXSxsPTB8YVswXSxjPTB8b1sxXSx1PTB8YVsxXSxmPWMsaD1jO2w8PTMyP3QoMCxsLTEsbixpLHMsYyxsLHUsZixoLDEpOmUoMCxsLTEsbixpLHMsYyxsLHUsZixoLDEpfX19O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtlLHRdLmpvaW4oIiwiKSxuPXNbcl0sbD1mdW5jdGlvbih0LGUpe3ZhciByPWkoZSksbj1bZSx0XS5qb2luKCIsIiksbz1hW25dO3JldHVybiByP28oclswXSxyWzFdKTpvKCl9KHQsZSksYz1mdW5jdGlvbih0LGUscil7dmFyIG49aShlKSxhPVtlLHRdLmpvaW4oIiwiKSxzPW9bYV07cmV0dXJuIHQubGVuZ3RoPjEmJm4/cyhyLG5bMF0sblsxXSk6cyhyKX0odCxlLGwpO3JldHVybiBuKGwsYyl9fSx7InR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NvbXBpbGVfc29ydC5qcyIpLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLGE9W2Uscl0uam9pbigiOiIpLG89aVthXTtyZXR1cm4gb3x8KGlbYV09bz1uKGUscikpLG8odCksdH19LHsiLi9saWIvY29tcGlsZV9zb3J0LmpzIjoyNTd9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJpcy1idWZmZXIiKSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIG8oKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChhKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufXZhciBzPXtUOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dGhpcy5kYXRhPXR9dmFyIHI9ZS5wcm90b3R5cGU7cmV0dXJuIHIuZHR5cGU9dCxyLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuLTF9LHIuc2l6ZT0wLHIuZGltZW5zaW9uPS0xLHIuc2hhcGU9ci5zdHJpZGU9ci5vcmRlcj1bXSxyLmxvPXIuaGk9ci50cmFuc3Bvc2U9ci5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMuZGF0YSl9LHIuZ2V0PXIuc2V0PWZ1bmN0aW9uKCl7fSxyLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfX0sMDpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXt0aGlzLmRhdGE9dCx0aGlzLm9mZnNldD1lfXZhciBuPXIucHJvdG90eXBlO3JldHVybiBuLmR0eXBlPXQsbi5pbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldH0sbi5kaW1lbnNpb249MCxuLnNpemU9MSxuLnNoYXBlPW4uc3RyaWRlPW4ub3JkZXI9W10sbi5sbz1uLmhpPW4udHJhbnNwb3NlPW4uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLmRhdGEsdGhpcy5vZmZzZXQpfSxuLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLmRhdGEpfSxuLnZhbHVlT2Y9bi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpOnRoaXMuZGF0YVt0aGlzLm9mZnNldF19LG4uc2V0PWZ1bmN0aW9uKGUpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCxlKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPWV9LGZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBuZXcgcih0LGkpfX0sMTpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmRhdGE9dCx0aGlzLnNoYXBlPVtlXSx0aGlzLnN0cmlkZT1bcl0sdGhpcy5vZmZzZXQ9MHxufXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249MSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdfX0pLGkub3JkZXI9WzBdLGkuc2V0PWZ1bmN0aW9uKGUscil7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUscik6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmVdPXJ9LGkuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZV19LGkuaW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnR9LGkuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCx0aGlzLnN0cmlkZVswXSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vZmZzZXQscj0wLGk9dGhpcy5zaGFwZVswXSxhPXRoaXMuc3RyaWRlWzBdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKGUrPWEqKHI9MHx0KSxpLT1yKSxuZXcgbih0aGlzLmRhdGEsaSxhLGUpfSxpLnN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zaGFwZVswXSxyPXRoaXMuc3RyaWRlWzBdLGk9dGhpcy5vZmZzZXQsYT0wLG89TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKChhPTB8dCk8MD8oaSs9ciooZS0xKSxlPW8oLWUvYSkpOmU9byhlL2EpLHIqPWEpLG5ldyBuKHRoaXMuZGF0YSxlLHIsaSl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQpe3Q9dm9pZCAwPT09dD8wOjB8dDt2YXIgZT10aGlzLnNoYXBlLHI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxlW3RdLHJbdF0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCl7dmFyIHI9W10sbj1bXSxpPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9pPWkrdGhpcy5zdHJpZGVbMF0qdHwwOihyLnB1c2godGhpcy5zaGFwZVswXSksbi5wdXNoKHRoaXMuc3RyaWRlWzBdKSksKDAsZVtyLmxlbmd0aCsxXSkodGhpcy5kYXRhLHIsbixpKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxyWzBdLGkpfX0sMjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZSxyXSx0aGlzLnN0cmlkZT1bbixpXSx0aGlzLm9mZnNldD0wfGF9dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj0yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwib3JkZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKT9bMSwwXTpbMCwxXX19KSxpLnNldD1mdW5jdGlvbihlLHIsbil7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcixuKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyXT1ufSxpLmdldD1mdW5jdGlvbihlLHIpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnJdfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnQrdGhpcy5zdHJpZGVbMV0qZX0saS5oaT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vZmZzZXQsaT0wLGE9dGhpcy5zaGFwZVswXSxvPXRoaXMuc2hhcGVbMV0scz10aGlzLnN0cmlkZVswXSxsPXRoaXMuc3RyaWRlWzFdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKHIrPXMqKGk9MHx0KSxhLT1pKSwibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJihyKz1sKihpPTB8ZSksby09aSksbmV3IG4odGhpcy5kYXRhLGEsbyxzLGwscil9LGkuc3RlcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2hhcGVbMF0saT10aGlzLnNoYXBlWzFdLGE9dGhpcy5zdHJpZGVbMF0sbz10aGlzLnN0cmlkZVsxXSxzPXRoaXMub2Zmc2V0LGw9MCxjPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigobD0wfHQpPDA/KHMrPWEqKHItMSkscj1jKC1yL2wpKTpyPWMoci9sKSxhKj1sKSwibnVtYmVyIj09dHlwZW9mIGUmJigobD0wfGUpPDA/KHMrPW8qKGktMSksaT1jKC1pL2wpKTppPWMoaS9sKSxvKj1sKSxuZXcgbih0aGlzLmRhdGEscixpLGEsbyxzKX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlO3ZhciByPXRoaXMuc2hhcGUsaT10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLHJbdF0scltlXSxpW3RdLGlbZV0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCxyKXt2YXIgbj1bXSxpPVtdLGE9dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP2E9YSt0aGlzLnN0cmlkZVswXSp0fDA6KG4ucHVzaCh0aGlzLnNoYXBlWzBdKSxpLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/YT1hK3RoaXMuc3RyaWRlWzFdKnJ8MDoobi5wdXNoKHRoaXMuc2hhcGVbMV0pLGkucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCgwLGVbbi5sZW5ndGgrMV0pKHRoaXMuZGF0YSxuLGksYSl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxyWzBdLHJbMV0saSl9fSwzOmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZSxyLG5dLHRoaXMuc3RyaWRlPVtpLGEsb10sdGhpcy5vZmZzZXQ9MHxzfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV0qdGhpcy5zaGFwZVsyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwib3JkZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLmFicyh0aGlzLnN0cmlkZVswXSksZT1NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkscj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7cmV0dXJuIHQ+ZT9lPnI/WzIsMSwwXTp0PnI/WzEsMiwwXTpbMSwwLDJdOnQ+cj9bMiwwLDFdOnI+ZT9bMCwxLDJdOlswLDIsMV19fSksaS5zZXQ9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuLGkpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbl09aX0saS5nZXQ9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbik6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuXX0saS5pbmRleD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnQrdGhpcy5zdHJpZGVbMV0qZSt0aGlzLnN0cmlkZVsyXSpyfSxpLmhpPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwP3RoaXMuc2hhcGVbMV06MHxlLCJudW1iZXIiIT10eXBlb2Ygcnx8cjwwP3RoaXMuc2hhcGVbMl06MHxyLHRoaXMuc3RyaWRlWzBdLHRoaXMuc3RyaWRlWzFdLHRoaXMuc3RyaWRlWzJdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5vZmZzZXQsYT0wLG89dGhpcy5zaGFwZVswXSxzPXRoaXMuc2hhcGVbMV0sbD10aGlzLnNoYXBlWzJdLGM9dGhpcy5zdHJpZGVbMF0sdT10aGlzLnN0cmlkZVsxXSxmPXRoaXMuc3RyaWRlWzJdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKGkrPWMqKGE9MHx0KSxvLT1hKSwibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJihpKz11KihhPTB8ZSkscy09YSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiYoaSs9ZiooYT0wfHIpLGwtPWEpLG5ldyBuKHRoaXMuZGF0YSxvLHMsbCxjLHUsZixpKX0saS5zdGVwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLnNoYXBlWzBdLGE9dGhpcy5zaGFwZVsxXSxvPXRoaXMuc2hhcGVbMl0scz10aGlzLnN0cmlkZVswXSxsPXRoaXMuc3RyaWRlWzFdLGM9dGhpcy5zdHJpZGVbMl0sdT10aGlzLm9mZnNldCxmPTAsaD1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKGY9MHx0KTwwPyh1Kz1zKihpLTEpLGk9aCgtaS9mKSk6aT1oKGkvZikscyo9ZiksIm51bWJlciI9PXR5cGVvZiBlJiYoKGY9MHxlKTwwPyh1Kz1sKihhLTEpLGE9aCgtYS9mKSk6YT1oKGEvZiksbCo9ZiksIm51bWJlciI9PXR5cGVvZiByJiYoKGY9MHxyKTwwPyh1Kz1jKihvLTEpLG89aCgtby9mKSk6bz1oKG8vZiksYyo9ZiksbmV3IG4odGhpcy5kYXRhLGksYSxvLHMsbCxjLHUpfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUscil7dD12b2lkIDA9PT10PzA6MHx0LGU9dm9pZCAwPT09ZT8xOjB8ZSxyPXZvaWQgMD09PXI/MjowfHI7dmFyIGk9dGhpcy5zaGFwZSxhPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsaVt0XSxpW2VdLGlbcl0sYVt0XSxhW2VdLGFbcl0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCxyLG4pe3ZhciBpPVtdLGE9W10sbz10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/bz1vK3RoaXMuc3RyaWRlWzBdKnR8MDooaS5wdXNoKHRoaXMuc2hhcGVbMF0pLGEucHVzaCh0aGlzLnN0cmlkZVswXSkpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MD9vPW8rdGhpcy5zdHJpZGVbMV0qcnwwOihpLnB1c2godGhpcy5zaGFwZVsxXSksYS5wdXNoKHRoaXMuc3RyaWRlWzFdKSksIm51bWJlciI9PXR5cGVvZiBuJiZuPj0wP289byt0aGlzLnN0cmlkZVsyXSpufDA6KGkucHVzaCh0aGlzLnNoYXBlWzJdKSxhLnB1c2godGhpcy5zdHJpZGVbMl0pKSwoMCxlW2kubGVuZ3RoKzFdKSh0aGlzLmRhdGEsaSxhLG8pfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxpKX19LDQ6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyl7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZSxyLG4saV0sdGhpcy5zdHJpZGU9W2EsbyxzLGxdLHRoaXMub2Zmc2V0PTB8Y312YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdKnRoaXMuc2hhcGVbMl0qdGhpcy5zaGFwZVszXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwib3JkZXIiLHtnZXQ6cn0pLGkuc2V0PWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmksYSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmldPWF9LGkuZ2V0PWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaV19LGkuaW5kZXg9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnQrdGhpcy5zdHJpZGVbMV0qZSt0aGlzLnN0cmlkZVsyXSpyK3RoaXMuc3RyaWRlWzNdKm59LGkuaGk9ZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCwibnVtYmVyIiE9dHlwZW9mIGV8fGU8MD90aGlzLnNoYXBlWzFdOjB8ZSwibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MD90aGlzLnNoYXBlWzJdOjB8ciwibnVtYmVyIiE9dHlwZW9mIGl8fGk8MD90aGlzLnNoYXBlWzNdOjB8aSx0aGlzLnN0cmlkZVswXSx0aGlzLnN0cmlkZVsxXSx0aGlzLnN0cmlkZVsyXSx0aGlzLnN0cmlkZVszXSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcy5vZmZzZXQsbz0wLHM9dGhpcy5zaGFwZVswXSxsPXRoaXMuc2hhcGVbMV0sYz10aGlzLnNoYXBlWzJdLHU9dGhpcy5zaGFwZVszXSxmPXRoaXMuc3RyaWRlWzBdLGg9dGhpcy5zdHJpZGVbMV0scD10aGlzLnN0cmlkZVsyXSxkPXRoaXMuc3RyaWRlWzNdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKGErPWYqKG89MHx0KSxzLT1vKSwibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJihhKz1oKihvPTB8ZSksbC09byksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiYoYSs9cCoobz0wfHIpLGMtPW8pLCJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmKGErPWQqKG89MHxpKSx1LT1vKSxuZXcgbih0aGlzLmRhdGEscyxsLGMsdSxmLGgscCxkLGEpfSxpLnN0ZXA9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcy5zaGFwZVswXSxvPXRoaXMuc2hhcGVbMV0scz10aGlzLnNoYXBlWzJdLGw9dGhpcy5zaGFwZVszXSxjPXRoaXMuc3RyaWRlWzBdLHU9dGhpcy5zdHJpZGVbMV0sZj10aGlzLnN0cmlkZVsyXSxoPXRoaXMuc3RyaWRlWzNdLHA9dGhpcy5vZmZzZXQsZD0wLG09TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKChkPTB8dCk8MD8ocCs9YyooYS0xKSxhPW0oLWEvZCkpOmE9bShhL2QpLGMqPWQpLCJudW1iZXIiPT10eXBlb2YgZSYmKChkPTB8ZSk8MD8ocCs9dSooby0xKSxvPW0oLW8vZCkpOm89bShvL2QpLHUqPWQpLCJudW1iZXIiPT10eXBlb2YgciYmKChkPTB8cik8MD8ocCs9Zioocy0xKSxzPW0oLXMvZCkpOnM9bShzL2QpLGYqPWQpLCJudW1iZXIiPT10eXBlb2YgaSYmKChkPTB8aSk8MD8ocCs9aCoobC0xKSxsPW0oLWwvZCkpOmw9bShsL2QpLGgqPWQpLG5ldyBuKHRoaXMuZGF0YSxhLG8scyxsLGMsdSxmLGgscCl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSxyLGkpe3Q9dm9pZCAwPT09dD8wOjB8dCxlPXZvaWQgMD09PWU/MTowfGUscj12b2lkIDA9PT1yPzI6MHxyLGk9dm9pZCAwPT09aT8zOjB8aTt2YXIgYT10aGlzLnNoYXBlLG89dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxhW3RdLGFbZV0sYVtyXSxhW2ldLG9bdF0sb1tlXSxvW3JdLG9baV0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9W10sbz1bXSxzPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9zPXMrdGhpcy5zdHJpZGVbMF0qdHwwOihhLnB1c2godGhpcy5zaGFwZVswXSksby5wdXNoKHRoaXMuc3RyaWRlWzBdKSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wP3M9cyt0aGlzLnN0cmlkZVsxXSpyfDA6KGEucHVzaCh0aGlzLnNoYXBlWzFdKSxvLnB1c2godGhpcy5zdHJpZGVbMV0pKSwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTA/cz1zK3RoaXMuc3RyaWRlWzJdKm58MDooYS5wdXNoKHRoaXMuc2hhcGVbMl0pLG8ucHVzaCh0aGlzLnN0cmlkZVsyXSkpLCJudW1iZXIiPT10eXBlb2YgaSYmaT49MD9zPXMrdGhpcy5zdHJpZGVbM10qaXwwOihhLnB1c2godGhpcy5zaGFwZVszXSksby5wdXNoKHRoaXMuc3RyaWRlWzNdKSksKDAsZVthLmxlbmd0aCsxXSkodGhpcy5kYXRhLGEsbyxzKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxlWzFdLGVbMl0sZVszXSxyWzBdLHJbMV0sclsyXSxyWzNdLGkpfX0sNTpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZSxyLG4saSxhXSx0aGlzLnN0cmlkZT1bbyxzLGwsYyx1XSx0aGlzLm9mZnNldD0wfGZ9dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj01LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXSp0aGlzLnNoYXBlWzJdKnRoaXMuc2hhcGVbM10qdGhpcy5zaGFwZVs0XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwib3JkZXIiLHtnZXQ6cn0pLGkuc2V0PWZ1bmN0aW9uKGUscixuLGksYSxvKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSt0aGlzLnN0cmlkZVs0XSphLG8pOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmFdPW99LGkuZ2V0PWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkrdGhpcy5zdHJpZGVbNF0qYSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkrdGhpcy5zdHJpZGVbNF0qYV19LGkuaW5kZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qdCt0aGlzLnN0cmlkZVsxXSplK3RoaXMuc3RyaWRlWzJdKnIrdGhpcy5zdHJpZGVbM10qbit0aGlzLnN0cmlkZVs0XSppfSxpLmhpPWZ1bmN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCwibnVtYmVyIiE9dHlwZW9mIGV8fGU8MD90aGlzLnNoYXBlWzFdOjB8ZSwibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MD90aGlzLnNoYXBlWzJdOjB8ciwibnVtYmVyIiE9dHlwZW9mIGl8fGk8MD90aGlzLnNoYXBlWzNdOjB8aSwibnVtYmVyIiE9dHlwZW9mIGF8fGE8MD90aGlzLnNoYXBlWzRdOjB8YSx0aGlzLnN0cmlkZVswXSx0aGlzLnN0cmlkZVsxXSx0aGlzLnN0cmlkZVsyXSx0aGlzLnN0cmlkZVszXSx0aGlzLnN0cmlkZVs0XSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10aGlzLm9mZnNldCxzPTAsbD10aGlzLnNoYXBlWzBdLGM9dGhpcy5zaGFwZVsxXSx1PXRoaXMuc2hhcGVbMl0sZj10aGlzLnNoYXBlWzNdLGg9dGhpcy5zaGFwZVs0XSxwPXRoaXMuc3RyaWRlWzBdLGQ9dGhpcy5zdHJpZGVbMV0sbT10aGlzLnN0cmlkZVsyXSxnPXRoaXMuc3RyaWRlWzNdLHY9dGhpcy5zdHJpZGVbNF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiYobys9cCoocz0wfHQpLGwtPXMpLCJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmKG8rPWQqKHM9MHxlKSxjLT1zKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJihvKz1tKihzPTB8ciksdS09cyksIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiYobys9Zyoocz0wfGkpLGYtPXMpLCJudW1iZXIiPT10eXBlb2YgYSYmYT49MCYmKG8rPXYqKHM9MHxhKSxoLT1zKSxuZXcgbih0aGlzLmRhdGEsbCxjLHUsZixoLHAsZCxtLGcsdixvKX0saS5zdGVwPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dGhpcy5zaGFwZVswXSxzPXRoaXMuc2hhcGVbMV0sbD10aGlzLnNoYXBlWzJdLGM9dGhpcy5zaGFwZVszXSx1PXRoaXMuc2hhcGVbNF0sZj10aGlzLnN0cmlkZVswXSxoPXRoaXMuc3RyaWRlWzFdLHA9dGhpcy5zdHJpZGVbMl0sZD10aGlzLnN0cmlkZVszXSxtPXRoaXMuc3RyaWRlWzRdLGc9dGhpcy5vZmZzZXQsdj0wLHk9TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKCh2PTB8dCk8MD8oZys9Ziooby0xKSxvPXkoLW8vdikpOm89eShvL3YpLGYqPXYpLCJudW1iZXIiPT10eXBlb2YgZSYmKCh2PTB8ZSk8MD8oZys9aCoocy0xKSxzPXkoLXMvdikpOnM9eShzL3YpLGgqPXYpLCJudW1iZXIiPT10eXBlb2YgciYmKCh2PTB8cik8MD8oZys9cCoobC0xKSxsPXkoLWwvdikpOmw9eShsL3YpLHAqPXYpLCJudW1iZXIiPT10eXBlb2YgaSYmKCh2PTB8aSk8MD8oZys9ZCooYy0xKSxjPXkoLWMvdikpOmM9eShjL3YpLGQqPXYpLCJudW1iZXIiPT10eXBlb2YgYSYmKCh2PTB8YSk8MD8oZys9bSoodS0xKSx1PXkoLXUvdikpOnU9eSh1L3YpLG0qPXYpLG5ldyBuKHRoaXMuZGF0YSxvLHMsbCxjLHUsZixoLHAsZCxtLGcpfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUscixpLGEpe3Q9dm9pZCAwPT09dD8wOjB8dCxlPXZvaWQgMD09PWU/MTowfGUscj12b2lkIDA9PT1yPzI6MHxyLGk9dm9pZCAwPT09aT8zOjB8aSxhPXZvaWQgMD09PWE/NDowfGE7dmFyIG89dGhpcy5zaGFwZSxzPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsb1t0XSxvW2VdLG9bcl0sb1tpXSxvW2FdLHNbdF0sc1tlXSxzW3JdLHNbaV0sc1thXSx0aGlzLm9mZnNldCl9LGkucGljaz1mdW5jdGlvbih0LHIsbixpLGEpe3ZhciBvPVtdLHM9W10sbD10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/bD1sK3RoaXMuc3RyaWRlWzBdKnR8MDooby5wdXNoKHRoaXMuc2hhcGVbMF0pLHMucHVzaCh0aGlzLnN0cmlkZVswXSkpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MD9sPWwrdGhpcy5zdHJpZGVbMV0qcnwwOihvLnB1c2godGhpcy5zaGFwZVsxXSkscy5wdXNoKHRoaXMuc3RyaWRlWzFdKSksIm51bWJlciI9PXR5cGVvZiBuJiZuPj0wP2w9bCt0aGlzLnN0cmlkZVsyXSpufDA6KG8ucHVzaCh0aGlzLnNoYXBlWzJdKSxzLnB1c2godGhpcy5zdHJpZGVbMl0pKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTA/bD1sK3RoaXMuc3RyaWRlWzNdKml8MDooby5wdXNoKHRoaXMuc2hhcGVbM10pLHMucHVzaCh0aGlzLnN0cmlkZVszXSkpLCJudW1iZXIiPT10eXBlb2YgYSYmYT49MD9sPWwrdGhpcy5zdHJpZGVbNF0qYXwwOihvLnB1c2godGhpcy5zaGFwZVs0XSkscy5wdXNoKHRoaXMuc3RyaWRlWzRdKSksKDAsZVtvLmxlbmd0aCsxXSkodGhpcy5kYXRhLG8scyxsKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLHJbMF0sclsxXSxyWzJdLHJbM10scls0XSxpKX19fTtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9LTE9PT1lPyJUIjpTdHJpbmcoZSksbj1zW3JdO3JldHVybi0xPT09ZT9uKHQpOjA9PT1lP24odCxjW3RdWzBdKTpuKHQsY1t0XSxvKX12YXIgYz17Z2VuZXJpYzpbXSxidWZmZXI6W10sYXJyYXk6W10sZmxvYXQzMjpbXSxmbG9hdDY0OltdLGludDg6W10saW50MTY6W10saW50MzI6W10sdWludDhfY2xhbXBlZDpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGJpZ2ludDY0OltdLGJpZ3VpbnQ2NDpbXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2lmKHZvaWQgMD09PXQpcmV0dXJuKDAsYy5hcnJheVswXSkoW10pOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9W3RdKSx2b2lkIDA9PT1lJiYoZT1bdC5sZW5ndGhdKTt2YXIgbz1lLmxlbmd0aDtpZih2b2lkIDA9PT1yKXtyPW5ldyBBcnJheShvKTtmb3IodmFyIHM9by0xLHU9MTtzPj0wOy0tcylyW3NdPXUsdSo9ZVtzXX1pZih2b2lkIDA9PT1hKXthPTA7Zm9yKHM9MDtzPG87KytzKXJbc108MCYmKGEtPShlW3NdLTEpKnJbc10pfWZvcih2YXIgZj1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiJidWZmZXIiO2lmKGkpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOnJldHVybiJmbG9hdDY0IjtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6cmV0dXJuImZsb2F0MzIiO2Nhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpyZXR1cm4iaW50OCI7Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpyZXR1cm4iaW50MTYiO2Nhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6cmV0dXJuImludDMyIjtjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpyZXR1cm4idWludDhfY2xhbXBlZCI7Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpyZXR1cm4idWludDgiO2Nhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOnJldHVybiJ1aW50MTYiO2Nhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiJ1aW50MzIiO2Nhc2UiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI6cmV0dXJuImJpZ2ludDY0IjtjYXNlIltvYmplY3QgQmlnVWludDY0QXJyYXldIjpyZXR1cm4iYmlndWludDY0In1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOiJnZW5lcmljIn0odCksaD1jW2ZdO2gubGVuZ3RoPD1vKzE7KWgucHVzaChsKGYsaC5sZW5ndGgtMSkpO3JldHVybigwLGhbbysxXSkodCxlLHIsYSl9fSx7ImlzLWJ1ZmZlciI6MjM3fV0sMjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImRvdWJsZS1iaXRzIiksaT1NYXRoLnBvdygyLC0xMDc0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjtpZih0PT09ZSlyZXR1cm4gdDtpZigwPT09dClyZXR1cm4gZTwwPy1pOmk7dmFyIHI9bi5oaSh0KSxhPW4ubG8odCk7ZT50PT10PjA/YT09PS0xPj4+MD8ocis9MSxhPTApOmErPTE6MD09PWE/KGE9LTE+Pj4wLHItPTEpOmEtPTE7cmV0dXJuIG4ucGFjayhhLHIpfX0seyJkb3VibGUtYml0cyI6NjR9XSwyNjE6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGY9MDtmPHMubGVuZ3RoOysrZil7bD1jLGM9dSx1PXNbKGYrMSklcy5sZW5ndGhdO2Zvcih2YXIgaD1lW2xdLHA9ZVtjXSxkPWVbdV0sbT1uZXcgQXJyYXkoMyksZz0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreCltW3hdPWhbeF0tcFt4XSxnKz1tW3hdKm1beF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKGcqeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQoZyp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsVD0oeCsyKSUzO2JbeF0rPV8qKHZbd10qbVtUXS12W1RdKm1bd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIGs9MDtmb3IoeD0wO3g8MzsrK3gpays9Ylt4XSpiW3hdO2lmKGs+YSlmb3IoXz0xL01hdGguc3FydChrKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGZbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBoPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLG09KGMrMiklMztoW2NdPXVbZF0qZlttXS11W21dKmZbZF0scCs9aFtjXSpoW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWhbY10qPXA7aVtvXT1ofXJldHVybiBpfX0se31dLDI2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9ZSthK2M7aWYoZj4wKXt2YXIgZj1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2YsdFsxXT0uNSoocy1uKS9mLHRbMl09LjUqKHItYSkvZix0WzNdPS41KmZ9ZWxzZXt2YXIgaD1NYXRoLm1heChlLGEsYyk7Zj1NYXRoLnNxcnQoMipoLXUrMSk7ZT49aD8odFswXT0uNSpmLHRbMV09LjUqKGkrcikvZix0WzJdPS41KihzK24pL2YsdFszXT0uNSooby1sKS9mKTphPj1oPyh0WzBdPS41KihyK2kpL2YsdFsxXT0uNSpmLHRbMl09LjUqKGwrbykvZix0WzNdPS41KihzLW4pL2YpOih0WzBdPS41KihuK3MpL2YsdFsxXT0uNSoobytsKS9mLHRbMl09LjUqZix0WzNdPS41KihyLWkpL2YpfXJldHVybiB0fX0se31dLDI2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQucm90YXRpb258fFswLDAsMCwxXSxuPXQucmFkaXVzfHwxO2U9W10uc2xpY2UuY2FsbChlLDAsMyksdShyPVtdLnNsaWNlLmNhbGwociwwLDQpLHIpO3ZhciBpPW5ldyBmKHIsZSxNYXRoLmxvZyhuKSk7aS5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KSwoImV5ZSJpbiB0fHwidXAiaW4gdCkmJmkubG9va0F0KDAsdC5leWUsdC5jZW50ZXIsdC51cCk7cmV0dXJuIGl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9sb29rQXQiKSxhPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxvPXQoImdsLW1hdDQvaW52ZXJ0Iikscz10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIik7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG4sMikpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89YyhyLG4saSxhKTtvPjFlLTY/KHRbMF09ci9vLHRbMV09bi9vLHRbMl09aS9vLHRbM109YS9vKToodFswXT10WzFdPXRbMl09MCx0WzNdPTEpfWZ1bmN0aW9uIGYodCxlLHIpe3RoaXMucmFkaXVzPW4oW3JdKSx0aGlzLmNlbnRlcj1uKGUpLHRoaXMucm90YXRpb249bih0KSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFJvdGF0aW9uPXRoaXMucm90YXRpb24uY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRFeWU9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1bLjEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLHRoaXMucmVjYWxjTWF0cml4KDApfXZhciBoPWYucHJvdG90eXBlO2gubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMucm90YXRpb24ubGFzdFQoKSl9LGgucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMucm90YXRpb24uY3VydmUodCk7dmFyIGU9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3UoZSxlKTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2EocixlKTt2YXIgbj10aGlzLmNvbXB1dGVkQ2VudGVyLGk9dGhpcy5jb21wdXRlZEV5ZSxvPXRoaXMuY29tcHV0ZWRVcCxzPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2lbMF09blswXStzKnJbMl0saVsxXT1uWzFdK3Mqcls2XSxpWzJdPW5bMl0rcypyWzEwXSxvWzBdPXJbMV0sb1sxXT1yWzVdLG9bMl09cls5XTtmb3IodmFyIGw9MDtsPDM7KytsKXtmb3IodmFyIGM9MCxmPTA7ZjwzOysrZiljKz1yW2wrNCpmXSppW2ZdO3JbMTIrbF09LWN9fSxoLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfSxoLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMucm90YXRpb24uaWRsZSh0KX0saC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLnJvdGF0aW9uLmZsdXNoKHQpfSxoLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9aVsxXSxvPWlbNV0scz1pWzldLGM9bChhLG8scyk7YS89YyxvLz1jLHMvPWM7dmFyIHU9aVswXSxmPWlbNF0saD1pWzhdLHA9dSphK2YqbytoKnMsZD1sKHUtPWEqcCxmLT1vKnAsaC09cypwKTt1Lz1kLGYvPWQsaC89ZDt2YXIgbT1pWzJdLGc9aVs2XSx2PWlbMTBdLHk9bSphK2cqbyt2KnMseD1tKnUrZypmK3YqaCxiPWwobS09eSphK3gqdSxnLT15Km8reCpmLHYtPXkqcyt4KmgpO20vPWIsZy89Yix2Lz1iO3ZhciBfPXUqZSthKnIsdz1mKmUrbypyLFQ9aCplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LFQpO3ZhciBrPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2s9TWF0aC5tYXgoMWUtNCxrK24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGspKX0saC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9aVswXSxvPWlbNF0scz1pWzhdLHU9aVsxXSxmPWlbNV0saD1pWzldLHA9aVsyXSxkPWlbNl0sbT1pWzEwXSxnPWUqYStyKnUsdj1lKm8rcipmLHk9ZSpzK3IqaCx4PS0oZCp5LW0qdiksYj0tKG0qZy1wKnkpLF89LShwKnYtZCpnKSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coeCwyKS1NYXRoLnBvdyhiLDIpLU1hdGgucG93KF8sMikpKSxUPWMoeCxiLF8sdyk7VD4xZS02Pyh4Lz1ULGIvPVQsXy89VCx3Lz1UKTooeD1iPV89MCx3PTEpO3ZhciBrPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixBPWtbMF0sTT1rWzFdLFM9a1syXSxFPWtbM10sTD1BKncrRSp4K00qXy1TKmIsQz1NKncrRSpiK1MqeC1BKl8sUD1TKncrRSpfK0EqYi1NKngsST1FKnctQSp4LU0qYi1TKl87aWYobil7eD1wLGI9ZCxfPW07dmFyIE89TWF0aC5zaW4obikvbCh4LGIsXyk7eCo9TyxiKj1PLF8qPU8sST1JKih3PU1hdGguY29zKGUpKS0oTD1MKncrSSp4K0MqXy1QKmIpKngtKEM9Qyp3K0kqYitQKngtTCpfKSpiLShQPVAqdytJKl8rTCpiLUMqeCkqX312YXIgej1jKEwsQyxQLEkpO3o+MWUtNj8oTC89eixDLz16LFAvPXosSS89eik6KEw9Qz1QPTAsST0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEwsQyxQLEkpfSxoLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBhPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShhLGUscixuKTt2YXIgbz10aGlzLmNvbXB1dGVkUm90YXRpb247cyhvLGFbMF0sYVsxXSxhWzJdLGFbNF0sYVs1XSxhWzZdLGFbOF0sYVs5XSxhWzEwXSksdShvLG8pLHRoaXMucm90YXRpb24uc2V0KHQsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKHZhciBsPTAsYz0wO2M8MzsrK2MpbCs9TWF0aC5wb3cocltjXS1lW2NdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KGwsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LGgudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LGguc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3MocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLHUocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7byhuLGUpO3ZhciBpPW5bMTVdO2lmKE1hdGguYWJzKGkpPjFlLTYpe3ZhciBhPW5bMTJdL2ksbD1uWzEzXS9pLGM9blsxNF0vaTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgZj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxhLW5bMl0qZixsLW5bNl0qZixjLW5bMTBdKmYpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LGguc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0saC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0saC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxoLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0saC5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBpPXQuZGlzdGFuY2U7aSYmaT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhpKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6MjYyLCJmaWx0ZXJlZC12ZWN0b3IiOjY4LCJnbC1tYXQ0L2Zyb21RdWF0Ijo5NSwiZ2wtbWF0NC9pbnZlcnQiOjk4LCJnbC1tYXQ0L2xvb2tBdCI6OTl9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj12b2lkIDAhPT1yP3IrIiI6IiAiLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjI3N31dLDI2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSwyNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTB8ZS5sZW5ndGgsaT10Lmxlbmd0aCxhPVtuZXcgQXJyYXkociksbmV3IEFycmF5KHIpXSxvPTA7bzxyOysrbylhWzBdW29dPVtdLGFbMV1bb109W107Zm9yKG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9dmFyIGw9W107Zm9yKG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGY9MDtmPDI7KytmKWZvcih2YXIgaD1hW2ZdW3JdLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIGQ9aFtwXSxtPWRbMV5mXTtuKGVbdF0sZVtyXSxlW3NdLGVbbV0pPjAmJihvPWQscz1tLGw9Zil9cmV0dXJuIGl8fG8mJmMobyxsKSxzfWZ1bmN0aW9uIGYodCxyKXt2YXIgaT1hW3JdW3RdWzBdLG89W3RdO2MoaSxyKTtmb3IodmFyIHM9aVsxXnJdOzspe2Zvcig7cyE9PXQ7KW8ucHVzaChzKSxzPXUob1tvLmxlbmd0aC0yXSxzLCExKTtpZihhWzBdW3RdLmxlbmd0aCthWzFdW3RdLmxlbmd0aD09PTApYnJlYWs7dmFyIGw9b1tvLmxlbmd0aC0xXSxmPXQsaD1vWzFdLHA9dShsLGYsITApO2lmKG4oZVtsXSxlW2ZdLGVbaF0sZVtwXSk8MClicmVhaztvLnB1c2godCkscz11KGwsZil9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBlWzFdPT09ZVtlLmxlbmd0aC0xXX1mb3Iobz0wO288cjsrK28pZm9yKHZhciBwPTA7cDwyOysrcCl7Zm9yKHZhciBkPVtdO2FbcF1bb10ubGVuZ3RoPjA7KXthWzBdW29dLmxlbmd0aDt2YXIgbT1mKG8scCk7aCgwLG0pP2QucHVzaC5hcHBseShkLG0pOihkLmxlbmd0aD4wJiZsLnB1c2goZCksZD1tKX1kLmxlbmd0aD4wJiZsLnB1c2goZCl9cmV0dXJuIGx9O3ZhciBuPXQoImNvbXBhcmUtYW5nbGUiKX0seyJjb21wYXJlLWFuZ2xlIjo1NH1dLDI2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxpPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsaVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTtpW2NdPSExO3ZhciB1PXJbY107Zm9yKHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGY9dVtzXTswPT0tLWFbZl0mJm8ucHVzaChmKX19dmFyIGg9bmV3IEFycmF5KGUubGVuZ3RoKSxwPVtdO2ZvcihzPTA7czxlLmxlbmd0aDsrK3MpaWYoaVtzXSl7Yz1wLmxlbmd0aDtoW3NdPWMscC5wdXNoKGVbc10pfWVsc2UgaFtzXT0tMTt2YXIgZD1bXTtmb3Iocz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgbT10W3NdO2lbbVswXV0mJmlbbVsxXV0mJmQucHVzaChbaFttWzBdXSxoW21bMV1dXSl9cmV0dXJuW2QscF19O3ZhciBuPXQoImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Iil9LHsiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiOjY2fV0sMjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWModCxlKTt0PXJbMF07Zm9yKHZhciBmPShlPXJbMV0pLmxlbmd0aCxoPSh0Lmxlbmd0aCxuKHQsZS5sZW5ndGgpKSxwPTA7cDxmOysrcClpZihoW3BdLmxlbmd0aCUyPT0xKXRocm93IG5ldyBFcnJvcigicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkIik7dmFyIGQ9aSh0LGUpO3ZhciBtPShkPWQuZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksZj1vKGxbMF0sYVsxXSksaD1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhmLGgpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKSkubGVuZ3RoLGc9bmV3IEFycmF5KG0pLHY9bmV3IEFycmF5KG0pO2ZvcihwPTA7cDxtOysrcCl7Z1twXT1wO3ZhciB5PW5ldyBBcnJheShtKSx4PWRbcF0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSxiPWEoW3hdKSxfPTA7dDpmb3IodmFyIHc9MDt3PG07Kyt3KWlmKHlbd109MCxwIT09dyl7Zm9yKHZhciBUPShIPWRbd10pLmxlbmd0aCxrPTA7azxUOysrayl7dmFyIEE9YihlW0hba11dKTtpZigwIT09QSl7QTwwJiYoeVt3XT0xLF8rPTEpO2NvbnRpbnVlIHR9fXlbd109MSxfKz0xfXZbcF09W18scCx5XX12LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pKTtmb3IocD0wO3A8bTsrK3Ape3ZhciBNPSh5PXZbcF0pWzFdLFM9eVsyXTtmb3Iodz0wO3c8bTsrK3cpU1t3XSYmKGdbd109TSl9dmFyIEU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShtKTtmb3IocD0wO3A8bTsrK3ApRVtwXS5wdXNoKGdbcF0pLEVbZ1twXV0ucHVzaChwKTt2YXIgTD17fSxDPXUoZiwhMSk7Zm9yKHA9MDtwPG07KytwKWZvcihUPShIPWRbcF0pLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIFA9SFt3XSxJPUhbKHcrMSklVF0sTz1NYXRoLm1pbihQLEkpKyI6IitNYXRoLm1heChQLEkpO2lmKE8gaW4gTCl7dmFyIHo9TFtPXTtFW3pdLnB1c2gocCksRVtwXS5wdXNoKHopLENbUF09Q1tJXT0hMH1lbHNlIExbT109cH1mdW5jdGlvbiBEKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighQ1t0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgUj1bXSxGPXUobSwtMSk7Zm9yKHA9MDtwPG07KytwKWdbcF0hPT1wfHxEKGRbcF0pP0ZbcF09LTE6KFIucHVzaChwKSxGW3BdPTApO3I9W107Zm9yKDtSLmxlbmd0aD4wOyl7dmFyIEI9Ui5wb3AoKSxOPUVbQl07bChOLChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGosVT1OLmxlbmd0aCxWPUZbQl07aWYoMD09PVYpe3ZhciBIPWRbQl07aj1bSF19Zm9yKHA9MDtwPFU7KytwKXt2YXIgcT1OW3BdO2lmKCEoRltxXT49MCkpaWYoRltxXT0xXlYsUi5wdXNoKHEpLDA9PT1WKUQoSD1kW3FdKXx8KEgucmV2ZXJzZSgpLGoucHVzaChIKSl9MD09PVYmJnIucHVzaChqKX1yZXR1cm4gcn07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKSxpPXQoInBsYW5hci1kdWFsIiksYT10KCJwb2ludC1pbi1iaWctcG9seWdvbiIpLG89dCgidHdvLXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKSxsPXQoInVuaXEiKSxjPXQoIi4vbGliL3RyaW0tbGVhdmVzIik7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfX0seyIuL2xpYi90cmltLWxlYXZlcyI6MjY3LCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6NjYsInBsYW5hci1kdWFsIjoyNjYsInBvaW50LWluLWJpZy1wb2x5Z29uIjoyNjksInJvYnVzdC1zdW0iOjI4OSwidHdvLXByb2R1Y3QiOjMwNix1bmlxOjMxMH1dLDI2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxhPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgdT10W3NdLGY9dS5sZW5ndGgsaD1mLTEscD0wO3A8ZjtoPXArKyl7dmFyIGQ9dVtoXSxtPXVbcF07ZFswXT09PW1bMF0/YS5wdXNoKFtkLG1dKTpyLnB1c2goW2QsbV0pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PWEubGVuZ3RoP2M6KGc9bChhKSxmdW5jdGlvbih0KXtyZXR1cm4gZyh0WzBdLHRbMV0pPzA6MX0pO3ZhciBnO3ZhciB2PWkocikseT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vLmxlKGUsclswXSk7aWYoaTwwKXJldHVybiAxO3ZhciBhPXRbaV07aWYoIWEpe2lmKCEoaT4wJiZlW2ldPT09clswXSkpcmV0dXJuIDE7YT10W2ktMV19Zm9yKHZhciBzPTE7YTspe3ZhciBsPWEua2V5LGM9bihyLGxbMF0sbFsxXSk7aWYobFswXVswXTxsWzFdWzBdKWlmKGM8MClhPWEubGVmdDtlbHNle2lmKCEoYz4wKSlyZXR1cm4gMDtzPS0xLGE9YS5yaWdodH1lbHNlIGlmKGM+MClhPWEubGVmdDtlbHNle2lmKCEoYzwwKSlyZXR1cm4gMDtzPTEsYT1hLnJpZ2h0fX1yZXR1cm4gc319KHYuc2xhYnMsdi5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1hLmxlbmd0aD95OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX0obChhKSx5KX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10saT10KCJzbGFiLWRlY29tcG9zaXRpb24iKSxhPXQoImludGVydmFsLXRyZWUtMWQiKSxvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxpPW5bMF1bMF0sbz1uWzBdWzFdLGw9blsxXVsxXSxjPVtNYXRoLm1pbihvLGwpLE1hdGgubWF4KG8sbCldO2kgaW4gZT9lW2ldLnB1c2goYyk6ZVtpXT1bY119dmFyIHU9e30sZj1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8Zi5sZW5ndGg7KytyKXt2YXIgaD1lW2Zbcl1dO3VbZltyXV09YShoKX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXTtyZXR1cm4hIW4mJiEhbi5xdWVyeVBvaW50KHIscyl9fSh1KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImludGVydmFsLXRyZWUtMWQiOjIzNCwicm9idXN0LW9yaWVudGF0aW9uIjoyODQsInNsYWItZGVjb21wb3NpdGlvbiI6Mjk5fV0sMjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxmPTAsaD0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIG09aVtsXSxnPWFbbF0sdj1uW2xdO2MrPW0qbSx1Kz1tKmcsZis9ZypnLGgrPXYqbSxwKz12KmcsZCs9dip2fXZhciB5LHgsYixfLHcsVD1NYXRoLmFicyhjKmYtdSp1KSxrPXUqcC1mKmgsQT11KmgtYypwO2lmKGsrQTw9VClpZihrPDApQTwwJiZoPDA/KEE9MCwtaD49Yz8oaz0xLHk9YysyKmgrZCk6eT1oKihrPS1oL2MpK2QpOihrPTAscD49MD8oQT0wLHk9ZCk6LXA+PWY/KEE9MSx5PWYrMipwK2QpOnk9cCooQT0tcC9mKStkKTtlbHNlIGlmKEE8MClBPTAsaD49MD8oaz0wLHk9ZCk6LWg+PWM/KGs9MSx5PWMrMipoK2QpOnk9aCooaz0taC9jKStkO2Vsc2V7dmFyIE09MS9UO3k9KGsqPU0pKihjKmsrdSooQSo9TSkrMipoKStBKih1KmsrZipBKzIqcCkrZH1lbHNlIGs8MD8oYj1mK3ApPih4PXUraCk/KF89Yi14KT49KHc9Yy0yKnUrZik/KGs9MSxBPTAseT1jKzIqaCtkKTp5PShrPV8vdykqKGMqayt1KihBPTEtaykrMipoKStBKih1KmsrZipBKzIqcCkrZDooaz0wLGI8PTA/KEE9MSx5PWYrMipwK2QpOnA+PTA/KEE9MCx5PWQpOnk9cCooQT0tcC9mKStkKTpBPDA/KGI9YytoKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2YpPyhBPTEsaz0wLHk9ZisyKnArZCk6eT0oaz0xLShBPV8vdykpKihjKmsrdSpBKzIqaCkrQSoodSprK2YqQSsyKnApK2Q6KEE9MCxiPD0wPyhrPTEseT1jKzIqaCtkKTpoPj0wPyhrPTAseT1kKTp5PWgqKGs9LWgvYykrZCk6KF89ZitwLXUtaCk8PTA/KGs9MCxBPTEseT1mKzIqcCtkKTpfPj0odz1jLTIqdStmKT8oaz0xLEE9MCx5PWMrMipoK2QpOnk9KGs9Xy93KSooYyprK3UqKEE9MS1rKSsyKmgpK0EqKHUqaytmKkErMipwKStkO3ZhciBTPTEtay1BO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rayplW2xdK0EqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSwyNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiZ2wtcXVhdC9zbGVycCIpfSx7ImdsLXF1YXQvc2xlcnAiOjEyNH1dLDI3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9hZGQiOjE1fV0sMjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KCJiaWctcmF0Iil9LHsiYmlnLXJhdCI6MTh9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdCIpLGk9dCgiYmlnLXJhdC9tdWwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bihlKSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109aSh0W3NdLHIpO3JldHVybiBvfX0seyJiaWctcmF0IjoxOCwiYmlnLXJhdC9tdWwiOjI3fV0sMjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L3N1YiI6Mjl9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5zb3J0KGkpO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbz0wO288ZTsrK28pe3ZhciBzPXRbb10sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciBjPXRbci0xXTtpZigwPT09bihzLGMpJiZhKGMpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9fSx7ImNlbGwtb3JpZW50YXRpb24iOjQ3LCJjb21wYXJlLWNlbGwiOjU2LCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjU3fV0sMjc3OltmdW5jdGlvbih0LGUscil7Ci8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8dm9pZCAwPT09biluPXQsaT0iIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSwyNzg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx2b2lkIDAhPT1uP246InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDI3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldOyhsPW8tKChyPWErbyktYSkpJiYodFstLW5dPXIscj1sKX12YXIgcz0wO2ZvcihpPW47aTxlOysraSl7dmFyIGw7YT10W2ldOyhsPShvPXIpLSgocj1hK28pLWEpKSYmKHRbcysrXT1sKX1yZXR1cm4gdFtzKytdPXIsdC5sZW5ndGg9cyx0fX0se31dLDI4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3QtY29tcHJlc3MiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbih0KHIoZVswXVswXSxlWzFdWzFdKSxyKC1lWzBdWzFdLGVbMV1bMF0pKSl9fWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuKHQoZSh0KHIoaVsxXVsxXSxpWzJdWzJdKSxyKC1pWzFdWzJdLGlbMl1bMV0pKSxpWzBdWzBdKSx0KGUodChyKGlbMV1bMF0saVsyXVsyXSkscigtaVsxXVsyXSxpWzJdWzBdKSksLWlbMF1bMV0pLGUodChyKGlbMV1bMF0saVsyXVsxXSkscigtaVsxXVsxXSxpWzJdWzBdKSksaVswXVsyXSkpKSl9fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuKHQodChlKHQoZSh0KHIoaVsyXVsyXSxpWzNdWzNdKSxyKC1pWzJdWzNdLGlbM11bMl0pKSxpWzFdWzFdKSx0KGUodChyKGlbMl1bMV0saVszXVszXSkscigtaVsyXVszXSxpWzNdWzFdKSksLWlbMV1bMl0pLGUodChyKGlbMl1bMV0saVszXVsyXSkscigtaVsyXVsyXSxpWzNdWzFdKSksaVsxXVszXSkpKSxpWzBdWzBdKSxlKHQoZSh0KHIoaVsyXVsyXSxpWzNdWzNdKSxyKC1pWzJdWzNdLGlbM11bMl0pKSxpWzFdWzBdKSx0KGUodChyKGlbMl1bMF0saVszXVszXSkscigtaVsyXVszXSxpWzNdWzBdKSksLWlbMV1bMl0pLGUodChyKGlbMl1bMF0saVszXVsyXSkscigtaVsyXVsyXSxpWzNdWzBdKSksaVsxXVszXSkpKSwtaVswXVsxXSkpLHQoZSh0KGUodChyKGlbMl1bMV0saVszXVszXSkscigtaVsyXVszXSxpWzNdWzFdKSksaVsxXVswXSksdChlKHQocihpWzJdWzBdLGlbM11bM10pLHIoLWlbMl1bM10saVszXVswXSkpLC1pWzFdWzFdKSxlKHQocihpWzJdWzBdLGlbM11bMV0pLHIoLWlbMl1bMV0saVszXVswXSkpLGlbMV1bM10pKSksaVswXVsyXSksZSh0KGUodChyKGlbMl1bMV0saVszXVsyXSkscigtaVsyXVsyXSxpWzNdWzFdKSksaVsxXVswXSksdChlKHQocihpWzJdWzBdLGlbM11bMl0pLHIoLWlbMl1bMl0saVszXVswXSkpLC1pWzFdWzFdKSxlKHQocihpWzJdWzBdLGlbM11bMV0pLHIoLWlbMl1bMV0saVszXVswXSkpLGlbMV1bMl0pKSksLWlbMF1bM10pKSkpfX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbih0KHQoZSh0KHQoZSh0KGUodChyKGlbM11bM10saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzNdKSksaVsyXVsyXSksdChlKHQocihpWzNdWzJdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsyXSkpLC1pWzJdWzNdKSxlKHQocihpWzNdWzJdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVsyXSkpLGlbMl1bNF0pKSksaVsxXVsxXSksZSh0KGUodChyKGlbM11bM10saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzNdKSksaVsyXVsxXSksdChlKHQocihpWzNdWzFdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsxXSkpLC1pWzJdWzNdKSxlKHQocihpWzNdWzFdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVsxXSkpLGlbMl1bNF0pKSksLWlbMV1bMl0pKSx0KGUodChlKHQocihpWzNdWzJdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsyXSkpLGlbMl1bMV0pLHQoZSh0KHIoaVszXVsxXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMV0pKSwtaVsyXVsyXSksZSh0KHIoaVszXVsxXSxpWzRdWzJdKSxyKC1pWzNdWzJdLGlbNF1bMV0pKSxpWzJdWzRdKSkpLGlbMV1bM10pLGUodChlKHQocihpWzNdWzJdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVsyXSkpLGlbMl1bMV0pLHQoZSh0KHIoaVszXVsxXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMV0pKSwtaVsyXVsyXSksZSh0KHIoaVszXVsxXSxpWzRdWzJdKSxyKC1pWzNdWzJdLGlbNF1bMV0pKSxpWzJdWzNdKSkpLC1pWzFdWzRdKSkpLGlbMF1bMF0pLGUodCh0KGUodChlKHQocihpWzNdWzNdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVszXSkpLGlbMl1bMl0pLHQoZSh0KHIoaVszXVsyXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMl0pKSwtaVsyXVszXSksZSh0KHIoaVszXVsyXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMl0pKSxpWzJdWzRdKSkpLGlbMV1bMF0pLGUodChlKHQocihpWzNdWzNdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVszXSkpLGlbMl1bMF0pLHQoZSh0KHIoaVszXVswXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMF0pKSwtaVsyXVszXSksZSh0KHIoaVszXVswXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMF0pKSxpWzJdWzRdKSkpLC1pWzFdWzJdKSksdChlKHQoZSh0KHIoaVszXVsyXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMl0pKSxpWzJdWzBdKSx0KGUodChyKGlbM11bMF0saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzBdKSksLWlbMl1bMl0pLGUodChyKGlbM11bMF0saVs0XVsyXSkscigtaVszXVsyXSxpWzRdWzBdKSksaVsyXVs0XSkpKSxpWzFdWzNdKSxlKHQoZSh0KHIoaVszXVsyXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMl0pKSxpWzJdWzBdKSx0KGUodChyKGlbM11bMF0saVs0XVszXSkscigtaVszXVszXSxpWzRdWzBdKSksLWlbMl1bMl0pLGUodChyKGlbM11bMF0saVs0XVsyXSkscigtaVszXVsyXSxpWzRdWzBdKSksaVsyXVszXSkpKSwtaVsxXVs0XSkpKSwtaVswXVsxXSkpLHQoZSh0KHQoZSh0KGUodChyKGlbM11bM10saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzNdKSksaVsyXVsxXSksdChlKHQocihpWzNdWzFdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsxXSkpLC1pWzJdWzNdKSxlKHQocihpWzNdWzFdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVsxXSkpLGlbMl1bNF0pKSksaVsxXVswXSksZSh0KGUodChyKGlbM11bM10saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzNdKSksaVsyXVswXSksdChlKHQocihpWzNdWzBdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVswXSkpLC1pWzJdWzNdKSxlKHQocihpWzNdWzBdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVswXSkpLGlbMl1bNF0pKSksLWlbMV1bMV0pKSx0KGUodChlKHQocihpWzNdWzFdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsxXSkpLGlbMl1bMF0pLHQoZSh0KHIoaVszXVswXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMF0pKSwtaVsyXVsxXSksZSh0KHIoaVszXVswXSxpWzRdWzFdKSxyKC1pWzNdWzFdLGlbNF1bMF0pKSxpWzJdWzRdKSkpLGlbMV1bM10pLGUodChlKHQocihpWzNdWzFdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVsxXSkpLGlbMl1bMF0pLHQoZSh0KHIoaVszXVswXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMF0pKSwtaVsyXVsxXSksZSh0KHIoaVszXVswXSxpWzRdWzFdKSxyKC1pWzNdWzFdLGlbNF1bMF0pKSxpWzJdWzNdKSkpLC1pWzFdWzRdKSkpLGlbMF1bMl0pLHQoZSh0KHQoZSh0KGUodChyKGlbM11bMl0saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzJdKSksaVsyXVsxXSksdChlKHQocihpWzNdWzFdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsxXSkpLC1pWzJdWzJdKSxlKHQocihpWzNdWzFdLGlbNF1bMl0pLHIoLWlbM11bMl0saVs0XVsxXSkpLGlbMl1bNF0pKSksaVsxXVswXSksZSh0KGUodChyKGlbM11bMl0saVs0XVs0XSkscigtaVszXVs0XSxpWzRdWzJdKSksaVsyXVswXSksdChlKHQocihpWzNdWzBdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVswXSkpLC1pWzJdWzJdKSxlKHQocihpWzNdWzBdLGlbNF1bMl0pLHIoLWlbM11bMl0saVs0XVswXSkpLGlbMl1bNF0pKSksLWlbMV1bMV0pKSx0KGUodChlKHQocihpWzNdWzFdLGlbNF1bNF0pLHIoLWlbM11bNF0saVs0XVsxXSkpLGlbMl1bMF0pLHQoZSh0KHIoaVszXVswXSxpWzRdWzRdKSxyKC1pWzNdWzRdLGlbNF1bMF0pKSwtaVsyXVsxXSksZSh0KHIoaVszXVswXSxpWzRdWzFdKSxyKC1pWzNdWzFdLGlbNF1bMF0pKSxpWzJdWzRdKSkpLGlbMV1bMl0pLGUodChlKHQocihpWzNdWzFdLGlbNF1bMl0pLHIoLWlbM11bMl0saVs0XVsxXSkpLGlbMl1bMF0pLHQoZSh0KHIoaVszXVswXSxpWzRdWzJdKSxyKC1pWzNdWzJdLGlbNF1bMF0pKSwtaVsyXVsxXSksZSh0KHIoaVszXVswXSxpWzRdWzFdKSxyKC1pWzNdWzFdLGlbNF1bMF0pKSxpWzJdWzJdKSkpLC1pWzFdWzRdKSkpLC1pWzBdWzNdKSxlKHQodChlKHQoZSh0KHIoaVszXVsyXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMl0pKSxpWzJdWzFdKSx0KGUodChyKGlbM11bMV0saVs0XVszXSkscigtaVszXVszXSxpWzRdWzFdKSksLWlbMl1bMl0pLGUodChyKGlbM11bMV0saVs0XVsyXSkscigtaVszXVsyXSxpWzRdWzFdKSksaVsyXVszXSkpKSxpWzFdWzBdKSxlKHQoZSh0KHIoaVszXVsyXSxpWzRdWzNdKSxyKC1pWzNdWzNdLGlbNF1bMl0pKSxpWzJdWzBdKSx0KGUodChyKGlbM11bMF0saVs0XVszXSkscigtaVszXVszXSxpWzRdWzBdKSksLWlbMl1bMl0pLGUodChyKGlbM11bMF0saVs0XVsyXSkscigtaVszXVsyXSxpWzRdWzBdKSksaVsyXVszXSkpKSwtaVsxXVsxXSkpLHQoZSh0KGUodChyKGlbM11bMV0saVs0XVszXSkscigtaVszXVszXSxpWzRdWzFdKSksaVsyXVswXSksdChlKHQocihpWzNdWzBdLGlbNF1bM10pLHIoLWlbM11bM10saVs0XVswXSkpLC1pWzJdWzFdKSxlKHQocihpWzNdWzBdLGlbNF1bMV0pLHIoLWlbM11bMV0saVs0XVswXSkpLGlbMl1bM10pKSksaVsxXVsyXSksZSh0KGUodChyKGlbM11bMV0saVs0XVsyXSkscigtaVszXVsyXSxpWzRdWzFdKSksaVsyXVswXSksdChlKHQocihpWzNdWzBdLGlbNF1bMl0pLHIoLWlbM11bMl0saVs0XVswXSkpLC1pWzJdWzFdKSxlKHQocihpWzNdWzBdLGlbNF1bMV0pLHIoLWlbM11bMV0saVs0XVswXSkpLGlbMl1bMl0pKSksLWlbMV1bM10pKSksaVswXVs0XSkpKSkpfX1mdW5jdGlvbiBmKHQpe3JldHVybigyPT09dD9zOjM9PT10P2w6ND09PXQ/Yzo1PT09dD91OnZvaWQgMCkoaSxhLG4sbyl9dmFyIGg9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTtmdW5jdGlvbiBwKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3N3aXRjaChsLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0KGwpO2Nhc2UgMTpyZXR1cm4gZShsKTtjYXNlIDI6cmV0dXJuIHIobCk7Y2FzZSAzOnJldHVybiBuKGwpO2Nhc2UgNDpyZXR1cm4gaShsKTtjYXNlIDU6cmV0dXJuIGEobCl9dmFyIGM9b1tsLmxlbmd0aF07cmV0dXJuIGN8fChjPW9bbC5sZW5ndGhdPXMobC5sZW5ndGgpKSxjKGwpfX0hZnVuY3Rpb24oKXtmb3IoO2gubGVuZ3RoPDY7KWgucHVzaChmKGgubGVuZ3RoKSk7ZS5leHBvcnRzPXAuYXBwbHkodm9pZCAwLGguY29uY2F0KFtoLGZdKSk7Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpZS5leHBvcnRzW3RdPWhbdF19KCl9LHsicm9idXN0LWNvbXByZXNzIjoyNzksInJvYnVzdC1zY2FsZSI6Mjg2LCJyb2J1c3Qtc3VtIjoyODksInR3by1wcm9kdWN0IjozMDZ9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc3VtIjoyODksInR3by1wcm9kdWN0IjozMDZ9XSwyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zdWJ0cmFjdCIpLG89dCgicm9idXN0LXNjYWxlIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4oMz09PXQ/bDo0PT09dD9jOjU9PT10P3U6ZikoaSxhLG4sbyl9ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzPXIoaVswXSxpWzBdKSxsPW4ocyxhWzBdKSxjPW4ocyxvWzBdKSx1PXIoYVswXSxhWzBdKSxmPW4odSxpWzBdKSxoPW4odSxvWzBdKSxwPXIob1swXSxvWzBdKSxkPW4ocCxpWzBdKSxtPW4ocCxhWzBdKSxnPXQoZShtLGgpLGUoZixsKSksdj1lKGQsYykseT1lKGcsdik7cmV0dXJuIHlbeS5sZW5ndGgtMV19fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPXQocihpWzBdLGlbMF0pLHIoaVsxXSxpWzFdKSksYz1uKGwsYVswXSksdT1uKGwsb1swXSksZj1uKGwsc1swXSksaD10KHIoYVswXSxhWzBdKSxyKGFbMV0sYVsxXSkpLHA9bihoLGlbMF0pLGQ9bihoLG9bMF0pLG09bihoLHNbMF0pLGc9dChyKG9bMF0sb1swXSkscihvWzFdLG9bMV0pKSx2PW4oZyxpWzBdKSx5PW4oZyxhWzBdKSx4PW4oZyxzWzBdKSxiPXQocihzWzBdLHNbMF0pLHIoc1sxXSxzWzFdKSksXz1uKGIsaVswXSksdz1uKGIsYVswXSksVD1uKGIsb1swXSksaz10KHQobihlKFQseCksYVsxXSksdChuKGUodyxtKSwtb1sxXSksbihlKHksZCksc1sxXSkpKSx0KG4oZSh3LG0pLGlbMV0pLHQobihlKF8sZiksLWFbMV0pLG4oZShwLGMpLHNbMV0pKSkpLEE9dCh0KG4oZShULHgpLGlbMV0pLHQobihlKF8sZiksLW9bMV0pLG4oZSh2LHUpLHNbMV0pKSksdChuKGUoeSxkKSxpWzFdKSx0KG4oZSh2LHUpLC1hWzFdKSxuKGUocCxjKSxvWzFdKSkpKSxNPWUoayxBKTtyZXR1cm4gTVtNLmxlbmd0aC0xXX19ZnVuY3Rpb24gdSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyxsKXt2YXIgYz10KHIoaVswXSxpWzBdKSx0KHIoaVsxXSxpWzFdKSxyKGlbMl0saVsyXSkpKSx1PW4oYyxhWzBdKSxmPW4oYyxvWzBdKSxoPW4oYyxzWzBdKSxwPW4oYyxsWzBdKSxkPXQocihhWzBdLGFbMF0pLHQocihhWzFdLGFbMV0pLHIoYVsyXSxhWzJdKSkpLG09bihkLGlbMF0pLGc9bihkLG9bMF0pLHY9bihkLHNbMF0pLHk9bihkLGxbMF0pLHg9dChyKG9bMF0sb1swXSksdChyKG9bMV0sb1sxXSkscihvWzJdLG9bMl0pKSksYj1uKHgsaVswXSksXz1uKHgsYVswXSksdz1uKHgsc1swXSksVD1uKHgsbFswXSksaz10KHIoc1swXSxzWzBdKSx0KHIoc1sxXSxzWzFdKSxyKHNbMl0sc1syXSkpKSxBPW4oayxpWzBdKSxNPW4oayxhWzBdKSxTPW4oayxvWzBdKSxFPW4oayxsWzBdKSxMPXQocihsWzBdLGxbMF0pLHQocihsWzFdLGxbMV0pLHIobFsyXSxsWzJdKSkpLEM9bihMLGlbMF0pLFA9bihMLGFbMF0pLEk9bihMLG9bMF0pLE89bihMLHNbMF0pLHo9dCh0KHQobih0KG4oZShPLEUpLG9bMV0pLHQobihlKEksVCksLXNbMV0pLG4oZShTLHcpLGxbMV0pKSksYVsyXSksdChuKHQobihlKE8sRSksYVsxXSksdChuKGUoUCx5KSwtc1sxXSksbihlKE0sdiksbFsxXSkpKSwtb1syXSksbih0KG4oZShJLFQpLGFbMV0pLHQobihlKFAseSksLW9bMV0pLG4oZShfLGcpLGxbMV0pKSksc1syXSkpKSx0KG4odChuKGUoUyx3KSxhWzFdKSx0KG4oZShNLHYpLC1vWzFdKSxuKGUoXyxnKSxzWzFdKSkpLC1sWzJdKSx0KG4odChuKGUoTyxFKSxhWzFdKSx0KG4oZShQLHkpLC1zWzFdKSxuKGUoTSx2KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoTyxFKSxpWzFdKSx0KG4oZShDLHApLC1zWzFdKSxuKGUoQSxoKSxsWzFdKSkpLC1hWzJdKSkpKSx0KHQobih0KG4oZShQLHkpLGlbMV0pLHQobihlKEMscCksLWFbMV0pLG4oZShtLHUpLGxbMV0pKSksc1syXSksdChuKHQobihlKE0sdiksaVsxXSksdChuKGUoQSxoKSwtYVsxXSksbihlKG0sdSksc1sxXSkpKSwtbFsyXSksbih0KG4oZShTLHcpLGFbMV0pLHQobihlKE0sdiksLW9bMV0pLG4oZShfLGcpLHNbMV0pKSksaVsyXSkpKSx0KG4odChuKGUoUyx3KSxpWzFdKSx0KG4oZShBLGgpLC1vWzFdKSxuKGUoYixmKSxzWzFdKSkpLC1hWzJdKSx0KG4odChuKGUoTSx2KSxpWzFdKSx0KG4oZShBLGgpLC1hWzFdKSxuKGUobSx1KSxzWzFdKSkpLG9bMl0pLG4odChuKGUoXyxnKSxpWzFdKSx0KG4oZShiLGYpLC1hWzFdKSxuKGUobSx1KSxvWzFdKSkpLC1zWzJdKSkpKSksRD10KHQodChuKHQobihlKE8sRSksb1sxXSksdChuKGUoSSxUKSwtc1sxXSksbihlKFMsdyksbFsxXSkpKSxpWzJdKSxuKHQobihlKE8sRSksaVsxXSksdChuKGUoQyxwKSwtc1sxXSksbihlKEEsaCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShJLFQpLGlbMV0pLHQobihlKEMscCksLW9bMV0pLG4oZShiLGYpLGxbMV0pKSksc1syXSksbih0KG4oZShTLHcpLGlbMV0pLHQobihlKEEsaCksLW9bMV0pLG4oZShiLGYpLHNbMV0pKSksLWxbMl0pKSksdCh0KG4odChuKGUoSSxUKSxhWzFdKSx0KG4oZShQLHkpLC1vWzFdKSxuKGUoXyxnKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoSSxUKSxpWzFdKSx0KG4oZShDLHApLC1vWzFdKSxuKGUoYixmKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFAseSksaVsxXSksdChuKGUoQyxwKSwtYVsxXSksbihlKG0sdSksbFsxXSkpKSxvWzJdKSxuKHQobihlKF8sZyksaVsxXSksdChuKGUoYixmKSwtYVsxXSksbihlKG0sdSksb1sxXSkpKSwtbFsyXSkpKSksUj1lKHosRCk7cmV0dXJuIFJbUi5sZW5ndGgtMV19fWZ1bmN0aW9uIGYodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCxjKXt2YXIgdT10KHQocihpWzBdLGlbMF0pLHIoaVsxXSxpWzFdKSksdChyKGlbMl0saVsyXSkscihpWzNdLGlbM10pKSksZj1uKHUsYVswXSksaD1uKHUsb1swXSkscD1uKHUsc1swXSksZD1uKHUsbFswXSksbT1uKHUsY1swXSksZz10KHQocihhWzBdLGFbMF0pLHIoYVsxXSxhWzFdKSksdChyKGFbMl0sYVsyXSkscihhWzNdLGFbM10pKSksdj1uKGcsaVswXSkseT1uKGcsb1swXSkseD1uKGcsc1swXSksYj1uKGcsbFswXSksXz1uKGcsY1swXSksdz10KHQocihvWzBdLG9bMF0pLHIob1sxXSxvWzFdKSksdChyKG9bMl0sb1syXSkscihvWzNdLG9bM10pKSksVD1uKHcsaVswXSksaz1uKHcsYVswXSksQT1uKHcsc1swXSksTT1uKHcsbFswXSksUz1uKHcsY1swXSksRT10KHQocihzWzBdLHNbMF0pLHIoc1sxXSxzWzFdKSksdChyKHNbMl0sc1syXSkscihzWzNdLHNbM10pKSksTD1uKEUsaVswXSksQz1uKEUsYVswXSksUD1uKEUsb1swXSksST1uKEUsbFswXSksTz1uKEUsY1swXSksej10KHQocihsWzBdLGxbMF0pLHIobFsxXSxsWzFdKSksdChyKGxbMl0sbFsyXSkscihsWzNdLGxbM10pKSksRD1uKHosaVswXSksUj1uKHosYVswXSksRj1uKHosb1swXSksQj1uKHosc1swXSksTj1uKHosY1swXSksaj10KHQocihjWzBdLGNbMF0pLHIoY1sxXSxjWzFdKSksdChyKGNbMl0sY1syXSkscihjWzNdLGNbM10pKSksVT1uKGosaVswXSksVj1uKGosYVswXSksSD1uKGosb1swXSkscT1uKGosc1swXSksRz1uKGosbFswXSksWT10KHQodChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxvWzJdKSxuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksLWNbMl0pKSksYVszXSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLWNbMl0pKSksLW9bM10pLG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGFbMl0pLG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSwtY1syXSkpKSxzWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxhWzJdKSxuKHQobihlKHEsTyksYVsxXSksdChuKGUoVixfKSwtc1sxXSksbihlKEMseCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWNbMl0pKSksLWxbM10pLG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGFbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSwtbFsyXSkpKSxjWzNdKSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLWNbMl0pKSksaVszXSksbih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1jWzJdKSkpLC1hWzNdKSkpKSx0KHQodChuKHQodChuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksbFsyXSksbih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksLWNbMl0pKSksc1szXSksbih0KHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksaVsyXSksbih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSksdChuKHQodChuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSxpWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksc1syXSksbih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksLWxbMl0pKSksY1szXSksbih0KHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksYVsyXSksbih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1jWzJdKSkpLGlbM10pKSksdCh0KG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtY1syXSkpKSwtYVszXSksbih0KHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksaVsyXSksbih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1jWzJdKSkpLG9bM10pKSx0KG4odCh0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLGlbMl0pLG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtY1syXSkpKSwtc1szXSksbih0KHQobih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksaVsyXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1zWzJdKSkpLGNbM10pKSkpKSxXPXQodCh0KG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLG9bMl0pLG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSwtY1syXSkpKSxpWzNdKSx0KG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtY1syXSkpKSwtb1szXSksbih0KHQobih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1jWzJdKSkpLHNbM10pKSksdCh0KG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtY1syXSkpKSwtbFszXSksbih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1sWzJdKSkpLGNbM10pKSx0KG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGFbMl0pLG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSwtY1syXSkpKSxpWzNdKSxuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGlbMV0pLHQobihlKEQsZCksLW9bMV0pLG4oZShULGgpLGxbMV0pKSksLWNbMl0pKSksLWFbM10pKSkpLHQodCh0KG4odCh0KG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxsWzJdKSxuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSwtY1syXSkpKSxvWzNdKSxuKHQodChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWNbMl0pKSksLWxbM10pKSx0KG4odCh0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtbFsyXSkpKSxjWzNdKSxuKHQodChuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSxhWzJdKSxuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWxbMl0pKSksaVszXSkpKSx0KHQobih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1sWzJdKSkpLC1hWzNdKSxuKHQodChuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSxpWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksc1syXSksbih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksLWxbMl0pKSksb1szXSkpLHQobih0KHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksaVsyXSksbih0KG4oZShGLE0pLGlbMV0pLHQobihlKEQsZCksLW9bMV0pLG4oZShULGgpLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1sWzJdKSkpLC1zWzNdKSxuKHQodChuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSxpWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLXNbMl0pKSksbFszXSkpKSkpLFg9ZShZLFcpO3JldHVybiBYW1gubGVuZ3RoLTFdfX12YXIgaD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dO2Z1bmN0aW9uIHAodCl7dmFyIGU9aFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWhbdC5sZW5ndGhdPXModC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBkKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKGUscixsLGMsdSxmKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIG4oZSxyKTtjYXNlIDM6cmV0dXJuIGkoZSxyLGwpO2Nhc2UgNDpyZXR1cm4gYShlLHIsbCxjKTtjYXNlIDU6cmV0dXJuIG8oZSxyLGwsYyx1KTtjYXNlIDY6cmV0dXJuIHMoZSxyLGwsYyx1LGYpfWZvcih2YXIgaD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscD0wO3A8YXJndW1lbnRzLmxlbmd0aDsrK3ApaFtwXT1hcmd1bWVudHNbcF07cmV0dXJuIHQoaCl9fSFmdW5jdGlvbigpe2Zvcig7aC5sZW5ndGg8PTY7KWgucHVzaChzKGgubGVuZ3RoKSk7ZS5leHBvcnRzPWQuYXBwbHkodm9pZCAwLFtwXS5jb25jYXQoaCkpO2Zvcih2YXIgdD0wO3Q8PTY7Kyt0KWUuZXhwb3J0c1t0XT1oW3RdfSgpfSx7InJvYnVzdC1zY2FsZSI6Mjg2LCJyb2J1c3Qtc3VidHJhY3QiOjI4OCwicm9idXN0LXN1bSI6Mjg5LCJ0d28tcHJvZHVjdCI6MzA2fV0sMjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kZXRlcm1pbmFudCIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9Mj09PXQ/YTozPT09dD9vOjQ9PT10P3M6NT09PXQ/bDpjO3JldHVybiBlKHQ8Nj9uW3RdOm4pfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuW3QoW1srclswXSwrZVswXVsxXV0sWytyWzFdLCtlWzFdWzFdXV0pLHQoW1srZVswXVswXSwrclswXV0sWytlWzFdWzBdLCtyWzFdXV0pLHQoZSldfX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblt0KFtbK3JbMF0sK2VbMF1bMV0sK2VbMF1bMl1dLFsrclsxXSwrZVsxXVsxXSwrZVsxXVsyXV0sWytyWzJdLCtlWzJdWzFdLCtlWzJdWzJdXV0pLHQoW1srZVswXVswXSwrclswXSwrZVswXVsyXV0sWytlWzFdWzBdLCtyWzFdLCtlWzFdWzJdXSxbK2VbMl1bMF0sK3JbMl0sK2VbMl1bMl1dXSksdChbWytlWzBdWzBdLCtlWzBdWzFdLCtyWzBdXSxbK2VbMV1bMF0sK2VbMV1bMV0sK3JbMV1dLFsrZVsyXVswXSwrZVsyXVsxXSwrclsyXV1dKSx0KGUpXX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm5bdChbWytyWzBdLCtlWzBdWzFdLCtlWzBdWzJdLCtlWzBdWzNdXSxbK3JbMV0sK2VbMV1bMV0sK2VbMV1bMl0sK2VbMV1bM11dLFsrclsyXSwrZVsyXVsxXSwrZVsyXVsyXSwrZVsyXVszXV0sWytyWzNdLCtlWzNdWzFdLCtlWzNdWzJdLCtlWzNdWzNdXV0pLHQoW1srZVswXVswXSwrclswXSwrZVswXVsyXSwrZVswXVszXV0sWytlWzFdWzBdLCtyWzFdLCtlWzFdWzJdLCtlWzFdWzNdXSxbK2VbMl1bMF0sK3JbMl0sK2VbMl1bMl0sK2VbMl1bM11dLFsrZVszXVswXSwrclszXSwrZVszXVsyXSwrZVszXVszXV1dKSx0KFtbK2VbMF1bMF0sK2VbMF1bMV0sK3JbMF0sK2VbMF1bM11dLFsrZVsxXVswXSwrZVsxXVsxXSwrclsxXSwrZVsxXVszXV0sWytlWzJdWzBdLCtlWzJdWzFdLCtyWzJdLCtlWzJdWzNdXSxbK2VbM11bMF0sK2VbM11bMV0sK3JbM10sK2VbM11bM11dXSksdChbWytlWzBdWzBdLCtlWzBdWzFdLCtlWzBdWzJdLCtyWzBdXSxbK2VbMV1bMF0sK2VbMV1bMV0sK2VbMV1bMl0sK3JbMV1dLFsrZVsyXVswXSwrZVsyXVsxXSwrZVsyXVsyXSwrclsyXV0sWytlWzNdWzBdLCtlWzNdWzFdLCtlWzNdWzJdLCtyWzNdXV0pLHQoZSldfX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblt0KFtbK3JbMF0sK2VbMF1bMV0sK2VbMF1bMl0sK2VbMF1bM10sK2VbMF1bNF1dLFsrclsxXSwrZVsxXVsxXSwrZVsxXVsyXSwrZVsxXVszXSwrZVsxXVs0XV0sWytyWzJdLCtlWzJdWzFdLCtlWzJdWzJdLCtlWzJdWzNdLCtlWzJdWzRdXSxbK3JbM10sK2VbM11bMV0sK2VbM11bMl0sK2VbM11bM10sK2VbM11bNF1dLFsrcls0XSwrZVs0XVsxXSwrZVs0XVsyXSwrZVs0XVszXSwrZVs0XVs0XV1dKSx0KFtbK2VbMF1bMF0sK3JbMF0sK2VbMF1bMl0sK2VbMF1bM10sK2VbMF1bNF1dLFsrZVsxXVswXSwrclsxXSwrZVsxXVsyXSwrZVsxXVszXSwrZVsxXVs0XV0sWytlWzJdWzBdLCtyWzJdLCtlWzJdWzJdLCtlWzJdWzNdLCtlWzJdWzRdXSxbK2VbM11bMF0sK3JbM10sK2VbM11bMl0sK2VbM11bM10sK2VbM11bNF1dLFsrZVs0XVswXSwrcls0XSwrZVs0XVsyXSwrZVs0XVszXSwrZVs0XVs0XV1dKSx0KFtbK2VbMF1bMF0sK2VbMF1bMV0sK3JbMF0sK2VbMF1bM10sK2VbMF1bNF1dLFsrZVsxXVswXSwrZVsxXVsxXSwrclsxXSwrZVsxXVszXSwrZVsxXVs0XV0sWytlWzJdWzBdLCtlWzJdWzFdLCtyWzJdLCtlWzJdWzNdLCtlWzJdWzRdXSxbK2VbM11bMF0sK2VbM11bMV0sK3JbM10sK2VbM11bM10sK2VbM11bNF1dLFsrZVs0XVswXSwrZVs0XVsxXSwrcls0XSwrZVs0XVszXSwrZVs0XVs0XV1dKSx0KFtbK2VbMF1bMF0sK2VbMF1bMV0sK2VbMF1bMl0sK3JbMF0sK2VbMF1bNF1dLFsrZVsxXVswXSwrZVsxXVsxXSwrZVsxXVsyXSwrclsxXSwrZVsxXVs0XV0sWytlWzJdWzBdLCtlWzJdWzFdLCtlWzJdWzJdLCtyWzJdLCtlWzJdWzRdXSxbK2VbM11bMF0sK2VbM11bMV0sK2VbM11bMl0sK3JbM10sK2VbM11bNF1dLFsrZVs0XVswXSwrZVs0XVsxXSwrZVs0XVsyXSwrcls0XSwrZVs0XVs0XV1dKSx0KFtbK2VbMF1bMF0sK2VbMF1bMV0sK2VbMF1bMl0sK2VbMF1bM10sK3JbMF1dLFsrZVsxXVswXSwrZVsxXVsxXSwrZVsxXVsyXSwrZVsxXVszXSwrclsxXV0sWytlWzJdWzBdLCtlWzJdWzFdLCtlWzJdWzJdLCtlWzJdWzNdLCtyWzJdXSxbK2VbM11bMF0sK2VbM11bMV0sK2VbM11bMl0sK2VbM11bM10sK3JbM11dLFsrZVs0XVswXSwrZVs0XVsxXSwrZVs0XVsyXSwrZVs0XVszXSwrcls0XV1dKSx0KGUpXX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm5bdChbWytyWzBdLCtlWzBdWzFdLCtlWzBdWzJdLCtlWzBdWzNdLCtlWzBdWzRdLCtlWzBdWzVdXSxbK3JbMV0sK2VbMV1bMV0sK2VbMV1bMl0sK2VbMV1bM10sK2VbMV1bNF0sK2VbMV1bNV1dLFsrclsyXSwrZVsyXVsxXSwrZVsyXVsyXSwrZVsyXVszXSwrZVsyXVs0XSwrZVsyXVs1XV0sWytyWzNdLCtlWzNdWzFdLCtlWzNdWzJdLCtlWzNdWzNdLCtlWzNdWzRdLCtlWzNdWzVdXSxbK3JbNF0sK2VbNF1bMV0sK2VbNF1bMl0sK2VbNF1bM10sK2VbNF1bNF0sK2VbNF1bNV1dLFsrcls1XSwrZVs1XVsxXSwrZVs1XVsyXSwrZVs1XVszXSwrZVs1XVs0XSwrZVs1XVs1XV1dKSx0KFtbK2VbMF1bMF0sK3JbMF0sK2VbMF1bMl0sK2VbMF1bM10sK2VbMF1bNF0sK2VbMF1bNV1dLFsrZVsxXVswXSwrclsxXSwrZVsxXVsyXSwrZVsxXVszXSwrZVsxXVs0XSwrZVsxXVs1XV0sWytlWzJdWzBdLCtyWzJdLCtlWzJdWzJdLCtlWzJdWzNdLCtlWzJdWzRdLCtlWzJdWzVdXSxbK2VbM11bMF0sK3JbM10sK2VbM11bMl0sK2VbM11bM10sK2VbM11bNF0sK2VbM11bNV1dLFsrZVs0XVswXSwrcls0XSwrZVs0XVsyXSwrZVs0XVszXSwrZVs0XVs0XSwrZVs0XVs1XV0sWytlWzVdWzBdLCtyWzVdLCtlWzVdWzJdLCtlWzVdWzNdLCtlWzVdWzRdLCtlWzVdWzVdXV0pLHQoW1srZVswXVswXSwrZVswXVsxXSwrclswXSwrZVswXVszXSwrZVswXVs0XSwrZVswXVs1XV0sWytlWzFdWzBdLCtlWzFdWzFdLCtyWzFdLCtlWzFdWzNdLCtlWzFdWzRdLCtlWzFdWzVdXSxbK2VbMl1bMF0sK2VbMl1bMV0sK3JbMl0sK2VbMl1bM10sK2VbMl1bNF0sK2VbMl1bNV1dLFsrZVszXVswXSwrZVszXVsxXSwrclszXSwrZVszXVszXSwrZVszXVs0XSwrZVszXVs1XV0sWytlWzRdWzBdLCtlWzRdWzFdLCtyWzRdLCtlWzRdWzNdLCtlWzRdWzRdLCtlWzRdWzVdXSxbK2VbNV1bMF0sK2VbNV1bMV0sK3JbNV0sK2VbNV1bM10sK2VbNV1bNF0sK2VbNV1bNV1dXSksdChbWytlWzBdWzBdLCtlWzBdWzFdLCtlWzBdWzJdLCtyWzBdLCtlWzBdWzRdLCtlWzBdWzVdXSxbK2VbMV1bMF0sK2VbMV1bMV0sK2VbMV1bMl0sK3JbMV0sK2VbMV1bNF0sK2VbMV1bNV1dLFsrZVsyXVswXSwrZVsyXVsxXSwrZVsyXVsyXSwrclsyXSwrZVsyXVs0XSwrZVsyXVs1XV0sWytlWzNdWzBdLCtlWzNdWzFdLCtlWzNdWzJdLCtyWzNdLCtlWzNdWzRdLCtlWzNdWzVdXSxbK2VbNF1bMF0sK2VbNF1bMV0sK2VbNF1bMl0sK3JbNF0sK2VbNF1bNF0sK2VbNF1bNV1dLFsrZVs1XVswXSwrZVs1XVsxXSwrZVs1XVsyXSwrcls1XSwrZVs1XVs0XSwrZVs1XVs1XV1dKSx0KFtbK2VbMF1bMF0sK2VbMF1bMV0sK2VbMF1bMl0sK2VbMF1bM10sK3JbMF0sK2VbMF1bNV1dLFsrZVsxXVswXSwrZVsxXVsxXSwrZVsxXVsyXSwrZVsxXVszXSwrclsxXSwrZVsxXVs1XV0sWytlWzJdWzBdLCtlWzJdWzFdLCtlWzJdWzJdLCtlWzJdWzNdLCtyWzJdLCtlWzJdWzVdXSxbK2VbM11bMF0sK2VbM11bMV0sK2VbM11bMl0sK2VbM11bM10sK3JbM10sK2VbM11bNV1dLFsrZVs0XVswXSwrZVs0XVsxXSwrZVs0XVsyXSwrZVs0XVszXSwrcls0XSwrZVs0XVs1XV0sWytlWzVdWzBdLCtlWzVdWzFdLCtlWzVdWzJdLCtlWzVdWzNdLCtyWzVdLCtlWzVdWzVdXV0pLHQoW1srZVswXVswXSwrZVswXVsxXSwrZVswXVsyXSwrZVswXVszXSwrZVswXVs0XSwrclswXV0sWytlWzFdWzBdLCtlWzFdWzFdLCtlWzFdWzJdLCtlWzFdWzNdLCtlWzFdWzRdLCtyWzFdXSxbK2VbMl1bMF0sK2VbMl1bMV0sK2VbMl1bMl0sK2VbMl1bM10sK2VbMl1bNF0sK3JbMl1dLFsrZVszXVswXSwrZVszXVsxXSwrZVszXVsyXSwrZVszXVszXSwrZVszXVs0XSwrclszXV0sWytlWzRdWzBdLCtlWzRdWzFdLCtlWzRdWzJdLCtlWzRdWzNdLCtlWzRdWzRdLCtyWzRdXSxbK2VbNV1bMF0sK2VbNV1bMV0sK2VbNV1bMl0sK2VbNV1bM10sK2VbNV1bNF0sK3JbNV1dXSksdChlKV19fXZhciB1PVtmdW5jdGlvbigpe3JldHVybltbMF1dfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dO2Z1bmN0aW9uIGYodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4gZnVuY3Rpb24obCxjKXtzd2l0Y2gobC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdChsLGMpO2Nhc2UgMTpyZXR1cm4gZShsLGMpO2Nhc2UgMjpyZXR1cm4gcihsLGMpO2Nhc2UgMzpyZXR1cm4gbihsLGMpO2Nhc2UgNDpyZXR1cm4gaShsLGMpO2Nhc2UgNTpyZXR1cm4gYShsLGMpfXZhciB1PW9bbC5sZW5ndGhdO3JldHVybiB1fHwodT1vW2wubGVuZ3RoXT1zKGwubGVuZ3RoKSksdShsLGMpfX0hZnVuY3Rpb24oKXtmb3IoO3UubGVuZ3RoPDY7KXUucHVzaChpKHUubGVuZ3RoKSk7ZS5leHBvcnRzPWYuYXBwbHkodm9pZCAwLHUuY29uY2F0KFt1LGldKSk7Zm9yKHZhciB0PTA7dDw2OysrdCllLmV4cG9ydHNbdF09dVt0XX0oKX0seyJyb2J1c3QtZGV0ZXJtaW5hbnQiOjI4MH1dLDI4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3Qtc3VidHJhY3QiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihyLGksYSl7dmFyIG89dCh0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSx0KGUoclsxXSxpWzBdKSxlKC1pWzFdLHJbMF0pKSkscz10KGUoclsxXSxhWzBdKSxlKC1hWzFdLHJbMF0pKSxsPW4obyxzKTtyZXR1cm4gbFtsLmxlbmd0aC0xXX19ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyl7dmFyIGw9dCh0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpKSxjPXQodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSksdT1uKGwsYyk7cmV0dXJuIHVbdS5sZW5ndGgtMV19fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCl7dmFyIGM9dCh0KHQocih0KHIodChlKHNbMV0sbFswXSksZSgtbFsxXSxzWzBdKSksb1syXSksdChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLC1zWzJdKSxyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGxbMl0pKSksYVszXSksdChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksLXNbMl0pLHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksbFsyXSkpKSwtb1szXSkscih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGxbMl0pKSksc1szXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxzWzJdKSkpLC1sWzNdKSx0KHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtc1syXSkscih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtc1syXSkscih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSkpKSx0KHQocih0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLGxbMl0pKSksc1szXSksdChyKHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksc1syXSkpKSwtbFszXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksaVszXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLC1hWzNdKSx0KHIodChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpLG9bM10pLHIodChyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxvWzJdKSkpLC1zWzNdKSkpKSksdT10KHQodChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxvWzJdKSx0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksLXNbMl0pLHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksbFsyXSkpKSxpWzNdKSxyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLXNbMl0pLHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksbFsyXSkpKSwtb1szXSkpLHQocih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLGxbMl0pKSksc1szXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLHNbMl0pKSksLWxbM10pKSksdCh0KHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSksdChyKHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksbFsyXSkpKSxvWzNdKSxyKHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSwtbFszXSkpKSksZj1uKGMsdSk7cmV0dXJuIGZbZi5sZW5ndGgtMV19fWZ1bmN0aW9uIHUodCl7cmV0dXJuKDM9PT10P3M6ND09PXQ/bDpjKShpLG4sYSxvKX12YXIgZj11KDMpLGg9dSg0KSxwPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9MzMzMDY2OTA3Mzg3NTQ3MTZlLTMyKm47cmV0dXJuIG8+PXN8fG88PS1zP286Zih0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxmPWVbMl0tblsyXSxwPXJbMl0tblsyXSxkPWEqYyxtPW8qbCxnPW8qcyx2PWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtbSkrZiooZy12KStwKih5LXgpLF89Nzc3MTU2MTE3MjM3NjEwM2UtMzEqKChNYXRoLmFicyhkKStNYXRoLmFicyhtKSkqTWF0aC5hYnModSkrKE1hdGguYWJzKGcpK01hdGguYWJzKHYpKSpNYXRoLmFicyhmKSsoTWF0aC5hYnMoeSkrTWF0aC5hYnMoeCkpKk1hdGguYWJzKHApKTtyZXR1cm4gYj5ffHwtYj5fP2I6aCh0LGUscixuKX1dO2Z1bmN0aW9uIGQodCl7dmFyIGU9cFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXBbdC5sZW5ndGhdPXUodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBtKHQsZSxyLG4saSxhLG8pe3JldHVybiBmdW5jdGlvbihlLHIscyxsLGMpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gbihlLHIpO2Nhc2UgMzpyZXR1cm4gaShlLHIscyk7Y2FzZSA0OnJldHVybiBhKGUscixzLGwpO2Nhc2UgNTpyZXR1cm4gbyhlLHIscyxsLGMpfWZvcih2YXIgdT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDsrK2YpdVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHQodSl9fSFmdW5jdGlvbigpe2Zvcig7cC5sZW5ndGg8PTU7KXAucHVzaCh1KHAubGVuZ3RoKSk7ZS5leHBvcnRzPW0uYXBwbHkodm9pZCAwLFtkXS5jb25jYXQocCkpO2Zvcih2YXIgdD0wO3Q8PTU7Kyt0KWUuZXhwb3J0c1t0XT1wW3RdfSgpfSx7InJvYnVzdC1zY2FsZSI6Mjg2LCJyb2J1c3Qtc3VidHJhY3QiOjI4OCwicm9idXN0LXN1bSI6Mjg5LCJ0d28tcHJvZHVjdCI6MzA2fV0sMjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcihhPTA7YTxlLmxlbmd0aDsrK2Epcj1uKHIsaSh0LGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXNjYWxlIjoyODYsInJvYnVzdC1zdW0iOjI4OX1dLDI4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgZj1zWzFdO2koZixsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGg9bFsxXSxwPXNbMV0sZD1oK3AsbT1wLShkLWgpO3NbMV09ZCxtJiYob1tjKytdPW0pfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjMwNiwidHdvLXN1bSI6MzA3fV0sMjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KTtpZihNYXRoLm1heChjLHUpPHN8fGw8ZilyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0fV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9LWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmaDxkfHxjPj1uPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PSh2PWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW07Zm9yKDtsPHI7KSh4PShhPWIpLSh5PSh2PShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChtPV8rdiktKGc9bS1fKSkrKHYtZyksXz1tLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KHY9KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDI4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSxlWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9ZVtjXSxkPXUocCk7aDxkPyhhPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bTtmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9ZikrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGwrPTEpPHImJihmPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bSwoYys9MSk8biYmKHA9ZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KCJib3VuZGFyeS1jZWxscyIpLGk9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjozNCwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCI6Mjc2fV0sMjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtyPXJ8fDAsdm9pZCAwPT09cyYmKHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX0odCkpO2lmKDA9PT10Lmxlbmd0aHx8czwxKXJldHVybntjZWxsczpbXSx2ZXJ0ZXhJZHM6W10sdmVydGV4V2VpZ2h0czpbXX07dmFyIGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1pLm1hbGxvY1VpbnQ4KHIpLGE9MDthPHI7KythKW5bYV09dFthXTxlfDA7cmV0dXJuIG59KGUsK3IpLGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1lKihlKzEpLzIqcnwwLHM9aS5tYWxsb2NVaW50MzIoMipvKSxsPTAsYz0wO2M8cjsrK2MpZm9yKHZhciB1PXRbY10sZj0oZT11Lmxlbmd0aCwwKTtmPGU7KytmKWZvcih2YXIgaD0wO2g8ZjsrK2gpe3ZhciBwPXVbaF0sZD11W2ZdO3NbbCsrXT0wfE1hdGgubWluKHAsZCksc1tsKytdPTB8TWF0aC5tYXgocCxkKX1hKG4ocyxbbC8yfDAsMl0pKTt2YXIgbT0yO2ZvcihjPTI7YzxsO2MrPTIpc1tjLTJdPT09c1tjXSYmc1tjLTFdPT09c1tjKzFdfHwoc1ttKytdPXNbY10sc1ttKytdPXNbYysxXSk7cmV0dXJuIG4ocyxbbS8yfDAsMl0pfSh0LHMpLHU9ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQuZGF0YSxzPXQuc2hhcGVbMF0sbD1pLm1hbGxvY0RvdWJsZShzKSxjPTAsdT0wO3U8czsrK3Upe3ZhciBmPW9bMip1XSxoPW9bMip1KzFdO2lmKHJbZl0hPT1yW2hdKXt2YXIgcD1lW2ZdLGQ9ZVtoXTtvWzIqY109ZixvWzIqYysxXT1oLGxbYysrXT0oZC1hKS8oZC1wKX19cmV0dXJuIHQuc2hhcGVbMF09YyxuKGwsW2NdKX0oYyxlLGwsK3IpLGY9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGE9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxzPTA7czxuOysrcyl7dmFyIGw9YVsyKnNdO2lmKGwhPT1vKXtmb3IoclsyKm8rMV09czsrK288bDspclsyKm9dPXMsclsyKm8rMV09cztyWzIqb109c319clsyKm8rMV09bjtmb3IoOysrbzxlOylyWzIqb109clsyKm8rMV09bjtyZXR1cm4gcn0oYywwfGUubGVuZ3RoKSxoPW8ocykodCxjLmRhdGEsZixsKSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn0oYyksZD1bXS5zbGljZS5jYWxsKHUuZGF0YSwwLHUuc2hhcGVbMF0pO3JldHVybiBpLmZyZWUobCksaS5mcmVlKGMuZGF0YSksaS5mcmVlKHUuZGF0YSksaS5mcmVlKGYpLHtjZWxsczpoLHZlcnRleElkczpwLHZlcnRleFdlaWdodHM6ZH19O3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheS1zb3J0Iiksbz10KCIuL2xpYi9jb2RlZ2VuIil9LHsiLi9saWIvY29kZWdlbiI6MjkyLG5kYXJyYXk6MjU5LCJuZGFycmF5LXNvcnQiOjI1OCwidHlwZWRhcnJheS1wb29sIjozMDh9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdKCl9O3ZhciBuPVtmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dC5sZW5ndGgsYT0wO2E8aTsrK2EpdFthXS5sZW5ndGg7cmV0dXJuW119fSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIsbil7Zm9yKHZhciBpPTB8TWF0aC5taW4ocixuKSxhPTB8TWF0aC5tYXgocixuKSxvPXRbMippXSxzPXRbMippKzFdO288czspe3ZhciBsPW8rcz4+MSxjPWVbMipsKzFdO2lmKGM9PT1hKXJldHVybiBsO2E8Yz9zPWw6bz1sKzF9cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPVtdLHM9MDtzPGE7KytzKXt2YXIgbD1lW3NdO2lmKDI9PT1sLmxlbmd0aCl7dmFyIGM9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKTtpZigwPT09Y3x8Mz09PWMpY29udGludWU7c3dpdGNoKGMpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKV0pfX19cmV0dXJuIG99fSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIsbil7Zm9yKHZhciBpPTB8TWF0aC5taW4ocixuKSxhPTB8TWF0aC5tYXgocixuKSxvPXRbMippXSxzPXRbMippKzFdO288czspe3ZhciBsPW8rcz4+MSxjPWVbMipsKzFdO2lmKGM9PT1hKXJldHVybiBsO2E8Yz9zPWw6bz1sKzF9cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPVtdLHM9MDtzPGE7KytzKXt2YXIgbD1lW3NdLGM9bC5sZW5ndGg7aWYoMz09PWMpe2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKyhpW2xbMl1dPDwyKSl8fDc9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSAzOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSA0Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbMF0pXSk7YnJlYWs7Y2FzZSA1Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSA2Om8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzJdLGxbMF0pXSl9fWVsc2UgaWYoMj09PWMpe3ZhciB1O2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKXx8Mz09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKV0pfX19cmV0dXJuIG99fSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIsbil7Zm9yKHZhciBpPTB8TWF0aC5taW4ocixuKSxhPTB8TWF0aC5tYXgocixuKSxvPXRbMippXSxzPXRbMippKzFdO288czspe3ZhciBsPW8rcz4+MSxjPWVbMipsKzFdO2lmKGM9PT1hKXJldHVybiBsO2E8Yz9zPWw6bz1sKzF9cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPVtdLHM9MDtzPGE7KytzKXt2YXIgbD1lW3NdLGM9bC5sZW5ndGg7aWYoND09PWMpe2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKyhpW2xbMl1dPDwyKSsoaVtsWzNdXTw8MykpfHwxNT09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pLHQobixyLGxbMF0sbFsyXSksdChuLHIsbFswXSxsWzNdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFsyXSksdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzFdLGxbM10pXSk7YnJlYWs7Y2FzZSAzOm8ucHVzaChbdChuLHIsbFsxXSxsWzJdKSx0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMF0sbFszXSldLFt0KG4scixsWzFdLGxbM10pLHQobixyLGxbMV0sbFsyXSksdChuLHIsbFswXSxsWzNdKV0pO2JyZWFrO2Nhc2UgNDpvLnB1c2goW3QobixyLGxbMl0sbFswXSksdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbM10pXSk7YnJlYWs7Y2FzZSA1Om8ucHVzaChbdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMF0sbFszXSldLFt0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMl0sbFszXSksdChuLHIsbFswXSxsWzNdKV0pO2JyZWFrO2Nhc2UgNjpvLnB1c2goW3QobixyLGxbMl0sbFswXSksdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzFdLGxbM10pXSxbdChuLHIsbFsyXSxsWzNdKSx0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMV0sbFszXSldKTticmVhaztjYXNlIDc6by5wdXNoKFt0KG4scixsWzBdLGxbM10pLHQobixyLGxbMV0sbFszXSksdChuLHIsbFsyXSxsWzNdKV0pO2JyZWFrO2Nhc2UgODpvLnB1c2goW3QobixyLGxbM10sbFsxXSksdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzNdLGxbMl0pXSk7YnJlYWs7Y2FzZSA5Om8ucHVzaChbdChuLHIsbFszXSxsWzFdKSx0KG4scixsWzBdLGxbMV0pLHQobixyLGxbMF0sbFsyXSldLFt0KG4scixsWzNdLGxbMl0pLHQobixyLGxbM10sbFsxXSksdChuLHIsbFswXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMTA6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pLHQobixyLGxbM10sbFswXSksdChuLHIsbFsxXSxsWzJdKV0sW3QobixyLGxbM10sbFswXSksdChuLHIsbFszXSxsWzJdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSAxMTpvLnB1c2goW3QobixyLGxbMV0sbFsyXSksdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzNdLGxbMl0pXSk7YnJlYWs7Y2FzZSAxMjpvLnB1c2goW3QobixyLGxbM10sbFswXSksdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzJdLGxbMV0pXSxbdChuLHIsbFszXSxsWzFdKSx0KG4scixsWzNdLGxbMF0pLHQobixyLGxbMl0sbFsxXSldKTticmVhaztjYXNlIDEzOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzJdLGxbMV0pLHQobixyLGxbM10sbFsxXSldKTticmVhaztjYXNlIDE0Om8ucHVzaChbdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzFdLGxbMF0pLHQobixyLGxbM10sbFswXSldKX19ZWxzZSBpZigzPT09Yyl7aWYoMD09PSh1PShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSkrKGlbbFsyXV08PDIpKXx8Nz09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMV0sbFsyXSldKTticmVhaztjYXNlIDM6by5wdXNoKFt0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMV0sbFsyXSldKTticmVhaztjYXNlIDQ6by5wdXNoKFt0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMl0sbFswXSldKTticmVhaztjYXNlIDU6by5wdXNoKFt0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDY6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMl0sbFswXSldKX19ZWxzZSBpZigyPT09Yyl7dmFyIHU7aWYoMD09PSh1PShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSkpfHwzPT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pXSl9fX1yZXR1cm4gb319XX0se31dLDI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgidW5pb24tZmluZCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj10Lmxlbmd0aCxuPXQubGVuZ3RoLWUubGVuZ3RoLGk9TWF0aC5taW47aWYobilyZXR1cm4gbjtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4ocz10WzBdK3RbMV0tZVswXS1lWzFdKXx8aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIGE9dFswXSt0WzFdLG89ZVswXStlWzFdO2lmKHM9YSt0WzJdLShvK2VbMl0pKXJldHVybiBzO3ZhciBzLGw9aSh0WzBdLHRbMV0pLGM9aShlWzBdLGVbMV0pO3JldHVybihzPWkobCx0WzJdKS1pKGMsZVsyXSkpfHxpKGwrdFsyXSxhKS1pKGMrZVsyXSxvKTtkZWZhdWx0OnZhciB1PXQuc2xpY2UoMCk7dS5zb3J0KCk7dmFyIGY9ZS5zbGljZSgwKTtmLnNvcnQoKTtmb3IodmFyIGg9MDtoPHI7KytoKWlmKG49dVtoXS1mW2hdKXJldHVybiBuO3JldHVybiAwfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGEodFswXSxlWzBdKX1mdW5jdGlvbiBzKHQsZSl7aWYoZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKW5baV09W3RbaV0sZVtpXV07bi5zb3J0KG8pO2ZvcihpPTA7aTxyOysraSl0W2ldPW5baV1bMF0sZVtpXT1uW2ldWzFdO3JldHVybiB0fXJldHVybiB0LnNvcnQoYSksdH1mdW5jdGlvbiBsKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49MTtuPHI7KytuKXt2YXIgaT10W25dO2lmKGEoaSx0W24tMV0pKXtpZihuPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1pfX1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT0tMTtyPD1uOyl7dmFyIG89cituPj4xLHM9YSh0W29dLGUpO3M8PTA/KDA9PT1zJiYoaT1vKSxyPW8rMSk6cz4wJiYobj1vLTEpfXJldHVybiBpfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV09W107Zm9yKHZhciBzPVtdLGw9KGk9MCxlLmxlbmd0aCk7aTxsOysraSlmb3IodmFyIHU9ZVtpXSxmPXUubGVuZ3RoLGg9MSxwPTE8PGY7aDxwOysraCl7cy5sZW5ndGg9bi5wb3BDb3VudChoKTtmb3IodmFyIGQ9MCxtPTA7bTxmOysrbSloJjE8PG0mJihzW2QrK109dVttXSk7dmFyIGc9Yyh0LHMpO2lmKCEoZzwwKSlmb3IoO3JbZysrXS5wdXNoKGkpLCEoZz49dC5sZW5ndGh8fDAhPT1hKHRbZ10scykpOyk7fXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXtpZihlPDApcmV0dXJuW107Zm9yKHZhciByPVtdLGk9KDE8PGUrMSktMSxhPTA7YTx0Lmxlbmd0aDsrK2EpZm9yKHZhciBvPXRbYV0sbD1pO2w8MTw8by5sZW5ndGg7bD1uLm5leHRDb21iaW5hdGlvbihsKSl7Zm9yKHZhciBjPW5ldyBBcnJheShlKzEpLHU9MCxmPTA7ZjxvLmxlbmd0aDsrK2YpbCYxPDxmJiYoY1t1KytdPW9bZl0pO3IucHVzaChjKX1yZXR1cm4gcyhyKX1yLmRpbWVuc2lvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZT1yKGUsdFtuXS5sZW5ndGgpO3JldHVybiBlLTF9LHIuY291bnRWZXJ0aWNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTEscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pZT1yKGUsYVtvXSk7cmV0dXJuIGUrMX0sci5jbG9uZUNlbGxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT10W3JdLnNsaWNlKDApO3JldHVybiBlfSxyLmNvbXBhcmVDZWxscz1hLHIubm9ybWFsaXplPXMsci51bmlxdWU9bCxyLmZpbmRDZWxsPWMsci5pbmNpZGVuY2U9dSxyLmR1YWw9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdShsKGYodCwwKSksdCk7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPVtdO249MDtmb3IodmFyIGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKXJbYVtvXV0ucHVzaChuKTtyZXR1cm4gcn0sci5leHBsb2RlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MHxpLmxlbmd0aCxvPTEsbD0xPDxhO288bDsrK28pe2Zvcih2YXIgYz1bXSx1PTA7dTxhOysrdSlvPj4+dSYxJiZjLnB1c2goaVt1XSk7ZS5wdXNoKGMpfXJldHVybiBzKGUpfSxyLnNrZWxldG9uPWYsci5ib3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87KythKXtmb3IodmFyIGw9bmV3IEFycmF5KGkubGVuZ3RoLTEpLGM9MCx1PTA7YzxvOysrYyljIT09YSYmKGxbdSsrXT1pW2NdKTtlLnB1c2gobCl9cmV0dXJuIHMoZSl9LHIuY29ubmVjdGVkQ29tcG9uZW50cz1mdW5jdGlvbih0LGUpe3JldHVybiBlP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKGUpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciBzPW8rMTtzPGEubGVuZ3RoOysrcylyLmxpbmsoYVtvXSxhW3NdKTt2YXIgbD1bXSxjPXIucmFua3M7Zm9yKG49MDtuPGMubGVuZ3RoOysrbiljW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciB1PXIuZmluZCh0W25dWzBdKTtjW3VdPDA/KGNbdV09bC5sZW5ndGgsbC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOmxbY1t1XV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gbH0odCxlKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9bChzKGYodCwwKSkpLHI9bmV3IGkoZS5sZW5ndGgpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciB1PWMoZSxbYVtvXV0pLGg9bysxO2g8YS5sZW5ndGg7KytoKXIubGluayh1LGMoZSxbYVtoXV0pKTt2YXIgcD1bXSxkPXIucmFua3M7Zm9yKG49MDtuPGQubGVuZ3RoOysrbilkW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBtPXIuZmluZChjKGUsW3Rbbl1bMF1dKSk7ZFttXTwwPyhkW21dPXAubGVuZ3RoLHAucHVzaChbdFtuXS5zbGljZSgwKV0pKTpwW2RbbV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIHB9KHQpfX0seyJiaXQtdHdpZGRsZSI6MzIsInVuaW9uLWZpbmQiOjMwOX1dLDI5NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVszMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjMyfV0sMjk1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzI5M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ImJpdC10d2lkZGxlIjoyOTQsZHVwOjI5MywidW5pb24tZmluZCI6Mjk2fV0sMjk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH0sbi5wcm90b3R5cGUubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucm9vdHM7ZVt0XSE9PXQ7KXt2YXIgcj1lW3RdO2VbdF09ZVtyXSx0PXJ9cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89dC5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksZj0wO2Y8YTsrK2Ypc1tmXT1sW2ZdPS0xLGNbZl09MS8wLHVbZl09ITE7Zm9yKGY9MDtmPG87KytmKXt2YXIgaD10W2ZdO2lmKDIhPT1oLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG11c3QgYmUgYSBncmFwaCIpO3ZhciBwPWhbMV0sZD1oWzBdOy0xIT09bFtkXT9sW2RdPS0yOmxbZF09cCwtMSE9PXNbcF0/c1twXT0tMjpzW3BdPWR9ZnVuY3Rpb24gbSh0KXtpZih1W3RdKXJldHVybiAxLzA7dmFyIHIsaSxhLG8sYyxmPXNbdF0saD1sW3RdO3JldHVybiBmPDB8fGg8MD8xLzA6KHI9ZVt0XSxpPWVbZl0sYT1lW2hdLG89TWF0aC5hYnMobihyLGksYSkpLGM9TWF0aC5zcXJ0KE1hdGgucG93KGlbMF0tYVswXSwyKStNYXRoLnBvdyhpWzFdLWFbMV0sMikpLG8vYyl9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPWtbdF0sbj1rW2VdO2tbdF09bixrW2VdPXIsQVtyXT1lLEFbbl09dH1mdW5jdGlvbiB2KHQpe3JldHVybiBjW2tbdF1dfWZ1bmN0aW9uIHkodCl7cmV0dXJuIDEmdD90LTE+PjE6KHQ+PjEpLTF9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9dih0KTs7KXt2YXIgcj1lLG49Mip0KzEsaT0yKih0KzEpLGE9dDtpZihuPE0pe3ZhciBvPXYobik7bzxyJiYoYT1uLHI9byl9aWYoaTxNKXYoaSk8ciYmKGE9aSk7aWYoYT09PXQpcmV0dXJuIHQ7Zyh0LGEpLHQ9YX19ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9dih0KTt0PjA7KXt2YXIgcj15KHQpO2lmKHI+PTApaWYoZTx2KHIpKXtnKHQsciksdD1yO2NvbnRpbnVlfXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoTT4wKXt2YXIgdD1rWzBdO3JldHVybiBnKDAsTS0xKSxNLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9a1t0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChNKz0xKS0xKSl9ZnVuY3Rpb24gVCh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxBW2VdPj0wJiZ3KEFbZV0sbShlKSksQVtyXT49MCYmdyhBW3JdLG0ocikpfX12YXIgaz1bXSxBPW5ldyBBcnJheShhKTtmb3IoZj0wO2Y8YTsrK2YpeyhjW2ZdPW0oZikpPDEvMD8oQVtmXT1rLmxlbmd0aCxrLnB1c2goZikpOkFbZl09LTF9dmFyIE09ay5sZW5ndGg7Zm9yKGY9TT4+MTtmPj0wOy0tZil4KGYpO2Zvcig7Oyl7dmFyIFM9XygpO2lmKFM8MHx8Y1tTXT5yKWJyZWFrO1QoUyl9dmFyIEU9W107Zm9yKGY9MDtmPGE7KytmKXVbZl18fChBW2ZdPUUubGVuZ3RoLEUucHVzaChlW2ZdLnNsaWNlKCkpKTtFLmxlbmd0aDtmdW5jdGlvbiBMKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgQz1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1MKHMsdFswXSkscj1MKGwsdFsxXSk7aWYoZT49MCYmcj49MCYmZSE9PXIpe3ZhciBuPUFbZV0saT1BW3JdO24hPT1pJiZDLnB1c2goW24saV0pfX0pKSxpLnVuaXF1ZShpLm5vcm1hbGl6ZShDKSkse3Bvc2l0aW9uczpFLGVkZ2VzOkN9fTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleCIpfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0LCJzaW1wbGljaWFsLWNvbXBsZXgiOjI5NX1dLDI5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scztpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGE9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gaShlLHQpO3I9ZVsxXSxhPWVbMF19aWYodFswXVswXTx0WzFdWzBdKW89dFswXSxzPXRbMV07ZWxzZXtpZighKHRbMF1bMF0+dFsxXVswXSkpcmV0dXJuLWkodCxlKTtvPXRbMV0scz10WzBdfXZhciBsPW4ocixhLHMpLGM9bihyLGEsbyk7aWYobDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztpZihsPW4ocyxvLGEpLGM9bihzLG8sciksbDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztyZXR1cm4gYVswXS1zWzBdfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaSxhLG87aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxpPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpe3ZhciBzPU1hdGgubWluKHRbMF1bMV0sdFsxXVsxXSksbD1NYXRoLm1heCh0WzBdWzFdLHRbMV1bMV0pLGM9TWF0aC5taW4oZVswXVsxXSxlWzFdWzFdKSx1PU1hdGgubWF4KGVbMF1bMV0sZVsxXVsxXSk7cmV0dXJuIGw8Yz9sLWM6cz51P3MtdTpsLXV9cj1lWzFdLGk9ZVswXX10WzBdWzFdPHRbMV1bMV0/KGE9dFswXSxvPXRbMV0pOihhPXRbMV0sbz10WzBdKTt2YXIgZj1uKGkscixhKTtyZXR1cm4gZnx8KChmPW4oaSxyLG8pKXx8by1pKX19LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSwyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTIqZSxuPW5ldyBBcnJheShyKSxhPTA7YTxlOysrYSl7dmFyIGw9dFthXSxjPWxbMF1bMF08bFsxXVswXTtuWzIqYV09bmV3IGYobFswXVswXSxsLGMsYSksblsyKmErMV09bmV3IGYobFsxXVswXSxsLCFjLGEpfW4uc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LngtZS54O3JldHVybiByfHwoKHI9dC5jcmVhdGUtZS5jcmVhdGUpfHxNYXRoLm1pbih0LnNlZ21lbnRbMF1bMV0sdC5zZWdtZW50WzFdWzFdKS1NYXRoLm1pbihlLnNlZ21lbnRbMF1bMV0sZS5zZWdtZW50WzFdWzFdKSl9KSk7dmFyIGg9aShvKSxwPVtdLGQ9W10sbT1bXTtmb3IoYT0wO2E8cjspe2Zvcih2YXIgZz1uW2FdLngsdj1bXTthPHI7KXt2YXIgeT1uW2FdO2lmKHkueCE9PWcpYnJlYWs7YSs9MSx5LnNlZ21lbnRbMF1bMF09PT15LngmJnkuc2VnbWVudFsxXVswXT09PXkueD95LmNyZWF0ZSYmKHkuc2VnbWVudFswXVsxXTx5LnNlZ21lbnRbMV1bMV0/KHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMCwhMCkpLHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMSwhMSkpKToodi5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCEwLCExKSksdi5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCExLCEwKSkpKTpoPXkuY3JlYXRlP2guaW5zZXJ0KHkuc2VnbWVudCx5LmluZGV4KTpoLnJlbW92ZSh5LnNlZ21lbnQpfXAucHVzaChoLnJvb3QpLGQucHVzaChnKSxtLnB1c2godil9cmV0dXJuIG5ldyBzKHAsZCxtKX07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiKSxhPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLG89dCgiLi9saWIvb3JkZXItc2VnbWVudHMiKTtmdW5jdGlvbiBzKHQsZSxyKXt0aGlzLnNsYWJzPXQsdGhpcy5jb29yZGluYXRlcz1lLHRoaXMuaG9yaXpvbnRhbD1yfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC55LWV9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1udWxsO3Q7KXt2YXIgbixpLG89dC5rZXk7b1swXVswXTxvWzFdWzBdPyhuPW9bMF0saT1vWzFdKToobj1vWzFdLGk9b1swXSk7dmFyIHM9YShuLGksZSk7aWYoczwwKXQ9dC5sZWZ0O2Vsc2UgaWYocz4wKWlmKGVbMF0hPT1vWzFdWzBdKXI9dCx0PXQucmlnaHQ7ZWxzZXtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH1lbHNle2lmKGVbMF0hPT1vWzFdWzBdKXJldHVybiB0O3ZhciBsO2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fX1yZXR1cm4gcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3RoaXMueT10LHRoaXMuaW5kZXg9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5jbG9zZWQ9bn1mdW5jdGlvbiBmKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuc2VnbWVudD1lLHRoaXMuY3JlYXRlPXIsdGhpcy5pbmRleD1ufXMucHJvdG90eXBlLmNhc3RVcD1mdW5jdGlvbih0KXt2YXIgZT1uLmxlKHRoaXMuY29vcmRpbmF0ZXMsdFswXSk7aWYoZTwwKXJldHVybi0xO3RoaXMuc2xhYnNbZV07dmFyIHI9Yyh0aGlzLnNsYWJzW2VdLHQpLGk9LTE7aWYociYmKGk9ci52YWx1ZSksdGhpcy5jb29yZGluYXRlc1tlXT09PXRbMF0pe3ZhciBzPW51bGw7aWYociYmKHM9ci5rZXkpLGU+MCl7dmFyIHU9Yyh0aGlzLnNsYWJzW2UtMV0sdCk7dSYmKHM/byh1LmtleSxzKT4wJiYocz11LmtleSxpPXUudmFsdWUpOihpPXUudmFsdWUscz11LmtleSkpfXZhciBmPXRoaXMuaG9yaXpvbnRhbFtlXTtpZihmLmxlbmd0aD4wKXt2YXIgaD1uLmdlKGYsdFsxXSxsKTtpZihoPGYubGVuZ3RoKXt2YXIgcD1mW2hdO2lmKHRbMV09PT1wLnkpe2lmKHAuY2xvc2VkKXJldHVybiBwLmluZGV4O2Zvcig7aDxmLmxlbmd0aC0xJiZmW2grMV0ueT09PXRbMV07KWlmKChwPWZbaCs9MV0pLmNsb3NlZClyZXR1cm4gcC5pbmRleDtpZihwLnk9PT10WzFdJiYhcC5zdGFydCl7aWYoKGgrPTEpPj1mLmxlbmd0aClyZXR1cm4gaTtwPWZbaF19fWlmKHAuc3RhcnQpaWYocyl7dmFyIGQ9YShzWzBdLHNbMV0sW3RbMF0scC55XSk7c1swXVswXT5zWzFdWzBdJiYoZD0tZCksZD4wJiYoaT1wLmluZGV4KX1lbHNlIGk9cC5pbmRleDtlbHNlIHAueSE9PXRbMV0mJihpPXAuaW5kZXgpfX19cmV0dXJuIGl9fSx7Ii4vbGliL29yZGVyLXNlZ21lbnRzIjoyOTgsImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSI6NjksInJvYnVzdC1vcmllbnRhdGlvbiI6Mjg0fV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBmPW8ocyx1LGwsaSk7ci5wdXNoKGYpLG4ucHVzaChmLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0IjoyODEsInJvYnVzdC1zdW0iOjI4OX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaShvKHQpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfWZ1bmN0aW9uIGkocixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD0xLGQ9ci5sZW5ndGgsbT0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKW0rPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihmPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9tKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxmJiYhcy5zaWduP2g9IiI6KGg9Zj8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGgraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLG0rPXMuYWxpZ24/aCtpK2w6IjAiPT09Yz9oK2wraTpsK2graSl9cmV0dXJuIG19dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBvKGUpe2lmKGFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciByLG49ZSxpPVtdLG89MDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlpLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpaS5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KHI9dC5wbGFjZWhvbGRlci5leGVjKG4pKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihzLnB1c2goY1sxXSk7IiIhPT0obD1sLnN1YnN0cmluZyhjWzBdLmxlbmd0aCkpOylpZihudWxsIT09KGM9dC5rZXlfYWNjZXNzLmV4ZWMobCkpKXMucHVzaChjWzFdKTtlbHNle2lmKG51bGw9PT0oYz10LmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7aS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gYVtlXT1pfXZvaWQgMCE9PXImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSwzMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1pKHQsZSksbj1yLmxlbmd0aCxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylhW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmEsY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUscz1vW3JdO2U9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoKyJkIixpPWFbcl07aWYoaSlyZXR1cm4gaShuLHQsZSl9KHQub3JkZXIsdC5kdHlwZSkpO3JldHVybiBzKHQsZSl9O3ZhciBuPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIiksaT10KCJ6ZXJvLWNyb3NzaW5ncyIpLGE9eyIyZCI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoe29yZGVyOmUsc2NhbGFyQXJndW1lbnRzOjMsZ2V0dGVyczoiZ2VuZXJpYyI9PT1yP1swXTp2b2lkIDAscGhhc2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQ+bnwwfSx2ZXJ0ZXg6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9KG88PDApKyhzPDwxKSsobDw8MikrKGM8PDMpfDA7aWYoMCE9PXAmJjE1IT09cClzd2l0Y2gocCl7Y2FzZSAwOnUucHVzaChbdC0uNSxlLS41XSk7YnJlYWs7Y2FzZSAxOnUucHVzaChbdC0uMjUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAyOnUucHVzaChbdC0uNzUtLjI1Kigtbi1yKzIqaCkvKG4tciksZS0uMjUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgMzp1LnB1c2goW3QtLjUsZS0uNS0uNSooaStyK2Erbi00KmgpLyhyLWkrbi1hKV0pO2JyZWFrO2Nhc2UgNDp1LnB1c2goW3QtLjI1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KigtaS1yKzIqaCkvKGktcildKTticmVhaztjYXNlIDU6dS5wdXNoKFt0LS41LS41KihuK3IrYStpLTQqaCkvKHItbitpLWEpLGUtLjVdKTticmVhaztjYXNlIDY6dS5wdXNoKFt0LS41LS4yNSooLW4tcithK2kpLyhuLXIraS1hKSxlLS41LS4yNSooLWktcithK24pLyhpLXIrbi1hKV0pO2JyZWFrO2Nhc2UgNzp1LnB1c2goW3QtLjc1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgODp1LnB1c2goW3QtLjc1LS4yNSooLWEtaSsyKmgpLyhhLWkpLGUtLjc1LS4yNSooLWEtbisyKmgpLyhhLW4pXSk7YnJlYWs7Y2FzZSA5OnUucHVzaChbdC0uNS0uMjUqKG4rcistYS1pKS8oci1uK2EtaSksZS0uNS0uMjUqKGkrcistYS1uKS8oci1pK2EtbildKTticmVhaztjYXNlIDEwOnUucHVzaChbdC0uNS0uNSooLW4tci1hLWkrNCpoKS8obi1yK2EtaSksZS0uNV0pO2JyZWFrO2Nhc2UgMTE6dS5wdXNoKFt0LS4yNS0uMjUqKC1hLWkrMipoKS8oYS1pKSxlLS43NS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAxMjp1LnB1c2goW3QtLjUsZS0uNS0uNSooLWktci1hLW4rNCpoKS8oaS1yK2EtbildKTticmVhaztjYXNlIDEzOnUucHVzaChbdC0uNzUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKC1hLW4rMipoKS8oYS1uKV0pO2JyZWFrO2Nhc2UgMTQ6dS5wdXNoKFt0LS4yNS0uMjUqKC1uLXIrMipoKS8obi1yKSxlLS4yNS0uMjUqKC1pLXIrMipoKS8oaS1yKV0pO2JyZWFrO2Nhc2UgMTU6dS5wdXNoKFt0LS41LGUtLjVdKX19LGNlbGw6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2k/cy5wdXNoKFt0LGVdKTpzLnB1c2goW2UsdF0pfX0pO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLGk9W107cmV0dXJuIG4odCxyLGksZSkse3Bvc2l0aW9uczpyLGNlbGxzOml9fX19O3ZhciBvPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjoyNTEsInplcm8tY3Jvc3NpbmdzIjozMTh9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixpKXtpPWl8fHt9O3ZhciBvPWFbZV07b3x8KG89YVtlXT17IiAiOntkYXRhOm5ldyBGbG9hdDMyQXJyYXkoMCksc2hhcGU6LjJ9fSk7dmFyIHM9b1tyXTtpZighcylpZihyLmxlbmd0aDw9MXx8IS9cZC8udGVzdChyKSlzPW9bcl09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2VsbHMscj10LnBvc2l0aW9ucyxuPW5ldyBGbG9hdDMyQXJyYXkoNiplLmxlbmd0aCksaT0wLGE9MCxvPTA7bzxlLmxlbmd0aDsrK28pZm9yKHZhciBzPWVbb10sbD0wO2w8MzsrK2wpe3ZhciBjPXJbc1tsXV07bltpKytdPWNbMF0sbltpKytdPWNbMV0rMS40LGE9TWF0aC5tYXgoY1swXSxhKX1yZXR1cm57ZGF0YTpuLHNoYXBlOmF9fShuKHIse3RyaWFuZ2xlczohMCxmb250OmUsdGV4dEFsaWduOmkudGV4dEFsaWdufHwibGVmdCIsdGV4dEJhc2VsaW5lOiJhbHBoYWJldGljIixzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH19KSk7ZWxzZXtmb3IodmFyIGw9ci5zcGxpdCgvKFxkfFxzKS8pLGM9bmV3IEFycmF5KGwubGVuZ3RoKSx1PTAsZj0wLGg9MDtoPGwubGVuZ3RoOysraCljW2hdPXQoZSxsW2hdKSx1Kz1jW2hdLmRhdGEubGVuZ3RoLGYrPWNbaF0uc2hhcGUsaD4wJiYoZis9LjAyKTt2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxtPS0uNSpmO2ZvcihoPTA7aDxjLmxlbmd0aDsrK2gpe2Zvcih2YXIgZz1jW2hdLmRhdGEsdj0wO3Y8Zy5sZW5ndGg7dis9MilwW2QrK109Z1t2XSttLHBbZCsrXT1nW3YrMV07bSs9Y1toXS5zaGFwZSsuMDJ9cz1vW3JdPXtkYXRhOnAsc2hhcGU6Zn19cmV0dXJuIHN9O3ZhciBuPXQoInZlY3Rvcml6ZS10ZXh0IiksaT13aW5kb3d8fHIuZ2xvYmFsfHx7fSxhPWkuX19URVhUX0NBQ0hFfHx7fTtpLl9fVEVYVF9DQUNIRT17fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1LCJ2ZWN0b3JpemUtdGV4dCI6MzExfV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXVuaXQiKTtlLmV4cG9ydHM9YTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9bihnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiByWzBdKmEoclsxXSx0KX1mdW5jdGlvbiBhKHQsZSl7c3dpdGNoKGU9ZXx8ZG9jdW1lbnQuYm9keSx0PSh0fHwicHgiKS50cmltKCkudG9Mb3dlckNhc2UoKSxlIT09d2luZG93JiZlIT09ZG9jdW1lbnR8fChlPWRvY3VtZW50LmJvZHkpLHQpe2Nhc2UiJSI6cmV0dXJuIGUuY2xpZW50SGVpZ2h0LzEwMDtjYXNlImNoIjpjYXNlImV4IjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlWyJmb250LXNpemUiXT0iMTI4Iit0LGUuYXBwZW5kQ2hpbGQocik7dmFyIG49aShyLCJmb250LXNpemUiKS8xMjg7cmV0dXJuIGUucmVtb3ZlQ2hpbGQociksbn0odCxlKTtjYXNlImVtIjpyZXR1cm4gaShlLCJmb250LXNpemUiKTtjYXNlInJlbSI6cmV0dXJuIGkoZG9jdW1lbnQuYm9keSwiZm9udC1zaXplIik7Y2FzZSJ2dyI6cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoLzEwMDtjYXNlInZoIjpyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0LzEwMDtjYXNlInZtaW4iOnJldHVybiBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlInZtYXgiOnJldHVybiBNYXRoLm1heCh3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlImluIjpyZXR1cm4gOTY7Y2FzZSJjbSI6cmV0dXJuIDk2LzIuNTQ7Y2FzZSJtbSI6cmV0dXJuIDk2LzI1LjQ7Y2FzZSJwdCI6cmV0dXJuIDk2LzcyO2Nhc2UicGMiOnJldHVybiAxNn1yZXR1cm4gMX19LHsicGFyc2UtdW5pdCI6MjY1fV0sMzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGYociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1mKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBtPWwocixkKS9pLGc9bChuLGQpL2k7dT1NYXRoLmFjb3MobSksYT1NYXRoLmFjb3MoZyl9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGgodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKSxhPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGgodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWgucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGY9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1mO3ZhciBoPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhoLGUscikscyhoLGgpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLG09dGhpcy5jb21wdXRlZEFuZ2xlWzFdLGc9TWF0aC5jb3MoZCksdj1NYXRoLnNpbihkKSx5PU1hdGguY29zKG0pLHg9TWF0aC5zaW4obSksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89Zyp5LHc9dip5LFQ9eCxrPS1nKngsQT0tdip4LE09eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEw9XypyW2FdK3cqaFthXStUKmVbYV07RVs0KmErMV09aypyW2FdK0EqaFthXStNKmVbYV0sRVs0KmErMl09TCxFWzQqYSszXT0wfXZhciBDPUVbMV0sUD1FWzVdLEk9RVs5XSxPPUVbMl0sej1FWzZdLEQ9RVsxMF0sUj1QKkQtSSp6LEY9SSpPLUMqRCxCPUMqei1QKk8sTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxmPWlbNF0saD1pWzhdLHA9dSphK2YqbytoKnMsZD1jKHUtPWEqcCxmLT1vKnAsaC09cypwKSxtPSh1Lz1kKSplK2EqcixnPShmLz1kKSplK28qcix2PShoLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsbSxnLHYpO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKGE8MHx8YT4zKSYmKGE9MSk7dmFyIG89KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2FdLGw9ZVthKzRdLGY9ZVthKzhdO2lmKG4pe3ZhciBoPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhmKSxtPU1hdGgubWF4KGgscCxkKTtoPT09bT8ocz1zPDA/LTE6MSxsPWY9MCk6ZD09PW0/KGY9ZjwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9Zj0wKX1lbHNle3ZhciBnPWMocyxsLGYpO3MvPWcsbC89ZyxmLz1nfXZhciB2LHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmYsVD1jKHgtPXMqdyxiLT1sKncsXy09Zip3KSxrPWwqKF8vPVQpLWYqKGIvPVQpLEE9ZiooeC89VCktcypfLE09cypiLWwqeCxTPWMoayxBLE0pO2lmKGsvPVMsQS89UyxNLz1TLHRoaXMuY2VudGVyLmp1bXAodCxxLEcsWSksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsZiksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1hKXt2YXIgRT1lWzFdLEw9ZVs1XSxDPWVbOV0sUD1FKngrTCpiK0MqXyxJPUUqaytMKkErQypNO3Y9UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihJLFApfWVsc2V7dmFyIE89ZVsyXSx6PWVbNl0sRD1lWzEwXSxSPU8qcyt6KmwrRCpmLEY9Typ4K3oqYitEKl8sQj1PKmsreipBK0QqTTt2PU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoQixGKX10aGlzLmFuZ2xlLmp1bXAodCx5LHYpLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFU9ZVsxMF0sVj10aGlzLmNvbXB1dGVkTWF0cml4O2koVixlKTt2YXIgSD1WWzE1XSxxPVZbMTJdL0gsRz1WWzEzXS9ILFk9VlsxNF0vSCxXPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxxLU4qVyxHLWoqVyxZLVUqVyl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBpPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0sYT1uWzFdLG89blsyXSxzPWMoaSxhLG8pO2lmKCEoczwxZS02KSl7aS89cyxhLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGY9ZVsxXS1yWzFdLGg9ZVsyXS1yWzJdLHA9YyhsLGYsaCk7aWYoIShwPDFlLTYpKXtsLz1wLGYvPXAsaC89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsbT1kWzBdLGc9ZFsxXSx2PWRbMl0seT1pKm0rYSpnK28qdix4PWMobS09eSppLGctPXkqYSx2LT15Km8pO2lmKCEoeDwuMDEmJih4PWMobT1hKmgtbypmLGc9bypsLWkqaCx2PWkqZi1hKmwpKTwxZS02KSl7bS89eCxnLz14LHYvPXgsdGhpcy51cC5zZXQodCxpLGEsbyksdGhpcy5yaWdodC5zZXQodCxtLGcsdiksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1hKnYtbypnLF89byptLWkqdix3PWkqZy1hKm0sVD1jKGIsXyx3KSxrPWkqbCthKmYrbypoLEE9bSpsK2cqZit2KmgsTT0oYi89VCkqbCsoXy89VCkqZisody89VCkqaCxTPU1hdGguYXNpbih1KGspKSxFPU1hdGguYXRhbjIoTSxBKSxMPXRoaXMuYW5nbGUuX3N0YXRlLEM9TFtMLmxlbmd0aC0xXSxQPUxbTC5sZW5ndGgtMl07QyU9MipNYXRoLlBJO3ZhciBJPU1hdGguYWJzKEMrMipNYXRoLlBJLUUpLE89TWF0aC5hYnMoQy1FKSx6PU1hdGguYWJzKEMtMipNYXRoLlBJLUUpO0k8TyYmKEMrPTIqTWF0aC5QSSksejxPJiYoQy09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEMsUCksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjY4LCJnbC1tYXQ0L2ludmVydCI6OTgsImdsLW1hdDQvcm90YXRlIjoxMDMsImdsLXZlYzMvY3Jvc3MiOjE1NywiZ2wtdmVjMy9kb3QiOjE2MiwiZ2wtdmVjMy9ub3JtYWxpemUiOjE3OX1dLDMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQqZSxhPW4qdCxvPWEtKGEtdCkscz10LW8sbD1uKmUsYz1sLShsLWUpLHU9ZS1jLGY9cyp1LShpLW8qYy1zKmMtbyp1KTtpZihyKXJldHVybiByWzBdPWYsclsxXT1pLHI7cmV0dXJuW2YsaV19O3ZhciBuPSsoTWF0aC5wb3coMiwyNykrMSl9LHt9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10K2UsaT1uLXQsYT1lLWksbz10LShuLWkpO2lmKHIpcmV0dXJuIHJbMF09bythLHJbMV09bixyO3JldHVybltvK2Esbl19fSx7fV0sMzA4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgiZHVwIiksYT10KCJidWZmZXIiKS5CdWZmZXI7ZS5fX1RZUEVEQVJSQVlfUE9PTHx8KGUuX19UWVBFREFSUkFZX1BPT0w9e1VJTlQ4OmkoWzMyLDBdKSxVSU5UMTY6aShbMzIsMF0pLFVJTlQzMjppKFszMiwwXSksQklHVUlOVDY0OmkoWzMyLDBdKSxJTlQ4OmkoWzMyLDBdKSxJTlQxNjppKFszMiwwXSksSU5UMzI6aShbMzIsMF0pLEJJR0lOVDY0OmkoWzMyLDBdKSxGTE9BVDppKFszMiwwXSksRE9VQkxFOmkoWzMyLDBdKSxEQVRBOmkoWzMyLDBdKSxVSU5UOEM6aShbMzIsMF0pLEJVRkZFUjppKFszMiwwXSl9KTt2YXIgbz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5LHM9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdVaW50NjRBcnJheSxsPSJ1bmRlZmluZWQiIT10eXBlb2YgQmlnSW50NjRBcnJheSxjPWUuX19UWVBFREFSUkFZX1BPT0w7Yy5VSU5UOEN8fChjLlVJTlQ4Qz1pKFszMiwwXSkpLGMuQklHVUlOVDY0fHwoYy5CSUdVSU5UNjQ9aShbMzIsMF0pKSxjLkJJR0lOVDY0fHwoYy5CSUdJTlQ2ND1pKFszMiwwXSkpLGMuQlVGRkVSfHwoYy5CVUZGRVI9aShbMzIsMF0pKTt2YXIgdT1jLkRBVEEsZj1jLkJVRkZFUjtmdW5jdGlvbiBoKHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1uLmxvZzIoZSk7dVtyXS5wdXNoKHQpfX1mdW5jdGlvbiBwKHQpe3Q9bi5uZXh0UG93Mih0KTt2YXIgZT1uLmxvZzIodCkscj11W2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHAodCksMCx0KX1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KHAoMip0KSwwLHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShwKDgqdCksMCx0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShwKHQpLDAsdCk6ZCh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBzP25ldyBCaWdVaW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIGsodCl7cmV0dXJuIGw/bmV3IEJpZ0ludDY0QXJyYXkocCg4KnQpLDAsdCk6bnVsbH1mdW5jdGlvbiBBKHQpe3JldHVybiBuZXcgRGF0YVZpZXcocCh0KSwwLHQpfWZ1bmN0aW9uIE0odCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPWZbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgYSh0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSlmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfG4ubG9nMihlKTt1W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUJpZ1VpbnQ2ND1yLmZyZWVJbnQ4PXIuZnJlZUludDE2PXIuZnJlZUludDMyPXIuZnJlZUJpZ0ludDY0PXIuZnJlZUZsb2F0MzI9ci5mcmVlRmxvYXQ9ci5mcmVlRmxvYXQ2ND1yLmZyZWVEb3VibGU9ci5mcmVlVWludDhDbGFtcGVkPXIuZnJlZURhdGFWaWV3PWZ1bmN0aW9uKHQpe2godC5idWZmZXIpfSxyLmZyZWVBcnJheUJ1ZmZlcj1oLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIHAodCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBkKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gbSh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIGcodCk7Y2FzZSJpbnQ4IjpyZXR1cm4gdih0KTtjYXNlImludDE2IjpyZXR1cm4geSh0KTtjYXNlImludDMyIjpyZXR1cm4geCh0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBiKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBfKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIHcodCk7Y2FzZSJiaWdpbnQ2NCI6cmV0dXJuIGsodCk7Y2FzZSJiaWd1aW50NjQiOnJldHVybiBUKHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gTSh0KTtjYXNlImRhdGEiOmNhc2UiZGF0YXZpZXciOnJldHVybiBBKHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHIubWFsbG9jQXJyYXlCdWZmZXI9cCxyLm1hbGxvY1VpbnQ4PWQsci5tYWxsb2NVaW50MTY9bSxyLm1hbGxvY1VpbnQzMj1nLHIubWFsbG9jSW50OD12LHIubWFsbG9jSW50MTY9eSxyLm1hbGxvY0ludDMyPXgsci5tYWxsb2NGbG9hdDMyPXIubWFsbG9jRmxvYXQ9YixyLm1hbGxvY0Zsb2F0NjQ9ci5tYWxsb2NEb3VibGU9XyxyLm1hbGxvY1VpbnQ4Q2xhbXBlZD13LHIubWFsbG9jQmlnVWludDY0PVQsci5tYWxsb2NCaWdJbnQ2ND1rLHIubWFsbG9jRGF0YVZpZXc9QSxyLm1hbGxvY0J1ZmZlcj1NLHIuY2xlYXJDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzI7Kyt0KWMuVUlOVDhbdF0ubGVuZ3RoPTAsYy5VSU5UMTZbdF0ubGVuZ3RoPTAsYy5VSU5UMzJbdF0ubGVuZ3RoPTAsYy5JTlQ4W3RdLmxlbmd0aD0wLGMuSU5UMTZbdF0ubGVuZ3RoPTAsYy5JTlQzMlt0XS5sZW5ndGg9MCxjLkZMT0FUW3RdLmxlbmd0aD0wLGMuRE9VQkxFW3RdLmxlbmd0aD0wLGMuQklHVUlOVDY0W3RdLmxlbmd0aD0wLGMuQklHSU5UNjRbdF0ubGVuZ3RoPTAsYy5VSU5UOENbdF0ubGVuZ3RoPTAsdVt0XS5sZW5ndGg9MCxmW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdm9pZCAwIT09bj9uOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiYml0LXR3aWRkbGUiOjMyLGJ1ZmZlcjozLGR1cDo2NX1dLDMwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sMzExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fChlPXt9KTtyZXR1cm4gbih0LGUuY2FudmFzfHxpLGUuY29udGV4dHx8YSxlKX07dmFyIG49dCgiLi9saWIvdnRleHQiKSxpPW51bGwsYT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkud2lkdGg9ODE5MixpLmhlaWdodD0xMDI0LGE9aS5nZXRDb250ZXh0KCIyZCIpKX0seyIuL2xpYi92dGV4dCI6MzEyfV0sMzEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTY0LG89MS4yNSxzPXticmVha2xpbmVzOiExLGJvbGRzOiExLGl0YWxpY3M6ITEsc3Vic2NyaXB0czohMSxzdXBlcnNjcmlwdHM6ITF9O24mJihuLnNpemUmJm4uc2l6ZT4wJiYoYT1uLnNpemUpLG4ubGluZVNwYWNpbmcmJm4ubGluZVNwYWNpbmc+MCYmKG89bi5saW5lU3BhY2luZyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJyZWFrbGluZXMmJihzLmJyZWFrbGluZXM9ISFuLnN0eWxldGFncy5icmVha2xpbmVzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYm9sZHMmJihzLmJvbGRzPSEhbi5zdHlsZXRhZ3MuYm9sZHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5pdGFsaWNzJiYocy5pdGFsaWNzPSEhbi5zdHlsZXRhZ3MuaXRhbGljcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1YnNjcmlwdHMmJihzLnN1YnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdWJzY3JpcHRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzJiYocy5zdXBlcnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMpKTtyZXR1cm4gci5mb250PVtuLmZvbnRTdHlsZSxuLmZvbnRWYXJpYW50LG4uZm9udFdlaWdodCxhKyJweCIsbi5mb250XS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmpvaW4oIiAiKSxyLnRleHRBbGlnbj0ic3RhcnQiLHIudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixyLmRpcmVjdGlvbj0ibHRyIixoKGZ1bmN0aW9uKHQsZSxyLG4sYSxvKXtyPXIucmVwbGFjZSgvXG4vZywiIikscj0hMD09PW8uYnJlYWtsaW5lcz9yLnJlcGxhY2UoL1w8YnJcPi9nLCJcbiIpOnIucmVwbGFjZSgvXDxiclw+L2csIiAiKTt2YXIgcz0iIixsPVtdO2ZvcihwPTA7cDxyLmxlbmd0aDsrK3ApbFtwXT1zOyEwPT09by5ib2xkcyYmKGw9YygiYiIsImJ8IixyLGwpKTshMD09PW8uaXRhbGljcyYmKGw9YygiaSIsIml8IixyLGwpKTshMD09PW8uc3VwZXJzY3JpcHRzJiYobD1jKCJzdXAiLCIrMSIscixsKSk7ITA9PT1vLnN1YnNjcmlwdHMmJihsPWMoInN1YiIsIi0xIixyLGwpKTt2YXIgdT1bXSxmPSIiO2ZvcihwPTA7cDxyLmxlbmd0aDsrK3ApbnVsbCE9PWxbcF0mJihmKz1yW3BdLHUucHVzaChsW3BdKSk7dmFyIGgscCxkLG0sZyx2PWYuc3BsaXQoIlxuIikseT12Lmxlbmd0aCx4PU1hdGgucm91bmQoYSpuKSxiPW4sXz0yKm4sdz0wLFQ9eSp4K187dC5oZWlnaHQ8VCYmKHQuaGVpZ2h0PVQpO2UuZmlsbFN0eWxlPSIjMDAwIixlLmZpbGxSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlLmZpbGxTdHlsZT0iI2ZmZiI7dmFyIGs9MCxBPSIiO2Z1bmN0aW9uIE0oKXtpZigiIiE9PUEpe3ZhciB0PWUubWVhc3VyZVRleHQoQSkud2lkdGg7ZS5maWxsVGV4dChBLGIrZCxfK20pLGQrPXR9fWZ1bmN0aW9uIFMoKXtyZXR1cm4gTWF0aC5yb3VuZChnKSsicHggIn1mdW5jdGlvbiBFKHQscil7dmFyIG49IiIrZS5mb250O2lmKCEwPT09by5zdWJzY3JpcHRzKXt2YXIgaT10LmluZGV4T2YoIi0iKSxhPXIuaW5kZXhPZigiLSIpLHM9aT4tMT9wYXJzZUludCh0WzEraV0pOjAsbD1hPi0xP3BhcnNlSW50KHJbMSthXSk6MDtzIT09bCYmKG49bi5yZXBsYWNlKFMoKSwiP3B4ICIpLGcqPU1hdGgucG93KC43NSxsLXMpLG49bi5yZXBsYWNlKCI/cHggIixTKCkpKSxtKz0uMjUqeCoobC1zKX1pZighMD09PW8uc3VwZXJzY3JpcHRzKXt2YXIgYz10LmluZGV4T2YoIisiKSx1PXIuaW5kZXhPZigiKyIpLGY9Yz4tMT9wYXJzZUludCh0WzErY10pOjAsaD11Pi0xP3BhcnNlSW50KHJbMSt1XSk6MDtmIT09aCYmKG49bi5yZXBsYWNlKFMoKSwiP3B4ICIpLGcqPU1hdGgucG93KC43NSxoLWYpLG49bi5yZXBsYWNlKCI/cHggIixTKCkpKSxtLT0uMjUqeCooaC1mKX1pZighMD09PW8uYm9sZHMpe3ZhciBwPXQuaW5kZXhPZigiYnwiKT4tMSxkPXIuaW5kZXhPZigiYnwiKT4tMTshcCYmZCYmKG49dj9uLnJlcGxhY2UoIml0YWxpYyAiLCJpdGFsaWMgYm9sZCAiKToiYm9sZCAiK24pLHAmJiFkJiYobj1uLnJlcGxhY2UoImJvbGQgIiwiIikpfWlmKCEwPT09by5pdGFsaWNzKXt2YXIgdj10LmluZGV4T2YoIml8Iik+LTEseT1yLmluZGV4T2YoIml8Iik+LTE7IXYmJnkmJihuPSJpdGFsaWMgIituKSx2JiYheSYmKG49bi5yZXBsYWNlKCJpdGFsaWMgIiwiIikpfWUuZm9udD1ufWZvcihoPTA7aDx5OysraCl7dmFyIEw9dltoXSsiXG4iO2ZvcihkPTAsbT1oKngsZz1uLEE9IiIscD0wO3A8TC5sZW5ndGg7KytwKXt2YXIgQz1wK2s8dS5sZW5ndGg/dVtwK2tdOnVbdS5sZW5ndGgtMV07cz09PUM/QSs9TFtwXTooTSgpLEE9TFtwXSx2b2lkIDAhPT1DJiYoRShzLEMpLHM9QykpfU0oKSxrKz1MLmxlbmd0aDt2YXIgUD0wfE1hdGgucm91bmQoZCsyKmIpO3c8UCYmKHc9UCl9dmFyIEk9dyxPPV8reCp5O3JldHVybiBpKGUuZ2V0SW1hZ2VEYXRhKDAsMCxJLE8pLmRhdGEsW08sSSw0XSkucGljaygtMSwtMSwwKS50cmFuc3Bvc2UoMSwwKX0oZSxyLHQsYSxvLHMpLG4sYSl9LGUuZXhwb3J0cy5wcm9jZXNzUGl4ZWxzPWg7dmFyIG49dCgic3VyZmFjZS1uZXRzIiksaT10KCJuZGFycmF5IiksYT10KCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiKSxvPXQoImNsZWFuLXBzbGciKSxzPXQoImNkdDJkIiksbD10KCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmUiKTtmdW5jdGlvbiBjKHQsZSxyLG4pe2Zvcih2YXIgaT0iPCIrdCsiPiIsYT0iPC8iK3QrIj4iLG89aS5sZW5ndGgscz1hLmxlbmd0aCxsPSIrIj09PWVbMF18fCItIj09PWVbMF0sYz0wLHU9LXM7Yz4tMSYmLTEhPT0oYz1yLmluZGV4T2YoaSxjKSkmJi0xIT09KHU9ci5pbmRleE9mKGEsYytvKSkmJiEodTw9Yyk7KXtmb3IodmFyIGY9YztmPHUrczsrK2YpaWYoZjxjK298fGY+PXUpbltmXT1udWxsLHI9ci5zdWJzdHIoMCxmKSsiICIrci5zdWJzdHIoZisxKTtlbHNlIGlmKG51bGwhPT1uW2ZdKXt2YXIgaD1uW2ZdLmluZGV4T2YoZVswXSk7LTE9PT1oP25bZl0rPWU6bCYmKG5bZl09bltmXS5zdWJzdHIoMCxoKzEpKygxK3BhcnNlSW50KG5bZl1baCsxXSkpK25bZl0uc3Vic3RyKGgrMikpfXZhciBwPWMrbyxkPXIuc3Vic3RyKHAsdS1wKS5pbmRleE9mKGkpO2M9LTEhPT1kP2Q6dStzfXJldHVybiBufWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1uKHQsMTI4KTtyZXR1cm4gZT9hKHIuY2VsbHMsci5wb3NpdGlvbnMsLjI1KTp7ZWRnZXM6ci5jZWxscyxwb3NpdGlvbnM6ci5wb3NpdGlvbnN9fWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGk9dSh0LG4pLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLnRleHRBbGlnbnx8InN0YXJ0IixpPWUudGV4dEJhc2VsaW5lfHwiYWxwaGFiZXRpYyIsYT1bMTw8MzAsMTw8MzBdLG89WzAsMF0scz10Lmxlbmd0aCxsPTA7bDxzOysrbClmb3IodmFyIGM9dFtsXSx1PTA7dTwyOysrdSlhW3VdPTB8TWF0aC5taW4oYVt1XSxjW3VdKSxvW3VdPTB8TWF0aC5tYXgob1t1XSxjW3VdKTt2YXIgZj0wO3N3aXRjaChuKXtjYXNlImNlbnRlciI6Zj0tLjUqKGFbMF0rb1swXSk7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmY9LW9bMF07YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjpmPS1hWzBdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ25pemVkIHRleHRBbGlnbjogJyIrbisiJyIpfXZhciBoPTA7c3dpdGNoKGkpe2Nhc2UiaGFuZ2luZyI6Y2FzZSJ0b3AiOmg9LWFbMV07YnJlYWs7Y2FzZSJtaWRkbGUiOmg9LS41KihhWzFdK29bMV0pO2JyZWFrO2Nhc2UiYWxwaGFiZXRpYyI6Y2FzZSJpZGVvZ3JhcGhpYyI6aD0tMypyO2JyZWFrO2Nhc2UiYm90dG9tIjpoPS1vWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ2luaXplZCB0ZXh0QmFzZWxpbmU6ICciK2krIiciKX12YXIgcD0xL3I7cmV0dXJuImxpbmVIZWlnaHQiaW4gZT9wKj0rZS5saW5lSGVpZ2h0OiJ3aWR0aCJpbiBlP3A9ZS53aWR0aC8ob1swXS1hWzBdKToiaGVpZ2h0ImluIGUmJihwPWUuaGVpZ2h0LyhvWzFdLWFbMV0pKSx0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3AqKHRbMF0rZikscCoodFsxXStoKV19KSl9KGkucG9zaXRpb25zLGUsciksYz1pLmVkZ2VzLGY9ImNjdyI9PT1lLm9yaWVudGF0aW9uO2lmKG8oYSxjKSxlLnBvbHlnb25zfHxlLnBvbHlnb258fGUucG9seWxpbmUpe2Zvcih2YXIgaD1sKGMsYSkscD1uZXcgQXJyYXkoaC5sZW5ndGgpLGQ9MDtkPGgubGVuZ3RoOysrZCl7Zm9yKHZhciBtPWhbZF0sZz1uZXcgQXJyYXkobS5sZW5ndGgpLHY9MDt2PG0ubGVuZ3RoOysrdil7Zm9yKHZhciB5PW1bdl0seD1uZXcgQXJyYXkoeS5sZW5ndGgpLGI9MDtiPHkubGVuZ3RoOysrYil4W2JdPWFbeVtiXV0uc2xpY2UoKTtmJiZ4LnJldmVyc2UoKSxnW3ZdPXh9cFtkXT1nfXJldHVybiBwfXJldHVybiBlLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6cyhhLGMse2RlbGF1bmF5OiExLGV4dGVyaW9yOiExLGludGVyaW9yOiEwfSkscG9zaXRpb25zOmF9OntlZGdlczpjLHBvc2l0aW9uczphfX1mdW5jdGlvbiBoKHQsZSxyKXt0cnl7cmV0dXJuIGYodCxlLHIsITApfWNhdGNoKHQpe310cnl7cmV0dXJuIGYodCxlLHIsITEpfWNhdGNoKHQpe31yZXR1cm4gZS5wb2x5Z29uc3x8ZS5wb2x5bGluZXx8ZS5wb2x5Z29uP1tdOmUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpbXSxwb3NpdGlvbnM6W119OntlZGdlczpbXSxwb3NpdGlvbnM6W119fX0se2NkdDJkOjQyLCJjbGVhbi1wc2xnIjo1MCxuZGFycmF5OjI1OSwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIjoyNjgsInNpbXBsaWZ5LXBsYW5hci1ncmFwaCI6Mjk3LCJzdXJmYWNlLW5ldHMiOjMwMn1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz1tKTt2YXIgdD0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD0id2Vha21hcDppZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgYz1uZXcgQXJyYXlCdWZmZXIoMjUpLHU9bmV3IFVpbnQ4QXJyYXkoYyk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1KSxsPSJ3ZWFrbWFwOnJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodSwoZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pKS5qb2luKCIiKSsiX19fIn1pZihvKE9iamVjdCwiZ2V0T3duUHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihnKX19KSwiZ2V0UHJvcGVydHlOYW1lcyJpbiBPYmplY3Qpe3ZhciBmPU9iamVjdC5nZXRQcm9wZXJ0eU5hbWVzO28oT2JqZWN0LCJnZXRQcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYodCkuZmlsdGVyKGcpfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsImZyZWV6ZSIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsInNlYWwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxlKHQpfX0pO3ZhciByPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztvKE9iamVjdCwicHJldmVudEV4dGVuc2lvbnMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxyKHQpfX0pfSgpO3ZhciBoPSExLHA9MCxkPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgdD1bXSxlPVtdLHI9cCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGQucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP3IgaW4gbz9vW3JdOmk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdOml9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24oZSl7dmFyIG49dihlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSkpfSxzZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP29bcl09aTooYT10LmluZGV4T2YobikpPj0wP2VbYV09aTooYT10Lmxlbmd0aCxlW2FdPWksdFthXT1uKSx0aGlzfSkpfSxkZWxldGVfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4pe3ZhciBpLGEsbz12KG4pO3JldHVybiBvP3IgaW4gbyYmZGVsZXRlIG9bcl06ISgoaT10LmluZGV4T2YobikpPDApJiYoYT10Lmxlbmd0aC0xLHRbaV09dm9pZCAwLGVbaV09ZVthXSx0W2ldPXRbYV0sdC5sZW5ndGg9YSxlLmxlbmd0aD1hLCEwKX0pKX19KX07ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGQpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZCksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaT9uLmhhcyh0KT9uLmdldCh0KTppLmdldF9fXyh0LGUpOm4uZ2V0KHQsZSl9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSkpfSxzZXRfX186e3ZhbHVlOnkoZSl9LGRlbGV0ZV9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp5KChmdW5jdGlvbih0KXtpZih0IT09bSl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTthPSEwfSkpfX0pfXQmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLG4ucHJvdG90eXBlPWQucHJvdG90eXBlLGUuZXhwb3J0cz1uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1kKX1mdW5jdGlvbiBtKHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18obSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4hKCJ3ZWFrbWFwOiI9PXQuc3Vic3RyKDAsIndlYWttYXA6Ii5sZW5ndGgpJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiB2KHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2xdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsbCx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIHgoKXtofHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fChoPSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9fSgpfSx7fV0sMzE0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7Ii4vaGlkZGVuLXN0b3JlLmpzIjozMTV9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZU9mIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnJ9LHdyaXRhYmxlOiEwfSkscn19LHt9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19fSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjozMTR9XSwzMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dFswXSxzPXJbMF0sbD1bMF0sYz1zO258PTA7dmFyIHU9MCxmPXM7Zm9yKHU9MDt1PG87Kyt1KXt2YXIgaD1lW25dLWEscD1lW24rY10tYTtoPj0wIT1wPj0wJiZpLnB1c2gobFswXSsuNSsuNSooaCtwKS8oaC1wKSksbis9ZiwrK2xbMF19fX07ZS5leHBvcnRzPShuPXtmdW5jTmFtZTp7ZnVuY05hbWU6Inplcm9Dcm9zc2luZ3MifS5mdW5jTmFtZX0sZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPVthLG8uam9pbigpXS5qb2luKCksbD1lW3NdO3JldHVybiBsfHwoZVtzXT1sPXQoW2Esb10pKSxsKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbixpKX19KGkuYmluZCh2b2lkIDAsbikpKX0se31dLDMxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gZT0rZXx8MCxuKHQuaGkodC5zaGFwZVswXS0xKSxyLGUpLHJ9O3ZhciBuPXQoIi4vbGliL3pjLWNvcmUiKX0seyIuL2xpYi96Yy1jb3JlIjozMTd9XX0se30sWzZdKSg2KX0pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XX0se30sWzI3XSkoMjcpfSkpOw==\"></script>\n",
-       "\t</head>\n",
-       "\t<body>\n",
-       "\t\t<div class=\"plotly html-widget html-fill-item-overflow-hidden html-fill-item\" id=\"htmlwidget-65a013bad6e27dbda46b\" style=\"width:100%;height:400px;\"></div>\n",
-       "<script type=\"application/json\" data-for=\"htmlwidget-65a013bad6e27dbda46b\">{\"x\":{\"visdat\":{\"520455f19fe\":[\"function () \",\"plotlyVisDat\"]},\"cur_data\":\"520455f19fe\",\"attrs\":{\"520455f19fe\":{\"x\":{},\"color\":{},\"alpha_stroke\":1,\"sizes\":[10,100],\"spans\":[1,20],\"type\":\"box\"}},\"layout\":{\"margin\":{\"b\":40,\"l\":60,\"t\":25,\"r\":10},\"xaxis\":{\"domain\":[0,1],\"automargin\":true,\"title\":\"percollege\"},\"yaxis\":{\"domain\":[0,1],\"automargin\":true},\"hovermode\":\"closest\",\"showlegend\":true},\"source\":\"A\",\"config\":{\"modeBarButtonsToAdd\":[\"hoverclosest\",\"hovercompare\"],\"showSendToCloud\":false},\"data\":[{\"fillcolor\":\"rgba(102,194,165,0.5)\",\"x\":[19.631391799999999,11.2433076,17.033819399999999,17.278953900000001,14.475999,18.9046238,11.917387700000001,16.197120900000002,14.1076487,41.295808100000002,13.567226,15.1108627,13.683010299999999,15.387469299999999,25.175041199999999,28.0181167,16.985807600000001,14.5978891,32.835928000000003,16.195960100000001,16.868525900000002,42.768866899999999,16.839932699999999,16.9356446,20.275196399999999,13.6029941,17.827356099999999,14.7056662,15.5321976,11.367521399999999,13.049546400000001,18.3778784,14.0467657,20.6605223,14.3184422,13.7735504,18.723633400000001,15.1666829,36.643665300000002,15.025603500000001,18.369895499999998,14.758309300000001,16.413352799999998,14.352436300000001,27.593883399999999,17.640962200000001,24.889348500000001,19.343636499999999,37.834052900000003,16.899526699999999,14.538812800000001,18.476678,14.503143700000001,17.949222599999999,27.928023899999999,28.0541488,33.818550700000003,19.861855599999998,14.0083929,19.6994744,16.449385100000001,17.534883700000002,13.505452500000001,14.034565000000001,18.511502,16.474421100000001,19.920618600000001,11.723732,20.724422799999999,15.7185951,18.779374499999999,25.838414,13.562244099999999,22.011856999999999,12.174280899999999,14.2502659,14.3687708,16.521279400000001,12.741278899999999,21.507740200000001,21.300728899999999,21.184251,15.4883463,28.988154900000001,14.636542199999999,13.0760986,15.9511699,16.878980899999998,19.879575299999999,20.0448263,17.879589800000002,17.057172900000001,24.730046900000001,20.458265099999998,15.960024199999999,15.680702699999999,15.928739800000001,16.553049699999999,24.7568609,21.059561599999999,22.652363999999999,22.805217599999999],\"type\":\"box\",\"orientation\":\"h\",\"name\":\"IL\",\"marker\":{\"color\":\"rgba(102,194,165,1)\",\"line\":{\"color\":\"rgba(102,194,165,1)\"}},\"line\":{\"color\":\"rgba(102,194,165,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null},{\"fillcolor\":\"rgba(252,141,98,0.5)\",\"x\":[16.115679700000001,27.359786199999999,22.846814500000001,13.4643978,12.981963500000001,27.830624100000001,19.8002103,15.4562536,13.214982300000001,16.8123574,14.1137248,16.045283000000001,8.5437509899999995,13.2391267,15.574275699999999,13.921367500000001,15.581854,21.197014500000002,17.167662799999999,18.372342499999998,11.4249881,20.549892799999999,11.145299100000001,12.993598799999999,13.929867,15.50432,15.538167100000001,14.9522958,42.131149899999997,20.489939400000001,13.1074407,24.220034500000001,13.257682300000001,20.229814399999999,16.973138599999999,13.1423129,14.8558462,12.771798,17.546090299999999,10.1458975,22.308069,19.975747800000001,19.262915100000001,11.1118012,17.668613799999999,17.1792531,13.1476522,16.401997999999999,26.7446886,17.777526300000002,13.5396226,14.4075703,37.742295400000003,16.925227700000001,14.679814199999999,12.1746236,12.6387629,10.7029216,9.7882708800000007,11.164917900000001,14.612900099999999,11.042294800000001,13.842852000000001,24.455887000000001,17.210682500000001,14.171055900000001,15.734664,12.6200972,13.5281456,12.8463697,24.611668999999999,10.589586499999999,14.7000195,14.133823599999999,10.014025200000001,18.608020400000001,15.4816696,9.4715852399999996,36.245444599999999,15.421938900000001,12.644985200000001,21.758517399999999,12.2726866,22.723011799999998,16.080516200000002,13.399963,23.815566799999999,10.8145974,15.5891252,18.565503799999998,16.583834700000001,15.809775999999999],\"type\":\"box\",\"orientation\":\"h\",\"name\":\"IN\",\"marker\":{\"color\":\"rgba(252,141,98,1)\",\"line\":{\"color\":\"rgba(252,141,98,1)\"}},\"line\":{\"color\":\"rgba(252,141,98,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null},{\"fillcolor\":\"rgba(141,160,203,0.5)\",\"x\":[14.115092300000001,16.2755866,18.0660208,18.9337962,19.039802999999999,11.8278471,14.5760743,17.251975399999999,18.225824500000002,21.420856799999999,23.742011000000002,16.066701999999999,21.488519199999999,15.8443516,22.652725100000001,14.6477089,16.939765699999999,12.041948700000001,22.864736300000001,18.7787018,18.912403999999999,20.4206544,26.978781900000001,26.872568099999999,20.1454244,11.433138700000001,21.173081499999999,30.9753249,16.444129199999999,16.468469800000001,24.765087699999999,14.3082727,36.760061899999997,15.116835,16.234239899999999,15.4575777,27.2497358,21.205782599999999,34.557185699999998,11.4555097,28.6383762,14.4522145,11.3134379,16.154235499999999,32.596387200000002,18.7880617,27.586635900000001,14.4056678,15.2878703,20.686691100000001,16.252821699999998,26.763553999999999,18.540128599999999,25.0460405,15.084171,35.608836500000002,13.280021,17.429609599999999,14.160017,13.4575569,19.043321299999999,15.6946934,36.963511400000002,16.902409599999999,11.656838199999999,15.9567602,13.665839399999999,12.921038100000001,20.021130500000002,26.9656935,13.893376399999999,13.363353,19.708129400000001,17.641192,17.0117257,13.7970398,14.5667198,17.2912268,14.124310100000001,17.804744299999999,48.078510199999997,19.410403599999999,18.232210599999998],\"type\":\"box\",\"orientation\":\"h\",\"name\":\"MI\",\"marker\":{\"color\":\"rgba(141,160,203,1)\",\"line\":{\"color\":\"rgba(141,160,203,1)\"}},\"line\":{\"color\":\"rgba(141,160,203,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null},{\"fillcolor\":\"rgba(231,138,195,0.5)\",\"x\":[8.74173036,17.366060399999999,17.266945499999999,13.243539500000001,29.1494085,16.176470599999998,14.1576729,11.4336901,24.2252343,11.323289000000001,13.912174800000001,17.784991999999999,19.689345400000001,15.763120799999999,13.0905778,11.6793426,14.258027,25.085388200000001,13.475094,18.188161900000001,31.594057299999999,18.7380268,21.077387399999999,11.8740898,32.204593000000003,16.4765579,14.9341366,31.627997700000002,31.956731999999999,13.5143719,29.788310899999999,24.4504965,16.0309861,10.5537945,15.258975100000001,12.311271100000001,12.85435,9.3307086600000009,13.4497842,10.984531799999999,13.8431503,16.771139000000002,23.682805500000001,12.208368399999999,18.179368499999999,13.3233757,18.8616572,23.550428499999999,13.3788082,18.175797299999999,15.0270375,23.702606500000002,11.677498,14.1000841,19.2777119,10.513927000000001,26.550480400000001,11.3808463,12.105140499999999,15.3234543,8.8458880400000002,19.338308999999999,11.4884393,10.1076709,13.0943276,12.444532799999999,21.881875099999998,11.233264,15.7080088,16.7975615,14.115657499999999,16.282409699999999,13.777260800000001,15.6221022,17.376210499999999,18.989604100000001,24.733139300000001,15.5998451,13.083417900000001,16.9825108,15.1100169,7.9132557800000001,24.419351800000001,19.009675600000001,18.445430900000002,14.498714700000001,29.095110200000001,13.710744399999999],\"type\":\"box\",\"orientation\":\"h\",\"name\":\"OH\",\"marker\":{\"color\":\"rgba(231,138,195,1)\",\"line\":{\"color\":\"rgba(231,138,195,1)\"}},\"line\":{\"color\":\"rgba(231,138,195,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null},{\"fillcolor\":\"rgba(166,216,84,0.5)\",\"x\":[12.427491699999999,18.320015600000001,19.425146999999999,25.822892299999999,26.2931785,17.9412424,13.6760641,19.780324700000001,18.153336299999999,13.846310000000001,20.852312999999999,16.599468999999999,43.626450900000002,15.925463799999999,22.488341299999998,20.994087199999999,26.2870159,29.8544673,15.603532899999999,20.8318653,13.5699001,21.680384100000001,19.875177600000001,17.305067099999999,20.483250999999999,18.731729300000001,15.324074100000001,22.165632299999999,14.3912738,20.328242199999998,14.390958599999999,30.4885126,16.4620371,13.631794599999999,17.441794300000002,19.071148099999998,21.877375000000001,15.4275441,14.0016473,7.3361082199999998,25.355833700000002,17.372421299999999,13.4311741,21.9338239,24.857825099999999,37.419779800000001,15.749235499999999,24.464372000000001,18.5920497,24.634327500000001,15.527175,22.906513100000002,17.499336799999998,19.906440199999999,16.7559769,28.588086700000002,19.833921,17.9479167,14.8077953,20.837192600000002,15.0650908,17.551657899999999,18.942131100000001,19.2118611,23.1569039,19.016887199999999,23.3909001,35.396784099999998,16.549868799999999,15.064584,24.995503599999999,21.666381699999999],\"type\":\"box\",\"orientation\":\"h\",\"name\":\"WI\",\"marker\":{\"color\":\"rgba(166,216,84,1)\",\"line\":{\"color\":\"rgba(166,216,84,1)\"}},\"line\":{\"color\":\"rgba(166,216,84,1)\"},\"xaxis\":\"x\",\"yaxis\":\"y\",\"frame\":null}],\"highlight\":{\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.20000000000000001,\"selected\":{\"opacity\":1},\"debounce\":0},\"shinyEvents\":[\"plotly_hover\",\"plotly_click\",\"plotly_selected\",\"plotly_relayout\",\"plotly_brushed\",\"plotly_brushing\",\"plotly_clickannotation\",\"plotly_doubleclick\",\"plotly_deselect\",\"plotly_afterplot\",\"plotly_sunburstclick\"],\"base_url\":\"https://plot.ly\"},\"evals\":[],\"jsHooks\":[]}</script>\n",
-       "\t</body>\n",
-       "</html>\n"
-      ],
-      "text/plain": [
-       "HTML widgets cannot be represented in plain text (need html)"
-      ]
-     },
-     "metadata": {
-      "text/html": {
-       "isolated": true
-      }
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "library(plotly)\n",
-    "fig <- plot_ly(midwest, x = ~percollege, color = ~state, type = \"box\")\n",
-    "fig"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "03b36f29-f1e1-4042-be36-bf3e757467e4",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "R",
-   "language": "R",
-   "name": "ir"
-  },
-  "language_info": {
-   "codemirror_mode": "r",
-   "file_extension": ".r",
-   "mimetype": "text/x-r-source",
-   "name": "R",
-   "pygments_lexer": "r",
-   "version": "4.3.2"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/ruby-checkpoint.ipynb b/examples/.ipynb_checkpoints/ruby-checkpoint.ipynb
deleted file mode 100644
index e60837877c904be643bf42d16461aa24fa6bfafd..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/ruby-checkpoint.ipynb
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "6c3ac9b7-2911-4f70-bdbf-ed817732b9e5",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\"2.7.4\""
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "RUBY_VERSION"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "239402df-9e13-41a7-970d-095042da1a1e",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World\n"
-     ]
-    }
-   ],
-   "source": [
-    "puts 'Hello World'"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b7b2f0fb-ea1e-4daf-80a2-8e0fcad3c1b9",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Ruby 2.7.4",
-   "language": "ruby",
-   "name": "ruby"
-  },
-  "language_info": {
-   "file_extension": ".rb",
-   "mimetype": "application/x-ruby",
-   "name": "ruby",
-   "version": "2.7.4"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/rust-checkpoint.ipynb b/examples/.ipynb_checkpoints/rust-checkpoint.ipynb
deleted file mode 100644
index f14ad6430d06fc2349bec5da125b24426a9152a2..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/rust-checkpoint.ipynb
+++ /dev/null
@@ -1,179 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "5ff0d84f-c939-402d-9ebc-456af7983d68",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "rustc 1.73.0 (cc66ad468 2023-10-03)\n",
-      "rustup 1.25.1 (bb60b1e89 2022-07-12)\n",
-      "cargo 1.73.0 (9c4383fb5 2023-08-26)\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "use std::process::Command;\n",
-    "\n",
-    "let rustc = Command::new(\"rustc\").arg(\"--version\").output().expect(\"failed to get rastc version\");\n",
-    "let rustup = Command::new(\"rustup\").arg(\"--version\").output().expect(\"failed to get rustup version\");\n",
-    "let cargo = Command::new(\"cargo\").arg(\"--version\").output().expect(\"failed to get cargo version\");\n",
-    "println!(\"{rustc}{rustup}{cargo}\", \n",
-    "    rustc=String::from_utf8_lossy(&rustc.stdout),\n",
-    "    rustup=String::from_utf8_lossy(&rustup.stdout),\n",
-    "    cargo=String::from_utf8_lossy(&cargo.stdout));"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "e96884d5-c704-405c-94d3-f8522f23b889",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World!\n"
-     ]
-    }
-   ],
-   "source": [
-    "println!(\"Hello World!\");"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "id": "771aab89-6e77-478b-b919-14b8785d5ffb",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "<tr><td>:allow_static_linking</td><td>Set whether to allow static linking of dependencies (0/1)</td></tr>\n",
-       "<tr><td>:cache</td><td>Set cache size in MiB, or 0 to disable.</td></tr>\n",
-       "<tr><td>:clear</td><td>Clear all state, keeping compilation cache</td></tr>\n",
-       "<tr><td>:clear_cache</td><td>Clear the cache used by the :cache command</td></tr>\n",
-       "<tr><td>:dep</td><td>Add dependency. e.g. :dep regex = \"1.0\"</td></tr>\n",
-       "<tr><td>:doc</td><td>show the documentation of a variable, keyword, type or module</td></tr>\n",
-       "<tr><td>:efmt</td><td>Set the formatter for errors returned by ?</td></tr>\n",
-       "<tr><td>:explain</td><td>Print explanation of last error</td></tr>\n",
-       "<tr><td>:fmt</td><td>Set output formatter (default: {:?})</td></tr>\n",
-       "<tr><td>:help</td><td>Print command help</td></tr>\n",
-       "<tr><td>:internal_debug</td><td>Toggle various internal debugging code</td></tr>\n",
-       "<tr><td>:last_compile_dir</td><td>Print the directory in which we last compiled</td></tr>\n",
-       "<tr><td>:last_error_json</td><td>Print the last compilation error as JSON (for debugging)</td></tr>\n",
-       "<tr><td>:linker</td><td>Set/print linker. Supported: system, lld, mold</td></tr>\n",
-       "<tr><td>:load_config</td><td>Reloads startup configuration files. Accepts optional flag `--quiet` to suppress logging.</td></tr>\n",
-       "<tr><td>:offline</td><td>Set offline mode when invoking cargo (0/1)</td></tr>\n",
-       "<tr><td>:opt</td><td>Set optimization level (0/1/2)</td></tr>\n",
-       "<tr><td>:preserve_vars_on_panic</td><td>Try to keep vars on panic (0/1)</td></tr>\n",
-       "<tr><td>:quit</td><td>Quit evaluation and exit</td></tr>\n",
-       "<tr><td>:sccache</td><td>Set whether to use sccache (0/1).</td></tr>\n",
-       "<tr><td>:show_deps</td><td>Show the current dependencies</td></tr>\n",
-       "<tr><td>:t</td><td>Short version of :type</td></tr>\n",
-       "<tr><td>:time_passes</td><td>Toggle printing of rustc pass times (requires nightly)</td></tr>\n",
-       "<tr><td>:timing</td><td>Toggle printing of how long evaluations take</td></tr>\n",
-       "<tr><td>:toolchain</td><td>Set which toolchain to use (e.g. nightly)</td></tr>\n",
-       "<tr><td>:type</td><td>Show variable type</td></tr>\n",
-       "<tr><td>:types</td><td>Toggle printing of types</td></tr>\n",
-       "<tr><td>:vars</td><td>List bound variables and their types</td></tr>\n",
-       "<tr><td>:version</td><td>Print Evcxr version</td></tr>\n",
-       "</table>\n"
-      ],
-      "text/plain": [
-       ":allow_static_linking Set whether to allow static linking of dependencies (0/1)\n",
-       ":cache            Set cache size in MiB, or 0 to disable.\n",
-       ":clear            Clear all state, keeping compilation cache\n",
-       ":clear_cache      Clear the cache used by the :cache command\n",
-       ":dep              Add dependency. e.g. :dep regex = \"1.0\"\n",
-       ":doc              show the documentation of a variable, keyword, type or module\n",
-       ":efmt             Set the formatter for errors returned by ?\n",
-       ":explain          Print explanation of last error\n",
-       ":fmt              Set output formatter (default: {:?})\n",
-       ":help             Print command help\n",
-       ":internal_debug   Toggle various internal debugging code\n",
-       ":last_compile_dir Print the directory in which we last compiled\n",
-       ":last_error_json  Print the last compilation error as JSON (for debugging)\n",
-       ":linker           Set/print linker. Supported: system, lld, mold\n",
-       ":load_config      Reloads startup configuration files. Accepts optional flag `--quiet` to suppress logging.\n",
-       ":offline          Set offline mode when invoking cargo (0/1)\n",
-       ":opt              Set optimization level (0/1/2)\n",
-       ":preserve_vars_on_panic Try to keep vars on panic (0/1)\n",
-       ":quit             Quit evaluation and exit\n",
-       ":sccache          Set whether to use sccache (0/1).\n",
-       ":show_deps        Show the current dependencies\n",
-       ":t                Short version of :type\n",
-       ":time_passes      Toggle printing of rustc pass times (requires nightly)\n",
-       ":timing           Toggle printing of how long evaluations take\n",
-       ":toolchain        Set which toolchain to use (e.g. nightly)\n",
-       ":type             Show variable type\n",
-       ":types            Toggle printing of types\n",
-       ":vars             List bound variables and their types\n",
-       ":version          Print Evcxr version\n"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    ":help"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "id": "488d3044-0c81-498d-a767-cba54f8e00db",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0.16.0\n"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    ":version"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "70924158-a6a8-4841-b37f-242763de537e",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Rust",
-   "language": "rust",
-   "name": "rust"
-  },
-  "language_info": {
-   "codemirror_mode": "rust",
-   "file_extension": ".rs",
-   "mimetype": "text/rust",
-   "name": "Rust",
-   "pygment_lexer": "rust",
-   "version": ""
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/scala-checkpoint.ipynb b/examples/.ipynb_checkpoints/scala-checkpoint.ipynb
deleted file mode 100644
index 1352c844306cb5cb3cfb860cc6ba1ab70a3dc223..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/scala-checkpoint.ipynb
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "907fe0db-5a13-445c-a186-770ca797a2bd",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\u001b[36mres1\u001b[39m: \u001b[32mString\u001b[39m = \u001b[32m\"2.13.12\"\u001b[39m"
-      ]
-     },
-     "execution_count": 1,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "scala.util.Properties.versionNumberString"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "ca79939c-4145-4e3b-92c0-94737c6b3a8f",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "HelloWorld\n"
-     ]
-    }
-   ],
-   "source": [
-    "println(\"HelloWorld\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7d44169b-c0c9-4b58-a4bf-abe390859299",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Scala",
-   "language": "scala",
-   "name": "scala"
-  },
-  "language_info": {
-   "codemirror_mode": "text/x-scala",
-   "file_extension": ".sc",
-   "mimetype": "text/x-scala",
-   "name": "scala",
-   "nbconvert_exporter": "script",
-   "version": "2.13.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/.ipynb_checkpoints/typescript-checkpoint.ipynb b/examples/.ipynb_checkpoints/typescript-checkpoint.ipynb
deleted file mode 100644
index bf21be5c6eb9d827b1d845ed766e9a2813d9df77..0000000000000000000000000000000000000000
--- a/examples/.ipynb_checkpoints/typescript-checkpoint.ipynb
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "9a2981cc-7e10-4a34-83ce-81885ce3a052",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "{\n",
-      "  node: \u001b[32m'18.10.0'\u001b[39m,\n",
-      "  v8: \u001b[32m'10.2.154.15-node.12'\u001b[39m,\n",
-      "  uv: \u001b[32m'1.43.0'\u001b[39m,\n",
-      "  zlib: \u001b[32m'1.2.11'\u001b[39m,\n",
-      "  brotli: \u001b[32m'1.0.9'\u001b[39m,\n",
-      "  ares: \u001b[32m'1.18.1'\u001b[39m,\n",
-      "  modules: \u001b[32m'108'\u001b[39m,\n",
-      "  nghttp2: \u001b[32m'1.47.0'\u001b[39m,\n",
-      "  napi: \u001b[32m'8'\u001b[39m,\n",
-      "  llhttp: \u001b[32m'6.0.10'\u001b[39m,\n",
-      "  openssl: \u001b[32m'3.0.5+quic'\u001b[39m,\n",
-      "  cldr: \u001b[32m'41.0'\u001b[39m,\n",
-      "  icu: \u001b[32m'71.1'\u001b[39m,\n",
-      "  tz: \u001b[32m'2022b'\u001b[39m,\n",
-      "  unicode: \u001b[32m'14.0'\u001b[39m,\n",
-      "  ngtcp2: \u001b[32m'0.8.1'\u001b[39m,\n",
-      "  nghttp3: \u001b[32m'0.7.0'\u001b[39m\n",
-      "}\n"
-     ]
-    }
-   ],
-   "source": [
-    "process.versions"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "84c10809-bc90-489e-af21-3c7b9f1992a2",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": []
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Version 5.2.2\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "const { execSync } = require('child_process')\n",
-    "\n",
-    "const stdout = execSync('tsc -v')\n",
-    "stdout.toString()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "e36dcbd0-cb60-4026-81e6-66c365a8f109",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello, World!\n"
-     ]
-    }
-   ],
-   "source": [
-    "let msg: string = [\"Hello\", \"World!\"].join(\", \");\n",
-    "msg"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "4fa85a82-1d1a-4325-b966-70de9a230c74",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "TypeScript",
-   "language": "typescript",
-   "name": "tslab"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "mode": "typescript",
-    "name": "javascript",
-    "typescript": true
-   },
-   "file_extension": ".ts",
-   "mimetype": "text/typescript",
-   "name": "typescript",
-   "version": "3.7.2"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}